From f132183c1d683cb08d5a83bf3e7beca69ab3fc53 Mon Sep 17 00:00:00 2001 From: Dym Sohin Date: Fri, 6 Oct 2023 23:12:53 +0200 Subject: [PATCH] init --- 017-erosion/README.markdown | 5 + 017-erosion/dist/index.html | 17 + 017-erosion/dist/script.js | 364 + 017-erosion/license.txt | 8 + 017-erosion/src/index.html | 0 017-erosion/src/script.babel | 366 + 1-codevember-2017galaxy/README.markdown | 4 + 1-codevember-2017galaxy/dist/index.html | 18 + 1-codevember-2017galaxy/dist/script.js | 139 + 1-codevember-2017galaxy/dist/style.css | 4 + 1-codevember-2017galaxy/license.txt | 8 + 1-codevember-2017galaxy/src/index.html | 1 + 1-codevember-2017galaxy/src/script.js | 139 + 1-codevember-2017galaxy/src/style.scss | 4 + 1-element-css-spinners/README.markdown | 4 + 1-element-css-spinners/dist/index.html | 55 + 1-element-css-spinners/dist/style.css | 310 + 1-element-css-spinners/license.txt | 13 + 1-element-css-spinners/src/index.pug | 5 + 1-element-css-spinners/src/style.scss | 217 + 10-000-codepen-followers/README.markdown | 5 + 10-000-codepen-followers/dist/index.html | 73 + 10-000-codepen-followers/dist/script.js | 244 + 10-000-codepen-followers/dist/style.css | 23 + 10-000-codepen-followers/license.txt | 8 + 10-000-codepen-followers/src/index.html | 55 + 10-000-codepen-followers/src/script.js | 244 + 10-000-codepen-followers/src/style.css | 23 + 10print-svg/README.markdown | 5 + 10print-svg/dist/index.html | 17 + 10print-svg/dist/script.js | 42 + 10print-svg/dist/style.css | 26 + 10print-svg/license.txt | 8 + 10print-svg/src/index.html | 0 10print-svg/src/script.babel | 42 + 10print-svg/src/style.scss | 25 + 141-in-2021-javascript-canvas/README.markdown | 5 + 141-in-2021-javascript-canvas/dist/index.html | 16 + 141-in-2021-javascript-canvas/dist/script.js | 82 + 141-in-2021-javascript-canvas/dist/style.css | 5 + 141-in-2021-javascript-canvas/license.txt | 8 + 141-in-2021-javascript-canvas/src/index.html | 0 141-in-2021-javascript-canvas/src/script.js | 82 + 141-in-2021-javascript-canvas/src/style.css | 5 + 20/README.markdown | 8 + 20/dist/index.html | 17 + 20/dist/script.js | 156 + 20/dist/style.css | 3 + 20/license.txt | 8 + 20/src/index.html | 0 20/src/script.js | 156 + 20/src/style.css | 3 + 2021-to-2022/README.markdown | 5 + 2021-to-2022/dist/index.html | 49 + 2021-to-2022/dist/style.css | 145 + 2021-to-2022/license.txt | 8 + 2021-to-2022/src/index.html | 34 + 2021-to-2022/src/style.css | 145 + 31-taint/README.markdown | 7 + 31-taint/dist/index.html | 17 + 31-taint/dist/script.js | 134 + 31-taint/dist/style.css | 3 + 31-taint/license.txt | 8 + 31-taint/src/index.html | 0 31-taint/src/script.js | 134 + 31-taint/src/style.css | 3 + 3d-css-kinetic-type-poster/README.markdown | 6 + 3d-css-kinetic-type-poster/dist/index.html | 34 + 3d-css-kinetic-type-poster/dist/script.js | 167 + 3d-css-kinetic-type-poster/dist/style.css | 187 + 3d-css-kinetic-type-poster/license.txt | 8 + 3d-css-kinetic-type-poster/src/index.html | 18 + 3d-css-kinetic-type-poster/src/script.js | 167 + 3d-css-kinetic-type-poster/src/style.scss | 168 + .../README.markdown | 5 + .../dist/index.html | 291 + .../dist/script.js | 16 + .../dist/style.css | 777 + .../license.txt | 8 + .../src/index.pug | 73 + .../src/script.babel | 17 + .../src/style.styl | 668 + 3d-css-sphere/README.markdown | 5 + 3d-css-sphere/dist/index.html | 45 + 3d-css-sphere/dist/style.css | 162 + 3d-css-sphere/license.txt | 8 + 3d-css-sphere/src/index.html | 29 + 3d-css-sphere/src/style.css | 162 + 3d-d20-die-with-pure-css/README.markdown | 6 + 3d-d20-die-with-pure-css/dist/index.html | 66 + 3d-d20-die-with-pure-css/dist/script.js | 46 + 3d-d20-die-with-pure-css/dist/style.css | 302 + 3d-d20-die-with-pure-css/license.txt | 13 + 3d-d20-die-with-pure-css/src/index.html | 50 + 3d-d20-die-with-pure-css/src/script.js | 46 + 3d-d20-die-with-pure-css/src/style.scss | 188 + 3d-dashboardspline/README.markdown | 5 + 3d-dashboardspline/dist/index.html | 16 + 3d-dashboardspline/dist/style.css | 5 + 3d-dashboardspline/license.txt | 8 + 3d-dashboardspline/src/index.html | 1 + 3d-dashboardspline/src/style.scss | 5 + 3d-drag-out-menu-with-guitar/README.markdown | 4 + 3d-drag-out-menu-with-guitar/dist/index.html | 153 + 3d-drag-out-menu-with-guitar/dist/script.js | 327 + 3d-drag-out-menu-with-guitar/dist/style.css | 746 + 3d-drag-out-menu-with-guitar/license.txt | 13 + 3d-drag-out-menu-with-guitar/src/index.haml | 30 + 3d-drag-out-menu-with-guitar/src/script.babel | 327 + 3d-drag-out-menu-with-guitar/src/style.scss | 330 + 3d-ish-hamburger-menu/README.markdown | 6 + 3d-ish-hamburger-menu/dist/index.html | 25 + 3d-ish-hamburger-menu/dist/style.css | 251 + 3d-ish-hamburger-menu/license.txt | 13 + 3d-ish-hamburger-menu/src/index.html | 11 + 3d-ish-hamburger-menu/src/style.scss | 328 + 3d-polaroid-world/README.markdown | 20 + 3d-polaroid-world/dist/index.html | 170 + 3d-polaroid-world/dist/script.js | 342 + 3d-polaroid-world/dist/style.css | 94 + 3d-polaroid-world/license.txt | 8 + 3d-polaroid-world/src/index.html | 154 + 3d-polaroid-world/src/script.babel | 342 + 3d-polaroid-world/src/style.scss | 103 + 3d-spaceshipgsap/README.markdown | 5 + 3d-spaceshipgsap/dist/index.html | 363 + 3d-spaceshipgsap/dist/script.js | 124 + 3d-spaceshipgsap/dist/style.css | 1619 + 3d-spaceshipgsap/license.txt | 8 + 3d-spaceshipgsap/src/index.pug | 169 + 3d-spaceshipgsap/src/script.js | 124 + 3d-spaceshipgsap/src/style.scss | 943 + 3d-xylophone/README.markdown | 5 + 3d-xylophone/dist/index.html | 20 + 3d-xylophone/dist/script.js | 68 + 3d-xylophone/dist/style.css | 12 + 3d-xylophone/license.txt | 8 + 3d-xylophone/src/index.html | 4 + 3d-xylophone/src/script.js | 68 + 3d-xylophone/src/style.css | 12 + .../README.markdown | 5 + .../dist/index.html | 94 + .../dist/style.css | 54 + .../license.txt | 8 + .../src/index.html | 80 + .../src/style.scss | 36 + 60-gradient-morphing-blob/README.markdown | 5 + 60-gradient-morphing-blob/dist/index.html | 25 + 60-gradient-morphing-blob/dist/script.js | 89 + 60-gradient-morphing-blob/dist/style.css | 37 + 60-gradient-morphing-blob/license.txt | 8 + 60-gradient-morphing-blob/src/index.html | 10 + 60-gradient-morphing-blob/src/script.js | 89 + 60-gradient-morphing-blob/src/style.css | 37 + .../README.markdown | 4 + .../dist/index.html | 369 + .../dist/style.css | 2212 + .../license.txt | 13 + .../src/index.haml | 29 + .../src/style.scss | 553 + CodePen_Export_WKdodx/README.markdown | 5 + CodePen_Export_WKdodx/dist/index.html | 156 + CodePen_Export_WKdodx/dist/style.css | 43 + CodePen_Export_WKdodx/license.txt | 8 + CodePen_Export_WKdodx/src/index.html | 142 + CodePen_Export_WKdodx/src/style.css | 43 + a-css-only-carousel-slider/README.markdown | 17 + a-css-only-carousel-slider/dist/index.html | 79 + a-css-only-carousel-slider/dist/style.css | 228 + a-css-only-carousel-slider/license.txt | 8 + a-css-only-carousel-slider/src/index.html | 65 + a-css-only-carousel-slider/src/style.css | 228 + a-fake-dream/README.markdown | 5 + a-fake-dream/dist/index.html | 22 + a-fake-dream/dist/script.js | 117 + a-fake-dream/dist/style.css | 108 + a-fake-dream/license.txt | 8 + a-fake-dream/src/index.html | 6 + a-fake-dream/src/script.babel | 117 + a-fake-dream/src/style.scss | 104 + .../README.markdown | 5 + .../dist/index.html | 19 + .../dist/script.js | 197 + .../dist/style.css | 10 + .../license.txt | 8 + .../src/index.html | 4 + .../src/script.js | 197 + .../src/style.css | 10 + .../README.markdown | 17 + .../dist/index.html | 214 + .../dist/script.js | 5 + .../dist/style.css | 49364 ++++++++++++++++ .../license.txt | 8 + .../src/index.html | 199 + .../src/script.js | 5 + .../src/style.scss | 7160 +++ .../README.markdown | 16 + .../dist/index.html | 16 + .../dist/script.js | 86 + .../dist/style.css | 8 + .../license.txt | 8 + .../src/index.html | 1 + .../src/script.js | 86 + .../src/style.css | 8 + academy/README.markdown | 5 + academy/dist/index.html | 23 + academy/dist/script.js | 168 + academy/dist/style.css | 45 + academy/license.txt | 8 + academy/src/index.html | 7 + academy/src/script.js | 169 + academy/src/style.scss | 52 + accessibility-to-a11y/README.markdown | 6 + accessibility-to-a11y/dist/index.html | 16 + accessibility-to-a11y/dist/style.css | 201 + accessibility-to-a11y/license.txt | 13 + accessibility-to-a11y/src/index.html | 3 + accessibility-to-a11y/src/style.scss | 95 + acrobatic-preloader/README.markdown | 5 + acrobatic-preloader/dist/index.html | 32 + acrobatic-preloader/dist/style.css | 98 + acrobatic-preloader/license.txt | 8 + acrobatic-preloader/src/index.html | 18 + acrobatic-preloader/src/style.css | 98 + .../README.markdown | 5 + .../dist/index.html | 27 + .../dist/script.js | 51 + .../dist/style.css | 64 + .../license.txt | 8 + .../src/index.html | 12 + .../src/script.js | 51 + .../src/style.css | 60 + animated-atom-svg/README.markdown | 4 + animated-atom-svg/dist/index.html | 48 + animated-atom-svg/dist/script.js | 5 + animated-atom-svg/dist/style.css | 236 + animated-atom-svg/license.txt | 8 + animated-atom-svg/src/index.html | 33 + animated-atom-svg/src/script.js | 5 + animated-atom-svg/src/style.scss | 109 + .../README.markdown | 5 + .../dist/index.html | 24 + .../dist/script.js | 5 + .../dist/style.css | 230 + .../license.txt | 8 + .../src/index.html | 9 + .../src/script.js | 5 + .../src/style.css | 230 + .../README.markdown | 5 + .../dist/index.html | 17 + .../dist/script.js | 305 + .../dist/style.css | 19 + .../license.txt | 8 + .../src/index.html | 2 + .../src/script.babel | 305 + .../src/style.css | 19 + animated-striped-gradient-button/LICENSE.txt | 21 + animated-striped-gradient-button/README.md | 5 + .../dist/index.html | 15 + .../dist/style.css | 89 + .../src/index.html | 1 + .../src/style.scss | 116 + animated-verbs-ii/README.markdown | 6 + animated-verbs-ii/dist/index.html | 27 + animated-verbs-ii/dist/mwgbqon.css | 227 + animated-verbs-ii/dist/script.js | 1 + animated-verbs-ii/dist/style.css | 441 + animated-verbs-ii/license.txt | 17 + animated-verbs-ii/src/index.html | 8 + animated-verbs-ii/src/mwgbqon.css | 227 + animated-verbs-ii/src/script.js | 1 + animated-verbs-ii/src/style.scss | 222 + .../LICENSE.txt | 21 + .../README.md | 5 + .../dist/index.html | 129 + .../dist/script.js | 317 + .../dist/style.css | 137 + .../src/index.html | 110 + .../src/script.js | 319 + .../src/style.css | 137 + .../README.markdown | 15 + .../dist/index.html | 21 + another-branching-strategy-svg/dist/script.js | 175 + another-branching-strategy-svg/dist/style.css | 13 + another-branching-strategy-svg/license.txt | 8 + another-branching-strategy-svg/src/index.html | 6 + another-branching-strategy-svg/src/script.js | 175 + another-branching-strategy-svg/src/style.css | 13 + apart/README.markdown | 5 + apart/dist/index.html | 16 + apart/dist/script.js | 166 + apart/dist/style.css | 4 + apart/license.txt | 8 + apart/src/index.html | 0 apart/src/script.js | 166 + apart/src/style.css | 4 + apple-inspired-pride-clock/LICENSE.txt | 21 + apple-inspired-pride-clock/README.md | 4 + apple-inspired-pride-clock/dist/index.html | 24 + apple-inspired-pride-clock/dist/script.js | 7 + apple-inspired-pride-clock/dist/style.css | 73 + apple-inspired-pride-clock/src/index.html | 9 + apple-inspired-pride-clock/src/script.js | 7 + apple-inspired-pride-clock/src/style.scss | 94 + apple-keynote-animation/README.markdown | 5 + apple-keynote-animation/dist/index.html | 20 + apple-keynote-animation/dist/script.js | 145 + apple-keynote-animation/dist/style.css | 25 + apple-keynote-animation/license.txt | 8 + apple-keynote-animation/src/index.html | 5 + apple-keynote-animation/src/script.js | 145 + apple-keynote-animation/src/style.scss | 23 + art-gallery/README.markdown | 6 + art-gallery/dist/index.html | 28 + art-gallery/dist/script.js | 516 + art-gallery/dist/style.css | 139 + art-gallery/license.txt | 8 + art-gallery/src/index.html | 12 + art-gallery/src/script.js | 516 + art-gallery/src/style.css | 139 + art-of-noise-29/README.markdown | 5 + art-of-noise-29/dist/index.html | 24 + art-of-noise-29/dist/script.js | 149 + art-of-noise-29/dist/style.css | 97 + art-of-noise-29/license.txt | 8 + art-of-noise-29/src/index.html | 6 + art-of-noise-29/src/script.js | 149 + art-of-noise-29/src/style.scss | 114 + ascii-corridor/README.markdown | 5 + ascii-corridor/dist/index.html | 17 + ascii-corridor/dist/script.js | 136 + ascii-corridor/dist/style.css | 22 + ascii-corridor/license.txt | 8 + ascii-corridor/src/index.html | 1 + ascii-corridor/src/script.js | 136 + ascii-corridor/src/style.sass | 21 + background-patterns/README.markdown | 5 + background-patterns/dist/index.html | 365 + background-patterns/dist/script.js | 6 + background-patterns/dist/style.css | 82 + background-patterns/license.txt | 8 + background-patterns/src/index.html | 350 + background-patterns/src/script.js | 6 + background-patterns/src/style.css | 82 + balanced-truncation/LICENSE.txt | 21 + balanced-truncation/README.md | 4 + balanced-truncation/dist/index.html | 16 + balanced-truncation/dist/style.css | 41 + balanced-truncation/src/index.html | 2 + balanced-truncation/src/style.css | 41 + banksyvalentine-s-day/README.markdown | 4 + banksyvalentine-s-day/dist/index.html | 16 + banksyvalentine-s-day/dist/script.js | 231 + banksyvalentine-s-day/dist/style.css | 19 + banksyvalentine-s-day/license.txt | 8 + banksyvalentine-s-day/src/index.html | 0 banksyvalentine-s-day/src/script.js | 231 + banksyvalentine-s-day/src/style.css | 19 + .../README.markdown | 6 + .../dist/index.html | 17 + .../dist/script.js | 123 + .../dist/style.css | 21 + .../license.txt | 8 + .../src/index.pug | 1 + .../src/script.js | 123 + .../src/style.styl | 19 + .../README.markdown | 5 + .../dist/index.html | 16 + .../dist/script.js | 237 + .../dist/style.css | 48 + .../license.txt | 8 + .../src/index.html | 1 + .../src/script.js | 237 + .../src/style.css | 48 + bbc13-minutes-to-the-moon/README.markdown | 7 + bbc13-minutes-to-the-moon/dist/index.html | 67 + bbc13-minutes-to-the-moon/dist/script.js | 99 + bbc13-minutes-to-the-moon/dist/style.css | 83 + bbc13-minutes-to-the-moon/license.txt | 8 + bbc13-minutes-to-the-moon/src/index.html | 51 + bbc13-minutes-to-the-moon/src/script.js | 99 + bbc13-minutes-to-the-moon/src/style.scss | 80 + beating-heart/README.markdown | 5 + beating-heart/dist/index.html | 21 + beating-heart/dist/script.js | 130 + beating-heart/dist/style.css | 5 + beating-heart/license.txt | 8 + beating-heart/src/index.html | 0 beating-heart/src/script.js | 130 + beating-heart/src/style.scss | 5 + best-css-3d-cuboid-ever/README.markdown | 15 + best-css-3d-cuboid-ever/dist/index.html | 24 + best-css-3d-cuboid-ever/dist/script.js | 11 + best-css-3d-cuboid-ever/dist/style.css | 228 + best-css-3d-cuboid-ever/dist/vyegypg.css | 146 + best-css-3d-cuboid-ever/license.txt | 8 + best-css-3d-cuboid-ever/src/index.pug | 7 + best-css-3d-cuboid-ever/src/script.js | 11 + best-css-3d-cuboid-ever/src/style.scss | 131 + best-css-3d-cuboid-ever/src/vyegypg.css | 146 + .../README.markdown | 5 + .../dist/index.html | 91 + .../dist/script.js | 23 + .../dist/style.css | 1132 + .../license.txt | 8 + .../src/index.pug | 8 + .../src/script.babel | 23 + .../src/style.scss | 1537 + .../LICENSE.txt | 22 + .../README.md | 4 + .../dist/index.html | 27 + .../dist/script.js | 3 + .../dist/style.css | 92 + .../src/index.html | 12 + .../src/script.js | 3 + .../src/style.css | 92 + blob-study/README.markdown | 5 + blob-study/dist/apxlmx.js | 726 + blob-study/dist/index.html | 219 + blob-study/dist/script.js | 916 + blob-study/dist/style.css | 7 + blob-study/license.txt | 8 + blob-study/src/apxlmx.js | 726 + blob-study/src/index.html | 204 + blob-study/src/script.babel | 191 + blob-study/src/style.css | 7 + .../README.markdown | 5 + .../dist/index.html | 1442 + .../dist/script.js | 54 + .../dist/style.css | 19 + .../license.txt | 8 + .../src/index.html | 1427 + .../src/script.js | 54 + .../src/style.scss | 18 + blobhow-to/README.markdown | 5 + blobhow-to/dist/index.html | 29 + blobhow-to/dist/script.js | 249 + blobhow-to/dist/style.css | 113 + blobhow-to/license.txt | 8 + blobhow-to/src/index.html | 10 + blobhow-to/src/script.js | 249 + blobhow-to/src/style.scss | 81 + blobs/README.markdown | 4 + blobs/dist/index.html | 222 + blobs/dist/script.js | 179 + blobs/dist/style.css | 9 + blobs/license.txt | 8 + blobs/src/index.html | 204 + blobs/src/script.js | 179 + blobs/src/style.css | 9 + bloom/README.markdown | 6 + bloom/dist/index.html | 24 + bloom/dist/script.js | 99 + bloom/dist/style.css | 17 + bloom/license.txt | 8 + bloom/src/index.html | 8 + bloom/src/script.js | 99 + bloom/src/style.scss | 16 + bongo-cat-codes-2jamming/README.markdown | 7 + bongo-cat-codes-2jamming/dist/index.html | 214 + bongo-cat-codes-2jamming/dist/script.js | 114 + bongo-cat-codes-2jamming/dist/style.css | 69 + bongo-cat-codes-2jamming/license.txt | 8 + bongo-cat-codes-2jamming/src/index.pug | 157 + bongo-cat-codes-2jamming/src/script.babel | 114 + bongo-cat-codes-2jamming/src/style.scss | 76 + bongo-cat-codes/README.markdown | 9 + bongo-cat-codes/dist/index.html | 144 + bongo-cat-codes/dist/script.js | 6 + bongo-cat-codes/dist/style.css | 364 + bongo-cat-codes/license.txt | 8 + bongo-cat-codes/src/index.pug | 96 + bongo-cat-codes/src/script.babel | 6 + bongo-cat-codes/src/style.scss | 115 + book-store-ui/LICENSE.txt | 21 + book-store-ui/README.markdown | 7 + book-store-ui/README.md | 6 + book-store-ui/dist/index.html | 540 + book-store-ui/dist/style.css | 762 + book-store-ui/license.txt | 8 + book-store-ui/src/index.html | 525 + book-store-ui/src/style.scss | 787 + .../README.markdown | 5 + .../dist/index.html | 45 + .../dist/script.js | 44 + .../dist/style.css | 104 + .../license.txt | 8 + .../src/index.pug | 50 + .../src/script.babel | 44 + .../src/style.styl | 77 + box-model/README.markdown | 5 + box-model/dist/index.html | 31 + box-model/dist/script.js | 7 + box-model/dist/style.css | 127 + box-model/license.txt | 8 + box-model/src/index.html | 15 + box-model/src/script.babel | 7 + box-model/src/style.css | 130 + .../README.markdown | 4 + .../dist/index.html | 89 + .../dist/style.css | 282 + .../license.txt | 13 + .../src/index.html | 75 + .../src/style.scss | 190 + breathe/README.markdown | 5 + breathe/dist/index.html | 27 + breathe/dist/script.js | 144 + breathe/dist/style.css | 42 + breathe/license.txt | 8 + breathe/src/index.html | 11 + breathe/src/script.babel | 144 + breathe/src/style.scss | 42 + bricks-darkcss-doodle/README.markdown | 4 + bricks-darkcss-doodle/dist/index.html | 90 + bricks-darkcss-doodle/dist/script.js | 6 + bricks-darkcss-doodle/dist/style.css | 16 + bricks-darkcss-doodle/license.txt | 13 + bricks-darkcss-doodle/src/index.html | 74 + bricks-darkcss-doodle/src/script.babel | 6 + bricks-darkcss-doodle/src/style.scss | 16 + brutalism/README.markdown | 5 + brutalism/dist/index.html | 55 + brutalism/dist/style.css | 118 + brutalism/license.txt | 8 + brutalism/src/index.html | 41 + brutalism/src/style.scss | 140 + bubble-sort-colors/README.markdown | 4 + bubble-sort-colors/dist/index.html | 20 + bubble-sort-colors/dist/script.js | 96 + bubble-sort-colors/dist/style.css | 67 + bubble-sort-colors/license.txt | 13 + bubble-sort-colors/src/index.html | 6 + bubble-sort-colors/src/script.js | 96 + bubble-sort-colors/src/style.css | 67 + bubblegum-on-hover/README.markdown | 5 + bubblegum-on-hover/dist/index.html | 26 + bubblegum-on-hover/dist/script.js | 159 + bubblegum-on-hover/dist/style.css | 25 + bubblegum-on-hover/license.txt | 8 + bubblegum-on-hover/src/index.html | 10 + bubblegum-on-hover/src/script.js | 159 + bubblegum-on-hover/src/style.scss | 26 + bug-report-d20/README.markdown | 4 + bug-report-d20/dist/index.html | 45 + bug-report-d20/dist/script.js | 42 + bug-report-d20/dist/style.css | 273 + bug-report-d20/license.txt | 17 + bug-report-d20/src/index.html | 30 + bug-report-d20/src/script.babel | 44 + bug-report-d20/src/style.scss | 157 + building-a-realtime-photoshop/README.markdown | 5 + building-a-realtime-photoshop/dist/index.html | 56 + building-a-realtime-photoshop/dist/script.js | 9 + building-a-realtime-photoshop/dist/style.css | 41 + building-a-realtime-photoshop/license.txt | 8 + building-a-realtime-photoshop/src/index.html | 41 + building-a-realtime-photoshop/src/script.js | 9 + building-a-realtime-photoshop/src/style.css | 41 + .../README.markdown | 5 + .../dist/index.html | 40 + .../dist/style.css | 13 + .../license.txt | 8 + .../src/index.html | 25 + .../src/style.css | 13 + c3-color-contrast-checker/README.markdown | 4 + c3-color-contrast-checker/dist/index.html | 133 + c3-color-contrast-checker/dist/script.js | 136 + c3-color-contrast-checker/dist/style.css | 183 + c3-color-contrast-checker/license.txt | 13 + c3-color-contrast-checker/src/index.html | 119 + c3-color-contrast-checker/src/script.js | 136 + c3-color-contrast-checker/src/style.css | 183 + .../README.markdown | 5 + .../dist/index.html | 30 + .../dist/script.js | 5 + .../dist/style.css | 174 + cacheable-3-colour-svgs-via-use/license.txt | 8 + .../src/index.slim | 47 + cacheable-3-colour-svgs-via-use/src/script.js | 5 + .../src/style.scss | 237 + .../README.markdown | 19 + .../dist/index.html | 350 + .../dist/style.css | 56 + .../license.txt | 8 + .../src/index.html | 325 + .../src/style.css | 56 + calm-in-the-iridescence/README.markdown | 5 + calm-in-the-iridescence/dist/index.html | 32 + calm-in-the-iridescence/dist/script.js | 251 + calm-in-the-iridescence/dist/style.css | 9 + calm-in-the-iridescence/license.txt | 8 + calm-in-the-iridescence/src/index.html | 16 + calm-in-the-iridescence/src/script.babel | 251 + calm-in-the-iridescence/src/style.scss | 2 + candy-cane/README.markdown | 4 + candy-cane/dist/index.html | 59 + candy-cane/dist/script.js | 50 + candy-cane/dist/style.css | 44 + candy-cane/license.txt | 8 + candy-cane/src/index.html | 44 + candy-cane/src/script.js | 50 + candy-cane/src/style.css | 44 + candy-stacker/README.markdown | 5 + candy-stacker/dist/index.html | 331 + candy-stacker/dist/script.js | 153 + candy-stacker/dist/style.css | 30 + candy-stacker/license.txt | 8 + candy-stacker/src/index.html | 316 + candy-stacker/src/script.babel | 150 + candy-stacker/src/style.less | 80 + .../README.markdown | 5 + .../dist/index.html | 55 + canvas-image-hover-interaction/dist/script.js | 628 + canvas-image-hover-interaction/dist/style.css | 125 + canvas-image-hover-interaction/license.txt | 8 + canvas-image-hover-interaction/src/index.html | 40 + canvas-image-hover-interaction/src/script.js | 628 + canvas-image-hover-interaction/src/style.scss | 127 + card-hover-interactions/README.markdown | 4 + card-hover-interactions/dist/index.html | 45 + card-hover-interactions/dist/style.css | 215 + card-hover-interactions/license.txt | 8 + card-hover-interactions/src/index.pug | 13 + card-hover-interactions/src/style.scss | 214 + card-interactions-with-gsap/README.markdown | 9 + card-interactions-with-gsap/dist/index.html | 306 + card-interactions-with-gsap/dist/script.js | 279 + card-interactions-with-gsap/dist/style.css | 107 + card-interactions-with-gsap/license.txt | 8 + card-interactions-with-gsap/src/index.html | 290 + card-interactions-with-gsap/src/script.js | 279 + card-interactions-with-gsap/src/style.css | 107 + .../README.markdown | 4 + .../dist/index.html | 43 + .../dist/style.css | 188 + .../license.txt | 8 + .../src/index.html | 28 + .../src/style.scss | 204 + carousel-lock-interface/README.markdown | 9 + carousel-lock-interface/dist/index.html | 163 + carousel-lock-interface/dist/script.js | 158 + carousel-lock-interface/dist/style.css | 363 + carousel-lock-interface/license.txt | 13 + carousel-lock-interface/src/index.html | 143 + carousel-lock-interface/src/script.babel | 158 + carousel-lock-interface/src/style.scss | 405 + casio-pt-1-with-html-css-js/README.markdown | 5 + casio-pt-1-with-html-css-js/dist/index.html | 230 + casio-pt-1-with-html-css-js/dist/script.js | 172 + casio-pt-1-with-html-css-js/dist/style.css | 632 + casio-pt-1-with-html-css-js/license.txt | 8 + casio-pt-1-with-html-css-js/src/index.html | 215 + casio-pt-1-with-html-css-js/src/script.babel | 172 + casio-pt-1-with-html-css-js/src/style.css | 612 + casiopt-1-css/README.markdown | 16 + casiopt-1-css/dist/index.html | 104 + casiopt-1-css/dist/style.css | 881 + casiopt-1-css/license.txt | 8 + casiopt-1-css/src/index.html | 90 + casiopt-1-css/src/style.css | 881 + ceramic-looped/README.markdown | 5 + ceramic-looped/dist/index.html | 25 + ceramic-looped/dist/script.js | 230 + ceramic-looped/dist/style.css | 20 + ceramic-looped/license.txt | 8 + ceramic-looped/src/index.html | 9 + ceramic-looped/src/script.babel | 230 + ceramic-looped/src/style.scss | 17 + .../README.markdown | 7 + .../dist/index.html | 160 + checkbox-group-styled-as-tiles/dist/script.js | 1 + checkbox-group-styled-as-tiles/dist/style.css | 128 + checkbox-group-styled-as-tiles/license.txt | 8 + checkbox-group-styled-as-tiles/src/index.html | 143 + checkbox-group-styled-as-tiles/src/script.js | 1 + checkbox-group-styled-as-tiles/src/style.scss | 136 + .../README.markdown | 4 + .../dist/index.html | 14 + .../dist/style.css | 19 + .../license.txt | 13 + .../src/index.html | 1 + .../src/style.css | 19 + checklist-animation/README.markdown | 4 + checklist-animation/dist/index.html | 30 + checklist-animation/dist/style.css | 316 + checklist-animation/license.txt | 8 + checklist-animation/src/index.html | 15 + checklist-animation/src/style.scss | 206 + christmas-cannon/LICENSE.txt | 21 + christmas-cannon/README.md | 12 + christmas-cannon/dist/index.html | 34 + christmas-cannon/dist/script.js | 1855 + christmas-cannon/dist/style.css | 129 + christmas-cannon/src/index.html | 19 + christmas-cannon/src/script.babel | 1857 + christmas-cannon/src/style.scss | 166 + city/README.markdown | 5 + city/dist/index.html | 16 + city/dist/script.js | 183 + city/dist/style.css | 1 + city/license.txt | 8 + city/src/index.html | 1 + city/src/script.js | 183 + city/src/style.css | 1 + claymorphism/README.markdown | 5 + claymorphism/dist/index.html | 18 + claymorphism/dist/style.css | 34 + claymorphism/license.txt | 8 + claymorphism/src/index.html | 4 + claymorphism/src/style.css | 34 + .../LICENSE.txt | 21 + .../README.md | 4 + .../dist/index.html | 17 + .../dist/script.js | 327 + .../dist/style.css | 32 + .../src/index.html | 1 + .../src/script.js | 327 + .../src/style.css | 32 + clipped-image-reveal-on-hover/README.markdown | 5 + clipped-image-reveal-on-hover/dist/index.html | 26 + clipped-image-reveal-on-hover/dist/script.js | 12 + clipped-image-reveal-on-hover/dist/style.css | 109 + clipped-image-reveal-on-hover/license.txt | 8 + clipped-image-reveal-on-hover/src/index.html | 11 + clipped-image-reveal-on-hover/src/script.js | 12 + clipped-image-reveal-on-hover/src/style.scss | 104 + .../README.markdown | 5 + .../dist/index.html | 94 + .../dist/script.js | 2 + .../dist/style.css | 294 + codepen-challenge-knockout-text/license.txt | 8 + .../src/index.html | 79 + codepen-challenge-knockout-text/src/script.js | 2 + codepen-challenge-knockout-text/src/style.css | 294 + codevember-12/README.markdown | 7 + codevember-12/dist/index.html | 20 + codevember-12/dist/script.js | 525 + codevember-12/dist/style.css | 52 + codevember-12/license.txt | 13 + codevember-12/src/index.html | 3 + codevember-12/src/script.babel | 525 + codevember-12/src/style.scss | 59 + .../README.markdown | 5 + .../dist/index.html | 47 + .../dist/script.js | 36 + .../dist/style.css | 9 + .../license.txt | 8 + .../src/index.html | 32 + .../src/script.js | 36 + .../src/style.css | 9 + .../README.markdown | 43 + .../dist/index.html | 1075 + .../dist/style.css | 30 + .../license.txt | 8 + .../src/index.pug | 18 + .../src/style.scss | 24 + .../README.markdown | 4 + .../dist/index.html | 87 + .../dist/script.js | 184 + .../dist/style.css | 29 + .../license.txt | 13 + .../src/index.html | 70 + .../src/script.js | 184 + .../src/style.css | 28 + codevember-9/README.markdown | 4 + codevember-9/dist/index.html | 295 + codevember-9/dist/script.js | 71 + codevember-9/dist/style.css | 20 + codevember-9/license.txt | 17 + codevember-9/src/index.html | 279 + codevember-9/src/script.js | 71 + codevember-9/src/style.css | 20 + codevember11ladder-illusion/README.markdown | 6 + codevember11ladder-illusion/dist/index.html | 48 + codevember11ladder-illusion/dist/style.css | 74 + codevember11ladder-illusion/license.txt | 8 + codevember11ladder-illusion/src/index.pug | 15 + codevember11ladder-illusion/src/style.scss | 89 + cogs-with-variables/README.markdown | 4 + cogs-with-variables/dist/index.html | 28 + cogs-with-variables/dist/style.css | 53 + cogs-with-variables/license.txt | 13 + cogs-with-variables/src/index.html | 15 + cogs-with-variables/src/style.css | 53 + color-palettes/README.markdown | 5 + color-palettes/dist/index.html | 614 + color-palettes/dist/style.css | 441 + color-palettes/license.txt | 8 + color-palettes/src/index.pug | 57 + color-palettes/src/style.scss | 289 + .../README.markdown | 5 + .../dist/index.html | 19 + .../dist/script.js | 291 + .../dist/style.css | 473 + color-search-engine-w-react-gsap/license.txt | 8 + .../src/index.pug | 1 + .../src/script.babel | 291 + .../src/style.styl | 302 + .../LICENSE.txt | 21 + .../README.md | 4 + .../dist/index.html | 52 + .../dist/script.js | 100 + .../dist/style.css | 212 + .../src/index.html | 36 + .../src/script.js | 100 + .../src/style.scss | 237 + color-wave/README.markdown | 5 + color-wave/dist/index.html | 88 + color-wave/dist/script.js | 33 + color-wave/dist/style.css | 16 + color-wave/license.txt | 8 + color-wave/src/index.html | 73 + color-wave/src/script.js | 33 + color-wave/src/style.scss | 14 + .../README.markdown | 5 + .../dist/index.html | 137 + .../dist/script.js | 152 + .../dist/style.css | 15 + .../license.txt | 8 + .../src/index.html | 122 + .../src/script.js | 152 + .../src/style.css | 15 + colorpencilscss-doodle/README.markdown | 4 + colorpencilscss-doodle/dist/index.html | 266 + colorpencilscss-doodle/dist/script.js | 6 + colorpencilscss-doodle/dist/style.css | 33 + colorpencilscss-doodle/license.txt | 13 + colorpencilscss-doodle/src/index.html | 249 + colorpencilscss-doodle/src/script.babel | 6 + colorpencilscss-doodle/src/style.scss | 28 + .../README.markdown | 4 + .../dist/index.html | 63 + .../dist/style.css | 834 + .../license.txt | 13 + .../src/index.html | 49 + .../src/style.scss | 335 + confetti-button/README.markdown | 5 + confetti-button/dist/index.html | 18 + confetti-button/dist/script.js | 23 + confetti-button/dist/style.css | 44 + confetti-button/license.txt | 8 + confetti-button/src/index.html | 1 + confetti-button/src/script.babel | 23 + confetti-button/src/style.css | 44 + confluent-flow/README.markdown | 5 + confluent-flow/dist/index.html | 16 + confluent-flow/dist/script.js | 1361 + confluent-flow/dist/style.css | 30 + confluent-flow/license.txt | 8 + confluent-flow/src/index.pug | 1 + confluent-flow/src/script.js | 1361 + confluent-flow/src/style.scss | 27 + conic-gradient-in-svg/LICENSE.txt | 21 + conic-gradient-in-svg/README.md | 4 + conic-gradient-in-svg/dist/index.html | 22 + conic-gradient-in-svg/dist/style.css | 5 + conic-gradient-in-svg/src/index.html | 8 + conic-gradient-in-svg/src/style.css | 5 + .../README.markdown | 4 + .../dist/index.html | 23 + .../dist/style.css | 97 + conic-gradients-css-masks-no-ff/license.txt | 8 + .../src/index.html | 8 + .../src/style.scss | 88 + container-query-bookstore/README.markdown | 5 + container-query-bookstore/dist/index.html | 218 + container-query-bookstore/dist/script.js | 51 + container-query-bookstore/dist/style.css | 119 + container-query-bookstore/license.txt | 8 + container-query-bookstore/src/index.html | 201 + container-query-bookstore/src/script.js | 51 + container-query-bookstore/src/style.css | 119 + .../README.markdown | 7 + .../dist/index.html | 43 + .../dist/script.js | 1 + .../dist/style.css | 142 + context-menu-with-feather-icons/license.txt | 8 + .../src/index.html | 27 + context-menu-with-feather-icons/src/script.js | 1 + .../src/style.scss | 157 + .../README.markdown | 5 + .../dist/index.html | 72 + .../dist/script.js | 142 + .../dist/style.css | 12 + copy-table-as-csv-web-component/license.txt | 8 + .../src/index.html | 56 + copy-table-as-csv-web-component/src/script.js | 142 + .../src/style.scss | 13 + countdown-to-new-year/README.markdown | 5 + countdown-to-new-year/dist/index.html | 47 + countdown-to-new-year/dist/script.js | 56 + countdown-to-new-year/dist/style.css | 363 + countdown-to-new-year/license.txt | 8 + countdown-to-new-year/src/index.pug | 40 + countdown-to-new-year/src/script.js | 56 + countdown-to-new-year/src/style.css | 350 + cpc-dropdown-slots/README.markdown | 5 + cpc-dropdown-slots/dist/index.html | 30 + cpc-dropdown-slots/dist/script.js | 64 + cpc-dropdown-slots/dist/style.css | 164 + cpc-dropdown-slots/license.txt | 8 + cpc-dropdown-slots/src/index.pug | 9 + cpc-dropdown-slots/src/script.ts | 86 + cpc-dropdown-slots/src/style.scss | 163 + cqw-font-sizes/LICENSE.txt | 21 + cqw-font-sizes/README.md | 4 + cqw-font-sizes/dist/index.html | 17 + cqw-font-sizes/dist/style.css | 19 + cqw-font-sizes/src/index.html | 3 + cqw-font-sizes/src/style.css | 19 + crazy-4/README.markdown | 4 + crazy-4/dist/index.html | 16 + crazy-4/dist/script.js | 125 + crazy-4/dist/style.css | 11 + crazy-4/license.txt | 8 + crazy-4/src/index.html | 1 + crazy-4/src/script.js | 125 + crazy-4/src/style.css | 11 + crossing-walls/README.markdown | 7 + crossing-walls/dist/index.html | 16 + crossing-walls/dist/script.js | 519 + crossing-walls/dist/style.css | 8 + crossing-walls/license.txt | 8 + crossing-walls/src/index.html | 1 + crossing-walls/src/script.js | 519 + crossing-walls/src/style.css | 8 + crystal-mountains/README.markdown | 5 + crystal-mountains/dist/index.html | 17 + crystal-mountains/dist/script.js | 97 + crystal-mountains/dist/style.css | 42 + crystal-mountains/license.txt | 8 + crystal-mountains/src/index.pug | 2 + crystal-mountains/src/script.js | 97 + crystal-mountains/src/style.styl | 38 + css-artsphere/README.markdown | 5 + css-artsphere/dist/index.html | 24 + css-artsphere/dist/style.css | 171 + css-artsphere/license.txt | 8 + css-artsphere/src/index.html | 10 + css-artsphere/src/style.scss | 215 + css-clip-path-editor/README.markdown | 5 + css-clip-path-editor/dist/index.html | 20 + css-clip-path-editor/dist/script.js | 418 + css-clip-path-editor/dist/style.css | 3 + css-clip-path-editor/license.txt | 8 + css-clip-path-editor/src/index.html | 5 + css-clip-path-editor/src/script.js | 418 + css-clip-path-editor/src/style.css | 3 + css-color-rings/README.markdown | 5 + css-color-rings/dist/index.html | 127 + css-color-rings/dist/style.css | 54 + css-color-rings/license.txt | 8 + css-color-rings/src/index.pug | 10 + css-color-rings/src/style.styl | 46 + css-dna/README.markdown | 11 + css-dna/dist/index.html | 43 + css-dna/dist/script.js | 1 + css-dna/dist/style.css | 125 + css-dna/license.txt | 8 + css-dna/src/index.pug | 6 + css-dna/src/script.js | 1 + css-dna/src/style.css | 125 + css-dominoes/README.markdown | 5 + css-dominoes/dist/index.html | 68 + css-dominoes/dist/style.css | 458 + css-dominoes/license.txt | 8 + css-dominoes/src/index.html | 54 + css-dominoes/src/style.scss | 174 + css-filter-cards/README.markdown | 5 + css-filter-cards/dist/index.html | 48 + css-filter-cards/dist/style.css | 117 + css-filter-cards/license.txt | 8 + css-filter-cards/src/index.html | 34 + css-filter-cards/src/style.css | 117 + css-filter-glitch/README.markdown | 5 + css-filter-glitch/dist/index.html | 18 + css-filter-glitch/dist/style.css | 80 + css-filter-glitch/license.txt | 8 + css-filter-glitch/src/index.html | 3 + css-filter-glitch/src/style.scss | 24 + css-filter-text-animation/README.markdown | 5 + css-filter-text-animation/dist/index.html | 18 + css-filter-text-animation/dist/style.css | 80 + css-filter-text-animation/license.txt | 8 + css-filter-text-animation/src/index.html | 3 + css-filter-text-animation/src/style.scss | 59 + css-grid-card-variations/README.markdown | 6 + css-grid-card-variations/dist/index.html | 187 + css-grid-card-variations/dist/style.css | 865 + css-grid-card-variations/license.txt | 13 + css-grid-card-variations/src/index.pug | 53 + css-grid-card-variations/src/style.scss | 930 + css-grid-newspaper-layout/README.markdown | 7 + css-grid-newspaper-layout/dist/index.html | 80 + css-grid-newspaper-layout/dist/script.js | 1 + css-grid-newspaper-layout/dist/style.css | 599 + css-grid-newspaper-layout/license.txt | 8 + css-grid-newspaper-layout/src/index.pug | 134 + css-grid-newspaper-layout/src/script.js | 1 + css-grid-newspaper-layout/src/style.scss | 581 + .../README.markdown | 4 + .../dist/index.html | 180 + .../dist/script.js | 1 + .../dist/style.css | 66 + .../license.txt | 8 + .../src/index.html | 164 + .../src/script.js | 1 + .../src/style.scss | 65 + css-grid-template-builder/README.markdown | 7 + css-grid-template-builder/dist/index.html | 21 + css-grid-template-builder/dist/script.js | 813 + css-grid-template-builder/dist/style.css | 23 + css-grid-template-builder/license.txt | 8 + css-grid-template-builder/src/index.html | 1 + css-grid-template-builder/src/script.babel | 814 + css-grid-template-builder/src/style.css | 23 + css-hexagon-grid/README.markdown | 4 + css-hexagon-grid/dist/index.html | 70 + css-hexagon-grid/dist/style.css | 287 + css-hexagon-grid/license.txt | 13 + css-hexagon-grid/src/index.html | 57 + css-hexagon-grid/src/style.css | 287 + .../README.markdown | 5 + .../dist/index.html | 44 + .../dist/script.js | 15 + .../dist/style.css | 146 + .../license.txt | 8 + .../src/index.html | 29 + .../src/script.js | 15 + .../src/style.css | 146 + .../README.markdown | 5 + .../dist/index.html | 43 + css-is-awesome-css-motion-path/dist/style.css | 182 + css-is-awesome-css-motion-path/license.txt | 8 + css-is-awesome-css-motion-path/src/index.html | 28 + css-is-awesome-css-motion-path/src/style.scss | 159 + .../README.markdown | 4 + .../dist/BarlowGX.ttf | Bin 0 -> 338376 bytes .../dist/index.html | 17 + .../dist/style.css | 25 + .../license.txt | 17 + .../src/BarlowGX.ttf | Bin 0 -> 338376 bytes .../src/index.html | 3 + .../src/style.scss | 28 + .../README.markdown | 5 + .../dist/index.html | 93 + .../dist/script.js | 87 + .../dist/style.css | 132 + .../license.txt | 8 + .../src/index.html | 78 + .../src/script.babel | 87 + .../src/style.css | 128 + css-only-direction-aware-box/README.markdown | 5 + css-only-direction-aware-box/dist/index.html | 34 + css-only-direction-aware-box/dist/script.js | 1 + css-only-direction-aware-box/dist/style.css | 227 + css-only-direction-aware-box/license.txt | 8 + css-only-direction-aware-box/src/index.html | 19 + css-only-direction-aware-box/src/script.js | 1 + css-only-direction-aware-box/src/style.css | 227 + .../README.markdown | 11 + .../dist/index.html | 1252 + .../dist/script.js | 1 + .../dist/style.css | 4572 ++ .../license.txt | 8 + .../src/index.pug | 173 + .../src/script.js | 1 + .../src/style.scss | 1041 + css-only-interactive-3d-dice/README.markdown | 141 + css-only-interactive-3d-dice/dist/index.html | 202 + css-only-interactive-3d-dice/dist/style.css | 1075 + css-only-interactive-3d-dice/license.txt | 8 + css-only-interactive-3d-dice/src/index.pug | 70 + css-only-interactive-3d-dice/src/style.scss | 305 + css-only-switch-checkboxes/README.markdown | 5 + css-only-switch-checkboxes/dist/index.html | 42 + css-only-switch-checkboxes/dist/style.css | 80 + css-only-switch-checkboxes/license.txt | 8 + css-only-switch-checkboxes/src/index.html | 28 + css-only-switch-checkboxes/src/style.css | 80 + css-panning-perspective-plane/README.markdown | 4 + css-panning-perspective-plane/dist/index.html | 17 + css-panning-perspective-plane/dist/style.css | 38 + css-panning-perspective-plane/license.txt | 13 + css-panning-perspective-plane/src/index.haml | 3 + css-panning-perspective-plane/src/style.scss | 44 + .../README.markdown | 7 + .../dist/index.html | 87 + .../dist/style.css | 126 + .../license.txt | 8 + .../src/index.html | 73 + .../src/style.scss | 72 + css-preloader/README.markdown | 5 + css-preloader/dist/index.html | 132 + css-preloader/dist/script.js | 5 + css-preloader/dist/style.css | 495 + css-preloader/license.txt | 8 + css-preloader/src/index.html | 117 + css-preloader/src/script.js | 5 + css-preloader/src/style.css | 495 + .../README.markdown | 13 + .../dist/index.html | 377 + .../dist/script.js | 97 + .../dist/style.css | 2824 + .../license.txt | 8 + .../src/index.html | 362 + .../src/script.js | 97 + .../src/style.css | 2824 + .../README.markdown | 4 + .../dist/index.html | 81 + .../dist/style.css | 188 + css-shapes-columns-and-clipping/license.txt | 13 + .../src/index.html | 66 + .../src/style.scss | 183 + css-squircle/README.markdown | 4 + css-squircle/dist/index.html | 16 + css-squircle/dist/style.css | 81 + css-squircle/license.txt | 13 + css-squircle/src/index.html | 3 + css-squircle/src/style.less | 88 + css-user-avatars/README.markdown | 5 + css-user-avatars/dist/index.html | 271 + css-user-avatars/dist/script.js | 11 + css-user-avatars/dist/style.css | 1915 + css-user-avatars/license.txt | 8 + css-user-avatars/src/index.html | 256 + css-user-avatars/src/script.js | 11 + css-user-avatars/src/style.less | 1795 + css3-loader-spinners/README.markdown | 5 + css3-loader-spinners/dist/index.html | 142 + css3-loader-spinners/dist/style.css | 5130 ++ css3-loader-spinners/license.txt | 8 + css3-loader-spinners/src/index.pug | 36 + css3-loader-spinners/src/style.scss | 3566 ++ cssfrosted-glass/README.markdown | 4 + cssfrosted-glass/dist/index.html | 17 + cssfrosted-glass/dist/style.css | 81 + cssfrosted-glass/license.txt | 13 + cssfrosted-glass/src/index.html | 4 + cssfrosted-glass/src/style.scss | 97 + csspotlight/README.markdown | 5 + csspotlight/dist/index.html | 22 + csspotlight/dist/script.js | 23 + csspotlight/dist/style.css | 80 + csspotlight/license.txt | 8 + csspotlight/src/index.html | 6 + csspotlight/src/script.js | 23 + csspotlight/src/style.scss | 115 + cups-pattern/README.markdown | 7 + cups-pattern/dist/index.html | 67 + cups-pattern/dist/script.js | 11 + cups-pattern/dist/style.css | 123 + cups-pattern/license.txt | 8 + cups-pattern/src/index.pug | 4 + cups-pattern/src/script.js | 11 + cups-pattern/src/style.scss | 124 + curiouslyminded-with-flopine/README.markdown | 17 + curiouslyminded-with-flopine/dist/index.html | 119 + curiouslyminded-with-flopine/dist/script.js | 70 + curiouslyminded-with-flopine/dist/style.css | 15 + curiouslyminded-with-flopine/license.txt | 8 + curiouslyminded-with-flopine/src/index.html | 104 + curiouslyminded-with-flopine/src/script.js | 70 + curiouslyminded-with-flopine/src/style.scss | 14 + curl-noise/README.markdown | 8 + curl-noise/dist/index.html | 452 + curl-noise/dist/script.js | 279 + curl-noise/dist/style.css | 5 + curl-noise/license.txt | 8 + curl-noise/src/index.html | 435 + curl-noise/src/script.babel | 280 + curl-noise/src/style.css | 5 + .../README.markdown | 5 + .../dist/index.html | 24 + .../dist/script.js | 173 + .../dist/style.css | 190 + custom-right-click-context-menu/license.txt | 8 + .../src/index.html | 8 + .../src/script.babel | 173 + .../src/style.scss | 180 + customer-management-ui/README.markdown | 6 + customer-management-ui/dist/index.html | 499 + customer-management-ui/dist/script.js | 10 + customer-management-ui/dist/style.css | 1057 + customer-management-ui/license.txt | 8 + customer-management-ui/src/index.html | 483 + customer-management-ui/src/script.js | 10 + customer-management-ui/src/style.scss | 1018 + d3-map-projections/README.markdown | 4 + d3-map-projections/dist/index.html | 145 + d3-map-projections/dist/script.js | 171 + d3-map-projections/dist/style.css | 36 + d3-map-projections/license.txt | 17 + d3-map-projections/src/index.html | 130 + d3-map-projections/src/script.js | 171 + d3-map-projections/src/style.css | 36 + daily-pen-3disco/README.markdown | 4 + daily-pen-3disco/dist/index.html | 22 + daily-pen-3disco/dist/script.js | 132 + daily-pen-3disco/dist/style.css | 26 + daily-pen-3disco/license.txt | 13 + daily-pen-3disco/src/index.pug | 1 + daily-pen-3disco/src/script.babel | 132 + daily-pen-3disco/src/style.less | 30 + daily-ui-006-user-profile/README.markdown | 4 + daily-ui-006-user-profile/dist/index.html | 28 + daily-ui-006-user-profile/dist/script.js | 10 + daily-ui-006-user-profile/dist/style.css | 220 + daily-ui-006-user-profile/license.txt | 13 + daily-ui-006-user-profile/src/index.pug | 18 + daily-ui-006-user-profile/src/script.coffee | 3 + daily-ui-006-user-profile/src/style.sass | 161 + .../README.markdown | 5 + .../dist/index.html | 406 + .../dist/script.js | 143 + .../dist/style.css | 178 + .../license.txt | 8 + .../src/index.haml | 9 + .../src/script.js | 143 + .../src/style.scss | 224 + day-and-night-toggle/README.markdown | 4 + day-and-night-toggle/dist/index.html | 85 + day-and-night-toggle/dist/script.js | 118 + day-and-night-toggle/dist/style.css | 26 + day-and-night-toggle/license.txt | 13 + day-and-night-toggle/src/index.html | 70 + day-and-night-toggle/src/script.js | 118 + day-and-night-toggle/src/style.css | 26 + daylight-cycles-of-earth/README.markdown | 5 + daylight-cycles-of-earth/dist/index.html | 72 + daylight-cycles-of-earth/dist/script.js | 51 + daylight-cycles-of-earth/dist/style.css | 263 + daylight-cycles-of-earth/license.txt | 8 + daylight-cycles-of-earth/src/index.html | 58 + daylight-cycles-of-earth/src/script.js | 51 + daylight-cycles-of-earth/src/style.scss | 312 + dendritic-rabbit/README.markdown | 4 + dendritic-rabbit/dist/index.html | 17 + dendritic-rabbit/dist/script.js | 61 + dendritic-rabbit/license.txt | 17 + dendritic-rabbit/src/index.html | 0 dendritic-rabbit/src/script.js | 61 + design-your-week/README.markdown | 4 + design-your-week/dist/index.html | 88 + design-your-week/dist/script.js | 333 + design-your-week/dist/style.css | 401 + design-your-week/license.txt | 13 + design-your-week/src/index.html | 71 + design-your-week/src/script.babel | 333 + design-your-week/src/style.scss | 400 + details-element-for-help-text/README.markdown | 5 + details-element-for-help-text/dist/index.html | 38 + details-element-for-help-text/dist/style.css | 119 + details-element-for-help-text/license.txt | 8 + details-element-for-help-text/src/index.html | 23 + details-element-for-help-text/src/style.scss | 133 + diagonal-page-transitions/README.markdown | 5 + diagonal-page-transitions/dist/index.html | 22 + diagonal-page-transitions/dist/script.js | 64 + diagonal-page-transitions/dist/style.css | 57 + diagonal-page-transitions/license.txt | 8 + diagonal-page-transitions/src/index.html | 7 + diagonal-page-transitions/src/script.js | 64 + diagonal-page-transitions/src/style.scss | 69 + digital-walls/README.markdown | 5 + digital-walls/dist/index.html | 250 + digital-walls/dist/script.js | 50 + digital-walls/dist/style.css | 401 + digital-walls/license.txt | 8 + digital-walls/src/index.html | 233 + digital-walls/src/script.babel | 50 + digital-walls/src/style.scss | 454 + draggable-blend-generator/README.markdown | 9 + draggable-blend-generator/dist/index.html | 66 + draggable-blend-generator/dist/script.js | 73 + draggable-blend-generator/dist/style.css | 174 + draggable-blend-generator/license.txt | 8 + draggable-blend-generator/src/index.html | 50 + draggable-blend-generator/src/script.js | 73 + draggable-blend-generator/src/style.scss | 181 + draggable-plugin-hello-kitty/README.markdown | 5 + draggable-plugin-hello-kitty/dist/index.html | 137 + draggable-plugin-hello-kitty/dist/script.js | 15 + draggable-plugin-hello-kitty/dist/style.css | 13 + draggable-plugin-hello-kitty/license.txt | 13 + draggable-plugin-hello-kitty/src/index.html | 121 + draggable-plugin-hello-kitty/src/script.babel | 15 + draggable-plugin-hello-kitty/src/style.scss | 13 + dragon/README.markdown | 10 + dragon/dist/index.html | 43 + dragon/dist/script.js | 80 + dragon/dist/style.css | 19 + dragon/license.txt | 8 + dragon/src/index.html | 28 + dragon/src/script.js | 80 + dragon/src/style.css | 19 + dreaming-of-jupiterthree-js/README.markdown | 5 + dreaming-of-jupiterthree-js/dist/index.html | 17 + dreaming-of-jupiterthree-js/dist/script.js | 245 + dreaming-of-jupiterthree-js/dist/style.css | 40 + dreaming-of-jupiterthree-js/license.txt | 8 + dreaming-of-jupiterthree-js/src/index.html | 2 + dreaming-of-jupiterthree-js/src/script.js | 245 + dreaming-of-jupiterthree-js/src/style.css | 40 + drum-sequencer-w-sample-pad/README.markdown | 5 + drum-sequencer-w-sample-pad/dist/index.html | 166 + drum-sequencer-w-sample-pad/dist/script.js | 151 + drum-sequencer-w-sample-pad/dist/style.css | 334 + drum-sequencer-w-sample-pad/license.txt | 8 + drum-sequencer-w-sample-pad/src/index.html | 151 + drum-sequencer-w-sample-pad/src/script.js | 151 + drum-sequencer-w-sample-pad/src/style.css | 334 + dualitypure-css/README.markdown | 5 + dualitypure-css/dist/index.html | 26 + dualitypure-css/dist/style.css | 52 + dualitypure-css/license.txt | 8 + dualitypure-css/src/index.pug | 6 + dualitypure-css/src/style.styl | 49 + duo/README.markdown | 7 + duo/dist/index.html | 17 + duo/dist/script.js | 120 + duo/dist/style.css | 18 + duo/license.txt | 8 + duo/src/index.html | 1 + duo/src/script.js | 120 + duo/src/style.css | 18 + easings-are-rad/README.markdown | 5 + easings-are-rad/dist/index.html | 15 + easings-are-rad/dist/style.css | 54 + easings-are-rad/license.txt | 8 + easings-are-rad/src/index.html | 1 + easings-are-rad/src/style.css | 45 + .../README.markdown | 6 + .../dist/index.html | 67 + .../dist/style.css | 153 + .../license.txt | 17 + .../src/index.html | 52 + .../src/style.css | 153 + elk/README.markdown | 4 + elk/dist/index.html | 16 + elk/dist/script.js | 62 + elk/dist/style.css | 1 + elk/license.txt | 13 + elk/src/index.html | 1 + elk/src/script.js | 62 + elk/src/style.css | 1 + emoji_cover/README.markdown | 5 + emoji_cover/dist/index.html | 20 + emoji_cover/dist/script.js | 26 + emoji_cover/dist/style.css | 28 + emoji_cover/license.txt | 8 + emoji_cover/src/index.html | 5 + emoji_cover/src/script.js | 26 + emoji_cover/src/style.css | 28 + emojis-as-mask-images/README.markdown | 5 + emojis-as-mask-images/dist/index.html | 88 + emojis-as-mask-images/dist/style.css | 32 + emojis-as-mask-images/license.txt | 8 + emojis-as-mask-images/src/index.html | 74 + emojis-as-mask-images/src/style.css | 29 + .../README.markdown | 5 + .../dist/index.html | 17 + euclidean-algorithm-visualizer/dist/script.js | 102 + euclidean-algorithm-visualizer/license.txt | 8 + euclidean-algorithm-visualizer/src/index.html | 2 + euclidean-algorithm-visualizer/src/script.js | 103 + expanding-flex-cards-2019/README.markdown | 4 + .../dist/a8e37caf2a04602ea5815e5ac.css | 243 + .../dist/a8e37caf2a04602ea5815e5ac.js | 7 + expanding-flex-cards-2019/dist/index.html | 84 + expanding-flex-cards-2019/dist/script.js | 4 + expanding-flex-cards-2019/dist/style.css | 171 + expanding-flex-cards-2019/license.txt | 13 + .../src/a8e37caf2a04602ea5815e5ac.css | 243 + .../src/a8e37caf2a04602ea5815e5ac.js | 7 + expanding-flex-cards-2019/src/index.html | 64 + expanding-flex-cards-2019/src/script.js | 4 + expanding-flex-cards-2019/src/style.scss | 160 + expanding-flex-cards-2021/README.markdown | 7 + .../dist/a8e37caf2a04602ea5815e5ac.css | 243 + expanding-flex-cards-2021/dist/index.html | 83 + expanding-flex-cards-2021/dist/script.js | 5 + expanding-flex-cards-2021/dist/style.css | 390 + expanding-flex-cards-2021/license.txt | 8 + .../src/a8e37caf2a04602ea5815e5ac.css | 243 + expanding-flex-cards-2021/src/index.html | 64 + expanding-flex-cards-2021/src/script.js | 5 + expanding-flex-cards-2021/src/style.scss | 164 + explode-a-node-3d-box-model/README.markdown | 5 + explode-a-node-3d-box-model/dist/index.html | 25 + explode-a-node-3d-box-model/dist/style.css | 312 + explode-a-node-3d-box-model/license.txt | 8 + explode-a-node-3d-box-model/src/index.html | 10 + explode-a-node-3d-box-model/src/style.css | 272 + .../README.markdown | 7 + .../dist/index.html | 46 + .../dist/style.css | 309 + faction-toggle-star-wars-ep-iv-vi/license.txt | 8 + .../src/index.html | 32 + .../src/style.css | 309 + fiesta/README.markdown | 5 + fiesta/dist/index.html | 225 + fiesta/dist/script.js | 179 + fiesta/dist/style.css | 60 + fiesta/license.txt | 8 + fiesta/src/index.html | 210 + fiesta/src/script.babel | 179 + fiesta/src/style.css | 60 + .../README.markdown | 5 + .../dist/index.html | 134 + .../dist/script.js | 23 + .../dist/style.css | 297 + .../license.txt | 8 + .../src/index.pug | 60 + .../src/script.babel | 23 + .../src/style.scss | 358 + firefly-flow/README.markdown | 5 + firefly-flow/dist/index.html | 370 + firefly-flow/dist/script.js | 1171 + firefly-flow/dist/style.css | 60 + firefly-flow/license.txt | 8 + firefly-flow/src/index.html | 355 + firefly-flow/src/script.babel | 1171 + firefly-flow/src/style.css | 60 + fishes/README.markdown | 5 + fishes/dist/index.html | 71 + fishes/dist/style.css | 628 + fishes/license.txt | 8 + fishes/src/index.html | 57 + fishes/src/style.css | 628 + fishing-game/README.markdown | 9 + fishing-game/dist/index.html | 70 + fishing-game/dist/script.js | 435 + fishing-game/dist/style.css | 236 + fishing-game/license.txt | 8 + fishing-game/src/index.html | 55 + fishing-game/src/script.babel | 435 + fishing-game/src/style.css | 236 + flame-animation/README.markdown | 4 + flame-animation/dist/index.html | 39 + flame-animation/dist/style.css | 38 + flame-animation/license.txt | 8 + flame-animation/src/index.html | 25 + flame-animation/src/style.css | 38 + .../LICENSE.txt | 21 + .../README.md | 5 + .../dist/index.html | 68 + .../dist/style.css | 28 + .../src/index.html | 54 + .../src/style.sass | 25 + flexbox-playground/README.markdown | 5 + flexbox-playground/dist/index.html | 241 + flexbox-playground/dist/script.js | 74 + flexbox-playground/dist/style.css | 267 + flexbox-playground/license.txt | 9 + flexbox-playground/src/index.html | 226 + flexbox-playground/src/script.js | 74 + flexbox-playground/src/style.css | 267 + flipboxes/README.markdown | 5 + flipboxes/dist/index.html | 72 + flipboxes/dist/style.css | 301 + flipboxes/license.txt | 8 + flipboxes/src/index.html | 58 + flipboxes/src/style.scss | 227 + .../README.markdown | 5 + .../dist/index.html | 21 + floating-island-w-threejs-gsap/dist/script.js | 542 + floating-island-w-threejs-gsap/dist/style.css | 26 + floating-island-w-threejs-gsap/license.txt | 8 + floating-island-w-threejs-gsap/src/index.html | 3 + .../src/script.babel | 542 + floating-island-w-threejs-gsap/src/style.scss | 20 + flow/README.markdown | 7 + flow/dist/index.html | 16 + flow/dist/script.js | 102 + flow/dist/style.css | 5 + flow/license.txt | 8 + flow/src/index.html | 0 flow/src/script.js | 102 + flow/src/style.css | 5 + flowing-imagehow-to/README.markdown | 4 + flowing-imagehow-to/dist/index.html | 24 + flowing-imagehow-to/dist/script.js | 257 + flowing-imagehow-to/dist/style.css | 105 + flowing-imagehow-to/license.txt | 8 + flowing-imagehow-to/src/index.html | 9 + flowing-imagehow-to/src/script.js | 257 + flowing-imagehow-to/src/style.scss | 73 + flutter-challengelayout/README.markdown | 5 + flutter-challengelayout/dist/index.html | 16 + flutter-challengelayout/dist/script.js | 129 + flutter-challengelayout/license.txt | 8 + flutter-challengelayout/src/index.html | 0 flutter-challengelayout/src/script.js | 241 + .../README.markdown | 5 + .../dist/index.html | 19 + .../dist/script.js | 251 + .../dist/style.css | 4 + .../license.txt | 8 + .../src/index.html | 4 + .../src/script.js | 251 + .../src/style.css | 4 + focusss-v2/README.markdown | 5 + focusss-v2/dist/index.html | 50 + focusss-v2/dist/script.js | 198 + focusss-v2/dist/style.css | 95 + focusss-v2/license.txt | 8 + focusss-v2/src/index.html | 31 + focusss-v2/src/script.js | 198 + focusss-v2/src/style.css | 95 + .../README.markdown | 5 + .../dist/index.html | 21 + .../dist/script.js | 1 + .../dist/style.css | 74 + .../license.txt | 8 + .../src/index.html | 6 + .../src/script.js | 1 + .../src/style.scss | 78 + folding-ticket-detail/README.markdown | 5 + folding-ticket-detail/dist/index.html | 17 + folding-ticket-detail/dist/script.js | 454 + folding-ticket-detail/dist/style.css | 396 + folding-ticket-detail/license.txt | 8 + folding-ticket-detail/src/index.html | 1 + folding-ticket-detail/src/script.babel | 454 + folding-ticket-detail/src/style.css | 396 + fracture/README.markdown | 5 + fracture/dist/index.html | 16 + fracture/dist/script.js | 590 + fracture/dist/style.css | 30 + fracture/license.txt | 8 + fracture/src/index.pug | 1 + fracture/src/script.js | 591 + fracture/src/style.scss | 28 + fragment-shaders-ex-7/README.markdown | 4 + fragment-shaders-ex-7/dist/index.html | 74 + fragment-shaders-ex-7/dist/script.js | 142 + fragment-shaders-ex-7/dist/style.css | 33 + fragment-shaders-ex-7/license.txt | 13 + fragment-shaders-ex-7/src/index.html | 59 + fragment-shaders-ex-7/src/script.babel | 142 + fragment-shaders-ex-7/src/style.less | 37 + fredrikaflowfield-heart/README.markdown | 20 + fredrikaflowfield-heart/dist/blgjlm.js | 416 + fredrikaflowfield-heart/dist/index.html | 16 + fredrikaflowfield-heart/dist/script.js | 110 + fredrikaflowfield-heart/dist/style.css | 7 + fredrikaflowfield-heart/license.txt | 13 + fredrikaflowfield-heart/src/blgjlm.js | 416 + fredrikaflowfield-heart/src/index.html | 1 + fredrikaflowfield-heart/src/script.babel | 110 + fredrikaflowfield-heart/src/style.css | 7 + futuristic-card-effect/LICENSE.txt | 22 + futuristic-card-effect/README.md | 4 + futuristic-card-effect/dist/index.html | 69 + futuristic-card-effect/dist/script.js | 46 + futuristic-card-effect/dist/style.css | 352 + futuristic-card-effect/src/index.html | 52 + futuristic-card-effect/src/script.js | 46 + futuristic-card-effect/src/style.css | 352 + fyodor-v2-angled-pointillism/README.markdown | 5 + fyodor-v2-angled-pointillism/dist/index.html | 31 + fyodor-v2-angled-pointillism/dist/script.js | 240 + fyodor-v2-angled-pointillism/dist/style.css | 14 + fyodor-v2-angled-pointillism/license.txt | 8 + fyodor-v2-angled-pointillism/src/index.html | 12 + fyodor-v2-angled-pointillism/src/script.js | 240 + fyodor-v2-angled-pointillism/src/style.scss | 18 + gate-of-time-svg-css/README.markdown | 4 + gate-of-time-svg-css/dist/index.html | 1078 + gate-of-time-svg-css/dist/style.css | 247 + gate-of-time-svg-css/license.txt | 8 + gate-of-time-svg-css/src/index.html | 1064 + gate-of-time-svg-css/src/style.css | 247 + generative-canyons/README.markdown | 5 + generative-canyons/dist/index.html | 275 + generative-canyons/dist/script.js | 47 + generative-canyons/dist/style.css | 293 + generative-canyons/license.txt | 8 + generative-canyons/src/index.haml | 16 + generative-canyons/src/script.js | 47 + generative-canyons/src/style.scss | 157 + .../README.markdown | 9 + .../dist/index.html | 92 + .../dist/script.js | 239 + .../dist/style.css | 130 + .../license.txt | 8 + .../src/index.html | 77 + .../src/script.js | 239 + .../src/style.css | 130 + generative-poster-v-css/README.markdown | 4 + generative-poster-v-css/dist/index.html | 46 + generative-poster-v-css/dist/script.js | 113 + generative-poster-v-css/dist/style.css | 81 + generative-poster-v-css/license.txt | 17 + generative-poster-v-css/src/index.html | 27 + generative-poster-v-css/src/script.babel | 116 + generative-poster-v-css/src/style.scss | 95 + .../README.markdown | 7 + .../dist/index.html | 16 + .../dist/script.js | 98 + .../dist/style.css | 17 + .../license.txt | 8 + .../src/index.html | 0 .../src/script.js | 98 + .../src/style.css | 17 + .../README.markdown | 7 + .../dist/index.html | 22 + .../dist/script.js | 195 + .../dist/style.css | 77 + .../license.txt | 8 + .../src/index.html | 4 + .../src/script.js | 195 + .../src/style.css | 77 + .../README.markdown | 4 + .../dist/index.html | 18 + .../dist/script.js | 9 + .../dist/style.css | 3463 ++ .../license.txt | 8 + .../src/index.haml | 4 + .../src/script.babel | 9 + .../src/style.sass | 57 + .../README.markdown | 5 + .../dist/index.html | 17 + .../dist/script.js | 455 + .../dist/style.css | 17 + generative-voronoi-splodges-pixi/license.txt | 8 + .../src/index.html | 0 .../src/script.babel | 455 + .../src/style.css | 17 + genuary-2022-day-8/README.markdown | 6 + genuary-2022-day-8/dist/index.html | 193 + genuary-2022-day-8/dist/script.js | 42 + genuary-2022-day-8/dist/style.css | 31 + genuary-2022-day-8/license.txt | 8 + genuary-2022-day-8/src/index.html | 178 + genuary-2022-day-8/src/script.babel | 42 + genuary-2022-day-8/src/style.less | 36 + .../README.markdown | 18 + .../dist/index.html | 16 + .../dist/script.js | 90 + .../dist/style.css | 9 + .../license.txt | 8 + .../src/index.html | 1 + .../src/script.babel | 90 + .../src/style.css | 9 + .../README.markdown | 17 + .../dist/index.html | 16 + genuary-6-triangle-subdivision/dist/script.js | 100 + genuary-6-triangle-subdivision/dist/style.css | 9 + genuary-6-triangle-subdivision/license.txt | 8 + genuary-6-triangle-subdivision/src/index.html | 1 + .../src/script.babel | 100 + genuary-6-triangle-subdivision/src/style.css | 9 + .../README.markdown | 6 + .../dist/index.html | 356 + .../dist/script.js | 73 + .../dist/style.css | 868 + .../license.txt | 8 + .../src/index.html | 340 + .../src/script.js | 73 + .../src/style.scss | 841 + glassmorphism/README.markdown | 5 + glassmorphism/dist/index.html | 26 + glassmorphism/dist/style.css | 91 + glassmorphism/license.txt | 8 + glassmorphism/src/index.html | 12 + glassmorphism/src/style.css | 91 + glsl-gpgpu-particles/README.markdown | 4 + glsl-gpgpu-particles/dist/index.html | 171 + glsl-gpgpu-particles/dist/script.js | 99 + glsl-gpgpu-particles/dist/style.css | 8 + glsl-gpgpu-particles/license.txt | 17 + glsl-gpgpu-particles/src/index.html | 157 + glsl-gpgpu-particles/src/script.babel | 99 + glsl-gpgpu-particles/src/style.scss | 8 + .../README.markdown | 7 + .../dist/index.html | 160 + glsl-in-which-alice-feels-sick/dist/script.js | 84 + glsl-in-which-alice-feels-sick/dist/style.css | 8 + glsl-in-which-alice-feels-sick/license.txt | 13 + glsl-in-which-alice-feels-sick/src/index.html | 146 + .../src/script.babel | 84 + glsl-in-which-alice-feels-sick/src/style.scss | 8 + glsl-sample027/README.markdown | 5 + glsl-sample027/dist/index.html | 53 + glsl-sample027/dist/script.js | 211 + glsl-sample027/dist/style.css | 4 + glsl-sample027/license.txt | 8 + glsl-sample027/src/index.html | 36 + glsl-sample027/src/script.js | 211 + glsl-sample027/src/style.css | 4 + gold-tiles/README.markdown | 4 + gold-tiles/dist/index.html | 22 + gold-tiles/dist/style.css | 231 + gold-tiles/license.txt | 13 + gold-tiles/src/index.pug | 5 + gold-tiles/src/style.scss | 265 + good-fast-cheap/README.markdown | 4 + .../dist/https___codepen_io_kunukn.css | 63 + good-fast-cheap/dist/index.html | 62 + good-fast-cheap/dist/script.js | 130 + good-fast-cheap/license.txt | 13 + .../src/https___codepen_io_kunukn.css | 63 + good-fast-cheap/src/index.html | 46 + good-fast-cheap/src/script.babel | 130 + gradient-ball-sketch/README.markdown | 5 + gradient-ball-sketch/dist/index.html | 24 + gradient-ball-sketch/dist/script.js | 35 + gradient-ball-sketch/dist/style.css | 47 + gradient-ball-sketch/license.txt | 8 + gradient-ball-sketch/src/index.html | 8 + gradient-ball-sketch/src/script.js | 35 + gradient-ball-sketch/src/style.styl | 46 + gradient-borders/LICENSE.txt | 21 + gradient-borders/README.md | 4 + gradient-borders/dist/index.html | 16 + gradient-borders/dist/style.css | 38 + gradient-borders/src/index.html | 1 + gradient-borders/src/style.less | 45 + gradient-shadows-oc-argyleink/README.markdown | 5 + gradient-shadows-oc-argyleink/dist/index.html | 20 + gradient-shadows-oc-argyleink/dist/style.css | 141 + gradient-shadows-oc-argyleink/license.txt | 9 + gradient-shadows-oc-argyleink/src/index.html | 6 + gradient-shadows-oc-argyleink/src/style.css | 141 + grainy-gradient-two-colors/README.markdown | 5 + grainy-gradient-two-colors/dist/index.html | 20 + grainy-gradient-two-colors/dist/style.css | 42 + grainy-gradient-two-colors/license.txt | 9 + grainy-gradient-two-colors/src/index.html | 6 + grainy-gradient-two-colors/src/style.css | 42 + .../README.markdown | 5 + .../dist/index.html | 18 + .../dist/script.js | 278 + .../dist/style.css | 73 + .../license.txt | 8 + .../src/index.html | 1 + .../src/script.js | 279 + .../src/style.css | 73 + .../README.markdown | 11 + .../dist/index.html | 16 + .../dist/script.js | 10 + .../license.txt | 8 + .../src/index.html | 0 .../src/script.js | 10 + .../README.markdown | 5 + .../dist/index.html | 175 + .../dist/style.css | 220 + grid-based-blog-index-page-layout/license.txt | 8 + .../src/index.pug | 155 + .../src/style.scss | 221 + grid-collage-layout/LICENSE.txt | 21 + grid-collage-layout/README.md | 4 + grid-collage-layout/dist/index.html | 43 + grid-collage-layout/dist/style.css | 66 + grid-collage-layout/src/index.html | 28 + grid-collage-layout/src/style.css | 65 + grid-icosahedron-refraction/README.markdown | 5 + grid-icosahedron-refraction/dist/index.html | 18 + grid-icosahedron-refraction/dist/script.js | 834 + grid-icosahedron-refraction/dist/style.css | 8 + grid-icosahedron-refraction/license.txt | 8 + grid-icosahedron-refraction/src/index.html | 3 + grid-icosahedron-refraction/src/script.ts | 922 + grid-icosahedron-refraction/src/style.scss | 8 + grid-items-share-background/README.markdown | 5 + grid-items-share-background/dist/index.html | 67 + grid-items-share-background/dist/script.js | 5 + grid-items-share-background/dist/style.css | 144 + grid-items-share-background/license.txt | 8 + grid-items-share-background/src/index.html | 52 + grid-items-share-background/src/script.js | 6 + grid-items-share-background/src/style.scss | 167 + growing-lines-hex/README.markdown | 5 + growing-lines-hex/dist/index.html | 16 + growing-lines-hex/dist/script.js | 496 + growing-lines-hex/dist/style.css | 8 + growing-lines-hex/license.txt | 8 + growing-lines-hex/src/index.html | 0 growing-lines-hex/src/script.js | 496 + growing-lines-hex/src/style.css | 8 + gsap-believecollage-animation/README.markdown | 6 + gsap-believecollage-animation/dist/index.html | 72 + gsap-believecollage-animation/dist/script.js | 143 + gsap-believecollage-animation/dist/style.css | 276 + gsap-believecollage-animation/license.txt | 8 + gsap-believecollage-animation/src/index.html | 55 + gsap-believecollage-animation/src/script.js | 143 + gsap-believecollage-animation/src/style.scss | 290 + .../README.markdown | 4 + .../dist/index.html | 28 + .../dist/script.js | 318 + .../dist/style.css | 22 + .../license.txt | 13 + .../src/index.html | 14 + .../src/script.js | 318 + .../src/style.css | 22 + .../README.markdown | 5 + .../dist/index.html | 19 + .../dist/script.js | 159 + .../dist/style.css | 29 + .../license.txt | 8 + .../src/index.html | 2 + .../src/script.js | 159 + .../src/style.css | 29 + halftone-video-effect/README.markdown | 4 + halftone-video-effect/dist/index.html | 16 + halftone-video-effect/dist/script.js | 125 + halftone-video-effect/dist/style.css | 22 + halftone-video-effect/license.txt | 13 + halftone-video-effect/src/index.html | 2 + halftone-video-effect/src/script.js | 125 + halftone-video-effect/src/style.scss | 22 + hambuuuuuuuurger/README.markdown | 5 + hambuuuuuuuurger/dist/index.html | 109 + hambuuuuuuuurger/dist/style.css | 118 + hambuuuuuuuurger/license.txt | 8 + hambuuuuuuuurger/src/index.haml | 82 + hambuuuuuuuurger/src/style.css | 118 + happy-new-year/README.markdown | 5 + happy-new-year/dist/index.html | 81 + happy-new-year/dist/script.js | 372 + happy-new-year/dist/style.css | 221 + happy-new-year/license.txt | 8 + happy-new-year/src/index.html | 63 + happy-new-year/src/script.js | 372 + happy-new-year/src/style.scss | 232 + headful-of-fire/README.markdown | 5 + headful-of-fire/dist/index.html | 38 + headful-of-fire/dist/script.js | 224 + headful-of-fire/dist/style.css | 21 + headful-of-fire/license.txt | 8 + headful-of-fire/src/index.html | 23 + headful-of-fire/src/script.js | 224 + headful-of-fire/src/style.css | 22 + heart-button/README.markdown | 5 + heart-button/dist/index.html | 76 + heart-button/dist/script.js | 15 + heart-button/dist/style.css | 183 + heart-button/license.txt | 8 + heart-button/src/index.html | 60 + heart-button/src/script.js | 15 + heart-button/src/style.scss | 199 + hearthstone-style-card-hover/README.markdown | 8 + hearthstone-style-card-hover/dist/index.html | 66 + hearthstone-style-card-hover/dist/style.css | 345 + hearthstone-style-card-hover/license.txt | 13 + hearthstone-style-card-hover/src/index.haml | 5 + hearthstone-style-card-hover/src/style.scss | 122 + hex-arcs-in-relief/README.markdown | 7 + hex-arcs-in-relief/dist/index.html | 16 + hex-arcs-in-relief/dist/script.js | 702 + hex-arcs-in-relief/dist/style.css | 9 + hex-arcs-in-relief/license.txt | 8 + hex-arcs-in-relief/src/index.html | 0 hex-arcs-in-relief/src/script.js | 702 + hex-arcs-in-relief/src/style.css | 9 + .../README.markdown | 12 + .../dist/index.html | 56 + .../dist/script.js | 171 + .../dist/style.css | 237 + .../license.txt | 8 + .../src/index.html | 41 + .../src/script.js | 171 + .../src/style.scss | 286 + hexagon-tiling-7-ways/README.markdown | 16 + hexagon-tiling-7-ways/dist/index.html | 45 + hexagon-tiling-7-ways/dist/script.js | 440 + hexagon-tiling-7-ways/dist/style.css | 5 + hexagon-tiling-7-ways/license.txt | 8 + hexagon-tiling-7-ways/src/index.pug | 29 + hexagon-tiling-7-ways/src/script.js | 440 + hexagon-tiling-7-ways/src/style.scss | 5 + holiday-cssweater-generator/README.markdown | 4 + holiday-cssweater-generator/dist/index.html | 91 + holiday-cssweater-generator/dist/script.js | 53 + holiday-cssweater-generator/dist/style.css | 1673 + holiday-cssweater-generator/license.txt | 8 + holiday-cssweater-generator/src/index.haml | 7 + holiday-cssweater-generator/src/script.js | 55 + holiday-cssweater-generator/src/style.scss | 602 + hover-animated-portfolio/README.markdown | 5 + hover-animated-portfolio/dist/index.html | 218 + hover-animated-portfolio/dist/script.js | 53 + hover-animated-portfolio/dist/style.css | 142 + hover-animated-portfolio/license.txt | 8 + hover-animated-portfolio/src/index.html | 204 + hover-animated-portfolio/src/script.js | 53 + hover-animated-portfolio/src/style.css | 142 + .../README.markdown | 5 + .../dist/index.html | 33 + .../dist/style.css | 176 + .../license.txt | 13 + .../src/index.html | 20 + .../src/style.scss | 225 + .../README.markdown | 5 + .../dist/index.html | 40 + .../dist/script.js | 54 + .../dist/style.css | 275 + .../license.txt | 8 + .../src/index.pug | 16 + .../src/script.babel | 54 + .../src/style.styl | 323 + hsl-slider-w-react-css-vars/README.markdown | 12 + hsl-slider-w-react-css-vars/dist/index.html | 21 + hsl-slider-w-react-css-vars/dist/script.js | 207 + hsl-slider-w-react-css-vars/dist/style.css | 97 + hsl-slider-w-react-css-vars/license.txt | 13 + hsl-slider-w-react-css-vars/src/index.pug | 1 + hsl-slider-w-react-css-vars/src/script.babel | 207 + hsl-slider-w-react-css-vars/src/style.styl | 87 + hue-rotated-emoji/README.markdown | 5 + hue-rotated-emoji/dist/index.html | 21 + hue-rotated-emoji/dist/style.css | 37 + hue-rotated-emoji/license.txt | 8 + hue-rotated-emoji/src/index.html | 7 + hue-rotated-emoji/src/style.css | 37 + humans-since-1982/README.markdown | 5 + humans-since-1982/dist/index.html | 16 + humans-since-1982/dist/script.js | 60 + humans-since-1982/dist/style.css | 14 + humans-since-1982/license.txt | 8 + humans-since-1982/src/index.html | 0 humans-since-1982/src/script.js | 60 + humans-since-1982/src/style.css | 14 + iceberg-charts/README.markdown | 4 + iceberg-charts/dist/index.html | 29 + iceberg-charts/dist/script.js | 371 + iceberg-charts/dist/style.css | 12 + iceberg-charts/dist/zbvakw.js | 13 + iceberg-charts/license.txt | 13 + iceberg-charts/src/index.html | 10 + iceberg-charts/src/script.js | 371 + iceberg-charts/src/style.less | 17 + iceberg-charts/src/zbvakw.js | 13 + icosahedron-pure-css/README.markdown | 5 + icosahedron-pure-css/dist/index.html | 40 + icosahedron-pure-css/dist/script.js | 11 + icosahedron-pure-css/dist/style.css | 249 + icosahedron-pure-css/license.txt | 8 + icosahedron-pure-css/src/index.html | 25 + icosahedron-pure-css/src/script.js | 11 + icosahedron-pure-css/src/style.scss | 86 + illustration-online-store/README.markdown | 5 + illustration-online-store/dist/index.html | 141 + illustration-online-store/dist/style.css | 245 + illustration-online-store/license.txt | 8 + illustration-online-store/src/index.html | 126 + illustration-online-store/src/style.scss | 223 + image-captions-color-hints/README.markdown | 5 + image-captions-color-hints/dist/index.html | 60 + image-captions-color-hints/dist/script.js | 9 + image-captions-color-hints/dist/style.css | 121 + image-captions-color-hints/license.txt | 8 + image-captions-color-hints/src/index.html | 44 + image-captions-color-hints/src/script.babel | 9 + image-captions-color-hints/src/style.css | 115 + image-to-lcd/README.markdown | 5 + image-to-lcd/dist/index.html | 32 + image-to-lcd/dist/script.js | 205 + image-to-lcd/dist/style.css | 150 + image-to-lcd/license.txt | 8 + image-to-lcd/src/index.html | 15 + image-to-lcd/src/script.js | 205 + image-to-lcd/src/style.css | 150 + impossible-checkbox-v2/README.markdown | 5 + impossible-checkbox-v2/dist/index.html | 19 + impossible-checkbox-v2/dist/script.js | 302 + impossible-checkbox-v2/dist/style.css | 152 + impossible-checkbox-v2/license.txt | 8 + impossible-checkbox-v2/src/index.pug | 1 + impossible-checkbox-v2/src/script.babel | 302 + impossible-checkbox-v2/src/style.styl | 137 + impressionists-blobs/LICENSE.txt | 21 + impressionists-blobs/README.md | 4 + impressionists-blobs/dist/index.html | 505 + impressionists-blobs/dist/script.js | 378 + impressionists-blobs/dist/style.css | 52 + impressionists-blobs/src/index.html | 488 + impressionists-blobs/src/script.js | 378 + impressionists-blobs/src/style.css | 52 + infinite-primordial-creatures/README.markdown | 5 + infinite-primordial-creatures/dist/index.html | 117 + infinite-primordial-creatures/dist/script.js | 84 + infinite-primordial-creatures/dist/style.css | 12 + infinite-primordial-creatures/license.txt | 8 + infinite-primordial-creatures/src/index.html | 102 + .../src/script.babel | 84 + infinite-primordial-creatures/src/style.css | 12 + inktober-01grid/README.markdown | 4 + inktober-01grid/dist/index.html | 54 + inktober-01grid/dist/style.css | 78 + inktober-01grid/license.txt | 13 + inktober-01grid/src/index.html | 38 + inktober-01grid/src/style.css | 78 + .../README.markdown | 5 + .../dist/index.html | 15 + .../dist/style.css | 27 + .../license.txt | 8 + .../src/index.html | 1 + .../src/style.css | 27 + inner-listener/README.markdown | 5 + inner-listener/dist/index.html | 20 + inner-listener/dist/style.css | 51 + inner-listener/license.txt | 8 + inner-listener/src/index.html | 6 + inner-listener/src/style.css | 51 + input-not-placeholder-shown/README.markdown | 4 + input-not-placeholder-shown/dist/index.html | 19 + input-not-placeholder-shown/dist/style.css | 73 + input-not-placeholder-shown/license.txt | 13 + input-not-placeholder-shown/src/index.html | 5 + input-not-placeholder-shown/src/style.styl | 65 + .../README.markdown | 5 + .../dist/index.html | 21 + .../dist/script.js | 203 + .../dist/style.css | 29 + .../license.txt | 8 + .../src/index.html | 6 + .../src/script.js | 203 + .../src/style.css | 29 + .../README.markdown | 4 + .../dist/index.html | 33 + .../dist/style.css | 126 + .../license.txt | 13 + .../src/index.html | 19 + .../src/style.scss | 124 + interactive-kitten/README.markdown | 5 + interactive-kitten/dist/index.html | 85 + interactive-kitten/dist/script.js | 89 + interactive-kitten/dist/style.css | 297 + interactive-kitten/license.txt | 8 + interactive-kitten/src/index.html | 70 + interactive-kitten/src/script.js | 89 + interactive-kitten/src/style.css | 298 + .../README.markdown | 5 + .../dist/index.html | 54 + .../dist/script.js | 383 + .../dist/style.css | 67 + .../license.txt | 8 + .../src/index.html | 39 + .../src/script.js | 383 + .../src/style.css | 67 + interactive-skate-loading/README.markdown | 5 + interactive-skate-loading/dist/index.html | 61 + interactive-skate-loading/dist/script.js | 353 + interactive-skate-loading/dist/style.css | 252 + interactive-skate-loading/license.txt | 8 + interactive-skate-loading/src/index.html | 45 + interactive-skate-loading/src/script.js | 353 + interactive-skate-loading/src/style.scss | 251 + interior-design-builder/README.markdown | 10 + interior-design-builder/dist/index.html | 101 + interior-design-builder/dist/script.js | 134 + interior-design-builder/dist/style.css | 175 + interior-design-builder/license.txt | 8 + interior-design-builder/src/index.pug | 34 + interior-design-builder/src/script.js | 134 + interior-design-builder/src/style.scss | 215 + interruptions/README.markdown | 4 + interruptions/dist/index.html | 48 + interruptions/dist/script.js | 69 + interruptions/dist/style.css | 48 + interruptions/license.txt | 13 + interruptions/src/index.html | 33 + interruptions/src/script.js | 69 + interruptions/src/style.css | 48 + .../README.markdown | 5 + .../dist/index.html | 46 + .../dist/script.js | 3 + .../dist/style.css | 1 + .../license.txt | 8 + .../src/index.html | 15 + .../src/script.js | 3 + .../src/style.css | 1 + isometric-color-picker/README.markdown | 5 + isometric-color-picker/dist/index.html | 64 + isometric-color-picker/dist/style.css | 248 + isometric-color-picker/license.txt | 8 + isometric-color-picker/src/index.pug | 7 + isometric-color-picker/src/style.sass | 87 + joker-leaderboard/README.markdown | 5 + joker-leaderboard/dist/index.html | 65 + joker-leaderboard/dist/script.js | 53 + joker-leaderboard/dist/style.css | 180 + joker-leaderboard/license.txt | 8 + joker-leaderboard/src/index.html | 49 + joker-leaderboard/src/script.js | 55 + joker-leaderboard/src/style.css | 180 + jumping-gooey-navigation/README.markdown | 5 + jumping-gooey-navigation/dist/index.html | 70 + jumping-gooey-navigation/dist/script.js | 63 + jumping-gooey-navigation/dist/style.css | 102 + jumping-gooey-navigation/license.txt | 8 + jumping-gooey-navigation/src/index.html | 54 + jumping-gooey-navigation/src/script.js | 63 + jumping-gooey-navigation/src/style.css | 103 + keep-on-stackin-3d-css/README.markdown | 5 + keep-on-stackin-3d-css/dist/index.html | 114 + keep-on-stackin-3d-css/dist/script.js | 11 + keep-on-stackin-3d-css/dist/style.css | 286 + keep-on-stackin-3d-css/license.txt | 8 + keep-on-stackin-3d-css/src/index.pug | 28 + keep-on-stackin-3d-css/src/script.babel | 11 + keep-on-stackin-3d-css/src/style.styl | 235 + .../README.markdown | 4 + .../dist/index.html | 23 + .../dist/script.js | 1 + .../dist/style.css | 116 + .../license.txt | 13 + .../src/index.html | 8 + .../src/script.js | 1 + .../src/style.scss | 80 + knob-input-component/README.markdown | 12 + knob-input-component/dist/index.html | 207 + knob-input-component/dist/script.js | 406 + knob-input-component/dist/style.css | 146 + knob-input-component/license.txt | 13 + knob-input-component/src/index.pug | 60 + knob-input-component/src/script.js | 406 + knob-input-component/src/style.scss | 148 + .../README.markdown | 6 + .../dist/index.html | 21 + kurzgesagt-style-earth-3d-zdog/dist/script.js | 331 + kurzgesagt-style-earth-3d-zdog/dist/style.css | 57 + kurzgesagt-style-earth-3d-zdog/license.txt | 13 + kurzgesagt-style-earth-3d-zdog/src/index.html | 6 + kurzgesagt-style-earth-3d-zdog/src/script.js | 331 + kurzgesagt-style-earth-3d-zdog/src/style.scss | 97 + .../README.markdown | 5 + .../dist/index.html | 43 + .../dist/script.js | 3 + .../dist/style.css | 1 + .../license.txt | 8 + .../src/index.html | 12 + .../src/script.js | 3 + .../src/style.css | 1 + latent-cycles/README.markdown | 9 + latent-cycles/dist/index.html | 98 + latent-cycles/dist/script.js | 612 + latent-cycles/dist/style.css | 109 + latent-cycles/license.txt | 13 + latent-cycles/src/index.html | 78 + latent-cycles/src/script.babel | 612 + latent-cycles/src/style.css | 109 + .../README.markdown | 11 + .../dist/index.html | 49 + layout-templates-with-css-grid/dist/style.css | 55 + layout-templates-with-css-grid/license.txt | 8 + layout-templates-with-css-grid/src/index.html | 34 + layout-templates-with-css-grid/src/style.scss | 80 + leaving-out-particularities/README.markdown | 4 + leaving-out-particularities/dist/index.html | 15 + leaving-out-particularities/dist/script.js | 169 + leaving-out-particularities/dist/style.css | 15 + leaving-out-particularities/license.txt | 13 + leaving-out-particularities/src/index.html | 0 leaving-out-particularities/src/script.js | 169 + leaving-out-particularities/src/style.css | 15 + letter-hop/LICENSE.txt | 21 + letter-hop/README.md | 4 + letter-hop/dist/index.html | 25 + letter-hop/dist/script.js | 106 + letter-hop/dist/style.css | 305 + letter-hop/src/index.html | 10 + letter-hop/src/script.js | 108 + letter-hop/src/style.scss | 348 + .../README.markdown | 6 + .../dist/index.html | 19 + .../dist/script.js | 246 + .../dist/style.css | 18 + lines-doing-a-little-group-dance/license.txt | 8 + .../src/index.html | 4 + .../src/script.js | 246 + .../src/style.css | 18 + link-hover-animation/README.markdown | 5 + link-hover-animation/dist/index.html | 29 + link-hover-animation/dist/style.css | 88 + link-hover-animation/license.txt | 8 + link-hover-animation/src/index.html | 14 + link-hover-animation/src/style.scss | 84 + liquid-grid/README.markdown | 4 + liquid-grid/dist/index.html | 18 + liquid-grid/dist/script.js | 371 + liquid-grid/dist/style.css | 7 + liquid-grid/license.txt | 8 + liquid-grid/src/index.html | 1 + liquid-grid/src/script.js | 371 + liquid-grid/src/style.css | 7 + liquid-maskingscroll/README.markdown | 5 + liquid-maskingscroll/dist/index.html | 54 + liquid-maskingscroll/dist/script.js | 13 + liquid-maskingscroll/dist/style.css | 43 + liquid-maskingscroll/license.txt | 8 + liquid-maskingscroll/src/index.html | 38 + liquid-maskingscroll/src/script.js | 13 + liquid-maskingscroll/src/style.css | 43 + literally-lit-elements/README.markdown | 7 + literally-lit-elements/dist/index.html | 39 + literally-lit-elements/dist/script.js | 43 + literally-lit-elements/dist/style.css | 103 + literally-lit-elements/license.txt | 8 + literally-lit-elements/src/index.pug | 31 + literally-lit-elements/src/script.js | 43 + literally-lit-elements/src/style.styl | 73 + .../README.markdown | 16 + .../dist/index.html | 27 + .../dist/script.js | 144 + .../dist/style.css | 90 + .../license.txt | 8 + .../src/index.html | 11 + .../src/script.babel | 144 + .../src/style.scss | 106 + loader-concept/README.markdown | 4 + loader-concept/dist/index.html | 75 + loader-concept/dist/script.js | 151 + loader-concept/dist/style.css | 9 + loader-concept/license.txt | 13 + loader-concept/src/index.html | 58 + loader-concept/src/script.js | 151 + loader-concept/src/style.css | 9 + lonely-little-box/README.markdown | 4 + lonely-little-box/dist/index.html | 48 + lonely-little-box/dist/script.js | 89 + lonely-little-box/dist/style.css | 115 + lonely-little-box/license.txt | 17 + lonely-little-box/src/index.html | 32 + lonely-little-box/src/script.js | 89 + lonely-little-box/src/style.scss | 119 + look-at-concept/README.markdown | 4 + look-at-concept/dist/index.html | 22 + look-at-concept/dist/script.js | 144 + look-at-concept/dist/style.css | 167 + look-at-concept/license.txt | 17 + look-at-concept/src/index.html | 7 + look-at-concept/src/script.babel | 144 + look-at-concept/src/style.sass | 159 + loosey-goosey-1-0-0/README.markdown | 5 + loosey-goosey-1-0-0/dist/index.html | 23 + loosey-goosey-1-0-0/dist/script.js | 103 + loosey-goosey-1-0-0/dist/style.css | 10 + loosey-goosey-1-0-0/license.txt | 8 + loosey-goosey-1-0-0/src/index.html | 8 + loosey-goosey-1-0-0/src/script.babel | 104 + loosey-goosey-1-0-0/src/style.scss | 10 + lotsa-notifications/LICENSE.txt | 21 + lotsa-notifications/README.md | 5 + lotsa-notifications/dist/index.html | 44 + lotsa-notifications/dist/script.js | 289 + lotsa-notifications/dist/style.css | 191 + lotsa-notifications/src/index.html | 29 + lotsa-notifications/src/script.js | 289 + lotsa-notifications/src/style.css | 191 + love-hypnosis/README.markdown | 5 + love-hypnosis/dist/index.html | 28 + love-hypnosis/dist/script.js | 117 + love-hypnosis/dist/style.css | 17 + love-hypnosis/license.txt | 8 + love-hypnosis/src/index.html | 2 + love-hypnosis/src/script.js | 117 + love-hypnosis/src/style.css | 17 + magic-card/README.markdown | 5 + magic-card/dist/index.html | 19 + magic-card/dist/style.css | 102 + magic-card/license.txt | 8 + magic-card/src/index.html | 5 + magic-card/src/style.css | 102 + make-the-web-less-boring/README.markdown | 5 + make-the-web-less-boring/dist/index.html | 23 + make-the-web-less-boring/dist/script.js | 1 + make-the-web-less-boring/dist/style.css | 78 + make-the-web-less-boring/license.txt | 8 + make-the-web-less-boring/src/index.html | 4 + make-the-web-less-boring/src/script.js | 1 + make-the-web-less-boring/src/style.scss | 82 + .../README.markdown | 5 + .../dist/index.html | 278 + .../dist/script.js | 280 + .../dist/style.css | 200 + mars-explorer-scrolltrigger-demo/license.txt | 8 + .../src/index.html | 257 + .../src/script.babel | 280 + .../src/style.less | 235 + material-dashboard-lite-master/.gitignore | 11 + material-dashboard-lite-master/.jscsrc | 4 + material-dashboard-lite-master/LICENSE | 21 + material-dashboard-lite-master/README.md | 86 + material-dashboard-lite-master/bower.json | 25 + .../dist/css/application.css | 11410 ++++ .../dist/css/lib/getmdl-select.min.css | 3 + .../dist/css/lib/nv.d3.css | 647 + .../dist/forms.html | 515 + .../dist/images/DB_16ั…16_20200928204120.png | Bin 0 -> 17739 bytes ...rk_background_1920x1080_20200928204120.png | Bin 0 -> 28016 bytes .../dist/images/Icon_20191114113633.png | Bin 0 -> 36988 bytes .../images/Icon_header_20191114113633.png | Bin 0 -> 35130 bytes .../images/cotoneaster_20191114113633.jpg | Bin 0 -> 87201 bytes .../dist/images/robot_20201001164800.png | Bin 0 -> 54298 bytes .../dist/images/skype_20191114113633.svg | 17 + .../images/weather_bck_20201001164800.png | Bin 0 -> 85378 bytes .../dist/index.html | 530 + material-dashboard-lite-master/dist/js/d3.js | 9554 +++ .../dist/js/getmdl-select.min.js | 2 + .../dist/js/material.js | 3946 ++ .../dist/js/nv.d3.js | 13789 +++++ .../js/widgets/employer-form/employer-form.js | 13 + .../js/widgets/line-chart/line-chart-nvd3.js | 242 + .../js/widgets/pie-chart/pie-chart-nvd3.js | 93 + .../dist/js/widgets/table/table.js | 24 + .../dist/js/widgets/todo/todo.js | 248 + material-dashboard-lite-master/gulpfile.js | 132 + material-dashboard-lite-master/package.json | 52 + .../src/application.scss | 63 + .../src/button/button.scss | 22 + .../src/card/card.scss | 20 + .../src/checkbox/checkbox.scss | 3 + .../src/data-table/data-table.scss | 20 + material-dashboard-lite-master/src/forms.html | 503 + .../src/helper.scss | 91 + .../src/images/card_20191114113633.jpg | Bin 0 -> 1446 bytes .../images/cloudy_and_snow_20191114113633.svg | 26 + .../src/images/imgo_20191114113633.jpg | Bin 0 -> 901 bytes .../src/images/skype_20191114113633.svg | 17 + .../src/images/tick-mask_20191114113633.svg | 30 + .../src/images/tick_20191114113633.svg | 15 + .../src/images/tick_dark_20191114113633.svg | 15 + .../src/images/watch_white_20191114113633.svg | 5 + material-dashboard-lite-master/src/index.html | 518 + .../src/label/label.scss | 20 + .../src/layout/layout.scss | 146 + .../src/list/list.scss | 11 + .../src/menu/menu.scss | 10 + .../src/mixins.scss | 165 + .../src/progress/progress.scss | 13 + .../src/textfield/textfield.scss | 6 + .../src/tooltip/tooltip.scss | 4 + .../src/variables.scss | 270 + .../account-dropdown/account-dropdown.scss | 31 + .../widgets/chart-legend/chart-legend.scss | 15 + .../src/widgets/cotoneaster/cotoneaster.scss | 20 + .../widgets/employer-form/employer-form.js | 9 + .../widgets/employer-form/employer-form.scss | 123 + .../src/widgets/form/form.scss | 94 + .../src/widgets/input-group/input-group.scss | 26 + .../src/widgets/line-chart/line-chart-nvd3.js | 265 + .../src/widgets/line-chart/line-chart.scss | 40 + .../src/widgets/link/link.scss | 5 + .../messages-dropdown.scss | 36 + .../notifications-dropdown.scss | 19 + .../src/widgets/pie-chart/pie-chart-nvd3.js | 144 + .../src/widgets/pie-chart/pie-chart.scss | 25 + .../src/widgets/robot/robot.scss | 14 + .../setting-dropdown/settings-dropdown.scss | 6 + .../src/widgets/table/table.js | 20 + .../src/widgets/table/table.scss | 43 + .../src/widgets/todo/todo.js | 229 + .../src/widgets/todo/todo.scss | 43 + .../src/widgets/trending/trending.scss | 28 + .../src/widgets/weather/weather.scss | 42 + .../README.markdown | 6 + .../dist/index.html | 15 + .../dist/style.css | 33 + matrix-of-cube-with-one-element/license.txt | 8 + .../src/index.html | 1 + matrix-of-cube-with-one-element/src/style.css | 33 + .../README.markdown | 9 + .../dist/index.html | 1995 + .../dist/script.js | 9 + .../dist/style.css | 713 + .../license.txt | 8 + .../src/index.pug | 18 + .../src/script.js | 9 + .../src/style.scss | 569 + meow-meow-keyboard/README.markdown | 5 + meow-meow-keyboard/dist/index.html | 82 + meow-meow-keyboard/dist/script.js | 96 + meow-meow-keyboard/dist/style.css | 116 + meow-meow-keyboard/license.txt | 8 + meow-meow-keyboard/src/index.html | 66 + meow-meow-keyboard/src/script.js | 96 + meow-meow-keyboard/src/style.scss | 158 + metal-buttons/README.markdown | 5 + metal-buttons/dist/index.html | 40 + metal-buttons/dist/style.css | 218 + metal-buttons/license.txt | 8 + metal-buttons/src/index.html | 26 + metal-buttons/src/style.css | 218 + .../README.markdown | 5 + .../dist/index.html | 224 + .../dist/script.js | 12 + .../dist/style.css | 179 + minimal-pure-css-textile-patterns/license.txt | 8 + .../src/index.pug | 2737 + .../src/script.babel | 12 + .../src/style.scss | 173 + mobile-menu/README.markdown | 5 + mobile-menu/dist/index.html | 40 + mobile-menu/dist/script.js | 21 + mobile-menu/dist/style.css | 118 + mobile-menu/license.txt | 8 + mobile-menu/src/index.pug | 38 + mobile-menu/src/script.js | 21 + mobile-menu/src/style.scss | 116 + .../README.markdown | 5 + .../dist/index.html | 26 + .../dist/script.js | 242 + .../license.txt | 8 + .../src/index.html | 0 .../src/script.vue | 368 + .../README.markdown | 6 + .../dist/index.html | 175 + .../dist/style.css | 439 + modern-blog-layout-with-css-grid/license.txt | 8 + .../src/index.html | 160 + .../src/style.scss | 459 + monokai/README.markdown | 4 + monokai/dist/index.html | 153 + monokai/dist/style.css | 108 + monokai/license.txt | 8 + monokai/src/index.html | 138 + monokai/src/style.css | 91 + moonriverpure-javascript/README.markdown | 5 + moonriverpure-javascript/dist/index.html | 16 + moonriverpure-javascript/dist/script.js | 220 + moonriverpure-javascript/dist/style.css | 11 + moonriverpure-javascript/license.txt | 8 + moonriverpure-javascript/src/index.html | 1 + moonriverpure-javascript/src/script.js | 220 + moonriverpure-javascript/src/style.css | 11 + .../README.markdown | 5 + .../dist/index.html | 1017 + more-cursed-accent-color-vibes/dist/style.css | 24 + more-cursed-accent-color-vibes/license.txt | 8 + more-cursed-accent-color-vibes/src/index.pug | 14 + more-cursed-accent-color-vibes/src/style.css | 24 + morning/README.markdown | 5 + morning/dist/index.html | 23 + morning/dist/script.js | 134 + morning/dist/style.css | 54 + morning/license.txt | 8 + morning/src/index.html | 7 + morning/src/script.babel | 134 + morning/src/style.scss | 57 + .../README.markdown | 6 + .../dist/index.html | 22 + .../dist/script.js | 1 + .../dist/style.css | 187 + .../license.txt | 8 + .../src/index.pug | 5 + .../src/script.babel | 1 + .../src/style.styl | 132 + .../LICENSE.txt | 21 + .../README.md | 4 + .../dist/index.html | 16 + .../dist/script.js | 19 + .../dist/style.css | 28 + .../src/index.html | 1 + .../src/script.js | 19 + .../src/style.css | 28 + .../README.markdown | 7 + .../dist/index.html | 770 + .../dist/script.js | 1009 + .../dist/style.css | 162 + .../license.txt | 8 + .../src/index.html | 753 + .../src/script.js | 1009 + .../src/style.css | 162 + multi-colored-text-with-css/README.markdown | 5 + multi-colored-text-with-css/dist/index.html | 22 + multi-colored-text-with-css/dist/script.js | 1 + multi-colored-text-with-css/dist/style.css | 67 + multi-colored-text-with-css/license.txt | 8 + multi-colored-text-with-css/src/index.html | 5 + multi-colored-text-with-css/src/script.js | 1 + multi-colored-text-with-css/src/style.css | 67 + music-app/README.markdown | 7 + music-app/dist/index.html | 137 + music-app/dist/script.js | 1 + music-app/dist/style.css | 589 + music-app/license.txt | 8 + music-app/src/index.html | 120 + music-app/src/script.js | 1 + music-app/src/style.scss | 612 + muson-css/README.markdown | 11 + muson-css/dist/index.html | 164 + muson-css/dist/style.css | 1387 + muson-css/license.txt | 8 + muson-css/src/index.html | 150 + muson-css/src/style.css | 1387 + mutationobserver-example/README.markdown | 5 + mutationobserver-example/dist/index.html | 23 + mutationobserver-example/dist/script.js | 22 + mutationobserver-example/dist/style.css | 3 + mutationobserver-example/license.txt | 8 + mutationobserver-example/src/index.html | 8 + mutationobserver-example/src/script.js | 22 + mutationobserver-example/src/style.css | 3 + .../README.markdown | 5 + .../dist/index.html | 69 + .../dist/style.css | 38 + .../license.txt | 9 + .../src/index.html | 54 + .../src/style.css | 38 + neptune/README.markdown | 5 + neptune/dist/index.html | 58 + neptune/dist/style.css | 198 + neptune/license.txt | 8 + neptune/src/index.html | 44 + neptune/src/style.scss | 198 + neumorphic-playground/README.markdown | 10 + neumorphic-playground/dist/index.html | 20 + neumorphic-playground/dist/script.js | 445 + neumorphic-playground/dist/style.css | 678 + neumorphic-playground/license.txt | 8 + neumorphic-playground/src/index.pug | 1 + neumorphic-playground/src/script.babel | 445 + neumorphic-playground/src/style.styl | 658 + neuomorphic-checkboxes/README.markdown | 4 + neuomorphic-checkboxes/dist/index.html | 73 + neuomorphic-checkboxes/dist/style.css | 60 + neuomorphic-checkboxes/license.txt | 8 + neuomorphic-checkboxes/src/index.html | 59 + neuomorphic-checkboxes/src/style.scss | 73 + .../README.markdown | 5 + .../dist/index.html | 83 + .../dist/style.css | 408 + .../license.txt | 8 + .../src/index.html | 70 + .../src/style.scss | 379 + news-section-w-tailwind-css/README.markdown | 5 + news-section-w-tailwind-css/dist/index.html | 105 + news-section-w-tailwind-css/license.txt | 8 + news-section-w-tailwind-css/src/index.html | 91 + night-day/README.markdown | 4 + night-day/dist/index.html | 105 + night-day/dist/script.js | 69 + night-day/dist/style.css | 76 + night-day/license.txt | 8 + night-day/src/index.html | 88 + night-day/src/script.js | 69 + night-day/src/style.css | 71 + noisy-svg-lines/README.markdown | 13 + noisy-svg-lines/dist/blgjlm.js | 418 + noisy-svg-lines/dist/index.html | 17 + noisy-svg-lines/dist/script.js | 96 + noisy-svg-lines/dist/style.css | 10 + noisy-svg-lines/license.txt | 13 + noisy-svg-lines/src/blgjlm.js | 418 + noisy-svg-lines/src/index.html | 2 + noisy-svg-lines/src/script.js | 96 + noisy-svg-lines/src/style.css | 10 + noisy-vertical-svg-lines/README.markdown | 13 + noisy-vertical-svg-lines/dist/index.html | 17 + noisy-vertical-svg-lines/dist/script.js | 96 + noisy-vertical-svg-lines/dist/style.css | 10 + noisy-vertical-svg-lines/license.txt | 8 + noisy-vertical-svg-lines/src/index.html | 2 + noisy-vertical-svg-lines/src/script.js | 96 + noisy-vertical-svg-lines/src/style.css | 10 + onboarding-sequence/README.markdown | 7 + onboarding-sequence/dist/index.html | 19 + onboarding-sequence/dist/script.js | 1545 + onboarding-sequence/dist/style.css | 622 + onboarding-sequence/license.txt | 8 + onboarding-sequence/src/index.html | 1 + onboarding-sequence/src/script.babel | 1546 + onboarding-sequence/src/style.css | 622 + one-hundred-rules/README.markdown | 9 + one-hundred-rules/dist/index.html | 116 + one-hundred-rules/dist/style.css | 137 + one-hundred-rules/license.txt | 8 + one-hundred-rules/src/index.pug | 3 + one-hundred-rules/src/style.scss | 151 + only-css-infinite-plug-in/README.markdown | 5 + only-css-infinite-plug-in/dist/index.html | 587 + only-css-infinite-plug-in/dist/style.css | 4091 ++ only-css-infinite-plug-in/license.txt | 8 + only-css-infinite-plug-in/src/index.pug | 21 + only-css-infinite-plug-in/src/style.scss | 245 + only-css-infinite-wave/README.markdown | 4 + only-css-infinite-wave/dist/index.html | 201 + only-css-infinite-wave/dist/style.css | 1401 + only-css-infinite-wave/license.txt | 17 + only-css-infinite-wave/src/index.pug | 7 + only-css-infinite-wave/src/style.scss | 92 + only-css-moon-clip/README.markdown | 5 + only-css-moon-clip/dist/index.html | 583 + only-css-moon-clip/dist/style.css | 1694 + only-css-moon-clip/license.txt | 8 + only-css-moon-clip/src/index.pug | 8 + only-css-moon-clip/src/style.scss | 126 + only-css-mt-fuji/README.markdown | 4 + only-css-mt-fuji/dist/index.html | 200 + only-css-mt-fuji/dist/style.css | 5779 ++ only-css-mt-fuji/license.txt | 13 + only-css-mt-fuji/src/index.pug | 11 + only-css-mt-fuji/src/style.scss | 142 + only-css-satellite/README.markdown | 5 + only-css-satellite/dist/index.html | 777 + only-css-satellite/dist/style.css | 4690 ++ only-css-satellite/license.txt | 8 + only-css-satellite/src/index.pug | 20 + only-css-satellite/src/style.scss | 184 + only-css-wave-dots/README.markdown | 5 + only-css-wave-dots/dist/index.html | 923 + only-css-wave-dots/dist/style.css | 533 + only-css-wave-dots/license.txt | 8 + only-css-wave-dots/src/index.pug | 10 + only-css-wave-dots/src/style.scss | 124 + .../README.markdown | 5 + .../dist/index.html | 16 + .../dist/script.js | 151 + .../dist/style.css | 9 + .../license.txt | 8 + .../src/index.html | 1 + .../src/script.js | 151 + .../src/style.css | 9 + p5js-svg-flow-field/README.markdown | 5 + p5js-svg-flow-field/dist/index.html | 38 + p5js-svg-flow-field/dist/script.js | 96 + p5js-svg-flow-field/dist/style.css | 160 + p5js-svg-flow-field/license.txt | 8 + p5js-svg-flow-field/src/index.html | 21 + p5js-svg-flow-field/src/script.js | 97 + p5js-svg-flow-field/src/style.scss | 167 + pagination-buttons/README.markdown | 4 + pagination-buttons/dist/index.html | 21 + pagination-buttons/dist/script.js | 19 + pagination-buttons/dist/style.css | 45 + pagination-buttons/license.txt | 13 + pagination-buttons/src/index.html | 6 + pagination-buttons/src/script.js | 19 + pagination-buttons/src/style.css | 45 + panda-button/README.markdown | 5 + panda-button/dist/index.html | 46 + panda-button/dist/script.js | 262 + panda-button/dist/style.css | 206 + panda-button/license.txt | 8 + panda-button/src/index.html | 31 + panda-button/src/script.js | 265 + panda-button/src/style.css | 207 + pantone-color-chips/README.markdown | 12 + pantone-color-chips/dist/index.html | 29 + pantone-color-chips/dist/script.js | 67 + pantone-color-chips/dist/style.css | 125 + pantone-color-chips/license.txt | 8 + pantone-color-chips/src/index.html | 11 + pantone-color-chips/src/script.js | 67 + pantone-color-chips/src/style.css | 125 + paper-chase/README.markdown | 4 + paper-chase/dist/index.html | 176 + paper-chase/dist/style.css | 800 + paper-chase/license.txt | 8 + paper-chase/src/index.haml | 15 + paper-chase/src/style.scss | 309 + paper-cut-text-effect/README.markdown | 7 + paper-cut-text-effect/dist/index.html | 17 + paper-cut-text-effect/dist/script.js | 25 + paper-cut-text-effect/dist/style.css | 83 + paper-cut-text-effect/license.txt | 8 + paper-cut-text-effect/src/index.html | 0 paper-cut-text-effect/src/script.babel | 26 + paper-cut-text-effect/src/style.scss | 85 + .../README.markdown | 22 + .../dist/index.html | 90 + .../dist/style.css | 268 + .../license.txt | 13 + .../src/index.html | 76 + .../src/style.scss | 205 + particle-photos/README.markdown | 7 + particle-photos/dist/index.html | 273 + particle-photos/dist/script.js | 335 + particle-photos/dist/style.css | 75 + particle-photos/license.txt | 8 + particle-photos/src/index.html | 258 + particle-photos/src/script.js | 335 + particle-photos/src/style.css | 75 + pdf-flyer-generator/README.markdown | 4 + pdf-flyer-generator/dist/index.html | 102 + pdf-flyer-generator/dist/script.js | 385 + pdf-flyer-generator/dist/style.css | 26 + pdf-flyer-generator/license.txt | 13 + pdf-flyer-generator/src/index.html | 84 + pdf-flyer-generator/src/script.js | 385 + pdf-flyer-generator/src/style.less | 32 + pen-export-MbpPja/LICENSE.txt | 21 + pen-export-MbpPja/README.md | 4 + pen-export-MbpPja/index.html | 32 + pen-export-MbpPja/style.css | 29 + pen-export-tqdmv/LICENSE.txt | 21 + pen-export-tqdmv/README.md | 4 + pen-export-tqdmv/dist/index.html | 305 + pen-export-tqdmv/dist/script.js | 802 + pen-export-tqdmv/dist/style.css | 15 + pen-export-tqdmv/src/index.html | 290 + pen-export-tqdmv/src/script.js | 802 + pen-export-tqdmv/src/style.css | 15 + phone-reflection/README.markdown | 6 + phone-reflection/dist/index.html | 151 + phone-reflection/dist/script.js | 847 + phone-reflection/dist/style.css | 127 + phone-reflection/license.txt | 8 + phone-reflection/src/index.html | 136 + phone-reflection/src/script.js | 847 + phone-reflection/src/style.css | 127 + pie-chart-with-pure-css/README.markdown | 5 + pie-chart-with-pure-css/dist/index.html | 15 + pie-chart-with-pure-css/dist/style.css | 13 + pie-chart-with-pure-css/license.txt | 8 + pie-chart-with-pure-css/src/index.html | 1 + pie-chart-with-pure-css/src/style.css | 13 + piet-mondrian-s-css-grid/README.markdown | 5 + piet-mondrian-s-css-grid/dist/index.html | 35 + piet-mondrian-s-css-grid/dist/style.css | 86 + piet-mondrian-s-css-grid/license.txt | 8 + piet-mondrian-s-css-grid/src/index.html | 21 + piet-mondrian-s-css-grid/src/style.css | 86 + .../README.markdown | 5 + .../dist/index.html | 32 + .../dist/style.css | 81 + .../license.txt | 8 + .../src/index.html | 16 + .../src/style.scss | 75 + pixi-sprite-bubbles/README.markdown | 4 + .../dist/742d19fae30395a25522f43c1.js | 60 + pixi-sprite-bubbles/dist/index.html | 17 + pixi-sprite-bubbles/dist/script.js | 127 + pixi-sprite-bubbles/dist/style.css | 15 + pixi-sprite-bubbles/license.txt | 13 + .../src/742d19fae30395a25522f43c1.js | 60 + pixi-sprite-bubbles/src/index.html | 1 + pixi-sprite-bubbles/src/script.js | 127 + pixi-sprite-bubbles/src/style.css | 15 + planetary-vignettes/README.markdown | 8 + planetary-vignettes/dist/index.html | 20 + planetary-vignettes/dist/script.js | 634 + planetary-vignettes/dist/style.css | 21 + planetary-vignettes/license.txt | 8 + planetary-vignettes/src/index.html | 4 + planetary-vignettes/src/script.js | 634 + planetary-vignettes/src/style.css | 23 + platonics/README.markdown | 5 + platonics/dist/index.html | 338 + platonics/dist/script.js | 1306 + platonics/dist/style.css | 60 + platonics/license.txt | 8 + platonics/src/index.html | 323 + platonics/src/script.babel | 1306 + platonics/src/style.css | 60 + .../README.markdown | 4 + .../dist/index.html | 42 + .../dist/script.js | 7 + .../dist/style.css | 276 + .../license.txt | 8 + .../src/index.html | 26 + .../src/script.babel | 8 + .../src/style.scss | 241 + .../README.markdown | 4 + .../dist/index.html | 99 + .../dist/script.js | 103 + .../dist/style.css | 3 + playlist-artwork-for-cover-lover/license.txt | 8 + .../src/index.html | 82 + .../src/script.js | 103 + .../src/style.scss | 1 + plot-direction/README.markdown | 5 + plot-direction/dist/index.html | 97 + plot-direction/dist/style.css | 51 + plot-direction/license.txt | 8 + plot-direction/src/index.html | 83 + plot-direction/src/style.css | 51 + .../README.markdown | 7 + .../dist/index.html | 48 + pop-the-bubbles-three-js-scene/dist/script.js | 369 + pop-the-bubbles-three-js-scene/dist/style.css | 34 + pop-the-bubbles-three-js-scene/license.txt | 8 + pop-the-bubbles-three-js-scene/src/index.html | 30 + pop-the-bubbles-three-js-scene/src/script.js | 369 + pop-the-bubbles-three-js-scene/src/style.css | 34 + popcssicles/README.markdown | 5 + popcssicles/dist/index.html | 143 + popcssicles/dist/script.js | 19 + popcssicles/dist/style.css | 294 + popcssicles/license.txt | 8 + popcssicles/src/index.haml | 12 + popcssicles/src/script.js | 21 + popcssicles/src/style.scss | 196 + potion-container/README.markdown | 5 + potion-container/dist/index.html | 33 + potion-container/dist/script.js | 1 + potion-container/dist/style.css | 183 + potion-container/license.txt | 8 + potion-container/src/index.html | 9 + potion-container/src/script.js | 1 + potion-container/src/style.scss | 186 + practice-canvas2d/README.markdown | 5 + practice-canvas2d/dist/index.html | 16 + practice-canvas2d/dist/script.js | 345 + practice-canvas2d/dist/style.css | 22 + practice-canvas2d/license.txt | 8 + practice-canvas2d/src/index.pug | 0 practice-canvas2d/src/script.js | 345 + practice-canvas2d/src/style.styl | 20 + procedural-pathways/README.markdown | 5 + procedural-pathways/dist/index.html | 138 + procedural-pathways/dist/script.js | 25 + procedural-pathways/dist/style.css | 407 + procedural-pathways/license.txt | 8 + procedural-pathways/src/index.haml | 8 + procedural-pathways/src/script.js | 25 + procedural-pathways/src/style.scss | 455 + product-showcase-ui/README.markdown | 7 + product-showcase-ui/dist/index.html | 176 + product-showcase-ui/dist/script.js | 16 + product-showcase-ui/dist/style.css | 394 + product-showcase-ui/license.txt | 8 + product-showcase-ui/src/index.html | 160 + product-showcase-ui/src/script.babel | 16 + product-showcase-ui/src/style.scss | 409 + products-dashboard-ui/README.markdown | 5 + products-dashboard-ui/dist/index.html | 361 + products-dashboard-ui/dist/script.js | 24 + products-dashboard-ui/dist/style.css | 605 + products-dashboard-ui/license.txt | 8 + products-dashboard-ui/src/index.html | 345 + products-dashboard-ui/src/script.js | 24 + products-dashboard-ui/src/style.scss | 636 + profusion-2/README.markdown | 16 + profusion-2/dist/index.html | 167 + profusion-2/dist/script.js | 314 + profusion-2/dist/style.css | 258 + profusion-2/license.txt | 8 + profusion-2/src/index.pug | 93 + profusion-2/src/script.js | 315 + profusion-2/src/style.scss | 249 + project-management-dashboard-ui/LICENSE.txt | 21 + project-management-dashboard-ui/README.md | 5 + .../dist/index.html | 466 + .../dist/script.js | 33 + .../dist/style.css | 862 + .../src/index.html | 450 + project-management-dashboard-ui/src/script.js | 33 + .../src/style.scss | 910 + psychedelic-jellyfish-shader/README.markdown | 5 + psychedelic-jellyfish-shader/dist/index.html | 249 + psychedelic-jellyfish-shader/dist/script.js | 58 + psychedelic-jellyfish-shader/dist/style.css | 10 + psychedelic-jellyfish-shader/license.txt | 8 + psychedelic-jellyfish-shader/src/index.html | 234 + psychedelic-jellyfish-shader/src/script.babel | 58 + psychedelic-jellyfish-shader/src/style.scss | 10 + psychedelic-waves/README.markdown | 5 + psychedelic-waves/dist/index.html | 215 + psychedelic-waves/dist/script.js | 155 + psychedelic-waves/dist/style.css | 58 + psychedelic-waves/license.txt | 8 + psychedelic-waves/src/index.html | 198 + psychedelic-waves/src/script.babel | 155 + psychedelic-waves/src/style.scss | 59 + .../README.markdown | 5 + .../dist/index.html | 25 + pulse-animation-in-svg-or-css3/dist/style.css | 70 + pulse-animation-in-svg-or-css3/license.txt | 9 + pulse-animation-in-svg-or-css3/src/index.html | 11 + pulse-animation-in-svg-or-css3/src/style.scss | 74 + .../README.markdown | 5 + .../dist/index.html | 86 + .../dist/script.js | 39 + .../dist/style.css | 219 + .../license.txt | 8 + .../src/index.html | 71 + .../src/script.js | 39 + .../src/style.css | 219 + .../README.markdown | 5 + .../dist/index.html | 26 + .../dist/script.js | 1 + .../dist/style.css | 290 + pure-css-cyberpunk-2077-buttons/license.txt | 8 + .../src/index.html | 10 + .../src/script.babel | 1 + pure-css-cyberpunk-2077-buttons/src/style.css | 195 + pure-css-eye/README.markdown | 5 + pure-css-eye/dist/index.html | 55 + pure-css-eye/dist/script.js | 1 + pure-css-eye/dist/style.css | 681 + pure-css-eye/license.txt | 8 + pure-css-eye/src/index.html | 40 + pure-css-eye/src/script.js | 1 + pure-css-eye/src/style.css | 681 + .../README.markdown | 9 + .../dist/index.html | 34 + .../dist/style.css | 74 + .../license.txt | 8 + .../src/index.html | 19 + .../src/style.scss | 73 + pure-css-halloween-zipper/README.markdown | 33 + .../dist/https___codepen_io_thebab.css | 40 + pure-css-halloween-zipper/dist/index.html | 81 + pure-css-halloween-zipper/dist/style.css | 81 + pure-css-halloween-zipper/license.txt | 8 + .../src/https___codepen_io_thebab.css | 40 + pure-css-halloween-zipper/src/index.pug | 6 + pure-css-halloween-zipper/src/style.scss | 39 + .../README.markdown | 5 + .../dist/index.html | 458 + .../dist/style.css | 7355 +++ .../license.txt | 8 + .../src/index.html | 444 + .../src/style.css | 7421 +++ pw-dashboard/README.markdown | 5 + pw-dashboard/dist/index.html | 99 + pw-dashboard/dist/style.css | 204 + pw-dashboard/license.txt | 8 + pw-dashboard/src/index.pug | 118 + pw-dashboard/src/style.styl | 220 + quarto/README.markdown | 7 + quarto/dist/index.html | 19 + quarto/dist/script.js | 197 + quarto/dist/style.css | 131 + quarto/license.txt | 8 + quarto/src/index.html | 3 + quarto/src/script.js | 197 + quarto/src/style.css | 131 + .../LICENSE.txt | 21 + .../README.md | 7 + .../dist/index.html | 65 + .../dist/style.css | 266 + .../src/index.pug | 48 + .../src/style.scss | 270 + .../README.markdown | 16 + .../dist/https___codepen_io_thebab.css | 40 + .../dist/index.html | 32 + .../dist/style.css | 73 + .../license.txt | 13 + .../src/https___codepen_io_thebab.css | 40 + .../src/index.pug | 8 + .../src/style.scss | 77 + rainbow-hypercube/README.markdown | 5 + rainbow-hypercube/dist/index.html | 17 + rainbow-hypercube/dist/script.js | 92 + rainbow-hypercube/dist/style.css | 4 + rainbow-hypercube/license.txt | 8 + rainbow-hypercube/src/index.html | 1 + rainbow-hypercube/src/script.js | 92 + rainbow-hypercube/src/style.scss | 4 + rainbow-shader/README.markdown | 5 + rainbow-shader/dist/index.html | 73 + rainbow-shader/dist/script.js | 67 + rainbow-shader/dist/style.css | 3 + rainbow-shader/license.txt | 8 + rainbow-shader/src/index.html | 58 + rainbow-shader/src/script.js | 67 + rainbow-shader/src/style.css | 3 + .../README.markdown | 5 + .../dist/index.html | 33 + .../dist/script.js | 101 + .../dist/style.css | 99 + random-rainbow-generator-skypack/license.txt | 8 + .../src/index.html | 18 + .../src/script.js | 101 + .../src/style.css | 99 + .../README.markdown | 5 + .../dist/index.html | 62 + .../dist/script.js | 285 + .../dist/style.css | 204 + random-svg-pattern-creator-tool/license.txt | 8 + .../src/index.html | 47 + random-svg-pattern-creator-tool/src/script.js | 285 + random-svg-pattern-creator-tool/src/style.css | 204 + random-z-rich/README.markdown | 5 + random-z-rich/dist/index.html | 19 + random-z-rich/dist/script.js | 90 + random-z-rich/dist/style.css | 48 + random-z-rich/license.txt | 8 + random-z-rich/src/index.html | 3 + random-z-rich/src/script.babel | 90 + random-z-rich/src/style.scss | 49 + .../README.markdown | 4 + .../dist/index.html | 33 + .../dist/script.js | 4 + .../dist/style.css | 17 + .../license.txt | 8 + .../src/index.html | 18 + .../src/script.ts | 5 + .../src/style.scss | 23 + .../README.markdown | 4 + .../dist/index.html | 24 + .../dist/script.js | 214 + .../dist/style.css | 774 + .../license.txt | 13 + .../src/index.haml | 7 + .../src/script.js | 214 + .../src/style.scss | 190 + range-pills/README.markdown | 5 + range-pills/dist/index.html | 65 + range-pills/dist/script.js | 73 + range-pills/dist/style.css | 165 + range-pills/license.txt | 8 + range-pills/src/index.html | 50 + range-pills/src/script.js | 73 + range-pills/src/style.sass | 130 + react-color-gradients/README.markdown | 7 + react-color-gradients/dist/index.html | 19 + react-color-gradients/dist/script.js | 141 + react-color-gradients/dist/style.css | 58 + react-color-gradients/license.txt | 8 + react-color-gradients/src/index.html | 1 + react-color-gradients/src/script.babel | 141 + react-color-gradients/src/style.css | 58 + .../README.markdown | 5 + .../dist/index.html | 17 + .../dist/script.js | 198 + .../dist/style.css | 129 + .../license.txt | 8 + .../src/index.pug | 1 + .../src/script.babel | 198 + .../src/style.styl | 121 + reactive-synth/README.markdown | 5 + reactive-synth/dist/index.html | 25 + reactive-synth/dist/script.js | 622 + reactive-synth/dist/style.css | 63 + reactive-synth/license.txt | 8 + reactive-synth/src/index.html | 7 + reactive-synth/src/script.babel | 622 + reactive-synth/src/style.sass | 88 + .../README.markdown | 8 + .../dist/index.html | 17 + .../dist/script.js | 110 + .../dist/style.css | 114 + .../license.txt | 13 + .../src/index.pug | 1 + .../src/script.babel | 110 + .../src/style.styl | 113 + responsive-castle/README.markdown | 5 + responsive-castle/dist/index.html | 757 + responsive-castle/dist/script.js | 682 + responsive-castle/dist/style.css | 101 + responsive-castle/license.txt | 8 + responsive-castle/src/index.html | 741 + responsive-castle/src/script.babel | 682 + responsive-castle/src/style.scss | 94 + responsive-comic-book-layout/README.markdown | 4 + responsive-comic-book-layout/dist/index.html | 35 + responsive-comic-book-layout/dist/style.css | 126 + responsive-comic-book-layout/license.txt | 13 + responsive-comic-book-layout/src/index.html | 21 + responsive-comic-book-layout/src/style.css | 126 + responsive-grid-timeline/README.markdown | 5 + responsive-grid-timeline/dist/index.html | 97 + responsive-grid-timeline/dist/style.css | 116 + responsive-grid-timeline/license.txt | 8 + responsive-grid-timeline/src/index.html | 84 + responsive-grid-timeline/src/style.scss | 124 + responsive-social-platform-ui/README.markdown | 6 + responsive-social-platform-ui/dist/index.html | 520 + responsive-social-platform-ui/dist/style.css | 918 + responsive-social-platform-ui/license.txt | 8 + responsive-social-platform-ui/src/index.html | 505 + responsive-social-platform-ui/src/style.scss | 931 + rgbconfettimyk-generative-art/README.markdown | 5 + rgbconfettimyk-generative-art/dist/index.html | 16 + rgbconfettimyk-generative-art/dist/script.js | 73 + rgbconfettimyk-generative-art/dist/style.css | 17 + rgbconfettimyk-generative-art/license.txt | 8 + rgbconfettimyk-generative-art/src/index.html | 1 + rgbconfettimyk-generative-art/src/script.js | 73 + rgbconfettimyk-generative-art/src/style.css | 17 + .../README.markdown | 5 + .../dist/index.html | 32 + .../dist/script.js | 1 + .../dist/style.css | 62 + .../license.txt | 8 + .../src/index.svg | 16 + .../src/script.js | 1 + .../src/style.scss | 69 + rotating-thing/README.markdown | 5 + rotating-thing/dist/index.html | 16 + rotating-thing/dist/script.js | 32 + rotating-thing/dist/style.css | 3 + rotating-thing/license.txt | 8 + rotating-thing/src/index.html | 0 rotating-thing/src/script.js | 32 + rotating-thing/src/style.css | 3 + rounded-dashes/README.markdown | 6 + rounded-dashes/dist/index.html | 16 + rounded-dashes/dist/style.css | 33 + rounded-dashes/license.txt | 8 + rounded-dashes/src/index.html | 2 + rounded-dashes/src/style.css | 33 + running-waves-with-d3/README.markdown | 5 + running-waves-with-d3/dist/index.html | 16 + running-waves-with-d3/dist/script.js | 104 + running-waves-with-d3/dist/style.css | 22 + running-waves-with-d3/license.txt | 8 + running-waves-with-d3/src/index.html | 1 + running-waves-with-d3/src/script.js | 104 + running-waves-with-d3/src/style.css | 22 + saul-bass-ified/README.markdown | 5 + saul-bass-ified/dist/index.html | 30 + saul-bass-ified/dist/script.js | 288 + saul-bass-ified/dist/style.css | 24 + saul-bass-ified/license.txt | 8 + saul-bass-ified/src/index.html | 15 + saul-bass-ified/src/script.js | 288 + saul-bass-ified/src/style.css | 24 + scroll-timeline-example/LICENSE.txt | 22 + scroll-timeline-example/README.md | 5 + scroll-timeline-example/dist/index.html | 18 + scroll-timeline-example/dist/style.css | 97 + scroll-timeline-example/src/index.html | 4 + scroll-timeline-example/src/style.css | 97 + .../README.markdown | 5 + .../dist/index.html | 26 + .../dist/style.css | 38 + scrolling-box-w-scroll-behavior/license.txt | 8 + .../src/index.html | 11 + scrolling-box-w-scroll-behavior/src/style.css | 38 + scrolling-grid/README.markdown | 4 + scrolling-grid/dist/index.html | 285 + scrolling-grid/dist/style.css | 51 + scrolling-grid/license.txt | 13 + scrolling-grid/src/index.html | 271 + scrolling-grid/src/style.scss | 54 + scrolly-carousel-example-7/README.markdown | 5 + scrolly-carousel-example-7/dist/index.html | 53 + scrolly-carousel-example-7/dist/style.css | 95 + scrolly-carousel-example-7/license.txt | 8 + scrolly-carousel-example-7/src/index.html | 39 + scrolly-carousel-example-7/src/style.scss | 83 + search-algorithm-puppy/README.markdown | 5 + search-algorithm-puppy/dist/index.html | 738 + search-algorithm-puppy/dist/script.js | 387 + search-algorithm-puppy/dist/style.css | 128 + search-algorithm-puppy/license.txt | 8 + search-algorithm-puppy/src/index.html | 723 + search-algorithm-puppy/src/script.js | 387 + search-algorithm-puppy/src/style.css | 128 + selected-demos-2019-2020/README.markdown | 5 + selected-demos-2019-2020/dist/index.html | 160 + selected-demos-2019-2020/dist/script.js | 155 + selected-demos-2019-2020/dist/style.css | 1263 + selected-demos-2019-2020/license.txt | 8 + selected-demos-2019-2020/src/index.haml | 104 + selected-demos-2019-2020/src/script.js | 155 + selected-demos-2019-2020/src/style.scss | 1094 + shadow-set/README.markdown | 5 + shadow-set/dist/index.html | 22 + shadow-set/dist/style.css | 44 + shadow-set/license.txt | 8 + shadow-set/src/index.html | 7 + shadow-set/src/style.scss | 46 + shape-outsideface/README.markdown | 4 + shape-outsideface/dist/index.html | 17 + shape-outsideface/dist/script.js | 39 + shape-outsideface/dist/style.css | 55 + shape-outsideface/license.txt | 13 + shape-outsideface/src/index.html | 3 + shape-outsideface/src/script.js | 39 + shape-outsideface/src/style.css | 52 + simple-css-loaders/README.markdown | 5 + simple-css-loaders/dist/index.html | 54 + simple-css-loaders/dist/style.css | 570 + simple-css-loaders/license.txt | 8 + simple-css-loaders/src/index.html | 38 + simple-css-loaders/src/style.css | 395 + simple-music-app-ui-design/README.markdown | 6 + simple-music-app-ui-design/dist/index.html | 374 + simple-music-app-ui-design/dist/script.js | 12 + simple-music-app-ui-design/dist/style.css | 897 + simple-music-app-ui-design/license.txt | 8 + simple-music-app-ui-design/src/index.html | 359 + simple-music-app-ui-design/src/script.js | 12 + simple-music-app-ui-design/src/style.scss | 903 + simplex-life-v8/README.markdown | 4 + simplex-life-v8/dist/index.html | 18 + simplex-life-v8/dist/script.js | 78 + simplex-life-v8/dist/style.css | 21 + simplex-life-v8/license.txt | 17 + simplex-life-v8/src/index.html | 0 simplex-life-v8/src/script.babel | 78 + simplex-life-v8/src/style.scss | 18 + .../LICENSE.txt | 21 + single-div-css-folded-origami-shop/README.md | 5 + .../dist/index.html | 17 + .../dist/script.js | 2 + .../dist/style.css | 50 + .../src/index.html | 1 + .../src/script.js | 2 + .../src/style.stylus | 125 + .../README.markdown | 5 + .../dist/index.html | 16 + .../dist/script.js | 1 + .../dist/style.css | 57 + single-div-flickering-neon-text/license.txt | 9 + .../src/index.html | 1 + single-div-flickering-neon-text/src/script.js | 1 + .../src/style.scss | 132 + skateboard-video-platform/README.markdown | 6 + skateboard-video-platform/dist/index.html | 367 + skateboard-video-platform/dist/script.js | 55 + skateboard-video-platform/dist/style.css | 1115 + skateboard-video-platform/license.txt | 8 + skateboard-video-platform/src/index.html | 350 + skateboard-video-platform/src/script.js | 55 + skateboard-video-platform/src/style.scss | 1097 + .../README.markdown | 9 + .../dist/index.html | 18 + .../dist/script.js | 394 + .../dist/style.css | 582 + .../license.txt | 8 + .../src/index.html | 1 + .../src/script.babel | 394 + .../src/style.css | 571 + slide-out-toggle-menu/README.markdown | 4 + slide-out-toggle-menu/dist/index.html | 35 + slide-out-toggle-menu/dist/script.js | 3 + slide-out-toggle-menu/dist/style.css | 111 + slide-out-toggle-menu/license.txt | 13 + slide-out-toggle-menu/src/index.html | 19 + slide-out-toggle-menu/src/script.js | 3 + slide-out-toggle-menu/src/style.scss | 104 + sliding-image-track/LICENSE.txt | 22 + sliding-image-track/README.md | 4 + sliding-image-track/dist/index.html | 37 + sliding-image-track/dist/script.js | 45 + sliding-image-track/dist/style.css | 77 + sliding-image-track/src/index.html | 20 + sliding-image-track/src/script.js | 45 + sliding-image-track/src/style.css | 77 + smart-home-temperature-slider/README.markdown | 4 + smart-home-temperature-slider/dist/index.html | 87 + smart-home-temperature-slider/dist/script.js | 107 + smart-home-temperature-slider/dist/style.css | 42 + smart-home-temperature-slider/license.txt | 13 + smart-home-temperature-slider/src/index.html | 65 + smart-home-temperature-slider/src/script.js | 108 + smart-home-temperature-slider/src/style.css | 42 + smoothie-app/README.markdown | 4 + smoothie-app/dist/index.html | 517 + smoothie-app/dist/script.js | 316 + smoothie-app/dist/style.css | 187 + smoothie-app/license.txt | 13 + smoothie-app/src/index.html | 502 + smoothie-app/src/script.js | 316 + smoothie-app/src/style.css | 187 + snowflake/README.markdown | 5 + snowflake/dist/index.html | 20 + snowflake/dist/script.js | 38 + snowflake/dist/style.css | 7 + snowflake/license.txt | 8 + snowflake/src/index.html | 5 + snowflake/src/script.js | 40 + snowflake/src/style.css | 7 + sorted-css-colors/README.markdown | 21 + sorted-css-colors/dist/index.html | 1117 + sorted-css-colors/dist/script.js | 376 + sorted-css-colors/dist/style.css | 456 + sorted-css-colors/license.txt | 8 + sorted-css-colors/src/index.html | 1099 + sorted-css-colors/src/script.babel | 376 + sorted-css-colors/src/style.scss | 490 + space-travel/README.markdown | 5 + space-travel/dist/index.html | 180 + space-travel/dist/script.js | 690 + space-travel/dist/style.css | 42 + space-travel/license.txt | 8 + space-travel/src/index.html | 162 + space-travel/src/script.js | 690 + space-travel/src/style.scss | 43 + speech-bubbles/README.markdown | 5 + speech-bubbles/dist/index.html | 78 + speech-bubbles/dist/style.css | 201 + speech-bubbles/license.txt | 8 + speech-bubbles/src/index.html | 64 + speech-bubbles/src/style.css | 201 + sphere-of-boxes-three-js/README.markdown | 4 + sphere-of-boxes-three-js/dist/blgjlm.js | 416 + sphere-of-boxes-three-js/dist/index.html | 18 + sphere-of-boxes-three-js/dist/script.js | 140 + sphere-of-boxes-three-js/dist/style.css | 7 + sphere-of-boxes-three-js/dist/zvdzgv.js | 1042 + sphere-of-boxes-three-js/license.txt | 13 + sphere-of-boxes-three-js/src/blgjlm.js | 416 + sphere-of-boxes-three-js/src/index.html | 0 sphere-of-boxes-three-js/src/script.babel | 140 + sphere-of-boxes-three-js/src/style.css | 7 + sphere-of-boxes-three-js/src/zvdzgv.js | 1042 + spider-verse-dots/README.markdown | 5 + spider-verse-dots/dist/index.html | 16 + spider-verse-dots/dist/script.js | 128 + spider-verse-dots/dist/style.css | 7 + spider-verse-dots/license.txt | 8 + spider-verse-dots/src/index.html | 1 + spider-verse-dots/src/script.babel | 128 + spider-verse-dots/src/style.scss | 6 + spiral-fractal-experiment-v2/README.markdown | 5 + spiral-fractal-experiment-v2/dist/index.html | 18 + spiral-fractal-experiment-v2/dist/script.js | 162 + spiral-fractal-experiment-v2/dist/style.css | 70 + spiral-fractal-experiment-v2/license.txt | 8 + spiral-fractal-experiment-v2/src/index.html | 3 + spiral-fractal-experiment-v2/src/script.js | 162 + spiral-fractal-experiment-v2/src/style.css | 70 + .../README.markdown | 5 + .../dist/index.html | 376 + .../dist/style.css | 3117 + .../license.txt | 8 + .../src/index.haml | 69 + .../src/style.scss | 1935 + splitting-laser-write/README.markdown | 8 + .../dist/5eb6d4e9bfd78e3911ed9d0d0.js | 20 + splitting-laser-write/dist/index.html | 30 + splitting-laser-write/dist/script.js | 3 + splitting-laser-write/dist/style.css | 94 + splitting-laser-write/license.txt | 13 + .../src/5eb6d4e9bfd78e3911ed9d0d0.js | 20 + splitting-laser-write/src/index.html | 12 + splitting-laser-write/src/script.js | 3 + splitting-laser-write/src/style.css | 73 + squircles/README.markdown | 5 + squircles/dist/index.html | 202 + squircles/dist/script.js | 16 + squircles/dist/style.css | 298 + squircles/license.txt | 8 + squircles/src/index.html | 187 + squircles/src/script.js | 16 + squircles/src/style.scss | 324 + squishy-toggle-buttons/README.markdown | 5 + squishy-toggle-buttons/dist/index.html | 29 + squishy-toggle-buttons/dist/script.js | 7 + squishy-toggle-buttons/dist/style.css | 98 + squishy-toggle-buttons/license.txt | 8 + squishy-toggle-buttons/src/index.html | 12 + squishy-toggle-buttons/src/script.coffee | 0 squishy-toggle-buttons/src/style.sass | 124 + .../README.markdown | 4 + .../dist/index.html | 69 + stacked-flexible-slides-layout/dist/style.css | 113 + stacked-flexible-slides-layout/license.txt | 13 + stacked-flexible-slides-layout/src/index.html | 56 + stacked-flexible-slides-layout/src/style.css | 113 + stacking-cards/README.markdown | 5 + stacking-cards/dist/index.html | 234 + stacking-cards/dist/script.js | 11 + stacking-cards/dist/style.css | 235 + stacking-cards/license.txt | 8 + stacking-cards/src/index.html | 219 + stacking-cards/src/script.js | 11 + stacking-cards/src/style.css | 235 + staggered-cubes/README.markdown | 8 + staggered-cubes/dist/index.html | 19 + staggered-cubes/dist/script.js | 177 + staggered-cubes/dist/style.css | 37 + staggered-cubes/license.txt | 8 + staggered-cubes/src/index.pug | 1 + staggered-cubes/src/script.babel | 177 + staggered-cubes/src/style.styl | 35 + stay-true/README.markdown | 4 + stay-true/dist/index.html | 34 + stay-true/dist/script.js | 1 + stay-true/dist/style.css | 239 + stay-true/license.txt | 13 + stay-true/src/index.haml | 4 + stay-true/src/script.js | 1 + stay-true/src/style.scss | 215 + sticky-cards/LICENSE.txt | 21 + sticky-cards/README.md | 4 + sticky-cards/dist/index.html | 90 + sticky-cards/dist/style.css | 113 + sticky-cards/src/index.pug | 4 + sticky-cards/src/style.scss | 20 + sticky-photostack/README.markdown | 5 + sticky-photostack/dist/index.html | 24 + sticky-photostack/dist/style.css | 51 + sticky-photostack/license.txt | 8 + sticky-photostack/src/index.pug | 5 + sticky-photostack/src/style.scss | 32 + sticky-portals/README.markdown | 5 + sticky-portals/dist/index.html | 169 + sticky-portals/dist/script.js | 60 + sticky-portals/dist/style.css | 417 + sticky-portals/license.txt | 8 + sticky-portals/src/index.haml | 16 + sticky-portals/src/script.js | 60 + sticky-portals/src/style.scss | 241 + .../README.markdown | 4 + .../dist/index.html | 18 + .../dist/script.js | 13 + .../dist/style.css | 92 + .../license.txt | 8 + .../src/index.haml | 4 + .../src/script.js | 13 + .../src/style.sass | 68 + styled-color-input/README.markdown | 5 + styled-color-input/dist/index.html | 22 + styled-color-input/dist/style.css | 71 + styled-color-input/license.txt | 8 + styled-color-input/src/index.html | 7 + styled-color-input/src/style.css | 71 + stylized-buttons/README.markdown | 4 + stylized-buttons/dist/index.html | 19 + stylized-buttons/dist/style.css | 197 + stylized-buttons/license.txt | 13 + stylized-buttons/src/index.html | 5 + stylized-buttons/src/style.css | 194 + sun-rise-moon-rise/README.markdown | 4 + sun-rise-moon-rise/dist/index.html | 55 + sun-rise-moon-rise/dist/script.js | 112 + sun-rise-moon-rise/dist/style.css | 266 + sun-rise-moon-rise/license.txt | 13 + sun-rise-moon-rise/src/index.html | 41 + sun-rise-moon-rise/src/script.js | 112 + sun-rise-moon-rise/src/style.css | 266 + super-smash-bros-credits/LICENSE.txt | 21 + super-smash-bros-credits/README.md | 7 + super-smash-bros-credits/dist/index.html | 1701 + super-smash-bros-credits/dist/script.js | 27 + super-smash-bros-credits/dist/style.css | 646 + super-smash-bros-credits/src/index.html | 1685 + super-smash-bros-credits/src/script.js | 27 + super-smash-bros-credits/src/style.scss | 408 + svg-blob-u-lator/README.markdown | 5 + svg-blob-u-lator/dist/index.html | 109 + svg-blob-u-lator/dist/script.js | 55 + svg-blob-u-lator/dist/style.css | 242 + svg-blob-u-lator/license.txt | 8 + svg-blob-u-lator/src/index.haml | 18 + svg-blob-u-lator/src/script.js | 55 + svg-blob-u-lator/src/style.scss | 207 + svg-flower-generator/README.markdown | 7 + svg-flower-generator/dist/index.html | 25 + svg-flower-generator/dist/script.js | 206 + svg-flower-generator/dist/style.css | 210 + svg-flower-generator/license.txt | 13 + svg-flower-generator/src/index.html | 9 + svg-flower-generator/src/script.babel | 206 + svg-flower-generator/src/style.css | 210 + svg-gradient-wave-generator/LICENSE.txt | 21 + svg-gradient-wave-generator/README.md | 5 + svg-gradient-wave-generator/dist/index.html | 31 + svg-gradient-wave-generator/dist/script.js | 282 + svg-gradient-wave-generator/dist/style.css | 40 + svg-gradient-wave-generator/src/index.html | 14 + svg-gradient-wave-generator/src/script.js | 282 + svg-gradient-wave-generator/src/style.scss | 51 + .../README.markdown | 13 + .../dist/index.html | 42 + .../dist/script.js | 46 + .../dist/style.css | 155 + .../license.txt | 8 + .../src/index.html | 26 + .../src/script.js | 46 + .../src/style.sass | 93 + svg-loader/README.markdown | 5 + svg-loader/dist/index.html | 23 + svg-loader/dist/script.js | 42 + svg-loader/dist/style.css | 25 + svg-loader/license.txt | 8 + svg-loader/src/index.html | 4 + svg-loader/src/script.js | 43 + svg-loader/src/style.scss | 26 + svg-scribblemation/README.markdown | 5 + svg-scribblemation/dist/index.html | 103 + svg-scribblemation/dist/script.js | 27 + svg-scribblemation/dist/style.css | 443 + svg-scribblemation/license.txt | 8 + svg-scribblemation/src/index.haml | 21 + svg-scribblemation/src/script.js | 27 + svg-scribblemation/src/style.scss | 280 + .../LICENSE.txt | 21 + svg-sphere-animation-with-anime-js/README.md | 5 + .../dist/index.html | 50 + .../dist/script.js | 85 + .../dist/style.css | 36 + .../src/index.html | 34 + .../src/script.js | 85 + .../src/style.css | 35 + sweater-swag-cpc/README.markdown | 5 + sweater-swag-cpc/dist/index.html | 55 + sweater-swag-cpc/dist/script.js | 22 + sweater-swag-cpc/dist/style.css | 204 + sweater-swag-cpc/license.txt | 8 + sweater-swag-cpc/src/index.html | 39 + sweater-swag-cpc/src/script.js | 22 + sweater-swag-cpc/src/style.scss | 241 + swipey-gridclearleft/README.markdown | 5 + swipey-gridclearleft/dist/index.html | 49 + swipey-gridclearleft/dist/script.js | 58 + swipey-gridclearleft/dist/style.css | 11 + swipey-gridclearleft/license.txt | 8 + swipey-gridclearleft/src/index.html | 34 + swipey-gridclearleft/src/script.js | 58 + swipey-gridclearleft/src/style.css | 11 + tab-bar-interaction-1/README.markdown | 5 + tab-bar-interaction-1/dist/index.html | 93 + tab-bar-interaction-1/dist/script.js | 33 + tab-bar-interaction-1/dist/style.css | 102 + tab-bar-interaction-1/license.txt | 8 + tab-bar-interaction-1/src/index.html | 79 + tab-bar-interaction-1/src/script.js | 33 + tab-bar-interaction-1/src/style.scss | 108 + tabbar-animationonly-css/README.markdown | 4 + tabbar-animationonly-css/dist/index.html | 95 + tabbar-animationonly-css/dist/style.css | 257 + tabbar-animationonly-css/license.txt | 8 + tabbar-animationonly-css/src/index.html | 80 + tabbar-animationonly-css/src/style.scss | 179 + task-management-dashboard-ui/LICENSE.txt | 21 + task-management-dashboard-ui/README.md | 5 + task-management-dashboard-ui/dist/index.html | 360 + task-management-dashboard-ui/dist/style.css | 383 + task-management-dashboard-ui/src/index.html | 346 + task-management-dashboard-ui/src/style.scss | 380 + task-management-ui/LICENSE.txt | 21 + task-management-ui/README.md | 7 + task-management-ui/dist/index.html | 240 + task-management-ui/dist/script.js | 65 + task-management-ui/dist/style.css | 319 + task-management-ui/src/index.html | 224 + task-management-ui/src/script.js | 65 + task-management-ui/src/style.scss | 364 + test-snowflake/README.markdown | 5 + test-snowflake/dist/index.html | 47 + test-snowflake/dist/style.css | 7 + test-snowflake/license.txt | 8 + test-snowflake/src/index.html | 33 + test-snowflake/src/style.css | 7 + tetradic-truchet/README.markdown | 5 + tetradic-truchet/dist/apxlmx.js | 726 + tetradic-truchet/dist/index.html | 59 + tetradic-truchet/dist/script.js | 1258 + tetradic-truchet/dist/style.css | 221 + tetradic-truchet/license.txt | 8 + tetradic-truchet/src/apxlmx.js | 726 + tetradic-truchet/src/index.pug | 33 + tetradic-truchet/src/script.babel | 532 + tetradic-truchet/src/style.scss | 243 + tetris/README.markdown | 5 + tetris/dist/index.html | 35 + tetris/dist/script.js | 231 + tetris/dist/style.css | 13 + tetris/license.txt | 8 + tetris/src/index.html | 7 + tetris/src/script.js | 231 + tetris/src/style.css | 13 + .../README.markdown | 16 + .../dist/index.html | 39 + .../dist/script.js | 55 + .../dist/style.css | 49 + .../license.txt | 8 + .../src/index.html | 23 + .../src/script.js | 55 + .../src/style.scss | 53 + text-hover/README.markdown | 5 + text-hover/dist/index.html | 15 + text-hover/dist/style.css | 40 + text-hover/license.txt | 8 + text-hover/src/index.html | 1 + text-hover/src/style.css | 40 + text-mask-over-colorful-cubes/README.markdown | 12 + text-mask-over-colorful-cubes/dist/index.html | 17 + text-mask-over-colorful-cubes/dist/script.js | 235 + text-mask-over-colorful-cubes/dist/style.css | 13 + text-mask-over-colorful-cubes/license.txt | 8 + text-mask-over-colorful-cubes/src/index.html | 2 + .../src/script.babel | 235 + text-mask-over-colorful-cubes/src/style.css | 13 + textarea-with-syntax-highlighting/LICENSE.txt | 21 + textarea-with-syntax-highlighting/README.md | 4 + .../dist/index.html | 29 + .../dist/script.js | 61 + .../dist/style.css | 52 + .../src/index.html | 13 + .../src/script.js | 61 + .../src/style.css | 52 + texture-challengepen-92020/README.markdown | 11 + texture-challengepen-92020/dist/index.html | 58 + texture-challengepen-92020/dist/style.css | 150 + texture-challengepen-92020/license.txt | 8 + texture-challengepen-92020/src/index.pug | 37 + texture-challengepen-92020/src/style.sass | 138 + the-cat-god/README.markdown | 4 + the-cat-god/dist/index.html | 343 + the-cat-god/dist/script.js | 215 + the-cat-god/dist/style.css | 38 + the-cat-god/license.txt | 13 + the-cat-god/src/index.html | 325 + the-cat-god/src/script.babel | 215 + the-cat-god/src/style.css | 38 + .../README.markdown | 5 + .../dist/index.html | 17 + .../dist/script.js | 337 + .../dist/style.css | 323 + the-clips-of-css-v2-react-prism/license.txt | 8 + the-clips-of-css-v2-react-prism/src/index.pug | 1 + .../src/script.babel | 337 + .../src/style.styl | 373 + the-cube-of-cubes-css-only/LICENSE.txt | 21 + the-cube-of-cubes-css-only/README.md | 4 + the-cube-of-cubes-css-only/dist/index.html | 117 + the-cube-of-cubes-css-only/dist/style.css | 3537 ++ the-cube-of-cubes-css-only/src/index.html | 103 + the-cube-of-cubes-css-only/src/style.scss | 213 + the-cube/README.markdown | 4 + the-cube/dist/index.html | 100 + the-cube/dist/script.js | 4083 ++ the-cube/dist/style.css | 345 + the-cube/license.txt | 13 + the-cube/src/index.html | 85 + the-cube/src/script.js | 4083 ++ the-cube/src/style.sass | 359 + .../README.markdown | 4 + .../dist/index.html | 15 + .../dist/script.js | 4 + .../dist/style.css | 18 + .../license.txt | 13 + .../src/index.html | 1 + .../src/script.js | 4 + .../src/style.css | 18 + the-dots-vs-the-bars/README.markdown | 5 + the-dots-vs-the-bars/dist/index.html | 24 + the-dots-vs-the-bars/dist/style.css | 440 + the-dots-vs-the-bars/license.txt | 8 + the-dots-vs-the-bars/src/index.html | 10 + the-dots-vs-the-bars/src/style.css | 440 + the-flame-keeps-burning/README.markdown | 7 + the-flame-keeps-burning/dist/index.html | 167 + the-flame-keeps-burning/dist/script.js | 56 + the-flame-keeps-burning/dist/style.css | 23 + the-flame-keeps-burning/license.txt | 8 + the-flame-keeps-burning/src/index.html | 151 + the-flame-keeps-burning/src/script.js | 56 + the-flame-keeps-burning/src/style.css | 23 + the-goo-filter-illustrated/README.markdown | 11 + the-goo-filter-illustrated/dist/index.html | 52 + the-goo-filter-illustrated/dist/script.js | 114 + the-goo-filter-illustrated/dist/style.css | 47 + the-goo-filter-illustrated/license.txt | 17 + the-goo-filter-illustrated/src/index.html | 35 + the-goo-filter-illustrated/src/script.js | 114 + the-goo-filter-illustrated/src/style.css | 47 + .../README.markdown | 5 + .../dist/index.html | 16 + .../dist/script.js | 36 + .../dist/style.css | 69 + .../license.txt | 8 + .../src/index.haml | 0 .../src/script.js | 36 + .../src/style.css | 69 + the-power-of-inherit/README.markdown | 5 + the-power-of-inherit/dist/index.html | 54 + the-power-of-inherit/dist/script.js | 1 + the-power-of-inherit/dist/style.css | 47 + the-power-of-inherit/license.txt | 8 + the-power-of-inherit/src/index.html | 39 + the-power-of-inherit/src/script.js | 1 + the-power-of-inherit/src/style.scss | 52 + the-web-artisan-society-2/README.markdown | 5 + the-web-artisan-society-2/dist/index.html | 20 + the-web-artisan-society-2/dist/style.css | 150 + the-web-artisan-society-2/license.txt | 8 + the-web-artisan-society-2/src/index.html | 5 + the-web-artisan-society-2/src/style.css | 151 + .../README.markdown | 5 + .../dist/index.html | 207 + three-js-dancing-tree-for-xmas/dist/script.js | 346 + three-js-dancing-tree-for-xmas/dist/style.css | 62 + three-js-dancing-tree-for-xmas/license.txt | 8 + three-js-dancing-tree-for-xmas/src/index.html | 191 + .../src/script.babel | 346 + three-js-dancing-tree-for-xmas/src/style.css | 62 + .../README.markdown | 5 + .../dist/index.html | 20 + .../dist/script.js | 294 + .../dist/style.css | 22 + tiles-with-a-mediterranean-vibe/license.txt | 8 + .../src/index.html | 4 + .../src/script.babel | 295 + .../src/style.scss | 23 + tilt-to-make-room-for-menu/README.markdown | 8 + tilt-to-make-room-for-menu/dist/index.html | 81 + tilt-to-make-room-for-menu/dist/script.js | 1 + tilt-to-make-room-for-menu/dist/style.css | 154 + tilt-to-make-room-for-menu/license.txt | 8 + tilt-to-make-room-for-menu/src/index.html | 66 + tilt-to-make-room-for-menu/src/script.js | 1 + tilt-to-make-room-for-menu/src/style.css | 154 + .../README.markdown | 5 + .../dist/index.html | 15 + .../dist/style.css | 34 + tiny-but-accessible-5-star-rating/license.txt | 8 + .../src/index.html | 1 + .../src/style.scss | 37 + to-stick-and-stand/README.markdown | 5 + to-stick-and-stand/dist/index.html | 16 + to-stick-and-stand/dist/script.js | 241 + to-stick-and-stand/dist/style.css | 25 + to-stick-and-stand/license.txt | 8 + to-stick-and-stand/src/index.html | 0 to-stick-and-stand/src/script.js | 241 + to-stick-and-stand/src/style.css | 25 + .../README.markdown | 26 + .../dist/index.html | 38 + .../dist/script.js | 96 + .../dist/style.css | 182 + .../license.txt | 8 + .../src/index.html | 22 + .../src/script.js | 96 + .../src/style.scss | 178 + toggle-checkbox-without-label/README.markdown | 4 + toggle-checkbox-without-label/dist/index.html | 16 + toggle-checkbox-without-label/dist/style.css | 48 + toggle-checkbox-without-label/license.txt | 8 + toggle-checkbox-without-label/src/index.html | 1 + toggle-checkbox-without-label/src/style.sass | 42 + toggle/README.markdown | 5 + toggle/dist/index.html | 89 + toggle/dist/script.js | 9 + toggle/dist/style.css | 162 + toggle/license.txt | 8 + toggle/src/index.html | 73 + toggle/src/script.js | 9 + toggle/src/style.css | 162 + toggles/README.markdown | 5 + toggles/dist/index.html | 103 + toggles/dist/style.css | 646 + toggles/license.txt | 8 + toggles/src/index.pug | 85 + toggles/src/style.scss | 620 + tooltip-appear/README.markdown | 7 + tooltip-appear/dist/index.html | 79 + tooltip-appear/dist/script.js | 1 + tooltip-appear/dist/style.css | 127 + tooltip-appear/license.txt | 8 + tooltip-appear/src/index.html | 64 + tooltip-appear/src/script.js | 1 + tooltip-appear/src/style.css | 127 + toon-fire-shader/README.markdown | 5 + toon-fire-shader/dist/index.html | 17 + toon-fire-shader/dist/script.js | 214 + toon-fire-shader/dist/style.css | 11 + toon-fire-shader/license.txt | 8 + toon-fire-shader/src/index.html | 1 + toon-fire-shader/src/script.js | 214 + toon-fire-shader/src/style.css | 11 + toon-fireball/README.markdown | 5 + toon-fireball/dist/index.html | 17 + toon-fireball/dist/script.js | 487 + toon-fireball/dist/style.css | 5 + toon-fireball/license.txt | 8 + toon-fireball/src/index.html | 1 + toon-fireball/src/script.babel | 487 + toon-fireball/src/style.css | 5 + .../README.markdown | 4 + .../dist/index.html | 191 + .../dist/style.css | 163 + .../license.txt | 13 + .../src/index.html | 177 + .../src/style.css | 161 + travel/README.markdown | 4 + travel/dist/https___raw_githubusercon.css | 143 + travel/dist/index.html | 160 + travel/dist/script.js | 52 + travel/license.txt | 13 + travel/src/https___raw_githubusercon.css | 143 + travel/src/index.html | 142 + travel/src/script.js | 52 + troisjs-starfield/README.markdown | 5 + troisjs-starfield/dist/index.html | 16 + troisjs-starfield/dist/script.js | 121 + troisjs-starfield/dist/style.css | 23 + troisjs-starfield/license.txt | 8 + troisjs-starfield/src/index.html | 1 + troisjs-starfield/src/script.js | 121 + troisjs-starfield/src/style.css | 23 + turbulence/README.markdown | 4 + turbulence/dist/index.html | 68 + turbulence/dist/script.js | 161 + turbulence/dist/style.css | 124 + turbulence/license.txt | 8 + turbulence/src/index.html | 54 + turbulence/src/script.babel | 161 + turbulence/src/style.scss | 125 + turkey/README.markdown | 5 + turkey/dist/index.html | 28 + turkey/dist/style.css | 272 + turkey/license.txt | 8 + turkey/src/index.html | 14 + turkey/src/style.css | 272 + turnsolepure-javascript/README.markdown | 5 + turnsolepure-javascript/dist/index.html | 19 + turnsolepure-javascript/dist/script.js | 205 + turnsolepure-javascript/dist/style.css | 35 + turnsolepure-javascript/license.txt | 8 + turnsolepure-javascript/src/index.html | 4 + turnsolepure-javascript/src/script.js | 205 + turnsolepure-javascript/src/style.css | 35 + types-of-coffee-pure-css/README.markdown | 4 + types-of-coffee-pure-css/dist/index.html | 81 + types-of-coffee-pure-css/dist/style.css | 269 + types-of-coffee-pure-css/license.txt | 13 + types-of-coffee-pure-css/src/index.html | 68 + types-of-coffee-pure-css/src/style.scss | 283 + .../README.markdown | 7 + .../dist/index.html | 90 + .../dist/script.js | 37 + .../dist/style.css | 326 + typesetting-hover-over-the-text/license.txt | 13 + .../src/index.html | 75 + typesetting-hover-over-the-text/src/script.js | 37 + .../src/style.less | 363 + ui-design-stats-dashboard/README.markdown | 5 + ui-design-stats-dashboard/dist/index.html | 59 + ui-design-stats-dashboard/dist/script.js | 11 + ui-design-stats-dashboard/dist/style.css | 337 + ui-design-stats-dashboard/license.txt | 8 + ui-design-stats-dashboard/src/index.pug | 48 + ui-design-stats-dashboard/src/script.js | 11 + ui-design-stats-dashboard/src/style.scss | 320 + .../README.markdown | 5 + .../dist/index.html | 612 + ui-design-wedding-planning-app/dist/script.js | 1 + ui-design-wedding-planning-app/dist/style.css | 566 + ui-design-wedding-planning-app/license.txt | 8 + ui-design-wedding-planning-app/src/index.pug | 472 + ui-design-wedding-planning-app/src/script.js | 1 + ui-design-wedding-planning-app/src/style.scss | 563 + vacation-todo-list/README.markdown | 4 + vacation-todo-list/dist/index.html | 70 + vacation-todo-list/dist/script.js | 39 + vacation-todo-list/dist/style.css | 192 + vacation-todo-list/license.txt | 8 + vacation-todo-list/src/index.html | 55 + vacation-todo-list/src/script.js | 39 + vacation-todo-list/src/style.scss | 227 + vhs-stuck/README.markdown | 5 + vhs-stuck/dist/index.html | 16 + vhs-stuck/dist/script.js | 44 + vhs-stuck/dist/style.css | 10 + vhs-stuck/license.txt | 8 + vhs-stuck/src/index.html | 0 vhs-stuck/src/script.js | 44 + vhs-stuck/src/style.css | 10 + video-blend-modes-cool-modal/README.markdown | 4 + video-blend-modes-cool-modal/dist/index.html | 35 + video-blend-modes-cool-modal/dist/script.js | 18 + video-blend-modes-cool-modal/dist/style.css | 151 + video-blend-modes-cool-modal/license.txt | 13 + video-blend-modes-cool-modal/src/index.haml | 14 + video-blend-modes-cool-modal/src/script.js | 18 + video-blend-modes-cool-modal/src/style.scss | 163 + .../LICENSE.txt | 21 + .../README.md | 5 + .../dist/index.html | 84 + .../dist/script.js | 588 + .../dist/style.css | 204 + .../src/index.pug | 69 + .../src/script.js | 589 + .../src/style.scss | 178 + .../README.markdown | 6 + .../dist/index.html | 31 + .../dist/script.js | 265 + .../dist/style.css | 89 + .../license.txt | 13 + .../src/index.html | 15 + .../src/script.babel | 265 + .../src/style.scss | 93 + .../README.markdown | 5 + .../dist/index.html | 500 + .../dist/script.js | 1105 + .../dist/style.css | 7321 +++ .../license.txt | 8 + .../src/index.haml | 323 + .../src/script.js | 1105 + .../src/style.scss | 2047 + volumes/README.markdown | 4 + volumes/dist/index.html | 18 + volumes/dist/script.js | 40 + volumes/dist/style.css | 21 + volumes/license.txt | 17 + volumes/src/index.html | 0 volumes/src/script.js | 40 + volumes/src/style.css | 21 + vortex-lines/README.markdown | 5 + vortex-lines/dist/index.html | 20 + vortex-lines/dist/script.js | 162 + vortex-lines/dist/style.css | 13 + vortex-lines/license.txt | 8 + vortex-lines/src/index.html | 1 + vortex-lines/src/script.ts | 218 + vortex-lines/src/style.scss | 14 + voyage-slider-gsap/README.markdown | 5 + voyage-slider-gsap/dist/index.html | 126 + voyage-slider-gsap/dist/script.js | 255 + voyage-slider-gsap/dist/style.css | 319 + voyage-slider-gsap/license.txt | 8 + voyage-slider-gsap/src/index.html | 110 + voyage-slider-gsap/src/script.js | 255 + voyage-slider-gsap/src/style.scss | 351 + vue-slider-ui-interaction/README.markdown | 4 + vue-slider-ui-interaction/dist/index.html | 109 + vue-slider-ui-interaction/dist/script.js | 79 + vue-slider-ui-interaction/dist/style.css | 384 + vue-slider-ui-interaction/license.txt | 8 + vue-slider-ui-interaction/src/index.html | 92 + vue-slider-ui-interaction/src/script.js | 79 + vue-slider-ui-interaction/src/style.scss | 354 + wacky-buttons-3/README.markdown | 5 + wacky-buttons-3/dist/index.html | 31 + wacky-buttons-3/dist/script.js | 1 + wacky-buttons-3/dist/style.css | 215 + wacky-buttons-3/license.txt | 8 + wacky-buttons-3/src/index.html | 12 + wacky-buttons-3/src/script.js | 1 + wacky-buttons-3/src/style.scss | 247 + walkershow-to/README.markdown | 4 + walkershow-to/dist/index.html | 26 + walkershow-to/dist/script.js | 207 + walkershow-to/dist/style.css | 104 + walkershow-to/license.txt | 8 + walkershow-to/src/index.html | 10 + walkershow-to/src/script.js | 207 + walkershow-to/src/style.scss | 72 + .../README.markdown | 5 + .../dist/index.html | 16 + .../dist/script.js | 157 + .../dist/style.css | 9 + .../license.txt | 8 + .../src/index.html | 1 + .../src/script.js | 157 + .../src/style.css | 9 + water-bending/README.markdown | 5 + water-bending/dist/index.html | 18 + water-bending/dist/script.js | 89 + water-bending/license.txt | 8 + water-bending/src/index.html | 0 water-bending/src/script.js | 89 + .../README.markdown | 4 + .../dist/index.html | 61 + waves096-of-100days100projects/dist/script.js | 55 + waves096-of-100days100projects/dist/style.css | 207 + waves096-of-100days100projects/license.txt | 8 + waves096-of-100days100projects/src/index.html | 46 + waves096-of-100days100projects/src/script.js | 55 + waves096-of-100days100projects/src/style.css | 207 + webgl-markers/README.markdown | 5 + webgl-markers/dist/index.html | 17 + webgl-markers/dist/script.js | 232 + webgl-markers/license.txt | 8 + webgl-markers/src/index.html | 2 + webgl-markers/src/script.js | 232 + webpack-zdog/README.markdown | 4 + webpack-zdog/dist/index.html | 16 + webpack-zdog/dist/script.js | 51 + webpack-zdog/dist/style.css | 3 + webpack-zdog/license.txt | 13 + webpack-zdog/src/index.html | 1 + webpack-zdog/src/script.js | 51 + webpack-zdog/src/style.css | 3 + what-s-behind/README.markdown | 4 + what-s-behind/dist/index.html | 21 + what-s-behind/dist/script.js | 290 + what-s-behind/dist/style.css | 25 + what-s-behind/license.txt | 8 + what-s-behind/src/index.html | 4 + what-s-behind/src/script.babel | 290 + what-s-behind/src/style.css | 25 + when-you-can-t-decide/README.markdown | 5 + when-you-can-t-decide/dist/index.html | 57 + when-you-can-t-decide/dist/script.js | 99 + when-you-can-t-decide/dist/style.css | 220 + when-you-can-t-decide/license.txt | 8 + when-you-can-t-decide/src/index.html | 41 + when-you-can-t-decide/src/script.babel | 99 + when-you-can-t-decide/src/style.scss | 202 + wip-motion-blur-transition/README.markdown | 4 + wip-motion-blur-transition/dist/index.html | 75 + wip-motion-blur-transition/dist/script.js | 108 + wip-motion-blur-transition/dist/style.css | 14 + wip-motion-blur-transition/license.txt | 13 + wip-motion-blur-transition/src/index.html | 58 + wip-motion-blur-transition/src/script.js | 108 + wip-motion-blur-transition/src/style.css | 14 + wobble/README.markdown | 4 + wobble/dist/index.html | 16 + wobble/dist/script.js | 272 + wobble/dist/style.css | 21 + wobble/license.txt | 8 + wobble/src/index.html | 1 + wobble/src/script.js | 272 + wobble/src/style.css | 21 + wonderland/README.markdown | 4 + wonderland/dist/index.html | 17 + wonderland/dist/script.js | 168 + wonderland/dist/style.css | 8 + wonderland/license.txt | 13 + wonderland/src/index.html | 1 + wonderland/src/script.js | 168 + wonderland/src/style.scss | 2 + zdog-and-goo/README.markdown | 4 + zdog-and-goo/dist/index.html | 28 + zdog-and-goo/dist/script.js | 103 + zdog-and-goo/dist/style.css | 36 + zdog-and-goo/license.txt | 13 + zdog-and-goo/src/index.html | 10 + zdog-and-goo/src/script.js | 103 + zdog-and-goo/src/style.css | 36 + zdog-space-scene/README.markdown | 6 + .../dist/f7248f1855b6b3ac41fc1799b.js | 186 + zdog-space-scene/dist/index.html | 18 + zdog-space-scene/dist/script.js | 80 + zdog-space-scene/dist/style.css | 25 + zdog-space-scene/license.txt | 13 + .../src/f7248f1855b6b3ac41fc1799b.js | 186 + zdog-space-scene/src/index.html | 1 + zdog-space-scene/src/script.babel | 80 + zdog-space-scene/src/style.css | 23 + zdog-trefoil/README.markdown | 5 + zdog-trefoil/dist/index.html | 16 + zdog-trefoil/dist/script.js | 65 + zdog-trefoil/dist/style.css | 15 + zdog-trefoil/license.txt | 8 + zdog-trefoil/src/index.html | 1 + zdog-trefoil/src/script.js | 65 + zdog-trefoil/src/style.css | 15 + zdogcone-mace/README.markdown | 8 + zdogcone-mace/dist/index.html | 16 + zdogcone-mace/dist/script.js | 155 + zdogcone-mace/dist/style.css | 17 + zdogcone-mace/license.txt | 13 + zdogcone-mace/src/index.html | 1 + zdogcone-mace/src/script.js | 155 + zdogcone-mace/src/style.css | 17 + zdoglittle-forest/README.markdown | 10 + zdoglittle-forest/dist/index.html | 20 + zdoglittle-forest/dist/script.js | 776 + zdoglittle-forest/dist/style.css | 38 + zdoglittle-forest/license.txt | 13 + zdoglittle-forest/src/index.html | 5 + zdoglittle-forest/src/script.js | 776 + zdoglittle-forest/src/style.css | 38 + zdogrgb-birdie/README.markdown | 4 + zdogrgb-birdie/dist/index.html | 16 + zdogrgb-birdie/dist/script.js | 150 + zdogrgb-birdie/dist/style.css | 12 + zdogrgb-birdie/license.txt | 17 + zdogrgb-birdie/src/index.html | 1 + zdogrgb-birdie/src/script.js | 151 + zdogrgb-birdie/src/style.css | 12 + zdogsolids/README.markdown | 8 + zdogsolids/dist/index.html | 16 + zdogsolids/dist/script.js | 443 + zdogsolids/dist/style.css | 14 + zdogsolids/license.txt | 13 + zdogsolids/src/index.html | 1 + zdogsolids/src/script.js | 443 + zdogsolids/src/style.css | 14 + zig-zag-gradient-lab/README.markdown | 5 + zig-zag-gradient-lab/dist/index.html | 46 + zig-zag-gradient-lab/dist/script.js | 166 + zig-zag-gradient-lab/dist/style.css | 86 + zig-zag-gradient-lab/license.txt | 8 + zig-zag-gradient-lab/src/index.html | 31 + zig-zag-gradient-lab/src/script.js | 166 + zig-zag-gradient-lab/src/style.scss | 87 + .../README.markdown | 7 + .../dist/index.html | 62 + .../dist/script.js | 10 + .../dist/style.css | 12 + .../license.txt | 8 + .../src/index.html | 47 + .../src/script.js | 10 + .../src/style.css | 12 + 4074 files changed, 598712 insertions(+) create mode 100644 017-erosion/README.markdown create mode 100644 017-erosion/dist/index.html create mode 100644 017-erosion/dist/script.js create mode 100644 017-erosion/license.txt create mode 100644 017-erosion/src/index.html create mode 100644 017-erosion/src/script.babel create mode 100644 1-codevember-2017galaxy/README.markdown create mode 100644 1-codevember-2017galaxy/dist/index.html create mode 100644 1-codevember-2017galaxy/dist/script.js create mode 100644 1-codevember-2017galaxy/dist/style.css create mode 100644 1-codevember-2017galaxy/license.txt create mode 100644 1-codevember-2017galaxy/src/index.html create mode 100644 1-codevember-2017galaxy/src/script.js create mode 100644 1-codevember-2017galaxy/src/style.scss create mode 100644 1-element-css-spinners/README.markdown create mode 100644 1-element-css-spinners/dist/index.html create mode 100644 1-element-css-spinners/dist/style.css create mode 100644 1-element-css-spinners/license.txt create mode 100644 1-element-css-spinners/src/index.pug create mode 100644 1-element-css-spinners/src/style.scss create mode 100644 10-000-codepen-followers/README.markdown create mode 100644 10-000-codepen-followers/dist/index.html create mode 100644 10-000-codepen-followers/dist/script.js create mode 100644 10-000-codepen-followers/dist/style.css create mode 100644 10-000-codepen-followers/license.txt create mode 100644 10-000-codepen-followers/src/index.html create mode 100644 10-000-codepen-followers/src/script.js create mode 100644 10-000-codepen-followers/src/style.css create mode 100644 10print-svg/README.markdown create mode 100644 10print-svg/dist/index.html create mode 100644 10print-svg/dist/script.js create mode 100644 10print-svg/dist/style.css create mode 100644 10print-svg/license.txt create mode 100644 10print-svg/src/index.html create mode 100644 10print-svg/src/script.babel create mode 100644 10print-svg/src/style.scss create mode 100644 141-in-2021-javascript-canvas/README.markdown create mode 100644 141-in-2021-javascript-canvas/dist/index.html create mode 100644 141-in-2021-javascript-canvas/dist/script.js create mode 100644 141-in-2021-javascript-canvas/dist/style.css create mode 100644 141-in-2021-javascript-canvas/license.txt create mode 100644 141-in-2021-javascript-canvas/src/index.html create mode 100644 141-in-2021-javascript-canvas/src/script.js create mode 100644 141-in-2021-javascript-canvas/src/style.css create mode 100644 20/README.markdown create mode 100644 20/dist/index.html create mode 100644 20/dist/script.js create mode 100644 20/dist/style.css create mode 100644 20/license.txt create mode 100644 20/src/index.html create mode 100644 20/src/script.js create mode 100644 20/src/style.css create mode 100644 2021-to-2022/README.markdown create mode 100644 2021-to-2022/dist/index.html create mode 100644 2021-to-2022/dist/style.css create mode 100644 2021-to-2022/license.txt create mode 100644 2021-to-2022/src/index.html create mode 100644 2021-to-2022/src/style.css create mode 100644 31-taint/README.markdown create mode 100644 31-taint/dist/index.html create mode 100644 31-taint/dist/script.js create mode 100644 31-taint/dist/style.css create mode 100644 31-taint/license.txt create mode 100644 31-taint/src/index.html create mode 100644 31-taint/src/script.js create mode 100644 31-taint/src/style.css create mode 100644 3d-css-kinetic-type-poster/README.markdown create mode 100644 3d-css-kinetic-type-poster/dist/index.html create mode 100644 3d-css-kinetic-type-poster/dist/script.js create mode 100644 3d-css-kinetic-type-poster/dist/style.css create mode 100644 3d-css-kinetic-type-poster/license.txt create mode 100644 3d-css-kinetic-type-poster/src/index.html create mode 100644 3d-css-kinetic-type-poster/src/script.js create mode 100644 3d-css-kinetic-type-poster/src/style.scss create mode 100644 3d-css-plane-tap-to-toggle-mouse-move-parallax/README.markdown create mode 100644 3d-css-plane-tap-to-toggle-mouse-move-parallax/dist/index.html create mode 100644 3d-css-plane-tap-to-toggle-mouse-move-parallax/dist/script.js create mode 100644 3d-css-plane-tap-to-toggle-mouse-move-parallax/dist/style.css create mode 100644 3d-css-plane-tap-to-toggle-mouse-move-parallax/license.txt create mode 100644 3d-css-plane-tap-to-toggle-mouse-move-parallax/src/index.pug create mode 100644 3d-css-plane-tap-to-toggle-mouse-move-parallax/src/script.babel create mode 100644 3d-css-plane-tap-to-toggle-mouse-move-parallax/src/style.styl create mode 100644 3d-css-sphere/README.markdown create mode 100644 3d-css-sphere/dist/index.html create mode 100644 3d-css-sphere/dist/style.css create mode 100644 3d-css-sphere/license.txt create mode 100644 3d-css-sphere/src/index.html create mode 100644 3d-css-sphere/src/style.css create mode 100644 3d-d20-die-with-pure-css/README.markdown create mode 100644 3d-d20-die-with-pure-css/dist/index.html create mode 100644 3d-d20-die-with-pure-css/dist/script.js create mode 100644 3d-d20-die-with-pure-css/dist/style.css create mode 100644 3d-d20-die-with-pure-css/license.txt create mode 100644 3d-d20-die-with-pure-css/src/index.html create mode 100644 3d-d20-die-with-pure-css/src/script.js create mode 100644 3d-d20-die-with-pure-css/src/style.scss create mode 100644 3d-dashboardspline/README.markdown create mode 100644 3d-dashboardspline/dist/index.html create mode 100644 3d-dashboardspline/dist/style.css create mode 100644 3d-dashboardspline/license.txt create mode 100644 3d-dashboardspline/src/index.html create mode 100644 3d-dashboardspline/src/style.scss create mode 100644 3d-drag-out-menu-with-guitar/README.markdown create mode 100644 3d-drag-out-menu-with-guitar/dist/index.html create mode 100644 3d-drag-out-menu-with-guitar/dist/script.js create mode 100644 3d-drag-out-menu-with-guitar/dist/style.css create mode 100644 3d-drag-out-menu-with-guitar/license.txt create mode 100644 3d-drag-out-menu-with-guitar/src/index.haml create mode 100644 3d-drag-out-menu-with-guitar/src/script.babel create mode 100644 3d-drag-out-menu-with-guitar/src/style.scss create mode 100644 3d-ish-hamburger-menu/README.markdown create mode 100644 3d-ish-hamburger-menu/dist/index.html create mode 100644 3d-ish-hamburger-menu/dist/style.css create mode 100644 3d-ish-hamburger-menu/license.txt create mode 100644 3d-ish-hamburger-menu/src/index.html create mode 100644 3d-ish-hamburger-menu/src/style.scss create mode 100644 3d-polaroid-world/README.markdown create mode 100644 3d-polaroid-world/dist/index.html create mode 100644 3d-polaroid-world/dist/script.js create mode 100644 3d-polaroid-world/dist/style.css create mode 100644 3d-polaroid-world/license.txt create mode 100644 3d-polaroid-world/src/index.html create mode 100644 3d-polaroid-world/src/script.babel create mode 100644 3d-polaroid-world/src/style.scss create mode 100644 3d-spaceshipgsap/README.markdown create mode 100644 3d-spaceshipgsap/dist/index.html create mode 100644 3d-spaceshipgsap/dist/script.js create mode 100644 3d-spaceshipgsap/dist/style.css create mode 100644 3d-spaceshipgsap/license.txt create mode 100644 3d-spaceshipgsap/src/index.pug create mode 100644 3d-spaceshipgsap/src/script.js create mode 100644 3d-spaceshipgsap/src/style.scss create mode 100644 3d-xylophone/README.markdown create mode 100644 3d-xylophone/dist/index.html create mode 100644 3d-xylophone/dist/script.js create mode 100644 3d-xylophone/dist/style.css create mode 100644 3d-xylophone/license.txt create mode 100644 3d-xylophone/src/index.html create mode 100644 3d-xylophone/src/script.js create mode 100644 3d-xylophone/src/style.css create mode 100644 4-big-cubes-animation-with-svg-use-and-css-variables/README.markdown create mode 100644 4-big-cubes-animation-with-svg-use-and-css-variables/dist/index.html create mode 100644 4-big-cubes-animation-with-svg-use-and-css-variables/dist/style.css create mode 100644 4-big-cubes-animation-with-svg-use-and-css-variables/license.txt create mode 100644 4-big-cubes-animation-with-svg-use-and-css-variables/src/index.html create mode 100644 4-big-cubes-animation-with-svg-use-and-css-variables/src/style.scss create mode 100644 60-gradient-morphing-blob/README.markdown create mode 100644 60-gradient-morphing-blob/dist/index.html create mode 100644 60-gradient-morphing-blob/dist/script.js create mode 100644 60-gradient-morphing-blob/dist/style.css create mode 100644 60-gradient-morphing-blob/license.txt create mode 100644 60-gradient-morphing-blob/src/index.html create mode 100644 60-gradient-morphing-blob/src/script.js create mode 100644 60-gradient-morphing-blob/src/style.css create mode 100644 80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/README.markdown create mode 100644 80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/dist/index.html create mode 100644 80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/dist/style.css create mode 100644 80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/license.txt create mode 100644 80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/src/index.haml create mode 100644 80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/src/style.scss create mode 100644 CodePen_Export_WKdodx/README.markdown create mode 100644 CodePen_Export_WKdodx/dist/index.html create mode 100644 CodePen_Export_WKdodx/dist/style.css create mode 100644 CodePen_Export_WKdodx/license.txt create mode 100644 CodePen_Export_WKdodx/src/index.html create mode 100644 CodePen_Export_WKdodx/src/style.css create mode 100644 a-css-only-carousel-slider/README.markdown create mode 100644 a-css-only-carousel-slider/dist/index.html create mode 100644 a-css-only-carousel-slider/dist/style.css create mode 100644 a-css-only-carousel-slider/license.txt create mode 100644 a-css-only-carousel-slider/src/index.html create mode 100644 a-css-only-carousel-slider/src/style.css create mode 100644 a-fake-dream/README.markdown create mode 100644 a-fake-dream/dist/index.html create mode 100644 a-fake-dream/dist/script.js create mode 100644 a-fake-dream/dist/style.css create mode 100644 a-fake-dream/license.txt create mode 100644 a-fake-dream/src/index.html create mode 100644 a-fake-dream/src/script.babel create mode 100644 a-fake-dream/src/style.scss create mode 100644 a-generative-svg-using-a-tetradic-color-pallette/README.markdown create mode 100644 a-generative-svg-using-a-tetradic-color-pallette/dist/index.html create mode 100644 a-generative-svg-using-a-tetradic-color-pallette/dist/script.js create mode 100644 a-generative-svg-using-a-tetradic-color-pallette/dist/style.css create mode 100644 a-generative-svg-using-a-tetradic-color-pallette/license.txt create mode 100644 a-generative-svg-using-a-tetradic-color-pallette/src/index.html create mode 100644 a-generative-svg-using-a-tetradic-color-pallette/src/script.js create mode 100644 a-generative-svg-using-a-tetradic-color-pallette/src/style.css create mode 100644 a-pure-css-gameyou-must-build-a-lighthouse/README.markdown create mode 100644 a-pure-css-gameyou-must-build-a-lighthouse/dist/index.html create mode 100644 a-pure-css-gameyou-must-build-a-lighthouse/dist/script.js create mode 100644 a-pure-css-gameyou-must-build-a-lighthouse/dist/style.css create mode 100644 a-pure-css-gameyou-must-build-a-lighthouse/license.txt create mode 100644 a-pure-css-gameyou-must-build-a-lighthouse/src/index.html create mode 100644 a-pure-css-gameyou-must-build-a-lighthouse/src/script.js create mode 100644 a-pure-css-gameyou-must-build-a-lighthouse/src/style.scss create mode 100644 a-tribute-to-manfred-mohrsimplex-noise/README.markdown create mode 100644 a-tribute-to-manfred-mohrsimplex-noise/dist/index.html create mode 100644 a-tribute-to-manfred-mohrsimplex-noise/dist/script.js create mode 100644 a-tribute-to-manfred-mohrsimplex-noise/dist/style.css create mode 100644 a-tribute-to-manfred-mohrsimplex-noise/license.txt create mode 100644 a-tribute-to-manfred-mohrsimplex-noise/src/index.html create mode 100644 a-tribute-to-manfred-mohrsimplex-noise/src/script.js create mode 100644 a-tribute-to-manfred-mohrsimplex-noise/src/style.css create mode 100644 academy/README.markdown create mode 100644 academy/dist/index.html create mode 100644 academy/dist/script.js create mode 100644 academy/dist/style.css create mode 100644 academy/license.txt create mode 100644 academy/src/index.html create mode 100644 academy/src/script.js create mode 100644 academy/src/style.scss create mode 100644 accessibility-to-a11y/README.markdown create mode 100644 accessibility-to-a11y/dist/index.html create mode 100644 accessibility-to-a11y/dist/style.css create mode 100644 accessibility-to-a11y/license.txt create mode 100644 accessibility-to-a11y/src/index.html create mode 100644 accessibility-to-a11y/src/style.scss create mode 100644 acrobatic-preloader/README.markdown create mode 100644 acrobatic-preloader/dist/index.html create mode 100644 acrobatic-preloader/dist/style.css create mode 100644 acrobatic-preloader/license.txt create mode 100644 acrobatic-preloader/src/index.html create mode 100644 acrobatic-preloader/src/style.css create mode 100644 ambient-blur-using-backdrop-filter/README.markdown create mode 100644 ambient-blur-using-backdrop-filter/dist/index.html create mode 100644 ambient-blur-using-backdrop-filter/dist/script.js create mode 100644 ambient-blur-using-backdrop-filter/dist/style.css create mode 100644 ambient-blur-using-backdrop-filter/license.txt create mode 100644 ambient-blur-using-backdrop-filter/src/index.html create mode 100644 ambient-blur-using-backdrop-filter/src/script.js create mode 100644 ambient-blur-using-backdrop-filter/src/style.css create mode 100644 animated-atom-svg/README.markdown create mode 100644 animated-atom-svg/dist/index.html create mode 100644 animated-atom-svg/dist/script.js create mode 100644 animated-atom-svg/dist/style.css create mode 100644 animated-atom-svg/license.txt create mode 100644 animated-atom-svg/src/index.html create mode 100644 animated-atom-svg/src/script.js create mode 100644 animated-atom-svg/src/style.scss create mode 100644 animated-fill-and-strikethrough-checkboxes/README.markdown create mode 100644 animated-fill-and-strikethrough-checkboxes/dist/index.html create mode 100644 animated-fill-and-strikethrough-checkboxes/dist/script.js create mode 100644 animated-fill-and-strikethrough-checkboxes/dist/style.css create mode 100644 animated-fill-and-strikethrough-checkboxes/license.txt create mode 100644 animated-fill-and-strikethrough-checkboxes/src/index.html create mode 100644 animated-fill-and-strikethrough-checkboxes/src/script.js create mode 100644 animated-fill-and-strikethrough-checkboxes/src/style.css create mode 100644 animated-pill-radiosreact-responsive/README.markdown create mode 100644 animated-pill-radiosreact-responsive/dist/index.html create mode 100644 animated-pill-radiosreact-responsive/dist/script.js create mode 100644 animated-pill-radiosreact-responsive/dist/style.css create mode 100644 animated-pill-radiosreact-responsive/license.txt create mode 100644 animated-pill-radiosreact-responsive/src/index.html create mode 100644 animated-pill-radiosreact-responsive/src/script.babel create mode 100644 animated-pill-radiosreact-responsive/src/style.css create mode 100644 animated-striped-gradient-button/LICENSE.txt create mode 100644 animated-striped-gradient-button/README.md create mode 100644 animated-striped-gradient-button/dist/index.html create mode 100644 animated-striped-gradient-button/dist/style.css create mode 100644 animated-striped-gradient-button/src/index.html create mode 100644 animated-striped-gradient-button/src/style.scss create mode 100644 animated-verbs-ii/README.markdown create mode 100644 animated-verbs-ii/dist/index.html create mode 100644 animated-verbs-ii/dist/mwgbqon.css create mode 100644 animated-verbs-ii/dist/script.js create mode 100644 animated-verbs-ii/dist/style.css create mode 100644 animated-verbs-ii/license.txt create mode 100644 animated-verbs-ii/src/index.html create mode 100644 animated-verbs-ii/src/mwgbqon.css create mode 100644 animated-verbs-ii/src/script.js create mode 100644 animated-verbs-ii/src/style.scss create mode 100644 anime-js-scrollmagic-scroll-based-animations/LICENSE.txt create mode 100644 anime-js-scrollmagic-scroll-based-animations/README.md create mode 100644 anime-js-scrollmagic-scroll-based-animations/dist/index.html create mode 100644 anime-js-scrollmagic-scroll-based-animations/dist/script.js create mode 100644 anime-js-scrollmagic-scroll-based-animations/dist/style.css create mode 100644 anime-js-scrollmagic-scroll-based-animations/src/index.html create mode 100644 anime-js-scrollmagic-scroll-based-animations/src/script.js create mode 100644 anime-js-scrollmagic-scroll-based-animations/src/style.css create mode 100644 another-branching-strategy-svg/README.markdown create mode 100644 another-branching-strategy-svg/dist/index.html create mode 100644 another-branching-strategy-svg/dist/script.js create mode 100644 another-branching-strategy-svg/dist/style.css create mode 100644 another-branching-strategy-svg/license.txt create mode 100644 another-branching-strategy-svg/src/index.html create mode 100644 another-branching-strategy-svg/src/script.js create mode 100644 another-branching-strategy-svg/src/style.css create mode 100644 apart/README.markdown create mode 100644 apart/dist/index.html create mode 100644 apart/dist/script.js create mode 100644 apart/dist/style.css create mode 100644 apart/license.txt create mode 100644 apart/src/index.html create mode 100644 apart/src/script.js create mode 100644 apart/src/style.css create mode 100644 apple-inspired-pride-clock/LICENSE.txt create mode 100644 apple-inspired-pride-clock/README.md create mode 100644 apple-inspired-pride-clock/dist/index.html create mode 100644 apple-inspired-pride-clock/dist/script.js create mode 100644 apple-inspired-pride-clock/dist/style.css create mode 100644 apple-inspired-pride-clock/src/index.html create mode 100644 apple-inspired-pride-clock/src/script.js create mode 100644 apple-inspired-pride-clock/src/style.scss create mode 100644 apple-keynote-animation/README.markdown create mode 100644 apple-keynote-animation/dist/index.html create mode 100644 apple-keynote-animation/dist/script.js create mode 100644 apple-keynote-animation/dist/style.css create mode 100644 apple-keynote-animation/license.txt create mode 100644 apple-keynote-animation/src/index.html create mode 100644 apple-keynote-animation/src/script.js create mode 100644 apple-keynote-animation/src/style.scss create mode 100644 art-gallery/README.markdown create mode 100644 art-gallery/dist/index.html create mode 100644 art-gallery/dist/script.js create mode 100644 art-gallery/dist/style.css create mode 100644 art-gallery/license.txt create mode 100644 art-gallery/src/index.html create mode 100644 art-gallery/src/script.js create mode 100644 art-gallery/src/style.css create mode 100644 art-of-noise-29/README.markdown create mode 100644 art-of-noise-29/dist/index.html create mode 100644 art-of-noise-29/dist/script.js create mode 100644 art-of-noise-29/dist/style.css create mode 100644 art-of-noise-29/license.txt create mode 100644 art-of-noise-29/src/index.html create mode 100644 art-of-noise-29/src/script.js create mode 100644 art-of-noise-29/src/style.scss create mode 100644 ascii-corridor/README.markdown create mode 100644 ascii-corridor/dist/index.html create mode 100644 ascii-corridor/dist/script.js create mode 100644 ascii-corridor/dist/style.css create mode 100644 ascii-corridor/license.txt create mode 100644 ascii-corridor/src/index.html create mode 100644 ascii-corridor/src/script.js create mode 100644 ascii-corridor/src/style.sass create mode 100644 background-patterns/README.markdown create mode 100644 background-patterns/dist/index.html create mode 100644 background-patterns/dist/script.js create mode 100644 background-patterns/dist/style.css create mode 100644 background-patterns/license.txt create mode 100644 background-patterns/src/index.html create mode 100644 background-patterns/src/script.js create mode 100644 background-patterns/src/style.css create mode 100644 balanced-truncation/LICENSE.txt create mode 100644 balanced-truncation/README.md create mode 100644 balanced-truncation/dist/index.html create mode 100644 balanced-truncation/dist/style.css create mode 100644 balanced-truncation/src/index.html create mode 100644 balanced-truncation/src/style.css create mode 100644 banksyvalentine-s-day/README.markdown create mode 100644 banksyvalentine-s-day/dist/index.html create mode 100644 banksyvalentine-s-day/dist/script.js create mode 100644 banksyvalentine-s-day/dist/style.css create mode 100644 banksyvalentine-s-day/license.txt create mode 100644 banksyvalentine-s-day/src/index.html create mode 100644 banksyvalentine-s-day/src/script.js create mode 100644 banksyvalentine-s-day/src/style.css create mode 100644 based-on-moir-motion-by-takahiro-kurashima-san/README.markdown create mode 100644 based-on-moir-motion-by-takahiro-kurashima-san/dist/index.html create mode 100644 based-on-moir-motion-by-takahiro-kurashima-san/dist/script.js create mode 100644 based-on-moir-motion-by-takahiro-kurashima-san/dist/style.css create mode 100644 based-on-moir-motion-by-takahiro-kurashima-san/license.txt create mode 100644 based-on-moir-motion-by-takahiro-kurashima-san/src/index.pug create mode 100644 based-on-moir-motion-by-takahiro-kurashima-san/src/script.js create mode 100644 based-on-moir-motion-by-takahiro-kurashima-san/src/style.styl create mode 100644 baubudsgenerative-bauhaus-inspired-characters/README.markdown create mode 100644 baubudsgenerative-bauhaus-inspired-characters/dist/index.html create mode 100644 baubudsgenerative-bauhaus-inspired-characters/dist/script.js create mode 100644 baubudsgenerative-bauhaus-inspired-characters/dist/style.css create mode 100644 baubudsgenerative-bauhaus-inspired-characters/license.txt create mode 100644 baubudsgenerative-bauhaus-inspired-characters/src/index.html create mode 100644 baubudsgenerative-bauhaus-inspired-characters/src/script.js create mode 100644 baubudsgenerative-bauhaus-inspired-characters/src/style.css create mode 100644 bbc13-minutes-to-the-moon/README.markdown create mode 100644 bbc13-minutes-to-the-moon/dist/index.html create mode 100644 bbc13-minutes-to-the-moon/dist/script.js create mode 100644 bbc13-minutes-to-the-moon/dist/style.css create mode 100644 bbc13-minutes-to-the-moon/license.txt create mode 100644 bbc13-minutes-to-the-moon/src/index.html create mode 100644 bbc13-minutes-to-the-moon/src/script.js create mode 100644 bbc13-minutes-to-the-moon/src/style.scss create mode 100644 beating-heart/README.markdown create mode 100644 beating-heart/dist/index.html create mode 100644 beating-heart/dist/script.js create mode 100644 beating-heart/dist/style.css create mode 100644 beating-heart/license.txt create mode 100644 beating-heart/src/index.html create mode 100644 beating-heart/src/script.js create mode 100644 beating-heart/src/style.scss create mode 100644 best-css-3d-cuboid-ever/README.markdown create mode 100644 best-css-3d-cuboid-ever/dist/index.html create mode 100644 best-css-3d-cuboid-ever/dist/script.js create mode 100644 best-css-3d-cuboid-ever/dist/style.css create mode 100644 best-css-3d-cuboid-ever/dist/vyegypg.css create mode 100644 best-css-3d-cuboid-ever/license.txt create mode 100644 best-css-3d-cuboid-ever/src/index.pug create mode 100644 best-css-3d-cuboid-ever/src/script.js create mode 100644 best-css-3d-cuboid-ever/src/style.scss create mode 100644 best-css-3d-cuboid-ever/src/vyegypg.css create mode 100644 big-collection-houdini-animated-1-element-spinners/README.markdown create mode 100644 big-collection-houdini-animated-1-element-spinners/dist/index.html create mode 100644 big-collection-houdini-animated-1-element-spinners/dist/script.js create mode 100644 big-collection-houdini-animated-1-element-spinners/dist/style.css create mode 100644 big-collection-houdini-animated-1-element-spinners/license.txt create mode 100644 big-collection-houdini-animated-1-element-spinners/src/index.pug create mode 100644 big-collection-houdini-animated-1-element-spinners/src/script.babel create mode 100644 big-collection-houdini-animated-1-element-spinners/src/style.scss create mode 100644 bind-css-keyframe-animation-to-scroll/LICENSE.txt create mode 100644 bind-css-keyframe-animation-to-scroll/README.md create mode 100644 bind-css-keyframe-animation-to-scroll/dist/index.html create mode 100644 bind-css-keyframe-animation-to-scroll/dist/script.js create mode 100644 bind-css-keyframe-animation-to-scroll/dist/style.css create mode 100644 bind-css-keyframe-animation-to-scroll/src/index.html create mode 100644 bind-css-keyframe-animation-to-scroll/src/script.js create mode 100644 bind-css-keyframe-animation-to-scroll/src/style.css create mode 100644 blob-study/README.markdown create mode 100644 blob-study/dist/apxlmx.js create mode 100644 blob-study/dist/index.html create mode 100644 blob-study/dist/script.js create mode 100644 blob-study/dist/style.css create mode 100644 blob-study/license.txt create mode 100644 blob-study/src/apxlmx.js create mode 100644 blob-study/src/index.html create mode 100644 blob-study/src/script.babel create mode 100644 blob-study/src/style.css create mode 100644 blobby-deerthreejs-to-svg-render-gsap/README.markdown create mode 100644 blobby-deerthreejs-to-svg-render-gsap/dist/index.html create mode 100644 blobby-deerthreejs-to-svg-render-gsap/dist/script.js create mode 100644 blobby-deerthreejs-to-svg-render-gsap/dist/style.css create mode 100644 blobby-deerthreejs-to-svg-render-gsap/license.txt create mode 100644 blobby-deerthreejs-to-svg-render-gsap/src/index.html create mode 100644 blobby-deerthreejs-to-svg-render-gsap/src/script.js create mode 100644 blobby-deerthreejs-to-svg-render-gsap/src/style.scss create mode 100644 blobhow-to/README.markdown create mode 100644 blobhow-to/dist/index.html create mode 100644 blobhow-to/dist/script.js create mode 100644 blobhow-to/dist/style.css create mode 100644 blobhow-to/license.txt create mode 100644 blobhow-to/src/index.html create mode 100644 blobhow-to/src/script.js create mode 100644 blobhow-to/src/style.scss create mode 100644 blobs/README.markdown create mode 100644 blobs/dist/index.html create mode 100644 blobs/dist/script.js create mode 100644 blobs/dist/style.css create mode 100644 blobs/license.txt create mode 100644 blobs/src/index.html create mode 100644 blobs/src/script.js create mode 100644 blobs/src/style.css create mode 100644 bloom/README.markdown create mode 100644 bloom/dist/index.html create mode 100644 bloom/dist/script.js create mode 100644 bloom/dist/style.css create mode 100644 bloom/license.txt create mode 100644 bloom/src/index.html create mode 100644 bloom/src/script.js create mode 100644 bloom/src/style.scss create mode 100644 bongo-cat-codes-2jamming/README.markdown create mode 100644 bongo-cat-codes-2jamming/dist/index.html create mode 100644 bongo-cat-codes-2jamming/dist/script.js create mode 100644 bongo-cat-codes-2jamming/dist/style.css create mode 100644 bongo-cat-codes-2jamming/license.txt create mode 100644 bongo-cat-codes-2jamming/src/index.pug create mode 100644 bongo-cat-codes-2jamming/src/script.babel create mode 100644 bongo-cat-codes-2jamming/src/style.scss create mode 100644 bongo-cat-codes/README.markdown create mode 100644 bongo-cat-codes/dist/index.html create mode 100644 bongo-cat-codes/dist/script.js create mode 100644 bongo-cat-codes/dist/style.css create mode 100644 bongo-cat-codes/license.txt create mode 100644 bongo-cat-codes/src/index.pug create mode 100644 bongo-cat-codes/src/script.babel create mode 100644 bongo-cat-codes/src/style.scss create mode 100644 book-store-ui/LICENSE.txt create mode 100644 book-store-ui/README.markdown create mode 100644 book-store-ui/README.md create mode 100644 book-store-ui/dist/index.html create mode 100644 book-store-ui/dist/style.css create mode 100644 book-store-ui/license.txt create mode 100644 book-store-ui/src/index.html create mode 100644 book-store-ui/src/style.scss create mode 100644 bouncing-bunnies-animation-delay-lesson/README.markdown create mode 100644 bouncing-bunnies-animation-delay-lesson/dist/index.html create mode 100644 bouncing-bunnies-animation-delay-lesson/dist/script.js create mode 100644 bouncing-bunnies-animation-delay-lesson/dist/style.css create mode 100644 bouncing-bunnies-animation-delay-lesson/license.txt create mode 100644 bouncing-bunnies-animation-delay-lesson/src/index.pug create mode 100644 bouncing-bunnies-animation-delay-lesson/src/script.babel create mode 100644 bouncing-bunnies-animation-delay-lesson/src/style.styl create mode 100644 box-model/README.markdown create mode 100644 box-model/dist/index.html create mode 100644 box-model/dist/script.js create mode 100644 box-model/dist/style.css create mode 100644 box-model/license.txt create mode 100644 box-model/src/index.html create mode 100644 box-model/src/script.babel create mode 100644 box-model/src/style.css create mode 100644 break-out-of-parent-element-indented/README.markdown create mode 100644 break-out-of-parent-element-indented/dist/index.html create mode 100644 break-out-of-parent-element-indented/dist/style.css create mode 100644 break-out-of-parent-element-indented/license.txt create mode 100644 break-out-of-parent-element-indented/src/index.html create mode 100644 break-out-of-parent-element-indented/src/style.scss create mode 100644 breathe/README.markdown create mode 100644 breathe/dist/index.html create mode 100644 breathe/dist/script.js create mode 100644 breathe/dist/style.css create mode 100644 breathe/license.txt create mode 100644 breathe/src/index.html create mode 100644 breathe/src/script.babel create mode 100644 breathe/src/style.scss create mode 100644 bricks-darkcss-doodle/README.markdown create mode 100644 bricks-darkcss-doodle/dist/index.html create mode 100644 bricks-darkcss-doodle/dist/script.js create mode 100644 bricks-darkcss-doodle/dist/style.css create mode 100644 bricks-darkcss-doodle/license.txt create mode 100644 bricks-darkcss-doodle/src/index.html create mode 100644 bricks-darkcss-doodle/src/script.babel create mode 100644 bricks-darkcss-doodle/src/style.scss create mode 100644 brutalism/README.markdown create mode 100644 brutalism/dist/index.html create mode 100644 brutalism/dist/style.css create mode 100644 brutalism/license.txt create mode 100644 brutalism/src/index.html create mode 100644 brutalism/src/style.scss create mode 100644 bubble-sort-colors/README.markdown create mode 100644 bubble-sort-colors/dist/index.html create mode 100644 bubble-sort-colors/dist/script.js create mode 100644 bubble-sort-colors/dist/style.css create mode 100644 bubble-sort-colors/license.txt create mode 100644 bubble-sort-colors/src/index.html create mode 100644 bubble-sort-colors/src/script.js create mode 100644 bubble-sort-colors/src/style.css create mode 100644 bubblegum-on-hover/README.markdown create mode 100644 bubblegum-on-hover/dist/index.html create mode 100644 bubblegum-on-hover/dist/script.js create mode 100644 bubblegum-on-hover/dist/style.css create mode 100644 bubblegum-on-hover/license.txt create mode 100644 bubblegum-on-hover/src/index.html create mode 100644 bubblegum-on-hover/src/script.js create mode 100644 bubblegum-on-hover/src/style.scss create mode 100644 bug-report-d20/README.markdown create mode 100644 bug-report-d20/dist/index.html create mode 100644 bug-report-d20/dist/script.js create mode 100644 bug-report-d20/dist/style.css create mode 100644 bug-report-d20/license.txt create mode 100644 bug-report-d20/src/index.html create mode 100644 bug-report-d20/src/script.babel create mode 100644 bug-report-d20/src/style.scss create mode 100644 building-a-realtime-photoshop/README.markdown create mode 100644 building-a-realtime-photoshop/dist/index.html create mode 100644 building-a-realtime-photoshop/dist/script.js create mode 100644 building-a-realtime-photoshop/dist/style.css create mode 100644 building-a-realtime-photoshop/license.txt create mode 100644 building-a-realtime-photoshop/src/index.html create mode 100644 building-a-realtime-photoshop/src/script.js create mode 100644 building-a-realtime-photoshop/src/style.css create mode 100644 button-and-link-with-no-labelling-linthtmlwithcss/README.markdown create mode 100644 button-and-link-with-no-labelling-linthtmlwithcss/dist/index.html create mode 100644 button-and-link-with-no-labelling-linthtmlwithcss/dist/style.css create mode 100644 button-and-link-with-no-labelling-linthtmlwithcss/license.txt create mode 100644 button-and-link-with-no-labelling-linthtmlwithcss/src/index.html create mode 100644 button-and-link-with-no-labelling-linthtmlwithcss/src/style.css create mode 100644 c3-color-contrast-checker/README.markdown create mode 100644 c3-color-contrast-checker/dist/index.html create mode 100644 c3-color-contrast-checker/dist/script.js create mode 100644 c3-color-contrast-checker/dist/style.css create mode 100644 c3-color-contrast-checker/license.txt create mode 100644 c3-color-contrast-checker/src/index.html create mode 100644 c3-color-contrast-checker/src/script.js create mode 100644 c3-color-contrast-checker/src/style.css create mode 100644 cacheable-3-colour-svgs-via-use/README.markdown create mode 100644 cacheable-3-colour-svgs-via-use/dist/index.html create mode 100644 cacheable-3-colour-svgs-via-use/dist/script.js create mode 100644 cacheable-3-colour-svgs-via-use/dist/style.css create mode 100644 cacheable-3-colour-svgs-via-use/license.txt create mode 100644 cacheable-3-colour-svgs-via-use/src/index.slim create mode 100644 cacheable-3-colour-svgs-via-use/src/script.js create mode 100644 cacheable-3-colour-svgs-via-use/src/style.scss create mode 100644 cafe-menu-interactive-codepen-challenge/README.markdown create mode 100644 cafe-menu-interactive-codepen-challenge/dist/index.html create mode 100644 cafe-menu-interactive-codepen-challenge/dist/style.css create mode 100644 cafe-menu-interactive-codepen-challenge/license.txt create mode 100644 cafe-menu-interactive-codepen-challenge/src/index.html create mode 100644 cafe-menu-interactive-codepen-challenge/src/style.css create mode 100644 calm-in-the-iridescence/README.markdown create mode 100644 calm-in-the-iridescence/dist/index.html create mode 100644 calm-in-the-iridescence/dist/script.js create mode 100644 calm-in-the-iridescence/dist/style.css create mode 100644 calm-in-the-iridescence/license.txt create mode 100644 calm-in-the-iridescence/src/index.html create mode 100644 calm-in-the-iridescence/src/script.babel create mode 100644 calm-in-the-iridescence/src/style.scss create mode 100644 candy-cane/README.markdown create mode 100644 candy-cane/dist/index.html create mode 100644 candy-cane/dist/script.js create mode 100644 candy-cane/dist/style.css create mode 100644 candy-cane/license.txt create mode 100644 candy-cane/src/index.html create mode 100644 candy-cane/src/script.js create mode 100644 candy-cane/src/style.css create mode 100644 candy-stacker/README.markdown create mode 100644 candy-stacker/dist/index.html create mode 100644 candy-stacker/dist/script.js create mode 100644 candy-stacker/dist/style.css create mode 100644 candy-stacker/license.txt create mode 100644 candy-stacker/src/index.html create mode 100644 candy-stacker/src/script.babel create mode 100644 candy-stacker/src/style.less create mode 100644 canvas-image-hover-interaction/README.markdown create mode 100644 canvas-image-hover-interaction/dist/index.html create mode 100644 canvas-image-hover-interaction/dist/script.js create mode 100644 canvas-image-hover-interaction/dist/style.css create mode 100644 canvas-image-hover-interaction/license.txt create mode 100644 canvas-image-hover-interaction/src/index.html create mode 100644 canvas-image-hover-interaction/src/script.js create mode 100644 canvas-image-hover-interaction/src/style.scss create mode 100644 card-hover-interactions/README.markdown create mode 100644 card-hover-interactions/dist/index.html create mode 100644 card-hover-interactions/dist/style.css create mode 100644 card-hover-interactions/license.txt create mode 100644 card-hover-interactions/src/index.pug create mode 100644 card-hover-interactions/src/style.scss create mode 100644 card-interactions-with-gsap/README.markdown create mode 100644 card-interactions-with-gsap/dist/index.html create mode 100644 card-interactions-with-gsap/dist/script.js create mode 100644 card-interactions-with-gsap/dist/style.css create mode 100644 card-interactions-with-gsap/license.txt create mode 100644 card-interactions-with-gsap/src/index.html create mode 100644 card-interactions-with-gsap/src/script.js create mode 100644 card-interactions-with-gsap/src/style.css create mode 100644 cards-with-simple-stripe-backgrounds/README.markdown create mode 100644 cards-with-simple-stripe-backgrounds/dist/index.html create mode 100644 cards-with-simple-stripe-backgrounds/dist/style.css create mode 100644 cards-with-simple-stripe-backgrounds/license.txt create mode 100644 cards-with-simple-stripe-backgrounds/src/index.html create mode 100644 cards-with-simple-stripe-backgrounds/src/style.scss create mode 100644 carousel-lock-interface/README.markdown create mode 100644 carousel-lock-interface/dist/index.html create mode 100644 carousel-lock-interface/dist/script.js create mode 100644 carousel-lock-interface/dist/style.css create mode 100644 carousel-lock-interface/license.txt create mode 100644 carousel-lock-interface/src/index.html create mode 100644 carousel-lock-interface/src/script.babel create mode 100644 carousel-lock-interface/src/style.scss create mode 100644 casio-pt-1-with-html-css-js/README.markdown create mode 100644 casio-pt-1-with-html-css-js/dist/index.html create mode 100644 casio-pt-1-with-html-css-js/dist/script.js create mode 100644 casio-pt-1-with-html-css-js/dist/style.css create mode 100644 casio-pt-1-with-html-css-js/license.txt create mode 100644 casio-pt-1-with-html-css-js/src/index.html create mode 100644 casio-pt-1-with-html-css-js/src/script.babel create mode 100644 casio-pt-1-with-html-css-js/src/style.css create mode 100644 casiopt-1-css/README.markdown create mode 100644 casiopt-1-css/dist/index.html create mode 100644 casiopt-1-css/dist/style.css create mode 100644 casiopt-1-css/license.txt create mode 100644 casiopt-1-css/src/index.html create mode 100644 casiopt-1-css/src/style.css create mode 100644 ceramic-looped/README.markdown create mode 100644 ceramic-looped/dist/index.html create mode 100644 ceramic-looped/dist/script.js create mode 100644 ceramic-looped/dist/style.css create mode 100644 ceramic-looped/license.txt create mode 100644 ceramic-looped/src/index.html create mode 100644 ceramic-looped/src/script.babel create mode 100644 ceramic-looped/src/style.scss create mode 100644 checkbox-group-styled-as-tiles/README.markdown create mode 100644 checkbox-group-styled-as-tiles/dist/index.html create mode 100644 checkbox-group-styled-as-tiles/dist/script.js create mode 100644 checkbox-group-styled-as-tiles/dist/style.css create mode 100644 checkbox-group-styled-as-tiles/license.txt create mode 100644 checkbox-group-styled-as-tiles/src/index.html create mode 100644 checkbox-group-styled-as-tiles/src/script.js create mode 100644 checkbox-group-styled-as-tiles/src/style.scss create mode 100644 checkbox-switch-input-element-only-css-crossbrowser/README.markdown create mode 100644 checkbox-switch-input-element-only-css-crossbrowser/dist/index.html create mode 100644 checkbox-switch-input-element-only-css-crossbrowser/dist/style.css create mode 100644 checkbox-switch-input-element-only-css-crossbrowser/license.txt create mode 100644 checkbox-switch-input-element-only-css-crossbrowser/src/index.html create mode 100644 checkbox-switch-input-element-only-css-crossbrowser/src/style.css create mode 100644 checklist-animation/README.markdown create mode 100644 checklist-animation/dist/index.html create mode 100644 checklist-animation/dist/style.css create mode 100644 checklist-animation/license.txt create mode 100644 checklist-animation/src/index.html create mode 100644 checklist-animation/src/style.scss create mode 100644 christmas-cannon/LICENSE.txt create mode 100644 christmas-cannon/README.md create mode 100644 christmas-cannon/dist/index.html create mode 100644 christmas-cannon/dist/script.js create mode 100644 christmas-cannon/dist/style.css create mode 100644 christmas-cannon/src/index.html create mode 100644 christmas-cannon/src/script.babel create mode 100644 christmas-cannon/src/style.scss create mode 100644 city/README.markdown create mode 100644 city/dist/index.html create mode 100644 city/dist/script.js create mode 100644 city/dist/style.css create mode 100644 city/license.txt create mode 100644 city/src/index.html create mode 100644 city/src/script.js create mode 100644 city/src/style.css create mode 100644 claymorphism/README.markdown create mode 100644 claymorphism/dist/index.html create mode 100644 claymorphism/dist/style.css create mode 100644 claymorphism/license.txt create mode 100644 claymorphism/src/index.html create mode 100644 claymorphism/src/style.css create mode 100644 clip-path-theme-switch-backdrop-filter-version/LICENSE.txt create mode 100644 clip-path-theme-switch-backdrop-filter-version/README.md create mode 100644 clip-path-theme-switch-backdrop-filter-version/dist/index.html create mode 100644 clip-path-theme-switch-backdrop-filter-version/dist/script.js create mode 100644 clip-path-theme-switch-backdrop-filter-version/dist/style.css create mode 100644 clip-path-theme-switch-backdrop-filter-version/src/index.html create mode 100644 clip-path-theme-switch-backdrop-filter-version/src/script.js create mode 100644 clip-path-theme-switch-backdrop-filter-version/src/style.css create mode 100644 clipped-image-reveal-on-hover/README.markdown create mode 100644 clipped-image-reveal-on-hover/dist/index.html create mode 100644 clipped-image-reveal-on-hover/dist/script.js create mode 100644 clipped-image-reveal-on-hover/dist/style.css create mode 100644 clipped-image-reveal-on-hover/license.txt create mode 100644 clipped-image-reveal-on-hover/src/index.html create mode 100644 clipped-image-reveal-on-hover/src/script.js create mode 100644 clipped-image-reveal-on-hover/src/style.scss create mode 100644 codepen-challenge-knockout-text/README.markdown create mode 100644 codepen-challenge-knockout-text/dist/index.html create mode 100644 codepen-challenge-knockout-text/dist/script.js create mode 100644 codepen-challenge-knockout-text/dist/style.css create mode 100644 codepen-challenge-knockout-text/license.txt create mode 100644 codepen-challenge-knockout-text/src/index.html create mode 100644 codepen-challenge-knockout-text/src/script.js create mode 100644 codepen-challenge-knockout-text/src/style.css create mode 100644 codevember-12/README.markdown create mode 100644 codevember-12/dist/index.html create mode 100644 codevember-12/dist/script.js create mode 100644 codevember-12/dist/style.css create mode 100644 codevember-12/license.txt create mode 100644 codevember-12/src/index.html create mode 100644 codevember-12/src/script.babel create mode 100644 codevember-12/src/style.scss create mode 100644 codevember-29-hypnotic-neon-lights/README.markdown create mode 100644 codevember-29-hypnotic-neon-lights/dist/index.html create mode 100644 codevember-29-hypnotic-neon-lights/dist/script.js create mode 100644 codevember-29-hypnotic-neon-lights/dist/style.css create mode 100644 codevember-29-hypnotic-neon-lights/license.txt create mode 100644 codevember-29-hypnotic-neon-lights/src/index.html create mode 100644 codevember-29-hypnotic-neon-lights/src/script.js create mode 100644 codevember-29-hypnotic-neon-lights/src/style.css create mode 100644 codevember-30-2021-pure-css-order-vs-chaos/README.markdown create mode 100644 codevember-30-2021-pure-css-order-vs-chaos/dist/index.html create mode 100644 codevember-30-2021-pure-css-order-vs-chaos/dist/style.css create mode 100644 codevember-30-2021-pure-css-order-vs-chaos/license.txt create mode 100644 codevember-30-2021-pure-css-order-vs-chaos/src/index.pug create mode 100644 codevember-30-2021-pure-css-order-vs-chaos/src/style.scss create mode 100644 codevember-9-electric-hover-effect/README.markdown create mode 100644 codevember-9-electric-hover-effect/dist/index.html create mode 100644 codevember-9-electric-hover-effect/dist/script.js create mode 100644 codevember-9-electric-hover-effect/dist/style.css create mode 100644 codevember-9-electric-hover-effect/license.txt create mode 100644 codevember-9-electric-hover-effect/src/index.html create mode 100644 codevember-9-electric-hover-effect/src/script.js create mode 100644 codevember-9-electric-hover-effect/src/style.css create mode 100644 codevember-9/README.markdown create mode 100644 codevember-9/dist/index.html create mode 100644 codevember-9/dist/script.js create mode 100644 codevember-9/dist/style.css create mode 100644 codevember-9/license.txt create mode 100644 codevember-9/src/index.html create mode 100644 codevember-9/src/script.js create mode 100644 codevember-9/src/style.css create mode 100644 codevember11ladder-illusion/README.markdown create mode 100644 codevember11ladder-illusion/dist/index.html create mode 100644 codevember11ladder-illusion/dist/style.css create mode 100644 codevember11ladder-illusion/license.txt create mode 100644 codevember11ladder-illusion/src/index.pug create mode 100644 codevember11ladder-illusion/src/style.scss create mode 100644 cogs-with-variables/README.markdown create mode 100644 cogs-with-variables/dist/index.html create mode 100644 cogs-with-variables/dist/style.css create mode 100644 cogs-with-variables/license.txt create mode 100644 cogs-with-variables/src/index.html create mode 100644 cogs-with-variables/src/style.css create mode 100644 color-palettes/README.markdown create mode 100644 color-palettes/dist/index.html create mode 100644 color-palettes/dist/style.css create mode 100644 color-palettes/license.txt create mode 100644 color-palettes/src/index.pug create mode 100644 color-palettes/src/style.scss create mode 100644 color-search-engine-w-react-gsap/README.markdown create mode 100644 color-search-engine-w-react-gsap/dist/index.html create mode 100644 color-search-engine-w-react-gsap/dist/script.js create mode 100644 color-search-engine-w-react-gsap/dist/style.css create mode 100644 color-search-engine-w-react-gsap/license.txt create mode 100644 color-search-engine-w-react-gsap/src/index.pug create mode 100644 color-search-engine-w-react-gsap/src/script.babel create mode 100644 color-search-engine-w-react-gsap/src/style.styl create mode 100644 color-standards-and-color-nomenclature/LICENSE.txt create mode 100644 color-standards-and-color-nomenclature/README.md create mode 100644 color-standards-and-color-nomenclature/dist/index.html create mode 100644 color-standards-and-color-nomenclature/dist/script.js create mode 100644 color-standards-and-color-nomenclature/dist/style.css create mode 100644 color-standards-and-color-nomenclature/src/index.html create mode 100644 color-standards-and-color-nomenclature/src/script.js create mode 100644 color-standards-and-color-nomenclature/src/style.scss create mode 100644 color-wave/README.markdown create mode 100644 color-wave/dist/index.html create mode 100644 color-wave/dist/script.js create mode 100644 color-wave/dist/style.css create mode 100644 color-wave/license.txt create mode 100644 color-wave/src/index.html create mode 100644 color-wave/src/script.js create mode 100644 color-wave/src/style.scss create mode 100644 colorful-distance-field-shaderanydayshaders-13/README.markdown create mode 100644 colorful-distance-field-shaderanydayshaders-13/dist/index.html create mode 100644 colorful-distance-field-shaderanydayshaders-13/dist/script.js create mode 100644 colorful-distance-field-shaderanydayshaders-13/dist/style.css create mode 100644 colorful-distance-field-shaderanydayshaders-13/license.txt create mode 100644 colorful-distance-field-shaderanydayshaders-13/src/index.html create mode 100644 colorful-distance-field-shaderanydayshaders-13/src/script.js create mode 100644 colorful-distance-field-shaderanydayshaders-13/src/style.css create mode 100644 colorpencilscss-doodle/README.markdown create mode 100644 colorpencilscss-doodle/dist/index.html create mode 100644 colorpencilscss-doodle/dist/script.js create mode 100644 colorpencilscss-doodle/dist/style.css create mode 100644 colorpencilscss-doodle/license.txt create mode 100644 colorpencilscss-doodle/src/index.html create mode 100644 colorpencilscss-doodle/src/script.babel create mode 100644 colorpencilscss-doodle/src/style.scss create mode 100644 commodore-logo-original-design-sketch-reproduction/README.markdown create mode 100644 commodore-logo-original-design-sketch-reproduction/dist/index.html create mode 100644 commodore-logo-original-design-sketch-reproduction/dist/style.css create mode 100644 commodore-logo-original-design-sketch-reproduction/license.txt create mode 100644 commodore-logo-original-design-sketch-reproduction/src/index.html create mode 100644 commodore-logo-original-design-sketch-reproduction/src/style.scss create mode 100644 confetti-button/README.markdown create mode 100644 confetti-button/dist/index.html create mode 100644 confetti-button/dist/script.js create mode 100644 confetti-button/dist/style.css create mode 100644 confetti-button/license.txt create mode 100644 confetti-button/src/index.html create mode 100644 confetti-button/src/script.babel create mode 100644 confetti-button/src/style.css create mode 100644 confluent-flow/README.markdown create mode 100644 confluent-flow/dist/index.html create mode 100644 confluent-flow/dist/script.js create mode 100644 confluent-flow/dist/style.css create mode 100644 confluent-flow/license.txt create mode 100644 confluent-flow/src/index.pug create mode 100644 confluent-flow/src/script.js create mode 100644 confluent-flow/src/style.scss create mode 100644 conic-gradient-in-svg/LICENSE.txt create mode 100644 conic-gradient-in-svg/README.md create mode 100644 conic-gradient-in-svg/dist/index.html create mode 100644 conic-gradient-in-svg/dist/style.css create mode 100644 conic-gradient-in-svg/src/index.html create mode 100644 conic-gradient-in-svg/src/style.css create mode 100644 conic-gradients-css-masks-no-ff/README.markdown create mode 100644 conic-gradients-css-masks-no-ff/dist/index.html create mode 100644 conic-gradients-css-masks-no-ff/dist/style.css create mode 100644 conic-gradients-css-masks-no-ff/license.txt create mode 100644 conic-gradients-css-masks-no-ff/src/index.html create mode 100644 conic-gradients-css-masks-no-ff/src/style.scss create mode 100644 container-query-bookstore/README.markdown create mode 100644 container-query-bookstore/dist/index.html create mode 100644 container-query-bookstore/dist/script.js create mode 100644 container-query-bookstore/dist/style.css create mode 100644 container-query-bookstore/license.txt create mode 100644 container-query-bookstore/src/index.html create mode 100644 container-query-bookstore/src/script.js create mode 100644 container-query-bookstore/src/style.css create mode 100644 context-menu-with-feather-icons/README.markdown create mode 100644 context-menu-with-feather-icons/dist/index.html create mode 100644 context-menu-with-feather-icons/dist/script.js create mode 100644 context-menu-with-feather-icons/dist/style.css create mode 100644 context-menu-with-feather-icons/license.txt create mode 100644 context-menu-with-feather-icons/src/index.html create mode 100644 context-menu-with-feather-icons/src/script.js create mode 100644 context-menu-with-feather-icons/src/style.scss create mode 100644 copy-table-as-csv-web-component/README.markdown create mode 100644 copy-table-as-csv-web-component/dist/index.html create mode 100644 copy-table-as-csv-web-component/dist/script.js create mode 100644 copy-table-as-csv-web-component/dist/style.css create mode 100644 copy-table-as-csv-web-component/license.txt create mode 100644 copy-table-as-csv-web-component/src/index.html create mode 100644 copy-table-as-csv-web-component/src/script.js create mode 100644 copy-table-as-csv-web-component/src/style.scss create mode 100644 countdown-to-new-year/README.markdown create mode 100644 countdown-to-new-year/dist/index.html create mode 100644 countdown-to-new-year/dist/script.js create mode 100644 countdown-to-new-year/dist/style.css create mode 100644 countdown-to-new-year/license.txt create mode 100644 countdown-to-new-year/src/index.pug create mode 100644 countdown-to-new-year/src/script.js create mode 100644 countdown-to-new-year/src/style.css create mode 100644 cpc-dropdown-slots/README.markdown create mode 100644 cpc-dropdown-slots/dist/index.html create mode 100644 cpc-dropdown-slots/dist/script.js create mode 100644 cpc-dropdown-slots/dist/style.css create mode 100644 cpc-dropdown-slots/license.txt create mode 100644 cpc-dropdown-slots/src/index.pug create mode 100644 cpc-dropdown-slots/src/script.ts create mode 100644 cpc-dropdown-slots/src/style.scss create mode 100644 cqw-font-sizes/LICENSE.txt create mode 100644 cqw-font-sizes/README.md create mode 100644 cqw-font-sizes/dist/index.html create mode 100644 cqw-font-sizes/dist/style.css create mode 100644 cqw-font-sizes/src/index.html create mode 100644 cqw-font-sizes/src/style.css create mode 100644 crazy-4/README.markdown create mode 100644 crazy-4/dist/index.html create mode 100644 crazy-4/dist/script.js create mode 100644 crazy-4/dist/style.css create mode 100644 crazy-4/license.txt create mode 100644 crazy-4/src/index.html create mode 100644 crazy-4/src/script.js create mode 100644 crazy-4/src/style.css create mode 100644 crossing-walls/README.markdown create mode 100644 crossing-walls/dist/index.html create mode 100644 crossing-walls/dist/script.js create mode 100644 crossing-walls/dist/style.css create mode 100644 crossing-walls/license.txt create mode 100644 crossing-walls/src/index.html create mode 100644 crossing-walls/src/script.js create mode 100644 crossing-walls/src/style.css create mode 100644 crystal-mountains/README.markdown create mode 100644 crystal-mountains/dist/index.html create mode 100644 crystal-mountains/dist/script.js create mode 100644 crystal-mountains/dist/style.css create mode 100644 crystal-mountains/license.txt create mode 100644 crystal-mountains/src/index.pug create mode 100644 crystal-mountains/src/script.js create mode 100644 crystal-mountains/src/style.styl create mode 100644 css-artsphere/README.markdown create mode 100644 css-artsphere/dist/index.html create mode 100644 css-artsphere/dist/style.css create mode 100644 css-artsphere/license.txt create mode 100644 css-artsphere/src/index.html create mode 100644 css-artsphere/src/style.scss create mode 100644 css-clip-path-editor/README.markdown create mode 100644 css-clip-path-editor/dist/index.html create mode 100644 css-clip-path-editor/dist/script.js create mode 100644 css-clip-path-editor/dist/style.css create mode 100644 css-clip-path-editor/license.txt create mode 100644 css-clip-path-editor/src/index.html create mode 100644 css-clip-path-editor/src/script.js create mode 100644 css-clip-path-editor/src/style.css create mode 100644 css-color-rings/README.markdown create mode 100644 css-color-rings/dist/index.html create mode 100644 css-color-rings/dist/style.css create mode 100644 css-color-rings/license.txt create mode 100644 css-color-rings/src/index.pug create mode 100644 css-color-rings/src/style.styl create mode 100644 css-dna/README.markdown create mode 100644 css-dna/dist/index.html create mode 100644 css-dna/dist/script.js create mode 100644 css-dna/dist/style.css create mode 100644 css-dna/license.txt create mode 100644 css-dna/src/index.pug create mode 100644 css-dna/src/script.js create mode 100644 css-dna/src/style.css create mode 100644 css-dominoes/README.markdown create mode 100644 css-dominoes/dist/index.html create mode 100644 css-dominoes/dist/style.css create mode 100644 css-dominoes/license.txt create mode 100644 css-dominoes/src/index.html create mode 100644 css-dominoes/src/style.scss create mode 100644 css-filter-cards/README.markdown create mode 100644 css-filter-cards/dist/index.html create mode 100644 css-filter-cards/dist/style.css create mode 100644 css-filter-cards/license.txt create mode 100644 css-filter-cards/src/index.html create mode 100644 css-filter-cards/src/style.css create mode 100644 css-filter-glitch/README.markdown create mode 100644 css-filter-glitch/dist/index.html create mode 100644 css-filter-glitch/dist/style.css create mode 100644 css-filter-glitch/license.txt create mode 100644 css-filter-glitch/src/index.html create mode 100644 css-filter-glitch/src/style.scss create mode 100644 css-filter-text-animation/README.markdown create mode 100644 css-filter-text-animation/dist/index.html create mode 100644 css-filter-text-animation/dist/style.css create mode 100644 css-filter-text-animation/license.txt create mode 100644 css-filter-text-animation/src/index.html create mode 100644 css-filter-text-animation/src/style.scss create mode 100644 css-grid-card-variations/README.markdown create mode 100644 css-grid-card-variations/dist/index.html create mode 100644 css-grid-card-variations/dist/style.css create mode 100644 css-grid-card-variations/license.txt create mode 100644 css-grid-card-variations/src/index.pug create mode 100644 css-grid-card-variations/src/style.scss create mode 100644 css-grid-newspaper-layout/README.markdown create mode 100644 css-grid-newspaper-layout/dist/index.html create mode 100644 css-grid-newspaper-layout/dist/script.js create mode 100644 css-grid-newspaper-layout/dist/style.css create mode 100644 css-grid-newspaper-layout/license.txt create mode 100644 css-grid-newspaper-layout/src/index.pug create mode 100644 css-grid-newspaper-layout/src/script.js create mode 100644 css-grid-newspaper-layout/src/style.scss create mode 100644 css-grid-swiss-style-typography-poster-07/README.markdown create mode 100644 css-grid-swiss-style-typography-poster-07/dist/index.html create mode 100644 css-grid-swiss-style-typography-poster-07/dist/script.js create mode 100644 css-grid-swiss-style-typography-poster-07/dist/style.css create mode 100644 css-grid-swiss-style-typography-poster-07/license.txt create mode 100644 css-grid-swiss-style-typography-poster-07/src/index.html create mode 100644 css-grid-swiss-style-typography-poster-07/src/script.js create mode 100644 css-grid-swiss-style-typography-poster-07/src/style.scss create mode 100644 css-grid-template-builder/README.markdown create mode 100644 css-grid-template-builder/dist/index.html create mode 100644 css-grid-template-builder/dist/script.js create mode 100644 css-grid-template-builder/dist/style.css create mode 100644 css-grid-template-builder/license.txt create mode 100644 css-grid-template-builder/src/index.html create mode 100644 css-grid-template-builder/src/script.babel create mode 100644 css-grid-template-builder/src/style.css create mode 100644 css-hexagon-grid/README.markdown create mode 100644 css-hexagon-grid/dist/index.html create mode 100644 css-hexagon-grid/dist/style.css create mode 100644 css-hexagon-grid/license.txt create mode 100644 css-hexagon-grid/src/index.html create mode 100644 css-hexagon-grid/src/style.css create mode 100644 css-houdinipaint-api-generative-fleck-patterns/README.markdown create mode 100644 css-houdinipaint-api-generative-fleck-patterns/dist/index.html create mode 100644 css-houdinipaint-api-generative-fleck-patterns/dist/script.js create mode 100644 css-houdinipaint-api-generative-fleck-patterns/dist/style.css create mode 100644 css-houdinipaint-api-generative-fleck-patterns/license.txt create mode 100644 css-houdinipaint-api-generative-fleck-patterns/src/index.html create mode 100644 css-houdinipaint-api-generative-fleck-patterns/src/script.js create mode 100644 css-houdinipaint-api-generative-fleck-patterns/src/style.css create mode 100644 css-is-awesome-css-motion-path/README.markdown create mode 100644 css-is-awesome-css-motion-path/dist/index.html create mode 100644 css-is-awesome-css-motion-path/dist/style.css create mode 100644 css-is-awesome-css-motion-path/license.txt create mode 100644 css-is-awesome-css-motion-path/src/index.html create mode 100644 css-is-awesome-css-motion-path/src/style.scss create mode 100644 css-is-awesomevariable-fonts-edition/README.markdown create mode 100644 css-is-awesomevariable-fonts-edition/dist/BarlowGX.ttf create mode 100644 css-is-awesomevariable-fonts-edition/dist/index.html create mode 100644 css-is-awesomevariable-fonts-edition/dist/style.css create mode 100644 css-is-awesomevariable-fonts-edition/license.txt create mode 100644 css-is-awesomevariable-fonts-edition/src/BarlowGX.ttf create mode 100644 css-is-awesomevariable-fonts-edition/src/index.html create mode 100644 css-is-awesomevariable-fonts-edition/src/style.scss create mode 100644 css-neon-button-makerwith-css-variables/README.markdown create mode 100644 css-neon-button-makerwith-css-variables/dist/index.html create mode 100644 css-neon-button-makerwith-css-variables/dist/script.js create mode 100644 css-neon-button-makerwith-css-variables/dist/style.css create mode 100644 css-neon-button-makerwith-css-variables/license.txt create mode 100644 css-neon-button-makerwith-css-variables/src/index.html create mode 100644 css-neon-button-makerwith-css-variables/src/script.babel create mode 100644 css-neon-button-makerwith-css-variables/src/style.css create mode 100644 css-only-direction-aware-box/README.markdown create mode 100644 css-only-direction-aware-box/dist/index.html create mode 100644 css-only-direction-aware-box/dist/script.js create mode 100644 css-only-direction-aware-box/dist/style.css create mode 100644 css-only-direction-aware-box/license.txt create mode 100644 css-only-direction-aware-box/src/index.html create mode 100644 css-only-direction-aware-box/src/script.js create mode 100644 css-only-direction-aware-box/src/style.css create mode 100644 css-only-harry-potter-game-basilisks-and-brooms/README.markdown create mode 100644 css-only-harry-potter-game-basilisks-and-brooms/dist/index.html create mode 100644 css-only-harry-potter-game-basilisks-and-brooms/dist/script.js create mode 100644 css-only-harry-potter-game-basilisks-and-brooms/dist/style.css create mode 100644 css-only-harry-potter-game-basilisks-and-brooms/license.txt create mode 100644 css-only-harry-potter-game-basilisks-and-brooms/src/index.pug create mode 100644 css-only-harry-potter-game-basilisks-and-brooms/src/script.js create mode 100644 css-only-harry-potter-game-basilisks-and-brooms/src/style.scss create mode 100644 css-only-interactive-3d-dice/README.markdown create mode 100644 css-only-interactive-3d-dice/dist/index.html create mode 100644 css-only-interactive-3d-dice/dist/style.css create mode 100644 css-only-interactive-3d-dice/license.txt create mode 100644 css-only-interactive-3d-dice/src/index.pug create mode 100644 css-only-interactive-3d-dice/src/style.scss create mode 100644 css-only-switch-checkboxes/README.markdown create mode 100644 css-only-switch-checkboxes/dist/index.html create mode 100644 css-only-switch-checkboxes/dist/style.css create mode 100644 css-only-switch-checkboxes/license.txt create mode 100644 css-only-switch-checkboxes/src/index.html create mode 100644 css-only-switch-checkboxes/src/style.css create mode 100644 css-panning-perspective-plane/README.markdown create mode 100644 css-panning-perspective-plane/dist/index.html create mode 100644 css-panning-perspective-plane/dist/style.css create mode 100644 css-panning-perspective-plane/license.txt create mode 100644 css-panning-perspective-plane/src/index.haml create mode 100644 css-panning-perspective-plane/src/style.scss create mode 100644 css-position-sticky-with-top-0-and-bottom-0/README.markdown create mode 100644 css-position-sticky-with-top-0-and-bottom-0/dist/index.html create mode 100644 css-position-sticky-with-top-0-and-bottom-0/dist/style.css create mode 100644 css-position-sticky-with-top-0-and-bottom-0/license.txt create mode 100644 css-position-sticky-with-top-0-and-bottom-0/src/index.html create mode 100644 css-position-sticky-with-top-0-and-bottom-0/src/style.scss create mode 100644 css-preloader/README.markdown create mode 100644 css-preloader/dist/index.html create mode 100644 css-preloader/dist/script.js create mode 100644 css-preloader/dist/style.css create mode 100644 css-preloader/license.txt create mode 100644 css-preloader/src/index.html create mode 100644 css-preloader/src/script.js create mode 100644 css-preloader/src/style.css create mode 100644 css-sceneindustrialization-and-climate-change/README.markdown create mode 100644 css-sceneindustrialization-and-climate-change/dist/index.html create mode 100644 css-sceneindustrialization-and-climate-change/dist/script.js create mode 100644 css-sceneindustrialization-and-climate-change/dist/style.css create mode 100644 css-sceneindustrialization-and-climate-change/license.txt create mode 100644 css-sceneindustrialization-and-climate-change/src/index.html create mode 100644 css-sceneindustrialization-and-climate-change/src/script.js create mode 100644 css-sceneindustrialization-and-climate-change/src/style.css create mode 100644 css-shapes-columns-and-clipping/README.markdown create mode 100644 css-shapes-columns-and-clipping/dist/index.html create mode 100644 css-shapes-columns-and-clipping/dist/style.css create mode 100644 css-shapes-columns-and-clipping/license.txt create mode 100644 css-shapes-columns-and-clipping/src/index.html create mode 100644 css-shapes-columns-and-clipping/src/style.scss create mode 100644 css-squircle/README.markdown create mode 100644 css-squircle/dist/index.html create mode 100644 css-squircle/dist/style.css create mode 100644 css-squircle/license.txt create mode 100644 css-squircle/src/index.html create mode 100644 css-squircle/src/style.less create mode 100644 css-user-avatars/README.markdown create mode 100644 css-user-avatars/dist/index.html create mode 100644 css-user-avatars/dist/script.js create mode 100644 css-user-avatars/dist/style.css create mode 100644 css-user-avatars/license.txt create mode 100644 css-user-avatars/src/index.html create mode 100644 css-user-avatars/src/script.js create mode 100644 css-user-avatars/src/style.less create mode 100644 css3-loader-spinners/README.markdown create mode 100644 css3-loader-spinners/dist/index.html create mode 100644 css3-loader-spinners/dist/style.css create mode 100644 css3-loader-spinners/license.txt create mode 100644 css3-loader-spinners/src/index.pug create mode 100644 css3-loader-spinners/src/style.scss create mode 100644 cssfrosted-glass/README.markdown create mode 100644 cssfrosted-glass/dist/index.html create mode 100644 cssfrosted-glass/dist/style.css create mode 100644 cssfrosted-glass/license.txt create mode 100644 cssfrosted-glass/src/index.html create mode 100644 cssfrosted-glass/src/style.scss create mode 100644 csspotlight/README.markdown create mode 100644 csspotlight/dist/index.html create mode 100644 csspotlight/dist/script.js create mode 100644 csspotlight/dist/style.css create mode 100644 csspotlight/license.txt create mode 100644 csspotlight/src/index.html create mode 100644 csspotlight/src/script.js create mode 100644 csspotlight/src/style.scss create mode 100644 cups-pattern/README.markdown create mode 100644 cups-pattern/dist/index.html create mode 100644 cups-pattern/dist/script.js create mode 100644 cups-pattern/dist/style.css create mode 100644 cups-pattern/license.txt create mode 100644 cups-pattern/src/index.pug create mode 100644 cups-pattern/src/script.js create mode 100644 cups-pattern/src/style.scss create mode 100644 curiouslyminded-with-flopine/README.markdown create mode 100644 curiouslyminded-with-flopine/dist/index.html create mode 100644 curiouslyminded-with-flopine/dist/script.js create mode 100644 curiouslyminded-with-flopine/dist/style.css create mode 100644 curiouslyminded-with-flopine/license.txt create mode 100644 curiouslyminded-with-flopine/src/index.html create mode 100644 curiouslyminded-with-flopine/src/script.js create mode 100644 curiouslyminded-with-flopine/src/style.scss create mode 100644 curl-noise/README.markdown create mode 100644 curl-noise/dist/index.html create mode 100644 curl-noise/dist/script.js create mode 100644 curl-noise/dist/style.css create mode 100644 curl-noise/license.txt create mode 100644 curl-noise/src/index.html create mode 100644 curl-noise/src/script.babel create mode 100644 curl-noise/src/style.css create mode 100644 custom-right-click-context-menu/README.markdown create mode 100644 custom-right-click-context-menu/dist/index.html create mode 100644 custom-right-click-context-menu/dist/script.js create mode 100644 custom-right-click-context-menu/dist/style.css create mode 100644 custom-right-click-context-menu/license.txt create mode 100644 custom-right-click-context-menu/src/index.html create mode 100644 custom-right-click-context-menu/src/script.babel create mode 100644 custom-right-click-context-menu/src/style.scss create mode 100644 customer-management-ui/README.markdown create mode 100644 customer-management-ui/dist/index.html create mode 100644 customer-management-ui/dist/script.js create mode 100644 customer-management-ui/dist/style.css create mode 100644 customer-management-ui/license.txt create mode 100644 customer-management-ui/src/index.html create mode 100644 customer-management-ui/src/script.js create mode 100644 customer-management-ui/src/style.scss create mode 100644 d3-map-projections/README.markdown create mode 100644 d3-map-projections/dist/index.html create mode 100644 d3-map-projections/dist/script.js create mode 100644 d3-map-projections/dist/style.css create mode 100644 d3-map-projections/license.txt create mode 100644 d3-map-projections/src/index.html create mode 100644 d3-map-projections/src/script.js create mode 100644 d3-map-projections/src/style.css create mode 100644 daily-pen-3disco/README.markdown create mode 100644 daily-pen-3disco/dist/index.html create mode 100644 daily-pen-3disco/dist/script.js create mode 100644 daily-pen-3disco/dist/style.css create mode 100644 daily-pen-3disco/license.txt create mode 100644 daily-pen-3disco/src/index.pug create mode 100644 daily-pen-3disco/src/script.babel create mode 100644 daily-pen-3disco/src/style.less create mode 100644 daily-ui-006-user-profile/README.markdown create mode 100644 daily-ui-006-user-profile/dist/index.html create mode 100644 daily-ui-006-user-profile/dist/script.js create mode 100644 daily-ui-006-user-profile/dist/style.css create mode 100644 daily-ui-006-user-profile/license.txt create mode 100644 daily-ui-006-user-profile/src/index.pug create mode 100644 daily-ui-006-user-profile/src/script.coffee create mode 100644 daily-ui-006-user-profile/src/style.sass create mode 100644 dan-flashes-complicated-shirt-generator/README.markdown create mode 100644 dan-flashes-complicated-shirt-generator/dist/index.html create mode 100644 dan-flashes-complicated-shirt-generator/dist/script.js create mode 100644 dan-flashes-complicated-shirt-generator/dist/style.css create mode 100644 dan-flashes-complicated-shirt-generator/license.txt create mode 100644 dan-flashes-complicated-shirt-generator/src/index.haml create mode 100644 dan-flashes-complicated-shirt-generator/src/script.js create mode 100644 dan-flashes-complicated-shirt-generator/src/style.scss create mode 100644 day-and-night-toggle/README.markdown create mode 100644 day-and-night-toggle/dist/index.html create mode 100644 day-and-night-toggle/dist/script.js create mode 100644 day-and-night-toggle/dist/style.css create mode 100644 day-and-night-toggle/license.txt create mode 100644 day-and-night-toggle/src/index.html create mode 100644 day-and-night-toggle/src/script.js create mode 100644 day-and-night-toggle/src/style.css create mode 100644 daylight-cycles-of-earth/README.markdown create mode 100644 daylight-cycles-of-earth/dist/index.html create mode 100644 daylight-cycles-of-earth/dist/script.js create mode 100644 daylight-cycles-of-earth/dist/style.css create mode 100644 daylight-cycles-of-earth/license.txt create mode 100644 daylight-cycles-of-earth/src/index.html create mode 100644 daylight-cycles-of-earth/src/script.js create mode 100644 daylight-cycles-of-earth/src/style.scss create mode 100644 dendritic-rabbit/README.markdown create mode 100644 dendritic-rabbit/dist/index.html create mode 100644 dendritic-rabbit/dist/script.js create mode 100644 dendritic-rabbit/license.txt create mode 100644 dendritic-rabbit/src/index.html create mode 100644 dendritic-rabbit/src/script.js create mode 100644 design-your-week/README.markdown create mode 100644 design-your-week/dist/index.html create mode 100644 design-your-week/dist/script.js create mode 100644 design-your-week/dist/style.css create mode 100644 design-your-week/license.txt create mode 100644 design-your-week/src/index.html create mode 100644 design-your-week/src/script.babel create mode 100644 design-your-week/src/style.scss create mode 100644 details-element-for-help-text/README.markdown create mode 100644 details-element-for-help-text/dist/index.html create mode 100644 details-element-for-help-text/dist/style.css create mode 100644 details-element-for-help-text/license.txt create mode 100644 details-element-for-help-text/src/index.html create mode 100644 details-element-for-help-text/src/style.scss create mode 100644 diagonal-page-transitions/README.markdown create mode 100644 diagonal-page-transitions/dist/index.html create mode 100644 diagonal-page-transitions/dist/script.js create mode 100644 diagonal-page-transitions/dist/style.css create mode 100644 diagonal-page-transitions/license.txt create mode 100644 diagonal-page-transitions/src/index.html create mode 100644 diagonal-page-transitions/src/script.js create mode 100644 diagonal-page-transitions/src/style.scss create mode 100644 digital-walls/README.markdown create mode 100644 digital-walls/dist/index.html create mode 100644 digital-walls/dist/script.js create mode 100644 digital-walls/dist/style.css create mode 100644 digital-walls/license.txt create mode 100644 digital-walls/src/index.html create mode 100644 digital-walls/src/script.babel create mode 100644 digital-walls/src/style.scss create mode 100644 draggable-blend-generator/README.markdown create mode 100644 draggable-blend-generator/dist/index.html create mode 100644 draggable-blend-generator/dist/script.js create mode 100644 draggable-blend-generator/dist/style.css create mode 100644 draggable-blend-generator/license.txt create mode 100644 draggable-blend-generator/src/index.html create mode 100644 draggable-blend-generator/src/script.js create mode 100644 draggable-blend-generator/src/style.scss create mode 100644 draggable-plugin-hello-kitty/README.markdown create mode 100644 draggable-plugin-hello-kitty/dist/index.html create mode 100644 draggable-plugin-hello-kitty/dist/script.js create mode 100644 draggable-plugin-hello-kitty/dist/style.css create mode 100644 draggable-plugin-hello-kitty/license.txt create mode 100644 draggable-plugin-hello-kitty/src/index.html create mode 100644 draggable-plugin-hello-kitty/src/script.babel create mode 100644 draggable-plugin-hello-kitty/src/style.scss create mode 100644 dragon/README.markdown create mode 100644 dragon/dist/index.html create mode 100644 dragon/dist/script.js create mode 100644 dragon/dist/style.css create mode 100644 dragon/license.txt create mode 100644 dragon/src/index.html create mode 100644 dragon/src/script.js create mode 100644 dragon/src/style.css create mode 100644 dreaming-of-jupiterthree-js/README.markdown create mode 100644 dreaming-of-jupiterthree-js/dist/index.html create mode 100644 dreaming-of-jupiterthree-js/dist/script.js create mode 100644 dreaming-of-jupiterthree-js/dist/style.css create mode 100644 dreaming-of-jupiterthree-js/license.txt create mode 100644 dreaming-of-jupiterthree-js/src/index.html create mode 100644 dreaming-of-jupiterthree-js/src/script.js create mode 100644 dreaming-of-jupiterthree-js/src/style.css create mode 100644 drum-sequencer-w-sample-pad/README.markdown create mode 100644 drum-sequencer-w-sample-pad/dist/index.html create mode 100644 drum-sequencer-w-sample-pad/dist/script.js create mode 100644 drum-sequencer-w-sample-pad/dist/style.css create mode 100644 drum-sequencer-w-sample-pad/license.txt create mode 100644 drum-sequencer-w-sample-pad/src/index.html create mode 100644 drum-sequencer-w-sample-pad/src/script.js create mode 100644 drum-sequencer-w-sample-pad/src/style.css create mode 100644 dualitypure-css/README.markdown create mode 100644 dualitypure-css/dist/index.html create mode 100644 dualitypure-css/dist/style.css create mode 100644 dualitypure-css/license.txt create mode 100644 dualitypure-css/src/index.pug create mode 100644 dualitypure-css/src/style.styl create mode 100644 duo/README.markdown create mode 100644 duo/dist/index.html create mode 100644 duo/dist/script.js create mode 100644 duo/dist/style.css create mode 100644 duo/license.txt create mode 100644 duo/src/index.html create mode 100644 duo/src/script.js create mode 100644 duo/src/style.css create mode 100644 easings-are-rad/README.markdown create mode 100644 easings-are-rad/dist/index.html create mode 100644 easings-are-rad/dist/style.css create mode 100644 easings-are-rad/license.txt create mode 100644 easings-are-rad/src/index.html create mode 100644 easings-are-rad/src/style.css create mode 100644 editorial-design-to-css-grid-summary/README.markdown create mode 100644 editorial-design-to-css-grid-summary/dist/index.html create mode 100644 editorial-design-to-css-grid-summary/dist/style.css create mode 100644 editorial-design-to-css-grid-summary/license.txt create mode 100644 editorial-design-to-css-grid-summary/src/index.html create mode 100644 editorial-design-to-css-grid-summary/src/style.css create mode 100644 elk/README.markdown create mode 100644 elk/dist/index.html create mode 100644 elk/dist/script.js create mode 100644 elk/dist/style.css create mode 100644 elk/license.txt create mode 100644 elk/src/index.html create mode 100644 elk/src/script.js create mode 100644 elk/src/style.css create mode 100644 emoji_cover/README.markdown create mode 100644 emoji_cover/dist/index.html create mode 100644 emoji_cover/dist/script.js create mode 100644 emoji_cover/dist/style.css create mode 100644 emoji_cover/license.txt create mode 100644 emoji_cover/src/index.html create mode 100644 emoji_cover/src/script.js create mode 100644 emoji_cover/src/style.css create mode 100644 emojis-as-mask-images/README.markdown create mode 100644 emojis-as-mask-images/dist/index.html create mode 100644 emojis-as-mask-images/dist/style.css create mode 100644 emojis-as-mask-images/license.txt create mode 100644 emojis-as-mask-images/src/index.html create mode 100644 emojis-as-mask-images/src/style.css create mode 100644 euclidean-algorithm-visualizer/README.markdown create mode 100644 euclidean-algorithm-visualizer/dist/index.html create mode 100644 euclidean-algorithm-visualizer/dist/script.js create mode 100644 euclidean-algorithm-visualizer/license.txt create mode 100644 euclidean-algorithm-visualizer/src/index.html create mode 100644 euclidean-algorithm-visualizer/src/script.js create mode 100644 expanding-flex-cards-2019/README.markdown create mode 100644 expanding-flex-cards-2019/dist/a8e37caf2a04602ea5815e5ac.css create mode 100644 expanding-flex-cards-2019/dist/a8e37caf2a04602ea5815e5ac.js create mode 100644 expanding-flex-cards-2019/dist/index.html create mode 100644 expanding-flex-cards-2019/dist/script.js create mode 100644 expanding-flex-cards-2019/dist/style.css create mode 100644 expanding-flex-cards-2019/license.txt create mode 100644 expanding-flex-cards-2019/src/a8e37caf2a04602ea5815e5ac.css create mode 100644 expanding-flex-cards-2019/src/a8e37caf2a04602ea5815e5ac.js create mode 100644 expanding-flex-cards-2019/src/index.html create mode 100644 expanding-flex-cards-2019/src/script.js create mode 100644 expanding-flex-cards-2019/src/style.scss create mode 100644 expanding-flex-cards-2021/README.markdown create mode 100644 expanding-flex-cards-2021/dist/a8e37caf2a04602ea5815e5ac.css create mode 100644 expanding-flex-cards-2021/dist/index.html create mode 100644 expanding-flex-cards-2021/dist/script.js create mode 100644 expanding-flex-cards-2021/dist/style.css create mode 100644 expanding-flex-cards-2021/license.txt create mode 100644 expanding-flex-cards-2021/src/a8e37caf2a04602ea5815e5ac.css create mode 100644 expanding-flex-cards-2021/src/index.html create mode 100644 expanding-flex-cards-2021/src/script.js create mode 100644 expanding-flex-cards-2021/src/style.scss create mode 100644 explode-a-node-3d-box-model/README.markdown create mode 100644 explode-a-node-3d-box-model/dist/index.html create mode 100644 explode-a-node-3d-box-model/dist/style.css create mode 100644 explode-a-node-3d-box-model/license.txt create mode 100644 explode-a-node-3d-box-model/src/index.html create mode 100644 explode-a-node-3d-box-model/src/style.css create mode 100644 faction-toggle-star-wars-ep-iv-vi/README.markdown create mode 100644 faction-toggle-star-wars-ep-iv-vi/dist/index.html create mode 100644 faction-toggle-star-wars-ep-iv-vi/dist/style.css create mode 100644 faction-toggle-star-wars-ep-iv-vi/license.txt create mode 100644 faction-toggle-star-wars-ep-iv-vi/src/index.html create mode 100644 faction-toggle-star-wars-ep-iv-vi/src/style.css create mode 100644 fiesta/README.markdown create mode 100644 fiesta/dist/index.html create mode 100644 fiesta/dist/script.js create mode 100644 fiesta/dist/style.css create mode 100644 fiesta/license.txt create mode 100644 fiesta/src/index.html create mode 100644 fiesta/src/script.babel create mode 100644 fiesta/src/style.css create mode 100644 file-manager-app-with-accessible-dark-light-mode-switch/README.markdown create mode 100644 file-manager-app-with-accessible-dark-light-mode-switch/dist/index.html create mode 100644 file-manager-app-with-accessible-dark-light-mode-switch/dist/script.js create mode 100644 file-manager-app-with-accessible-dark-light-mode-switch/dist/style.css create mode 100644 file-manager-app-with-accessible-dark-light-mode-switch/license.txt create mode 100644 file-manager-app-with-accessible-dark-light-mode-switch/src/index.pug create mode 100644 file-manager-app-with-accessible-dark-light-mode-switch/src/script.babel create mode 100644 file-manager-app-with-accessible-dark-light-mode-switch/src/style.scss create mode 100644 firefly-flow/README.markdown create mode 100644 firefly-flow/dist/index.html create mode 100644 firefly-flow/dist/script.js create mode 100644 firefly-flow/dist/style.css create mode 100644 firefly-flow/license.txt create mode 100644 firefly-flow/src/index.html create mode 100644 firefly-flow/src/script.babel create mode 100644 firefly-flow/src/style.css create mode 100644 fishes/README.markdown create mode 100644 fishes/dist/index.html create mode 100644 fishes/dist/style.css create mode 100644 fishes/license.txt create mode 100644 fishes/src/index.html create mode 100644 fishes/src/style.css create mode 100644 fishing-game/README.markdown create mode 100644 fishing-game/dist/index.html create mode 100644 fishing-game/dist/script.js create mode 100644 fishing-game/dist/style.css create mode 100644 fishing-game/license.txt create mode 100644 fishing-game/src/index.html create mode 100644 fishing-game/src/script.babel create mode 100644 fishing-game/src/style.css create mode 100644 flame-animation/README.markdown create mode 100644 flame-animation/dist/index.html create mode 100644 flame-animation/dist/style.css create mode 100644 flame-animation/license.txt create mode 100644 flame-animation/src/index.html create mode 100644 flame-animation/src/style.css create mode 100644 flexbox-and-white-space-nowrap-issue/LICENSE.txt create mode 100644 flexbox-and-white-space-nowrap-issue/README.md create mode 100644 flexbox-and-white-space-nowrap-issue/dist/index.html create mode 100644 flexbox-and-white-space-nowrap-issue/dist/style.css create mode 100644 flexbox-and-white-space-nowrap-issue/src/index.html create mode 100644 flexbox-and-white-space-nowrap-issue/src/style.sass create mode 100644 flexbox-playground/README.markdown create mode 100644 flexbox-playground/dist/index.html create mode 100644 flexbox-playground/dist/script.js create mode 100644 flexbox-playground/dist/style.css create mode 100644 flexbox-playground/license.txt create mode 100644 flexbox-playground/src/index.html create mode 100644 flexbox-playground/src/script.js create mode 100644 flexbox-playground/src/style.css create mode 100644 flipboxes/README.markdown create mode 100644 flipboxes/dist/index.html create mode 100644 flipboxes/dist/style.css create mode 100644 flipboxes/license.txt create mode 100644 flipboxes/src/index.html create mode 100644 flipboxes/src/style.scss create mode 100644 floating-island-w-threejs-gsap/README.markdown create mode 100644 floating-island-w-threejs-gsap/dist/index.html create mode 100644 floating-island-w-threejs-gsap/dist/script.js create mode 100644 floating-island-w-threejs-gsap/dist/style.css create mode 100644 floating-island-w-threejs-gsap/license.txt create mode 100644 floating-island-w-threejs-gsap/src/index.html create mode 100644 floating-island-w-threejs-gsap/src/script.babel create mode 100644 floating-island-w-threejs-gsap/src/style.scss create mode 100644 flow/README.markdown create mode 100644 flow/dist/index.html create mode 100644 flow/dist/script.js create mode 100644 flow/dist/style.css create mode 100644 flow/license.txt create mode 100644 flow/src/index.html create mode 100644 flow/src/script.js create mode 100644 flow/src/style.css create mode 100644 flowing-imagehow-to/README.markdown create mode 100644 flowing-imagehow-to/dist/index.html create mode 100644 flowing-imagehow-to/dist/script.js create mode 100644 flowing-imagehow-to/dist/style.css create mode 100644 flowing-imagehow-to/license.txt create mode 100644 flowing-imagehow-to/src/index.html create mode 100644 flowing-imagehow-to/src/script.js create mode 100644 flowing-imagehow-to/src/style.scss create mode 100644 flutter-challengelayout/README.markdown create mode 100644 flutter-challengelayout/dist/index.html create mode 100644 flutter-challengelayout/dist/script.js create mode 100644 flutter-challengelayout/license.txt create mode 100644 flutter-challengelayout/src/index.html create mode 100644 flutter-challengelayout/src/script.js create mode 100644 flying-lanterns-and-a-koi-fish-instancing-datatexture/README.markdown create mode 100644 flying-lanterns-and-a-koi-fish-instancing-datatexture/dist/index.html create mode 100644 flying-lanterns-and-a-koi-fish-instancing-datatexture/dist/script.js create mode 100644 flying-lanterns-and-a-koi-fish-instancing-datatexture/dist/style.css create mode 100644 flying-lanterns-and-a-koi-fish-instancing-datatexture/license.txt create mode 100644 flying-lanterns-and-a-koi-fish-instancing-datatexture/src/index.html create mode 100644 flying-lanterns-and-a-koi-fish-instancing-datatexture/src/script.js create mode 100644 flying-lanterns-and-a-koi-fish-instancing-datatexture/src/style.css create mode 100644 focusss-v2/README.markdown create mode 100644 focusss-v2/dist/index.html create mode 100644 focusss-v2/dist/script.js create mode 100644 focusss-v2/dist/style.css create mode 100644 focusss-v2/license.txt create mode 100644 focusss-v2/src/index.html create mode 100644 focusss-v2/src/script.js create mode 100644 focusss-v2/src/style.css create mode 100644 folder-animation-using-scss-iteration/README.markdown create mode 100644 folder-animation-using-scss-iteration/dist/index.html create mode 100644 folder-animation-using-scss-iteration/dist/script.js create mode 100644 folder-animation-using-scss-iteration/dist/style.css create mode 100644 folder-animation-using-scss-iteration/license.txt create mode 100644 folder-animation-using-scss-iteration/src/index.html create mode 100644 folder-animation-using-scss-iteration/src/script.js create mode 100644 folder-animation-using-scss-iteration/src/style.scss create mode 100644 folding-ticket-detail/README.markdown create mode 100644 folding-ticket-detail/dist/index.html create mode 100644 folding-ticket-detail/dist/script.js create mode 100644 folding-ticket-detail/dist/style.css create mode 100644 folding-ticket-detail/license.txt create mode 100644 folding-ticket-detail/src/index.html create mode 100644 folding-ticket-detail/src/script.babel create mode 100644 folding-ticket-detail/src/style.css create mode 100644 fracture/README.markdown create mode 100644 fracture/dist/index.html create mode 100644 fracture/dist/script.js create mode 100644 fracture/dist/style.css create mode 100644 fracture/license.txt create mode 100644 fracture/src/index.pug create mode 100644 fracture/src/script.js create mode 100644 fracture/src/style.scss create mode 100644 fragment-shaders-ex-7/README.markdown create mode 100644 fragment-shaders-ex-7/dist/index.html create mode 100644 fragment-shaders-ex-7/dist/script.js create mode 100644 fragment-shaders-ex-7/dist/style.css create mode 100644 fragment-shaders-ex-7/license.txt create mode 100644 fragment-shaders-ex-7/src/index.html create mode 100644 fragment-shaders-ex-7/src/script.babel create mode 100644 fragment-shaders-ex-7/src/style.less create mode 100644 fredrikaflowfield-heart/README.markdown create mode 100644 fredrikaflowfield-heart/dist/blgjlm.js create mode 100644 fredrikaflowfield-heart/dist/index.html create mode 100644 fredrikaflowfield-heart/dist/script.js create mode 100644 fredrikaflowfield-heart/dist/style.css create mode 100644 fredrikaflowfield-heart/license.txt create mode 100644 fredrikaflowfield-heart/src/blgjlm.js create mode 100644 fredrikaflowfield-heart/src/index.html create mode 100644 fredrikaflowfield-heart/src/script.babel create mode 100644 fredrikaflowfield-heart/src/style.css create mode 100644 futuristic-card-effect/LICENSE.txt create mode 100644 futuristic-card-effect/README.md create mode 100644 futuristic-card-effect/dist/index.html create mode 100644 futuristic-card-effect/dist/script.js create mode 100644 futuristic-card-effect/dist/style.css create mode 100644 futuristic-card-effect/src/index.html create mode 100644 futuristic-card-effect/src/script.js create mode 100644 futuristic-card-effect/src/style.css create mode 100644 fyodor-v2-angled-pointillism/README.markdown create mode 100644 fyodor-v2-angled-pointillism/dist/index.html create mode 100644 fyodor-v2-angled-pointillism/dist/script.js create mode 100644 fyodor-v2-angled-pointillism/dist/style.css create mode 100644 fyodor-v2-angled-pointillism/license.txt create mode 100644 fyodor-v2-angled-pointillism/src/index.html create mode 100644 fyodor-v2-angled-pointillism/src/script.js create mode 100644 fyodor-v2-angled-pointillism/src/style.scss create mode 100644 gate-of-time-svg-css/README.markdown create mode 100644 gate-of-time-svg-css/dist/index.html create mode 100644 gate-of-time-svg-css/dist/style.css create mode 100644 gate-of-time-svg-css/license.txt create mode 100644 gate-of-time-svg-css/src/index.html create mode 100644 gate-of-time-svg-css/src/style.css create mode 100644 generative-canyons/README.markdown create mode 100644 generative-canyons/dist/index.html create mode 100644 generative-canyons/dist/script.js create mode 100644 generative-canyons/dist/style.css create mode 100644 generative-canyons/license.txt create mode 100644 generative-canyons/src/index.haml create mode 100644 generative-canyons/src/script.js create mode 100644 generative-canyons/src/style.scss create mode 100644 generative-customisable-svg-social-images/README.markdown create mode 100644 generative-customisable-svg-social-images/dist/index.html create mode 100644 generative-customisable-svg-social-images/dist/script.js create mode 100644 generative-customisable-svg-social-images/dist/style.css create mode 100644 generative-customisable-svg-social-images/license.txt create mode 100644 generative-customisable-svg-social-images/src/index.html create mode 100644 generative-customisable-svg-social-images/src/script.js create mode 100644 generative-customisable-svg-social-images/src/style.css create mode 100644 generative-poster-v-css/README.markdown create mode 100644 generative-poster-v-css/dist/index.html create mode 100644 generative-poster-v-css/dist/script.js create mode 100644 generative-poster-v-css/dist/style.css create mode 100644 generative-poster-v-css/license.txt create mode 100644 generative-poster-v-css/src/index.html create mode 100644 generative-poster-v-css/src/script.babel create mode 100644 generative-poster-v-css/src/style.scss create mode 100644 generative-quadtree-based-grid-layouts/README.markdown create mode 100644 generative-quadtree-based-grid-layouts/dist/index.html create mode 100644 generative-quadtree-based-grid-layouts/dist/script.js create mode 100644 generative-quadtree-based-grid-layouts/dist/style.css create mode 100644 generative-quadtree-based-grid-layouts/license.txt create mode 100644 generative-quadtree-based-grid-layouts/src/index.html create mode 100644 generative-quadtree-based-grid-layouts/src/script.js create mode 100644 generative-quadtree-based-grid-layouts/src/style.css create mode 100644 generative-re-arranging-grids-with-gsap-flip/README.markdown create mode 100644 generative-re-arranging-grids-with-gsap-flip/dist/index.html create mode 100644 generative-re-arranging-grids-with-gsap-flip/dist/script.js create mode 100644 generative-re-arranging-grids-with-gsap-flip/dist/style.css create mode 100644 generative-re-arranging-grids-with-gsap-flip/license.txt create mode 100644 generative-re-arranging-grids-with-gsap-flip/src/index.html create mode 100644 generative-re-arranging-grids-with-gsap-flip/src/script.js create mode 100644 generative-re-arranging-grids-with-gsap-flip/src/style.css create mode 100644 generative-sketch-w-css-variables-repeating-linear-gradient-sass-random-for-cpc-generative-and-codepenchallenge/README.markdown create mode 100644 generative-sketch-w-css-variables-repeating-linear-gradient-sass-random-for-cpc-generative-and-codepenchallenge/dist/index.html create mode 100644 generative-sketch-w-css-variables-repeating-linear-gradient-sass-random-for-cpc-generative-and-codepenchallenge/dist/script.js create mode 100644 generative-sketch-w-css-variables-repeating-linear-gradient-sass-random-for-cpc-generative-and-codepenchallenge/dist/style.css create mode 100644 generative-sketch-w-css-variables-repeating-linear-gradient-sass-random-for-cpc-generative-and-codepenchallenge/license.txt create mode 100644 generative-sketch-w-css-variables-repeating-linear-gradient-sass-random-for-cpc-generative-and-codepenchallenge/src/index.haml create mode 100644 generative-sketch-w-css-variables-repeating-linear-gradient-sass-random-for-cpc-generative-and-codepenchallenge/src/script.babel create mode 100644 generative-sketch-w-css-variables-repeating-linear-gradient-sass-random-for-cpc-generative-and-codepenchallenge/src/style.sass create mode 100644 generative-voronoi-splodges-pixi/README.markdown create mode 100644 generative-voronoi-splodges-pixi/dist/index.html create mode 100644 generative-voronoi-splodges-pixi/dist/script.js create mode 100644 generative-voronoi-splodges-pixi/dist/style.css create mode 100644 generative-voronoi-splodges-pixi/license.txt create mode 100644 generative-voronoi-splodges-pixi/src/index.html create mode 100644 generative-voronoi-splodges-pixi/src/script.babel create mode 100644 generative-voronoi-splodges-pixi/src/style.css create mode 100644 genuary-2022-day-8/README.markdown create mode 100644 genuary-2022-day-8/dist/index.html create mode 100644 genuary-2022-day-8/dist/script.js create mode 100644 genuary-2022-day-8/dist/style.css create mode 100644 genuary-2022-day-8/license.txt create mode 100644 genuary-2022-day-8/src/index.html create mode 100644 genuary-2022-day-8/src/script.babel create mode 100644 genuary-2022-day-8/src/style.less create mode 100644 genuary-25make-a-grid-of-permutations/README.markdown create mode 100644 genuary-25make-a-grid-of-permutations/dist/index.html create mode 100644 genuary-25make-a-grid-of-permutations/dist/script.js create mode 100644 genuary-25make-a-grid-of-permutations/dist/style.css create mode 100644 genuary-25make-a-grid-of-permutations/license.txt create mode 100644 genuary-25make-a-grid-of-permutations/src/index.html create mode 100644 genuary-25make-a-grid-of-permutations/src/script.babel create mode 100644 genuary-25make-a-grid-of-permutations/src/style.css create mode 100644 genuary-6-triangle-subdivision/README.markdown create mode 100644 genuary-6-triangle-subdivision/dist/index.html create mode 100644 genuary-6-triangle-subdivision/dist/script.js create mode 100644 genuary-6-triangle-subdivision/dist/style.css create mode 100644 genuary-6-triangle-subdivision/license.txt create mode 100644 genuary-6-triangle-subdivision/src/index.html create mode 100644 genuary-6-triangle-subdivision/src/script.babel create mode 100644 genuary-6-triangle-subdivision/src/style.css create mode 100644 glassmorphism-creative-cloud-app-redesign/README.markdown create mode 100644 glassmorphism-creative-cloud-app-redesign/dist/index.html create mode 100644 glassmorphism-creative-cloud-app-redesign/dist/script.js create mode 100644 glassmorphism-creative-cloud-app-redesign/dist/style.css create mode 100644 glassmorphism-creative-cloud-app-redesign/license.txt create mode 100644 glassmorphism-creative-cloud-app-redesign/src/index.html create mode 100644 glassmorphism-creative-cloud-app-redesign/src/script.js create mode 100644 glassmorphism-creative-cloud-app-redesign/src/style.scss create mode 100644 glassmorphism/README.markdown create mode 100644 glassmorphism/dist/index.html create mode 100644 glassmorphism/dist/style.css create mode 100644 glassmorphism/license.txt create mode 100644 glassmorphism/src/index.html create mode 100644 glassmorphism/src/style.css create mode 100644 glsl-gpgpu-particles/README.markdown create mode 100644 glsl-gpgpu-particles/dist/index.html create mode 100644 glsl-gpgpu-particles/dist/script.js create mode 100644 glsl-gpgpu-particles/dist/style.css create mode 100644 glsl-gpgpu-particles/license.txt create mode 100644 glsl-gpgpu-particles/src/index.html create mode 100644 glsl-gpgpu-particles/src/script.babel create mode 100644 glsl-gpgpu-particles/src/style.scss create mode 100644 glsl-in-which-alice-feels-sick/README.markdown create mode 100644 glsl-in-which-alice-feels-sick/dist/index.html create mode 100644 glsl-in-which-alice-feels-sick/dist/script.js create mode 100644 glsl-in-which-alice-feels-sick/dist/style.css create mode 100644 glsl-in-which-alice-feels-sick/license.txt create mode 100644 glsl-in-which-alice-feels-sick/src/index.html create mode 100644 glsl-in-which-alice-feels-sick/src/script.babel create mode 100644 glsl-in-which-alice-feels-sick/src/style.scss create mode 100644 glsl-sample027/README.markdown create mode 100644 glsl-sample027/dist/index.html create mode 100644 glsl-sample027/dist/script.js create mode 100644 glsl-sample027/dist/style.css create mode 100644 glsl-sample027/license.txt create mode 100644 glsl-sample027/src/index.html create mode 100644 glsl-sample027/src/script.js create mode 100644 glsl-sample027/src/style.css create mode 100644 gold-tiles/README.markdown create mode 100644 gold-tiles/dist/index.html create mode 100644 gold-tiles/dist/style.css create mode 100644 gold-tiles/license.txt create mode 100644 gold-tiles/src/index.pug create mode 100644 gold-tiles/src/style.scss create mode 100644 good-fast-cheap/README.markdown create mode 100644 good-fast-cheap/dist/https___codepen_io_kunukn.css create mode 100644 good-fast-cheap/dist/index.html create mode 100644 good-fast-cheap/dist/script.js create mode 100644 good-fast-cheap/license.txt create mode 100644 good-fast-cheap/src/https___codepen_io_kunukn.css create mode 100644 good-fast-cheap/src/index.html create mode 100644 good-fast-cheap/src/script.babel create mode 100644 gradient-ball-sketch/README.markdown create mode 100644 gradient-ball-sketch/dist/index.html create mode 100644 gradient-ball-sketch/dist/script.js create mode 100644 gradient-ball-sketch/dist/style.css create mode 100644 gradient-ball-sketch/license.txt create mode 100644 gradient-ball-sketch/src/index.html create mode 100644 gradient-ball-sketch/src/script.js create mode 100644 gradient-ball-sketch/src/style.styl create mode 100644 gradient-borders/LICENSE.txt create mode 100644 gradient-borders/README.md create mode 100644 gradient-borders/dist/index.html create mode 100644 gradient-borders/dist/style.css create mode 100644 gradient-borders/src/index.html create mode 100644 gradient-borders/src/style.less create mode 100644 gradient-shadows-oc-argyleink/README.markdown create mode 100644 gradient-shadows-oc-argyleink/dist/index.html create mode 100644 gradient-shadows-oc-argyleink/dist/style.css create mode 100644 gradient-shadows-oc-argyleink/license.txt create mode 100644 gradient-shadows-oc-argyleink/src/index.html create mode 100644 gradient-shadows-oc-argyleink/src/style.css create mode 100644 grainy-gradient-two-colors/README.markdown create mode 100644 grainy-gradient-two-colors/dist/index.html create mode 100644 grainy-gradient-two-colors/dist/style.css create mode 100644 grainy-gradient-two-colors/license.txt create mode 100644 grainy-gradient-two-colors/src/index.html create mode 100644 grainy-gradient-two-colors/src/style.css create mode 100644 granny-square-wallpapers-click-to-regenerate/README.markdown create mode 100644 granny-square-wallpapers-click-to-regenerate/dist/index.html create mode 100644 granny-square-wallpapers-click-to-regenerate/dist/script.js create mode 100644 granny-square-wallpapers-click-to-regenerate/dist/style.css create mode 100644 granny-square-wallpapers-click-to-regenerate/license.txt create mode 100644 granny-square-wallpapers-click-to-regenerate/src/index.html create mode 100644 granny-square-wallpapers-click-to-regenerate/src/script.js create mode 100644 granny-square-wallpapers-click-to-regenerate/src/style.css create mode 100644 grayscale-bytestiny-code-monochrome-composition-study/README.markdown create mode 100644 grayscale-bytestiny-code-monochrome-composition-study/dist/index.html create mode 100644 grayscale-bytestiny-code-monochrome-composition-study/dist/script.js create mode 100644 grayscale-bytestiny-code-monochrome-composition-study/license.txt create mode 100644 grayscale-bytestiny-code-monochrome-composition-study/src/index.html create mode 100644 grayscale-bytestiny-code-monochrome-composition-study/src/script.js create mode 100644 grid-based-blog-index-page-layout/README.markdown create mode 100644 grid-based-blog-index-page-layout/dist/index.html create mode 100644 grid-based-blog-index-page-layout/dist/style.css create mode 100644 grid-based-blog-index-page-layout/license.txt create mode 100644 grid-based-blog-index-page-layout/src/index.pug create mode 100644 grid-based-blog-index-page-layout/src/style.scss create mode 100644 grid-collage-layout/LICENSE.txt create mode 100644 grid-collage-layout/README.md create mode 100644 grid-collage-layout/dist/index.html create mode 100644 grid-collage-layout/dist/style.css create mode 100644 grid-collage-layout/src/index.html create mode 100644 grid-collage-layout/src/style.css create mode 100644 grid-icosahedron-refraction/README.markdown create mode 100644 grid-icosahedron-refraction/dist/index.html create mode 100644 grid-icosahedron-refraction/dist/script.js create mode 100644 grid-icosahedron-refraction/dist/style.css create mode 100644 grid-icosahedron-refraction/license.txt create mode 100644 grid-icosahedron-refraction/src/index.html create mode 100644 grid-icosahedron-refraction/src/script.ts create mode 100644 grid-icosahedron-refraction/src/style.scss create mode 100644 grid-items-share-background/README.markdown create mode 100644 grid-items-share-background/dist/index.html create mode 100644 grid-items-share-background/dist/script.js create mode 100644 grid-items-share-background/dist/style.css create mode 100644 grid-items-share-background/license.txt create mode 100644 grid-items-share-background/src/index.html create mode 100644 grid-items-share-background/src/script.js create mode 100644 grid-items-share-background/src/style.scss create mode 100644 growing-lines-hex/README.markdown create mode 100644 growing-lines-hex/dist/index.html create mode 100644 growing-lines-hex/dist/script.js create mode 100644 growing-lines-hex/dist/style.css create mode 100644 growing-lines-hex/license.txt create mode 100644 growing-lines-hex/src/index.html create mode 100644 growing-lines-hex/src/script.js create mode 100644 growing-lines-hex/src/style.css create mode 100644 gsap-believecollage-animation/README.markdown create mode 100644 gsap-believecollage-animation/dist/index.html create mode 100644 gsap-believecollage-animation/dist/script.js create mode 100644 gsap-believecollage-animation/dist/style.css create mode 100644 gsap-believecollage-animation/license.txt create mode 100644 gsap-believecollage-animation/src/index.html create mode 100644 gsap-believecollage-animation/src/script.js create mode 100644 gsap-believecollage-animation/src/style.scss create mode 100644 habitable-planet-generator-with-zdog/README.markdown create mode 100644 habitable-planet-generator-with-zdog/dist/index.html create mode 100644 habitable-planet-generator-with-zdog/dist/script.js create mode 100644 habitable-planet-generator-with-zdog/dist/style.css create mode 100644 habitable-planet-generator-with-zdog/license.txt create mode 100644 habitable-planet-generator-with-zdog/src/index.html create mode 100644 habitable-planet-generator-with-zdog/src/script.js create mode 100644 habitable-planet-generator-with-zdog/src/style.css create mode 100644 halftone-circles-try-scrollinganydayshaders-05/README.markdown create mode 100644 halftone-circles-try-scrollinganydayshaders-05/dist/index.html create mode 100644 halftone-circles-try-scrollinganydayshaders-05/dist/script.js create mode 100644 halftone-circles-try-scrollinganydayshaders-05/dist/style.css create mode 100644 halftone-circles-try-scrollinganydayshaders-05/license.txt create mode 100644 halftone-circles-try-scrollinganydayshaders-05/src/index.html create mode 100644 halftone-circles-try-scrollinganydayshaders-05/src/script.js create mode 100644 halftone-circles-try-scrollinganydayshaders-05/src/style.css create mode 100644 halftone-video-effect/README.markdown create mode 100644 halftone-video-effect/dist/index.html create mode 100644 halftone-video-effect/dist/script.js create mode 100644 halftone-video-effect/dist/style.css create mode 100644 halftone-video-effect/license.txt create mode 100644 halftone-video-effect/src/index.html create mode 100644 halftone-video-effect/src/script.js create mode 100644 halftone-video-effect/src/style.scss create mode 100644 hambuuuuuuuurger/README.markdown create mode 100644 hambuuuuuuuurger/dist/index.html create mode 100644 hambuuuuuuuurger/dist/style.css create mode 100644 hambuuuuuuuurger/license.txt create mode 100644 hambuuuuuuuurger/src/index.haml create mode 100644 hambuuuuuuuurger/src/style.css create mode 100644 happy-new-year/README.markdown create mode 100644 happy-new-year/dist/index.html create mode 100644 happy-new-year/dist/script.js create mode 100644 happy-new-year/dist/style.css create mode 100644 happy-new-year/license.txt create mode 100644 happy-new-year/src/index.html create mode 100644 happy-new-year/src/script.js create mode 100644 happy-new-year/src/style.scss create mode 100644 headful-of-fire/README.markdown create mode 100644 headful-of-fire/dist/index.html create mode 100644 headful-of-fire/dist/script.js create mode 100644 headful-of-fire/dist/style.css create mode 100644 headful-of-fire/license.txt create mode 100644 headful-of-fire/src/index.html create mode 100644 headful-of-fire/src/script.js create mode 100644 headful-of-fire/src/style.css create mode 100644 heart-button/README.markdown create mode 100644 heart-button/dist/index.html create mode 100644 heart-button/dist/script.js create mode 100644 heart-button/dist/style.css create mode 100644 heart-button/license.txt create mode 100644 heart-button/src/index.html create mode 100644 heart-button/src/script.js create mode 100644 heart-button/src/style.scss create mode 100644 hearthstone-style-card-hover/README.markdown create mode 100644 hearthstone-style-card-hover/dist/index.html create mode 100644 hearthstone-style-card-hover/dist/style.css create mode 100644 hearthstone-style-card-hover/license.txt create mode 100644 hearthstone-style-card-hover/src/index.haml create mode 100644 hearthstone-style-card-hover/src/style.scss create mode 100644 hex-arcs-in-relief/README.markdown create mode 100644 hex-arcs-in-relief/dist/index.html create mode 100644 hex-arcs-in-relief/dist/script.js create mode 100644 hex-arcs-in-relief/dist/style.css create mode 100644 hex-arcs-in-relief/license.txt create mode 100644 hex-arcs-in-relief/src/index.html create mode 100644 hex-arcs-in-relief/src/script.js create mode 100644 hex-arcs-in-relief/src/style.css create mode 100644 hex-rgb-auto-color-converter-in-vue/README.markdown create mode 100644 hex-rgb-auto-color-converter-in-vue/dist/index.html create mode 100644 hex-rgb-auto-color-converter-in-vue/dist/script.js create mode 100644 hex-rgb-auto-color-converter-in-vue/dist/style.css create mode 100644 hex-rgb-auto-color-converter-in-vue/license.txt create mode 100644 hex-rgb-auto-color-converter-in-vue/src/index.html create mode 100644 hex-rgb-auto-color-converter-in-vue/src/script.js create mode 100644 hex-rgb-auto-color-converter-in-vue/src/style.scss create mode 100644 hexagon-tiling-7-ways/README.markdown create mode 100644 hexagon-tiling-7-ways/dist/index.html create mode 100644 hexagon-tiling-7-ways/dist/script.js create mode 100644 hexagon-tiling-7-ways/dist/style.css create mode 100644 hexagon-tiling-7-ways/license.txt create mode 100644 hexagon-tiling-7-ways/src/index.pug create mode 100644 hexagon-tiling-7-ways/src/script.js create mode 100644 hexagon-tiling-7-ways/src/style.scss create mode 100644 holiday-cssweater-generator/README.markdown create mode 100644 holiday-cssweater-generator/dist/index.html create mode 100644 holiday-cssweater-generator/dist/script.js create mode 100644 holiday-cssweater-generator/dist/style.css create mode 100644 holiday-cssweater-generator/license.txt create mode 100644 holiday-cssweater-generator/src/index.haml create mode 100644 holiday-cssweater-generator/src/script.js create mode 100644 holiday-cssweater-generator/src/style.scss create mode 100644 hover-animated-portfolio/README.markdown create mode 100644 hover-animated-portfolio/dist/index.html create mode 100644 hover-animated-portfolio/dist/script.js create mode 100644 hover-animated-portfolio/dist/style.css create mode 100644 hover-animated-portfolio/license.txt create mode 100644 hover-animated-portfolio/src/index.html create mode 100644 hover-animated-portfolio/src/script.js create mode 100644 hover-animated-portfolio/src/style.css create mode 100644 hover-effect-borders-to-underlines/README.markdown create mode 100644 hover-effect-borders-to-underlines/dist/index.html create mode 100644 hover-effect-borders-to-underlines/dist/style.css create mode 100644 hover-effect-borders-to-underlines/license.txt create mode 100644 hover-effect-borders-to-underlines/src/index.html create mode 100644 hover-effect-borders-to-underlines/src/style.scss create mode 100644 hsl-monochromatic-palette-generator/README.markdown create mode 100644 hsl-monochromatic-palette-generator/dist/index.html create mode 100644 hsl-monochromatic-palette-generator/dist/script.js create mode 100644 hsl-monochromatic-palette-generator/dist/style.css create mode 100644 hsl-monochromatic-palette-generator/license.txt create mode 100644 hsl-monochromatic-palette-generator/src/index.pug create mode 100644 hsl-monochromatic-palette-generator/src/script.babel create mode 100644 hsl-monochromatic-palette-generator/src/style.styl create mode 100644 hsl-slider-w-react-css-vars/README.markdown create mode 100644 hsl-slider-w-react-css-vars/dist/index.html create mode 100644 hsl-slider-w-react-css-vars/dist/script.js create mode 100644 hsl-slider-w-react-css-vars/dist/style.css create mode 100644 hsl-slider-w-react-css-vars/license.txt create mode 100644 hsl-slider-w-react-css-vars/src/index.pug create mode 100644 hsl-slider-w-react-css-vars/src/script.babel create mode 100644 hsl-slider-w-react-css-vars/src/style.styl create mode 100644 hue-rotated-emoji/README.markdown create mode 100644 hue-rotated-emoji/dist/index.html create mode 100644 hue-rotated-emoji/dist/style.css create mode 100644 hue-rotated-emoji/license.txt create mode 100644 hue-rotated-emoji/src/index.html create mode 100644 hue-rotated-emoji/src/style.css create mode 100644 humans-since-1982/README.markdown create mode 100644 humans-since-1982/dist/index.html create mode 100644 humans-since-1982/dist/script.js create mode 100644 humans-since-1982/dist/style.css create mode 100644 humans-since-1982/license.txt create mode 100644 humans-since-1982/src/index.html create mode 100644 humans-since-1982/src/script.js create mode 100644 humans-since-1982/src/style.css create mode 100644 iceberg-charts/README.markdown create mode 100644 iceberg-charts/dist/index.html create mode 100644 iceberg-charts/dist/script.js create mode 100644 iceberg-charts/dist/style.css create mode 100644 iceberg-charts/dist/zbvakw.js create mode 100644 iceberg-charts/license.txt create mode 100644 iceberg-charts/src/index.html create mode 100644 iceberg-charts/src/script.js create mode 100644 iceberg-charts/src/style.less create mode 100644 iceberg-charts/src/zbvakw.js create mode 100644 icosahedron-pure-css/README.markdown create mode 100644 icosahedron-pure-css/dist/index.html create mode 100644 icosahedron-pure-css/dist/script.js create mode 100644 icosahedron-pure-css/dist/style.css create mode 100644 icosahedron-pure-css/license.txt create mode 100644 icosahedron-pure-css/src/index.html create mode 100644 icosahedron-pure-css/src/script.js create mode 100644 icosahedron-pure-css/src/style.scss create mode 100644 illustration-online-store/README.markdown create mode 100644 illustration-online-store/dist/index.html create mode 100644 illustration-online-store/dist/style.css create mode 100644 illustration-online-store/license.txt create mode 100644 illustration-online-store/src/index.html create mode 100644 illustration-online-store/src/style.scss create mode 100644 image-captions-color-hints/README.markdown create mode 100644 image-captions-color-hints/dist/index.html create mode 100644 image-captions-color-hints/dist/script.js create mode 100644 image-captions-color-hints/dist/style.css create mode 100644 image-captions-color-hints/license.txt create mode 100644 image-captions-color-hints/src/index.html create mode 100644 image-captions-color-hints/src/script.babel create mode 100644 image-captions-color-hints/src/style.css create mode 100644 image-to-lcd/README.markdown create mode 100644 image-to-lcd/dist/index.html create mode 100644 image-to-lcd/dist/script.js create mode 100644 image-to-lcd/dist/style.css create mode 100644 image-to-lcd/license.txt create mode 100644 image-to-lcd/src/index.html create mode 100644 image-to-lcd/src/script.js create mode 100644 image-to-lcd/src/style.css create mode 100644 impossible-checkbox-v2/README.markdown create mode 100644 impossible-checkbox-v2/dist/index.html create mode 100644 impossible-checkbox-v2/dist/script.js create mode 100644 impossible-checkbox-v2/dist/style.css create mode 100644 impossible-checkbox-v2/license.txt create mode 100644 impossible-checkbox-v2/src/index.pug create mode 100644 impossible-checkbox-v2/src/script.babel create mode 100644 impossible-checkbox-v2/src/style.styl create mode 100644 impressionists-blobs/LICENSE.txt create mode 100644 impressionists-blobs/README.md create mode 100644 impressionists-blobs/dist/index.html create mode 100644 impressionists-blobs/dist/script.js create mode 100644 impressionists-blobs/dist/style.css create mode 100644 impressionists-blobs/src/index.html create mode 100644 impressionists-blobs/src/script.js create mode 100644 impressionists-blobs/src/style.css create mode 100644 infinite-primordial-creatures/README.markdown create mode 100644 infinite-primordial-creatures/dist/index.html create mode 100644 infinite-primordial-creatures/dist/script.js create mode 100644 infinite-primordial-creatures/dist/style.css create mode 100644 infinite-primordial-creatures/license.txt create mode 100644 infinite-primordial-creatures/src/index.html create mode 100644 infinite-primordial-creatures/src/script.babel create mode 100644 infinite-primordial-creatures/src/style.css create mode 100644 inktober-01grid/README.markdown create mode 100644 inktober-01grid/dist/index.html create mode 100644 inktober-01grid/dist/style.css create mode 100644 inktober-01grid/license.txt create mode 100644 inktober-01grid/src/index.html create mode 100644 inktober-01grid/src/style.css create mode 100644 inline-property-switching-with-custom-props/README.markdown create mode 100644 inline-property-switching-with-custom-props/dist/index.html create mode 100644 inline-property-switching-with-custom-props/dist/style.css create mode 100644 inline-property-switching-with-custom-props/license.txt create mode 100644 inline-property-switching-with-custom-props/src/index.html create mode 100644 inline-property-switching-with-custom-props/src/style.css create mode 100644 inner-listener/README.markdown create mode 100644 inner-listener/dist/index.html create mode 100644 inner-listener/dist/style.css create mode 100644 inner-listener/license.txt create mode 100644 inner-listener/src/index.html create mode 100644 inner-listener/src/style.css create mode 100644 input-not-placeholder-shown/README.markdown create mode 100644 input-not-placeholder-shown/dist/index.html create mode 100644 input-not-placeholder-shown/dist/style.css create mode 100644 input-not-placeholder-shown/license.txt create mode 100644 input-not-placeholder-shown/src/index.html create mode 100644 input-not-placeholder-shown/src/style.styl create mode 100644 instancedmesh-hierarchy-matrixworld/README.markdown create mode 100644 instancedmesh-hierarchy-matrixworld/dist/index.html create mode 100644 instancedmesh-hierarchy-matrixworld/dist/script.js create mode 100644 instancedmesh-hierarchy-matrixworld/dist/style.css create mode 100644 instancedmesh-hierarchy-matrixworld/license.txt create mode 100644 instancedmesh-hierarchy-matrixworld/src/index.html create mode 100644 instancedmesh-hierarchy-matrixworld/src/script.js create mode 100644 instancedmesh-hierarchy-matrixworld/src/style.css create mode 100644 interaction-of-color-plate-xxiv-1-the-goethe-triangle/README.markdown create mode 100644 interaction-of-color-plate-xxiv-1-the-goethe-triangle/dist/index.html create mode 100644 interaction-of-color-plate-xxiv-1-the-goethe-triangle/dist/style.css create mode 100644 interaction-of-color-plate-xxiv-1-the-goethe-triangle/license.txt create mode 100644 interaction-of-color-plate-xxiv-1-the-goethe-triangle/src/index.html create mode 100644 interaction-of-color-plate-xxiv-1-the-goethe-triangle/src/style.scss create mode 100644 interactive-kitten/README.markdown create mode 100644 interactive-kitten/dist/index.html create mode 100644 interactive-kitten/dist/script.js create mode 100644 interactive-kitten/dist/style.css create mode 100644 interactive-kitten/license.txt create mode 100644 interactive-kitten/src/index.html create mode 100644 interactive-kitten/src/script.js create mode 100644 interactive-kitten/src/style.css create mode 100644 interactive-particles-text-create-with-three-js/README.markdown create mode 100644 interactive-particles-text-create-with-three-js/dist/index.html create mode 100644 interactive-particles-text-create-with-three-js/dist/script.js create mode 100644 interactive-particles-text-create-with-three-js/dist/style.css create mode 100644 interactive-particles-text-create-with-three-js/license.txt create mode 100644 interactive-particles-text-create-with-three-js/src/index.html create mode 100644 interactive-particles-text-create-with-three-js/src/script.js create mode 100644 interactive-particles-text-create-with-three-js/src/style.css create mode 100644 interactive-skate-loading/README.markdown create mode 100644 interactive-skate-loading/dist/index.html create mode 100644 interactive-skate-loading/dist/script.js create mode 100644 interactive-skate-loading/dist/style.css create mode 100644 interactive-skate-loading/license.txt create mode 100644 interactive-skate-loading/src/index.html create mode 100644 interactive-skate-loading/src/script.js create mode 100644 interactive-skate-loading/src/style.scss create mode 100644 interior-design-builder/README.markdown create mode 100644 interior-design-builder/dist/index.html create mode 100644 interior-design-builder/dist/script.js create mode 100644 interior-design-builder/dist/style.css create mode 100644 interior-design-builder/license.txt create mode 100644 interior-design-builder/src/index.pug create mode 100644 interior-design-builder/src/script.js create mode 100644 interior-design-builder/src/style.scss create mode 100644 interruptions/README.markdown create mode 100644 interruptions/dist/index.html create mode 100644 interruptions/dist/script.js create mode 100644 interruptions/dist/style.css create mode 100644 interruptions/license.txt create mode 100644 interruptions/src/index.html create mode 100644 interruptions/src/script.js create mode 100644 interruptions/src/style.css create mode 100644 island-group-541-bytes-petitepatterns/README.markdown create mode 100644 island-group-541-bytes-petitepatterns/dist/index.html create mode 100644 island-group-541-bytes-petitepatterns/dist/script.js create mode 100644 island-group-541-bytes-petitepatterns/dist/style.css create mode 100644 island-group-541-bytes-petitepatterns/license.txt create mode 100644 island-group-541-bytes-petitepatterns/src/index.html create mode 100644 island-group-541-bytes-petitepatterns/src/script.js create mode 100644 island-group-541-bytes-petitepatterns/src/style.css create mode 100644 isometric-color-picker/README.markdown create mode 100644 isometric-color-picker/dist/index.html create mode 100644 isometric-color-picker/dist/style.css create mode 100644 isometric-color-picker/license.txt create mode 100644 isometric-color-picker/src/index.pug create mode 100644 isometric-color-picker/src/style.sass create mode 100644 joker-leaderboard/README.markdown create mode 100644 joker-leaderboard/dist/index.html create mode 100644 joker-leaderboard/dist/script.js create mode 100644 joker-leaderboard/dist/style.css create mode 100644 joker-leaderboard/license.txt create mode 100644 joker-leaderboard/src/index.html create mode 100644 joker-leaderboard/src/script.js create mode 100644 joker-leaderboard/src/style.css create mode 100644 jumping-gooey-navigation/README.markdown create mode 100644 jumping-gooey-navigation/dist/index.html create mode 100644 jumping-gooey-navigation/dist/script.js create mode 100644 jumping-gooey-navigation/dist/style.css create mode 100644 jumping-gooey-navigation/license.txt create mode 100644 jumping-gooey-navigation/src/index.html create mode 100644 jumping-gooey-navigation/src/script.js create mode 100644 jumping-gooey-navigation/src/style.css create mode 100644 keep-on-stackin-3d-css/README.markdown create mode 100644 keep-on-stackin-3d-css/dist/index.html create mode 100644 keep-on-stackin-3d-css/dist/script.js create mode 100644 keep-on-stackin-3d-css/dist/style.css create mode 100644 keep-on-stackin-3d-css/license.txt create mode 100644 keep-on-stackin-3d-css/src/index.pug create mode 100644 keep-on-stackin-3d-css/src/script.babel create mode 100644 keep-on-stackin-3d-css/src/style.styl create mode 100644 keyframes-1-9-3-solar-eclipse-loader/README.markdown create mode 100644 keyframes-1-9-3-solar-eclipse-loader/dist/index.html create mode 100644 keyframes-1-9-3-solar-eclipse-loader/dist/script.js create mode 100644 keyframes-1-9-3-solar-eclipse-loader/dist/style.css create mode 100644 keyframes-1-9-3-solar-eclipse-loader/license.txt create mode 100644 keyframes-1-9-3-solar-eclipse-loader/src/index.html create mode 100644 keyframes-1-9-3-solar-eclipse-loader/src/script.js create mode 100644 keyframes-1-9-3-solar-eclipse-loader/src/style.scss create mode 100644 knob-input-component/README.markdown create mode 100644 knob-input-component/dist/index.html create mode 100644 knob-input-component/dist/script.js create mode 100644 knob-input-component/dist/style.css create mode 100644 knob-input-component/license.txt create mode 100644 knob-input-component/src/index.pug create mode 100644 knob-input-component/src/script.js create mode 100644 knob-input-component/src/style.scss create mode 100644 kurzgesagt-style-earth-3d-zdog/README.markdown create mode 100644 kurzgesagt-style-earth-3d-zdog/dist/index.html create mode 100644 kurzgesagt-style-earth-3d-zdog/dist/script.js create mode 100644 kurzgesagt-style-earth-3d-zdog/dist/style.css create mode 100644 kurzgesagt-style-earth-3d-zdog/license.txt create mode 100644 kurzgesagt-style-earth-3d-zdog/src/index.html create mode 100644 kurzgesagt-style-earth-3d-zdog/src/script.js create mode 100644 kurzgesagt-style-earth-3d-zdog/src/style.scss create mode 100644 lake-reflection-444-bytes-petitepatterns/README.markdown create mode 100644 lake-reflection-444-bytes-petitepatterns/dist/index.html create mode 100644 lake-reflection-444-bytes-petitepatterns/dist/script.js create mode 100644 lake-reflection-444-bytes-petitepatterns/dist/style.css create mode 100644 lake-reflection-444-bytes-petitepatterns/license.txt create mode 100644 lake-reflection-444-bytes-petitepatterns/src/index.html create mode 100644 lake-reflection-444-bytes-petitepatterns/src/script.js create mode 100644 lake-reflection-444-bytes-petitepatterns/src/style.css create mode 100644 latent-cycles/README.markdown create mode 100644 latent-cycles/dist/index.html create mode 100644 latent-cycles/dist/script.js create mode 100644 latent-cycles/dist/style.css create mode 100644 latent-cycles/license.txt create mode 100644 latent-cycles/src/index.html create mode 100644 latent-cycles/src/script.babel create mode 100644 latent-cycles/src/style.css create mode 100644 layout-templates-with-css-grid/README.markdown create mode 100644 layout-templates-with-css-grid/dist/index.html create mode 100644 layout-templates-with-css-grid/dist/style.css create mode 100644 layout-templates-with-css-grid/license.txt create mode 100644 layout-templates-with-css-grid/src/index.html create mode 100644 layout-templates-with-css-grid/src/style.scss create mode 100644 leaving-out-particularities/README.markdown create mode 100644 leaving-out-particularities/dist/index.html create mode 100644 leaving-out-particularities/dist/script.js create mode 100644 leaving-out-particularities/dist/style.css create mode 100644 leaving-out-particularities/license.txt create mode 100644 leaving-out-particularities/src/index.html create mode 100644 leaving-out-particularities/src/script.js create mode 100644 leaving-out-particularities/src/style.css create mode 100644 letter-hop/LICENSE.txt create mode 100644 letter-hop/README.md create mode 100644 letter-hop/dist/index.html create mode 100644 letter-hop/dist/script.js create mode 100644 letter-hop/dist/style.css create mode 100644 letter-hop/src/index.html create mode 100644 letter-hop/src/script.js create mode 100644 letter-hop/src/style.scss create mode 100644 lines-doing-a-little-group-dance/README.markdown create mode 100644 lines-doing-a-little-group-dance/dist/index.html create mode 100644 lines-doing-a-little-group-dance/dist/script.js create mode 100644 lines-doing-a-little-group-dance/dist/style.css create mode 100644 lines-doing-a-little-group-dance/license.txt create mode 100644 lines-doing-a-little-group-dance/src/index.html create mode 100644 lines-doing-a-little-group-dance/src/script.js create mode 100644 lines-doing-a-little-group-dance/src/style.css create mode 100644 link-hover-animation/README.markdown create mode 100644 link-hover-animation/dist/index.html create mode 100644 link-hover-animation/dist/style.css create mode 100644 link-hover-animation/license.txt create mode 100644 link-hover-animation/src/index.html create mode 100644 link-hover-animation/src/style.scss create mode 100644 liquid-grid/README.markdown create mode 100644 liquid-grid/dist/index.html create mode 100644 liquid-grid/dist/script.js create mode 100644 liquid-grid/dist/style.css create mode 100644 liquid-grid/license.txt create mode 100644 liquid-grid/src/index.html create mode 100644 liquid-grid/src/script.js create mode 100644 liquid-grid/src/style.css create mode 100644 liquid-maskingscroll/README.markdown create mode 100644 liquid-maskingscroll/dist/index.html create mode 100644 liquid-maskingscroll/dist/script.js create mode 100644 liquid-maskingscroll/dist/style.css create mode 100644 liquid-maskingscroll/license.txt create mode 100644 liquid-maskingscroll/src/index.html create mode 100644 liquid-maskingscroll/src/script.js create mode 100644 liquid-maskingscroll/src/style.css create mode 100644 literally-lit-elements/README.markdown create mode 100644 literally-lit-elements/dist/index.html create mode 100644 literally-lit-elements/dist/script.js create mode 100644 literally-lit-elements/dist/style.css create mode 100644 literally-lit-elements/license.txt create mode 100644 literally-lit-elements/src/index.pug create mode 100644 literally-lit-elements/src/script.js create mode 100644 literally-lit-elements/src/style.styl create mode 100644 live-react-gallery-with-keyboard-control-keyframers-3-24/README.markdown create mode 100644 live-react-gallery-with-keyboard-control-keyframers-3-24/dist/index.html create mode 100644 live-react-gallery-with-keyboard-control-keyframers-3-24/dist/script.js create mode 100644 live-react-gallery-with-keyboard-control-keyframers-3-24/dist/style.css create mode 100644 live-react-gallery-with-keyboard-control-keyframers-3-24/license.txt create mode 100644 live-react-gallery-with-keyboard-control-keyframers-3-24/src/index.html create mode 100644 live-react-gallery-with-keyboard-control-keyframers-3-24/src/script.babel create mode 100644 live-react-gallery-with-keyboard-control-keyframers-3-24/src/style.scss create mode 100644 loader-concept/README.markdown create mode 100644 loader-concept/dist/index.html create mode 100644 loader-concept/dist/script.js create mode 100644 loader-concept/dist/style.css create mode 100644 loader-concept/license.txt create mode 100644 loader-concept/src/index.html create mode 100644 loader-concept/src/script.js create mode 100644 loader-concept/src/style.css create mode 100644 lonely-little-box/README.markdown create mode 100644 lonely-little-box/dist/index.html create mode 100644 lonely-little-box/dist/script.js create mode 100644 lonely-little-box/dist/style.css create mode 100644 lonely-little-box/license.txt create mode 100644 lonely-little-box/src/index.html create mode 100644 lonely-little-box/src/script.js create mode 100644 lonely-little-box/src/style.scss create mode 100644 look-at-concept/README.markdown create mode 100644 look-at-concept/dist/index.html create mode 100644 look-at-concept/dist/script.js create mode 100644 look-at-concept/dist/style.css create mode 100644 look-at-concept/license.txt create mode 100644 look-at-concept/src/index.html create mode 100644 look-at-concept/src/script.babel create mode 100644 look-at-concept/src/style.sass create mode 100644 loosey-goosey-1-0-0/README.markdown create mode 100644 loosey-goosey-1-0-0/dist/index.html create mode 100644 loosey-goosey-1-0-0/dist/script.js create mode 100644 loosey-goosey-1-0-0/dist/style.css create mode 100644 loosey-goosey-1-0-0/license.txt create mode 100644 loosey-goosey-1-0-0/src/index.html create mode 100644 loosey-goosey-1-0-0/src/script.babel create mode 100644 loosey-goosey-1-0-0/src/style.scss create mode 100644 lotsa-notifications/LICENSE.txt create mode 100644 lotsa-notifications/README.md create mode 100644 lotsa-notifications/dist/index.html create mode 100644 lotsa-notifications/dist/script.js create mode 100644 lotsa-notifications/dist/style.css create mode 100644 lotsa-notifications/src/index.html create mode 100644 lotsa-notifications/src/script.js create mode 100644 lotsa-notifications/src/style.css create mode 100644 love-hypnosis/README.markdown create mode 100644 love-hypnosis/dist/index.html create mode 100644 love-hypnosis/dist/script.js create mode 100644 love-hypnosis/dist/style.css create mode 100644 love-hypnosis/license.txt create mode 100644 love-hypnosis/src/index.html create mode 100644 love-hypnosis/src/script.js create mode 100644 love-hypnosis/src/style.css create mode 100644 magic-card/README.markdown create mode 100644 magic-card/dist/index.html create mode 100644 magic-card/dist/style.css create mode 100644 magic-card/license.txt create mode 100644 magic-card/src/index.html create mode 100644 magic-card/src/style.css create mode 100644 make-the-web-less-boring/README.markdown create mode 100644 make-the-web-less-boring/dist/index.html create mode 100644 make-the-web-less-boring/dist/script.js create mode 100644 make-the-web-less-boring/dist/style.css create mode 100644 make-the-web-less-boring/license.txt create mode 100644 make-the-web-less-boring/src/index.html create mode 100644 make-the-web-less-boring/src/script.js create mode 100644 make-the-web-less-boring/src/style.scss create mode 100644 mars-explorer-scrolltrigger-demo/README.markdown create mode 100644 mars-explorer-scrolltrigger-demo/dist/index.html create mode 100644 mars-explorer-scrolltrigger-demo/dist/script.js create mode 100644 mars-explorer-scrolltrigger-demo/dist/style.css create mode 100644 mars-explorer-scrolltrigger-demo/license.txt create mode 100644 mars-explorer-scrolltrigger-demo/src/index.html create mode 100644 mars-explorer-scrolltrigger-demo/src/script.babel create mode 100644 mars-explorer-scrolltrigger-demo/src/style.less create mode 100644 material-dashboard-lite-master/.gitignore create mode 100644 material-dashboard-lite-master/.jscsrc create mode 100644 material-dashboard-lite-master/LICENSE create mode 100644 material-dashboard-lite-master/README.md create mode 100644 material-dashboard-lite-master/bower.json create mode 100644 material-dashboard-lite-master/dist/css/application.css create mode 100644 material-dashboard-lite-master/dist/css/lib/getmdl-select.min.css create mode 100644 material-dashboard-lite-master/dist/css/lib/nv.d3.css create mode 100644 material-dashboard-lite-master/dist/forms.html create mode 100644 material-dashboard-lite-master/dist/images/DB_16ั…16_20200928204120.png create mode 100644 material-dashboard-lite-master/dist/images/Dark_background_1920x1080_20200928204120.png create mode 100644 material-dashboard-lite-master/dist/images/Icon_20191114113633.png create mode 100644 material-dashboard-lite-master/dist/images/Icon_header_20191114113633.png create mode 100644 material-dashboard-lite-master/dist/images/cotoneaster_20191114113633.jpg create mode 100644 material-dashboard-lite-master/dist/images/robot_20201001164800.png create mode 100644 material-dashboard-lite-master/dist/images/skype_20191114113633.svg create mode 100644 material-dashboard-lite-master/dist/images/weather_bck_20201001164800.png create mode 100644 material-dashboard-lite-master/dist/index.html create mode 100644 material-dashboard-lite-master/dist/js/d3.js create mode 100644 material-dashboard-lite-master/dist/js/getmdl-select.min.js create mode 100644 material-dashboard-lite-master/dist/js/material.js create mode 100644 material-dashboard-lite-master/dist/js/nv.d3.js create mode 100644 material-dashboard-lite-master/dist/js/widgets/employer-form/employer-form.js create mode 100644 material-dashboard-lite-master/dist/js/widgets/line-chart/line-chart-nvd3.js create mode 100644 material-dashboard-lite-master/dist/js/widgets/pie-chart/pie-chart-nvd3.js create mode 100644 material-dashboard-lite-master/dist/js/widgets/table/table.js create mode 100644 material-dashboard-lite-master/dist/js/widgets/todo/todo.js create mode 100644 material-dashboard-lite-master/gulpfile.js create mode 100644 material-dashboard-lite-master/package.json create mode 100644 material-dashboard-lite-master/src/application.scss create mode 100644 material-dashboard-lite-master/src/button/button.scss create mode 100644 material-dashboard-lite-master/src/card/card.scss create mode 100644 material-dashboard-lite-master/src/checkbox/checkbox.scss create mode 100644 material-dashboard-lite-master/src/data-table/data-table.scss create mode 100644 material-dashboard-lite-master/src/forms.html create mode 100644 material-dashboard-lite-master/src/helper.scss create mode 100644 material-dashboard-lite-master/src/images/card_20191114113633.jpg create mode 100644 material-dashboard-lite-master/src/images/cloudy_and_snow_20191114113633.svg create mode 100644 material-dashboard-lite-master/src/images/imgo_20191114113633.jpg create mode 100644 material-dashboard-lite-master/src/images/skype_20191114113633.svg create mode 100644 material-dashboard-lite-master/src/images/tick-mask_20191114113633.svg create mode 100644 material-dashboard-lite-master/src/images/tick_20191114113633.svg create mode 100644 material-dashboard-lite-master/src/images/tick_dark_20191114113633.svg create mode 100644 material-dashboard-lite-master/src/images/watch_white_20191114113633.svg create mode 100644 material-dashboard-lite-master/src/index.html create mode 100644 material-dashboard-lite-master/src/label/label.scss create mode 100644 material-dashboard-lite-master/src/layout/layout.scss create mode 100644 material-dashboard-lite-master/src/list/list.scss create mode 100644 material-dashboard-lite-master/src/menu/menu.scss create mode 100644 material-dashboard-lite-master/src/mixins.scss create mode 100644 material-dashboard-lite-master/src/progress/progress.scss create mode 100644 material-dashboard-lite-master/src/textfield/textfield.scss create mode 100644 material-dashboard-lite-master/src/tooltip/tooltip.scss create mode 100644 material-dashboard-lite-master/src/variables.scss create mode 100644 material-dashboard-lite-master/src/widgets/account-dropdown/account-dropdown.scss create mode 100644 material-dashboard-lite-master/src/widgets/chart-legend/chart-legend.scss create mode 100644 material-dashboard-lite-master/src/widgets/cotoneaster/cotoneaster.scss create mode 100644 material-dashboard-lite-master/src/widgets/employer-form/employer-form.js create mode 100644 material-dashboard-lite-master/src/widgets/employer-form/employer-form.scss create mode 100644 material-dashboard-lite-master/src/widgets/form/form.scss create mode 100644 material-dashboard-lite-master/src/widgets/input-group/input-group.scss create mode 100644 material-dashboard-lite-master/src/widgets/line-chart/line-chart-nvd3.js create mode 100644 material-dashboard-lite-master/src/widgets/line-chart/line-chart.scss create mode 100644 material-dashboard-lite-master/src/widgets/link/link.scss create mode 100644 material-dashboard-lite-master/src/widgets/message-notifications/messages-dropdown.scss create mode 100644 material-dashboard-lite-master/src/widgets/notifications-dropdown/notifications-dropdown.scss create mode 100644 material-dashboard-lite-master/src/widgets/pie-chart/pie-chart-nvd3.js create mode 100644 material-dashboard-lite-master/src/widgets/pie-chart/pie-chart.scss create mode 100644 material-dashboard-lite-master/src/widgets/robot/robot.scss create mode 100644 material-dashboard-lite-master/src/widgets/setting-dropdown/settings-dropdown.scss create mode 100644 material-dashboard-lite-master/src/widgets/table/table.js create mode 100644 material-dashboard-lite-master/src/widgets/table/table.scss create mode 100644 material-dashboard-lite-master/src/widgets/todo/todo.js create mode 100644 material-dashboard-lite-master/src/widgets/todo/todo.scss create mode 100644 material-dashboard-lite-master/src/widgets/trending/trending.scss create mode 100644 material-dashboard-lite-master/src/widgets/weather/weather.scss create mode 100644 matrix-of-cube-with-one-element/README.markdown create mode 100644 matrix-of-cube-with-one-element/dist/index.html create mode 100644 matrix-of-cube-with-one-element/dist/style.css create mode 100644 matrix-of-cube-with-one-element/license.txt create mode 100644 matrix-of-cube-with-one-element/src/index.html create mode 100644 matrix-of-cube-with-one-element/src/style.css create mode 100644 mc-escher-cube-23150-with-css-only/README.markdown create mode 100644 mc-escher-cube-23150-with-css-only/dist/index.html create mode 100644 mc-escher-cube-23150-with-css-only/dist/script.js create mode 100644 mc-escher-cube-23150-with-css-only/dist/style.css create mode 100644 mc-escher-cube-23150-with-css-only/license.txt create mode 100644 mc-escher-cube-23150-with-css-only/src/index.pug create mode 100644 mc-escher-cube-23150-with-css-only/src/script.js create mode 100644 mc-escher-cube-23150-with-css-only/src/style.scss create mode 100644 meow-meow-keyboard/README.markdown create mode 100644 meow-meow-keyboard/dist/index.html create mode 100644 meow-meow-keyboard/dist/script.js create mode 100644 meow-meow-keyboard/dist/style.css create mode 100644 meow-meow-keyboard/license.txt create mode 100644 meow-meow-keyboard/src/index.html create mode 100644 meow-meow-keyboard/src/script.js create mode 100644 meow-meow-keyboard/src/style.scss create mode 100644 metal-buttons/README.markdown create mode 100644 metal-buttons/dist/index.html create mode 100644 metal-buttons/dist/style.css create mode 100644 metal-buttons/license.txt create mode 100644 metal-buttons/src/index.html create mode 100644 metal-buttons/src/style.css create mode 100644 minimal-pure-css-textile-patterns/README.markdown create mode 100644 minimal-pure-css-textile-patterns/dist/index.html create mode 100644 minimal-pure-css-textile-patterns/dist/script.js create mode 100644 minimal-pure-css-textile-patterns/dist/style.css create mode 100644 minimal-pure-css-textile-patterns/license.txt create mode 100644 minimal-pure-css-textile-patterns/src/index.pug create mode 100644 minimal-pure-css-textile-patterns/src/script.babel create mode 100644 minimal-pure-css-textile-patterns/src/style.scss create mode 100644 mobile-menu/README.markdown create mode 100644 mobile-menu/dist/index.html create mode 100644 mobile-menu/dist/script.js create mode 100644 mobile-menu/dist/style.css create mode 100644 mobile-menu/license.txt create mode 100644 mobile-menu/src/index.pug create mode 100644 mobile-menu/src/script.js create mode 100644 mobile-menu/src/style.scss create mode 100644 mobile-tab-navigation-vue-gsap-cpc-vue-tabs-codepenchallenge/README.markdown create mode 100644 mobile-tab-navigation-vue-gsap-cpc-vue-tabs-codepenchallenge/dist/index.html create mode 100644 mobile-tab-navigation-vue-gsap-cpc-vue-tabs-codepenchallenge/dist/script.js create mode 100644 mobile-tab-navigation-vue-gsap-cpc-vue-tabs-codepenchallenge/license.txt create mode 100644 mobile-tab-navigation-vue-gsap-cpc-vue-tabs-codepenchallenge/src/index.html create mode 100644 mobile-tab-navigation-vue-gsap-cpc-vue-tabs-codepenchallenge/src/script.vue create mode 100644 modern-blog-layout-with-css-grid/README.markdown create mode 100644 modern-blog-layout-with-css-grid/dist/index.html create mode 100644 modern-blog-layout-with-css-grid/dist/style.css create mode 100644 modern-blog-layout-with-css-grid/license.txt create mode 100644 modern-blog-layout-with-css-grid/src/index.html create mode 100644 modern-blog-layout-with-css-grid/src/style.scss create mode 100644 monokai/README.markdown create mode 100644 monokai/dist/index.html create mode 100644 monokai/dist/style.css create mode 100644 monokai/license.txt create mode 100644 monokai/src/index.html create mode 100644 monokai/src/style.css create mode 100644 moonriverpure-javascript/README.markdown create mode 100644 moonriverpure-javascript/dist/index.html create mode 100644 moonriverpure-javascript/dist/script.js create mode 100644 moonriverpure-javascript/dist/style.css create mode 100644 moonriverpure-javascript/license.txt create mode 100644 moonriverpure-javascript/src/index.html create mode 100644 moonriverpure-javascript/src/script.js create mode 100644 moonriverpure-javascript/src/style.css create mode 100644 more-cursed-accent-color-vibes/README.markdown create mode 100644 more-cursed-accent-color-vibes/dist/index.html create mode 100644 more-cursed-accent-color-vibes/dist/style.css create mode 100644 more-cursed-accent-color-vibes/license.txt create mode 100644 more-cursed-accent-color-vibes/src/index.pug create mode 100644 more-cursed-accent-color-vibes/src/style.css create mode 100644 morning/README.markdown create mode 100644 morning/dist/index.html create mode 100644 morning/dist/script.js create mode 100644 morning/dist/style.css create mode 100644 morning/license.txt create mode 100644 morning/src/index.html create mode 100644 morning/src/script.babel create mode 100644 morning/src/style.scss create mode 100644 morphing-circles-animationclick-to-show-mechanics/README.markdown create mode 100644 morphing-circles-animationclick-to-show-mechanics/dist/index.html create mode 100644 morphing-circles-animationclick-to-show-mechanics/dist/script.js create mode 100644 morphing-circles-animationclick-to-show-mechanics/dist/style.css create mode 100644 morphing-circles-animationclick-to-show-mechanics/license.txt create mode 100644 morphing-circles-animationclick-to-show-mechanics/src/index.pug create mode 100644 morphing-circles-animationclick-to-show-mechanics/src/script.babel create mode 100644 morphing-circles-animationclick-to-show-mechanics/src/style.styl create mode 100644 morphing-multi-state-button-with-view-transitions/LICENSE.txt create mode 100644 morphing-multi-state-button-with-view-transitions/README.md create mode 100644 morphing-multi-state-button-with-view-transitions/dist/index.html create mode 100644 morphing-multi-state-button-with-view-transitions/dist/script.js create mode 100644 morphing-multi-state-button-with-view-transitions/dist/style.css create mode 100644 morphing-multi-state-button-with-view-transitions/src/index.html create mode 100644 morphing-multi-state-button-with-view-transitions/src/script.js create mode 100644 morphing-multi-state-button-with-view-transitions/src/style.css create mode 100644 moving-mirror-web-audio-api-and-three-js/README.markdown create mode 100644 moving-mirror-web-audio-api-and-three-js/dist/index.html create mode 100644 moving-mirror-web-audio-api-and-three-js/dist/script.js create mode 100644 moving-mirror-web-audio-api-and-three-js/dist/style.css create mode 100644 moving-mirror-web-audio-api-and-three-js/license.txt create mode 100644 moving-mirror-web-audio-api-and-three-js/src/index.html create mode 100644 moving-mirror-web-audio-api-and-three-js/src/script.js create mode 100644 moving-mirror-web-audio-api-and-three-js/src/style.css create mode 100644 multi-colored-text-with-css/README.markdown create mode 100644 multi-colored-text-with-css/dist/index.html create mode 100644 multi-colored-text-with-css/dist/script.js create mode 100644 multi-colored-text-with-css/dist/style.css create mode 100644 multi-colored-text-with-css/license.txt create mode 100644 multi-colored-text-with-css/src/index.html create mode 100644 multi-colored-text-with-css/src/script.js create mode 100644 multi-colored-text-with-css/src/style.css create mode 100644 music-app/README.markdown create mode 100644 music-app/dist/index.html create mode 100644 music-app/dist/script.js create mode 100644 music-app/dist/style.css create mode 100644 music-app/license.txt create mode 100644 music-app/src/index.html create mode 100644 music-app/src/script.js create mode 100644 music-app/src/style.scss create mode 100644 muson-css/README.markdown create mode 100644 muson-css/dist/index.html create mode 100644 muson-css/dist/style.css create mode 100644 muson-css/license.txt create mode 100644 muson-css/src/index.html create mode 100644 muson-css/src/style.css create mode 100644 mutationobserver-example/README.markdown create mode 100644 mutationobserver-example/dist/index.html create mode 100644 mutationobserver-example/dist/script.js create mode 100644 mutationobserver-example/dist/style.css create mode 100644 mutationobserver-example/license.txt create mode 100644 mutationobserver-example/src/index.html create mode 100644 mutationobserver-example/src/script.js create mode 100644 mutationobserver-example/src/style.css create mode 100644 native-masonry-layout-with-css-grid/README.markdown create mode 100644 native-masonry-layout-with-css-grid/dist/index.html create mode 100644 native-masonry-layout-with-css-grid/dist/style.css create mode 100644 native-masonry-layout-with-css-grid/license.txt create mode 100644 native-masonry-layout-with-css-grid/src/index.html create mode 100644 native-masonry-layout-with-css-grid/src/style.css create mode 100644 neptune/README.markdown create mode 100644 neptune/dist/index.html create mode 100644 neptune/dist/style.css create mode 100644 neptune/license.txt create mode 100644 neptune/src/index.html create mode 100644 neptune/src/style.scss create mode 100644 neumorphic-playground/README.markdown create mode 100644 neumorphic-playground/dist/index.html create mode 100644 neumorphic-playground/dist/script.js create mode 100644 neumorphic-playground/dist/style.css create mode 100644 neumorphic-playground/license.txt create mode 100644 neumorphic-playground/src/index.pug create mode 100644 neumorphic-playground/src/script.babel create mode 100644 neumorphic-playground/src/style.styl create mode 100644 neuomorphic-checkboxes/README.markdown create mode 100644 neuomorphic-checkboxes/dist/index.html create mode 100644 neuomorphic-checkboxes/dist/style.css create mode 100644 neuomorphic-checkboxes/license.txt create mode 100644 neuomorphic-checkboxes/src/index.html create mode 100644 neuomorphic-checkboxes/src/style.scss create mode 100644 neuomorphism-trapped-animated-blob-v1-0/README.markdown create mode 100644 neuomorphism-trapped-animated-blob-v1-0/dist/index.html create mode 100644 neuomorphism-trapped-animated-blob-v1-0/dist/style.css create mode 100644 neuomorphism-trapped-animated-blob-v1-0/license.txt create mode 100644 neuomorphism-trapped-animated-blob-v1-0/src/index.html create mode 100644 neuomorphism-trapped-animated-blob-v1-0/src/style.scss create mode 100644 news-section-w-tailwind-css/README.markdown create mode 100644 news-section-w-tailwind-css/dist/index.html create mode 100644 news-section-w-tailwind-css/license.txt create mode 100644 news-section-w-tailwind-css/src/index.html create mode 100644 night-day/README.markdown create mode 100644 night-day/dist/index.html create mode 100644 night-day/dist/script.js create mode 100644 night-day/dist/style.css create mode 100644 night-day/license.txt create mode 100644 night-day/src/index.html create mode 100644 night-day/src/script.js create mode 100644 night-day/src/style.css create mode 100644 noisy-svg-lines/README.markdown create mode 100644 noisy-svg-lines/dist/blgjlm.js create mode 100644 noisy-svg-lines/dist/index.html create mode 100644 noisy-svg-lines/dist/script.js create mode 100644 noisy-svg-lines/dist/style.css create mode 100644 noisy-svg-lines/license.txt create mode 100644 noisy-svg-lines/src/blgjlm.js create mode 100644 noisy-svg-lines/src/index.html create mode 100644 noisy-svg-lines/src/script.js create mode 100644 noisy-svg-lines/src/style.css create mode 100644 noisy-vertical-svg-lines/README.markdown create mode 100644 noisy-vertical-svg-lines/dist/index.html create mode 100644 noisy-vertical-svg-lines/dist/script.js create mode 100644 noisy-vertical-svg-lines/dist/style.css create mode 100644 noisy-vertical-svg-lines/license.txt create mode 100644 noisy-vertical-svg-lines/src/index.html create mode 100644 noisy-vertical-svg-lines/src/script.js create mode 100644 noisy-vertical-svg-lines/src/style.css create mode 100644 onboarding-sequence/README.markdown create mode 100644 onboarding-sequence/dist/index.html create mode 100644 onboarding-sequence/dist/script.js create mode 100644 onboarding-sequence/dist/style.css create mode 100644 onboarding-sequence/license.txt create mode 100644 onboarding-sequence/src/index.html create mode 100644 onboarding-sequence/src/script.babel create mode 100644 onboarding-sequence/src/style.css create mode 100644 one-hundred-rules/README.markdown create mode 100644 one-hundred-rules/dist/index.html create mode 100644 one-hundred-rules/dist/style.css create mode 100644 one-hundred-rules/license.txt create mode 100644 one-hundred-rules/src/index.pug create mode 100644 one-hundred-rules/src/style.scss create mode 100644 only-css-infinite-plug-in/README.markdown create mode 100644 only-css-infinite-plug-in/dist/index.html create mode 100644 only-css-infinite-plug-in/dist/style.css create mode 100644 only-css-infinite-plug-in/license.txt create mode 100644 only-css-infinite-plug-in/src/index.pug create mode 100644 only-css-infinite-plug-in/src/style.scss create mode 100644 only-css-infinite-wave/README.markdown create mode 100644 only-css-infinite-wave/dist/index.html create mode 100644 only-css-infinite-wave/dist/style.css create mode 100644 only-css-infinite-wave/license.txt create mode 100644 only-css-infinite-wave/src/index.pug create mode 100644 only-css-infinite-wave/src/style.scss create mode 100644 only-css-moon-clip/README.markdown create mode 100644 only-css-moon-clip/dist/index.html create mode 100644 only-css-moon-clip/dist/style.css create mode 100644 only-css-moon-clip/license.txt create mode 100644 only-css-moon-clip/src/index.pug create mode 100644 only-css-moon-clip/src/style.scss create mode 100644 only-css-mt-fuji/README.markdown create mode 100644 only-css-mt-fuji/dist/index.html create mode 100644 only-css-mt-fuji/dist/style.css create mode 100644 only-css-mt-fuji/license.txt create mode 100644 only-css-mt-fuji/src/index.pug create mode 100644 only-css-mt-fuji/src/style.scss create mode 100644 only-css-satellite/README.markdown create mode 100644 only-css-satellite/dist/index.html create mode 100644 only-css-satellite/dist/style.css create mode 100644 only-css-satellite/license.txt create mode 100644 only-css-satellite/src/index.pug create mode 100644 only-css-satellite/src/style.scss create mode 100644 only-css-wave-dots/README.markdown create mode 100644 only-css-wave-dots/dist/index.html create mode 100644 only-css-wave-dots/dist/style.css create mode 100644 only-css-wave-dots/license.txt create mode 100644 only-css-wave-dots/src/index.pug create mode 100644 only-css-wave-dots/src/style.scss create mode 100644 orange-and-blue-distance-field-spiral/README.markdown create mode 100644 orange-and-blue-distance-field-spiral/dist/index.html create mode 100644 orange-and-blue-distance-field-spiral/dist/script.js create mode 100644 orange-and-blue-distance-field-spiral/dist/style.css create mode 100644 orange-and-blue-distance-field-spiral/license.txt create mode 100644 orange-and-blue-distance-field-spiral/src/index.html create mode 100644 orange-and-blue-distance-field-spiral/src/script.js create mode 100644 orange-and-blue-distance-field-spiral/src/style.css create mode 100644 p5js-svg-flow-field/README.markdown create mode 100644 p5js-svg-flow-field/dist/index.html create mode 100644 p5js-svg-flow-field/dist/script.js create mode 100644 p5js-svg-flow-field/dist/style.css create mode 100644 p5js-svg-flow-field/license.txt create mode 100644 p5js-svg-flow-field/src/index.html create mode 100644 p5js-svg-flow-field/src/script.js create mode 100644 p5js-svg-flow-field/src/style.scss create mode 100644 pagination-buttons/README.markdown create mode 100644 pagination-buttons/dist/index.html create mode 100644 pagination-buttons/dist/script.js create mode 100644 pagination-buttons/dist/style.css create mode 100644 pagination-buttons/license.txt create mode 100644 pagination-buttons/src/index.html create mode 100644 pagination-buttons/src/script.js create mode 100644 pagination-buttons/src/style.css create mode 100644 panda-button/README.markdown create mode 100644 panda-button/dist/index.html create mode 100644 panda-button/dist/script.js create mode 100644 panda-button/dist/style.css create mode 100644 panda-button/license.txt create mode 100644 panda-button/src/index.html create mode 100644 panda-button/src/script.js create mode 100644 panda-button/src/style.css create mode 100644 pantone-color-chips/README.markdown create mode 100644 pantone-color-chips/dist/index.html create mode 100644 pantone-color-chips/dist/script.js create mode 100644 pantone-color-chips/dist/style.css create mode 100644 pantone-color-chips/license.txt create mode 100644 pantone-color-chips/src/index.html create mode 100644 pantone-color-chips/src/script.js create mode 100644 pantone-color-chips/src/style.css create mode 100644 paper-chase/README.markdown create mode 100644 paper-chase/dist/index.html create mode 100644 paper-chase/dist/style.css create mode 100644 paper-chase/license.txt create mode 100644 paper-chase/src/index.haml create mode 100644 paper-chase/src/style.scss create mode 100644 paper-cut-text-effect/README.markdown create mode 100644 paper-cut-text-effect/dist/index.html create mode 100644 paper-cut-text-effect/dist/script.js create mode 100644 paper-cut-text-effect/dist/style.css create mode 100644 paper-cut-text-effect/license.txt create mode 100644 paper-cut-text-effect/src/index.html create mode 100644 paper-cut-text-effect/src/script.babel create mode 100644 paper-cut-text-effect/src/style.scss create mode 100644 paper-pirouette-3d-css-only-flying-page-animation-tutorial-keyframers-2-18-0/README.markdown create mode 100644 paper-pirouette-3d-css-only-flying-page-animation-tutorial-keyframers-2-18-0/dist/index.html create mode 100644 paper-pirouette-3d-css-only-flying-page-animation-tutorial-keyframers-2-18-0/dist/style.css create mode 100644 paper-pirouette-3d-css-only-flying-page-animation-tutorial-keyframers-2-18-0/license.txt create mode 100644 paper-pirouette-3d-css-only-flying-page-animation-tutorial-keyframers-2-18-0/src/index.html create mode 100644 paper-pirouette-3d-css-only-flying-page-animation-tutorial-keyframers-2-18-0/src/style.scss create mode 100644 particle-photos/README.markdown create mode 100644 particle-photos/dist/index.html create mode 100644 particle-photos/dist/script.js create mode 100644 particle-photos/dist/style.css create mode 100644 particle-photos/license.txt create mode 100644 particle-photos/src/index.html create mode 100644 particle-photos/src/script.js create mode 100644 particle-photos/src/style.css create mode 100644 pdf-flyer-generator/README.markdown create mode 100644 pdf-flyer-generator/dist/index.html create mode 100644 pdf-flyer-generator/dist/script.js create mode 100644 pdf-flyer-generator/dist/style.css create mode 100644 pdf-flyer-generator/license.txt create mode 100644 pdf-flyer-generator/src/index.html create mode 100644 pdf-flyer-generator/src/script.js create mode 100644 pdf-flyer-generator/src/style.less create mode 100644 pen-export-MbpPja/LICENSE.txt create mode 100644 pen-export-MbpPja/README.md create mode 100644 pen-export-MbpPja/index.html create mode 100644 pen-export-MbpPja/style.css create mode 100644 pen-export-tqdmv/LICENSE.txt create mode 100644 pen-export-tqdmv/README.md create mode 100644 pen-export-tqdmv/dist/index.html create mode 100644 pen-export-tqdmv/dist/script.js create mode 100644 pen-export-tqdmv/dist/style.css create mode 100644 pen-export-tqdmv/src/index.html create mode 100644 pen-export-tqdmv/src/script.js create mode 100644 pen-export-tqdmv/src/style.css create mode 100644 phone-reflection/README.markdown create mode 100644 phone-reflection/dist/index.html create mode 100644 phone-reflection/dist/script.js create mode 100644 phone-reflection/dist/style.css create mode 100644 phone-reflection/license.txt create mode 100644 phone-reflection/src/index.html create mode 100644 phone-reflection/src/script.js create mode 100644 phone-reflection/src/style.css create mode 100644 pie-chart-with-pure-css/README.markdown create mode 100644 pie-chart-with-pure-css/dist/index.html create mode 100644 pie-chart-with-pure-css/dist/style.css create mode 100644 pie-chart-with-pure-css/license.txt create mode 100644 pie-chart-with-pure-css/src/index.html create mode 100644 pie-chart-with-pure-css/src/style.css create mode 100644 piet-mondrian-s-css-grid/README.markdown create mode 100644 piet-mondrian-s-css-grid/dist/index.html create mode 100644 piet-mondrian-s-css-grid/dist/style.css create mode 100644 piet-mondrian-s-css-grid/license.txt create mode 100644 piet-mondrian-s-css-grid/src/index.html create mode 100644 piet-mondrian-s-css-grid/src/style.css create mode 100644 pill-styled-radio-buttons-fully-scaleable/README.markdown create mode 100644 pill-styled-radio-buttons-fully-scaleable/dist/index.html create mode 100644 pill-styled-radio-buttons-fully-scaleable/dist/style.css create mode 100644 pill-styled-radio-buttons-fully-scaleable/license.txt create mode 100644 pill-styled-radio-buttons-fully-scaleable/src/index.html create mode 100644 pill-styled-radio-buttons-fully-scaleable/src/style.scss create mode 100644 pixi-sprite-bubbles/README.markdown create mode 100644 pixi-sprite-bubbles/dist/742d19fae30395a25522f43c1.js create mode 100644 pixi-sprite-bubbles/dist/index.html create mode 100644 pixi-sprite-bubbles/dist/script.js create mode 100644 pixi-sprite-bubbles/dist/style.css create mode 100644 pixi-sprite-bubbles/license.txt create mode 100644 pixi-sprite-bubbles/src/742d19fae30395a25522f43c1.js create mode 100644 pixi-sprite-bubbles/src/index.html create mode 100644 pixi-sprite-bubbles/src/script.js create mode 100644 pixi-sprite-bubbles/src/style.css create mode 100644 planetary-vignettes/README.markdown create mode 100644 planetary-vignettes/dist/index.html create mode 100644 planetary-vignettes/dist/script.js create mode 100644 planetary-vignettes/dist/style.css create mode 100644 planetary-vignettes/license.txt create mode 100644 planetary-vignettes/src/index.html create mode 100644 planetary-vignettes/src/script.js create mode 100644 planetary-vignettes/src/style.css create mode 100644 platonics/README.markdown create mode 100644 platonics/dist/index.html create mode 100644 platonics/dist/script.js create mode 100644 platonics/dist/style.css create mode 100644 platonics/license.txt create mode 100644 platonics/src/index.html create mode 100644 platonics/src/script.babel create mode 100644 platonics/src/style.css create mode 100644 play-with-header-on-page-transitions/README.markdown create mode 100644 play-with-header-on-page-transitions/dist/index.html create mode 100644 play-with-header-on-page-transitions/dist/script.js create mode 100644 play-with-header-on-page-transitions/dist/style.css create mode 100644 play-with-header-on-page-transitions/license.txt create mode 100644 play-with-header-on-page-transitions/src/index.html create mode 100644 play-with-header-on-page-transitions/src/script.babel create mode 100644 play-with-header-on-page-transitions/src/style.scss create mode 100644 playlist-artwork-for-cover-lover/README.markdown create mode 100644 playlist-artwork-for-cover-lover/dist/index.html create mode 100644 playlist-artwork-for-cover-lover/dist/script.js create mode 100644 playlist-artwork-for-cover-lover/dist/style.css create mode 100644 playlist-artwork-for-cover-lover/license.txt create mode 100644 playlist-artwork-for-cover-lover/src/index.html create mode 100644 playlist-artwork-for-cover-lover/src/script.js create mode 100644 playlist-artwork-for-cover-lover/src/style.scss create mode 100644 plot-direction/README.markdown create mode 100644 plot-direction/dist/index.html create mode 100644 plot-direction/dist/style.css create mode 100644 plot-direction/license.txt create mode 100644 plot-direction/src/index.html create mode 100644 plot-direction/src/style.css create mode 100644 pop-the-bubbles-three-js-scene/README.markdown create mode 100644 pop-the-bubbles-three-js-scene/dist/index.html create mode 100644 pop-the-bubbles-three-js-scene/dist/script.js create mode 100644 pop-the-bubbles-three-js-scene/dist/style.css create mode 100644 pop-the-bubbles-three-js-scene/license.txt create mode 100644 pop-the-bubbles-three-js-scene/src/index.html create mode 100644 pop-the-bubbles-three-js-scene/src/script.js create mode 100644 pop-the-bubbles-three-js-scene/src/style.css create mode 100644 popcssicles/README.markdown create mode 100644 popcssicles/dist/index.html create mode 100644 popcssicles/dist/script.js create mode 100644 popcssicles/dist/style.css create mode 100644 popcssicles/license.txt create mode 100644 popcssicles/src/index.haml create mode 100644 popcssicles/src/script.js create mode 100644 popcssicles/src/style.scss create mode 100644 potion-container/README.markdown create mode 100644 potion-container/dist/index.html create mode 100644 potion-container/dist/script.js create mode 100644 potion-container/dist/style.css create mode 100644 potion-container/license.txt create mode 100644 potion-container/src/index.html create mode 100644 potion-container/src/script.js create mode 100644 potion-container/src/style.scss create mode 100644 practice-canvas2d/README.markdown create mode 100644 practice-canvas2d/dist/index.html create mode 100644 practice-canvas2d/dist/script.js create mode 100644 practice-canvas2d/dist/style.css create mode 100644 practice-canvas2d/license.txt create mode 100644 practice-canvas2d/src/index.pug create mode 100644 practice-canvas2d/src/script.js create mode 100644 practice-canvas2d/src/style.styl create mode 100644 procedural-pathways/README.markdown create mode 100644 procedural-pathways/dist/index.html create mode 100644 procedural-pathways/dist/script.js create mode 100644 procedural-pathways/dist/style.css create mode 100644 procedural-pathways/license.txt create mode 100644 procedural-pathways/src/index.haml create mode 100644 procedural-pathways/src/script.js create mode 100644 procedural-pathways/src/style.scss create mode 100644 product-showcase-ui/README.markdown create mode 100644 product-showcase-ui/dist/index.html create mode 100644 product-showcase-ui/dist/script.js create mode 100644 product-showcase-ui/dist/style.css create mode 100644 product-showcase-ui/license.txt create mode 100644 product-showcase-ui/src/index.html create mode 100644 product-showcase-ui/src/script.babel create mode 100644 product-showcase-ui/src/style.scss create mode 100644 products-dashboard-ui/README.markdown create mode 100644 products-dashboard-ui/dist/index.html create mode 100644 products-dashboard-ui/dist/script.js create mode 100644 products-dashboard-ui/dist/style.css create mode 100644 products-dashboard-ui/license.txt create mode 100644 products-dashboard-ui/src/index.html create mode 100644 products-dashboard-ui/src/script.js create mode 100644 products-dashboard-ui/src/style.scss create mode 100644 profusion-2/README.markdown create mode 100644 profusion-2/dist/index.html create mode 100644 profusion-2/dist/script.js create mode 100644 profusion-2/dist/style.css create mode 100644 profusion-2/license.txt create mode 100644 profusion-2/src/index.pug create mode 100644 profusion-2/src/script.js create mode 100644 profusion-2/src/style.scss create mode 100644 project-management-dashboard-ui/LICENSE.txt create mode 100644 project-management-dashboard-ui/README.md create mode 100644 project-management-dashboard-ui/dist/index.html create mode 100644 project-management-dashboard-ui/dist/script.js create mode 100644 project-management-dashboard-ui/dist/style.css create mode 100644 project-management-dashboard-ui/src/index.html create mode 100644 project-management-dashboard-ui/src/script.js create mode 100644 project-management-dashboard-ui/src/style.scss create mode 100644 psychedelic-jellyfish-shader/README.markdown create mode 100644 psychedelic-jellyfish-shader/dist/index.html create mode 100644 psychedelic-jellyfish-shader/dist/script.js create mode 100644 psychedelic-jellyfish-shader/dist/style.css create mode 100644 psychedelic-jellyfish-shader/license.txt create mode 100644 psychedelic-jellyfish-shader/src/index.html create mode 100644 psychedelic-jellyfish-shader/src/script.babel create mode 100644 psychedelic-jellyfish-shader/src/style.scss create mode 100644 psychedelic-waves/README.markdown create mode 100644 psychedelic-waves/dist/index.html create mode 100644 psychedelic-waves/dist/script.js create mode 100644 psychedelic-waves/dist/style.css create mode 100644 psychedelic-waves/license.txt create mode 100644 psychedelic-waves/src/index.html create mode 100644 psychedelic-waves/src/script.babel create mode 100644 psychedelic-waves/src/style.scss create mode 100644 pulse-animation-in-svg-or-css3/README.markdown create mode 100644 pulse-animation-in-svg-or-css3/dist/index.html create mode 100644 pulse-animation-in-svg-or-css3/dist/style.css create mode 100644 pulse-animation-in-svg-or-css3/license.txt create mode 100644 pulse-animation-in-svg-or-css3/src/index.html create mode 100644 pulse-animation-in-svg-or-css3/src/style.scss create mode 100644 pure-css-coverflow-with-css-scrolltimeline-scroll-snapping/README.markdown create mode 100644 pure-css-coverflow-with-css-scrolltimeline-scroll-snapping/dist/index.html create mode 100644 pure-css-coverflow-with-css-scrolltimeline-scroll-snapping/dist/script.js create mode 100644 pure-css-coverflow-with-css-scrolltimeline-scroll-snapping/dist/style.css create mode 100644 pure-css-coverflow-with-css-scrolltimeline-scroll-snapping/license.txt create mode 100644 pure-css-coverflow-with-css-scrolltimeline-scroll-snapping/src/index.html create mode 100644 pure-css-coverflow-with-css-scrolltimeline-scroll-snapping/src/script.js create mode 100644 pure-css-coverflow-with-css-scrolltimeline-scroll-snapping/src/style.css create mode 100644 pure-css-cyberpunk-2077-buttons/README.markdown create mode 100644 pure-css-cyberpunk-2077-buttons/dist/index.html create mode 100644 pure-css-cyberpunk-2077-buttons/dist/script.js create mode 100644 pure-css-cyberpunk-2077-buttons/dist/style.css create mode 100644 pure-css-cyberpunk-2077-buttons/license.txt create mode 100644 pure-css-cyberpunk-2077-buttons/src/index.html create mode 100644 pure-css-cyberpunk-2077-buttons/src/script.babel create mode 100644 pure-css-cyberpunk-2077-buttons/src/style.css create mode 100644 pure-css-eye/README.markdown create mode 100644 pure-css-eye/dist/index.html create mode 100644 pure-css-eye/dist/script.js create mode 100644 pure-css-eye/dist/style.css create mode 100644 pure-css-eye/license.txt create mode 100644 pure-css-eye/src/index.html create mode 100644 pure-css-eye/src/script.js create mode 100644 pure-css-eye/src/style.css create mode 100644 pure-css-halftone-portrait-from-jpg-source/README.markdown create mode 100644 pure-css-halftone-portrait-from-jpg-source/dist/index.html create mode 100644 pure-css-halftone-portrait-from-jpg-source/dist/style.css create mode 100644 pure-css-halftone-portrait-from-jpg-source/license.txt create mode 100644 pure-css-halftone-portrait-from-jpg-source/src/index.html create mode 100644 pure-css-halftone-portrait-from-jpg-source/src/style.scss create mode 100644 pure-css-halloween-zipper/README.markdown create mode 100644 pure-css-halloween-zipper/dist/https___codepen_io_thebab.css create mode 100644 pure-css-halloween-zipper/dist/index.html create mode 100644 pure-css-halloween-zipper/dist/style.css create mode 100644 pure-css-halloween-zipper/license.txt create mode 100644 pure-css-halloween-zipper/src/https___codepen_io_thebab.css create mode 100644 pure-css-halloween-zipper/src/index.pug create mode 100644 pure-css-halloween-zipper/src/style.scss create mode 100644 pure-css-monument-valley-ii-not-for-safari/README.markdown create mode 100644 pure-css-monument-valley-ii-not-for-safari/dist/index.html create mode 100644 pure-css-monument-valley-ii-not-for-safari/dist/style.css create mode 100644 pure-css-monument-valley-ii-not-for-safari/license.txt create mode 100644 pure-css-monument-valley-ii-not-for-safari/src/index.html create mode 100644 pure-css-monument-valley-ii-not-for-safari/src/style.css create mode 100644 pw-dashboard/README.markdown create mode 100644 pw-dashboard/dist/index.html create mode 100644 pw-dashboard/dist/style.css create mode 100644 pw-dashboard/license.txt create mode 100644 pw-dashboard/src/index.pug create mode 100644 pw-dashboard/src/style.styl create mode 100644 quarto/README.markdown create mode 100644 quarto/dist/index.html create mode 100644 quarto/dist/script.js create mode 100644 quarto/dist/style.css create mode 100644 quarto/license.txt create mode 100644 quarto/src/index.html create mode 100644 quarto/src/script.js create mode 100644 quarto/src/style.css create mode 100644 quick-mathematical-features-support-test/LICENSE.txt create mode 100644 quick-mathematical-features-support-test/README.md create mode 100644 quick-mathematical-features-support-test/dist/index.html create mode 100644 quick-mathematical-features-support-test/dist/style.css create mode 100644 quick-mathematical-features-support-test/src/index.pug create mode 100644 quick-mathematical-features-support-test/src/style.scss create mode 100644 radio-button-group-with-gradient-cross-browser-responsive-no-framework/README.markdown create mode 100644 radio-button-group-with-gradient-cross-browser-responsive-no-framework/dist/https___codepen_io_thebab.css create mode 100644 radio-button-group-with-gradient-cross-browser-responsive-no-framework/dist/index.html create mode 100644 radio-button-group-with-gradient-cross-browser-responsive-no-framework/dist/style.css create mode 100644 radio-button-group-with-gradient-cross-browser-responsive-no-framework/license.txt create mode 100644 radio-button-group-with-gradient-cross-browser-responsive-no-framework/src/https___codepen_io_thebab.css create mode 100644 radio-button-group-with-gradient-cross-browser-responsive-no-framework/src/index.pug create mode 100644 radio-button-group-with-gradient-cross-browser-responsive-no-framework/src/style.scss create mode 100644 rainbow-hypercube/README.markdown create mode 100644 rainbow-hypercube/dist/index.html create mode 100644 rainbow-hypercube/dist/script.js create mode 100644 rainbow-hypercube/dist/style.css create mode 100644 rainbow-hypercube/license.txt create mode 100644 rainbow-hypercube/src/index.html create mode 100644 rainbow-hypercube/src/script.js create mode 100644 rainbow-hypercube/src/style.scss create mode 100644 rainbow-shader/README.markdown create mode 100644 rainbow-shader/dist/index.html create mode 100644 rainbow-shader/dist/script.js create mode 100644 rainbow-shader/dist/style.css create mode 100644 rainbow-shader/license.txt create mode 100644 rainbow-shader/src/index.html create mode 100644 rainbow-shader/src/script.js create mode 100644 rainbow-shader/src/style.css create mode 100644 random-rainbow-generator-skypack/README.markdown create mode 100644 random-rainbow-generator-skypack/dist/index.html create mode 100644 random-rainbow-generator-skypack/dist/script.js create mode 100644 random-rainbow-generator-skypack/dist/style.css create mode 100644 random-rainbow-generator-skypack/license.txt create mode 100644 random-rainbow-generator-skypack/src/index.html create mode 100644 random-rainbow-generator-skypack/src/script.js create mode 100644 random-rainbow-generator-skypack/src/style.css create mode 100644 random-svg-pattern-creator-tool/README.markdown create mode 100644 random-svg-pattern-creator-tool/dist/index.html create mode 100644 random-svg-pattern-creator-tool/dist/script.js create mode 100644 random-svg-pattern-creator-tool/dist/style.css create mode 100644 random-svg-pattern-creator-tool/license.txt create mode 100644 random-svg-pattern-creator-tool/src/index.html create mode 100644 random-svg-pattern-creator-tool/src/script.js create mode 100644 random-svg-pattern-creator-tool/src/style.css create mode 100644 random-z-rich/README.markdown create mode 100644 random-z-rich/dist/index.html create mode 100644 random-z-rich/dist/script.js create mode 100644 random-z-rich/dist/style.css create mode 100644 random-z-rich/license.txt create mode 100644 random-z-rich/src/index.html create mode 100644 random-z-rich/src/script.babel create mode 100644 random-z-rich/src/style.scss create mode 100644 randomly-generated-diamond-art-codepenchallenge/README.markdown create mode 100644 randomly-generated-diamond-art-codepenchallenge/dist/index.html create mode 100644 randomly-generated-diamond-art-codepenchallenge/dist/script.js create mode 100644 randomly-generated-diamond-art-codepenchallenge/dist/style.css create mode 100644 randomly-generated-diamond-art-codepenchallenge/license.txt create mode 100644 randomly-generated-diamond-art-codepenchallenge/src/index.html create mode 100644 randomly-generated-diamond-art-codepenchallenge/src/script.ts create mode 100644 randomly-generated-diamond-art-codepenchallenge/src/style.scss create mode 100644 randomly-generated-pure-css-menu-icons-w-markup-and-scss/README.markdown create mode 100644 randomly-generated-pure-css-menu-icons-w-markup-and-scss/dist/index.html create mode 100644 randomly-generated-pure-css-menu-icons-w-markup-and-scss/dist/script.js create mode 100644 randomly-generated-pure-css-menu-icons-w-markup-and-scss/dist/style.css create mode 100644 randomly-generated-pure-css-menu-icons-w-markup-and-scss/license.txt create mode 100644 randomly-generated-pure-css-menu-icons-w-markup-and-scss/src/index.haml create mode 100644 randomly-generated-pure-css-menu-icons-w-markup-and-scss/src/script.js create mode 100644 randomly-generated-pure-css-menu-icons-w-markup-and-scss/src/style.scss create mode 100644 range-pills/README.markdown create mode 100644 range-pills/dist/index.html create mode 100644 range-pills/dist/script.js create mode 100644 range-pills/dist/style.css create mode 100644 range-pills/license.txt create mode 100644 range-pills/src/index.html create mode 100644 range-pills/src/script.js create mode 100644 range-pills/src/style.sass create mode 100644 react-color-gradients/README.markdown create mode 100644 react-color-gradients/dist/index.html create mode 100644 react-color-gradients/dist/script.js create mode 100644 react-color-gradients/dist/style.css create mode 100644 react-color-gradients/license.txt create mode 100644 react-color-gradients/src/index.html create mode 100644 react-color-gradients/src/script.babel create mode 100644 react-color-gradients/src/style.css create mode 100644 react-number-range-slider-w-gsap-debunking-figma-reels-design-to-dev-1/README.markdown create mode 100644 react-number-range-slider-w-gsap-debunking-figma-reels-design-to-dev-1/dist/index.html create mode 100644 react-number-range-slider-w-gsap-debunking-figma-reels-design-to-dev-1/dist/script.js create mode 100644 react-number-range-slider-w-gsap-debunking-figma-reels-design-to-dev-1/dist/style.css create mode 100644 react-number-range-slider-w-gsap-debunking-figma-reels-design-to-dev-1/license.txt create mode 100644 react-number-range-slider-w-gsap-debunking-figma-reels-design-to-dev-1/src/index.pug create mode 100644 react-number-range-slider-w-gsap-debunking-figma-reels-design-to-dev-1/src/script.babel create mode 100644 react-number-range-slider-w-gsap-debunking-figma-reels-design-to-dev-1/src/style.styl create mode 100644 reactive-synth/README.markdown create mode 100644 reactive-synth/dist/index.html create mode 100644 reactive-synth/dist/script.js create mode 100644 reactive-synth/dist/style.css create mode 100644 reactive-synth/license.txt create mode 100644 reactive-synth/src/index.html create mode 100644 reactive-synth/src/script.babel create mode 100644 reactive-synth/src/style.sass create mode 100644 resizable-elements-w-scoped-css-variables-touch-support/README.markdown create mode 100644 resizable-elements-w-scoped-css-variables-touch-support/dist/index.html create mode 100644 resizable-elements-w-scoped-css-variables-touch-support/dist/script.js create mode 100644 resizable-elements-w-scoped-css-variables-touch-support/dist/style.css create mode 100644 resizable-elements-w-scoped-css-variables-touch-support/license.txt create mode 100644 resizable-elements-w-scoped-css-variables-touch-support/src/index.pug create mode 100644 resizable-elements-w-scoped-css-variables-touch-support/src/script.babel create mode 100644 resizable-elements-w-scoped-css-variables-touch-support/src/style.styl create mode 100644 responsive-castle/README.markdown create mode 100644 responsive-castle/dist/index.html create mode 100644 responsive-castle/dist/script.js create mode 100644 responsive-castle/dist/style.css create mode 100644 responsive-castle/license.txt create mode 100644 responsive-castle/src/index.html create mode 100644 responsive-castle/src/script.babel create mode 100644 responsive-castle/src/style.scss create mode 100644 responsive-comic-book-layout/README.markdown create mode 100644 responsive-comic-book-layout/dist/index.html create mode 100644 responsive-comic-book-layout/dist/style.css create mode 100644 responsive-comic-book-layout/license.txt create mode 100644 responsive-comic-book-layout/src/index.html create mode 100644 responsive-comic-book-layout/src/style.css create mode 100644 responsive-grid-timeline/README.markdown create mode 100644 responsive-grid-timeline/dist/index.html create mode 100644 responsive-grid-timeline/dist/style.css create mode 100644 responsive-grid-timeline/license.txt create mode 100644 responsive-grid-timeline/src/index.html create mode 100644 responsive-grid-timeline/src/style.scss create mode 100644 responsive-social-platform-ui/README.markdown create mode 100644 responsive-social-platform-ui/dist/index.html create mode 100644 responsive-social-platform-ui/dist/style.css create mode 100644 responsive-social-platform-ui/license.txt create mode 100644 responsive-social-platform-ui/src/index.html create mode 100644 responsive-social-platform-ui/src/style.scss create mode 100644 rgbconfettimyk-generative-art/README.markdown create mode 100644 rgbconfettimyk-generative-art/dist/index.html create mode 100644 rgbconfettimyk-generative-art/dist/script.js create mode 100644 rgbconfettimyk-generative-art/dist/style.css create mode 100644 rgbconfettimyk-generative-art/license.txt create mode 100644 rgbconfettimyk-generative-art/src/index.html create mode 100644 rgbconfettimyk-generative-art/src/script.js create mode 100644 rgbconfettimyk-generative-art/src/style.css create mode 100644 risograph-gradient-effect-with-svg/README.markdown create mode 100644 risograph-gradient-effect-with-svg/dist/index.html create mode 100644 risograph-gradient-effect-with-svg/dist/script.js create mode 100644 risograph-gradient-effect-with-svg/dist/style.css create mode 100644 risograph-gradient-effect-with-svg/license.txt create mode 100644 risograph-gradient-effect-with-svg/src/index.svg create mode 100644 risograph-gradient-effect-with-svg/src/script.js create mode 100644 risograph-gradient-effect-with-svg/src/style.scss create mode 100644 rotating-thing/README.markdown create mode 100644 rotating-thing/dist/index.html create mode 100644 rotating-thing/dist/script.js create mode 100644 rotating-thing/dist/style.css create mode 100644 rotating-thing/license.txt create mode 100644 rotating-thing/src/index.html create mode 100644 rotating-thing/src/script.js create mode 100644 rotating-thing/src/style.css create mode 100644 rounded-dashes/README.markdown create mode 100644 rounded-dashes/dist/index.html create mode 100644 rounded-dashes/dist/style.css create mode 100644 rounded-dashes/license.txt create mode 100644 rounded-dashes/src/index.html create mode 100644 rounded-dashes/src/style.css create mode 100644 running-waves-with-d3/README.markdown create mode 100644 running-waves-with-d3/dist/index.html create mode 100644 running-waves-with-d3/dist/script.js create mode 100644 running-waves-with-d3/dist/style.css create mode 100644 running-waves-with-d3/license.txt create mode 100644 running-waves-with-d3/src/index.html create mode 100644 running-waves-with-d3/src/script.js create mode 100644 running-waves-with-d3/src/style.css create mode 100644 saul-bass-ified/README.markdown create mode 100644 saul-bass-ified/dist/index.html create mode 100644 saul-bass-ified/dist/script.js create mode 100644 saul-bass-ified/dist/style.css create mode 100644 saul-bass-ified/license.txt create mode 100644 saul-bass-ified/src/index.html create mode 100644 saul-bass-ified/src/script.js create mode 100644 saul-bass-ified/src/style.css create mode 100644 scroll-timeline-example/LICENSE.txt create mode 100644 scroll-timeline-example/README.md create mode 100644 scroll-timeline-example/dist/index.html create mode 100644 scroll-timeline-example/dist/style.css create mode 100644 scroll-timeline-example/src/index.html create mode 100644 scroll-timeline-example/src/style.css create mode 100644 scrolling-box-w-scroll-behavior/README.markdown create mode 100644 scrolling-box-w-scroll-behavior/dist/index.html create mode 100644 scrolling-box-w-scroll-behavior/dist/style.css create mode 100644 scrolling-box-w-scroll-behavior/license.txt create mode 100644 scrolling-box-w-scroll-behavior/src/index.html create mode 100644 scrolling-box-w-scroll-behavior/src/style.css create mode 100644 scrolling-grid/README.markdown create mode 100644 scrolling-grid/dist/index.html create mode 100644 scrolling-grid/dist/style.css create mode 100644 scrolling-grid/license.txt create mode 100644 scrolling-grid/src/index.html create mode 100644 scrolling-grid/src/style.scss create mode 100644 scrolly-carousel-example-7/README.markdown create mode 100644 scrolly-carousel-example-7/dist/index.html create mode 100644 scrolly-carousel-example-7/dist/style.css create mode 100644 scrolly-carousel-example-7/license.txt create mode 100644 scrolly-carousel-example-7/src/index.html create mode 100644 scrolly-carousel-example-7/src/style.scss create mode 100644 search-algorithm-puppy/README.markdown create mode 100644 search-algorithm-puppy/dist/index.html create mode 100644 search-algorithm-puppy/dist/script.js create mode 100644 search-algorithm-puppy/dist/style.css create mode 100644 search-algorithm-puppy/license.txt create mode 100644 search-algorithm-puppy/src/index.html create mode 100644 search-algorithm-puppy/src/script.js create mode 100644 search-algorithm-puppy/src/style.css create mode 100644 selected-demos-2019-2020/README.markdown create mode 100644 selected-demos-2019-2020/dist/index.html create mode 100644 selected-demos-2019-2020/dist/script.js create mode 100644 selected-demos-2019-2020/dist/style.css create mode 100644 selected-demos-2019-2020/license.txt create mode 100644 selected-demos-2019-2020/src/index.haml create mode 100644 selected-demos-2019-2020/src/script.js create mode 100644 selected-demos-2019-2020/src/style.scss create mode 100644 shadow-set/README.markdown create mode 100644 shadow-set/dist/index.html create mode 100644 shadow-set/dist/style.css create mode 100644 shadow-set/license.txt create mode 100644 shadow-set/src/index.html create mode 100644 shadow-set/src/style.scss create mode 100644 shape-outsideface/README.markdown create mode 100644 shape-outsideface/dist/index.html create mode 100644 shape-outsideface/dist/script.js create mode 100644 shape-outsideface/dist/style.css create mode 100644 shape-outsideface/license.txt create mode 100644 shape-outsideface/src/index.html create mode 100644 shape-outsideface/src/script.js create mode 100644 shape-outsideface/src/style.css create mode 100644 simple-css-loaders/README.markdown create mode 100644 simple-css-loaders/dist/index.html create mode 100644 simple-css-loaders/dist/style.css create mode 100644 simple-css-loaders/license.txt create mode 100644 simple-css-loaders/src/index.html create mode 100644 simple-css-loaders/src/style.css create mode 100644 simple-music-app-ui-design/README.markdown create mode 100644 simple-music-app-ui-design/dist/index.html create mode 100644 simple-music-app-ui-design/dist/script.js create mode 100644 simple-music-app-ui-design/dist/style.css create mode 100644 simple-music-app-ui-design/license.txt create mode 100644 simple-music-app-ui-design/src/index.html create mode 100644 simple-music-app-ui-design/src/script.js create mode 100644 simple-music-app-ui-design/src/style.scss create mode 100644 simplex-life-v8/README.markdown create mode 100644 simplex-life-v8/dist/index.html create mode 100644 simplex-life-v8/dist/script.js create mode 100644 simplex-life-v8/dist/style.css create mode 100644 simplex-life-v8/license.txt create mode 100644 simplex-life-v8/src/index.html create mode 100644 simplex-life-v8/src/script.babel create mode 100644 simplex-life-v8/src/style.scss create mode 100644 single-div-css-folded-origami-shop/LICENSE.txt create mode 100644 single-div-css-folded-origami-shop/README.md create mode 100644 single-div-css-folded-origami-shop/dist/index.html create mode 100644 single-div-css-folded-origami-shop/dist/script.js create mode 100644 single-div-css-folded-origami-shop/dist/style.css create mode 100644 single-div-css-folded-origami-shop/src/index.html create mode 100644 single-div-css-folded-origami-shop/src/script.js create mode 100644 single-div-css-folded-origami-shop/src/style.stylus create mode 100644 single-div-flickering-neon-text/README.markdown create mode 100644 single-div-flickering-neon-text/dist/index.html create mode 100644 single-div-flickering-neon-text/dist/script.js create mode 100644 single-div-flickering-neon-text/dist/style.css create mode 100644 single-div-flickering-neon-text/license.txt create mode 100644 single-div-flickering-neon-text/src/index.html create mode 100644 single-div-flickering-neon-text/src/script.js create mode 100644 single-div-flickering-neon-text/src/style.scss create mode 100644 skateboard-video-platform/README.markdown create mode 100644 skateboard-video-platform/dist/index.html create mode 100644 skateboard-video-platform/dist/script.js create mode 100644 skateboard-video-platform/dist/style.css create mode 100644 skateboard-video-platform/license.txt create mode 100644 skateboard-video-platform/src/index.html create mode 100644 skateboard-video-platform/src/script.js create mode 100644 skateboard-video-platform/src/style.scss create mode 100644 slack-discord-cyberpunk-2077-redesign-w-preact/README.markdown create mode 100644 slack-discord-cyberpunk-2077-redesign-w-preact/dist/index.html create mode 100644 slack-discord-cyberpunk-2077-redesign-w-preact/dist/script.js create mode 100644 slack-discord-cyberpunk-2077-redesign-w-preact/dist/style.css create mode 100644 slack-discord-cyberpunk-2077-redesign-w-preact/license.txt create mode 100644 slack-discord-cyberpunk-2077-redesign-w-preact/src/index.html create mode 100644 slack-discord-cyberpunk-2077-redesign-w-preact/src/script.babel create mode 100644 slack-discord-cyberpunk-2077-redesign-w-preact/src/style.css create mode 100644 slide-out-toggle-menu/README.markdown create mode 100644 slide-out-toggle-menu/dist/index.html create mode 100644 slide-out-toggle-menu/dist/script.js create mode 100644 slide-out-toggle-menu/dist/style.css create mode 100644 slide-out-toggle-menu/license.txt create mode 100644 slide-out-toggle-menu/src/index.html create mode 100644 slide-out-toggle-menu/src/script.js create mode 100644 slide-out-toggle-menu/src/style.scss create mode 100644 sliding-image-track/LICENSE.txt create mode 100644 sliding-image-track/README.md create mode 100644 sliding-image-track/dist/index.html create mode 100644 sliding-image-track/dist/script.js create mode 100644 sliding-image-track/dist/style.css create mode 100644 sliding-image-track/src/index.html create mode 100644 sliding-image-track/src/script.js create mode 100644 sliding-image-track/src/style.css create mode 100644 smart-home-temperature-slider/README.markdown create mode 100644 smart-home-temperature-slider/dist/index.html create mode 100644 smart-home-temperature-slider/dist/script.js create mode 100644 smart-home-temperature-slider/dist/style.css create mode 100644 smart-home-temperature-slider/license.txt create mode 100644 smart-home-temperature-slider/src/index.html create mode 100644 smart-home-temperature-slider/src/script.js create mode 100644 smart-home-temperature-slider/src/style.css create mode 100644 smoothie-app/README.markdown create mode 100644 smoothie-app/dist/index.html create mode 100644 smoothie-app/dist/script.js create mode 100644 smoothie-app/dist/style.css create mode 100644 smoothie-app/license.txt create mode 100644 smoothie-app/src/index.html create mode 100644 smoothie-app/src/script.js create mode 100644 smoothie-app/src/style.css create mode 100644 snowflake/README.markdown create mode 100644 snowflake/dist/index.html create mode 100644 snowflake/dist/script.js create mode 100644 snowflake/dist/style.css create mode 100644 snowflake/license.txt create mode 100644 snowflake/src/index.html create mode 100644 snowflake/src/script.js create mode 100644 snowflake/src/style.css create mode 100644 sorted-css-colors/README.markdown create mode 100644 sorted-css-colors/dist/index.html create mode 100644 sorted-css-colors/dist/script.js create mode 100644 sorted-css-colors/dist/style.css create mode 100644 sorted-css-colors/license.txt create mode 100644 sorted-css-colors/src/index.html create mode 100644 sorted-css-colors/src/script.babel create mode 100644 sorted-css-colors/src/style.scss create mode 100644 space-travel/README.markdown create mode 100644 space-travel/dist/index.html create mode 100644 space-travel/dist/script.js create mode 100644 space-travel/dist/style.css create mode 100644 space-travel/license.txt create mode 100644 space-travel/src/index.html create mode 100644 space-travel/src/script.js create mode 100644 space-travel/src/style.scss create mode 100644 speech-bubbles/README.markdown create mode 100644 speech-bubbles/dist/index.html create mode 100644 speech-bubbles/dist/style.css create mode 100644 speech-bubbles/license.txt create mode 100644 speech-bubbles/src/index.html create mode 100644 speech-bubbles/src/style.css create mode 100644 sphere-of-boxes-three-js/README.markdown create mode 100644 sphere-of-boxes-three-js/dist/blgjlm.js create mode 100644 sphere-of-boxes-three-js/dist/index.html create mode 100644 sphere-of-boxes-three-js/dist/script.js create mode 100644 sphere-of-boxes-three-js/dist/style.css create mode 100644 sphere-of-boxes-three-js/dist/zvdzgv.js create mode 100644 sphere-of-boxes-three-js/license.txt create mode 100644 sphere-of-boxes-three-js/src/blgjlm.js create mode 100644 sphere-of-boxes-three-js/src/index.html create mode 100644 sphere-of-boxes-three-js/src/script.babel create mode 100644 sphere-of-boxes-three-js/src/style.css create mode 100644 sphere-of-boxes-three-js/src/zvdzgv.js create mode 100644 spider-verse-dots/README.markdown create mode 100644 spider-verse-dots/dist/index.html create mode 100644 spider-verse-dots/dist/script.js create mode 100644 spider-verse-dots/dist/style.css create mode 100644 spider-verse-dots/license.txt create mode 100644 spider-verse-dots/src/index.html create mode 100644 spider-verse-dots/src/script.babel create mode 100644 spider-verse-dots/src/style.scss create mode 100644 spiral-fractal-experiment-v2/README.markdown create mode 100644 spiral-fractal-experiment-v2/dist/index.html create mode 100644 spiral-fractal-experiment-v2/dist/script.js create mode 100644 spiral-fractal-experiment-v2/dist/style.css create mode 100644 spiral-fractal-experiment-v2/license.txt create mode 100644 spiral-fractal-experiment-v2/src/index.html create mode 100644 spiral-fractal-experiment-v2/src/script.js create mode 100644 spiral-fractal-experiment-v2/src/style.css create mode 100644 spirited-away-bathhouse-aburaya3d-css/README.markdown create mode 100644 spirited-away-bathhouse-aburaya3d-css/dist/index.html create mode 100644 spirited-away-bathhouse-aburaya3d-css/dist/style.css create mode 100644 spirited-away-bathhouse-aburaya3d-css/license.txt create mode 100644 spirited-away-bathhouse-aburaya3d-css/src/index.haml create mode 100644 spirited-away-bathhouse-aburaya3d-css/src/style.scss create mode 100644 splitting-laser-write/README.markdown create mode 100644 splitting-laser-write/dist/5eb6d4e9bfd78e3911ed9d0d0.js create mode 100644 splitting-laser-write/dist/index.html create mode 100644 splitting-laser-write/dist/script.js create mode 100644 splitting-laser-write/dist/style.css create mode 100644 splitting-laser-write/license.txt create mode 100644 splitting-laser-write/src/5eb6d4e9bfd78e3911ed9d0d0.js create mode 100644 splitting-laser-write/src/index.html create mode 100644 splitting-laser-write/src/script.js create mode 100644 splitting-laser-write/src/style.css create mode 100644 squircles/README.markdown create mode 100644 squircles/dist/index.html create mode 100644 squircles/dist/script.js create mode 100644 squircles/dist/style.css create mode 100644 squircles/license.txt create mode 100644 squircles/src/index.html create mode 100644 squircles/src/script.js create mode 100644 squircles/src/style.scss create mode 100644 squishy-toggle-buttons/README.markdown create mode 100644 squishy-toggle-buttons/dist/index.html create mode 100644 squishy-toggle-buttons/dist/script.js create mode 100644 squishy-toggle-buttons/dist/style.css create mode 100644 squishy-toggle-buttons/license.txt create mode 100644 squishy-toggle-buttons/src/index.html create mode 100644 squishy-toggle-buttons/src/script.coffee create mode 100644 squishy-toggle-buttons/src/style.sass create mode 100644 stacked-flexible-slides-layout/README.markdown create mode 100644 stacked-flexible-slides-layout/dist/index.html create mode 100644 stacked-flexible-slides-layout/dist/style.css create mode 100644 stacked-flexible-slides-layout/license.txt create mode 100644 stacked-flexible-slides-layout/src/index.html create mode 100644 stacked-flexible-slides-layout/src/style.css create mode 100644 stacking-cards/README.markdown create mode 100644 stacking-cards/dist/index.html create mode 100644 stacking-cards/dist/script.js create mode 100644 stacking-cards/dist/style.css create mode 100644 stacking-cards/license.txt create mode 100644 stacking-cards/src/index.html create mode 100644 stacking-cards/src/script.js create mode 100644 stacking-cards/src/style.css create mode 100644 staggered-cubes/README.markdown create mode 100644 staggered-cubes/dist/index.html create mode 100644 staggered-cubes/dist/script.js create mode 100644 staggered-cubes/dist/style.css create mode 100644 staggered-cubes/license.txt create mode 100644 staggered-cubes/src/index.pug create mode 100644 staggered-cubes/src/script.babel create mode 100644 staggered-cubes/src/style.styl create mode 100644 stay-true/README.markdown create mode 100644 stay-true/dist/index.html create mode 100644 stay-true/dist/script.js create mode 100644 stay-true/dist/style.css create mode 100644 stay-true/license.txt create mode 100644 stay-true/src/index.haml create mode 100644 stay-true/src/script.js create mode 100644 stay-true/src/style.scss create mode 100644 sticky-cards/LICENSE.txt create mode 100644 sticky-cards/README.md create mode 100644 sticky-cards/dist/index.html create mode 100644 sticky-cards/dist/style.css create mode 100644 sticky-cards/src/index.pug create mode 100644 sticky-cards/src/style.scss create mode 100644 sticky-photostack/README.markdown create mode 100644 sticky-photostack/dist/index.html create mode 100644 sticky-photostack/dist/style.css create mode 100644 sticky-photostack/license.txt create mode 100644 sticky-photostack/src/index.pug create mode 100644 sticky-photostack/src/style.scss create mode 100644 sticky-portals/README.markdown create mode 100644 sticky-portals/dist/index.html create mode 100644 sticky-portals/dist/script.js create mode 100644 sticky-portals/dist/style.css create mode 100644 sticky-portals/license.txt create mode 100644 sticky-portals/src/index.haml create mode 100644 sticky-portals/src/script.js create mode 100644 sticky-portals/src/style.scss create mode 100644 striped-art-for-cpc-lines-and-codepenchallenge/README.markdown create mode 100644 striped-art-for-cpc-lines-and-codepenchallenge/dist/index.html create mode 100644 striped-art-for-cpc-lines-and-codepenchallenge/dist/script.js create mode 100644 striped-art-for-cpc-lines-and-codepenchallenge/dist/style.css create mode 100644 striped-art-for-cpc-lines-and-codepenchallenge/license.txt create mode 100644 striped-art-for-cpc-lines-and-codepenchallenge/src/index.haml create mode 100644 striped-art-for-cpc-lines-and-codepenchallenge/src/script.js create mode 100644 striped-art-for-cpc-lines-and-codepenchallenge/src/style.sass create mode 100644 styled-color-input/README.markdown create mode 100644 styled-color-input/dist/index.html create mode 100644 styled-color-input/dist/style.css create mode 100644 styled-color-input/license.txt create mode 100644 styled-color-input/src/index.html create mode 100644 styled-color-input/src/style.css create mode 100644 stylized-buttons/README.markdown create mode 100644 stylized-buttons/dist/index.html create mode 100644 stylized-buttons/dist/style.css create mode 100644 stylized-buttons/license.txt create mode 100644 stylized-buttons/src/index.html create mode 100644 stylized-buttons/src/style.css create mode 100644 sun-rise-moon-rise/README.markdown create mode 100644 sun-rise-moon-rise/dist/index.html create mode 100644 sun-rise-moon-rise/dist/script.js create mode 100644 sun-rise-moon-rise/dist/style.css create mode 100644 sun-rise-moon-rise/license.txt create mode 100644 sun-rise-moon-rise/src/index.html create mode 100644 sun-rise-moon-rise/src/script.js create mode 100644 sun-rise-moon-rise/src/style.css create mode 100644 super-smash-bros-credits/LICENSE.txt create mode 100644 super-smash-bros-credits/README.md create mode 100644 super-smash-bros-credits/dist/index.html create mode 100644 super-smash-bros-credits/dist/script.js create mode 100644 super-smash-bros-credits/dist/style.css create mode 100644 super-smash-bros-credits/src/index.html create mode 100644 super-smash-bros-credits/src/script.js create mode 100644 super-smash-bros-credits/src/style.scss create mode 100644 svg-blob-u-lator/README.markdown create mode 100644 svg-blob-u-lator/dist/index.html create mode 100644 svg-blob-u-lator/dist/script.js create mode 100644 svg-blob-u-lator/dist/style.css create mode 100644 svg-blob-u-lator/license.txt create mode 100644 svg-blob-u-lator/src/index.haml create mode 100644 svg-blob-u-lator/src/script.js create mode 100644 svg-blob-u-lator/src/style.scss create mode 100644 svg-flower-generator/README.markdown create mode 100644 svg-flower-generator/dist/index.html create mode 100644 svg-flower-generator/dist/script.js create mode 100644 svg-flower-generator/dist/style.css create mode 100644 svg-flower-generator/license.txt create mode 100644 svg-flower-generator/src/index.html create mode 100644 svg-flower-generator/src/script.babel create mode 100644 svg-flower-generator/src/style.css create mode 100644 svg-gradient-wave-generator/LICENSE.txt create mode 100644 svg-gradient-wave-generator/README.md create mode 100644 svg-gradient-wave-generator/dist/index.html create mode 100644 svg-gradient-wave-generator/dist/script.js create mode 100644 svg-gradient-wave-generator/dist/style.css create mode 100644 svg-gradient-wave-generator/src/index.html create mode 100644 svg-gradient-wave-generator/src/script.js create mode 100644 svg-gradient-wave-generator/src/style.scss create mode 100644 svg-jigsaw-solver-drag-n-drop-version/README.markdown create mode 100644 svg-jigsaw-solver-drag-n-drop-version/dist/index.html create mode 100644 svg-jigsaw-solver-drag-n-drop-version/dist/script.js create mode 100644 svg-jigsaw-solver-drag-n-drop-version/dist/style.css create mode 100644 svg-jigsaw-solver-drag-n-drop-version/license.txt create mode 100644 svg-jigsaw-solver-drag-n-drop-version/src/index.html create mode 100644 svg-jigsaw-solver-drag-n-drop-version/src/script.js create mode 100644 svg-jigsaw-solver-drag-n-drop-version/src/style.sass create mode 100644 svg-loader/README.markdown create mode 100644 svg-loader/dist/index.html create mode 100644 svg-loader/dist/script.js create mode 100644 svg-loader/dist/style.css create mode 100644 svg-loader/license.txt create mode 100644 svg-loader/src/index.html create mode 100644 svg-loader/src/script.js create mode 100644 svg-loader/src/style.scss create mode 100644 svg-scribblemation/README.markdown create mode 100644 svg-scribblemation/dist/index.html create mode 100644 svg-scribblemation/dist/script.js create mode 100644 svg-scribblemation/dist/style.css create mode 100644 svg-scribblemation/license.txt create mode 100644 svg-scribblemation/src/index.haml create mode 100644 svg-scribblemation/src/script.js create mode 100644 svg-scribblemation/src/style.scss create mode 100644 svg-sphere-animation-with-anime-js/LICENSE.txt create mode 100644 svg-sphere-animation-with-anime-js/README.md create mode 100644 svg-sphere-animation-with-anime-js/dist/index.html create mode 100644 svg-sphere-animation-with-anime-js/dist/script.js create mode 100644 svg-sphere-animation-with-anime-js/dist/style.css create mode 100644 svg-sphere-animation-with-anime-js/src/index.html create mode 100644 svg-sphere-animation-with-anime-js/src/script.js create mode 100644 svg-sphere-animation-with-anime-js/src/style.css create mode 100644 sweater-swag-cpc/README.markdown create mode 100644 sweater-swag-cpc/dist/index.html create mode 100644 sweater-swag-cpc/dist/script.js create mode 100644 sweater-swag-cpc/dist/style.css create mode 100644 sweater-swag-cpc/license.txt create mode 100644 sweater-swag-cpc/src/index.html create mode 100644 sweater-swag-cpc/src/script.js create mode 100644 sweater-swag-cpc/src/style.scss create mode 100644 swipey-gridclearleft/README.markdown create mode 100644 swipey-gridclearleft/dist/index.html create mode 100644 swipey-gridclearleft/dist/script.js create mode 100644 swipey-gridclearleft/dist/style.css create mode 100644 swipey-gridclearleft/license.txt create mode 100644 swipey-gridclearleft/src/index.html create mode 100644 swipey-gridclearleft/src/script.js create mode 100644 swipey-gridclearleft/src/style.css create mode 100644 tab-bar-interaction-1/README.markdown create mode 100644 tab-bar-interaction-1/dist/index.html create mode 100644 tab-bar-interaction-1/dist/script.js create mode 100644 tab-bar-interaction-1/dist/style.css create mode 100644 tab-bar-interaction-1/license.txt create mode 100644 tab-bar-interaction-1/src/index.html create mode 100644 tab-bar-interaction-1/src/script.js create mode 100644 tab-bar-interaction-1/src/style.scss create mode 100644 tabbar-animationonly-css/README.markdown create mode 100644 tabbar-animationonly-css/dist/index.html create mode 100644 tabbar-animationonly-css/dist/style.css create mode 100644 tabbar-animationonly-css/license.txt create mode 100644 tabbar-animationonly-css/src/index.html create mode 100644 tabbar-animationonly-css/src/style.scss create mode 100644 task-management-dashboard-ui/LICENSE.txt create mode 100644 task-management-dashboard-ui/README.md create mode 100644 task-management-dashboard-ui/dist/index.html create mode 100644 task-management-dashboard-ui/dist/style.css create mode 100644 task-management-dashboard-ui/src/index.html create mode 100644 task-management-dashboard-ui/src/style.scss create mode 100644 task-management-ui/LICENSE.txt create mode 100644 task-management-ui/README.md create mode 100644 task-management-ui/dist/index.html create mode 100644 task-management-ui/dist/script.js create mode 100644 task-management-ui/dist/style.css create mode 100644 task-management-ui/src/index.html create mode 100644 task-management-ui/src/script.js create mode 100644 task-management-ui/src/style.scss create mode 100644 test-snowflake/README.markdown create mode 100644 test-snowflake/dist/index.html create mode 100644 test-snowflake/dist/style.css create mode 100644 test-snowflake/license.txt create mode 100644 test-snowflake/src/index.html create mode 100644 test-snowflake/src/style.css create mode 100644 tetradic-truchet/README.markdown create mode 100644 tetradic-truchet/dist/apxlmx.js create mode 100644 tetradic-truchet/dist/index.html create mode 100644 tetradic-truchet/dist/script.js create mode 100644 tetradic-truchet/dist/style.css create mode 100644 tetradic-truchet/license.txt create mode 100644 tetradic-truchet/src/apxlmx.js create mode 100644 tetradic-truchet/src/index.pug create mode 100644 tetradic-truchet/src/script.babel create mode 100644 tetradic-truchet/src/style.scss create mode 100644 tetris/README.markdown create mode 100644 tetris/dist/index.html create mode 100644 tetris/dist/script.js create mode 100644 tetris/dist/style.css create mode 100644 tetris/license.txt create mode 100644 tetris/src/index.html create mode 100644 tetris/src/script.js create mode 100644 tetris/src/style.css create mode 100644 text-grid-with-mouse-interaction-keyframers-3-20/README.markdown create mode 100644 text-grid-with-mouse-interaction-keyframers-3-20/dist/index.html create mode 100644 text-grid-with-mouse-interaction-keyframers-3-20/dist/script.js create mode 100644 text-grid-with-mouse-interaction-keyframers-3-20/dist/style.css create mode 100644 text-grid-with-mouse-interaction-keyframers-3-20/license.txt create mode 100644 text-grid-with-mouse-interaction-keyframers-3-20/src/index.html create mode 100644 text-grid-with-mouse-interaction-keyframers-3-20/src/script.js create mode 100644 text-grid-with-mouse-interaction-keyframers-3-20/src/style.scss create mode 100644 text-hover/README.markdown create mode 100644 text-hover/dist/index.html create mode 100644 text-hover/dist/style.css create mode 100644 text-hover/license.txt create mode 100644 text-hover/src/index.html create mode 100644 text-hover/src/style.css create mode 100644 text-mask-over-colorful-cubes/README.markdown create mode 100644 text-mask-over-colorful-cubes/dist/index.html create mode 100644 text-mask-over-colorful-cubes/dist/script.js create mode 100644 text-mask-over-colorful-cubes/dist/style.css create mode 100644 text-mask-over-colorful-cubes/license.txt create mode 100644 text-mask-over-colorful-cubes/src/index.html create mode 100644 text-mask-over-colorful-cubes/src/script.babel create mode 100644 text-mask-over-colorful-cubes/src/style.css create mode 100644 textarea-with-syntax-highlighting/LICENSE.txt create mode 100644 textarea-with-syntax-highlighting/README.md create mode 100644 textarea-with-syntax-highlighting/dist/index.html create mode 100644 textarea-with-syntax-highlighting/dist/script.js create mode 100644 textarea-with-syntax-highlighting/dist/style.css create mode 100644 textarea-with-syntax-highlighting/src/index.html create mode 100644 textarea-with-syntax-highlighting/src/script.js create mode 100644 textarea-with-syntax-highlighting/src/style.css create mode 100644 texture-challengepen-92020/README.markdown create mode 100644 texture-challengepen-92020/dist/index.html create mode 100644 texture-challengepen-92020/dist/style.css create mode 100644 texture-challengepen-92020/license.txt create mode 100644 texture-challengepen-92020/src/index.pug create mode 100644 texture-challengepen-92020/src/style.sass create mode 100644 the-cat-god/README.markdown create mode 100644 the-cat-god/dist/index.html create mode 100644 the-cat-god/dist/script.js create mode 100644 the-cat-god/dist/style.css create mode 100644 the-cat-god/license.txt create mode 100644 the-cat-god/src/index.html create mode 100644 the-cat-god/src/script.babel create mode 100644 the-cat-god/src/style.css create mode 100644 the-clips-of-css-v2-react-prism/README.markdown create mode 100644 the-clips-of-css-v2-react-prism/dist/index.html create mode 100644 the-clips-of-css-v2-react-prism/dist/script.js create mode 100644 the-clips-of-css-v2-react-prism/dist/style.css create mode 100644 the-clips-of-css-v2-react-prism/license.txt create mode 100644 the-clips-of-css-v2-react-prism/src/index.pug create mode 100644 the-clips-of-css-v2-react-prism/src/script.babel create mode 100644 the-clips-of-css-v2-react-prism/src/style.styl create mode 100644 the-cube-of-cubes-css-only/LICENSE.txt create mode 100644 the-cube-of-cubes-css-only/README.md create mode 100644 the-cube-of-cubes-css-only/dist/index.html create mode 100644 the-cube-of-cubes-css-only/dist/style.css create mode 100644 the-cube-of-cubes-css-only/src/index.html create mode 100644 the-cube-of-cubes-css-only/src/style.scss create mode 100644 the-cube/README.markdown create mode 100644 the-cube/dist/index.html create mode 100644 the-cube/dist/script.js create mode 100644 the-cube/dist/style.css create mode 100644 the-cube/license.txt create mode 100644 the-cube/src/index.html create mode 100644 the-cube/src/script.js create mode 100644 the-cube/src/style.sass create mode 100644 the-div-that-look-different-in-every-browser/README.markdown create mode 100644 the-div-that-look-different-in-every-browser/dist/index.html create mode 100644 the-div-that-look-different-in-every-browser/dist/script.js create mode 100644 the-div-that-look-different-in-every-browser/dist/style.css create mode 100644 the-div-that-look-different-in-every-browser/license.txt create mode 100644 the-div-that-look-different-in-every-browser/src/index.html create mode 100644 the-div-that-look-different-in-every-browser/src/script.js create mode 100644 the-div-that-look-different-in-every-browser/src/style.css create mode 100644 the-dots-vs-the-bars/README.markdown create mode 100644 the-dots-vs-the-bars/dist/index.html create mode 100644 the-dots-vs-the-bars/dist/style.css create mode 100644 the-dots-vs-the-bars/license.txt create mode 100644 the-dots-vs-the-bars/src/index.html create mode 100644 the-dots-vs-the-bars/src/style.css create mode 100644 the-flame-keeps-burning/README.markdown create mode 100644 the-flame-keeps-burning/dist/index.html create mode 100644 the-flame-keeps-burning/dist/script.js create mode 100644 the-flame-keeps-burning/dist/style.css create mode 100644 the-flame-keeps-burning/license.txt create mode 100644 the-flame-keeps-burning/src/index.html create mode 100644 the-flame-keeps-burning/src/script.js create mode 100644 the-flame-keeps-burning/src/style.css create mode 100644 the-goo-filter-illustrated/README.markdown create mode 100644 the-goo-filter-illustrated/dist/index.html create mode 100644 the-goo-filter-illustrated/dist/script.js create mode 100644 the-goo-filter-illustrated/dist/style.css create mode 100644 the-goo-filter-illustrated/license.txt create mode 100644 the-goo-filter-illustrated/src/index.html create mode 100644 the-goo-filter-illustrated/src/script.js create mode 100644 the-goo-filter-illustrated/src/style.css create mode 100644 the-matrix-resurrections-sparklingman-digital-poster-026/README.markdown create mode 100644 the-matrix-resurrections-sparklingman-digital-poster-026/dist/index.html create mode 100644 the-matrix-resurrections-sparklingman-digital-poster-026/dist/script.js create mode 100644 the-matrix-resurrections-sparklingman-digital-poster-026/dist/style.css create mode 100644 the-matrix-resurrections-sparklingman-digital-poster-026/license.txt create mode 100644 the-matrix-resurrections-sparklingman-digital-poster-026/src/index.haml create mode 100644 the-matrix-resurrections-sparklingman-digital-poster-026/src/script.js create mode 100644 the-matrix-resurrections-sparklingman-digital-poster-026/src/style.css create mode 100644 the-power-of-inherit/README.markdown create mode 100644 the-power-of-inherit/dist/index.html create mode 100644 the-power-of-inherit/dist/script.js create mode 100644 the-power-of-inherit/dist/style.css create mode 100644 the-power-of-inherit/license.txt create mode 100644 the-power-of-inherit/src/index.html create mode 100644 the-power-of-inherit/src/script.js create mode 100644 the-power-of-inherit/src/style.scss create mode 100644 the-web-artisan-society-2/README.markdown create mode 100644 the-web-artisan-society-2/dist/index.html create mode 100644 the-web-artisan-society-2/dist/style.css create mode 100644 the-web-artisan-society-2/license.txt create mode 100644 the-web-artisan-society-2/src/index.html create mode 100644 the-web-artisan-society-2/src/style.css create mode 100644 three-js-dancing-tree-for-xmas/README.markdown create mode 100644 three-js-dancing-tree-for-xmas/dist/index.html create mode 100644 three-js-dancing-tree-for-xmas/dist/script.js create mode 100644 three-js-dancing-tree-for-xmas/dist/style.css create mode 100644 three-js-dancing-tree-for-xmas/license.txt create mode 100644 three-js-dancing-tree-for-xmas/src/index.html create mode 100644 three-js-dancing-tree-for-xmas/src/script.babel create mode 100644 three-js-dancing-tree-for-xmas/src/style.css create mode 100644 tiles-with-a-mediterranean-vibe/README.markdown create mode 100644 tiles-with-a-mediterranean-vibe/dist/index.html create mode 100644 tiles-with-a-mediterranean-vibe/dist/script.js create mode 100644 tiles-with-a-mediterranean-vibe/dist/style.css create mode 100644 tiles-with-a-mediterranean-vibe/license.txt create mode 100644 tiles-with-a-mediterranean-vibe/src/index.html create mode 100644 tiles-with-a-mediterranean-vibe/src/script.babel create mode 100644 tiles-with-a-mediterranean-vibe/src/style.scss create mode 100644 tilt-to-make-room-for-menu/README.markdown create mode 100644 tilt-to-make-room-for-menu/dist/index.html create mode 100644 tilt-to-make-room-for-menu/dist/script.js create mode 100644 tilt-to-make-room-for-menu/dist/style.css create mode 100644 tilt-to-make-room-for-menu/license.txt create mode 100644 tilt-to-make-room-for-menu/src/index.html create mode 100644 tilt-to-make-room-for-menu/src/script.js create mode 100644 tilt-to-make-room-for-menu/src/style.css create mode 100644 tiny-but-accessible-5-star-rating/README.markdown create mode 100644 tiny-but-accessible-5-star-rating/dist/index.html create mode 100644 tiny-but-accessible-5-star-rating/dist/style.css create mode 100644 tiny-but-accessible-5-star-rating/license.txt create mode 100644 tiny-but-accessible-5-star-rating/src/index.html create mode 100644 tiny-but-accessible-5-star-rating/src/style.scss create mode 100644 to-stick-and-stand/README.markdown create mode 100644 to-stick-and-stand/dist/index.html create mode 100644 to-stick-and-stand/dist/script.js create mode 100644 to-stick-and-stand/dist/style.css create mode 100644 to-stick-and-stand/license.txt create mode 100644 to-stick-and-stand/src/index.html create mode 100644 to-stick-and-stand/src/script.js create mode 100644 to-stick-and-stand/src/style.css create mode 100644 toggle-animation-with-css-state-machines-live-collaborative-coding-with-the-keyframers-2-32-0/README.markdown create mode 100644 toggle-animation-with-css-state-machines-live-collaborative-coding-with-the-keyframers-2-32-0/dist/index.html create mode 100644 toggle-animation-with-css-state-machines-live-collaborative-coding-with-the-keyframers-2-32-0/dist/script.js create mode 100644 toggle-animation-with-css-state-machines-live-collaborative-coding-with-the-keyframers-2-32-0/dist/style.css create mode 100644 toggle-animation-with-css-state-machines-live-collaborative-coding-with-the-keyframers-2-32-0/license.txt create mode 100644 toggle-animation-with-css-state-machines-live-collaborative-coding-with-the-keyframers-2-32-0/src/index.html create mode 100644 toggle-animation-with-css-state-machines-live-collaborative-coding-with-the-keyframers-2-32-0/src/script.js create mode 100644 toggle-animation-with-css-state-machines-live-collaborative-coding-with-the-keyframers-2-32-0/src/style.scss create mode 100644 toggle-checkbox-without-label/README.markdown create mode 100644 toggle-checkbox-without-label/dist/index.html create mode 100644 toggle-checkbox-without-label/dist/style.css create mode 100644 toggle-checkbox-without-label/license.txt create mode 100644 toggle-checkbox-without-label/src/index.html create mode 100644 toggle-checkbox-without-label/src/style.sass create mode 100644 toggle/README.markdown create mode 100644 toggle/dist/index.html create mode 100644 toggle/dist/script.js create mode 100644 toggle/dist/style.css create mode 100644 toggle/license.txt create mode 100644 toggle/src/index.html create mode 100644 toggle/src/script.js create mode 100644 toggle/src/style.css create mode 100644 toggles/README.markdown create mode 100644 toggles/dist/index.html create mode 100644 toggles/dist/style.css create mode 100644 toggles/license.txt create mode 100644 toggles/src/index.pug create mode 100644 toggles/src/style.scss create mode 100644 tooltip-appear/README.markdown create mode 100644 tooltip-appear/dist/index.html create mode 100644 tooltip-appear/dist/script.js create mode 100644 tooltip-appear/dist/style.css create mode 100644 tooltip-appear/license.txt create mode 100644 tooltip-appear/src/index.html create mode 100644 tooltip-appear/src/script.js create mode 100644 tooltip-appear/src/style.css create mode 100644 toon-fire-shader/README.markdown create mode 100644 toon-fire-shader/dist/index.html create mode 100644 toon-fire-shader/dist/script.js create mode 100644 toon-fire-shader/dist/style.css create mode 100644 toon-fire-shader/license.txt create mode 100644 toon-fire-shader/src/index.html create mode 100644 toon-fire-shader/src/script.js create mode 100644 toon-fire-shader/src/style.css create mode 100644 toon-fireball/README.markdown create mode 100644 toon-fireball/dist/index.html create mode 100644 toon-fireball/dist/script.js create mode 100644 toon-fireball/dist/style.css create mode 100644 toon-fireball/license.txt create mode 100644 toon-fireball/src/index.html create mode 100644 toon-fireball/src/script.babel create mode 100644 toon-fireball/src/style.css create mode 100644 tracked-session-schedule-with-css-grid-v1/README.markdown create mode 100644 tracked-session-schedule-with-css-grid-v1/dist/index.html create mode 100644 tracked-session-schedule-with-css-grid-v1/dist/style.css create mode 100644 tracked-session-schedule-with-css-grid-v1/license.txt create mode 100644 tracked-session-schedule-with-css-grid-v1/src/index.html create mode 100644 tracked-session-schedule-with-css-grid-v1/src/style.css create mode 100644 travel/README.markdown create mode 100644 travel/dist/https___raw_githubusercon.css create mode 100644 travel/dist/index.html create mode 100644 travel/dist/script.js create mode 100644 travel/license.txt create mode 100644 travel/src/https___raw_githubusercon.css create mode 100644 travel/src/index.html create mode 100644 travel/src/script.js create mode 100644 troisjs-starfield/README.markdown create mode 100644 troisjs-starfield/dist/index.html create mode 100644 troisjs-starfield/dist/script.js create mode 100644 troisjs-starfield/dist/style.css create mode 100644 troisjs-starfield/license.txt create mode 100644 troisjs-starfield/src/index.html create mode 100644 troisjs-starfield/src/script.js create mode 100644 troisjs-starfield/src/style.css create mode 100644 turbulence/README.markdown create mode 100644 turbulence/dist/index.html create mode 100644 turbulence/dist/script.js create mode 100644 turbulence/dist/style.css create mode 100644 turbulence/license.txt create mode 100644 turbulence/src/index.html create mode 100644 turbulence/src/script.babel create mode 100644 turbulence/src/style.scss create mode 100644 turkey/README.markdown create mode 100644 turkey/dist/index.html create mode 100644 turkey/dist/style.css create mode 100644 turkey/license.txt create mode 100644 turkey/src/index.html create mode 100644 turkey/src/style.css create mode 100644 turnsolepure-javascript/README.markdown create mode 100644 turnsolepure-javascript/dist/index.html create mode 100644 turnsolepure-javascript/dist/script.js create mode 100644 turnsolepure-javascript/dist/style.css create mode 100644 turnsolepure-javascript/license.txt create mode 100644 turnsolepure-javascript/src/index.html create mode 100644 turnsolepure-javascript/src/script.js create mode 100644 turnsolepure-javascript/src/style.css create mode 100644 types-of-coffee-pure-css/README.markdown create mode 100644 types-of-coffee-pure-css/dist/index.html create mode 100644 types-of-coffee-pure-css/dist/style.css create mode 100644 types-of-coffee-pure-css/license.txt create mode 100644 types-of-coffee-pure-css/src/index.html create mode 100644 types-of-coffee-pure-css/src/style.scss create mode 100644 typesetting-hover-over-the-text/README.markdown create mode 100644 typesetting-hover-over-the-text/dist/index.html create mode 100644 typesetting-hover-over-the-text/dist/script.js create mode 100644 typesetting-hover-over-the-text/dist/style.css create mode 100644 typesetting-hover-over-the-text/license.txt create mode 100644 typesetting-hover-over-the-text/src/index.html create mode 100644 typesetting-hover-over-the-text/src/script.js create mode 100644 typesetting-hover-over-the-text/src/style.less create mode 100644 ui-design-stats-dashboard/README.markdown create mode 100644 ui-design-stats-dashboard/dist/index.html create mode 100644 ui-design-stats-dashboard/dist/script.js create mode 100644 ui-design-stats-dashboard/dist/style.css create mode 100644 ui-design-stats-dashboard/license.txt create mode 100644 ui-design-stats-dashboard/src/index.pug create mode 100644 ui-design-stats-dashboard/src/script.js create mode 100644 ui-design-stats-dashboard/src/style.scss create mode 100644 ui-design-wedding-planning-app/README.markdown create mode 100644 ui-design-wedding-planning-app/dist/index.html create mode 100644 ui-design-wedding-planning-app/dist/script.js create mode 100644 ui-design-wedding-planning-app/dist/style.css create mode 100644 ui-design-wedding-planning-app/license.txt create mode 100644 ui-design-wedding-planning-app/src/index.pug create mode 100644 ui-design-wedding-planning-app/src/script.js create mode 100644 ui-design-wedding-planning-app/src/style.scss create mode 100644 vacation-todo-list/README.markdown create mode 100644 vacation-todo-list/dist/index.html create mode 100644 vacation-todo-list/dist/script.js create mode 100644 vacation-todo-list/dist/style.css create mode 100644 vacation-todo-list/license.txt create mode 100644 vacation-todo-list/src/index.html create mode 100644 vacation-todo-list/src/script.js create mode 100644 vacation-todo-list/src/style.scss create mode 100644 vhs-stuck/README.markdown create mode 100644 vhs-stuck/dist/index.html create mode 100644 vhs-stuck/dist/script.js create mode 100644 vhs-stuck/dist/style.css create mode 100644 vhs-stuck/license.txt create mode 100644 vhs-stuck/src/index.html create mode 100644 vhs-stuck/src/script.js create mode 100644 vhs-stuck/src/style.css create mode 100644 video-blend-modes-cool-modal/README.markdown create mode 100644 video-blend-modes-cool-modal/dist/index.html create mode 100644 video-blend-modes-cool-modal/dist/script.js create mode 100644 video-blend-modes-cool-modal/dist/style.css create mode 100644 video-blend-modes-cool-modal/license.txt create mode 100644 video-blend-modes-cool-modal/src/index.haml create mode 100644 video-blend-modes-cool-modal/src/script.js create mode 100644 video-blend-modes-cool-modal/src/style.scss create mode 100644 visual-representation-of-color-names-in-different-color-models/LICENSE.txt create mode 100644 visual-representation-of-color-names-in-different-color-models/README.md create mode 100644 visual-representation-of-color-names-in-different-color-models/dist/index.html create mode 100644 visual-representation-of-color-names-in-different-color-models/dist/script.js create mode 100644 visual-representation-of-color-names-in-different-color-models/dist/style.css create mode 100644 visual-representation-of-color-names-in-different-color-models/src/index.pug create mode 100644 visual-representation-of-color-names-in-different-color-models/src/script.js create mode 100644 visual-representation-of-color-names-in-different-color-models/src/style.scss create mode 100644 visualizing-the-sun-s-path-in-the-sky/README.markdown create mode 100644 visualizing-the-sun-s-path-in-the-sky/dist/index.html create mode 100644 visualizing-the-sun-s-path-in-the-sky/dist/script.js create mode 100644 visualizing-the-sun-s-path-in-the-sky/dist/style.css create mode 100644 visualizing-the-sun-s-path-in-the-sky/license.txt create mode 100644 visualizing-the-sun-s-path-in-the-sky/src/index.html create mode 100644 visualizing-the-sun-s-path-in-the-sky/src/script.babel create mode 100644 visualizing-the-sun-s-path-in-the-sky/src/style.scss create mode 100644 vocsselseasily-create-3d-css-html-voxel-models/README.markdown create mode 100644 vocsselseasily-create-3d-css-html-voxel-models/dist/index.html create mode 100644 vocsselseasily-create-3d-css-html-voxel-models/dist/script.js create mode 100644 vocsselseasily-create-3d-css-html-voxel-models/dist/style.css create mode 100644 vocsselseasily-create-3d-css-html-voxel-models/license.txt create mode 100644 vocsselseasily-create-3d-css-html-voxel-models/src/index.haml create mode 100644 vocsselseasily-create-3d-css-html-voxel-models/src/script.js create mode 100644 vocsselseasily-create-3d-css-html-voxel-models/src/style.scss create mode 100644 volumes/README.markdown create mode 100644 volumes/dist/index.html create mode 100644 volumes/dist/script.js create mode 100644 volumes/dist/style.css create mode 100644 volumes/license.txt create mode 100644 volumes/src/index.html create mode 100644 volumes/src/script.js create mode 100644 volumes/src/style.css create mode 100644 vortex-lines/README.markdown create mode 100644 vortex-lines/dist/index.html create mode 100644 vortex-lines/dist/script.js create mode 100644 vortex-lines/dist/style.css create mode 100644 vortex-lines/license.txt create mode 100644 vortex-lines/src/index.html create mode 100644 vortex-lines/src/script.ts create mode 100644 vortex-lines/src/style.scss create mode 100644 voyage-slider-gsap/README.markdown create mode 100644 voyage-slider-gsap/dist/index.html create mode 100644 voyage-slider-gsap/dist/script.js create mode 100644 voyage-slider-gsap/dist/style.css create mode 100644 voyage-slider-gsap/license.txt create mode 100644 voyage-slider-gsap/src/index.html create mode 100644 voyage-slider-gsap/src/script.js create mode 100644 voyage-slider-gsap/src/style.scss create mode 100644 vue-slider-ui-interaction/README.markdown create mode 100644 vue-slider-ui-interaction/dist/index.html create mode 100644 vue-slider-ui-interaction/dist/script.js create mode 100644 vue-slider-ui-interaction/dist/style.css create mode 100644 vue-slider-ui-interaction/license.txt create mode 100644 vue-slider-ui-interaction/src/index.html create mode 100644 vue-slider-ui-interaction/src/script.js create mode 100644 vue-slider-ui-interaction/src/style.scss create mode 100644 wacky-buttons-3/README.markdown create mode 100644 wacky-buttons-3/dist/index.html create mode 100644 wacky-buttons-3/dist/script.js create mode 100644 wacky-buttons-3/dist/style.css create mode 100644 wacky-buttons-3/license.txt create mode 100644 wacky-buttons-3/src/index.html create mode 100644 wacky-buttons-3/src/script.js create mode 100644 wacky-buttons-3/src/style.scss create mode 100644 walkershow-to/README.markdown create mode 100644 walkershow-to/dist/index.html create mode 100644 walkershow-to/dist/script.js create mode 100644 walkershow-to/dist/style.css create mode 100644 walkershow-to/license.txt create mode 100644 walkershow-to/src/index.html create mode 100644 walkershow-to/src/script.js create mode 100644 walkershow-to/src/style.scss create mode 100644 wandering-through-a-generative-twilight-landscape/README.markdown create mode 100644 wandering-through-a-generative-twilight-landscape/dist/index.html create mode 100644 wandering-through-a-generative-twilight-landscape/dist/script.js create mode 100644 wandering-through-a-generative-twilight-landscape/dist/style.css create mode 100644 wandering-through-a-generative-twilight-landscape/license.txt create mode 100644 wandering-through-a-generative-twilight-landscape/src/index.html create mode 100644 wandering-through-a-generative-twilight-landscape/src/script.js create mode 100644 wandering-through-a-generative-twilight-landscape/src/style.css create mode 100644 water-bending/README.markdown create mode 100644 water-bending/dist/index.html create mode 100644 water-bending/dist/script.js create mode 100644 water-bending/license.txt create mode 100644 water-bending/src/index.html create mode 100644 water-bending/src/script.js create mode 100644 waves096-of-100days100projects/README.markdown create mode 100644 waves096-of-100days100projects/dist/index.html create mode 100644 waves096-of-100days100projects/dist/script.js create mode 100644 waves096-of-100days100projects/dist/style.css create mode 100644 waves096-of-100days100projects/license.txt create mode 100644 waves096-of-100days100projects/src/index.html create mode 100644 waves096-of-100days100projects/src/script.js create mode 100644 waves096-of-100days100projects/src/style.css create mode 100644 webgl-markers/README.markdown create mode 100644 webgl-markers/dist/index.html create mode 100644 webgl-markers/dist/script.js create mode 100644 webgl-markers/license.txt create mode 100644 webgl-markers/src/index.html create mode 100644 webgl-markers/src/script.js create mode 100644 webpack-zdog/README.markdown create mode 100644 webpack-zdog/dist/index.html create mode 100644 webpack-zdog/dist/script.js create mode 100644 webpack-zdog/dist/style.css create mode 100644 webpack-zdog/license.txt create mode 100644 webpack-zdog/src/index.html create mode 100644 webpack-zdog/src/script.js create mode 100644 webpack-zdog/src/style.css create mode 100644 what-s-behind/README.markdown create mode 100644 what-s-behind/dist/index.html create mode 100644 what-s-behind/dist/script.js create mode 100644 what-s-behind/dist/style.css create mode 100644 what-s-behind/license.txt create mode 100644 what-s-behind/src/index.html create mode 100644 what-s-behind/src/script.babel create mode 100644 what-s-behind/src/style.css create mode 100644 when-you-can-t-decide/README.markdown create mode 100644 when-you-can-t-decide/dist/index.html create mode 100644 when-you-can-t-decide/dist/script.js create mode 100644 when-you-can-t-decide/dist/style.css create mode 100644 when-you-can-t-decide/license.txt create mode 100644 when-you-can-t-decide/src/index.html create mode 100644 when-you-can-t-decide/src/script.babel create mode 100644 when-you-can-t-decide/src/style.scss create mode 100644 wip-motion-blur-transition/README.markdown create mode 100644 wip-motion-blur-transition/dist/index.html create mode 100644 wip-motion-blur-transition/dist/script.js create mode 100644 wip-motion-blur-transition/dist/style.css create mode 100644 wip-motion-blur-transition/license.txt create mode 100644 wip-motion-blur-transition/src/index.html create mode 100644 wip-motion-blur-transition/src/script.js create mode 100644 wip-motion-blur-transition/src/style.css create mode 100644 wobble/README.markdown create mode 100644 wobble/dist/index.html create mode 100644 wobble/dist/script.js create mode 100644 wobble/dist/style.css create mode 100644 wobble/license.txt create mode 100644 wobble/src/index.html create mode 100644 wobble/src/script.js create mode 100644 wobble/src/style.css create mode 100644 wonderland/README.markdown create mode 100644 wonderland/dist/index.html create mode 100644 wonderland/dist/script.js create mode 100644 wonderland/dist/style.css create mode 100644 wonderland/license.txt create mode 100644 wonderland/src/index.html create mode 100644 wonderland/src/script.js create mode 100644 wonderland/src/style.scss create mode 100644 zdog-and-goo/README.markdown create mode 100644 zdog-and-goo/dist/index.html create mode 100644 zdog-and-goo/dist/script.js create mode 100644 zdog-and-goo/dist/style.css create mode 100644 zdog-and-goo/license.txt create mode 100644 zdog-and-goo/src/index.html create mode 100644 zdog-and-goo/src/script.js create mode 100644 zdog-and-goo/src/style.css create mode 100644 zdog-space-scene/README.markdown create mode 100644 zdog-space-scene/dist/f7248f1855b6b3ac41fc1799b.js create mode 100644 zdog-space-scene/dist/index.html create mode 100644 zdog-space-scene/dist/script.js create mode 100644 zdog-space-scene/dist/style.css create mode 100644 zdog-space-scene/license.txt create mode 100644 zdog-space-scene/src/f7248f1855b6b3ac41fc1799b.js create mode 100644 zdog-space-scene/src/index.html create mode 100644 zdog-space-scene/src/script.babel create mode 100644 zdog-space-scene/src/style.css create mode 100644 zdog-trefoil/README.markdown create mode 100644 zdog-trefoil/dist/index.html create mode 100644 zdog-trefoil/dist/script.js create mode 100644 zdog-trefoil/dist/style.css create mode 100644 zdog-trefoil/license.txt create mode 100644 zdog-trefoil/src/index.html create mode 100644 zdog-trefoil/src/script.js create mode 100644 zdog-trefoil/src/style.css create mode 100644 zdogcone-mace/README.markdown create mode 100644 zdogcone-mace/dist/index.html create mode 100644 zdogcone-mace/dist/script.js create mode 100644 zdogcone-mace/dist/style.css create mode 100644 zdogcone-mace/license.txt create mode 100644 zdogcone-mace/src/index.html create mode 100644 zdogcone-mace/src/script.js create mode 100644 zdogcone-mace/src/style.css create mode 100644 zdoglittle-forest/README.markdown create mode 100644 zdoglittle-forest/dist/index.html create mode 100644 zdoglittle-forest/dist/script.js create mode 100644 zdoglittle-forest/dist/style.css create mode 100644 zdoglittle-forest/license.txt create mode 100644 zdoglittle-forest/src/index.html create mode 100644 zdoglittle-forest/src/script.js create mode 100644 zdoglittle-forest/src/style.css create mode 100644 zdogrgb-birdie/README.markdown create mode 100644 zdogrgb-birdie/dist/index.html create mode 100644 zdogrgb-birdie/dist/script.js create mode 100644 zdogrgb-birdie/dist/style.css create mode 100644 zdogrgb-birdie/license.txt create mode 100644 zdogrgb-birdie/src/index.html create mode 100644 zdogrgb-birdie/src/script.js create mode 100644 zdogrgb-birdie/src/style.css create mode 100644 zdogsolids/README.markdown create mode 100644 zdogsolids/dist/index.html create mode 100644 zdogsolids/dist/script.js create mode 100644 zdogsolids/dist/style.css create mode 100644 zdogsolids/license.txt create mode 100644 zdogsolids/src/index.html create mode 100644 zdogsolids/src/script.js create mode 100644 zdogsolids/src/style.css create mode 100644 zig-zag-gradient-lab/README.markdown create mode 100644 zig-zag-gradient-lab/dist/index.html create mode 100644 zig-zag-gradient-lab/dist/script.js create mode 100644 zig-zag-gradient-lab/dist/style.css create mode 100644 zig-zag-gradient-lab/license.txt create mode 100644 zig-zag-gradient-lab/src/index.html create mode 100644 zig-zag-gradient-lab/src/script.js create mode 100644 zig-zag-gradient-lab/src/style.scss create mode 100644 zzfx-sound-boardzuper-zmall-zeeded-zound-zynth/README.markdown create mode 100644 zzfx-sound-boardzuper-zmall-zeeded-zound-zynth/dist/index.html create mode 100644 zzfx-sound-boardzuper-zmall-zeeded-zound-zynth/dist/script.js create mode 100644 zzfx-sound-boardzuper-zmall-zeeded-zound-zynth/dist/style.css create mode 100644 zzfx-sound-boardzuper-zmall-zeeded-zound-zynth/license.txt create mode 100644 zzfx-sound-boardzuper-zmall-zeeded-zound-zynth/src/index.html create mode 100644 zzfx-sound-boardzuper-zmall-zeeded-zound-zynth/src/script.js create mode 100644 zzfx-sound-boardzuper-zmall-zeeded-zound-zynth/src/style.css diff --git a/017-erosion/README.markdown b/017-erosion/README.markdown new file mode 100644 index 0000000..52598a2 --- /dev/null +++ b/017-erosion/README.markdown @@ -0,0 +1,5 @@ +# #017 | Erosion + +A Pen created on CodePen.io. Original URL: [https://codepen.io/toshiya-marukubo/pen/KKyVOpw](https://codepen.io/toshiya-marukubo/pen/KKyVOpw). + + diff --git a/017-erosion/dist/index.html b/017-erosion/dist/index.html new file mode 100644 index 0000000..06bdcc3 --- /dev/null +++ b/017-erosion/dist/index.html @@ -0,0 +1,17 @@ + + + + + CodePen - #017 | Erosion + + + + + + + + + + + + diff --git a/017-erosion/dist/script.js b/017-erosion/dist/script.js new file mode 100644 index 0000000..0ca4faa --- /dev/null +++ b/017-erosion/dist/script.js @@ -0,0 +1,364 @@ +// sphere vertex shader source +const vertexSphereShader = ` +uniform float uTime; +uniform float mouse; +varying vec2 vUv; +float PI = 3.14159265359; + +void main(){ + vec4 mvPosition = modelViewMatrix * vec4(position, 1.0); + + vUv = uv; + + gl_Position = projectionMatrix * mvPosition; +} + +`; + +// sphere fragment shader source +const fragmentSphereShader = ` +uniform float uTime; +uniform sampler2D uTexture; +varying vec2 vUv; + +void main () { + vec4 color = texture2D(uTexture, vUv); + + gl_FragColor = vec4(color); +} +`; + +/** + * Mouse class + */ +class Mouse { + constructor(sketch) { + this.sketch = sketch; + this.initialize(); + } + + initialize() { + this.delta = 0; + this.mouse = new THREE.Vector3(); + this.setupEvents(); + + this.lastX = 0; + this.lastY = 0; + this.speed = 0; + } + + setupEvents() { + window.addEventListener('scroll', this.onScroll.bind(this), false); + window.addEventListener('mousemove', this.onMousemove.bind(this), false); + window.addEventListener('touchmove', this.onTouchmove.bind(this), false); + } + + onScroll(e) { + const docScrollTop = window.pageYOffset; + const docHeight = document.body.scrollHeight - window.innerHeight; + const scrollPercent = docScrollTop / docHeight; + + this.delta = scrollPercent; + } + + onMousemove(e) { + this.mouse.x = e.clientX / window.innerWidth * 2 - 1; + this.mouse.y = -(e.clientY / window.innerHeight) * 2 + 1; + this.mouse.z = 0; + + this.speed = + Math.sqrt((e.pageX - this.lastX) ** 2 + + (e.pageY - this.lastY) ** 2) * 0.1; + this.lastX = e.pageX; + this.lastY = e.pageY; + } + + onTouchmove(e) { + const touch = e.targetTouches[0]; + + this.mouse.x = touch.pageX / window.innerWidth * 2 - 1; + this.mouse.y = -(touch.pageY / window.innerHeight) * 2 + 1; + this.mouse.z = 0; + + this.speed = + Math.sqrt((touch.pageX - this.lastX) ** 2 + + (touch.pageY - this.lastY) ** 2) * 0.5; + this.lastX = touch.pageX; + this.lastY = touch.pageY; + }} + + +/** + * class Sketch + */ +class Sketch { + constructor() { + this.createCanvas(); + this.setupEvents(); + this.time = new THREE.Clock(true); + this.mouse = new Mouse(this); + this.initialize(); + } + + createCanvas() { + this.renderer = + new THREE.WebGLRenderer({ + antialias: true, + alpha: true }); + + + document.body.appendChild(this.renderer.domElement); + } + + setupEvents() { + window.addEventListener('resize', this.onResize.bind(this), false); + } + + onResize() { + if (this.preWidth === window.innerWidth && window.innerWidth < 480) { + return; + } + + this.initialize(); + } + + initialize() { + if (this.animationId) { + cancelAnimationFrame(this.animationId); + } + + this.preWidth = this.width = Math.ceil(window.innerWidth); + this.height = Math.ceil(window.innerHeight); + + this.scene = new THREE.Scene(); + + this.setupCanvas(); + this.setupCamera(); + //this.setupLight(); + this.setupShape(); + + this.draw(); + } + + setupCanvas() { + this.renderer.setSize(this.width, this.height); + this.renderer.setPixelRatio(window.devicePixelRatio); + this.renderer.setClearColor('#FFF0A6', 1.0); + + this.renderer.domElement.style.position = 'fixed'; + this.renderer.domElement.style.top = '0'; + this.renderer.domElement.style.left = '0'; + this.renderer.domElement.style.width = '100%'; + this.renderer.domElement.style.height = '100%'; + this.renderer.domElement.style.zIndex = '-1'; + this.renderer.domElement.style.outline = 'none'; + } + + setupCamera() { + const fov = 120; + const fovRadian = fov / 2 * (Math.PI / 180); + + this.dist = this.height / 2 / Math.tan(fovRadian); + this.camera = + new THREE.PerspectiveCamera( + fov, + this.width / this.height, + 0.01, + this.dist * 10); + + + this.cameraV = new THREE.Vector3(); + this.cameraP = new THREE.Vector3(0, this.dist, this.dist); + + this.camera.position.set(this.cameraP.x, this.cameraP.y, this.cameraP.z); + this.camera.lookAt(new THREE.Vector3()); + + this.scene.add(this.camera); + } + + updateCamera(time) { + this.cameraV.subVectors(this.mouse.mouse, this.cameraP).multiplyScalar(0.05); + this.cameraP.add(this.cameraV); + + this.camera.position.set( + this.cameraP.x * this.dist * 0.0, + this.cameraP.y * this.dist * 0.1, + this.dist * 0); + + + this.camera.lookAt(new THREE.Vector3()); + } + + setupLight() { + // directinal light + this.directionalLight = new THREE.DirectionalLight(0xffffff); + this.scene.add(this.directionalLight); + + // point light + this.spotLight = new THREE.SpotLight(0xffffff); + + this.spotLightV = new THREE.Vector3(); + this.spotLightP = new THREE.Vector3(0, 0, this.dist * 0.1); + + this.spotLight.position.set(this.spotLightP.x, this.spotLightP.y, this.spotLightP.z); + this.spotLight.lookAt(new THREE.Vector3()); + + this.scene.add(this.spotLight); + } + + updateLight() { + this.spotLightV.subVectors(this.mouse.mouse, this.spotLightP).multiplyScalar(0.05); + this.spotLightP.add(this.spotLightV); + + this.spotLight.position.set( + this.spotLightP.x * this.dist, + this.spotLightP.y * this.dist, + this.dist); + + + this.spotLight.lookAt(new THREE.Vector3()); + } + + setupShape() { + this.shape = new Shape(this, 0, 0, 0); + } + + draw() { + const time = this.time.getElapsedTime(); + + this.shape.render(time); + + this.updateCamera(time); + //this.updateLight(time); + + this.renderer.render(this.scene, this.camera); + + this.animationId = requestAnimationFrame(this.draw.bind(this)); + }} + + +/** + * shape class + */ +class Shape { + constructor(sketch, x, y, z) { + this.sketch = sketch; + this.beta = 0; + this.position = new THREE.Vector3(x, y, z); + + this.setupSizes(); + this.initialize(); + } + + setupSizes() { + this.sphereSize = null; + + if (this.sketch.width < 768) { + this.sphereSize = 120; + } + + if (this.sketch.width >= 768) { + this.sphereSize = 192; + } + } + + initialize() { + this.createTexture(); + + // sphere + this.sphereGeometry = new THREE.BoxGeometry(this.sphereSize, this.sphereSize, this.sphereSize, 128, 128, 128); + this.sphereMaterial = new THREE.ShaderMaterial({ + side: THREE.DoubleSide, + uniforms: { + uTime: { type: 'f', value: 0 }, + mouse: { type: 'f', value: 0 }, + uTexture: { type: 't', value: this.returnTexture() } }, + + vertexShader: vertexSphereShader, + fragmentShader: fragmentSphereShader }); + + + this.sphereMeshV = new THREE.Vector3(); + this.sphereMeshP = new THREE.Vector3(0, 0, 0); + + this.sphereMesh = new THREE.Mesh(this.sphereGeometry, this.sphereMaterial); + this.sphereMesh.position.set(this.sphereMeshP.x, this.sphereMeshP.y, this.sphereMeshP.z); + this.sphereMesh.rotation.y = -Math.PI / 4; + + this.sketch.scene.add(this.sphereMesh); + } + + createTexture() { + this.canvas = document.createElement('canvas'); + this.ctx = this.canvas.getContext('2d'); + + this.length = 256; + + this.canvas.width = this.length; + this.canvas.height = this.length; + + this.bitOperation = new BitOperation(this.ctx, this.length, this.length); + + this.texture = new THREE.CanvasTexture(this.canvas); + } + + returnTexture() { + return this.texture; + } + + updateTexture(time) { + this.bitOperation.render(time); + } + + render(time) { + this.texture.needsUpdate = true; // important + this.updateTexture(time); + + this.sphereMesh.rotation.y = time * 0.3; + + this.sphereMesh.material.uniforms.uTime.value = time; + this.sphereMesh.material.uniforms.mouse.value = this.beta; + }} + + +// References +// https://twitter.com/aemkei/status/1378106731386040322 +// Thank you so much. +class BitOperation { + constructor(ctx, width, height) { + this.ctx = ctx; + this.width = width; + this.height = height; + + this.d = this.ctx.createImageData(this.width, this.height); + } + + drawData() { + this.ctx.putImageData(this.d, 0, 0); + } + + updateData(t) { + for (let y = 0; y < this.height; y++) { + for (let x = 0; x < this.width; x++) { + const i = (y * this.width + x) * 4; + this.d.data[i + 0] = ((y | x) + t) % 256 + Math.random() * 100; + this.d.data[i + 1] = ((y ^ x) + t) % 256 + Math.random() * 100; + this.d.data[i + 2] = ((y & x) + t) % 256 + Math.random() * 100; + this.d.data[i + 3] = 0xff; + } + } + } + + + render(t) { + this.ctx.clearRect(0, 0, this.width, this.height); + this.updateData(t * 100); + this.drawData(); + }} + + +(() => { + window.addEventListener('load', () => { + new Sketch(); + }); +})(); \ No newline at end of file diff --git a/017-erosion/license.txt b/017-erosion/license.txt new file mode 100644 index 0000000..5430e17 --- /dev/null +++ b/017-erosion/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2022 by Toshiya Marukubo (https://codepen.io/toshiya-marukubo/pen/KKyVOpw) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/017-erosion/src/index.html b/017-erosion/src/index.html new file mode 100644 index 0000000..e69de29 diff --git a/017-erosion/src/script.babel b/017-erosion/src/script.babel new file mode 100644 index 0000000..3f53bc9 --- /dev/null +++ b/017-erosion/src/script.babel @@ -0,0 +1,366 @@ + + +// sphere vertex shader source +const vertexSphereShader = ` +uniform float uTime; +uniform float mouse; +varying vec2 vUv; +float PI = 3.14159265359; + +void main(){ + vec4 mvPosition = modelViewMatrix * vec4(position, 1.0); + + vUv = uv; + + gl_Position = projectionMatrix * mvPosition; +} + +`; + +// sphere fragment shader source +const fragmentSphereShader = ` +uniform float uTime; +uniform sampler2D uTexture; +varying vec2 vUv; + +void main () { + vec4 color = texture2D(uTexture, vUv); + + gl_FragColor = vec4(color); +} +`; + +/** + * Mouse class + */ +class Mouse { + constructor(sketch) { + this.sketch = sketch; + this.initialize(); + } + + initialize() { + this.delta = 0; + this.mouse = new THREE.Vector3(); + this.setupEvents(); + + this.lastX = 0; + this.lastY = 0; + this.speed = 0; + } + + setupEvents() { + window.addEventListener('scroll', this.onScroll.bind(this), false); + window.addEventListener('mousemove', this.onMousemove.bind(this), false); + window.addEventListener('touchmove', this.onTouchmove.bind(this), false); + } + + onScroll(e) { + const docScrollTop = window.pageYOffset; + const docHeight = document.body.scrollHeight - window.innerHeight; + const scrollPercent = docScrollTop / docHeight; + + this.delta = scrollPercent; + } + + onMousemove(e) { + this.mouse.x = (e.clientX / window.innerWidth) * 2 - 1; + this.mouse.y = -(e.clientY / window.innerHeight) * 2 + 1; + this.mouse.z = 0; + + this.speed = + Math.sqrt((e.pageX - this.lastX) **2 + + (e.pageY - this.lastY) **2) * 0.1; + this.lastX = e.pageX; + this.lastY = e.pageY; + } + + onTouchmove(e) { + const touch = e.targetTouches[0]; + + this.mouse.x = (touch.pageX / window.innerWidth) * 2 - 1; + this.mouse.y = -(touch.pageY / window.innerHeight) * 2 + 1; + this.mouse.z = 0; + + this.speed = + Math.sqrt((touch.pageX - this.lastX) **2 + + (touch.pageY - this.lastY) **2) * 0.5; + this.lastX = touch.pageX; + this.lastY = touch.pageY; + } +} + +/** + * class Sketch + */ +class Sketch { + constructor() { + this.createCanvas(); + this.setupEvents(); + this.time = new THREE.Clock(true); + this.mouse = new Mouse(this); + this.initialize(); + } + + createCanvas() { + this.renderer = + new THREE.WebGLRenderer({ + antialias: true, + alpha: true + }); + + document.body.appendChild(this.renderer.domElement); + } + + setupEvents() { + window.addEventListener('resize', this.onResize.bind(this), false); + } + + onResize() { + if (this.preWidth === window.innerWidth && window.innerWidth < 480) { + return; + } + + this.initialize(); + } + + initialize() { + if (this.animationId) { + cancelAnimationFrame(this.animationId); + } + + this.preWidth = this.width = Math.ceil(window.innerWidth); + this.height = Math.ceil(window.innerHeight); + + this.scene = new THREE.Scene(); + + this.setupCanvas(); + this.setupCamera(); + //this.setupLight(); + this.setupShape(); + + this.draw(); + } + + setupCanvas() { + this.renderer.setSize(this.width, this.height); + this.renderer.setPixelRatio(window.devicePixelRatio); + this.renderer.setClearColor('#FFF0A6', 1.0); + + this.renderer.domElement.style.position = 'fixed'; + this.renderer.domElement.style.top = '0'; + this.renderer.domElement.style.left = '0'; + this.renderer.domElement.style.width = '100%'; + this.renderer.domElement.style.height = '100%'; + this.renderer.domElement.style.zIndex = '-1'; + this.renderer.domElement.style.outline = 'none'; + } + + setupCamera() { + const fov = 120; + const fovRadian = (fov / 2) * (Math.PI / 180); + + this.dist = this.height / 2 / Math.tan(fovRadian); + this.camera = + new THREE.PerspectiveCamera( + fov, + this.width / this.height, + 0.01, + this.dist * 10 + ); + + this.cameraV = new THREE.Vector3(); + this.cameraP = new THREE.Vector3(0, this.dist, this.dist); + + this.camera.position.set(this.cameraP.x, this.cameraP.y, this.cameraP.z); + this.camera.lookAt(new THREE.Vector3()); + + this.scene.add(this.camera); + } + + updateCamera(time) { + this.cameraV.subVectors(this.mouse.mouse, this.cameraP).multiplyScalar(0.05); + this.cameraP.add(this.cameraV); + + this.camera.position.set( + this.cameraP.x * this.dist * 0.0, + this.cameraP.y * this.dist * 0.1, + this.dist * 0 + ); + + this.camera.lookAt(new THREE.Vector3()); + } + + setupLight() { + // directinal light + this.directionalLight = new THREE.DirectionalLight(0xffffff); + this.scene.add(this.directionalLight); + + // point light + this.spotLight = new THREE.SpotLight(0xffffff); + + this.spotLightV = new THREE.Vector3(); + this.spotLightP = new THREE.Vector3(0, 0, this.dist * 0.1); + + this.spotLight.position.set(this.spotLightP.x, this.spotLightP.y, this.spotLightP.z); + this.spotLight.lookAt(new THREE.Vector3()); + + this.scene.add(this.spotLight); + } + + updateLight() { + this.spotLightV.subVectors(this.mouse.mouse, this.spotLightP).multiplyScalar(0.05); + this.spotLightP.add(this.spotLightV); + + this.spotLight.position.set( + this.spotLightP.x * this.dist, + this.spotLightP.y * this.dist, + this.dist + ); + + this.spotLight.lookAt(new THREE.Vector3()); + } + + setupShape() { + this.shape = new Shape(this, 0, 0, 0); + } + + draw() { + const time = this.time.getElapsedTime(); + + this.shape.render(time); + + this.updateCamera(time); + //this.updateLight(time); + + this.renderer.render(this.scene, this.camera); + + this.animationId = requestAnimationFrame(this.draw.bind(this)); + } +} + +/** + * shape class + */ +class Shape { + constructor(sketch, x, y, z) { + this.sketch = sketch; + this.beta = 0; + this.position = new THREE.Vector3(x, y, z); + + this.setupSizes(); + this.initialize(); + } + + setupSizes() { + this.sphereSize = null; + + if (this.sketch.width < 768) { + this.sphereSize = 120; + } + + if (this.sketch.width >= 768) { + this.sphereSize = 192; + } + } + + initialize() { + this.createTexture(); + + // sphere + this.sphereGeometry = new THREE.BoxGeometry(this.sphereSize, this.sphereSize, this.sphereSize, 128, 128, 128); + this.sphereMaterial = new THREE.ShaderMaterial({ + side: THREE.DoubleSide, + uniforms: { + uTime: {type: 'f', value: 0}, + mouse: {type: 'f', value: 0}, + uTexture: {type: 't', value: this.returnTexture()} + }, + vertexShader: vertexSphereShader, + fragmentShader: fragmentSphereShader + }); + + this.sphereMeshV = new THREE.Vector3(); + this.sphereMeshP = new THREE.Vector3(0, 0, 0); + + this.sphereMesh = new THREE.Mesh(this.sphereGeometry, this.sphereMaterial); + this.sphereMesh.position.set(this.sphereMeshP.x, this.sphereMeshP.y, this.sphereMeshP.z); + this.sphereMesh.rotation.y = -Math.PI / 4; + + this.sketch.scene.add(this.sphereMesh); + } + + createTexture() { + this.canvas = document.createElement('canvas'); + this.ctx = this.canvas.getContext('2d'); + + this.length = 256; + + this.canvas.width = this.length; + this.canvas.height = this.length; + + this.bitOperation = new BitOperation(this.ctx, this.length, this.length); + + this.texture = new THREE.CanvasTexture(this.canvas); + } + + returnTexture() { + return this.texture; + } + + updateTexture(time) { + this.bitOperation.render(time); + } + + render(time) { + this.texture.needsUpdate = true; // important + this.updateTexture(time); + + this.sphereMesh.rotation.y = time * 0.3; + + this.sphereMesh.material.uniforms.uTime.value = time; + this.sphereMesh.material.uniforms.mouse.value = this.beta; + } +} + +// References +// https://twitter.com/aemkei/status/1378106731386040322 +// Thank you so much. +class BitOperation { + constructor(ctx, width, height) { + this.ctx = ctx; + this.width = width; + this.height = height; + + this.d = this.ctx.createImageData(this.width, this.height); + } + + drawData() { + this.ctx.putImageData(this.d, 0, 0); + } + + updateData(t) { + for (let y = 0; y < this.height; y++) { + for (let x = 0; x < this.width; x++) { + const i = (y * this.width + x) * 4; + this.d.data[i + 0] = ((y | x) + t) % 256 + Math.random() * 100; + this.d.data[i + 1] = ((y ^ x) + t) % 256 + Math.random() * 100; + this.d.data[i + 2] = ((y & x) + t) % 256 + Math.random() * 100; + this.d.data[i + 3] = 0xff; + } + } + } + + + render(t) { + this.ctx.clearRect(0, 0, this.width, this.height); + this.updateData(t * 100); + this.drawData(); + } +} + +(() => { + window.addEventListener('load', () => { + new Sketch(); + }); +})(); diff --git a/1-codevember-2017galaxy/README.markdown b/1-codevember-2017galaxy/README.markdown new file mode 100644 index 0000000..a447daf --- /dev/null +++ b/1-codevember-2017galaxy/README.markdown @@ -0,0 +1,4 @@ +# [1] Codevember 2017 - Galaxy + _A Pen created at CodePen.io. Original URL: [https://codepen.io/Mamboleoo/pen/MOwqOp](https://codepen.io/Mamboleoo/pen/MOwqOp). + + \ No newline at end of file diff --git a/1-codevember-2017galaxy/dist/index.html b/1-codevember-2017galaxy/dist/index.html new file mode 100644 index 0000000..9e18e3b --- /dev/null +++ b/1-codevember-2017galaxy/dist/index.html @@ -0,0 +1,18 @@ + + + + + CodePen - [1] Codevember 2017 - Galaxy + + + + + + + + + + + + + diff --git a/1-codevember-2017galaxy/dist/script.js b/1-codevember-2017galaxy/dist/script.js new file mode 100644 index 0000000..95443c4 --- /dev/null +++ b/1-codevember-2017galaxy/dist/script.js @@ -0,0 +1,139 @@ +console.clear(); + +var ww = window.innerWidth, + wh = window.innerHeight; + +var renderer = new THREE.WebGLRenderer({ + antialias: true, + canvas: document.querySelector('canvas') +}); +renderer.setSize(ww, wh); +renderer.setClearColor(0x001a2d); + +var scene = new THREE.Scene(); +scene.fog = new THREE.Fog(0x001a2d, 80, 140); + +var camera = new THREE.PerspectiveCamera(45, ww/wh, 0.1, 200); +camera.position.x = 70; +camera.position.y = 30; +camera.position.z = 5; +camera.lookAt(new THREE.Vector3()); + +// var controls = new THREE.OrbitControls(camera, renderer.domElement); + +/* LIGHTS */ +var moonLight = new THREE.PointLight(0xffffff, 2, 150); +scene.add( moonLight ); + +var moon; +function createMoon() { + var geometry = new THREE.SphereGeometry(8, 32, 32); + var material = new THREE.MeshPhongMaterial({ + color: 0x26fdd9, + shininess:15, + emissive: 0x2bb2e6, + emissiveIntensity:0.8 + }); + moon = new THREE.Mesh(geometry, material); + moon.position.x = -9; + moon.position.z = -6.5; + moon.position.y = 1; + moon.rotation.y = -1; + scene.add(moon); + moonLight.position.copy(moon.position); + moonLight.position.y += 4; + var moonLight2 = new THREE.PointLight(0xffffff, 0.6, 150); + scene.add(moonLight2); + moonLight2.position.x += 20; + moonLight2.position.y -= 20; + moonLight2.position.z -= 25; +} + +function createTerrain () { + var geometry = new THREE.PlaneGeometry(150,150,120,120); + var m = new THREE.Matrix4(); + m.makeRotationX(Math.PI * -0.5); + geometry.applyMatrix(m); + for(var i=0;i 75) { + star.position.x = -75; + } + if (star.position.z < -75) { + star.position.z = 75; + } + if (star.position.z > 75) { + star.position.z = -75; + } + + star.position.x += star.vel.x; + star.position.z += star.vel.y; + var ratio = noise.simplex3(star.position.x*0.03, star.position.z*0.03, 0); + star.position.y = ratio * 10 + 0.3; + + + starsLights.children[index].position.copy(star.position); + starsLights.children[index].position.y += 0.5; +} + +function render(a) { + requestAnimationFrame(render); + for(var i=0;i \ No newline at end of file diff --git a/1-codevember-2017galaxy/src/script.js b/1-codevember-2017galaxy/src/script.js new file mode 100644 index 0000000..95443c4 --- /dev/null +++ b/1-codevember-2017galaxy/src/script.js @@ -0,0 +1,139 @@ +console.clear(); + +var ww = window.innerWidth, + wh = window.innerHeight; + +var renderer = new THREE.WebGLRenderer({ + antialias: true, + canvas: document.querySelector('canvas') +}); +renderer.setSize(ww, wh); +renderer.setClearColor(0x001a2d); + +var scene = new THREE.Scene(); +scene.fog = new THREE.Fog(0x001a2d, 80, 140); + +var camera = new THREE.PerspectiveCamera(45, ww/wh, 0.1, 200); +camera.position.x = 70; +camera.position.y = 30; +camera.position.z = 5; +camera.lookAt(new THREE.Vector3()); + +// var controls = new THREE.OrbitControls(camera, renderer.domElement); + +/* LIGHTS */ +var moonLight = new THREE.PointLight(0xffffff, 2, 150); +scene.add( moonLight ); + +var moon; +function createMoon() { + var geometry = new THREE.SphereGeometry(8, 32, 32); + var material = new THREE.MeshPhongMaterial({ + color: 0x26fdd9, + shininess:15, + emissive: 0x2bb2e6, + emissiveIntensity:0.8 + }); + moon = new THREE.Mesh(geometry, material); + moon.position.x = -9; + moon.position.z = -6.5; + moon.position.y = 1; + moon.rotation.y = -1; + scene.add(moon); + moonLight.position.copy(moon.position); + moonLight.position.y += 4; + var moonLight2 = new THREE.PointLight(0xffffff, 0.6, 150); + scene.add(moonLight2); + moonLight2.position.x += 20; + moonLight2.position.y -= 20; + moonLight2.position.z -= 25; +} + +function createTerrain () { + var geometry = new THREE.PlaneGeometry(150,150,120,120); + var m = new THREE.Matrix4(); + m.makeRotationX(Math.PI * -0.5); + geometry.applyMatrix(m); + for(var i=0;i 75) { + star.position.x = -75; + } + if (star.position.z < -75) { + star.position.z = 75; + } + if (star.position.z > 75) { + star.position.z = -75; + } + + star.position.x += star.vel.x; + star.position.z += star.vel.y; + var ratio = noise.simplex3(star.position.x*0.03, star.position.z*0.03, 0); + star.position.y = ratio * 10 + 0.3; + + + starsLights.children[index].position.copy(star.position); + starsLights.children[index].position.y += 0.5; +} + +function render(a) { + requestAnimationFrame(render); + for(var i=0;i + + + + 1 Element CSS Spinners + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/1-element-css-spinners/dist/style.css b/1-element-css-spinners/dist/style.css new file mode 100644 index 0000000..0fa5e78 --- /dev/null +++ b/1-element-css-spinners/dist/style.css @@ -0,0 +1,310 @@ +@import url("https://fonts.googleapis.com/css?family=Source+Serif+Pro"); +*, *::before, *::after { + box-sizing: border-box; +} + +body { + display: flex; + flex-wrap: wrap; + font-family: "Source Serif Pro", serif; + font-size: 16px; + background: dodgerblue; + counter-reset: spinnerCount; +} + +.cell { + width: 25%; +} +.cell .wrapper { + position: relative; + display: flex; + justify-content: center; + height: 10rem; + margin: 1rem 1rem 0; + padding-top: 2.2rem; + background: rgba(255, 255, 255, 0.2); +} +.cell .wrapper::after { + position: absolute; + bottom: 0; + width: 100%; + padding: 0.2rem; + text-align: center; + background: rgba(255, 255, 255, 0.25); + /* Increment the section counter */ + counter-increment: spinnerCount; + /* Display the counter on pseudo-elements */ + content: counter(spinnerCount); +} + +.spinner { + width: 4rem; + height: 4rem; +} +.spinner.spinner1 { + border: 3px solid rgba(255, 255, 255, 0.25); + border-top-color: rgba(0, 0, 0, 0.5); + border-radius: 50%; + -webkit-animation: rotation .8s ease infinite; + animation: rotation .8s ease infinite; +} +.spinner.spinner2 { + border: 3px solid transparent; + border-top-color: rgba(0, 0, 0, 0.5); + border-bottom-color: rgba(0, 0, 0, 0.5); + border-radius: 50%; + -webkit-animation: rotation .8s ease infinite; + animation: rotation .8s ease infinite; +} +.spinner.spinner3 { + border-top: 3px solid rgba(0, 0, 0, 0.5); + border-right: 3px solid transparent; + border-radius: 50%; + -webkit-animation: rotation .8s linear infinite; + animation: rotation .8s linear infinite; +} +.spinner.spinner4 { + background: rgba(0, 0, 0, 0.5); + -webkit-animation: flip 1.2s ease infinite; + animation: flip 1.2s ease infinite; +} +.spinner.spinner5 { + margin-top: 2rem; + overflow: hidden; + position: relative; + height: .5rem; + background: rgba(255, 255, 255, 0.25); +} +.spinner.spinner5::before { + content: ''; + position: absolute; + left: -130%; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); + -webkit-animation: progress 4s linear infinite; + animation: progress 4s linear infinite; +} +.spinner.spinner6 { + position: absolute; + top: 45%; + left: 50%; + background: #fff; + border-radius: 50%; + -webkit-animation: pulse 1s ease-in-out infinite; + animation: pulse 1s ease-in-out infinite; + -webkit-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); +} +.spinner.spinner7 { + position: relative; +} +.spinner.spinner7::before, .spinner.spinner7::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + width: 100%; + height: 100%; + border-radius: 50%; + -webkit-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); +} +.spinner.spinner7::before { + background: #fff; + -webkit-animation: pulse2 2s ease-in-out infinite; + animation: pulse2 2s ease-in-out infinite; +} +.spinner.spinner7::after { + background: #fff; + -webkit-animation: pulse2 2s 1s ease-in-out infinite; + animation: pulse2 2s 1s ease-in-out infinite; +} +.spinner.spinner8 { + position: relative; + -webkit-perspective: 200px; + perspective: 200px; +} +.spinner.spinner8::before { + display: block; + content: ''; + width: 50%; + height: 50%; + background: rgba(0, 0, 0, 0.5); + -webkit-animation: 2s flipWalker ease infinite; + animation: 2s flipWalker ease infinite; +} + +@-webkit-keyframes rotation { + from { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes rotation { + from { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes flip { + 0% { + -webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg); + transform: perspective(120px) rotateX(0deg) rotateY(0deg); + } + 50% { + -webkit-transform: perspective(120px) rotateX(-180deg) rotateY(0deg); + transform: perspective(120px) rotateX(-180deg) rotateY(0deg); + } + 100% { + -webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-180deg); + transform: perspective(120px) rotateX(-180deg) rotateY(-180deg); + } +} +@keyframes flip { + 0% { + -webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg); + transform: perspective(120px) rotateX(0deg) rotateY(0deg); + } + 50% { + -webkit-transform: perspective(120px) rotateX(-180deg) rotateY(0deg); + transform: perspective(120px) rotateX(-180deg) rotateY(0deg); + } + 100% { + -webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-180deg); + transform: perspective(120px) rotateX(-180deg) rotateY(-180deg); + } +} +@-webkit-keyframes progress { + 0% { + left: -130%; + background: rgba(0, 0, 0, 0.5); + } + 50% { + left: 130%; + background: rgba(0, 0, 0, 0.5); + } + 51% { + background: rgba(255, 255, 255, 0.5); + } + 100% { + background: rgba(255, 255, 255, 0.5); + } +} +@keyframes progress { + 0% { + left: -130%; + background: rgba(0, 0, 0, 0.5); + } + 50% { + left: 130%; + background: rgba(0, 0, 0, 0.5); + } + 51% { + background: rgba(255, 255, 255, 0.5); + } + 100% { + background: rgba(255, 255, 255, 0.5); + } +} +@-webkit-keyframes pulse { + 0% { + -webkit-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); + opacity: 1; + } + 100% { + -webkit-transform: translate(-50%, -50%) scale(1); + transform: translate(-50%, -50%) scale(1); + opacity: 0; + } +} +@keyframes pulse { + 0% { + -webkit-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); + opacity: 1; + } + 100% { + -webkit-transform: translate(-50%, -50%) scale(1); + transform: translate(-50%, -50%) scale(1); + opacity: 0; + } +} +@-webkit-keyframes pulse2 { + 0%, 100% { + -webkit-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); + opacity: 1; + } + 50% { + -webkit-transform: translate(-50%, -50%) scale(1); + transform: translate(-50%, -50%) scale(1); + opacity: 0; + } +} +@keyframes pulse2 { + 0%, 100% { + -webkit-transform: translate(-50%, -50%) scale(0); + transform: translate(-50%, -50%) scale(0); + opacity: 1; + } + 50% { + -webkit-transform: translate(-50%, -50%) scale(1); + transform: translate(-50%, -50%) scale(1); + opacity: 0; + } +} +@-webkit-keyframes flipWalker { + 0% { + -webkit-transform: translate(0, 0) rotateX(0) rotateY(0); + transform: translate(0, 0) rotateX(0) rotateY(0); + } + 25% { + -webkit-transform: translate(100%, 0) rotateX(0) rotateY(180deg); + transform: translate(100%, 0) rotateX(0) rotateY(180deg); + } + 50% { + -webkit-transform: translate(100%, 100%) rotateX(-180deg) rotateY(180deg); + transform: translate(100%, 100%) rotateX(-180deg) rotateY(180deg); + } + 75% { + -webkit-transform: translate(0, 100%) rotateX(-180deg) rotateY(360deg); + transform: translate(0, 100%) rotateX(-180deg) rotateY(360deg); + } + 100% { + -webkit-transform: translate(0, 0) rotateX(0) rotateY(360deg); + transform: translate(0, 0) rotateX(0) rotateY(360deg); + } +} +@keyframes flipWalker { + 0% { + -webkit-transform: translate(0, 0) rotateX(0) rotateY(0); + transform: translate(0, 0) rotateX(0) rotateY(0); + } + 25% { + -webkit-transform: translate(100%, 0) rotateX(0) rotateY(180deg); + transform: translate(100%, 0) rotateX(0) rotateY(180deg); + } + 50% { + -webkit-transform: translate(100%, 100%) rotateX(-180deg) rotateY(180deg); + transform: translate(100%, 100%) rotateX(-180deg) rotateY(180deg); + } + 75% { + -webkit-transform: translate(0, 100%) rotateX(-180deg) rotateY(360deg); + transform: translate(0, 100%) rotateX(-180deg) rotateY(360deg); + } + 100% { + -webkit-transform: translate(0, 0) rotateX(0) rotateY(360deg); + transform: translate(0, 0) rotateX(0) rotateY(360deg); + } +} diff --git a/1-element-css-spinners/license.txt b/1-element-css-spinners/license.txt new file mode 100644 index 0000000..d0996bc --- /dev/null +++ b/1-element-css-spinners/license.txt @@ -0,0 +1,13 @@ + + + + diff --git a/1-element-css-spinners/src/index.pug b/1-element-css-spinners/src/index.pug new file mode 100644 index 0000000..88aae1c --- /dev/null +++ b/1-element-css-spinners/src/index.pug @@ -0,0 +1,5 @@ +- var totSpinners = 8 +- for (var i = 1; i <= totSpinners; i++) + .cell + .wrapper + div( class="spinner spinner" + i) \ No newline at end of file diff --git a/1-element-css-spinners/src/style.scss b/1-element-css-spinners/src/style.scss new file mode 100644 index 0000000..782892a --- /dev/null +++ b/1-element-css-spinners/src/style.scss @@ -0,0 +1,217 @@ +// TYPOGRAPHY +@import url('https://fonts.googleapis.com/css?family=Source+Serif+Pro'); +$font-family: 'Source Serif Pro', serif; + +// COLORS +$white: #fff; +$black: #000; +$back: dodgerblue; // Change the color if you want + +// GENERAL +*, *::before, *::after{ + box-sizing: border-box; +} +body{ + display: flex; + flex-wrap: wrap; + font-family: $font-family; + font-size: 16px; + background: $back; + // Spinner count reference + counter-reset: spinnerCount; +} +.cell{ + width: 25%; + .wrapper{ + position: relative; + display: flex; + justify-content: center; + height: 10rem; + margin: 1rem 1rem 0; + padding-top: 2.2rem; + background: rgba($white, .2); + &::after{ + position: absolute; + bottom: 0; + width: 100%; + padding: 0.2rem; + text-align: center; + background: rgba($white, .25); + /* Increment the section counter */ + counter-increment: spinnerCount; + /* Display the counter on pseudo-elements */ + content: counter(spinnerCount); + } + } +} + + +// SPINNERS STYLES +.spinner{ + // Common styles + width: 4rem; + height: 4rem; + // Individual styles + &.spinner1{ + border: 3px solid rgba($white, .25); + border-top-color: rgba($black, .5); + border-radius: 50%; + animation: rotation .8s ease infinite; + } + &.spinner2{ + border: 3px solid transparent; + border-top-color: rgba($black, .5); + border-bottom-color: rgba($black, .5); + border-radius: 50%; + animation: rotation .8s ease infinite; + } + &.spinner3{ + border-top: 3px solid rgba($black, .5); + border-right: 3px solid transparent; + border-radius: 50%; + animation: rotation .8s linear infinite; + } + &.spinner4{ + background: rgba($black, .5); + animation: flip 1.2s ease infinite; + } + &.spinner5{ + margin-top: 2rem; // just for centering the demo + overflow: hidden; + position: relative; + height: .5rem; + background: rgba($white, .25); + &::before{ + content: ''; + position: absolute; + left: -130%; + width: 100%; + height: 100%; + background: rgba($black, .5); + animation: progress 4s linear infinite; + } + + } + &.spinner6{ + position: absolute; + top: 45%; + left: 50%; + background: $white; + border-radius: 50%; + animation: pulse 1s ease-in-out infinite; + transform: translate(-50%, -50%) scale(0); + } + &.spinner7{ + position: relative; + &::before, &::after{ + content: ''; + position: absolute; + top: 50%; + left: 50%; + width: 100%; + height: 100%; + border-radius: 50%; + transform: translate(-50%, -50%) scale(0); + } + &::before{ + background: $white; + animation: pulse2 2s ease-in-out infinite; + } + &::after{ + background: $white; + animation: pulse2 2s 1s ease-in-out infinite; + } + } + &.spinner8{ + position: relative; + perspective: 200px; + &::before{ + display: block; + content: ''; + width: 50%; + height: 50%; + background: rgba($black, .5); + animation: 2s flipWalker ease infinite; + } + } +} + + +// ANIMATIONS +@keyframes rotation{ + from{ + transform: rotate(0deg); + } + to{ + transform: rotate(360deg); + } +} + +@keyframes flip{ + 0%{ + transform: perspective(120px) rotateX(0deg) rotateY(0deg); + } + 50%{ + transform: perspective(120px) rotateX(-180deg) rotateY(0deg); + } + 100%{ + transform: perspective(120px) rotateX(-180deg) rotateY(-180deg); + } +} + +@keyframes progress{ + 0%{ + left: -130%; + background: rgba($black, .5); + } + 50%{ + left: 130%; + background: rgba($black, .5); + } + 51%{ + background: rgba($white, .5); + } + 100%{ + background: rgba($white, .5); + } +} + +@keyframes pulse{ + 0%{ + transform: translate(-50%, -50%) scale(0); + opacity: 1; + } + 100%{ + transform: translate(-50%, -50%) scale(1.0); + opacity: 0; + } +} + +@keyframes pulse2{ + 0%, 100%{ + transform: translate(-50%, -50%) scale(0); + opacity: 1; + } + 50%{ + transform: translate(-50%, -50%) scale(1.0); + opacity: 0; + } +} + +@keyframes flipWalker{ + 0%{ + transform: translate(0, 0) rotateX(0) rotateY(0); + } + 25%{ + transform: translate(100%, 0) rotateX(0) rotateY(180deg); + } + 50%{ + transform: translate(100%, 100%) rotateX(-180deg) rotateY(180deg); + } + 75%{ + transform: translate(0, 100%) rotateX(-180deg) rotateY(360deg); + } + 100%{ + transform: translate(0, 0) rotateX(0) rotateY(360deg); + } +} \ No newline at end of file diff --git a/10-000-codepen-followers/README.markdown b/10-000-codepen-followers/README.markdown new file mode 100644 index 0000000..fc88861 --- /dev/null +++ b/10-000-codepen-followers/README.markdown @@ -0,0 +1,5 @@ +# 10,000 Codepen followers! + +A Pen created on CodePen.io. Original URL: [https://codepen.io/chrisgannon/pen/qBPGEQy](https://codepen.io/chrisgannon/pen/qBPGEQy). + +Heartfelt thanks to each and every person supporting my journey and hopefully learning with me along the way. Cheers! diff --git a/10-000-codepen-followers/dist/index.html b/10-000-codepen-followers/dist/index.html new file mode 100644 index 0000000..85226f2 --- /dev/null +++ b/10-000-codepen-followers/dist/index.html @@ -0,0 +1,73 @@ + + + + + CodePen - 10,000 Codepen followers! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/10-000-codepen-followers/dist/script.js b/10-000-codepen-followers/dist/script.js new file mode 100644 index 0000000..af6b591 --- /dev/null +++ b/10-000-codepen-followers/dist/script.js @@ -0,0 +1,244 @@ +let select = s => document.querySelector(s), + selectAll = s => document.querySelectorAll(s), + mainSVG = select('#mainSVG'), + allNumbers = gsap.utils.toArray('#numberGroup path'), + allThankYou = gsap.utils.toArray('#thankYouGroup path'), + //colorArray = ["#EF5350", "#EC407A","#AB47BC","#7E57C2","#5C6BC0","#42A5F5","#29B6F6","#26C6DA","#26A69A","#66BB6A","#9CCC65","#D4E157","#FFEE58","#FFCA28","#FFA726","#FF7043","#8D6E63","#BDBDBD","#78909C"], + colorArray = ["#42c2f1", "#fbda4f","#ab63df","#5fc581"], + confetti = select('.confetti'), + container = select('.container') + +gsap.set('svg', { + visibility: 'visible' +}) +let confettiTl = gsap.timeline({paused: true}); + +function playConfetti () { + + confettiTl.play(0); +} + +function createConfetti () { + var i = 160, clone, tl, rot, duration, paperDuration; + while(--i > -1) { + tl = gsap.timeline(); + clone = confetti.cloneNode(true); + container.appendChild(clone); + rot = gsap.utils.random(0, 360); + duration = gsap.utils.random(3, 9); + paperDuration = (duration)/20; + gsap.set(clone, { + fill: gsap.utils.random(colorArray), + rotation: rot, + transformOrigin: '50% 50%' + }) + + tl.fromTo(clone, { + x: gsap.utils.random(0, 800), + y: -50, + rotation: rot + }, { + duration: duration, + x: '+=' + gsap.utils.random(-200, 200), + y: 650, + rotation: '+=180', + ease: 'linear' + }) + .to(clone.querySelector('.paper'), { + duration: duration/23, + scaleY: 0.1, + repeat: 23, + yoyo: true + }, 0) + //console.log(paperDuration) + confettiTl.add(tl, i/200).timeScale(2.3); + } + + gsap.set('.paper', { + transformOrigin: '50% 50%' + }) +} + +let tl = gsap.timeline({repeat: -1}); +tl.add('step0', '+=2') +.to('#one', { + x: -105, + ease: 'expo.inOut' +}, 'step0') +.to('#one', { + rotation: 10, + transformOrigin: '50% 150%', + ease: 'sine.inOut' +}, 'step0+=0') +.to('#one', { + rotation: 0, + + ease: 'elastic(0.8, 0.28)' +}, 'step0+=0.3') +.to('#one', { + morphSVG: { + shape: '#one_mid' + }, + ease: 'expo.inOut' +}, 'step0') +.add('step1') +.to('#one, .numberMask', { + x: '+=548', + ease: 'expo.inOut' +}, 'step1') +.to('.thankYouMask', { + x: '+=548', + ease: 'expo.inOut' +}, 'step1') +.from(allThankYou, { + x: 50, + immediateRender: false, + stagger: { + each: 0.05 + }, + ease: 'expo' +}, 'step1') +.from('#gradBar', { + width: 0, + ease: 'expo.inOut' +}, 'step1') + +.to('#one', { + rotation: -10, + transformOrigin: '50% 100%', + ease: 'sine.inOut' +}, 'step1+=0') +.to('#one', { + rotation: 0, + duration: 1, + ease: 'elastic(0.8, 0.28)' +}, 'step1+=0.3') + +.add('step2', '-=0') +.to('#one', { + morphSVG: { + shape: '#one_end' + }, + y: '-=80', + ease: 'expo.inOut' +}, 'step2') +.to('#oneContainer', { + scaleX: 1.4, + scaleY: 0.6, + duration: 0.8, + transformOrigin: '50% 0%', + ease: 'sine' +}, 'step2') + + +.add('step3') +.to('#one', { + morphSVG: { + shape: '#one_end' + }, + y: '+=80', + ease: 'expo.in' +}, 'step3') +.to('#oneContainer', { + scale: 1, + duration: 0.38, + ease: 'expo.in' +}, 'step3') + +.to('#one', { + rotation: 3, + duration: 1, + transformOrigin: '50% 120%', + ease: "wiggle({type:easeOut, wiggles:8})" +}, 'step3+=0.5') +.from('#dot', { + scale: 0, + transformOrigin: '50% 50%', + ease: 'elastic(0.4, 0.5)' +}, 'step3+=0.46') +.add(playConfetti, 'step3+=0.46') +.add('step4', '+=2') +.to('#one', { + morphSVG: { + shape: "#one_mid" + }, + duration: 0.2 +}, 'step4') +.to('#one, .thankYouMask', { + x: '-=548', + ease: 'expo.inOut' +}, 'step4') +.to('#dot', { + opacity: 0, + duration: 0.2, + ease: 'expo' +}, 'step4') +.to('.numberMask', { + x: '-=548', + ease: 'expo.inOut' +}, 'step4') +.from(allNumbers, { + x: 50, + immediateRender: false, + stagger: { + each: 0.05 + } +}, 'step4') +.from(allNumbers, { + rotation: 50, + transformOrigin: '50% 50%', + immediateRender: false, + stagger: { + each: 0.05 + }, + ease: 'expo' +}, 'step4') +.to('#gradBar', { + width: 0, + ease: 'expo.inOut' +}, 'step4') + +.add('step5') +.to('#one', { + morphSVG: { + shape: "M219.16,266.34h-16.8V253.5l32-.12v89.4H219.16Z" + }, + ease: 'expo.inOut', + x: 0 +}, 'step5-=0.3') + +.to('#one', { + rotation: -10, + transformOrigin: '50% 100%', + ease: 'sine.inOut' +}, 'step5-=0.3') +.to('#one', { + rotation: 0, + duration: 1, + ease: 'elastic(0.8, 0.28)' +}, 'step5') + + +createConfetti(); + +//start anim - plays once +gsap.from('#one, #numberGroup path', { + stagger: { + each: 0.05 + }, + scaleY:0, + delay: 0.6, + duration: 0.8, + transformOrigin: '50% 100%', + ease: 'elastic(0.73, 0.6)' +}) + +//loop the gradient bar +gsap.to('#gradPattern', { + attr:{ + x:556 + }, + duration: 2, + repeat: -1, + ease:'linear' +}) \ No newline at end of file diff --git a/10-000-codepen-followers/dist/style.css b/10-000-codepen-followers/dist/style.css new file mode 100644 index 0000000..b3134ee --- /dev/null +++ b/10-000-codepen-followers/dist/style.css @@ -0,0 +1,23 @@ +body { + background-color: #131417; + overflow: hidden; + text-align:center; + display: flex; + align-items: center; + justify-content: center; +} + +body, +html { + height: 100%; + width: 100%; + margin: 0; + padding: 0; +} + +svg { + width: 100%; + height: 100%; + visibility: hidden; + +} \ No newline at end of file diff --git a/10-000-codepen-followers/license.txt b/10-000-codepen-followers/license.txt new file mode 100644 index 0000000..097be04 --- /dev/null +++ b/10-000-codepen-followers/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2022 by Chris Gannon (https://codepen.io/chrisgannon/pen/qBPGEQy) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/10-000-codepen-followers/src/index.html b/10-000-codepen-followers/src/index.html new file mode 100644 index 0000000..2bc69f8 --- /dev/null +++ b/10-000-codepen-followers/src/index.html @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/10-000-codepen-followers/src/script.js b/10-000-codepen-followers/src/script.js new file mode 100644 index 0000000..2620663 --- /dev/null +++ b/10-000-codepen-followers/src/script.js @@ -0,0 +1,244 @@ +let select = s => document.querySelector(s), + selectAll = s => document.querySelectorAll(s), + mainSVG = select('#mainSVG'), + allNumbers = gsap.utils.toArray('#numberGroup path'), + allThankYou = gsap.utils.toArray('#thankYouGroup path'), + //colorArray = ["#EF5350", "#EC407A","#AB47BC","#7E57C2","#5C6BC0","#42A5F5","#29B6F6","#26C6DA","#26A69A","#66BB6A","#9CCC65","#D4E157","#FFEE58","#FFCA28","#FFA726","#FF7043","#8D6E63","#BDBDBD","#78909C"], + colorArray = ["#42c2f1", "#fbda4f","#ab63df","#5fc581"], + confetti = select('.confetti'), + container = select('.container') + +gsap.set('svg', { + visibility: 'visible' +}) +let confettiTl = gsap.timeline({paused: true}); + +function playConfetti () { + + confettiTl.play(0); +} + +function createConfetti () { + var i = 160, clone, tl, rot, duration, paperDuration; + while(--i > -1) { + tl = gsap.timeline(); + clone = confetti.cloneNode(true); + container.appendChild(clone); + rot = gsap.utils.random(0, 360); + duration = gsap.utils.random(3, 9); + paperDuration = (duration)/20; + gsap.set(clone, { + fill: gsap.utils.random(colorArray), + rotation: rot, + transformOrigin: '50% 50%' + }) + + tl.fromTo(clone, { + x: gsap.utils.random(0, 800), + y: -50, + rotation: rot + }, { + duration: duration, + x: '+=' + gsap.utils.random(-200, 200), + y: 650, + rotation: '+=180', + ease: 'linear' + }) + .to(clone.querySelector('.paper'), { + duration: duration/23, + scaleY: 0.1, + repeat: 23, + yoyo: true + }, 0) + //console.log(paperDuration) + confettiTl.add(tl, i/200).timeScale(2.3); + } + + gsap.set('.paper', { + transformOrigin: '50% 50%' + }) +} + +let tl = gsap.timeline({repeat: -1}); +tl.add('step0', '+=2') +.to('#one', { + x: -105, + ease: 'expo.inOut' +}, 'step0') +.to('#one', { + rotation: 10, + transformOrigin: '50% 150%', + ease: 'sine.inOut' +}, 'step0+=0') +.to('#one', { + rotation: 0, + + ease: 'elastic(0.8, 0.28)' +}, 'step0+=0.3') +.to('#one', { + morphSVG: { + shape: '#one_mid' + }, + ease: 'expo.inOut' +}, 'step0') +.add('step1') +.to('#one, .numberMask', { + x: '+=548', + ease: 'expo.inOut' +}, 'step1') +.to('.thankYouMask', { + x: '+=548', + ease: 'expo.inOut' +}, 'step1') +.from(allThankYou, { + x: 50, + immediateRender: false, + stagger: { + each: 0.05 + }, + ease: 'expo' +}, 'step1') +.from('#gradBar', { + width: 0, + ease: 'expo.inOut' +}, 'step1') + +.to('#one', { + rotation: -10, + transformOrigin: '50% 100%', + ease: 'sine.inOut' +}, 'step1+=0') +.to('#one', { + rotation: 0, + duration: 1, + ease: 'elastic(0.8, 0.28)' +}, 'step1+=0.3') + +.add('step2', '-=0') +.to('#one', { + morphSVG: { + shape: '#one_end' + }, + y: '-=80', + ease: 'expo.inOut' +}, 'step2') +.to('#oneContainer', { + scaleX: 1.4, + scaleY: 0.6, + duration: 0.8, + transformOrigin: '50% 0%', + ease: 'sine' +}, 'step2') + + +.add('step3') +.to('#one', { + morphSVG: { + shape: '#one_end' + }, + y: '+=80', + ease: 'expo.in' +}, 'step3') +.to('#oneContainer', { + scale: 1, + duration: 0.38, + ease: 'expo.in' +}, 'step3') + +.to('#one', { + rotation: 3, + duration: 1, + transformOrigin: '50% 120%', + ease: "wiggle({type:easeOut, wiggles:8})" +}, 'step3+=0.5') +.from('#dot', { + scale: 0, + transformOrigin: '50% 50%', + ease: 'elastic(0.4, 0.5)' +}, 'step3+=0.46') +.add(playConfetti, 'step3+=0.46') +.add('step4', '+=2') +.to('#one', { + morphSVG: { + shape: "#one_mid" + }, + duration: 0.2 +}, 'step4') +.to('#one, .thankYouMask', { + x: '-=548', + ease: 'expo.inOut' +}, 'step4') +.to('#dot', { + opacity: 0, + duration: 0.2, + ease: 'expo' +}, 'step4') +.to('.numberMask', { + x: '-=548', + ease: 'expo.inOut' +}, 'step4') +.from(allNumbers, { + x: 50, + immediateRender: false, + stagger: { + each: 0.05 + } +}, 'step4') +.from(allNumbers, { + rotation: 50, + transformOrigin: '50% 50%', + immediateRender: false, + stagger: { + each: 0.05 + }, + ease: 'expo' +}, 'step4') +.to('#gradBar', { + width: 0, + ease: 'expo.inOut' +}, 'step4') + +.add('step5') +.to('#one', { + morphSVG: { + shape: "M219.16,266.34h-16.8V253.5l32-.12v89.4H219.16Z" + }, + ease: 'expo.inOut', + x: 0 +}, 'step5-=0.3') + +.to('#one', { + rotation: -10, + transformOrigin: '50% 100%', + ease: 'sine.inOut' +}, 'step5-=0.3') +.to('#one', { + rotation: 0, + duration: 1, + ease: 'elastic(0.8, 0.28)' +}, 'step5') + + +createConfetti(); + +//start anim - plays once +gsap.from('#one, #numberGroup path', { + stagger: { + each: 0.05 + }, + scaleY:0, + delay: 0.6, + duration: 0.8, + transformOrigin: '50% 100%', + ease: 'elastic(0.73, 0.6)' +}) + +//loop the gradient bar +gsap.to('#gradPattern', { + attr:{ + x:556 + }, + duration: 2, + repeat: -1, + ease:'linear' +}) diff --git a/10-000-codepen-followers/src/style.css b/10-000-codepen-followers/src/style.css new file mode 100644 index 0000000..b3134ee --- /dev/null +++ b/10-000-codepen-followers/src/style.css @@ -0,0 +1,23 @@ +body { + background-color: #131417; + overflow: hidden; + text-align:center; + display: flex; + align-items: center; + justify-content: center; +} + +body, +html { + height: 100%; + width: 100%; + margin: 0; + padding: 0; +} + +svg { + width: 100%; + height: 100%; + visibility: hidden; + +} \ No newline at end of file diff --git a/10print-svg/README.markdown b/10print-svg/README.markdown new file mode 100644 index 0000000..5f23ec7 --- /dev/null +++ b/10print-svg/README.markdown @@ -0,0 +1,5 @@ +# 10PRINT SVG + +A Pen created on CodePen.io. Original URL: [https://codepen.io/GeorgeDoesCode/pen/vYKyJLo](https://codepen.io/GeorgeDoesCode/pen/vYKyJLo). + + diff --git a/10print-svg/dist/index.html b/10print-svg/dist/index.html new file mode 100644 index 0000000..a347023 --- /dev/null +++ b/10print-svg/dist/index.html @@ -0,0 +1,17 @@ + + + + + CodePen - 10PRINT SVG + + + + + + + + + + + + diff --git a/10print-svg/dist/script.js b/10print-svg/dist/script.js new file mode 100644 index 0000000..4289c2b --- /dev/null +++ b/10print-svg/dist/script.js @@ -0,0 +1,42 @@ +// Based on https://www.youtube.com/watch?v=bEyTZ5ZZxZs thanks @shiffman! + +const canvasWidth = 400; +const canvasHeight = 400; + +const canvas = SVG().addTo('body').viewbox(`0 0 ${canvasWidth} ${canvasHeight}`); + +const space = 15; +let x = 0; +let y = 0; + +const lineStyle = { + width: 2, + color: '#FFE3EC' }; + + +(function drawLoop() { + // play with this value to get more forward or back slashes! + if (random(0, 1) < 0.25) { + // backslash + canvas.line(x, y, x + space, y + space).stroke(lineStyle); + } else { + // forward slash + canvas.line(x, y + space, x + space, y).stroke(lineStyle); + } + + x += space; + + if (x > canvasWidth) { + x = 0; + y += space; + } + + if (y < canvasHeight) { + requestAnimationFrame(drawLoop); + } +})(); + +// random utility fn +function random(min, max) { + return Math.random() * (max - min) + min; +} \ No newline at end of file diff --git a/10print-svg/dist/style.css b/10print-svg/dist/style.css new file mode 100644 index 0000000..68340c5 --- /dev/null +++ b/10print-svg/dist/style.css @@ -0,0 +1,26 @@ +* { + box-sizing: border-box; +} + +body { + display: -webkit-box; + display: flex; + min-width: 240px; + height: 100vh; + background: #FFE3EC; + padding: 2rem; + overflow: hidden; +} + +svg { + width: 75vmin; + flex-shrink: 1; + margin: auto; + background: #FF8CBA; + border: 6px solid #FF8CBA; + border-radius: 24px; +} + +line { + stroke-linecap: round; +} \ No newline at end of file diff --git a/10print-svg/license.txt b/10print-svg/license.txt new file mode 100644 index 0000000..85de425 --- /dev/null +++ b/10print-svg/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by George (https://codepen.io/GeorgeDoesCode/pen/vYKyJLo) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/10print-svg/src/index.html b/10print-svg/src/index.html new file mode 100644 index 0000000..e69de29 diff --git a/10print-svg/src/script.babel b/10print-svg/src/script.babel new file mode 100644 index 0000000..b2e3a8d --- /dev/null +++ b/10print-svg/src/script.babel @@ -0,0 +1,42 @@ +// Based on https://www.youtube.com/watch?v=bEyTZ5ZZxZs thanks @shiffman! + +const canvasWidth = 400; +const canvasHeight = 400; + +const canvas = SVG().addTo('body').viewbox(`0 0 ${canvasWidth} ${canvasHeight}`); + +const space = 15; +let x = 0; +let y = 0; + +const lineStyle = { + width: 2, + color: '#FFE3EC' +}; + +(function drawLoop() { + // play with this value to get more forward or back slashes! + if(random(0, 1) < 0.25) { + // backslash + canvas.line(x, y, x + space, y + space).stroke(lineStyle); + } else { + // forward slash + canvas.line(x, y + space, x + space, y).stroke(lineStyle); + } + + x += space; + + if(x > canvasWidth) { + x = 0; + y += space; + } + + if(y < canvasHeight) { + requestAnimationFrame(drawLoop); + } +})(); + +// random utility fn +function random(min, max) { + return Math.random() * (max - min) + min; +} diff --git a/10print-svg/src/style.scss b/10print-svg/src/style.scss new file mode 100644 index 0000000..9da9b9a --- /dev/null +++ b/10print-svg/src/style.scss @@ -0,0 +1,25 @@ +* { + box-sizing: border-box; +} + +body { + display: flex; + min-width: 240px; + height: 100vh; + background: #FFE3EC; + padding: 2rem; + overflow: hidden; +} + +svg { + width: 75vmin; + flex-shrink: 1; + margin: auto; + background: #FF8CBA; + border: 6px solid #FF8CBA; + border-radius: 24px; +} + +line { + stroke-linecap: round; +} \ No newline at end of file diff --git a/141-in-2021-javascript-canvas/README.markdown b/141-in-2021-javascript-canvas/README.markdown new file mode 100644 index 0000000..2e85aad --- /dev/null +++ b/141-in-2021-javascript-canvas/README.markdown @@ -0,0 +1,5 @@ +# #141 in 2021 / JavaScript Canvas + +A Pen created on CodePen.io. Original URL: [https://codepen.io/toshiya-marukubo/pen/VwpLWxR](https://codepen.io/toshiya-marukubo/pen/VwpLWxR). + + diff --git a/141-in-2021-javascript-canvas/dist/index.html b/141-in-2021-javascript-canvas/dist/index.html new file mode 100644 index 0000000..cd7ddeb --- /dev/null +++ b/141-in-2021-javascript-canvas/dist/index.html @@ -0,0 +1,16 @@ + + + + + CodePen - #141 in 2021 / JavaScript Canvas + + + + + + + + + + + diff --git a/141-in-2021-javascript-canvas/dist/script.js b/141-in-2021-javascript-canvas/dist/script.js new file mode 100644 index 0000000..1da9473 --- /dev/null +++ b/141-in-2021-javascript-canvas/dist/script.js @@ -0,0 +1,82 @@ +var W, M, c, C, WW, WH, + xNum, yNum, rad, num, angle, pos, + animationId; + +var getRandomNumber = function (min, max) { + return Math.floor(Math.random() * (max - min + 1) + min); +}; + +var makeCanvas = function () { + document + .getElementsByTagName("body")[0] + .appendChild(document.createElement("canvas")); +}; + +var initialize = function () { + W = window; + M = Math; + c = document.getElementsByTagName("canvas")[0]; + C = c.getContext("2d"); + WW = c.width = M.floor(W.innerWidth); + WH = c.height = M.floor(W.innerHeight); + rad = M.PI / 2; + pos = []; + angle = 0; + length = 20; + for (var y = 0; y < WH; y+=length) { + for (var x = 0; x < WW; x+=length) { + pos.push([x, y, getRandomNumber(0, 1)]); + } + } +}; + +var f = function (t) { + t /= 200; + C.save(); + C.clearRect(0, 0, WW, WH); + C.lineWidth = 5; + for (var i = 0; i < pos.length; i++) { + C.save(); + var cy = pos[i][1] - WH / 2; + var cx = pos[i][0] - WW / 2; + var dist = M.sqrt(cx * cx + cy * cy) * 0.01; + var theta = M.atan2(cy, cx); + var s = M.sin(M.sin(theta * M.PI / 180) + dist - t) + theta * 3 + 1; + if (M.sin(t + s) > 0) { + C.translate(pos[i][0] + length / 2, pos[i][1] + length / 2); + C.strokeStyle = 'hsl(' + M.sin(t + s) * 360 + ', 80%, 60%)'; + C.rotate(t + s); + C.translate(-pos[i][0] - length / 2, -pos[i][1] - length / 2); + } + if (pos[i][2] === 0) { + C.beginPath(); + C.moveTo(pos[i][0], pos[i][1]); + C.lineTo(pos[i][0] + length, pos[i][1] + length); + C.stroke(); + } else { + C.beginPath(); + C.moveTo(pos[i][0] + length, pos[i][1]); + C.lineTo(pos[i][0], pos[i][1] + length); + C.stroke(); + } + C.restore(); + } + C.restore(); + angle += 5; + if (angle > 360) { + angle = 0; + } + animationId = requestAnimationFrame(f); +}; + +window.onload = function () { + makeCanvas(); + initialize(); + f(); + W.onresize = function () { + cancelAnimationFrame(animationId); + length = 250; + initialize(); + f(); + }; +}; \ No newline at end of file diff --git a/141-in-2021-javascript-canvas/dist/style.css b/141-in-2021-javascript-canvas/dist/style.css new file mode 100644 index 0000000..5b094e7 --- /dev/null +++ b/141-in-2021-javascript-canvas/dist/style.css @@ -0,0 +1,5 @@ +* { + padding: 0; + margin: 0; + overflow: hidden; +} \ No newline at end of file diff --git a/141-in-2021-javascript-canvas/license.txt b/141-in-2021-javascript-canvas/license.txt new file mode 100644 index 0000000..02c7c44 --- /dev/null +++ b/141-in-2021-javascript-canvas/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Toshiya Marukubo (https://codepen.io/toshiya-marukubo/pen/VwpLWxR) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/141-in-2021-javascript-canvas/src/index.html b/141-in-2021-javascript-canvas/src/index.html new file mode 100644 index 0000000..e69de29 diff --git a/141-in-2021-javascript-canvas/src/script.js b/141-in-2021-javascript-canvas/src/script.js new file mode 100644 index 0000000..1da9473 --- /dev/null +++ b/141-in-2021-javascript-canvas/src/script.js @@ -0,0 +1,82 @@ +var W, M, c, C, WW, WH, + xNum, yNum, rad, num, angle, pos, + animationId; + +var getRandomNumber = function (min, max) { + return Math.floor(Math.random() * (max - min + 1) + min); +}; + +var makeCanvas = function () { + document + .getElementsByTagName("body")[0] + .appendChild(document.createElement("canvas")); +}; + +var initialize = function () { + W = window; + M = Math; + c = document.getElementsByTagName("canvas")[0]; + C = c.getContext("2d"); + WW = c.width = M.floor(W.innerWidth); + WH = c.height = M.floor(W.innerHeight); + rad = M.PI / 2; + pos = []; + angle = 0; + length = 20; + for (var y = 0; y < WH; y+=length) { + for (var x = 0; x < WW; x+=length) { + pos.push([x, y, getRandomNumber(0, 1)]); + } + } +}; + +var f = function (t) { + t /= 200; + C.save(); + C.clearRect(0, 0, WW, WH); + C.lineWidth = 5; + for (var i = 0; i < pos.length; i++) { + C.save(); + var cy = pos[i][1] - WH / 2; + var cx = pos[i][0] - WW / 2; + var dist = M.sqrt(cx * cx + cy * cy) * 0.01; + var theta = M.atan2(cy, cx); + var s = M.sin(M.sin(theta * M.PI / 180) + dist - t) + theta * 3 + 1; + if (M.sin(t + s) > 0) { + C.translate(pos[i][0] + length / 2, pos[i][1] + length / 2); + C.strokeStyle = 'hsl(' + M.sin(t + s) * 360 + ', 80%, 60%)'; + C.rotate(t + s); + C.translate(-pos[i][0] - length / 2, -pos[i][1] - length / 2); + } + if (pos[i][2] === 0) { + C.beginPath(); + C.moveTo(pos[i][0], pos[i][1]); + C.lineTo(pos[i][0] + length, pos[i][1] + length); + C.stroke(); + } else { + C.beginPath(); + C.moveTo(pos[i][0] + length, pos[i][1]); + C.lineTo(pos[i][0], pos[i][1] + length); + C.stroke(); + } + C.restore(); + } + C.restore(); + angle += 5; + if (angle > 360) { + angle = 0; + } + animationId = requestAnimationFrame(f); +}; + +window.onload = function () { + makeCanvas(); + initialize(); + f(); + W.onresize = function () { + cancelAnimationFrame(animationId); + length = 250; + initialize(); + f(); + }; +}; \ No newline at end of file diff --git a/141-in-2021-javascript-canvas/src/style.css b/141-in-2021-javascript-canvas/src/style.css new file mode 100644 index 0000000..5b094e7 --- /dev/null +++ b/141-in-2021-javascript-canvas/src/style.css @@ -0,0 +1,5 @@ +* { + padding: 0; + margin: 0; + overflow: hidden; +} \ No newline at end of file diff --git a/20/README.markdown b/20/README.markdown new file mode 100644 index 0000000..309a18c --- /dev/null +++ b/20/README.markdown @@ -0,0 +1,8 @@ +# 20. + +A Pen created on CodePen.io. Original URL: [https://codepen.io/ycw/pen/OJRwedY](https://codepen.io/ycw/pen/OJRwedY). + +- [camera movement](https://codepen.io/ycw/details/dypKrKq) +- [sidewall uv](https://codepen.io/ycw/details/yLaqEWd) +- photo by [Nik](https://unsplash.com/photos/Geu-i5VvI1A) + diff --git a/20/dist/index.html b/20/dist/index.html new file mode 100644 index 0000000..9f4de92 --- /dev/null +++ b/20/dist/index.html @@ -0,0 +1,17 @@ + + + + + CodePen - 20. + + + + + + + + + + + + diff --git a/20/dist/script.js b/20/dist/script.js new file mode 100644 index 0000000..0036053 --- /dev/null +++ b/20/dist/script.js @@ -0,0 +1,156 @@ +import * as $ from '//unpkg.com/three@0.124.0/build/three.module.js' +import { OrbitControls } from '//unpkg.com/three@0.124.0/examples/jsm/controls/OrbitControls.js' +import { EffectComposer } from '//unpkg.com/three@0.124.0/examples/jsm/postprocessing/EffectComposer' +import { RenderPass } from '//unpkg.com/three@0.124.0/examples/jsm/postprocessing/RenderPass' +import { UnrealBloomPass } from '//unpkg.com/three@0.124.0/examples/jsm/postprocessing/UnrealBloomPass' +import { Curves } from '//unpkg.com/three@0.124.0/examples/jsm/curves/CurveExtras' +// ---- boot + +const renderer = new $.WebGLRenderer({}); +const scene = new $.Scene(); +const camera = new $.PerspectiveCamera(75, 2, .01, 5000); +window.addEventListener('resize', () => { + const { clientWidth, clientHeight } = renderer.domElement; + renderer.setSize(clientWidth, clientHeight, false); + renderer.setPixelRatio(window.devicePixelRatio); + camera.aspect = clientWidth / clientHeight; + camera.updateProjectionMatrix(); +}); +document.body.prepend(renderer.domElement); +window.dispatchEvent(new Event('resize')); + +// ---- setup + +scene.fog = new $.FogExp2('black', 0.05); +scene.add(new $.HemisphereLight('cyan', 'orange', 2)); + +// ---- const + +const mpms = (20) / 1e3; +const steps = 2000; + +// ---- mesh + +const shape = new $.Shape(); +// cw +shape.moveTo(-5, -1); +shape.quadraticCurveTo(0, -4, 5, -1); +shape.lineTo(6, -1); +shape.quadraticCurveTo(0, -5, -6, -1); +const extrudePath = new Curves.TorusKnot(); +const UVGenerator = (() => { + let i = 0; // face id + return { + generateTopUV(...xs) { // for 2 "cap" faces + return [new $.Vector2(), new $.Vector2(), new $.Vector2()]; + }, + generateSideWallUV(_geom, _vs, _a, _b, _c, _d) { // all side faces + const segments = 5; // (shape-related; NOT eq `curveSegments`) + if (i < segments * steps) { // ignore bottom road faces + ++i; + return [new $.Vector2(), new $.Vector2(), new $.Vector2(), new $.Vector2()]; + } + const n = i - segments * steps; // offseted face idx + const total_col_segments = 7; // (shape-related) + const col = n / steps | 0; + const left = col / total_col_segments; // normalize + const right = (col + 1) / total_col_segments; // normalize + const row = n % steps; + const bottom = row / steps; // normalize + const top = (row + 1) / steps; // normalize + ++i; + return [ + new $.Vector2(left, bottom), // bottom left + new $.Vector2(right, bottom), // bottom right + new $.Vector2(right, top), // top right + new $.Vector2(left, top) // top left + ]; + } + }; +})(); +const extrudeGeom = new $.ExtrudeBufferGeometry(shape, { + bevelEnabled: false, steps, extrudePath, + curveSegments: 5, UVGenerator +}); +const matSideWall = f(); +const matTop = new $.MeshLambertMaterial({ color: 'black' }); +const mesh = new $.Mesh(extrudeGeom, [matTop, matSideWall]); +scene.add(mesh); + +// ---- composer + +const composer = new EffectComposer(renderer); +composer.addPass(new RenderPass(scene, camera)); +composer.addPass(new UnrealBloomPass(new $.Vector2(), 2, 0.5, 0.7)); + +// ---- anim + +const totalLen = extrudePath.getLength(); +const { binormals } = extrudePath.computeFrenetFrames(steps); +const $m = new $.Matrix4(); // rotation matrix + +renderer.setAnimationLoop((t /*ms*/) => { + const $u = ((mpms * t) % totalLen) / totalLen; + // update cam position + extrudePath.getPointAt($u, camera.position); + // update cam rotation + camera.setRotationFromMatrix($m.lookAt( + /* eye */ camera.position, + /* target */ extrudePath.getPointAt(Math.min(1.0, $u + 0.01)), + /* up */ binormals[$u * steps | 0] + )); + renderer.getDrawingBufferSize(composer.passes[1].resolution); + composer.render(); + mesh.material[1].uniforms.t.value = t; +}); + +// ---- sidewall material + +function f() { + const url = 'https://images.unsplash.com/photo-1550747528-cdb45925b3f7?ixid=MXwxMjA3fDB8MHxzZWFyY2h8Mnx8dW5pY29ybnxlbnwwfHwwfA%3D%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=600&q=60'; + const tex = new $.TextureLoader().load(url); + tex.wrapS = $.MirroredRepeatWrapping; + tex.wrapT = $.RepeatWrapping; + + const shader = $.ShaderLib.lambert; + const uniforms = $.UniformsUtils.merge([shader.uniforms, { + t: { value: 0 }, + stretch: { value: new $.Vector2(1, 10) }, + div: { value: new $.Vector2(32, 8) }, + }]); + const vertexShader = ` + uniform sampler2D map; + uniform vec2 stretch; + ` + shader.vertexShader.replace('#include ', ` + #ifdef USE_UV + vUv = ( uvTransform * vec3( uv, 1 ) ).xy * stretch; + #endif + `); + const fragmentShader = ` + uniform vec2 div; + uniform vec2 stretch; + uniform float t; + ` + shader.fragmentShader.replace('#include ', ` + #ifdef USE_MAP + { + vec2 i = vec2(ivec2( vUv * div )); + vec4 tA = texture2D( map, ( i ) / div ); + vec4 tB = texture2D( map, ( i + 1.0 ) / div ); + vec4 texel = 0.5 * (mix( tA, tB, vUv.x ) + mix( tA, tB, vUv.y )); + texel.b = step( 0.5, texel.b ) + ( sin( t * 0.001 ) * 0.5 + 0.5 ); + texel.r *= 2.0; + texel.g *= 0.5; + vec2 uv = fract( vUv * stretch * div ); + texel *= step( 0.2, uv.x ) * step ( 0.2, uv.y ); + diffuseColor *= texel; + } + #endif + `); + const mat = new $.ShaderMaterial({ + uniforms, vertexShader, fragmentShader, + lights: true, fog: true + }); + mat.map = mat.uniforms.map.value = tex; + + return mat; +} \ No newline at end of file diff --git a/20/dist/style.css b/20/dist/style.css new file mode 100644 index 0000000..39af83a --- /dev/null +++ b/20/dist/style.css @@ -0,0 +1,3 @@ +canvas { + display:block; width:100%; height:100vh; +} \ No newline at end of file diff --git a/20/license.txt b/20/license.txt new file mode 100644 index 0000000..f4973b1 --- /dev/null +++ b/20/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by ycw (https://codepen.io/ycw/pen/OJRwedY) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/20/src/index.html b/20/src/index.html new file mode 100644 index 0000000..e69de29 diff --git a/20/src/script.js b/20/src/script.js new file mode 100644 index 0000000..b80286f --- /dev/null +++ b/20/src/script.js @@ -0,0 +1,156 @@ +import * as $ from '//unpkg.com/three@0.124.0/build/three.module.js' +import { OrbitControls } from '//unpkg.com/three@0.124.0/examples/jsm/controls/OrbitControls.js' +import { EffectComposer } from '//unpkg.com/three@0.124.0/examples/jsm/postprocessing/EffectComposer' +import { RenderPass } from '//unpkg.com/three@0.124.0/examples/jsm/postprocessing/RenderPass' +import { UnrealBloomPass } from '//unpkg.com/three@0.124.0/examples/jsm/postprocessing/UnrealBloomPass' +import { Curves } from '//unpkg.com/three@0.124.0/examples/jsm/curves/CurveExtras' +// ---- boot + +const renderer = new $.WebGLRenderer({}); +const scene = new $.Scene(); +const camera = new $.PerspectiveCamera(75, 2, .01, 5000); +window.addEventListener('resize', () => { + const { clientWidth, clientHeight } = renderer.domElement; + renderer.setSize(clientWidth, clientHeight, false); + renderer.setPixelRatio(window.devicePixelRatio); + camera.aspect = clientWidth / clientHeight; + camera.updateProjectionMatrix(); +}); +document.body.prepend(renderer.domElement); +window.dispatchEvent(new Event('resize')); + +// ---- setup + +scene.fog = new $.FogExp2('black', 0.05); +scene.add(new $.HemisphereLight('cyan', 'orange', 2)); + +// ---- const + +const mpms = (20) / 1e3; +const steps = 2000; + +// ---- mesh + +const shape = new $.Shape(); +// cw +shape.moveTo(-5, -1); +shape.quadraticCurveTo(0, -4, 5, -1); +shape.lineTo(6, -1); +shape.quadraticCurveTo(0, -5, -6, -1); +const extrudePath = new Curves.TorusKnot(); +const UVGenerator = (() => { + let i = 0; // face id + return { + generateTopUV(...xs) { // for 2 "cap" faces + return [new $.Vector2(), new $.Vector2(), new $.Vector2()]; + }, + generateSideWallUV(_geom, _vs, _a, _b, _c, _d) { // all side faces + const segments = 5; // (shape-related; NOT eq `curveSegments`) + if (i < segments * steps) { // ignore bottom road faces + ++i; + return [new $.Vector2(), new $.Vector2(), new $.Vector2(), new $.Vector2()]; + } + const n = i - segments * steps; // offseted face idx + const total_col_segments = 7; // (shape-related) + const col = n / steps | 0; + const left = col / total_col_segments; // normalize + const right = (col + 1) / total_col_segments; // normalize + const row = n % steps; + const bottom = row / steps; // normalize + const top = (row + 1) / steps; // normalize + ++i; + return [ + new $.Vector2(left, bottom), // bottom left + new $.Vector2(right, bottom), // bottom right + new $.Vector2(right, top), // top right + new $.Vector2(left, top) // top left + ]; + } + }; +})(); +const extrudeGeom = new $.ExtrudeBufferGeometry(shape, { + bevelEnabled: false, steps, extrudePath, + curveSegments: 5, UVGenerator +}); +const matSideWall = f(); +const matTop = new $.MeshLambertMaterial({ color: 'black' }); +const mesh = new $.Mesh(extrudeGeom, [matTop, matSideWall]); +scene.add(mesh); + +// ---- composer + +const composer = new EffectComposer(renderer); +composer.addPass(new RenderPass(scene, camera)); +composer.addPass(new UnrealBloomPass(new $.Vector2(), 2, 0.5, 0.7)); + +// ---- anim + +const totalLen = extrudePath.getLength(); +const { binormals } = extrudePath.computeFrenetFrames(steps); +const $m = new $.Matrix4(); // rotation matrix + +renderer.setAnimationLoop((t /*ms*/) => { + const $u = ((mpms * t) % totalLen) / totalLen; + // update cam position + extrudePath.getPointAt($u, camera.position); + // update cam rotation + camera.setRotationFromMatrix($m.lookAt( + /* eye */ camera.position, + /* target */ extrudePath.getPointAt(Math.min(1.0, $u + 0.01)), + /* up */ binormals[$u * steps | 0] + )); + renderer.getDrawingBufferSize(composer.passes[1].resolution); + composer.render(); + mesh.material[1].uniforms.t.value = t; +}); + +// ---- sidewall material + +function f() { + const url = 'https://images.unsplash.com/photo-1550747528-cdb45925b3f7?ixid=MXwxMjA3fDB8MHxzZWFyY2h8Mnx8dW5pY29ybnxlbnwwfHwwfA%3D%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=600&q=60'; + const tex = new $.TextureLoader().load(url); + tex.wrapS = $.MirroredRepeatWrapping; + tex.wrapT = $.RepeatWrapping; + + const shader = $.ShaderLib.lambert; + const uniforms = $.UniformsUtils.merge([shader.uniforms, { + t: { value: 0 }, + stretch: { value: new $.Vector2(1, 10) }, + div: { value: new $.Vector2(32, 8) }, + }]); + const vertexShader = ` + uniform sampler2D map; + uniform vec2 stretch; + ` + shader.vertexShader.replace('#include ', ` + #ifdef USE_UV + vUv = ( uvTransform * vec3( uv, 1 ) ).xy * stretch; + #endif + `); + const fragmentShader = ` + uniform vec2 div; + uniform vec2 stretch; + uniform float t; + ` + shader.fragmentShader.replace('#include ', ` + #ifdef USE_MAP + { + vec2 i = vec2(ivec2( vUv * div )); + vec4 tA = texture2D( map, ( i ) / div ); + vec4 tB = texture2D( map, ( i + 1.0 ) / div ); + vec4 texel = 0.5 * (mix( tA, tB, vUv.x ) + mix( tA, tB, vUv.y )); + texel.b = step( 0.5, texel.b ) + ( sin( t * 0.001 ) * 0.5 + 0.5 ); + texel.r *= 2.0; + texel.g *= 0.5; + vec2 uv = fract( vUv * stretch * div ); + texel *= step( 0.2, uv.x ) * step ( 0.2, uv.y ); + diffuseColor *= texel; + } + #endif + `); + const mat = new $.ShaderMaterial({ + uniforms, vertexShader, fragmentShader, + lights: true, fog: true + }); + mat.map = mat.uniforms.map.value = tex; + + return mat; +} diff --git a/20/src/style.css b/20/src/style.css new file mode 100644 index 0000000..39af83a --- /dev/null +++ b/20/src/style.css @@ -0,0 +1,3 @@ +canvas { + display:block; width:100%; height:100vh; +} \ No newline at end of file diff --git a/2021-to-2022/README.markdown b/2021-to-2022/README.markdown new file mode 100644 index 0000000..d8431cb --- /dev/null +++ b/2021-to-2022/README.markdown @@ -0,0 +1,5 @@ +# 2021 to 2022 + +A Pen created on CodePen.io. Original URL: [https://codepen.io/alvaromontoro/pen/QWqmybN](https://codepen.io/alvaromontoro/pen/QWqmybN). + + diff --git a/2021-to-2022/dist/index.html b/2021-to-2022/dist/index.html new file mode 100644 index 0000000..8725243 --- /dev/null +++ b/2021-to-2022/dist/index.html @@ -0,0 +1,49 @@ + + + + + CodePen - 2021 to 2022 + + + + + + +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+ + + + diff --git a/2021-to-2022/dist/style.css b/2021-to-2022/dist/style.css new file mode 100644 index 0000000..78d4f9c --- /dev/null +++ b/2021-to-2022/dist/style.css @@ -0,0 +1,145 @@ +@import url('https://fonts.googleapis.com/css2?family=Chango&display=swap'); + +body { + margin: 0; + height: 100vh; + overflow: hidden; + perspective: 1000px; + background: #3693; +} + +.year { + --duration: 1.5s; + --color: #147; + --shade: #57b; + display: flex; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + font-family: Chango, Arial, sans-serif; + font-size: 150px; + transform-style: preserve-3d; +} + +@keyframes rotate { + 0% { + transform: rotate3d(0, 1, 0, 0deg); + } + 100% { + transform: rotate3d(0, 1, 0, -360deg); + } +} + +@keyframes jump { + 0%, 75%, 100% { + margin-top: 0; + } + 50% { + margin-top: -20px; + } +} + +.letter { + position: relative; + animation: rotate var(--duration) linear, jump var(--duration) linear; + atransform: rotate3d(0, 1, 0, 90deg); + width: 120px; + height: 110px; + transform-style: preserve-3d; +} + +.letter div { + position: absolute; + top: 0; + left: 0; + line-height: 110px; + color: var(--color); + +} + +.letter span { + position: absolute; + left: 50%; + + transform: translate(-50%, -50%) rotateY(90deg); + display: block; + + width: 12px; + background: var(--color); +} + +.letter-2 span, +.letter-1 span{ + top: 53%; + height: 95%; +} + +.letter-0 span { + top: 54.25%; + left: 40%; + height: 98%; +} + + + + + +.letter div:nth-child(2) { + transform: translate3d(0, 0, 3px); +} + +.letter div:nth-child(3) { + color: var(--shade); + transform: translate3d(0, 0, 6px); +} + +.letter div:nth-child(4) { + transform: translate3d(0, 0, -3px); +} + +.letter div:nth-child(5) { + color: var(--shade); + transform: translate3d(0, 0, -6px); +} + +.letter-2 div::before { + content: "2"; +} + +.letter-0 div::before { + content: "0"; +} + +@keyframes changeYear { + 0%, 25% { content: "1" } + 25.5%, 100% { content: "2" } +} + + +@keyframes updateFilling { + 0%, 25% { + top: 55%; + height: 95%; + } + 25.5%, 100% { + top: 53%; + height: 95%; + } +} + +.letter-1 div::before { + content: "1"; + animation: changeYear var(--duration) calc(var(--duration) * 2.4) forwards; +} + +.letter-1 span { + top: 55%; + height: 95%; + animation: updateFilling var(--duration) calc(var(--duration) * 2.4) forwards; +} + +.letter:nth-child(1) { animation-delay: calc(var(--duration) * 0.6); } +.letter:nth-child(2) { animation-delay: calc(var(--duration) * 1.2); } +.letter:nth-child(3) { animation-delay: calc(var(--duration) * 1.8); } +.letter:nth-child(4) { animation-delay: calc(var(--duration) * 2.4); } \ No newline at end of file diff --git a/2021-to-2022/license.txt b/2021-to-2022/license.txt new file mode 100644 index 0000000..9e69b8a --- /dev/null +++ b/2021-to-2022/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Alvaro Montoro (https://codepen.io/alvaromontoro/pen/QWqmybN) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/2021-to-2022/src/index.html b/2021-to-2022/src/index.html new file mode 100644 index 0000000..5034a39 --- /dev/null +++ b/2021-to-2022/src/index.html @@ -0,0 +1,34 @@ +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ +
+
\ No newline at end of file diff --git a/2021-to-2022/src/style.css b/2021-to-2022/src/style.css new file mode 100644 index 0000000..78d4f9c --- /dev/null +++ b/2021-to-2022/src/style.css @@ -0,0 +1,145 @@ +@import url('https://fonts.googleapis.com/css2?family=Chango&display=swap'); + +body { + margin: 0; + height: 100vh; + overflow: hidden; + perspective: 1000px; + background: #3693; +} + +.year { + --duration: 1.5s; + --color: #147; + --shade: #57b; + display: flex; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + font-family: Chango, Arial, sans-serif; + font-size: 150px; + transform-style: preserve-3d; +} + +@keyframes rotate { + 0% { + transform: rotate3d(0, 1, 0, 0deg); + } + 100% { + transform: rotate3d(0, 1, 0, -360deg); + } +} + +@keyframes jump { + 0%, 75%, 100% { + margin-top: 0; + } + 50% { + margin-top: -20px; + } +} + +.letter { + position: relative; + animation: rotate var(--duration) linear, jump var(--duration) linear; + atransform: rotate3d(0, 1, 0, 90deg); + width: 120px; + height: 110px; + transform-style: preserve-3d; +} + +.letter div { + position: absolute; + top: 0; + left: 0; + line-height: 110px; + color: var(--color); + +} + +.letter span { + position: absolute; + left: 50%; + + transform: translate(-50%, -50%) rotateY(90deg); + display: block; + + width: 12px; + background: var(--color); +} + +.letter-2 span, +.letter-1 span{ + top: 53%; + height: 95%; +} + +.letter-0 span { + top: 54.25%; + left: 40%; + height: 98%; +} + + + + + +.letter div:nth-child(2) { + transform: translate3d(0, 0, 3px); +} + +.letter div:nth-child(3) { + color: var(--shade); + transform: translate3d(0, 0, 6px); +} + +.letter div:nth-child(4) { + transform: translate3d(0, 0, -3px); +} + +.letter div:nth-child(5) { + color: var(--shade); + transform: translate3d(0, 0, -6px); +} + +.letter-2 div::before { + content: "2"; +} + +.letter-0 div::before { + content: "0"; +} + +@keyframes changeYear { + 0%, 25% { content: "1" } + 25.5%, 100% { content: "2" } +} + + +@keyframes updateFilling { + 0%, 25% { + top: 55%; + height: 95%; + } + 25.5%, 100% { + top: 53%; + height: 95%; + } +} + +.letter-1 div::before { + content: "1"; + animation: changeYear var(--duration) calc(var(--duration) * 2.4) forwards; +} + +.letter-1 span { + top: 55%; + height: 95%; + animation: updateFilling var(--duration) calc(var(--duration) * 2.4) forwards; +} + +.letter:nth-child(1) { animation-delay: calc(var(--duration) * 0.6); } +.letter:nth-child(2) { animation-delay: calc(var(--duration) * 1.2); } +.letter:nth-child(3) { animation-delay: calc(var(--duration) * 1.8); } +.letter:nth-child(4) { animation-delay: calc(var(--duration) * 2.4); } \ No newline at end of file diff --git a/31-taint/README.markdown b/31-taint/README.markdown new file mode 100644 index 0000000..1994745 --- /dev/null +++ b/31-taint/README.markdown @@ -0,0 +1,7 @@ +# 31. taint + +A Pen created on CodePen.io. Original URL: [https://codepen.io/ycw/pen/BaQdJRd](https://codepen.io/ycw/pen/BaQdJRd). + +taint the wire gird. + +photo by [liu yi](https://unsplash.com/photos/zTJ0e2mbrrM) diff --git a/31-taint/dist/index.html b/31-taint/dist/index.html new file mode 100644 index 0000000..c04625c --- /dev/null +++ b/31-taint/dist/index.html @@ -0,0 +1,17 @@ + + + + + CodePen - 31. taint + + + + + + + + + + + + diff --git a/31-taint/dist/script.js b/31-taint/dist/script.js new file mode 100644 index 0000000..4c6de36 --- /dev/null +++ b/31-taint/dist/script.js @@ -0,0 +1,134 @@ +import * as $ from '//cdn.skypack.dev/three@0.125.0/build/three.module.js?min' +import { OrbitControls } from '//cdn.skypack.dev/three@0.125.0/examples/jsm/controls/OrbitControls.js?min' +import { EffectComposer } from '//cdn.skypack.dev/three@0.125.0/examples/jsm/postprocessing/EffectComposer.js?min' +import { RenderPass } from '//cdn.skypack.dev/three@0.125.0/examples/jsm/postprocessing/RenderPass.js?min' +import { UnrealBloomPass } from '//cdn.skypack.dev/three@0.125.0/examples/jsm/postprocessing/UnrealBloomPass.js?min' + +//// Boot + +const renderer = new $.WebGLRenderer({}); +const scene = new $.Scene(); +const camera = new $.PerspectiveCamera(75, 2, 20, 12000); +const controls = new OrbitControls(camera, renderer.domElement); +window.addEventListener('resize', () => { + const { clientWidth, clientHeight } = renderer.domElement; + renderer.setSize(clientWidth, clientHeight, false); + renderer.setPixelRatio(window.devicePixelRatio); + camera.aspect = clientWidth / clientHeight; + camera.updateProjectionMatrix(); +}); +document.body.prepend(renderer.domElement); +window.dispatchEvent(new Event('resize')); + +//// Inputs + +const size = 5000; +const segs = 500; +const disp = 500; + +//// Setup + +camera.position.set(1000, 1200, 1200); +controls.autoRotate = true; +controls.enableDamping = true; +controls.maxPolarAngle = Math.PI / 2.9; + +const light0 = new $.DirectionalLight('white', 1); +light0.position.set(0, 1, 0); +scene.add(light0); + +const tex0 = new $.TextureLoader().load('https://images.unsplash.com/photo-1613799122437-c48c0e4cd5c0?ixid=MXwxMjA3fDB8MHxlZGl0b3JpYWwtZmVlZHw3OXx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=600&q=60'); + +const mesh0 = new $.Mesh( + new $.PlaneBufferGeometry(size, size, segs, segs).rotateX(-0.5 * Math.PI), + f() +); +scene.add(mesh0); +const mesh1 = new $.Mesh( + new $.PlaneBufferGeometry(size, size, segs >> 1, segs >> 1).rotateX(-0.5 * Math.PI), + f({ wireframe: true, color: new $.Color('#333') }) +); +scene.add(mesh1); + +//// Make Material + +function f({ wireframe, color } = {}) { + const mat = new $.ShaderMaterial({ + extensions: { + derivatives: true, // wgl 1 + }, + lights: true, + wireframe: Boolean(wireframe), + uniforms: $.UniformsUtils.merge([ + $.ShaderLib.standard.uniforms, { + time: { value: 0 }, + displacementScale: { value: disp }, + wireframe: { value: wireframe || false }, + color: { value: color || new $.Color() }, + roughness: { value: 1 }, + metalness: { value: 0 } + } + ]), + vertexShader: ` + varying vec3 vWorldPos; + ` + $.ShaderLib.standard.vertexShader.replace("#include ", ` + // #if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) + vec4 worldPosition = vec4( transformed, 1.0 ); + #ifdef USE_INSTANCING + worldPosition = instanceMatrix * worldPosition; + #endif + worldPosition = modelMatrix * worldPosition; + vWorldPos = worldPosition.xyz; + // #endif + `).replace("#include ", ` + #ifdef USE_DISPLACEMENTMAP + transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias ); + // form a bowl + float yOffset = length( position.xz ) / ${size.toFixed(1)}; + yOffset = pow(sin(yOffset * 2.0), 2.0); + transformed.y += yOffset * ${size.toFixed(1)} / 3.0; + #endif + `), + fragmentShader: ` + varying vec3 vWorldPos; + uniform float time; + uniform bool wireframe; + uniform vec3 color; + ` + $.ShaderLib.standard.fragmentShader.replace( + "gl_FragColor = vec4( outgoingLight, diffuseColor.a );", ` + gl_FragColor = vec4( outgoingLight, diffuseColor.a ); + float ths = ${size.toFixed(1)} * pow(sin(time * 0.00015), 2.0); + if ( !wireframe ) { + if ( length( vWorldPos ) > ths ) { + discard; + } + } else { + gl_FragColor = vec4( color, 1.0 ); + if ( length( vWorldPos ) < ths ) { + discard; + } + } + `) + }); + mat.map = mat.uniforms.map.value = tex0; + mat.displacementMap = mat.uniforms.displacementMap.value = tex0; + return mat; +} + +//// Render + +const res = new $.Vector2(); +window.addEventListener('resize', () => { + renderer.getDrawingBufferSize(res); + fx.setSize(res.width, res.height); +}); +const fx = new EffectComposer(renderer); +fx.addPass(new RenderPass(scene, camera)); +fx.addPass(new UnrealBloomPass(res, 0.5, 0.5, 0.3)); + +renderer.setAnimationLoop((t) => { + fx.render(); + mesh0.material.uniforms.time.value = t; + mesh1.material.uniforms.time.value = t; + controls.update(); +}); \ No newline at end of file diff --git a/31-taint/dist/style.css b/31-taint/dist/style.css new file mode 100644 index 0000000..363bc74 --- /dev/null +++ b/31-taint/dist/style.css @@ -0,0 +1,3 @@ +canvas { + display:block; width:100%; height:100vh; cursor: -webkit-grab; cursor: grab; +} \ No newline at end of file diff --git a/31-taint/license.txt b/31-taint/license.txt new file mode 100644 index 0000000..b043ca4 --- /dev/null +++ b/31-taint/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by ycw (https://codepen.io/ycw/pen/BaQdJRd) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/31-taint/src/index.html b/31-taint/src/index.html new file mode 100644 index 0000000..e69de29 diff --git a/31-taint/src/script.js b/31-taint/src/script.js new file mode 100644 index 0000000..f3f8465 --- /dev/null +++ b/31-taint/src/script.js @@ -0,0 +1,134 @@ +import * as $ from '//cdn.skypack.dev/three@0.125.0/build/three.module.js?min' +import { OrbitControls } from '//cdn.skypack.dev/three@0.125.0/examples/jsm/controls/OrbitControls.js?min' +import { EffectComposer } from '//cdn.skypack.dev/three@0.125.0/examples/jsm/postprocessing/EffectComposer.js?min' +import { RenderPass } from '//cdn.skypack.dev/three@0.125.0/examples/jsm/postprocessing/RenderPass.js?min' +import { UnrealBloomPass } from '//cdn.skypack.dev/three@0.125.0/examples/jsm/postprocessing/UnrealBloomPass.js?min' + +//// Boot + +const renderer = new $.WebGLRenderer({}); +const scene = new $.Scene(); +const camera = new $.PerspectiveCamera(75, 2, 20, 12000); +const controls = new OrbitControls(camera, renderer.domElement); +window.addEventListener('resize', () => { + const { clientWidth, clientHeight } = renderer.domElement; + renderer.setSize(clientWidth, clientHeight, false); + renderer.setPixelRatio(window.devicePixelRatio); + camera.aspect = clientWidth / clientHeight; + camera.updateProjectionMatrix(); +}); +document.body.prepend(renderer.domElement); +window.dispatchEvent(new Event('resize')); + +//// Inputs + +const size = 5000; +const segs = 500; +const disp = 500; + +//// Setup + +camera.position.set(1000, 1200, 1200); +controls.autoRotate = true; +controls.enableDamping = true; +controls.maxPolarAngle = Math.PI / 2.9; + +const light0 = new $.DirectionalLight('white', 1); +light0.position.set(0, 1, 0); +scene.add(light0); + +const tex0 = new $.TextureLoader().load('https://images.unsplash.com/photo-1613799122437-c48c0e4cd5c0?ixid=MXwxMjA3fDB8MHxlZGl0b3JpYWwtZmVlZHw3OXx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=600&q=60'); + +const mesh0 = new $.Mesh( + new $.PlaneBufferGeometry(size, size, segs, segs).rotateX(-0.5 * Math.PI), + f() +); +scene.add(mesh0); +const mesh1 = new $.Mesh( + new $.PlaneBufferGeometry(size, size, segs >> 1, segs >> 1).rotateX(-0.5 * Math.PI), + f({ wireframe: true, color: new $.Color('#333') }) +); +scene.add(mesh1); + +//// Make Material + +function f({ wireframe, color } = {}) { + const mat = new $.ShaderMaterial({ + extensions: { + derivatives: true, // wgl 1 + }, + lights: true, + wireframe: Boolean(wireframe), + uniforms: $.UniformsUtils.merge([ + $.ShaderLib.standard.uniforms, { + time: { value: 0 }, + displacementScale: { value: disp }, + wireframe: { value: wireframe || false }, + color: { value: color || new $.Color() }, + roughness: { value: 1 }, + metalness: { value: 0 } + } + ]), + vertexShader: ` + varying vec3 vWorldPos; + ` + $.ShaderLib.standard.vertexShader.replace("#include ", ` + // #if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) + vec4 worldPosition = vec4( transformed, 1.0 ); + #ifdef USE_INSTANCING + worldPosition = instanceMatrix * worldPosition; + #endif + worldPosition = modelMatrix * worldPosition; + vWorldPos = worldPosition.xyz; + // #endif + `).replace("#include ", ` + #ifdef USE_DISPLACEMENTMAP + transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias ); + // form a bowl + float yOffset = length( position.xz ) / ${size.toFixed(1)}; + yOffset = pow(sin(yOffset * 2.0), 2.0); + transformed.y += yOffset * ${size.toFixed(1)} / 3.0; + #endif + `), + fragmentShader: ` + varying vec3 vWorldPos; + uniform float time; + uniform bool wireframe; + uniform vec3 color; + ` + $.ShaderLib.standard.fragmentShader.replace( + "gl_FragColor = vec4( outgoingLight, diffuseColor.a );", ` + gl_FragColor = vec4( outgoingLight, diffuseColor.a ); + float ths = ${size.toFixed(1)} * pow(sin(time * 0.00015), 2.0); + if ( !wireframe ) { + if ( length( vWorldPos ) > ths ) { + discard; + } + } else { + gl_FragColor = vec4( color, 1.0 ); + if ( length( vWorldPos ) < ths ) { + discard; + } + } + `) + }); + mat.map = mat.uniforms.map.value = tex0; + mat.displacementMap = mat.uniforms.displacementMap.value = tex0; + return mat; +} + +//// Render + +const res = new $.Vector2(); +window.addEventListener('resize', () => { + renderer.getDrawingBufferSize(res); + fx.setSize(res.width, res.height); +}); +const fx = new EffectComposer(renderer); +fx.addPass(new RenderPass(scene, camera)); +fx.addPass(new UnrealBloomPass(res, 0.5, 0.5, 0.3)); + +renderer.setAnimationLoop((t) => { + fx.render(); + mesh0.material.uniforms.time.value = t; + mesh1.material.uniforms.time.value = t; + controls.update(); +}); diff --git a/31-taint/src/style.css b/31-taint/src/style.css new file mode 100644 index 0000000..5be0ef5 --- /dev/null +++ b/31-taint/src/style.css @@ -0,0 +1,3 @@ +canvas { + display:block; width:100%; height:100vh; cursor: grab; +} \ No newline at end of file diff --git a/3d-css-kinetic-type-poster/README.markdown b/3d-css-kinetic-type-poster/README.markdown new file mode 100644 index 0000000..de4b052 --- /dev/null +++ b/3d-css-kinetic-type-poster/README.markdown @@ -0,0 +1,6 @@ +# 3D CSS Kinetic Type Poster + _A Pen created at CodePen.io. Original URL: [https://codepen.io/petebarr/pen/OJPBEwy](https://codepen.io/petebarr/pen/OJPBEwy). + + Kinetic typography poster. 3D CSS with GSAP 3. + +Firefox doesn't seem to like -webkit-text-fill-color: transparent; in this example. Perhaps related to the transform rotation animation. \ No newline at end of file diff --git a/3d-css-kinetic-type-poster/dist/index.html b/3d-css-kinetic-type-poster/dist/index.html new file mode 100644 index 0000000..c82cc2d --- /dev/null +++ b/3d-css-kinetic-type-poster/dist/index.html @@ -0,0 +1,34 @@ + + + + + CodePen - 3D CSS Kinetic Type Poster + + + + + + +
+
+
+
+

Linear

+
+
+

Progress

+

The Path Is Not Linear but Circular and Continuous

+
+
+
+
+
+
+
+
+ + + + + + diff --git a/3d-css-kinetic-type-poster/dist/script.js b/3d-css-kinetic-type-poster/dist/script.js new file mode 100644 index 0000000..3de18c9 --- /dev/null +++ b/3d-css-kinetic-type-poster/dist/script.js @@ -0,0 +1,167 @@ +console.clear(); + +gsap.registerPlugin(SplitText); + +select = e => document.querySelector(e); + +let fontSize = gsap.getProperty(':root', '--fontSize'); +let txt = select('.txt'); +let wheel = select('.wheel'); +let poster = select('.poster'); +let numLines = 20; +let radius = (fontSize/(numLines/2))/Math.sin((180/numLines)*(Math.PI/180)); +let angle = 360/numLines; +let origin = `0% 50% -${radius*2}px`; +let master = gsap.timeline(); + + +function cloneTxt() { + for (i=0; i { + master.restart(); + } + resize(); +} + +function calcOffset(xPos, yPos) { + let winW = window.innerWidth; + let winH = window.innerHeight; + let dX = 2*(xPos - winW/2)/winW; + let dY = -2*(yPos - winH/2)/winH; + return [dX,dY]; +} + +function rotateTxt(xPos, yPos) { + let nPos = calcOffset(xPos, yPos); // get cursor position from center 1-0-1 + let nX = nPos[0]; + let nY = nPos[1]; + let invertedRangeX = 1-Math.sqrt(nX*nX); // 0-1-0 + let invertedRangeY = 1-Math.sqrt(nY*nY); // 0-1-0 + gsap.to('.stage', { + rotationX: nPos[1]*5, + rotationY: nX*5, + // rotation: nX*40, + duration: 1, + ease: 'sine' + }); +} + +var pointer = { + x: window.innerWidth / 2, + y: window.innerHeight / 2 +}; + +window.addEventListener("mousemove", function(event) { + pointer.x = event.clientX; + pointer.y = event.clientY; + rotateTxt(pointer.x, pointer.y); +}); + +window.onresize = resize; + +window.onload = () => { + init(); +}; \ No newline at end of file diff --git a/3d-css-kinetic-type-poster/dist/style.css b/3d-css-kinetic-type-poster/dist/style.css new file mode 100644 index 0000000..7c8904b --- /dev/null +++ b/3d-css-kinetic-type-poster/dist/style.css @@ -0,0 +1,187 @@ +@import url("https://rsms.me/inter/inter.css"); +html { + font-family: 'Inter', sans-serif; +} + +@supports (font-variation-settings: normal) { + html { + font-family: 'Inter var', sans-serif; + font-style: normal; + font-weight: 100 900; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } +} +:root { + --fontSize: 120px; + --borderW: 20px; +} + +html { + box-sizing: border-box; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +body, +html { + height: 100%; + width: 100%; + margin: 0; + padding: 0; +} + +body { + background: #C4CACE; + color: white; + overflow: hidden; +} +body ::-moz-selection { + background: transparent; +} +body ::selection { + background: transparent; +} + +.wrapper { + height: 100%; + display: -webkit-box; + display: flex; + -webkit-box-align: center; + align-items: center; + -webkit-box-pack: center; + justify-content: center; + -webkit-perspective: 1400px; + perspective: 1400px; +} + +.stage { + padding: 20px; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} + +.poster { + position: relative; + height: calc(var(--fontSize)*8); + width: calc(var(--fontSize)*6); + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + visibility: hidden; + opacity: 0; + background: white; + overflow: hidden; + -webkit-perspective: 700px; + perspective: 700px; + cursor: pointer; + box-shadow: 0 20px 40px -15px rgba(0, 0, 0, 0.3), 0 40px 50px -20px rgba(0, 0, 0, 0.3), 0 70px 60px -30px rgba(0, 0, 0, 0.1), 0 40px 70px -5px rgba(0, 0, 0, 0.1); +} + +.poster__base1 { + position: absolute; + z-index: 2; + top: var(--borderW); + left: var(--borderW); + width: calc(100% - calc(2*var(--borderW))); + height: calc(100% - calc(2*var(--borderW))); + background: black; + display: -webkit-box; + display: flex; + -webkit-box-align: center; + align-items: center; + -webkit-box-pack: center; + justify-content: center; +} + +.poster__base2 { + position: absolute; + z-index: 1; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: white; + display: -webkit-box; + display: flex; + -webkit-box-align: center; + align-items: center; + -webkit-box-pack: center; + justify-content: center; +} + +.wheel { + position: relative; + z-index: 3; + top: calc(-1 * var(--fontSize)/2.5); + width: 100%; + height: 100%; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} + +.txt { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + margin: 0; + font-size: var(--fontSize); + font-weight: 900; + font-stretch: 50%; + text-transform: uppercase; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + line-height: 1; + white-space: nowrap; + letter-spacing: -5px; +} + +.char { + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + /* standard gradient background */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(20%, white), color-stop(80%, black)); + background: linear-gradient(white 20%, black 80%); + /* clip hackery */ + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +.content { + position: absolute; + z-index: 3; + bottom: 0; + width: 100%; + height: 150px; + padding: var(--borderW); + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} + +.title { + margin: 0; + text-transform: uppercase; + text-align: center; + font-weight: 900; + font-size: 24px; + letter-spacing: 20px; + padding-left: 10px; +} + +.desc { + text-transform: uppercase; + text-align: center; + font-weight: 600; + font-size: 11px; + letter-spacing: 1px; + color: #0090FF; + margin-top: 24px; + padding-right: 10px; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} \ No newline at end of file diff --git a/3d-css-kinetic-type-poster/license.txt b/3d-css-kinetic-type-poster/license.txt new file mode 100644 index 0000000..ad6cff4 --- /dev/null +++ b/3d-css-kinetic-type-poster/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Pete Barr (https://codepen.io/petebarr/pen/OJPBEwy) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/3d-css-kinetic-type-poster/src/index.html b/3d-css-kinetic-type-poster/src/index.html new file mode 100644 index 0000000..a7ac214 --- /dev/null +++ b/3d-css-kinetic-type-poster/src/index.html @@ -0,0 +1,18 @@ +
+
+
+
+

Linear

+
+
+

Progress

+

The Path Is Not Linear but Circular and Continuous

+
+
+
+
+
+
+
+
+ diff --git a/3d-css-kinetic-type-poster/src/script.js b/3d-css-kinetic-type-poster/src/script.js new file mode 100644 index 0000000..1eff8b1 --- /dev/null +++ b/3d-css-kinetic-type-poster/src/script.js @@ -0,0 +1,167 @@ +console.clear(); + +gsap.registerPlugin(SplitText); + +select = e => document.querySelector(e); + +let fontSize = gsap.getProperty(':root', '--fontSize'); +let txt = select('.txt'); +let wheel = select('.wheel'); +let poster = select('.poster'); +let numLines = 20; +let radius = (fontSize/(numLines/2))/Math.sin((180/numLines)*(Math.PI/180)); +let angle = 360/numLines; +let origin = `0% 50% -${radius*2}px`; +let master = gsap.timeline(); + + +function cloneTxt() { + for (i=0; i { + master.restart(); + } + resize(); +} + +function calcOffset(xPos, yPos) { + let winW = window.innerWidth; + let winH = window.innerHeight; + let dX = 2*(xPos - winW/2)/winW; + let dY = -2*(yPos - winH/2)/winH; + return [dX,dY]; +} + +function rotateTxt(xPos, yPos) { + let nPos = calcOffset(xPos, yPos); // get cursor position from center 1-0-1 + let nX = nPos[0]; + let nY = nPos[1]; + let invertedRangeX = 1-Math.sqrt(nX*nX); // 0-1-0 + let invertedRangeY = 1-Math.sqrt(nY*nY); // 0-1-0 + gsap.to('.stage', { + rotationX: nPos[1]*5, + rotationY: nX*5, + // rotation: nX*40, + duration: 1, + ease: 'sine' + }); +} + +var pointer = { + x: window.innerWidth / 2, + y: window.innerHeight / 2 +}; + +window.addEventListener("mousemove", function(event) { + pointer.x = event.clientX; + pointer.y = event.clientY; + rotateTxt(pointer.x, pointer.y); +}); + +window.onresize = resize; + +window.onload = () => { + init(); +}; diff --git a/3d-css-kinetic-type-poster/src/style.scss b/3d-css-kinetic-type-poster/src/style.scss new file mode 100644 index 0000000..4b8d0a9 --- /dev/null +++ b/3d-css-kinetic-type-poster/src/style.scss @@ -0,0 +1,168 @@ +@import url('https://rsms.me/inter/inter.css'); + +html { + font-family: 'Inter', sans-serif; +} +@supports (font-variation-settings: normal) { + html { + font-family: 'Inter var', sans-serif; + font-style: normal; + font-weight: 100 900; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } +} + +:root { + --fontSize: 120px; + --borderW: 20px; +} + +html { + box-sizing: border-box; +} +*, +*:before, +*:after { + box-sizing: inherit; +} + +body, +html { + height: 100%; + width: 100%; + margin: 0; + padding: 0; +} + +body { + background: #C4CACE; + color: white; + overflow: hidden; + ::selection { + background: transparent; + } +} + +.wrapper { + height: 100%; + display: flex; + align-items: center; + justify-content: center; + perspective: 1400px; +} + +.stage { + padding: 20px; + transform-style: preserve-3d; +} + +.poster { + position: relative; + height: calc(var(--fontSize)*8); + width: calc(var(--fontSize)*6); + transform-style: preserve-3d; + visibility: hidden; + opacity: 0; + background: white; + overflow: hidden; + perspective: 700px; + cursor: pointer; + box-shadow: + 0 20px 40px -15px rgba(0,0,0,0.3), + 0 40px 50px -20px rgba(0,0,0,0.3), + 0 70px 60px -30px rgba(0,0,0,0.1), + 0 40px 70px -5px rgba(0,0,0,0.1); +} + +.poster__base1 { + position: absolute; + z-index: 2; + top: var(--borderW); + left: var(--borderW); + width: calc(100% - calc(2*var(--borderW))); + height: calc(100% - calc(2*var(--borderW))); + background: black; + display: flex; + align-items: center; + justify-content: center; +} + +.poster__base2 { + position: absolute; + z-index: 1; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: white; + display: flex; + align-items: center; + justify-content: center; +} + +.wheel { + position: relative; + z-index: 3; + top: calc(-1 * var(--fontSize)/2.5); + width: 100%; + height: 100%; + transform-style: preserve-3d; +} + +.txt { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + margin: 0; + font-size: var(--fontSize); + font-weight: 900; + font-stretch: 50%; + text-transform: uppercase; + transform-style: preserve-3d; + line-height: 1; + white-space: nowrap; + letter-spacing: -5px; +} + +.char { + transform-style: preserve-3d; + /* standard gradient background */ + background: linear-gradient(white 20%, black 80%); + /* clip hackery */ + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +.content { + position: absolute; + z-index: 3; + bottom: 0; + width: 100%; + height: 150px; + padding: var(--borderW); + transform-style: preserve-3d; +} + +.title { + margin: 0; + text-transform: uppercase; + text-align: center; + font-weight: 900; + font-size: 24px; + letter-spacing: 20px; + padding-left: 10px; +} + +.desc { + text-transform: uppercase; + text-align: center; + font-weight: 600; + font-size: 11px; + letter-spacing: 1px; + color: #0090FF; + margin-top: 24px; + padding-right: 10px; + transform-style: preserve-3d; +} \ No newline at end of file diff --git a/3d-css-plane-tap-to-toggle-mouse-move-parallax/README.markdown b/3d-css-plane-tap-to-toggle-mouse-move-parallax/README.markdown new file mode 100644 index 0000000..c06bbfd --- /dev/null +++ b/3d-css-plane-tap-to-toggle-mouse-move-parallax/README.markdown @@ -0,0 +1,5 @@ +# 3D CSS Plane ๐Ÿ˜Ž (Tap to Toggle + Mouse Move Parallax) + +A Pen created on CodePen.io. Original URL: [https://codepen.io/jh3y/pen/NWdNMBJ](https://codepen.io/jh3y/pen/NWdNMBJ). + + diff --git a/3d-css-plane-tap-to-toggle-mouse-move-parallax/dist/index.html b/3d-css-plane-tap-to-toggle-mouse-move-parallax/dist/index.html new file mode 100644 index 0000000..1cde9f9 --- /dev/null +++ b/3d-css-plane-tap-to-toggle-mouse-move-parallax/dist/index.html @@ -0,0 +1,291 @@ + + + + + CodePen - 3D CSS Plane ๐Ÿ˜Ž (Tap to Toggle + Mouse Move Parallax) + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + diff --git a/3d-css-plane-tap-to-toggle-mouse-move-parallax/dist/script.js b/3d-css-plane-tap-to-toggle-mouse-move-parallax/dist/script.js new file mode 100644 index 0000000..6f02343 --- /dev/null +++ b/3d-css-plane-tap-to-toggle-mouse-move-parallax/dist/script.js @@ -0,0 +1,16 @@ +import gsap from 'https://cdn.skypack.dev/gsap'; + +const BOUNDS = 50; +document.addEventListener('pointermove', ({ x, y }) => { + const newX = gsap.utils.mapRange(0, window.innerWidth, -BOUNDS, BOUNDS, x); + const newY = gsap.utils.mapRange(0, window.innerHeight, BOUNDS, -BOUNDS, y); + gsap.set(document.documentElement, { + '--rotate-x': newY, + '--rotate-y': newX }); + +}); + +const CHECKER = document.querySelector('[type="checkbox"]'); + +CHECKER.addEventListener('input', (e) => +document.documentElement.style.setProperty('--dark', CHECKER.checked ? 1 : 0)); \ No newline at end of file diff --git a/3d-css-plane-tap-to-toggle-mouse-move-parallax/dist/style.css b/3d-css-plane-tap-to-toggle-mouse-move-parallax/dist/style.css new file mode 100644 index 0000000..5423152 --- /dev/null +++ b/3d-css-plane-tap-to-toggle-mouse-move-parallax/dist/style.css @@ -0,0 +1,777 @@ +.cuboid { + width: 100%; + height: 100%; + position: relative; +} +.cuboid__side:nth-of-type(1) { + height: calc(var(--thickness) * 1vmin); + width: 100%; + position: absolute; + top: 0; + transform: translate(0, -50%) rotateX(90deg); +} +.cuboid__side:nth-of-type(2) { + height: 100%; + width: calc(var(--thickness) * 1vmin); + position: absolute; + top: 50%; + right: 0; + transform: translate(50%, -50%) rotateY(90deg); +} +.cuboid__side:nth-of-type(3) { + width: 100%; + height: calc(var(--thickness) * 1vmin); + position: absolute; + bottom: 0; + transform: translate(0%, 50%) rotateX(90deg); +} +.cuboid__side:nth-of-type(4) { + height: 100%; + width: calc(var(--thickness) * 1vmin); + position: absolute; + left: 0; + top: 50%; + transform: translate(-50%, -50%) rotateY(90deg); +} +.cuboid__side:nth-of-type(5) { + height: 100%; + width: 100%; + transform: translate3d(0, 0, calc(var(--thickness) * 0.5vmin)); + position: absolute; + top: 0; + left: 0; +} +.cuboid__side:nth-of-type(6) { + height: 100%; + width: 100%; + transform: translate3d(0, 0, calc(var(--thickness) * -0.5vmin)) rotateY(180deg); + position: absolute; + top: 0; + left: 0; +} +*, +*:after, +*:before { + box-sizing: border-box; + transform-style: preserve-3d; + transition: background 0.25s; +} +body { + min-height: 100vh; + display: grid; + place-items: center; + background: var(--bg); + overflow: hidden; +} +:root { + --dark: 0; + --base-size: 20; + --plane-height: calc(var(--base-size) * 1vmin); + --plane-width: calc(var(--plane-height) * 1.6); + --white-one: hsl(0, 0%, calc((90 - (var(--dark) * 30)) * 1%)); + --white-two: hsl(0, 0%, calc((85 - (var(--dark) * 30)) * 1%)); + --white-three: hsl(0, 0%, calc((80 - (var(--dark) * 30)) * 1%)); + --white-four: hsl(0, 0%, calc((75 - (var(--dark) * 30)) * 1%)); + --white-five: hsl(0, 0%, calc((70 - (var(--dark) * 30)) * 1%)); + --accent-hue: 10; + --accent-one: hsl(var(--accent-hue), 80%, calc((60 - (var(--dark) * 20)) * 1%)); + --accent-two: hsl(var(--accent-hue), 80%, calc((55 - (var(--dark) * 20)) * 1%)); + --accent-three: hsl(var(--accent-hue), 80%, calc((50 - (var(--dark) * 20)) * 1%)); + --accent-four: hsl(var(--accent-hue), 80%, calc((45 - (var(--dark) * 20)) * 1%)); + --accent-five: hsl(var(--accent-hue), 80%, calc((40 - (var(--dark) * 20)) * 1%)); + --screen: hsla(210, 80%, calc((70 - (var(--dark) * 20)) * 1%), 0.25); + --metal-one: hsl(0, 0%, calc((60 - (var(--dark) * 20)) * 1%)); + --metal-two: hsl(0, 0%, calc((50 - (var(--dark) * 20)) * 1%)); + --metal-three: hsl(0, 0%, calc((40 - (var(--dark) * 20)) * 1%)); + --wheel-one: #1a1a1a; + --wheel-two: #0d0d0d; + --wheel-three: #000; + --wheel-hub: hsl(0, 0%, calc((98 - (var(--dark) * 20)) * 1%)); + --bg: hsl(210, 80%, calc((90 - (var(--dark) * 76)) * 1%)); + --night: #082949; + --cloud-one: hsl(0, 0%, calc((98 - (var(--dark) * 35)) * 1%)); + --cloud-two: hsl(0, 0%, calc((94 - (var(--dark) * 35)) * 1%)); + --cloud-three: hsl(0, 0%, calc((90 - (var(--dark) * 35)) * 1%)); + --cloud-four: hsl(0, 0%, calc((86 - (var(--dark) * 35)) * 1%)); + --cloud-five: hsl(0, 0%, calc((82 - (var(--dark) * 35)) * 1%)); + --cloud-six: hsl(0, 0%, calc((78 - (var(--dark) * 35)) * 1%)); +} +.scene { + transform: translate(-50%, -50%); + position: fixed; + top: 50%; + left: 50%; + transform: translate3d(-50%, -50%, 100vmin) rotateX(-24deg) rotateY(44deg) rotateX(calc(var(--rotate-x, 0) * 1deg)) rotateY(calc(var(--rotate-y, 0) * 1deg)); +} +[type="checkbox"] { + position: fixed; + left: 100%; + opacity: 0; + visibility: hidden; +} +label { + height: 100vh; + width: 100vw; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + transform: translate3d(0, 0, 1000vmin); +} +.plane { + height: var(--plane-height); + width: var(--plane-width); + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + -webkit-animation: roll 10s infinite ease-out alternate; + animation: roll 10s infinite ease-out alternate; +} +.plane__floater { + position: absolute; + width: var(--plane-width); + height: var(--plane-width); + transform: translate(-50%, -50%); + top: 50%; + left: 50%; + -webkit-animation: float 2s infinite ease-in-out; + animation: float 2s infinite ease-in-out; +} +.plane__looper { + position: absolute; + width: var(--plane-width); + height: var(--plane-width); + transform: translate(-50%, -50%); + top: 50%; + left: 50%; + transform-origin: 50% 0; + -webkit-animation: loop 10s infinite ease-in-out; + animation: loop 10s infinite ease-in-out; +} +.plane * { + position: absolute; +} +.plane__body { + height: 40%; + width: 36%; + bottom: 20%; + left: 10%; +} +.plane__wheels { + bottom: 0; + width: calc(var(--plane-height) * 0.2); + left: 32%; + transform: translate(-50%, 0); + height: 20%; +} +.plane__axle { + height: 50%; + width: 50%; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.plane__wheel { + height: 100%; + width: 100%; + top: 0; + left: 0; +} +.plane__wings { + height: 70%; + width: 40%; + bottom: 19%; + left: 12%; +} +.plane__tail { + height: 40%; + width: 54%; + bottom: 20%; + left: 46%; +} +.plane__nose { + height: 30%; + width: 10%; + bottom: 25%; +} +.plane__stabilizer--horizontal { + height: 9%; + width: 16%; + right: 1%; + bottom: 50%; +} +.plane__screen { + bottom: 60%; + left: 30%; + width: 6%; + height: 14%; +} +.plane__propellor { + height: calc(var(--base-size) * 0.75vmin); + width: calc(var(--base-size) * 0.75vmin); + left: -1%; + bottom: 40%; + transform: translate(-50%, 50%) rotateY(-90deg); +} +.plane__propellor:after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + transform: translate3d(-50%, -50%, 2px); + height: 16%; + width: 16%; + border-radius: 50%; + background: var(--white-one); +} +.plane__stabilizer--vertical { + height: 20%; + width: 20%; + right: 0; + bottom: 60%; +} +.plane__beacon { + right: 1%; + bottom: 80%; + height: 2%; + width: 2%; +} +.plane__wheel--left { + transform: translate3d(0, 0, calc(var(--base-size) * 0.3vmin)); +} +.plane__wheel--right { + transform: translate3d(0, 0, calc(var(--base-size) * -0.3vmin)); +} +.propellor { + height: 100%; + width: 100%; + -webkit-animation: spin 0.35s infinite linear; + animation: spin 0.35s infinite linear; +} +.propellor:after, +.propellor:before { + content: ''; + height: 100%; + width: 10%; + position: absolute; + top: 50%; + left: 50%; + background: linear-gradient(transparent 0 5%, var(--accent-two) 5% 15%, transparent 15% 85%, var(--accent-two) 85% 95%, transparent 95%), #000; + transform: translate(-50%, -50%) rotate(calc(var(--r, 45) * 1deg)); +} +.propellor:after { + --r: -45; +} +.wings__ghost { + height: 80%; + width: 80%; + left: 50%; + bottom: 10%; + transform: translate(-50%, 0); +} +.wings__top { + top: 0; + height: 10%; + width: 100%; + left: 0; +} +.wings__bottom { + bottom: 0; + height: 10%; + width: 100%; + left: 0; +} +.wings__strobe { + bottom: 10%; + height: 4%; + width: 4%; + left: 50%; +} +.wings__strobe--left { + transform: translate3d(-50%, 0, calc(var(--base-size) * 1vmin)); +} +.wings__strobe--right { + transform: translate3d(-50%, 0, calc(var(--base-size) * -1vmin)); +} +.cloud { + height: 10vmin; + width: 15vmin; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.cloud__shift { + height: 100%; + width: 100%; + -webkit-animation: pan calc(var(--speed, 5) * 1s) calc(var(--delay, 5) * -1s) infinite ease-in-out both; + animation: pan calc(var(--speed, 5) * 1s) calc(var(--delay, 5) * -1s) infinite ease-in-out both; +} +.cloud__body { + height: 100%; + width: 100%; + -webkit-animation: scale calc(var(--speed, 5) * 1s) calc(var(--delay, 5) * -1s) infinite linear; + animation: scale calc(var(--speed, 5) * 1s) calc(var(--delay, 5) * -1s) infinite linear; +} +.cloud__body > div { + position: absolute; +} +.cloud__body > div:nth-of-type(1) { + bottom: 0; + left: 25%; + width: 60%; + height: 90%; + --thickness: calc(var(--base-size) * 0.2); +} +.cloud__body > div:nth-of-type(2) { + bottom: 0; + left: 0; + width: 50%; + height: 60%; + --thickness: calc(var(--base-size) * 0.3); +} +.cloud__body > div:nth-of-type(3) { + bottom: 0; + right: 0%; + width: 60%; + height: 40%; + --thickness: calc(var(--base-size) * 0.4); +} +.cloud--one { + --speed: 2; + --delay: 3; + transform: translate(-50%, -50%) translate3d(-40vmin, 20vmin, 26vmin); +} +.cloud--two { + --speed: 4; + --delay: 1; + transform: translate(-50%, -50%) translate3d(30vmin, -15vmin, -34vmin); +} +.cloud--three { + --speed: 6; + --delay: 2; + transform: translate(-50%, -50%) translate3d(50vmin, 35vmin, -14vmin); +} +.cuboid--body { + --thickness: calc(var(--base-size) * 0.4); +} +.cuboid--body div { + background: var(--white-two); +} +.cuboid--body div:nth-of-type(1) { + background: var(--white-one); +} +.cuboid--body div:nth-of-type(2) { + background: var(--white-two); +} +.cuboid--body div:nth-of-type(3) { + background: var(--white-three); +} +.cuboid--body div:nth-of-type(4) { + background: var(--white-four); +} +.cuboid--body div:nth-of-type(5):after, +.cuboid--body div:nth-of-type(6):after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + height: calc(var(--base-size) * 0.25vmin); + width: calc(var(--base-size) * 0.25vmin); + background-image: url("https://assets.codepen.io/605876/avatar.png"); + background-size: cover; + filter: saturate(0.65); + transform: translate3d(-50%, -50%, 1px); +} +.cuboid--screen { + --thickness: calc(var(--base-size) * 0.26); +} +.cuboid--screen div { + background: var(--screen); +} +.cuboid--tail { + --thickness: calc(var(--base-size) * 0.3); +} +.cuboid--tail div { + background: var(--white-two); +} +.cuboid--tail div:nth-of-type(1) { + background: var(--white-one); +} +.cuboid--tail div:nth-of-type(1):after { + content: ''; + position: absolute; + height: 74%; + width: 50%; + background: var(--metal-three); + top: 50%; + right: 50%; + transform: translate3d(-50%, -50%, 1px); +} +.cuboid--tail div:nth-of-type(2) { + background: linear-gradient(var(--white-two) 0 30%, transparent 30%); +} +.cuboid--tail div:nth-of-type(3) { + background: linear-gradient(90deg, var(--white-two) 0 20%, transparent 20%); +} +.cuboid--tail div:nth-of-type(3):after { + content: ''; + position: absolute; + background: var(--white-four); + top: 0%; + left: 20%; + height: 100%; + width: 87%; + transform-origin: 0 50%; + transform: rotateY(-22deg); +} +.cuboid--tail div:nth-of-type(5) { + background: transparent; + overflow: hidden; +} +.cuboid--tail div:nth-of-type(5):after { + content: ''; + position: absolute; + bottom: 70%; + height: 100%; + width: 100%; + background: var(--white-two); + transform-origin: 100% 100%; + transform: rotate(-22deg) scale(2) translate(10%, 0); +} +.cuboid--tail div:nth-of-type(6) { + background: transparent; + overflow: hidden; +} +.cuboid--tail div:nth-of-type(6):after { + content: ''; + position: absolute; + bottom: 70%; + height: 100%; + width: 100%; + background: var(--white-two); + transform-origin: 0% 100%; + transform: rotate(22deg) scale(2) translate(-10%, 0); +} +.cuboid--nose { + --thickness: calc(var(--base-size) * 0.3); +} +.cuboid--nose div { + background: var(--metal-three); +} +.cuboid--nose div:nth-of-type(1) { + background: var(--metal-one); +} +.cuboid--nose div:nth-of-type(2) { + background: var(--metal-two); +} +.cuboid--nose div:nth-of-type(3) { + background: var(--metal-one); +} +.cuboid--wings-ghost, +.cuboid--wings-top, +.cuboid--wings-bottom { + --thickness: calc(var(--base-size) * 2.2); +} +.cuboid--wings-ghost div, +.cuboid--wings-top div, +.cuboid--wings-bottom div { + background: var(--accent-one); +} +.cuboid--wings-ghost div:nth-of-type(1), +.cuboid--wings-top div:nth-of-type(1), +.cuboid--wings-bottom div:nth-of-type(1) { + background: var(--accent-two); +} +.cuboid--wings-ghost div:nth-of-type(2), +.cuboid--wings-top div:nth-of-type(2), +.cuboid--wings-bottom div:nth-of-type(2), +.cuboid--wings-ghost div:nth-of-type(5), +.cuboid--wings-top div:nth-of-type(5), +.cuboid--wings-bottom div:nth-of-type(5) { + background: var(--accent-three); +} +.cuboid--wings-ghost div:nth-of-type(4), +.cuboid--wings-top div:nth-of-type(4), +.cuboid--wings-bottom div:nth-of-type(4) { + background: var(--accent-four); +} +.cuboid--wings-ghost div:nth-of-type(3), +.cuboid--wings-top div:nth-of-type(3), +.cuboid--wings-bottom div:nth-of-type(3) { + background: var(--accent-five); +} +.cuboid--wings-ghost div:nth-of-type(3), +.cuboid--wings-ghost div:nth-of-type(5), +.cuboid--wings-ghost div:nth-of-type(6), +.cuboid--wings-ghost div:nth-of-type(1) { + background: transparent; +} +.cuboid--wings-ghost div:nth-of-type(2), +.cuboid--wings-ghost div:nth-of-type(4) { + background: linear-gradient(90deg, transparent 0 5%, var(--metal-one) 5% 7%, transparent 7% 33%, var(--metal-one) 33% 35%, transparent 35% 65%, var(--metal-one) 65% 67%, transparent 67% 93%, var(--metal-one) 93% 95%, transparent 95%); +} +.cuboid--axle { + --thickness: calc(var(--base-size) * 0.5); +} +.cuboid--axle div { + background: var(--metal-two); +} +.cuboid--axle div:nth-of-type(3) { + background: var(--metal-three); +} +.cuboid--axle div:nth-of-type(2), +.cuboid--axle div:nth-of-type(1) { + background: var(--metal-one); +} +.cuboid--axle div:nth-of-type(6) { + background: var(--metal-one); +} +.cuboid--horizontal-stabilizer { + --thickness: calc(var(--base-size) * 0.65); +} +.cuboid--horizontal-stabilizer div { + background: var(--accent-one); +} +.cuboid--horizontal-stabilizer div:nth-of-type(1) { + background: var(--accent-two); +} +.cuboid--horizontal-stabilizer div:nth-of-type(2), +.cuboid--horizontal-stabilizer div:nth-of-type(5) { + background: var(--accent-three); +} +.cuboid--horizontal-stabilizer div:nth-of-type(3), +.cuboid--horizontal-stabilizer div:nth-of-type(4) { + background: var(--accent-four); +} +.cuboid--vertical-stabilizer { + --thickness: calc(var(--base-size) * 0.2); +} +.cuboid--vertical-stabilizer div { + background: var(--accent-one); +} +.cuboid--vertical-stabilizer div:nth-of-type(1) { + background: linear-gradient(270deg, var(--accent-two) 0 30%, transparent 30%); +} +.cuboid--vertical-stabilizer div:nth-of-type(4) { + background: transparent; +} +.cuboid--vertical-stabilizer div:nth-of-type(4):after { + content: ''; + background: var(--accent-four); + height: 150%; + bottom: 0; + left: 0; + position: absolute; + width: 100%; + transform-origin: 50% 100%; + transform: rotateX(-48deg); +} +.cuboid--vertical-stabilizer div:nth-of-type(5) { + background: transparent; + overflow: hidden; +} +.cuboid--vertical-stabilizer div:nth-of-type(5):after { + content: ''; + position: absolute; + top: 100%; + transform-origin: 0 0; + transform: rotate(-42deg); + background: var(--accent-three); + height: 150%; + width: 160%; +} +.cuboid--vertical-stabilizer div:nth-of-type(6) { + background: transparent; + overflow: hidden; +} +.cuboid--vertical-stabilizer div:nth-of-type(6):after { + content: ''; + position: absolute; + top: 100%; + right: 0; + transform-origin: 100% 0; + transform: rotate(42deg); + background: var(--accent-three); + height: 150%; + width: 160%; +} +.cuboid--wheel-left, +.cuboid--wheel-right { + --thickness: calc(var(--base-size) * 0.1); +} +.cuboid--wheel-left div, +.cuboid--wheel-right div { + background: var(--wheel-one); +} +.cuboid--wheel-left div:nth-of-type(1), +.cuboid--wheel-right div:nth-of-type(1), +.cuboid--wheel-left div:nth-of-type(2), +.cuboid--wheel-right div:nth-of-type(2), +.cuboid--wheel-left div:nth-of-type(4), +.cuboid--wheel-right div:nth-of-type(4) { + background: var(--wheel-two); +} +.cuboid--wheel-left div:nth-of-type(3), +.cuboid--wheel-right div:nth-of-type(3) { + background: var(--wheel-three); +} +.cuboid--wheel-left div:nth-of-type(5):after, +.cuboid--wheel-right div:nth-of-type(5):after, +.cuboid--wheel-left div:nth-of-type(6):after, +.cuboid--wheel-right div:nth-of-type(6):after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + height: 40%; + width: 40%; + background: var(--wheel-hub); +} +.cuboid--cloud div:nth-of-type(1) { + background: var(--cloud-one); +} +.cuboid--cloud div:nth-of-type(2) { + background: var(--cloud-two); +} +.cuboid--cloud div:nth-of-type(3) { + background: var(--cloud-three); +} +.cuboid--cloud div:nth-of-type(4) { + background: var(--cloud-four); +} +.cuboid--cloud div:nth-of-type(5) { + background: var(--cloud-five); +} +.cuboid--cloud div:nth-of-type(6) { + background: var(--cloud-six); +} +.cuboid--beacon { + --thickness: calc(var(--base-size) * 0.02); + -webkit-animation: flash calc(var(--dark) * 1s) infinite; + animation: flash calc(var(--dark) * 1s) infinite; +} +.cuboid--beacon div { + background: hsla(0, 90%, 50%, var(--alpha)); +} +.cuboid--strobe { + --thickness: calc(var(--base-size) * 0.02); + -webkit-animation: flash calc(var(--dark) * 0.5s) infinite; + animation: flash calc(var(--dark) * 0.5s) infinite; +} +.cuboid--strobe div { + background: hsla(0, 90%, 98%, var(--alpha)); +} +@-webkit-keyframes flash { + 50% { + --alpha: 1; + } +} +@keyframes flash { + 50% { + --alpha: 1; + } +} +@-webkit-keyframes spin { + to { + transform: rotate(360deg); + } +} +@keyframes spin { + to { + transform: rotate(360deg); + } +} +@-webkit-keyframes float { + 50% { + transform: translate(-50%, -40%); + } +} +@keyframes float { + 50% { + transform: translate(-50%, -40%); + } +} +@-webkit-keyframes loop { + 0%, 40% { + transform: translate(-50%, -50%); + } + 50%, 100% { + transform: translate(-50%, -50%) rotateZ(360deg); + } +} +@keyframes loop { + 0%, 40% { + transform: translate(-50%, -50%); + } + 50%, 100% { + transform: translate(-50%, -50%) rotateZ(360deg); + } +} +@-webkit-keyframes roll { + 0%, 85% { + transform: translate(-50%, -50%); + } + 90%, 100% { + transform: translate(-50%, -50%) rotateX(-360deg); + } +} +@keyframes roll { + 0%, 85% { + transform: translate(-50%, -50%); + } + 90%, 100% { + transform: translate(-50%, -50%) rotateX(-360deg); + } +} +@-webkit-keyframes nightshift { + 0%, 50% { + background: var(--bg); + } + 75%, 100% { + background: var(--night); + } +} +@keyframes nightshift { + 0%, 50% { + background: var(--bg); + } + 75%, 100% { + background: var(--night); + } +} +@-webkit-keyframes scale { + 0%, 5%, 95%, 100% { + transform: scale(0); + } + 10%, 90% { + transform: scale(1); + } +} +@keyframes scale { + 0%, 5%, 95%, 100% { + transform: scale(0); + } + 10%, 90% { + transform: scale(1); + } +} +@-webkit-keyframes pan { + 0% { + transform: translate(-1000%, 0); + } + 100% { + transform: translate(1000%, 0); + } +} +@keyframes pan { + 0% { + transform: translate(-1000%, 0); + } + 100% { + transform: translate(1000%, 0); + } +} \ No newline at end of file diff --git a/3d-css-plane-tap-to-toggle-mouse-move-parallax/license.txt b/3d-css-plane-tap-to-toggle-mouse-move-parallax/license.txt new file mode 100644 index 0000000..52cf6dc --- /dev/null +++ b/3d-css-plane-tap-to-toggle-mouse-move-parallax/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Jhey (https://codepen.io/jh3y/pen/NWdNMBJ) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/3d-css-plane-tap-to-toggle-mouse-move-parallax/src/index.pug b/3d-css-plane-tap-to-toggle-mouse-move-parallax/src/index.pug new file mode 100644 index 0000000..5796e67 --- /dev/null +++ b/3d-css-plane-tap-to-toggle-mouse-move-parallax/src/index.pug @@ -0,0 +1,73 @@ +mixin cuboid() + .cuboid(class!=attributes.class) + - let s = 0 + while s < 6 + .cuboid__side + - s++ +input#dark(type="checkbox") +.scene + .cloud.cloud--one + .cloud__shift + .cloud__body + div + +cuboid()(class="cuboid--cloud") + div + +cuboid()(class="cuboid--cloud") + div + +cuboid()(class="cuboid--cloud") + .cloud.cloud--two + .cloud__shift + .cloud__body + div + +cuboid()(class="cuboid--cloud") + div + +cuboid()(class="cuboid--cloud") + div + +cuboid()(class="cuboid--cloud") + .cloud.cloud--three + .cloud__shift + .cloud__body + div + +cuboid()(class="cuboid--cloud") + div + +cuboid()(class="cuboid--cloud") + div + +cuboid()(class="cuboid--cloud") + .plane__floater + .plane__looper + .plane + .plane__wheels + .plane__axle + +cuboid()(class="cuboid--axle") + .plane__wheel.plane__wheel--left + +cuboid()(class="cuboid--wheel-left") + .plane__wheel.plane__wheel--right + +cuboid()(class="cuboid--wheel-right") + .plane__body + +cuboid()(class="cuboid--body") + .plane__nose + +cuboid()(class="cuboid--nose") + .plane__propellor + .propellor + .plane__screen + +cuboid()(class="cuboid--screen") + .plane__wings.wings + .wings__top + +cuboid()(class="cuboid--wings-top") + .wings__ghost + +cuboid()(class="cuboid--wings-ghost") + .wings__bottom + +cuboid()(class="cuboid--wings-bottom") + .wings__strobe.wings__strobe--left + +cuboid()(class="cuboid--strobe") + .wings__strobe.wings__strobe--right + +cuboid()(class="cuboid--strobe") + .plane__tail + +cuboid()(class="cuboid--tail") + .plane__stabilizer.plane__stabilizer--horizontal + +cuboid()(class="cuboid--horizontal-stabilizer") + .plane__stabilizer.plane__stabilizer--vertical + +cuboid()(class="cuboid--vertical-stabilizer") + .plane__beacon + +cuboid()(class="cuboid--beacon") +label(for="dark") \ No newline at end of file diff --git a/3d-css-plane-tap-to-toggle-mouse-move-parallax/src/script.babel b/3d-css-plane-tap-to-toggle-mouse-move-parallax/src/script.babel new file mode 100644 index 0000000..b8ab032 --- /dev/null +++ b/3d-css-plane-tap-to-toggle-mouse-move-parallax/src/script.babel @@ -0,0 +1,17 @@ +import gsap from 'https://cdn.skypack.dev/gsap' + +const BOUNDS = 50 +document.addEventListener('pointermove', ({ x, y }) => { + const newX = gsap.utils.mapRange(0, window.innerWidth, -BOUNDS, BOUNDS, x) + const newY = gsap.utils.mapRange(0, window.innerHeight, BOUNDS, -BOUNDS, y) + gsap.set(document.documentElement, { + '--rotate-x': newY, + '--rotate-y': newX, + }) +}) + +const CHECKER = document.querySelector('[type="checkbox"]') + +CHECKER.addEventListener('input', e => + document.documentElement.style.setProperty('--dark', CHECKER.checked ? 1 : 0) +) diff --git a/3d-css-plane-tap-to-toggle-mouse-move-parallax/src/style.styl b/3d-css-plane-tap-to-toggle-mouse-move-parallax/src/style.styl new file mode 100644 index 0000000..48c9b5e --- /dev/null +++ b/3d-css-plane-tap-to-toggle-mouse-move-parallax/src/style.styl @@ -0,0 +1,668 @@ +.cuboid + width 100% + height 100% + position relative + // 1 is the top and go t, r, b, l, f, b + + &__side:nth-of-type(1) + height calc(var(--thickness) * 1vmin) + width 100% + position absolute + top 0 + transform translate(0, -50%) rotateX(90deg) + + &__side:nth-of-type(2) + height 100% + width calc(var(--thickness) * 1vmin) + position absolute + top 50% + right 0 + transform translate(50%, -50%) rotateY(90deg) + + &__side:nth-of-type(3) + width 100% + height calc(var(--thickness) * 1vmin) + position absolute + bottom 0 + transform translate(0%, 50%) rotateX(90deg) + + &__side:nth-of-type(4) + height 100% + width calc(var(--thickness) * 1vmin) + position absolute + left 0 + top 50% + transform translate(-50%, -50%) rotateY(90deg) + + &__side:nth-of-type(5) + height 100% + width 100% + transform translate3d(0, 0, calc(var(--thickness) * 0.5vmin)) + position absolute + top 0 + left 0 + + &__side:nth-of-type(6) + height 100% + width 100% + transform translate3d(0, 0, calc(var(--thickness) * -0.5vmin)) rotateY(180deg) + position absolute + top 0 + left 0 + +* +*:after +*:before + box-sizing border-box + transform-style preserve-3d + transition background 0.25s + +body + min-height 100vh + display grid + place-items center + background var(--bg) + overflow hidden + +:root + --dark 0 + --base-size 20 + --plane-height calc(var(--base-size) * 1vmin) + --plane-width calc(var(--plane-height) * 1.6) + --white-one 'hsl(0, 0%, %s)' % calc((90 - (var(--dark) * 30)) * 1%) + --white-two 'hsl(0, 0%, %s)' % calc((85 - (var(--dark) * 30)) * 1%) + --white-three 'hsl(0, 0%, %s)' % calc((80 - (var(--dark) * 30)) * 1%) + --white-four 'hsl(0, 0%, %s)' % calc((75 - (var(--dark) * 30)) * 1%) + --white-five 'hsl(0, 0%, %s)' % calc((70 - (var(--dark) * 30)) * 1%) + --accent-hue 10 + --accent-one 'hsl(%s, 80%, %s)' % (var(--accent-hue) calc((60 - (var(--dark) * 20)) * 1%)) + --accent-two 'hsl(%s, 80%, %s)' % (var(--accent-hue) calc((55 - (var(--dark) * 20)) * 1%)) + --accent-three 'hsl(%s, 80%, %s)' % (var(--accent-hue) calc((50 - (var(--dark) * 20)) * 1%)) + --accent-four 'hsl(%s, 80%, %s)' % (var(--accent-hue) calc((45 - (var(--dark) * 20)) * 1%)) + --accent-five 'hsl(%s, 80%, %s)' % (var(--accent-hue) calc((40 - (var(--dark) * 20)) * 1%)) + --screen 'hsla(210, 80%, %s, 0.25)' % calc((70 - (var(--dark) * 20)) * 1%) + --metal-one 'hsl(0, 0%, %s)' % calc((60 - (var(--dark) * 20)) * 1%) + --metal-two 'hsl(0, 0%, %s)' % calc((50 - (var(--dark) * 20)) * 1%) + --metal-three 'hsl(0, 0%, %s)' % calc((40 - (var(--dark) * 20)) * 1%) + --wheel-one hsl(0, 0%, 10%) + --wheel-two hsl(0, 0%, 5%) + --wheel-three hsl(0, 0%, 0%) + --wheel-hub 'hsl(0, 0%, %s)' % calc((98 - (var(--dark) * 20)) * 1%) + --bg 'hsl(210, 80%, %s)' % calc((90 - (var(--dark) * 76)) * 1%) + --night hsl(210, 80%, 16%) + --cloud-one 'hsl(0, 0%, %s)' % calc((98 - (var(--dark) * 35)) * 1%) + --cloud-two 'hsl(0, 0%, %s)' % calc((94 - (var(--dark) * 35)) * 1%) + --cloud-three 'hsl(0, 0%, %s)' % calc((90 - (var(--dark) * 35)) * 1%) + --cloud-four 'hsl(0, 0%, %s)' % calc((86 - (var(--dark) * 35)) * 1%) + --cloud-five 'hsl(0, 0%, %s)' % calc((82 - (var(--dark) * 35)) * 1%) + --cloud-six 'hsl(0, 0%, %s)' % calc((78 - (var(--dark) * 35)) * 1%) + + +.scene + transform translate(-50%, -50%) + position fixed + top 50% + left 50% + transform translate3d(-50%, -50%, 100vmin) rotateX(-24deg) rotateY(44deg) rotateX(calc(var(--rotate-x, 0) * 1deg)) rotateY(calc(var(--rotate-y, 0) * 1deg)) + +[type="checkbox"] + position fixed + left 100% + opacity 0 + visibility hidden + +label + height 100vh + width 100vw + position fixed + top 0 + left 0 + right 0 + bottom 0 + transform translate3d(0, 0, 1000vmin) + +.plane + height var(--plane-height) + width var(--plane-width) + // background hsla(210, 80%, 80%, 0.5) + position absolute + top 50% + left 50% + transform translate(-50%, -50%) + animation roll 10s infinite ease-out alternate + + &__floater + position absolute + width var(--plane-width) + height var(--plane-width) + transform translate(-50%, -50%) + top 50% + left 50% + animation float 2s infinite ease-in-out + + &__looper + position absolute + width var(--plane-width) + height var(--plane-width) + transform translate(-50%, -50%) + top 50% + left 50% + transform-origin 50% 0 + animation loop 10s infinite ease-in-out + + * + position absolute + + &__body + height 40% + width 36% + bottom 20% + left 10% + + &__wheels + bottom 0 + width calc(var(--plane-height) * 0.2) + left 32% + transform translate(-50%, 0) + height 20% + + &__axle + height 50% + width 50% + top 50% + left 50% + transform translate(-50%, -50%) + + &__wheel + height 100% + width 100% + top 0 + left 0 + + &__wings + height 70% + width 40% + bottom 19% + left 12% + + &__tail + height 40% + width 54% + bottom 20% + left 46% + + &__nose + height 30% + width 10% + bottom 25% + + &__stabilizer--horizontal + height 9% + width 16% + right 1% + bottom 50% + + &__screen + bottom 60% + left 30% + width 6% + height 14% + + &__propellor + height calc(var(--base-size) * 0.75vmin) + width calc(var(--base-size) * 0.75vmin) + left -1% + bottom 40% + transform translate(-50%, 50%) rotateY(-90deg) + + &:after + content '' + position absolute + top 50% + left 50% + transform translate3d(-50%, -50%, 2px) + height 16% + width 16% + border-radius 50% + background var(--white-one) + + &__stabilizer--vertical + height 20% + width 20% + right 0 + bottom 60% + + &__beacon + right 1% + bottom 80% + height 2% + width 2% + + &__wheel--left + transform translate3d(0, 0, calc(var(--base-size) * 0.3vmin)) + &__wheel--right + transform translate3d(0, 0, calc(var(--base-size) * -0.3vmin)) + +.propellor + height 100% + width 100% + animation spin 0.35s infinite linear + + &:after + &:before + content '' + height 100% + width 10% + position absolute + top 50% + left 50% + background linear-gradient(transparent 0 5%, var(--accent-two) 5% 15%, transparent 15% 85%, var(--accent-two) 85% 95%, transparent 95%), hsl(0, 0%, 0%) + transform translate(-50%, -50%) rotate(calc(var(--r, 45) * 1deg)) + + &:after + --r -45 + +.wings + &__ghost + height 80% + width 80% + left 50% + bottom 10% + transform translate(-50%, 0) + + &__top + top 0 + height 10% + width 100% + left 0 + + &__bottom + bottom 0 + height 10% + width 100% + left 0 + + &__strobe + bottom 10% + height 4% + width 4% + left 50% + + &--left + transform translate3d(-50%, 0, calc(var(--base-size) * 1vmin)) + &--right + transform translate3d(-50%, 0, calc(var(--base-size) * -1vmin)) + +.cloud + height 10vmin + width 15vmin + position absolute + top 50% + left 50% + transform translate(-50%, -50%) + + &__shift + height 100% + width 100% + animation pan calc(var(--speed, 5) * 1s) calc(var(--delay, 5) * -1s) infinite ease-in-out both + + &__body + height 100% + width 100% + animation scale calc(var(--speed, 5) * 1s) calc(var(--delay, 5) * -1s) infinite linear + + &__body > div + position absolute + + &:nth-of-type(1) + bottom 0 + left 25% + width 60% + height 90% + --thickness calc(var(--base-size) * 0.2) + + &:nth-of-type(2) + bottom 0 + left 0 + width 50% + height 60% + --thickness calc(var(--base-size) * 0.3) + + &:nth-of-type(3) + bottom 0 + right 0% + width 60% + height 40% + --thickness calc(var(--base-size) * 0.4) + + &--one + --speed 2 + --delay 3 + transform translate(-50%, -50%) translate3d(-40vmin, 20vmin, 26vmin) + + &--two + --speed 4 + --delay 1 + transform translate(-50%, -50%) translate3d(30vmin, -15vmin, -34vmin) + + &--three + --speed 6 + --delay 2 + transform translate(-50%, -50%) translate3d(50vmin, 35vmin, -14vmin) + +.cuboid + &--body + --thickness calc(var(--base-size) * 0.4) + div + background var(--white-two) + + &:nth-of-type(1) + background var(--white-one) + &:nth-of-type(2) + background var(--white-two) + &:nth-of-type(3) + background var(--white-three) + &:nth-of-type(4) + background var(--white-four) + + &:nth-of-type(5):after + &:nth-of-type(6):after + content '' + position absolute + top 50% + left 50% + height calc(var(--base-size) * 0.25vmin) + width calc(var(--base-size) * 0.25vmin) + background-image url("https://assets.codepen.io/605876/avatar.png") + background-size cover + filter saturate(0.65) + transform translate3d(-50%, -50%, 1px) + + &--screen + --thickness calc(var(--base-size) * 0.26) + + div + background var(--screen) + + &--tail + --thickness calc(var(--base-size) * 0.3) + + div + background var(--white-two) + + &:nth-of-type(1) + background var(--white-one) + + &:after + content '' + position absolute + height 74% + width 50% + background var(--metal-three) + top 50% + right 50% + transform translate3d(-50%, -50%, 1px) + + &:nth-of-type(2) + background linear-gradient(var(--white-two) 0 30%, transparent 30%) + + &:nth-of-type(3) + background linear-gradient(90deg, var(--white-two) 0 20%, transparent 20%) + + &:after + content '' + position absolute + background var(--white-four) + top 0% + left 20% + height 100% + width 87% + transform-origin 0 50% + transform rotateY(-22deg) + + &:nth-of-type(5) + background transparent + overflow hidden + + &:after + content '' + position absolute + bottom 70% + height 100% + width 100% + background var(--white-two) + transform-origin 100% 100% + transform rotate(-22deg) scale(2) translate(10%, 0) + + &:nth-of-type(6) + background transparent + overflow hidden + + &:after + content '' + position absolute + bottom 70% + height 100% + width 100% + background var(--white-two) + transform-origin 0% 100% + transform rotate(22deg) scale(2) translate(-10%, 0) + + &--nose + --thickness calc(var(--base-size) * 0.3) + + div + background var(--metal-three) + + &:nth-of-type(1) + background var(--metal-one) + &:nth-of-type(2) + background var(--metal-two) + &:nth-of-type(3) + background var(--metal-one) + + &--wings-ghost + &--wings-top + &--wings-bottom + --thickness calc(var(--base-size) * 2.2) + + div + background var(--accent-one) + + &:nth-of-type(1) + background var(--accent-two) + &:nth-of-type(2) + &:nth-of-type(5) + background var(--accent-three) + &:nth-of-type(4) + background var(--accent-four) + &:nth-of-type(3) + background var(--accent-five) + + &--wings-ghost + div + &:nth-of-type(3) + &:nth-of-type(5) + &:nth-of-type(6) + &:nth-of-type(1) + background transparent + &:nth-of-type(2) + &:nth-of-type(4) + background linear-gradient(90deg, transparent 0 5%, var(--metal-one) 5% 7%, transparent 7% 33%, var(--metal-one) 33% 35%, transparent 35% 65%, var(--metal-one) 65% 67%, transparent 67% 93%, var(--metal-one) 93% 95%, transparent 95%) + + &--axle + --thickness calc(var(--base-size) * 0.5) + + div + background var(--metal-two) + + &:nth-of-type(3) + background var(--metal-three) + &:nth-of-type(2) + &:nth-of-type(1) + background var(--metal-one) + &:nth-of-type(6) + background var(--metal-one) + + &--horizontal-stabilizer + --thickness calc(var(--base-size) * 0.65) + + div + background var(--accent-one) + + &:nth-of-type(1) + background var(--accent-two) + &:nth-of-type(2) + &:nth-of-type(5) + background var(--accent-three) + &:nth-of-type(3) + &:nth-of-type(4) + background var(--accent-four) + + &--vertical-stabilizer + --thickness calc(var(--base-size) * 0.2) + + div + background var(--accent-one) + + &:nth-of-type(1) + background linear-gradient(270deg, var(--accent-two) 0 30%, transparent 30%) + + &:nth-of-type(4) + background transparent + + &:after + content '' + background var(--accent-four) + height 150% + bottom 0 + left 0 + position absolute + width 100% + transform-origin 50% 100% + transform rotateX(-48deg) + + &:nth-of-type(5) + background transparent + overflow hidden + + &:after + content '' + position absolute + top 100% + transform-origin 0 0 + transform rotate(-42deg) + background var(--accent-three) + height 150% + width 160% + + &:nth-of-type(6) + background transparent + overflow hidden + + &:after + content '' + position absolute + top 100% + right 0 + transform-origin 100% 0 + transform rotate(42deg) + background var(--accent-three) + height 150% + width 160% + + &--wheel-left + &--wheel-right + --thickness calc(var(--base-size) * 0.1) + + div + background var(--wheel-one) + + &:nth-of-type(1) + &:nth-of-type(2) + &:nth-of-type(4) + background var(--wheel-two) + &:nth-of-type(3) + background var(--wheel-three) + + &:nth-of-type(5) + &:nth-of-type(6) + &:after + content '' + position absolute + top 50% + left 50% + transform translate(-50%, -50%) + height 40% + width 40% + background var(--wheel-hub) + &--cloud + div + &:nth-of-type(1) + background var(--cloud-one) + &:nth-of-type(2) + background var(--cloud-two) + &:nth-of-type(3) + background var(--cloud-three) + &:nth-of-type(4) + background var(--cloud-four) + &:nth-of-type(5) + background var(--cloud-five) + &:nth-of-type(6) + background var(--cloud-six) + + &--beacon + --thickness calc(var(--base-size) * 0.02) + animation flash calc(var(--dark) * 1s) infinite + + div + background 'hsla(0, 90%, 50%, %s)' % var(--alpha) + + &--strobe + --thickness calc(var(--base-size) * 0.02) + animation flash calc(var(--dark) * 0.5s) infinite + + div + background 'hsla(0, 90%, 98%, %s)' % var(--alpha) + +@keyframes flash + 50% + --alpha 1 + +@keyframes spin + to + transform rotate(360deg) + +@keyframes float + 50% + transform translate(-50%, -40%) + +@keyframes loop + 0%, 40% + transform translate(-50%, -50%) + 50%, 100% + transform translate(-50%, -50%) rotateZ(360deg) + +@keyframes roll + 0%, 85% + transform translate(-50%, -50%) + 90%, 100% + transform translate(-50%, -50%) rotateX(-360deg) + +@keyframes nightshift + 0%, 50% + background var(--bg) + 75%, 100% + background var(--night) + +@keyframes scale + 0%, 5%, 95%, 100% + transform scale(0) + 10%, 90% + transform scale(1) + +@keyframes pan + 0% + transform translate(-1000%, 0) + 100% + transform translate(1000%, 0) \ No newline at end of file diff --git a/3d-css-sphere/README.markdown b/3d-css-sphere/README.markdown new file mode 100644 index 0000000..a7ae410 --- /dev/null +++ b/3d-css-sphere/README.markdown @@ -0,0 +1,5 @@ +# 3D CSS Sphere + +A Pen created on CodePen.io. Original URL: [https://codepen.io/peterwestendorp/pen/wGECk](https://codepen.io/peterwestendorp/pen/wGECk). + +3D ball made with just some CSS 3D transforms, border-radius and border-style. Not really useful, it just looks nice... diff --git a/3d-css-sphere/dist/index.html b/3d-css-sphere/dist/index.html new file mode 100644 index 0000000..aeb3e58 --- /dev/null +++ b/3d-css-sphere/dist/index.html @@ -0,0 +1,45 @@ + + + + + CodePen - 3D CSS Sphere + + + + + + + +
+
+
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
+
+
+ + + + diff --git a/3d-css-sphere/dist/style.css b/3d-css-sphere/dist/style.css new file mode 100644 index 0000000..3d756fe --- /dev/null +++ b/3d-css-sphere/dist/style.css @@ -0,0 +1,162 @@ +@keyframes roundandround { + to { + transform: rotateX(360deg) rotateY(360deg); + } +} + +@keyframes show { + to { + opacity: 1; + } +} + +body { + background-color: #000000; +} +.scene { + width:600px; + height:600px; + margin:2% auto; + perspective: 1000px; +} +.wrapper { + width:100%; + height:100%; + transform: rotateX(45deg) rotateY(45deg); + transform-style: preserve-3d; +} +.ball { + position: relative; + width: 70%; + height: 70%; + margin:0 auto; + transform-style: preserve-3d; + animation: roundandround 7.5s 1.3s infinite linear; +} +.ball .ring { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border:6px; + border-style: dashed; + border-radius: 50%; + opacity: 0; + animation: show 0.75s forwards ease-in-out; +} +.ring:nth-child(1) { + color:#8df435; + transform: rotateY(4deg); + animation-delay: 0s; +} +.ring:nth-child(2) { + color:#a8e526; + transform: rotateY(8deg); + animation-delay: 0.1s; +} +.ring:nth-child(3) { + color:#c2d11c; + transform: rotateY(12deg); + animation-delay: 0.2s; +} +.ring:nth-child(4) { + color:#c8cb1b; + transform: rotateY(16deg); + animation-delay: 0.3s; +} +.ring:nth-child(5) { + color:#deb21a; + transform: rotateY(20deg); + animation-delay: 0.4s; +} +.ring:nth-child(6) { + color:#ef9621; + transform: rotateY(24deg); + animation-delay: 0.5s; +} +.ring:nth-child(7) { + color:#f29122; + transform: rotateY(28deg); + animation-delay: 0.6s; +} +.ring:nth-child(8) { + color:#fb7430; + transform: rotateY(32deg); + animation-delay: 0.7s; +} +.ring:nth-child(9) { + color:#fe5944; + transform: rotateY(36deg); + animation-delay: 0.8s; +} +.ring:nth-child(10) { + color:#fe5548; + transform: rotateY(40deg); + animation-delay: 0.9s; +} +.ring:nth-child(11) { + color:#f83d61; + transform: rotateY(44deg); + animation-delay: 1s; +} +.ring:nth-child(12) { + color:#ec2b7d; + transform: rotateY(48deg); + animation-delay: 1.1s; +} +.ring:nth-child(13) { + color:#e82983; + transform: rotateY(52deg); + animation-delay: 1s; +} +.ring:nth-child(14) { + color:#d41e9f; + transform: rotateY(56deg); + animation-delay: 0.9s; +} +.ring:nth-child(15) { + color:#bd1aba; + transform: rotateY(60deg); + animation-delay: 0.8s; +} +.ring:nth-child(16) { + color:#b81ac0; + transform: rotateY(64deg); + animation-delay: 0.7s; +} +.ring:nth-child(17) { + color:#9c1fd7; + transform: rotateY(68deg); + animation-delay: 0.6s; +} +.ring:nth-child(18) { + color:#802aea; + transform: rotateY(72deg); + animation-delay: 0.5s; +} +.ring:nth-child(19) { + color:#7a2dee; + transform: rotateY(76deg); + animation-delay: 0.4s; +} +.ring:nth-child(20) { + color:#5f40f9; + transform: rotateY(80deg); + animation-delay: 0.3s; +} +.ring:nth-child(21) { + color:#4657fe; + transform: rotateY(84deg); + animation-delay: 0.2s; +} +.ring:nth-child(22) { + color:#425cfe; + transform: rotateY(88deg); + animation-delay: 0.1s; +} +.ring:nth-child(23) { + color:#2f77fb; + transform: rotateY(92deg); + animation-delay: 0s; +} \ No newline at end of file diff --git a/3d-css-sphere/license.txt b/3d-css-sphere/license.txt new file mode 100644 index 0000000..c59e70c --- /dev/null +++ b/3d-css-sphere/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2022 by Peter Westendorp (https://codepen.io/peterwestendorp/pen/wGECk) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/3d-css-sphere/src/index.html b/3d-css-sphere/src/index.html new file mode 100644 index 0000000..fac22c6 --- /dev/null +++ b/3d-css-sphere/src/index.html @@ -0,0 +1,29 @@ +
+
+
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
+
+
diff --git a/3d-css-sphere/src/style.css b/3d-css-sphere/src/style.css new file mode 100644 index 0000000..3d756fe --- /dev/null +++ b/3d-css-sphere/src/style.css @@ -0,0 +1,162 @@ +@keyframes roundandround { + to { + transform: rotateX(360deg) rotateY(360deg); + } +} + +@keyframes show { + to { + opacity: 1; + } +} + +body { + background-color: #000000; +} +.scene { + width:600px; + height:600px; + margin:2% auto; + perspective: 1000px; +} +.wrapper { + width:100%; + height:100%; + transform: rotateX(45deg) rotateY(45deg); + transform-style: preserve-3d; +} +.ball { + position: relative; + width: 70%; + height: 70%; + margin:0 auto; + transform-style: preserve-3d; + animation: roundandround 7.5s 1.3s infinite linear; +} +.ball .ring { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border:6px; + border-style: dashed; + border-radius: 50%; + opacity: 0; + animation: show 0.75s forwards ease-in-out; +} +.ring:nth-child(1) { + color:#8df435; + transform: rotateY(4deg); + animation-delay: 0s; +} +.ring:nth-child(2) { + color:#a8e526; + transform: rotateY(8deg); + animation-delay: 0.1s; +} +.ring:nth-child(3) { + color:#c2d11c; + transform: rotateY(12deg); + animation-delay: 0.2s; +} +.ring:nth-child(4) { + color:#c8cb1b; + transform: rotateY(16deg); + animation-delay: 0.3s; +} +.ring:nth-child(5) { + color:#deb21a; + transform: rotateY(20deg); + animation-delay: 0.4s; +} +.ring:nth-child(6) { + color:#ef9621; + transform: rotateY(24deg); + animation-delay: 0.5s; +} +.ring:nth-child(7) { + color:#f29122; + transform: rotateY(28deg); + animation-delay: 0.6s; +} +.ring:nth-child(8) { + color:#fb7430; + transform: rotateY(32deg); + animation-delay: 0.7s; +} +.ring:nth-child(9) { + color:#fe5944; + transform: rotateY(36deg); + animation-delay: 0.8s; +} +.ring:nth-child(10) { + color:#fe5548; + transform: rotateY(40deg); + animation-delay: 0.9s; +} +.ring:nth-child(11) { + color:#f83d61; + transform: rotateY(44deg); + animation-delay: 1s; +} +.ring:nth-child(12) { + color:#ec2b7d; + transform: rotateY(48deg); + animation-delay: 1.1s; +} +.ring:nth-child(13) { + color:#e82983; + transform: rotateY(52deg); + animation-delay: 1s; +} +.ring:nth-child(14) { + color:#d41e9f; + transform: rotateY(56deg); + animation-delay: 0.9s; +} +.ring:nth-child(15) { + color:#bd1aba; + transform: rotateY(60deg); + animation-delay: 0.8s; +} +.ring:nth-child(16) { + color:#b81ac0; + transform: rotateY(64deg); + animation-delay: 0.7s; +} +.ring:nth-child(17) { + color:#9c1fd7; + transform: rotateY(68deg); + animation-delay: 0.6s; +} +.ring:nth-child(18) { + color:#802aea; + transform: rotateY(72deg); + animation-delay: 0.5s; +} +.ring:nth-child(19) { + color:#7a2dee; + transform: rotateY(76deg); + animation-delay: 0.4s; +} +.ring:nth-child(20) { + color:#5f40f9; + transform: rotateY(80deg); + animation-delay: 0.3s; +} +.ring:nth-child(21) { + color:#4657fe; + transform: rotateY(84deg); + animation-delay: 0.2s; +} +.ring:nth-child(22) { + color:#425cfe; + transform: rotateY(88deg); + animation-delay: 0.1s; +} +.ring:nth-child(23) { + color:#2f77fb; + transform: rotateY(92deg); + animation-delay: 0s; +} \ No newline at end of file diff --git a/3d-d20-die-with-pure-css/README.markdown b/3d-d20-die-with-pure-css/README.markdown new file mode 100644 index 0000000..b80e995 --- /dev/null +++ b/3d-d20-die-with-pure-css/README.markdown @@ -0,0 +1,6 @@ +# 3d d20 die with pure CSS + _A Pen created at CodePen.io. Original URL: [https://codepen.io/vicentemundim/pen/cenIh](https://codepen.io/vicentemundim/pen/cenIh). + + This is a 3d 20-sided die made with pure CSS. Each face is an equilateral triangle, that can be resized. You can also change de color of the die, as well as its opacity. + +The sum of the values on opposite faces is always 21. \ No newline at end of file diff --git a/3d-d20-die-with-pure-css/dist/index.html b/3d-d20-die-with-pure-css/dist/index.html new file mode 100644 index 0000000..031574b --- /dev/null +++ b/3d-d20-die-with-pure-css/dist/index.html @@ -0,0 +1,66 @@ + + + + + 3d d20 die with pure CSS + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

Click to show face:

+ + +Roll! + + + + + + \ No newline at end of file diff --git a/3d-d20-die-with-pure-css/dist/script.js b/3d-d20-die-with-pure-css/dist/script.js new file mode 100644 index 0000000..0335831 --- /dev/null +++ b/3d-d20-die-with-pure-css/dist/script.js @@ -0,0 +1,46 @@ +var $die = $('.die'), + sides = 20, + initialSide = 1, + lastFace, + timeoutId, + transitionDuration = 500, + animationDuration = 3000 + +$('ul > li > a').click(function () { + reset() + rollTo($(this).attr('href')) + + return false +}) + +function randomFace() { + var face = Math.floor((Math.random() * sides)) + initialSide + lastFace = face == lastFace ? randomFace() : face + return face; +} + +function rollTo(face) { + clearTimeout(timeoutId) + + $('ul > li > a').removeClass('active') + $('[href=' + face + ']').addClass('active') + + $die.attr('data-face', face) +} + +function reset() { + $die.attr('data-face', null).removeClass('rolling') +} + +$('.randomize, .die').click(function () { + $die.addClass('rolling') + clearTimeout(timeoutId) + + timeoutId = setTimeout(function () { + $die.removeClass('rolling') + + rollTo(randomFace()) + }, animationDuration) + + return false +}) \ No newline at end of file diff --git a/3d-d20-die-with-pure-css/dist/style.css b/3d-d20-die-with-pure-css/dist/style.css new file mode 100644 index 0000000..198a0b7 --- /dev/null +++ b/3d-d20-die-with-pure-css/dist/style.css @@ -0,0 +1,302 @@ +@-webkit-keyframes roll { + 10% { + -webkit-transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); + transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); + } + 30% { + -webkit-transform: rotateX(120deg) rotateY(240deg) rotateZ(0deg) translateX(40px) translateY(40px); + transform: rotateX(120deg) rotateY(240deg) rotateZ(0deg) translateX(40px) translateY(40px); + } + 50% { + -webkit-transform: rotateX(240deg) rotateY(480deg) rotateZ(0deg) translateX(-40px) translateY(-40px); + transform: rotateX(240deg) rotateY(480deg) rotateZ(0deg) translateX(-40px) translateY(-40px); + } + 70% { + -webkit-transform: rotateX(360deg) rotateY(720deg) rotateZ(0deg); + transform: rotateX(360deg) rotateY(720deg) rotateZ(0deg); + } + 90% { + -webkit-transform: rotateX(480deg) rotateY(960deg) rotateZ(0deg); + transform: rotateX(480deg) rotateY(960deg) rotateZ(0deg); + } +} +@keyframes roll { + 10% { + -webkit-transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); + transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); + } + 30% { + -webkit-transform: rotateX(120deg) rotateY(240deg) rotateZ(0deg) translateX(40px) translateY(40px); + transform: rotateX(120deg) rotateY(240deg) rotateZ(0deg) translateX(40px) translateY(40px); + } + 50% { + -webkit-transform: rotateX(240deg) rotateY(480deg) rotateZ(0deg) translateX(-40px) translateY(-40px); + transform: rotateX(240deg) rotateY(480deg) rotateZ(0deg) translateX(-40px) translateY(-40px); + } + 70% { + -webkit-transform: rotateX(360deg) rotateY(720deg) rotateZ(0deg); + transform: rotateX(360deg) rotateY(720deg) rotateZ(0deg); + } + 90% { + -webkit-transform: rotateX(480deg) rotateY(960deg) rotateZ(0deg); + transform: rotateX(480deg) rotateY(960deg) rotateZ(0deg); + } +} +body { + background: #333; + padding: 20px; +} + +.content { + margin: auto auto; + position: relative; + width: 200px; + height: 200px; + -webkit-perspective: 1500px; + perspective: 1500px; +} + +.die { + position: absolute; + width: 100%; + height: 100%; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + transition: -webkit-transform 0.5s ease-out; + transition: transform 0.5s ease-out; + transition: transform 0.5s ease-out, -webkit-transform 0.5s ease-out; + cursor: pointer; + -webkit-transform: rotateX(-53deg); + transform: rotateX(-53deg); +} +.die.rolling { + -webkit-animation: roll 3s linear; + animation: roll 3s linear; +} +.die[data-face="1"] { + -webkit-transform: rotateX(-53deg) rotateY(0deg); + transform: rotateX(-53deg) rotateY(0deg); +} +.die[data-face="2"] { + -webkit-transform: rotateX(-53deg) rotateY(72deg); + transform: rotateX(-53deg) rotateY(72deg); +} +.die[data-face="3"] { + -webkit-transform: rotateX(-53deg) rotateY(144deg); + transform: rotateX(-53deg) rotateY(144deg); +} +.die[data-face="4"] { + -webkit-transform: rotateX(-53deg) rotateY(216deg); + transform: rotateX(-53deg) rotateY(216deg); +} +.die[data-face="5"] { + -webkit-transform: rotateX(-53deg) rotateY(288deg); + transform: rotateX(-53deg) rotateY(288deg); +} +.die[data-face="16"] { + -webkit-transform: rotateX(127deg) rotateY(-72deg); + transform: rotateX(127deg) rotateY(-72deg); +} +.die[data-face="17"] { + -webkit-transform: rotateX(127deg) rotateY(-144deg); + transform: rotateX(127deg) rotateY(-144deg); +} +.die[data-face="18"] { + -webkit-transform: rotateX(127deg) rotateY(-216deg); + transform: rotateX(127deg) rotateY(-216deg); +} +.die[data-face="19"] { + -webkit-transform: rotateX(127deg) rotateY(-288deg); + transform: rotateX(127deg) rotateY(-288deg); +} +.die[data-face="20"] { + -webkit-transform: rotateX(127deg) rotateY(-360deg); + transform: rotateX(127deg) rotateY(-360deg); +} +.die[data-face="6"] { + -webkit-transform: rotateX(11deg) rotateZ(180deg) rotateY(0deg); + transform: rotateX(11deg) rotateZ(180deg) rotateY(0deg); +} +.die[data-face="7"] { + -webkit-transform: rotateX(11deg) rotateZ(180deg) rotateY(72deg); + transform: rotateX(11deg) rotateZ(180deg) rotateY(72deg); +} +.die[data-face="8"] { + -webkit-transform: rotateX(11deg) rotateZ(180deg) rotateY(144deg); + transform: rotateX(11deg) rotateZ(180deg) rotateY(144deg); +} +.die[data-face="9"] { + -webkit-transform: rotateX(11deg) rotateZ(180deg) rotateY(216deg); + transform: rotateX(11deg) rotateZ(180deg) rotateY(216deg); +} +.die[data-face="10"] { + -webkit-transform: rotateX(11deg) rotateZ(180deg) rotateY(288deg); + transform: rotateX(11deg) rotateZ(180deg) rotateY(288deg); +} +.die[data-face="11"] { + -webkit-transform: rotateX(11deg) rotateY(-252deg); + transform: rotateX(11deg) rotateY(-252deg); +} +.die[data-face="12"] { + -webkit-transform: rotateX(11deg) rotateY(-324deg); + transform: rotateX(11deg) rotateY(-324deg); +} +.die[data-face="13"] { + -webkit-transform: rotateX(11deg) rotateY(-396deg); + transform: rotateX(11deg) rotateY(-396deg); +} +.die[data-face="14"] { + -webkit-transform: rotateX(11deg) rotateY(-468deg); + transform: rotateX(11deg) rotateY(-468deg); +} +.die[data-face="15"] { + -webkit-transform: rotateX(11deg) rotateY(-540deg); + transform: rotateX(11deg) rotateY(-540deg); +} +.die .face { + position: absolute; + left: 50%; + top: 0; + margin: 0 -50px; + border-left: 50px solid transparent; + border-right: 50px solid transparent; + border-bottom: 86px solid rgba(30, 180, 20, 0.75); + width: 0px; + height: 0px; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + counter-increment: steps 1; +} +.die .face:before { + content: counter(steps); + position: absolute; + top: 21.5px; + left: -100px; + color: #fff; + text-shadow: 1px 1px 3px #000; + font-size: 43px; + text-align: center; + line-height: 77.4px; + width: 200px; + height: 86px; +} +.die .face:nth-child(1) { + -webkit-transform: rotateY(0deg) translateZ(33.5px) translateY(-12.9px) rotateX(53deg); + transform: rotateY(0deg) translateZ(33.5px) translateY(-12.9px) rotateX(53deg); +} +.die .face:nth-child(2) { + -webkit-transform: rotateY(-72deg) translateZ(33.5px) translateY(-12.9px) rotateX(53deg); + transform: rotateY(-72deg) translateZ(33.5px) translateY(-12.9px) rotateX(53deg); +} +.die .face:nth-child(3) { + -webkit-transform: rotateY(-144deg) translateZ(33.5px) translateY(-12.9px) rotateX(53deg); + transform: rotateY(-144deg) translateZ(33.5px) translateY(-12.9px) rotateX(53deg); +} +.die .face:nth-child(4) { + -webkit-transform: rotateY(-216deg) translateZ(33.5px) translateY(-12.9px) rotateX(53deg); + transform: rotateY(-216deg) translateZ(33.5px) translateY(-12.9px) rotateX(53deg); +} +.die .face:nth-child(5) { + -webkit-transform: rotateY(-288deg) translateZ(33.5px) translateY(-12.9px) rotateX(53deg); + transform: rotateY(-288deg) translateZ(33.5px) translateY(-12.9px) rotateX(53deg); +} +.die .face:nth-child(16) { + -webkit-transform: rotateY(-108deg) translateZ(33.5px) translateY(121.26px) rotateZ(180deg) rotateX(53deg); + transform: rotateY(-108deg) translateZ(33.5px) translateY(121.26px) rotateZ(180deg) rotateX(53deg); +} +.die .face:nth-child(17) { + -webkit-transform: rotateY(-36deg) translateZ(33.5px) translateY(121.26px) rotateZ(180deg) rotateX(53deg); + transform: rotateY(-36deg) translateZ(33.5px) translateY(121.26px) rotateZ(180deg) rotateX(53deg); +} +.die .face:nth-child(18) { + -webkit-transform: rotateY(36deg) translateZ(33.5px) translateY(121.26px) rotateZ(180deg) rotateX(53deg); + transform: rotateY(36deg) translateZ(33.5px) translateY(121.26px) rotateZ(180deg) rotateX(53deg); +} +.die .face:nth-child(19) { + -webkit-transform: rotateY(108deg) translateZ(33.5px) translateY(121.26px) rotateZ(180deg) rotateX(53deg); + transform: rotateY(108deg) translateZ(33.5px) translateY(121.26px) rotateZ(180deg) rotateX(53deg); +} +.die .face:nth-child(20) { + -webkit-transform: rotateY(180deg) translateZ(33.5px) translateY(121.26px) rotateZ(180deg) rotateX(53deg); + transform: rotateY(180deg) translateZ(33.5px) translateY(121.26px) rotateZ(180deg) rotateX(53deg); +} +.die .face:nth-child(6) { + -webkit-transform: rotateY(360deg) translateZ(75px) translateY(54.18px) rotateZ(180deg) rotateX(-11deg); + transform: rotateY(360deg) translateZ(75px) translateY(54.18px) rotateZ(180deg) rotateX(-11deg); +} +.die .face:nth-child(7) { + -webkit-transform: rotateY(288deg) translateZ(75px) translateY(54.18px) rotateZ(180deg) rotateX(-11deg); + transform: rotateY(288deg) translateZ(75px) translateY(54.18px) rotateZ(180deg) rotateX(-11deg); +} +.die .face:nth-child(8) { + -webkit-transform: rotateY(216deg) translateZ(75px) translateY(54.18px) rotateZ(180deg) rotateX(-11deg); + transform: rotateY(216deg) translateZ(75px) translateY(54.18px) rotateZ(180deg) rotateX(-11deg); +} +.die .face:nth-child(9) { + -webkit-transform: rotateY(144deg) translateZ(75px) translateY(54.18px) rotateZ(180deg) rotateX(-11deg); + transform: rotateY(144deg) translateZ(75px) translateY(54.18px) rotateZ(180deg) rotateX(-11deg); +} +.die .face:nth-child(10) { + -webkit-transform: rotateY(72deg) translateZ(75px) translateY(54.18px) rotateZ(180deg) rotateX(-11deg); + transform: rotateY(72deg) translateZ(75px) translateY(54.18px) rotateZ(180deg) rotateX(-11deg); +} +.die .face:nth-child(11) { + -webkit-transform: rotateY(252deg) translateZ(75px) translateY(54.18px) rotateX(-11deg); + transform: rotateY(252deg) translateZ(75px) translateY(54.18px) rotateX(-11deg); +} +.die .face:nth-child(12) { + -webkit-transform: rotateY(324deg) translateZ(75px) translateY(54.18px) rotateX(-11deg); + transform: rotateY(324deg) translateZ(75px) translateY(54.18px) rotateX(-11deg); +} +.die .face:nth-child(13) { + -webkit-transform: rotateY(396deg) translateZ(75px) translateY(54.18px) rotateX(-11deg); + transform: rotateY(396deg) translateZ(75px) translateY(54.18px) rotateX(-11deg); +} +.die .face:nth-child(14) { + -webkit-transform: rotateY(468deg) translateZ(75px) translateY(54.18px) rotateX(-11deg); + transform: rotateY(468deg) translateZ(75px) translateY(54.18px) rotateX(-11deg); +} +.die .face:nth-child(15) { + -webkit-transform: rotateY(540deg) translateZ(75px) translateY(54.18px) rotateX(-11deg); + transform: rotateY(540deg) translateZ(75px) translateY(54.18px) rotateX(-11deg); +} + +h2 { + color: #fafafa; +} + +ul { + list-style: none; + margin: 0; + padding: 0; +} +ul > li { + display: inline-block; + margin: 10px 10px; +} + +a { + text-align: center; + color: #fff; + text-decoration: none; + font-size: 25px; + font-weight: bold; + padding: 5px 15px; + width: 40px; + display: inline-block; + border: 1px solid #dcdcdc; + border-radius: 4px; + background-color: #999; +} +a.active { + background-color: #333; +} +a:hover { + background-color: #666; +} +a.randomize { + width: auto; + margin: 20px 10px; +} diff --git a/3d-d20-die-with-pure-css/license.txt b/3d-d20-die-with-pure-css/license.txt new file mode 100644 index 0000000..9804b17 --- /dev/null +++ b/3d-d20-die-with-pure-css/license.txt @@ -0,0 +1,13 @@ + + + + diff --git a/3d-d20-die-with-pure-css/src/index.html b/3d-d20-die-with-pure-css/src/index.html new file mode 100644 index 0000000..a82e65d --- /dev/null +++ b/3d-d20-die-with-pure-css/src/index.html @@ -0,0 +1,50 @@ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

Click to show face:

+ + +Roll! \ No newline at end of file diff --git a/3d-d20-die-with-pure-css/src/script.js b/3d-d20-die-with-pure-css/src/script.js new file mode 100644 index 0000000..1458f3e --- /dev/null +++ b/3d-d20-die-with-pure-css/src/script.js @@ -0,0 +1,46 @@ +var $die = $('.die'), + sides = 20, + initialSide = 1, + lastFace, + timeoutId, + transitionDuration = 500, + animationDuration = 3000 + +$('ul > li > a').click(function () { + reset() + rollTo($(this).attr('href')) + + return false +}) + +function randomFace() { + var face = Math.floor((Math.random() * sides)) + initialSide + lastFace = face == lastFace ? randomFace() : face + return face; +} + +function rollTo(face) { + clearTimeout(timeoutId) + + $('ul > li > a').removeClass('active') + $('[href=' + face + ']').addClass('active') + + $die.attr('data-face', face) +} + +function reset() { + $die.attr('data-face', null).removeClass('rolling') +} + +$('.randomize, .die').click(function () { + $die.addClass('rolling') + clearTimeout(timeoutId) + + timeoutId = setTimeout(function () { + $die.removeClass('rolling') + + rollTo(randomFace()) + }, animationDuration) + + return false +}) diff --git a/3d-d20-die-with-pure-css/src/style.scss b/3d-d20-die-with-pure-css/src/style.scss new file mode 100644 index 0000000..ec31d1c --- /dev/null +++ b/3d-d20-die-with-pure-css/src/style.scss @@ -0,0 +1,188 @@ +$containerWidth: 200px; +$containerHeight: $containerWidth; + +$faceWidth: $containerWidth*0.5; +$faceHeight: $faceWidth*0.86; + +$transitionDuration: 0.5s; +$animationDuration: 3s; + +$angle: 53deg; +$ringAngle: -11deg; +$sideAngle: 360deg/5; +$opacity: 0.75; +$color: rgba(30, 180, 20, $opacity); + +$rotateX: -$angle; +$translateZ: $faceWidth*0.335; +$translateY: -$faceHeight*0.15; +$translateRingZ: $faceWidth*0.75; +$translateRingY: $faceHeight*0.78 + $translateY; +$translateLowerZ: $translateZ; +$translateLowerY: $faceHeight*0.78 + $translateRingY; + +@keyframes roll { + 10% { transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg) } + 30% { transform: rotateX(120deg) rotateY(240deg) rotateZ(0deg) translateX(40px) translateY(40px) } + 50% { transform: rotateX(240deg) rotateY(480deg) rotateZ(0deg) translateX(-40px) translateY(-40px) } + 70% { transform: rotateX(360deg) rotateY(720deg) rotateZ(0deg) } + 90% { transform: rotateX(480deg) rotateY(960deg) rotateZ(0deg) } +} + +body { + background: #333; + padding: 20px; +} + +.content { + margin: auto auto; + position: relative; + width: $containerWidth; + height: $containerHeight; + perspective: 1500px; +} + +.die { + position: absolute; + width: 100%; + height: 100%; + transform-style: preserve-3d; + transition: transform $transitionDuration ease-out; + cursor: pointer; + + transform: rotateX($rotateX); + + &.rolling { + animation: roll $animationDuration linear; + } + + @for $i from 1 through 5 { + &[data-face="#{$i}"] { + $angleMultiplier: $i - 1; + transform: rotateX(-$angle) rotateY($sideAngle * $angleMultiplier); + } + } + + @for $i from 16 through 20 { + &[data-face="#{$i}"] { + $angleMultiplier: $i - 15; + transform: rotateX(-$angle + 180deg) rotateY(-$sideAngle * $angleMultiplier); + } + } + + @for $i from 6 through 10 { + &[data-face="#{$i}"] { + $angleMultiplier: $i - 6; + transform: rotateX(-$ringAngle) rotateZ(180deg) rotateY($sideAngle * $angleMultiplier); + } + } + + @for $i from 11 through 15 { + &[data-face="#{$i}"] { + $angleMultiplier: $i - 8; + transform: rotateX(-$ringAngle) rotateY(-$sideAngle * $angleMultiplier - $sideAngle/2); + } + } + + .face { + $horizontalMargin: -$faceWidth*0.5; + + position: absolute; + left: 50%; + top: 0; + margin: 0 $horizontalMargin; + border-left: $faceWidth*0.5 solid transparent; + border-right: $faceWidth*0.5 solid transparent; + border-bottom: $faceHeight solid $color; + width: 0px; + height: 0px; + transform-style: preserve-3d; + backface-visibility: hidden; + + counter-increment: steps 1; + + &:before { + content: counter(steps); + position: absolute; + top: $faceHeight*0.25; + left: -$faceWidth; + color: #fff; + text-shadow: 1px 1px 3px #000; + font-size: $faceHeight*0.5; + text-align: center; + line-height: $faceHeight*0.9; + width: $faceWidth*2; + height: $faceHeight; + } + + @for $i from 1 through 5 { + &:nth-child(#{$i}) { + $angleMultiplier: $i - 1; + transform: rotateY(-$sideAngle * $angleMultiplier) translateZ($translateZ) translateY($translateY) rotateX($angle); + } + } + + @for $i from 16 through 20 { + &:nth-child(#{$i}) { + $angleMultiplier: $i - 18; + transform: rotateY($sideAngle * $angleMultiplier + $sideAngle/2) translateZ($translateLowerZ) translateY($translateLowerY) rotateZ(180deg) rotateX($angle); + } + } + + @for $i from 6 through 10 { + &:nth-child(#{$i}) { + $angleMultiplier: $i - 11; + transform: rotateY(-$sideAngle * $angleMultiplier) translateZ($translateRingZ) translateY($translateRingY) rotateZ(180deg) rotateX($ringAngle); + } + } + + @for $i from 11 through 15 { + &:nth-child(#{$i}) { + $angleMultiplier: $i - 8; + transform: rotateY($sideAngle * $angleMultiplier + $sideAngle/2) translateZ($translateRingZ) translateY($translateRingY) rotateX($ringAngle); + } + } + } +} + +h2 { + color: #fafafa; +} + +ul { + list-style: none; + margin: 0; + padding: 0; + + > li { + display: inline-block; + margin: 10px 10px; + } +} + +a { + text-align: center; + color: #fff; + text-decoration: none; + font-size: 25px; + font-weight: bold; + padding: 5px 15px; + width: 40px; + display: inline-block; + border: 1px solid #dcdcdc; + border-radius: 4px; + background-color: #999; + + &.active { + background-color: #333; + } + + &:hover { + background-color: #666; + } + + &.randomize { + width: auto; + margin: 20px 10px; + } +} diff --git a/3d-dashboardspline/README.markdown b/3d-dashboardspline/README.markdown new file mode 100644 index 0000000..c5f7a88 --- /dev/null +++ b/3d-dashboardspline/README.markdown @@ -0,0 +1,5 @@ +# 3D Dashboard - Spline + +A Pen created on CodePen.io. Original URL: [https://codepen.io/ricardoolivaalonso/pen/abmqrxY](https://codepen.io/ricardoolivaalonso/pen/abmqrxY). + + diff --git a/3d-dashboardspline/dist/index.html b/3d-dashboardspline/dist/index.html new file mode 100644 index 0000000..4ddb40c --- /dev/null +++ b/3d-dashboardspline/dist/index.html @@ -0,0 +1,16 @@ + + + + + CodePen - 3D Dashboard - Spline + + + + + + + + + + + diff --git a/3d-dashboardspline/dist/style.css b/3d-dashboardspline/dist/style.css new file mode 100644 index 0000000..c95e084 --- /dev/null +++ b/3d-dashboardspline/dist/style.css @@ -0,0 +1,5 @@ +body, +iframe { + width: 100%; + height: 100vh; +} \ No newline at end of file diff --git a/3d-dashboardspline/license.txt b/3d-dashboardspline/license.txt new file mode 100644 index 0000000..25548e4 --- /dev/null +++ b/3d-dashboardspline/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Ricardo Oliva Alonso (https://codepen.io/ricardoolivaalonso/pen/abmqrxY) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/3d-dashboardspline/src/index.html b/3d-dashboardspline/src/index.html new file mode 100644 index 0000000..79af700 --- /dev/null +++ b/3d-dashboardspline/src/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/3d-dashboardspline/src/style.scss b/3d-dashboardspline/src/style.scss new file mode 100644 index 0000000..5885cf7 --- /dev/null +++ b/3d-dashboardspline/src/style.scss @@ -0,0 +1,5 @@ +body, +iframe{ + width: 100%; + height: 100vh; +} \ No newline at end of file diff --git a/3d-drag-out-menu-with-guitar/README.markdown b/3d-drag-out-menu-with-guitar/README.markdown new file mode 100644 index 0000000..fdd9d39 --- /dev/null +++ b/3d-drag-out-menu-with-guitar/README.markdown @@ -0,0 +1,4 @@ +# 3D Drag out menu with guitar + _A Pen created at CodePen.io. Original URL: [https://codepen.io/jcoulterdesign/pen/wLPZPM](https://codepen.io/jcoulterdesign/pen/wLPZPM). + + A recreation of this pen https://dribbble.com/shots/4773637-3D-flip-menu by Minh Pham \ No newline at end of file diff --git a/3d-drag-out-menu-with-guitar/dist/index.html b/3d-drag-out-menu-with-guitar/dist/index.html new file mode 100644 index 0000000..833e7bc --- /dev/null +++ b/3d-drag-out-menu-with-guitar/dist/index.html @@ -0,0 +1,153 @@ + + + + + 3D Drag out menu with guitar + + + + +

Drag the phone right and left

+
+
+ +
+
+
+ +

Product details

+
+
+
+
+ +
+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender

+

Fender American Elite Strat

+
+
+ +
    +
  • Guitars
  • +
  • Basses
  • +
  • Amps
  • +
  • Pedals
  • +
  • Other
  • +
+
    +
  • About
  • +
  • Support
  • +
  • Terms
  • +
  • FAQ
  • +
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/3d-drag-out-menu-with-guitar/dist/script.js b/3d-drag-out-menu-with-guitar/dist/script.js new file mode 100644 index 0000000..5296f3c --- /dev/null +++ b/3d-drag-out-menu-with-guitar/dist/script.js @@ -0,0 +1,327 @@ +dragging = false; + +'use strict'; + +///console.clear(); + +class Grain { + constructor(el) { + /** + * Options + * Increase the pattern size if visible pattern + */ + this.patternSize = 150; + this.patternScaleX = 1; + this.patternScaleY = 1; + this.patternRefreshInterval = 3; // 8 + this.patternAlpha = 28; // int between 0 and 255, + + /** + * Create canvas + */ + this.canvas = el; + this.ctx = this.canvas.getContext('2d'); + this.ctx.scale(this.patternScaleX, this.patternScaleY); + + /** + * Create a canvas that will be used to generate grain and used as a + * pattern on the main canvas. + */ + this.patternCanvas = document.createElement('canvas'); + this.patternCanvas.width = this.patternSize; + this.patternCanvas.height = this.patternSize; + this.patternCtx = this.patternCanvas.getContext('2d'); + this.patternData = this.patternCtx.createImageData(this.patternSize, this.patternSize); + this.patternPixelDataLength = this.patternSize * this.patternSize * 4; // rgba = 4 + + /** + * Prebind prototype function, so later its easier to user + */ + this.resize = this.resize.bind(this); + this.loop = this.loop.bind(this); + + this.frame = 0; + + window.addEventListener('resize', this.resize); + this.resize(); + + window.requestAnimationFrame(this.loop); + } + + resize() { + this.canvas.width = window.innerWidth * devicePixelRatio; + this.canvas.height = window.innerHeight * devicePixelRatio; + } + + update() { + const { patternPixelDataLength, patternData, patternAlpha, patternCtx } = this; + + // put a random shade of gray into every pixel of the pattern + for (let i = 0; i < patternPixelDataLength; i += 4) { + // const value = (Math.random() * 255) | 0; + const value = Math.random() * 255; + + patternData.data[i] = value; + patternData.data[i + 1] = value; + patternData.data[i + 2] = value; + patternData.data[i + 3] = patternAlpha; + } + + patternCtx.putImageData(patternData, 0, 0); + } + + draw() { + const { ctx, patternCanvas, canvas, viewHeight } = this; + const { width, height } = canvas; + + // clear canvas + ctx.clearRect(0, 0, width, height); + + // fill the canvas using the pattern + ctx.fillStyle = ctx.createPattern(patternCanvas, 'repeat'); + ctx.fillRect(0, 0, width, height); + } + + loop() { + // only update grain every n frames + const shouldDraw = ++this.frame % this.patternRefreshInterval === 0; + if (shouldDraw) { + this.update(); + this.draw(); + } + + window.requestAnimationFrame(this.loop); + }} + + + +/** + * Initiate Grain + */ +const el = document.querySelector('.grain'); +const grain = new Grain(el); + + + +$('.phone').mousedown(function (e) { + initX = e.clientX; + dragging = true; +}); + +$('html').mouseup(function () { + dragging = false; + $('.dynamicCursor').css('width', '18px'); +}); +$('.phone').mousemove(function (e) { + if (dragging) { + let mouseX = e.clientX; + difference = mouseX - initX; + + console.log(difference); + + $('.dynamicCursor').css('width', Math.abs(difference) + 'px'); + + if (difference > 60) { + $('.phone').addClass('open'); + } + + if (difference < -60) { + $('.phone').removeClass('open'); + } + + } +}); + +function drawMouseSpeedDemo() { + var mrefreshinterval = 30; // update display every 500ms + var lastmousex = -1; + var lastmousey = -1; + var lastmousetime; + var mousetravel = 0; + var mpoints = []; + var mpoints_max = 30; + var direction; + + $('html').mousemove(function (e) { + var mousex = e.pageX; + var mousey = e.pageY; + if (lastmousex > -1) { + mousetravel += Math.max(Math.abs(mousex - lastmousex), Math.abs(mousey - lastmousey)); + } + // console.log(mousex-lastmousex) + + if (mousex - lastmousex > 0) { + direction = '+'; + } else { + direction = '-'; + } + + //console.log(direction); + + lastmousex = mousex; + lastmousey = mousey; + }); + var mdraw = function () { + var md = new Date(); + var timenow = md.getTime(); + if (lastmousetime && lastmousetime != timenow) { + var pps = Math.round(mousetravel / (timenow - lastmousetime) * 1000); + mpoints.push(pps); + if (mpoints.length > mpoints_max) + mpoints.splice(0, 1); + mousetravel = 0; + //console.log(pps) + if (dragging) { + + } + + } + lastmousetime = timenow; + setTimeout(mdraw, mrefreshinterval); + }; + // We could use setInterval instead, but I prefer to do it this way + setTimeout(mdraw, mrefreshinterval); +}; + +drawMouseSpeedDemo(); + + +/* ------------------------------------------------- + + Dynamic cursor + + --------------------------------------------------- */ + +const cursorSettings = { + 'class': 'dynamicCursor', + 'size': '18', + 'expandedSize': '40', + 'expandSpeed': 0.4, + 'background': 'rgba(161, 142, 218, 0.25)', + 'opacity': '1', + 'transitionTime': '1.4s', + 'transitionEase': 'cubic-bezier(0.075, 0.820, 0.165, 1.000)', + 'borderWidth': '0', + 'borderColor': 'black', + 'iconSize': '11px', + 'iconColor': 'white', + 'triggerElements': { + 'trigger': { + 'className': 'trigger', + 'icon': '' }, + + 'trigger2': { + 'className': 'slider_inner', + 'icon': '' } } }; + + + + + +function dynamicCursor(options) { + + document.write(''); + + var hold; + cursor = document.createElement('div'); + let cursorIcon = document.createElement('div'); + + cursorIcon.classList.add('cursorIcon'); + cursorIcon.style.position = 'absolute'; + cursorIcon.style.fontFamily = 'Raleway'; + cursorIcon.style.textTransform = 'uppercase'; + cursorIcon.style.fontWeight = '800'; + cursorIcon.style.textAlign = 'center'; + cursorIcon.style.top = '50%'; + cursorIcon.style.width = '100%'; + cursorIcon.style.transform = 'translateY(-50%)'; + cursorIcon.style.color = options.iconColor; + cursorIcon.style.fontSize = options.iconSize; + cursorIcon.style.opacity = 0; + cursorIcon.style.transition = `opacity ${options.expandSpeed}s`; + + cursor.classList.add(options.class); + cursor.style.boxSizing = 'border-box'; + cursor.style.width = `${options.size}px`; + cursor.style.height = `${options.size}px`; + cursor.style.borderRadius = `${options.expandedSize}px`; + cursor.style.opacity = 0; + + cursor.style.pointerEvents = 'none'; + cursor.style.zIndex = 999; + cursor.style.transition = `transform ${options.transitionTime} ${options.transitionEase}, width 0s, height ${options.expandSpeed}s .2s, opacity 1s .2s`; + cursor.style.border = `${options.borderWidth}px solid ${options.borderColor}`; + cursor.style.position = 'fixed'; + cursor.style.background = options.background; + + cursor.appendChild(cursorIcon); + document.body.appendChild(cursor); + + setTimeout(function () { + cursor.style.opacity = options.opacity; + }, 500); + + var idle; + + document.onmousemove = e => { + console.log('test'); + x = e.pageX; + y = e.pageY; + + cursor.style.opacity = options.opacity; + clearInterval(idle); + + idle = setTimeout(function () { + cursor.style.opacity = 0; + }, 4000); + + cursor.style.top = '0'; + cursor.style.left = '0'; + cursor.style.transform = `translateX(calc(${x}px - 50%)) translateY(calc(${y}px - 50%))`; + }; + + for (i in options.triggerElements) { + + let trigger = $(`.${options.triggerElements[i].className}`); + + console.log(trigger); + + + let icon = options.triggerElements[i].icon; + + if (!trigger) { + console.warn('You dont have any triggers'); + } else { + trigger.each(function (el) { + + console.log(); + trigger[el].style.cursor = 'default'; + trigger[el].addEventListener('mouseover', () => { + console.log('over'); + cursor.style.width = `${options.expandedSize}px`; + cursor.style.height = `${options.expandedSize}px`; + cursorIcon.innerHTML = icon; + cursorIcon.style.opacity = 1; + + + console.log($(this)); + + + }); + + trigger[el].addEventListener('mouseout', () => { + cursor.style.width = `${options.size}px`; + cursor.style.height = `${options.size}px`; + cursorIcon.style.opacity = 0; + }); + }); + + } + } +} + +dynamicCursor(cursorSettings); + +$('.back').click(function () { + $(this).parent().parent().removeClass('expand'); +}); \ No newline at end of file diff --git a/3d-drag-out-menu-with-guitar/dist/style.css b/3d-drag-out-menu-with-guitar/dist/style.css new file mode 100644 index 0000000..8223cd4 --- /dev/null +++ b/3d-drag-out-menu-with-guitar/dist/style.css @@ -0,0 +1,746 @@ +@import url("https://fonts.googleapis.com/css?family=Heebo:400,500,800,900&display=swap"); +:root { + --bg: #efdece; +} + +h4 { + color: white; + margin: 0; + padding-top: 20px; + text-align: center; +} + +canvas { + position: absolute; + z-index: 1; + opacity: 0.6; + pointer-events: none; +} + +.dynamicCursor { + max-width: 50px; + min-width: 18px; + transition: width 0s; + background: transparent !important; + border: 2px solid white !important; +} + +@-webkit-keyframes in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@keyframes in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +body { + padding: 0; + background: #a92913; + padding: 0; + margin: 0; + box-shadow: 50vw 0 #381313 inset; + height: 100vh; + font-family: 'Heebo', sans-serif; + -webkit-user-select: none; + /* Chrome all / Safari all */ + -moz-user-select: none; + /* Firefox all */ + -ms-user-select: none; + /* IE 10+ */ + user-select: none; + /* Likely future */ +} +body .phone { + position: absolute; + left: 0; + right: 0; + margin: auto; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} +body .guitar { + width: 85px; + height: 175px; + z-index: 10; + position: absolute; + transition: all 0.7s 0.3s cubic-bezier(0.5, 0.005, 0.075, 0.985), transform 0.1s 0.7s, -webkit-transform 0.1s; + left: 92px; + -webkit-transform: scale(1.8); + transform: scale(1.8); + top: 130px; + background-size: 1920px !important; + background: url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/gt.png); + -webkit-animation: guitar2 0.5s 0s steps(23, end) forwards; + animation: guitar2 0.5s 0s steps(23, end) forwards; +} +@-webkit-keyframes guitar { + 0% { + background-position: 0 0; + -webkit-transform: scale(1.8); + transform: scale(1.8); + } + 10% { + -webkit-transform: scale(1.8); + transform: scale(1.8); + } + 100% { + background-position: -1840px 0; + -webkit-transform: scale(1.8); + transform: scale(1.8); + } +} +@keyframes guitar { + 0% { + background-position: 0 0; + -webkit-transform: scale(1.8); + transform: scale(1.8); + } + 10% { + -webkit-transform: scale(1.8); + transform: scale(1.8); + } + 100% { + background-position: -1840px 0; + -webkit-transform: scale(1.8); + transform: scale(1.8); + } +} +@-webkit-keyframes guitar2 { + 0% { + background-position: -1840px 0; + -webkit-transform: scale(1.8); + transform: scale(1.8); + } + 10% { + -webkit-transform: scale(1.8); + transform: scale(1.8); + } + 100% { + background-position: 0 0; + -webkit-transform: scale(1.8); + transform: scale(1.8); + } +} +@keyframes guitar2 { + 0% { + background-position: -1840px 0; + -webkit-transform: scale(1.8); + transform: scale(1.8); + } + 10% { + -webkit-transform: scale(1.8); + transform: scale(1.8); + } + 100% { + background-position: 0 0; + -webkit-transform: scale(1.8); + transform: scale(1.8); + } +} +body .phone { + opacity: 0; + -webkit-animation: in 1s .5s forwards; + animation: in 1s .5s forwards; + width: 245px; + height: 489px; + -webkit-perspective: 900; + perspective: 900; + border-radius: 24px; + overflow: hidden; + border-radius: 40px; + box-shadow: 0 0 40px 10px rgba(0, 0, 0, 0.3); + -webkit-box-reflect: below 4px linear-gradient(to top, white -120%, rgba(255, 255, 255, 0) 25%); +} +body .phone.open .guitar { + -webkit-animation: guitar 0.5s 0s steps(23, end) forwards; + animation: guitar 0.5s 0s steps(23, end) forwards; +} +body .phone.open .phone_inner__nav { + left: 170px; +} +body .phone.open .phone_inner__nav h3 { + opacity: 0; +} +body .phone.open .phone_inner__cube { + -webkit-transform: rotateY(90deg); + transform: rotateY(90deg); + left: 50px; +} +body .phone.open .phone_inner__cube h2 { + opacity: 0; + -webkit-transform: translateZ(50px); + transform: translateZ(50px); +} +body .phone_frame { + width: 245px; + height: 489px; + position: absolute; + z-index: 2; + background: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/frameIphone.png"); + pointer-events: none; +} +body .phone_inner { + width: 225px; + height: 475px; + position: relative; + left: 10px; + top: 6px; + overflow: hidden; + -webkit-transform-style: preserve-3D; + transform-style: preserve-3D; + background: #ada59c; +} +body .phone_inner__nav { + position: absolute; + z-index: 2; + text-transform: uppercase; + text-align: center; + width: 100%; + font-weight: 400; + transition: all 0.5s cubic-bezier(0.615, 0, 0.28, 1.005); + top: 39px; + left: 0; +} +body .phone_inner__nav h3 { + margin: 0; + font-size: 9px; + opacity: 1; + transition: all 0.5s cubic-bezier(0.615, 0, 0.28, 1.005); +} +body .phone_inner__nav .menu { + width: 18px; + height: 2px; + background: #111114; + position: absolute; + left: 16px; +} +body .phone_inner__nav .menu:after { + content: ''; + display: block; + position: relative; + top: 2px; + width: 18px; + height: 2px; + background: #111114; +} +body .phone_inner__nav .menu:before { + content: ''; + display: block; + position: relative; + top: 9px; + width: 10px; + height: 2px; + background: #111114; +} +body .phone_inner__cube { + -webkit-transform-style: preserve-3D; + transform-style: preserve-3D; + height: 100%; + position: relative; + left: 0; + transition: all 0.509s cubic-bezier(0.615, 0, 0.28, 1.005); +} +body .phone_inner__cube .shadow img { + position: absolute; + width: 210px; + top: 90px; + left: 20px; +} +body .phone_inner__cube h1 { + text-transform: uppercase; + margin: 0; + -webkit-transform-origin: 0 50%; + transform-origin: 0 50%; + position: absolute; + line-height: 0; + left: 47px; + letter-spacing: 3px; + top: 92px; + color: #c6bdad; + font-size: 55px; + text-shadow: 0 0 1px #bdb5ad; + -webkit-transform-style: preserve-3D; + transform-style: preserve-3D; +} +body .phone_inner__cube h1:nth-of-type(1) { + -webkit-transform: rotate(90deg) translateZ(-0.9583333333px); + transform: rotate(90deg) translateZ(-0.9583333333px); +} +body .phone_inner__cube h1:nth-of-type(2) { + -webkit-transform: rotate(90deg) translateZ(-0.9166666667px); + transform: rotate(90deg) translateZ(-0.9166666667px); +} +body .phone_inner__cube h1:nth-of-type(3) { + -webkit-transform: rotate(90deg) translateZ(-0.875px); + transform: rotate(90deg) translateZ(-0.875px); +} +body .phone_inner__cube h1:nth-of-type(4) { + -webkit-transform: rotate(90deg) translateZ(-0.8333333333px); + transform: rotate(90deg) translateZ(-0.8333333333px); +} +body .phone_inner__cube h1:nth-of-type(5) { + -webkit-transform: rotate(90deg) translateZ(-0.7916666667px); + transform: rotate(90deg) translateZ(-0.7916666667px); +} +body .phone_inner__cube h1:nth-of-type(6) { + -webkit-transform: rotate(90deg) translateZ(-0.75px); + transform: rotate(90deg) translateZ(-0.75px); +} +body .phone_inner__cube h1:nth-of-type(7) { + -webkit-transform: rotate(90deg) translateZ(-0.7083333333px); + transform: rotate(90deg) translateZ(-0.7083333333px); +} +body .phone_inner__cube h1:nth-of-type(8) { + -webkit-transform: rotate(90deg) translateZ(-0.6666666667px); + transform: rotate(90deg) translateZ(-0.6666666667px); +} +body .phone_inner__cube h1:nth-of-type(9) { + -webkit-transform: rotate(90deg) translateZ(-0.625px); + transform: rotate(90deg) translateZ(-0.625px); +} +body .phone_inner__cube h1:nth-of-type(10) { + -webkit-transform: rotate(90deg) translateZ(-0.5833333333px); + transform: rotate(90deg) translateZ(-0.5833333333px); +} +body .phone_inner__cube h1:nth-of-type(11) { + -webkit-transform: rotate(90deg) translateZ(-0.5416666667px); + transform: rotate(90deg) translateZ(-0.5416666667px); +} +body .phone_inner__cube h1:nth-of-type(12) { + -webkit-transform: rotate(90deg) translateZ(-0.5px); + transform: rotate(90deg) translateZ(-0.5px); +} +body .phone_inner__cube h1:nth-of-type(13) { + -webkit-transform: rotate(90deg) translateZ(-0.4583333333px); + transform: rotate(90deg) translateZ(-0.4583333333px); +} +body .phone_inner__cube h1:nth-of-type(14) { + -webkit-transform: rotate(90deg) translateZ(-0.4166666667px); + transform: rotate(90deg) translateZ(-0.4166666667px); +} +body .phone_inner__cube h1:nth-of-type(15) { + -webkit-transform: rotate(90deg) translateZ(-0.375px); + transform: rotate(90deg) translateZ(-0.375px); +} +body .phone_inner__cube h1:nth-of-type(16) { + -webkit-transform: rotate(90deg) translateZ(-0.3333333333px); + transform: rotate(90deg) translateZ(-0.3333333333px); +} +body .phone_inner__cube h1:nth-of-type(17) { + -webkit-transform: rotate(90deg) translateZ(-0.2916666667px); + transform: rotate(90deg) translateZ(-0.2916666667px); +} +body .phone_inner__cube h1:nth-of-type(18) { + -webkit-transform: rotate(90deg) translateZ(-0.25px); + transform: rotate(90deg) translateZ(-0.25px); +} +body .phone_inner__cube h1:nth-of-type(19) { + -webkit-transform: rotate(90deg) translateZ(-0.2083333333px); + transform: rotate(90deg) translateZ(-0.2083333333px); +} +body .phone_inner__cube h1:nth-of-type(20) { + -webkit-transform: rotate(90deg) translateZ(-0.1666666667px); + transform: rotate(90deg) translateZ(-0.1666666667px); +} +body .phone_inner__cube h1:nth-of-type(21) { + -webkit-transform: rotate(90deg) translateZ(-0.125px); + transform: rotate(90deg) translateZ(-0.125px); +} +body .phone_inner__cube h1:nth-of-type(22) { + -webkit-transform: rotate(90deg) translateZ(-0.0833333333px); + transform: rotate(90deg) translateZ(-0.0833333333px); +} +body .phone_inner__cube h1:nth-of-type(23) { + -webkit-transform: rotate(90deg) translateZ(-0.0416666667px); + transform: rotate(90deg) translateZ(-0.0416666667px); +} +body .phone_inner__cube h1:nth-of-type(24) { + -webkit-transform: rotate(90deg) translateZ(0px); + transform: rotate(90deg) translateZ(0px); +} +body .phone_inner__cube h1:nth-of-type(25) { + -webkit-transform: rotate(90deg) translateZ(0.0416666667px); + transform: rotate(90deg) translateZ(0.0416666667px); +} +body .phone_inner__cube h1:nth-of-type(26) { + -webkit-transform: rotate(90deg) translateZ(0.0833333333px); + transform: rotate(90deg) translateZ(0.0833333333px); +} +body .phone_inner__cube h1:nth-of-type(27) { + -webkit-transform: rotate(90deg) translateZ(0.125px); + transform: rotate(90deg) translateZ(0.125px); +} +body .phone_inner__cube h1:nth-of-type(28) { + -webkit-transform: rotate(90deg) translateZ(0.1666666667px); + transform: rotate(90deg) translateZ(0.1666666667px); +} +body .phone_inner__cube h1:nth-of-type(29) { + -webkit-transform: rotate(90deg) translateZ(0.2083333333px); + transform: rotate(90deg) translateZ(0.2083333333px); +} +body .phone_inner__cube h1:nth-of-type(30) { + -webkit-transform: rotate(90deg) translateZ(0.25px); + transform: rotate(90deg) translateZ(0.25px); +} +body .phone_inner__cube h1:nth-of-type(31) { + -webkit-transform: rotate(90deg) translateZ(0.2916666667px); + transform: rotate(90deg) translateZ(0.2916666667px); +} +body .phone_inner__cube h1:nth-of-type(32) { + -webkit-transform: rotate(90deg) translateZ(0.3333333333px); + transform: rotate(90deg) translateZ(0.3333333333px); +} +body .phone_inner__cube h1:nth-of-type(33) { + -webkit-transform: rotate(90deg) translateZ(0.375px); + transform: rotate(90deg) translateZ(0.375px); +} +body .phone_inner__cube h1:nth-of-type(34) { + -webkit-transform: rotate(90deg) translateZ(0.4166666667px); + transform: rotate(90deg) translateZ(0.4166666667px); +} +body .phone_inner__cube h1:nth-of-type(35) { + -webkit-transform: rotate(90deg) translateZ(0.4583333333px); + transform: rotate(90deg) translateZ(0.4583333333px); +} +body .phone_inner__cube h1:nth-of-type(36) { + -webkit-transform: rotate(90deg) translateZ(0.5px); + transform: rotate(90deg) translateZ(0.5px); +} +body .phone_inner__cube h1:nth-of-type(37) { + -webkit-transform: rotate(90deg) translateZ(0.5416666667px); + transform: rotate(90deg) translateZ(0.5416666667px); +} +body .phone_inner__cube h1:nth-of-type(38) { + -webkit-transform: rotate(90deg) translateZ(0.5833333333px); + transform: rotate(90deg) translateZ(0.5833333333px); +} +body .phone_inner__cube h1:nth-of-type(39) { + -webkit-transform: rotate(90deg) translateZ(0.625px); + transform: rotate(90deg) translateZ(0.625px); +} +body .phone_inner__cube h1:nth-of-type(40) { + -webkit-transform: rotate(90deg) translateZ(0.6666666667px); + transform: rotate(90deg) translateZ(0.6666666667px); +} +body .phone_inner__cube h1:nth-of-type(41) { + -webkit-transform: rotate(90deg) translateZ(0.7083333333px); + transform: rotate(90deg) translateZ(0.7083333333px); +} +body .phone_inner__cube h1:nth-of-type(42) { + -webkit-transform: rotate(90deg) translateZ(0.75px); + transform: rotate(90deg) translateZ(0.75px); +} +body .phone_inner__cube h1:nth-of-type(43) { + -webkit-transform: rotate(90deg) translateZ(0.7916666667px); + transform: rotate(90deg) translateZ(0.7916666667px); +} +body .phone_inner__cube h1:nth-of-type(44) { + -webkit-transform: rotate(90deg) translateZ(0.8333333333px); + transform: rotate(90deg) translateZ(0.8333333333px); +} +body .phone_inner__cube h1:nth-of-type(45) { + -webkit-transform: rotate(90deg) translateZ(0.875px); + transform: rotate(90deg) translateZ(0.875px); +} +body .phone_inner__cube h1:nth-of-type(46) { + -webkit-transform: rotate(90deg) translateZ(0.9166666667px); + transform: rotate(90deg) translateZ(0.9166666667px); +} +body .phone_inner__cube h1:nth-of-type(47) { + -webkit-transform: rotate(90deg) translateZ(0.9583333333px); + transform: rotate(90deg) translateZ(0.9583333333px); +} +body .phone_inner__cube h1:nth-of-type(48) { + -webkit-transform: rotate(90deg) translateZ(1px); + transform: rotate(90deg) translateZ(1px); +} +body .phone_inner__cube h1:nth-of-type(49) { + -webkit-transform: rotate(90deg) translateZ(1.0416666667px); + transform: rotate(90deg) translateZ(1.0416666667px); +} +body .phone_inner__cube h1:nth-of-type(50) { + -webkit-transform: rotate(90deg) translateZ(1.0833333333px); + transform: rotate(90deg) translateZ(1.0833333333px); +} +body .phone_inner__cube h1:nth-of-type(51) { + -webkit-transform: rotate(90deg) translateZ(1.125px); + transform: rotate(90deg) translateZ(1.125px); +} +body .phone_inner__cube h1:nth-of-type(52) { + -webkit-transform: rotate(90deg) translateZ(1.1666666667px); + transform: rotate(90deg) translateZ(1.1666666667px); +} +body .phone_inner__cube h1:nth-of-type(53) { + -webkit-transform: rotate(90deg) translateZ(1.2083333333px); + transform: rotate(90deg) translateZ(1.2083333333px); +} +body .phone_inner__cube h1:nth-of-type(54) { + -webkit-transform: rotate(90deg) translateZ(1.25px); + transform: rotate(90deg) translateZ(1.25px); +} +body .phone_inner__cube h1:nth-of-type(55) { + -webkit-transform: rotate(90deg) translateZ(1.2916666667px); + transform: rotate(90deg) translateZ(1.2916666667px); +} +body .phone_inner__cube h1:nth-of-type(56) { + -webkit-transform: rotate(90deg) translateZ(1.3333333333px); + transform: rotate(90deg) translateZ(1.3333333333px); +} +body .phone_inner__cube h1:nth-of-type(57) { + -webkit-transform: rotate(90deg) translateZ(1.375px); + transform: rotate(90deg) translateZ(1.375px); +} +body .phone_inner__cube h1:nth-of-type(58) { + -webkit-transform: rotate(90deg) translateZ(1.4166666667px); + transform: rotate(90deg) translateZ(1.4166666667px); +} +body .phone_inner__cube h1:nth-of-type(59) { + -webkit-transform: rotate(90deg) translateZ(1.4583333333px); + transform: rotate(90deg) translateZ(1.4583333333px); +} +body .phone_inner__cube h1:nth-of-type(60) { + -webkit-transform: rotate(90deg) translateZ(1.5px); + transform: rotate(90deg) translateZ(1.5px); +} +body .phone_inner__cube h1:nth-of-type(61) { + -webkit-transform: rotate(90deg) translateZ(1.5416666667px); + transform: rotate(90deg) translateZ(1.5416666667px); +} +body .phone_inner__cube h1:nth-of-type(62) { + -webkit-transform: rotate(90deg) translateZ(1.5833333333px); + transform: rotate(90deg) translateZ(1.5833333333px); +} +body .phone_inner__cube h1:nth-of-type(63) { + -webkit-transform: rotate(90deg) translateZ(1.625px); + transform: rotate(90deg) translateZ(1.625px); +} +body .phone_inner__cube h1:nth-of-type(64) { + -webkit-transform: rotate(90deg) translateZ(1.6666666667px); + transform: rotate(90deg) translateZ(1.6666666667px); +} +body .phone_inner__cube h1:nth-of-type(65) { + -webkit-transform: rotate(90deg) translateZ(1.7083333333px); + transform: rotate(90deg) translateZ(1.7083333333px); +} +body .phone_inner__cube h1:nth-of-type(66) { + -webkit-transform: rotate(90deg) translateZ(1.75px); + transform: rotate(90deg) translateZ(1.75px); +} +body .phone_inner__cube h1:nth-of-type(67) { + -webkit-transform: rotate(90deg) translateZ(1.7916666667px); + transform: rotate(90deg) translateZ(1.7916666667px); +} +body .phone_inner__cube h1:nth-of-type(68) { + -webkit-transform: rotate(90deg) translateZ(1.8333333333px); + transform: rotate(90deg) translateZ(1.8333333333px); +} +body .phone_inner__cube h1:nth-of-type(69) { + -webkit-transform: rotate(90deg) translateZ(1.875px); + transform: rotate(90deg) translateZ(1.875px); +} +body .phone_inner__cube h1:nth-of-type(70) { + -webkit-transform: rotate(90deg) translateZ(1.9166666667px); + transform: rotate(90deg) translateZ(1.9166666667px); +} +body .phone_inner__cube h1:nth-of-type(71) { + -webkit-transform: rotate(90deg) translateZ(1.9583333333px); + transform: rotate(90deg) translateZ(1.9583333333px); +} +body .phone_inner__cube h1:nth-of-type(72) { + -webkit-transform: rotate(90deg) translateZ(2px); + transform: rotate(90deg) translateZ(2px); +} +body .phone_inner__cube h1:nth-of-type(73) { + -webkit-transform: rotate(90deg) translateZ(2.0416666667px); + transform: rotate(90deg) translateZ(2.0416666667px); +} +body .phone_inner__cube h1:nth-of-type(74) { + -webkit-transform: rotate(90deg) translateZ(2.0833333333px); + transform: rotate(90deg) translateZ(2.0833333333px); +} +body .phone_inner__cube h1:nth-of-type(75) { + -webkit-transform: rotate(90deg) translateZ(2.125px); + transform: rotate(90deg) translateZ(2.125px); +} +body .phone_inner__cube h1:nth-of-type(76) { + -webkit-transform: rotate(90deg) translateZ(2.1666666667px); + transform: rotate(90deg) translateZ(2.1666666667px); +} +body .phone_inner__cube h1:nth-of-type(77) { + -webkit-transform: rotate(90deg) translateZ(2.2083333333px); + transform: rotate(90deg) translateZ(2.2083333333px); +} +body .phone_inner__cube h1:nth-of-type(78) { + -webkit-transform: rotate(90deg) translateZ(2.25px); + transform: rotate(90deg) translateZ(2.25px); +} +body .phone_inner__cube h1:nth-of-type(79) { + -webkit-transform: rotate(90deg) translateZ(2.2916666667px); + transform: rotate(90deg) translateZ(2.2916666667px); +} +body .phone_inner__cube h1:nth-of-type(80) { + -webkit-transform: rotate(90deg) translateZ(2.3333333333px); + transform: rotate(90deg) translateZ(2.3333333333px); +} +body .phone_inner__cube h1:nth-of-type(81) { + -webkit-transform: rotate(90deg) translateZ(2.375px); + transform: rotate(90deg) translateZ(2.375px); +} +body .phone_inner__cube h1:nth-of-type(82) { + -webkit-transform: rotate(90deg) translateZ(2.4166666667px); + transform: rotate(90deg) translateZ(2.4166666667px); +} +body .phone_inner__cube h1:nth-of-type(83) { + -webkit-transform: rotate(90deg) translateZ(2.4583333333px); + transform: rotate(90deg) translateZ(2.4583333333px); +} +body .phone_inner__cube h1:nth-of-type(84) { + -webkit-transform: rotate(90deg) translateZ(2.5px); + transform: rotate(90deg) translateZ(2.5px); +} +body .phone_inner__cube h1:nth-of-type(85) { + -webkit-transform: rotate(90deg) translateZ(2.5416666667px); + transform: rotate(90deg) translateZ(2.5416666667px); +} +body .phone_inner__cube h1:nth-of-type(86) { + -webkit-transform: rotate(90deg) translateZ(2.5833333333px); + transform: rotate(90deg) translateZ(2.5833333333px); +} +body .phone_inner__cube h1:nth-of-type(87) { + -webkit-transform: rotate(90deg) translateZ(2.625px); + transform: rotate(90deg) translateZ(2.625px); +} +body .phone_inner__cube h1:nth-of-type(88) { + -webkit-transform: rotate(90deg) translateZ(2.6666666667px); + transform: rotate(90deg) translateZ(2.6666666667px); +} +body .phone_inner__cube h1:nth-of-type(89) { + -webkit-transform: rotate(90deg) translateZ(2.7083333333px); + transform: rotate(90deg) translateZ(2.7083333333px); +} +body .phone_inner__cube h1:nth-of-type(90) { + -webkit-transform: rotate(90deg) translateZ(2.75px); + transform: rotate(90deg) translateZ(2.75px); +} +body .phone_inner__cube h1:nth-of-type(91) { + -webkit-transform: rotate(90deg) translateZ(2.7916666667px); + transform: rotate(90deg) translateZ(2.7916666667px); +} +body .phone_inner__cube h1:nth-of-type(92) { + -webkit-transform: rotate(90deg) translateZ(2.8333333333px); + transform: rotate(90deg) translateZ(2.8333333333px); +} +body .phone_inner__cube h1:nth-of-type(93) { + -webkit-transform: rotate(90deg) translateZ(2.875px); + transform: rotate(90deg) translateZ(2.875px); +} +body .phone_inner__cube h1:nth-of-type(94) { + -webkit-transform: rotate(90deg) translateZ(2.9166666667px); + transform: rotate(90deg) translateZ(2.9166666667px); +} +body .phone_inner__cube h1:nth-of-type(95) { + -webkit-transform: rotate(90deg) translateZ(2.9583333333px); + transform: rotate(90deg) translateZ(2.9583333333px); +} +body .phone_inner__cube h1:nth-of-type(96) { + -webkit-transform: rotate(90deg) translateZ(3px); + transform: rotate(90deg) translateZ(3px); +} +body .phone_inner__cube h1:nth-of-type(97) { + -webkit-transform: rotate(90deg) translateZ(3.0416666667px); + transform: rotate(90deg) translateZ(3.0416666667px); +} +body .phone_inner__cube h1:nth-of-type(98) { + -webkit-transform: rotate(90deg) translateZ(3.0833333333px); + transform: rotate(90deg) translateZ(3.0833333333px); +} +body .phone_inner__cube h1:nth-of-type(99) { + -webkit-transform: rotate(90deg) translateZ(3.125px); + transform: rotate(90deg) translateZ(3.125px); +} +body .phone_inner__cube h1:nth-of-type(100) { + -webkit-transform: rotate(90deg) translateZ(3.1666666667px); + transform: rotate(90deg) translateZ(3.1666666667px); +} +body .phone_inner__cube h2 { + font-size: 20px; + font-weight: 500; + position: absolute; + bottom: 14px; + line-height: 20px; + left: 24px; + width: 100px; + opacity: 1; + -webkit-transform: translateZ(0); + transform: translateZ(0); + transition: all 0.5s cubic-bezier(0.615, 0, 0.28, 1.005); +} +body .phone_inner__cube .logo { + position: absolute; + z-index: auto; + top: 64px; + left: 20px; +} +body .phone_inner__cube .logo img { + width: 50px; + -ms-interpolation-mode: nearest-neighbor; + image-rendering: -moz-crisp-edges; + image-rendering: pixelated; + mix-blend-mode: darken; +} +body .phone_inner__cube ul { + padding: 0; + margin: 0 0 0 30px; +} +body .phone_inner__cube ul li { + list-style-type: none; + text-transform: uppercase; + font-weight: 900; + margin: 0 0 4px 0; + color: #111008; + cursor: pointer; + transition: all .2s; +} +body .phone_inner__cube ul li:hover { + color: #a23426; +} +body .phone_inner__cube ul li.active { + color: #a23426; +} +body .phone_inner__cube ul.small { + font-size: 7px; + margin-top: 80px; +} +body .phone_inner__cube ul.small li { + margin: 0 0 6px 0; +} +body .phone_inner__cube ul.big { + margin-top: 157px; +} +body .phone_inner__cube .face--left, body .phone_inner__cube .face--front { + width: 100%; + height: 100%; + -webkit-transform-style: preserve-3D; + transform-style: preserve-3D; + background: linear-gradient(to right, #f0ece5, var(--bg) 6%, var(--bg)), var(--bg); + position: absolute; + transform-style: preserve-3D; +} +body .phone_inner__cube .face--left { + -webkit-transform: rotateY(-90deg) translateX(-150px); + transform: rotateY(-90deg) translateX(-150px); + width: 150px; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + z-index: -1; +} diff --git a/3d-drag-out-menu-with-guitar/license.txt b/3d-drag-out-menu-with-guitar/license.txt new file mode 100644 index 0000000..4974bd2 --- /dev/null +++ b/3d-drag-out-menu-with-guitar/license.txt @@ -0,0 +1,13 @@ + + + + diff --git a/3d-drag-out-menu-with-guitar/src/index.haml b/3d-drag-out-menu-with-guitar/src/index.haml new file mode 100644 index 0000000..b025fd1 --- /dev/null +++ b/3d-drag-out-menu-with-guitar/src/index.haml @@ -0,0 +1,30 @@ +%h4 Drag the phone right and left +.phone + .phone_frame + %canvas.grain + .guitar + .phone_inner + .phone_inner__nav + .menu + %h3 Product details + .phone_inner__cube + .face--front + .shadow + %img{:src => 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/gshadow.png'} + -(1..100).each do + %h1 Fender + %h2 Fender American Elite Strat + .face--left + .logo + %img{:src => 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/logoStrings.png'} + %ul.big + %li.active Guitars + %li Basses + %li Amps + %li Pedals + %li Other + %ul.small + %li About + %li Support + %li Terms + %li FAQ \ No newline at end of file diff --git a/3d-drag-out-menu-with-guitar/src/script.babel b/3d-drag-out-menu-with-guitar/src/script.babel new file mode 100644 index 0000000..943455e --- /dev/null +++ b/3d-drag-out-menu-with-guitar/src/script.babel @@ -0,0 +1,327 @@ +dragging = false; + +'use strict'; + +///console.clear(); + +class Grain { + constructor (el) { + /** + * Options + * Increase the pattern size if visible pattern + */ + this.patternSize = 150; + this.patternScaleX = 1; + this.patternScaleY = 1; + this.patternRefreshInterval = 3; // 8 + this.patternAlpha = 28; // int between 0 and 255, + + /** + * Create canvas + */ + this.canvas = el; + this.ctx = this.canvas.getContext('2d'); + this.ctx.scale(this.patternScaleX, this.patternScaleY); + + /** + * Create a canvas that will be used to generate grain and used as a + * pattern on the main canvas. + */ + this.patternCanvas = document.createElement('canvas'); + this.patternCanvas.width = this.patternSize; + this.patternCanvas.height = this.patternSize; + this.patternCtx = this.patternCanvas.getContext('2d'); + this.patternData = this.patternCtx.createImageData(this.patternSize, this.patternSize); + this.patternPixelDataLength = this.patternSize * this.patternSize * 4; // rgba = 4 + + /** + * Prebind prototype function, so later its easier to user + */ + this.resize = this.resize.bind(this); + this.loop = this.loop.bind(this); + + this.frame = 0; + + window.addEventListener('resize', this.resize); + this.resize(); + + window.requestAnimationFrame(this.loop); + } + + resize () { + this.canvas.width = window.innerWidth * devicePixelRatio; + this.canvas.height = window.innerHeight * devicePixelRatio; + } + + update () { + const {patternPixelDataLength, patternData, patternAlpha, patternCtx} = this; + + // put a random shade of gray into every pixel of the pattern + for (let i = 0; i < patternPixelDataLength; i += 4) { + // const value = (Math.random() * 255) | 0; + const value = Math.random() * 255; + + patternData.data[i] = value; + patternData.data[i + 1] = value; + patternData.data[i + 2] = value; + patternData.data[i + 3] = patternAlpha; + } + + patternCtx.putImageData(patternData, 0, 0); + } + + draw () { + const {ctx, patternCanvas, canvas, viewHeight} = this; + const {width, height} = canvas; + + // clear canvas + ctx.clearRect(0, 0, width, height); + + // fill the canvas using the pattern + ctx.fillStyle = ctx.createPattern(patternCanvas, 'repeat'); + ctx.fillRect(0, 0, width, height); + } + + loop () { + // only update grain every n frames + const shouldDraw = ++this.frame % this.patternRefreshInterval === 0; + if (shouldDraw) { + this.update(); + this.draw(); + } + + window.requestAnimationFrame(this.loop); + } +} + + +/** + * Initiate Grain + */ +const el = document.querySelector('.grain'); +const grain = new Grain(el); + + + +$('.phone').mousedown(function(e) { + initX = e.clientX; + dragging = true; +}) + +$('html').mouseup(function(){ + dragging = false + $('.dynamicCursor').css('width', '18px') +}) +$('.phone').mousemove(function(e) { + if(dragging) { + let mouseX = e.clientX; + difference = mouseX - initX; + + console.log(difference) + + $('.dynamicCursor').css('width', Math.abs(difference) + 'px') + + if(difference > 60) { + $('.phone').addClass('open') + } + + if(difference < -60) { + $('.phone').removeClass('open') + } + + } +}); + +function drawMouseSpeedDemo() { + var mrefreshinterval = 30; // update display every 500ms + var lastmousex=-1; + var lastmousey=-1; + var lastmousetime; + var mousetravel = 0; + var mpoints = []; + var mpoints_max = 30; + var direction; + + $('html').mousemove(function(e) { + var mousex = e.pageX; + var mousey = e.pageY; + if (lastmousex > -1) { + mousetravel += Math.max( Math.abs(mousex-lastmousex), Math.abs(mousey-lastmousey) ); + } + // console.log(mousex-lastmousex) + + if(mousex-lastmousex > 0) { + direction = '+' + } else { + direction = '-' + } + + //console.log(direction); + + lastmousex = mousex; + lastmousey = mousey; + }); + var mdraw = function() { + var md = new Date(); + var timenow = md.getTime(); + if (lastmousetime && lastmousetime!=timenow) { + var pps = Math.round(mousetravel / (timenow - lastmousetime) * 1000); + mpoints.push(pps); + if (mpoints.length > mpoints_max) + mpoints.splice(0,1); + mousetravel = 0; + //console.log(pps) + if(dragging) { + + } + + } + lastmousetime = timenow; + setTimeout(mdraw, mrefreshinterval); + } + // We could use setInterval instead, but I prefer to do it this way + setTimeout(mdraw, mrefreshinterval); +}; + +drawMouseSpeedDemo() + + +/* ------------------------------------------------- + +Dynamic cursor + +--------------------------------------------------- */ + +const cursorSettings = { + 'class' : 'dynamicCursor', + 'size' : '18', + 'expandedSize' : '40', + 'expandSpeed' : 0.4, + 'background' : 'rgba(161, 142, 218, 0.25)', + 'opacity' : '1', + 'transitionTime' : '1.4s', + 'transitionEase' : 'cubic-bezier(0.075, 0.820, 0.165, 1.000)', + 'borderWidth' : '0', + 'borderColor' : 'black', + 'iconSize': '11px', + 'iconColor': 'white', + 'triggerElements': { + 'trigger' : { + 'className' : 'trigger', + 'icon' : '' + }, + 'trigger2' : { + 'className' : 'slider_inner', + 'icon' : '' + } + } +} + + +function dynamicCursor(options) { + + document.write(''); + + var hold; + cursor = document.createElement('div'); + let cursorIcon = document.createElement('div'); + + cursorIcon.classList.add('cursorIcon'); + cursorIcon.style.position = 'absolute'; + cursorIcon.style.fontFamily = 'Raleway'; + cursorIcon.style.textTransform = 'uppercase'; + cursorIcon.style.fontWeight = '800'; + cursorIcon.style.textAlign = 'center' + cursorIcon.style.top = '50%'; + cursorIcon.style.width = '100%'; + cursorIcon.style.transform = 'translateY(-50%)'; + cursorIcon.style.color = options.iconColor; + cursorIcon.style.fontSize = options.iconSize; + cursorIcon.style.opacity = 0; + cursorIcon.style.transition = `opacity ${options.expandSpeed}s`; + + cursor.classList.add(options.class); + cursor.style.boxSizing = 'border-box'; + cursor.style.width = `${options.size}px`; + cursor.style.height = `${options.size}px`; + cursor.style.borderRadius = `${options.expandedSize}px`; + cursor.style.opacity = 0; + + cursor.style.pointerEvents = 'none'; + cursor.style.zIndex = 999; + cursor.style.transition = `transform ${options.transitionTime} ${options.transitionEase}, width 0s, height ${options.expandSpeed}s .2s, opacity 1s .2s`; + cursor.style.border = `${options.borderWidth}px solid ${options.borderColor}`; + cursor.style.position = 'fixed'; + cursor.style.background = options.background; + + cursor.appendChild(cursorIcon); + document.body.appendChild(cursor); + + setTimeout(function() { + cursor.style.opacity = options.opacity; + }, 500) + + var idle; + + document.onmousemove = e => { + console.log('test') + x = e.pageX; + y = e.pageY; + + cursor.style.opacity = options.opacity; + clearInterval(idle) + + idle = setTimeout(function() { + cursor.style.opacity = 0; + }, 4000) + + cursor.style.top = '0'; + cursor.style.left = '0'; + cursor.style.transform = `translateX(calc(${x}px - 50%)) translateY(calc(${y}px - 50%))`; + } + + for(i in options.triggerElements) { + + let trigger = $(`.${options.triggerElements[i].className}`); + + console.log(trigger); + + + let icon = options.triggerElements[i].icon; + + if(!trigger) { + console.warn('You dont have any triggers'); + } else { + trigger.each(function(el){ + + console.log() + trigger[el].style.cursor = 'default'; + trigger[el].addEventListener('mouseover', () => { + console.log('over') + cursor.style.width = `${options.expandedSize}px`; + cursor.style.height = `${options.expandedSize}px`; + cursorIcon.innerHTML = icon; + cursorIcon.style.opacity = 1; + + + console.log($(this)) + + + }) + + trigger[el].addEventListener('mouseout', () => { + cursor.style.width = `${options.size}px`; + cursor.style.height = `${options.size}px`; + cursorIcon.style.opacity = 0; + }) + }) + + } + } +} + +dynamicCursor(cursorSettings); + +$('.back').click(function(){ + $(this).parent().parent().removeClass('expand') +}) \ No newline at end of file diff --git a/3d-drag-out-menu-with-guitar/src/style.scss b/3d-drag-out-menu-with-guitar/src/style.scss new file mode 100644 index 0000000..3c2b6e7 --- /dev/null +++ b/3d-drag-out-menu-with-guitar/src/style.scss @@ -0,0 +1,330 @@ +$height: 489px; +$width: 245px; +$perspective: 900; + +$globalTransitionmTime: .5s; +$globalTransitionEasing: cubic-bezier(0.615, 0.000, 0.280, 1.005); + +@import url('https://fonts.googleapis.com/css?family=Heebo:400,500,800,900&display=swap'); + +:root { + --bg: #efdece; +} + +h4 { + color: white; + margin: 0; + padding-top: 20px; + text-align: center; +} + +canvas { + position: absolute; + z-index: 1; + opacity: 0.6; + pointer-events: none; +} + +.dynamicCursor { + max-width: 50px; + min-width: 18px; + transition: width 0s; + background: transparent !important; + border: 2px solid white !important; + +} + +@keyframes in { + from{opacity: 0;} + to{opacity: 1;} +} + +body { + padding: 0; + background: #a92913; + padding: 0; + margin: 0; + box-shadow: 50vw 0 #381313 inset; + height: 100vh; + font-family: 'Heebo', sans-serif; + + -webkit-user-select: none; /* Chrome all / Safari all */ + -moz-user-select: none; /* Firefox all */ + -ms-user-select: none; /* IE 10+ */ + user-select: none; /* Likely future */ + + %center { + position: absolute; + left: 0; + right: 0; + margin: auto; + top: 50%; + transform: translateY(-50%); + } + .guitar { + + width: 85px; + height: 175px; + z-index: 10; + position: absolute; + transition: all 0.7s 0.3s cubic-bezier(0.5, 0.005, 0.075, 0.985), transform 0.1s 0.7s, -webkit-transform 0.1s; + left: 92px; + transform: scale(1.8); + top: 130px; + background-size: 1920px !important; + background: url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/gt.png); + animation: guitar2 $globalTransitionmTime 0s steps(23, end) forwards; + + + @keyframes guitar { + 0% {background-position: 0 0;transform: scale(1.8)} + 10% { transform: scale(1.8);} + 100% {background-position: -1840px 0; transform: scale(1.8)} + } + + @keyframes guitar2 { + 0% {background-position: -1840px 0;transform: scale(1.8)} + 10% { transform: scale(1.8);} + 100% {background-position: 0 0; transform: scale(1.8)} + } + } + + .phone { + @extend %center; + opacity: 0; + animation: in 1s .5s forwards; + + width: $width; + height: $height; + perspective: $perspective; + border-radius: 24px; + overflow: hidden; + border-radius: 40px; + + box-shadow: 0 0 40px 10px rgba(0, 0, 0, 0.3); + + -webkit-box-reflect: below 4px linear-gradient(to top, rgba(255, 255, 255, 1) -120%, rgba(255,255,255,0) 25%); + + &.open { + .guitar { + animation: guitar $globalTransitionmTime 0s steps(23, end) forwards; + } + + & .phone_inner__nav { + left: 170px; + + h3 { + opacity: 0; + } + } + + & .phone_inner__cube { + transform: rotateY(90deg); + left: 50px; + + h2 { + opacity: 0; + transform: translateZ(50px); + } + } + } + + &_frame { + width: $width; + height: $height; + + position: absolute; + z-index: 2; + background: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/frameIphone.png'); + + pointer-events: none; + } + + &_inner { + width: $width - 20px; + height: $height - 14px; + + position: relative; + left: 10px; + top: 6px; + overflow: hidden; + transform-style: preserve-3D; + background: #ada59c; + + &__nav { + position: absolute; + z-index: 2; + text-transform: uppercase; + text-align: center; + width: 100%; + font-weight: 400; + transition: all $globalTransitionmTime $globalTransitionEasing; + top: 39px; + left: 0; + + h3 { + margin: 0; + font-size: 9px; + opacity: 1; + transition: all $globalTransitionmTime $globalTransitionEasing; + } + + & .menu { + width: 18px; + height: 2px; + background: #111114; + position: absolute; + left: 16px; + + &:after { + content: ''; + display: block; + position: relative; + top: 2px; + width: 18px; + height: 2px; + background: #111114; + } + + &:before { + content: ''; + display: block; + position: relative; + top: 9px; + width: 10px; + height: 2px; + background: #111114; + } + } + } + + &__cube { + transform-style: preserve-3D; + height: 100%; + position: relative; + left: 0; + transition: all $globalTransitionmTime + .009s $globalTransitionEasing; + + .shadow { + img { + position: absolute; + width: 210px; + top: 90px; + left: 20px; + } + } + + h1 { + text-transform: uppercase; + margin: 0; + transform-origin: 0 50%; + position: absolute; + line-height: 0; + left: 47px; + letter-spacing: 3px; + top: 92px; + color: #c6bdad; + font-size: 55px; + text-shadow: 0 0 1px #bdb5ad; + transform-style: preserve-3D; + + @for $i from 1 through 100 { + &:nth-of-type(#{$i}) { + transform: rotate(90deg) translateZ(($i / 24) - 1 + px); + } + } + } + + h2 { + font-size: 20px; + font-weight: 500; + position: absolute; + bottom: 14px; + line-height: 20px; + left: 24px; + width: 100px; + opacity: 1; + transform: translateZ(0); + transition: all $globalTransitionmTime $globalTransitionEasing; + } + + .logo { + position: absolute; + z-index: auto; + top: 64px; + left: 20px; + + img { + width: 50px; + image-rendering: pixelated; + mix-blend-mode: darken; + } + } + + ul { + padding: 0; + margin: 0 0 0 30px; + + li { + list-style-type: none; + text-transform: uppercase; + font-weight: 900; + margin: 0 0 4px 0; + color: #111008; + cursor: pointer; + transition: all .2s; + + &:hover { + color: #a23426; + } + + &.active { + color: #a23426; + } + } + + &.small { + font-size: 7px; + margin-top: 80px; + + li { + margin: 0 0 6px 0 + } + } + + &.big { + margin-top: 157px; + } + } + + %face { + width: 100%; + height: 100%; + transform-style: preserve-3D; + background: linear-gradient( + to right, + #f0ece5, + var(--bg) 6%, + var(--bg) + ), var(--bg); + position: absolute; + transform-style: preserve-3D; + } + + & .face { + &--left, + &--front { + @extend %face; + } + + &--left { + transform: rotateY(-90deg) translateX(-150px); + width: 150px; + transform-origin: 0 0; + z-index: -1; + } + } + } + } + } +} \ No newline at end of file diff --git a/3d-ish-hamburger-menu/README.markdown b/3d-ish-hamburger-menu/README.markdown new file mode 100644 index 0000000..2a86eb5 --- /dev/null +++ b/3d-ish-hamburger-menu/README.markdown @@ -0,0 +1,6 @@ +# 3D-ish Hamburger Menu + _A Pen created at CodePen.io. Original URL: [https://codepen.io/jkantner/pen/oVbgNV](https://codepen.io/jkantner/pen/oVbgNV). + + A hamburger menu that reveals its contents in a 3D-like way. Also designed to look like a real hamburger! + +Update 6/4/19: Sass refactored \ No newline at end of file diff --git a/3d-ish-hamburger-menu/dist/index.html b/3d-ish-hamburger-menu/dist/index.html new file mode 100644 index 0000000..ac3fdaf --- /dev/null +++ b/3d-ish-hamburger-menu/dist/index.html @@ -0,0 +1,25 @@ + + + + + 3D-ish Hamburger Menu + + + + + + + + + + \ No newline at end of file diff --git a/3d-ish-hamburger-menu/dist/style.css b/3d-ish-hamburger-menu/dist/style.css new file mode 100644 index 0000000..e4e31a1 --- /dev/null +++ b/3d-ish-hamburger-menu/dist/style.css @@ -0,0 +1,251 @@ +*, *:before, *:after { + border: 0; + box-sizing: border-box; + margin: 0; + padding: 0; +} + +body { + background: #ffffcc; + color: #171717; + font-size: 20px; + line-height: 1.5; +} + +nav { + font: 1em "ZCOOL QingKe HuangYou", sans-serif; + margin: 1.5em auto; + width: 5em; + height: 4.5em; + text-transform: uppercase; +} +nav input { + border-radius: 50%; + cursor: pointer; + display: block; + position: absolute; + -webkit-appearance: none; + appearance: none; + width: 100%; + height: 100%; + z-index: 9; +} +nav input:focus { + outline: transparent; +} +nav, nav ul { + position: relative; +} +nav li, nav span, nav a, nav label { + display: block; +} +nav li { + left: 50%; + text-align: center; + transform: translateX(-50%); + width: 5em; +} +nav li, nav li span { + position: absolute; + transition: all 0.7s ease-out; + transform-origin: 50% 0; +} +nav li:first-child, nav li:last-child { + width: 4.4em; +} +nav li:first-child span, nav li:last-child span { + line-height: 4.5; +} +nav li:first-child { + background: #ffd580; + border-radius: 0 0 0.45em 0.45em / 0 0 100% 100%; + box-shadow: 0.2em 0 0 #e69900 inset, -0.2em 0 0 #e69900 inset, 0 0 0 #e69900 inset, 0 -1.4em 0 #e69900 inset; + top: 3.6em; + height: 0.9em; + z-index: 0; +} +nav li:first-child label:before, nav li:first-child label:after { + background: #cc0000; + border-radius: 0.2em; + box-shadow: 0 -0.1em 0 maroon inset; + content: ""; + display: block; + position: absolute; + top: 50%; + left: 50%; + width: 3em; + height: 0.4em; +} +nav li:first-child label:before { + background-image: radial-gradient(0.2em 0.3em at 0.2em 0.2em, #ff9999 49%, rgba(255, 153, 153, 0) 50%); + transform: translate(-50%, -50%) rotate(45deg); +} +nav li:first-child label:after { + background-image: radial-gradient(0.2em 0.3em at 2.8em 0.2em, #ff9999 49%, rgba(255, 153, 153, 0) 50%); + transform: translate(-50%, -50%) rotate(-45deg); +} +nav li:nth-child(2) { + background: #6b2e2e; + background-image: repeating-linear-gradient(rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.3) 4%, rgba(0, 0, 0, 0) 5%, rgba(0, 0, 0, 0) 20%); + background-position: 0 -0.35em; + background-repeat: no-repeat; + background-size: 100% 100%; + border-radius: 0.35em; + box-shadow: 0.3em 0 0 #6b2e2e inset, -0.3em 0 0 #6b2e2e inset, 0 0 0 #6b2e2e inset, 0 -0.6em 0 #6b2e2e inset; + top: 2.9em; + width: 4.8em; + height: 0.7em; + z-index: 1; +} +nav li:nth-child(2) span { + line-height: 5; +} +nav li:nth-child(2) a { + color: white; +} +nav li:nth-child(3) { + background: #ffd500; + background-image: radial-gradient(10% 10% at 15% 15%, #ffea80 49%, rgba(255, 234, 128, 0) 50%); + border-radius: 0.1em; + top: 2.7em; + width: 4em; + height: 0.2em; + z-index: 2; +} +nav li:nth-child(3) span { + line-height: 4; +} +nav li:nth-child(3):before { + background: inherit; + border-radius: 0 0 100% 50% / 0 0 100% 0; + content: ""; + display: block; + position: absolute; + top: 100%; + right: 0; + width: 0.8em; + height: 0.8em; + transform: rotate(-45deg); + transform-origin: 0 0; + transition: transform 0.7s ease-out; +} +nav li:nth-child(4) { + background: #40bf40; + background-image: linear-gradient(45deg, rgba(102, 204, 102, 0) 24%, #66cc66 25%, #66cc66 27%, rgba(102, 204, 102, 0) 28%), linear-gradient(45deg, rgba(102, 204, 102, 0) 46%, #66cc66 47%, #66cc66 49%, rgba(102, 204, 102, 0) 50%), linear-gradient(45deg, rgba(102, 204, 102, 0) 74%, #66cc66 75%, #66cc66 77%, rgba(102, 204, 102, 0) 78%), linear-gradient(-45deg, rgba(102, 204, 102, 0) 46%, #66cc66 47%, #66cc66 52%, rgba(102, 204, 102, 0) 53%); + background-position: 0 0; + border-radius: 0.15em; + box-shadow: 0 0.4em 0 #40bf40 inset, -0.4em 0 0 #40bf40 inset; + top: 2.4em; + width: 4.5em; + height: 0.3em; + z-index: 3; +} +nav li:nth-child(4) span { + line-height: 4.5; +} +nav li:nth-child(5) { + background: #ed765e; + background-image: radial-gradient(20% 25% at 50% 30%, #e84f30 49%, rgba(232, 79, 48, 0) 50%), radial-gradient(20% 25% at 50% 70%, #e84f30 49%, rgba(232, 79, 48, 0) 50%), radial-gradient(25% 20% at 30% 50%, #e84f30 49%, rgba(232, 79, 48, 0) 50%), radial-gradient(25% 20% at 70% 50%, #e84f30 49%, rgba(232, 79, 48, 0) 50%); + background-position: 0 -0.4em; + border-radius: 0.2em; + box-shadow: 0.4em 0 0 #e84f30 inset, -0.4em 0 0 #e84f30 inset, 0 0 0 #e84f30 inset, 0 -0.8em 0 #e84f30 inset; + top: 2em; + width: 5em; + height: 0.4em; + z-index: 4; +} +nav li:nth-child(5) span { + line-height: 5; +} +nav li:last-child { + background: #e69900; + background-image: radial-gradient(0.5em 0.3em at 0.5em 0.2em, #ffdf80 0.15em, rgba(255, 223, 128, 0) 0.2em), radial-gradient(0.5em 0.3em at 0 0.7em, #ffdf80 0.15em, rgba(255, 223, 128, 0) 0.2em), radial-gradient(0.5em 0.3em at 1em 0.7em, #ffdf80 0.15em, rgba(255, 223, 128, 0) 0.2em); + background-position: 0 0; + background-size: 1em 1em; + border-radius: 2em 2em 0 0 / 100% 100% 0 0; + box-shadow: 0.4em 0 0 0 #e69900 inset, -0.4em 0 0 0 #e69900 inset; + height: 2em; + z-index: 5; +} +nav li span, nav li label, nav li a { + border-radius: inherit; + height: 100%; +} +nav li span { + margin: auto; + top: 0; + width: 100%; + transform: scaleY(0); + transform-origin: 50% 0; +} +nav li a { + color: currentColor; + text-decoration: none; +} +nav li a:before { + background: #cc0000; + background-image: radial-gradient(0.4em 0.2em at 3.3em 0.1em, #ff9999 49%, rgba(255, 153, 153, 0) 50%); + border-radius: 0.2em; + box-shadow: 0 -0.1em 0 maroon inset; + content: ""; + display: block; + position: absolute; + top: 62%; + left: 50%; + width: 3.5em; + height: 0.4em; + transform: translateX(-50%) scaleX(0); + transform-origin: 0 50%; + transition: transform 0.2s linear; +} +nav li a:hover:before { + transform: translateX(-50%) scaleX(1); +} +nav li .sr { + overflow: hidden; + width: 0; + height: 0; +} +nav input:checked + ul li:nth-child(1) { + border-radius: 50%; + box-shadow: 0.1em 0 0 #e69900 inset, -0.1em 0 0 #e69900 inset, 0 0.1em 0 #e69900 inset, 0 -0.1em 0 #e69900 inset; + height: 4.4em; + transform: translate(-50%, -3.5em); +} +nav input:checked + ul li:nth-child(2) { + background-position: 0 0; + border-radius: 50%; + box-shadow: 0.3em 0 0 #6b2e2e inset, -0.3em 0 0 #6b2e2e inset, 0 0.3em 0 #6b2e2e inset, 0 -0.3em 0 #6b2e2e inset; + height: 4.8em; + transform: translate(-50%, 1.6em); +} +nav input:checked + ul li:nth-child(3) { + border-radius: 0.2em; + height: 4em; + transform: translate(-50%, 6.6em); +} +nav input:checked + ul li:nth-child(3):before { + transform: rotate(-90deg); +} +nav input:checked + ul li:nth-child(4) { + border-radius: 1.5em 1em 1.2em 0.8em; + height: 4.5em; + transform: translate(-50%, 10.9em); +} +nav input:checked + ul li:nth-child(5) { + border-radius: 50%; + background-position: 0 0; + box-shadow: 0.4em 0 0 #e84f30 inset, -0.4em 0 0 #e84f30 inset, 0 0.4em 0 #e84f30 inset, 0 -0.4em 0 #e84f30 inset; + height: 5em; + transform: translate(-50%, 15.8em); +} +nav input:checked + ul li:nth-child(6) { + border-radius: 50%; + box-shadow: 0.1em 0 0 #e69900 inset, -0.1em 0 0 #e69900 inset, 0 0.1em 0 #e69900 inset, 0 -0.1em 0 #e69900 inset; + height: 4.4em; + background-position: 0 2.2em; + transform: translate(-50%, 22.8em); +} +nav input:checked + ul li span { + transform: scaleY(1); +} diff --git a/3d-ish-hamburger-menu/license.txt b/3d-ish-hamburger-menu/license.txt new file mode 100644 index 0000000..544b9ec --- /dev/null +++ b/3d-ish-hamburger-menu/license.txt @@ -0,0 +1,13 @@ + + + + diff --git a/3d-ish-hamburger-menu/src/index.html b/3d-ish-hamburger-menu/src/index.html new file mode 100644 index 0000000..51d4aa3 --- /dev/null +++ b/3d-ish-hamburger-menu/src/index.html @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/3d-ish-hamburger-menu/src/style.scss b/3d-ish-hamburger-menu/src/style.scss new file mode 100644 index 0000000..fd01ddd --- /dev/null +++ b/3d-ish-hamburger-menu/src/style.scss @@ -0,0 +1,328 @@ +*, *:before, *:after { + border: 0; + box-sizing: border-box; + margin: 0; + padding: 0; +} +body { + background: hsl(60,100%,90%); + color: hsl(0,0%,9%); + font-size: 20px; + line-height: 1.5; +} +nav { + $bun: hsl(40,100%,45%); + $bunInner: hsl(40,100%,75%); + $ketchup: hsl(0,100%,40%); + $ketchupT: hsla(0,100%,40%,0); + $ketchupLt: hsl(0,100%,80%); + $ketchupLtT: hsla(0,100%,80%,0); + $ketchupSh: hsl(0,100%,25%); + $burger: hsl(0,40%,30%); + $cheese: hsl(50,100%,50%); + $cheeseLt: hsl(50,100%,75%); + $cheeseLtT: hsla(50,100%,75%,0); + $lettuce: hsl(120,50%,50%); + $lettuceVein: hsl(120,50%,60%); + $lettuceVeinT: hsla(120,50%,60%,0); + $tomato: hsl(10,80%,55%); + $tomatoT: hsla(10,80%,55%,0); + $tomatoVein: hsl(10,80%,65%); + $tomatoVeinT: hsla(10,80%,65%,0); + $seed: hsl(45,100%,75%); + $seedT: hsla(45,100%,75%,0); + + $transDur: 0.7s; + $trans: $transDur ease-out; + + font: 1em "ZCOOL QingKe HuangYou", sans-serif; + margin: 1.5em auto; + width: 5em; + height: 4.5em; + text-transform: uppercase; + input { + border-radius: 50%; + cursor: pointer; + display: block; + position: absolute; + -webkit-appearance: none; + appearance: none; + width: 100%; + height: 100%; + z-index: 9; + &:focus { + outline: transparent; + } + } + &, ul { + position: relative; + } + li, span, a, label { + display: block; + } + li { + left: 50%; + text-align: center; + transform: translateX(-50%); + width: 5em; + &, span { + position: absolute; + transition: all $trans; + transform-origin: 50% 0; + } + &:first-child, &:last-child { + width: 4.4em; + span { + line-height: 4.5; + } + } + &:first-child { + background: $bunInner; + border-radius: 0 0 0.45em 0.45em / 0 0 100% 100%; + box-shadow: + 0.2em 0 0 $bun inset, + -0.2em 0 0 $bun inset, + 0 0 0 $bun inset, + 0 -1.4em 0 $bun inset; + top: 3.6em; + height: 0.9em; + z-index: 0; + label { + &:before, &:after { + background: $ketchup; + border-radius: 0.2em; + box-shadow: 0 -0.1em 0 $ketchupSh inset; + content: ""; + display: block; + position: absolute; + top: 50%; + left: 50%; + width: 3em; + height: 0.4em; + } + &:before { + background-image: + radial-gradient(0.2em 0.3em at 0.2em 0.2em,$ketchupLt 49%,$ketchupLtT 50%); + transform: translate(-50%,-50%) rotate(45deg); + } + &:after { + background-image: + radial-gradient(0.2em 0.3em at 2.8em 0.2em,$ketchupLt 49%,$ketchupLtT 50%); + transform: translate(-50%,-50%) rotate(-45deg); + } + } + } + &:nth-child(2) { + background: $burger; + background-image: + repeating-linear-gradient( + hsla(0,0%,0%,0.3), + hsla(0,0%,0%,0.3) 4%, + hsla(0,0,0%,0) 5%, + hsla(0,0,0%,0) 20% + ); + background-position: 0 -0.35em; + background-repeat: no-repeat; + background-size: 100% 100%; + border-radius: 0.35em; + box-shadow: + 0.3em 0 0 $burger inset, + -0.3em 0 0 $burger inset, + 0 0 0 $burger inset, + 0 -0.6em 0 $burger inset; + top: 2.9em; + width: 4.8em; + height: 0.7em; + z-index: 1; + span { + line-height: 5; + } + a { + color: hsl(0,0%,100%); + } + } + &:nth-child(3) { + background: $cheese; + background-image: radial-gradient(10% 10% at 15% 15%,$cheeseLt 49%,$cheeseLtT 50%); + border-radius: 0.1em; + top: 2.7em; + width: 4em; + height: 0.2em; + z-index: 2; + span { + line-height: 4; + } + &:before { + background: inherit; + border-radius: 0 0 100% 50% / 0 0 100% 0; + content: ""; + display: block; + position: absolute; + top: 100%; + right: 0; + width: 0.8em; + height: 0.8em; + transform: rotate(-45deg); + transform-origin: 0 0; + transition: transform $trans; + } + } + &:nth-child(4) { + background: $lettuce; + background-image: + linear-gradient(45deg,$lettuceVeinT 24%,$lettuceVein 25%,$lettuceVein 27%,$lettuceVeinT 28%), + linear-gradient(45deg,$lettuceVeinT 46%,$lettuceVein 47%,$lettuceVein 49%,$lettuceVeinT 50%), + linear-gradient(45deg,$lettuceVeinT 74%,$lettuceVein 75%,$lettuceVein 77%,$lettuceVeinT 78%), + linear-gradient(-45deg,$lettuceVeinT 46%,$lettuceVein 47%,$lettuceVein 52%,$lettuceVeinT 53%); + background-position: 0 0; + border-radius: 0.15em; + box-shadow: + 0 0.4em 0 $lettuce inset, + -0.4em 0 0 $lettuce inset; + top: 2.4em; + width: 4.5em; + height: 0.3em; + z-index: 3; + span { + line-height: 4.5; + } + } + &:nth-child(5) { + background: $tomatoVein; + background-image: + radial-gradient(20% 25% at 50% 30%,$tomato 49%,$tomatoT 50%), + radial-gradient(20% 25% at 50% 70%,$tomato 49%,$tomatoT 50%), + radial-gradient(25% 20% at 30% 50%,$tomato 49%,$tomatoT 50%), + radial-gradient(25% 20% at 70% 50%,$tomato 49%,$tomatoT 50%); + background-position: 0 -0.4em; + border-radius: 0.2em; + box-shadow: + 0.4em 0 0 $tomato inset, + -0.4em 0 0 $tomato inset, + 0 0 0 $tomato inset, + 0 -0.8em 0 $tomato inset; + top: 2em; + width: 5em; + height: 0.4em; + z-index: 4; + span { + line-height: 5; + } + } + &:last-child { + background: $bun; + background-image: + radial-gradient(0.5em 0.3em at 0.5em 0.2em,$seed 0.15em,$seedT 0.2em), + radial-gradient(0.5em 0.3em at 0 0.7em,$seed 0.15em,$seedT 0.2em), + radial-gradient(0.5em 0.3em at 1em 0.7em,$seed 0.15em,$seedT 0.2em); + background-position: 0 0; + background-size: 1em 1em; + border-radius: 2em 2em 0 0 / 100% 100% 0 0; + box-shadow: 0.4em 0 0 0 $bun inset, -0.4em 0 0 0 $bun inset; + height: 2em; + z-index: 5; + } + span, label, a { + border-radius: inherit; + height: 100%; + } + span { + margin: auto; + top: 0; + width: 100%; + transform: scaleY(0); + transform-origin: 50% 0; + } + a { + color: currentColor; + text-decoration: none; + &:before { + background: $ketchup; + background-image: + radial-gradient(0.4em 0.2em at 3.3em 0.1em,$ketchupLt 49%,$ketchupLtT 50%); + border-radius: 0.2em; + box-shadow: 0 -0.1em 0 $ketchupSh inset; + content: ""; + display: block; + position: absolute; + top: 62%; + left: 50%; + width: 3.5em; + height: 0.4em; + transform: translateX(-50%) scaleX(0); + transform-origin: 0 50%; + transition: transform 0.2s linear; + } + &:hover:before { + transform: translateX(-50%) scaleX(1); + } + } + .sr { + overflow: hidden; + width: 0; + height: 0; + } + } + input:checked + ul li { + $items: 6; + $hoverTransX: -60%; + @for $i from 1 through $items { + &:nth-child(#{$i}) { + @if $i == 1 or $i == 6 { + border-radius: 50%; + box-shadow: + 0.1em 0 0 $bun inset, + -0.1em 0 0 $bun inset, + 0 0.1em 0 $bun inset, + 0 -0.1em 0 $bun inset; + height: 4.4em; + @if $i == 1 { + transform: translate(-50%,-3.5em); + } + @else { + background-position: 0 2.2em; + transform: translate(-50%,22.8em); + } + } + @elseif $i == 2 { + background-position: 0 0; + border-radius: 50%; + box-shadow: + 0.3em 0 0 $burger inset, + -0.3em 0 0 $burger inset, + 0 0.3em 0 $burger inset, + 0 -0.3em 0 $burger inset; + height: 4.8em; + transform: translate(-50%,1.6em); + } + @elseif $i == 3 { + border-radius: 0.2em; + height: 4em; + transform: translate(-50%,6.6em); + &:before { + transform: rotate(-90deg); + } + } + @elseif $i == 4 { + border-radius: 1.5em 1em 1.2em 0.8em; + height: 4.5em; + transform: translate(-50%,10.9em); + } + @else { + border-radius: 50%; + background-position: 0 0; + box-shadow: + 0.4em 0 0 $tomato inset, + -0.4em 0 0 $tomato inset, + 0 0.4em 0 $tomato inset, + 0 -0.4em 0 $tomato inset; + height: 5em; + transform: translate(-50%,15.8em); + } + } + } + span { + transform: scaleY(1); + } + } +} \ No newline at end of file diff --git a/3d-polaroid-world/README.markdown b/3d-polaroid-world/README.markdown new file mode 100644 index 0000000..37dbbde --- /dev/null +++ b/3d-polaroid-world/README.markdown @@ -0,0 +1,20 @@ +# 3D Polaroid World + +A Pen created on CodePen.io. Original URL: [https://codepen.io/ilithya/pen/PoZmOzy](https://codepen.io/ilithya/pen/PoZmOzy). + +I created a small interactive virtual gallery with ThreeJS for my #anydayshaders on-going experiments. + +I was inspired by a real 3D polaroid exhibition I saw in my city, and by the virtual gallery from CODAME where some of my shaders are being displayed: https://newart.city/show/frag + +- Move around the space in all directions by dragging your cursor or dragging with a finger on touch devices. +- Zoom in/out with mouse wheel or a two fingers gesture in trackpad and touch devices. +- Press the play/stop button to toggle all animations. +- Press buttons to change the world's mood: multicolored vs. monochrome black and white <3. + +For now you can enjoy some music by Deftones while you browse the gallery via the SoundCloud Widget API โ€” it was recently 20 years of their White Pony album on June 20, 2020: https://www.deftones.com/ + +Maybe one day I'll get to showcase my code art in a real gallery with an installation of this form ๐Ÿฅณ + +Follow my shader experiments here: https://github.com/ilithya/anydayshaders + +Enjoy! :) diff --git a/3d-polaroid-world/dist/index.html b/3d-polaroid-world/dist/index.html new file mode 100644 index 0000000..7ff401e --- /dev/null +++ b/3d-polaroid-world/dist/index.html @@ -0,0 +1,170 @@ + + + + + CodePen - 3D Polaroid World + + + + + + + + +
+ +
+ +
+ +
+ + +
+ +

by ilithya.rocks

+ + + + + + + + + + + + + + + + diff --git a/3d-polaroid-world/dist/script.js b/3d-polaroid-world/dist/script.js new file mode 100644 index 0000000..19d68c4 --- /dev/null +++ b/3d-polaroid-world/dist/script.js @@ -0,0 +1,342 @@ +/* + * 3D POLAROID WORLD + * Small virtual gallery for my GLSL #anydayshaders on-going experiments. + * + * - Move around the space in all directions by dragging your cursor or dragging with a finger on touch devices. + * - Zoom in/out with mouse wheel or a two fingers gesture in trackpad and touch devices. + * - Press the play/stop button to toggle all animations. + * - Press buttons to change the world's mood: multicolored vs. monochrome black and white <3. + * + * Follow my shader experiments here: + * https://github.com/ilithya/anydayshaders + * https://twitter.com/hashtag/anydayshaders + * https://www.instagram.com/explore/tags/anydayshaders/ + * + * For now you can enjoy some music by Deftones while you browse the gallery via the SoundCloud Widget API at the top of your screen โ€” it was recently 20 years of their White Pony album on June 20, 2020: + * https://www.youtube.com/watch?v=XLOKz155aXg + * https://www.deftones.com/ + * + * Maybe one day I'll get to showcase my code art in a real gallery with an installation of this form. :D + * + * #055 - #100DaysOfCode + * By ilithya | 2020 + * https://www.ilithya.rocks/ + * https://twitter.com/ilithya_net + */ + +// GLOBAL POLAROID FILM +const nearDist = 1; +const farDist = 1400; +const camera = new THREE.PerspectiveCamera( +45, +window.innerWidth / window.innerHeight, +nearDist, +farDist); + +const scene = new THREE.Scene(); +const renderer = new THREE.WebGLRenderer({ antialias: true }); +const canvasWrapper = document.querySelector("#canvas-wrapper"); +const clock = new THREE.Clock(); +const tau = 2 * Math.PI; +let controls; + +const init = () => { + camera.position.set(0, 0, 150); + + renderer.setClearColor("hotpink"); + renderer.setPixelRatio(window.devicePixelRatio); + renderer.setSize(window.innerWidth, window.innerHeight); + + canvasWrapper.appendChild(renderer.domElement); +}; +init(); + +const updateObjMatrix = object => { + object.updateMatrix(); + object.matrixAutoUpdate = false; +}; + +// INSTANT FILM +const iWidth = 170; +const iHeight = iWidth * 1.2; +const iDepth = iWidth / 5; +const filmGeometry = new THREE.BoxBufferGeometry( +iWidth, +iHeight, +iDepth); + +const emissiveLight = "#f9e6de"; // creamy +const materialOptions = { + emissive: emissiveLight, + shininess: 80 }; + +const filmMaterial = new THREE.MeshPhongMaterial(materialOptions); + +// Add light for MeshPhongMaterial to be visible in scene +const spotLight = new THREE.SpotLight('#fffffd', 0.3); +spotLight.position.set(100, 400, 100); +scene.add(spotLight); + +// INSTANT FILM PRINTS +const pWidth = iWidth / 1.2; +const printGeometry = new THREE.PlaneBufferGeometry( +pWidth, +pWidth, +1); + +const printMaterial = new THREE.MeshBasicMaterial({ color: "#000" }); + +const Film = function (group) { + this.group = group; +}; + +let printMesh; +Film.prototype.create = function () { + const iFilm = new THREE.Mesh(filmGeometry, filmMaterial); + printMesh = new THREE.Mesh(printGeometry, printMaterial); + + printMesh.position.y = pWidth / 10; + printMesh.position.z = iDepth - 15; + + updateObjMatrix(printMesh); + + this.group.add(iFilm); + this.group.add(printMesh); +}; + +const addPrintMeshMaterial = (gp, newMat) => gp.children[1].material = newMat; + +const vertexShader = document.querySelector("#vertex").textContent; +const fragPixelShader = document.querySelector("#frag-pixel").textContent; +const fragLinesShader = document.querySelector("#frag-lines").textContent; +const fragHalftoneShader = document.querySelector("#frag-halftone").textContent; +const fragMixshapedShader = document.querySelector("#frag-mixshaped").textContent; + +const instantGroup = new THREE.Group(); + +const uniformMulti = { type: "v2", value: new THREE.Vector2(0.52, 0.75) }; +const uniformMono = { type: "v2", value: new THREE.Vector2(1.0, 1.0) }; +const uniforms = { + u_gb: uniformMulti, + u_resolution: { type: "v2", value: new THREE.Vector2(1.0, 1.0) }, + u_time: { type: "f", value: 1.0 } }; + +const setShaderMaterial = fragShader => new THREE.ShaderMaterial({ + uniforms, + fragmentShader: fragShader, + vertexShader }); + + +const pixelPolaroid = setShaderMaterial(fragPixelShader); +const linesPolaroid = setShaderMaterial(fragLinesShader); +const halftonePolaroid = setShaderMaterial(fragHalftoneShader); +const mixshapedPolaroid = setShaderMaterial(fragMixshapedShader); + +const filmGroup_01 = new THREE.Group(); +const film_01 = new Film(filmGroup_01); +film_01.create(); +addPrintMeshMaterial(filmGroup_01, pixelPolaroid); +instantGroup.add(filmGroup_01); + +const filmGroup_02 = new THREE.Group(); +const film_02 = new Film(filmGroup_02); +filmGroup_02.position.z = iWidth * 1.5; +filmGroup_02.position.x = iWidth * 1.5; +filmGroup_02.rotation.y = tau / -4; +updateObjMatrix(filmGroup_02); +film_02.create(); +addPrintMeshMaterial(filmGroup_02, linesPolaroid); +instantGroup.add(filmGroup_02); + +const filmGroup_03 = new THREE.Group(); +const film_03 = new Film(filmGroup_03); +filmGroup_03.position.z = iWidth * 1.5; +filmGroup_03.position.x = iWidth * -1.5; +filmGroup_03.rotation.y = tau / 4; +updateObjMatrix(filmGroup_03); +film_03.create(); +addPrintMeshMaterial(filmGroup_03, halftonePolaroid); +instantGroup.add(filmGroup_03); + +const filmGroup_04 = new THREE.Group(); +const film_04 = new Film(filmGroup_04); +filmGroup_04.position.z = iWidth * 3; +filmGroup_04.rotation.y = tau / 2; +updateObjMatrix(filmGroup_04); +film_04.create(); +addPrintMeshMaterial(filmGroup_04, mixshapedPolaroid); +instantGroup.add(filmGroup_04); + +instantGroup.position.z = iWidth * -1.5; +scene.add(instantGroup); + +// 3D CONFETTI +const confettinstantGroup = new THREE.Group(); +const radius = 3.5; +const triangleGeom = new THREE.TetrahedronBufferGeometry(radius); +const triangleMat = new THREE.MeshNormalMaterial(); + +function getRandomArbitrary(min, max) { + return Math.random() * (max - min) + min; +} + +const randomizeMatrix = matrix => { + const position = new THREE.Vector3(); + const rotation = new THREE.Euler(); + const quaternion = new THREE.Quaternion(); + const scale = new THREE.Vector3(); + + const d = nearDist * 340; + const d2 = d * 2; + + position.x = Math.random() * d2 - d; + position.y = Math.random() * d2 - d; + position.z = Math.random() * d2 - d; + + rotation.x = Math.random() * tau; + rotation.y = Math.random() * tau; + rotation.z = Math.random() * tau; + + quaternion.setFromEuler(rotation); + + scale.x = scale.y = scale.z = getRandomArbitrary(0.7, 1); + + matrix.compose(position, quaternion, scale); +}; + +const matrix = new THREE.Matrix4(); +const count = Math.round(Math.max(window.innerWidth, window.innerHeight) / 8); +const deco = new THREE.InstancedMesh(triangleGeom, triangleMat, count); + +for (let i = 0; i < count; i++) { + randomizeMatrix(matrix); + deco.setMatrixAt(i, matrix); +} + +confettinstantGroup.add(deco); +scene.add(confettinstantGroup); + +// WORLD COLOR & ANIMATION TOGGLE +let IS_ANIMATED = true; +const toggle = { + btnAnim: document.querySelector("#toggle-anim button"), + btnColor: document.querySelectorAll("#toggle-color button"), + updateMaterial(mode) { + const toggleMaterial = + mode === "monochrome" ? uniformMono : uniformMulti; + + printMesh.material.uniforms.u_gb = toggleMaterial; + printMesh.material.uniformsNeedUpdate = true; + }, + checkActiveBtnColor() { + this.btnColor.forEach(el => { + el.addEventListener("click", e => { + e.preventDefault(); + + const target = e.currentTarget; + + this.btnColor.forEach(l => delete l.dataset.active); + target.dataset.active = true; + + this.updateMaterial(target.dataset.mode); + }); + }); + }, + checkActiveBtnAnim() { + this.btnAnim.addEventListener("click", e => { + e.preventDefault(); + + const target = e.currentTarget; + const txtPlay = `play`; + const txtPause = `pause`; + const iconPlay = `โ–บ`; + const iconPause = `||`; + + function setBtnData(btn, icon) { + target.dataset.action = btn; + target.title = btn; + target.textContent = icon; + } + + if (target.dataset.action === 'pause') { + setBtnData(txtPlay, iconPlay); + IS_ANIMATED = false; + } else { + setBtnData(txtPause, iconPause); + IS_ANIMATED = true; + } + }); + } }; + +toggle.checkActiveBtnColor(); +toggle.checkActiveBtnAnim(); + +// SCREEN RESIZE +const onWindowResize = () => { + const w = window.innerWidth; + const h = window.innerHeight; + + camera.aspect = w / h; + camera.updateProjectionMatrix(); + + renderer.setSize(w, h); + + uniforms.u_resolution.value.x = renderer.domElement.width; + uniforms.u_resolution.value.y = renderer.domElement.height; +}; +window.addEventListener("resize", onWindowResize); + +// CONSTROLS INTERACTION +const createControls = () => { + // Make sure to run controls outside render function + controls = new THREE.OrbitControls(camera, renderer.domElement); + + // If controls autoRotate true update controls + controls.autoRotateSpeed = 3.0; + controls.enableDamping = true; + controls.dampingFactor = 0.15; + controls.enableZoom = true; + controls.minDistance = 0; + controls.maxDistance = 750; + controls.keyPanSpeed = 30; + controls.update(); +}; +createControls(); + +// CREATE ANIMATIONS +const createAnimShaders = () => { + if (IS_ANIMATED) { + uniforms.u_time.value = clock.getElapsedTime(); + } +}; + +const pos = 550; +confettinstantGroup.position.y = pos; + +const createAnimConfetti = () => { + if (IS_ANIMATED) { + const time = 0.5; + let speed = time + Math.random() * time; + confettinstantGroup.position.y -= speed; + + if (confettinstantGroup.position.y < -pos) { + confettinstantGroup.rotation.x = tau; + confettinstantGroup.position.y = pos; + speed = 0; + } + } +}; + +// RENDER 3D WORLD +const render = () => { + createAnimShaders(); + createAnimConfetti(); + + controls.autoRotate = IS_ANIMATED ? true : false; + controls.update(); + + renderer.render(scene, camera); + + requestAnimationFrame(render); +}; +render(); \ No newline at end of file diff --git a/3d-polaroid-world/dist/style.css b/3d-polaroid-world/dist/style.css new file mode 100644 index 0000000..d1bd654 --- /dev/null +++ b/3d-polaroid-world/dist/style.css @@ -0,0 +1,94 @@ +* { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.p-text { + color: #fffffd; + font-family: Helvetica, Arial, sans-serif; + font-size: 0.55rem; + letter-spacing: 2px; + line-height: 1.5; + text-align: center; + text-transform: lowercase; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +.p-flex-hzt-center { + display: -webkit-box; + display: flex; + -webkit-box-pack: center; + justify-content: center; +} + +body { + height: 100vh; + background-color: hotpink; + margin: 0; + padding: 0; + overflow: hidden; + position: relative; +} + +canvas { + cursor: -webkit-grab; + cursor: grab; +} + +iframe { + width: calc(100% + 112px); + height: 58px; + position: absolute; + top: -6px; + left: -110px; +} + +.toggle { + width: 100%; + position: absolute; + bottom: 36px; + left: 0; + z-index: 90; +} +.toggle--anim { + bottom: 70px; +} +.toggle__btn { + background-color: hotpink; + border: 1px solid #fffffd; + cursor: pointer; + outline: none; + padding: 5px 11px 5px 13px; + -webkit-transition: background-color 0.2s ease-in-out; + transition: background-color 0.2s ease-in-out; +} +.toggle__btn--anim { + border-color: hotpink; + font-size: 0.8rem; + padding: 2px 6px 2px 12px; +} +.toggle__btn--anim[data-action="pause"] { + padding-right: 9px; +} +.toggle__btn:not(.toggle__btn--anim):last-child { + border-left: 0; +} +.toggle__btn[data-active], .toggle__btn[data-action] { + background-color: #fffffd; + color: hotpink; + font-weight: bold; +} + +.credit { + width: 100%; + position: absolute; + bottom: 5px; + left: 0; +} +.credit__link { + color: rgba(255, 255, 253, 0.6); + padding: 6px 15px 8px; + text-decoration: none; +} \ No newline at end of file diff --git a/3d-polaroid-world/license.txt b/3d-polaroid-world/license.txt new file mode 100644 index 0000000..e298d60 --- /dev/null +++ b/3d-polaroid-world/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by ilithya (https://codepen.io/ilithya/pen/PoZmOzy) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/3d-polaroid-world/src/index.html b/3d-polaroid-world/src/index.html new file mode 100644 index 0000000..587e696 --- /dev/null +++ b/3d-polaroid-world/src/index.html @@ -0,0 +1,154 @@ + + + +
+ +
+ +
+ +
+ + +
+ +

by ilithya.rocks

+ + + + + + + + + + \ No newline at end of file diff --git a/3d-polaroid-world/src/script.babel b/3d-polaroid-world/src/script.babel new file mode 100644 index 0000000..1aae2a7 --- /dev/null +++ b/3d-polaroid-world/src/script.babel @@ -0,0 +1,342 @@ +/* + * 3D POLAROID WORLD + * Small virtual gallery for my GLSL #anydayshaders on-going experiments. + * + * - Move around the space in all directions by dragging your cursor or dragging with a finger on touch devices. + * - Zoom in/out with mouse wheel or a two fingers gesture in trackpad and touch devices. + * - Press the play/stop button to toggle all animations. + * - Press buttons to change the world's mood: multicolored vs. monochrome black and white <3. + * + * Follow my shader experiments here: + * https://github.com/ilithya/anydayshaders + * https://twitter.com/hashtag/anydayshaders + * https://www.instagram.com/explore/tags/anydayshaders/ + * + * For now you can enjoy some music by Deftones while you browse the gallery via the SoundCloud Widget API at the top of your screen โ€” it was recently 20 years of their White Pony album on June 20, 2020: + * https://www.youtube.com/watch?v=XLOKz155aXg + * https://www.deftones.com/ + * + * Maybe one day I'll get to showcase my code art in a real gallery with an installation of this form. :D + * + * #055 - #100DaysOfCode + * By ilithya | 2020 + * https://www.ilithya.rocks/ + * https://twitter.com/ilithya_net + */ + +// GLOBAL POLAROID FILM +const nearDist = 1; +const farDist = 1400; +const camera = new THREE.PerspectiveCamera( + 45, + window.innerWidth / window.innerHeight, + nearDist, + farDist +); +const scene = new THREE.Scene(); +const renderer = new THREE.WebGLRenderer({ antialias: true }); +const canvasWrapper = document.querySelector("#canvas-wrapper"); +const clock = new THREE.Clock(); +const tau = 2*Math.PI; +let controls; + +const init = () => { + camera.position.set(0, 0, 150); + + renderer.setClearColor("hotpink"); + renderer.setPixelRatio(window.devicePixelRatio); + renderer.setSize(window.innerWidth, window.innerHeight); + + canvasWrapper.appendChild(renderer.domElement); +}; +init(); + +const updateObjMatrix = (object) => { + object.updateMatrix(); + object.matrixAutoUpdate = false; +}; + +// INSTANT FILM +const iWidth = 170; +const iHeight = iWidth * 1.2; +const iDepth = iWidth / 5; +const filmGeometry = new THREE.BoxBufferGeometry( + iWidth, + iHeight, + iDepth +); +const emissiveLight = "#f9e6de"; // creamy +const materialOptions = { + emissive: emissiveLight, + shininess: 80 +}; +const filmMaterial = new THREE.MeshPhongMaterial(materialOptions); + +// Add light for MeshPhongMaterial to be visible in scene +const spotLight = new THREE.SpotLight('#fffffd', 0.3); +spotLight.position.set(100, 400, 100); +scene.add(spotLight); + +// INSTANT FILM PRINTS +const pWidth = iWidth/1.2; +const printGeometry = new THREE.PlaneBufferGeometry( + pWidth, + pWidth, + 1 +); +const printMaterial = new THREE.MeshBasicMaterial({ color: "#000" }); + +const Film = function (group) { + this.group = group; +}; + +let printMesh; +Film.prototype.create = function () { + const iFilm = new THREE.Mesh(filmGeometry, filmMaterial); + printMesh = new THREE.Mesh(printGeometry, printMaterial); + + printMesh.position.y = pWidth/10; + printMesh.position.z = iDepth - 15; + + updateObjMatrix(printMesh); + + this.group.add(iFilm); + this.group.add(printMesh); +}; + +const addPrintMeshMaterial = (gp, newMat) => gp.children[1].material = newMat; + +const vertexShader = document.querySelector("#vertex").textContent; +const fragPixelShader = document.querySelector("#frag-pixel").textContent; +const fragLinesShader = document.querySelector("#frag-lines").textContent; +const fragHalftoneShader = document.querySelector("#frag-halftone").textContent; +const fragMixshapedShader = document.querySelector("#frag-mixshaped").textContent; + +const instantGroup = new THREE.Group(); + +const uniformMulti = { type: "v2", value: new THREE.Vector2(0.52, 0.75) }; +const uniformMono = { type: "v2", value: new THREE.Vector2(1.0, 1.0) }; +const uniforms = { + u_gb: uniformMulti, + u_resolution: { type: "v2", value: new THREE.Vector2(1.0, 1.0) }, + u_time: { type: "f", value: 1.0 }, +}; +const setShaderMaterial = (fragShader) => new THREE.ShaderMaterial({ + uniforms, + fragmentShader: fragShader, + vertexShader, +}); + +const pixelPolaroid = setShaderMaterial(fragPixelShader); +const linesPolaroid = setShaderMaterial(fragLinesShader); +const halftonePolaroid = setShaderMaterial(fragHalftoneShader); +const mixshapedPolaroid = setShaderMaterial(fragMixshapedShader); + +const filmGroup_01 = new THREE.Group(); +const film_01 = new Film(filmGroup_01); +film_01.create(); +addPrintMeshMaterial(filmGroup_01, pixelPolaroid); +instantGroup.add(filmGroup_01); + +const filmGroup_02 = new THREE.Group(); +const film_02 = new Film(filmGroup_02); +filmGroup_02.position.z = iWidth*1.5; +filmGroup_02.position.x = iWidth*1.5; +filmGroup_02.rotation.y = tau/-4; +updateObjMatrix(filmGroup_02); +film_02.create(); +addPrintMeshMaterial(filmGroup_02, linesPolaroid); +instantGroup.add(filmGroup_02); + +const filmGroup_03 = new THREE.Group(); +const film_03 = new Film(filmGroup_03); +filmGroup_03.position.z = iWidth*1.5; +filmGroup_03.position.x = iWidth*-1.5; +filmGroup_03.rotation.y = tau/4; +updateObjMatrix(filmGroup_03); +film_03.create(); +addPrintMeshMaterial(filmGroup_03, halftonePolaroid); +instantGroup.add(filmGroup_03); + +const filmGroup_04 = new THREE.Group(); +const film_04 = new Film(filmGroup_04); +filmGroup_04.position.z = iWidth*3; +filmGroup_04.rotation.y = tau/2; +updateObjMatrix(filmGroup_04); +film_04.create(); +addPrintMeshMaterial(filmGroup_04, mixshapedPolaroid); +instantGroup.add(filmGroup_04); + +instantGroup.position.z = iWidth*-1.5; +scene.add(instantGroup); + +// 3D CONFETTI +const confettinstantGroup = new THREE.Group(); +const radius = 3.5; +const triangleGeom = new THREE.TetrahedronBufferGeometry(radius); +const triangleMat = new THREE.MeshNormalMaterial(); + +function getRandomArbitrary(min, max) { + return Math.random() * (max - min) + min; +} + +const randomizeMatrix = (matrix) => { + const position = new THREE.Vector3(); + const rotation = new THREE.Euler(); + const quaternion = new THREE.Quaternion(); + const scale = new THREE.Vector3(); + + const d = nearDist * 340; + const d2 = d * 2; + + position.x = Math.random() * d2 - d; + position.y = Math.random() * d2 - d; + position.z = Math.random() * d2 - d; + + rotation.x = Math.random() * tau; + rotation.y = Math.random() * tau; + rotation.z = Math.random() * tau; + + quaternion.setFromEuler(rotation); + + scale.x = scale.y = scale.z = getRandomArbitrary(0.7, 1); + + matrix.compose(position, quaternion, scale); +}; + +const matrix = new THREE.Matrix4(); +const count = Math.round(Math.max(window.innerWidth, window.innerHeight) / 8); +const deco = new THREE.InstancedMesh(triangleGeom, triangleMat, count); + +for (let i = 0; i < count; i++) { + randomizeMatrix(matrix); + deco.setMatrixAt(i, matrix); +} + +confettinstantGroup.add(deco); +scene.add(confettinstantGroup); + +// WORLD COLOR & ANIMATION TOGGLE +let IS_ANIMATED = true; +const toggle = { + btnAnim: document.querySelector("#toggle-anim button"), + btnColor: document.querySelectorAll("#toggle-color button"), + updateMaterial(mode) { + const toggleMaterial = + mode === "monochrome" ? uniformMono : uniformMulti; + + printMesh.material.uniforms.u_gb = toggleMaterial; + printMesh.material.uniformsNeedUpdate = true; + }, + checkActiveBtnColor() { + this.btnColor.forEach((el) => { + el.addEventListener("click", (e) => { + e.preventDefault(); + + const target = e.currentTarget; + + this.btnColor.forEach((l) => delete l.dataset.active); + target.dataset.active = true; + + this.updateMaterial(target.dataset.mode); + }); + }); + }, + checkActiveBtnAnim() { + this.btnAnim.addEventListener("click", (e) => { + e.preventDefault(); + + const target = e.currentTarget; + const txtPlay = `play`; + const txtPause = `pause`; + const iconPlay = `โ–บ`; + const iconPause = `||`; + + function setBtnData(btn, icon) { + target.dataset.action = btn; + target.title = btn; + target.textContent = icon; + } + + if (target.dataset.action === 'pause') { + setBtnData(txtPlay, iconPlay); + IS_ANIMATED = false; + } else { + setBtnData(txtPause, iconPause); + IS_ANIMATED = true; + } + }); + } +}; +toggle.checkActiveBtnColor(); +toggle.checkActiveBtnAnim(); + +// SCREEN RESIZE +const onWindowResize = () => { + const w = window.innerWidth; + const h = window.innerHeight; + + camera.aspect = w / h; + camera.updateProjectionMatrix(); + + renderer.setSize(w, h); + + uniforms.u_resolution.value.x = renderer.domElement.width; + uniforms.u_resolution.value.y = renderer.domElement.height; +}; +window.addEventListener("resize", onWindowResize); + +// CONSTROLS INTERACTION +const createControls = () => { + // Make sure to run controls outside render function + controls = new THREE.OrbitControls(camera, renderer.domElement); + + // If controls autoRotate true update controls + controls.autoRotateSpeed = 3.0; + controls.enableDamping = true; + controls.dampingFactor = 0.15; + controls.enableZoom = true; + controls.minDistance = 0; + controls.maxDistance = 750; + controls.keyPanSpeed = 30; + controls.update(); +}; +createControls(); + +// CREATE ANIMATIONS +const createAnimShaders = () => { + if (IS_ANIMATED) { + uniforms.u_time.value = clock.getElapsedTime(); + } +}; + +const pos = 550; +confettinstantGroup.position.y = pos; + +const createAnimConfetti = () => { + if (IS_ANIMATED) { + const time = 0.5; + let speed = time + Math.random() * time; + confettinstantGroup.position.y -= speed; + + if (confettinstantGroup.position.y < -pos) { + confettinstantGroup.rotation.x = tau; + confettinstantGroup.position.y = pos; + speed = 0; + } + } +}; + +// RENDER 3D WORLD +const render = () => { + createAnimShaders(); + createAnimConfetti(); + + controls.autoRotate = IS_ANIMATED ? true : false; + controls.update(); + + renderer.render(scene, camera); + + requestAnimationFrame(render); +}; +render(); \ No newline at end of file diff --git a/3d-polaroid-world/src/style.scss b/3d-polaroid-world/src/style.scss new file mode 100644 index 0000000..b5202de --- /dev/null +++ b/3d-polaroid-world/src/style.scss @@ -0,0 +1,103 @@ +$c1: hotpink; +$c2: #fffffd; // white + +* { + user-select: none; +} + +.p-text { + color: $c2; + font-family: Helvetica, Arial, sans-serif; + font-size: 0.55rem; + letter-spacing: 2px; + line-height: 1.5; + text-align: center; + text-transform: lowercase; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} + +.p-flex-hzt-center { + display: flex; + justify-content: center; +} + +body { + height: 100vh; + background-color: $c1; + margin: 0; + padding: 0; + overflow: hidden; + position: relative; +} + +canvas { + cursor: grab; +} + +iframe { + width: calc(100% + 112px); + height: 58px; + position: absolute; + top: -6px; + left: -110px; +} + +.toggle { + width: 100%; + position: absolute; + bottom: 36px; + left: 0; + z-index: 90; + + &--anim { + bottom: 70px; + } + + &__btn { + $gap: 5px; + $gap_anim: 2px; + + background-color: $c1; + border: 1px solid $c2; + cursor: pointer; + outline: none; + padding: $gap round($gap * 2.2) $gap round($gap * 2.5); + transition: background-color 0.2s ease-in-out; + + &--anim { + border-color: $c1; + font-size: 0.8rem; + padding: $gap_anim round($gap_anim * 3) $gap_anim round($gap_anim * 5.8); + + &[data-action="pause"] { + padding-right: round($gap_anim * 4.3); + } + } + + &:not(.toggle__btn--anim) { + &:last-child { + border-left: 0; + } + } + + &[data-active], + &[data-action] { + background-color: $c2; + color: $c1; + font-weight: bold; + } + } +} + +.credit { + width: 100%; + position: absolute; + bottom: 5px; + left: 0; + + &__link { + color: rgba($c2, 0.6); + padding: 6px 15px 8px; + text-decoration: none; + } +} \ No newline at end of file diff --git a/3d-spaceshipgsap/README.markdown b/3d-spaceshipgsap/README.markdown new file mode 100644 index 0000000..35a05f8 --- /dev/null +++ b/3d-spaceshipgsap/README.markdown @@ -0,0 +1,5 @@ +# 3D SpaceShip - GSAP + +A Pen created on CodePen.io. Original URL: [https://codepen.io/ricardoolivaalonso/pen/poWbBdK](https://codepen.io/ricardoolivaalonso/pen/poWbBdK). + + diff --git a/3d-spaceshipgsap/dist/index.html b/3d-spaceshipgsap/dist/index.html new file mode 100644 index 0000000..4bc9741 --- /dev/null +++ b/3d-spaceshipgsap/dist/index.html @@ -0,0 +1,363 @@ + + + + + CodePen - 3D SpaceShip - GSAP + + + + + + + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
โ— โ€ฟโ— 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + diff --git a/3d-spaceshipgsap/dist/script.js b/3d-spaceshipgsap/dist/script.js new file mode 100644 index 0000000..5f1d5bd --- /dev/null +++ b/3d-spaceshipgsap/dist/script.js @@ -0,0 +1,124 @@ +/* + Designed by: Adam Witton + Original image: https://dribbble.com/shots/3958361-Mini-Spaceship +*/ + +gsap.registerPlugin() + +const vw = (size) => window.innerWidth * ( size/100 ) +const svg = document.querySelector('.svg-icon') +const a = document.querySelector("#audio"); +const rotate = new TimelineMax({ paused: true }) +const wings = new TimelineMax({ reversed: true }) + +const rotateSpaceFunc = () => { + rotate.paused(!rotate.paused()) + wings.reversed(!wings.reversed()) + + a.loop = true + if(a.paused) { a.play() } + else { + a.pause() + a.currentTime = 0 + } +} + +svg.addEventListener('click', rotateSpaceFunc) + +// =========================== +wings.staggerTo(".wrapper-a",.3, { + z: vw(2.125), + ease: "power1.inOut" +}) + +rotate.staggerTo(".main-rotate", 8, { + rotation: 360, + repeat: -1, + ease: 'none' +}) + +gsap.to(".wrapper-c1", { + z: vw(1.85), + duration: .75, + repeat: -1, + yoyo: true, + ease: "power1.inOut" +}) + +gsap.to(".wrapper-c2", { keyframes:[ + { + rotationX: 0, + rotationY: 0, + repeat: -1, + yoyo: true, + }, + { + rotationX: -3, + rotationY: 2, + repeat: -1, + yoyo: true, + }, + { + rotationX: 3, + rotationY: 0, + repeat: -1, + yoyo: true, + }, + { + rotationX: -1, + rotationY: 0, + repeat: -1, + yoyo: true, + } + +], ease: "sine" }) + +gsap.to(".shadows", { + transform: "scale(.935)", + opacity: .75, + duration: .75, + webkitFilter: `blur(${vw(1)})`, + repeat: -1, + yoyo: true, + ease: "power1.inOut" +}) + +gsap.to(".light-3, .light-4", { + height: vw(15), + y: vw(1), + duration: .1, + repeat: -1, + yoyo: true, + ease: "linear", +}) + +gsap.to(".w1 .wave", { + height: vw(10), + width: vw(10), + z: vw(16), + duration: .5, + repeat: -1, + stagger: 0.1, + delay: .5, + border: `${vw(.025)}vw solid rgba(255,255,255,0)`, + ease: "power1", +}) + +gsap.to(".w2 .wave", { + height: vw(10), + width: vw(10), + z: vw(16), + duration: .5, + repeat: -1, + stagger: 0.1, + delay: .5, + border: `${vw(.025)}vw solid rgba(255,255,255,0)`, + ease: "power1", +}) + +gsap.to(".e__front-t", { + opacity: 0, + repeat: -1, + duration: 2, + ease: CustomEase.create("custom", "M0,0,C0.037,0,0.014,0.938,0.05,0.948,0.353,1.03,0.737,-0.058,0.944,-0.004,0.944,-0.004,0.944,-0.004,0.944,-0.004,0.998,0.01,0.959,0.942,1,1"), +}) \ No newline at end of file diff --git a/3d-spaceshipgsap/dist/style.css b/3d-spaceshipgsap/dist/style.css new file mode 100644 index 0000000..03c45ee --- /dev/null +++ b/3d-spaceshipgsap/dist/style.css @@ -0,0 +1,1619 @@ +/***********************/ +/***********************/ +/***********************/ +*, *::after, *::before { + margin: 0; + padding: 0; + box-sizing: border-box; + transform-style: preserve-3d; + user-select: none; + -webkit-tap-highlight-color: transparent; + appearance: none; + font-family: "Press Start 2P", cursive; +} + +/***********************/ +/***********************/ +body { + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + width: 100%; + color: #1d88fe; + font-weight: bolder; + overflow: hidden; + background-image: linear-gradient(to bottom, #1672da, #078dfd, #07b1ff, #00a2ed); +} + +.face { + position: absolute; +} + +.flex { + display: flex; + justify-content: center; + align-items: center; +} + +.svg-icon { + position: absolute; + left: 50%; + bottom: 50px; + width: 50px; + height: 50px; + z-index: 1; + opacity: 0.65; + transform: translateX(-50%); + cursor: pointer; +} +.svg-icon:hover { + opacity: 0.9; +} +@media (max-height: 400px) { + .svg-icon { + left: 50px; + } +} + +.svg-icon path, +.svg-icon polygon, +.svg-icon rect { + fill: white; +} + +.svg-icon circle { + stroke: white; + stroke-width: 1; +} + +/***********************/ +/***********************/ +.main { + position: absolute; + width: 24vw; + height: 25vw; + transform: perspective(300vw) rotateX(60deg) rotateZ(30deg) translateZ(-8vw); + transition: transform 550ms ease-out; +} +.main-rotate { + position: absolute; + width: 100%; + height: 100%; +} + +.wrapper-c1, +.wrapper-c2 { + width: 100%; + height: 100%; + position: absolute; +} + +.wrapper-a { + position: absolute; + width: 100%; + height: 100%; + transform: translateZ(1vw); +} + +.wrapper-b { + position: absolute; + left: 50%; + width: 9.5vw; + height: 100%; + transform: translateX(-50%) translateZ(2vw); +} + +.shadows { + position: absolute; + width: 100%; + height: 100%; + filter: blur(0.85vw); +} + +.shadow { + position: absolute; + top: 0; + border-radius: 2vw; + box-shadow: 0 0 2vw #296ff0; + background-image: radial-gradient(rgba(4, 42, 112, 0.8) 40%, rgba(14, 79, 201, 0.8) 70%); +} + +.shadow-1, +.shadow-2 { + width: 8vw; + height: 17vw; +} + +.shadow-1 { + left: -0.5vw; +} + +.shadow-2 { + right: -0.5vw; +} + +.shadow-3 { + top: 4vw; + left: 50%; + width: 11vw; + height: 20vw; + transform: translateX(-50%); +} + +.shadow-4 { + top: 4vw; + width: 100%; + height: 12vw; +} + +.shadow-5 { + top: 5vw; + left: -15%; + width: 130%; + height: 4vw; +} + +.light-1, +.light-2, +.light-3, +.light-4 { + top: 14vw; + width: 5vw; + height: 24vw; + border-radius: 50%; + box-shadow: 0 0 0.5vw #9effff; + background-image: linear-gradient(to bottom, rgba(107, 255, 255, 0.185), rgba(107, 255, 255, 0.4) 20%, rgba(107, 255, 255, 0.25) 60%, rgba(107, 255, 255, 0.05)); +} + +.light-1 { + left: 0; +} + +.light-2 { + right: 0; +} + +.light-3, +.light-4 { + top: -10vw; + width: 7vw; + height: 16vw; +} + +.light-3 { + left: 0; +} + +.light-4 { + right: 0; +} + +.wave { + position: absolute; + border-radius: 50%; +} + +.a { + width: 7vw; + height: 16vw; + position: absolute; +} +.a__front { + width: 7vw; + height: 7vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(9vw); +} +.a__back { + width: 7vw; + height: 7vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-7vw) translateY(-7vw); +} +.a__right { + width: 16vw; + height: 7vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(7vw) translateX(-16vw) translateY(-7vw); +} +.a__left { + width: 16vw; + height: 7vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-7vw); +} +.a__top { + width: 7vw; + height: 16vw; + transform-origin: top left; + transform: translateZ(7vw); +} +.a__bottom { + width: 7vw; + height: 16vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-7vw); +} +.a__front, .a__back { + background-position: 0 0, 0 100%, 100% 0, 100% 100%, 49% 0; + background-size: 10% 50%, 10% 50%, 10% 50%, 10% 50%, 82% 100%; + background-repeat: no-repeat; +} +.a__back { + box-shadow: inset 0 0 0 0.25vw #6bffff; + border-radius: 1.15vw; +} +.a__top::before, .a__top::after, .a__bottom::before, .a__bottom::after { + content: ""; + position: absolute; + width: 1.1vw; + height: 100%; +} +.a__top::before, .a__bottom::before { + left: 89%; + transform-origin: left; + transform: rotateY(45deg); +} +.a__top::after, .a__bottom::after { + right: 89%; + transform-origin: right; + transform: rotateY(-45deg); +} +.a__bottom { + background-image: linear-gradient(to right, transparent 10%, #0f55d7 10%, #0e4dc4 90%, transparent 90%); +} +.a:nth-of-type(1) { + left: 0; +} +.a:nth-of-type(1) .a__front { + background-image: linear-gradient(-45deg, #27a2fe 2.4125vw, transparent 2.4125vw), linear-gradient(45deg, transparent 0.525vw, #016ee7 0.525vw, #27a2fe), linear-gradient(45deg, #27a2fe 2.4125vw, transparent 2.4125vw), linear-gradient(-45deg, transparent 0.525vw, #016ee7 0.525vw, #27a2fe), linear-gradient(to bottom, #27a2fe 50%, #016ee7); +} +.a:nth-of-type(1) .a__back { + background-image: linear-gradient(-45deg, #1d88fe 2.4125vw, transparent 2.4125vw), linear-gradient(45deg, transparent 0.525vw, #047bfe 0.525vw, #1d88fe), linear-gradient(45deg, #1d88fe 2.4125vw, transparent 2.4125vw), linear-gradient(-45deg, transparent 0.525vw, #047bfe 0.525vw, #1d88fe), linear-gradient(to bottom, #1d88fe 50%, #047bfe); +} +.a:nth-of-type(1) .a__top { + background-image: linear-gradient(to right, transparent 10%, #46cdfe 10%, #1ec3fe 90%, transparent 90%); +} +.a:nth-of-type(1) .a__top::before { + background-color: #2ca4fe; +} +.a:nth-of-type(1) .a__top::after { + background-color: #4bcffe; +} +.a:nth-of-type(1) .a__top-shadow { + top: 2.75vw; + right: 1vw; + width: 3vw; + height: 9vw; + transform-origin: bottom right; + transform: skewY(-40deg) translateZ(1px); + background-image: linear-gradient(to left, rgba(50, 200, 254, 0.6), rgba(107, 255, 255, 0.4), rgba(107, 255, 255, 0.2)); + filter: blur(0.45vw); +} +.a:nth-of-type(1) .a__top-neon { + position: absolute; + left: 50%; + transform: translateX(-50%); + width: 0.5vw; + height: 100%; + background-color: #85ffff; + box-shadow: inset 0 0 0.15vw #042f7f; +} +.a:nth-of-type(1) .a__right { + background-image: linear-gradient(to bottom, transparent 10%, #016ee7 10%, #0160c9 90%, transparent 90%); +} +.a:nth-of-type(1) .a__left { + background-image: linear-gradient(to bottom, transparent 10%, #41ccfe 10%, #14c0fe 90%, transparent 90%); +} +.a:nth-of-type(1) .a__left::before { + content: ""; + position: absolute; + bottom: 10%; + right: 7vw; + width: 4vw; + height: 2.5vw; + transform-origin: top left; + transform: skewX(20deg); + background-image: linear-gradient(to bottom, #1d9efe, rgba(39, 162, 254, 0.2)); + filter: blur(0.15vw); +} +.a:nth-of-type(1) .a__bottom::before { + background-color: #1d88fe; +} +.a:nth-of-type(1) .a__bottom::after { + background-color: #0f55d7; +} +.a:nth-of-type(2) { + right: 0; +} +.a:nth-of-type(2) .a__front { + background-image: linear-gradient(-45deg, #0995fe 2.4125vw, transparent 2.4125vw), linear-gradient(45deg, transparent 0.525vw, #0165d3 0.525vw, #27a2fe), linear-gradient(45deg, #0995fe 2.4125vw, transparent 2.4125vw), linear-gradient(-45deg, transparent 0.525vw, #0165d3 0.525vw, #0995fe), linear-gradient(to bottom, #0995fe 50%, #0165d3); +} +.a:nth-of-type(2) .a__back { + background-image: linear-gradient(-45deg, #0e80fe 2.4125vw, transparent 2.4125vw), linear-gradient(45deg, transparent 0.525vw, #0178fb 0.525vw, #1d88fe), linear-gradient(45deg, #0e80fe 2.4125vw, transparent 2.4125vw), linear-gradient(-45deg, transparent 0.525vw, #0178fb 0.525vw, #1d88fe), linear-gradient(to bottom, #0e80fe 50%, #0178fb); +} +.a:nth-of-type(2) .a__top { + background-image: linear-gradient(60deg, rgba(39, 162, 254, 0.8), rgba(39, 162, 254, 0.45) 48%, transparent 50%), linear-gradient(to right, transparent 10%, #32c8fe 10%, #1ec3fe 90%, transparent 90%); + background-size: 80% 100%, 100% 100%; + background-position: 52% 0, 0 0; + background-repeat: no-repeat; +} +.a:nth-of-type(2) .a__top::before { + background-image: linear-gradient(to right, #27a2fe, #1d88fe); +} +.a:nth-of-type(2) .a__top::after { + background-image: linear-gradient(to left, #19c1fe, #1d88fe); +} +.a:nth-of-type(2) .a__top-shadow { + top: 2.75vw; + left: 1.5vw; + width: 3vw; + height: 9vw; + transform-origin: bottom left; + transform: skewY(40deg) translateZ(1px); + background-image: linear-gradient(to right, rgba(107, 255, 255, 0.1), rgba(107, 255, 255, 0.315), rgba(107, 255, 255, 0.215)); + filter: blur(0.5vw); +} +.a:nth-of-type(2) .a__top-neon { + position: absolute; + left: 50%; + transform: translateX(-50%); + width: 0.5vw; + height: 100%; + background-color: #6bffff; + box-shadow: inset 0 0 0.15vw #042f7f; +} +.a:nth-of-type(2) .a__right { + background-image: linear-gradient(to bottom, transparent 10%, #0e80fe 10%, #0167d8 90%, transparent 90%); +} +.a:nth-of-type(2) .a__right::before { + content: ""; + position: absolute; + bottom: 10%; + left: 7vw; + width: 4vw; + height: 2.5vw; + transform-origin: top left; + transform: skewX(-20deg); + background-image: linear-gradient(to bottom, rgba(15, 85, 215, 0.9), rgba(15, 85, 215, 0.2)); + filter: blur(0.15vw); +} +.a:nth-of-type(2) .a__left { + background-image: linear-gradient(to bottom, transparent 10%, #1383fe 10%, #0162ce 90%, transparent 90%); +} +.a:nth-of-type(2) .a__bottom::before { + background-color: #0f55d7; +} +.a:nth-of-type(2) .a__bottom::after { + background-color: #0f55d7; +} + +.b { + width: 9.5vw; + height: 10vw; + position: absolute; + top: 2.1vw; +} +.b__front { + width: 9.5vw; + height: 10vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(0vw); +} +.b__back { + width: 9.5vw; + height: 10vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-9.5vw) translateY(-10vw); +} +.b__right { + width: 10vw; + height: 10vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(9.5vw) translateX(-10vw) translateY(-10vw); +} +.b__left { + width: 10vw; + height: 10vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-10vw); +} +.b__top { + width: 9.5vw; + height: 10vw; + transform-origin: top left; + transform: translateZ(10vw); +} +.b__bottom { + width: 9.5vw; + height: 10vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-9.5vw); +} +.b__front { + background-color: #042f7f; +} +.b__back { + background-image: linear-gradient(to bottom, #3193fe, #1d88fe 20%, #016add); +} +.b__back::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + padding: 0.75vw; + background-image: radial-gradient(rgba(107, 255, 255, 0.2) 20%, transparent 21%), radial-gradient(rgba(107, 255, 255, 0.2) 20%, transparent 21%); + background-size: 0.75vw 0.75vw; + background-repeat: repeat; + background-clip: content-box; +} +.b__left, .b__right { + padding: 0.6vw; +} +.b__left::before, .b__right::before { + content: ""; + display: block; + width: 100%; + height: 2vw; +} +.b__left { + background-image: linear-gradient(to bottom, #46cdfe, #32c8fe 30%, #0f55d7); +} +.b__left::before { + background-image: linear-gradient(to bottom, #85ffff, #6bffff); + box-shadow: 0 0 0.95vw #85ffff, inset 0 0 0.5vw #85ffff; +} +.b__right { + background-image: linear-gradient(to bottom, #1d88fe, #047bfe 30%, #0156b4); +} +.b__right::before { + background-image: linear-gradient(to top, #52ffff, #6bffff); + box-shadow: 0 0 0.95vw #52ffff, inset 0 0 0.5vw #38ffff; +} +.b__top { + background-image: linear-gradient(to right, #2dc7fe, #01b9fc); +} +.b__bottom { + background-color: #0f55d7; +} + +.c { + width: 9.5vw; + height: 5vw; + position: absolute; + top: 12.25vw; +} +.c__front { + width: 9.5vw; + height: 10vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-5vw); +} +.c__back { + width: 9.5vw; + height: 10vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-9.5vw) translateY(-10vw); +} +.c__right { + width: 5vw; + height: 10vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(9.5vw) translateX(-5vw) translateY(-10vw); +} +.c__left { + width: 5vw; + height: 10vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-10vw); +} +.c__top { + width: 9.5vw; + height: 5vw; + transform-origin: top left; + transform: translateZ(10vw); +} +.c__bottom { + width: 9.5vw; + height: 5vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-9.5vw); +} +.c__front { + background-color: #27a2fe; +} +.c__front-l { + position: absolute; + top: 0; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, transparent 15%, rgba(107, 255, 255, 0.3) 15%, rgba(107, 255, 255, 0.4)); +} +.c__back { + background-color: #042f7f; +} +.c__left { + background-image: linear-gradient(to bottom, #46cdfe, #32c8fe 30%, #0f55d7); +} +.c__right { + background-image: linear-gradient(to bottom, #1d88fe, #047bfe 30%, #0156b4); +} +.c__top { + background-image: linear-gradient(to right, #2dc7fe, #01b9fc); +} +.c__bottom { + background-color: #0f55d7; +} + +.d { + width: 9.5vw; + height: 5.75vw; + position: absolute; + bottom: 2vw; +} +.d__front { + width: 9.5vw; + height: 0.6vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(5.15vw); +} +.d__back { + width: 9.5vw; + height: 0.6vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-9.5vw) translateY(-0.6vw); +} +.d__right { + width: 5.75vw; + height: 0.6vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(9.5vw) translateX(-5.75vw) translateY(-0.6vw); +} +.d__left { + width: 5.75vw; + height: 0.6vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-0.6vw); +} +.d__top { + width: 9.5vw; + height: 5.75vw; + transform-origin: top left; + transform: translateZ(0.6vw); +} +.d__bottom { + width: 9.5vw; + height: 5.75vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-9.5vw); +} +.d__left { + background-image: linear-gradient(to right, #047bfe, #32c8fe); +} +.d__right { + background-image: linear-gradient(to left, #016ee7, #1d88fe); +} +.d__top { + background-image: linear-gradient(to bottom, #0165d3, #0173f1 40%, #0e80fe); +} +.d__top-l { + position: absolute; + top: 0; + width: 100%; + height: 100%; + background-image: linear-gradient(to right, rgba(107, 255, 255, 0.3), rgba(107, 255, 255, 0.4)); +} +.d__bottom { + background-color: #0f55d7; +} + +.e { + width: 9.5vw; + height: 0.6vw; + position: absolute; + bottom: 1.4vw; +} +.e__front { + width: 9.5vw; + height: 8.5vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-7.9vw); +} +.e__back { + width: 9.5vw; + height: 8.5vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-9.5vw) translateY(-8.5vw); +} +.e__right { + width: 0.6vw; + height: 8.5vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(9.5vw) translateX(-0.6vw) translateY(-8.5vw); +} +.e__left { + width: 0.6vw; + height: 8.5vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-8.5vw); +} +.e__top { + width: 9.5vw; + height: 0.6vw; + transform-origin: top left; + transform: translateZ(8.5vw); +} +.e__bottom { + width: 9.5vw; + height: 0.6vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-9.5vw); +} +.e__front { + background-color: #27a2fe; + padding: 0.6vw; +} +.e__front-i { + width: 100%; + height: 2vw; + background-image: linear-gradient(to bottom, #6bffff, #61ffff); + box-shadow: 0 0 0.95vw #52ffff, inset 0 0 0.25vw #38ffff; + overflow: hidden; +} +.e__front-i::before { + content: ""; + position: absolute; + width: 3vw; + height: 100%; + left: 0; + transform-origin: top left; + transform: skewX(20deg); + background-image: linear-gradient(to right, rgba(107, 255, 255, 0.075), transparent); + filter: blur(0.2vw); +} +.e__front-t { + position: absolute; + width: 100%; + height: 100%; + font-size: 1vw; +} +.e__back { + background-color: #32c8fe; +} +.e__left { + background-image: linear-gradient(to bottom, #46cdfe, #32c8fe); +} +.e__right { + background-color: #1d88fe; +} +.e__bottom { + background-color: #0f55d7; +} + +.f { + width: 9.5vw; + height: 6.3vw; + position: absolute; + bottom: 1.5vw; + transform: translateZ(8.5vw); +} +.f__front { + width: 9.5vw; + height: 0.6vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(5.7vw); +} +.f__back { + width: 9.5vw; + height: 0.6vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-9.5vw) translateY(-0.6vw); +} +.f__right { + width: 6.3vw; + height: 0.6vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(9.5vw) translateX(-6.3vw) translateY(-0.6vw); +} +.f__left { + width: 6.3vw; + height: 0.6vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-0.6vw); +} +.f__top { + width: 9.5vw; + height: 6.3vw; + transform-origin: top left; + transform: translateZ(0.6vw); +} +.f__bottom { + width: 9.5vw; + height: 6.3vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-9.5vw); +} +.f__front-i { + position: absolute; + bottom: 0; + width: 100%; + height: 2.8vw; + transform-origin: bottom; + transform: rotateX(78deg); + background-image: linear-gradient(to right, #2dc7fe, #01b9fc); +} +.f__left { + background-image: linear-gradient(12deg, #46cdfe 70%, transparent 70%); +} +.f__left::before { + content: ""; + position: absolute; + top: 100%; + right: 0.5vw; + width: 40%; + height: 200%; + background-image: linear-gradient(12deg, transparent 70%, #4bcffe 70%); +} +.f__right { + background-image: linear-gradient(-12deg, #1d88fe 70%, transparent 70%); +} +.f__right::before { + content: ""; + position: absolute; + top: 100%; + left: 0.5vw; + width: 40%; + height: 200%; + background-image: linear-gradient(-12deg, transparent 70%, #1d88fe 70%); +} +.f__top { + background-image: linear-gradient(to bottom, #32c8fe 60%, transparent 60%); +} +.f__top::after { + content: ""; + position: absolute; + top: 0; + width: 100%; + height: 60%; + background-image: linear-gradient(to right, #2dc7fe, #01b9fc); +} +.f__bottom { + background-color: #32c8fe; +} + +.g { + width: 9.5vw; + height: 1vw; + position: absolute; + bottom: 0.5vw; +} +.g__front { + width: 9.5vw; + height: 5vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-4vw); +} +.g__back { + width: 9.5vw; + height: 5vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-9.5vw) translateY(-5vw); +} +.g__right { + width: 1vw; + height: 5vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(9.5vw) translateX(-1vw) translateY(-5vw); +} +.g__left { + width: 1vw; + height: 5vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-5vw); +} +.g__top { + width: 9.5vw; + height: 1vw; + transform-origin: top left; + transform: translateZ(5vw); +} +.g__bottom { + width: 9.5vw; + height: 1vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-9.5vw); +} +.g__front { + background-image: linear-gradient(to top, #0e97fe 3.9vw, transparent 3.9vw); +} +.g__front::before { + content: ""; + position: absolute; + bottom: 1.75vw; + height: 0.5vw; + width: 100%; + background-color: #6bffff; + box-shadow: inset 0 0 0.15vw #042f7f, 0 0 0.15vw #6bffff; +} +.g__left { + background-image: linear-gradient(45deg, #32c8fe 3.55vw, transparent 3.55vw); +} +.g__right { + background-image: linear-gradient(-45deg, #1d88fe 3.55vw, transparent 3.55vw); +} +.g__top::before { + content: ""; + display: block; + height: 1.5vw; + transform-origin: top left; + transform: rotateX(-46deg); + background-image: linear-gradient(to right, #32c8fe, #23c4fe); +} +.g__bottom { + background-color: #0f55d7; +} + +.h { + width: 0.425vw; + height: 12.7vw; + position: absolute; + transform: translateX(-50%) translateZ(10.1vw); + left: 50%; + bottom: 9vw; +} +.h__front { + width: 0.425vw; + height: 1vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(11.7vw); +} +.h__back { + width: 0.425vw; + height: 1vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-0.425vw) translateY(-1vw); +} +.h__right { + width: 12.7vw; + height: 1vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(0.425vw) translateX(-12.7vw) translateY(-1vw); +} +.h__left { + width: 12.7vw; + height: 1vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-1vw); +} +.h__top { + width: 0.425vw; + height: 12.7vw; + transform-origin: top left; + transform: translateZ(1vw); +} +.h__bottom { + width: 0.425vw; + height: 12.7vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-0.425vw); +} +.h__front { + background-color: #27a2fe; +} +.h__back { + background-image: linear-gradient(to bottom, #1d88fe, #047bfe 80%); +} +.h__left { + background-image: linear-gradient(to bottom, #4bcffe, #3ccbfe); +} +.h__right { + background-image: linear-gradient(to bottom, #1d88fe, #097dfe); +} +.h__top { + background-color: #6bffff; + box-shadow: 0 0 0.5vw #85ffff; +} +.h__bottom { + background-color: #1d88fe; +} +.h__bottom::before { + content: ""; + position: absolute; + right: 0%; + width: 2.25vw; + height: 100%; + background-image: linear-gradient(to right, rgba(39, 162, 254, 0.5) 10%, #018af1); + transform-origin: right bottom; + transform: skewY(-20deg); + filter: blur(0.2vw); +} + +.i { + width: 9vw; + height: 5.7vw; + position: absolute; + bottom: 2vw; + left: 0.25vw; + transform: translateZ(0.6vw); +} +.i__front { + width: 9vw; + height: 8vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(-2.3vw); +} +.i__back { + width: 9vw; + height: 8vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-9vw) translateY(-8vw); +} +.i__right { + width: 5.7vw; + height: 8vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(9vw) translateX(-5.7vw) translateY(-8vw); +} +.i__left { + width: 5.7vw; + height: 8vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-8vw); +} +.i__top { + width: 9vw; + height: 5.7vw; + transform-origin: top left; + transform: translateZ(8vw); +} +.i__bottom { + width: 9vw; + height: 5.7vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-9vw); +} +.i__left { + background-image: linear-gradient(to bottom, #85ffff, #6bffff); + box-shadow: inset 0 0 0.5vw #85ffff; +} +.i__right { + background-image: linear-gradient(to top, #38ffff, #6bffff); + box-shadow: inset 0 0 0.5vw #38ffff; +} + +.wing { + width: 4vw; + height: 4vw; + position: absolute; + top: 5vw; + transform: translateZ(3vw); +} +.wing__front { + width: 4vw; + height: 0.5vw; + transform-origin: bottom left; + transform: rotateX(-90deg) translateZ(3.5vw); +} +.wing__back { + width: 4vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateX(-90deg) rotateY(180deg) translateX(-4vw) translateY(-0.5vw); +} +.wing__right { + width: 4vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateY(90deg) rotateZ(-90deg) translateZ(4vw) translateX(-4vw) translateY(-0.5vw); +} +.wing__left { + width: 4vw; + height: 0.5vw; + transform-origin: top left; + transform: rotateY(-90deg) rotateZ(90deg) translateY(-0.5vw); +} +.wing__top { + width: 4vw; + height: 4vw; + transform-origin: top left; + transform: translateZ(0.5vw); +} +.wing__bottom { + width: 4vw; + height: 4vw; + transform-origin: top left; + transform: rotateY(180deg) translateX(-4vw); +} +.wing:nth-of-type(1) { + left: 100%; +} +.wing:nth-of-type(1) .wing__front::before { + content: ""; + position: absolute; + left: 0; + width: 145%; + height: 100%; + transform-origin: bottom left; + transform: rotateY(45deg); + background-image: linear-gradient(to right, #1d88fe, #27a2fe); +} +.wing:nth-of-type(1) .wing__back { + background-image: linear-gradient(to bottom, #1383fe 50%, #016ee7); +} +.wing:nth-of-type(1) .wing__left { + background-image: linear-gradient(to bottom, #46cdfe, #32c8fe); +} +.wing:nth-of-type(1) .wing__top { + background-image: linear-gradient(-45deg, transparent 50%, #32c8fe 50%, #22a0fe); +} +.wing:nth-of-type(1) .wing__bottom { + background-image: linear-gradient(45deg, transparent 50%, #0f55d7 50%); +} +.wing:nth-of-type(2) { + right: 100%; +} +.wing:nth-of-type(2) .wing__front::before { + content: ""; + position: absolute; + right: 0; + width: 145%; + height: 100%; + transform-origin: bottom right; + transform: rotateY(-45deg); + background-image: linear-gradient(to right, #27a2fe, #0e97fe); +} +.wing:nth-of-type(2) .wing__back { + background-image: linear-gradient(to bottom, #1383fe 50%, #016ee7); +} +.wing:nth-of-type(2) .wing__right { + background-image: linear-gradient(to bottom, #1d88fe, #097dfe); +} +.wing:nth-of-type(2) .wing__top { + background-image: linear-gradient(45deg, transparent 50%, #41ccfe 50%, #32c8fe); +} +.wing:nth-of-type(2) .wing__bottom { + background-image: linear-gradient(-45deg, transparent 50%, #0f55d7 50%); +} + +/*---------------------*/ +.turbo { + position: absolute; + width: 5.5vw; + height: 5.5vw; +} + +.circle { + width: 5.5vw; + height: 5.5vw; + position: absolute; +} +.circle-a { + position: absolute; + width: 1vw; + height: 5.5vw; + transform: rotateY(90deg) translateX(-50%); + display: flex; + justify-content: center; + align-items: center; + position: absolute; +} +.circle-a__side { + position: absolute; + height: 0.5347222222vw; + width: 1vw; + background-color: black; +} +.circle-a__side:nth-of-type(1) { + transform: rotateX(10deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(2) { + transform: rotateX(20deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(3) { + transform: rotateX(30deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(4) { + transform: rotateX(40deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(5) { + transform: rotateX(50deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(6) { + transform: rotateX(60deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(7) { + transform: rotateX(70deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(8) { + transform: rotateX(80deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(9) { + transform: rotateX(90deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(10) { + transform: rotateX(100deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(11) { + transform: rotateX(110deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(12) { + transform: rotateX(120deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(13) { + transform: rotateX(130deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(14) { + transform: rotateX(140deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(15) { + transform: rotateX(150deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(16) { + transform: rotateX(160deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(17) { + transform: rotateX(170deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(18) { + transform: rotateX(180deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(19) { + transform: rotateX(190deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(20) { + transform: rotateX(200deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(21) { + transform: rotateX(210deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(22) { + transform: rotateX(220deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(23) { + transform: rotateX(230deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(24) { + transform: rotateX(240deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(25) { + transform: rotateX(250deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(26) { + transform: rotateX(260deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(27) { + transform: rotateX(270deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(28) { + transform: rotateX(280deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(29) { + transform: rotateX(290deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(30) { + transform: rotateX(300deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(31) { + transform: rotateX(310deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(32) { + transform: rotateX(320deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(33) { + transform: rotateX(330deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(34) { + transform: rotateX(340deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(35) { + transform: rotateX(350deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(36) { + transform: rotateX(360deg) translateZ(2.75vw); +} +.circle-a__side:nth-of-type(1) { + background-color: #232222; +} +.circle-a__side:nth-of-type(2) { + background-color: #222121; +} +.circle-a__side:nth-of-type(3) { + background-color: #211f1f; +} +.circle-a__side:nth-of-type(4) { + background-color: #1f1e1e; +} +.circle-a__side:nth-of-type(5) { + background-color: #1e1d1d; +} +.circle-a__side:nth-of-type(6) { + background-color: #1d1c1c; +} +.circle-a__side:nth-of-type(7) { + background-color: #1b1a1a; +} +.circle-a__side:nth-of-type(8) { + background-color: #1a1919; +} +.circle-a__side:nth-of-type(9) { + background-color: #191818; +} +.circle-a__side:nth-of-type(10) { + background-color: #171717; +} +.circle-a__side:nth-of-type(11) { + background-color: #161515; +} +.circle-a__side:nth-of-type(12) { + background-color: #151414; +} +.circle-a__side:nth-of-type(13) { + background-color: #141313; +} +.circle-a__side:nth-of-type(14) { + background-color: #121212; +} +.circle-a__side:nth-of-type(15) { + background-color: #111010; +} +.circle-a__side:nth-of-type(16) { + background-color: #100f0f; +} +.circle-a__side:nth-of-type(17) { + background-color: #0e0e0e; +} +.circle-a__side:nth-of-type(18) { + background-color: #0d0d0d; +} +.circle-a__side:nth-of-type(19) { + background-color: #0c0b0b; +} +.circle-a__side:nth-last-of-type(1) { + background-color: #232222; +} +.circle-a__side:nth-last-of-type(2) { + background-color: #222121; +} +.circle-a__side:nth-last-of-type(3) { + background-color: #211f1f; +} +.circle-a__side:nth-last-of-type(4) { + background-color: #1f1e1e; +} +.circle-a__side:nth-last-of-type(5) { + background-color: #1e1d1d; +} +.circle-a__side:nth-last-of-type(6) { + background-color: #1d1c1c; +} +.circle-a__side:nth-last-of-type(7) { + background-color: #1b1a1a; +} +.circle-a__side:nth-last-of-type(8) { + background-color: #1a1919; +} +.circle-a__side:nth-last-of-type(9) { + background-color: #191818; +} +.circle-a__side:nth-last-of-type(10) { + background-color: #171717; +} +.circle-a__side:nth-last-of-type(11) { + background-color: #161515; +} +.circle-a__side:nth-last-of-type(12) { + background-color: #151414; +} +.circle-a__side:nth-last-of-type(13) { + background-color: #141313; +} +.circle-a__side:nth-last-of-type(14) { + background-color: #121212; +} +.circle-a__side:nth-last-of-type(15) { + background-color: #111010; +} +.circle-a__side:nth-last-of-type(16) { + background-color: #100f0f; +} +.circle-a__side:nth-last-of-type(17) { + background-color: #0e0e0e; +} +.circle-a__side:nth-last-of-type(18) { + background-color: #0d0d0d; +} +.circle-a__side:nth-last-of-type(19) { + background-color: #0c0b0b; +} +.circle-a__top, .circle-a__bottom { + position: absolute; + width: 5.5vw; + height: 5.5vw; + border-radius: 50%; + transform: rotateY(90deg) translateZ(0.5vw); +} +.circle-a__bottom { + transform: rotateY(90deg) translateZ(-0.5vw); +} +.circle-a__bottom { + border: 0.115vw solid #6bffff; + background-image: radial-gradient(circle, transparent 50%, #0a0a0a 50%); +} +.circle-a__top { + outline: 0.2vw solid rgba(29, 136, 254, 0.9); + box-shadow: 0 0 1vw #38ffff; +} +.circle-b { + position: absolute; + width: 1vw; + height: 4vw; + transform: rotateY(90deg) translateX(-50%); + display: flex; + justify-content: center; + align-items: center; + position: absolute; +} +.circle-b__side { + position: absolute; + height: 0.3888888889vw; + width: 1vw; + background-color: #005252; +} +.circle-b__side:nth-of-type(1) { + transform: rotateX(10deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(2) { + transform: rotateX(20deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(3) { + transform: rotateX(30deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(4) { + transform: rotateX(40deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(5) { + transform: rotateX(50deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(6) { + transform: rotateX(60deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(7) { + transform: rotateX(70deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(8) { + transform: rotateX(80deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(9) { + transform: rotateX(90deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(10) { + transform: rotateX(100deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(11) { + transform: rotateX(110deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(12) { + transform: rotateX(120deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(13) { + transform: rotateX(130deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(14) { + transform: rotateX(140deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(15) { + transform: rotateX(150deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(16) { + transform: rotateX(160deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(17) { + transform: rotateX(170deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(18) { + transform: rotateX(180deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(19) { + transform: rotateX(190deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(20) { + transform: rotateX(200deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(21) { + transform: rotateX(210deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(22) { + transform: rotateX(220deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(23) { + transform: rotateX(230deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(24) { + transform: rotateX(240deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(25) { + transform: rotateX(250deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(26) { + transform: rotateX(260deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(27) { + transform: rotateX(270deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(28) { + transform: rotateX(280deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(29) { + transform: rotateX(290deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(30) { + transform: rotateX(300deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(31) { + transform: rotateX(310deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(32) { + transform: rotateX(320deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(33) { + transform: rotateX(330deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(34) { + transform: rotateX(340deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(35) { + transform: rotateX(350deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(36) { + transform: rotateX(360deg) translateZ(2vw); +} +.circle-b__side:nth-of-type(1) { + background-color: #009b9b; +} +.circle-b__side:nth-of-type(2) { + background-color: #009999; +} +.circle-b__side:nth-of-type(3) { + background-color: #009696; +} +.circle-b__side:nth-of-type(4) { + background-color: #009494; +} +.circle-b__side:nth-of-type(5) { + background-color: #009191; +} +.circle-b__side:nth-of-type(6) { + background-color: #008f8f; +} +.circle-b__side:nth-of-type(7) { + background-color: #008c8c; +} +.circle-b__side:nth-of-type(8) { + background-color: #008a8a; +} +.circle-b__side:nth-of-type(9) { + background-color: #008787; +} +.circle-b__side:nth-of-type(10) { + background-color: #008585; +} +.circle-b__side:nth-of-type(11) { + background-color: #008282; +} +.circle-b__side:nth-of-type(12) { + background-color: #007f7f; +} +.circle-b__side:nth-of-type(13) { + background-color: #007d7d; +} +.circle-b__side:nth-of-type(14) { + background-color: #007a7a; +} +.circle-b__side:nth-of-type(15) { + background-color: #007878; +} +.circle-b__side:nth-of-type(16) { + background-color: #007575; +} +.circle-b__side:nth-of-type(17) { + background-color: #007373; +} +.circle-b__side:nth-of-type(18) { + background-color: #007070; +} +.circle-b__side:nth-of-type(19) { + background-color: #006e6e; +} +.circle-b__side:nth-last-of-type(1) { + background-color: #009b9b; +} +.circle-b__side:nth-last-of-type(2) { + background-color: #009999; +} +.circle-b__side:nth-last-of-type(3) { + background-color: #009696; +} +.circle-b__side:nth-last-of-type(4) { + background-color: #009494; +} +.circle-b__side:nth-last-of-type(5) { + background-color: #009191; +} +.circle-b__side:nth-last-of-type(6) { + background-color: #008f8f; +} +.circle-b__side:nth-last-of-type(7) { + background-color: #008c8c; +} +.circle-b__side:nth-last-of-type(8) { + background-color: #008a8a; +} +.circle-b__side:nth-last-of-type(9) { + background-color: #008787; +} +.circle-b__side:nth-last-of-type(10) { + background-color: #008585; +} +.circle-b__side:nth-last-of-type(11) { + background-color: #008282; +} +.circle-b__side:nth-last-of-type(12) { + background-color: #007f7f; +} +.circle-b__side:nth-last-of-type(13) { + background-color: #007d7d; +} +.circle-b__side:nth-last-of-type(14) { + background-color: #007a7a; +} +.circle-b__side:nth-last-of-type(15) { + background-color: #007878; +} +.circle-b__side:nth-last-of-type(16) { + background-color: #007575; +} +.circle-b__side:nth-last-of-type(17) { + background-color: #007373; +} +.circle-b__side:nth-last-of-type(18) { + background-color: #007070; +} +.circle-b__side:nth-last-of-type(19) { + background-color: #006e6e; +} +.circle-b__top, .circle-b__bottom { + position: absolute; + width: 4vw; + height: 4vw; + border-radius: 50%; + transform: rotateY(90deg) translateZ(0.5vw); +} +.circle-b__bottom { + transform: rotateY(90deg) translateZ(-0.5vw); +} +.circle-b__bottom { + background-image: radial-gradient(circle, #6bffff 30%, #05ffff); + box-shadow: inset 0 0 1vw 0.25vw #b8ffff, 0 0 1vw 0.5vw #042f7f; + transform: rotateY(90deg) translateZ(0.45vw); +} + +.turbo-back { + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-rows: 1fr 1fr; + grid-gap: 0.25vw; + justify-items: center; + align-items: center; + width: 85%; + height: 85%; +} +.turbo-back__item { + width: 2.5vw; + height: 2.5vw; + background-color: #6bffff; + border-radius: 50%; + box-shadow: inset 0 0 0.5vw 0.125vw rgba(54, 54, 54, 0.25), 0 0 0.5vw 0.25vw rgba(15, 85, 215, 0.125), 0 0 0.5vw #38ffff; +} \ No newline at end of file diff --git a/3d-spaceshipgsap/license.txt b/3d-spaceshipgsap/license.txt new file mode 100644 index 0000000..9846e0f --- /dev/null +++ b/3d-spaceshipgsap/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Ricardo Oliva Alonso (https://codepen.io/ricardoolivaalonso/pen/poWbBdK) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/3d-spaceshipgsap/src/index.pug b/3d-spaceshipgsap/src/index.pug new file mode 100644 index 0000000..ceb902f --- /dev/null +++ b/3d-spaceshipgsap/src/index.pug @@ -0,0 +1,169 @@ +audio#audio + source#audio(src="https://rawcdn.githack.com/ricardoolivaalonso/Codepen/cc4996b50006214d2f3a1e8059bee90a7455d298/Space/audio.mp3",type="audio/mpeg") + +svg.svg-icon(version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 122.88 65.79' style='enable-background:new 0 0 122.88 65.79' xml:space='preserve') + g + path.st0(d='M13.37,31.32c-22.23,12.2,37.65,19.61,51.14,19.49v-7.44l11.21,11.2L64.51,65.79v-6.97 C37.4,59.85-26.41,42.4,11.97,27.92c0.36,1.13,0.8,2.2,1.3,3.2L13.37,31.32L13.37,31.32z M108.36,8.31c0-2.61,0.47-4.44,1.41-5.48 c0.94-1.04,2.37-1.56,4.3-1.56c0.92,0,1.69,0.12,2.28,0.34c0.59,0.23,1.08,0.52,1.45,0.89c0.38,0.36,0.67,0.75,0.89,1.15 c0.22,0.4,0.39,0.87,0.52,1.41c0.26,1.02,0.38,2.09,0.38,3.21c0,2.49-0.42,4.32-1.27,5.47c-0.84,1.15-2.29,1.73-4.36,1.73 c-1.15,0-2.09-0.19-2.8-0.55c-0.71-0.37-1.3-0.91-1.75-1.62c-0.33-0.51-0.59-1.2-0.77-2.07C108.45,10.34,108.36,9.38,108.36,8.31 L108.36,8.31z M26.47,10.49l-9-1.6c0.75-2.86,2.18-5.06,4.31-6.59C23.9,0.77,26.91,0,30.8,0c4.47,0,7.69,0.83,9.69,2.5 c1.99,1.67,2.98,3.77,2.98,6.29c0,1.48-0.41,2.82-1.21,4.01c-0.81,1.2-2.02,2.25-3.65,3.15c1.32,0.33,2.34,0.71,3.03,1.15 c1.14,0.7,2.02,1.63,2.65,2.77c0.63,1.15,0.95,2.51,0.95,4.1c0,2-0.52,3.91-1.56,5.75c-1.05,1.83-2.55,3.24-4.51,4.23 c-1.96,0.99-4.54,1.48-7.74,1.48c-3.11,0-5.57-0.37-7.36-1.1c-1.8-0.73-3.28-1.8-4.44-3.22c-1.16-1.41-2.05-3.19-2.67-5.33 l9.53-1.27c0.38,1.92,0.95,3.26,1.74,4.01c0.78,0.74,1.78,1.12,3,1.12c1.27,0,2.33-0.47,3.18-1.4c0.85-0.93,1.27-2.18,1.27-3.74 c0-1.59-0.41-2.82-1.22-3.69c-0.81-0.87-1.92-1.31-3.32-1.31c-0.74,0-1.77,0.18-3.07,0.56l0.49-6.81c0.52,0.08,0.93,0.12,1.22,0.12 c1.23,0,2.26-0.4,3.08-1.19c0.82-0.79,1.24-1.72,1.24-2.81c0-1.05-0.31-1.88-0.93-2.49c-0.62-0.62-1.48-0.93-2.55-0.93 c-1.12,0-2.02,0.34-2.72,1.01C27.19,7.62,26.72,8.8,26.47,10.49L26.47,10.49z M75.15,8.27l-9.48,1.16 c-0.25-1.32-0.66-2.24-1.24-2.78c-0.59-0.54-1.31-0.81-2.16-0.81c-1.54,0-2.74,0.77-3.59,2.33c-0.62,1.13-1.09,3.52-1.38,7.19 c1.14-1.16,2.31-2.01,3.5-2.56c1.2-0.55,2.59-0.83,4.16-0.83c3.06,0,5.64,1.09,7.75,3.27c2.11,2.19,3.17,4.96,3.17,8.31 c0,2.26-0.53,4.32-1.6,6.2c-1.07,1.87-2.55,3.29-4.44,4.25c-1.9,0.96-4.27,1.44-7.13,1.44c-3.43,0-6.18-0.58-8.25-1.76 c-2.07-1.17-3.73-3.03-4.97-5.59c-1.24-2.56-1.86-5.95-1.86-10.18c0-6.18,1.3-10.71,3.91-13.59C54.13,1.44,57.74,0,62.36,0 c2.73,0,4.88,0.31,6.46,0.94c1.58,0.63,2.9,1.56,3.94,2.76C73.81,4.92,74.61,6.44,75.15,8.27L75.15,8.27z M57.62,23.55 c0,1.86,0.47,3.31,1.4,4.36c0.94,1.05,2.08,1.58,3.44,1.58c1.25,0,2.3-0.48,3.14-1.43c0.84-0.95,1.26-2.37,1.26-4.26 c0-1.93-0.44-3.41-1.31-4.42c-0.88-1.01-1.96-1.52-3.26-1.52c-1.32,0-2.44,0.49-3.34,1.48C58.06,20.32,57.62,21.72,57.62,23.55 L57.62,23.55z M77.91,17.57c0-6.51,1.17-11.07,3.52-13.67C83.77,1.3,87.35,0,92.14,0c2.31,0,4.2,0.29,5.68,0.85 c1.48,0.57,2.69,1.31,3.62,2.22c0.94,0.91,1.68,1.87,2.21,2.87c0.54,1.01,0.97,2.18,1.3,3.52c0.64,2.55,0.96,5.22,0.96,8 c0,6.22-1.05,10.76-3.16,13.64c-2.1,2.88-5.72,4.32-10.87,4.32c-2.88,0-5.21-0.46-6.99-1.38c-1.78-0.92-3.23-2.27-4.37-4.05 c-0.82-1.26-1.47-2.98-1.93-5.17C78.14,22.64,77.91,20.22,77.91,17.57L77.91,17.57z M87.34,17.59c0,4.36,0.38,7.34,1.16,8.94 c0.77,1.6,1.89,2.39,3.36,2.39c0.97,0,1.8-0.34,2.51-1.01c0.71-0.68,1.23-1.76,1.56-3.22c0.34-1.47,0.5-3.75,0.5-6.85 c0-4.55-0.38-7.6-1.16-9.18c-0.77-1.56-1.93-2.35-3.47-2.35c-1.58,0-2.71,0.8-3.42,2.39C87.69,10.31,87.34,13.27,87.34,17.59 L87.34,17.59z M112.14,8.32c0,1.75,0.15,2.94,0.46,3.58c0.31,0.64,0.76,0.96,1.35,0.96c0.39,0,0.72-0.13,1.01-0.41 c0.28-0.27,0.49-0.7,0.63-1.29c0.13-0.59,0.2-1.5,0.2-2.74c0-1.82-0.15-3.05-0.46-3.68c-0.31-0.63-0.77-0.94-1.39-0.94 c-0.63,0-1.09,0.32-1.37,0.96C112.28,5.4,112.14,6.59,112.14,8.32L112.14,8.32z M109.3,30.23c10.56,5.37,8.04,12.99-10.66,17.62 c-5.3,1.31-11.29,2.5-17.86,2.99v6.05c7.31-0.51,14.11-2.19,20.06-3.63c28.12-6.81,27.14-18.97,9.36-25.83 C109.95,28.42,109.65,29.35,109.3,30.23L109.3,30.23z') + +div.main#h + div.main-rotate + div.shadows + div.shadow-5.shadow + div.shadow-4.shadow + div.shadow-1.shadow + div.shadow-2.shadow + div.shadow-3.shadow + div.light-1.shadow + div.light-2.shadow + div.light-3.shadow + div.light-4.shadow + + div.wrapper-c1 + div.wrapper-c2 + div.wrapper-a + div.a + div.a__front.face.flex + div.turbo + div.circle.flex + div.circle-a + - var n = 0 + while n < 36 + div.circle-a__side + - n++ + div.circle-a__bottom + div.circle-a__top + div.circle.flex + div.circle-b + - var n = 0 + while n < 36 + div.circle-b__side + - n++ + div.circle-b__bottom + div.circle-b__top + + div.a__back.face.flex.w1 + div.turbo-back + div.turbo-back__item + div.turbo-back__item + div.turbo-back__item + div.turbo-back__item + + div.wave-1.wave + div.wave-2.wave + div.wave-3.wave + div.wave-4.wave + div.wave-5.wave + + div.a__right.face + div.a__left.face + div.a__top.face + div.a__top-shadow.face + div.a__top-neon.face + div.a__bottom.face + div.a + div.a__front.face.flex + div.turbo + div.circle.flex + div.circle-a + - var n = 0 + while n < 36 + div.circle-a__side + - n++ + div.circle-a__bottom + div.circle-a__top + div.circle.flex + div.circle-b + - var n = 0 + while n < 36 + div.circle-b__side + - n++ + div.circle-b__bottom + div.circle-b__top + + div.a__back.face.flex.w2 + div.turbo-back + div.turbo-back__item + div.turbo-back__item + div.turbo-back__item + div.turbo-back__item + + div.wave-1.wave + div.wave-2.wave + div.wave-3.wave + div.wave-4.wave + div.wave-5.wave + div.a__right.face + div.a__left.face + div.a__top.face + div.a__top-shadow.face + div.a__top-neon.face + div.a__bottom.face + div.wings + div.wing + div.wing__front.face + div.wing__back.face + div.wing__right.face + div.wing__left.face + div.wing__top.face + div.wing__bottom.face + div.wing + div.wing__front.face + div.wing__back.face + div.wing__right.face + div.wing__left.face + div.wing__top.face + div.wing__bottom.face + + div.wrapper-b + div.b + div.b__front.face + div.b__back.face + div.b__right.face + div.b__left.face + div.b__top.face + div.b__bottom.face + div.c + div.c__front.face + div.c__front-l.face + div.c__back.face + div.c__right.face + div.c__left.face + div.c__top.face + div.c__bottom.face + div.d + div.d__right.face + div.d__left.face + div.d__top.face + div.d__top-l.face + div.d__bottom.face + div.e + div.e__front.face + div.e__front-i.flex + div.e__front-t.flex โ— โ€ฟโ—  + div.e__back.face + div.e__right.face + div.e__left.face + div.e__bottom.face + div.f + div.f__front.face + div.f__front-i.face + div.f__right.face + div.f__left.face + div.f__top.face + div.f__bottom.face + div.g + div.g__front.face + div.g__right.face + div.g__left.face + div.g__top.face + div.g__bottom.face + div.h + div.h__front.face + div.h__back.face + div.h__right.face + div.h__left.face + div.h__top.face + div.h__bottom.face + div.i + div.i__right.face + div.i__left.face \ No newline at end of file diff --git a/3d-spaceshipgsap/src/script.js b/3d-spaceshipgsap/src/script.js new file mode 100644 index 0000000..81dc1b1 --- /dev/null +++ b/3d-spaceshipgsap/src/script.js @@ -0,0 +1,124 @@ +/* + Designed by: Adam Witton + Original image: https://dribbble.com/shots/3958361-Mini-Spaceship +*/ + +gsap.registerPlugin() + +const vw = (size) => window.innerWidth * ( size/100 ) +const svg = document.querySelector('.svg-icon') +const a = document.querySelector("#audio"); +const rotate = new TimelineMax({ paused: true }) +const wings = new TimelineMax({ reversed: true }) + +const rotateSpaceFunc = () => { + rotate.paused(!rotate.paused()) + wings.reversed(!wings.reversed()) + + a.loop = true + if(a.paused) { a.play() } + else { + a.pause() + a.currentTime = 0 + } +} + +svg.addEventListener('click', rotateSpaceFunc) + +// =========================== +wings.staggerTo(".wrapper-a",.3, { + z: vw(2.125), + ease: "power1.inOut" +}) + +rotate.staggerTo(".main-rotate", 8, { + rotation: 360, + repeat: -1, + ease: 'none' +}) + +gsap.to(".wrapper-c1", { + z: vw(1.85), + duration: .75, + repeat: -1, + yoyo: true, + ease: "power1.inOut" +}) + +gsap.to(".wrapper-c2", { keyframes:[ + { + rotationX: 0, + rotationY: 0, + repeat: -1, + yoyo: true, + }, + { + rotationX: -3, + rotationY: 2, + repeat: -1, + yoyo: true, + }, + { + rotationX: 3, + rotationY: 0, + repeat: -1, + yoyo: true, + }, + { + rotationX: -1, + rotationY: 0, + repeat: -1, + yoyo: true, + } + +], ease: "sine" }) + +gsap.to(".shadows", { + transform: "scale(.935)", + opacity: .75, + duration: .75, + webkitFilter: `blur(${vw(1)})`, + repeat: -1, + yoyo: true, + ease: "power1.inOut" +}) + +gsap.to(".light-3, .light-4", { + height: vw(15), + y: vw(1), + duration: .1, + repeat: -1, + yoyo: true, + ease: "linear", +}) + +gsap.to(".w1 .wave", { + height: vw(10), + width: vw(10), + z: vw(16), + duration: .5, + repeat: -1, + stagger: 0.1, + delay: .5, + border: `${vw(.025)}vw solid rgba(255,255,255,0)`, + ease: "power1", +}) + +gsap.to(".w2 .wave", { + height: vw(10), + width: vw(10), + z: vw(16), + duration: .5, + repeat: -1, + stagger: 0.1, + delay: .5, + border: `${vw(.025)}vw solid rgba(255,255,255,0)`, + ease: "power1", +}) + +gsap.to(".e__front-t", { + opacity: 0, + repeat: -1, + duration: 2, + ease: CustomEase.create("custom", "M0,0,C0.037,0,0.014,0.938,0.05,0.948,0.353,1.03,0.737,-0.058,0.944,-0.004,0.944,-0.004,0.944,-0.004,0.944,-0.004,0.998,0.01,0.959,0.942,1,1"), +}) diff --git a/3d-spaceshipgsap/src/style.scss b/3d-spaceshipgsap/src/style.scss new file mode 100644 index 0000000..ee0f7f3 --- /dev/null +++ b/3d-spaceshipgsap/src/style.scss @@ -0,0 +1,943 @@ +$unit: 1vw; +// +$bg-1: darken(#30beff, 8); +$bg-2: darken(#259bfd, 6); +$bg-3: darken(#1d7ce8, 4); +$blue-1: #32c8fe; +$blue-2: #27a2fe; +$blue-3: #1d88fe; +$blue-4: #0f55d7; +$blue-5: #042f7f; +$black-1: #363636; +$black-2: #1a1919; +$black-3: #0a0a0a; +$neon: #6bffff; +/***********************/ +@mixin cylinder($base, $sides, $degree, $pi, $width, $color) { + display: flex; + justify-content: center; + align-items: center; + position: absolute; + + &__side{ + position: absolute; + height: ( 2 * $pi * ($base / 2) ) / $sides ; + width: $width; + background-color: darken($color, 15); + + @for $var from 1 to ($sides + 1) { + &:nth-of-type(#{$var}){ transform: rotateX( $var * $degree / $sides ) translateZ($base / 2); } + } + @for $var from 1 to 20 { + &:nth-of-type(#{$var}){ background-color: darken($color, $var * .5); } + } + @for $var from 1 to 20 { + &:nth-last-of-type(#{$var}){ background-color: darken($color, $var * .5); } + } + } + &__top, + &__bottom{ + position: absolute; + width: $base; + height: $base; + border-radius: 50%; + transform: rotateY(90deg) translateZ( $width / 2 ); + } + &__bottom{ transform: rotateY(90deg) translateZ( $width / -2 );} +} +@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 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; + + user-select: none; + -webkit-tap-highlight-color: transparent; + appearance: none; + font-family: 'Press Start 2P', cursive; +} +/***********************/ +/***********************/ +body{ + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + width: 100%; + + color: $blue-3; + font-weight: bolder; + overflow: hidden; + background-image: linear-gradient(to bottom, $bg-3, $bg-2, $bg-1, darken($bg-1, 5)); +} +.face{ position: absolute; } +.flex{ + display: flex; + justify-content: center; + align-items: center; +} +.svg-icon{ + position: absolute; + left: 50%; + bottom: 50px; + width: 50px; + height: 50px; + + z-index: 1; + opacity: .65; + transform: translateX(-50%); + cursor: pointer; + + &:hover{ opacity: .9; } + @media (max-height: 400px) { left: 50px; } + +} +.svg-icon path, +.svg-icon polygon, +.svg-icon rect { + fill: white; +} +.svg-icon circle { + stroke: white; + stroke-width: 1; +} +/***********************/ +/***********************/ +.main{ + position: absolute; + width: 24 * $unit; + height: 25 * $unit; + transform: + perspective(300 * $unit) + rotateX(60deg) + rotateZ(30deg) + translateZ(-8 * $unit) + ; + transition: transform 550ms ease-out; + + &-rotate{ + position: absolute; + width: 100%; + height: 100%; + } +} +.wrapper-c1, +.wrapper-c2{ + width: 100%; + height: 100%; + position: absolute; +} +.wrapper-a{ + position:absolute; + width: 100%; + height: 100%; + transform: translateZ(1 * $unit); + +} +.wrapper-b{ + position:absolute; + left: 50%; + width: 9.5 * $unit; + height: 100%; + transform: translateX(-50%) translateZ(2 * $unit); +} +.shadows{ + position: absolute; + width: 100%; + height: 100%; + filter: blur(.85 * $unit); +} +.shadow{ + position: absolute; + top: 0; + border-radius: 2 * $unit; + box-shadow: 0 0 2 * $unit lighten($blue-4, 10); + background-image: radial-gradient(rgba(darken($blue-5, 3), .8) 40%, rgba(darken($blue-4, 3), .8) 70%); +} +.shadow-1, +.shadow-2{ + width: 8 * $unit; + height: 17 * $unit; +} +.shadow-1{ left: -.5 * $unit; } +.shadow-2{ right: -.5 * $unit; } +.shadow-3{ + top: 4 * $unit; + left: 50%; + width: 11 * $unit; + height: 20 * $unit; + transform: translateX(-50%); +} +.shadow-4{ + top: 4 * $unit; + width: 100%; + height: 12 * $unit; +} +.shadow-5{ + top: 5 * $unit; + left: -15%; + width: 130%; + height: 4 * $unit; +} +.light-1, +.light-2, +.light-3, +.light-4,{ + top: 14 * $unit; + width: 5 * $unit; + height: 24 * $unit; + border-radius: 50%; + box-shadow: 0 0 .5 * $unit lighten($neon, 10); + background-image: linear-gradient(to bottom, rgba($neon, .185), rgba($neon, .4) 20%, rgba($neon, .25) 60%, rgba($neon, .05) ); +} +.light-1{ left: 0; } +.light-2{ right: 0; } + +.light-3, +.light-4{ + top: -10 * $unit; + width: 7 * $unit; + height: 16 * $unit; +} +.light-3{ left: 0; } +.light-4{ right: 0; } + +.wave{ + position: absolute; + border-radius: 50%; +} +// ========================== +.a{ + $width-el: 7 * $unit; + $height-el: 7 * $unit; + $depth-el: 8 * $unit; + + @include cube($width-el, $height-el, $depth-el); + width: $width-el; + height: $depth-el * 2; + position: absolute; + + &__front, + &__back{ + background-position: + 0 0, + 0 100%, + 100% 0, + 100% 100%, + 49% 0 + ; + background-size: + 10% 50%, + 10% 50%, + 10% 50%, + 10% 50%, + 82% 100% + ; + background-repeat: no-repeat; + } + &__back{ + box-shadow: inset 0 0 0 .25 * $unit $neon; + border-radius: 1.15 * $unit; + } + &__top, + &__bottom{ + &::before, + &::after{ + content: ''; + position: absolute; + width: 1.1 * $unit; + height: 100%; + } + &::before{ + left: 89%; + transform-origin: left; + transform: rotateY(45deg); + } + &::after{ + right: 89%; + transform-origin: right; + transform: rotateY(-45deg); + } + } + &__bottom{ background-image: linear-gradient(to right, transparent 10%, $blue-4 10%, darken($blue-4, 4) 90%, transparent 90% ); } + + &:nth-of-type(1){ + left: 0; + .a__front{ + background-image: + linear-gradient(-45deg, $blue-2 2.4125 * $unit, transparent 2.4125 * $unit), + linear-gradient(45deg, transparent .525 * $unit, darken($blue-3, 10) .525 * $unit, $blue-2), + linear-gradient(45deg, $blue-2 2.4125 * $unit, transparent 2.4125 * $unit), + linear-gradient(-45deg, transparent .525 * $unit, darken($blue-3, 10) .525 * $unit, $blue-2), + linear-gradient(to bottom, $blue-2 50%, darken($blue-3, 10)) + ; + } + .a__back{ + background-image: + linear-gradient(-45deg, $blue-3 2.4125 * $unit, transparent 2.4125 * $unit), + linear-gradient(45deg, transparent .525 * $unit, darken($blue-3, 5) .525 * $unit, $blue-3), + linear-gradient(45deg, $blue-3 2.4125 * $unit, transparent 2.4125 * $unit), + linear-gradient(-45deg, transparent .525 * $unit, darken($blue-3, 5) .525 * $unit, $blue-3), + linear-gradient(to bottom, $blue-3 50%, darken($blue-3, 5)) + ; + } + .a__top{ + background-image: linear-gradient(to right, transparent 10%, lighten($blue-1, 4) 10%, darken($blue-1, 4) 90%, transparent 90% ); + &::before{ background-color: lighten($blue-2, 1); } + &::after{ background-color: lighten($blue-1, 5); } + + &-shadow{ + top: 2.75 * $unit; + right: 1 * $unit; + width: 3 * $unit; + height: 9 * $unit; + + transform-origin: bottom right; + transform: skewY(-40deg) translateZ(1px); + background-image: linear-gradient(to left, rgba($blue-1, .6), rgba($neon, .4), rgba($neon, .2) ); + filter: blur(.45 * $unit); + } + + &-neon{ + position: absolute; + left: 50%; + transform: translateX(-50%); + width: .5 * $unit; + height: 100%; + + background-color: lighten($neon, 5); + box-shadow: inset 0 0 .15 * $unit $blue-5; + } + } + .a__right{ background-image: linear-gradient(to bottom, transparent 10%, darken($blue-3, 10) 10%, darken($blue-3, 16) 90%, transparent 90%); } + .a__left{ + background-image: linear-gradient(to bottom, transparent 10%, lighten($blue-1, 3) 10%, darken($blue-1, 6) 90%, transparent 90%); + + &::before{ + content: ''; + position: absolute; + bottom: 10%; + right: 7 * $unit; + width: 4 * $unit; + height: 2.5 * $unit; + + transform-origin: top left; + transform: skewX(20deg); + background-image: linear-gradient(to bottom, darken($blue-2, 2), rgba($blue-2,.2)); + filter: blur(.15 * $unit); + } + } + .a__bottom{ + &::before{ background-color: $blue-3; } + &::after{ background-color: $blue-4; } + } + } + &:nth-of-type(2){ + right: 0; + .a__front{ + background-image: + linear-gradient(-45deg, darken($blue-2, 6) 2.4125 * $unit, transparent 2.4125 * $unit), + linear-gradient(45deg, transparent .525 * $unit, darken($blue-3, 14) .525 * $unit, $blue-2), + linear-gradient(45deg, darken($blue-2, 6) 2.4125 * $unit, transparent 2.4125 * $unit), + linear-gradient(-45deg, transparent .525 * $unit, darken($blue-3, 14) .525 * $unit, darken($blue-2, 6)), + linear-gradient(to bottom, darken($blue-2, 6) 50%, darken($blue-3, 14)) + ; + } + .a__back{ + background-image: + linear-gradient(-45deg, darken($blue-3, 3) 2.4125 * $unit, transparent 2.4125 * $unit), + linear-gradient(45deg, transparent .525 * $unit, darken($blue-3, 6) .525 * $unit, $blue-3), + linear-gradient(45deg, darken($blue-3, 3) 2.4125 * $unit, transparent 2.4125 * $unit), + linear-gradient(-45deg, transparent .525 * $unit, darken($blue-3, 6) .525 * $unit, $blue-3), + linear-gradient(to bottom, darken($blue-3, 3) 50%, darken($blue-3, 6)) + ; + } + .a__top{ + background-image: + linear-gradient(60deg, rgba($blue-2, .8), rgba($blue-2, .45) 48%, transparent 50% ), + linear-gradient(to right, transparent 10%, $blue-1 10%, darken($blue-1, 4) 90%, transparent 90% ) + ; + background-size: + 80% 100%, + 100% 100% + ; + background-position: + 52% 0, + 0 0 + ; + background-repeat: no-repeat; + + &::before{ background-image: linear-gradient(to right, $blue-2, $blue-3); } + &::after{ background-image: linear-gradient(to left, darken($blue-1, 5), $blue-3); } + + &-shadow{ + top: 2.75 * $unit; + left: 1.5 * $unit; + width: 3 * $unit; + height: 9 * $unit; + + transform-origin: bottom left; + transform: skewY(40deg) translateZ(1px); + background-image: linear-gradient(to right, rgba($neon, .1), rgba($neon, .315), rgba($neon, .215) ); + filter: blur(.5 * $unit); + } + &-neon{ + position: absolute; + left: 50%; + transform: translateX(-50%); + width: .5 * $unit; + height: 100%; + + background-color: $neon; + box-shadow: inset 0 0 .15 * $unit $blue-5; + } + } + .a__right{ + background-image: linear-gradient(to bottom, transparent 10%, darken($blue-3, 3) 10%, darken($blue-3, 13) 90%, transparent 90%); + &::before{ + content: ''; + position: absolute; + bottom: 10%; + left: 7 * $unit; + + width: 4 * $unit; + height: 2.5 * $unit; + transform-origin: top left; + transform: skewX(-20deg); + background-image: linear-gradient(to bottom, rgba($blue-4,.9), rgba($blue-4,.2)); + filter: blur(.15 * $unit); + } + } + .a__left{ background-image: linear-gradient(to bottom, transparent 10%, darken($blue-3, 2) 10%, darken($blue-3, 15) 90%, transparent 90%); } + .a__bottom{ + &::before{ background-color: $blue-4; } + &::after{ background-color: $blue-4; } + } + } +} + +.b{ + $width-el: 9.5 * $unit; + $height-el: 10 * $unit; + $depth-el: 5 * $unit; + + @include cube($width-el, $height-el, $depth-el); + width: $width-el; + height: $depth-el * 2; + position: absolute; + top: 2.1 * $unit; + + &__front{ background-color: $blue-5; } + &__back{ + background-image: linear-gradient(to bottom, lighten($blue-3, 4), $blue-3 20% ,darken($blue-3, 12)); + + &::before{ + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + padding: .75 * $unit; + + background-image: + radial-gradient(rgba($neon, .2) 20%, transparent 21%), + radial-gradient(rgba($neon, .2) 20%, transparent 21%) + ; + background-size: .75 * $unit .75 * $unit; + background-repeat: repeat; + background-clip: content-box; + } + } + &__left, + &__right{ + padding: .6 * $unit; + &::before{ + content: ''; + display: block; + width: 100%; + height: 2 * $unit; + } + } + &__left{ + background-image: linear-gradient(to bottom, lighten($blue-1, 4), $blue-1 30%, $blue-4 ); + + &::before{ + background-image: linear-gradient(to bottom, lighten($neon, 5), $neon); + box-shadow: + 0 0 .95 * $unit lighten($neon, 5), + inset 0 0 .5 * $unit lighten($neon, 5); + } + } + &__right{ + background-image: linear-gradient(to bottom, $blue-3, darken($blue-3, 5) 30%, darken($blue-3, 20) ); + + &::before{ + background-image: linear-gradient(to top, darken($neon, 5), $neon); + box-shadow: + 0 0 .95 * $unit darken($neon, 5), + inset 0 0 .5 * $unit darken($neon, 10); + } + } + &__top{ background-image: linear-gradient(to right, darken($blue-1, 1) , darken($blue-1, 10) ); } + &__bottom{ background-color: $blue-4; } +} +.c{ + $width-el: 9.5 * $unit; + $height-el: 10 * $unit; + $depth-el: 2.5 * $unit; + + @include cube($width-el, $height-el, $depth-el); + width: $width-el; + height: $depth-el * 2; + position: absolute; + top: 12.25 * $unit; + + &__front{ + background-color: $blue-2; + + &-l{ + position: absolute; + top: 0; + width: 100%; + height: 100%; + background-image: linear-gradient(to bottom, transparent 15%, rgba($neon, .3) 15%, rgba($neon, .4)); + } + } + &__back{ background-color: $blue-5; } + &__left{ background-image: linear-gradient(to bottom, lighten($blue-1, 4), $blue-1 30%, $blue-4 );} + &__right{ background-image: linear-gradient(to bottom, $blue-3, darken($blue-3, 5) 30%, darken($blue-3, 20) ); } + &__top{ background-image: linear-gradient(to right, darken($blue-1, 1) , darken($blue-1, 10) ); } + &__bottom{ background-color: $blue-4; } +} + +.d{ + $width-el: 9.5 * $unit; + $height-el: .6 * $unit; + $depth-el: 2.875 * $unit; + + @include cube($width-el, $height-el, $depth-el); + width: $width-el; + height: $depth-el * 2; + position: absolute; + + &__left{ background-image: linear-gradient(to right, darken($blue-3, 5), $blue-1); } + &__right{ background-image: linear-gradient(to left, darken($blue-3, 10), $blue-3 ); } + &__top{ + background-image: linear-gradient(to bottom, darken($blue-3, 14), darken($blue-3, 8) 40%, darken($blue-3, 3)); + + &-l{ + position: absolute; + top: 0; + width: 100%; + height: 100%; + background-image: linear-gradient(to right, rgba($neon, .3), rgba($neon, .4)); + } + } + &__bottom{ background-color: $blue-4; } + + bottom: 2 * $unit; +} +.e{ + $width-el: 9.5 * $unit; + $height-el: 8.5 * $unit; + $depth-el: .3 * $unit; + + @include cube($width-el, $height-el, $depth-el); + width: $width-el; + height: $depth-el * 2; + position: absolute; + bottom: 1.4 * $unit; + + &__front{ + background-color: $blue-2; + padding: .6 * $unit; + + &-i{ + width: 100%; + height: 2 * $unit; + + background-image: linear-gradient(to bottom, $neon, darken($neon, 2)); + box-shadow: + 0 0 .95 * $unit darken($neon, 5), + inset 0 0 .25 * $unit darken($neon, 10); + overflow: hidden; + + &::before{ + content: ''; + position: absolute; + width: 3 * $unit; + height: 100%; + left: 0; + + transform-origin: top left; + transform: skewX(20deg); + background-image: linear-gradient(to right, rgba($neon, .075), transparent) ; + filter: blur(.2 * $unit); + } + } + &-t{ + position: absolute; + width: 100%; + height: 100%; + font-size: 1 * $unit; + } + } + &__back{ background-color: $blue-1; } + &__left{ background-image: linear-gradient(to bottom, lighten($blue-1, 4), $blue-1 ); } + &__right{ background-color: $blue-3; } + &__bottom{ background-color: $blue-4; } +} +.f{ + $width-el: 9.5 * $unit; + $height-el: .6 * $unit; + $depth-el: 3.15 * $unit; + + @include cube($width-el, $height-el, $depth-el); + width: $width-el; + height: $depth-el * 2; + position: absolute; + + bottom: 1.5 * $unit; + transform: translateZ(8.5 * $unit); + + &__front{ + &-i{ + position: absolute; + bottom: 0; + + width: 100%; + height: 2.8 * $unit; + transform-origin: bottom; + transform: rotateX(78deg); + background-image: linear-gradient(to right, darken($blue-1, 1) , darken($blue-1, 10) ); + + } + } + &__left{ + background-image: linear-gradient(12deg, lighten($blue-1, 4) 70%, transparent 70%); + &::before{ + content: ''; + position: absolute; + top: 100%; + right: .5 * $unit; + width: 40%; + height: 200%; + background-image: linear-gradient(12deg, transparent 70%, lighten($blue-1, 5) 70%); + } + } + &__right{ + background-image: linear-gradient(-12deg, $blue-3 70%, transparent 70%); + &::before{ + content: ''; + position: absolute; + top: 100%; + left: .5 * $unit; + width: 40%; + height: 200%; + background-image: linear-gradient(-12deg, transparent 70%, $blue-3 70%); + } + } + &__top{ + background-image: linear-gradient(to bottom, $blue-1 60%, transparent 60%); + + &::after{ + content: ''; + position: absolute; + top: 0; + width: 100%; + height: 60%; + background-image: linear-gradient(to right, darken($blue-1, 1) , darken($blue-1, 10) ); + } + } + &__bottom{ background-color: $blue-1; } +} + +.g{ + $width-el: 9.5 * $unit; + $height-el: 5 * $unit; + $depth-el: .5 * $unit; + + @include cube($width-el, $height-el, $depth-el); + width: $width-el; + height: $depth-el * 2; + position: absolute; + bottom: .5 * $unit; + + &__front{ + background-image: linear-gradient(to top, darken($blue-2, 5) 3.9 * $unit, transparent 3.9 * $unit); + + &::before{ + content: ''; + position: absolute; + bottom: 1.75 * $unit; + height: .5 * $unit; + width: 100%; + background-color: $neon; + box-shadow: + inset 0 0 .15 * $unit $blue-5, + 0 0 .15 * $unit $neon + ; + } + + } + &__left{ background-image: linear-gradient(45deg, $blue-1 3.55 * $unit, transparent 3.55 * $unit); } + &__right{ background-image: linear-gradient(-45deg, $blue-3 3.55 * $unit, transparent 3.55 * $unit); } + &__top{ + &::before{ + content: ''; + display: block; + height: 1.5 * $unit; + transform-origin: top left; + transform: rotateX(-46deg); + background-image: linear-gradient(to right, $blue-1, darken($blue-1, 3)); + } + + } + &__bottom{ background-color: $blue-4; } +} +.h{ + $width-el: .425 * $unit; + $height-el: 1 * $unit; + $depth-el: 6.35 * $unit; + + @include cube($width-el, $height-el, $depth-el); + width: $width-el; + height: $depth-el * 2; + + position: absolute; + transform: translateX(-50%) translateZ(10.1 * $unit); + left: 50%; + bottom: 9 * $unit; + + &__front{ background-color: $blue-2; } + &__back{ background-image: linear-gradient(to bottom, $blue-3, darken($blue-3, 5) 80%); } + &__left{ background-image: linear-gradient(to bottom, lighten($blue-1, 5), lighten($blue-1, 2) ); } + &__right{ background-image: linear-gradient(to bottom, $blue-3, darken($blue-3, 4)); } + &__top{ + background-color: $neon; + box-shadow: 0 0 .5 * $unit lighten($neon, 5); + } + &__bottom{ + background-color: $blue-3; + + &::before{ + content: ''; + position: absolute; + right: 0%; + width: 2.25 * $unit; + height: 100%; + + background-image: linear-gradient(to right, rgba($blue-2, .5) 10%, darken($blue-2, 10)); + transform-origin: right bottom; + transform: skewY(-20deg); + filter: blur(.2 * $unit); + } + } +} +.i{ + $width-el: 9 * $unit; + $height-el: 8 * $unit; + $depth-el: 2.85 * $unit; + + @include cube($width-el, $height-el, $depth-el); + width: $width-el; + height: $depth-el * 2; + position: absolute; + bottom: 2 * $unit; + left: .25 * $unit; + transform: translateZ(.6 * $unit); + + + &__left{ + background-image: linear-gradient(to bottom, lighten($neon, 5), $neon); + box-shadow:inset 0 0 .5 * $unit lighten($neon, 5); + } + &__right{ + background-image: linear-gradient(to top, darken($neon, 10), $neon); + box-shadow: inset 0 0 .5 * $unit darken($neon, 10); + } +} +.wing{ + $width-el: 4 * $unit; + $height-el: .5 * $unit; + $depth-el: 2 * $unit; + + @include cube($width-el, $height-el, $depth-el); + width: $width-el; + height: $depth-el * 2; + + position: absolute; + top: 5 * $unit; + + transform: translateZ(3 * $unit); + + &:nth-of-type(1){ + left: 100%; + .wing__front{ + &::before{ + content: ''; + position: absolute; + left: 0; + width: 145%; + height: 100%; + transform-origin: bottom left; + transform: rotateY(45deg); + background-image: linear-gradient(to right, $blue-3, $blue-2); + } + } + .wing__back{ background-image: linear-gradient(to bottom, darken($blue-3, 2) 50%,darken($blue-3, 10)); } + .wing__left{ background-image: linear-gradient(to bottom, lighten($blue-1, 4), $blue-1 ); } + .wing__top{ background-image: linear-gradient(-45deg, transparent 50%, $blue-1 50%, darken($blue-2, 1) ); } + .wing__bottom{ background-image: linear-gradient(45deg, transparent 50%, $blue-4 50%); } + + } + &:nth-of-type(2){ + right: 100%; + .wing__front{ + + &::before{ + content: ''; + position: absolute; + right: 0; + width: 145%; + height: 100%; + transform-origin: bottom right; + transform: rotateY(-45deg); + background-image: linear-gradient(to right, $blue-2, darken($blue-2, 5)); + } + } + .wing__back{ background-image: linear-gradient(to bottom, darken($blue-3, 2) 50%,darken($blue-3, 10));} + // .wing__left{ background-image: linear-gradient(to bottom, lighten($blue-1, 4), $blue-1 ); } + .wing__right{ background-image: linear-gradient(to bottom, $blue-3, darken($blue-3, 4)); } + .wing__top{ background-image: linear-gradient(45deg, transparent 50%, lighten($blue-1, 3) 50%, $blue-1 ); } + .wing__bottom{ background-image: linear-gradient(-45deg, transparent 50%, $blue-4 50%); } + } +} +/*---------------------*/ +.turbo{ + position: absolute; + width: 5.5 * $unit; + height: 5.5 * $unit; +} +.circle{ + $sides: 36; + $degree: 360deg; + $width: 1 * $unit; + + width: 5.5 * $unit; + height: 5.5 * $unit; + position: absolute; + + &-a{ + $base: 5.5 * $unit; + $pi: 3.5; + + position: absolute; + width: $width; + height: $base; + transform: rotateY(90deg) translateX(-50%); + + @include cylinder($base, $sides, $degree, $pi, $width, lighten($black-2, 4)); + &__bottom{ + border: .115 * $unit solid $neon; + background-image: radial-gradient(circle, transparent 50%, $black-3 50%); + + } + &__top{ + outline: .2 * $unit solid rgba($blue-3, .9); + box-shadow: 0 0 1 * $unit darken($neon, 10); + } + } + &-b{ + $base: 4 * $unit; + $pi: 3.5; + + position: absolute; + width: $width; + height: $base; + transform: rotateY(90deg) translateX(-50%); + + @include cylinder($base, $sides, $degree, $pi, $width, darken($neon, 40)); + &__bottom{ + background-image: radial-gradient(circle, $neon 30%, darken($neon, 20)); + box-shadow: + inset 0 0 1 * $unit .25 * $unit lighten($neon, 15), + 0 0 1 * $unit .5 * $unit $blue-5 + ; + transform: rotateY(90deg) translateZ( .45 * $unit ); + } + } +} +.turbo-back{ + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-rows: 1fr 1fr; + grid-gap: .25 * $unit; + justify-items: center; + align-items: center; + + width: 85%; + height: 85%; + + &__item{ + width: 2.5 * $unit; + height: 2.5 * $unit; + + background-color: $neon; + border-radius: 50%; + box-shadow: + inset 0 0 .5 * $unit .125 * $unit rgba($black-1, .25), + 0 0 .5 * $unit .25 * $unit rgba($blue-4, .125), + 0 0 .5 * $unit darken($neon, 10) + + ; + } +} diff --git a/3d-xylophone/README.markdown b/3d-xylophone/README.markdown new file mode 100644 index 0000000..e8afb6b --- /dev/null +++ b/3d-xylophone/README.markdown @@ -0,0 +1,5 @@ +# 3D Xylophone + +A Pen created on CodePen.io. Original URL: [https://codepen.io/creativeocean/pen/gOPZLoN](https://codepen.io/creativeocean/pen/gOPZLoN). + + diff --git a/3d-xylophone/dist/index.html b/3d-xylophone/dist/index.html new file mode 100644 index 0000000..7419b5a --- /dev/null +++ b/3d-xylophone/dist/index.html @@ -0,0 +1,20 @@ + + + + + CodePen - 3D Xylophone + + + + + + +
+
+ +
+ + + + + diff --git a/3d-xylophone/dist/script.js b/3d-xylophone/dist/script.js new file mode 100644 index 0000000..a4434ab --- /dev/null +++ b/3d-xylophone/dist/script.js @@ -0,0 +1,68 @@ +let muted = true, + n = 8; + +gsap.timeline() + .set('#container', {perspective:800}) + .set('#soundBtn', {width:16, height:32, left:'50%', top:'100%', x:-8, y:-40, cursor:'pointer', opacity:0.5}); + + +for (let i=0; i'hsl('+(i/n*200)+',100%,50%)' + }); + + gsap.fromTo(b, { + scaleY:0, + opacity:0, + zIndex:-i, + rotationY:90+i/n*205, + transformOrigin:String("50% 50% -900%") + },{ + scaleY:1, + opacity:0.7, + duration:1, + delay:1-0.5*(i/n), + ease:'elastic' + }) + + b.onmouseenter = (e)=>{ + if (!muted){ + a.currentTime=0; + a.volume=0.15; + a.play(); + } + gsap.to(b, {duration:0.3, opacity:1, scaleY:1.2, ease:'back.out(5)'}); + } + + b.onmouseleave = (e)=>{ + gsap.to(b, {duration:0.4, opacity:0.7, scaleY:1}); + } +} + +window.onmousemove = (e)=>{ + gsap.to('.box', {duration:0.6, rotationY:(i)=>45+i/n*205+90*(e.clientX/window.innerWidth) }); +} + + +document.getElementById('soundBtn').onclick = (e)=>{ + gsap.timeline() + .to('#soundBtn', {width:()=>(muted)?16:32, duration:0.15, ease:'power3.in'}, 0) + .to('#soundBtn', {x:()=>(muted)?-8:-16, duration:0.3, ease:'back.out(2)'}, 0) + muted=!muted; +} \ No newline at end of file diff --git a/3d-xylophone/dist/style.css b/3d-xylophone/dist/style.css new file mode 100644 index 0000000..e6b2948 --- /dev/null +++ b/3d-xylophone/dist/style.css @@ -0,0 +1,12 @@ +body, html, #container { + width: 100%; + height: 100%; + overflow:hidden; + background:#000; +} + +div, img { + position:absolute; + user-select: none; + overflow:hidden; +} \ No newline at end of file diff --git a/3d-xylophone/license.txt b/3d-xylophone/license.txt new file mode 100644 index 0000000..bd8be23 --- /dev/null +++ b/3d-xylophone/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Tom Miller (https://codepen.io/creativeocean/pen/gOPZLoN) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/3d-xylophone/src/index.html b/3d-xylophone/src/index.html new file mode 100644 index 0000000..2255ec8 --- /dev/null +++ b/3d-xylophone/src/index.html @@ -0,0 +1,4 @@ +
+
+ +
\ No newline at end of file diff --git a/3d-xylophone/src/script.js b/3d-xylophone/src/script.js new file mode 100644 index 0000000..a4434ab --- /dev/null +++ b/3d-xylophone/src/script.js @@ -0,0 +1,68 @@ +let muted = true, + n = 8; + +gsap.timeline() + .set('#container', {perspective:800}) + .set('#soundBtn', {width:16, height:32, left:'50%', top:'100%', x:-8, y:-40, cursor:'pointer', opacity:0.5}); + + +for (let i=0; i'hsl('+(i/n*200)+',100%,50%)' + }); + + gsap.fromTo(b, { + scaleY:0, + opacity:0, + zIndex:-i, + rotationY:90+i/n*205, + transformOrigin:String("50% 50% -900%") + },{ + scaleY:1, + opacity:0.7, + duration:1, + delay:1-0.5*(i/n), + ease:'elastic' + }) + + b.onmouseenter = (e)=>{ + if (!muted){ + a.currentTime=0; + a.volume=0.15; + a.play(); + } + gsap.to(b, {duration:0.3, opacity:1, scaleY:1.2, ease:'back.out(5)'}); + } + + b.onmouseleave = (e)=>{ + gsap.to(b, {duration:0.4, opacity:0.7, scaleY:1}); + } +} + +window.onmousemove = (e)=>{ + gsap.to('.box', {duration:0.6, rotationY:(i)=>45+i/n*205+90*(e.clientX/window.innerWidth) }); +} + + +document.getElementById('soundBtn').onclick = (e)=>{ + gsap.timeline() + .to('#soundBtn', {width:()=>(muted)?16:32, duration:0.15, ease:'power3.in'}, 0) + .to('#soundBtn', {x:()=>(muted)?-8:-16, duration:0.3, ease:'back.out(2)'}, 0) + muted=!muted; +} \ No newline at end of file diff --git a/3d-xylophone/src/style.css b/3d-xylophone/src/style.css new file mode 100644 index 0000000..e6b2948 --- /dev/null +++ b/3d-xylophone/src/style.css @@ -0,0 +1,12 @@ +body, html, #container { + width: 100%; + height: 100%; + overflow:hidden; + background:#000; +} + +div, img { + position:absolute; + user-select: none; + overflow:hidden; +} \ No newline at end of file diff --git a/4-big-cubes-animation-with-svg-use-and-css-variables/README.markdown b/4-big-cubes-animation-with-svg-use-and-css-variables/README.markdown new file mode 100644 index 0000000..0bec8d9 --- /dev/null +++ b/4-big-cubes-animation-with-svg-use-and-css-variables/README.markdown @@ -0,0 +1,5 @@ +# 4. Big cubes animation with SVG and CSS variables + +A Pen created on CodePen.io. Original URL: [https://codepen.io/marianab/pen/KKKYdxE](https://codepen.io/marianab/pen/KKKYdxE). + +SVG cube reusing content with SVG , animation and CSS variables diff --git a/4-big-cubes-animation-with-svg-use-and-css-variables/dist/index.html b/4-big-cubes-animation-with-svg-use-and-css-variables/dist/index.html new file mode 100644 index 0000000..8988ead --- /dev/null +++ b/4-big-cubes-animation-with-svg-use-and-css-variables/dist/index.html @@ -0,0 +1,94 @@ + + + + + CodePen - 4. Big cubes animation with SVG <use> and CSS variables + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

hover over me

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

hover over me

+ + + + diff --git a/4-big-cubes-animation-with-svg-use-and-css-variables/dist/style.css b/4-big-cubes-animation-with-svg-use-and-css-variables/dist/style.css new file mode 100644 index 0000000..0c59c4d --- /dev/null +++ b/4-big-cubes-animation-with-svg-use-and-css-variables/dist/style.css @@ -0,0 +1,54 @@ +body { + font-family: "Roboto", sans-serif; + margin: 0 auto; + max-width: 500px; +} + +.cube-unit { + fill-opacity: 0.9; + stroke-miterlimit: 0; +} + +.blue-cube { + --mainColor: #009CDE; + --strokeColor: #0079ad; + --lightColor: #00affa; + --darkColor: #008bc7; +} + +.pink-cube { + --mainColor: #de0063; + --strokeColor: #ad004e; + --lightColor: #fa0070; + --darkColor: #c7005a; +} + +@keyframes moveX { + to { + transform: translateX(var(--translate, 35px)); + } +} +@keyframes moveY { + to { + transform: translateY(var(--translate, -35px)); + } +} +.m-left, .m-right { + animation: 2s moveX alternate infinite paused; +} + +.m-up, .m-down { + animation: 2s moveY alternate infinite paused; +} + +.m-left { + --translate: -50px; +} + +.m-right { + --translate: 50px; +} + +svg:hover * { + animation-play-state: running; +} \ No newline at end of file diff --git a/4-big-cubes-animation-with-svg-use-and-css-variables/license.txt b/4-big-cubes-animation-with-svg-use-and-css-variables/license.txt new file mode 100644 index 0000000..646a056 --- /dev/null +++ b/4-big-cubes-animation-with-svg-use-and-css-variables/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Mariana (https://codepen.io/marianab/pen/KKKYdxE) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/4-big-cubes-animation-with-svg-use-and-css-variables/src/index.html b/4-big-cubes-animation-with-svg-use-and-css-variables/src/index.html new file mode 100644 index 0000000..659df0c --- /dev/null +++ b/4-big-cubes-animation-with-svg-use-and-css-variables/src/index.html @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

hover over me

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

hover over me

\ No newline at end of file diff --git a/4-big-cubes-animation-with-svg-use-and-css-variables/src/style.scss b/4-big-cubes-animation-with-svg-use-and-css-variables/src/style.scss new file mode 100644 index 0000000..b0fa748 --- /dev/null +++ b/4-big-cubes-animation-with-svg-use-and-css-variables/src/style.scss @@ -0,0 +1,36 @@ +body { font-family: 'Roboto', sans-serif; margin: 0 auto; max-width: 500px; } + +.cube-unit { + fill-opacity: .9; + stroke-miterlimit:0; +} +.blue-cube { + --mainColor: #009CDE; + --strokeColor: #0079ad; + --lightColor: #00affa; + --darkColor: #008bc7; +} +.pink-cube { + --mainColor: #de0063; + --strokeColor: #ad004e; + --lightColor: #fa0070; + --darkColor: #c7005a; +} + +@keyframes moveX { + to { transform: translateX(var(--translate, 35px)); } +} +@keyframes moveY { + to { transform: translateY(var(--translate, -35px)); } +} + +.m-left, .m-right { + animation: 2s moveX alternate infinite paused; +} +.m-up, .m-down { + animation: 2s moveY alternate infinite paused; +} +.m-left { --translate: -50px; } +.m-right { --translate: 50px; } + +svg:hover * { animation-play-state: running; } \ No newline at end of file diff --git a/60-gradient-morphing-blob/README.markdown b/60-gradient-morphing-blob/README.markdown new file mode 100644 index 0000000..823356a --- /dev/null +++ b/60-gradient-morphing-blob/README.markdown @@ -0,0 +1,5 @@ +# 60ยฐ Gradient Morphing Blob + +A Pen created on CodePen.io. Original URL: [https://codepen.io/georgedoescode/pen/oNzamjV](https://codepen.io/georgedoescode/pen/oNzamjV). + +I made this colorful blob after being inspired by Adam Argyle's https://twitter.com/argyleink/status/1199043350008958976 60 degree gradient trick. The shape is made using Catmull-Rom splines, the movement and color modulation is all based on Simplex noise โœจ diff --git a/60-gradient-morphing-blob/dist/index.html b/60-gradient-morphing-blob/dist/index.html new file mode 100644 index 0000000..739d2fa --- /dev/null +++ b/60-gradient-morphing-blob/dist/index.html @@ -0,0 +1,25 @@ + + + + + CodePen - 60ยฐ Gradient Morphing Blob + + + + + + + + + + + + + + +

Hover!

+ + + + + diff --git a/60-gradient-morphing-blob/dist/script.js b/60-gradient-morphing-blob/dist/script.js new file mode 100644 index 0000000..95e87a1 --- /dev/null +++ b/60-gradient-morphing-blob/dist/script.js @@ -0,0 +1,89 @@ +import gsap from "https://cdn.skypack.dev/gsap@3.6.0"; +import { spline } from "https://cdn.skypack.dev/@georgedoescode/spline@1.0.1"; +import SimplexNoise from "https://cdn.skypack.dev/simplex-noise@2.4.0"; + +const simplex = new SimplexNoise(); + +const path = document.querySelector("path"); +const root = document.documentElement; + +let hueNoiseOffset = 0; + +let noiseStep = 0.005; + +const points = createPoints(); + +(function animate() { + path.setAttribute("d", spline(points, 1, true)); + + for (let i = 0; i < points.length; i++) { + const point = points[i]; + + const nX = noise(point.noiseOffsetX, point.noiseOffsetX); + const nY = noise(point.noiseOffsetY, point.noiseOffsetX); + const x = map(nX, -1, 1, point.originX - 20, point.originX + 20); + const y = map(nY, -1, 1, point.originY - 20, point.originY + 20); + + point.x = x; + point.y = y; + + point.noiseOffsetX += noiseStep; + point.noiseOffsetY += noiseStep; + } + + const hueNoise = noise(hueNoiseOffset, hueNoiseOffset); + const hue = map(hueNoise, -1, 1, 0, 360); + + root.style.setProperty("--startColor", `hsl(${hue}, 100%, 75%)`); + root.style.setProperty("--startColor", `hsl(${hue + 60}, 100%, 75%)`); + document.body.style.background = `hsl(${hue + 60}, 75%, 5%)`; + + hueNoiseOffset += noiseStep / 6; + + requestAnimationFrame(animate); +})(); + +function random(min, max) { + return Math.random() * (max - min) + min; +} + +function map(n, start1, end1, start2, end2) { + return ((n - start1) / (end1 - start1)) * (end2 - start2) + start2; +} + +function noise(x, y) { + return simplex.noise2D(x, y); +} + +function createPoints() { + const points = []; + const numPoints = 6; + const angleStep = (Math.PI * 2) / numPoints; + const rad = 75; + + for (let i = 1; i <= numPoints; i++) { + const theta = i * angleStep; + + const x = 100 + Math.cos(theta) * rad; + const y = 100 + Math.sin(theta) * rad; + + points.push({ + x: x, + y: y, + originX: x, + originY: y, + noiseOffsetX: random(0, 1000), + noiseOffsetY: random(0, 1000) + }); + } + + return points; +} + +document.querySelector("path").addEventListener("mouseover", () => { + noiseStep = 0.01; +}); + +document.querySelector("path").addEventListener("mouseleave", () => { + noiseStep = 0.005; +}); \ No newline at end of file diff --git a/60-gradient-morphing-blob/dist/style.css b/60-gradient-morphing-blob/dist/style.css new file mode 100644 index 0000000..b7c2565 --- /dev/null +++ b/60-gradient-morphing-blob/dist/style.css @@ -0,0 +1,37 @@ +:root { + --startColor: hsl(0, 100%, 75%); + --stopColor: hsl(0, 100%, 75%); +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + height: 100vh; + display: grid; + place-items: center; +} + +svg { + width: 90vmin; + height: 90vmin; +} + +path { + cursor: pointer; +} + +p { + position: absolute; + font-size: 1.125rem; + font-weight: 500; + bottom: 1rem; + right: 1rem; + color: #fff; + font-family: system-ui, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} \ No newline at end of file diff --git a/60-gradient-morphing-blob/license.txt b/60-gradient-morphing-blob/license.txt new file mode 100644 index 0000000..d8d9984 --- /dev/null +++ b/60-gradient-morphing-blob/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by George Francis (https://codepen.io/georgedoescode/pen/oNzamjV) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/60-gradient-morphing-blob/src/index.html b/60-gradient-morphing-blob/src/index.html new file mode 100644 index 0000000..eb1da29 --- /dev/null +++ b/60-gradient-morphing-blob/src/index.html @@ -0,0 +1,10 @@ + + + + + + + + + +

Hover!

\ No newline at end of file diff --git a/60-gradient-morphing-blob/src/script.js b/60-gradient-morphing-blob/src/script.js new file mode 100644 index 0000000..85d2a10 --- /dev/null +++ b/60-gradient-morphing-blob/src/script.js @@ -0,0 +1,89 @@ +import gsap from "https://cdn.skypack.dev/gsap@3.6.0"; +import { spline } from "https://cdn.skypack.dev/@georgedoescode/spline@1.0.1"; +import SimplexNoise from "https://cdn.skypack.dev/simplex-noise@2.4.0"; + +const simplex = new SimplexNoise(); + +const path = document.querySelector("path"); +const root = document.documentElement; + +let hueNoiseOffset = 0; + +let noiseStep = 0.005; + +const points = createPoints(); + +(function animate() { + path.setAttribute("d", spline(points, 1, true)); + + for (let i = 0; i < points.length; i++) { + const point = points[i]; + + const nX = noise(point.noiseOffsetX, point.noiseOffsetX); + const nY = noise(point.noiseOffsetY, point.noiseOffsetX); + const x = map(nX, -1, 1, point.originX - 20, point.originX + 20); + const y = map(nY, -1, 1, point.originY - 20, point.originY + 20); + + point.x = x; + point.y = y; + + point.noiseOffsetX += noiseStep; + point.noiseOffsetY += noiseStep; + } + + const hueNoise = noise(hueNoiseOffset, hueNoiseOffset); + const hue = map(hueNoise, -1, 1, 0, 360); + + root.style.setProperty("--startColor", `hsl(${hue}, 100%, 75%)`); + root.style.setProperty("--startColor", `hsl(${hue + 60}, 100%, 75%)`); + document.body.style.background = `hsl(${hue + 60}, 75%, 5%)`; + + hueNoiseOffset += noiseStep / 6; + + requestAnimationFrame(animate); +})(); + +function random(min, max) { + return Math.random() * (max - min) + min; +} + +function map(n, start1, end1, start2, end2) { + return ((n - start1) / (end1 - start1)) * (end2 - start2) + start2; +} + +function noise(x, y) { + return simplex.noise2D(x, y); +} + +function createPoints() { + const points = []; + const numPoints = 6; + const angleStep = (Math.PI * 2) / numPoints; + const rad = 75; + + for (let i = 1; i <= numPoints; i++) { + const theta = i * angleStep; + + const x = 100 + Math.cos(theta) * rad; + const y = 100 + Math.sin(theta) * rad; + + points.push({ + x: x, + y: y, + originX: x, + originY: y, + noiseOffsetX: random(0, 1000), + noiseOffsetY: random(0, 1000) + }); + } + + return points; +} + +document.querySelector("path").addEventListener("mouseover", () => { + noiseStep = 0.01; +}); + +document.querySelector("path").addEventListener("mouseleave", () => { + noiseStep = 0.005; +}); diff --git a/60-gradient-morphing-blob/src/style.css b/60-gradient-morphing-blob/src/style.css new file mode 100644 index 0000000..0dff82f --- /dev/null +++ b/60-gradient-morphing-blob/src/style.css @@ -0,0 +1,37 @@ +:root { + --startColor: hsl(0, 100%, 75%); + --stopColor: hsl(0, 100%, 75%); +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + height: 100vh; + display: grid; + place-items: center; +} + +svg { + width: 90vmin; + height: 90vmin; +} + +path { + cursor: pointer; +} + +p { + position: absolute; + font-size: 1.125rem; + font-weight: 500; + bottom: 1rem; + right: 1rem; + color: #fff; + font-family: system-ui, sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/README.markdown b/80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/README.markdown new file mode 100644 index 0000000..4bcda12 --- /dev/null +++ b/80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/README.markdown @@ -0,0 +1,4 @@ +# 80's / 90's Movie UI's recreated in CSS #1 - Demolition Man 1993 + _A Pen created at CodePen.io. Original URL: [https://codepen.io/jcoulterdesign/pen/qYJWyq](https://codepen.io/jcoulterdesign/pen/qYJWyq). + + Today 80's / 90's movie recreated UI piece in CSS is taken from Demolition Man 1993. During the scene where they use a computer to find Simon around the 20 minute mark. \ No newline at end of file diff --git a/80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/dist/index.html b/80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/dist/index.html new file mode 100644 index 0000000..d84e166 --- /dev/null +++ b/80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/dist/index.html @@ -0,0 +1,369 @@ + + + + + 80's / 90's Movie UI's recreated in CSS #1 - Demolition Man 1993 + + + + +
+
+ + + + + + +
+
+ +

80's / 90's Inspired UI's in CSS

+

Demolition Man 1993

+ +

A recreation of the Demolition Man 3D Hexagon Foldout menu in CSS only. Nice and cheesy. Not an exact replica for sure, perspectives are off slightly, but still looks good!

+
+
+
+
+ +

publicinform

+
+
+
+
+
+
+

publicinform

+
+
+
+
+
+
+
+

traffic control

+
+
+
+
+
+
+
+

cryoprison

+
+
+
+
+
+
+
+

administration

+
+
+
+
+
+
+
+

morality div

+
+
+
+
+
+
+
+

metro patrol

+
+
+
+
+
+ +

traffic control

+
+
+
+
+
+
+

publicinform

+
+
+
+
+
+
+
+

traffic control

+
+
+
+
+
+
+
+

cryoprison

+
+
+
+
+
+
+
+

administration

+
+
+
+
+
+
+
+

morality div

+
+
+
+
+
+
+
+

metro patrol

+
+
+
+
+
+ +

cryoprison

+
+
+
+
+
+
+

publicinform

+
+
+
+
+
+
+
+

traffic control

+
+
+
+
+
+
+
+

cryoprison

+
+
+
+
+
+
+
+

administration

+
+
+
+
+
+
+
+

morality div

+
+
+
+
+
+
+
+

metro patrol

+
+
+
+
+
+ +

administration

+
+
+
+
+
+
+

publicinform

+
+
+
+
+
+
+
+

traffic control

+
+
+
+
+
+
+
+

cryoprison

+
+
+
+
+
+
+
+

administration

+
+
+
+
+
+
+
+

morality div

+
+
+
+
+
+
+
+

metro patrol

+
+
+
+
+
+ +

morality div

+
+
+
+
+
+
+

publicinform

+
+
+
+
+
+
+
+

traffic control

+
+
+
+
+
+
+
+

cryoprison

+
+
+
+
+
+
+
+

administration

+
+
+
+
+
+
+
+

morality div

+
+
+
+
+
+
+
+

metro patrol

+
+
+
+
+
+ +

metro patrol

+
+
+
+
+
+
+

publicinform

+
+
+
+
+
+
+
+

traffic control

+
+
+
+
+
+
+
+

cryoprison

+
+
+
+
+
+
+
+

administration

+
+
+
+
+
+
+
+

morality div

+
+
+
+
+
+
+
+

metro patrol

+
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/dist/style.css b/80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/dist/style.css new file mode 100644 index 0000000..be7fee7 --- /dev/null +++ b/80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/dist/style.css @@ -0,0 +1,2212 @@ +@import url("https://fonts.googleapis.com/css?family=Nunito:400,700"); +@font-face { + font-family: 'Superguns'; + src: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/Superguns.woff2") format("woff2"), url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/Superguns.woff") format("woff"); + font-weight: normal; + font-style: normal; +} +body .ui_inner, body .ui_inner__item, body .ui_inner__item h2 { + position: absolute; + top: 50%; + left: 0; + right: 0; + margin: auto; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} + +body .scanlines, body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(3), body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(4), body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(5), body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(6), body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(7), body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3), body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4), body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5), body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6), body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7), body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3), body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4), body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5), body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6), body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7), body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3), body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4), body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5), body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6), body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7), body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3), body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4), body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5), body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6), body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7), body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3), body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4), body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5), body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6), body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7), body .ui_inner__item h2, body .ui_inner__item .item_active__part, body .ui_inner__item .item_active__part h3 { + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} + +body .ui_inner__item::after, body .ui_inner__item::before { + width: 400px; + height: 40px; + background: #032035; + position: absolute; + top: 0; + display: block; + content: ''; + -webkit-backface-visibility: none; + backface-visibility: none; + transition: all 0.6s; +} + +body .ui_inner__item .item_active__part, body .ui_inner__item .item_top, body .ui_inner__item .item_bottom { + border-left: 200px solid transparent; + border-right: 200px solid transparent; + border-bottom: 346.410161514px solid #032035; + -webkit-transform: translateY(-346.410161514px) rotateX(90deg); + transform: translateY(-346.410161514px) rotateX(90deg); + -webkit-backface-visibility: none; + backface-visibility: none; + position: absolute; + -webkit-transform-origin: 100% 100%; + transform-origin: 100% 100%; + transition: all 0.0s; +} + +body .ui_inner__item .item_active__part { + border-left: 200px solid transparent; + border-right: 200px solid transparent; + border-top: 346.410161514px solid #032035; + border-bottom: 0; +} + +body { + background: #021013; + overflow: hidden; + font-family: 'Superguns'; + letter-spacing: 1px; + margin: 0; +} +body .scanlines { + background-image: repeating-linear-gradient(180deg, transparent, transparent 3px, rgba(224, 167, 167, 0.03) 9px, rgba(255, 255, 255, 0.1) 9px); + position: absolute; + height: 100%; + width: 100%; + top: 0; + z-index: 1; +} +body .intro_wrap { + height: 100vh; + transition: opacity 0.2s 1.7s, left 0.4s 1.7s; + position: relative; + left: 0; +} +body .intro { + position: absolute; + width: 370px; + left: -530px; + font-family: 'Nunito', sans-serif; + right: 0; + margin: auto; + text-align: center; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} +body .intro img { + width: 150px; + margin-top: 17px; +} +body .intro .gif { + margin-top: 14px; + border: 2px solid white; + border-radius: 4px; + width: 250px; +} +body .intro h1 { + color: #bf9a7c; + font-size: 16px; + margin: 10px 0 0; +} +body .intro h2 { + margin: 0; + font-size: 14px; + color: #51b8d8; +} +body .intro p { + color: #c8cdc4; + font-size: 12px; +} +body .ui { + -webkit-perspective: 1300px; + perspective: 1300px; + height: 100%; + opacity: 0; + -webkit-animation: fadeIn 2.5s 0.3s forwards; + animation: fadeIn 2.5s 0.3s forwards; +} +body .ui #item-6:checked + div { + opacity: 0; + left: -100px; + transition: opacity 0.2s, left 0.4s; +} +body .ui #item-6:checked + div + div { + -webkit-transform: rotatex(-30deg) rotateY(-60deg) translateZ(0); + transform: rotatex(-30deg) rotateY(-60deg) translateZ(0); + top: -350px; + left: 0; +} +body .ui #item-6:checked + div + div > .ui_inner__item { + -webkit-transform: translateY(calc(50vh - 2100px)) translateX(-200px); + transform: translateY(calc(50vh - 2100px)) translateX(-200px); +} +body .ui #item-6:checked + div + div > .ui_inner__item label { + transition: background 0.6s 5s; + -webkit-transform: rotatey(60deg) rotatex(90deg) translatex(149px) translateZ(70px) translateY(295px); + transform: rotatey(60deg) rotatex(90deg) translatex(149px) translateZ(70px) translateY(295px); + background: #000000b3; + width: 160px; + padding: 20px; + border-radius: 6px; +} +body .ui #item-6:checked + div + div > .ui_inner__item label span { + opacity: 1; + transition: all 0.6s 5s; +} +body .ui #item-6:checked + div + div > .ui_inner__item:hover { + background: -webkit-linear-gradient(left, #021013 30%, #033520 70%, #021013 100%); +} +body .ui #item-6:checked + div + div > .ui_inner__item:hover .item_top, body .ui #item-6:checked + div + div > .ui_inner__item:hover .item_bottom { + border-bottom: 346.410161514px solid #033520; +} +body .ui #item-6:checked + div + div > .ui_inner__item:hover::after, body .ui #item-6:checked + div + div > .ui_inner__item:hover::before { + background: -webkit-linear-gradient(left, #021013 30%, #033520 70%, #021013 100%); +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap .item_active:after { + transition: all 1s 5s; + opacity: 1; +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part h3 { + -webkit-transform: translateX(-246px) rotateY(0deg) rotateX(180deg); + transform: translateX(-246px) rotateY(0deg) rotateX(180deg); +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part h3 { + -webkit-transform: translateX(-246px) rotateY(0deg) rotateX(180deg); + transform: translateX(-246px) rotateY(0deg) rotateX(180deg); +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part h3 { + -webkit-transform: translateX(-246px) rotateY(0deg) rotateX(180deg); + transform: translateX(-246px) rotateY(0deg) rotateX(180deg); +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part h3 { + -webkit-transform: translateX(-246px); + transform: translateX(-246px); + -webkit-animation: fadeIn 0.5s 1.7s forwards !important; + animation: fadeIn 0.5s 1.7s forwards !important; +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 1.7s forwards !important; + animation: fadeIn 0.5s 1.7s forwards !important; +} +@-webkit-keyframes fadeIn { + to { + opacity: 1; + } +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(2) .item_active__part h3, +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(2) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 2.5s forwards; + animation: fadeIn 0.5s 2.5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(3) .item_active__part h3, +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(3) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 3s forwards; + animation: fadeIn 0.5s 3s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part h3, +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 3.5s forwards; + animation: fadeIn 0.5s 3.5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part h3, +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 4s forwards; + animation: fadeIn 0.5s 4s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part h3, +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 4.5s forwards; + animation: fadeIn 0.5s 4.5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(7) .item_active__part h3, +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(7) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 5s forwards; + animation: fadeIn 0.5s 5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part h3, +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 5.5s forwards; + animation: fadeIn 0.5s 5.5s forwards; +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(3) { + -webkit-transform: rotateY(0deg); + transform: rotateY(0deg); +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(3) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 2.5s forwards; + animation: flip 0.5s 2.5s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(4) { + -webkit-transform: rotateY(-60deg); + transform: rotateY(-60deg); +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 3s forwards; + animation: flip 0.5s 3s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(5) { + -webkit-transform: rotateY(-120deg); + transform: rotateY(-120deg); +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 3.5s forwards; + animation: flip 0.5s 3.5s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(6) { + -webkit-transform: rotateY(-180deg); + transform: rotateY(-180deg); +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 4s forwards; + animation: flip 0.5s 4s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(7) { + -webkit-transform: rotateY(-240deg); + transform: rotateY(-240deg); +} +body .ui #item-6:checked + div + div > .ui_inner__item .item_wrap:nth-of-type(7) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 4.5s forwards; + animation: flip 0.5s 4.5s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-6:checked + div + div > .ui_inner__item:nth-of-type(6) { + -webkit-transform: translateY(calc(50vh + 100px)) translateX(-200px); + transform: translateY(calc(50vh + 100px)) translateX(-200px); + -webkit-animation: flash-6 0.3s linear; + animation: flash-6 0.3s linear; +} +body .ui #item-6:checked + div + div > .ui_inner__item:nth-of-type(6) h2 { + transition: opacity 0.2s 1.4s; +} +body .ui #item-6:checked + div + div > .ui_inner__item:nth-of-type(6) .item_top, body .ui #item-6:checked + div + div > .ui_inner__item:nth-of-type(6) .item_bottom { + -webkit-animation: flashTop-6 0.3s linear; + animation: flashTop-6 0.3s linear; +} +body .ui #item-6:checked + div + div > .ui_inner__item:nth-of-type(7) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-6:checked + div + div > .ui_inner__item:nth-of-type(8) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-6:checked + div + div > .ui_inner__item:nth-of-type(9) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-6:checked + div + div > .ui_inner__item:nth-of-type(10) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-6:checked + div + div > .ui_inner__item:nth-of-type(11) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-6:checked + div + div > .ui_inner__item h2 { + opacity: 0; +} +body .ui #item-5:checked + input + div { + opacity: 0; + left: -100px; + transition: opacity 0.2s, left 0.4s; +} +body .ui #item-5:checked + input + div + div { + -webkit-transform: rotatex(-30deg) rotateY(-60deg) translateZ(0); + transform: rotatex(-30deg) rotateY(-60deg) translateZ(0); + top: -300px; + left: 0; +} +body .ui #item-5:checked + input + div + div > .ui_inner__item { + -webkit-transform: translateY(calc(50vh - 2100px)) translateX(-200px); + transform: translateY(calc(50vh - 2100px)) translateX(-200px); +} +body .ui #item-5:checked + input + div + div > .ui_inner__item label { + transition: background 0.6s 5s; + -webkit-transform: rotatey(60deg) rotatex(90deg) translatex(149px) translateZ(70px) translateY(295px); + transform: rotatey(60deg) rotatex(90deg) translatex(149px) translateZ(70px) translateY(295px); + background: #000000b3; + width: 160px; + padding: 20px; + border-radius: 6px; +} +body .ui #item-5:checked + input + div + div > .ui_inner__item label span { + opacity: 1; + transition: all 0.6s 5s; +} +body .ui #item-5:checked + input + div + div > .ui_inner__item:hover { + background: -webkit-linear-gradient(left, #021013 30%, #033529 70%, #021013 100%); +} +body .ui #item-5:checked + input + div + div > .ui_inner__item:hover .item_top, body .ui #item-5:checked + input + div + div > .ui_inner__item:hover .item_bottom { + border-bottom: 346.410161514px solid #033529; +} +body .ui #item-5:checked + input + div + div > .ui_inner__item:hover::after, body .ui #item-5:checked + input + div + div > .ui_inner__item:hover::before { + background: -webkit-linear-gradient(left, #021013 30%, #033529 70%, #021013 100%); +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap .item_active:after { + transition: all 1s 5s; + opacity: 1; +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part h3 { + -webkit-transform: translateX(-246px) rotateY(0deg) rotateX(180deg); + transform: translateX(-246px) rotateY(0deg) rotateX(180deg); +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part h3 { + -webkit-transform: translateX(-246px) rotateY(0deg) rotateX(180deg); + transform: translateX(-246px) rotateY(0deg) rotateX(180deg); +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part h3 { + -webkit-transform: translateX(-246px) rotateY(0deg) rotateX(180deg); + transform: translateX(-246px) rotateY(0deg) rotateX(180deg); +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part h3 { + -webkit-transform: translateX(-246px); + transform: translateX(-246px); + -webkit-animation: fadeIn 0.5s 1.7s forwards !important; + animation: fadeIn 0.5s 1.7s forwards !important; +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 1.7s forwards !important; + animation: fadeIn 0.5s 1.7s forwards !important; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(2) .item_active__part h3, +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(2) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 2.5s forwards; + animation: fadeIn 0.5s 2.5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3) .item_active__part h3, +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 3s forwards; + animation: fadeIn 0.5s 3s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part h3, +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 3.5s forwards; + animation: fadeIn 0.5s 3.5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part h3, +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 4s forwards; + animation: fadeIn 0.5s 4s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part h3, +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 4.5s forwards; + animation: fadeIn 0.5s 4.5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7) .item_active__part h3, +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 5s forwards; + animation: fadeIn 0.5s 5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part h3, +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 5.5s forwards; + animation: fadeIn 0.5s 5.5s forwards; +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3) { + -webkit-transform: rotateY(0deg); + transform: rotateY(0deg); +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 2.5s forwards; + animation: flip 0.5s 2.5s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) { + -webkit-transform: rotateY(-60deg); + transform: rotateY(-60deg); +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 3s forwards; + animation: flip 0.5s 3s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) { + -webkit-transform: rotateY(-120deg); + transform: rotateY(-120deg); +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 3.5s forwards; + animation: flip 0.5s 3.5s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) { + -webkit-transform: rotateY(-180deg); + transform: rotateY(-180deg); +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 4s forwards; + animation: flip 0.5s 4s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7) { + -webkit-transform: rotateY(-240deg); + transform: rotateY(-240deg); +} +body .ui #item-5:checked + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 4.5s forwards; + animation: flip 0.5s 4.5s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-5:checked + input + div + div > .ui_inner__item:nth-of-type(5) { + -webkit-transform: translateY(calc(50vh + 100px)) translateX(-200px); + transform: translateY(calc(50vh + 100px)) translateX(-200px); + -webkit-animation: flash-5 0.3s linear; + animation: flash-5 0.3s linear; +} +body .ui #item-5:checked + input + div + div > .ui_inner__item:nth-of-type(5) h2 { + transition: opacity 0.2s 1.4s; +} +body .ui #item-5:checked + input + div + div > .ui_inner__item:nth-of-type(5) .item_top, body .ui #item-5:checked + input + div + div > .ui_inner__item:nth-of-type(5) .item_bottom { + -webkit-animation: flashTop-5 0.3s linear; + animation: flashTop-5 0.3s linear; +} +body .ui #item-5:checked + input + div + div > .ui_inner__item:nth-of-type(6) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-5:checked + input + div + div > .ui_inner__item:nth-of-type(7) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-5:checked + input + div + div > .ui_inner__item:nth-of-type(8) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-5:checked + input + div + div > .ui_inner__item:nth-of-type(9) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-5:checked + input + div + div > .ui_inner__item:nth-of-type(10) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-5:checked + input + div + div > .ui_inner__item h2 { + opacity: 0; +} +body .ui #item-4:checked + input + input + div { + opacity: 0; + left: -100px; + transition: opacity 0.2s, left 0.4s; +} +body .ui #item-4:checked + input + input + div + div { + -webkit-transform: rotatex(-30deg) rotateY(-60deg) translateZ(0); + transform: rotatex(-30deg) rotateY(-60deg) translateZ(0); + top: -250px; + left: 0; +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item { + -webkit-transform: translateY(calc(50vh - 2100px)) translateX(-200px); + transform: translateY(calc(50vh - 2100px)) translateX(-200px); +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item label { + transition: background 0.6s 5s; + -webkit-transform: rotatey(60deg) rotatex(90deg) translatex(149px) translateZ(70px) translateY(295px); + transform: rotatey(60deg) rotatex(90deg) translatex(149px) translateZ(70px) translateY(295px); + background: #000000b3; + width: 160px; + padding: 20px; + border-radius: 6px; +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item label span { + opacity: 1; + transition: all 0.6s 5s; +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item:hover { + background: -webkit-linear-gradient(left, #021013 30%, #033531 70%, #021013 100%); +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item:hover .item_top, body .ui #item-4:checked + input + input + div + div > .ui_inner__item:hover .item_bottom { + border-bottom: 346.410161514px solid #033531; +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item:hover::after, body .ui #item-4:checked + input + input + div + div > .ui_inner__item:hover::before { + background: -webkit-linear-gradient(left, #021013 30%, #033531 70%, #021013 100%); +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap .item_active:after { + transition: all 1s 5s; + opacity: 1; +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part h3 { + -webkit-transform: translateX(-246px) rotateY(0deg) rotateX(180deg); + transform: translateX(-246px) rotateY(0deg) rotateX(180deg); +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part h3 { + -webkit-transform: translateX(-246px) rotateY(0deg) rotateX(180deg); + transform: translateX(-246px) rotateY(0deg) rotateX(180deg); +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part h3 { + -webkit-transform: translateX(-246px) rotateY(0deg) rotateX(180deg); + transform: translateX(-246px) rotateY(0deg) rotateX(180deg); +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part h3 { + -webkit-transform: translateX(-246px); + transform: translateX(-246px); + -webkit-animation: fadeIn 0.5s 1.7s forwards !important; + animation: fadeIn 0.5s 1.7s forwards !important; +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 1.7s forwards !important; + animation: fadeIn 0.5s 1.7s forwards !important; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(2) .item_active__part h3, +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(2) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 2.5s forwards; + animation: fadeIn 0.5s 2.5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3) .item_active__part h3, +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 3s forwards; + animation: fadeIn 0.5s 3s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part h3, +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 3.5s forwards; + animation: fadeIn 0.5s 3.5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part h3, +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 4s forwards; + animation: fadeIn 0.5s 4s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part h3, +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 4.5s forwards; + animation: fadeIn 0.5s 4.5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7) .item_active__part h3, +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 5s forwards; + animation: fadeIn 0.5s 5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part h3, +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 5.5s forwards; + animation: fadeIn 0.5s 5.5s forwards; +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3) { + -webkit-transform: rotateY(0deg); + transform: rotateY(0deg); +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 2.5s forwards; + animation: flip 0.5s 2.5s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) { + -webkit-transform: rotateY(-60deg); + transform: rotateY(-60deg); +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 3s forwards; + animation: flip 0.5s 3s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) { + -webkit-transform: rotateY(-120deg); + transform: rotateY(-120deg); +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 3.5s forwards; + animation: flip 0.5s 3.5s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) { + -webkit-transform: rotateY(-180deg); + transform: rotateY(-180deg); +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 4s forwards; + animation: flip 0.5s 4s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7) { + -webkit-transform: rotateY(-240deg); + transform: rotateY(-240deg); +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 4.5s forwards; + animation: flip 0.5s 4.5s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item:nth-of-type(4) { + -webkit-transform: translateY(calc(50vh + 100px)) translateX(-200px); + transform: translateY(calc(50vh + 100px)) translateX(-200px); + -webkit-animation: flash-4 0.3s linear; + animation: flash-4 0.3s linear; +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item:nth-of-type(4) h2 { + transition: opacity 0.2s 1.4s; +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item:nth-of-type(4) .item_top, body .ui #item-4:checked + input + input + div + div > .ui_inner__item:nth-of-type(4) .item_bottom { + -webkit-animation: flashTop-4 0.3s linear; + animation: flashTop-4 0.3s linear; +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item:nth-of-type(5) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item:nth-of-type(6) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item:nth-of-type(7) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item:nth-of-type(8) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item:nth-of-type(9) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-4:checked + input + input + div + div > .ui_inner__item h2 { + opacity: 0; +} +body .ui #item-3:checked + input + input + input + div { + opacity: 0; + left: -100px; + transition: opacity 0.2s, left 0.4s; +} +body .ui #item-3:checked + input + input + input + div + div { + -webkit-transform: rotatex(-30deg) rotateY(-60deg) translateZ(0); + transform: rotatex(-30deg) rotateY(-60deg) translateZ(0); + top: -200px; + left: 0; +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item { + -webkit-transform: translateY(calc(50vh - 2100px)) translateX(-200px); + transform: translateY(calc(50vh - 2100px)) translateX(-200px); +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item label { + transition: background 0.6s 5s; + -webkit-transform: rotatey(60deg) rotatex(90deg) translatex(149px) translateZ(70px) translateY(295px); + transform: rotatey(60deg) rotatex(90deg) translatex(149px) translateZ(70px) translateY(295px); + background: #000000b3; + width: 160px; + padding: 20px; + border-radius: 6px; +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item label span { + opacity: 1; + transition: all 0.6s 5s; +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item:hover { + background: -webkit-linear-gradient(left, #021013 30%, #033135 70%, #021013 100%); +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item:hover .item_top, body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item:hover .item_bottom { + border-bottom: 346.410161514px solid #033135; +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item:hover::after, body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item:hover::before { + background: -webkit-linear-gradient(left, #021013 30%, #033135 70%, #021013 100%); +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap .item_active:after { + transition: all 1s 5s; + opacity: 1; +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part h3 { + -webkit-transform: translateX(-246px) rotateY(0deg) rotateX(180deg); + transform: translateX(-246px) rotateY(0deg) rotateX(180deg); +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part h3 { + -webkit-transform: translateX(-246px) rotateY(0deg) rotateX(180deg); + transform: translateX(-246px) rotateY(0deg) rotateX(180deg); +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part h3 { + -webkit-transform: translateX(-246px) rotateY(0deg) rotateX(180deg); + transform: translateX(-246px) rotateY(0deg) rotateX(180deg); +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part h3 { + -webkit-transform: translateX(-246px); + transform: translateX(-246px); + -webkit-animation: fadeIn 0.5s 1.7s forwards !important; + animation: fadeIn 0.5s 1.7s forwards !important; +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 1.7s forwards !important; + animation: fadeIn 0.5s 1.7s forwards !important; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(2) .item_active__part h3, +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(2) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 2.5s forwards; + animation: fadeIn 0.5s 2.5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3) .item_active__part h3, +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 3s forwards; + animation: fadeIn 0.5s 3s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part h3, +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 3.5s forwards; + animation: fadeIn 0.5s 3.5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part h3, +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 4s forwards; + animation: fadeIn 0.5s 4s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part h3, +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 4.5s forwards; + animation: fadeIn 0.5s 4.5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7) .item_active__part h3, +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 5s forwards; + animation: fadeIn 0.5s 5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part h3, +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 5.5s forwards; + animation: fadeIn 0.5s 5.5s forwards; +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3) { + -webkit-transform: rotateY(0deg); + transform: rotateY(0deg); +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 2.5s forwards; + animation: flip 0.5s 2.5s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) { + -webkit-transform: rotateY(-60deg); + transform: rotateY(-60deg); +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 3s forwards; + animation: flip 0.5s 3s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) { + -webkit-transform: rotateY(-120deg); + transform: rotateY(-120deg); +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 3.5s forwards; + animation: flip 0.5s 3.5s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) { + -webkit-transform: rotateY(-180deg); + transform: rotateY(-180deg); +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 4s forwards; + animation: flip 0.5s 4s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7) { + -webkit-transform: rotateY(-240deg); + transform: rotateY(-240deg); +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 4.5s forwards; + animation: flip 0.5s 4.5s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item:nth-of-type(3) { + -webkit-transform: translateY(calc(50vh + 100px)) translateX(-200px); + transform: translateY(calc(50vh + 100px)) translateX(-200px); + -webkit-animation: flash-3 0.3s linear; + animation: flash-3 0.3s linear; +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item:nth-of-type(3) h2 { + transition: opacity 0.2s 1.4s; +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item:nth-of-type(3) .item_top, body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item:nth-of-type(3) .item_bottom { + -webkit-animation: flashTop-3 0.3s linear; + animation: flashTop-3 0.3s linear; +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item:nth-of-type(4) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item:nth-of-type(5) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item:nth-of-type(6) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item:nth-of-type(7) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item:nth-of-type(8) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-3:checked + input + input + input + div + div > .ui_inner__item h2 { + opacity: 0; +} +body .ui #item-2:checked + input + input + input + input + div { + opacity: 0; + left: -100px; + transition: opacity 0.2s, left 0.4s; +} +body .ui #item-2:checked + input + input + input + input + div + div { + -webkit-transform: rotatex(-30deg) rotateY(-60deg) translateZ(0); + transform: rotatex(-30deg) rotateY(-60deg) translateZ(0); + top: -150px; + left: 0; +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item { + -webkit-transform: translateY(calc(50vh - 2100px)) translateX(-200px); + transform: translateY(calc(50vh - 2100px)) translateX(-200px); +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item label { + transition: background 0.6s 5s; + -webkit-transform: rotatey(60deg) rotatex(90deg) translatex(149px) translateZ(70px) translateY(295px); + transform: rotatey(60deg) rotatex(90deg) translatex(149px) translateZ(70px) translateY(295px); + background: #000000b3; + width: 160px; + padding: 20px; + border-radius: 6px; +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item label span { + opacity: 1; + transition: all 0.6s 5s; +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item:hover { + background: -webkit-linear-gradient(left, #021013 30%, #032835 70%, #021013 100%); +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item:hover .item_top, body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item:hover .item_bottom { + border-bottom: 346.410161514px solid #032835; +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item:hover::after, body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item:hover::before { + background: -webkit-linear-gradient(left, #021013 30%, #032835 70%, #021013 100%); +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap .item_active:after { + transition: all 1s 5s; + opacity: 1; +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part h3 { + -webkit-transform: translateX(-246px) rotateY(0deg) rotateX(180deg); + transform: translateX(-246px) rotateY(0deg) rotateX(180deg); +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part h3 { + -webkit-transform: translateX(-246px) rotateY(0deg) rotateX(180deg); + transform: translateX(-246px) rotateY(0deg) rotateX(180deg); +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part h3 { + -webkit-transform: translateX(-246px) rotateY(0deg) rotateX(180deg); + transform: translateX(-246px) rotateY(0deg) rotateX(180deg); +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part h3 { + -webkit-transform: translateX(-246px); + transform: translateX(-246px); + -webkit-animation: fadeIn 0.5s 1.7s forwards !important; + animation: fadeIn 0.5s 1.7s forwards !important; +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 1.7s forwards !important; + animation: fadeIn 0.5s 1.7s forwards !important; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(2) .item_active__part h3, +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(2) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 2.5s forwards; + animation: fadeIn 0.5s 2.5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3) .item_active__part h3, +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 3s forwards; + animation: fadeIn 0.5s 3s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part h3, +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 3.5s forwards; + animation: fadeIn 0.5s 3.5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part h3, +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 4s forwards; + animation: fadeIn 0.5s 4s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part h3, +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 4.5s forwards; + animation: fadeIn 0.5s 4.5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7) .item_active__part h3, +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 5s forwards; + animation: fadeIn 0.5s 5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part h3, +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 5.5s forwards; + animation: fadeIn 0.5s 5.5s forwards; +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3) { + -webkit-transform: rotateY(0deg); + transform: rotateY(0deg); +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 2.5s forwards; + animation: flip 0.5s 2.5s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) { + -webkit-transform: rotateY(-60deg); + transform: rotateY(-60deg); +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 3s forwards; + animation: flip 0.5s 3s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) { + -webkit-transform: rotateY(-120deg); + transform: rotateY(-120deg); +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 3.5s forwards; + animation: flip 0.5s 3.5s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) { + -webkit-transform: rotateY(-180deg); + transform: rotateY(-180deg); +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 4s forwards; + animation: flip 0.5s 4s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7) { + -webkit-transform: rotateY(-240deg); + transform: rotateY(-240deg); +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 4.5s forwards; + animation: flip 0.5s 4.5s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item:nth-of-type(2) { + -webkit-transform: translateY(calc(50vh + 100px)) translateX(-200px); + transform: translateY(calc(50vh + 100px)) translateX(-200px); + -webkit-animation: flash-2 0.3s linear; + animation: flash-2 0.3s linear; +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item:nth-of-type(2) h2 { + transition: opacity 0.2s 1.4s; +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item:nth-of-type(2) .item_top, body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item:nth-of-type(2) .item_bottom { + -webkit-animation: flashTop-2 0.3s linear; + animation: flashTop-2 0.3s linear; +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item:nth-of-type(3) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item:nth-of-type(4) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item:nth-of-type(5) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item:nth-of-type(6) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item:nth-of-type(7) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-2:checked + input + input + input + input + div + div > .ui_inner__item h2 { + opacity: 0; +} +body .ui #item-1:checked + input + input + input + input + input + div { + opacity: 0; + left: -100px; + transition: opacity 0.2s, left 0.4s; +} +body .ui #item-1:checked + input + input + input + input + input + div + div { + -webkit-transform: rotatex(-30deg) rotateY(-60deg) translateZ(0); + transform: rotatex(-30deg) rotateY(-60deg) translateZ(0); + top: -100px; + left: 0; +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item { + -webkit-transform: translateY(calc(50vh - 2100px)) translateX(-200px); + transform: translateY(calc(50vh - 2100px)) translateX(-200px); +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item label { + transition: background 0.6s 5s; + -webkit-transform: rotatey(60deg) rotatex(90deg) translatex(149px) translateZ(70px) translateY(295px); + transform: rotatey(60deg) rotatex(90deg) translatex(149px) translateZ(70px) translateY(295px); + background: #000000b3; + width: 160px; + padding: 20px; + border-radius: 6px; +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item label span { + opacity: 1; + transition: all 0.6s 5s; +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item:hover { + background: -webkit-linear-gradient(left, #021013 30%, #032035 70%, #021013 100%); +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item:hover .item_top, body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item:hover .item_bottom { + border-bottom: 346.410161514px solid #032035; +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item:hover::after, body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item:hover::before { + background: -webkit-linear-gradient(left, #021013 30%, #032035 70%, #021013 100%); +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap .item_active:after { + transition: all 1s 5s; + opacity: 1; +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part h3 { + -webkit-transform: translateX(-246px) rotateY(0deg) rotateX(180deg); + transform: translateX(-246px) rotateY(0deg) rotateX(180deg); +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part h3 { + -webkit-transform: translateX(-246px) rotateY(0deg) rotateX(180deg); + transform: translateX(-246px) rotateY(0deg) rotateX(180deg); +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part h3 { + -webkit-transform: translateX(-246px) rotateY(0deg) rotateX(180deg); + transform: translateX(-246px) rotateY(0deg) rotateX(180deg); +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part h3 { + -webkit-transform: translateX(-246px); + transform: translateX(-246px); + -webkit-animation: fadeIn 0.5s 1.7s forwards !important; + animation: fadeIn 0.5s 1.7s forwards !important; +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 1.7s forwards !important; + animation: fadeIn 0.5s 1.7s forwards !important; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(2) .item_active__part h3, +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(2) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 2.5s forwards; + animation: fadeIn 0.5s 2.5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3) .item_active__part h3, +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 3s forwards; + animation: fadeIn 0.5s 3s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part h3, +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 3.5s forwards; + animation: fadeIn 0.5s 3.5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part h3, +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 4s forwards; + animation: fadeIn 0.5s 4s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part h3, +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 4.5s forwards; + animation: fadeIn 0.5s 4.5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7) .item_active__part h3, +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 5s forwards; + animation: fadeIn 0.5s 5s forwards; +} +@keyframes fadeIn { + to { + opacity: 1; + } +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part h3, +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(8) .item_active__part .nodes { + -webkit-animation: fadeIn 0.5s 5.5s forwards; + animation: fadeIn 0.5s 5.5s forwards; +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3) { + -webkit-transform: rotateY(0deg); + transform: rotateY(0deg); +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(3) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 2.5s forwards; + animation: flip 0.5s 2.5s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) { + -webkit-transform: rotateY(-60deg); + transform: rotateY(-60deg); +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(4) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 3s forwards; + animation: flip 0.5s 3s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) { + -webkit-transform: rotateY(-120deg); + transform: rotateY(-120deg); +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(5) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 3.5s forwards; + animation: flip 0.5s 3.5s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) { + -webkit-transform: rotateY(-180deg); + transform: rotateY(-180deg); +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(6) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 4s forwards; + animation: flip 0.5s 4s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7) { + -webkit-transform: rotateY(-240deg); + transform: rotateY(-240deg); +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item .item_wrap:nth-of-type(7) .item_active__part { + opacity: 0; + -webkit-animation: flip 0.5s 4.5s forwards; + animation: flip 0.5s 4.5s forwards; + -webkit-backface-visibility: none; + backface-visibility: none; +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item:nth-of-type(1) { + -webkit-transform: translateY(calc(50vh + 100px)) translateX(-200px); + transform: translateY(calc(50vh + 100px)) translateX(-200px); + -webkit-animation: flash-1 0.3s linear; + animation: flash-1 0.3s linear; +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item:nth-of-type(1) h2 { + transition: opacity 0.2s 1.4s; +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item:nth-of-type(1) .item_top, body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item:nth-of-type(1) .item_bottom { + -webkit-animation: flashTop-1 0.3s linear; + animation: flashTop-1 0.3s linear; +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item:nth-of-type(2) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item:nth-of-type(3) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item:nth-of-type(4) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item:nth-of-type(5) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item:nth-of-type(6) { + -webkit-transform: translateY(calc(-50% + 2100px)) translateX(-200px); + transform: translateY(calc(-50% + 2100px)) translateX(-200px); +} +body .ui #item-1:checked + input + input + input + input + input + div + div > .ui_inner__item h2 { + opacity: 0; +} +body .ui input { + display: none; +} +body .ui_inner { + top: calc(50vh - 130px); + left: 200px; + -webkit-transform: rotateY(-10deg); + transform: rotateY(-10deg); + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + transition: all 2s 0.4s; + height: 0; + width: 100%; +} +body .ui_inner__item { + width: 400px; + height: 40px; + transition: all 0.6s, -webkit-transform 2s 0.4s; + transition: all 0.6s, transform 2s 0.4s; + transition: all 0.6s, transform 2s 0.4s, -webkit-transform 2s 0.4s; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + -webkit-transform-origin: 0% 0%; + transform-origin: 0% 0%; +} +body .ui_inner__item label { + position: absolute; + height: 131%; + width: 100%; + display: block; + background: none; + z-index: 1; + cursor: pointer; + transition: background 0.6s 0s; + text-align: center; + color: white; + text-transform: uppercase; +} +body .ui_inner__item label span { + opacity: 0; + top: 9px; + position: relative; + transition: all 0s 0s; +} +body .ui_inner__item h2 { + right: 20px; + color: #c39d7e; + -webkit-transform: translateY(-50%) translatez(10px); + transform: translateY(-50%) translatez(10px); + transition: opacity 0.2s 0.3s; + font-weight: normal; + font-size: 14px; + left: auto; + text-transform: uppercase; +} +body .ui_inner__item::after { + -webkit-transform: rotateY(60deg); + transform: rotateY(60deg); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; +} +body .ui_inner__item::before { + -webkit-transform: rotateY(-60deg); + transform: rotateY(-60deg); + -webkit-transform-origin: 100% 0; + transform-origin: 100% 0; +} +body .ui_inner__item .item_bottom { + -webkit-transform: translateY(-306.410161514px) rotateX(90deg); + transform: translateY(-306.410161514px) rotateX(90deg); +} +body .ui_inner__item .item_wrap { + -webkit-transform: rotatey(0deg); + transform: rotatey(0deg); + -webkit-transform-origin: 400px 100%; + transform-origin: 400px 100%; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} +body .ui_inner__item .item_active { + -webkit-transform: rotateY(30deg) translateX(-55px) translateZ(-200px); + transform: rotateY(30deg) translateX(-55px) translateZ(-200px); + -webkit-transform-origin: 100% 100%; + transform-origin: 100% 100%; + position: absolute; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; +} +body .ui_inner__item .item_active::after { + display: block; + content: ''; + width: 400px; + height: 30px; + transition: all 0s 0s; + opacity: 0; + position: absolute; + top: 0px; + -webkit-transform: rotatex(0deg) rotatez(180deg) translateY(29px) rotateY(30deg) translateX(-748px) translateZ(-200px); + transform: rotatex(0deg) rotatez(180deg) translateY(29px) rotateY(30deg) translateX(-748px) translateZ(-200px); + -webkit-transform-origin: 0% 100%; + transform-origin: 0% 100%; +} +body .ui_inner__item .item_active:nth-of-type(1)::after { + background: #032035; +} +body .ui_inner__item .item_active:nth-of-type(2)::after { + background: #032835; +} +body .ui_inner__item .item_active:nth-of-type(3)::after { + background: #033135; +} +body .ui_inner__item .item_active:nth-of-type(4)::after { + background: #033531; +} +body .ui_inner__item .item_active:nth-of-type(5)::after { + background: #033529; +} +body .ui_inner__item .item_active:nth-of-type(6)::after { + background: #033520; +} +body .ui_inner__item .item_active__part { + -webkit-transform: rotatex(90deg) rotatey(0deg) rotateZ(-30deg) translateX(0px) translateY(0px); + transform: rotatex(90deg) rotatey(0deg) rotateZ(-30deg) translateX(0px) translateY(0px); + -webkit-transform-origin: 100% 0; + transform-origin: 100% 0; + -webkit-transform-style: preserve-3D; + transform-style: preserve-3D; +} +body .ui_inner__item .item_active__part .nodes { + width: 20px; + height: 20px; + position: absolute; + border: 3px solid white; + opacity: 0; + border-radius: 100px; + top: -315px; + left: -132px; + -webkit-transform: translateZ(1px); + transform: translateZ(1px); +} +body .ui_inner__item .item_active__part h3 { + position: absolute; + top: -406.410161514px; + width: 500px; + left: 0; + right: 0; + margin: auto; + text-transform: uppercase; + -webkit-transform-style: preserve-3D; + transform-style: preserve-3D; + -webkit-transform: rotateX(-20deg) rotatey(180deg) translateX(50%); + transform: rotateX(-20deg) rotatey(180deg) translateX(50%); + color: #c39d7e; + font-weight: normal; + text-align: center; + font-size: 28px; + opacity: 0; +} +@-webkit-keyframes flip { + from { + opacity: 1; + -webkit-transform: rotatex(90deg) rotatey(0deg) rotateZ(-30deg) translateX(0px) translateY(0px); + transform: rotatex(90deg) rotatey(0deg) rotateZ(-30deg) translateX(0px) translateY(0px); + } + to { + opacity: 1; + -webkit-transform: rotatex(90deg) rotatey(180deg) rotateZ(-30deg) translateX(0px) translateY(0px); + transform: rotatex(90deg) rotatey(180deg) rotateZ(-30deg) translateX(0px) translateY(0px); + } +} +@keyframes flip { + from { + opacity: 1; + -webkit-transform: rotatex(90deg) rotatey(0deg) rotateZ(-30deg) translateX(0px) translateY(0px); + transform: rotatex(90deg) rotatey(0deg) rotateZ(-30deg) translateX(0px) translateY(0px); + } + to { + opacity: 1; + -webkit-transform: rotatex(90deg) rotatey(180deg) rotateZ(-30deg) translateX(0px) translateY(0px); + transform: rotatex(90deg) rotatey(180deg) rotateZ(-30deg) translateX(0px) translateY(0px); + } +} +body .ui_inner__item:nth-of-type(1) { + top: calc(50% + (0 * 16px) + (40px * 0)); + background: -webkit-linear-gradient(left, #021013 30%, #032035 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(1) .nodes { + box-shadow: 40px 0px 0 -3px #032035, 40px 0px 0px 0px white, 80px 0px 0 -3px #032035, 80px 0px 0px 0px white, 120px 0px 0 -3px #032035, 120px 0px 0px 0px white, 160px 0px 0 -3px #032035, 160px 0px 0px 0px white, 200px 0px 0 -3px #032035, 200px 0px 0px 0px white, 240px 0px 0 -3px #032035, 240px 0px 0px 0px white, 20px 40px 0 -3px #032035, 20px 40px 0px 0px white, 60px 40px 0 -3px #032035, 60px 40px 0px 0px white, 100px 40px 0 -3px #032035, 100px 40px 0px 0px white, 140px 40px 0 -3px #032035, 140px 40px 0px 0px white, 180px 40px 0 -3px #032035, 180px 40px 0px 0px white, 220px 40px 0 -3px #032035, 220px 40px 0px 0px white, 40px 80px 0 -3px #032035, 40px 80px 0px 0px white, 80px 80px 0 -3px #032035, 80px 80px 0px 0px white, 120px 80px 0 -3px #032035, 120px 80px 0px 0px white, 160px 80px 0 -3px #032035, 160px 80px 0px 0px white, 200px 80px 0 -3px #032035, 200px 80px 0px 0px white, 60px 120px 0 -3px #032035, 60px 120px 0px 0px white, 100px 120px 0 -3px #032035, 100px 120px 0px 0px white, 140px 120px 0 -3px #032035, 140px 120px 0px 0px white, 180px 120px 0 -3px #032035, 180px 120px 0px 0px white, 80px 160px 0 -3px #032035, 80px 160px 0px 0px white, 120px 160px 0 -3px #032035, 120px 160px 0px 0px white, 160px 160px 0 -3px #032035, 160px 160px 0px 0px white, 100px 200px 0 -3px #032035, 100px 200px 0px 0px white, 140px 200px 0 -3px #032035, 140px 200px 0px 0px white, 120px 240px 0 -3px #032035, 120px 240px 0px 0px white; +} +@-webkit-keyframes flash-1 { + 0% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 25% { + background: -webkit-linear-gradient(left, #021013 30%, #032035 70%, #021013 100%); + } + 50% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 75% { + background: -webkit-linear-gradient(left, #021013 30%, #032035 70%, #021013 100%); + } + 100% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } +} +@keyframes flash-1 { + 0% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 25% { + background: -webkit-linear-gradient(left, #021013 30%, #032035 70%, #021013 100%); + } + 50% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 75% { + background: -webkit-linear-gradient(left, #021013 30%, #032035 70%, #021013 100%); + } + 100% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } +} +@-webkit-keyframes flashTop-1 { + 0% { + border-bottom: 346.410161514px solid #ad988e; + } + 25% { + border-bottom: 346.410161514px solid #032035; + } + 50% { + border-bottom: 346.410161514px solid #ad988e; + } + 75% { + border-bottom: 346.410161514px solid #032035; + } + 100% { + border-bottom: 346.410161514px solid #ad988e; + } +} +@keyframes flashTop-1 { + 0% { + border-bottom: 346.410161514px solid #ad988e; + } + 25% { + border-bottom: 346.410161514px solid #032035; + } + 50% { + border-bottom: 346.410161514px solid #ad988e; + } + 75% { + border-bottom: 346.410161514px solid #032035; + } + 100% { + border-bottom: 346.410161514px solid #ad988e; + } +} +body .ui_inner__item:nth-of-type(1)::after, body .ui_inner__item:nth-of-type(1)::before { + background: -webkit-linear-gradient(left, #021013 30%, #032035 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(1) .item_top, body .ui_inner__item:nth-of-type(1) .item_bottom { + border-bottom: 346.410161514px solid #032035; +} +body .ui_inner__item:nth-of-type(1) .item_active__part { + border-top: 346.410161514px solid #032035; +} +body .ui_inner__item:nth-of-type(1):hover { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(1):hover::after, body .ui_inner__item:nth-of-type(1):hover::before { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(1):hover .item_top, body .ui_inner__item:nth-of-type(1):hover .item_bottom { + border-bottom: 346.410161514px solid #ad988e; +} +body .ui_inner__item:nth-of-type(2) { + top: calc(50% + (1 * 16px) + (40px * 1)); + background: -webkit-linear-gradient(left, #021013 30%, #032835 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(2) .nodes { + box-shadow: 40px 0px 0 -3px #032835, 40px 0px 0px 0px white, 80px 0px 0 -3px #032835, 80px 0px 0px 0px white, 120px 0px 0 -3px #032835, 120px 0px 0px 0px white, 160px 0px 0 -3px #032835, 160px 0px 0px 0px white, 200px 0px 0 -3px #032835, 200px 0px 0px 0px white, 240px 0px 0 -3px #032835, 240px 0px 0px 0px white, 20px 40px 0 -3px #032835, 20px 40px 0px 0px white, 60px 40px 0 -3px #032835, 60px 40px 0px 0px white, 100px 40px 0 -3px #032835, 100px 40px 0px 0px white, 140px 40px 0 -3px #032835, 140px 40px 0px 0px white, 180px 40px 0 -3px #032835, 180px 40px 0px 0px white, 220px 40px 0 -3px #032835, 220px 40px 0px 0px white, 40px 80px 0 -3px #032835, 40px 80px 0px 0px white, 80px 80px 0 -3px #032835, 80px 80px 0px 0px white, 120px 80px 0 -3px #032835, 120px 80px 0px 0px white, 160px 80px 0 -3px #032835, 160px 80px 0px 0px white, 200px 80px 0 -3px #032835, 200px 80px 0px 0px white, 60px 120px 0 -3px #032835, 60px 120px 0px 0px white, 100px 120px 0 -3px #032835, 100px 120px 0px 0px white, 140px 120px 0 -3px #032835, 140px 120px 0px 0px white, 180px 120px 0 -3px #032835, 180px 120px 0px 0px white, 80px 160px 0 -3px #032835, 80px 160px 0px 0px white, 120px 160px 0 -3px #032835, 120px 160px 0px 0px white, 160px 160px 0 -3px #032835, 160px 160px 0px 0px white, 100px 200px 0 -3px #032835, 100px 200px 0px 0px white, 140px 200px 0 -3px #032835, 140px 200px 0px 0px white, 120px 240px 0 -3px #032835, 120px 240px 0px 0px white; +} +@-webkit-keyframes flash-2 { + 0% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 25% { + background: -webkit-linear-gradient(left, #021013 30%, #032835 70%, #021013 100%); + } + 50% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 75% { + background: -webkit-linear-gradient(left, #021013 30%, #032835 70%, #021013 100%); + } + 100% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } +} +@keyframes flash-2 { + 0% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 25% { + background: -webkit-linear-gradient(left, #021013 30%, #032835 70%, #021013 100%); + } + 50% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 75% { + background: -webkit-linear-gradient(left, #021013 30%, #032835 70%, #021013 100%); + } + 100% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } +} +@-webkit-keyframes flashTop-2 { + 0% { + border-bottom: 346.410161514px solid #ad988e; + } + 25% { + border-bottom: 346.410161514px solid #032835; + } + 50% { + border-bottom: 346.410161514px solid #ad988e; + } + 75% { + border-bottom: 346.410161514px solid #032835; + } + 100% { + border-bottom: 346.410161514px solid #ad988e; + } +} +@keyframes flashTop-2 { + 0% { + border-bottom: 346.410161514px solid #ad988e; + } + 25% { + border-bottom: 346.410161514px solid #032835; + } + 50% { + border-bottom: 346.410161514px solid #ad988e; + } + 75% { + border-bottom: 346.410161514px solid #032835; + } + 100% { + border-bottom: 346.410161514px solid #ad988e; + } +} +body .ui_inner__item:nth-of-type(2)::after, body .ui_inner__item:nth-of-type(2)::before { + background: -webkit-linear-gradient(left, #021013 30%, #032835 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(2) .item_top, body .ui_inner__item:nth-of-type(2) .item_bottom { + border-bottom: 346.410161514px solid #032835; +} +body .ui_inner__item:nth-of-type(2) .item_active__part { + border-top: 346.410161514px solid #032835; +} +body .ui_inner__item:nth-of-type(2):hover { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(2):hover::after, body .ui_inner__item:nth-of-type(2):hover::before { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(2):hover .item_top, body .ui_inner__item:nth-of-type(2):hover .item_bottom { + border-bottom: 346.410161514px solid #ad988e; +} +body .ui_inner__item:nth-of-type(3) { + top: calc(50% + (2 * 16px) + (40px * 2)); + background: -webkit-linear-gradient(left, #021013 30%, #033135 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(3) .nodes { + box-shadow: 40px 0px 0 -3px #033135, 40px 0px 0px 0px white, 80px 0px 0 -3px #033135, 80px 0px 0px 0px white, 120px 0px 0 -3px #033135, 120px 0px 0px 0px white, 160px 0px 0 -3px #033135, 160px 0px 0px 0px white, 200px 0px 0 -3px #033135, 200px 0px 0px 0px white, 240px 0px 0 -3px #033135, 240px 0px 0px 0px white, 20px 40px 0 -3px #033135, 20px 40px 0px 0px white, 60px 40px 0 -3px #033135, 60px 40px 0px 0px white, 100px 40px 0 -3px #033135, 100px 40px 0px 0px white, 140px 40px 0 -3px #033135, 140px 40px 0px 0px white, 180px 40px 0 -3px #033135, 180px 40px 0px 0px white, 220px 40px 0 -3px #033135, 220px 40px 0px 0px white, 40px 80px 0 -3px #033135, 40px 80px 0px 0px white, 80px 80px 0 -3px #033135, 80px 80px 0px 0px white, 120px 80px 0 -3px #033135, 120px 80px 0px 0px white, 160px 80px 0 -3px #033135, 160px 80px 0px 0px white, 200px 80px 0 -3px #033135, 200px 80px 0px 0px white, 60px 120px 0 -3px #033135, 60px 120px 0px 0px white, 100px 120px 0 -3px #033135, 100px 120px 0px 0px white, 140px 120px 0 -3px #033135, 140px 120px 0px 0px white, 180px 120px 0 -3px #033135, 180px 120px 0px 0px white, 80px 160px 0 -3px #033135, 80px 160px 0px 0px white, 120px 160px 0 -3px #033135, 120px 160px 0px 0px white, 160px 160px 0 -3px #033135, 160px 160px 0px 0px white, 100px 200px 0 -3px #033135, 100px 200px 0px 0px white, 140px 200px 0 -3px #033135, 140px 200px 0px 0px white, 120px 240px 0 -3px #033135, 120px 240px 0px 0px white; +} +@-webkit-keyframes flash-3 { + 0% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 25% { + background: -webkit-linear-gradient(left, #021013 30%, #033135 70%, #021013 100%); + } + 50% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 75% { + background: -webkit-linear-gradient(left, #021013 30%, #033135 70%, #021013 100%); + } + 100% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } +} +@keyframes flash-3 { + 0% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 25% { + background: -webkit-linear-gradient(left, #021013 30%, #033135 70%, #021013 100%); + } + 50% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 75% { + background: -webkit-linear-gradient(left, #021013 30%, #033135 70%, #021013 100%); + } + 100% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } +} +@-webkit-keyframes flashTop-3 { + 0% { + border-bottom: 346.410161514px solid #ad988e; + } + 25% { + border-bottom: 346.410161514px solid #033135; + } + 50% { + border-bottom: 346.410161514px solid #ad988e; + } + 75% { + border-bottom: 346.410161514px solid #033135; + } + 100% { + border-bottom: 346.410161514px solid #ad988e; + } +} +@keyframes flashTop-3 { + 0% { + border-bottom: 346.410161514px solid #ad988e; + } + 25% { + border-bottom: 346.410161514px solid #033135; + } + 50% { + border-bottom: 346.410161514px solid #ad988e; + } + 75% { + border-bottom: 346.410161514px solid #033135; + } + 100% { + border-bottom: 346.410161514px solid #ad988e; + } +} +body .ui_inner__item:nth-of-type(3)::after, body .ui_inner__item:nth-of-type(3)::before { + background: -webkit-linear-gradient(left, #021013 30%, #033135 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(3) .item_top, body .ui_inner__item:nth-of-type(3) .item_bottom { + border-bottom: 346.410161514px solid #033135; +} +body .ui_inner__item:nth-of-type(3) .item_active__part { + border-top: 346.410161514px solid #033135; +} +body .ui_inner__item:nth-of-type(3):hover { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(3):hover::after, body .ui_inner__item:nth-of-type(3):hover::before { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(3):hover .item_top, body .ui_inner__item:nth-of-type(3):hover .item_bottom { + border-bottom: 346.410161514px solid #ad988e; +} +body .ui_inner__item:nth-of-type(4) { + top: calc(50% + (3 * 16px) + (40px * 3)); + background: -webkit-linear-gradient(left, #021013 30%, #033531 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(4) .nodes { + box-shadow: 40px 0px 0 -3px #033531, 40px 0px 0px 0px white, 80px 0px 0 -3px #033531, 80px 0px 0px 0px white, 120px 0px 0 -3px #033531, 120px 0px 0px 0px white, 160px 0px 0 -3px #033531, 160px 0px 0px 0px white, 200px 0px 0 -3px #033531, 200px 0px 0px 0px white, 240px 0px 0 -3px #033531, 240px 0px 0px 0px white, 20px 40px 0 -3px #033531, 20px 40px 0px 0px white, 60px 40px 0 -3px #033531, 60px 40px 0px 0px white, 100px 40px 0 -3px #033531, 100px 40px 0px 0px white, 140px 40px 0 -3px #033531, 140px 40px 0px 0px white, 180px 40px 0 -3px #033531, 180px 40px 0px 0px white, 220px 40px 0 -3px #033531, 220px 40px 0px 0px white, 40px 80px 0 -3px #033531, 40px 80px 0px 0px white, 80px 80px 0 -3px #033531, 80px 80px 0px 0px white, 120px 80px 0 -3px #033531, 120px 80px 0px 0px white, 160px 80px 0 -3px #033531, 160px 80px 0px 0px white, 200px 80px 0 -3px #033531, 200px 80px 0px 0px white, 60px 120px 0 -3px #033531, 60px 120px 0px 0px white, 100px 120px 0 -3px #033531, 100px 120px 0px 0px white, 140px 120px 0 -3px #033531, 140px 120px 0px 0px white, 180px 120px 0 -3px #033531, 180px 120px 0px 0px white, 80px 160px 0 -3px #033531, 80px 160px 0px 0px white, 120px 160px 0 -3px #033531, 120px 160px 0px 0px white, 160px 160px 0 -3px #033531, 160px 160px 0px 0px white, 100px 200px 0 -3px #033531, 100px 200px 0px 0px white, 140px 200px 0 -3px #033531, 140px 200px 0px 0px white, 120px 240px 0 -3px #033531, 120px 240px 0px 0px white; +} +@-webkit-keyframes flash-4 { + 0% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 25% { + background: -webkit-linear-gradient(left, #021013 30%, #033531 70%, #021013 100%); + } + 50% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 75% { + background: -webkit-linear-gradient(left, #021013 30%, #033531 70%, #021013 100%); + } + 100% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } +} +@keyframes flash-4 { + 0% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 25% { + background: -webkit-linear-gradient(left, #021013 30%, #033531 70%, #021013 100%); + } + 50% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 75% { + background: -webkit-linear-gradient(left, #021013 30%, #033531 70%, #021013 100%); + } + 100% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } +} +@-webkit-keyframes flashTop-4 { + 0% { + border-bottom: 346.410161514px solid #ad988e; + } + 25% { + border-bottom: 346.410161514px solid #033531; + } + 50% { + border-bottom: 346.410161514px solid #ad988e; + } + 75% { + border-bottom: 346.410161514px solid #033531; + } + 100% { + border-bottom: 346.410161514px solid #ad988e; + } +} +@keyframes flashTop-4 { + 0% { + border-bottom: 346.410161514px solid #ad988e; + } + 25% { + border-bottom: 346.410161514px solid #033531; + } + 50% { + border-bottom: 346.410161514px solid #ad988e; + } + 75% { + border-bottom: 346.410161514px solid #033531; + } + 100% { + border-bottom: 346.410161514px solid #ad988e; + } +} +body .ui_inner__item:nth-of-type(4)::after, body .ui_inner__item:nth-of-type(4)::before { + background: -webkit-linear-gradient(left, #021013 30%, #033531 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(4) .item_top, body .ui_inner__item:nth-of-type(4) .item_bottom { + border-bottom: 346.410161514px solid #033531; +} +body .ui_inner__item:nth-of-type(4) .item_active__part { + border-top: 346.410161514px solid #033531; +} +body .ui_inner__item:nth-of-type(4):hover { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(4):hover::after, body .ui_inner__item:nth-of-type(4):hover::before { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(4):hover .item_top, body .ui_inner__item:nth-of-type(4):hover .item_bottom { + border-bottom: 346.410161514px solid #ad988e; +} +body .ui_inner__item:nth-of-type(5) { + top: calc(50% + (4 * 16px) + (40px * 4)); + background: -webkit-linear-gradient(left, #021013 30%, #033529 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(5) .nodes { + box-shadow: 40px 0px 0 -3px #033529, 40px 0px 0px 0px white, 80px 0px 0 -3px #033529, 80px 0px 0px 0px white, 120px 0px 0 -3px #033529, 120px 0px 0px 0px white, 160px 0px 0 -3px #033529, 160px 0px 0px 0px white, 200px 0px 0 -3px #033529, 200px 0px 0px 0px white, 240px 0px 0 -3px #033529, 240px 0px 0px 0px white, 20px 40px 0 -3px #033529, 20px 40px 0px 0px white, 60px 40px 0 -3px #033529, 60px 40px 0px 0px white, 100px 40px 0 -3px #033529, 100px 40px 0px 0px white, 140px 40px 0 -3px #033529, 140px 40px 0px 0px white, 180px 40px 0 -3px #033529, 180px 40px 0px 0px white, 220px 40px 0 -3px #033529, 220px 40px 0px 0px white, 40px 80px 0 -3px #033529, 40px 80px 0px 0px white, 80px 80px 0 -3px #033529, 80px 80px 0px 0px white, 120px 80px 0 -3px #033529, 120px 80px 0px 0px white, 160px 80px 0 -3px #033529, 160px 80px 0px 0px white, 200px 80px 0 -3px #033529, 200px 80px 0px 0px white, 60px 120px 0 -3px #033529, 60px 120px 0px 0px white, 100px 120px 0 -3px #033529, 100px 120px 0px 0px white, 140px 120px 0 -3px #033529, 140px 120px 0px 0px white, 180px 120px 0 -3px #033529, 180px 120px 0px 0px white, 80px 160px 0 -3px #033529, 80px 160px 0px 0px white, 120px 160px 0 -3px #033529, 120px 160px 0px 0px white, 160px 160px 0 -3px #033529, 160px 160px 0px 0px white, 100px 200px 0 -3px #033529, 100px 200px 0px 0px white, 140px 200px 0 -3px #033529, 140px 200px 0px 0px white, 120px 240px 0 -3px #033529, 120px 240px 0px 0px white; +} +@-webkit-keyframes flash-5 { + 0% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 25% { + background: -webkit-linear-gradient(left, #021013 30%, #033529 70%, #021013 100%); + } + 50% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 75% { + background: -webkit-linear-gradient(left, #021013 30%, #033529 70%, #021013 100%); + } + 100% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } +} +@keyframes flash-5 { + 0% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 25% { + background: -webkit-linear-gradient(left, #021013 30%, #033529 70%, #021013 100%); + } + 50% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 75% { + background: -webkit-linear-gradient(left, #021013 30%, #033529 70%, #021013 100%); + } + 100% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } +} +@-webkit-keyframes flashTop-5 { + 0% { + border-bottom: 346.410161514px solid #ad988e; + } + 25% { + border-bottom: 346.410161514px solid #033529; + } + 50% { + border-bottom: 346.410161514px solid #ad988e; + } + 75% { + border-bottom: 346.410161514px solid #033529; + } + 100% { + border-bottom: 346.410161514px solid #ad988e; + } +} +@keyframes flashTop-5 { + 0% { + border-bottom: 346.410161514px solid #ad988e; + } + 25% { + border-bottom: 346.410161514px solid #033529; + } + 50% { + border-bottom: 346.410161514px solid #ad988e; + } + 75% { + border-bottom: 346.410161514px solid #033529; + } + 100% { + border-bottom: 346.410161514px solid #ad988e; + } +} +body .ui_inner__item:nth-of-type(5)::after, body .ui_inner__item:nth-of-type(5)::before { + background: -webkit-linear-gradient(left, #021013 30%, #033529 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(5) .item_top, body .ui_inner__item:nth-of-type(5) .item_bottom { + border-bottom: 346.410161514px solid #033529; +} +body .ui_inner__item:nth-of-type(5) .item_active__part { + border-top: 346.410161514px solid #033529; +} +body .ui_inner__item:nth-of-type(5):hover { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(5):hover::after, body .ui_inner__item:nth-of-type(5):hover::before { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(5):hover .item_top, body .ui_inner__item:nth-of-type(5):hover .item_bottom { + border-bottom: 346.410161514px solid #ad988e; +} +body .ui_inner__item:nth-of-type(6) { + top: calc(50% + (5 * 16px) + (40px * 5)); + background: -webkit-linear-gradient(left, #021013 30%, #033520 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(6) .nodes { + box-shadow: 40px 0px 0 -3px #033520, 40px 0px 0px 0px white, 80px 0px 0 -3px #033520, 80px 0px 0px 0px white, 120px 0px 0 -3px #033520, 120px 0px 0px 0px white, 160px 0px 0 -3px #033520, 160px 0px 0px 0px white, 200px 0px 0 -3px #033520, 200px 0px 0px 0px white, 240px 0px 0 -3px #033520, 240px 0px 0px 0px white, 20px 40px 0 -3px #033520, 20px 40px 0px 0px white, 60px 40px 0 -3px #033520, 60px 40px 0px 0px white, 100px 40px 0 -3px #033520, 100px 40px 0px 0px white, 140px 40px 0 -3px #033520, 140px 40px 0px 0px white, 180px 40px 0 -3px #033520, 180px 40px 0px 0px white, 220px 40px 0 -3px #033520, 220px 40px 0px 0px white, 40px 80px 0 -3px #033520, 40px 80px 0px 0px white, 80px 80px 0 -3px #033520, 80px 80px 0px 0px white, 120px 80px 0 -3px #033520, 120px 80px 0px 0px white, 160px 80px 0 -3px #033520, 160px 80px 0px 0px white, 200px 80px 0 -3px #033520, 200px 80px 0px 0px white, 60px 120px 0 -3px #033520, 60px 120px 0px 0px white, 100px 120px 0 -3px #033520, 100px 120px 0px 0px white, 140px 120px 0 -3px #033520, 140px 120px 0px 0px white, 180px 120px 0 -3px #033520, 180px 120px 0px 0px white, 80px 160px 0 -3px #033520, 80px 160px 0px 0px white, 120px 160px 0 -3px #033520, 120px 160px 0px 0px white, 160px 160px 0 -3px #033520, 160px 160px 0px 0px white, 100px 200px 0 -3px #033520, 100px 200px 0px 0px white, 140px 200px 0 -3px #033520, 140px 200px 0px 0px white, 120px 240px 0 -3px #033520, 120px 240px 0px 0px white; +} +@-webkit-keyframes flash-6 { + 0% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 25% { + background: -webkit-linear-gradient(left, #021013 30%, #033520 70%, #021013 100%); + } + 50% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 75% { + background: -webkit-linear-gradient(left, #021013 30%, #033520 70%, #021013 100%); + } + 100% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } +} +@keyframes flash-6 { + 0% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 25% { + background: -webkit-linear-gradient(left, #021013 30%, #033520 70%, #021013 100%); + } + 50% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } + 75% { + background: -webkit-linear-gradient(left, #021013 30%, #033520 70%, #021013 100%); + } + 100% { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); + } +} +@-webkit-keyframes flashTop-6 { + 0% { + border-bottom: 346.410161514px solid #ad988e; + } + 25% { + border-bottom: 346.410161514px solid #033520; + } + 50% { + border-bottom: 346.410161514px solid #ad988e; + } + 75% { + border-bottom: 346.410161514px solid #033520; + } + 100% { + border-bottom: 346.410161514px solid #ad988e; + } +} +@keyframes flashTop-6 { + 0% { + border-bottom: 346.410161514px solid #ad988e; + } + 25% { + border-bottom: 346.410161514px solid #033520; + } + 50% { + border-bottom: 346.410161514px solid #ad988e; + } + 75% { + border-bottom: 346.410161514px solid #033520; + } + 100% { + border-bottom: 346.410161514px solid #ad988e; + } +} +body .ui_inner__item:nth-of-type(6)::after, body .ui_inner__item:nth-of-type(6)::before { + background: -webkit-linear-gradient(left, #021013 30%, #033520 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(6) .item_top, body .ui_inner__item:nth-of-type(6) .item_bottom { + border-bottom: 346.410161514px solid #033520; +} +body .ui_inner__item:nth-of-type(6) .item_active__part { + border-top: 346.410161514px solid #033520; +} +body .ui_inner__item:nth-of-type(6):hover { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(6):hover::after, body .ui_inner__item:nth-of-type(6):hover::before { + background: -webkit-linear-gradient(left, #021013 30%, #ad988e 70%, #021013 100%); +} +body .ui_inner__item:nth-of-type(6):hover .item_top, body .ui_inner__item:nth-of-type(6):hover .item_bottom { + border-bottom: 346.410161514px solid #ad988e; +} diff --git a/80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/license.txt b/80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/license.txt new file mode 100644 index 0000000..37183b8 --- /dev/null +++ b/80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/license.txt @@ -0,0 +1,13 @@ + + + + diff --git a/80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/src/index.haml b/80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/src/index.haml new file mode 100644 index 0000000..95a9aeb --- /dev/null +++ b/80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/src/index.haml @@ -0,0 +1,29 @@ +-@menuItems = ['publicinform', 'traffic control', 'cryoprison', 'administration', 'morality div', 'metro patrol'] + +-@subItems = ['publicinform', 'traffic control', 'cryoprison', 'administration', 'morality div', 'metro patrol'] +.scanlines + +.ui + -@menuItems.each_with_index do |item, index| + %input{:type => 'checkbox', :name => 'item', :id => "item-#{index + 1}"} + .intro_wrap + .intro + %img{:src => 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/demolition-man.png'} + %h1 80's / 90's Inspired UI's in CSS + %h2 Demolition Man 1993 + %img.gif{:src => 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/demogif.gif'} + %p A recreation of the Demolition Man 3D Hexagon Foldout menu in CSS only. Nice and cheesy. Not an exact replica for sure, perspectives are off slightly, but still looks good! + .ui_inner + -@menuItems.each_with_index do |item, index| + .ui_inner__item + %label{:for => "item-#{index + 1}"} + %span back + %h2 #{item} + .item_top + .item_bottom + -@subItems.each_with_index do |item, index| + .item_wrap{:class => "item-#{index + 1}"} + .item_active + .item_active__part + .nodes + %h3 #{item} diff --git a/80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/src/style.scss b/80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/src/style.scss new file mode 100644 index 0000000..915f18d --- /dev/null +++ b/80-s-90-s-movie-ui-s-recreated-in-css-1demolition-man-1993/src/style.scss @@ -0,0 +1,553 @@ +// Demolition man fontage + +@import url('https://fonts.googleapis.com/css?family=Nunito:400,700'); + +@font-face { + font-family: 'Superguns'; + src: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/Superguns.woff2') format('woff2'), + url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/217233/Superguns.woff') format('woff'); + font-weight: normal; + font-style: normal; +} + +// Colors +$bg: #021013; +$text: #c39d7e; +$triangleBg: #032035; + +// Dims +$triangleWidth: 400px; +$triangleHeight: 40px; +$triangleAltitude: 0.5 * 1.73205080757 * $triangleWidth + 0px; +$triangleGap: 16px; +$itemCount: 6; + +// Transition +$hueRotation: 10; +$verticalOffset: calc(50vh - 130px); +$horizontalOffset: 200px; +$rotationOffset: -10deg; +$moveAmount: 2100px; + +// Perspective +$globalPerspective: 1300px; + +%absPosition { + position: absolute; + top: 50%; + left: 0; + right: 0; + margin: auto; + transform: translateY(-50%); +} + +%killInteraction { + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} + +%triangleSides { + width: $triangleWidth; + height: $triangleHeight; + background: $triangleBg; + position: absolute; + top: 0; + display: block; + content: ''; + backface-visibility: none; + transition: all 0.6s; +} + +%triangleTop { + border-left: $triangleWidth / 2 solid transparent; + border-right: $triangleWidth / 2 solid transparent; + border-bottom: $triangleAltitude solid $triangleBg; + transform: translateY(-$triangleAltitude) rotateX(90deg); + backface-visibility: none; + position: absolute; + transform-origin: 100% 100%; + transition: all 0.0s; +} + +%trianglePart { + @extend %triangleTop; + + border-left: $triangleWidth / 2 solid transparent; + border-right: $triangleWidth / 2 solid transparent; + border-top: $triangleAltitude solid $triangleBg; + border-bottom: 0; +} + +// Traverse DOM for easy interactions +@mixin traverse($n) { + $item: ''; + $tab: ''; + + @for $i from 1 through $n { + $int: #{($n + 1) - $i}; + + & #item-#{$int}:checked #{$item} + div { + opacity: 0; + left: -100px; + transition: opacity 0.2s, left 0.4s; + } + + & #item-#{$int}:checked #{$item} + div + div { + transform: rotatex(-30deg) rotateY(-60deg) translateZ(0); + top: -100px - ((($n + 1) - $i - 1) * 50); + left: 0; + + & > .ui_inner__item { + transform: translateY(calc(50vh - #{$moveAmount})) translateX(-$triangleWidth / 2); + + // Why does syntax highlighting mess up here? + label { + transition: background 0.6s 5s; + transform: rotatey(60deg) rotatex(90deg) translatex(149px) translateZ(70px) translateY(295px); + background: #000000b3; + width: 160px; + padding: 20px; + border-radius: 6px; + + span { + opacity: 1; + transition: all 0.6s 5s; + } + } + + &:hover { + background: -webkit-linear-gradient(left, $bg 30%, adjust-hue($triangleBg, -(($n) - $i) * $hueRotation) 70%, $bg 100%); + + & .item_top, + & .item_bottom { + border-bottom: $triangleAltitude solid adjust-hue($triangleBg, -(($n) - $i) * $hueRotation); + } + + &::after, + &::before { + background: -webkit-linear-gradient(left, $bg 30%, adjust-hue($triangleBg, -(($n) - $i) * $hueRotation) 70%, $bg 100%); + } + } + + & .item_wrap { + + & .item_active { + &:after { + transition: all 1s 5s; + opacity: 1; + } + } + &:nth-of-type(6) { + & .item_active__part { + h3 { + transform: translateX(-246px) rotateY(0deg) rotateX(180deg); + } + } + } + + &:nth-of-type(5) { + & .item_active__part { + h3 { + transform: translateX(-246px) rotateY(0deg) rotateX(180deg); + } + } + } + + &:nth-of-type(4) { + & .item_active__part { + h3 { + transform: translateX(-246px) rotateY(0deg) rotateX(180deg); + } + } + } + + &:nth-of-type(8) { + & .item_active__part { + h3 { + transform: translateX(-246px); + animation: fadeIn 0.5s (0 * 0.5s) + 1.7s forwards !important; + } + + .nodes { + animation: fadeIn 0.5s (0 * 0.5s) + 1.7s forwards !important; + } + } + } + + @for $v from 2 through $itemCount + 2 { + &:nth-of-type(#{$v}) { + & .item_active__part { + @keyframes fadeIn { + to {opacity: 1;} + } + + h3, + .nodes { + animation: fadeIn 0.5s ($v * 0.5s) + 1.5s forwards; + } + } + } + } + + @for $v from 1 through $itemCount - 1 { + &:nth-of-type(#{$v + 2}) { + @extend %killInteraction; + + transform: rotateY(-60deg * ($v - 1)); + + & .item_active__part { + opacity: 0; + animation: flip 0.5s ($v * 0.5s) + 2s forwards; + backface-visibility: none; + } + } + } + } + + &:nth-of-type(#{$int}) { + transform: translateY(calc(50vh + 100px)) translateX(-$triangleWidth / 2); + animation: flash-#{$int} 0.3s linear; + + h2 { + transition: opacity 0.2s 1.4s; + } + + & .item_top, + & .item_bottom { + animation: flashTop-#{$int} 0.3s linear; + } + } + + @for $p from 1 through 5 { + &:nth-of-type(#{($n + 1) - $i + $p}) { + transform: translateY(calc(-50% + #{$moveAmount})) translateX(-$triangleWidth / 2); + } + } + + h2 { + opacity: 0; + } + } + } + + $item: $item + '+ input'; + $tab: $tab + '+ div'; + } +} + +body { + background: $bg; + overflow: hidden; + font-family: 'Superguns'; + letter-spacing: 1px; + margin: 0; + + & .scanlines { + @extend %killInteraction; + + background-image: repeating-linear-gradient(180deg, transparent, transparent 3px, rgba(224, 167, 167, 0.03) 9px, rgba(255, 255, 255, 0.1) 9px); + position: absolute; + height: 100%; + width: 100%; + top: 0; + z-index: 1; + } + + + & .intro_wrap { + height: 100vh; + transition: opacity 0.2s 1.7s, left 0.4s 1.7s; + position: relative; + left: 0; + } + + & .intro { + position: absolute; + width: 370px; + left: -530px; + font-family: 'Nunito', sans-serif; + right: 0; + margin: auto; + text-align: center; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + + img { + width: 150px; + margin-top: 17px; + } + + & .gif { + margin-top: 14px; + border: 2px solid white; + border-radius: 4px; + width: 250px; + } + + h1 { + color: #bf9a7c; + font-size: 16px; + margin: 10px 0 0; + } + + h2 { + margin: 0; + font-size: 14px; + color: #51b8d8 + } + + p { + color: #c8cdc4; + font-size: 12px; + } + } + + & .ui { + @include traverse($itemCount); + + perspective: $globalPerspective; + height: 100%; + opacity: 0; + animation: fadeIn 2.5s 0.3s forwards; + + & input { + display: none; + } + + &_inner { + @extend %absPosition; + + top: $verticalOffset; + left: $horizontalOffset; + transform: rotateY($rotationOffset); + transform-style: preserve-3d; + transition: all 2s 0.4s; + height: 0; + width: 100%; + + &__item { + @extend %absPosition; + + width: $triangleWidth; + height: $triangleHeight; + transition: all 0.6s, transform 2s 0.4s; + transform-style: preserve-3d; + transform-origin: 0% 0%; + + label { + position: absolute; + height: 131%; + width: 100%; + display: block; + background: none; + z-index: 1; + cursor: pointer; + transition: background 0.6s 0s; + text-align: center; + color: white; + text-transform: uppercase; + + span { + opacity: 0; + top: 9px; + position: relative; + transition: all 0s 0s; + } + } + + h2 { + @extend %absPosition; + @extend %killInteraction; + + right: $triangleHeight / 2; + color: $text; + transform: translateY(-50%) translatez(10px); + transition: opacity 0.2s 0.3s; + font-weight: normal; + font-size: 14px; + left: auto; + text-transform: uppercase; + } + + &::after { + @extend %triangleSides; + + transform: rotateY(60deg); + transform-origin: 0 0; + } + + &::before { + @extend %triangleSides; + + transform: rotateY(-60deg); + transform-origin: 100% 0; + } + + & .item_top { + @extend %triangleTop; + } + + & .item_bottom { + @extend %triangleTop; + + transform: translateY(-$triangleAltitude + $triangleHeight) rotateX(90deg); + } + + + & .item_wrap { + transform: rotatey(0deg); + transform-origin: $triangleWidth 100%; + transform-style: preserve-3d; + } + + & .item_active { + transform: rotateY(30deg) translateX(-55px) translateZ(-$triangleWidth / 2); + transform-origin: 100% 100%; + position: absolute; + transform-style: preserve-3d; + + &::after { + display: block; + content: ''; + width: 400px; + height: 30px; + transition: all 0s 0s; + opacity: 0; + position: absolute; + top: 0px; + transform: rotatex(0deg) rotatez(180deg) translateY(29px) rotateY(30deg) translateX(-748px) translateZ(-200px); + transform-origin: 0% 100%; + } + + @for $i from 1 through $itemCount { + &:nth-of-type(#{$i}) { + &::after { + background: adjust-hue($triangleBg, -($i - 1) * $hueRotation) + } + } + } + + &__part { + @extend %trianglePart; + @extend %killInteraction; + + transform: rotatex(90deg) rotatey(0deg) rotateZ(-30deg) translateX(0px) translateY(0px); + transform-origin: 100% 0; + transform-style: preserve-3D; + + & .nodes { + width: 20px; + height: 20px; + position: absolute; + border: 3px solid white; + opacity: 0; + border-radius: 100px; + top: -315px; + left: -132px; + transform: translateZ(1px); + } + + h3 { + @extend %killInteraction; + position: absolute; + top:- $triangleAltitude - 60; + width: 500px; + left: 0; + right: 0; + margin: auto; + text-transform: uppercase; + transform-style: preserve-3D; + transform: rotateX(-20deg) rotatey(180deg) translateX(50%); + color: #c39d7e; + font-weight: normal; + text-align: center; + font-size: 28px; + opacity: 0; + } + + @keyframes flip { + from {opacity: 1;transform: rotatex(90deg) rotatey(0deg) rotateZ(-30deg) translateX(0px) translateY(0px)} + to {opacity: 1;transform: rotatex(90deg) rotatey(180deg) rotateZ(-30deg) translateX(0px) translateY(0px)} + } + } + } + + @for $i from 1 through $itemCount { + &:nth-of-type(#{$i}) { + top: calc(50% + (#{$i - 1} * #{$triangleGap}) + (#{$triangleHeight} * #{$i - 1})); + background: -webkit-linear-gradient(left, $bg 30%, adjust-hue($triangleBg, -($i - 1) * $hueRotation) 70%, $bg 100%); + $c: adjust-hue($triangleBg, -($i - 1) * $hueRotation); + + & .nodes { + box-shadow: 40px 0px 0 -3px $c, 40px 0px 0px 0px white, 80px 0px 0 -3px $c, + 80px 0px 0px 0px white, 120px 0px 0 -3px $c, 120px 0px 0px 0px white, + 160px 0px 0 -3px $c, 160px 0px 0px 0px white, 200px 0px 0 -3px $c, + 200px 0px 0px 0px white, 240px 0px 0 -3px $c, 240px 0px 0px 0px white, + 20px 40px 0 -3px $c, 20px 40px 0px 0px white, 60px 40px 0 -3px $c, + 60px 40px 0px 0px white, 100px 40px 0 -3px $c, 100px 40px 0px 0px white, + 140px 40px 0 -3px $c, 140px 40px 0px 0px white, 180px 40px 0 -3px $c, + 180px 40px 0px 0px white, 220px 40px 0 -3px $c, 220px 40px 0px 0px white, + 40px 80px 0 -3px $c, 40px 80px 0px 0px white, 80px 80px 0 -3px $c, 80px 80px 0px 0px white, + 120px 80px 0 -3px $c, 120px 80px 0px 0px white, 160px 80px 0 -3px $c, + 160px 80px 0px 0px white, 200px 80px 0 -3px $c, 200px 80px 0px 0px white, + 60px 120px 0 -3px $c, 60px 120px 0px 0px white, 100px 120px 0 -3px $c, + 100px 120px 0px 0px white, 140px 120px 0 -3px $c, 140px 120px 0px 0px white, + 180px 120px 0 -3px $c, 180px 120px 0px 0px white, 80px 160px 0 -3px $c, + 80px 160px 0px 0px white, 120px 160px 0 -3px $c, 120px 160px 0px 0px white, + 160px 160px 0 -3px $c, 160px 160px 0px 0px white, 100px 200px 0 -3px $c, + 100px 200px 0px 0px white, 140px 200px 0 -3px $c, 140px 200px 0px 0px white, + 120px 240px 0 -3px $c, 120px 240px 0px 0px white + } + + @keyframes flash-#{$i} { + 0% {background: -webkit-linear-gradient(left, $bg 30%, #ad988e 70%, $bg 100%);} + 25% {background: -webkit-linear-gradient(left, $bg 30%, adjust-hue($triangleBg, -($i - 1) * $hueRotation) 70%, $bg 100%);} + 50% {background: -webkit-linear-gradient(left, $bg 30%, #ad988e 70%, $bg 100%);} + 75% {background: -webkit-linear-gradient(left, $bg 30%, adjust-hue($triangleBg, -($i - 1) * $hueRotation) 70%, $bg 100%);} + 100% {background: -webkit-linear-gradient(left, $bg 30%, #ad988e 70%, $bg 100%);} + } + + @keyframes flashTop-#{$i} { + 0% {border-bottom: $triangleAltitude solid #ad988e; } + 25% {border-bottom: $triangleAltitude solid adjust-hue($triangleBg, -($i - 1) * $hueRotation); } + 50% {border-bottom: $triangleAltitude solid #ad988e; } + 75% {border-bottom: $triangleAltitude solid adjust-hue($triangleBg, -($i - 1) * $hueRotation); } + 100% {border-bottom: $triangleAltitude solid #ad988e; } + } + + &::after, + &::before { + background: -webkit-linear-gradient(left, $bg 30%, adjust-hue($triangleBg, -($i - 1) * $hueRotation) 70%, $bg 100%); + } + + & .item_top, + & .item_bottom { + border-bottom: $triangleAltitude solid adjust-hue($triangleBg, -($i - 1) * $hueRotation); + } + + & .item_active__part { + border-top: $triangleAltitude solid adjust-hue($triangleBg, -($i - 1) * $hueRotation); + } + + &:hover { + background: -webkit-linear-gradient(left, $bg 30%, #ad988e 70%, $bg 100%); + + &::after, + &::before { + background: -webkit-linear-gradient(left, $bg 30%, #ad988e 70%, $bg 100%); + } + + & .item_top, + & .item_bottom { + border-bottom: $triangleAltitude solid #ad988e; + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/CodePen_Export_WKdodx/README.markdown b/CodePen_Export_WKdodx/README.markdown new file mode 100644 index 0000000..4ddb26a --- /dev/null +++ b/CodePen_Export_WKdodx/README.markdown @@ -0,0 +1,5 @@ +# + +A Pen created on CodePen.io. Original URL: [https://codepen.io/rauno/pen/WKdodx](https://codepen.io/rauno/pen/WKdodx). + + diff --git a/CodePen_Export_WKdodx/dist/index.html b/CodePen_Export_WKdodx/dist/index.html new file mode 100644 index 0000000..3e2cf4d --- /dev/null +++ b/CodePen_Export_WKdodx/dist/index.html @@ -0,0 +1,156 @@ + + + + + CodePen - A Pen by Rauno + + + + + +
+

Scroll Indicator

+
+ +
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham. +
+ + + + diff --git a/CodePen_Export_WKdodx/dist/style.css b/CodePen_Export_WKdodx/dist/style.css new file mode 100644 index 0000000..754f07a --- /dev/null +++ b/CodePen_Export_WKdodx/dist/style.css @@ -0,0 +1,43 @@ +header { + position: fixed; + top: 0; + height: 125px; + width: 100%; + background: white; +} + +header { + padding: 10px 10%; + box-sizing: border-box; +} + +body { + margin: 0; +} + +main { + margin-top: 128px; +} + +main { + padding: 10px 10%; + box-sizing: border-box; +} + +@supports (height: 100vh) { + body { + background: linear-gradient(to right top, #0089f2 50%, #DDD 50%); + background-size: 100% calc(100% - 100vh + 129px); + background-repeat: no-repeat; + } + + body:before { + content: ''; + position: fixed; + top: 128px; + bottom: 0; + width: 100%; + z-index: -1; + background: white; + } +} \ No newline at end of file diff --git a/CodePen_Export_WKdodx/license.txt b/CodePen_Export_WKdodx/license.txt new file mode 100644 index 0000000..8b52d84 --- /dev/null +++ b/CodePen_Export_WKdodx/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2022 by Rauno (https://codepen.io/rauno/pen/WKdodx) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/CodePen_Export_WKdodx/src/index.html b/CodePen_Export_WKdodx/src/index.html new file mode 100644 index 0000000..eb06fc7 --- /dev/null +++ b/CodePen_Export_WKdodx/src/index.html @@ -0,0 +1,142 @@ +
+

Scroll Indicator

+
+ +
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. + +Why do we use it? +It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). + + +Where does it come from? +Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32. + +The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham. +
diff --git a/CodePen_Export_WKdodx/src/style.css b/CodePen_Export_WKdodx/src/style.css new file mode 100644 index 0000000..754f07a --- /dev/null +++ b/CodePen_Export_WKdodx/src/style.css @@ -0,0 +1,43 @@ +header { + position: fixed; + top: 0; + height: 125px; + width: 100%; + background: white; +} + +header { + padding: 10px 10%; + box-sizing: border-box; +} + +body { + margin: 0; +} + +main { + margin-top: 128px; +} + +main { + padding: 10px 10%; + box-sizing: border-box; +} + +@supports (height: 100vh) { + body { + background: linear-gradient(to right top, #0089f2 50%, #DDD 50%); + background-size: 100% calc(100% - 100vh + 129px); + background-repeat: no-repeat; + } + + body:before { + content: ''; + position: fixed; + top: 128px; + bottom: 0; + width: 100%; + z-index: -1; + background: white; + } +} \ No newline at end of file diff --git a/a-css-only-carousel-slider/README.markdown b/a-css-only-carousel-slider/README.markdown new file mode 100644 index 0000000..4e87b58 --- /dev/null +++ b/a-css-only-carousel-slider/README.markdown @@ -0,0 +1,17 @@ +# A CSS-only Carousel Slider + _A Pen created at CodePen.io. Original URL: [https://codepen.io/Schepp/pen/WNbQByE](https://codepen.io/Schepp/pen/WNbQByE). + + I've recently read about and discussed CSS Scroll Snapping so often that I felt like I should build a CSS-only carousel based on it. + +Here are a few things to note: + +Accessibility is in line with all other CSS-only experiments: it can only be considered mediocre in term of semantics and visual indicators. Don't do this in production. + +The going forward and back is done via a combination of [CSS Scroll Snap](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Scroll_Snap) together with [`scroll-behavior: smooth`](https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior) and moving the focus through the slides via anchor links. + +The nicest trick I pull off is the one for the auto-forward: + +1. first I slowly offset the scroll snap points to the right, making the scroll area follow along due to being snapped to them. +2. after having scrolled the width of a whole slide, I deactivate the snapping. The scroll area is now untied from the scroll snap points. +3. Now I let the scroll snap points jump back to their initial positions without them "snap-dragging" the scroll area back with them +4. Then I re-engage the snapping which now lets the scroll area snap to a different snap point ๐Ÿคฏ Whatever... look at the code ๐Ÿ™ƒ diff --git a/a-css-only-carousel-slider/dist/index.html b/a-css-only-carousel-slider/dist/index.html new file mode 100644 index 0000000..3af3f92 --- /dev/null +++ b/a-css-only-carousel-slider/dist/index.html @@ -0,0 +1,79 @@ + + + + + A CSS-only Carousel Slider + + + + + +

CSS-only Carousel

+ +

This carousel is created with HTML and CSS only. On desktop Canary it even auto-forwards, as long as it is not hovered or until it gets focus (=has been interacted with). Click here to move focus back out and to resume the auto-forward.

+ + + + + + \ No newline at end of file diff --git a/a-css-only-carousel-slider/dist/style.css b/a-css-only-carousel-slider/dist/style.css new file mode 100644 index 0000000..7654e63 --- /dev/null +++ b/a-css-only-carousel-slider/dist/style.css @@ -0,0 +1,228 @@ +@keyframes tonext { + 75% { + left: 0; + } + 95% { + left: 100%; + } + 98% { + left: 100%; + } + 99% { + left: 0; + } +} + +@keyframes tostart { + 75% { + left: 0; + } + 95% { + left: -300%; + } + 98% { + left: -300%; + } + 99% { + left: 0; + } +} + +@keyframes snap { + 96% { + scroll-snap-align: center; + } + 97% { + scroll-snap-align: none; + } + 99% { + scroll-snap-align: none; + } + 100% { + scroll-snap-align: center; + } +} + +body { + max-width: 37.5rem; + margin: 0 auto; + padding: 0 1.25rem; + font-family: 'Lato', sans-serif; +} + +* { + box-sizing: border-box; + scrollbar-color: transparent transparent; /* thumb and track color */ + scrollbar-width: 0px; +} + +*::-webkit-scrollbar { + width: 0; +} + +*::-webkit-scrollbar-track { + background: transparent; +} + +*::-webkit-scrollbar-thumb { + background: transparent; + border: none; +} + +* { + -ms-overflow-style: none; +} + +ol, li { + list-style: none; + margin: 0; + padding: 0; +} + +.carousel { + position: relative; + padding-top: 75%; + filter: drop-shadow(0 0 10px #0003); + perspective: 100px; +} + +.carousel__viewport { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: flex; + overflow-x: scroll; + counter-reset: item; + scroll-behavior: smooth; + scroll-snap-type: x mandatory; +} + +.carousel__slide { + position: relative; + flex: 0 0 100%; + width: 100%; + background-color: #f99; + counter-increment: item; +} + +.carousel__slide:nth-child(even) { + background-color: #99f; +} + +.carousel__slide:before { + content: counter(item); + position: absolute; + top: 50%; + left: 50%; + transform: translate3d(-50%,-40%,70px); + color: #fff; + font-size: 2em; +} + +.carousel__snapper { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + scroll-snap-align: center; +} + +@media (hover: hover) { + .carousel__snapper { + animation-name: tonext, snap; + animation-timing-function: ease; + animation-duration: 4s; + animation-iteration-count: infinite; + } + + .carousel__slide:last-child .carousel__snapper { + animation-name: tostart, snap; + } +} + +@media (prefers-reduced-motion: reduce) { + .carousel__snapper { + animation-name: none; + } +} + +.carousel:hover .carousel__snapper, +.carousel:focus-within .carousel__snapper { + animation-name: none; +} + +.carousel__navigation { + position: absolute; + right: 0; + bottom: 0; + left: 0; + text-align: center; +} + +.carousel__navigation-list, +.carousel__navigation-item { + display: inline-block; +} + +.carousel__navigation-button { + display: inline-block; + width: 1.5rem; + height: 1.5rem; + background-color: #333; + background-clip: content-box; + border: 0.25rem solid transparent; + border-radius: 50%; + font-size: 0; + transition: transform 0.1s; +} + +.carousel::before, +.carousel::after, +.carousel__prev, +.carousel__next { + position: absolute; + top: 0; + margin-top: 37.5%; + width: 4rem; + height: 4rem; + transform: translateY(-50%); + border-radius: 50%; + font-size: 0; + outline: 0; +} + +.carousel::before, +.carousel__prev { + left: -1rem; +} + +.carousel::after, +.carousel__next { + right: -1rem; +} + +.carousel::before, +.carousel::after { + content: ''; + z-index: 1; + background-color: #333; + background-size: 1.5rem 1.5rem; + background-repeat: no-repeat; + background-position: center center; + color: #fff; + font-size: 2.5rem; + line-height: 4rem; + text-align: center; + pointer-events: none; +} + +.carousel::before { + background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3E%3Cpolygon points='0,50 80,100 80,0' fill='%23fff'/%3E%3C/svg%3E"); +} + +.carousel::after { + background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3E%3Cpolygon points='100,50 20,100 20,0' fill='%23fff'/%3E%3C/svg%3E"); +} \ No newline at end of file diff --git a/a-css-only-carousel-slider/license.txt b/a-css-only-carousel-slider/license.txt new file mode 100644 index 0000000..611eaf0 --- /dev/null +++ b/a-css-only-carousel-slider/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2019 by Christian Schaefer (https://codepen.io/Schepp/pen/WNbQByE) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/a-css-only-carousel-slider/src/index.html b/a-css-only-carousel-slider/src/index.html new file mode 100644 index 0000000..1061023 --- /dev/null +++ b/a-css-only-carousel-slider/src/index.html @@ -0,0 +1,65 @@ +

CSS-only Carousel

+ +

This carousel is created with HTML and CSS only. On desktop Canary it even auto-forwards, as long as it is not hovered or until it gets focus (=has been interacted with). Click here to move focus back out and to resume the auto-forward.

+ + \ No newline at end of file diff --git a/a-css-only-carousel-slider/src/style.css b/a-css-only-carousel-slider/src/style.css new file mode 100644 index 0000000..e443799 --- /dev/null +++ b/a-css-only-carousel-slider/src/style.css @@ -0,0 +1,228 @@ +@keyframes tonext { + 75% { + left: 0; + } + 95% { + left: 100%; + } + 98% { + left: 100%; + } + 99% { + left: 0; + } +} + +@keyframes tostart { + 75% { + left: 0; + } + 95% { + left: -300%; + } + 98% { + left: -300%; + } + 99% { + left: 0; + } +} + +@keyframes snap { + 96% { + scroll-snap-align: center; + } + 97% { + scroll-snap-align: none; + } + 99% { + scroll-snap-align: none; + } + 100% { + scroll-snap-align: center; + } +} + +body { + max-width: 37.5rem; + margin: 0 auto; + padding: 0 1.25rem; + font-family: 'Lato', sans-serif; +} + +* { + box-sizing: border-box; + scrollbar-color: transparent transparent; /* thumb and track color */ + scrollbar-width: 0px; +} + +*::-webkit-scrollbar { + width: 0; +} + +*::-webkit-scrollbar-track { + background: transparent; +} + +*::-webkit-scrollbar-thumb { + background: transparent; + border: none; +} + +* { + -ms-overflow-style: none; +} + +ol, li { + list-style: none; + margin: 0; + padding: 0; +} + +.carousel { + position: relative; + padding-top: 75%; + filter: drop-shadow(0 0 10px #0003); + perspective: 100px; +} + +.carousel__viewport { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: flex; + overflow-x: scroll; + counter-reset: item; + scroll-behavior: smooth; + scroll-snap-type: x mandatory; +} + +.carousel__slide { + position: relative; + flex: 0 0 100%; + width: 100%; + background-color: #f99; + counter-increment: item; +} + +.carousel__slide:nth-child(even) { + background-color: #99f; +} + +.carousel__slide:before { + content: counter(item); + position: absolute; + top: 50%; + left: 50%; + transform: translate3d(-50%,-40%,70px); + color: #fff; + font-size: 2em; +} + +.carousel__snapper { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + scroll-snap-align: center; +} + +@media (hover: hover) { + .carousel__snapper { + animation-name: tonext, snap; + animation-timing-function: ease; + animation-duration: 4s; + animation-iteration-count: infinite; + } + + .carousel__slide:last-child .carousel__snapper { + animation-name: tostart, snap; + } +} + +@media (prefers-reduced-motion: reduce) { + .carousel__snapper { + animation-name: none; + } +} + +.carousel:hover .carousel__snapper, +.carousel:focus-within .carousel__snapper { + animation-name: none; +} + +.carousel__navigation { + position: absolute; + right: 0; + bottom: 0; + left: 0; + text-align: center; +} + +.carousel__navigation-list, +.carousel__navigation-item { + display: inline-block; +} + +.carousel__navigation-button { + display: inline-block; + width: 1.5rem; + height: 1.5rem; + background-color: #333; + background-clip: content-box; + border: 0.25rem solid transparent; + border-radius: 50%; + font-size: 0; + transition: transform 0.1s; +} + +.carousel::before, +.carousel::after, +.carousel__prev, +.carousel__next { + position: absolute; + top: 0; + margin-top: 37.5%; + width: 4rem; + height: 4rem; + transform: translateY(-50%); + border-radius: 50%; + font-size: 0; + outline: 0; +} + +.carousel::before, +.carousel__prev { + left: -1rem; +} + +.carousel::after, +.carousel__next { + right: -1rem; +} + +.carousel::before, +.carousel::after { + content: ''; + z-index: 1; + background-color: #333; + background-size: 1.5rem 1.5rem; + background-repeat: no-repeat; + background-position: center center; + color: #fff; + font-size: 2.5rem; + line-height: 4rem; + text-align: center; + pointer-events: none; +} + +.carousel::before { + background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3E%3Cpolygon points='0,50 80,100 80,0' fill='%23fff'/%3E%3C/svg%3E"); +} + +.carousel::after { + background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3E%3Cpolygon points='100,50 20,100 20,0' fill='%23fff'/%3E%3C/svg%3E"); +} diff --git a/a-fake-dream/README.markdown b/a-fake-dream/README.markdown new file mode 100644 index 0000000..f0bd8f0 --- /dev/null +++ b/a-fake-dream/README.markdown @@ -0,0 +1,5 @@ +# A Fake Dream + +A Pen created on CodePen.io. Original URL: [https://codepen.io/pavlovsk/pen/RwpMVOz](https://codepen.io/pavlovsk/pen/RwpMVOz). + +Play with frequency, wavelength, thickness and colors to get interesting results. diff --git a/a-fake-dream/dist/index.html b/a-fake-dream/dist/index.html new file mode 100644 index 0000000..b276d03 --- /dev/null +++ b/a-fake-dream/dist/index.html @@ -0,0 +1,22 @@ + + + + + CodePen - A Fake Dream + + + + + + +
+
+
+
+
+
+ + + + + diff --git a/a-fake-dream/dist/script.js b/a-fake-dream/dist/script.js new file mode 100644 index 0000000..3418dcb --- /dev/null +++ b/a-fake-dream/dist/script.js @@ -0,0 +1,117 @@ +function getRandomWave(x, y) { + return noise.simplex2(x, y); +} + +function adjustCanvas(canvasElement) { + canvasElement.width = window.innerWidth * 90 / 100; + canvasElement.height = window.innerWidth * 55 / 100; + return canvasElement; +} + +window.addEventListener('resize', () => { + adjustCanvas(canvas); + reset(); +}); + +var canvasContainer = document.getElementById('canvasContainer'); +var canvas = adjustCanvas(document.createElement('canvas')); +var ctx = canvas.getContext('2d'); +canvasContainer.appendChild(canvas); +canvas.addEventListener('click', reset); + +var noiseX, noiseY, difference, x, y, thickness, frequency, gap, wavelength, baseY; + +var colors = [ +'blue', +'blue', +'hotpink', +'hotpink', +'hotpink', +'hotpink', +'hotpink']; + + +var texts = [ +'Reality', +'Existence', +'Universe', +'Life', +'Eternity']; + + +function randomFrom(arr) { + return arr[Math.floor(Math.random() * arr.length)]; +} + +function maybeNegative(number) { + return Math.random() >= .5 ? number : -number; +} + +function createText(content) { + const container = document.createElement('div'); + container.classList.add('text-container'); + container.id = 'text-element'; + const child = document.createElement('p'); + child.classList.add('text'); + child.innerHTML = content; + const y = maybeNegative(Math.random() * 25); + child.style.setProperty('--y', `${y}deg`); + const z = maybeNegative(Math.random() * 25); + child.style.setProperty('--z', `${z}deg`); + container.appendChild(child); + return container; +} + +reset(); + +function reset() { + noiseX = noiseY = 0; + x = y = 0; + difference = .025; + thickness = 2 + Math.round(Math.random() * 1); + frequency = 2; + gap = thickness + 1 + Math.round(Math.random() * 1); + wavelength = 10; + baseY = -wavelength; + noise.seed(Math.random()); + draw(null, true); + var textElement = document.querySelector('#text-element'); + if (textElement) { + textElement.remove(); + } + canvasContainer.appendChild(createText(randomFrom(texts))); +} + +function draw(ts, isFirst) { + if (baseY < window.innerHeight + wavelength) { + requestAnimationFrame(draw); + } + + if (isFirst) { + ctx.clearRect(0, 0, window.innerWidth, window.innerHeight); + } + + x = 0; + baseY += gap; + noiseX = 0; + noiseY += difference; + + while (x < window.innerWidth) { + ctx.beginPath(); + ctx.moveTo(x, y + baseY); + + x += frequency; + + y = getRandomWave( + noiseX += .004, + noiseY) * + wavelength; + + ctx.lineTo(x, y + baseY); + ctx.lineWidth = thickness; + ctx.lineCap = 'round'; + ctx.strokeStyle = randomFrom(colors); + ctx.stroke(); + } + +} \ No newline at end of file diff --git a/a-fake-dream/dist/style.css b/a-fake-dream/dist/style.css new file mode 100644 index 0000000..0fc4e84 --- /dev/null +++ b/a-fake-dream/dist/style.css @@ -0,0 +1,108 @@ +body { + height: 100vh; + background: black; + display: grid; + place-items: center; +} + +.scene { + position: relative; + width: 90vw; + height: 55vw; + max-width: 1140px; + max-height: 704px; + overflow: hidden; +} + +.canvas-container { + position: relative; + height: inherit; + max-height: inherit; + background: repeating-linear-gradient(hotpink 0.5%, hotpink 0.8%, blue 0.9%, blue 1.3%); + -webkit-animation: move 1s infinite linear; + animation: move 1s infinite linear; +} + +canvas { + cursor: pointer; +} + +@-webkit-keyframes move { + to { + background-position: 0% 1.66vh; + } +} + +@keyframes move { + to { + background-position: 0% 1.66vh; + } +} +.text-container { + position: absolute; + top: 13%; + right: 0; + width: 66%; + height: 50%; + perspective: 40vmin; + pointer-events: none; +} + +.text { + font-size: 15vmin; + color: rgba(255, 255, 255, 0.66); + opacity: 0; + transform-style: preserve-3d; + transform: rotateY(var(--y)) rotateZ(var(--z)); + -webkit-animation: appear 2s 1s forwards, translate 10s infinite linear; + animation: appear 2s 1s forwards, translate 10s infinite linear; +} + +@-webkit-keyframes appear { + to { + opacity: 1; + } +} + +@keyframes appear { + to { + opacity: 1; + } +} +@-webkit-keyframes translate { + 50% { + transform: rotateY(calc(var(--z))) rotateZ(calc(var(--y))) translateZ(3vmin); + } +} +@keyframes translate { + 50% { + transform: rotateY(calc(var(--z))) rotateZ(calc(var(--y))) translateZ(3vmin); + } +} +.center { + width: 100%; + height: 100%; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +.blend { + background: yellow; + opacity: 0.5; + mix-blend-mode: overlay; + pointer-events: none; +} + +.foreground-container { + position: absolute; + bottom: 0; + width: inherit; + height: inherit; + max-width: inherit; + max-height: inherit; + background: url(https://assets.codepen.io/25387/reality-foreground.png) no-repeat center bottom; + background-size: contain; + pointer-events: none; +} \ No newline at end of file diff --git a/a-fake-dream/license.txt b/a-fake-dream/license.txt new file mode 100644 index 0000000..b3d5d96 --- /dev/null +++ b/a-fake-dream/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Mustafa Enes (https://codepen.io/pavlovsk/pen/RwpMVOz) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/a-fake-dream/src/index.html b/a-fake-dream/src/index.html new file mode 100644 index 0000000..87a4e89 --- /dev/null +++ b/a-fake-dream/src/index.html @@ -0,0 +1,6 @@ +
+
+
+
+
+
diff --git a/a-fake-dream/src/script.babel b/a-fake-dream/src/script.babel new file mode 100644 index 0000000..e93bef6 --- /dev/null +++ b/a-fake-dream/src/script.babel @@ -0,0 +1,117 @@ +function getRandomWave(x, y) { + return noise.simplex2(x, y) +} + +function adjustCanvas(canvasElement) { + canvasElement.width = window.innerWidth * 90/100 + canvasElement.height = window.innerWidth * 55/100 + return canvasElement +} + +window.addEventListener('resize', () => { + adjustCanvas(canvas) + reset() +}) + +var canvasContainer = document.getElementById('canvasContainer') +var canvas = adjustCanvas(document.createElement('canvas')) +var ctx = canvas.getContext('2d') +canvasContainer.appendChild(canvas) +canvas.addEventListener('click', reset) + +var noiseX, noiseY, difference, x, y, thickness, frequency, gap, wavelength, baseY + +var colors = [ + 'blue', + 'blue', + 'hotpink', + 'hotpink', + 'hotpink', + 'hotpink', + 'hotpink' +] + +var texts = [ + 'Reality', + 'Existence', + 'Universe', + 'Life', + 'Eternity' +] + +function randomFrom(arr) { + return arr[Math.floor(Math.random() * arr.length)] +} + +function maybeNegative(number) { + return Math.random() >= .5 ? number : -number +} + +function createText(content) { + const container = document.createElement('div') + container.classList.add('text-container') + container.id = 'text-element' + const child = document.createElement('p') + child.classList.add('text') + child.innerHTML = content + const y = maybeNegative(Math.random() * 25) + child.style.setProperty('--y', `${y}deg`) + const z = maybeNegative(Math.random() * 25) + child.style.setProperty('--z', `${z}deg`) + container.appendChild(child) + return container +} + +reset() + +function reset() { + noiseX = noiseY = 0 + x = y = 0 + difference = .025 + thickness = 2 + Math.round(Math.random() * 1) + frequency = 2 + gap = thickness + 1 + Math.round(Math.random() * 1) + wavelength = 10 + baseY = -wavelength + noise.seed(Math.random()) + draw(null, true) + var textElement = document.querySelector('#text-element') + if (textElement) { + textElement.remove() + } + canvasContainer.appendChild(createText(randomFrom(texts))) +} + +function draw(ts, isFirst) { + if (baseY < window.innerHeight + wavelength) { + requestAnimationFrame(draw) + } + + if (isFirst) { + ctx.clearRect(0, 0, window.innerWidth, window.innerHeight) + } + + x = 0 + baseY += gap + noiseX = 0 + noiseY += difference + + while (x < window.innerWidth) { + ctx.beginPath() + ctx.moveTo(x, y + baseY) + + x += frequency + + y = getRandomWave( + noiseX += .004, + noiseY + ) * wavelength + + ctx.lineTo(x, y + baseY) + ctx.lineWidth = thickness + ctx.lineCap = 'round' + ctx.strokeStyle = randomFrom(colors) + ctx.stroke() + } + +} \ No newline at end of file diff --git a/a-fake-dream/src/style.scss b/a-fake-dream/src/style.scss new file mode 100644 index 0000000..7de7628 --- /dev/null +++ b/a-fake-dream/src/style.scss @@ -0,0 +1,104 @@ +body { + height: 100vh; + background: black; + display: grid; + place-items: center; +} + +.scene { + position: relative; + width: 90vw; + height: 55vw; + max-width: 1140px; + max-height: 704px; + overflow: hidden; +} + +.canvas-container { + position: relative; + height: inherit; + max-height: inherit; + background: repeating-linear-gradient( + hotpink .5%, + hotpink .8%, + blue .9%, + blue 1.3%, + ); + animation: move 1s infinite linear; +} + +canvas { + cursor: pointer; +} + +@keyframes move { + to { + background-position: 0% 1.66vh; + } +} + +.text-container { + position: absolute; + top: 13%; + right: 0; + width: 66%; + height: 50%; + perspective: 40vmin; + pointer-events: none; +} + +.text { + font-size: 15vmin; + color: rgba(white, 0.66); + opacity: 0; + transform-style: preserve-3d; + transform: + rotateY(var(--y)) + rotateZ(var(--z)); + animation: + appear 2s 1s forwards, + translate 10s infinite linear; +} + +@keyframes appear { + to { + opacity: 1; + } +} + +@keyframes translate { + 50% { + transform: + rotateY(calc(var(--z))) + rotateZ(calc(var(--y))) + translateZ(3vmin); + } +} + +.center { + width: 100%; + height: 100%; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +.blend { + background: yellow; + opacity: 0.5; + mix-blend-mode: overlay; + pointer-events: none; +} + +.foreground-container { + position: absolute; + bottom: 0; + width: inherit; + height: inherit; + max-width: inherit; + max-height: inherit; + background: url(https://assets.codepen.io/25387/reality-foreground.png) no-repeat center bottom; + background-size: contain; + pointer-events: none; +} \ No newline at end of file diff --git a/a-generative-svg-using-a-tetradic-color-pallette/README.markdown b/a-generative-svg-using-a-tetradic-color-pallette/README.markdown new file mode 100644 index 0000000..b25ffbf --- /dev/null +++ b/a-generative-svg-using-a-tetradic-color-pallette/README.markdown @@ -0,0 +1,5 @@ +# A generative SVG using a tetradic color pallette + +A Pen created on CodePen.io. Original URL: [https://codepen.io/nszafraniec/pen/mdOZMbO](https://codepen.io/nszafraniec/pen/mdOZMbO). + +A generative illustration using plain SVG and plain JS. It weirdly reminds me of TV test cards. diff --git a/a-generative-svg-using-a-tetradic-color-pallette/dist/index.html b/a-generative-svg-using-a-tetradic-color-pallette/dist/index.html new file mode 100644 index 0000000..15f7ff5 --- /dev/null +++ b/a-generative-svg-using-a-tetradic-color-pallette/dist/index.html @@ -0,0 +1,19 @@ + + + + + CodePen - A generative SVG using a tetradic color pallette + + + + + + + A generative illustration + Click on the image to redraw it! + + + + + + diff --git a/a-generative-svg-using-a-tetradic-color-pallette/dist/script.js b/a-generative-svg-using-a-tetradic-color-pallette/dist/script.js new file mode 100644 index 0000000..4458bea --- /dev/null +++ b/a-generative-svg-using-a-tetradic-color-pallette/dist/script.js @@ -0,0 +1,197 @@ +const settings = { + colors: { + decor: ["#432ee6", "#e62e74", "#d0e62e", "#2ee69f"], + main: ["#dddddd", "#222222"] + }, + decor: { + count: 25, + minWidth: 1, + maxWidth: 2, + minHeight: 3, + maxHeight: 12 + }, + sizes: { + columns: 35, + rows: 50, + maxColumnPart: 4 + } +}; + +const utils = { + getRandFromRange: function (min, max) { + return Math.floor(Math.random() * (max - min + 1)) + min; + }, + count: function (array) { + return array.length + ? array.reduce(function (previous, current) { + return previous + current; + }) + : 0; + } +}; + +class Illustration { + baseHeight; + baseWidth; + columns; + columnCount; + rowCount; + maxColumnPart; + decor; + colors; + screen = { width: 0, height: 0 }; + svg; + + constructor(selector, colors, decor, sizes) { + this.screen = { + width: window.innerWidth, + height: window.innerHeight + }; + + this.setSVG(selector); + + this.columns = []; + + this.decor = decor; + this.colors = colors; + + this.columnCount = sizes.columns; + this.rowCount = sizes.rows; + this.maxColumnPart = sizes.maxColumnPart; + + this.baseHeight = this.screen.height / this.rowCount; + this.baseWidth = this.screen.width / this.columnCount; + + this.draw(); + } + + setSVG(selector) { + this.svg = document.querySelector(selector); + this.svg.addEventListener("click", this.draw.bind(this)); + this.svg.setAttribute( + "viewBox", + `0 0 ${this.screen.width} ${this.screen.height}` + ); + } + + reset() { + this.columns = []; + this.svg.innerHTML = ""; + } + + setColumns() { + for (let i = 0; i < this.columnCount; ) { + const maxSize = this.columnCount - i; + const size = utils.getRandFromRange( + 1, + maxSize < this.maxColumnPart ? maxSize : this.maxColumnPart + ); + this.columns.push(size); + i += size; + } + } + + draw() { + this.reset(); + this.setColumns(); + this.drawBase(); + this.drawDecor(); + } + + drawBase() { + for (let i = 0; i < this.rowCount; i++) { + let x = 0; + + for (let j = 0; j < this.columns.length; j++) { + const width = this.baseWidth * this.columns[j]; + const rect = new Rect( + x, + i * this.baseHeight, + width, + this.baseHeight, + this.colors.main[(i + j) % 2] + ); + x += width; + + this.svg.appendChild(rect.getDOMElement()); + } + } + } + + drawDecor() { + for (let i = 0; i < this.decor.count; i++) { + const x = utils.getRandFromRange(0, this.columns.length - 1); + const y = utils.getRandFromRange(0, this.rowCount - 1); + + const height = utils.getRandFromRange( + this.decor.minHeight, + this.rowCount - y > this.decor.maxHeight + ? this.decor.maxHeight + : this.rowCount - y + ); + const width = utils.getRandFromRange( + this.decor.minWidth, + height > this.decor.maxWidth + 1 + ? this.decor.minWidth + : this.decor.maxWidth + ); + + const columnOffset = utils.count(this.columns.slice(0, x)); + const columnSpan = utils.count(this.columns.slice(x, x + width)); + + const rect = new Rect( + columnOffset * this.baseWidth, + y * this.baseHeight, + this.baseWidth * columnSpan, + this.baseHeight * height, + this.colors.decor[ + utils.getRandFromRange(0, this.colors.decor.length - 1) + ] + ); + + this.svg.appendChild(rect.getDOMElement()); + } + } +} + +class Rect { + x; + y; + width; + height; + fill; + element; + + constructor(x, y, width, height, fill) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + this.fill = fill; + + this.setDOMElement(); + } + + getDOMElement() { + return this.element; + } + + setDOMElement(x, y, width, height, fill) { + this.element = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + this.element.setAttribute("x", x ? x : this.x); + this.element.setAttribute("y", y ? y : this.y); + this.element.setAttribute("width", width ? width : this.width); + this.element.setAttribute("height", height ? height : this.height); + this.element.style.fill = fill ? fill : this.fill; + } +} + +const illustration = new Illustration( + "#illustration", + settings.colors, + settings.decor, + settings.sizes +); \ No newline at end of file diff --git a/a-generative-svg-using-a-tetradic-color-pallette/dist/style.css b/a-generative-svg-using-a-tetradic-color-pallette/dist/style.css new file mode 100644 index 0000000..5b2e970 --- /dev/null +++ b/a-generative-svg-using-a-tetradic-color-pallette/dist/style.css @@ -0,0 +1,10 @@ +body { + margin: 0; + padding: 0; + overflow: hidden; +} + +.scene { + width: 100vw; + height: 100vh; +} \ No newline at end of file diff --git a/a-generative-svg-using-a-tetradic-color-pallette/license.txt b/a-generative-svg-using-a-tetradic-color-pallette/license.txt new file mode 100644 index 0000000..35745bb --- /dev/null +++ b/a-generative-svg-using-a-tetradic-color-pallette/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Natalia ๐ŸคŸ (https://codepen.io/nszafraniec/pen/mdOZMbO) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/a-generative-svg-using-a-tetradic-color-pallette/src/index.html b/a-generative-svg-using-a-tetradic-color-pallette/src/index.html new file mode 100644 index 0000000..3545d85 --- /dev/null +++ b/a-generative-svg-using-a-tetradic-color-pallette/src/index.html @@ -0,0 +1,4 @@ + + A generative illustration + Click on the image to redraw it! + \ No newline at end of file diff --git a/a-generative-svg-using-a-tetradic-color-pallette/src/script.js b/a-generative-svg-using-a-tetradic-color-pallette/src/script.js new file mode 100644 index 0000000..9911ec9 --- /dev/null +++ b/a-generative-svg-using-a-tetradic-color-pallette/src/script.js @@ -0,0 +1,197 @@ +const settings = { + colors: { + decor: ["#432ee6", "#e62e74", "#d0e62e", "#2ee69f"], + main: ["#dddddd", "#222222"] + }, + decor: { + count: 25, + minWidth: 1, + maxWidth: 2, + minHeight: 3, + maxHeight: 12 + }, + sizes: { + columns: 35, + rows: 50, + maxColumnPart: 4 + } +}; + +const utils = { + getRandFromRange: function (min, max) { + return Math.floor(Math.random() * (max - min + 1)) + min; + }, + count: function (array) { + return array.length + ? array.reduce(function (previous, current) { + return previous + current; + }) + : 0; + } +}; + +class Illustration { + baseHeight; + baseWidth; + columns; + columnCount; + rowCount; + maxColumnPart; + decor; + colors; + screen = { width: 0, height: 0 }; + svg; + + constructor(selector, colors, decor, sizes) { + this.screen = { + width: window.innerWidth, + height: window.innerHeight + }; + + this.setSVG(selector); + + this.columns = []; + + this.decor = decor; + this.colors = colors; + + this.columnCount = sizes.columns; + this.rowCount = sizes.rows; + this.maxColumnPart = sizes.maxColumnPart; + + this.baseHeight = this.screen.height / this.rowCount; + this.baseWidth = this.screen.width / this.columnCount; + + this.draw(); + } + + setSVG(selector) { + this.svg = document.querySelector(selector); + this.svg.addEventListener("click", this.draw.bind(this)); + this.svg.setAttribute( + "viewBox", + `0 0 ${this.screen.width} ${this.screen.height}` + ); + } + + reset() { + this.columns = []; + this.svg.innerHTML = ""; + } + + setColumns() { + for (let i = 0; i < this.columnCount; ) { + const maxSize = this.columnCount - i; + const size = utils.getRandFromRange( + 1, + maxSize < this.maxColumnPart ? maxSize : this.maxColumnPart + ); + this.columns.push(size); + i += size; + } + } + + draw() { + this.reset(); + this.setColumns(); + this.drawBase(); + this.drawDecor(); + } + + drawBase() { + for (let i = 0; i < this.rowCount; i++) { + let x = 0; + + for (let j = 0; j < this.columns.length; j++) { + const width = this.baseWidth * this.columns[j]; + const rect = new Rect( + x, + i * this.baseHeight, + width, + this.baseHeight, + this.colors.main[(i + j) % 2] + ); + x += width; + + this.svg.appendChild(rect.getDOMElement()); + } + } + } + + drawDecor() { + for (let i = 0; i < this.decor.count; i++) { + const x = utils.getRandFromRange(0, this.columns.length - 1); + const y = utils.getRandFromRange(0, this.rowCount - 1); + + const height = utils.getRandFromRange( + this.decor.minHeight, + this.rowCount - y > this.decor.maxHeight + ? this.decor.maxHeight + : this.rowCount - y + ); + const width = utils.getRandFromRange( + this.decor.minWidth, + height > this.decor.maxWidth + 1 + ? this.decor.minWidth + : this.decor.maxWidth + ); + + const columnOffset = utils.count(this.columns.slice(0, x)); + const columnSpan = utils.count(this.columns.slice(x, x + width)); + + const rect = new Rect( + columnOffset * this.baseWidth, + y * this.baseHeight, + this.baseWidth * columnSpan, + this.baseHeight * height, + this.colors.decor[ + utils.getRandFromRange(0, this.colors.decor.length - 1) + ] + ); + + this.svg.appendChild(rect.getDOMElement()); + } + } +} + +class Rect { + x; + y; + width; + height; + fill; + element; + + constructor(x, y, width, height, fill) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + this.fill = fill; + + this.setDOMElement(); + } + + getDOMElement() { + return this.element; + } + + setDOMElement(x, y, width, height, fill) { + this.element = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + this.element.setAttribute("x", x ? x : this.x); + this.element.setAttribute("y", y ? y : this.y); + this.element.setAttribute("width", width ? width : this.width); + this.element.setAttribute("height", height ? height : this.height); + this.element.style.fill = fill ? fill : this.fill; + } +} + +const illustration = new Illustration( + "#illustration", + settings.colors, + settings.decor, + settings.sizes +); diff --git a/a-generative-svg-using-a-tetradic-color-pallette/src/style.css b/a-generative-svg-using-a-tetradic-color-pallette/src/style.css new file mode 100644 index 0000000..e532da1 --- /dev/null +++ b/a-generative-svg-using-a-tetradic-color-pallette/src/style.css @@ -0,0 +1,10 @@ +body { + margin: 0; + padding: 0; + overflow: hidden; +} + +.scene { + width: 100vw; + height: 100vh; +} diff --git a/a-pure-css-gameyou-must-build-a-lighthouse/README.markdown b/a-pure-css-gameyou-must-build-a-lighthouse/README.markdown new file mode 100644 index 0000000..b98718a --- /dev/null +++ b/a-pure-css-gameyou-must-build-a-lighthouse/README.markdown @@ -0,0 +1,17 @@ +# A Pure CSS Game - You Must Build a Lighthouse. + +A Pen created on CodePen.io. Original URL: [https://codepen.io/ivorjetski/pen/OJXbvdL](https://codepen.io/ivorjetski/pen/OJXbvdL). + +100% CSS. No artificial colours or ingredients. + +First person to screenshot a lighthouse wins! + +Find me @ +https://twitter.com/ivorjetski +https://www.instagram.com/benevansdesign +https://www.youtube.com/c/BenEvanski +https://www.tinydesign.co.uk + +This version is slightly cut down to fit in CodePen which still struggles a little. So there are a few bugs... I guess I need to refactor the code a little :) +Here's the full version: https://www.tinydesign.co.uk/css-town/ + diff --git a/a-pure-css-gameyou-must-build-a-lighthouse/dist/index.html b/a-pure-css-gameyou-must-build-a-lighthouse/dist/index.html new file mode 100644 index 0000000..033b7fc --- /dev/null +++ b/a-pure-css-gameyou-must-build-a-lighthouse/dist/index.html @@ -0,0 +1,214 @@ + + + + + CodePen - A Pure CSS Game - You Must Build a Lighthouse. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+ + + + +

NICE ONE!

+

You built a lighthouse before nightfall!

+

The ships and islanders are safe!

+
+
+ + + +

GAME OVER!

+

I'm afraid I have some very bad news...

+

A ship has crashed into your beautiful island.

+

Everybody is dead!

+

Soz! You should build a lighthouse.

+ Try Again +
+
+
+
+ +
+ + + + + + diff --git a/a-pure-css-gameyou-must-build-a-lighthouse/dist/script.js b/a-pure-css-gameyou-must-build-a-lighthouse/dist/script.js new file mode 100644 index 0000000..dde3155 --- /dev/null +++ b/a-pure-css-gameyou-must-build-a-lighthouse/dist/script.js @@ -0,0 +1,5 @@ +// 100% CSS. No artificial colours or ingredients. + +// First person to screenshot a lighthouse wins! + +// Your time starts now... \ No newline at end of file diff --git a/a-pure-css-gameyou-must-build-a-lighthouse/dist/style.css b/a-pure-css-gameyou-must-build-a-lighthouse/dist/style.css new file mode 100644 index 0000000..0ac4312 --- /dev/null +++ b/a-pure-css-gameyou-must-build-a-lighthouse/dist/style.css @@ -0,0 +1,49364 @@ +@charset "UTF-8"; +.house.row3:checked ~ div, +.shed.row3:checked ~ div { + filter: hue-rotate(-20deg); +} + +.house.row2:checked ~ div, +.shed.row2:checked ~ div { + filter: hue-rotate(-35deg); +} + +.house.row1:checked ~ div, +.shed.row1:checked ~ div { + filter: hue-rotate(-50deg); +} + +html { + font-size: 0.97vh; + width: 100%; + height: 100%; + background: #f3cece; + overflow: hidden; +} + +body { + margin: 0; + overflow: hidden; + width: 100%; + height: 100%; + background: linear-gradient(rgba(96, 139, 136, 0.5), rgba(255, 255, 255, 0.75), rgba(255, 255, 255, 0)); + box-shadow: inset 0 0 5rem 0 #252529; +} +body, +body *, +body *:before, +body *:after { + display: block; + top: 0; + left: 0; + box-sizing: border-box; + position: absolute; + content: ""; +} + +div, +house, +shed, +hbtn, +sbtn { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 50rem; + height: 50rem; + display: flex; + flex-wrap: wrap; + align-content: flex-start; +} +div label, +house label, +shed label, +hbtn label, +sbtn label { + width: calc(50rem / 4); + height: calc(50rem / 4); + position: relative; + border: none; + background: none; + padding: 0; + margin: 0; + display: inline; + cursor: pointer; + box-shadow: 0 0 0 2rem rgba(255, 255, 255, 0); +} +div label *, +div label *:before, +div label *:after, +house label *, +house label *:before, +house label *:after, +shed label *, +shed label *:before, +shed label *:after, +hbtn label *, +hbtn label *:before, +hbtn label *:after, +sbtn label *, +sbtn label *:before, +sbtn label *:after { + transform: translate3d(0, 0, 0); + z-index: 1; + left: 0; + top: 0; + background: none; + border: none; + box-shadow: none; + pointer-events: none; +} +div label > i:nth-of-type(1):before, div label > i:nth-of-type(1):after, +house label > i:nth-of-type(1):before, +house label > i:nth-of-type(1):after, +shed label > i:nth-of-type(1):before, +shed label > i:nth-of-type(1):after, +hbtn label > i:nth-of-type(1):before, +hbtn label > i:nth-of-type(1):after, +sbtn label > i:nth-of-type(1):before, +sbtn label > i:nth-of-type(1):after { + filter: blur(0.5rem); + border: 1rem solid rgba(111, 111, 122, 0.75); + width: 5rem; + height: 5rem; + background: #6f6f7a; + opacity: 0; + border-radius: 50%; + box-shadow: 2rem -1.5rem 0 1rem rgba(111, 111, 122, 0.75), 3rem -2rem 0 1.5rem rgba(111, 111, 122, 0.5); +} + +colour { + width: 100%; + height: 100%; +} +colour input, +colour br { + position: relative; + display: inline-block; + opacity: 0.2; + top: 1rem; + left: 1rem; + transform: scale(0.75); + margin: -0.2rem; +} +@media (max-width: 900px) { + colour input, + colour br { + display: none; + } +} +colour input:checked { + opacity: 1; +} +colour br { + display: block; +} + +input { + display: none; +} + +div.main { + -webkit-box-reflect: below 4rem; +} + +div.ss { + pointer-events: none; +} + +sbtn { + height: calc(50rem - (50rem / 4)); + bottom: auto; +} +sbtn label { + border: solid 1px rgba(116, 116, 116, 0.1); +} +sbtn label:nth-of-type(1) { + border-radius: 3rem 0 0 0; +} +sbtn label:nth-of-type(4) { + border-radius: 0 3rem 0 0; +} +sbtn label:hover { + border-color: #555; +} + +hbtn label:nth-of-type(n + 12) { + border: solid 1px rgba(116, 116, 116, 0.1); +} +hbtn label:nth-of-type(n + 12):hover { + border-color: #555; +} + +@keyframes smoke { + 0% { + transform: scale(0.2) translate3d(0, 0, 0) rotate(-15deg); + opacity: 0.075; + } + 50% { + transform: scale(1) translate3d(2rem, -4rem, 0) rotate(0); + opacity: 0.15; + } + 100% { + transform: scale(2) translate3d(5rem, -5rem, 0) rotate(10deg); + opacity: 0; + } +} +island { + position: absolute; + top: 76rem; + top: 49.25rem; + left: -50%; + right: -50%; + margin: auto; + width: 80rem; + height: 5rem; + background: #bca52f; + border-radius: 55% 55% 45% 45%; +} + +grass { + position: absolute; + z-index: 500; + top: 76rem; + top: 49.25rem; + left: -50%; + right: -50%; + margin: auto; + width: 80rem; + height: 5rem; + -webkit-box-reflect: below -5rem; + transform: skewX(0); +} +grass:after, grass:before { + top: 0.75rem; + left: 0.6rem; + z-index: 100; + width: 0.5rem; + height: 1.75rem; + transform: skewY(60deg); + background: #bca52f; + box-shadow: 1rem -1.6rem 0 #bca52f, 2.1rem -3.6rem 0 #bca52f, 2.9rem -4.8rem 0 #bca52f, 4rem -7rem 0 #bca52f; + filter: drop-shadow(5rem -8.3rem 0 #bca52f) drop-shadow(10rem -17.3rem 0 #bca52f) drop-shadow(20rem -34.5rem 0 #bca52f) drop-shadow(40rem -69rem 0 #bca52f); +} +grass:before { + transform: skewY(-60deg); + box-shadow: 1rem 1.6rem 0 #bca52f, 2.1rem 3.6rem 0 #bca52f, 2.9rem 4.8rem 0 #bca52f, 4rem 7rem 0 #bca52f; + filter: drop-shadow(5rem 8.3rem 0 #bca52f) drop-shadow(10rem 17.3rem 0 #bca52f) drop-shadow(20rem 34.5rem 0 #bca52f) drop-shadow(40rem 69rem 0 #bca52f); + left: 0; + top: 1.5rem; +} + +@keyframes grass { + 100% { + transform: skewX(5deg); + } +} +input:focus ~ div > div { + animation: thud 0.1s linear; +} + +@keyframes thud { + 0% { + transform: translate3d(0, 1rem, 0); + } + 60% { + transform: translate3d(0, -0.5rem, 0); + } + 80% { + transform: translate3d(0, 0.25rem, 0); + } +} +sig { + z-index: 500; + opacity: 0.2; + font-size: 0.5rem; + color: #000; + width: 10em; + top: auto; + left: auto; + bottom: 1em; + right: 1em; + transform: skewX(10deg) scaleY(0.45) rotate(2deg); +} +sig, +sig * { + height: 9.25em; + overflow: hidden; + border-radius: 0.5em; +} +sig:before, +sig *:before { + width: 5em; + height: 5em; + background: currentColor; + transform: translate3d(-2.5em, 0, 0) rotate(-45deg); + box-shadow: -3em 3em 0 0 currentColor; + border-radius: 0.5em 2em 0.5em 2em; +} +sig * { + width: 5em; + transform: translate3d(3.75em, 0, 0) scaleY(0.95); + display: block !important; +} +sig *:before { + transform: translate3d(-3em, -2em, 0) rotate(-45deg); + box-shadow: -3em 3em 0 0 currentColor, -6em 6em 0 0 currentColor; + border-radius: 0.5em; +} + +text { + width: 95%; + max-width: 70rem; + bottom: 25%; + color: #e7b39d; + right: 0; + margin: auto; + height: 1rem; + font-size: 2.5rem; + text-align: center; + font-family: Telefon, Sans-Serif; + z-index: -1; + transform: scale(0); + font-weight: 100; + letter-spacing: 0.1rem; + opacity: 0; +} +text welldone, +text gameover { + box-shadow: 0 0 5rem #ff7700, inset 0 0 0 0.5rem #fff; + background: rgba(32, 17, 42, 0.95); + padding: 5rem; + border-radius: 5rem; + border: 1rem solid #20112a; +} +text welldone { + display: none; +} +text * { + position: static; +} +text p:nth-of-type(1) { + font-size: 4rem; +} +text p:nth-of-type(odd) { + color: #bc2f60; +} +text label { + position: absolute; + left: auto; + right: 3rem; + top: 3rem; + color: #bc2f60; + padding: 2rem; + border-radius: 2rem; + box-shadow: 0 0 1rem rgba(255, 255, 255, 0); + cursor: pointer; + transition: box-shadow 0.25s ease-in-out; + box-sizing: border-box; + line-height: 1; +} +text label:hover, text label:focus { + box-shadow: 0 0 0.15rem #fff; +} +text a { + padding: 0.5rem 1rem; + border-radius: 1rem; + text-decoration: none; + background: #bc2f60; + color: #20112a; + box-shadow: 0 0 0 1rem rgba(255, 255, 255, 0), inset 0 0 0 0 rgba(255, 255, 255, 0.2); + transition: all 0.2s ease-in-out; +} +text a:hover, text a:focus { + box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.2), inset 0 0 0 3rem rgba(255, 255, 255, 0.2); +} + +#done:checked ~ text { + transform: scale(0) !important; + transition: all 0.5s ease-in-out; + opacity: 0; +} + +colour > *:not(.lh):not(text) { + filter: hue-rotate(0deg) brightness(100%); + animation: set 400s linear infinite; +} + +@media screen and (max-device-width: 480px) { + colour > *:not(.lh):not(text) { + animation: none; + } +} +@keyframes set { + 15%, + 85% { + filter: hue-rotate(0deg) brightness(100%); + } + 30%, + 70% { + filter: hue-rotate(-20deg) brightness(10%); + } + 40%, + 60% { + filter: hue-rotate(-40deg) brightness(50%); + } +} +stars { + width: 220rem; + height: 100%; + position: absolute; + top: 0; + left: 0; + right: 0; + margin: auto; + animation: stars 400s linear infinite; + -webkit-box-reflect: below -50rem; + opacity: 0; + z-index: 0; +} +stars:before { + width: 0.5rem; + height: 0.5rem; + box-shadow: 72vmin 41vmin 0 -.1rem #f9b9c8 , 47vmin 8vmin 0 -.2rem #8bd5fc , 170vmin 32vmin 0 -.1rem #af8bfc , 198vmin 36vmin 0 -.2rem #fc8bcb , 166vmin 30vmin 0 -.2rem #fc8bcd , 78vmin 52vmin 0 -.1rem #8babfc , 73vmin 10vmin 0 -.2rem #d48bfc , 60vmin 12vmin 0 -.1rem #8bfce7 , 74vmin 10vmin 0 -.2rem #fc908b , 134vmin 33vmin 0 -.2rem #8bfc92 , 57vmin 38vmin 0 -.1rem #8bfcda , 130vmin 12vmin 0 -.2rem #fc8bab , 115vmin 22vmin 0 -.2rem #e9fc8b , 48vmin 35vmin 0 -.1rem #cd8bfc , 47vmin 3vmin 0 -.1rem #fc8b9e , 66vmin 45vmin 0 -.1rem #fc8bdc , 163vmin 53vmin 0 -.1rem #8bfc96 , 17vmin 52vmin 0 -.1rem #fc8bc6 , 10vmin 2vmin 0 -.1rem #8bfce0 , 35vmin 36vmin 0 -.1rem #fc8bb1 , 165vmin 48vmin 0 -.2rem #8bf8fc , 90vmin 38vmin 0 -.2rem #dafc8b , 157vmin 17vmin 0 -.2rem #fc8bbe , 14vmin 18vmin 0 -.2rem #8bfccb , 60vmin 26vmin 0 -.2rem #fc8bad , 89vmin 18vmin 0 -.1rem #8bfcda , 192vmin 36vmin 0 -.2rem #8bb3fc , 76vmin 2vmin 0 -.1rem #8bd7fc , 2vmin 15vmin 0 -.1rem #fcef8b , 163vmin 19vmin 0 -.1rem #8bf1fc , 44vmin 38vmin 0 -.1rem #8bfccb , 25vmin 28vmin 0 -.1rem #b7fc8b , 60vmin 36vmin 0 -.2rem #c18bfc , 72vmin 24vmin 0 -.1rem #fc8bf5 , 138vmin 40vmin 0 -.2rem #d68bfc , 40vmin 45vmin 0 -.2rem #fc8be2 , 31vmin 20vmin 0 -.2rem #8b9afc , 12vmin 38vmin 0 -.2rem #fc8bcb , 172vmin 34vmin 0 -.1rem #988bfc , 139vmin 43vmin 0 -.2rem #fc8bed , 111vmin 38vmin 0 -.1rem #e4fc8b , 52vmin 46vmin 0 -.2rem #8bfcc9 , 92vmin 37vmin 0 -.1rem #8bdefc , 72vmin 13vmin 0 -.2rem #bafc8b , 16vmin 39vmin 0 -.2rem #fc8bcd , 39vmin 15vmin 0 -.1rem #988bfc , 85vmin 10vmin 0 -.2rem #8f8bfc , 63vmin 22vmin 0 -.2rem #fc8b9a , 64vmin 36vmin 0 -.2rem #8ba2fc , 1vmin 35vmin 0 -.1rem #fc9a8b; + border-radius: 50%; + content: ""; + position: absolute; + top: 5rem; + left: 5rem; +} +stars i:before, stars i:after { + width: 0.5rem; + height: 0.5rem; + top: 40rem; + left: 40rem; + background: #fff; + border-radius: 50%; + animation: stars 1s linear infinite; + opacity: 0.5; + box-shadow: 0 0 1rem #fff; +} +stars i:after { + top: 20rem; + left: 180rem; + animation: stars 1s 0.5s linear infinite; + background: #f9b9c8; +} + +sky { + width: 100%; + height: 78.5rem; + overflow: hidden; + -webkit-box-reflect: below 0; + z-index: 0; +} +sky:before, sky:after { + width: 100%; + height: 100%; + background: linear-gradient(#323248 10%, #fbd447, #d8480f); + opacity: 0; + animation: sky 400s linear infinite; +} +sky:after { + background: linear-gradient(#19043f, #1a0f6c); +} + +time { + pointer-events: none; +} +time, +time sun { + width: 170rem; + height: 170rem; + left: -100%; + right: -100%; + top: -100%; + bottom: -170%; + margin: auto; +} +time sun { + bottom: -100%; + transform: rotate(0deg); + z-index: 1; + animation: sun 400s linear infinite; + filter: blur(1rem) brightness(400%); +} +time sun:before { + width: 25rem; + height: 25rem; + border-radius: 50%; + background: radial-gradient(#bc592f, #bc2f2f); + right: 0; + margin: auto; + transform: rotate(0deg); +} +time sun:after { + width: 10rem; + height: 10rem; + border-radius: 50%; + box-shadow: inset 0 2rem 0 #5a4e38; + background: rgba(0, 0, 0, 0.1); + left: 60%; + top: auto; + bottom: 0; + transform: rotate(0deg); + z-index: 1; +} + +@media (max-width: 500px) { + time, + input { + display: none; + } +} +div.ss lens { + top: 20rem; + left: 70rem; + animation: lensflair 400s linear infinite; + width: 60rem; + height: 60rem; + filter: brightness(150%); + transform: rotate(0); + opacity: 0; +} +div.ss lens:before { + width: 60rem; + height: 60rem; + border-radius: 50%; + top: 0; + right: -50%; + left: -50%; + margin: auto; + box-shadow: 0 70rem 0 -20rem yellow, 0 50rem 0 -25rem yellow, 0 100rem 0 5rem #f437c5, inset 0 0 3rem #ff7700; + border: 1rem solid #ff7700; +} +div.ss lens:after { + width: 100rem; + height: 100rem; + border-radius: 50%; + top: 140rem; + right: -50%; + left: -50%; + margin: auto; + border: 1rem solid yellow; + box-shadow: 0 0 3rem red, inset 0 0 3rem blue; +} + +@keyframes lensflair { + 20%, + 30%, + 70%, + 80% { + opacity: 0; + } + 25%, + 75% { + opacity: 0.05; + } + 100% { + transform: rotate(360deg); + opacity: 0; + } +} +@keyframes sun { + 20%, + 80% { + filter: blur(1rem) brightness(390%); + } + 27%, + 73% { + filter: blur(1rem) brightness(200%); + } + 100% { + transform: rotate(360deg); + } +} +@keyframes stars { + 50% { + opacity: 1; + } +} +@keyframes sky { + 20%, + 85% { + filter: brightness(100%); + opacity: 0; + } + 30%, + 70% { + filter: brightness(100%); + opacity: 1; + } + 40%, + 60% { + filter: brightness(20%); + opacity: 1; + } +} +sunset { + width: 150%; + height: 20rem; + left: -25%; + top: 60rem; + background: radial-gradient(farthest-side at 70% 100%, #ff6400, rgba(255, 255, 255, 0)); + filter: blur(1rem); + -webkit-box-reflect: below 0; + animation: sunset 400s linear infinite; + opacity: 0; + transform: translate3d(0, 20rem, 0); +} +sunset:before { + width: 100rem; + height: 50rem; + left: 55%; + top: -10rem; + border-radius: 50%; + background: radial-gradient(#ff6400, rgba(255, 255, 255, 0)); + opacity: 0.1; +} +sunset:after { + width: 50rem; + height: 25rem; + left: 65%; + top: 5rem; + border-radius: 50%; + background: radial-gradient(#fffd91, rgba(255, 255, 255, 0)); + opacity: 0.1; +} + +@keyframes sunset { + 28%, + 75% { + opacity: 1; + transform: translate3d(0, 0, 0); + } + 20%, + 35%, + 70%, + 80% { + opacity: 0; + transform: translate3d(0, 20rem, 0); + } +} +text:nth-of-type(2) { + animation: gameover 400s linear; +} + +@keyframes gameover { + 34.8% { + transform: scale(0); + z-index: 0; + display: block; + opacity: 0; + } + 35%, + 100% { + transform: scale(1); + z-index: 410; + transition: all 0.5s 1.5s ease-in-out; + opacity: 1; + } +} +tree:nth-of-type(1) { + width: 10rem; + height: 60.5rem; + top: -10rem; + transform: skew(-2deg); + border-radius: 0 50% 2rem 0; + box-shadow: 0.5rem 0 0 #683f44, 1rem 0 0 #885259, 3rem 0 0 #683f44, 5rem 0 0 #20112a; +} +tree:nth-of-type(1):before { + left: 16rem; + width: 10rem; + height: 60.5rem; + box-shadow: -2rem 0 0 #20112a, -3rem 0 0 #683f44, -4rem 0 0 #20112a; + border-radius: 50% 0 0 2rem; + transform: skew(4deg); +} +tree:nth-of-type(1):after { + top: -4rem; + width: 10rem; + height: 5rem; + border-radius: 60% 60% 40% 40% / 70% 70% 40% 40%; + background: #7dbc2f; + box-shadow: inset -1rem -1rem 1rem rgba(104, 63, 68, 0.1), 13rem 0 0 -0.2rem rgba(104, 63, 68, 0.1), 9rem 1rem 0 -1rem rgba(104, 63, 68, 0.1), -2rem -3rem 0 1rem rgba(104, 63, 68, 0.1), 5rem -5rem 0 -0.5rem rgba(104, 63, 68, 0.1), 7rem -4rem 0 rgba(104, 63, 68, 0.1), 11rem -2rem 0 -0.5rem rgba(104, 63, 68, 0.1), 12rem 0 0 -0.2rem #bca52f, 8rem 1rem 0 -1rem #bca52f, -3rem -3rem 0 1rem #81bc2f, 4rem -5rem 0 -0.5rem #bca52f, 6rem -4rem 0 #81bc2f, 10rem -2rem 0 -0.5rem #bca52f; +} + +tree:nth-of-type(2) { + width: 10rem; + height: 50.5rem; + top: 0; + left: 25rem; + transform: skew(-3deg); + border-radius: 0 50% 2rem 0; + box-shadow: 0.5rem 0 0 #683f44, 1rem 0 0 #885259, 3rem 0 0 #683f44, 5rem 0 0 #20112a; +} +tree:nth-of-type(2):before { + left: 16rem; + width: 10rem; + height: 50.5rem; + box-shadow: -1.5rem 0 0 #20112a, -2.5rem 0 0 #683f44, -3rem 0 0 #20112a; + border-radius: 50% 0 0 2rem; + transform: skew(4deg); +} +tree:nth-of-type(2):after { + top: -4rem; + left: 17rem; + width: 10rem; + height: 5rem; + border-radius: 60% 60% 40% 40% / 70% 70% 40% 40%; + background: #7dbc2f; + box-shadow: inset -1rem -1rem 1rem rgba(104, 63, 68, 0.1), -19rem 1rem 0 -0.2rem rgba(104, 63, 68, 0.1), -14rem -4rem 0 -1rem rgba(104, 63, 68, 0.1), -13rem -1rem 0 1rem rgba(104, 63, 68, 0.1), -1rem -4rem 0 -0.5rem rgba(104, 63, 68, 0.1), -4rem -1rem 0 rgba(104, 63, 68, 0.1), -21rem -2rem 0 -0.5rem rgba(104, 63, 68, 0.1), -7rem -5rem 0 1rem rgba(104, 63, 68, 0.1), -20rem 1rem 0 -0.2rem #bca52f, -15rem -4rem 0 -1rem #bca52f, -15rem -1rem 0 1rem #81bc2f, -2rem -4rem 0 -0.5rem #bca52f, -5rem -1rem 0 #81bc2f, -22rem -2rem 0 -0.5rem #bca52f, -8rem -5rem 0 1rem #81bc2f; +} + +tree i:nth-of-type(1), tree i:nth-of-type(1):before, tree i:nth-of-type(1):after { + width: 2.5rem; + height: 0.5rem; + background: #96d24c; + border-radius: 0 0 100% 100%; + top: -5rem; + filter: drop-shadow(3rem 1.5rem 0 #938125) drop-shadow(1.5rem 2.5rem 0 #938125); + z-index: 1; + left: -3rem; + opacity: 0.5; +} +tree i:nth-of-type(1):before { + left: 6rem; + top: -1rem; + filter: drop-shadow(2rem 1.5rem 0 #938125); +} +tree i:nth-of-type(1):after { + left: 15rem; + top: -1.5rem; + filter: drop-shadow(2.5rem 0.5rem 0 #938125) drop-shadow(1rem 2rem 0 #938125); +} + +tree:nth-of-type(2) i:nth-of-type(1):after { + left: 20rem; +} + +tree i:nth-of-type(2), tree i:nth-of-type(2):before, tree i:nth-of-type(2):after { + width: 0.5rem; + height: 0.25rem; + background: #81bc2f; + border-radius: 100% 0 100% 0; + top: -2rem; +} +tree i:nth-of-type(2):before { + left: 8rem; + top: -1rem; +} +tree i:nth-of-type(2):after { + left: 20rem; + top: 1.5rem; +} + +[type="radio"]:focus ~ div > div > tree i:nth-of-type(1), [type="radio"]:focus ~ div > div > tree:after { + animation: shake 0.3s ease-in-out; +} + +[type="radio"]:focus ~ div > div > tree > i:nth-of-type(2) { + animation: fall 5s ease-in-out; +} +[type="radio"]:focus ~ div > div > tree > i:nth-of-type(2):before { + animation: fall 10s ease-in-out; +} +[type="radio"]:focus ~ div > div > tree > i:nth-of-type(2):before { + animation: fall 5s ease-in-out; +} + +@keyframes shake { + 40% { + transform: translate3d(0, 0.5rem, 0); + } + 60% { + transform: translate3d(0, -0.25rem, 0); + } + 80% { + transform: translate3d(0, 0.15rem, 0); + } +} +@keyframes fall { + 100% { + transform: translate3d(0, 15rem, 0); + opacity: 0; + } +} +water { + position: absolute; + top: 78.5rem; + bottom: 0; + left: -100%; + right: -100%; + margin: auto; + width: 100%; + height: 25rem; + background: linear-gradient(rgba(96, 139, 136, 0.5), #f3cece); + z-index: 99; + overflow: hidden; + box-shadow: inset 0 0 5rem 0 rgba(37, 37, 41, 0.5); +} +water:before, water:after, +water i { + width: 80rem; + height: 3rem; + border-radius: 50%; + opacity: 0.2; + right: 0; + margin: auto; + transform: scaleX(1) scaleY(0); + top: -1.5rem; + border: 0.5rem solid #fff; + box-shadow: 0 0 1rem 0.5rem #040b27, inset 0 0 1rem 1rem #040b27, inset 0 0 1rem #fff; +} +water:before { + animation: waves 6s ease-in-out infinite; +} +water:after { + animation: waves 8s 2s ease-in-out infinite; +} + +input:focus ~ water > i { + animation: waves 3s 0.25s ease-out; +} + +@keyframes waves { + 100% { + transform: scaleX(1.5) scaleY(7); + opacity: 0; + } +} +shed > label > i:nth-of-type(5) { + width: 100%; + height: 100%; +} +shed > label > i:nth-of-type(5):after { + width: 2rem; + border-left: 0.5rem solid #252529; + border-right: 0.5rem solid #252529; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 1.5rem, #252529 1.5rem, #252529 2rem); + height: 325%; + left: -1.5rem; + transform: rotate(-1deg); + top: 10.5rem; + display: none; +} +shed > label > i:nth-of-type(5):before { + width: 13rem; + height: 3rem; + top: 10.5rem; + left: 12.5rem; + border: 0.5rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #683f44; + box-shadow: 0 0.25rem 0 #683f44; + transform: rotate(-3deg); + border-radius: 50%; + display: none; +} +shed > label:nth-of-type(n + 5) > i:nth-of-type(5):after { + height: 225%; +} +shed > label:nth-of-type(n + 9) > i:nth-of-type(5):after { + height: 15rem; +} +shed > label:nth-of-type(even) > i:nth-of-type(5):after { + left: 10rem; + transform: rotate(2deg); +} + +.hs.row1.col1:checked ~ div > div > shed > .row1.col1:before { + background: repeating-linear-gradient(#bc592f 1rem, #683f44 2.3rem); + width: 90%; + height: 98%; + left: 1.25rem; + border-radius: 0.5rem; + box-shadow: 0 0.5rem 0 0 #20112a; +} +.hs.row1.col1:checked ~ div > div > shed > .row1.col1:after { + width: 105%; + height: 5rem; + background: repeating-linear-gradient(to right, #683f44 1rem, #20112a 2.1rem); + top: -2rem; + border-bottom: solid 0.5rem #252529; + box-shadow: 0 1.5rem 0.5rem -1rem rgba(79, 1, 14, 0.9); + border-radius: 0.5rem; + left: auto; + right: -1rem; +} +.hs.row1.col1:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(4) { + width: 4rem; + height: 4rem; + right: 0; + margin: auto; + background: rgba(79, 1, 14, 0.3); + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); + transform: scale(0.5); +} +.hs.row1.col1:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(4):before { + width: 3.4rem; + height: 0.5rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 0 1.5rem 0 #252529, 0 3rem 0 #252529, 0 0.5rem 0 #000, 0 1rem 0 rgba(79, 1, 14, 0.9), 0 2rem 0 rgba(79, 1, 14, 0.9), 0 2.5rem 0 rgba(79, 1, 14, 0.75); +} +.hs.row1.col1:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(4):after { + width: 0.5rem; + height: 3.4rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 1.5rem 0 0 #252529, 3rem 0 0 #252529; +} +.hs.row1.col1:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(3) { + width: 4rem; + height: 9rem; + right: 0; + margin: auto; + background: #bc592f; + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); +} +.hs.row1.col1:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(3):after { + left: -4rem; + border: 1rem solid rgba(255, 255, 255, 0); + top: -11rem; + border-bottom-color: #252529; + transform: rotate(-3deg); + height: 4rem; + box-shadow: 0 3.7rem 0 -0.5rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row1.col1:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(3):before { + width: 14.5rem; + height: 4.5rem; + border-top: 0.5rem solid #20112a; + border-bottom: 0.5rem solid #20112a; + top: 5rem; + left: -5rem; + background: repeating-linear-gradient(to right, #683f44, #20112a 0.5rem, rgba(255, 255, 255, 0) 0.5rem, rgba(255, 255, 255, 0) 1.4rem); + border-radius: 0.5rem; +} +.hs.row1.col1:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(2):before { + width: 1rem; + height: 9rem; + background: #20112a; + top: -7rem; +} +.hs.row1.col1:checked ~ div > div > shed > .row1.col1:nth-of-type(odd) > i:nth-of-type(2) { + width: 1rem; + background: #20112a; + height: 3rem; + border-radius: 0.25rem; + top: 18.5rem; + left: 10rem; + transform: rotate(5deg); +} +.hs.row1.col1:checked ~ div > div > shed > .row1.col1:nth-of-type(odd) > i:nth-of-type(2):before { + transform: rotate(-45deg); + left: -3rem; + border-radius: 0 1rem 0 0; +} +.hs.row1.col1:checked ~ div > div > shed > .row1.col1:nth-of-type(odd) > i:nth-of-type(2):after { + width: 1rem; + height: 4rem; + transform: rotate(45deg); + background: #20112a; + top: -6.5rem; + left: -2rem; + border-radius: 1rem 0 0 0; +} +.hs.row1.col1:checked ~ div > div > shed > .row1.col1:nth-of-type(even) > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.row1.col1:checked ~ div > div > shed > .row1.col1:nth-of-type(even) > i:nth-of-type(1) { + left: 11rem; +} +.hs.row1.col1:checked ~ div > div > shed > .row1.col1:nth-of-type(even) > i:nth-of-type(2):before { + transform: rotate(45deg); + left: 5rem; + border-radius: 1rem 0 0 0; + top: 11rem; +} +.hs.row1.col1:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(1):before, .hs.row1.col1:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(1):after { + top: -7.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row1.col1:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row1.col1:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(5):after { + display: block; +} + +.hs.row1.col1:checked ~ div > div > shed > .row2.col1:after, .hs.row1.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(3):after, .hs.row1.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(1) { + display: none; +} + +.hs.row1.col1:checked ~ div > div > shed > .row0.col1 > i:nth-of-type(3):before, .hs.row1.col1:checked ~ div > div > shed > .row0.col1 > i:nth-of-type(2), .hs.row1.col1:checked ~ div > div > shed > .row0.col1 > i:nth-of-type(5):after { + display: none; +} +.hs.row1.col1:checked ~ div > div > shed > .row0.col1 > i:nth-of-type(3) { + height: 0; +} +.hs.row1.col1:checked ~ div > div > shed > .row0.col1 > i:nth-of-type(4) { + transform: scale(1); + right: 1rem; + left: 2rem; +} + +.hs.shed.row1.col-2:not(:checked) +~ .hs.row1.col1:checked +~ .shed.hs.row1.col2:not(:checked) +~ .hs.row-1.col1:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.shed.row1.col-2:not(:checked) +~ .hs.row1.col1:checked +~ .shed.hs.row1.col2:not(:checked) +~ .hs.row-1.col1:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row1.col1:before { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col1:before { + height: 12.5rem; + box-shadow: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(3) { + height: 0; +} +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(4) { + transform: scale(1); + right: 1rem; + left: 1rem; +} +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(5):after { + display: none; +} + +.hs.row3.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(5):after { + display: none; +} + +.hs.row2.col3:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(5):after { + display: none; +} + +.hs.row2.col0:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(5):after { + display: none !important; +} + +.hs.row1.col1:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(1), .hs.row1.col1:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(3):after { + display: none; +} + +.hs.row1.col1:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row1.col1:after, +.hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row1.col1:after { + width: 110%; + right: -1.25rem; +} + +.hs.row1.col2:checked ~ div > div > shed > .row1.col2:before { + background: repeating-linear-gradient(#bc592f 1rem, #683f44 2.3rem); + width: 90%; + height: 98%; + left: 1.25rem; + border-radius: 0.5rem; + box-shadow: 0 0.5rem 0 0 #20112a; +} +.hs.row1.col2:checked ~ div > div > shed > .row1.col2:after { + width: 105%; + height: 5rem; + background: repeating-linear-gradient(to right, #683f44 1rem, #20112a 2.1rem); + top: -2rem; + border-bottom: solid 0.5rem #252529; + box-shadow: 0 1.5rem 0.5rem -1rem rgba(79, 1, 14, 0.9); + border-radius: 0.5rem; + left: auto; + right: -1rem; +} +.hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(4) { + width: 4rem; + height: 4rem; + right: 0; + margin: auto; + background: rgba(79, 1, 14, 0.3); + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); + transform: scale(0.5); +} +.hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(4):before { + width: 3.4rem; + height: 0.5rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 0 1.5rem 0 #252529, 0 3rem 0 #252529, 0 0.5rem 0 #000, 0 1rem 0 rgba(79, 1, 14, 0.9), 0 2rem 0 rgba(79, 1, 14, 0.9), 0 2.5rem 0 rgba(79, 1, 14, 0.75); +} +.hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(4):after { + width: 0.5rem; + height: 3.4rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 1.5rem 0 0 #252529, 3rem 0 0 #252529; +} +.hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(3) { + width: 4rem; + height: 9rem; + right: 0; + margin: auto; + background: #bc592f; + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); +} +.hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(3):after { + left: -4rem; + border: 1rem solid rgba(255, 255, 255, 0); + top: -11rem; + border-bottom-color: #252529; + transform: rotate(-3deg); + height: 4rem; + box-shadow: 0 3.7rem 0 -0.5rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(3):before { + width: 14.5rem; + height: 4.5rem; + border-top: 0.5rem solid #20112a; + border-bottom: 0.5rem solid #20112a; + top: 5rem; + left: -5rem; + background: repeating-linear-gradient(to right, #683f44, #20112a 0.5rem, rgba(255, 255, 255, 0) 0.5rem, rgba(255, 255, 255, 0) 1.4rem); + border-radius: 0.5rem; +} +.hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(2):before { + width: 1rem; + height: 9rem; + background: #20112a; + top: -7rem; +} +.hs.row1.col2:checked ~ div > div > shed > .row1.col2:nth-of-type(odd) > i:nth-of-type(2) { + width: 1rem; + background: #20112a; + height: 3rem; + border-radius: 0.25rem; + top: 18.5rem; + left: 10rem; + transform: rotate(5deg); +} +.hs.row1.col2:checked ~ div > div > shed > .row1.col2:nth-of-type(odd) > i:nth-of-type(2):before { + transform: rotate(-45deg); + left: -3rem; + border-radius: 0 1rem 0 0; +} +.hs.row1.col2:checked ~ div > div > shed > .row1.col2:nth-of-type(odd) > i:nth-of-type(2):after { + width: 1rem; + height: 4rem; + transform: rotate(45deg); + background: #20112a; + top: -6.5rem; + left: -2rem; + border-radius: 1rem 0 0 0; +} +.hs.row1.col2:checked ~ div > div > shed > .row1.col2:nth-of-type(even) > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.row1.col2:checked ~ div > div > shed > .row1.col2:nth-of-type(even) > i:nth-of-type(1) { + left: 11rem; +} +.hs.row1.col2:checked ~ div > div > shed > .row1.col2:nth-of-type(even) > i:nth-of-type(2):before { + transform: rotate(45deg); + left: 5rem; + border-radius: 1rem 0 0 0; + top: 11rem; +} +.hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(1):before, .hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(1):after { + top: -7.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(5):after { + display: block; +} + +.hs.row1.col2:checked ~ div > div > shed > .row2.col2:after, .hs.row1.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(3):after, .hs.row1.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(1) { + display: none; +} + +.hs.row1.col2:checked ~ div > div > shed > .row0.col2 > i:nth-of-type(3):before, .hs.row1.col2:checked ~ div > div > shed > .row0.col2 > i:nth-of-type(2), .hs.row1.col2:checked ~ div > div > shed > .row0.col2 > i:nth-of-type(5):after { + display: none; +} +.hs.row1.col2:checked ~ div > div > shed > .row0.col2 > i:nth-of-type(3) { + height: 0; +} +.hs.row1.col2:checked ~ div > div > shed > .row0.col2 > i:nth-of-type(4) { + transform: scale(1); + right: 2rem; + left: 1rem; +} + +.hs.shed.row1.col-1:not(:checked) +~ .hs.row1.col2:checked +~ .shed.hs.row1.col3:not(:checked) +~ .hs.row-1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.shed.row1.col-1:not(:checked) +~ .hs.row1.col2:checked +~ .shed.hs.row1.col3:not(:checked) +~ .hs.row-1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row1.col2:before { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col2:before { + height: 12.5rem; + box-shadow: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(3) { + height: 0; +} +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(4) { + transform: scale(1); + right: 2rem; + left: 1rem; +} +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(5):after { + display: none; +} + +.hs.row3.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(5):after { + display: none; +} + +.hs.row2.col3:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(5):after { + display: none; +} + +.hs.row2.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(5):after { + display: none !important; +} + +.hs.row1.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(1), .hs.row1.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(3):after { + display: none; +} + +.hs.row1.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row1.col2:after, +.hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row1.col2:after { + width: 110%; + right: -1.25rem; +} + +.hs.row1.col3:checked ~ div > div > shed > .row1.col3:before { + background: repeating-linear-gradient(#bc592f 1rem, #683f44 2.3rem); + width: 90%; + height: 98%; + left: 1.25rem; + border-radius: 0.5rem; + box-shadow: 0 0.5rem 0 0 #20112a; +} +.hs.row1.col3:checked ~ div > div > shed > .row1.col3:after { + width: 105%; + height: 5rem; + background: repeating-linear-gradient(to right, #683f44 1rem, #20112a 2.1rem); + top: -2rem; + border-bottom: solid 0.5rem #252529; + box-shadow: 0 1.5rem 0.5rem -1rem rgba(79, 1, 14, 0.9); + border-radius: 0.5rem; + left: auto; + right: -1rem; +} +.hs.row1.col3:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(4) { + width: 4rem; + height: 4rem; + right: 0; + margin: auto; + background: rgba(79, 1, 14, 0.3); + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); + transform: scale(0.5); +} +.hs.row1.col3:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(4):before { + width: 3.4rem; + height: 0.5rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 0 1.5rem 0 #252529, 0 3rem 0 #252529, 0 0.5rem 0 #000, 0 1rem 0 rgba(79, 1, 14, 0.9), 0 2rem 0 rgba(79, 1, 14, 0.9), 0 2.5rem 0 rgba(79, 1, 14, 0.75); +} +.hs.row1.col3:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(4):after { + width: 0.5rem; + height: 3.4rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 1.5rem 0 0 #252529, 3rem 0 0 #252529; +} +.hs.row1.col3:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(3) { + width: 4rem; + height: 9rem; + right: 0; + margin: auto; + background: #bc592f; + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); +} +.hs.row1.col3:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(3):after { + left: -4rem; + border: 1rem solid rgba(255, 255, 255, 0); + top: -11rem; + border-bottom-color: #252529; + transform: rotate(-3deg); + height: 4rem; + box-shadow: 0 3.7rem 0 -0.5rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row1.col3:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(3):before { + width: 14.5rem; + height: 4.5rem; + border-top: 0.5rem solid #20112a; + border-bottom: 0.5rem solid #20112a; + top: 5rem; + left: -5rem; + background: repeating-linear-gradient(to right, #683f44, #20112a 0.5rem, rgba(255, 255, 255, 0) 0.5rem, rgba(255, 255, 255, 0) 1.4rem); + border-radius: 0.5rem; +} +.hs.row1.col3:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(2):before { + width: 1rem; + height: 9rem; + background: #20112a; + top: -7rem; +} +.hs.row1.col3:checked ~ div > div > shed > .row1.col3:nth-of-type(odd) > i:nth-of-type(2) { + width: 1rem; + background: #20112a; + height: 3rem; + border-radius: 0.25rem; + top: 18.5rem; + left: 10rem; + transform: rotate(5deg); +} +.hs.row1.col3:checked ~ div > div > shed > .row1.col3:nth-of-type(odd) > i:nth-of-type(2):before { + transform: rotate(-45deg); + left: -3rem; + border-radius: 0 1rem 0 0; +} +.hs.row1.col3:checked ~ div > div > shed > .row1.col3:nth-of-type(odd) > i:nth-of-type(2):after { + width: 1rem; + height: 4rem; + transform: rotate(45deg); + background: #20112a; + top: -6.5rem; + left: -2rem; + border-radius: 1rem 0 0 0; +} +.hs.row1.col3:checked ~ div > div > shed > .row1.col3:nth-of-type(even) > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.row1.col3:checked ~ div > div > shed > .row1.col3:nth-of-type(even) > i:nth-of-type(1) { + left: 11rem; +} +.hs.row1.col3:checked ~ div > div > shed > .row1.col3:nth-of-type(even) > i:nth-of-type(2):before { + transform: rotate(45deg); + left: 5rem; + border-radius: 1rem 0 0 0; + top: 11rem; +} +.hs.row1.col3:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(1):before, .hs.row1.col3:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(1):after { + top: -7.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row1.col3:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row1.col3:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(5):after { + display: block; +} + +.hs.row1.col3:checked ~ div > div > shed > .row2.col3:after, .hs.row1.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(3):after, .hs.row1.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(1) { + display: none; +} + +.hs.row1.col3:checked ~ div > div > shed > .row0.col3 > i:nth-of-type(3):before, .hs.row1.col3:checked ~ div > div > shed > .row0.col3 > i:nth-of-type(2), .hs.row1.col3:checked ~ div > div > shed > .row0.col3 > i:nth-of-type(5):after { + display: none; +} +.hs.row1.col3:checked ~ div > div > shed > .row0.col3 > i:nth-of-type(3) { + height: 0; +} +.hs.row1.col3:checked ~ div > div > shed > .row0.col3 > i:nth-of-type(4) { + transform: scale(1); + right: 2rem; + left: 1rem; +} + +.hs.shed.row1.col0:not(:checked) +~ .hs.row1.col3:checked +~ .shed.hs.row1.col4:not(:checked) +~ .hs.row-1.col3:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.shed.row1.col0:not(:checked) +~ .hs.row1.col3:checked +~ .shed.hs.row1.col4:not(:checked) +~ .hs.row-1.col3:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row1.col3:before { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col3:before { + height: 12.5rem; + box-shadow: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(3) { + height: 0; +} +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(4) { + transform: scale(1); + right: 1rem; + left: 2rem; +} +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(5):after { + display: none; +} + +.hs.row3.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(5):after { + display: none; +} + +.hs.row2.col3:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(5):after { + display: none; +} + +.hs.row2.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(5):after { + display: none !important; +} + +.hs.row1.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(1), .hs.row1.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(3):after { + display: none; +} + +.hs.row1.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row1.col3:after, +.hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row1.col3:after { + width: 110%; + right: -1.25rem; +} + +.hs.row1.col4:checked ~ div > div > shed > .row1.col4:before { + background: repeating-linear-gradient(#bc592f 1rem, #683f44 2.3rem); + width: 90%; + height: 98%; + left: 1.25rem; + border-radius: 0.5rem; + box-shadow: 0 0.5rem 0 0 #20112a; +} +.hs.row1.col4:checked ~ div > div > shed > .row1.col4:after { + width: 105%; + height: 5rem; + background: repeating-linear-gradient(to right, #683f44 1rem, #20112a 2.1rem); + top: -2rem; + border-bottom: solid 0.5rem #252529; + box-shadow: 0 1.5rem 0.5rem -1rem rgba(79, 1, 14, 0.9); + border-radius: 0.5rem; + left: auto; + right: -1rem; +} +.hs.row1.col4:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(4) { + width: 4rem; + height: 4rem; + right: 0; + margin: auto; + background: rgba(79, 1, 14, 0.3); + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); + transform: scale(0.5); +} +.hs.row1.col4:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(4):before { + width: 3.4rem; + height: 0.5rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 0 1.5rem 0 #252529, 0 3rem 0 #252529, 0 0.5rem 0 #000, 0 1rem 0 rgba(79, 1, 14, 0.9), 0 2rem 0 rgba(79, 1, 14, 0.9), 0 2.5rem 0 rgba(79, 1, 14, 0.75); +} +.hs.row1.col4:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(4):after { + width: 0.5rem; + height: 3.4rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 1.5rem 0 0 #252529, 3rem 0 0 #252529; +} +.hs.row1.col4:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(3) { + width: 4rem; + height: 9rem; + right: 0; + margin: auto; + background: #bc592f; + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); +} +.hs.row1.col4:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(3):after { + left: -4rem; + border: 1rem solid rgba(255, 255, 255, 0); + top: -11rem; + border-bottom-color: #252529; + transform: rotate(-3deg); + height: 4rem; + box-shadow: 0 3.7rem 0 -0.5rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row1.col4:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(3):before { + width: 14.5rem; + height: 4.5rem; + border-top: 0.5rem solid #20112a; + border-bottom: 0.5rem solid #20112a; + top: 5rem; + left: -5rem; + background: repeating-linear-gradient(to right, #683f44, #20112a 0.5rem, rgba(255, 255, 255, 0) 0.5rem, rgba(255, 255, 255, 0) 1.4rem); + border-radius: 0.5rem; +} +.hs.row1.col4:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(2):before { + width: 1rem; + height: 9rem; + background: #20112a; + top: -7rem; +} +.hs.row1.col4:checked ~ div > div > shed > .row1.col4:nth-of-type(odd) > i:nth-of-type(2) { + width: 1rem; + background: #20112a; + height: 3rem; + border-radius: 0.25rem; + top: 18.5rem; + left: 10rem; + transform: rotate(5deg); +} +.hs.row1.col4:checked ~ div > div > shed > .row1.col4:nth-of-type(odd) > i:nth-of-type(2):before { + transform: rotate(-45deg); + left: -3rem; + border-radius: 0 1rem 0 0; +} +.hs.row1.col4:checked ~ div > div > shed > .row1.col4:nth-of-type(odd) > i:nth-of-type(2):after { + width: 1rem; + height: 4rem; + transform: rotate(45deg); + background: #20112a; + top: -6.5rem; + left: -2rem; + border-radius: 1rem 0 0 0; +} +.hs.row1.col4:checked ~ div > div > shed > .row1.col4:nth-of-type(even) > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.row1.col4:checked ~ div > div > shed > .row1.col4:nth-of-type(even) > i:nth-of-type(1) { + left: 11rem; +} +.hs.row1.col4:checked ~ div > div > shed > .row1.col4:nth-of-type(even) > i:nth-of-type(2):before { + transform: rotate(45deg); + left: 5rem; + border-radius: 1rem 0 0 0; + top: 11rem; +} +.hs.row1.col4:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(1):before, .hs.row1.col4:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(1):after { + top: -7.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row1.col4:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row1.col4:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(5):after { + display: block; +} + +.hs.row1.col4:checked ~ div > div > shed > .row2.col4:after, .hs.row1.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(3):after, .hs.row1.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(1) { + display: none; +} + +.hs.row1.col4:checked ~ div > div > shed > .row0.col4 > i:nth-of-type(3):before, .hs.row1.col4:checked ~ div > div > shed > .row0.col4 > i:nth-of-type(2), .hs.row1.col4:checked ~ div > div > shed > .row0.col4 > i:nth-of-type(5):after { + display: none; +} +.hs.row1.col4:checked ~ div > div > shed > .row0.col4 > i:nth-of-type(3) { + height: 0; +} +.hs.row1.col4:checked ~ div > div > shed > .row0.col4 > i:nth-of-type(4) { + transform: scale(1); + right: 2rem; + left: 1rem; +} + +.hs.shed.row1.col1:not(:checked) +~ .hs.row1.col4:checked +~ .shed.hs.row1.col5:not(:checked) +~ .hs.row-1.col4:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.shed.row1.col1:not(:checked) +~ .hs.row1.col4:checked +~ .shed.hs.row1.col5:not(:checked) +~ .hs.row-1.col4:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row1.col4:before { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col4:before { + height: 12.5rem; + box-shadow: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(3) { + height: 0; +} +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(4) { + transform: scale(1); + right: 2rem; + left: 1rem; +} +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(5):after { + display: none; +} + +.hs.row3.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(5):after { + display: none; +} + +.hs.row2.col3:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(5):after { + display: none; +} + +.hs.row2.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(5):after { + display: none !important; +} + +.hs.row1.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(1), .hs.row1.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(3):after { + display: none; +} + +.hs.row1.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row1.col4:after, +.hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row1.col4:after { + width: 110%; + right: -1.25rem; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col1:before { + width: 110%; +} +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col2:after { + width: 120%; + left: -1.25rem; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col2:before { + width: 110%; +} +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col3:after { + width: 120%; + left: -1.25rem; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col3:before { + width: 110%; +} +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col4:after { + width: 120%; + left: -1.25rem; +} + +.hs.row1.col2:checked ~ .hs.shed.row1.col3:not(:checked) ~ div > div > shed > .row1.col2 > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.row1.col2:checked ~ .hs.shed.row1.col3:not(:checked) ~ div > div > shed > .row1.col2 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row1.col4:checked ~ .hs.shed.row1.col5:not(:checked) ~ div > div > shed > .row1.col4 > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.row1.col4:checked ~ .hs.shed.row1.col5:not(:checked) ~ div > div > shed > .row1.col4 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(3):after, .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(1) { + display: none; +} +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(3):before { + width: 10.25rem; +} + +.hs.row1.col2:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(3):after { + left: 6rem; + transform: rotate(3deg); +} +.hs.row1.col2:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(1) { + left: 10rem; +} +.hs.row1.col2:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(5):after { + left: -2.5rem; + transform: rotate(-3deg); +} + +.hs.row1.col2:checked ~ .hs.row1.col-1:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(3):after, .hs.row1.col2:checked ~ .hs.row1.col-1:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(1), +.hs.row1.col2:checked ~ .hs.row1.col-3:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(3):after, +.hs.row1.col2:checked ~ .hs.row1.col-3:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(1) { + display: none; +} + +.hs.row1.col2:checked ~ .hs.row1.col-1:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(5):after { + left: 10rem; + transform: rotate(2deg); +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(3):after, .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(1) { + display: none; +} +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(3):before { + width: 10.25rem; +} + +.hs.row1.col3:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(3):after { + left: 6rem; + transform: rotate(3deg); +} +.hs.row1.col3:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(1) { + left: 10rem; +} +.hs.row1.col3:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(5):after { + left: -2.5rem; + transform: rotate(-3deg); +} + +.hs.row1.col3:checked ~ .hs.row1.col0:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(3):after, .hs.row1.col3:checked ~ .hs.row1.col0:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(1), +.hs.row1.col3:checked ~ .hs.row1.col-2:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(3):after, +.hs.row1.col3:checked ~ .hs.row1.col-2:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(1) { + display: none; +} + +.hs.row1.col3:checked ~ .hs.row1.col0:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(5):after { + left: 10rem; + transform: rotate(2deg); +} + +.hs.shed.row1.col1:checked +~ .hs.shed.row1.col2:not(:checked) +~ .hs.shed.row1.col3:not(:checked) +~ .hs.shed.row1.col4:checked +~ div > div > shed > .row1.col1 > i:nth-of-type(5):before { + display: block; + width: 210%; +} + +.hs.shed.row1.col1:checked +~ .hs.shed.row1.col2:not(:checked) +~ .hs.shed.row1.col3:checked +~ div +> div +> shed +> .row1.col1 > i:nth-of-type(5):before, +.hs.shed.row1.col2:checked +~ .hs.shed.row1.col3:not(:checked) +~ .hs.shed.row1.col4:checked +~ div +> div +> shed +> .row1.col2 > i:nth-of-type(5):before { + display: block; + width: 110%; +} + +.hs.row2.col2:checked +~ .hs.shed.row1.col1:checked +~ .hs.shed.row1.col2:not(:checked) +~ .hs.shed.row1.col3:checked +~ div +> div +> shed +> .row1.col1 > i:nth-of-type(5):before, +.hs.row2.col3:checked +~ .hs.shed.row1.col2:checked +~ .hs.shed.row1.col3:not(:checked) +~ .hs.shed.row1.col4:checked +~ div +> div +> shed +> .row1.col2 > i:nth-of-type(5):before, +.hs.row2.col3:checked +~ .hs.shed.row1.col1:checked +~ .hs.shed.row1.col2:not(:checked) +~ .hs.shed.row1.col3:not(:checked) +~ .hs.shed.row1.col4:checked +~ div +> div +> shed +> .row1.col1 > i:nth-of-type(5):before, +.hs.row2.col2:checked +~ .hs.shed.row1.col1:checked +~ .hs.shed.row1.col2:not(:checked) +~ .hs.shed.row1.col3:not(:checked) +~ .hs.shed.row1.col4:checked +~ div +> div +> shed +> .row1.col1 > i:nth-of-type(5):before, +.hs.shed.row2.col1:checked +~ .hs.shed.row1.col1:checked +~ .hs.shed.row1.col2:not(:checked) +~ .hs.shed.row1.col3:checked +~ div +> div +> shed +> .row1.col1 > i:nth-of-type(5):before, +.hs.shed.row2.col2:checked +~ .hs.shed.row1.col2:checked +~ .hs.shed.row1.col3:not(:checked) +~ .hs.shed.row1.col4:checked +~ div +> div +> shed +> .row1.col2 > i:nth-of-type(5):before { + top: 1rem; + border: none; +} + +.hs.row2.col1:checked ~ div > div > shed > .row2.col1:before { + background: repeating-linear-gradient(#bc592f 1rem, #683f44 2.3rem); + width: 90%; + height: 98%; + left: 1.25rem; + border-radius: 0.5rem; + box-shadow: 0 0.5rem 0 0 #20112a; +} +.hs.row2.col1:checked ~ div > div > shed > .row2.col1:after { + width: 105%; + height: 5rem; + background: repeating-linear-gradient(to right, #683f44 1rem, #20112a 2.1rem); + top: -2rem; + border-bottom: solid 0.5rem #252529; + box-shadow: 0 1.5rem 0.5rem -1rem rgba(79, 1, 14, 0.9); + border-radius: 0.5rem; + left: auto; + right: -1rem; +} +.hs.row2.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(4) { + width: 4rem; + height: 4rem; + right: 0; + margin: auto; + background: rgba(79, 1, 14, 0.3); + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); + transform: scale(0.5); +} +.hs.row2.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(4):before { + width: 3.4rem; + height: 0.5rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 0 1.5rem 0 #252529, 0 3rem 0 #252529, 0 0.5rem 0 #000, 0 1rem 0 rgba(79, 1, 14, 0.9), 0 2rem 0 rgba(79, 1, 14, 0.9), 0 2.5rem 0 rgba(79, 1, 14, 0.75); +} +.hs.row2.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(4):after { + width: 0.5rem; + height: 3.4rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 1.5rem 0 0 #252529, 3rem 0 0 #252529; +} +.hs.row2.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(3) { + width: 4rem; + height: 9rem; + right: 0; + margin: auto; + background: #bc592f; + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); +} +.hs.row2.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(3):after { + left: -4rem; + border: 1rem solid rgba(255, 255, 255, 0); + top: -11rem; + border-bottom-color: #252529; + transform: rotate(-3deg); + height: 4rem; + box-shadow: 0 3.7rem 0 -0.5rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row2.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(3):before { + width: 14.5rem; + height: 4.5rem; + border-top: 0.5rem solid #20112a; + border-bottom: 0.5rem solid #20112a; + top: 5rem; + left: -5rem; + background: repeating-linear-gradient(to right, #683f44, #20112a 0.5rem, rgba(255, 255, 255, 0) 0.5rem, rgba(255, 255, 255, 0) 1.4rem); + border-radius: 0.5rem; +} +.hs.row2.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(2):before { + width: 1rem; + height: 9rem; + background: #20112a; + top: -7rem; +} +.hs.row2.col1:checked ~ div > div > shed > .row2.col1:nth-of-type(odd) > i:nth-of-type(2) { + width: 1rem; + background: #20112a; + height: 3rem; + border-radius: 0.25rem; + top: 18.5rem; + left: 10rem; + transform: rotate(5deg); +} +.hs.row2.col1:checked ~ div > div > shed > .row2.col1:nth-of-type(odd) > i:nth-of-type(2):before { + transform: rotate(-45deg); + left: -3rem; + border-radius: 0 1rem 0 0; +} +.hs.row2.col1:checked ~ div > div > shed > .row2.col1:nth-of-type(odd) > i:nth-of-type(2):after { + width: 1rem; + height: 4rem; + transform: rotate(45deg); + background: #20112a; + top: -6.5rem; + left: -2rem; + border-radius: 1rem 0 0 0; +} +.hs.row2.col1:checked ~ div > div > shed > .row2.col1:nth-of-type(even) > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.row2.col1:checked ~ div > div > shed > .row2.col1:nth-of-type(even) > i:nth-of-type(1) { + left: 11rem; +} +.hs.row2.col1:checked ~ div > div > shed > .row2.col1:nth-of-type(even) > i:nth-of-type(2):before { + transform: rotate(45deg); + left: 5rem; + border-radius: 1rem 0 0 0; + top: 11rem; +} +.hs.row2.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(1):before, .hs.row2.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(1):after { + top: -7.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row2.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row2.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(5):after { + display: block; +} + +.hs.row2.col1:checked ~ div > div > shed > .row3.col1:after, .hs.row2.col1:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(3):after, .hs.row2.col1:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(1) { + display: none; +} + +.hs.row2.col1:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(3):before, .hs.row2.col1:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(2), .hs.row2.col1:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(5):after { + display: none; +} +.hs.row2.col1:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(3) { + height: 0; +} +.hs.row2.col1:checked ~ div > div > shed > .row1.col1 > i:nth-of-type(4) { + transform: scale(1); + right: 1rem; + left: 1rem; +} + +.hs.shed.row2.col-2:not(:checked) +~ .hs.row2.col1:checked +~ .shed.hs.row2.col2:not(:checked) +~ .hs.row0.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.shed.row2.col-2:not(:checked) +~ .hs.row2.col1:checked +~ .shed.hs.row2.col2:not(:checked) +~ .hs.row0.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row2.col1:before { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col1:before { + height: 12.5rem; + box-shadow: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(3) { + height: 0; +} +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(4) { + transform: scale(1); + right: 2rem; + left: 1rem; +} +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(5):after { + display: none; +} + +.hs.row4.col1:checked ~ .hs.row2.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(5):after { + display: none; +} + +.hs.row2.col3:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(5):after { + display: none; +} + +.hs.row3.col0:checked ~ .hs.row2.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(5):after { + display: none !important; +} + +.hs.row2.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(1), .hs.row2.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(3):after { + display: none; +} + +.hs.row2.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row2.col1:after, +.hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row2.col1:after { + width: 110%; + right: -1.25rem; +} + +.hs.row2.col2:checked ~ div > div > shed > .row2.col2:before { + background: repeating-linear-gradient(#bc592f 1rem, #683f44 2.3rem); + width: 90%; + height: 98%; + left: 1.25rem; + border-radius: 0.5rem; + box-shadow: 0 0.5rem 0 0 #20112a; +} +.hs.row2.col2:checked ~ div > div > shed > .row2.col2:after { + width: 105%; + height: 5rem; + background: repeating-linear-gradient(to right, #683f44 1rem, #20112a 2.1rem); + top: -2rem; + border-bottom: solid 0.5rem #252529; + box-shadow: 0 1.5rem 0.5rem -1rem rgba(79, 1, 14, 0.9); + border-radius: 0.5rem; + left: auto; + right: -1rem; +} +.hs.row2.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(4) { + width: 4rem; + height: 4rem; + right: 0; + margin: auto; + background: rgba(79, 1, 14, 0.3); + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); + transform: scale(0.5); +} +.hs.row2.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(4):before { + width: 3.4rem; + height: 0.5rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 0 1.5rem 0 #252529, 0 3rem 0 #252529, 0 0.5rem 0 #000, 0 1rem 0 rgba(79, 1, 14, 0.9), 0 2rem 0 rgba(79, 1, 14, 0.9), 0 2.5rem 0 rgba(79, 1, 14, 0.75); +} +.hs.row2.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(4):after { + width: 0.5rem; + height: 3.4rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 1.5rem 0 0 #252529, 3rem 0 0 #252529; +} +.hs.row2.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(3) { + width: 4rem; + height: 9rem; + right: 0; + margin: auto; + background: #bc592f; + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); +} +.hs.row2.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(3):after { + left: -4rem; + border: 1rem solid rgba(255, 255, 255, 0); + top: -11rem; + border-bottom-color: #252529; + transform: rotate(-3deg); + height: 4rem; + box-shadow: 0 3.7rem 0 -0.5rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row2.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(3):before { + width: 14.5rem; + height: 4.5rem; + border-top: 0.5rem solid #20112a; + border-bottom: 0.5rem solid #20112a; + top: 5rem; + left: -5rem; + background: repeating-linear-gradient(to right, #683f44, #20112a 0.5rem, rgba(255, 255, 255, 0) 0.5rem, rgba(255, 255, 255, 0) 1.4rem); + border-radius: 0.5rem; +} +.hs.row2.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(2):before { + width: 1rem; + height: 9rem; + background: #20112a; + top: -7rem; +} +.hs.row2.col2:checked ~ div > div > shed > .row2.col2:nth-of-type(odd) > i:nth-of-type(2) { + width: 1rem; + background: #20112a; + height: 3rem; + border-radius: 0.25rem; + top: 18.5rem; + left: 10rem; + transform: rotate(5deg); +} +.hs.row2.col2:checked ~ div > div > shed > .row2.col2:nth-of-type(odd) > i:nth-of-type(2):before { + transform: rotate(-45deg); + left: -3rem; + border-radius: 0 1rem 0 0; +} +.hs.row2.col2:checked ~ div > div > shed > .row2.col2:nth-of-type(odd) > i:nth-of-type(2):after { + width: 1rem; + height: 4rem; + transform: rotate(45deg); + background: #20112a; + top: -6.5rem; + left: -2rem; + border-radius: 1rem 0 0 0; +} +.hs.row2.col2:checked ~ div > div > shed > .row2.col2:nth-of-type(even) > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.row2.col2:checked ~ div > div > shed > .row2.col2:nth-of-type(even) > i:nth-of-type(1) { + left: 11rem; +} +.hs.row2.col2:checked ~ div > div > shed > .row2.col2:nth-of-type(even) > i:nth-of-type(2):before { + transform: rotate(45deg); + left: 5rem; + border-radius: 1rem 0 0 0; + top: 11rem; +} +.hs.row2.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(1):before, .hs.row2.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(1):after { + top: -7.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row2.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row2.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(5):after { + display: block; +} + +.hs.row2.col2:checked ~ div > div > shed > .row3.col2:after, .hs.row2.col2:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(3):after, .hs.row2.col2:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(1) { + display: none; +} + +.hs.row2.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(3):before, .hs.row2.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(2), .hs.row2.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(5):after { + display: none; +} +.hs.row2.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(3) { + height: 0; +} +.hs.row2.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(4) { + transform: scale(1); + right: 1rem; + left: 1rem; +} + +.hs.shed.row2.col-1:not(:checked) +~ .hs.row2.col2:checked +~ .shed.hs.row2.col3:not(:checked) +~ .hs.row0.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.shed.row2.col-1:not(:checked) +~ .hs.row2.col2:checked +~ .shed.hs.row2.col3:not(:checked) +~ .hs.row0.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row2.col2:before { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col2:before { + height: 12.5rem; + box-shadow: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(3) { + height: 0; +} +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(4) { + transform: scale(1); + right: 2rem; + left: 2rem; +} +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(5):after { + display: none; +} + +.hs.row4.col2:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(5):after { + display: none; +} + +.hs.row2.col3:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(5):after { + display: none; +} + +.hs.row3.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(5):after { + display: none !important; +} + +.hs.row2.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(1), .hs.row2.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(3):after { + display: none; +} + +.hs.row2.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row2.col2:after, +.hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row2.col2:after { + width: 110%; + right: -1.25rem; +} + +.hs.row2.col3:checked ~ div > div > shed > .row2.col3:before { + background: repeating-linear-gradient(#bc592f 1rem, #683f44 2.3rem); + width: 90%; + height: 98%; + left: 1.25rem; + border-radius: 0.5rem; + box-shadow: 0 0.5rem 0 0 #20112a; +} +.hs.row2.col3:checked ~ div > div > shed > .row2.col3:after { + width: 105%; + height: 5rem; + background: repeating-linear-gradient(to right, #683f44 1rem, #20112a 2.1rem); + top: -2rem; + border-bottom: solid 0.5rem #252529; + box-shadow: 0 1.5rem 0.5rem -1rem rgba(79, 1, 14, 0.9); + border-radius: 0.5rem; + left: auto; + right: -1rem; +} +.hs.row2.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(4) { + width: 4rem; + height: 4rem; + right: 0; + margin: auto; + background: rgba(79, 1, 14, 0.3); + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); + transform: scale(0.5); +} +.hs.row2.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(4):before { + width: 3.4rem; + height: 0.5rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 0 1.5rem 0 #252529, 0 3rem 0 #252529, 0 0.5rem 0 #000, 0 1rem 0 rgba(79, 1, 14, 0.9), 0 2rem 0 rgba(79, 1, 14, 0.9), 0 2.5rem 0 rgba(79, 1, 14, 0.75); +} +.hs.row2.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(4):after { + width: 0.5rem; + height: 3.4rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 1.5rem 0 0 #252529, 3rem 0 0 #252529; +} +.hs.row2.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(3) { + width: 4rem; + height: 9rem; + right: 0; + margin: auto; + background: #bc592f; + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); +} +.hs.row2.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(3):after { + left: -4rem; + border: 1rem solid rgba(255, 255, 255, 0); + top: -11rem; + border-bottom-color: #252529; + transform: rotate(-3deg); + height: 4rem; + box-shadow: 0 3.7rem 0 -0.5rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row2.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(3):before { + width: 14.5rem; + height: 4.5rem; + border-top: 0.5rem solid #20112a; + border-bottom: 0.5rem solid #20112a; + top: 5rem; + left: -5rem; + background: repeating-linear-gradient(to right, #683f44, #20112a 0.5rem, rgba(255, 255, 255, 0) 0.5rem, rgba(255, 255, 255, 0) 1.4rem); + border-radius: 0.5rem; +} +.hs.row2.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(2):before { + width: 1rem; + height: 9rem; + background: #20112a; + top: -7rem; +} +.hs.row2.col3:checked ~ div > div > shed > .row2.col3:nth-of-type(odd) > i:nth-of-type(2) { + width: 1rem; + background: #20112a; + height: 3rem; + border-radius: 0.25rem; + top: 18.5rem; + left: 10rem; + transform: rotate(5deg); +} +.hs.row2.col3:checked ~ div > div > shed > .row2.col3:nth-of-type(odd) > i:nth-of-type(2):before { + transform: rotate(-45deg); + left: -3rem; + border-radius: 0 1rem 0 0; +} +.hs.row2.col3:checked ~ div > div > shed > .row2.col3:nth-of-type(odd) > i:nth-of-type(2):after { + width: 1rem; + height: 4rem; + transform: rotate(45deg); + background: #20112a; + top: -6.5rem; + left: -2rem; + border-radius: 1rem 0 0 0; +} +.hs.row2.col3:checked ~ div > div > shed > .row2.col3:nth-of-type(even) > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.row2.col3:checked ~ div > div > shed > .row2.col3:nth-of-type(even) > i:nth-of-type(1) { + left: 11rem; +} +.hs.row2.col3:checked ~ div > div > shed > .row2.col3:nth-of-type(even) > i:nth-of-type(2):before { + transform: rotate(45deg); + left: 5rem; + border-radius: 1rem 0 0 0; + top: 11rem; +} +.hs.row2.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(1):before, .hs.row2.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(1):after { + top: -7.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row2.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row2.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(5):after { + display: block; +} + +.hs.row2.col3:checked ~ div > div > shed > .row3.col3:after, .hs.row2.col3:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(3):after, .hs.row2.col3:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(1) { + display: none; +} + +.hs.row2.col3:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(3):before, .hs.row2.col3:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(2), .hs.row2.col3:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(5):after { + display: none; +} +.hs.row2.col3:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(3) { + height: 0; +} +.hs.row2.col3:checked ~ div > div > shed > .row1.col3 > i:nth-of-type(4) { + transform: scale(1); + right: 2rem; + left: 1rem; +} + +.hs.shed.row2.col0:not(:checked) +~ .hs.row2.col3:checked +~ .shed.hs.row2.col4:not(:checked) +~ .hs.row0.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.shed.row2.col0:not(:checked) +~ .hs.row2.col3:checked +~ .shed.hs.row2.col4:not(:checked) +~ .hs.row0.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row2.col3:before { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col3:before { + height: 12.5rem; + box-shadow: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(3) { + height: 0; +} +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(4) { + transform: scale(1); + right: 2rem; + left: 2rem; +} +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(5):after { + display: none; +} + +.hs.row4.col3:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(5):after { + display: none; +} + +.hs.row2.col3:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(5):after { + display: none; +} + +.hs.row3.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(5):after { + display: none !important; +} + +.hs.row2.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(1), .hs.row2.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(3):after { + display: none; +} + +.hs.row2.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col3:after, +.hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col3:after { + width: 110%; + right: -1.25rem; +} + +.hs.row2.col4:checked ~ div > div > shed > .row2.col4:before { + background: repeating-linear-gradient(#bc592f 1rem, #683f44 2.3rem); + width: 90%; + height: 98%; + left: 1.25rem; + border-radius: 0.5rem; + box-shadow: 0 0.5rem 0 0 #20112a; +} +.hs.row2.col4:checked ~ div > div > shed > .row2.col4:after { + width: 105%; + height: 5rem; + background: repeating-linear-gradient(to right, #683f44 1rem, #20112a 2.1rem); + top: -2rem; + border-bottom: solid 0.5rem #252529; + box-shadow: 0 1.5rem 0.5rem -1rem rgba(79, 1, 14, 0.9); + border-radius: 0.5rem; + left: auto; + right: -1rem; +} +.hs.row2.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(4) { + width: 4rem; + height: 4rem; + right: 0; + margin: auto; + background: rgba(79, 1, 14, 0.3); + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); + transform: scale(0.5); +} +.hs.row2.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(4):before { + width: 3.4rem; + height: 0.5rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 0 1.5rem 0 #252529, 0 3rem 0 #252529, 0 0.5rem 0 #000, 0 1rem 0 rgba(79, 1, 14, 0.9), 0 2rem 0 rgba(79, 1, 14, 0.9), 0 2.5rem 0 rgba(79, 1, 14, 0.75); +} +.hs.row2.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(4):after { + width: 0.5rem; + height: 3.4rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 1.5rem 0 0 #252529, 3rem 0 0 #252529; +} +.hs.row2.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(3) { + width: 4rem; + height: 9rem; + right: 0; + margin: auto; + background: #bc592f; + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); +} +.hs.row2.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(3):after { + left: -4rem; + border: 1rem solid rgba(255, 255, 255, 0); + top: -11rem; + border-bottom-color: #252529; + transform: rotate(-3deg); + height: 4rem; + box-shadow: 0 3.7rem 0 -0.5rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row2.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(3):before { + width: 14.5rem; + height: 4.5rem; + border-top: 0.5rem solid #20112a; + border-bottom: 0.5rem solid #20112a; + top: 5rem; + left: -5rem; + background: repeating-linear-gradient(to right, #683f44, #20112a 0.5rem, rgba(255, 255, 255, 0) 0.5rem, rgba(255, 255, 255, 0) 1.4rem); + border-radius: 0.5rem; +} +.hs.row2.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(2):before { + width: 1rem; + height: 9rem; + background: #20112a; + top: -7rem; +} +.hs.row2.col4:checked ~ div > div > shed > .row2.col4:nth-of-type(odd) > i:nth-of-type(2) { + width: 1rem; + background: #20112a; + height: 3rem; + border-radius: 0.25rem; + top: 18.5rem; + left: 10rem; + transform: rotate(5deg); +} +.hs.row2.col4:checked ~ div > div > shed > .row2.col4:nth-of-type(odd) > i:nth-of-type(2):before { + transform: rotate(-45deg); + left: -3rem; + border-radius: 0 1rem 0 0; +} +.hs.row2.col4:checked ~ div > div > shed > .row2.col4:nth-of-type(odd) > i:nth-of-type(2):after { + width: 1rem; + height: 4rem; + transform: rotate(45deg); + background: #20112a; + top: -6.5rem; + left: -2rem; + border-radius: 1rem 0 0 0; +} +.hs.row2.col4:checked ~ div > div > shed > .row2.col4:nth-of-type(even) > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.row2.col4:checked ~ div > div > shed > .row2.col4:nth-of-type(even) > i:nth-of-type(1) { + left: 11rem; +} +.hs.row2.col4:checked ~ div > div > shed > .row2.col4:nth-of-type(even) > i:nth-of-type(2):before { + transform: rotate(45deg); + left: 5rem; + border-radius: 1rem 0 0 0; + top: 11rem; +} +.hs.row2.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(1):before, .hs.row2.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(1):after { + top: -7.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row2.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row2.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(5):after { + display: block; +} + +.hs.row2.col4:checked ~ div > div > shed > .row3.col4:after, .hs.row2.col4:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(3):after, .hs.row2.col4:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(1) { + display: none; +} + +.hs.row2.col4:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(3):before, .hs.row2.col4:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(2), .hs.row2.col4:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(5):after { + display: none; +} +.hs.row2.col4:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(3) { + height: 0; +} +.hs.row2.col4:checked ~ div > div > shed > .row1.col4 > i:nth-of-type(4) { + transform: scale(1); + right: 2rem; + left: 1rem; +} + +.hs.shed.row2.col1:not(:checked) +~ .hs.row2.col4:checked +~ .shed.hs.row2.col5:not(:checked) +~ .hs.row0.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.shed.row2.col1:not(:checked) +~ .hs.row2.col4:checked +~ .shed.hs.row2.col5:not(:checked) +~ .hs.row0.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col4:before { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col4:before { + height: 12.5rem; + box-shadow: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(3) { + height: 0; +} +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(4) { + transform: scale(1); + right: 2rem; + left: 2rem; +} +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(5):after { + display: none; +} + +.hs.row4.col4:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(5):after { + display: none; +} + +.hs.row2.col3:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(5):after { + display: none; +} + +.hs.row3.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(5):after { + display: none !important; +} + +.hs.row2.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(1), .hs.row2.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(3):after { + display: none; +} + +.hs.row2.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row2.col4:after, +.hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row2.col4:after { + width: 110%; + right: -1.25rem; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col1:before { + width: 110%; +} +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col2:after { + width: 120%; + left: -1.25rem; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col2:before { + width: 110%; +} +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col3:after { + width: 120%; + left: -1.25rem; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col3:before { + width: 110%; +} +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col4:after { + width: 120%; + left: -1.25rem; +} + +.hs.row2.col2:checked ~ .hs.shed.row2.col3:not(:checked) ~ div > div > shed > .row2.col2 > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.row2.col2:checked ~ .hs.shed.row2.col3:not(:checked) ~ div > div > shed > .row2.col2 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row2.col4:checked ~ .hs.shed.row2.col5:not(:checked) ~ div > div > shed > .row2.col4 > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.row2.col4:checked ~ .hs.shed.row2.col5:not(:checked) ~ div > div > shed > .row2.col4 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(3):after, .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(1) { + display: none; +} +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(3):before { + width: 10.25rem; +} + +.hs.row2.col2:checked ~ .hs.row2.col1:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(3):after { + left: 6rem; + transform: rotate(3deg); +} +.hs.row2.col2:checked ~ .hs.row2.col1:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(1) { + left: 10rem; +} +.hs.row2.col2:checked ~ .hs.row2.col1:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(5):after { + left: -2.5rem; + transform: rotate(-3deg); +} + +.hs.row2.col2:checked ~ .hs.row2.col-1:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(3):after, .hs.row2.col2:checked ~ .hs.row2.col-1:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(1), +.hs.row2.col2:checked ~ .hs.row2.col-3:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(3):after, +.hs.row2.col2:checked ~ .hs.row2.col-3:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(1) { + display: none; +} + +.hs.row2.col2:checked ~ .hs.row2.col-1:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(5):after { + left: 10rem; + transform: rotate(2deg); +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(3):after, .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(1) { + display: none; +} +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(3):before { + width: 10.25rem; +} + +.hs.row2.col3:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(3):after { + left: 6rem; + transform: rotate(3deg); +} +.hs.row2.col3:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(1) { + left: 10rem; +} +.hs.row2.col3:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(5):after { + left: -2.5rem; + transform: rotate(-3deg); +} + +.hs.row2.col3:checked ~ .hs.row2.col0:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(3):after, .hs.row2.col3:checked ~ .hs.row2.col0:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(1), +.hs.row2.col3:checked ~ .hs.row2.col-2:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(3):after, +.hs.row2.col3:checked ~ .hs.row2.col-2:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(1) { + display: none; +} + +.hs.row2.col3:checked ~ .hs.row2.col0:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(5):after { + left: 10rem; + transform: rotate(2deg); +} + +.hs.shed.row2.col1:checked +~ .hs.shed.row2.col2:not(:checked) +~ .hs.shed.row2.col3:not(:checked) +~ .hs.shed.row2.col4:checked +~ div > div > shed > .row2.col1 > i:nth-of-type(5):before { + display: block; + width: 210%; +} + +.hs.shed.row2.col1:checked +~ .hs.shed.row2.col2:not(:checked) +~ .hs.shed.row2.col3:checked +~ div +> div +> shed +> .row2.col1 > i:nth-of-type(5):before, +.hs.shed.row2.col2:checked +~ .hs.shed.row2.col3:not(:checked) +~ .hs.shed.row2.col4:checked +~ div +> div +> shed +> .row2.col2 > i:nth-of-type(5):before { + display: block; + width: 110%; +} + +.hs.row3.col2:checked +~ .hs.shed.row2.col1:checked +~ .hs.shed.row2.col2:not(:checked) +~ .hs.shed.row2.col3:checked +~ div +> div +> shed +> .row2.col1 > i:nth-of-type(5):before, +.hs.row3.col3:checked +~ .hs.shed.row2.col2:checked +~ .hs.shed.row2.col3:not(:checked) +~ .hs.shed.row2.col4:checked +~ div +> div +> shed +> .row2.col2 > i:nth-of-type(5):before, +.hs.row3.col3:checked +~ .hs.shed.row2.col1:checked +~ .hs.shed.row2.col2:not(:checked) +~ .hs.shed.row2.col3:not(:checked) +~ .hs.shed.row2.col4:checked +~ div +> div +> shed +> .row2.col1 > i:nth-of-type(5):before, +.hs.row3.col2:checked +~ .hs.shed.row2.col1:checked +~ .hs.shed.row2.col2:not(:checked) +~ .hs.shed.row2.col3:not(:checked) +~ .hs.shed.row2.col4:checked +~ div +> div +> shed +> .row2.col1 > i:nth-of-type(5):before, +.hs.shed.row3.col1:checked +~ .hs.shed.row2.col1:checked +~ .hs.shed.row2.col2:not(:checked) +~ .hs.shed.row2.col3:checked +~ div +> div +> shed +> .row2.col1 > i:nth-of-type(5):before, +.hs.shed.row3.col2:checked +~ .hs.shed.row2.col2:checked +~ .hs.shed.row2.col3:not(:checked) +~ .hs.shed.row2.col4:checked +~ div +> div +> shed +> .row2.col2 > i:nth-of-type(5):before { + top: 1rem; + border: none; +} + +.hs.row3.col1:checked ~ div > div > shed > .row3.col1:before { + background: repeating-linear-gradient(#bc592f 1rem, #683f44 2.3rem); + width: 90%; + height: 98%; + left: 1.25rem; + border-radius: 0.5rem; + box-shadow: 0 0.5rem 0 0 #20112a; +} +.hs.row3.col1:checked ~ div > div > shed > .row3.col1:after { + width: 105%; + height: 5rem; + background: repeating-linear-gradient(to right, #683f44 1rem, #20112a 2.1rem); + top: -2rem; + border-bottom: solid 0.5rem #252529; + box-shadow: 0 1.5rem 0.5rem -1rem rgba(79, 1, 14, 0.9); + border-radius: 0.5rem; + left: auto; + right: -1rem; +} +.hs.row3.col1:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(4) { + width: 4rem; + height: 4rem; + right: 0; + margin: auto; + background: rgba(79, 1, 14, 0.3); + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); + transform: scale(0.5); +} +.hs.row3.col1:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(4):before { + width: 3.4rem; + height: 0.5rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 0 1.5rem 0 #252529, 0 3rem 0 #252529, 0 0.5rem 0 #000, 0 1rem 0 rgba(79, 1, 14, 0.9), 0 2rem 0 rgba(79, 1, 14, 0.9), 0 2.5rem 0 rgba(79, 1, 14, 0.75); +} +.hs.row3.col1:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(4):after { + width: 0.5rem; + height: 3.4rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 1.5rem 0 0 #252529, 3rem 0 0 #252529; +} +.hs.row3.col1:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(3) { + width: 4rem; + height: 9rem; + right: 0; + margin: auto; + background: #bc592f; + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); +} +.hs.row3.col1:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(3):after { + left: -4rem; + border: 1rem solid rgba(255, 255, 255, 0); + top: -11rem; + border-bottom-color: #252529; + transform: rotate(-3deg); + height: 4rem; + box-shadow: 0 3.7rem 0 -0.5rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row3.col1:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(3):before { + width: 14.5rem; + height: 4.5rem; + border-top: 0.5rem solid #20112a; + border-bottom: 0.5rem solid #20112a; + top: 5rem; + left: -5rem; + background: repeating-linear-gradient(to right, #683f44, #20112a 0.5rem, rgba(255, 255, 255, 0) 0.5rem, rgba(255, 255, 255, 0) 1.4rem); + border-radius: 0.5rem; +} +.hs.row3.col1:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(2):before { + width: 1rem; + height: 9rem; + background: #20112a; + top: -7rem; +} +.hs.row3.col1:checked ~ div > div > shed > .row3.col1:nth-of-type(odd) > i:nth-of-type(2) { + width: 1rem; + background: #20112a; + height: 3rem; + border-radius: 0.25rem; + top: 18.5rem; + left: 10rem; + transform: rotate(5deg); +} +.hs.row3.col1:checked ~ div > div > shed > .row3.col1:nth-of-type(odd) > i:nth-of-type(2):before { + transform: rotate(-45deg); + left: -3rem; + border-radius: 0 1rem 0 0; +} +.hs.row3.col1:checked ~ div > div > shed > .row3.col1:nth-of-type(odd) > i:nth-of-type(2):after { + width: 1rem; + height: 4rem; + transform: rotate(45deg); + background: #20112a; + top: -6.5rem; + left: -2rem; + border-radius: 1rem 0 0 0; +} +.hs.row3.col1:checked ~ div > div > shed > .row3.col1:nth-of-type(even) > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.row3.col1:checked ~ div > div > shed > .row3.col1:nth-of-type(even) > i:nth-of-type(1) { + left: 11rem; +} +.hs.row3.col1:checked ~ div > div > shed > .row3.col1:nth-of-type(even) > i:nth-of-type(2):before { + transform: rotate(45deg); + left: 5rem; + border-radius: 1rem 0 0 0; + top: 11rem; +} +.hs.row3.col1:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(1):before, .hs.row3.col1:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(1):after { + top: -7.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row3.col1:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row3.col1:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(5):after { + display: block; +} + +.hs.row3.col1:checked ~ div > div > shed > .row4.col1:after, .hs.row3.col1:checked ~ div > div > shed > .row4.col1 > i:nth-of-type(3):after, .hs.row3.col1:checked ~ div > div > shed > .row4.col1 > i:nth-of-type(1) { + display: none; +} + +.hs.row3.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(3):before, .hs.row3.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(2), .hs.row3.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(5):after { + display: none; +} +.hs.row3.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(3) { + height: 0; +} +.hs.row3.col1:checked ~ div > div > shed > .row2.col1 > i:nth-of-type(4) { + transform: scale(1); + right: 1rem; + left: 2rem; +} + +.hs.shed.row3.col-2:not(:checked) +~ .hs.row3.col1:checked +~ .shed.hs.row3.col2:not(:checked) +~ .hs.row1.col1:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.shed.row3.col-2:not(:checked) +~ .hs.row3.col1:checked +~ .shed.hs.row3.col2:not(:checked) +~ .hs.row1.col1:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > shed > .row3.col1:before { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > shed > .row2.col1:before { + height: 12.5rem; + box-shadow: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(3) { + height: 0; +} +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(4) { + transform: scale(1); + right: 2rem; + left: 1rem; +} +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(5):after { + display: none; +} + +.hs.row5.col1:checked ~ .hs.row3.col1:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(5):after { + display: none; +} + +.hs.row2.col3:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(5):after { + display: none; +} + +.hs.row4.col0:checked ~ .hs.row3.col1:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(5):after { + display: none !important; +} + +.hs.row3.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(1), .hs.row3.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row3.col1 > i:nth-of-type(3):after { + display: none; +} + +.hs.row3.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row3.col1:after, +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row3.col1:after { + width: 110%; + right: -1.25rem; +} + +.hs.row3.col2:checked ~ div > div > shed > .row3.col2:before { + background: repeating-linear-gradient(#bc592f 1rem, #683f44 2.3rem); + width: 90%; + height: 98%; + left: 1.25rem; + border-radius: 0.5rem; + box-shadow: 0 0.5rem 0 0 #20112a; +} +.hs.row3.col2:checked ~ div > div > shed > .row3.col2:after { + width: 105%; + height: 5rem; + background: repeating-linear-gradient(to right, #683f44 1rem, #20112a 2.1rem); + top: -2rem; + border-bottom: solid 0.5rem #252529; + box-shadow: 0 1.5rem 0.5rem -1rem rgba(79, 1, 14, 0.9); + border-radius: 0.5rem; + left: auto; + right: -1rem; +} +.hs.row3.col2:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(4) { + width: 4rem; + height: 4rem; + right: 0; + margin: auto; + background: rgba(79, 1, 14, 0.3); + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); + transform: scale(0.5); +} +.hs.row3.col2:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(4):before { + width: 3.4rem; + height: 0.5rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 0 1.5rem 0 #252529, 0 3rem 0 #252529, 0 0.5rem 0 #000, 0 1rem 0 rgba(79, 1, 14, 0.9), 0 2rem 0 rgba(79, 1, 14, 0.9), 0 2.5rem 0 rgba(79, 1, 14, 0.75); +} +.hs.row3.col2:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(4):after { + width: 0.5rem; + height: 3.4rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 1.5rem 0 0 #252529, 3rem 0 0 #252529; +} +.hs.row3.col2:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(3) { + width: 4rem; + height: 9rem; + right: 0; + margin: auto; + background: #bc592f; + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); +} +.hs.row3.col2:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(3):after { + left: -4rem; + border: 1rem solid rgba(255, 255, 255, 0); + top: -11rem; + border-bottom-color: #252529; + transform: rotate(-3deg); + height: 4rem; + box-shadow: 0 3.7rem 0 -0.5rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row3.col2:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(3):before { + width: 14.5rem; + height: 4.5rem; + border-top: 0.5rem solid #20112a; + border-bottom: 0.5rem solid #20112a; + top: 5rem; + left: -5rem; + background: repeating-linear-gradient(to right, #683f44, #20112a 0.5rem, rgba(255, 255, 255, 0) 0.5rem, rgba(255, 255, 255, 0) 1.4rem); + border-radius: 0.5rem; +} +.hs.row3.col2:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(2):before { + width: 1rem; + height: 9rem; + background: #20112a; + top: -7rem; +} +.hs.row3.col2:checked ~ div > div > shed > .row3.col2:nth-of-type(odd) > i:nth-of-type(2) { + width: 1rem; + background: #20112a; + height: 3rem; + border-radius: 0.25rem; + top: 18.5rem; + left: 10rem; + transform: rotate(5deg); +} +.hs.row3.col2:checked ~ div > div > shed > .row3.col2:nth-of-type(odd) > i:nth-of-type(2):before { + transform: rotate(-45deg); + left: -3rem; + border-radius: 0 1rem 0 0; +} +.hs.row3.col2:checked ~ div > div > shed > .row3.col2:nth-of-type(odd) > i:nth-of-type(2):after { + width: 1rem; + height: 4rem; + transform: rotate(45deg); + background: #20112a; + top: -6.5rem; + left: -2rem; + border-radius: 1rem 0 0 0; +} +.hs.row3.col2:checked ~ div > div > shed > .row3.col2:nth-of-type(even) > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.row3.col2:checked ~ div > div > shed > .row3.col2:nth-of-type(even) > i:nth-of-type(1) { + left: 11rem; +} +.hs.row3.col2:checked ~ div > div > shed > .row3.col2:nth-of-type(even) > i:nth-of-type(2):before { + transform: rotate(45deg); + left: 5rem; + border-radius: 1rem 0 0 0; + top: 11rem; +} +.hs.row3.col2:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(1):before, .hs.row3.col2:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(1):after { + top: -7.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row3.col2:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row3.col2:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(5):after { + display: block; +} + +.hs.row3.col2:checked ~ div > div > shed > .row4.col2:after, .hs.row3.col2:checked ~ div > div > shed > .row4.col2 > i:nth-of-type(3):after, .hs.row3.col2:checked ~ div > div > shed > .row4.col2 > i:nth-of-type(1) { + display: none; +} + +.hs.row3.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(3):before, .hs.row3.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(2), .hs.row3.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(5):after { + display: none; +} +.hs.row3.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(3) { + height: 0; +} +.hs.row3.col2:checked ~ div > div > shed > .row2.col2 > i:nth-of-type(4) { + transform: scale(1); + right: 2rem; + left: 1rem; +} + +.hs.shed.row3.col-1:not(:checked) +~ .hs.row3.col2:checked +~ .shed.hs.row3.col3:not(:checked) +~ .hs.row1.col2:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.shed.row3.col-1:not(:checked) +~ .hs.row3.col2:checked +~ .shed.hs.row3.col3:not(:checked) +~ .hs.row1.col2:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row3.col2:before { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col2:before { + height: 12.5rem; + box-shadow: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(3) { + height: 0; +} +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(4) { + transform: scale(1); + right: 1rem; + left: 1rem; +} +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(5):after { + display: none; +} + +.hs.row5.col2:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(5):after { + display: none; +} + +.hs.row2.col3:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(5):after { + display: none; +} + +.hs.row4.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(5):after { + display: none !important; +} + +.hs.row3.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(1), .hs.row3.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(3):after { + display: none; +} + +.hs.row3.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row3.col2:after, +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row3.col2:after { + width: 110%; + right: -1.25rem; +} + +.hs.row3.col3:checked ~ div > div > shed > .row3.col3:before { + background: repeating-linear-gradient(#bc592f 1rem, #683f44 2.3rem); + width: 90%; + height: 98%; + left: 1.25rem; + border-radius: 0.5rem; + box-shadow: 0 0.5rem 0 0 #20112a; +} +.hs.row3.col3:checked ~ div > div > shed > .row3.col3:after { + width: 105%; + height: 5rem; + background: repeating-linear-gradient(to right, #683f44 1rem, #20112a 2.1rem); + top: -2rem; + border-bottom: solid 0.5rem #252529; + box-shadow: 0 1.5rem 0.5rem -1rem rgba(79, 1, 14, 0.9); + border-radius: 0.5rem; + left: auto; + right: -1rem; +} +.hs.row3.col3:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(4) { + width: 4rem; + height: 4rem; + right: 0; + margin: auto; + background: rgba(79, 1, 14, 0.3); + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); + transform: scale(0.5); +} +.hs.row3.col3:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(4):before { + width: 3.4rem; + height: 0.5rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 0 1.5rem 0 #252529, 0 3rem 0 #252529, 0 0.5rem 0 #000, 0 1rem 0 rgba(79, 1, 14, 0.9), 0 2rem 0 rgba(79, 1, 14, 0.9), 0 2.5rem 0 rgba(79, 1, 14, 0.75); +} +.hs.row3.col3:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(4):after { + width: 0.5rem; + height: 3.4rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 1.5rem 0 0 #252529, 3rem 0 0 #252529; +} +.hs.row3.col3:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(3) { + width: 4rem; + height: 9rem; + right: 0; + margin: auto; + background: #bc592f; + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); +} +.hs.row3.col3:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(3):after { + left: -4rem; + border: 1rem solid rgba(255, 255, 255, 0); + top: -11rem; + border-bottom-color: #252529; + transform: rotate(-3deg); + height: 4rem; + box-shadow: 0 3.7rem 0 -0.5rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row3.col3:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(3):before { + width: 14.5rem; + height: 4.5rem; + border-top: 0.5rem solid #20112a; + border-bottom: 0.5rem solid #20112a; + top: 5rem; + left: -5rem; + background: repeating-linear-gradient(to right, #683f44, #20112a 0.5rem, rgba(255, 255, 255, 0) 0.5rem, rgba(255, 255, 255, 0) 1.4rem); + border-radius: 0.5rem; +} +.hs.row3.col3:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(2):before { + width: 1rem; + height: 9rem; + background: #20112a; + top: -7rem; +} +.hs.row3.col3:checked ~ div > div > shed > .row3.col3:nth-of-type(odd) > i:nth-of-type(2) { + width: 1rem; + background: #20112a; + height: 3rem; + border-radius: 0.25rem; + top: 18.5rem; + left: 10rem; + transform: rotate(5deg); +} +.hs.row3.col3:checked ~ div > div > shed > .row3.col3:nth-of-type(odd) > i:nth-of-type(2):before { + transform: rotate(-45deg); + left: -3rem; + border-radius: 0 1rem 0 0; +} +.hs.row3.col3:checked ~ div > div > shed > .row3.col3:nth-of-type(odd) > i:nth-of-type(2):after { + width: 1rem; + height: 4rem; + transform: rotate(45deg); + background: #20112a; + top: -6.5rem; + left: -2rem; + border-radius: 1rem 0 0 0; +} +.hs.row3.col3:checked ~ div > div > shed > .row3.col3:nth-of-type(even) > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.row3.col3:checked ~ div > div > shed > .row3.col3:nth-of-type(even) > i:nth-of-type(1) { + left: 11rem; +} +.hs.row3.col3:checked ~ div > div > shed > .row3.col3:nth-of-type(even) > i:nth-of-type(2):before { + transform: rotate(45deg); + left: 5rem; + border-radius: 1rem 0 0 0; + top: 11rem; +} +.hs.row3.col3:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(1):before, .hs.row3.col3:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(1):after { + top: -7.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row3.col3:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row3.col3:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(5):after { + display: block; +} + +.hs.row3.col3:checked ~ div > div > shed > .row4.col3:after, .hs.row3.col3:checked ~ div > div > shed > .row4.col3 > i:nth-of-type(3):after, .hs.row3.col3:checked ~ div > div > shed > .row4.col3 > i:nth-of-type(1) { + display: none; +} + +.hs.row3.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(3):before, .hs.row3.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(2), .hs.row3.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(5):after { + display: none; +} +.hs.row3.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(3) { + height: 0; +} +.hs.row3.col3:checked ~ div > div > shed > .row2.col3 > i:nth-of-type(4) { + transform: scale(1); + right: 1rem; + left: 2rem; +} + +.hs.shed.row3.col0:not(:checked) +~ .hs.row3.col3:checked +~ .shed.hs.row3.col4:not(:checked) +~ .hs.row1.col3:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.shed.row3.col0:not(:checked) +~ .hs.row3.col3:checked +~ .shed.hs.row3.col4:not(:checked) +~ .hs.row1.col3:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row3.col3:before { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col3:before { + height: 12.5rem; + box-shadow: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(3) { + height: 0; +} +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(4) { + transform: scale(1); + right: 1rem; + left: 1rem; +} +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(5):after { + display: none; +} + +.hs.row5.col3:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(5):after { + display: none; +} + +.hs.row2.col3:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(5):after { + display: none; +} + +.hs.row4.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(5):after { + display: none !important; +} + +.hs.row3.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(1), .hs.row3.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(3):after { + display: none; +} + +.hs.row3.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row3.col3:after, +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row3.col3:after { + width: 110%; + right: -1.25rem; +} + +.hs.row3.col4:checked ~ div > div > shed > .row3.col4:before { + background: repeating-linear-gradient(#bc592f 1rem, #683f44 2.3rem); + width: 90%; + height: 98%; + left: 1.25rem; + border-radius: 0.5rem; + box-shadow: 0 0.5rem 0 0 #20112a; +} +.hs.row3.col4:checked ~ div > div > shed > .row3.col4:after { + width: 105%; + height: 5rem; + background: repeating-linear-gradient(to right, #683f44 1rem, #20112a 2.1rem); + top: -2rem; + border-bottom: solid 0.5rem #252529; + box-shadow: 0 1.5rem 0.5rem -1rem rgba(79, 1, 14, 0.9); + border-radius: 0.5rem; + left: auto; + right: -1rem; +} +.hs.row3.col4:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(4) { + width: 4rem; + height: 4rem; + right: 0; + margin: auto; + background: rgba(79, 1, 14, 0.3); + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); + transform: scale(0.5); +} +.hs.row3.col4:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(4):before { + width: 3.4rem; + height: 0.5rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 0 1.5rem 0 #252529, 0 3rem 0 #252529, 0 0.5rem 0 #000, 0 1rem 0 rgba(79, 1, 14, 0.9), 0 2rem 0 rgba(79, 1, 14, 0.9), 0 2.5rem 0 rgba(79, 1, 14, 0.75); +} +.hs.row3.col4:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(4):after { + width: 0.5rem; + height: 3.4rem; + background: #252529; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 1.5rem 0 0 #252529, 3rem 0 0 #252529; +} +.hs.row3.col4:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(3) { + width: 4rem; + height: 9rem; + right: 0; + margin: auto; + background: #bc592f; + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); +} +.hs.row3.col4:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(3):after { + left: -4rem; + border: 1rem solid rgba(255, 255, 255, 0); + top: -11rem; + border-bottom-color: #252529; + transform: rotate(-3deg); + height: 4rem; + box-shadow: 0 3.7rem 0 -0.5rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row3.col4:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(3):before { + width: 14.5rem; + height: 4.5rem; + border-top: 0.5rem solid #20112a; + border-bottom: 0.5rem solid #20112a; + top: 5rem; + left: -5rem; + background: repeating-linear-gradient(to right, #683f44, #20112a 0.5rem, rgba(255, 255, 255, 0) 0.5rem, rgba(255, 255, 255, 0) 1.4rem); + border-radius: 0.5rem; +} +.hs.row3.col4:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(2):before { + width: 1rem; + height: 9rem; + background: #20112a; + top: -7rem; +} +.hs.row3.col4:checked ~ div > div > shed > .row3.col4:nth-of-type(odd) > i:nth-of-type(2) { + width: 1rem; + background: #20112a; + height: 3rem; + border-radius: 0.25rem; + top: 18.5rem; + left: 10rem; + transform: rotate(5deg); +} +.hs.row3.col4:checked ~ div > div > shed > .row3.col4:nth-of-type(odd) > i:nth-of-type(2):before { + transform: rotate(-45deg); + left: -3rem; + border-radius: 0 1rem 0 0; +} +.hs.row3.col4:checked ~ div > div > shed > .row3.col4:nth-of-type(odd) > i:nth-of-type(2):after { + width: 1rem; + height: 4rem; + transform: rotate(45deg); + background: #20112a; + top: -6.5rem; + left: -2rem; + border-radius: 1rem 0 0 0; +} +.hs.row3.col4:checked ~ div > div > shed > .row3.col4:nth-of-type(even) > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.row3.col4:checked ~ div > div > shed > .row3.col4:nth-of-type(even) > i:nth-of-type(1) { + left: 11rem; +} +.hs.row3.col4:checked ~ div > div > shed > .row3.col4:nth-of-type(even) > i:nth-of-type(2):before { + transform: rotate(45deg); + left: 5rem; + border-radius: 1rem 0 0 0; + top: 11rem; +} +.hs.row3.col4:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(1):before, .hs.row3.col4:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(1):after { + top: -7.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row3.col4:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row3.col4:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(5):after { + display: block; +} + +.hs.row3.col4:checked ~ div > div > shed > .row4.col4:after, .hs.row3.col4:checked ~ div > div > shed > .row4.col4 > i:nth-of-type(3):after, .hs.row3.col4:checked ~ div > div > shed > .row4.col4 > i:nth-of-type(1) { + display: none; +} + +.hs.row3.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(3):before, .hs.row3.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(2), .hs.row3.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(5):after { + display: none; +} +.hs.row3.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(3) { + height: 0; +} +.hs.row3.col4:checked ~ div > div > shed > .row2.col4 > i:nth-of-type(4) { + transform: scale(1); + right: 2rem; + left: 1rem; +} + +.hs.shed.row3.col1:not(:checked) +~ .hs.row3.col4:checked +~ .shed.hs.row3.col5:not(:checked) +~ .hs.row1.col4:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.shed.row3.col1:not(:checked) +~ .hs.row3.col4:checked +~ .shed.hs.row3.col5:not(:checked) +~ .hs.row1.col4:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row3.col4:before { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col4:before { + height: 12.5rem; + box-shadow: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(3) { + height: 0; +} +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(4) { + transform: scale(1); + right: 1rem; + left: 2rem; +} +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(5):after { + display: none; +} + +.hs.row5.col4:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(5):after { + display: none; +} + +.hs.row2.col3:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col2 > i:nth-of-type(5):after { + display: none; +} + +.hs.row4.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(5):after { + display: none !important; +} + +.hs.row3.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(1), .hs.row3.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row3.col4 > i:nth-of-type(3):after { + display: none; +} + +.hs.row3.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row3.col4:after, +.hs.row3.col5:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row3.col4:after { + width: 110%; + right: -1.25rem; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row3.col1:before { + width: 110%; +} +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row3.col2:after { + width: 120%; + left: -1.25rem; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row3.col2:before { + width: 110%; +} +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row3.col3:after { + width: 120%; + left: -1.25rem; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row3.col3:before { + width: 110%; +} +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row3.col4:after { + width: 120%; + left: -1.25rem; +} + +.hs.row3.col2:checked ~ .hs.shed.row3.col3:not(:checked) ~ div > div > shed > .row3.col2 > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.row3.col2:checked ~ .hs.shed.row3.col3:not(:checked) ~ div > div > shed > .row3.col2 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row3.col4:checked ~ .hs.shed.row3.col5:not(:checked) ~ div > div > shed > .row3.col4 > i:nth-of-type(3):after { + left: 7rem; + transform: rotate(3deg); +} +.hs.row3.col4:checked ~ .hs.shed.row3.col5:not(:checked) ~ div > div > shed > .row3.col4 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(3):after, .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(1) { + display: none; +} +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(3):before { + width: 10.25rem; +} + +.hs.row3.col2:checked ~ .hs.row3.col1:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(3):after { + left: 6rem; + transform: rotate(3deg); +} +.hs.row3.col2:checked ~ .hs.row3.col1:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(1) { + left: 10rem; +} +.hs.row3.col2:checked ~ .hs.row3.col1:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(5):after { + left: -2.5rem; + transform: rotate(-3deg); +} + +.hs.row3.col2:checked ~ .hs.row3.col-1:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(3):after, .hs.row3.col2:checked ~ .hs.row3.col-1:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(1), +.hs.row3.col2:checked ~ .hs.row3.col-3:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(3):after, +.hs.row3.col2:checked ~ .hs.row3.col-3:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(1) { + display: none; +} + +.hs.row3.col2:checked ~ .hs.row3.col-1:checked ~ div > div > shed > .row3.col2 > i:nth-of-type(5):after { + left: 10rem; + transform: rotate(2deg); +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(3):after, .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(1) { + display: none; +} +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(3):before { + width: 10.25rem; +} + +.hs.row3.col3:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(3):after { + left: 6rem; + transform: rotate(3deg); +} +.hs.row3.col3:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(1) { + left: 10rem; +} +.hs.row3.col3:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(5):after { + left: -2.5rem; + transform: rotate(-3deg); +} + +.hs.row3.col3:checked ~ .hs.row3.col0:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(3):after, .hs.row3.col3:checked ~ .hs.row3.col0:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(1), +.hs.row3.col3:checked ~ .hs.row3.col-2:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(3):after, +.hs.row3.col3:checked ~ .hs.row3.col-2:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(1) { + display: none; +} + +.hs.row3.col3:checked ~ .hs.row3.col0:checked ~ div > div > shed > .row3.col3 > i:nth-of-type(5):after { + left: 10rem; + transform: rotate(2deg); +} + +.hs.shed.row3.col1:checked +~ .hs.shed.row3.col2:not(:checked) +~ .hs.shed.row3.col3:not(:checked) +~ .hs.shed.row3.col4:checked +~ div > div > shed > .row3.col1 > i:nth-of-type(5):before { + display: block; + width: 210%; +} + +.hs.shed.row3.col1:checked +~ .hs.shed.row3.col2:not(:checked) +~ .hs.shed.row3.col3:checked +~ div +> div +> shed +> .row3.col1 > i:nth-of-type(5):before, +.hs.shed.row3.col2:checked +~ .hs.shed.row3.col3:not(:checked) +~ .hs.shed.row3.col4:checked +~ div +> div +> shed +> .row3.col2 > i:nth-of-type(5):before { + display: block; + width: 110%; +} + +.hs.row4.col2:checked +~ .hs.shed.row3.col1:checked +~ .hs.shed.row3.col2:not(:checked) +~ .hs.shed.row3.col3:checked +~ div +> div +> shed +> .row3.col1 > i:nth-of-type(5):before, +.hs.row4.col3:checked +~ .hs.shed.row3.col2:checked +~ .hs.shed.row3.col3:not(:checked) +~ .hs.shed.row3.col4:checked +~ div +> div +> shed +> .row3.col2 > i:nth-of-type(5):before, +.hs.row4.col3:checked +~ .hs.shed.row3.col1:checked +~ .hs.shed.row3.col2:not(:checked) +~ .hs.shed.row3.col3:not(:checked) +~ .hs.shed.row3.col4:checked +~ div +> div +> shed +> .row3.col1 > i:nth-of-type(5):before, +.hs.row4.col2:checked +~ .hs.shed.row3.col1:checked +~ .hs.shed.row3.col2:not(:checked) +~ .hs.shed.row3.col3:not(:checked) +~ .hs.shed.row3.col4:checked +~ div +> div +> shed +> .row3.col1 > i:nth-of-type(5):before, +.hs.shed.row4.col1:checked +~ .hs.shed.row3.col1:checked +~ .hs.shed.row3.col2:not(:checked) +~ .hs.shed.row3.col3:checked +~ div +> div +> shed +> .row3.col1 > i:nth-of-type(5):before, +.hs.shed.row4.col2:checked +~ .hs.shed.row3.col2:checked +~ .hs.shed.row3.col3:not(:checked) +~ .hs.shed.row3.col4:checked +~ div +> div +> shed +> .row3.col2 > i:nth-of-type(5):before { + top: 1rem; + border: none; +} + +div > div > house > label > i:nth-of-type(5) { + width: 13rem; + height: 3rem; + top: 1rem; + border-bottom-color: #683f44; + box-shadow: 0 0.25rem 0 #683f44; + border-radius: 50%; + left: -0.5rem; + z-index: 1; + display: none; +} +div > div > house > label > i:nth-of-type(5):after { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #bc592f; + top: 2.75rem; + left: 1rem; + transform: rotate(5deg); + z-index: -1 !important; + filter: drop-shadow(2rem 0.25rem 0 #bc2f60) drop-shadow(2rem 0rem 0 #bc592f); +} +div > div > house > label > i:nth-of-type(5):before { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #7dbc2f; + top: 3.25rem; + left: 7rem; + transform: rotate(-5deg); + z-index: -1 !important; + filter: drop-shadow(2rem -0.25rem 0 #bc2f60) drop-shadow(2rem 0rem 0 #bc592f); +} + +.hs.row1.col1:checked ~ div > div > house > .row1.col1:before { + width: 1.5rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: -1.35rem; + left: 3rem; + box-shadow: 2rem 2rem 0 currentColor; + filter: hue-rotate(-10deg) brightness(1.1); + opacity: 0.7; +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1:after { + filter: hue-rotate(-10deg) brightness(1.1); + width: 2rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: 0.5rem; + left: -0.15rem; + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(4) { + width: 5rem; + right: 0; + margin: auto; + top: 3.5rem; + background: rgba(79, 1, 14, 0.9); + height: 5rem; + border-radius: 0.3rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem currentColor, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 #000, inset 0 -3.5rem 0 #20112a; +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(4):after { + width: 4.5rem; + height: 0.25rem; + left: 0.25rem; + top: 2.4rem; + background: currentColor; + border-radius: 0.0001rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), 0 3rem 0 0.3rem #dc9075, 0 3.5rem 0.35rem 0.25rem rgba(79, 1, 14, 0.9); +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(4):before { + width: 0.25rem; + height: 4.5rem; + left: 2.4rem; + top: 0.25rem; + background: currentColor; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1.col1 > i:nth-of-type(4) { + border-radius: 2.25rem 2.25rem 0.3rem 0.3rem; +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(2) { + border: solid rgba(255, 255, 255, 0) 1rem; + border-bottom: solid #6a1b37 4rem; + width: calc(100% + 2.1rem); + left: -1rem; + top: -2.5rem; + box-shadow: 0 0.25rem 0 #20112a, 0 1.5rem 1rem -1rem rgba(79, 1, 14, 0.75); +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(2):before { + width: 100%; + height: 3rem; + border-radius: 50%; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 0.75rem, rgba(79, 1, 14, 0.4), rgba(255, 255, 255, 0) 1rem); +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(2):after { + width: 3rem; + height: 4rem; + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 0.5rem solid #bc2f2f; + top: -2rem; + box-shadow: inset 0 4rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -3rem 0 -1rem #252529; + border-radius: 0.5rem; + left: -0.25rem; + filter: drop-shadow(-0.25rem 2rem 0.5rem rgba(0, 0, 0, 0.15)); +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(1):before, .hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(1):after { + top: -8.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1:nth-of-type(even) i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1:nth-of-type(even) > i:nth-of-type(1) { + left: 10rem; +} +.hs.row1.col1:checked ~ div > div > house > .row2.col1 i:nth-of-type(2), +.hs.row1.col1:checked ~ div > div > house > .row2.col1 i:nth-of-type(1) { + display: none; +} + +.hs.house.row2.col1:checked +~ .hs.shed.row1.col1:checked +~ div > div > house > .row1.col1 { + border-bottom: 0.25rem dashed #bc2f2f; +} +.hs.house.row2.col1:checked +~ .hs.shed.row1.col1:checked +~ div > div > house > .row2.col1:before { + background: #bc592f; +} + +.hs.shed.row2.col1:checked +~ .hs.house.row1.col1:checked +~ div > div > house > .row1.col1 { + border-bottom: 0.25rem dashed #bc592f; +} +.hs.shed.row2.col1:checked +~ .hs.house.row1.col1:checked +~ div > div > house > .row2.col1:before { + background: #bc2f2f; +} + +.hs.house.row1.col-2:not(:checked) +~ .hs.house.row1.col1:checked +~ .hs.house.row1.col2:not(:checked) +~ .hs.house.row-1.col1:checked +~ div > div > house > .row1.col1 > i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.house.row1.col-2:not(:checked) +~ .hs.house.row1.col1:checked +~ .hs.house.row1.col2:not(:checked) +~ .hs.house.row-1.col1:checked +~ div > div > house > .row1.col1 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row0.col0:checked +~ .hs.row0.col1:not(:checked) +~ div > div > house > .row1.col1 > i:nth-of-type(2):after, +.hs.house.row0.col1:not(:checked) +~ .hs.house.row-1.col1:checked +~ div > div > house > .row1.col1 > i:nth-of-type(2):after { + left: 4.75rem; + height: 3rem; + box-shadow: inset 0 6rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -2.25rem 0 -1rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row0.col0:checked +~ .hs.row0.col1:not(:checked) +~ div > div > house > .row1.col1 > i:nth-of-type(1), +.hs.house.row0.col1:not(:checked) +~ .hs.house.row-1.col1:checked +~ div > div > house > .row1.col1 > i:nth-of-type(1) { + left: 5rem; +} + +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.house.row0.col0:not(:checked) +~ .hs.shed.row0.col0:not(:checked) +~ .hs.row0.col1:checked +~ div > div > house > .row1.col1 i:nth-of-type(2) { + display: block; + left: -42%; + width: 50%; +} +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.house.row0.col0:not(:checked) +~ .hs.shed.row0.col0:not(:checked) +~ .hs.row0.col1:checked +~ div > div > house > .row1.col1 i:nth-of-type(1), +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.house.row0.col0:not(:checked) +~ .hs.shed.row0.col0:not(:checked) +~ .hs.row0.col1:checked +~ div > div > house > .row1.col1 i:nth-of-type(2):after { + display: none; +} + +.row1.col2:checked ~ .row1.col3:checked ~ div > div > house > .row1.col2 i:nth-of-type(1), +.row1.col2:checked ~ .row1.col3:checked ~ div > div > house > .row1.col2 i:nth-of-type(2):after { + display: none; +} +.row1.col2:checked ~ .row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(2):after { + left: -1.5rem; +} +.row1.col2:checked ~ .row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(1) { + left: -1rem; +} + +.hs.row1.col2:checked ~ div > div > house > .row1.col2:before { + width: 1.5rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: -1.35rem; + left: 3rem; + box-shadow: 2rem 2rem 0 currentColor; + filter: hue-rotate(-10deg) brightness(1.1); + opacity: 0.7; +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2:after { + filter: hue-rotate(-10deg) brightness(1.1); + width: 2rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: 0.5rem; + left: -0.15rem; + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(4) { + width: 5rem; + right: 0; + margin: auto; + top: 3.5rem; + background: rgba(79, 1, 14, 0.9); + height: 5rem; + border-radius: 0.3rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem currentColor, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 #000, inset 0 -3.5rem 0 #20112a; +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(4):after { + width: 4.5rem; + height: 0.25rem; + left: 0.25rem; + top: 2.4rem; + background: currentColor; + border-radius: 0.0001rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), 0 3rem 0 0.3rem #dc9075, 0 3.5rem 0.35rem 0.25rem rgba(79, 1, 14, 0.9); +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(4):before { + width: 0.25rem; + height: 4.5rem; + left: 2.4rem; + top: 0.25rem; + background: currentColor; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2.col3 > i:nth-of-type(4) { + border-radius: 2.25rem 2.25rem 0.3rem 0.3rem; +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(2) { + border: solid rgba(255, 255, 255, 0) 1rem; + border-bottom: solid #6a1b37 4rem; + width: calc(100% + 2.1rem); + left: -1rem; + top: -2.5rem; + box-shadow: 0 0.25rem 0 #20112a, 0 1.5rem 1rem -1rem rgba(79, 1, 14, 0.75); +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(2):before { + width: 100%; + height: 3rem; + border-radius: 50%; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 0.75rem, rgba(79, 1, 14, 0.4), rgba(255, 255, 255, 0) 1rem); +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(2):after { + width: 3rem; + height: 4rem; + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 0.5rem solid #bc2f2f; + top: -2rem; + box-shadow: inset 0 4rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -3rem 0 -1rem #252529; + border-radius: 0.5rem; + left: -0.25rem; + filter: drop-shadow(-0.25rem 2rem 0.5rem rgba(0, 0, 0, 0.15)); +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(1):before, .hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(1):after { + top: -8.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2:nth-of-type(even) i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2:nth-of-type(even) > i:nth-of-type(1) { + left: 10rem; +} +.hs.row1.col2:checked ~ div > div > house > .row2.col2 i:nth-of-type(2), +.hs.row1.col2:checked ~ div > div > house > .row2.col2 i:nth-of-type(1) { + display: none; +} + +.hs.house.row2.col2:checked +~ .hs.shed.row1.col2:checked +~ div > div > house > .row1.col2 { + border-bottom: 0.25rem dashed #bc2f2f; +} +.hs.house.row2.col2:checked +~ .hs.shed.row1.col2:checked +~ div > div > house > .row2.col2:before { + background: #bc592f; +} + +.hs.shed.row2.col2:checked +~ .hs.house.row1.col2:checked +~ div > div > house > .row1.col2 { + border-bottom: 0.25rem dashed #bc592f; +} +.hs.shed.row2.col2:checked +~ .hs.house.row1.col2:checked +~ div > div > house > .row2.col2:before { + background: #bc2f2f; +} + +.hs.house.row1.col-1:not(:checked) +~ .hs.house.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ .hs.house.row-1.col2:checked +~ div > div > house > .row1.col2 > i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.house.row1.col-1:not(:checked) +~ .hs.house.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ .hs.house.row-1.col2:checked +~ div > div > house > .row1.col2 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row0.col1:checked +~ .hs.row0.col2:not(:checked) +~ div > div > house > .row1.col2 > i:nth-of-type(2):after, +.hs.house.row0.col2:not(:checked) +~ .hs.house.row-1.col2:checked +~ div > div > house > .row1.col2 > i:nth-of-type(2):after { + left: 4.75rem; + height: 3rem; + box-shadow: inset 0 6rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -2.25rem 0 -1rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row0.col1:checked +~ .hs.row0.col2:not(:checked) +~ div > div > house > .row1.col2 > i:nth-of-type(1), +.hs.house.row0.col2:not(:checked) +~ .hs.house.row-1.col2:checked +~ div > div > house > .row1.col2 > i:nth-of-type(1) { + left: 5rem; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.house.row0.col1:not(:checked) +~ .hs.shed.row0.col1:not(:checked) +~ .hs.row0.col2:checked +~ div > div > house > .row1.col2 i:nth-of-type(2) { + display: block; + left: -42%; + width: 50%; +} +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.house.row0.col1:not(:checked) +~ .hs.shed.row0.col1:not(:checked) +~ .hs.row0.col2:checked +~ div > div > house > .row1.col2 i:nth-of-type(1), +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.house.row0.col1:not(:checked) +~ .hs.shed.row0.col1:not(:checked) +~ .hs.row0.col2:checked +~ div > div > house > .row1.col2 i:nth-of-type(2):after { + display: none; +} + +.row1.col2:checked ~ .row1.col3:checked ~ div > div > house > .row1.col2 i:nth-of-type(1), +.row1.col2:checked ~ .row1.col3:checked ~ div > div > house > .row1.col2 i:nth-of-type(2):after { + display: none; +} +.row1.col2:checked ~ .row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(2):after { + left: -1.5rem; +} +.row1.col2:checked ~ .row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(1) { + left: -1rem; +} + +.hs.row1.col3:checked ~ div > div > house > .row1.col3:before { + width: 1.5rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: -1.35rem; + left: 3rem; + box-shadow: 2rem 2rem 0 currentColor; + filter: hue-rotate(-10deg) brightness(1.1); + opacity: 0.7; +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3:after { + filter: hue-rotate(-10deg) brightness(1.1); + width: 2rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: 0.5rem; + left: -0.15rem; + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(4) { + width: 5rem; + right: 0; + margin: auto; + top: 3.5rem; + background: rgba(79, 1, 14, 0.9); + height: 5rem; + border-radius: 0.3rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem currentColor, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 #000, inset 0 -3.5rem 0 #20112a; +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(4):after { + width: 4.5rem; + height: 0.25rem; + left: 0.25rem; + top: 2.4rem; + background: currentColor; + border-radius: 0.0001rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), 0 3rem 0 0.3rem #dc9075, 0 3.5rem 0.35rem 0.25rem rgba(79, 1, 14, 0.9); +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(4):before { + width: 0.25rem; + height: 4.5rem; + left: 2.4rem; + top: 0.25rem; + background: currentColor; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3.col3 > i:nth-of-type(4) { + border-radius: 2.25rem 2.25rem 0.3rem 0.3rem; +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(2) { + border: solid rgba(255, 255, 255, 0) 1rem; + border-bottom: solid #6a1b37 4rem; + width: calc(100% + 2.1rem); + left: -1rem; + top: -2.5rem; + box-shadow: 0 0.25rem 0 #20112a, 0 1.5rem 1rem -1rem rgba(79, 1, 14, 0.75); +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(2):before { + width: 100%; + height: 3rem; + border-radius: 50%; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 0.75rem, rgba(79, 1, 14, 0.4), rgba(255, 255, 255, 0) 1rem); +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(2):after { + width: 3rem; + height: 4rem; + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 0.5rem solid #bc2f2f; + top: -2rem; + box-shadow: inset 0 4rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -3rem 0 -1rem #252529; + border-radius: 0.5rem; + left: -0.25rem; + filter: drop-shadow(-0.25rem 2rem 0.5rem rgba(0, 0, 0, 0.15)); +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(1):before, .hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(1):after { + top: -8.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3:nth-of-type(even) i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3:nth-of-type(even) > i:nth-of-type(1) { + left: 10rem; +} +.hs.row1.col3:checked ~ div > div > house > .row2.col3 i:nth-of-type(2), +.hs.row1.col3:checked ~ div > div > house > .row2.col3 i:nth-of-type(1) { + display: none; +} + +.hs.house.row2.col3:checked +~ .hs.shed.row1.col3:checked +~ div > div > house > .row1.col3 { + border-bottom: 0.25rem dashed #bc2f2f; +} +.hs.house.row2.col3:checked +~ .hs.shed.row1.col3:checked +~ div > div > house > .row2.col3:before { + background: #bc592f; +} + +.hs.shed.row2.col3:checked +~ .hs.house.row1.col3:checked +~ div > div > house > .row1.col3 { + border-bottom: 0.25rem dashed #bc592f; +} +.hs.shed.row2.col3:checked +~ .hs.house.row1.col3:checked +~ div > div > house > .row2.col3:before { + background: #bc2f2f; +} + +.hs.house.row1.col0:not(:checked) +~ .hs.house.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ .hs.house.row-1.col3:checked +~ div > div > house > .row1.col3 > i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.house.row1.col0:not(:checked) +~ .hs.house.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ .hs.house.row-1.col3:checked +~ div > div > house > .row1.col3 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row0.col2:checked +~ .hs.row0.col3:not(:checked) +~ div > div > house > .row1.col3 > i:nth-of-type(2):after, +.hs.house.row0.col3:not(:checked) +~ .hs.house.row-1.col3:checked +~ div > div > house > .row1.col3 > i:nth-of-type(2):after { + left: 4.75rem; + height: 3rem; + box-shadow: inset 0 6rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -2.25rem 0 -1rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row0.col2:checked +~ .hs.row0.col3:not(:checked) +~ div > div > house > .row1.col3 > i:nth-of-type(1), +.hs.house.row0.col3:not(:checked) +~ .hs.house.row-1.col3:checked +~ div > div > house > .row1.col3 > i:nth-of-type(1) { + left: 5rem; +} + +.hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.house.row0.col2:not(:checked) +~ .hs.shed.row0.col2:not(:checked) +~ .hs.row0.col3:checked +~ div > div > house > .row1.col3 i:nth-of-type(2) { + display: block; + left: -42%; + width: 50%; +} +.hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.house.row0.col2:not(:checked) +~ .hs.shed.row0.col2:not(:checked) +~ .hs.row0.col3:checked +~ div > div > house > .row1.col3 i:nth-of-type(1), +.hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.house.row0.col2:not(:checked) +~ .hs.shed.row0.col2:not(:checked) +~ .hs.row0.col3:checked +~ div > div > house > .row1.col3 i:nth-of-type(2):after { + display: none; +} + +.row1.col2:checked ~ .row1.col3:checked ~ div > div > house > .row1.col2 i:nth-of-type(1), +.row1.col2:checked ~ .row1.col3:checked ~ div > div > house > .row1.col2 i:nth-of-type(2):after { + display: none; +} +.row1.col2:checked ~ .row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(2):after { + left: -1.5rem; +} +.row1.col2:checked ~ .row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(1) { + left: -1rem; +} + +.hs.row1.col4:checked ~ div > div > house > .row1.col4:before { + width: 1.5rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: -1.35rem; + left: 3rem; + box-shadow: 2rem 2rem 0 currentColor; + filter: hue-rotate(-10deg) brightness(1.1); + opacity: 0.7; +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4:after { + filter: hue-rotate(-10deg) brightness(1.1); + width: 2rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: 0.5rem; + left: -0.15rem; + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(4) { + width: 5rem; + right: 0; + margin: auto; + top: 3.5rem; + background: rgba(79, 1, 14, 0.9); + height: 5rem; + border-radius: 0.3rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem currentColor, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 #000, inset 0 -3.5rem 0 #20112a; +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(4):after { + width: 4.5rem; + height: 0.25rem; + left: 0.25rem; + top: 2.4rem; + background: currentColor; + border-radius: 0.0001rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), 0 3rem 0 0.3rem #dc9075, 0 3.5rem 0.35rem 0.25rem rgba(79, 1, 14, 0.9); +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(4):before { + width: 0.25rem; + height: 4.5rem; + left: 2.4rem; + top: 0.25rem; + background: currentColor; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4.col1 > i:nth-of-type(4) { + border-radius: 2.25rem 2.25rem 0.3rem 0.3rem; +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(2) { + border: solid rgba(255, 255, 255, 0) 1rem; + border-bottom: solid #6a1b37 4rem; + width: calc(100% + 2.1rem); + left: -1rem; + top: -2.5rem; + box-shadow: 0 0.25rem 0 #20112a, 0 1.5rem 1rem -1rem rgba(79, 1, 14, 0.75); +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(2):before { + width: 100%; + height: 3rem; + border-radius: 50%; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 0.75rem, rgba(79, 1, 14, 0.4), rgba(255, 255, 255, 0) 1rem); +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(2):after { + width: 3rem; + height: 4rem; + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 0.5rem solid #bc2f2f; + top: -2rem; + box-shadow: inset 0 4rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -3rem 0 -1rem #252529; + border-radius: 0.5rem; + left: -0.25rem; + filter: drop-shadow(-0.25rem 2rem 0.5rem rgba(0, 0, 0, 0.15)); +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(1):before, .hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(1):after { + top: -8.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4:nth-of-type(even) i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4:nth-of-type(even) > i:nth-of-type(1) { + left: 10rem; +} +.hs.row1.col4:checked ~ div > div > house > .row2.col4 i:nth-of-type(2), +.hs.row1.col4:checked ~ div > div > house > .row2.col4 i:nth-of-type(1) { + display: none; +} + +.hs.house.row2.col4:checked +~ .hs.shed.row1.col4:checked +~ div > div > house > .row1.col4 { + border-bottom: 0.25rem dashed #bc2f2f; +} +.hs.house.row2.col4:checked +~ .hs.shed.row1.col4:checked +~ div > div > house > .row2.col4:before { + background: #bc592f; +} + +.hs.shed.row2.col4:checked +~ .hs.house.row1.col4:checked +~ div > div > house > .row1.col4 { + border-bottom: 0.25rem dashed #bc592f; +} +.hs.shed.row2.col4:checked +~ .hs.house.row1.col4:checked +~ div > div > house > .row2.col4:before { + background: #bc2f2f; +} + +.hs.house.row1.col1:not(:checked) +~ .hs.house.row1.col4:checked +~ .hs.house.row1.col5:not(:checked) +~ .hs.house.row-1.col4:checked +~ div > div > house > .row1.col4 > i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.house.row1.col1:not(:checked) +~ .hs.house.row1.col4:checked +~ .hs.house.row1.col5:not(:checked) +~ .hs.house.row-1.col4:checked +~ div > div > house > .row1.col4 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row0.col3:checked +~ .hs.row0.col4:not(:checked) +~ div > div > house > .row1.col4 > i:nth-of-type(2):after, +.hs.house.row0.col4:not(:checked) +~ .hs.house.row-1.col4:checked +~ div > div > house > .row1.col4 > i:nth-of-type(2):after { + left: 4.75rem; + height: 3rem; + box-shadow: inset 0 6rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -2.25rem 0 -1rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row0.col3:checked +~ .hs.row0.col4:not(:checked) +~ div > div > house > .row1.col4 > i:nth-of-type(1), +.hs.house.row0.col4:not(:checked) +~ .hs.house.row-1.col4:checked +~ div > div > house > .row1.col4 > i:nth-of-type(1) { + left: 5rem; +} + +.hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.house.row0.col3:not(:checked) +~ .hs.shed.row0.col3:not(:checked) +~ .hs.row0.col4:checked +~ div > div > house > .row1.col4 i:nth-of-type(2) { + display: block; + left: -42%; + width: 50%; +} +.hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.house.row0.col3:not(:checked) +~ .hs.shed.row0.col3:not(:checked) +~ .hs.row0.col4:checked +~ div > div > house > .row1.col4 i:nth-of-type(1), +.hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.house.row0.col3:not(:checked) +~ .hs.shed.row0.col3:not(:checked) +~ .hs.row0.col4:checked +~ div > div > house > .row1.col4 i:nth-of-type(2):after { + display: none; +} + +.row1.col2:checked ~ .row1.col3:checked ~ div > div > house > .row1.col2 i:nth-of-type(1), +.row1.col2:checked ~ .row1.col3:checked ~ div > div > house > .row1.col2 i:nth-of-type(2):after { + display: none; +} +.row1.col2:checked ~ .row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(2):after { + left: -1.5rem; +} +.row1.col2:checked ~ .row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(1) { + left: -1rem; +} + +.hs.row2.col1:checked ~ div > div > house > .row2.col1:before { + width: 1.5rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: -1.35rem; + left: 3rem; + box-shadow: 2rem 2rem 0 currentColor; + filter: hue-rotate(-10deg) brightness(1.1); + opacity: 0.7; +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1:after { + filter: hue-rotate(-10deg) brightness(1.1); + width: 2rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: 0.5rem; + left: -0.15rem; + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(4) { + width: 5rem; + right: 0; + margin: auto; + top: 3.5rem; + background: rgba(79, 1, 14, 0.9); + height: 5rem; + border-radius: 0.3rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem currentColor, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 #000, inset 0 -3.5rem 0 #20112a; +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(4):after { + width: 4.5rem; + height: 0.25rem; + left: 0.25rem; + top: 2.4rem; + background: currentColor; + border-radius: 0.0001rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), 0 3rem 0 0.3rem #dc9075, 0 3.5rem 0.35rem 0.25rem rgba(79, 1, 14, 0.9); +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(4):before { + width: 0.25rem; + height: 4.5rem; + left: 2.4rem; + top: 0.25rem; + background: currentColor; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1.col3 > i:nth-of-type(4) { + border-radius: 2.25rem 2.25rem 0.3rem 0.3rem; +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(2) { + border: solid rgba(255, 255, 255, 0) 1rem; + border-bottom: solid #6a1b37 4rem; + width: calc(100% + 2.1rem); + left: -1rem; + top: -2.5rem; + box-shadow: 0 0.25rem 0 #20112a, 0 1.5rem 1rem -1rem rgba(79, 1, 14, 0.75); +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(2):before { + width: 100%; + height: 3rem; + border-radius: 50%; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 0.75rem, rgba(79, 1, 14, 0.4), rgba(255, 255, 255, 0) 1rem); +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(2):after { + width: 3rem; + height: 4rem; + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 0.5rem solid #bc2f2f; + top: -2rem; + box-shadow: inset 0 4rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -3rem 0 -1rem #252529; + border-radius: 0.5rem; + left: -0.25rem; + filter: drop-shadow(-0.25rem 2rem 0.5rem rgba(0, 0, 0, 0.15)); +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(1):before, .hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(1):after { + top: -8.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1:nth-of-type(even) i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1:nth-of-type(even) > i:nth-of-type(1) { + left: 10rem; +} +.hs.row2.col1:checked ~ div > div > house > .row3.col1 i:nth-of-type(2), +.hs.row2.col1:checked ~ div > div > house > .row3.col1 i:nth-of-type(1) { + display: none; +} + +.hs.house.row3.col1:checked +~ .hs.shed.row2.col1:checked +~ div > div > house > .row2.col1 { + border-bottom: 0.25rem dashed #bc2f2f; +} +.hs.house.row3.col1:checked +~ .hs.shed.row2.col1:checked +~ div > div > house > .row3.col1:before { + background: #bc592f; +} + +.hs.shed.row3.col1:checked +~ .hs.house.row2.col1:checked +~ div > div > house > .row2.col1 { + border-bottom: 0.25rem dashed #bc592f; +} +.hs.shed.row3.col1:checked +~ .hs.house.row2.col1:checked +~ div > div > house > .row3.col1:before { + background: #bc2f2f; +} + +.hs.house.row2.col-2:not(:checked) +~ .hs.house.row2.col1:checked +~ .hs.house.row2.col2:not(:checked) +~ .hs.house.row0.col1:checked +~ div > div > house > .row2.col1 > i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.house.row2.col-2:not(:checked) +~ .hs.house.row2.col1:checked +~ .hs.house.row2.col2:not(:checked) +~ .hs.house.row0.col1:checked +~ div > div > house > .row2.col1 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row1.col0:checked +~ .hs.row1.col1:not(:checked) +~ div > div > house > .row2.col1 > i:nth-of-type(2):after, +.hs.house.row1.col1:not(:checked) +~ .hs.house.row0.col1:checked +~ div > div > house > .row2.col1 > i:nth-of-type(2):after { + left: 4.75rem; + height: 3rem; + box-shadow: inset 0 6rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -2.25rem 0 -1rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row1.col0:checked +~ .hs.row1.col1:not(:checked) +~ div > div > house > .row2.col1 > i:nth-of-type(1), +.hs.house.row1.col1:not(:checked) +~ .hs.house.row0.col1:checked +~ div > div > house > .row2.col1 > i:nth-of-type(1) { + left: 5rem; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.house.row1.col0:not(:checked) +~ .hs.shed.row1.col0:not(:checked) +~ .hs.row1.col1:checked +~ div > div > house > .row2.col1 i:nth-of-type(2) { + display: block; + left: -42%; + width: 50%; +} +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.house.row1.col0:not(:checked) +~ .hs.shed.row1.col0:not(:checked) +~ .hs.row1.col1:checked +~ div > div > house > .row2.col1 i:nth-of-type(1), +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.house.row1.col0:not(:checked) +~ .hs.shed.row1.col0:not(:checked) +~ .hs.row1.col1:checked +~ div > div > house > .row2.col1 i:nth-of-type(2):after { + display: none; +} + +.row2.col2:checked ~ .row2.col3:checked ~ div > div > house > .row2.col2 i:nth-of-type(1), +.row2.col2:checked ~ .row2.col3:checked ~ div > div > house > .row2.col2 i:nth-of-type(2):after { + display: none; +} +.row2.col2:checked ~ .row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(2):after { + left: -1.5rem; +} +.row2.col2:checked ~ .row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(1) { + left: -1rem; +} + +.hs.row2.col2:checked ~ div > div > house > .row2.col2:before { + width: 1.5rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: -1.35rem; + left: 3rem; + box-shadow: 2rem 2rem 0 currentColor; + filter: hue-rotate(-10deg) brightness(1.1); + opacity: 0.7; +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2:after { + filter: hue-rotate(-10deg) brightness(1.1); + width: 2rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: 0.5rem; + left: -0.15rem; + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(4) { + width: 5rem; + right: 0; + margin: auto; + top: 3.5rem; + background: rgba(79, 1, 14, 0.9); + height: 5rem; + border-radius: 0.3rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem currentColor, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 #000, inset 0 -3.5rem 0 #20112a; +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(4):after { + width: 4.5rem; + height: 0.25rem; + left: 0.25rem; + top: 2.4rem; + background: currentColor; + border-radius: 0.0001rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), 0 3rem 0 0.3rem #dc9075, 0 3.5rem 0.35rem 0.25rem rgba(79, 1, 14, 0.9); +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(4):before { + width: 0.25rem; + height: 4.5rem; + left: 2.4rem; + top: 0.25rem; + background: currentColor; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2.col3 > i:nth-of-type(4) { + border-radius: 2.25rem 2.25rem 0.3rem 0.3rem; +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(2) { + border: solid rgba(255, 255, 255, 0) 1rem; + border-bottom: solid #6a1b37 4rem; + width: calc(100% + 2.1rem); + left: -1rem; + top: -2.5rem; + box-shadow: 0 0.25rem 0 #20112a, 0 1.5rem 1rem -1rem rgba(79, 1, 14, 0.75); +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(2):before { + width: 100%; + height: 3rem; + border-radius: 50%; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 0.75rem, rgba(79, 1, 14, 0.4), rgba(255, 255, 255, 0) 1rem); +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(2):after { + width: 3rem; + height: 4rem; + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 0.5rem solid #bc2f2f; + top: -2rem; + box-shadow: inset 0 4rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -3rem 0 -1rem #252529; + border-radius: 0.5rem; + left: -0.25rem; + filter: drop-shadow(-0.25rem 2rem 0.5rem rgba(0, 0, 0, 0.15)); +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(1):before, .hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(1):after { + top: -8.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2:nth-of-type(even) i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2:nth-of-type(even) > i:nth-of-type(1) { + left: 10rem; +} +.hs.row2.col2:checked ~ div > div > house > .row3.col2 i:nth-of-type(2), +.hs.row2.col2:checked ~ div > div > house > .row3.col2 i:nth-of-type(1) { + display: none; +} + +.hs.house.row3.col2:checked +~ .hs.shed.row2.col2:checked +~ div > div > house > .row2.col2 { + border-bottom: 0.25rem dashed #bc2f2f; +} +.hs.house.row3.col2:checked +~ .hs.shed.row2.col2:checked +~ div > div > house > .row3.col2:before { + background: #bc592f; +} + +.hs.shed.row3.col2:checked +~ .hs.house.row2.col2:checked +~ div > div > house > .row2.col2 { + border-bottom: 0.25rem dashed #bc592f; +} +.hs.shed.row3.col2:checked +~ .hs.house.row2.col2:checked +~ div > div > house > .row3.col2:before { + background: #bc2f2f; +} + +.hs.house.row2.col-1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row0.col2:checked +~ div > div > house > .row2.col2 > i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.house.row2.col-1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row0.col2:checked +~ div > div > house > .row2.col2 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:not(:checked) +~ div > div > house > .row2.col2 > i:nth-of-type(2):after, +.hs.house.row1.col2:not(:checked) +~ .hs.house.row0.col2:checked +~ div > div > house > .row2.col2 > i:nth-of-type(2):after { + left: 4.75rem; + height: 3rem; + box-shadow: inset 0 6rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -2.25rem 0 -1rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row1.col1:checked +~ .hs.row1.col2:not(:checked) +~ div > div > house > .row2.col2 > i:nth-of-type(1), +.hs.house.row1.col2:not(:checked) +~ .hs.house.row0.col2:checked +~ div > div > house > .row2.col2 > i:nth-of-type(1) { + left: 5rem; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col1:not(:checked) +~ .hs.row1.col2:checked +~ div > div > house > .row2.col2 i:nth-of-type(2) { + display: block; + left: -42%; + width: 50%; +} +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col1:not(:checked) +~ .hs.row1.col2:checked +~ div > div > house > .row2.col2 i:nth-of-type(1), +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col1:not(:checked) +~ .hs.row1.col2:checked +~ div > div > house > .row2.col2 i:nth-of-type(2):after { + display: none; +} + +.row2.col2:checked ~ .row2.col3:checked ~ div > div > house > .row2.col2 i:nth-of-type(1), +.row2.col2:checked ~ .row2.col3:checked ~ div > div > house > .row2.col2 i:nth-of-type(2):after { + display: none; +} +.row2.col2:checked ~ .row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(2):after { + left: -1.5rem; +} +.row2.col2:checked ~ .row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(1) { + left: -1rem; +} + +.hs.row2.col3:checked ~ div > div > house > .row2.col3:before { + width: 1.5rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: -1.35rem; + left: 3rem; + box-shadow: 2rem 2rem 0 currentColor; + filter: hue-rotate(-10deg) brightness(1.1); + opacity: 0.7; +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3:after { + filter: hue-rotate(-10deg) brightness(1.1); + width: 2rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: 0.5rem; + left: -0.15rem; + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(4) { + width: 5rem; + right: 0; + margin: auto; + top: 3.5rem; + background: rgba(79, 1, 14, 0.9); + height: 5rem; + border-radius: 0.3rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem currentColor, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 #000, inset 0 -3.5rem 0 #20112a; +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(4):after { + width: 4.5rem; + height: 0.25rem; + left: 0.25rem; + top: 2.4rem; + background: currentColor; + border-radius: 0.0001rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), 0 3rem 0 0.3rem #dc9075, 0 3.5rem 0.35rem 0.25rem rgba(79, 1, 14, 0.9); +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(4):before { + width: 0.25rem; + height: 4.5rem; + left: 2.4rem; + top: 0.25rem; + background: currentColor; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3.col2 > i:nth-of-type(4) { + border-radius: 2.25rem 2.25rem 0.3rem 0.3rem; +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(2) { + border: solid rgba(255, 255, 255, 0) 1rem; + border-bottom: solid #6a1b37 4rem; + width: calc(100% + 2.1rem); + left: -1rem; + top: -2.5rem; + box-shadow: 0 0.25rem 0 #20112a, 0 1.5rem 1rem -1rem rgba(79, 1, 14, 0.75); +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(2):before { + width: 100%; + height: 3rem; + border-radius: 50%; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 0.75rem, rgba(79, 1, 14, 0.4), rgba(255, 255, 255, 0) 1rem); +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(2):after { + width: 3rem; + height: 4rem; + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 0.5rem solid #bc2f2f; + top: -2rem; + box-shadow: inset 0 4rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -3rem 0 -1rem #252529; + border-radius: 0.5rem; + left: -0.25rem; + filter: drop-shadow(-0.25rem 2rem 0.5rem rgba(0, 0, 0, 0.15)); +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(1):before, .hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(1):after { + top: -8.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3:nth-of-type(even) i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3:nth-of-type(even) > i:nth-of-type(1) { + left: 10rem; +} +.hs.row2.col3:checked ~ div > div > house > .row3.col3 i:nth-of-type(2), +.hs.row2.col3:checked ~ div > div > house > .row3.col3 i:nth-of-type(1) { + display: none; +} + +.hs.house.row3.col3:checked +~ .hs.shed.row2.col3:checked +~ div > div > house > .row2.col3 { + border-bottom: 0.25rem dashed #bc2f2f; +} +.hs.house.row3.col3:checked +~ .hs.shed.row2.col3:checked +~ div > div > house > .row3.col3:before { + background: #bc592f; +} + +.hs.shed.row3.col3:checked +~ .hs.house.row2.col3:checked +~ div > div > house > .row2.col3 { + border-bottom: 0.25rem dashed #bc592f; +} +.hs.shed.row3.col3:checked +~ .hs.house.row2.col3:checked +~ div > div > house > .row3.col3:before { + background: #bc2f2f; +} + +.hs.house.row2.col0:not(:checked) +~ .hs.house.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row0.col3:checked +~ div > div > house > .row2.col3 > i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.house.row2.col0:not(:checked) +~ .hs.house.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row0.col3:checked +~ div > div > house > .row2.col3 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row1.col2:checked +~ .hs.row1.col3:not(:checked) +~ div > div > house > .row2.col3 > i:nth-of-type(2):after, +.hs.house.row1.col3:not(:checked) +~ .hs.house.row0.col3:checked +~ div > div > house > .row2.col3 > i:nth-of-type(2):after { + left: 4.75rem; + height: 3rem; + box-shadow: inset 0 6rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -2.25rem 0 -1rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row1.col2:checked +~ .hs.row1.col3:not(:checked) +~ div > div > house > .row2.col3 > i:nth-of-type(1), +.hs.house.row1.col3:not(:checked) +~ .hs.house.row0.col3:checked +~ div > div > house > .row2.col3 > i:nth-of-type(1) { + left: 5rem; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.house.row1.col2:not(:checked) +~ .hs.shed.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ div > div > house > .row2.col3 i:nth-of-type(2) { + display: block; + left: -42%; + width: 50%; +} +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.house.row1.col2:not(:checked) +~ .hs.shed.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ div > div > house > .row2.col3 i:nth-of-type(1), +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.house.row1.col2:not(:checked) +~ .hs.shed.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ div > div > house > .row2.col3 i:nth-of-type(2):after { + display: none; +} + +.row2.col2:checked ~ .row2.col3:checked ~ div > div > house > .row2.col2 i:nth-of-type(1), +.row2.col2:checked ~ .row2.col3:checked ~ div > div > house > .row2.col2 i:nth-of-type(2):after { + display: none; +} +.row2.col2:checked ~ .row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(2):after { + left: -1.5rem; +} +.row2.col2:checked ~ .row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(1) { + left: -1rem; +} + +.hs.row2.col4:checked ~ div > div > house > .row2.col4:before { + width: 1.5rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: -1.35rem; + left: 3rem; + box-shadow: 2rem 2rem 0 currentColor; + filter: hue-rotate(-10deg) brightness(1.1); + opacity: 0.7; +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4:after { + filter: hue-rotate(-10deg) brightness(1.1); + width: 2rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: 0.5rem; + left: -0.15rem; + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(4) { + width: 5rem; + right: 0; + margin: auto; + top: 3.5rem; + background: rgba(79, 1, 14, 0.9); + height: 5rem; + border-radius: 0.3rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem currentColor, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 #000, inset 0 -3.5rem 0 #20112a; +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(4):after { + width: 4.5rem; + height: 0.25rem; + left: 0.25rem; + top: 2.4rem; + background: currentColor; + border-radius: 0.0001rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), 0 3rem 0 0.3rem #dc9075, 0 3.5rem 0.35rem 0.25rem rgba(79, 1, 14, 0.9); +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(4):before { + width: 0.25rem; + height: 4.5rem; + left: 2.4rem; + top: 0.25rem; + background: currentColor; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4.col4 > i:nth-of-type(4) { + border-radius: 2.25rem 2.25rem 0.3rem 0.3rem; +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(2) { + border: solid rgba(255, 255, 255, 0) 1rem; + border-bottom: solid #6a1b37 4rem; + width: calc(100% + 2.1rem); + left: -1rem; + top: -2.5rem; + box-shadow: 0 0.25rem 0 #20112a, 0 1.5rem 1rem -1rem rgba(79, 1, 14, 0.75); +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(2):before { + width: 100%; + height: 3rem; + border-radius: 50%; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 0.75rem, rgba(79, 1, 14, 0.4), rgba(255, 255, 255, 0) 1rem); +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(2):after { + width: 3rem; + height: 4rem; + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 0.5rem solid #bc2f2f; + top: -2rem; + box-shadow: inset 0 4rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -3rem 0 -1rem #252529; + border-radius: 0.5rem; + left: -0.25rem; + filter: drop-shadow(-0.25rem 2rem 0.5rem rgba(0, 0, 0, 0.15)); +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(1):before, .hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(1):after { + top: -8.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4:nth-of-type(even) i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4:nth-of-type(even) > i:nth-of-type(1) { + left: 10rem; +} +.hs.row2.col4:checked ~ div > div > house > .row3.col4 i:nth-of-type(2), +.hs.row2.col4:checked ~ div > div > house > .row3.col4 i:nth-of-type(1) { + display: none; +} + +.hs.house.row3.col4:checked +~ .hs.shed.row2.col4:checked +~ div > div > house > .row2.col4 { + border-bottom: 0.25rem dashed #bc2f2f; +} +.hs.house.row3.col4:checked +~ .hs.shed.row2.col4:checked +~ div > div > house > .row3.col4:before { + background: #bc592f; +} + +.hs.shed.row3.col4:checked +~ .hs.house.row2.col4:checked +~ div > div > house > .row2.col4 { + border-bottom: 0.25rem dashed #bc592f; +} +.hs.shed.row3.col4:checked +~ .hs.house.row2.col4:checked +~ div > div > house > .row3.col4:before { + background: #bc2f2f; +} + +.hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col4:checked +~ .hs.house.row2.col5:not(:checked) +~ .hs.house.row0.col4:checked +~ div > div > house > .row2.col4 > i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col4:checked +~ .hs.house.row2.col5:not(:checked) +~ .hs.house.row0.col4:checked +~ div > div > house > .row2.col4 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row1.col3:checked +~ .hs.row1.col4:not(:checked) +~ div > div > house > .row2.col4 > i:nth-of-type(2):after, +.hs.house.row1.col4:not(:checked) +~ .hs.house.row0.col4:checked +~ div > div > house > .row2.col4 > i:nth-of-type(2):after { + left: 4.75rem; + height: 3rem; + box-shadow: inset 0 6rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -2.25rem 0 -1rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row1.col3:checked +~ .hs.row1.col4:not(:checked) +~ div > div > house > .row2.col4 > i:nth-of-type(1), +.hs.house.row1.col4:not(:checked) +~ .hs.house.row0.col4:checked +~ div > div > house > .row2.col4 > i:nth-of-type(1) { + left: 5rem; +} + +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.house.row1.col3:not(:checked) +~ .hs.shed.row1.col3:not(:checked) +~ .hs.row1.col4:checked +~ div > div > house > .row2.col4 i:nth-of-type(2) { + display: block; + left: -42%; + width: 50%; +} +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.house.row1.col3:not(:checked) +~ .hs.shed.row1.col3:not(:checked) +~ .hs.row1.col4:checked +~ div > div > house > .row2.col4 i:nth-of-type(1), +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.house.row1.col3:not(:checked) +~ .hs.shed.row1.col3:not(:checked) +~ .hs.row1.col4:checked +~ div > div > house > .row2.col4 i:nth-of-type(2):after { + display: none; +} + +.row2.col2:checked ~ .row2.col3:checked ~ div > div > house > .row2.col2 i:nth-of-type(1), +.row2.col2:checked ~ .row2.col3:checked ~ div > div > house > .row2.col2 i:nth-of-type(2):after { + display: none; +} +.row2.col2:checked ~ .row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(2):after { + left: -1.5rem; +} +.row2.col2:checked ~ .row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(1) { + left: -1rem; +} + +.hs.row3.col1:checked ~ div > div > house > .row3.col1:before { + width: 1.5rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: -1.35rem; + left: 3rem; + box-shadow: 2rem 2rem 0 currentColor; + filter: hue-rotate(-10deg) brightness(1.1); + opacity: 0.7; +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1:after { + filter: hue-rotate(-10deg) brightness(1.1); + width: 2rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: 0.5rem; + left: -0.15rem; + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(4) { + width: 5rem; + right: 0; + margin: auto; + top: 3.5rem; + background: rgba(79, 1, 14, 0.9); + height: 5rem; + border-radius: 0.3rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem currentColor, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 #000, inset 0 -3.5rem 0 #20112a; +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(4):after { + width: 4.5rem; + height: 0.25rem; + left: 0.25rem; + top: 2.4rem; + background: currentColor; + border-radius: 0.0001rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), 0 3rem 0 0.3rem #dc9075, 0 3.5rem 0.35rem 0.25rem rgba(79, 1, 14, 0.9); +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(4):before { + width: 0.25rem; + height: 4.5rem; + left: 2.4rem; + top: 0.25rem; + background: currentColor; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1.col4 > i:nth-of-type(4) { + border-radius: 2.25rem 2.25rem 0.3rem 0.3rem; +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(2) { + border: solid rgba(255, 255, 255, 0) 1rem; + border-bottom: solid #6a1b37 4rem; + width: calc(100% + 2.1rem); + left: -1rem; + top: -2.5rem; + box-shadow: 0 0.25rem 0 #20112a, 0 1.5rem 1rem -1rem rgba(79, 1, 14, 0.75); +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(2):before { + width: 100%; + height: 3rem; + border-radius: 50%; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 0.75rem, rgba(79, 1, 14, 0.4), rgba(255, 255, 255, 0) 1rem); +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(2):after { + width: 3rem; + height: 4rem; + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 0.5rem solid #bc2f2f; + top: -2rem; + box-shadow: inset 0 4rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -3rem 0 -1rem #252529; + border-radius: 0.5rem; + left: -0.25rem; + filter: drop-shadow(-0.25rem 2rem 0.5rem rgba(0, 0, 0, 0.15)); +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(1):before, .hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(1):after { + top: -8.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1:nth-of-type(even) i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1:nth-of-type(even) > i:nth-of-type(1) { + left: 10rem; +} +.hs.row3.col1:checked ~ div > div > house > .row4.col1 i:nth-of-type(2), +.hs.row3.col1:checked ~ div > div > house > .row4.col1 i:nth-of-type(1) { + display: none; +} + +.hs.house.row4.col1:checked +~ .hs.shed.row3.col1:checked +~ div > div > house > .row3.col1 { + border-bottom: 0.25rem dashed #bc2f2f; +} +.hs.house.row4.col1:checked +~ .hs.shed.row3.col1:checked +~ div > div > house > .row4.col1:before { + background: #bc592f; +} + +.hs.shed.row4.col1:checked +~ .hs.house.row3.col1:checked +~ div > div > house > .row3.col1 { + border-bottom: 0.25rem dashed #bc592f; +} +.hs.shed.row4.col1:checked +~ .hs.house.row3.col1:checked +~ div > div > house > .row4.col1:before { + background: #bc2f2f; +} + +.hs.house.row3.col-2:not(:checked) +~ .hs.house.row3.col1:checked +~ .hs.house.row3.col2:not(:checked) +~ .hs.house.row1.col1:checked +~ div > div > house > .row3.col1 > i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.house.row3.col-2:not(:checked) +~ .hs.house.row3.col1:checked +~ .hs.house.row3.col2:not(:checked) +~ .hs.house.row1.col1:checked +~ div > div > house > .row3.col1 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:not(:checked) +~ div > div > house > .row3.col1 > i:nth-of-type(2):after, +.hs.house.row2.col1:not(:checked) +~ .hs.house.row1.col1:checked +~ div > div > house > .row3.col1 > i:nth-of-type(2):after { + left: 4.75rem; + height: 3rem; + box-shadow: inset 0 6rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -2.25rem 0 -1rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row2.col0:checked +~ .hs.row2.col1:not(:checked) +~ div > div > house > .row3.col1 > i:nth-of-type(1), +.hs.house.row2.col1:not(:checked) +~ .hs.house.row1.col1:checked +~ div > div > house > .row3.col1 > i:nth-of-type(1) { + left: 5rem; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.house.row2.col0:not(:checked) +~ .hs.shed.row2.col0:not(:checked) +~ .hs.row2.col1:checked +~ div > div > house > .row3.col1 i:nth-of-type(2) { + display: block; + left: -42%; + width: 50%; +} +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.house.row2.col0:not(:checked) +~ .hs.shed.row2.col0:not(:checked) +~ .hs.row2.col1:checked +~ div > div > house > .row3.col1 i:nth-of-type(1), +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.house.row2.col0:not(:checked) +~ .hs.shed.row2.col0:not(:checked) +~ .hs.row2.col1:checked +~ div > div > house > .row3.col1 i:nth-of-type(2):after { + display: none; +} + +.row3.col2:checked ~ .row3.col3:checked ~ div > div > house > .row3.col2 i:nth-of-type(1), +.row3.col2:checked ~ .row3.col3:checked ~ div > div > house > .row3.col2 i:nth-of-type(2):after { + display: none; +} +.row3.col2:checked ~ .row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(2):after { + left: -1.5rem; +} +.row3.col2:checked ~ .row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(1) { + left: -1rem; +} + +.hs.row3.col2:checked ~ div > div > house > .row3.col2:before { + width: 1.5rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: -1.35rem; + left: 3rem; + box-shadow: 2rem 2rem 0 currentColor; + filter: hue-rotate(-10deg) brightness(1.1); + opacity: 0.7; +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2:after { + filter: hue-rotate(-10deg) brightness(1.1); + width: 2rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: 0.5rem; + left: -0.15rem; + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(4) { + width: 5rem; + right: 0; + margin: auto; + top: 3.5rem; + background: rgba(79, 1, 14, 0.9); + height: 5rem; + border-radius: 0.3rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem currentColor, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 #000, inset 0 -3.5rem 0 #20112a; +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(4):after { + width: 4.5rem; + height: 0.25rem; + left: 0.25rem; + top: 2.4rem; + background: currentColor; + border-radius: 0.0001rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), 0 3rem 0 0.3rem #dc9075, 0 3.5rem 0.35rem 0.25rem rgba(79, 1, 14, 0.9); +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(4):before { + width: 0.25rem; + height: 4.5rem; + left: 2.4rem; + top: 0.25rem; + background: currentColor; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2.col1 > i:nth-of-type(4) { + border-radius: 2.25rem 2.25rem 0.3rem 0.3rem; +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(2) { + border: solid rgba(255, 255, 255, 0) 1rem; + border-bottom: solid #6a1b37 4rem; + width: calc(100% + 2.1rem); + left: -1rem; + top: -2.5rem; + box-shadow: 0 0.25rem 0 #20112a, 0 1.5rem 1rem -1rem rgba(79, 1, 14, 0.75); +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(2):before { + width: 100%; + height: 3rem; + border-radius: 50%; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 0.75rem, rgba(79, 1, 14, 0.4), rgba(255, 255, 255, 0) 1rem); +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(2):after { + width: 3rem; + height: 4rem; + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 0.5rem solid #bc2f2f; + top: -2rem; + box-shadow: inset 0 4rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -3rem 0 -1rem #252529; + border-radius: 0.5rem; + left: -0.25rem; + filter: drop-shadow(-0.25rem 2rem 0.5rem rgba(0, 0, 0, 0.15)); +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(1):before, .hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(1):after { + top: -8.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2:nth-of-type(even) i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2:nth-of-type(even) > i:nth-of-type(1) { + left: 10rem; +} +.hs.row3.col2:checked ~ div > div > house > .row4.col2 i:nth-of-type(2), +.hs.row3.col2:checked ~ div > div > house > .row4.col2 i:nth-of-type(1) { + display: none; +} + +.hs.house.row4.col2:checked +~ .hs.shed.row3.col2:checked +~ div > div > house > .row3.col2 { + border-bottom: 0.25rem dashed #bc2f2f; +} +.hs.house.row4.col2:checked +~ .hs.shed.row3.col2:checked +~ div > div > house > .row4.col2:before { + background: #bc592f; +} + +.hs.shed.row4.col2:checked +~ .hs.house.row3.col2:checked +~ div > div > house > .row3.col2 { + border-bottom: 0.25rem dashed #bc592f; +} +.hs.shed.row4.col2:checked +~ .hs.house.row3.col2:checked +~ div > div > house > .row4.col2:before { + background: #bc2f2f; +} + +.hs.house.row3.col-1:not(:checked) +~ .hs.house.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row1.col2:checked +~ div > div > house > .row3.col2 > i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.house.row3.col-1:not(:checked) +~ .hs.house.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row1.col2:checked +~ div > div > house > .row3.col2 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:not(:checked) +~ div > div > house > .row3.col2 > i:nth-of-type(2):after, +.hs.house.row2.col2:not(:checked) +~ .hs.house.row1.col2:checked +~ div > div > house > .row3.col2 > i:nth-of-type(2):after { + left: 4.75rem; + height: 3rem; + box-shadow: inset 0 6rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -2.25rem 0 -1rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row2.col1:checked +~ .hs.row2.col2:not(:checked) +~ div > div > house > .row3.col2 > i:nth-of-type(1), +.hs.house.row2.col2:not(:checked) +~ .hs.house.row1.col2:checked +~ div > div > house > .row3.col2 > i:nth-of-type(1) { + left: 5rem; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.house.row2.col1:not(:checked) +~ .hs.shed.row2.col1:not(:checked) +~ .hs.row2.col2:checked +~ div > div > house > .row3.col2 i:nth-of-type(2) { + display: block; + left: -42%; + width: 50%; +} +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.house.row2.col1:not(:checked) +~ .hs.shed.row2.col1:not(:checked) +~ .hs.row2.col2:checked +~ div > div > house > .row3.col2 i:nth-of-type(1), +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.house.row2.col1:not(:checked) +~ .hs.shed.row2.col1:not(:checked) +~ .hs.row2.col2:checked +~ div > div > house > .row3.col2 i:nth-of-type(2):after { + display: none; +} + +.row3.col2:checked ~ .row3.col3:checked ~ div > div > house > .row3.col2 i:nth-of-type(1), +.row3.col2:checked ~ .row3.col3:checked ~ div > div > house > .row3.col2 i:nth-of-type(2):after { + display: none; +} +.row3.col2:checked ~ .row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(2):after { + left: -1.5rem; +} +.row3.col2:checked ~ .row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(1) { + left: -1rem; +} + +.hs.row3.col3:checked ~ div > div > house > .row3.col3:before { + width: 1.5rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: -1.35rem; + left: 3rem; + box-shadow: 2rem 2rem 0 currentColor; + filter: hue-rotate(-10deg) brightness(1.1); + opacity: 0.7; +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3:after { + filter: hue-rotate(-10deg) brightness(1.1); + width: 2rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: 0.5rem; + left: -0.15rem; + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(4) { + width: 5rem; + right: 0; + margin: auto; + top: 3.5rem; + background: rgba(79, 1, 14, 0.9); + height: 5rem; + border-radius: 0.3rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem currentColor, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 #000, inset 0 -3.5rem 0 #20112a; +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(4):after { + width: 4.5rem; + height: 0.25rem; + left: 0.25rem; + top: 2.4rem; + background: currentColor; + border-radius: 0.0001rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), 0 3rem 0 0.3rem #dc9075, 0 3.5rem 0.35rem 0.25rem rgba(79, 1, 14, 0.9); +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(4):before { + width: 0.25rem; + height: 4.5rem; + left: 2.4rem; + top: 0.25rem; + background: currentColor; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3.col4 > i:nth-of-type(4) { + border-radius: 2.25rem 2.25rem 0.3rem 0.3rem; +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(2) { + border: solid rgba(255, 255, 255, 0) 1rem; + border-bottom: solid #6a1b37 4rem; + width: calc(100% + 2.1rem); + left: -1rem; + top: -2.5rem; + box-shadow: 0 0.25rem 0 #20112a, 0 1.5rem 1rem -1rem rgba(79, 1, 14, 0.75); +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(2):before { + width: 100%; + height: 3rem; + border-radius: 50%; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 0.75rem, rgba(79, 1, 14, 0.4), rgba(255, 255, 255, 0) 1rem); +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(2):after { + width: 3rem; + height: 4rem; + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 0.5rem solid #bc2f2f; + top: -2rem; + box-shadow: inset 0 4rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -3rem 0 -1rem #252529; + border-radius: 0.5rem; + left: -0.25rem; + filter: drop-shadow(-0.25rem 2rem 0.5rem rgba(0, 0, 0, 0.15)); +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(1):before, .hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(1):after { + top: -8.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3:nth-of-type(even) i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3:nth-of-type(even) > i:nth-of-type(1) { + left: 10rem; +} +.hs.row3.col3:checked ~ div > div > house > .row4.col3 i:nth-of-type(2), +.hs.row3.col3:checked ~ div > div > house > .row4.col3 i:nth-of-type(1) { + display: none; +} + +.hs.house.row4.col3:checked +~ .hs.shed.row3.col3:checked +~ div > div > house > .row3.col3 { + border-bottom: 0.25rem dashed #bc2f2f; +} +.hs.house.row4.col3:checked +~ .hs.shed.row3.col3:checked +~ div > div > house > .row4.col3:before { + background: #bc592f; +} + +.hs.shed.row4.col3:checked +~ .hs.house.row3.col3:checked +~ div > div > house > .row3.col3 { + border-bottom: 0.25rem dashed #bc592f; +} +.hs.shed.row4.col3:checked +~ .hs.house.row3.col3:checked +~ div > div > house > .row4.col3:before { + background: #bc2f2f; +} + +.hs.house.row3.col0:not(:checked) +~ .hs.house.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row1.col3:checked +~ div > div > house > .row3.col3 > i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.house.row3.col0:not(:checked) +~ .hs.house.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row1.col3:checked +~ div > div > house > .row3.col3 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:not(:checked) +~ div > div > house > .row3.col3 > i:nth-of-type(2):after, +.hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col3:checked +~ div > div > house > .row3.col3 > i:nth-of-type(2):after { + left: 4.75rem; + height: 3rem; + box-shadow: inset 0 6rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -2.25rem 0 -1rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row2.col2:checked +~ .hs.row2.col3:not(:checked) +~ div > div > house > .row3.col3 > i:nth-of-type(1), +.hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col3:checked +~ div > div > house > .row3.col3 > i:nth-of-type(1) { + left: 5rem; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.house.row2.col2:not(:checked) +~ .hs.shed.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ div > div > house > .row3.col3 i:nth-of-type(2) { + display: block; + left: -42%; + width: 50%; +} +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.house.row2.col2:not(:checked) +~ .hs.shed.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ div > div > house > .row3.col3 i:nth-of-type(1), +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.house.row2.col2:not(:checked) +~ .hs.shed.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ div > div > house > .row3.col3 i:nth-of-type(2):after { + display: none; +} + +.row3.col2:checked ~ .row3.col3:checked ~ div > div > house > .row3.col2 i:nth-of-type(1), +.row3.col2:checked ~ .row3.col3:checked ~ div > div > house > .row3.col2 i:nth-of-type(2):after { + display: none; +} +.row3.col2:checked ~ .row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(2):after { + left: -1.5rem; +} +.row3.col2:checked ~ .row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(1) { + left: -1rem; +} + +.hs.row3.col4:checked ~ div > div > house > .row3.col4:before { + width: 1.5rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: -1.35rem; + left: 3rem; + box-shadow: 2rem 2rem 0 currentColor; + filter: hue-rotate(-10deg) brightness(1.1); + opacity: 0.7; +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4:after { + filter: hue-rotate(-10deg) brightness(1.1); + width: 2rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: 0.5rem; + left: -0.15rem; + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(4) { + width: 5rem; + right: 0; + margin: auto; + top: 3.5rem; + background: rgba(79, 1, 14, 0.9); + height: 5rem; + border-radius: 0.3rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem currentColor, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 #000, inset 0 -3.5rem 0 #20112a; +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(4):after { + width: 4.5rem; + height: 0.25rem; + left: 0.25rem; + top: 2.4rem; + background: currentColor; + border-radius: 0.0001rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), 0 3rem 0 0.3rem #dc9075, 0 3.5rem 0.35rem 0.25rem rgba(79, 1, 14, 0.9); +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(4):before { + width: 0.25rem; + height: 4.5rem; + left: 2.4rem; + top: 0.25rem; + background: currentColor; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4.col1 > i:nth-of-type(4) { + border-radius: 2.25rem 2.25rem 0.3rem 0.3rem; +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(2) { + border: solid rgba(255, 255, 255, 0) 1rem; + border-bottom: solid #6a1b37 4rem; + width: calc(100% + 2.1rem); + left: -1rem; + top: -2.5rem; + box-shadow: 0 0.25rem 0 #20112a, 0 1.5rem 1rem -1rem rgba(79, 1, 14, 0.75); +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(2):before { + width: 100%; + height: 3rem; + border-radius: 50%; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 0.75rem, rgba(79, 1, 14, 0.4), rgba(255, 255, 255, 0) 1rem); +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(2):after { + width: 3rem; + height: 4rem; + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 0.5rem solid #bc2f2f; + top: -2rem; + box-shadow: inset 0 4rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -3rem 0 -1rem #252529; + border-radius: 0.5rem; + left: -0.25rem; + filter: drop-shadow(-0.25rem 2rem 0.5rem rgba(0, 0, 0, 0.15)); +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(1):before, .hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(1):after { + top: -8.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4:nth-of-type(even) i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4:nth-of-type(even) > i:nth-of-type(1) { + left: 10rem; +} +.hs.row3.col4:checked ~ div > div > house > .row4.col4 i:nth-of-type(2), +.hs.row3.col4:checked ~ div > div > house > .row4.col4 i:nth-of-type(1) { + display: none; +} + +.hs.house.row4.col4:checked +~ .hs.shed.row3.col4:checked +~ div > div > house > .row3.col4 { + border-bottom: 0.25rem dashed #bc2f2f; +} +.hs.house.row4.col4:checked +~ .hs.shed.row3.col4:checked +~ div > div > house > .row4.col4:before { + background: #bc592f; +} + +.hs.shed.row4.col4:checked +~ .hs.house.row3.col4:checked +~ div > div > house > .row3.col4 { + border-bottom: 0.25rem dashed #bc592f; +} +.hs.shed.row4.col4:checked +~ .hs.house.row3.col4:checked +~ div > div > house > .row4.col4:before { + background: #bc2f2f; +} + +.hs.house.row3.col1:not(:checked) +~ .hs.house.row3.col4:checked +~ .hs.house.row3.col5:not(:checked) +~ .hs.house.row1.col4:checked +~ div > div > house > .row3.col4 > i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.house.row3.col1:not(:checked) +~ .hs.house.row3.col4:checked +~ .hs.house.row3.col5:not(:checked) +~ .hs.house.row1.col4:checked +~ div > div > house > .row3.col4 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row2.col3:checked +~ .hs.row2.col4:not(:checked) +~ div > div > house > .row3.col4 > i:nth-of-type(2):after, +.hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col4:checked +~ div > div > house > .row3.col4 > i:nth-of-type(2):after { + left: 4.75rem; + height: 3rem; + box-shadow: inset 0 6rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -2.25rem 0 -1rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row2.col3:checked +~ .hs.row2.col4:not(:checked) +~ div > div > house > .row3.col4 > i:nth-of-type(1), +.hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col4:checked +~ div > div > house > .row3.col4 > i:nth-of-type(1) { + left: 5rem; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.shed.row2.col3:not(:checked) +~ .hs.row2.col4:checked +~ div > div > house > .row3.col4 i:nth-of-type(2) { + display: block; + left: -42%; + width: 50%; +} +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.shed.row2.col3:not(:checked) +~ .hs.row2.col4:checked +~ div > div > house > .row3.col4 i:nth-of-type(1), +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.shed.row2.col3:not(:checked) +~ .hs.row2.col4:checked +~ div > div > house > .row3.col4 i:nth-of-type(2):after { + display: none; +} + +.row3.col2:checked ~ .row3.col3:checked ~ div > div > house > .row3.col2 i:nth-of-type(1), +.row3.col2:checked ~ .row3.col3:checked ~ div > div > house > .row3.col2 i:nth-of-type(2):after { + display: none; +} +.row3.col2:checked ~ .row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(2):after { + left: -1.5rem; +} +.row3.col2:checked ~ .row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(1) { + left: -1rem; +} + +.hs.row4.col1:checked ~ div > div > house > .row4.col1:before { + width: 1.5rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: -1.35rem; + left: 3rem; + box-shadow: 2rem 2rem 0 currentColor; + filter: hue-rotate(-10deg) brightness(1.1); + opacity: 0.7; +} +.hs.row4.col1:checked ~ div > div > house > .row4.col1:after { + filter: hue-rotate(-10deg) brightness(1.1); + width: 2rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: 0.5rem; + left: -0.15rem; + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} +.hs.row4.col1:checked ~ div > div > house > .row4.col1 > i:nth-of-type(4) { + width: 5rem; + right: 0; + margin: auto; + top: 3.5rem; + background: rgba(79, 1, 14, 0.9); + height: 5rem; + border-radius: 0.3rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem currentColor, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 #000, inset 0 -3.5rem 0 #20112a; +} +.hs.row4.col1:checked ~ div > div > house > .row4.col1 > i:nth-of-type(4):after { + width: 4.5rem; + height: 0.25rem; + left: 0.25rem; + top: 2.4rem; + background: currentColor; + border-radius: 0.0001rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), 0 3rem 0 0.3rem #dc9075, 0 3.5rem 0.35rem 0.25rem rgba(79, 1, 14, 0.9); +} +.hs.row4.col1:checked ~ div > div > house > .row4.col1 > i:nth-of-type(4):before { + width: 0.25rem; + height: 4.5rem; + left: 2.4rem; + top: 0.25rem; + background: currentColor; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +.hs.row4.col1:checked ~ div > div > house > .row4.col1.col4 > i:nth-of-type(4) { + border-radius: 2.25rem 2.25rem 0.3rem 0.3rem; +} +.hs.row4.col1:checked ~ div > div > house > .row4.col1 > i:nth-of-type(2) { + border: solid rgba(255, 255, 255, 0) 1rem; + border-bottom: solid #6a1b37 4rem; + width: calc(100% + 2.1rem); + left: -1rem; + top: -2.5rem; + box-shadow: 0 0.25rem 0 #20112a, 0 1.5rem 1rem -1rem rgba(79, 1, 14, 0.75); +} +.hs.row4.col1:checked ~ div > div > house > .row4.col1 > i:nth-of-type(2):before { + width: 100%; + height: 3rem; + border-radius: 50%; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 0.75rem, rgba(79, 1, 14, 0.4), rgba(255, 255, 255, 0) 1rem); +} +.hs.row4.col1:checked ~ div > div > house > .row4.col1 > i:nth-of-type(2):after { + width: 3rem; + height: 4rem; + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 0.5rem solid #bc2f2f; + top: -2rem; + box-shadow: inset 0 4rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -3rem 0 -1rem #252529; + border-radius: 0.5rem; + left: -0.25rem; + filter: drop-shadow(-0.25rem 2rem 0.5rem rgba(0, 0, 0, 0.15)); +} +.hs.row4.col1:checked ~ div > div > house > .row4.col1 > i:nth-of-type(1):before, .hs.row4.col1:checked ~ div > div > house > .row4.col1 > i:nth-of-type(1):after { + top: -8.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row4.col1:checked ~ div > div > house > .row4.col1 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row4.col1:checked ~ div > div > house > .row4.col1:nth-of-type(even) i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.row4.col1:checked ~ div > div > house > .row4.col1:nth-of-type(even) > i:nth-of-type(1) { + left: 10rem; +} +.hs.row4.col1:checked ~ div > div > house > .row5.col1 i:nth-of-type(2), +.hs.row4.col1:checked ~ div > div > house > .row5.col1 i:nth-of-type(1) { + display: none; +} + +.hs.house.row5.col1:checked +~ .hs.shed.row4.col1:checked +~ div > div > house > .row4.col1 { + border-bottom: 0.25rem dashed #bc2f2f; +} +.hs.house.row5.col1:checked +~ .hs.shed.row4.col1:checked +~ div > div > house > .row5.col1:before { + background: #bc592f; +} + +.hs.shed.row5.col1:checked +~ .hs.house.row4.col1:checked +~ div > div > house > .row4.col1 { + border-bottom: 0.25rem dashed #bc592f; +} +.hs.shed.row5.col1:checked +~ .hs.house.row4.col1:checked +~ div > div > house > .row5.col1:before { + background: #bc2f2f; +} + +.hs.house.row4.col-2:not(:checked) +~ .hs.house.row4.col1:checked +~ .hs.house.row4.col2:not(:checked) +~ .hs.house.row2.col1:checked +~ div > div > house > .row4.col1 > i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.house.row4.col-2:not(:checked) +~ .hs.house.row4.col1:checked +~ .hs.house.row4.col2:not(:checked) +~ .hs.house.row2.col1:checked +~ div > div > house > .row4.col1 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:not(:checked) +~ div > div > house > .row4.col1 > i:nth-of-type(2):after, +.hs.house.row3.col1:not(:checked) +~ .hs.house.row2.col1:checked +~ div > div > house > .row4.col1 > i:nth-of-type(2):after { + left: 4.75rem; + height: 3rem; + box-shadow: inset 0 6rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -2.25rem 0 -1rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row3.col0:checked +~ .hs.row3.col1:not(:checked) +~ div > div > house > .row4.col1 > i:nth-of-type(1), +.hs.house.row3.col1:not(:checked) +~ .hs.house.row2.col1:checked +~ div > div > house > .row4.col1 > i:nth-of-type(1) { + left: 5rem; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.house.row3.col0:not(:checked) +~ .hs.shed.row3.col0:not(:checked) +~ .hs.row3.col1:checked +~ div > div > house > .row4.col1 i:nth-of-type(2) { + display: block; + left: -42%; + width: 50%; +} +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.house.row3.col0:not(:checked) +~ .hs.shed.row3.col0:not(:checked) +~ .hs.row3.col1:checked +~ div > div > house > .row4.col1 i:nth-of-type(1), +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.house.row3.col0:not(:checked) +~ .hs.shed.row3.col0:not(:checked) +~ .hs.row3.col1:checked +~ div > div > house > .row4.col1 i:nth-of-type(2):after { + display: none; +} + +.row4.col2:checked ~ .row4.col3:checked ~ div > div > house > .row4.col2 i:nth-of-type(1), +.row4.col2:checked ~ .row4.col3:checked ~ div > div > house > .row4.col2 i:nth-of-type(2):after { + display: none; +} +.row4.col2:checked ~ .row4.col3:checked ~ div > div > house > .row4.col3 > i:nth-of-type(2):after { + left: -1.5rem; +} +.row4.col2:checked ~ .row4.col3:checked ~ div > div > house > .row4.col3 > i:nth-of-type(1) { + left: -1rem; +} + +.hs.row4.col2:checked ~ div > div > house > .row4.col2:before { + width: 1.5rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: -1.35rem; + left: 3rem; + box-shadow: 2rem 2rem 0 currentColor; + filter: hue-rotate(-10deg) brightness(1.1); + opacity: 0.7; +} +.hs.row4.col2:checked ~ div > div > house > .row4.col2:after { + filter: hue-rotate(-10deg) brightness(1.1); + width: 2rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: 0.5rem; + left: -0.15rem; + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} +.hs.row4.col2:checked ~ div > div > house > .row4.col2 > i:nth-of-type(4) { + width: 5rem; + right: 0; + margin: auto; + top: 3.5rem; + background: rgba(79, 1, 14, 0.9); + height: 5rem; + border-radius: 0.3rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem currentColor, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 #000, inset 0 -3.5rem 0 #20112a; +} +.hs.row4.col2:checked ~ div > div > house > .row4.col2 > i:nth-of-type(4):after { + width: 4.5rem; + height: 0.25rem; + left: 0.25rem; + top: 2.4rem; + background: currentColor; + border-radius: 0.0001rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), 0 3rem 0 0.3rem #dc9075, 0 3.5rem 0.35rem 0.25rem rgba(79, 1, 14, 0.9); +} +.hs.row4.col2:checked ~ div > div > house > .row4.col2 > i:nth-of-type(4):before { + width: 0.25rem; + height: 4.5rem; + left: 2.4rem; + top: 0.25rem; + background: currentColor; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +.hs.row4.col2:checked ~ div > div > house > .row4.col2.col2 > i:nth-of-type(4) { + border-radius: 2.25rem 2.25rem 0.3rem 0.3rem; +} +.hs.row4.col2:checked ~ div > div > house > .row4.col2 > i:nth-of-type(2) { + border: solid rgba(255, 255, 255, 0) 1rem; + border-bottom: solid #6a1b37 4rem; + width: calc(100% + 2.1rem); + left: -1rem; + top: -2.5rem; + box-shadow: 0 0.25rem 0 #20112a, 0 1.5rem 1rem -1rem rgba(79, 1, 14, 0.75); +} +.hs.row4.col2:checked ~ div > div > house > .row4.col2 > i:nth-of-type(2):before { + width: 100%; + height: 3rem; + border-radius: 50%; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 0.75rem, rgba(79, 1, 14, 0.4), rgba(255, 255, 255, 0) 1rem); +} +.hs.row4.col2:checked ~ div > div > house > .row4.col2 > i:nth-of-type(2):after { + width: 3rem; + height: 4rem; + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 0.5rem solid #bc2f2f; + top: -2rem; + box-shadow: inset 0 4rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -3rem 0 -1rem #252529; + border-radius: 0.5rem; + left: -0.25rem; + filter: drop-shadow(-0.25rem 2rem 0.5rem rgba(0, 0, 0, 0.15)); +} +.hs.row4.col2:checked ~ div > div > house > .row4.col2 > i:nth-of-type(1):before, .hs.row4.col2:checked ~ div > div > house > .row4.col2 > i:nth-of-type(1):after { + top: -8.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row4.col2:checked ~ div > div > house > .row4.col2 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row4.col2:checked ~ div > div > house > .row4.col2:nth-of-type(even) i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.row4.col2:checked ~ div > div > house > .row4.col2:nth-of-type(even) > i:nth-of-type(1) { + left: 10rem; +} +.hs.row4.col2:checked ~ div > div > house > .row5.col2 i:nth-of-type(2), +.hs.row4.col2:checked ~ div > div > house > .row5.col2 i:nth-of-type(1) { + display: none; +} + +.hs.house.row5.col2:checked +~ .hs.shed.row4.col2:checked +~ div > div > house > .row4.col2 { + border-bottom: 0.25rem dashed #bc2f2f; +} +.hs.house.row5.col2:checked +~ .hs.shed.row4.col2:checked +~ div > div > house > .row5.col2:before { + background: #bc592f; +} + +.hs.shed.row5.col2:checked +~ .hs.house.row4.col2:checked +~ div > div > house > .row4.col2 { + border-bottom: 0.25rem dashed #bc592f; +} +.hs.shed.row5.col2:checked +~ .hs.house.row4.col2:checked +~ div > div > house > .row5.col2:before { + background: #bc2f2f; +} + +.hs.house.row4.col-1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row2.col2:checked +~ div > div > house > .row4.col2 > i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.house.row4.col-1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row2.col2:checked +~ div > div > house > .row4.col2 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:not(:checked) +~ div > div > house > .row4.col2 > i:nth-of-type(2):after, +.hs.house.row3.col2:not(:checked) +~ .hs.house.row2.col2:checked +~ div > div > house > .row4.col2 > i:nth-of-type(2):after { + left: 4.75rem; + height: 3rem; + box-shadow: inset 0 6rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -2.25rem 0 -1rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row3.col1:checked +~ .hs.row3.col2:not(:checked) +~ div > div > house > .row4.col2 > i:nth-of-type(1), +.hs.house.row3.col2:not(:checked) +~ .hs.house.row2.col2:checked +~ div > div > house > .row4.col2 > i:nth-of-type(1) { + left: 5rem; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col1:not(:checked) +~ .hs.row3.col2:checked +~ div > div > house > .row4.col2 i:nth-of-type(2) { + display: block; + left: -42%; + width: 50%; +} +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col1:not(:checked) +~ .hs.row3.col2:checked +~ div > div > house > .row4.col2 i:nth-of-type(1), +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col1:not(:checked) +~ .hs.row3.col2:checked +~ div > div > house > .row4.col2 i:nth-of-type(2):after { + display: none; +} + +.row4.col2:checked ~ .row4.col3:checked ~ div > div > house > .row4.col2 i:nth-of-type(1), +.row4.col2:checked ~ .row4.col3:checked ~ div > div > house > .row4.col2 i:nth-of-type(2):after { + display: none; +} +.row4.col2:checked ~ .row4.col3:checked ~ div > div > house > .row4.col3 > i:nth-of-type(2):after { + left: -1.5rem; +} +.row4.col2:checked ~ .row4.col3:checked ~ div > div > house > .row4.col3 > i:nth-of-type(1) { + left: -1rem; +} + +.hs.row4.col3:checked ~ div > div > house > .row4.col3:before { + width: 1.5rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: -1.35rem; + left: 3rem; + box-shadow: 2rem 2rem 0 currentColor; + filter: hue-rotate(-10deg) brightness(1.1); + opacity: 0.7; +} +.hs.row4.col3:checked ~ div > div > house > .row4.col3:after { + filter: hue-rotate(-10deg) brightness(1.1); + width: 2rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: 0.5rem; + left: -0.15rem; + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} +.hs.row4.col3:checked ~ div > div > house > .row4.col3 > i:nth-of-type(4) { + width: 5rem; + right: 0; + margin: auto; + top: 3.5rem; + background: rgba(79, 1, 14, 0.9); + height: 5rem; + border-radius: 0.3rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem currentColor, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 #000, inset 0 -3.5rem 0 #20112a; +} +.hs.row4.col3:checked ~ div > div > house > .row4.col3 > i:nth-of-type(4):after { + width: 4.5rem; + height: 0.25rem; + left: 0.25rem; + top: 2.4rem; + background: currentColor; + border-radius: 0.0001rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), 0 3rem 0 0.3rem #dc9075, 0 3.5rem 0.35rem 0.25rem rgba(79, 1, 14, 0.9); +} +.hs.row4.col3:checked ~ div > div > house > .row4.col3 > i:nth-of-type(4):before { + width: 0.25rem; + height: 4.5rem; + left: 2.4rem; + top: 0.25rem; + background: currentColor; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +.hs.row4.col3:checked ~ div > div > house > .row4.col3.col3 > i:nth-of-type(4) { + border-radius: 2.25rem 2.25rem 0.3rem 0.3rem; +} +.hs.row4.col3:checked ~ div > div > house > .row4.col3 > i:nth-of-type(2) { + border: solid rgba(255, 255, 255, 0) 1rem; + border-bottom: solid #6a1b37 4rem; + width: calc(100% + 2.1rem); + left: -1rem; + top: -2.5rem; + box-shadow: 0 0.25rem 0 #20112a, 0 1.5rem 1rem -1rem rgba(79, 1, 14, 0.75); +} +.hs.row4.col3:checked ~ div > div > house > .row4.col3 > i:nth-of-type(2):before { + width: 100%; + height: 3rem; + border-radius: 50%; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 0.75rem, rgba(79, 1, 14, 0.4), rgba(255, 255, 255, 0) 1rem); +} +.hs.row4.col3:checked ~ div > div > house > .row4.col3 > i:nth-of-type(2):after { + width: 3rem; + height: 4rem; + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 0.5rem solid #bc2f2f; + top: -2rem; + box-shadow: inset 0 4rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -3rem 0 -1rem #252529; + border-radius: 0.5rem; + left: -0.25rem; + filter: drop-shadow(-0.25rem 2rem 0.5rem rgba(0, 0, 0, 0.15)); +} +.hs.row4.col3:checked ~ div > div > house > .row4.col3 > i:nth-of-type(1):before, .hs.row4.col3:checked ~ div > div > house > .row4.col3 > i:nth-of-type(1):after { + top: -8.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row4.col3:checked ~ div > div > house > .row4.col3 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row4.col3:checked ~ div > div > house > .row4.col3:nth-of-type(even) i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.row4.col3:checked ~ div > div > house > .row4.col3:nth-of-type(even) > i:nth-of-type(1) { + left: 10rem; +} +.hs.row4.col3:checked ~ div > div > house > .row5.col3 i:nth-of-type(2), +.hs.row4.col3:checked ~ div > div > house > .row5.col3 i:nth-of-type(1) { + display: none; +} + +.hs.house.row5.col3:checked +~ .hs.shed.row4.col3:checked +~ div > div > house > .row4.col3 { + border-bottom: 0.25rem dashed #bc2f2f; +} +.hs.house.row5.col3:checked +~ .hs.shed.row4.col3:checked +~ div > div > house > .row5.col3:before { + background: #bc592f; +} + +.hs.shed.row5.col3:checked +~ .hs.house.row4.col3:checked +~ div > div > house > .row4.col3 { + border-bottom: 0.25rem dashed #bc592f; +} +.hs.shed.row5.col3:checked +~ .hs.house.row4.col3:checked +~ div > div > house > .row5.col3:before { + background: #bc2f2f; +} + +.hs.house.row4.col0:not(:checked) +~ .hs.house.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row2.col3:checked +~ div > div > house > .row4.col3 > i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.house.row4.col0:not(:checked) +~ .hs.house.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row2.col3:checked +~ div > div > house > .row4.col3 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:not(:checked) +~ div > div > house > .row4.col3 > i:nth-of-type(2):after, +.hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col3:checked +~ div > div > house > .row4.col3 > i:nth-of-type(2):after { + left: 4.75rem; + height: 3rem; + box-shadow: inset 0 6rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -2.25rem 0 -1rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row3.col2:checked +~ .hs.row3.col3:not(:checked) +~ div > div > house > .row4.col3 > i:nth-of-type(1), +.hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col3:checked +~ div > div > house > .row4.col3 > i:nth-of-type(1) { + left: 5rem; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.house.row3.col2:not(:checked) +~ .hs.shed.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ div > div > house > .row4.col3 i:nth-of-type(2) { + display: block; + left: -42%; + width: 50%; +} +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.house.row3.col2:not(:checked) +~ .hs.shed.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ div > div > house > .row4.col3 i:nth-of-type(1), +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.house.row3.col2:not(:checked) +~ .hs.shed.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ div > div > house > .row4.col3 i:nth-of-type(2):after { + display: none; +} + +.row4.col2:checked ~ .row4.col3:checked ~ div > div > house > .row4.col2 i:nth-of-type(1), +.row4.col2:checked ~ .row4.col3:checked ~ div > div > house > .row4.col2 i:nth-of-type(2):after { + display: none; +} +.row4.col2:checked ~ .row4.col3:checked ~ div > div > house > .row4.col3 > i:nth-of-type(2):after { + left: -1.5rem; +} +.row4.col2:checked ~ .row4.col3:checked ~ div > div > house > .row4.col3 > i:nth-of-type(1) { + left: -1rem; +} + +.hs.row4.col4:checked ~ div > div > house > .row4.col4:before { + width: 1.5rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: -1.35rem; + left: 3rem; + box-shadow: 2rem 2rem 0 currentColor; + filter: hue-rotate(-10deg) brightness(1.1); + opacity: 0.7; +} +.hs.row4.col4:checked ~ div > div > house > .row4.col4:after { + filter: hue-rotate(-10deg) brightness(1.1); + width: 2rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: 0.5rem; + left: -0.15rem; + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} +.hs.row4.col4:checked ~ div > div > house > .row4.col4 > i:nth-of-type(4) { + width: 5rem; + right: 0; + margin: auto; + top: 3.5rem; + background: rgba(79, 1, 14, 0.9); + height: 5rem; + border-radius: 0.3rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem currentColor, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 #000, inset 0 -3.5rem 0 #20112a; +} +.hs.row4.col4:checked ~ div > div > house > .row4.col4 > i:nth-of-type(4):after { + width: 4.5rem; + height: 0.25rem; + left: 0.25rem; + top: 2.4rem; + background: currentColor; + border-radius: 0.0001rem; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), 0 3rem 0 0.3rem #dc9075, 0 3.5rem 0.35rem 0.25rem rgba(79, 1, 14, 0.9); +} +.hs.row4.col4:checked ~ div > div > house > .row4.col4 > i:nth-of-type(4):before { + width: 0.25rem; + height: 4.5rem; + left: 2.4rem; + top: 0.25rem; + background: currentColor; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +.hs.row4.col4:checked ~ div > div > house > .row4.col4.col2 > i:nth-of-type(4) { + border-radius: 2.25rem 2.25rem 0.3rem 0.3rem; +} +.hs.row4.col4:checked ~ div > div > house > .row4.col4 > i:nth-of-type(2) { + border: solid rgba(255, 255, 255, 0) 1rem; + border-bottom: solid #6a1b37 4rem; + width: calc(100% + 2.1rem); + left: -1rem; + top: -2.5rem; + box-shadow: 0 0.25rem 0 #20112a, 0 1.5rem 1rem -1rem rgba(79, 1, 14, 0.75); +} +.hs.row4.col4:checked ~ div > div > house > .row4.col4 > i:nth-of-type(2):before { + width: 100%; + height: 3rem; + border-radius: 50%; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 0.75rem, rgba(79, 1, 14, 0.4), rgba(255, 255, 255, 0) 1rem); +} +.hs.row4.col4:checked ~ div > div > house > .row4.col4 > i:nth-of-type(2):after { + width: 3rem; + height: 4rem; + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 0.5rem solid #bc2f2f; + top: -2rem; + box-shadow: inset 0 4rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -3rem 0 -1rem #252529; + border-radius: 0.5rem; + left: -0.25rem; + filter: drop-shadow(-0.25rem 2rem 0.5rem rgba(0, 0, 0, 0.15)); +} +.hs.row4.col4:checked ~ div > div > house > .row4.col4 > i:nth-of-type(1):before, .hs.row4.col4:checked ~ div > div > house > .row4.col4 > i:nth-of-type(1):after { + top: -8.5rem; + left: -1rem; + animation: smoke 8s linear infinite; +} +.hs.row4.col4:checked ~ div > div > house > .row4.col4 > i:nth-of-type(1):before { + animation: smoke 7.25s 3.75s linear infinite; +} +.hs.row4.col4:checked ~ div > div > house > .row4.col4:nth-of-type(even) i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.row4.col4:checked ~ div > div > house > .row4.col4:nth-of-type(even) > i:nth-of-type(1) { + left: 10rem; +} +.hs.row4.col4:checked ~ div > div > house > .row5.col4 i:nth-of-type(2), +.hs.row4.col4:checked ~ div > div > house > .row5.col4 i:nth-of-type(1) { + display: none; +} + +.hs.house.row5.col4:checked +~ .hs.shed.row4.col4:checked +~ div > div > house > .row4.col4 { + border-bottom: 0.25rem dashed #bc2f2f; +} +.hs.house.row5.col4:checked +~ .hs.shed.row4.col4:checked +~ div > div > house > .row5.col4:before { + background: #bc592f; +} + +.hs.shed.row5.col4:checked +~ .hs.house.row4.col4:checked +~ div > div > house > .row4.col4 { + border-bottom: 0.25rem dashed #bc592f; +} +.hs.shed.row5.col4:checked +~ .hs.house.row4.col4:checked +~ div > div > house > .row5.col4:before { + background: #bc2f2f; +} + +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col4:checked +~ .hs.house.row4.col5:not(:checked) +~ .hs.house.row2.col4:checked +~ div > div > house > .row4.col4 > i:nth-of-type(2):after { + left: 9.5rem; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col4:checked +~ .hs.house.row4.col5:not(:checked) +~ .hs.house.row2.col4:checked +~ div > div > house > .row4.col4 > i:nth-of-type(1) { + left: 11rem; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:not(:checked) +~ div > div > house > .row4.col4 > i:nth-of-type(2):after, +.hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col4:checked +~ div > div > house > .row4.col4 > i:nth-of-type(2):after { + left: 4.75rem; + height: 3rem; + box-shadow: inset 0 6rem 0 #bc2f2f, 0 -0.5rem 0 -0.2rem #6a1b37, 0 -2.25rem 0 -1rem #252529; + border-radius: 0 0 1rem 1rem; +} +.hs.row3.col3:checked +~ .hs.row3.col4:not(:checked) +~ div > div > house > .row4.col4 > i:nth-of-type(1), +.hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col4:checked +~ div > div > house > .row4.col4 > i:nth-of-type(1) { + left: 5rem; +} + +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.shed.row3.col3:not(:checked) +~ .hs.row3.col4:checked +~ div > div > house > .row4.col4 i:nth-of-type(2) { + display: block; + left: -42%; + width: 50%; +} +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.shed.row3.col3:not(:checked) +~ .hs.row3.col4:checked +~ div > div > house > .row4.col4 i:nth-of-type(1), +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.shed.row3.col3:not(:checked) +~ .hs.row3.col4:checked +~ div > div > house > .row4.col4 i:nth-of-type(2):after { + display: none; +} + +.row4.col2:checked ~ .row4.col3:checked ~ div > div > house > .row4.col2 i:nth-of-type(1), +.row4.col2:checked ~ .row4.col3:checked ~ div > div > house > .row4.col2 i:nth-of-type(2):after { + display: none; +} +.row4.col2:checked ~ .row4.col3:checked ~ div > div > house > .row4.col3 > i:nth-of-type(2):after { + left: -1.5rem; +} +.row4.col2:checked ~ .row4.col3:checked ~ div > div > house > .row4.col3 > i:nth-of-type(1) { + left: -1rem; +} + +.hs.row1.col1:checked +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ div > div > house > .row1.col2 > i:nth-of-type(5) { + display: block; + width: 105%; +} + +.hs.row1.col1:checked +~ .hs.house.row1.col2:not(:checked) +~ .hs.shed.row1.col3:checked +~ div > div > house > .row1.col2 > i:nth-of-type(5) { + display: block; + width: 115%; +} + +.hs.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ .hs.row1.col4:checked +~ div > div > house > .row1.col3 > i:nth-of-type(5) { + display: block; + width: 105%; +} + +.hs.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ .hs.shed.row1.col4:checked +~ div > div > house > .row1.col3 > i:nth-of-type(5) { + display: block; + width: 115%; +} + +.hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ .hs.row1.col5:checked +~ div > div > house > .row1.col4 > i:nth-of-type(5) { + display: block; + width: 105%; +} + +.hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ .hs.shed.row1.col5:checked +~ div > div > house > .row1.col4 > i:nth-of-type(5) { + display: block; + width: 115%; +} + +.hs.row1.col4:checked +~ .hs.house.row1.col5:not(:checked) +~ .hs.row1.col6:checked +~ div > div > house > .row1.col5 > i:nth-of-type(5) { + display: block; + width: 105%; +} + +.hs.row1.col4:checked +~ .hs.house.row1.col5:not(:checked) +~ .hs.shed.row1.col6:checked +~ div > div > house > .row1.col5 > i:nth-of-type(5) { + display: block; + width: 115%; +} + +.hs.row1.col1:checked +~ .hs.house.row1.col2:not(:checked) +~ .hs.house.row1.col3:not(:checked) +~ .hs.row1.col4:checked +~ div > div > house > .row1.col2 > i:nth-of-type(5) { + display: block; + width: 205%; +} +.hs.row1.col1:checked +~ .hs.house.row1.col2:not(:checked) +~ .hs.house.row1.col3:not(:checked) +~ .hs.row1.col4:checked +~ div > div > house > .row1.col2 > i:nth-of-type(5):after { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #bc592f; + top: 2.75rem; + left: 3.5rem; + transform: rotate(4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem 0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} +.hs.row1.col1:checked +~ .hs.house.row1.col2:not(:checked) +~ .hs.house.row1.col3:not(:checked) +~ .hs.row1.col4:checked +~ div > div > house > .row1.col2 > i:nth-of-type(5):before { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #7dbc2f; + top: 3.25rem; + left: 13.5rem; + transform: rotate(-4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem -0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col1:after { + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor; +} + +.hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col1:after { + box-shadow: -2rem 5rem 0 rgba(204, 51, 51, 0.5), 0 7rem 0 currentColor; +} + +.hs.row1.col0:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col1:after { + box-shadow: -2rem 3rem 0 rgba(204, 51, 51, 0.5), 0 5rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} + +.hs.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ .hs.house.row1.col4:not(:checked) +~ .hs.row1.col5:checked +~ div > div > house > .row1.col3 > i:nth-of-type(5) { + display: block; + width: 205%; +} +.hs.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ .hs.house.row1.col4:not(:checked) +~ .hs.row1.col5:checked +~ div > div > house > .row1.col3 > i:nth-of-type(5):after { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #bc592f; + top: 2.75rem; + left: 3.5rem; + transform: rotate(4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem 0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} +.hs.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ .hs.house.row1.col4:not(:checked) +~ .hs.row1.col5:checked +~ div > div > house > .row1.col3 > i:nth-of-type(5):before { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #7dbc2f; + top: 3.25rem; + left: 13.5rem; + transform: rotate(-4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem -0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col2:after { + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col2:after { + box-shadow: -2rem 6rem 0 rgba(204, 51, 51, 0.5), 0 7rem 0 currentColor; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col2:after { + box-shadow: -2rem 3rem 0 rgba(204, 51, 51, 0.5), 0 5rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} + +.hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ .hs.house.row1.col5:not(:checked) +~ .hs.row1.col6:checked +~ div > div > house > .row1.col4 > i:nth-of-type(5) { + display: block; + width: 205%; +} +.hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ .hs.house.row1.col5:not(:checked) +~ .hs.row1.col6:checked +~ div > div > house > .row1.col4 > i:nth-of-type(5):after { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #bc592f; + top: 2.75rem; + left: 3.5rem; + transform: rotate(4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem 0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} +.hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ .hs.house.row1.col5:not(:checked) +~ .hs.row1.col6:checked +~ div > div > house > .row1.col4 > i:nth-of-type(5):before { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #7dbc2f; + top: 3.25rem; + left: 13.5rem; + transform: rotate(-4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem -0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col3:after { + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col3:after { + box-shadow: -2rem 5rem 0 rgba(204, 51, 51, 0.5), 0 7rem 0 currentColor; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col3:after { + box-shadow: -2rem 3rem 0 rgba(204, 51, 51, 0.5), 0 5rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} + +.hs.row1.col4:checked +~ .hs.house.row1.col5:not(:checked) +~ .hs.house.row1.col6:not(:checked) +~ .hs.row1.col7:checked +~ div > div > house > .row1.col5 > i:nth-of-type(5) { + display: block; + width: 205%; +} +.hs.row1.col4:checked +~ .hs.house.row1.col5:not(:checked) +~ .hs.house.row1.col6:not(:checked) +~ .hs.row1.col7:checked +~ div > div > house > .row1.col5 > i:nth-of-type(5):after { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #bc592f; + top: 2.75rem; + left: 3.5rem; + transform: rotate(4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem 0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} +.hs.row1.col4:checked +~ .hs.house.row1.col5:not(:checked) +~ .hs.house.row1.col6:not(:checked) +~ .hs.row1.col7:checked +~ div > div > house > .row1.col5 > i:nth-of-type(5):before { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #7dbc2f; + top: 3.25rem; + left: 13.5rem; + transform: rotate(-4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem -0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col4:after { + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col4:after { + box-shadow: -2rem 4rem 0 rgba(204, 51, 51, 0.5), 0 7rem 0 currentColor; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col4:after { + box-shadow: -2rem 3rem 0 rgba(204, 51, 51, 0.5), 0 5rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} + +.hs.row1.col1:checked ~ div > div > house > .row1.col1 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col1 { + border-bottom: none; +} +.hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row1.col2:checked ~ div > div > house > .row1.col2 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col2 { + border-bottom: none; +} +.hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row1.col3:checked ~ div > div > house > .row1.col3 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col3 { + border-bottom: none; +} +.hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row1.col4:checked ~ div > div > house > .row1.col4 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col4 { + border-bottom: none; +} +.hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row2.col1:checked ~ div > div > house > .row2.col1 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > house > .row2.col1 { + border-bottom: none; +} +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row2.col2:checked ~ div > div > house > .row2.col2 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col2 { + border-bottom: none; +} +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row2.col3:checked ~ div > div > house > .row2.col3 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col3 { + border-bottom: none; +} +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row2.col4:checked ~ div > div > house > .row2.col4 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col4 { + border-bottom: none; +} +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row3.col1:checked ~ div > div > house > .row3.col1 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ div > div > house > .row3.col1 { + border-bottom: none; +} +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row3.col2:checked ~ div > div > house > .row3.col2 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ div > div > house > .row3.col2 { + border-bottom: none; +} +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row3.col3:checked ~ div > div > house > .row3.col3 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ div > div > house > .row3.col3 { + border-bottom: none; +} +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row3.col4:checked ~ div > div > house > .row3.col4 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row4.col4:checked ~ .hs.row3.col4:checked ~ div > div > house > .row3.col4 { + border-bottom: none; +} +.hs.row4.col4:checked ~ .hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row2.col1:checked +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ div > div > house > .row2.col2 > i:nth-of-type(5) { + display: block; + width: 105%; +} + +.hs.row2.col1:checked +~ .hs.house.row2.col2:not(:checked) +~ .hs.shed.row2.col3:checked +~ div > div > house > .row2.col2 > i:nth-of-type(5) { + display: block; + width: 115%; +} + +.hs.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.row2.col4:checked +~ div > div > house > .row2.col3 > i:nth-of-type(5) { + display: block; + width: 105%; +} + +.hs.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.shed.row2.col4:checked +~ div > div > house > .row2.col3 > i:nth-of-type(5) { + display: block; + width: 115%; +} + +.hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.row2.col5:checked +~ div > div > house > .row2.col4 > i:nth-of-type(5) { + display: block; + width: 105%; +} + +.hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.shed.row2.col5:checked +~ div > div > house > .row2.col4 > i:nth-of-type(5) { + display: block; + width: 115%; +} + +.hs.row2.col4:checked +~ .hs.house.row2.col5:not(:checked) +~ .hs.row2.col6:checked +~ div > div > house > .row2.col5 > i:nth-of-type(5) { + display: block; + width: 105%; +} + +.hs.row2.col4:checked +~ .hs.house.row2.col5:not(:checked) +~ .hs.shed.row2.col6:checked +~ div > div > house > .row2.col5 > i:nth-of-type(5) { + display: block; + width: 115%; +} + +.hs.row2.col1:checked +~ .hs.house.row2.col2:not(:checked) +~ .hs.house.row2.col3:not(:checked) +~ .hs.row2.col4:checked +~ div > div > house > .row2.col2 > i:nth-of-type(5) { + display: block; + width: 205%; +} +.hs.row2.col1:checked +~ .hs.house.row2.col2:not(:checked) +~ .hs.house.row2.col3:not(:checked) +~ .hs.row2.col4:checked +~ div > div > house > .row2.col2 > i:nth-of-type(5):after { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #bc592f; + top: 2.75rem; + left: 3.5rem; + transform: rotate(4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem 0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} +.hs.row2.col1:checked +~ .hs.house.row2.col2:not(:checked) +~ .hs.house.row2.col3:not(:checked) +~ .hs.row2.col4:checked +~ div > div > house > .row2.col2 > i:nth-of-type(5):before { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #7dbc2f; + top: 3.25rem; + left: 13.5rem; + transform: rotate(-4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem -0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col1:after { + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor; +} + +.hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col1:after { + box-shadow: -2rem 4rem 0 rgba(204, 51, 51, 0.5), 0 7rem 0 currentColor; +} + +.hs.row2.col0:checked ~ .hs.row2.col1:checked ~ div > div > house > .row2.col1:after { + box-shadow: -2rem 3rem 0 rgba(204, 51, 51, 0.5), 0 5rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} + +.hs.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row2.col4:not(:checked) +~ .hs.row2.col5:checked +~ div > div > house > .row2.col3 > i:nth-of-type(5) { + display: block; + width: 205%; +} +.hs.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row2.col4:not(:checked) +~ .hs.row2.col5:checked +~ div > div > house > .row2.col3 > i:nth-of-type(5):after { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #bc592f; + top: 2.75rem; + left: 3.5rem; + transform: rotate(4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem 0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} +.hs.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row2.col4:not(:checked) +~ .hs.row2.col5:checked +~ div > div > house > .row2.col3 > i:nth-of-type(5):before { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #7dbc2f; + top: 3.25rem; + left: 13.5rem; + transform: rotate(-4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem -0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col2:after { + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col2:after { + box-shadow: -2rem 6rem 0 rgba(204, 51, 51, 0.5), 0 8rem 0 currentColor; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col2:after { + box-shadow: -2rem 3rem 0 rgba(204, 51, 51, 0.5), 0 5rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} + +.hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row2.col5:not(:checked) +~ .hs.row2.col6:checked +~ div > div > house > .row2.col4 > i:nth-of-type(5) { + display: block; + width: 205%; +} +.hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row2.col5:not(:checked) +~ .hs.row2.col6:checked +~ div > div > house > .row2.col4 > i:nth-of-type(5):after { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #bc592f; + top: 2.75rem; + left: 3.5rem; + transform: rotate(4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem 0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} +.hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row2.col5:not(:checked) +~ .hs.row2.col6:checked +~ div > div > house > .row2.col4 > i:nth-of-type(5):before { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #7dbc2f; + top: 3.25rem; + left: 13.5rem; + transform: rotate(-4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem -0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col3:after { + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col3:after { + box-shadow: -2rem 5rem 0 rgba(204, 51, 51, 0.5), 0 8rem 0 currentColor; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col3:after { + box-shadow: -2rem 3rem 0 rgba(204, 51, 51, 0.5), 0 5rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} + +.hs.row2.col4:checked +~ .hs.house.row2.col5:not(:checked) +~ .hs.house.row2.col6:not(:checked) +~ .hs.row2.col7:checked +~ div > div > house > .row2.col5 > i:nth-of-type(5) { + display: block; + width: 205%; +} +.hs.row2.col4:checked +~ .hs.house.row2.col5:not(:checked) +~ .hs.house.row2.col6:not(:checked) +~ .hs.row2.col7:checked +~ div > div > house > .row2.col5 > i:nth-of-type(5):after { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #bc592f; + top: 2.75rem; + left: 3.5rem; + transform: rotate(4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem 0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} +.hs.row2.col4:checked +~ .hs.house.row2.col5:not(:checked) +~ .hs.house.row2.col6:not(:checked) +~ .hs.row2.col7:checked +~ div > div > house > .row2.col5 > i:nth-of-type(5):before { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #7dbc2f; + top: 3.25rem; + left: 13.5rem; + transform: rotate(-4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem -0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row2.col4:after { + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row2.col4:after { + box-shadow: -2rem 6rem 0 rgba(204, 51, 51, 0.5), 0 8rem 0 currentColor; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col4:after { + box-shadow: -2rem 3rem 0 rgba(204, 51, 51, 0.5), 0 5rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} + +.hs.row1.col1:checked ~ div > div > house > .row1.col1 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col1 { + border-bottom: none; +} +.hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row1.col2:checked ~ div > div > house > .row1.col2 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col2 { + border-bottom: none; +} +.hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row1.col3:checked ~ div > div > house > .row1.col3 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col3 { + border-bottom: none; +} +.hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row1.col4:checked ~ div > div > house > .row1.col4 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col4 { + border-bottom: none; +} +.hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row2.col1:checked ~ div > div > house > .row2.col1 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > house > .row2.col1 { + border-bottom: none; +} +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row2.col2:checked ~ div > div > house > .row2.col2 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col2 { + border-bottom: none; +} +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row2.col3:checked ~ div > div > house > .row2.col3 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col3 { + border-bottom: none; +} +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row2.col4:checked ~ div > div > house > .row2.col4 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col4 { + border-bottom: none; +} +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row3.col1:checked ~ div > div > house > .row3.col1 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ div > div > house > .row3.col1 { + border-bottom: none; +} +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row3.col2:checked ~ div > div > house > .row3.col2 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ div > div > house > .row3.col2 { + border-bottom: none; +} +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row3.col3:checked ~ div > div > house > .row3.col3 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ div > div > house > .row3.col3 { + border-bottom: none; +} +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row3.col4:checked ~ div > div > house > .row3.col4 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row4.col4:checked ~ .hs.row3.col4:checked ~ div > div > house > .row3.col4 { + border-bottom: none; +} +.hs.row4.col4:checked ~ .hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row3.col1:checked +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ div > div > house > .row3.col2 > i:nth-of-type(5) { + display: block; + width: 105%; +} + +.hs.row3.col1:checked +~ .hs.house.row3.col2:not(:checked) +~ .hs.shed.row3.col3:checked +~ div > div > house > .row3.col2 > i:nth-of-type(5) { + display: block; + width: 115%; +} + +.hs.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.row3.col4:checked +~ div > div > house > .row3.col3 > i:nth-of-type(5) { + display: block; + width: 105%; +} + +.hs.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.shed.row3.col4:checked +~ div > div > house > .row3.col3 > i:nth-of-type(5) { + display: block; + width: 115%; +} + +.hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.row3.col5:checked +~ div > div > house > .row3.col4 > i:nth-of-type(5) { + display: block; + width: 105%; +} + +.hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.shed.row3.col5:checked +~ div > div > house > .row3.col4 > i:nth-of-type(5) { + display: block; + width: 115%; +} + +.hs.row3.col4:checked +~ .hs.house.row3.col5:not(:checked) +~ .hs.row3.col6:checked +~ div > div > house > .row3.col5 > i:nth-of-type(5) { + display: block; + width: 105%; +} + +.hs.row3.col4:checked +~ .hs.house.row3.col5:not(:checked) +~ .hs.shed.row3.col6:checked +~ div > div > house > .row3.col5 > i:nth-of-type(5) { + display: block; + width: 115%; +} + +.hs.row3.col1:checked +~ .hs.house.row3.col2:not(:checked) +~ .hs.house.row3.col3:not(:checked) +~ .hs.row3.col4:checked +~ div > div > house > .row3.col2 > i:nth-of-type(5) { + display: block; + width: 205%; +} +.hs.row3.col1:checked +~ .hs.house.row3.col2:not(:checked) +~ .hs.house.row3.col3:not(:checked) +~ .hs.row3.col4:checked +~ div > div > house > .row3.col2 > i:nth-of-type(5):after { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #bc592f; + top: 2.75rem; + left: 3.5rem; + transform: rotate(4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem 0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} +.hs.row3.col1:checked +~ .hs.house.row3.col2:not(:checked) +~ .hs.house.row3.col3:not(:checked) +~ .hs.row3.col4:checked +~ div > div > house > .row3.col2 > i:nth-of-type(5):before { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #7dbc2f; + top: 3.25rem; + left: 13.5rem; + transform: rotate(-4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem -0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > house > .row3.col1:after { + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor; +} + +.hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > house > .row3.col1:after { + box-shadow: -2rem 5rem 0 rgba(204, 51, 51, 0.5), 0 6rem 0 currentColor; +} + +.hs.row3.col0:checked ~ .hs.row3.col1:checked ~ div > div > house > .row3.col1:after { + box-shadow: -2rem 3rem 0 rgba(204, 51, 51, 0.5), 0 5rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} + +.hs.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row3.col4:not(:checked) +~ .hs.row3.col5:checked +~ div > div > house > .row3.col3 > i:nth-of-type(5) { + display: block; + width: 205%; +} +.hs.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row3.col4:not(:checked) +~ .hs.row3.col5:checked +~ div > div > house > .row3.col3 > i:nth-of-type(5):after { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #bc592f; + top: 2.75rem; + left: 3.5rem; + transform: rotate(4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem 0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} +.hs.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row3.col4:not(:checked) +~ .hs.row3.col5:checked +~ div > div > house > .row3.col3 > i:nth-of-type(5):before { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #7dbc2f; + top: 3.25rem; + left: 13.5rem; + transform: rotate(-4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem -0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row3.col2:after { + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row3.col2:after { + box-shadow: -2rem 6rem 0 rgba(204, 51, 51, 0.5), 0 6rem 0 currentColor; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > house > .row3.col2:after { + box-shadow: -2rem 3rem 0 rgba(204, 51, 51, 0.5), 0 5rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} + +.hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row3.col5:not(:checked) +~ .hs.row3.col6:checked +~ div > div > house > .row3.col4 > i:nth-of-type(5) { + display: block; + width: 205%; +} +.hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row3.col5:not(:checked) +~ .hs.row3.col6:checked +~ div > div > house > .row3.col4 > i:nth-of-type(5):after { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #bc592f; + top: 2.75rem; + left: 3.5rem; + transform: rotate(4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem 0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} +.hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row3.col5:not(:checked) +~ .hs.row3.col6:checked +~ div > div > house > .row3.col4 > i:nth-of-type(5):before { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #7dbc2f; + top: 3.25rem; + left: 13.5rem; + transform: rotate(-4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem -0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row3.col3:after { + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row3.col3:after { + box-shadow: -2rem 5rem 0 rgba(204, 51, 51, 0.5), 0 7rem 0 currentColor; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row3.col3:after { + box-shadow: -2rem 3rem 0 rgba(204, 51, 51, 0.5), 0 5rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} + +.hs.row3.col4:checked +~ .hs.house.row3.col5:not(:checked) +~ .hs.house.row3.col6:not(:checked) +~ .hs.row3.col7:checked +~ div > div > house > .row3.col5 > i:nth-of-type(5) { + display: block; + width: 205%; +} +.hs.row3.col4:checked +~ .hs.house.row3.col5:not(:checked) +~ .hs.house.row3.col6:not(:checked) +~ .hs.row3.col7:checked +~ div > div > house > .row3.col5 > i:nth-of-type(5):after { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #bc592f; + top: 2.75rem; + left: 3.5rem; + transform: rotate(4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem 0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} +.hs.row3.col4:checked +~ .hs.house.row3.col5:not(:checked) +~ .hs.house.row3.col6:not(:checked) +~ .hs.row3.col7:checked +~ div > div > house > .row3.col5 > i:nth-of-type(5):before { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #7dbc2f; + top: 3.25rem; + left: 13.5rem; + transform: rotate(-4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem -0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row3.col4:after { + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row3.col4:after { + box-shadow: -2rem 5rem 0 rgba(204, 51, 51, 0.5), 0 8rem 0 currentColor; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row3.col4:after { + box-shadow: -2rem 3rem 0 rgba(204, 51, 51, 0.5), 0 5rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} + +.hs.row1.col1:checked ~ div > div > house > .row1.col1 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col1 { + border-bottom: none; +} +.hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row1.col2:checked ~ div > div > house > .row1.col2 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col2 { + border-bottom: none; +} +.hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row1.col3:checked ~ div > div > house > .row1.col3 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col3 { + border-bottom: none; +} +.hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row1.col4:checked ~ div > div > house > .row1.col4 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col4 { + border-bottom: none; +} +.hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row2.col1:checked ~ div > div > house > .row2.col1 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > house > .row2.col1 { + border-bottom: none; +} +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row2.col2:checked ~ div > div > house > .row2.col2 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col2 { + border-bottom: none; +} +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row2.col3:checked ~ div > div > house > .row2.col3 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col3 { + border-bottom: none; +} +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row2.col4:checked ~ div > div > house > .row2.col4 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col4 { + border-bottom: none; +} +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row3.col1:checked ~ div > div > house > .row3.col1 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ div > div > house > .row3.col1 { + border-bottom: none; +} +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row3.col2:checked ~ div > div > house > .row3.col2 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ div > div > house > .row3.col2 { + border-bottom: none; +} +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row3.col3:checked ~ div > div > house > .row3.col3 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ div > div > house > .row3.col3 { + border-bottom: none; +} +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row3.col4:checked ~ div > div > house > .row3.col4 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row4.col4:checked ~ .hs.row3.col4:checked ~ div > div > house > .row3.col4 { + border-bottom: none; +} +.hs.row4.col4:checked ~ .hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row4.col1:checked +~ .hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ div > div > house > .row4.col2 > i:nth-of-type(5) { + display: block; + width: 105%; +} + +.hs.row4.col1:checked +~ .hs.house.row4.col2:not(:checked) +~ .hs.shed.row4.col3:checked +~ div > div > house > .row4.col2 > i:nth-of-type(5) { + display: block; + width: 115%; +} + +.hs.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.row4.col4:checked +~ div > div > house > .row4.col3 > i:nth-of-type(5) { + display: block; + width: 105%; +} + +.hs.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.shed.row4.col4:checked +~ div > div > house > .row4.col3 > i:nth-of-type(5) { + display: block; + width: 115%; +} + +.hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.row4.col5:checked +~ div > div > house > .row4.col4 > i:nth-of-type(5) { + display: block; + width: 105%; +} + +.hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.shed.row4.col5:checked +~ div > div > house > .row4.col4 > i:nth-of-type(5) { + display: block; + width: 115%; +} + +.hs.row4.col4:checked +~ .hs.house.row4.col5:not(:checked) +~ .hs.row4.col6:checked +~ div > div > house > .row4.col5 > i:nth-of-type(5) { + display: block; + width: 105%; +} + +.hs.row4.col4:checked +~ .hs.house.row4.col5:not(:checked) +~ .hs.shed.row4.col6:checked +~ div > div > house > .row4.col5 > i:nth-of-type(5) { + display: block; + width: 115%; +} + +.hs.row4.col1:checked +~ .hs.house.row4.col2:not(:checked) +~ .hs.house.row4.col3:not(:checked) +~ .hs.row4.col4:checked +~ div > div > house > .row4.col2 > i:nth-of-type(5) { + display: block; + width: 205%; +} +.hs.row4.col1:checked +~ .hs.house.row4.col2:not(:checked) +~ .hs.house.row4.col3:not(:checked) +~ .hs.row4.col4:checked +~ div > div > house > .row4.col2 > i:nth-of-type(5):after { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #bc592f; + top: 2.75rem; + left: 3.5rem; + transform: rotate(4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem 0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} +.hs.row4.col1:checked +~ .hs.house.row4.col2:not(:checked) +~ .hs.house.row4.col3:not(:checked) +~ .hs.row4.col4:checked +~ div > div > house > .row4.col2 > i:nth-of-type(5):before { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #7dbc2f; + top: 3.25rem; + left: 13.5rem; + transform: rotate(-4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem -0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} + +.hs.row4.col1:checked ~ .hs.row4.col2:checked ~ div > div > house > .row4.col1:after { + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor; +} + +.hs.row4.col0:checked ~ .hs.row4.col1:checked ~ .hs.row4.col2:checked ~ div > div > house > .row4.col1:after { + box-shadow: -2rem 4rem 0 rgba(204, 51, 51, 0.5), 0 8rem 0 currentColor; +} + +.hs.row4.col0:checked ~ .hs.row4.col1:checked ~ div > div > house > .row4.col1:after { + box-shadow: -2rem 3rem 0 rgba(204, 51, 51, 0.5), 0 5rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} + +.hs.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row4.col4:not(:checked) +~ .hs.row4.col5:checked +~ div > div > house > .row4.col3 > i:nth-of-type(5) { + display: block; + width: 205%; +} +.hs.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row4.col4:not(:checked) +~ .hs.row4.col5:checked +~ div > div > house > .row4.col3 > i:nth-of-type(5):after { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #bc592f; + top: 2.75rem; + left: 3.5rem; + transform: rotate(4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem 0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} +.hs.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row4.col4:not(:checked) +~ .hs.row4.col5:checked +~ div > div > house > .row4.col3 > i:nth-of-type(5):before { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #7dbc2f; + top: 3.25rem; + left: 13.5rem; + transform: rotate(-4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem -0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} + +.hs.row4.col2:checked ~ .hs.row4.col3:checked ~ div > div > house > .row4.col2:after { + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor; +} + +.hs.row4.col1:checked ~ .hs.row4.col2:checked ~ .hs.row4.col3:checked ~ div > div > house > .row4.col2:after { + box-shadow: -2rem 5rem 0 rgba(204, 51, 51, 0.5), 0 6rem 0 currentColor; +} + +.hs.row4.col1:checked ~ .hs.row4.col2:checked ~ div > div > house > .row4.col2:after { + box-shadow: -2rem 3rem 0 rgba(204, 51, 51, 0.5), 0 5rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} + +.hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row4.col5:not(:checked) +~ .hs.row4.col6:checked +~ div > div > house > .row4.col4 > i:nth-of-type(5) { + display: block; + width: 205%; +} +.hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row4.col5:not(:checked) +~ .hs.row4.col6:checked +~ div > div > house > .row4.col4 > i:nth-of-type(5):after { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #bc592f; + top: 2.75rem; + left: 3.5rem; + transform: rotate(4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem 0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} +.hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row4.col5:not(:checked) +~ .hs.row4.col6:checked +~ div > div > house > .row4.col4 > i:nth-of-type(5):before { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #7dbc2f; + top: 3.25rem; + left: 13.5rem; + transform: rotate(-4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem -0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} + +.hs.row4.col3:checked ~ .hs.row4.col4:checked ~ div > div > house > .row4.col3:after { + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor; +} + +.hs.row4.col2:checked ~ .hs.row4.col3:checked ~ .hs.row4.col4:checked ~ div > div > house > .row4.col3:after { + box-shadow: -2rem 6rem 0 rgba(204, 51, 51, 0.5), 0 6rem 0 currentColor; +} + +.hs.row4.col2:checked ~ .hs.row4.col3:checked ~ div > div > house > .row4.col3:after { + box-shadow: -2rem 3rem 0 rgba(204, 51, 51, 0.5), 0 5rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} + +.hs.row4.col4:checked +~ .hs.house.row4.col5:not(:checked) +~ .hs.house.row4.col6:not(:checked) +~ .hs.row4.col7:checked +~ div > div > house > .row4.col5 > i:nth-of-type(5) { + display: block; + width: 205%; +} +.hs.row4.col4:checked +~ .hs.house.row4.col5:not(:checked) +~ .hs.house.row4.col6:not(:checked) +~ .hs.row4.col7:checked +~ div > div > house > .row4.col5 > i:nth-of-type(5):after { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #bc592f; + top: 2.75rem; + left: 3.5rem; + transform: rotate(4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem 0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} +.hs.row4.col4:checked +~ .hs.house.row4.col5:not(:checked) +~ .hs.house.row4.col6:not(:checked) +~ .hs.row4.col7:checked +~ div > div > house > .row4.col5 > i:nth-of-type(5):before { + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #7dbc2f; + top: 3.25rem; + left: 13.5rem; + transform: rotate(-4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem -0.1rem 0 #bc2f60) drop-shadow(5rem 0 0 #bc592f); +} + +.hs.row4.col4:checked ~ .hs.row4.col5:checked ~ div > div > house > .row4.col4:after { + box-shadow: 0 2rem 0 currentColor, 0 4rem 0 currentColor, 0 6rem 0 currentColor, 0 8rem 0 currentColor, 0 10rem 0 currentColor; +} + +.hs.row4.col3:checked ~ .hs.row4.col4:checked ~ .hs.row4.col5:checked ~ div > div > house > .row4.col4:after { + box-shadow: -2rem 6rem 0 rgba(204, 51, 51, 0.5), 0 7rem 0 currentColor; +} + +.hs.row4.col3:checked ~ .hs.row4.col4:checked ~ div > div > house > .row4.col4:after { + box-shadow: -2rem 3rem 0 rgba(204, 51, 51, 0.5), 0 5rem 0 currentColor, 10.75rem 0 0 currentColor, 10.75rem 2rem 0 currentColor, 10.75rem 4rem 0 currentColor, 10.75rem 6rem 0 currentColor, 10.75rem 8rem 0 currentColor, 10.75rem 10rem 0 currentColor; +} + +.hs.row1.col1:checked ~ div > div > house > .row1.col1 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col1 { + border-bottom: none; +} +.hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row1.col2:checked ~ div > div > house > .row1.col2 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col2 { + border-bottom: none; +} +.hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row1.col3:checked ~ div > div > house > .row1.col3 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col3 { + border-bottom: none; +} +.hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row1.col4:checked ~ div > div > house > .row1.col4 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col4 { + border-bottom: none; +} +.hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row2.col1:checked ~ div > div > house > .row2.col1 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > house > .row2.col1 { + border-bottom: none; +} +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row2.col2:checked ~ div > div > house > .row2.col2 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col2 { + border-bottom: none; +} +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row2.col3:checked ~ div > div > house > .row2.col3 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col3 { + border-bottom: none; +} +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row2.col4:checked ~ div > div > house > .row2.col4 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col4 { + border-bottom: none; +} +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row3.col1:checked ~ div > div > house > .row3.col1 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ div > div > house > .row3.col1 { + border-bottom: none; +} +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row3.col2:checked ~ div > div > house > .row3.col2 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ div > div > house > .row3.col2 { + border-bottom: none; +} +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row3.col3:checked ~ div > div > house > .row3.col3 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ div > div > house > .row3.col3 { + border-bottom: none; +} +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(3) { + display: none !important; +} + +.hs.row3.col4:checked ~ div > div > house > .row3.col4 { + border-bottom: 0.75rem solid #20112a; +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(3) { + width: 2rem; + height: 325%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + top: 12rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); + z-index: -200; +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(3):before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed rgba(255, 255, 255, 0); + border-bottom-color: #20112a; + box-shadow: 0 0.75rem 0 #20112a, inset 0 -0.75rem 0 #20112a; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(3):after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid #20112a; + border-right: 0.75rem solid #20112a; + left: 9.8rem; + background: repeating-linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 4rem, #20112a, #20112a 4.5rem); +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; +} + +.hs.row4.col4:checked ~ .hs.row3.col4:checked ~ div > div > house > .row3.col4 { + border-bottom: none; +} +.hs.row4.col4:checked ~ .hs.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(3) { + display: none !important; +} + +[id^="cb23"]:checked ~ div > div > house > [for="ncb23"] { + box-shadow: 0 0.5rem 0 #bc2f2f; +} +[id^="cb23"]:checked ~ div > div > house > [for="ncb23"] > i:nth-of-type(3) { + width: 4rem; + height: 9rem; + right: 0; + margin: auto; + top: 3.5rem; + border-radius: 0.5rem; +} +[id^="cb23"]:checked ~ div > div > house > [for="ncb23"] > i:nth-of-type(3):before { + width: 7rem; + height: 4rem; + left: -8em; + top: 6rem; + border-radius: 50% 50% 1rem 1rem / 80% 80% 1rem 1rem; + background: #7dbc2f; + box-shadow: 3rem 1rem 0 -1rem #81bc2f, 14rem 0.5rem 0 -0.5rem #bca52f, 10rem 1rem 0 -1.25rem #7dbc2f; +} +[id^="cb23"]:checked ~ div > div > house > [for="ncb23"] > i:nth-of-type(3):after { + width: 0.75rem; + height: 0.75rem; + background: #fff; + border-radius: 50%; + left: -5rem; + top: 7rem; + box-shadow: 2rem 0.5rem 0 -0.1rem #fff, 1rem 1.5rem 0 -0.05rem #fff, 15rem 1.5rem 0 -0.05rem #fff, 16rem 1rem 0 -0.1rem #fff; +} +[id^="cb23"]:checked ~ div > div > house > [for="ncb23"].col3 > i:nth-of-type(3):before { + height: 3rem; + left: -8.5em; + top: 7rem; + background: #7dbc2f; + box-shadow: 3rem 0.75rem 0 -1rem #81bc2f, 14rem 1rem 0 0.5rem #7dbc2f, 10rem 0.5rem 0 -0.5rem #bca52f; +} +[id^="cb23"]:checked ~ div > div > house > [for="ncb23"].col3 > i:nth-of-type(3):after { + left: -7rem; +} +[id^="cb23"]:checked ~ div > div > house > [for="ncb23"].col2 > i:nth-of-type(3):before { + height: 3.5rem; + width: 6rem; + left: -7em; + top: 6.5rem; + background: #7dbc2f; + box-shadow: 3rem 0.75rem 0 -1rem #81bc2f, 13rem 1rem 0 0.5rem #bca52f, 9rem 0.5rem 0 -0.5rem #81bc2f; +} +[id^="cb23"]:checked ~ div > div > house > [for="ncb23"].col2 > i:nth-of-type(3):after { + left: -7rem; +} +[id^="cb23"]:checked ~ div > div > house > [for="ncb23"].col1 > i:nth-of-type(3):before { + width: 6rem; + height: 3rem; + left: -6.5em; + top: 7rem; + border-radius: 50% 50% 1rem 1rem / 80% 80% 1rem 1rem; + background: #81bc2f; + box-shadow: 3rem 0.5rem 0 -0.75rem #7dbc2f, 9rem 0.5rem 0 -0.5rem #7dbc2f, 12rem -0.25rem 0 0.5rem #bca52f; +} +[id^="cb23"]:checked ~ div > div > house > [for="ncb23"].col1 > i:nth-of-type(3):after { + width: 0.75rem; + height: 0.75rem; + background: #fff; + border-radius: 50%; + left: -5rem; + top: 7rem; + box-shadow: 2rem 0.5rem 0 -0.1rem #fff, 1rem 0.75rem 0 -0.05rem #fff, 16rem 1.5rem 0 -0.05rem #fff, 15rem 1rem 0 -0.1rem #fff; +} + +#cb23:checked +~ #cb24:not(:checked) +~ div +> div +> house +> [for="ncb23"] > i:nth-of-type(3), +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"] > i:nth-of-type(3), +#cb26:checked ~ div > div > house > [for="ncb26"] > i:nth-of-type(3) { + background: radial-gradient(circle at 80% center, #bc2f60 0.25rem, rgba(255, 255, 255, 0) 0.25rem), radial-gradient(circle at 81% 52%, rgba(79, 1, 14, 0.75) 0.25rem, rgba(255, 255, 255, 0) 0.4rem), #6a1b37; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); +} +#cb23:checked +~ #cb24:not(:checked) +~ div +> div +> house +> [for="ncb23"].col1 > i:nth-of-type(3), +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"].col1 > i:nth-of-type(3), +#cb26:checked ~ div > div > house > [for="ncb26"].col1 > i:nth-of-type(3) { + background: radial-gradient(circle at 80% center, #bc2f60 0.25rem, rgba(255, 255, 255, 0) 0.25rem), radial-gradient(circle at 81% 52%, rgba(79, 1, 14, 0.75) 0.25rem, rgba(255, 255, 255, 0) 0.4rem), #683f44; +} +#cb23:checked +~ #cb24:not(:checked) +~ div +> div +> house +> [for="ncb23"].col1 > i:nth-of-type(3), +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"].col1 > i:nth-of-type(3), +#cb26:checked ~ div > div > house > [for="ncb26"].col1 > i:nth-of-type(3) { + background: radial-gradient(circle at 80% center, #bc2f60 0.25rem, rgba(255, 255, 255, 0) 0.25rem), radial-gradient(circle at 81% 52%, rgba(79, 1, 14, 0.75) 0.25rem, rgba(255, 255, 255, 0) 0.4rem), #252529; +} +#cb23:checked +~ #cb24:not(:checked) +~ div +> div +> house +> [for="ncb23"] > i:nth-of-type(4), +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"] > i:nth-of-type(4), +#cb26:checked ~ div > div > house > [for="ncb26"] > i:nth-of-type(4) { + transform: scale(0.5); + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem #6a1b37, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 0 -2rem 0 #000, inset 0 -3.5rem 0 #20112a; +} +#cb23:checked +~ #cb24:not(:checked) +~ div +> div +> house +> [for="ncb23"] > i:nth-of-type(4):after, +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"] > i:nth-of-type(4):after, +#cb26:checked ~ div > div > house > [for="ncb26"] > i:nth-of-type(4):after { + height: 0.5rem; + top: 2.3rem; + background: #6a1b37; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +#cb23:checked +~ #cb24:not(:checked) +~ div +> div +> house +> [for="ncb23"] > i:nth-of-type(4):before, +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"] > i:nth-of-type(4):before, +#cb26:checked ~ div > div > house > [for="ncb26"] > i:nth-of-type(4):before { + width: 0.5rem; + left: 2.3rem; + background: #6a1b37; +} + +[id^="cb24"]:checked ~ div > div > house > [for="ncb24"] { + box-shadow: 0 0.5rem 0 #bc2f2f; +} +[id^="cb24"]:checked ~ div > div > house > [for="ncb24"] > i:nth-of-type(3) { + width: 4rem; + height: 9rem; + right: 0; + margin: auto; + top: 3.5rem; + border-radius: 0.5rem; +} +[id^="cb24"]:checked ~ div > div > house > [for="ncb24"] > i:nth-of-type(3):before { + width: 7rem; + height: 4rem; + left: -8em; + top: 6rem; + border-radius: 50% 50% 1rem 1rem / 80% 80% 1rem 1rem; + background: #7dbc2f; + box-shadow: 3rem 1rem 0 -1rem #81bc2f, 14rem 0.5rem 0 -0.5rem #bca52f, 10rem 1rem 0 -1.25rem #7dbc2f; +} +[id^="cb24"]:checked ~ div > div > house > [for="ncb24"] > i:nth-of-type(3):after { + width: 0.75rem; + height: 0.75rem; + background: #fff; + border-radius: 50%; + left: -5rem; + top: 7rem; + box-shadow: 2rem 0.5rem 0 -0.1rem #fff, 1rem 1.5rem 0 -0.05rem #fff, 15rem 1.5rem 0 -0.05rem #fff, 16rem 1rem 0 -0.1rem #fff; +} +[id^="cb24"]:checked ~ div > div > house > [for="ncb24"].col3 > i:nth-of-type(3):before { + height: 3rem; + left: -8.5em; + top: 7rem; + background: #7dbc2f; + box-shadow: 3rem 0.75rem 0 -1rem #81bc2f, 14rem 1rem 0 0.5rem #7dbc2f, 10rem 0.5rem 0 -0.5rem #bca52f; +} +[id^="cb24"]:checked ~ div > div > house > [for="ncb24"].col3 > i:nth-of-type(3):after { + left: -7rem; +} +[id^="cb24"]:checked ~ div > div > house > [for="ncb24"].col2 > i:nth-of-type(3):before { + height: 3.5rem; + width: 6rem; + left: -7em; + top: 6.5rem; + background: #7dbc2f; + box-shadow: 3rem 0.75rem 0 -1rem #81bc2f, 13rem 1rem 0 0.5rem #bca52f, 9rem 0.5rem 0 -0.5rem #81bc2f; +} +[id^="cb24"]:checked ~ div > div > house > [for="ncb24"].col2 > i:nth-of-type(3):after { + left: -7rem; +} +[id^="cb24"]:checked ~ div > div > house > [for="ncb24"].col1 > i:nth-of-type(3):before { + width: 6rem; + height: 3rem; + left: -6.5em; + top: 7rem; + border-radius: 50% 50% 1rem 1rem / 80% 80% 1rem 1rem; + background: #81bc2f; + box-shadow: 3rem 0.5rem 0 -0.75rem #7dbc2f, 9rem 0.5rem 0 -0.5rem #7dbc2f, 12rem -0.25rem 0 0.5rem #bca52f; +} +[id^="cb24"]:checked ~ div > div > house > [for="ncb24"].col1 > i:nth-of-type(3):after { + width: 0.75rem; + height: 0.75rem; + background: #fff; + border-radius: 50%; + left: -5rem; + top: 7rem; + box-shadow: 2rem 0.5rem 0 -0.1rem #fff, 1rem 0.75rem 0 -0.05rem #fff, 16rem 1.5rem 0 -0.05rem #fff, 15rem 1rem 0 -0.1rem #fff; +} + +#cb24:checked +~ #cb25:not(:checked) +~ div +> div +> house +> [for="ncb24"] > i:nth-of-type(3), +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"] > i:nth-of-type(3), +#cb26:checked ~ div > div > house > [for="ncb26"] > i:nth-of-type(3) { + background: radial-gradient(circle at 80% center, #bc2f60 0.25rem, rgba(255, 255, 255, 0) 0.25rem), radial-gradient(circle at 81% 52%, rgba(79, 1, 14, 0.75) 0.25rem, rgba(255, 255, 255, 0) 0.4rem), #6a1b37; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); +} +#cb24:checked +~ #cb25:not(:checked) +~ div +> div +> house +> [for="ncb24"].col3 > i:nth-of-type(3), +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"].col3 > i:nth-of-type(3), +#cb26:checked ~ div > div > house > [for="ncb26"].col3 > i:nth-of-type(3) { + background: radial-gradient(circle at 80% center, #bc2f60 0.25rem, rgba(255, 255, 255, 0) 0.25rem), radial-gradient(circle at 81% 52%, rgba(79, 1, 14, 0.75) 0.25rem, rgba(255, 255, 255, 0) 0.4rem), #683f44; +} +#cb24:checked +~ #cb25:not(:checked) +~ div +> div +> house +> [for="ncb24"].col1 > i:nth-of-type(3), +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"].col1 > i:nth-of-type(3), +#cb26:checked ~ div > div > house > [for="ncb26"].col1 > i:nth-of-type(3) { + background: radial-gradient(circle at 80% center, #bc2f60 0.25rem, rgba(255, 255, 255, 0) 0.25rem), radial-gradient(circle at 81% 52%, rgba(79, 1, 14, 0.75) 0.25rem, rgba(255, 255, 255, 0) 0.4rem), #252529; +} +#cb24:checked +~ #cb25:not(:checked) +~ div +> div +> house +> [for="ncb24"] > i:nth-of-type(4), +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"] > i:nth-of-type(4), +#cb26:checked ~ div > div > house > [for="ncb26"] > i:nth-of-type(4) { + transform: scale(0.5); + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem #6a1b37, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 0 -2rem 0 #000, inset 0 -3.5rem 0 #20112a; +} +#cb24:checked +~ #cb25:not(:checked) +~ div +> div +> house +> [for="ncb24"] > i:nth-of-type(4):after, +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"] > i:nth-of-type(4):after, +#cb26:checked ~ div > div > house > [for="ncb26"] > i:nth-of-type(4):after { + height: 0.5rem; + top: 2.3rem; + background: #6a1b37; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +#cb24:checked +~ #cb25:not(:checked) +~ div +> div +> house +> [for="ncb24"] > i:nth-of-type(4):before, +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"] > i:nth-of-type(4):before, +#cb26:checked ~ div > div > house > [for="ncb26"] > i:nth-of-type(4):before { + width: 0.5rem; + left: 2.3rem; + background: #6a1b37; +} + +[id^="cb25"]:checked ~ div > div > house > [for="ncb25"] { + box-shadow: 0 0.5rem 0 #bc2f2f; +} +[id^="cb25"]:checked ~ div > div > house > [for="ncb25"] > i:nth-of-type(3) { + width: 4rem; + height: 9rem; + right: 0; + margin: auto; + top: 3.5rem; + border-radius: 0.5rem; +} +[id^="cb25"]:checked ~ div > div > house > [for="ncb25"] > i:nth-of-type(3):before { + width: 7rem; + height: 4rem; + left: -8em; + top: 6rem; + border-radius: 50% 50% 1rem 1rem / 80% 80% 1rem 1rem; + background: #7dbc2f; + box-shadow: 3rem 1rem 0 -1rem #81bc2f, 14rem 0.5rem 0 -0.5rem #bca52f, 10rem 1rem 0 -1.25rem #7dbc2f; +} +[id^="cb25"]:checked ~ div > div > house > [for="ncb25"] > i:nth-of-type(3):after { + width: 0.75rem; + height: 0.75rem; + background: #fff; + border-radius: 50%; + left: -5rem; + top: 7rem; + box-shadow: 2rem 0.5rem 0 -0.1rem #fff, 1rem 1.5rem 0 -0.05rem #fff, 15rem 1.5rem 0 -0.05rem #fff, 16rem 1rem 0 -0.1rem #fff; +} +[id^="cb25"]:checked ~ div > div > house > [for="ncb25"].col3 > i:nth-of-type(3):before { + height: 3rem; + left: -8.5em; + top: 7rem; + background: #7dbc2f; + box-shadow: 3rem 0.75rem 0 -1rem #81bc2f, 14rem 1rem 0 0.5rem #7dbc2f, 10rem 0.5rem 0 -0.5rem #bca52f; +} +[id^="cb25"]:checked ~ div > div > house > [for="ncb25"].col3 > i:nth-of-type(3):after { + left: -7rem; +} +[id^="cb25"]:checked ~ div > div > house > [for="ncb25"].col2 > i:nth-of-type(3):before { + height: 3.5rem; + width: 6rem; + left: -7em; + top: 6.5rem; + background: #7dbc2f; + box-shadow: 3rem 0.75rem 0 -1rem #81bc2f, 13rem 1rem 0 0.5rem #bca52f, 9rem 0.5rem 0 -0.5rem #81bc2f; +} +[id^="cb25"]:checked ~ div > div > house > [for="ncb25"].col2 > i:nth-of-type(3):after { + left: -7rem; +} +[id^="cb25"]:checked ~ div > div > house > [for="ncb25"].col1 > i:nth-of-type(3):before { + width: 6rem; + height: 3rem; + left: -6.5em; + top: 7rem; + border-radius: 50% 50% 1rem 1rem / 80% 80% 1rem 1rem; + background: #81bc2f; + box-shadow: 3rem 0.5rem 0 -0.75rem #7dbc2f, 9rem 0.5rem 0 -0.5rem #7dbc2f, 12rem -0.25rem 0 0.5rem #bca52f; +} +[id^="cb25"]:checked ~ div > div > house > [for="ncb25"].col1 > i:nth-of-type(3):after { + width: 0.75rem; + height: 0.75rem; + background: #fff; + border-radius: 50%; + left: -5rem; + top: 7rem; + box-shadow: 2rem 0.5rem 0 -0.1rem #fff, 1rem 0.75rem 0 -0.05rem #fff, 16rem 1.5rem 0 -0.05rem #fff, 15rem 1rem 0 -0.1rem #fff; +} + +#cb25:checked +~ #cb26:not(:checked) +~ div +> div +> house +> [for="ncb25"] > i:nth-of-type(3), +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"] > i:nth-of-type(3), +#cb26:checked ~ div > div > house > [for="ncb26"] > i:nth-of-type(3) { + background: radial-gradient(circle at 80% center, #bc2f60 0.25rem, rgba(255, 255, 255, 0) 0.25rem), radial-gradient(circle at 81% 52%, rgba(79, 1, 14, 0.75) 0.25rem, rgba(255, 255, 255, 0) 0.4rem), #6a1b37; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); +} +#cb25:checked +~ #cb26:not(:checked) +~ div +> div +> house +> [for="ncb25"].col4 > i:nth-of-type(3), +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"].col4 > i:nth-of-type(3), +#cb26:checked ~ div > div > house > [for="ncb26"].col4 > i:nth-of-type(3) { + background: radial-gradient(circle at 80% center, #bc2f60 0.25rem, rgba(255, 255, 255, 0) 0.25rem), radial-gradient(circle at 81% 52%, rgba(79, 1, 14, 0.75) 0.25rem, rgba(255, 255, 255, 0) 0.4rem), #683f44; +} +#cb25:checked +~ #cb26:not(:checked) +~ div +> div +> house +> [for="ncb25"].col2 > i:nth-of-type(3), +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"].col2 > i:nth-of-type(3), +#cb26:checked ~ div > div > house > [for="ncb26"].col2 > i:nth-of-type(3) { + background: radial-gradient(circle at 80% center, #bc2f60 0.25rem, rgba(255, 255, 255, 0) 0.25rem), radial-gradient(circle at 81% 52%, rgba(79, 1, 14, 0.75) 0.25rem, rgba(255, 255, 255, 0) 0.4rem), #252529; +} +#cb25:checked +~ #cb26:not(:checked) +~ div +> div +> house +> [for="ncb25"] > i:nth-of-type(4), +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"] > i:nth-of-type(4), +#cb26:checked ~ div > div > house > [for="ncb26"] > i:nth-of-type(4) { + transform: scale(0.5); + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem #6a1b37, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 0 -2rem 0 #000, inset 0 -3.5rem 0 #20112a; +} +#cb25:checked +~ #cb26:not(:checked) +~ div +> div +> house +> [for="ncb25"] > i:nth-of-type(4):after, +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"] > i:nth-of-type(4):after, +#cb26:checked ~ div > div > house > [for="ncb26"] > i:nth-of-type(4):after { + height: 0.5rem; + top: 2.3rem; + background: #6a1b37; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +#cb25:checked +~ #cb26:not(:checked) +~ div +> div +> house +> [for="ncb25"] > i:nth-of-type(4):before, +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"] > i:nth-of-type(4):before, +#cb26:checked ~ div > div > house > [for="ncb26"] > i:nth-of-type(4):before { + width: 0.5rem; + left: 2.3rem; + background: #6a1b37; +} + +[id^="cb26"]:checked ~ div > div > house > [for="ncb26"] { + box-shadow: 0 0.5rem 0 #bc2f2f; +} +[id^="cb26"]:checked ~ div > div > house > [for="ncb26"] > i:nth-of-type(3) { + width: 4rem; + height: 9rem; + right: 0; + margin: auto; + top: 3.5rem; + border-radius: 0.5rem; +} +[id^="cb26"]:checked ~ div > div > house > [for="ncb26"] > i:nth-of-type(3):before { + width: 7rem; + height: 4rem; + left: -8em; + top: 6rem; + border-radius: 50% 50% 1rem 1rem / 80% 80% 1rem 1rem; + background: #7dbc2f; + box-shadow: 3rem 1rem 0 -1rem #81bc2f, 14rem 0.5rem 0 -0.5rem #bca52f, 10rem 1rem 0 -1.25rem #7dbc2f; +} +[id^="cb26"]:checked ~ div > div > house > [for="ncb26"] > i:nth-of-type(3):after { + width: 0.75rem; + height: 0.75rem; + background: #fff; + border-radius: 50%; + left: -5rem; + top: 7rem; + box-shadow: 2rem 0.5rem 0 -0.1rem #fff, 1rem 1.5rem 0 -0.05rem #fff, 15rem 1.5rem 0 -0.05rem #fff, 16rem 1rem 0 -0.1rem #fff; +} +[id^="cb26"]:checked ~ div > div > house > [for="ncb26"].col3 > i:nth-of-type(3):before { + height: 3rem; + left: -8.5em; + top: 7rem; + background: #7dbc2f; + box-shadow: 3rem 0.75rem 0 -1rem #81bc2f, 14rem 1rem 0 0.5rem #7dbc2f, 10rem 0.5rem 0 -0.5rem #bca52f; +} +[id^="cb26"]:checked ~ div > div > house > [for="ncb26"].col3 > i:nth-of-type(3):after { + left: -7rem; +} +[id^="cb26"]:checked ~ div > div > house > [for="ncb26"].col2 > i:nth-of-type(3):before { + height: 3.5rem; + width: 6rem; + left: -7em; + top: 6.5rem; + background: #7dbc2f; + box-shadow: 3rem 0.75rem 0 -1rem #81bc2f, 13rem 1rem 0 0.5rem #bca52f, 9rem 0.5rem 0 -0.5rem #81bc2f; +} +[id^="cb26"]:checked ~ div > div > house > [for="ncb26"].col2 > i:nth-of-type(3):after { + left: -7rem; +} +[id^="cb26"]:checked ~ div > div > house > [for="ncb26"].col1 > i:nth-of-type(3):before { + width: 6rem; + height: 3rem; + left: -6.5em; + top: 7rem; + border-radius: 50% 50% 1rem 1rem / 80% 80% 1rem 1rem; + background: #81bc2f; + box-shadow: 3rem 0.5rem 0 -0.75rem #7dbc2f, 9rem 0.5rem 0 -0.5rem #7dbc2f, 12rem -0.25rem 0 0.5rem #bca52f; +} +[id^="cb26"]:checked ~ div > div > house > [for="ncb26"].col1 > i:nth-of-type(3):after { + width: 0.75rem; + height: 0.75rem; + background: #fff; + border-radius: 50%; + left: -5rem; + top: 7rem; + box-shadow: 2rem 0.5rem 0 -0.1rem #fff, 1rem 0.75rem 0 -0.05rem #fff, 16rem 1.5rem 0 -0.05rem #fff, 15rem 1rem 0 -0.1rem #fff; +} + +#cb26:checked +~ #cb27:not(:checked) +~ div +> div +> house +> [for="ncb26"] > i:nth-of-type(3), +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"] > i:nth-of-type(3), +#cb26:checked ~ div > div > house > [for="ncb26"] > i:nth-of-type(3) { + background: radial-gradient(circle at 80% center, #bc2f60 0.25rem, rgba(255, 255, 255, 0) 0.25rem), radial-gradient(circle at 81% 52%, rgba(79, 1, 14, 0.75) 0.25rem, rgba(255, 255, 255, 0) 0.4rem), #6a1b37; + box-shadow: inset 0 0.5rem 1rem rgba(79, 1, 14, 0.75); +} +#cb26:checked +~ #cb27:not(:checked) +~ div +> div +> house +> [for="ncb26"].col4 > i:nth-of-type(3), +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"].col4 > i:nth-of-type(3), +#cb26:checked ~ div > div > house > [for="ncb26"].col4 > i:nth-of-type(3) { + background: radial-gradient(circle at 80% center, #bc2f60 0.25rem, rgba(255, 255, 255, 0) 0.25rem), radial-gradient(circle at 81% 52%, rgba(79, 1, 14, 0.75) 0.25rem, rgba(255, 255, 255, 0) 0.4rem), #683f44; +} +#cb26:checked +~ #cb27:not(:checked) +~ div +> div +> house +> [for="ncb26"].col1 > i:nth-of-type(3), +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"].col1 > i:nth-of-type(3), +#cb26:checked ~ div > div > house > [for="ncb26"].col1 > i:nth-of-type(3) { + background: radial-gradient(circle at 80% center, #bc2f60 0.25rem, rgba(255, 255, 255, 0) 0.25rem), radial-gradient(circle at 81% 52%, rgba(79, 1, 14, 0.75) 0.25rem, rgba(255, 255, 255, 0) 0.4rem), #252529; +} +#cb26:checked +~ #cb27:not(:checked) +~ div +> div +> house +> [for="ncb26"] > i:nth-of-type(4), +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"] > i:nth-of-type(4), +#cb26:checked ~ div > div > house > [for="ncb26"] > i:nth-of-type(4) { + transform: scale(0.5); + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem #6a1b37, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 0 -2rem 0 #000, inset 0 -3.5rem 0 #20112a; +} +#cb26:checked +~ #cb27:not(:checked) +~ div +> div +> house +> [for="ncb26"] > i:nth-of-type(4):after, +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"] > i:nth-of-type(4):after, +#cb26:checked ~ div > div > house > [for="ncb26"] > i:nth-of-type(4):after { + height: 0.5rem; + top: 2.3rem; + background: #6a1b37; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +#cb26:checked +~ #cb27:not(:checked) +~ div +> div +> house +> [for="ncb26"] > i:nth-of-type(4):before, +#cb23:checked +~ #cb24:checked +~ #cb25:checked +~ #cb26:checked +~ div +> div +> house +> [for="ncb24"] > i:nth-of-type(4):before, +#cb26:checked ~ div > div > house > [for="ncb26"] > i:nth-of-type(4):before { + width: 0.5rem; + left: 2.3rem; + background: #6a1b37; +} + +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row1.col3, +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row2.col3, +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row3.col3, +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row4.col3 { + background: #a19372; + color: #a19372; + z-index: 310; +} +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row1.col3 > i:nth-of-type(4), .hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row1.col3 > i:nth-of-type(3), +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row2.col3 > i:nth-of-type(4), +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row2.col3 > i:nth-of-type(3), +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row3.col3 > i:nth-of-type(4), +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row3.col3 > i:nth-of-type(3), +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row4.col3 > i:nth-of-type(4), +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row4.col3 > i:nth-of-type(3) { + border-radius: 50% 50% 0.3rem 0.3rem; +} +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row1.col3 > i:nth-of-type(3), +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row2.col3 > i:nth-of-type(3), +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row3.col3 > i:nth-of-type(3), +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row4.col3 > i:nth-of-type(3) { + height: 10rem; + width: 4.5rem; + top: 2.5rem; +} +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row1.col3 > i:nth-of-type(3):before, +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row2.col3 > i:nth-of-type(3):before, +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row3.col3 > i:nth-of-type(3):before, +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row4.col3 > i:nth-of-type(3):before { + top: 8rem; +} +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row1.col3 > i:nth-of-type(3):after, +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row2.col3 > i:nth-of-type(3):after, +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row3.col3 > i:nth-of-type(3):after, +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row4.col3 > i:nth-of-type(3):after { + top: 8rem; +} +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row1.col3 > i:nth-of-type(4):after, +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row2.col3 > i:nth-of-type(4):after, +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row3.col3 > i:nth-of-type(4):after, +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row4.col3 > i:nth-of-type(4):after { + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row1.col3 > i:nth-of-type(1) { + display: none; +} +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row1.col3 > i:nth-of-type(2) { + border: 1rem solid rgba(255, 255, 255, 0); + border-left: 3rem solid #bc592f; + top: -8.5rem; + left: 4.25rem; + box-shadow: none; +} +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row1.col3 > i:nth-of-type(2):before { + top: 3.25rem; + left: -8.25rem; + background: #a19372; + width: 2.75rem; + height: 5rem; + border-radius: 0.25rem 0.25rem 50% 50%; + box-shadow: 4rem 0 0 #a19372, 8rem 0 0 #a19372, 12rem 0 0 #a19372; +} +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row1.col3 > i:nth-of-type(2):after { + width: 14.5rem; + height: 3rem; + top: 6.25rem; + border-radius: 0 0 2rem 2rem; + background: #a19372; + left: -8.25rem; + filter: none; + border: none; + box-shadow: none; +} +.hs.house.row4.col2:not(:checked) +~ .hs.row4.col3:checked +~ .hs.house.row4.col4:not(:checked) +~ .hs.house.row3.col2:not(:checked) +~ .hs.row3.col3:checked +~ .hs.house.row3.col4:not(:checked) +~ .hs.house.row2.col2:not(:checked) +~ .hs.row2.col3:checked +~ .hs.house.row2.col4:not(:checked) +~ .hs.house.row1.col2:not(:checked) +~ .hs.row1.col3:checked +~ .hs.house.row1.col4:not(:checked) +~ div > div > house > .row1.col3 > i:nth-of-type(4):before { + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), -2rem -12.5rem 0 #20112a; +} + +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row1.col2, +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row2.col2, +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row3.col2, +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row4.col2 { + z-index: 310; + background: none; + border: none; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row1.col2:before, .hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row1.col2:after, +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row2.col2:before, +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row2.col2:after, +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row3.col2:before, +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row3.col2:after, +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row4.col2:before, +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row4.col2:after { + width: 80%; + height: 105%; + background: linear-gradient(to right, #a99c7e, currentColor); + transform: skewX(-2deg); + border-radius: 0.1rem 0.1rem 50% 50% / 50% 50% 0.25rem 0.25rem; + top: 0; + left: -1rem; + box-shadow: none; + filter: none; + opacity: 1; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row1.col2:after, +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row2.col2:after, +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row3.col2:after, +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row4.col2:after { + left: auto; + right: -1rem; + transform: skewX(2deg); + background: linear-gradient(to right, rgba(255, 255, 255, 0), currentColor, #86795a); +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row1.col2 > i:nth-of-type(4), +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row2.col2 > i:nth-of-type(4), +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row3.col2 > i:nth-of-type(4), +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row4.col2 > i:nth-of-type(4) { + border-radius: 50%; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row1.col2 > i:nth-of-type(3), +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row2.col2 > i:nth-of-type(3), +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row3.col2 > i:nth-of-type(3), +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row4.col2 > i:nth-of-type(3) { + border-radius: 2rem 2rem 0.5rem 0.5rem; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row1.col2 > i:nth-of-type(4):after, +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row2.col2 > i:nth-of-type(4):after, +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row3.col2 > i:nth-of-type(4):after, +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row4.col2 > i:nth-of-type(4):after { + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row1.col2 > i:nth-of-type(1) { + display: none; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row1.col2 > i:nth-of-type(2) { + width: 8rem; + height: 12rem; + border: 0.5rem solid rgba(255, 255, 255, 0); + border-top: 1rem solid #252529; + border-bottom: 6rem solid #6a1b37; + border-radius: 0.5rem 0.5rem 0 0; + top: -12rem; + left: 0; + right: 0; + margin: auto; + background: repeating-linear-gradient(to right, #252529 0.5rem, #252529 1rem, rgba(255, 255, 255, 0) 1rem, rgba(255, 255, 255, 0) 3.25rem), repeating-linear-gradient(45deg, #6a1b37, #6a1b37 0.2rem, rgba(255, 255, 255, 0) 0.5rem, rgba(255, 255, 255, 0) 1rem), repeating-linear-gradient(-45deg, #6a1b37, #6a1b37 0.2rem, rgba(255, 255, 255, 0) 0.5rem, rgba(255, 255, 255, 0) 1rem); + box-shadow: inset 0 -1rem 0 #252529; + background-size: cover; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row1.col2 > i:nth-of-type(2):before { + border: 3rem solid rgba(255, 255, 255, 0); + width: 6.5rem; + box-shadow: inset 0 3rem 0 #6a1b37; + border-bottom-color: #20112a; + top: -10rem; + right: 0; + margin: auto; + height: 9rem; + border-radius: 0; + background: none; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row1.col2 > i:nth-of-type(2):after { + width: 12.5rem; + background: repeating-linear-gradient(to right, #252529, #252529 0.5rem, rgba(255, 255, 255, 0) 0.5rem, rgba(255, 255, 255, 0) 1.32rem); + height: 5rem; + top: 6rem; + border-radius: 0.5rem; + border: none; + border-bottom: 1rem solid #252529; + border-top: 0.5rem solid #252529; + left: -10rem; + right: -10rem; + margin: auto; + box-shadow: none; + display: block; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row3.col2 { + color: #a19372; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row3.col2:before, .hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row3.col2:after { + left: -0.5rem; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row3.col2:after { + left: auto; + right: -0.5rem; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row2.col2:before, .hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row2.col2:after { + left: 0; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row2.col2:after { + left: auto; + right: 0; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row1.col2 { + color: #a19372; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row1.col2:before, .hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row1.col2:after { + left: 0.5rem; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div > div > house > .row1.col2:after { + left: auto; + right: 0.5rem; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ text { + transform: scale(1) !important; + z-index: 410; + transition: all 0.5s 1s ease-in-out; + opacity: 1; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ text welldone { + display: block; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ text gameover { + display: none; +} + +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(4) { + border-radius: 50% !important; +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(4):after { + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} + +.hs.house.row4.col2:checked ~ .hs.shed.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(4) { + border-radius: 50%; +} +.hs.house.row4.col2:checked ~ .hs.shed.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(4):after { + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3); +} + +house label, +shed label { + opacity: 0; +} +house label *, house label:after, house label:before, +shed label *, +shed label:after, +shed label:before { + transform: translate3d(0, 0, 0); +} + +@keyframes pop { + 0% { + opacity: 0; + transform: translate3d(0, -12rem, 0); + } + 99% { + opacity: 1; + transform: translate3d(0, 0, 0); + } +} +@keyframes popup { + 0% { + opacity: 0; + transform: translate3d(0, 12rem, 0); + } + 99% { + opacity: 1; + transform: translate3d(0, 0, 0); + } +} +.shed.row1.col1:checked ~ div > div > shed > .row1.col1, +.house.row1.col1:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} +.shed.row1.col1:checked ~ div > div > shed > .row1.col1:after, .shed.row1.col1:checked ~ div > div > shed > .row1.col1 *:after, +.house.row1.col1:checked ~ div > div > house > .row1.col1:after, +.house.row1.col1:checked ~ div > div > house > .row1.col1 *:after { + animation: pop 0.1s linear forwards; +} +.shed.row1.col1:checked ~ div > div > shed > .row1.col1:before, .shed.row1.col1:checked ~ div > div > shed > .row1.col1 *:before, +.house.row1.col1:checked ~ div > div > house > .row1.col1:before, +.house.row1.col1:checked ~ div > div > house > .row1.col1 *:before { + animation: popup 0.1s linear forwards; +} + +.shed.row1.col1:checked ~ div > div > house > .row1.col1 > i:nth-of-type(5) { + display: none !important; +} + +.house.row1.col1:checked +~ div +> div +> hbtn +> .row1.col0 { + z-index: 100; +} + +.house.row1.col1:checked +~ div +> div +> hbtn +> .row1.col2 { + z-index: 100; +} + +.house.row1.col1:checked +~ div +> div +> hbtn +> .row2.col1 { + z-index: 100; +} + +.house.row1.col1:checked +~ div +> div +> hbtn +> .row0.col1 { + z-index: 100; +} + +.shed.row1.col2:checked ~ div > div > shed > .row1.col2, +.house.row1.col2:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.shed.row1.col2:checked ~ div > div > shed > .row1.col2:after, .shed.row1.col2:checked ~ div > div > shed > .row1.col2 *:after, +.house.row1.col2:checked ~ div > div > house > .row1.col2:after, +.house.row1.col2:checked ~ div > div > house > .row1.col2 *:after { + animation: pop 0.1s linear forwards; +} +.shed.row1.col2:checked ~ div > div > shed > .row1.col2:before, .shed.row1.col2:checked ~ div > div > shed > .row1.col2 *:before, +.house.row1.col2:checked ~ div > div > house > .row1.col2:before, +.house.row1.col2:checked ~ div > div > house > .row1.col2 *:before { + animation: popup 0.1s linear forwards; +} + +.shed.row1.col2:checked ~ div > div > house > .row1.col2 > i:nth-of-type(5) { + display: none !important; +} + +.house.row1.col2:checked +~ div +> div +> hbtn +> .row1.col1 { + z-index: 100; +} + +.house.row1.col2:checked +~ div +> div +> hbtn +> .row1.col3 { + z-index: 100; +} + +.house.row1.col2:checked +~ div +> div +> hbtn +> .row2.col2 { + z-index: 100; +} + +.house.row1.col2:checked +~ div +> div +> hbtn +> .row0.col2 { + z-index: 100; +} + +.shed.row1.col3:checked ~ div > div > shed > .row1.col3, +.house.row1.col3:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.shed.row1.col3:checked ~ div > div > shed > .row1.col3:after, .shed.row1.col3:checked ~ div > div > shed > .row1.col3 *:after, +.house.row1.col3:checked ~ div > div > house > .row1.col3:after, +.house.row1.col3:checked ~ div > div > house > .row1.col3 *:after { + animation: pop 0.1s linear forwards; +} +.shed.row1.col3:checked ~ div > div > shed > .row1.col3:before, .shed.row1.col3:checked ~ div > div > shed > .row1.col3 *:before, +.house.row1.col3:checked ~ div > div > house > .row1.col3:before, +.house.row1.col3:checked ~ div > div > house > .row1.col3 *:before { + animation: popup 0.1s linear forwards; +} + +.shed.row1.col3:checked ~ div > div > house > .row1.col3 > i:nth-of-type(5) { + display: none !important; +} + +.house.row1.col3:checked +~ div +> div +> hbtn +> .row1.col2 { + z-index: 100; +} + +.house.row1.col3:checked +~ div +> div +> hbtn +> .row1.col4 { + z-index: 100; +} + +.house.row1.col3:checked +~ div +> div +> hbtn +> .row2.col3 { + z-index: 100; +} + +.house.row1.col3:checked +~ div +> div +> hbtn +> .row0.col3 { + z-index: 100; +} + +.shed.row1.col4:checked ~ div > div > shed > .row1.col4, +.house.row1.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.shed.row1.col4:checked ~ div > div > shed > .row1.col4:after, .shed.row1.col4:checked ~ div > div > shed > .row1.col4 *:after, +.house.row1.col4:checked ~ div > div > house > .row1.col4:after, +.house.row1.col4:checked ~ div > div > house > .row1.col4 *:after { + animation: pop 0.1s linear forwards; +} +.shed.row1.col4:checked ~ div > div > shed > .row1.col4:before, .shed.row1.col4:checked ~ div > div > shed > .row1.col4 *:before, +.house.row1.col4:checked ~ div > div > house > .row1.col4:before, +.house.row1.col4:checked ~ div > div > house > .row1.col4 *:before { + animation: popup 0.1s linear forwards; +} + +.shed.row1.col4:checked ~ div > div > house > .row1.col4 > i:nth-of-type(5) { + display: none !important; +} + +.house.row1.col4:checked +~ div +> div +> hbtn +> .row1.col3 { + z-index: 100; +} + +.house.row1.col4:checked +~ div +> div +> hbtn +> .row1.col5 { + z-index: 100; +} + +.house.row1.col4:checked +~ div +> div +> hbtn +> .row2.col4 { + z-index: 100; +} + +.house.row1.col4:checked +~ div +> div +> hbtn +> .row0.col4 { + z-index: 100; +} + +.shed.row2.col1:checked ~ div > div > shed > .row2.col1, +.house.row2.col1:checked ~ div > div > house > .row2.col1 { + opacity: 1; +} +.shed.row2.col1:checked ~ div > div > shed > .row2.col1:after, .shed.row2.col1:checked ~ div > div > shed > .row2.col1 *:after, +.house.row2.col1:checked ~ div > div > house > .row2.col1:after, +.house.row2.col1:checked ~ div > div > house > .row2.col1 *:after { + animation: pop 0.1s linear forwards; +} +.shed.row2.col1:checked ~ div > div > shed > .row2.col1:before, .shed.row2.col1:checked ~ div > div > shed > .row2.col1 *:before, +.house.row2.col1:checked ~ div > div > house > .row2.col1:before, +.house.row2.col1:checked ~ div > div > house > .row2.col1 *:before { + animation: popup 0.1s linear forwards; +} + +.shed.row2.col1:checked ~ div > div > house > .row2.col1 > i:nth-of-type(5) { + display: none !important; +} + +.house.row2.col1:checked +~ div +> div +> hbtn +> .row2.col0 { + z-index: 100; +} + +.house.row2.col1:checked +~ div +> div +> hbtn +> .row2.col2 { + z-index: 100; +} + +.house.row2.col1:checked +~ div +> div +> hbtn +> .row3.col1 { + z-index: 100; +} + +.house.row2.col1:checked +~ div +> div +> hbtn +> .row1.col1 { + z-index: 100; +} + +.shed.row2.col2:checked ~ div > div > shed > .row2.col2, +.house.row2.col2:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} +.shed.row2.col2:checked ~ div > div > shed > .row2.col2:after, .shed.row2.col2:checked ~ div > div > shed > .row2.col2 *:after, +.house.row2.col2:checked ~ div > div > house > .row2.col2:after, +.house.row2.col2:checked ~ div > div > house > .row2.col2 *:after { + animation: pop 0.1s linear forwards; +} +.shed.row2.col2:checked ~ div > div > shed > .row2.col2:before, .shed.row2.col2:checked ~ div > div > shed > .row2.col2 *:before, +.house.row2.col2:checked ~ div > div > house > .row2.col2:before, +.house.row2.col2:checked ~ div > div > house > .row2.col2 *:before { + animation: popup 0.1s linear forwards; +} + +.shed.row2.col2:checked ~ div > div > house > .row2.col2 > i:nth-of-type(5) { + display: none !important; +} + +.house.row2.col2:checked +~ div +> div +> hbtn +> .row2.col1 { + z-index: 100; +} + +.house.row2.col2:checked +~ div +> div +> hbtn +> .row2.col3 { + z-index: 100; +} + +.house.row2.col2:checked +~ div +> div +> hbtn +> .row3.col2 { + z-index: 100; +} + +.house.row2.col2:checked +~ div +> div +> hbtn +> .row1.col2 { + z-index: 100; +} + +.shed.row2.col3:checked ~ div > div > shed > .row2.col3, +.house.row2.col3:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} +.shed.row2.col3:checked ~ div > div > shed > .row2.col3:after, .shed.row2.col3:checked ~ div > div > shed > .row2.col3 *:after, +.house.row2.col3:checked ~ div > div > house > .row2.col3:after, +.house.row2.col3:checked ~ div > div > house > .row2.col3 *:after { + animation: pop 0.1s linear forwards; +} +.shed.row2.col3:checked ~ div > div > shed > .row2.col3:before, .shed.row2.col3:checked ~ div > div > shed > .row2.col3 *:before, +.house.row2.col3:checked ~ div > div > house > .row2.col3:before, +.house.row2.col3:checked ~ div > div > house > .row2.col3 *:before { + animation: popup 0.1s linear forwards; +} + +.shed.row2.col3:checked ~ div > div > house > .row2.col3 > i:nth-of-type(5) { + display: none !important; +} + +.house.row2.col3:checked +~ div +> div +> hbtn +> .row2.col2 { + z-index: 100; +} + +.house.row2.col3:checked +~ div +> div +> hbtn +> .row2.col4 { + z-index: 100; +} + +.house.row2.col3:checked +~ div +> div +> hbtn +> .row3.col3 { + z-index: 100; +} + +.house.row2.col3:checked +~ div +> div +> hbtn +> .row1.col3 { + z-index: 100; +} + +.shed.row2.col4:checked ~ div > div > shed > .row2.col4, +.house.row2.col4:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.shed.row2.col4:checked ~ div > div > shed > .row2.col4:after, .shed.row2.col4:checked ~ div > div > shed > .row2.col4 *:after, +.house.row2.col4:checked ~ div > div > house > .row2.col4:after, +.house.row2.col4:checked ~ div > div > house > .row2.col4 *:after { + animation: pop 0.1s linear forwards; +} +.shed.row2.col4:checked ~ div > div > shed > .row2.col4:before, .shed.row2.col4:checked ~ div > div > shed > .row2.col4 *:before, +.house.row2.col4:checked ~ div > div > house > .row2.col4:before, +.house.row2.col4:checked ~ div > div > house > .row2.col4 *:before { + animation: popup 0.1s linear forwards; +} + +.shed.row2.col4:checked ~ div > div > house > .row2.col4 > i:nth-of-type(5) { + display: none !important; +} + +.house.row2.col4:checked +~ div +> div +> hbtn +> .row2.col3 { + z-index: 100; +} + +.house.row2.col4:checked +~ div +> div +> hbtn +> .row2.col5 { + z-index: 100; +} + +.house.row2.col4:checked +~ div +> div +> hbtn +> .row3.col4 { + z-index: 100; +} + +.house.row2.col4:checked +~ div +> div +> hbtn +> .row1.col4 { + z-index: 100; +} + +.shed.row3.col1:checked ~ div > div > shed > .row3.col1, +.house.row3.col1:checked ~ div > div > house > .row3.col1 { + opacity: 1; +} +.shed.row3.col1:checked ~ div > div > shed > .row3.col1:after, .shed.row3.col1:checked ~ div > div > shed > .row3.col1 *:after, +.house.row3.col1:checked ~ div > div > house > .row3.col1:after, +.house.row3.col1:checked ~ div > div > house > .row3.col1 *:after { + animation: pop 0.1s linear forwards; +} +.shed.row3.col1:checked ~ div > div > shed > .row3.col1:before, .shed.row3.col1:checked ~ div > div > shed > .row3.col1 *:before, +.house.row3.col1:checked ~ div > div > house > .row3.col1:before, +.house.row3.col1:checked ~ div > div > house > .row3.col1 *:before { + animation: popup 0.1s linear forwards; +} + +.shed.row3.col1:checked ~ div > div > house > .row3.col1 > i:nth-of-type(5) { + display: none !important; +} + +.house.row3.col1:checked +~ div +> div +> hbtn +> .row3.col0 { + z-index: 100; +} + +.house.row3.col1:checked +~ div +> div +> hbtn +> .row3.col2 { + z-index: 100; +} + +.house.row3.col1:checked +~ div +> div +> hbtn +> .row4.col1 { + z-index: 100; +} + +.house.row3.col1:checked +~ div +> div +> hbtn +> .row2.col1 { + z-index: 100; +} + +.shed.row3.col2:checked ~ div > div > shed > .row3.col2, +.house.row3.col2:checked ~ div > div > house > .row3.col2 { + opacity: 1; +} +.shed.row3.col2:checked ~ div > div > shed > .row3.col2:after, .shed.row3.col2:checked ~ div > div > shed > .row3.col2 *:after, +.house.row3.col2:checked ~ div > div > house > .row3.col2:after, +.house.row3.col2:checked ~ div > div > house > .row3.col2 *:after { + animation: pop 0.1s linear forwards; +} +.shed.row3.col2:checked ~ div > div > shed > .row3.col2:before, .shed.row3.col2:checked ~ div > div > shed > .row3.col2 *:before, +.house.row3.col2:checked ~ div > div > house > .row3.col2:before, +.house.row3.col2:checked ~ div > div > house > .row3.col2 *:before { + animation: popup 0.1s linear forwards; +} + +.shed.row3.col2:checked ~ div > div > house > .row3.col2 > i:nth-of-type(5) { + display: none !important; +} + +.house.row3.col2:checked +~ div +> div +> hbtn +> .row3.col1 { + z-index: 100; +} + +.house.row3.col2:checked +~ div +> div +> hbtn +> .row3.col3 { + z-index: 100; +} + +.house.row3.col2:checked +~ div +> div +> hbtn +> .row4.col2 { + z-index: 100; +} + +.house.row3.col2:checked +~ div +> div +> hbtn +> .row2.col2 { + z-index: 100; +} + +.shed.row3.col3:checked ~ div > div > shed > .row3.col3, +.house.row3.col3:checked ~ div > div > house > .row3.col3 { + opacity: 1; +} +.shed.row3.col3:checked ~ div > div > shed > .row3.col3:after, .shed.row3.col3:checked ~ div > div > shed > .row3.col3 *:after, +.house.row3.col3:checked ~ div > div > house > .row3.col3:after, +.house.row3.col3:checked ~ div > div > house > .row3.col3 *:after { + animation: pop 0.1s linear forwards; +} +.shed.row3.col3:checked ~ div > div > shed > .row3.col3:before, .shed.row3.col3:checked ~ div > div > shed > .row3.col3 *:before, +.house.row3.col3:checked ~ div > div > house > .row3.col3:before, +.house.row3.col3:checked ~ div > div > house > .row3.col3 *:before { + animation: popup 0.1s linear forwards; +} + +.shed.row3.col3:checked ~ div > div > house > .row3.col3 > i:nth-of-type(5) { + display: none !important; +} + +.house.row3.col3:checked +~ div +> div +> hbtn +> .row3.col2 { + z-index: 100; +} + +.house.row3.col3:checked +~ div +> div +> hbtn +> .row3.col4 { + z-index: 100; +} + +.house.row3.col3:checked +~ div +> div +> hbtn +> .row4.col3 { + z-index: 100; +} + +.house.row3.col3:checked +~ div +> div +> hbtn +> .row2.col3 { + z-index: 100; +} + +.shed.row3.col4:checked ~ div > div > shed > .row3.col4, +.house.row3.col4:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} +.shed.row3.col4:checked ~ div > div > shed > .row3.col4:after, .shed.row3.col4:checked ~ div > div > shed > .row3.col4 *:after, +.house.row3.col4:checked ~ div > div > house > .row3.col4:after, +.house.row3.col4:checked ~ div > div > house > .row3.col4 *:after { + animation: pop 0.1s linear forwards; +} +.shed.row3.col4:checked ~ div > div > shed > .row3.col4:before, .shed.row3.col4:checked ~ div > div > shed > .row3.col4 *:before, +.house.row3.col4:checked ~ div > div > house > .row3.col4:before, +.house.row3.col4:checked ~ div > div > house > .row3.col4 *:before { + animation: popup 0.1s linear forwards; +} + +.shed.row3.col4:checked ~ div > div > house > .row3.col4 > i:nth-of-type(5) { + display: none !important; +} + +.house.row3.col4:checked +~ div +> div +> hbtn +> .row3.col3 { + z-index: 100; +} + +.house.row3.col4:checked +~ div +> div +> hbtn +> .row3.col5 { + z-index: 100; +} + +.house.row3.col4:checked +~ div +> div +> hbtn +> .row4.col4 { + z-index: 100; +} + +.house.row3.col4:checked +~ div +> div +> hbtn +> .row2.col4 { + z-index: 100; +} + +.shed.row4.col1:checked ~ div > div > shed > .row4.col1, +.house.row4.col1:checked ~ div > div > house > .row4.col1 { + opacity: 1; +} +.shed.row4.col1:checked ~ div > div > shed > .row4.col1:after, .shed.row4.col1:checked ~ div > div > shed > .row4.col1 *:after, +.house.row4.col1:checked ~ div > div > house > .row4.col1:after, +.house.row4.col1:checked ~ div > div > house > .row4.col1 *:after { + animation: pop 0.1s linear forwards; +} +.shed.row4.col1:checked ~ div > div > shed > .row4.col1:before, .shed.row4.col1:checked ~ div > div > shed > .row4.col1 *:before, +.house.row4.col1:checked ~ div > div > house > .row4.col1:before, +.house.row4.col1:checked ~ div > div > house > .row4.col1 *:before { + animation: popup 0.1s linear forwards; +} + +.shed.row4.col1:checked ~ div > div > house > .row4.col1 > i:nth-of-type(5) { + display: none !important; +} + +.house.row4.col1:checked +~ div +> div +> hbtn +> .row4.col0 { + z-index: 100; +} + +.house.row4.col1:checked +~ div +> div +> hbtn +> .row4.col2 { + z-index: 100; +} + +.house.row4.col1:checked +~ div +> div +> hbtn +> .row5.col1 { + z-index: 100; +} + +.house.row4.col1:checked +~ div +> div +> hbtn +> .row3.col1 { + z-index: 100; +} + +.shed.row4.col2:checked ~ div > div > shed > .row4.col2, +.house.row4.col2:checked ~ div > div > house > .row4.col2 { + opacity: 1; +} +.shed.row4.col2:checked ~ div > div > shed > .row4.col2:after, .shed.row4.col2:checked ~ div > div > shed > .row4.col2 *:after, +.house.row4.col2:checked ~ div > div > house > .row4.col2:after, +.house.row4.col2:checked ~ div > div > house > .row4.col2 *:after { + animation: pop 0.1s linear forwards; +} +.shed.row4.col2:checked ~ div > div > shed > .row4.col2:before, .shed.row4.col2:checked ~ div > div > shed > .row4.col2 *:before, +.house.row4.col2:checked ~ div > div > house > .row4.col2:before, +.house.row4.col2:checked ~ div > div > house > .row4.col2 *:before { + animation: popup 0.1s linear forwards; +} + +.shed.row4.col2:checked ~ div > div > house > .row4.col2 > i:nth-of-type(5) { + display: none !important; +} + +.house.row4.col2:checked +~ div +> div +> hbtn +> .row4.col1 { + z-index: 100; +} + +.house.row4.col2:checked +~ div +> div +> hbtn +> .row4.col3 { + z-index: 100; +} + +.house.row4.col2:checked +~ div +> div +> hbtn +> .row5.col2 { + z-index: 100; +} + +.house.row4.col2:checked +~ div +> div +> hbtn +> .row3.col2 { + z-index: 100; +} + +.shed.row4.col3:checked ~ div > div > shed > .row4.col3, +.house.row4.col3:checked ~ div > div > house > .row4.col3 { + opacity: 1; +} +.shed.row4.col3:checked ~ div > div > shed > .row4.col3:after, .shed.row4.col3:checked ~ div > div > shed > .row4.col3 *:after, +.house.row4.col3:checked ~ div > div > house > .row4.col3:after, +.house.row4.col3:checked ~ div > div > house > .row4.col3 *:after { + animation: pop 0.1s linear forwards; +} +.shed.row4.col3:checked ~ div > div > shed > .row4.col3:before, .shed.row4.col3:checked ~ div > div > shed > .row4.col3 *:before, +.house.row4.col3:checked ~ div > div > house > .row4.col3:before, +.house.row4.col3:checked ~ div > div > house > .row4.col3 *:before { + animation: popup 0.1s linear forwards; +} + +.shed.row4.col3:checked ~ div > div > house > .row4.col3 > i:nth-of-type(5) { + display: none !important; +} + +.house.row4.col3:checked +~ div +> div +> hbtn +> .row4.col2 { + z-index: 100; +} + +.house.row4.col3:checked +~ div +> div +> hbtn +> .row4.col4 { + z-index: 100; +} + +.house.row4.col3:checked +~ div +> div +> hbtn +> .row5.col3 { + z-index: 100; +} + +.house.row4.col3:checked +~ div +> div +> hbtn +> .row3.col3 { + z-index: 100; +} + +.shed.row4.col4:checked ~ div > div > shed > .row4.col4, +.house.row4.col4:checked ~ div > div > house > .row4.col4 { + opacity: 1; +} +.shed.row4.col4:checked ~ div > div > shed > .row4.col4:after, .shed.row4.col4:checked ~ div > div > shed > .row4.col4 *:after, +.house.row4.col4:checked ~ div > div > house > .row4.col4:after, +.house.row4.col4:checked ~ div > div > house > .row4.col4 *:after { + animation: pop 0.1s linear forwards; +} +.shed.row4.col4:checked ~ div > div > shed > .row4.col4:before, .shed.row4.col4:checked ~ div > div > shed > .row4.col4 *:before, +.house.row4.col4:checked ~ div > div > house > .row4.col4:before, +.house.row4.col4:checked ~ div > div > house > .row4.col4 *:before { + animation: popup 0.1s linear forwards; +} + +.shed.row4.col4:checked ~ div > div > house > .row4.col4 > i:nth-of-type(5) { + display: none !important; +} + +.house.row4.col4:checked +~ div +> div +> hbtn +> .row4.col3 { + z-index: 100; +} + +.house.row4.col4:checked +~ div +> div +> hbtn +> .row4.col5 { + z-index: 100; +} + +.house.row4.col4:checked +~ div +> div +> hbtn +> .row5.col4 { + z-index: 100; +} + +.house.row4.col4:checked +~ div +> div +> hbtn +> .row3.col4 { + z-index: 100; +} + +.hs.row1.col1:checked ~ div > div > shed > .row1.col1 { + z-index: 300; +} + +.hs.row1.col1:checked ~ div > div > house > .row1.col1 { + background: #bc2f2f; + z-index: 300; + color: #bc2f2f; +} + +.hs.shed.row1.col1:checked +~ div +> div +> house +> .row1.col1 { + background: #bc592f; + color: #bc592f; +} + +.hs.row1.col2:checked ~ div > div > shed > .row1.col2 { + z-index: 300; +} + +.hs.row1.col2:checked ~ div > div > house > .row1.col2 { + background: #bc2f2f; + z-index: 300; + color: #bc2f2f; +} + +.hs.shed.row1.col2:checked +~ div +> div +> house +> .row1.col2 { + background: #bc592f; + color: #bc592f; +} + +.hs.row1.col3:checked ~ div > div > shed > .row1.col3 { + z-index: 300; +} + +.hs.row1.col3:checked ~ div > div > house > .row1.col3 { + background: #bc2f2f; + z-index: 300; + color: #bc2f2f; +} + +.hs.shed.row1.col3:checked +~ div +> div +> house +> .row1.col3 { + background: #bc592f; + color: #bc592f; +} + +.hs.row1.col4:checked ~ div > div > shed > .row1.col4 { + z-index: 300; +} + +.hs.row1.col4:checked ~ div > div > house > .row1.col4 { + background: #bc2f2f; + z-index: 300; + color: #bc2f2f; +} + +.hs.shed.row1.col4:checked +~ div +> div +> house +> .row1.col4 { + background: #bc592f; + color: #bc592f; +} + +.hs.row2.col1:checked ~ div > div > shed > .row2.col1 { + z-index: 300; +} + +.hs.row2.col1:checked ~ div > div > house > .row2.col1 { + background: #bc2f2f; + z-index: 300; + color: #bc2f2f; +} + +.hs.shed.row2.col1:checked +~ div +> div +> house +> .row2.col1 { + background: #bc592f; + color: #bc592f; +} + +.hs.row2.col2:checked ~ div > div > shed > .row2.col2 { + z-index: 300; +} + +.hs.row2.col2:checked ~ div > div > house > .row2.col2 { + background: #bc2f2f; + z-index: 300; + color: #bc2f2f; +} + +.hs.shed.row2.col2:checked +~ div +> div +> house +> .row2.col2 { + background: #bc592f; + color: #bc592f; +} + +.hs.row2.col3:checked ~ div > div > shed > .row2.col3 { + z-index: 300; +} + +.hs.row2.col3:checked ~ div > div > house > .row2.col3 { + background: #bc2f2f; + z-index: 300; + color: #bc2f2f; +} + +.hs.shed.row2.col3:checked +~ div +> div +> house +> .row2.col3 { + background: #bc592f; + color: #bc592f; +} + +.hs.row2.col4:checked ~ div > div > shed > .row2.col4 { + z-index: 300; +} + +.hs.row2.col4:checked ~ div > div > house > .row2.col4 { + background: #bc2f2f; + z-index: 300; + color: #bc2f2f; +} + +.hs.shed.row2.col4:checked +~ div +> div +> house +> .row2.col4 { + background: #bc592f; + color: #bc592f; +} + +.hs.row3.col1:checked ~ div > div > shed > .row3.col1 { + z-index: 300; +} + +.hs.row3.col1:checked ~ div > div > house > .row3.col1 { + background: #bc2f2f; + z-index: 300; + color: #bc2f2f; +} + +.hs.shed.row3.col1:checked +~ div +> div +> house +> .row3.col1 { + background: #bc592f; + color: #bc592f; +} + +.hs.row3.col2:checked ~ div > div > shed > .row3.col2 { + z-index: 300; +} + +.hs.row3.col2:checked ~ div > div > house > .row3.col2 { + background: #bc2f2f; + z-index: 300; + color: #bc2f2f; +} + +.hs.shed.row3.col2:checked +~ div +> div +> house +> .row3.col2 { + background: #bc592f; + color: #bc592f; +} + +.hs.row3.col3:checked ~ div > div > shed > .row3.col3 { + z-index: 300; +} + +.hs.row3.col3:checked ~ div > div > house > .row3.col3 { + background: #bc2f2f; + z-index: 300; + color: #bc2f2f; +} + +.hs.shed.row3.col3:checked +~ div +> div +> house +> .row3.col3 { + background: #bc592f; + color: #bc592f; +} + +.hs.row3.col4:checked ~ div > div > shed > .row3.col4 { + z-index: 300; +} + +.hs.row3.col4:checked ~ div > div > house > .row3.col4 { + background: #bc2f2f; + z-index: 300; + color: #bc2f2f; +} + +.hs.shed.row3.col4:checked +~ div +> div +> house +> .row3.col4 { + background: #bc592f; + color: #bc592f; +} + +.hs.row4.col1:checked ~ div > div > shed > .row4.col1 { + z-index: 300; +} + +.hs.row4.col1:checked ~ div > div > house > .row4.col1 { + background: #bc2f2f; + z-index: 300; + color: #bc2f2f; +} + +.hs.shed.row4.col1:checked +~ div +> div +> house +> .row4.col1 { + background: #bc592f; + color: #bc592f; +} + +.hs.row4.col2:checked ~ div > div > shed > .row4.col2 { + z-index: 300; +} + +.hs.row4.col2:checked ~ div > div > house > .row4.col2 { + background: #bc2f2f; + z-index: 300; + color: #bc2f2f; +} + +.hs.shed.row4.col2:checked +~ div +> div +> house +> .row4.col2 { + background: #bc592f; + color: #bc592f; +} + +.hs.row4.col3:checked ~ div > div > shed > .row4.col3 { + z-index: 300; +} + +.hs.row4.col3:checked ~ div > div > house > .row4.col3 { + background: #bc2f2f; + z-index: 300; + color: #bc2f2f; +} + +.hs.shed.row4.col3:checked +~ div +> div +> house +> .row4.col3 { + background: #bc592f; + color: #bc592f; +} + +.hs.row4.col4:checked ~ div > div > shed > .row4.col4 { + z-index: 300; +} + +.hs.row4.col4:checked ~ div > div > house > .row4.col4 { + background: #bc2f2f; + z-index: 300; + color: #bc2f2f; +} + +.hs.shed.row4.col4:checked +~ div +> div +> house +> .row4.col4 { + background: #bc592f; + color: #bc592f; +} + +.house.row0.col1:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.hs.row0.col1:checked ~ .house.row-1.col1:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > shed > .row2.col0, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > shed > .row1.col0, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} + +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > shed > .row1.col-1, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > shed > .row2.col0, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} + +.hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > shed > .row1.col-2, +.hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > shed > .row2.col-1, +.hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > shed > .row0.col-1 { + opacity: 0; +} + +.hs.row1.col-2:checked ~ .hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > shed > .row2.col-2, +.hs.row1.col-2:checked ~ .hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > shed > .row0.col-2 { + opacity: 0; +} + +.hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-1:checked ~ div > div > shed > .row-1.col-1 { + opacity: 0; +} + +.hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-2:checked ~ .hs.row-1.col-2:checked ~ div > div > shed > .row-1.col-2, +.hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-2:checked ~ .hs.row-1.col-2:checked ~ div > div > shed > .row-1.col-1 { + opacity: 0; +} + +.hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-2:checked ~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ div > div > shed > .row-1.col0 { + opacity: 0; +} + +.hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-2:checked ~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ div > div > shed > .row-1.col1 { + opacity: 0; +} + +.hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked ~ div > div > shed > .row-1.col0, +.hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked ~ div > div > shed > .row-1.col-2 { + opacity: 0; +} + +.hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ div > div > shed > .row-1.col1 { + opacity: 0; +} + +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > shed > .row-1.col1, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > shed > .row-1.col-1 { + opacity: 0; +} + +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ div > div > shed > .row-1.col-2, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ div > div > shed > .row0.col-2 { + opacity: 0; +} + +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col0:checked +~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ div > div > shed > .row1.col-2 { + opacity: 0; +} + +.hs.row2.col0:checked ~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} + +.hs.row2.col-2:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > shed > .row3.col-2 { + opacity: 0; +} + +.hs.row3.col-2:checked ~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row3.col-1:checked ~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > shed > .row3.col-2, +.hs.row3.col-1:checked ~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > shed > .row3.col-1, +.hs.row3.col-1:checked ~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > shed > .row3.col0, +.hs.row3.col0:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > shed > .row3.col1, +.hs.row3.col0:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > shed > .row3.col-2 { + opacity: 0; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > shed > .row2.col-2 { + opacity: 0; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col-2:checked +~ .hs.row2.col0:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > shed > .row1.col-2 { + opacity: 0; +} + +.hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > shed > .row3.col-2 { + opacity: 0; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col-2:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > shed > .row1.col-2 { + opacity: 0; +} + +.hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-2:checked ~ div > div > shed > .row0.col-1, +.hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-2:checked ~ div > div > shed > .row-1.col-2 { + opacity: 0; +} + +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col0:checked ~ div > div > shed > .row-1.col0, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col0:checked ~ div > div > shed > .row0.col-1 { + opacity: 0; +} + +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row-1.col-1:checked ~ div > div > shed > .row-1.col-1, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row-1.col-1:checked ~ div > div > shed > .row-1.col-2 { + opacity: 0; +} + +.house.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-2.col-1:checked ~ div > div > shed > .row-2.col-1, +.house.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-2.col-1:checked ~ div > div > shed > .row-2.col-2 { + opacity: 0; +} + +.house.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-2.col3:checked ~ div > div > shed > .row-2.col4, +.house.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-2.col3:checked ~ div > div > shed > .row-2.col3 { + opacity: 0; +} + +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > shed > .row1.col-2, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > shed > .row-1.col-2, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > shed > .row0.col-2 { + opacity: 0; +} + +.house.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-2.col1:checked +~ .hs.row-1.col1:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row0.col-2, +.house.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-2.col1:checked +~ .hs.row-1.col1:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row-1.col-2, +.house.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-2.col1:checked +~ .hs.row-1.col1:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row-2.col-2 { + opacity: 0; +} + +.hs.row1.col-2:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > shed > .row1.col-2, +.hs.row1.col-2:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > shed > .row2.col-2 { + opacity: 0; +} + +.hs.row2.col-2:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} + +.house.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} + +.hs.row1.col-1:checked ~ .house.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row1.col-1, +.hs.row1.col-1:checked ~ .house.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} + +.hs.row1.col-2:checked ~ .house.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row1.col-2, +.hs.row1.col-2:checked ~ .house.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row2.col-2 { + opacity: 0; +} + +.hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row1.col-2:checked ~ .house.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row2.col-1, +.hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row1.col-2:checked ~ .house.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} + +.hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row-1.col2, +.hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row0.col2 { + opacity: 0; +} + +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row-1.col2, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row-1.col3 { + opacity: 0; +} + +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row0.col3, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.house.row1.col1:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col4, +.house.row1.col1:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col3, +.house.row1.col1:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.house.row1.col1:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row1.col4, +.house.row1.col1:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row1.col3, +.house.row1.col1:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col1:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col3, +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col1:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col2 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .house.row1.col1:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col4, +.hs.row2.col3:checked ~ .house.row1.col1:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col2 { + opacity: 0; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row2.col4, +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.house.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col4, +.house.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col3 { + opacity: 0; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row1.col4, +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row0.col4 { + opacity: 0; +} + +.house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row1.col4, +.house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col4:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.house.row1.col1:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col4, +.house.row1.col1:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.house.row1.col1:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row1.col4, +.house.row1.col1:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.house.row1.col1:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col4, +.house.row1.col1:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ .house.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > shed > .row2.col-1, +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > shed > .row3.col-1, +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > shed > .row2.col-2 { + opacity: 0; +} + +.hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > shed > .row1.col-2, +.hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > shed > .row3.col-2 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .house.row0.col1:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .house.row0.col1:checked ~ div > div > shed > .row2.col2, +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .house.row0.col1:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .house.row0.col1:checked ~ div > div > shed > .row0.col3, +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .house.row0.col1:checked ~ div > div > shed > .row2.col3, +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .house.row0.col1:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .house.row0.col1:checked ~ div > div > shed > .row2.col4, +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .house.row0.col1:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .house.row-1.col1:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked ~ .house.row-1.col1:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked ~ .house.row-1.col1:checked ~ div > div > shed > .row0.col3, +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked ~ .house.row-1.col1:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked ~ .house.row-1.col1:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked ~ .hs.row0.col4:checked ~ .house.row-1.col1:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked ~ .hs.row0.col3:checked ~ .house.row-1.col1:checked ~ div > div > shed > .row-1.col3 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked ~ .hs.row0.col4:checked ~ .house.row-1.col1:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row-1.col3 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked ~ .hs.row0.col3:checked ~ .house.row-1.col1:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked ~ .hs.row0.col3:checked ~ .house.row-1.col1:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .house.row-1.col1:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .house.row-1.col0:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .house.row-1.col0:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .house.row-1.col0:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .house.row-1.col0:checked ~ div > div > shed > .row-1.col3 { + opacity: 0; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .house.row-1.col0:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row-1.col2 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .house.row-1.col1:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .house.row-1.col1:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.house.row1.col1:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3, +.house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row2.col2, +.house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4, +.house.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row2.col3, +.house.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col4, +.house.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row2.col3, +.hs.row2.col2:checked ~ .house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row3.col1, +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col2:checked ~ .house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col2:checked ~ .house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col4, +.hs.row2.col3:checked ~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col2, +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col3:checked ~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col4:checked ~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col4:checked ~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.house.row2.col1:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col-2:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col-2:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col-1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row1.col-2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col-1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row1.col-2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row1.col-2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row0.col-1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row0.col-2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row-1.col-1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row1.col-3 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row1.col-2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row0.col-2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row1.col-2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row-1.col0:checked +~ div > div > shed > .row0.col-1, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row-1.col0:checked +~ div > div > shed > .row-1.col-1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row-1.col2, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col3, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row-1.col0 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row0.col0, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row-1.col-1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row0.col-1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col3, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col1, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row-1.col3, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col4, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row-1.col3, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row-1.col0 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col4, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col-1, +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row0.col3, +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked ~ div > div > shed > .row0.col-1, +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked ~ div > div > shed > .row-1.col0 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > shed > .row-1.col-1, +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row0.col2, +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row0.col-2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-2:checked ~ div > div > shed > .row-1.col-2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-2:checked ~ .hs.row-1.col-2:checked ~ div > div > shed > .row-1.col-1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-2:checked ~ .hs.row-1.col-2:checked ~ .hs.row-1.col-1:checked ~ div > div > shed > .row-1.col0 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-2:checked ~ .hs.row-1.col-2:checked ~ .hs.row-1.col-1:checked ~ .hs.row-1.col0:checked ~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row1.col-2, +.house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row0.col-1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked ~ div > div > shed > .row-1.col-1, +.house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked ~ div > div > shed > .row0.col-2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked ~ div > div > shed > .row-1.col-2, +.house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked ~ div > div > shed > .row-1.col0 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked ~ .hs.row-1.col0:checked ~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div +> div +> shed +> .row1.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col3, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row2.col3, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col3, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row2.col3, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked +~ div +> div +> shed +> .row1.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row0.col-1, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row-1.col0 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col0:checked ~ div > div > shed > .row-1.col-1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ div > div > shed > .row-1.col-2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ div > div > shed > .row0.col-2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ div > div > shed > .row1.col-2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row0.col-2, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row-1.col-1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row-1.col-2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row1.col3, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row0.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row1.col3:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col0 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col0:checked +~ div > div > shed > .row-1.col-1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row-1.col-1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row-1.col-2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col1:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.house.row0.col1:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} + +.hs.row0.col1:checked ~ .house.row-1.col1:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} + +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > house > .row2.col0, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > house > .row1.col0, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} + +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > house > .row1.col-1, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > house > .row2.col0, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} + +.hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > house > .row1.col-2, +.hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > house > .row2.col-1, +.hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > house > .row0.col-1 { + opacity: 1; +} + +.hs.row1.col-2:checked ~ .hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > house > .row2.col-2, +.hs.row1.col-2:checked ~ .hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > house > .row0.col-2 { + opacity: 1; +} + +.hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-1:checked ~ div > div > house > .row-1.col-1 { + opacity: 1; +} + +.hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-2:checked ~ .hs.row-1.col-2:checked ~ div > div > house > .row-1.col-2, +.hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-2:checked ~ .hs.row-1.col-2:checked ~ div > div > house > .row-1.col-1 { + opacity: 1; +} + +.hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-2:checked ~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ div > div > house > .row-1.col0 { + opacity: 1; +} + +.hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-2:checked ~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ div > div > house > .row-1.col1 { + opacity: 1; +} + +.hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked ~ div > div > house > .row-1.col0, +.hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked ~ div > div > house > .row-1.col-2 { + opacity: 1; +} + +.hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ div > div > house > .row-1.col1 { + opacity: 1; +} + +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > house > .row-1.col1, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > house > .row-1.col-1 { + opacity: 1; +} + +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ div > div > house > .row-1.col-2, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ div > div > house > .row0.col-2 { + opacity: 1; +} + +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col0:checked +~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ div > div > house > .row1.col-2 { + opacity: 1; +} + +.hs.row2.col0:checked ~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > house > .row3.col0 { + opacity: 1; +} + +.hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} + +.hs.row2.col-2:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > house > .row3.col-2 { + opacity: 1; +} + +.hs.row3.col-2:checked ~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row3.col-1:checked ~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > house > .row3.col-2, +.hs.row3.col-1:checked ~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > house > .row3.col-1, +.hs.row3.col-1:checked ~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > house > .row3.col0, +.hs.row3.col0:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > house > .row3.col1, +.hs.row3.col0:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > house > .row3.col-2 { + opacity: 1; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > house > .row2.col-2 { + opacity: 1; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col-2:checked +~ .hs.row2.col0:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > house > .row1.col-2 { + opacity: 1; +} + +.hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ div > div > house > .row3.col-2 { + opacity: 1; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col-2:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > house > .row1.col-2 { + opacity: 1; +} + +.hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-2:checked ~ div > div > house > .row0.col-1, +.hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-2:checked ~ div > div > house > .row-1.col-2 { + opacity: 1; +} + +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col0:checked ~ div > div > house > .row-1.col0, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col0:checked ~ div > div > house > .row0.col-1 { + opacity: 1; +} + +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row-1.col-1:checked ~ div > div > house > .row-1.col-1, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row-1.col-1:checked ~ div > div > house > .row-1.col-2 { + opacity: 1; +} + +.house.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-2.col-1:checked ~ div > div > house > .row-2.col-1, +.house.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-2.col-1:checked ~ div > div > house > .row-2.col-2 { + opacity: 1; +} + +.house.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-2.col3:checked ~ div > div > house > .row-2.col4, +.house.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-2.col3:checked ~ div > div > house > .row-2.col3 { + opacity: 1; +} + +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > house > .row1.col-2, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > house > .row-1.col-2, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > house > .row0.col-2 { + opacity: 1; +} + +.house.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-2.col1:checked +~ .hs.row-1.col1:checked +~ .hs.row0.col1:checked +~ div > div > house > .row0.col-2, +.house.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-2.col1:checked +~ .hs.row-1.col1:checked +~ .hs.row0.col1:checked +~ div > div > house > .row-1.col-2, +.house.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-2.col1:checked +~ .hs.row-1.col1:checked +~ .hs.row0.col1:checked +~ div > div > house > .row-2.col-2 { + opacity: 1; +} + +.hs.row1.col-2:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > house > .row1.col-2, +.hs.row1.col-2:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > house > .row2.col-2 { + opacity: 1; +} + +.hs.row2.col-2:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} + +.house.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} + +.hs.row1.col-1:checked ~ .house.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row1.col-1, +.hs.row1.col-1:checked ~ .house.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} + +.hs.row1.col-2:checked ~ .house.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row1.col-2, +.hs.row1.col-2:checked ~ .house.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row2.col-2 { + opacity: 1; +} + +.hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row1.col-2:checked ~ .house.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row2.col-1, +.hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row1.col-2:checked ~ .house.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} + +.hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row-1.col2, +.hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .house.row1.col1:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row0.col2 { + opacity: 1; +} + +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row-1.col2, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row-1.col3 { + opacity: 1; +} + +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row0.col3, +.hs.row1.col0:checked ~ .house.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} + +.house.row1.col1:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col4, +.house.row1.col1:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col3, +.house.row1.col1:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col3 { + opacity: 1; +} + +.house.row1.col1:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row1.col4, +.house.row1.col1:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row1.col3, +.house.row1.col1:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col1:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col3, +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col1:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col2 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .house.row1.col1:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col4, +.hs.row2.col3:checked ~ .house.row1.col1:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col2 { + opacity: 1; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row2.col4, +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} + +.house.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col4, +.house.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col3 { + opacity: 1; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ div > div > house > .row1.col4, +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ div > div > house > .row0.col4 { + opacity: 1; +} + +.house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row1.col4, +.house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col4:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col3 { + opacity: 1; +} + +.house.row1.col1:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col4, +.house.row1.col1:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} + +.house.row1.col1:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row1.col4, +.house.row1.col1:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} + +.house.row1.col1:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col4, +.house.row1.col1:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ .house.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > house > .row2.col-1, +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > house > .row3.col-1, +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > house > .row2.col-2 { + opacity: 1; +} + +.hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > house > .row1.col-2, +.hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col0:checked ~ .house.row1.col1:checked ~ div > div > house > .row3.col-2 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .house.row0.col1:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .house.row0.col1:checked ~ div > div > house > .row2.col2, +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .house.row0.col1:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .house.row0.col1:checked ~ div > div > house > .row0.col3, +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .house.row0.col1:checked ~ div > div > house > .row2.col3, +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .house.row0.col1:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .house.row0.col1:checked ~ div > div > house > .row2.col4, +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .house.row0.col1:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .house.row-1.col1:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked ~ .house.row-1.col1:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked ~ .house.row-1.col1:checked ~ div > div > house > .row0.col3, +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked ~ .house.row-1.col1:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked ~ .house.row-1.col1:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked ~ .hs.row0.col4:checked ~ .house.row-1.col1:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked ~ .hs.row0.col3:checked ~ .house.row-1.col1:checked ~ div > div > house > .row-1.col3 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked ~ .hs.row0.col4:checked ~ .house.row-1.col1:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row-1.col3 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked ~ .hs.row0.col3:checked ~ .house.row-1.col1:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked ~ .hs.row0.col3:checked ~ .house.row-1.col1:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .house.row-1.col1:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .house.row-1.col0:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .house.row-1.col0:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .house.row-1.col0:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .house.row-1.col0:checked ~ div > div > house > .row-1.col3 { + opacity: 1; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .house.row-1.col0:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row-1.col2 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .house.row-1.col1:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row-1.col4 { + opacity: 1; +} +.hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .house.row-1.col1:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} + +.house.row1.col1:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col3, +.house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row2.col2, +.house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4, +.house.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row2.col3, +.house.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row2.col4, +.house.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row2.col3, +.hs.row2.col2:checked ~ .house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row3.col1, +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col2:checked ~ .house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col2:checked ~ .house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .house.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col4, +.hs.row2.col3:checked ~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col2, +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col3:checked ~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col4:checked ~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col4:checked ~ .house.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.house.row2.col1:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col-2:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col-2:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col-1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row1.col-2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col-1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row1.col-2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row1.col-2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row0.col-1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row0.col-2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row-1.col-1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row1.col-3 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row1.col-2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row0.col-2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row1.col-2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col3, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row-1.col0:checked +~ div > div > house > .row0.col-1, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row-1.col0:checked +~ div > div > house > .row-1.col-1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > house > .row-1.col2, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col3, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row-1.col0 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row0.col0, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row-1.col-1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row0.col-1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col3, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col1, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > house > .row-1.col3, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col4, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row-1.col3, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row-1.col0 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col4, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col-1, +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row0.col3, +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked ~ div > div > house > .row0.col-1, +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked ~ div > div > house > .row-1.col0 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > house > .row-1.col-1, +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row0.col2, +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row0.col-2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-2:checked ~ div > div > house > .row-1.col-2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-2:checked ~ .hs.row-1.col-2:checked ~ div > div > house > .row-1.col-1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-2:checked ~ .hs.row-1.col-2:checked ~ .hs.row-1.col-1:checked ~ div > div > house > .row-1.col0 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-2:checked ~ .hs.row-1.col-2:checked ~ .hs.row-1.col-1:checked ~ .hs.row-1.col0:checked ~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row1.col-2, +.house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row0.col-1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked ~ div > div > house > .row-1.col-1, +.house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked ~ div > div > house > .row0.col-2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked ~ div > div > house > .row-1.col-2, +.house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked ~ div > div > house > .row-1.col0 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked ~ .hs.row-1.col0:checked ~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div +> div +> house +> .row1.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col3, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > house > .row2.col3, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col3, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row2.col3, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked +~ div +> div +> house +> .row1.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row0.col-1, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row-1.col0 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col0:checked ~ div > div > house > .row-1.col-1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ div > div > house > .row-1.col-2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ div > div > house > .row0.col-2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ div > div > house > .row1.col-2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row0.col-2, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row-1.col-1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row-1.col-2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row1.col3, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row0.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row1.col3:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col0 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col0:checked +~ div > div > house > .row-1.col-1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row-1.col-1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row-1.col-2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col1:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} + +.house.row1.col1:checked ~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .house.row0.col1:checked ~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > shed > .row3.col0, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > shed > .row2.col0, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} + +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > shed > .row2.col-1, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > shed > .row3.col0, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} + +.hs.row2.col-1:checked ~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > shed > .row2.col-2, +.hs.row2.col-1:checked ~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > shed > .row3.col-1, +.hs.row2.col-1:checked ~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > shed > .row1.col-1 { + opacity: 0; +} + +.hs.row2.col-2:checked ~ .hs.row2.col-1:checked ~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > shed > .row3.col-2, +.hs.row2.col-2:checked ~ .hs.row2.col-1:checked ~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > shed > .row1.col-2 { + opacity: 0; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-1:checked ~ div > div > shed > .row0.col-1 { + opacity: 0; +} + +.hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-2:checked ~ .hs.row0.col-2:checked ~ div > div > shed > .row0.col-2, +.hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-2:checked ~ .hs.row0.col-2:checked ~ div > div > shed > .row0.col-1 { + opacity: 0; +} + +.hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-2:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} + +.hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-2:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked ~ div > div > shed > .row0.col0, +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked ~ div > div > shed > .row0.col-2 { + opacity: 0; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} + +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > shed > .row0.col1, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > shed > .row0.col-1 { + opacity: 0; +} + +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > shed > .row0.col-2, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > shed > .row1.col-2 { + opacity: 0; +} + +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col0:checked +~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > shed > .row2.col-2 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > shed > .row4.col0 { + opacity: 0; +} + +.hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > shed > .row4.col-1 { + opacity: 0; +} + +.hs.row3.col-2:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > shed > .row4.col-2 { + opacity: 0; +} + +.hs.row4.col-2:checked ~ .hs.row3.col-2:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > shed > .row4.col-1 { + opacity: 0; +} + +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row3.col-2:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > shed > .row4.col0 { + opacity: 0; +} + +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col-2:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.hs.row4.col-1:checked ~ .hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > shed > .row4.col-2, +.hs.row4.col-1:checked ~ .hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > shed > .row4.col-1, +.hs.row4.col-1:checked ~ .hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > shed > .row4.col0 { + opacity: 0; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.hs.row4.col0:checked ~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > shed > .row4.col0, +.hs.row4.col0:checked ~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > shed > .row4.col1, +.hs.row4.col0:checked ~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > shed > .row4.col-1 { + opacity: 0; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > shed > .row4.col-2 { + opacity: 0; +} + +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > shed > .row3.col-2 { + opacity: 0; +} + +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col-2:checked +~ .hs.row3.col0:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > shed > .row2.col-2 { + opacity: 0; +} + +.hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > shed > .row4.col-2 { + opacity: 0; +} + +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col-2:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > shed > .row2.col-2 { + opacity: 0; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col-2:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-2:checked ~ div > div > shed > .row1.col-1, +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col-2:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-2:checked ~ div > div > shed > .row0.col-2 { + opacity: 0; +} + +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col0:checked ~ div > div > shed > .row0.col0, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col0:checked ~ div > div > shed > .row1.col-1 { + opacity: 0; +} + +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row0.col-1:checked ~ div > div > shed > .row0.col-1, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row0.col-1:checked ~ div > div > shed > .row0.col-2 { + opacity: 0; +} + +.house.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row-1.col-1:checked ~ div > div > shed > .row-1.col-1, +.house.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row-1.col-1:checked ~ div > div > shed > .row-1.col-2 { + opacity: 0; +} + +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col4, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col3 { + opacity: 0; +} + +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > shed > .row2.col-2, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > shed > .row0.col-2, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > shed > .row1.col-2 { + opacity: 0; +} + +.house.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row-1.col1:checked +~ .hs.row0.col1:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row1.col-2, +.house.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row-1.col1:checked +~ .hs.row0.col1:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row0.col-2, +.house.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row-1.col1:checked +~ .hs.row0.col1:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row-1.col-2 { + opacity: 0; +} + +.hs.row2.col-2:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > shed > .row2.col-2, +.hs.row2.col-2:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > shed > .row3.col-2 { + opacity: 0; +} + +.hs.row3.col-2:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} + +.house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} + +.hs.row2.col-1:checked ~ .house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row2.col-1, +.hs.row2.col-1:checked ~ .house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} + +.hs.row2.col-2:checked ~ .house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row2.col-2, +.hs.row2.col-2:checked ~ .house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row3.col-2 { + opacity: 0; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row2.col-2:checked ~ .house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row3.col-1, +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row2.col-2:checked ~ .house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row0.col2, +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} + +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row0.col2, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row0.col3 { + opacity: 0; +} + +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row1.col3, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.house.row2.col1:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col4, +.house.row2.col1:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col3, +.house.row2.col1:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.house.row2.col1:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row2.col4, +.house.row2.col1:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row2.col3, +.house.row2.col1:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .house.row2.col1:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col3, +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .house.row2.col1:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .house.row2.col1:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col4, +.hs.row3.col3:checked ~ .house.row2.col1:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row3.col4, +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.house.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col4, +.house.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row2.col4, +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row2.col4, +.house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col4:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.house.row2.col1:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col4, +.house.row2.col1:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.house.row2.col1:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col4, +.house.row2.col1:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.house.row2.col1:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col4, +.house.row2.col1:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.hs.row3.col-1:checked ~ .hs.row2.col-1:checked ~ .house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > shed > .row3.col-1, +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > shed > .row4.col-1, +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > shed > .row3.col-2 { + opacity: 0; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > shed > .row2.col-2, +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > shed > .row4.col-2 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .house.row1.col1:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .house.row1.col1:checked ~ div > div > shed > .row3.col2, +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .house.row1.col1:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .house.row1.col1:checked ~ div > div > shed > .row1.col3, +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .house.row1.col1:checked ~ div > div > shed > .row3.col3, +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .house.row1.col1:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .house.row1.col1:checked ~ div > div > shed > .row3.col4, +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .house.row1.col1:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .house.row0.col1:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked ~ .house.row0.col1:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked ~ .house.row0.col1:checked ~ div > div > shed > .row1.col3, +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked ~ .house.row0.col1:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked ~ .house.row0.col1:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked ~ .hs.row1.col4:checked ~ .house.row0.col1:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked ~ .house.row0.col1:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked ~ .hs.row1.col4:checked ~ .house.row0.col1:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked ~ .house.row0.col1:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked ~ .house.row0.col1:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .house.row0.col1:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row0.col0:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row0.col0:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row0.col0:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .house.row0.col0:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .house.row0.col0:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col2 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row0.col4 { + opacity: 0; +} +.hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row4.col4 { + opacity: 0; +} + +.house.row2.col1:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col3, +.house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row3.col2, +.house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col4, +.house.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row3.col3, +.house.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row3.col4, +.house.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row3.col3, +.hs.row3.col2:checked ~ .house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row4.col2 { + opacity: 0; +} + +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ .house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row4.col1, +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ .house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row4.col3 { + opacity: 0; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col2:checked ~ .house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row4.col4 { + opacity: 0; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row3.col2:checked ~ .house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row3.col2:checked +~ .hs.row3.col4:checked +~ .house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row3.col4, +.hs.row3.col3:checked ~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row4.col3 { + opacity: 0; +} + +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row4.col2, +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row4.col4 { + opacity: 0; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col3:checked ~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row4.col4 { + opacity: 0; +} + +.hs.row4.col4:checked ~ .hs.row3.col4:checked ~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row4.col3 { + opacity: 0; +} + +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row3.col4:checked ~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row4.col2 { + opacity: 0; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row3.col4:checked ~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.house.row3.col1:checked ~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col-1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row2.col-2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col-1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row2.col-2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row2.col-2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row1.col-2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row0.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row2.col-3 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row2.col-2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row1.col-2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row2.col-2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col3, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row0.col0:checked +~ div > div > shed > .row1.col-1, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row0.col0:checked +~ div > div > shed > .row0.col-1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row0.col2, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row3.col2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row1.col0, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row0.col-1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col3, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col1, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row0.col3, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col4, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row0.col3, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ div > div > shed > .row2.col-1, +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row1.col3, +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked ~ div > div > shed > .row1.col-1, +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > shed > .row0.col-1, +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row1.col2, +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row1.col-2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-2:checked ~ div > div > shed > .row0.col-2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-2:checked ~ .hs.row0.col-2:checked ~ div > div > shed > .row0.col-1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-2:checked ~ .hs.row0.col-2:checked ~ .hs.row0.col-1:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-2:checked ~ .hs.row0.col-2:checked ~ .hs.row0.col-1:checked ~ .hs.row0.col0:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row2.col-2, +.house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked ~ div > div > shed > .row0.col-1, +.house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked ~ div > div > shed > .row1.col-2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked ~ div > div > shed > .row0.col-2, +.house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked ~ .hs.row0.col0:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div +> div +> shed +> .row2.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row3.col3, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col3, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row3.col3, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked +~ div +> div +> shed +> .row2.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row1.col-1, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col0:checked ~ div > div > shed > .row0.col-1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > shed > .row0.col-2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > shed > .row1.col-2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > shed > .row2.col-2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row1.col-2, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row0.col-1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row0.col-2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col3, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row1.col4:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row2.col3:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col0:checked +~ div > div > shed > .row0.col-1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row0.col-1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row0.col-2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col1:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.house.row1.col1:checked ~ div > div > house > .row2.col1 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .house.row0.col1:checked ~ div > div > house > .row2.col1 { + opacity: 1; +} + +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > house > .row3.col0, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > house > .row2.col0, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} + +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > house > .row2.col-1, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > house > .row3.col0, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} + +.hs.row2.col-1:checked ~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > house > .row2.col-2, +.hs.row2.col-1:checked ~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > house > .row3.col-1, +.hs.row2.col-1:checked ~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > house > .row1.col-1 { + opacity: 1; +} + +.hs.row2.col-2:checked ~ .hs.row2.col-1:checked ~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > house > .row3.col-2, +.hs.row2.col-2:checked ~ .hs.row2.col-1:checked ~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > house > .row1.col-2 { + opacity: 1; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-1:checked ~ div > div > house > .row0.col-1 { + opacity: 1; +} + +.hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-2:checked ~ .hs.row0.col-2:checked ~ div > div > house > .row0.col-2, +.hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-2:checked ~ .hs.row0.col-2:checked ~ div > div > house > .row0.col-1 { + opacity: 1; +} + +.hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-2:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} + +.hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-2:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked ~ div > div > house > .row0.col0, +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked ~ div > div > house > .row0.col-2 { + opacity: 1; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} + +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > house > .row0.col1, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > house > .row0.col-1 { + opacity: 1; +} + +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > house > .row0.col-2, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > house > .row1.col-2 { + opacity: 1; +} + +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col0:checked +~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > house > .row2.col-2 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > house > .row4.col0 { + opacity: 1; +} + +.hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > house > .row4.col-1 { + opacity: 1; +} + +.hs.row3.col-2:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > house > .row4.col-2 { + opacity: 1; +} + +.hs.row4.col-2:checked ~ .hs.row3.col-2:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > house > .row4.col-1 { + opacity: 1; +} + +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row3.col-2:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > house > .row4.col0 { + opacity: 1; +} + +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col-2:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > house > .row4.col1 { + opacity: 1; +} + +.hs.row4.col-1:checked ~ .hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > house > .row4.col-2, +.hs.row4.col-1:checked ~ .hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > house > .row4.col-1, +.hs.row4.col-1:checked ~ .hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > house > .row4.col0 { + opacity: 1; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > house > .row4.col1 { + opacity: 1; +} + +.hs.row4.col0:checked ~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > house > .row4.col0, +.hs.row4.col0:checked ~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > house > .row4.col1, +.hs.row4.col0:checked ~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > house > .row4.col-1 { + opacity: 1; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > house > .row4.col-2 { + opacity: 1; +} + +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > house > .row3.col-2 { + opacity: 1; +} + +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col-2:checked +~ .hs.row3.col0:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > house > .row2.col-2 { + opacity: 1; +} + +.hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ div > div > house > .row4.col-2 { + opacity: 1; +} + +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col-2:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > house > .row2.col-2 { + opacity: 1; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col-2:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-2:checked ~ div > div > house > .row1.col-1, +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col-2:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-2:checked ~ div > div > house > .row0.col-2 { + opacity: 1; +} + +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col0:checked ~ div > div > house > .row0.col0, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col0:checked ~ div > div > house > .row1.col-1 { + opacity: 1; +} + +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row0.col-1:checked ~ div > div > house > .row0.col-1, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row0.col-1:checked ~ div > div > house > .row0.col-2 { + opacity: 1; +} + +.house.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row-1.col-1:checked ~ div > div > house > .row-1.col-1, +.house.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row-1.col-1:checked ~ div > div > house > .row-1.col-2 { + opacity: 1; +} + +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col4, +.house.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col3 { + opacity: 1; +} + +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > house > .row2.col-2, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > house > .row0.col-2, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > house > .row1.col-2 { + opacity: 1; +} + +.house.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row-1.col1:checked +~ .hs.row0.col1:checked +~ .hs.row1.col1:checked +~ div > div > house > .row1.col-2, +.house.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row-1.col1:checked +~ .hs.row0.col1:checked +~ .hs.row1.col1:checked +~ div > div > house > .row0.col-2, +.house.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row-1.col1:checked +~ .hs.row0.col1:checked +~ .hs.row1.col1:checked +~ div > div > house > .row-1.col-2 { + opacity: 1; +} + +.hs.row2.col-2:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > house > .row2.col-2, +.hs.row2.col-2:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > house > .row3.col-2 { + opacity: 1; +} + +.hs.row3.col-2:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} + +.house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} + +.hs.row2.col-1:checked ~ .house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row2.col-1, +.hs.row2.col-1:checked ~ .house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} + +.hs.row2.col-2:checked ~ .house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row2.col-2, +.hs.row2.col-2:checked ~ .house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row3.col-2 { + opacity: 1; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row2.col-2:checked ~ .house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row3.col-1, +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row2.col-2:checked ~ .house.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row0.col2, +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .house.row2.col1:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} + +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row0.col2, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row0.col3 { + opacity: 1; +} + +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row1.col3, +.hs.row2.col0:checked ~ .house.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row2.col3 { + opacity: 1; +} + +.house.row2.col1:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col4, +.house.row2.col1:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col3, +.house.row2.col1:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} + +.house.row2.col1:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row2.col4, +.house.row2.col1:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row2.col3, +.house.row2.col1:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .house.row2.col1:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col3, +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .house.row2.col1:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .house.row2.col1:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col4, +.hs.row3.col3:checked ~ .house.row2.col1:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > house > .row3.col4, +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > house > .row3.col3 { + opacity: 1; +} + +.house.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col4, +.house.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ div > div > house > .row2.col4, +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} + +.house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row2.col4, +.house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col4:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} + +.house.row2.col1:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col4, +.house.row2.col1:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col3 { + opacity: 1; +} + +.house.row2.col1:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col4, +.house.row2.col1:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col3 { + opacity: 1; +} + +.house.row2.col1:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col4, +.house.row2.col1:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col3 { + opacity: 1; +} + +.hs.row3.col-1:checked ~ .hs.row2.col-1:checked ~ .house.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > house > .row3.col-1, +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > house > .row4.col-1, +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > house > .row3.col-2 { + opacity: 1; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > house > .row2.col-2, +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col0:checked ~ .house.row2.col1:checked ~ div > div > house > .row4.col-2 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .house.row1.col1:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .house.row1.col1:checked ~ div > div > house > .row3.col2, +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .house.row1.col1:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .house.row1.col1:checked ~ div > div > house > .row1.col3, +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .house.row1.col1:checked ~ div > div > house > .row3.col3, +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .house.row1.col1:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .house.row1.col1:checked ~ div > div > house > .row3.col4, +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .house.row1.col1:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .house.row0.col1:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked ~ .house.row0.col1:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked ~ .house.row0.col1:checked ~ div > div > house > .row1.col3, +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked ~ .house.row0.col1:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked ~ .house.row0.col1:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked ~ .hs.row1.col4:checked ~ .house.row0.col1:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked ~ .house.row0.col1:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked ~ .hs.row1.col4:checked ~ .house.row0.col1:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked ~ .house.row0.col1:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked ~ .house.row0.col1:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .house.row0.col1:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row0.col0:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row0.col0:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row0.col0:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .house.row0.col0:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .house.row0.col0:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col2 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row0.col4 { + opacity: 1; +} +.hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row4.col4 { + opacity: 1; +} + +.house.row2.col1:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col3, +.house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > house > .row3.col2, +.house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col4, +.house.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row3.col3, +.house.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row3.col4, +.house.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > house > .row3.col3, +.hs.row3.col2:checked ~ .house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > house > .row4.col2 { + opacity: 1; +} + +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ .house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > house > .row4.col1, +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ .house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > house > .row4.col3 { + opacity: 1; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col2:checked ~ .house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > house > .row4.col4 { + opacity: 1; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row3.col2:checked ~ .house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row3.col2:checked +~ .hs.row3.col4:checked +~ .house.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row3.col4, +.hs.row3.col3:checked ~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row4.col3 { + opacity: 1; +} + +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row4.col2, +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row4.col4 { + opacity: 1; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col3:checked ~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row4.col1 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row4.col4 { + opacity: 1; +} + +.hs.row4.col4:checked ~ .hs.row3.col4:checked ~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row4.col3 { + opacity: 1; +} + +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row3.col4:checked ~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row4.col2 { + opacity: 1; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row3.col4:checked ~ .house.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row4.col1 { + opacity: 1; +} + +.house.row3.col1:checked ~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col-1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row2.col-2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col-1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row2.col-2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row2.col-2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row1.col-2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row0.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row2.col-3 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row2.col-2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row1.col-2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row2.col-2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col3, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row0.col0:checked +~ div > div > house > .row1.col-1, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row0.col0:checked +~ div > div > house > .row0.col-1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row0.col2, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col3, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row3.col2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row1.col0, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row0.col-1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col3, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col1, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row0.col3, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col4, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row0.col3, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ div > div > house > .row2.col-1, +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row1.col3, +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked ~ div > div > house > .row1.col-1, +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > house > .row0.col-1, +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ .hs.row0.col1:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ div > div > house > .row1.col2, +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row1.col-2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-2:checked ~ div > div > house > .row0.col-2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-2:checked ~ .hs.row0.col-2:checked ~ div > div > house > .row0.col-1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-2:checked ~ .hs.row0.col-2:checked ~ .hs.row0.col-1:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-2:checked ~ .hs.row0.col-2:checked ~ .hs.row0.col-1:checked ~ .hs.row0.col0:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row2.col-2, +.house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked ~ div > div > house > .row0.col-1, +.house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked ~ div > div > house > .row1.col-2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked ~ div > div > house > .row0.col-2, +.house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked ~ .hs.row0.col0:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div +> div +> house +> .row2.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col3, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row3.col3, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col3, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row3.col3, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked +~ div +> div +> house +> .row2.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row1.col-1, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col0:checked ~ div > div > house > .row0.col-1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > house > .row0.col-2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > house > .row1.col-2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > house > .row2.col-2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row1.col-2, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row0.col-1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row0.col-2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col3, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row1.col4:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row2.col3:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col0:checked +~ div > div > house > .row0.col-1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row0.col-1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row0.col-2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col1:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} + +.house.row2.col1:checked ~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .house.row1.col1:checked ~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > shed > .row4.col0, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > shed > .row3.col0, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > shed > .row2.col0 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > shed > .row3.col-1, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > shed > .row4.col0, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > shed > .row2.col0 { + opacity: 0; +} + +.hs.row3.col-1:checked ~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > shed > .row3.col-2, +.hs.row3.col-1:checked ~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > shed > .row4.col-1, +.hs.row3.col-1:checked ~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > shed > .row2.col-1 { + opacity: 0; +} + +.hs.row3.col-2:checked ~ .hs.row3.col-1:checked ~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > shed > .row4.col-2, +.hs.row3.col-2:checked ~ .hs.row3.col-1:checked ~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > shed > .row2.col-2 { + opacity: 0; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-1:checked ~ div > div > shed > .row1.col-1 { + opacity: 0; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked ~ div > div > shed > .row1.col-2, +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked ~ div > div > shed > .row1.col-1 { + opacity: 0; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ div > div > shed > .row1.col0, +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ div > div > shed > .row1.col-2 { + opacity: 0; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > shed > .row1.col1, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > shed > .row1.col-1 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > shed > .row1.col-2, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > shed > .row2.col-2 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col0:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > shed > .row3.col-2 { + opacity: 0; +} + +.hs.row4.col0:checked ~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > shed > .row5.col0 { + opacity: 0; +} + +.hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > shed > .row5.col-1 { + opacity: 0; +} + +.hs.row4.col-2:checked ~ .hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > shed > .row5.col-2 { + opacity: 0; +} + +.hs.row5.col-2:checked ~ .hs.row4.col-2:checked ~ .hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > shed > .row5.col-1 { + opacity: 0; +} + +.hs.row5.col-2:checked +~ .hs.row5.col-1:checked +~ .hs.row4.col-2:checked ~ .hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > shed > .row5.col0 { + opacity: 0; +} + +.hs.row5.col-2:checked +~ .hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row4.col-2:checked ~ .hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > shed > .row5.col1 { + opacity: 0; +} + +.hs.row5.col-1:checked ~ .hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > shed > .row5.col-2, +.hs.row5.col-1:checked ~ .hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > shed > .row5.col-1, +.hs.row5.col-1:checked ~ .hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > shed > .row5.col0 { + opacity: 0; +} + +.hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > shed > .row5.col1 { + opacity: 0; +} + +.hs.row5.col0:checked ~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > shed > .row5.col0, +.hs.row5.col0:checked ~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > shed > .row5.col1, +.hs.row5.col0:checked ~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > shed > .row5.col-1 { + opacity: 0; +} + +.hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > shed > .row5.col-2 { + opacity: 0; +} + +.hs.row5.col-2:checked +~ .hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > shed > .row4.col-2 { + opacity: 0; +} + +.hs.row5.col-2:checked +~ .hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row4.col-2:checked +~ .hs.row4.col0:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > shed > .row3.col-2 { + opacity: 0; +} + +.hs.row5.col-1:checked ~ .hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > shed > .row5.col-2 { + opacity: 0; +} + +.hs.row5.col-2:checked +~ .hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row4.col-2:checked +~ .hs.row4.col0:checked +~ .house.row4.col1:checked +~ div > div > shed > .row3.col-2 { + opacity: 0; +} + +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col-2:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-2:checked ~ div > div > shed > .row2.col-1, +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col-2:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-2:checked ~ div > div > shed > .row1.col-2 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col0:checked ~ div > div > shed > .row1.col0, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col0:checked ~ div > div > shed > .row2.col-1 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col-1:checked ~ div > div > shed > .row1.col-1, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col-1:checked ~ div > div > shed > .row1.col-2 { + opacity: 0; +} + +.house.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row0.col-1:checked ~ div > div > shed > .row0.col-1, +.house.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row0.col-1:checked ~ div > div > shed > .row0.col-2 { + opacity: 0; +} + +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col3:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ div > div > shed > .row3.col-2, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ div > div > shed > .row1.col-2, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ div > div > shed > .row2.col-2 { + opacity: 0; +} + +.house.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row0.col1:checked +~ .hs.row1.col1:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row2.col-2, +.house.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row0.col1:checked +~ .hs.row1.col1:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row1.col-2, +.house.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row0.col1:checked +~ .hs.row1.col1:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row0.col-2 { + opacity: 0; +} + +.hs.row3.col-2:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ div > div > shed > .row3.col-2, +.hs.row3.col-2:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ div > div > shed > .row4.col-2 { + opacity: 0; +} + +.hs.row4.col-2:checked ~ .hs.row3.col-2:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ div > div > shed > .row4.col-1 { + opacity: 0; +} + +.house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} + +.hs.row3.col-1:checked ~ .house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row3.col-1, +.hs.row3.col-1:checked ~ .house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row4.col-1 { + opacity: 0; +} + +.hs.row3.col-2:checked ~ .house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row3.col-2, +.hs.row3.col-2:checked ~ .house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row4.col-2 { + opacity: 0; +} + +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row3.col-2:checked ~ .house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row4.col-1, +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row3.col-2:checked ~ .house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row4.col0 { + opacity: 0; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row1.col2, +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row2.col2 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row1.col2, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row2.col3, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.house.row3.col1:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row3.col4, +.house.row3.col1:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row3.col3, +.house.row3.col1:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row4.col3 { + opacity: 0; +} + +.house.row3.col1:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row3.col4, +.house.row3.col1:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row3.col3, +.house.row3.col1:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row4.col4 { + opacity: 0; +} + +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .house.row3.col1:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row4.col3, +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .house.row3.col1:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row4.col2 { + opacity: 0; +} + +.hs.row4.col3:checked ~ .house.row3.col1:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row4.col4, +.hs.row4.col3:checked ~ .house.row3.col1:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row4.col2 { + opacity: 0; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row4.col4, +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row4.col3 { + opacity: 0; +} + +.house.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row2.col4, +.house.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col4:checked +~ div > div > shed > .row3.col4, +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col4:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col4:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row3.col4, +.house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col4:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row4.col4 { + opacity: 0; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col4:checked +~ .hs.row2.col4:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.hs.row4.col4:checked ~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col4:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row4.col3 { + opacity: 0; +} + +.house.row3.col1:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col4, +.house.row3.col1:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.house.row3.col1:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col4, +.house.row3.col1:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.house.row3.col1:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col4, +.house.row3.col1:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row4.col-1:checked ~ .hs.row3.col-1:checked ~ .house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row4.col0 { + opacity: 0; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > shed > .row4.col-1, +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > shed > .row5.col-1, +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > shed > .row4.col-2 { + opacity: 0; +} + +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > shed > .row3.col-2, +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > shed > .row5.col-2 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .house.row2.col1:checked ~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .house.row2.col1:checked ~ div > div > shed > .row4.col2, +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .house.row2.col1:checked ~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .house.row2.col1:checked ~ div > div > shed > .row2.col3, +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .house.row2.col1:checked ~ div > div > shed > .row4.col3, +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .house.row2.col1:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .house.row2.col1:checked ~ div > div > shed > .row4.col4, +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .house.row2.col1:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .house.row1.col1:checked ~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked ~ .house.row1.col1:checked ~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked ~ .house.row1.col1:checked ~ div > div > shed > .row2.col3, +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked ~ .house.row1.col1:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked ~ .house.row1.col1:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked ~ .hs.row2.col4:checked ~ .house.row1.col1:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked ~ .house.row1.col1:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked ~ .hs.row2.col4:checked ~ .house.row1.col1:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked ~ .house.row1.col1:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked ~ .house.row1.col1:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .house.row1.col1:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row1.col0:checked ~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row1.col0:checked ~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row1.col0:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .house.row1.col0:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .house.row1.col0:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} +.hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row5.col4 { + opacity: 0; +} + +.house.row3.col1:checked ~ div > div > shed > .row3.col2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row3.col3, +.house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row4.col2, +.house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row3.col4, +.house.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row4.col3, +.house.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row4.col4, +.house.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row4.col2:checked ~ .house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row4.col3, +.hs.row4.col2:checked ~ .house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row5.col2 { + opacity: 0; +} + +.hs.row5.col2:checked ~ .hs.row4.col2:checked ~ .house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row5.col1, +.hs.row5.col2:checked ~ .hs.row4.col2:checked ~ .house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row5.col3 { + opacity: 0; +} + +.hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row4.col2:checked ~ .house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row5.col4 { + opacity: 0; +} + +.hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row5.col4:checked +~ .hs.row4.col2:checked ~ .house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row4.col4 { + opacity: 0; +} + +.hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row5.col4:checked +~ .hs.row4.col2:checked +~ .hs.row4.col4:checked +~ .house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row4.col3:checked ~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ div > div > shed > .row4.col4, +.hs.row4.col3:checked ~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ div > div > shed > .row5.col3 { + opacity: 0; +} + +.hs.row5.col3:checked ~ .hs.row4.col3:checked ~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ div > div > shed > .row5.col2, +.hs.row5.col3:checked ~ .hs.row4.col3:checked ~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ div > div > shed > .row5.col4 { + opacity: 0; +} + +.hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row4.col3:checked ~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ div > div > shed > .row5.col1 { + opacity: 0; +} + +.hs.row4.col4:checked ~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > shed > .row5.col4 { + opacity: 0; +} + +.hs.row5.col4:checked ~ .hs.row4.col4:checked ~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > shed > .row5.col3 { + opacity: 0; +} + +.hs.row5.col3:checked +~ .hs.row5.col4:checked +~ .hs.row4.col4:checked ~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > shed > .row5.col2 { + opacity: 0; +} + +.hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row5.col4:checked +~ .hs.row4.col4:checked ~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > shed > .row5.col1 { + opacity: 0; +} + +.house.row4.col1:checked ~ div > div > shed > .row3.col1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col-2:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col-2:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col-1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row3.col-2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col-1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row3.col-2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row3.col-2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row2.col-2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row1.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row3.col-3 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row3.col-2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row2.col-2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row3.col-2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ div > div > shed > .row3.col2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row3.col3, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row1.col0:checked +~ div > div > shed > .row2.col-1, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row1.col0:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row1.col2, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col3, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row4.col2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row2.col0, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col1, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row1.col3, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row3.col4, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row1.col3, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ div > div > shed > .row3.col0 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ div > div > shed > .row3.col-1, +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row2.col3, +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked ~ div > div > shed > .row2.col-1, +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > shed > .row1.col-1, +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row2.col2, +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ div > div > shed > .row2.col-2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-2:checked ~ div > div > shed > .row1.col-2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked ~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked ~ .hs.row1.col-1:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked ~ .hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ div > div > shed > .row3.col-2, +.house.row4.col1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-1:checked ~ div > div > shed > .row1.col-1, +.house.row4.col1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-1:checked ~ div > div > shed > .row2.col-2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ div > div > shed > .row1.col-2, +.house.row4.col1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col3:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div +> div +> shed +> .row3.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col4:checked +~ .hs.row2.col1:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col3:checked +~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col4:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col3, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col4, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row4.col3, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col3, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row4.col3, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row3.col3 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked +~ div +> div +> shed +> .row3.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row2.col-1, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col0:checked ~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > shed > .row1.col-2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > shed > .row2.col-2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > shed > .row3.col-2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row2.col-2, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row1.col-2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col3, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row2.col4:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row3.col3:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col0:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row1.col-2 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col1:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.house.row2.col1:checked ~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .house.row1.col1:checked ~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > house > .row4.col0, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > house > .row3.col0, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > house > .row2.col0 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > house > .row3.col-1, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > house > .row4.col0, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > house > .row2.col0 { + opacity: 1; +} + +.hs.row3.col-1:checked ~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > house > .row3.col-2, +.hs.row3.col-1:checked ~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > house > .row4.col-1, +.hs.row3.col-1:checked ~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > house > .row2.col-1 { + opacity: 1; +} + +.hs.row3.col-2:checked ~ .hs.row3.col-1:checked ~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > house > .row4.col-2, +.hs.row3.col-2:checked ~ .hs.row3.col-1:checked ~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > house > .row2.col-2 { + opacity: 1; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-1:checked ~ div > div > house > .row1.col-1 { + opacity: 1; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked ~ div > div > house > .row1.col-2, +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked ~ div > div > house > .row1.col-1 { + opacity: 1; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} + +.hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ div > div > house > .row1.col0, +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ div > div > house > .row1.col-2 { + opacity: 1; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > house > .row1.col1, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > house > .row1.col-1 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > house > .row1.col-2, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > house > .row2.col-2 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col0:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > house > .row3.col-2 { + opacity: 1; +} + +.hs.row4.col0:checked ~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > house > .row5.col0 { + opacity: 1; +} + +.hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > house > .row5.col-1 { + opacity: 1; +} + +.hs.row4.col-2:checked ~ .hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > house > .row5.col-2 { + opacity: 1; +} + +.hs.row5.col-2:checked ~ .hs.row4.col-2:checked ~ .hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > house > .row5.col-1 { + opacity: 1; +} + +.hs.row5.col-2:checked +~ .hs.row5.col-1:checked +~ .hs.row4.col-2:checked ~ .hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > house > .row5.col0 { + opacity: 1; +} + +.hs.row5.col-2:checked +~ .hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row4.col-2:checked ~ .hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > house > .row5.col1 { + opacity: 1; +} + +.hs.row5.col-1:checked ~ .hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > house > .row5.col-2, +.hs.row5.col-1:checked ~ .hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > house > .row5.col-1, +.hs.row5.col-1:checked ~ .hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > house > .row5.col0 { + opacity: 1; +} + +.hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > house > .row5.col1 { + opacity: 1; +} + +.hs.row5.col0:checked ~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > house > .row5.col0, +.hs.row5.col0:checked ~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > house > .row5.col1, +.hs.row5.col0:checked ~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > house > .row5.col-1 { + opacity: 1; +} + +.hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > house > .row5.col-2 { + opacity: 1; +} + +.hs.row5.col-2:checked +~ .hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > house > .row4.col-2 { + opacity: 1; +} + +.hs.row5.col-2:checked +~ .hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row4.col-2:checked +~ .hs.row4.col0:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > house > .row3.col-2 { + opacity: 1; +} + +.hs.row5.col-1:checked ~ .hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ div > div > house > .row5.col-2 { + opacity: 1; +} + +.hs.row5.col-2:checked +~ .hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row4.col-2:checked +~ .hs.row4.col0:checked +~ .house.row4.col1:checked +~ div > div > house > .row3.col-2 { + opacity: 1; +} + +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col-2:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-2:checked ~ div > div > house > .row2.col-1, +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col-2:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-2:checked ~ div > div > house > .row1.col-2 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col0:checked ~ div > div > house > .row1.col0, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col0:checked ~ div > div > house > .row2.col-1 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col-1:checked ~ div > div > house > .row1.col-1, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col-1:checked ~ div > div > house > .row1.col-2 { + opacity: 1; +} + +.house.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row0.col-1:checked ~ div > div > house > .row0.col-1, +.house.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row0.col-1:checked ~ div > div > house > .row0.col-2 { + opacity: 1; +} + +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col3:checked ~ div > div > house > .row0.col4, +.house.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col3:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ div > div > house > .row3.col-2, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ div > div > house > .row1.col-2, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ div > div > house > .row2.col-2 { + opacity: 1; +} + +.house.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row0.col1:checked +~ .hs.row1.col1:checked +~ .hs.row2.col1:checked +~ div > div > house > .row2.col-2, +.house.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row0.col1:checked +~ .hs.row1.col1:checked +~ .hs.row2.col1:checked +~ div > div > house > .row1.col-2, +.house.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row0.col1:checked +~ .hs.row1.col1:checked +~ .hs.row2.col1:checked +~ div > div > house > .row0.col-2 { + opacity: 1; +} + +.hs.row3.col-2:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ div > div > house > .row3.col-2, +.hs.row3.col-2:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ div > div > house > .row4.col-2 { + opacity: 1; +} + +.hs.row4.col-2:checked ~ .hs.row3.col-2:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ div > div > house > .row4.col-1 { + opacity: 1; +} + +.house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} + +.hs.row3.col-1:checked ~ .house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row3.col-1, +.hs.row3.col-1:checked ~ .house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row4.col-1 { + opacity: 1; +} + +.hs.row3.col-2:checked ~ .house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row3.col-2, +.hs.row3.col-2:checked ~ .house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row4.col-2 { + opacity: 1; +} + +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row3.col-2:checked ~ .house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row4.col-1, +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row3.col-2:checked ~ .house.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row4.col0 { + opacity: 1; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row1.col2, +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .house.row3.col1:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row2.col2 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row1.col2, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row2.col3, +.hs.row3.col0:checked ~ .house.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} + +.house.row3.col1:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row3.col4, +.house.row3.col1:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row3.col3, +.house.row3.col1:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row4.col3 { + opacity: 1; +} + +.house.row3.col1:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row3.col4, +.house.row3.col1:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row3.col3, +.house.row3.col1:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row4.col4 { + opacity: 1; +} + +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .house.row3.col1:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row4.col3, +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .house.row3.col1:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row4.col2 { + opacity: 1; +} + +.hs.row4.col3:checked ~ .house.row3.col1:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row4.col4, +.hs.row4.col3:checked ~ .house.row3.col1:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row4.col2 { + opacity: 1; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > house > .row4.col4, +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > house > .row4.col3 { + opacity: 1; +} + +.house.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row2.col4, +.house.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row2.col3 { + opacity: 1; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col4:checked +~ div > div > house > .row3.col4, +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col4:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} + +.house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col4:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row3.col4, +.house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col4:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row4.col4 { + opacity: 1; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col4:checked +~ .hs.row2.col4:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} + +.hs.row4.col4:checked ~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col4:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row4.col3 { + opacity: 1; +} + +.house.row3.col1:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col4, +.house.row3.col1:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} + +.house.row3.col1:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col4, +.house.row3.col1:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} + +.house.row3.col1:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col4, +.house.row3.col1:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row4.col-1:checked ~ .hs.row3.col-1:checked ~ .house.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row4.col0 { + opacity: 1; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > house > .row4.col-1, +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > house > .row5.col-1, +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > house > .row4.col-2 { + opacity: 1; +} + +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > house > .row3.col-2, +.hs.row4.col-2:checked +~ .hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col0:checked ~ .house.row3.col1:checked ~ div > div > house > .row5.col-2 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .house.row2.col1:checked ~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .house.row2.col1:checked ~ div > div > house > .row4.col2, +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .house.row2.col1:checked ~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .house.row2.col1:checked ~ div > div > house > .row2.col3, +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .house.row2.col1:checked ~ div > div > house > .row4.col3, +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .house.row2.col1:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .house.row2.col1:checked ~ div > div > house > .row4.col4, +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .house.row2.col1:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .house.row1.col1:checked ~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked ~ .house.row1.col1:checked ~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked ~ .house.row1.col1:checked ~ div > div > house > .row2.col3, +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked ~ .house.row1.col1:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked ~ .house.row1.col1:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked ~ .hs.row2.col4:checked ~ .house.row1.col1:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked ~ .house.row1.col1:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked ~ .hs.row2.col4:checked ~ .house.row1.col1:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked ~ .house.row1.col1:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked ~ .house.row1.col1:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .house.row1.col1:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row1.col0:checked ~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row1.col0:checked ~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row1.col0:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .house.row1.col0:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .house.row1.col0:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} +.hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row5.col4 { + opacity: 1; +} + +.house.row3.col1:checked ~ div > div > house > .row3.col2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > house > .row3.col3, +.house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > house > .row4.col2, +.house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row3.col4, +.house.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row4.col3, +.house.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row4.col4, +.house.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row4.col2:checked ~ .house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > house > .row4.col3, +.hs.row4.col2:checked ~ .house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > house > .row5.col2 { + opacity: 1; +} + +.hs.row5.col2:checked ~ .hs.row4.col2:checked ~ .house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > house > .row5.col1, +.hs.row5.col2:checked ~ .hs.row4.col2:checked ~ .house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > house > .row5.col3 { + opacity: 1; +} + +.hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row4.col2:checked ~ .house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > house > .row5.col4 { + opacity: 1; +} + +.hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row5.col4:checked +~ .hs.row4.col2:checked ~ .house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > house > .row4.col4 { + opacity: 1; +} + +.hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row5.col4:checked +~ .hs.row4.col2:checked +~ .hs.row4.col4:checked +~ .house.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row4.col3:checked ~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ div > div > house > .row4.col4, +.hs.row4.col3:checked ~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ div > div > house > .row5.col3 { + opacity: 1; +} + +.hs.row5.col3:checked ~ .hs.row4.col3:checked ~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ div > div > house > .row5.col2, +.hs.row5.col3:checked ~ .hs.row4.col3:checked ~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ div > div > house > .row5.col4 { + opacity: 1; +} + +.hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row4.col3:checked ~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ div > div > house > .row5.col1 { + opacity: 1; +} + +.hs.row4.col4:checked ~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > house > .row5.col4 { + opacity: 1; +} + +.hs.row5.col4:checked ~ .hs.row4.col4:checked ~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > house > .row5.col3 { + opacity: 1; +} + +.hs.row5.col3:checked +~ .hs.row5.col4:checked +~ .hs.row4.col4:checked ~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > house > .row5.col2 { + opacity: 1; +} + +.hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row5.col4:checked +~ .hs.row4.col4:checked ~ .house.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > house > .row5.col1 { + opacity: 1; +} + +.house.row4.col1:checked ~ div > div > house > .row3.col1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col-2:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col-2:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col-1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row3.col-2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col-1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row3.col-2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row3.col-2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row2.col-2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row1.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row3.col-3 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row3.col-2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row2.col-2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row3.col-2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ div > div > house > .row3.col2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > house > .row3.col3, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row1.col0:checked +~ div > div > house > .row2.col-1, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row1.col0:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > house > .row1.col2, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col3, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > house > .row4.col2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row2.col0, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col3, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col1, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row1.col3, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row3.col4, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > house > .row1.col3, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ div > div > house > .row3.col0 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ div > div > house > .row3.col-1, +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row2.col3, +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked ~ div > div > house > .row2.col-1, +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > house > .row1.col-1, +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row2.col2, +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ div > div > house > .row2.col-2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-2:checked ~ div > div > house > .row1.col-2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked ~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked ~ .hs.row1.col-1:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col-2:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-2:checked ~ .hs.row1.col-2:checked ~ .hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ div > div > house > .row3.col-2, +.house.row4.col1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-1:checked ~ div > div > house > .row1.col-1, +.house.row4.col1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-1:checked ~ div > div > house > .row2.col-2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ div > div > house > .row1.col-2, +.house.row4.col1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col3:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div +> div +> house +> .row3.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col4:checked +~ .hs.row2.col1:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col3:checked +~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row3.col4:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col3, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col4, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row4.col3, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col3, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row4.col3, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row3.col3 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked +~ div +> div +> house +> .row3.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row2.col-1, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col0:checked ~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > house > .row1.col-2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > house > .row2.col-2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > house > .row3.col-2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row2.col-2, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col-2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row1.col-2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col3, +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row2.col4:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row3.col3:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col0:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row1.col-2 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row2.col1:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.house.row0.col2:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} + +.hs.row0.col2:checked ~ .house.row-1.col2:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > shed > .row2.col1, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > shed > .row1.col1, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > shed > .row1.col0, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > shed > .row2.col1, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} + +.hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > shed > .row1.col-1, +.hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > shed > .row2.col0, +.hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} + +.hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > shed > .row2.col-1, +.hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > shed > .row0.col-1 { + opacity: 0; +} + +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col0:checked ~ div > div > shed > .row-1.col0 { + opacity: 0; +} + +.hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked ~ div > div > shed > .row-1.col-1, +.hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked ~ div > div > shed > .row-1.col0 { + opacity: 0; +} + +.hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ div > div > shed > .row-1.col1 { + opacity: 0; +} + +.hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row-1.col2 { + opacity: 0; +} + +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > shed > .row-1.col1, +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > shed > .row-1.col-1 { + opacity: 0; +} + +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row-1.col2 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col2, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col0 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row-1.col-1, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row0.col-1 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} + +.hs.row3.col-1:checked ~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > shed > .row3.col-1, +.hs.row3.col0:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > shed > .row3.col0, +.hs.row3.col0:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > shed > .row3.col1, +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > shed > .row3.col2, +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col-1:checked ~ div > div > shed > .row0.col0, +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col-1:checked ~ div > div > shed > .row-1.col-1 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row-1.col1, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col0:checked ~ div > div > shed > .row-1.col0, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col0:checked ~ div > div > shed > .row-1.col-1 { + opacity: 0; +} + +.house.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-2.col0:checked ~ div > div > shed > .row-2.col0, +.house.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-2.col0:checked ~ div > div > shed > .row-2.col-1 { + opacity: 0; +} + +.house.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-2.col4:checked ~ div > div > shed > .row-2.col5, +.house.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-2.col4:checked ~ div > div > shed > .row-2.col4 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row1.col-1, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row-1.col-1, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row0.col-1 { + opacity: 0; +} + +.house.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-2.col2:checked +~ .hs.row-1.col2:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row0.col-1, +.house.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-2.col2:checked +~ .hs.row-1.col2:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row-1.col-1, +.house.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-2.col2:checked +~ .hs.row-1.col2:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row-2.col-1 { + opacity: 0; +} + +.hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row1.col-1, +.hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} + +.hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} + +.house.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} + +.hs.row1.col0:checked ~ .house.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row1.col0, +.hs.row1.col0:checked ~ .house.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} + +.hs.row1.col-1:checked ~ .house.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row1.col-1, +.hs.row1.col-1:checked ~ .house.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col-1:checked ~ .house.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row2.col0, +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col-1:checked ~ .house.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row-1.col3, +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row0.col3 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row-1.col3, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row-1.col4 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row0.col4, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.house.row1.col2:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row1.col5, +.house.row1.col2:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row1.col4, +.house.row1.col2:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.house.row1.col2:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row1.col5, +.house.row1.col2:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row1.col4, +.house.row1.col2:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .house.row1.col2:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col4, +.hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .house.row1.col2:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .house.row1.col2:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col5, +.hs.row2.col4:checked ~ .house.row1.col2:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row2.col5, +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.house.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row0.col5, +.house.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row0.col4 { + opacity: 0; +} + +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row1.col5, +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row0.col5 { + opacity: 0; +} + +.house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row1.col5, +.house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col5:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} + +.hs.row2.col5:checked ~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.house.row1.col2:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row1.col5, +.house.row1.col2:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.house.row1.col2:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col5, +.house.row1.col2:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.house.row1.col2:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row1.col5, +.house.row1.col2:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row2.col0:checked ~ .hs.row1.col0:checked ~ .house.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > shed > .row2.col0, +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > shed > .row3.col0, +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > shed > .row2.col-1 { + opacity: 0; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > shed > .row1.col-1, +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > shed > .row3.col-1 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .house.row0.col2:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .house.row0.col2:checked ~ div > div > shed > .row2.col3, +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .house.row0.col2:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .house.row0.col2:checked ~ div > div > shed > .row0.col4, +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .house.row0.col2:checked ~ div > div > shed > .row2.col4, +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .house.row0.col2:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .house.row0.col2:checked ~ div > div > shed > .row2.col5, +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .house.row0.col2:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .house.row-1.col2:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked ~ .house.row-1.col2:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked ~ .house.row-1.col2:checked ~ div > div > shed > .row0.col4, +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked ~ .house.row-1.col2:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked ~ .house.row-1.col2:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked ~ .hs.row0.col5:checked ~ .house.row-1.col2:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked ~ .hs.row0.col4:checked ~ .house.row-1.col2:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked ~ .hs.row0.col5:checked ~ .house.row-1.col2:checked ~ .hs.row-1.col5:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked ~ .hs.row0.col4:checked ~ .house.row-1.col2:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked ~ .hs.row0.col4:checked ~ .house.row-1.col2:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .house.row-1.col2:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .house.row-1.col1:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .house.row-1.col1:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .house.row-1.col1:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} + +.hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .house.row-1.col1:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} + +.hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .house.row-1.col1:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row-1.col3 { + opacity: 0; +} + +.hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .house.row-1.col2:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row-1.col5 { + opacity: 0; +} +.hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .house.row-1.col2:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.house.row1.col2:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4, +.house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row2.col3, +.house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5, +.house.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col4, +.house.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row2.col5, +.house.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row2.col4, +.hs.row2.col3:checked ~ .house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row3.col2, +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col3:checked ~ .house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row2.col3:checked ~ .house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row2.col5, +.hs.row2.col4:checked ~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col3, +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col4:checked ~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row2.col5:checked ~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row2.col5:checked ~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row2.col5:checked ~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.house.row2.col2:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col0:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col0:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row0.col-1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row-1.col0:checked ~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row1.col-2 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row0.col-1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row0.col0, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row-1.col0 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row-1.col3, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row0.col1, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row-1.col0 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col4, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col2, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row-1.col4, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row-1.col5, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row-1.col4, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row-1.col5, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col0, +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row0.col4, +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col0, +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col0, +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row0.col3, +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row0.col-1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col-1:checked ~ div > div > shed > .row-1.col-1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked ~ div > div > shed > .row-1.col0 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked ~ .hs.row-1.col0:checked ~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked ~ .hs.row-1.col0:checked ~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row1.col-1, +.house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked ~ div > div > shed > .row-1.col0, +.house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked ~ div > div > shed > .row0.col-1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > shed > .row-1.col-1, +.house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div +> div +> shed +> .row1.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col5, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row2.col4, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row0.col4, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row2.col4, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked +~ div +> div +> shed +> .row1.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row0.col0, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col0 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row-1.col-1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row0.col-1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row0.col-1, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row-1.col0 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row-1.col-1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col4, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row0.col5:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row1.col4:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col5:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row-1.col0 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row-1.col0 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row-1.col-1 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col2:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} + +.house.row0.col2:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} + +.hs.row0.col2:checked ~ .house.row-1.col2:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > house > .row2.col1, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > house > .row1.col1, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > house > .row1.col0, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > house > .row2.col1, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} + +.hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > house > .row1.col-1, +.hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > house > .row2.col0, +.hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} + +.hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > house > .row2.col-1, +.hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > house > .row0.col-1 { + opacity: 1; +} + +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col0:checked ~ div > div > house > .row-1.col0 { + opacity: 1; +} + +.hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked ~ div > div > house > .row-1.col-1, +.hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked ~ div > div > house > .row-1.col0 { + opacity: 1; +} + +.hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ div > div > house > .row-1.col1 { + opacity: 1; +} + +.hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row-1.col2 { + opacity: 1; +} + +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > house > .row-1.col1, +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > house > .row-1.col-1 { + opacity: 1; +} + +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row-1.col2 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col2, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col0 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row-1.col-1, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row0.col-1 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} + +.hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} + +.hs.row3.col-1:checked ~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > house > .row3.col-1, +.hs.row3.col0:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > house > .row3.col0, +.hs.row3.col0:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > house > .row3.col1, +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > house > .row3.col2, +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col-1:checked ~ div > div > house > .row0.col0, +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col-1:checked ~ div > div > house > .row-1.col-1 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col1:checked ~ div > div > house > .row-1.col1, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col1:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col0:checked ~ div > div > house > .row-1.col0, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col0:checked ~ div > div > house > .row-1.col-1 { + opacity: 1; +} + +.house.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-2.col0:checked ~ div > div > house > .row-2.col0, +.house.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-2.col0:checked ~ div > div > house > .row-2.col-1 { + opacity: 1; +} + +.house.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-2.col4:checked ~ div > div > house > .row-2.col5, +.house.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-2.col4:checked ~ div > div > house > .row-2.col4 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row1.col-1, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row-1.col-1, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row0.col-1 { + opacity: 1; +} + +.house.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-2.col2:checked +~ .hs.row-1.col2:checked +~ .hs.row0.col2:checked +~ div > div > house > .row0.col-1, +.house.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-2.col2:checked +~ .hs.row-1.col2:checked +~ .hs.row0.col2:checked +~ div > div > house > .row-1.col-1, +.house.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-2.col2:checked +~ .hs.row-1.col2:checked +~ .hs.row0.col2:checked +~ div > div > house > .row-2.col-1 { + opacity: 1; +} + +.hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row1.col-1, +.hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} + +.hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} + +.house.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} + +.hs.row1.col0:checked ~ .house.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row1.col0, +.hs.row1.col0:checked ~ .house.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} + +.hs.row1.col-1:checked ~ .house.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row1.col-1, +.hs.row1.col-1:checked ~ .house.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col-1:checked ~ .house.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row2.col0, +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row1.col-1:checked ~ .house.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} + +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row-1.col3, +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .house.row1.col2:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row0.col3 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row-1.col3, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row-1.col4 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row0.col4, +.hs.row1.col1:checked ~ .house.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} + +.house.row1.col2:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row1.col5, +.house.row1.col2:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row1.col4, +.house.row1.col2:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} + +.house.row1.col2:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row1.col5, +.house.row1.col2:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row1.col4, +.house.row1.col2:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .house.row1.col2:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col4, +.hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .house.row1.col2:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col3 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .house.row1.col2:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col5, +.hs.row2.col4:checked ~ .house.row1.col2:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col3 { + opacity: 1; +} + +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row2.col5, +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} + +.house.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row0.col5, +.house.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row0.col4 { + opacity: 1; +} + +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ div > div > house > .row1.col5, +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ div > div > house > .row0.col5 { + opacity: 1; +} + +.house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row1.col5, +.house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col5:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} + +.hs.row2.col5:checked ~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} + +.house.row1.col2:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row1.col5, +.house.row1.col2:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} + +.house.row1.col2:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col5, +.house.row1.col2:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} + +.house.row1.col2:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row1.col5, +.house.row1.col2:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row2.col0:checked ~ .hs.row1.col0:checked ~ .house.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > house > .row2.col0, +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > house > .row3.col0, +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > house > .row2.col-1 { + opacity: 1; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > house > .row1.col-1, +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col1:checked ~ .house.row1.col2:checked ~ div > div > house > .row3.col-1 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .house.row0.col2:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .house.row0.col2:checked ~ div > div > house > .row2.col3, +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .house.row0.col2:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .house.row0.col2:checked ~ div > div > house > .row0.col4, +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .house.row0.col2:checked ~ div > div > house > .row2.col4, +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .house.row0.col2:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .house.row0.col2:checked ~ div > div > house > .row2.col5, +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .house.row0.col2:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .house.row-1.col2:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked ~ .house.row-1.col2:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked ~ .house.row-1.col2:checked ~ div > div > house > .row0.col4, +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked ~ .house.row-1.col2:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked ~ .house.row-1.col2:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked ~ .hs.row0.col5:checked ~ .house.row-1.col2:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked ~ .hs.row0.col4:checked ~ .house.row-1.col2:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked ~ .hs.row0.col5:checked ~ .house.row-1.col2:checked ~ .hs.row-1.col5:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked ~ .hs.row0.col4:checked ~ .house.row-1.col2:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked ~ .hs.row0.col4:checked ~ .house.row-1.col2:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .house.row-1.col2:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .house.row-1.col1:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .house.row-1.col1:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .house.row-1.col1:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} + +.hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .house.row-1.col1:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} + +.hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .house.row-1.col1:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row-1.col3 { + opacity: 1; +} + +.hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .house.row-1.col2:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row-1.col5 { + opacity: 1; +} +.hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .house.row-1.col2:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} + +.house.row1.col2:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4, +.house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row2.col3, +.house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5, +.house.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row2.col4, +.house.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row2.col5, +.house.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row2.col4, +.hs.row2.col3:checked ~ .house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row3.col2, +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col3:checked ~ .house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row2.col3:checked ~ .house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .house.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row2.col5, +.hs.row2.col4:checked ~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col3, +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col4:checked ~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row2.col5:checked ~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row2.col5:checked ~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row2.col5:checked ~ .house.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} + +.house.row2.col2:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col0:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col0:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row0.col-1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row-1.col0:checked ~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row1.col-2 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row0.col-1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row0.col0, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row-1.col0 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row-1.col3, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row0.col1, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row-1.col0 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col4, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col2, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row-1.col4, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row-1.col5, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > house > .row-1.col4, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row-1.col5, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col0, +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row0.col4, +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked ~ div > div > house > .row0.col0, +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked ~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col0, +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row0.col3, +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row0.col-1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col-1:checked ~ div > div > house > .row-1.col-1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked ~ div > div > house > .row-1.col0 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked ~ .hs.row-1.col0:checked ~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col-1:checked ~ .hs.row-1.col-1:checked ~ .hs.row-1.col0:checked ~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row1.col-1, +.house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked ~ div > div > house > .row-1.col0, +.house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked ~ div > div > house > .row0.col-1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > house > .row-1.col-1, +.house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div +> div +> house +> .row1.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col5, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row2.col4, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row0.col4, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row2.col4, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked +~ div +> div +> house +> .row1.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row0.col0, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col0 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row-1.col-1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row0.col-1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col-1:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row0.col-1, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row-1.col0 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row-1.col-1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col4, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row0.col5:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row1.col4:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col5:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row-1.col0 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row-1.col0 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row-1.col-1 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col2:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} + +.house.row1.col2:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .house.row0.col2:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > shed > .row3.col1, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > shed > .row2.col1, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > shed > .row2.col0, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > shed > .row3.col1, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > shed > .row2.col-1, +.hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > shed > .row3.col0, +.hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} + +.hs.row2.col-1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > shed > .row3.col-1, +.hs.row2.col-1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > shed > .row1.col-1 { + opacity: 0; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col0:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked ~ div > div > shed > .row0.col-1, +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row0.col2 { + opacity: 0; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > shed > .row0.col1, +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > shed > .row0.col-1 { + opacity: 0; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row0.col2 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col2, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row0.col-1, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > shed > .row4.col0 { + opacity: 0; +} + +.hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > shed > .row4.col-1 { + opacity: 0; +} + +.hs.row4.col-1:checked ~ .hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > shed > .row4.col0 { + opacity: 0; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > shed > .row4.col2 { + opacity: 0; +} + +.hs.row4.col0:checked ~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > shed > .row4.col-1, +.hs.row4.col0:checked ~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > shed > .row4.col0, +.hs.row4.col0:checked ~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > shed > .row4.col2 { + opacity: 0; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > shed > .row4.col1, +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > shed > .row4.col2, +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > shed > .row4.col0 { + opacity: 0; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > shed > .row4.col-1 { + opacity: 0; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col1:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} + +.hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > shed > .row4.col-1 { + opacity: 0; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col-1:checked ~ div > div > shed > .row1.col0, +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col-1:checked ~ div > div > shed > .row0.col-1 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row0.col1, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col0:checked ~ div > div > shed > .row0.col0, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col0:checked ~ div > div > shed > .row0.col-1 { + opacity: 0; +} + +.house.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col0:checked ~ div > div > shed > .row-1.col0, +.house.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col0:checked ~ div > div > shed > .row-1.col-1 { + opacity: 0; +} + +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col4:checked ~ div > div > shed > .row-1.col5, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col4:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row2.col-1, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row0.col-1, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} + +.house.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row-1.col2:checked +~ .hs.row0.col2:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row1.col-1, +.house.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row-1.col2:checked +~ .hs.row0.col2:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row0.col-1, +.house.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row-1.col2:checked +~ .hs.row0.col2:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row-1.col-1 { + opacity: 0; +} + +.hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row2.col-1, +.hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} + +.hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} + +.hs.row2.col0:checked ~ .house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row2.col0, +.hs.row2.col0:checked ~ .house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.hs.row2.col-1:checked ~ .house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row2.col-1, +.hs.row2.col-1:checked ~ .house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col-1:checked ~ .house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row3.col0, +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col-1:checked ~ .house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col3, +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col3, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col4 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col4, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.house.row2.col2:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row2.col5, +.house.row2.col2:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row2.col4, +.house.row2.col2:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.house.row2.col2:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row2.col5, +.house.row2.col2:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row2.col4, +.house.row2.col2:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .house.row2.col2:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col4, +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .house.row2.col2:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .house.row2.col2:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col5, +.hs.row3.col4:checked ~ .house.row2.col2:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row3.col5, +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.house.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row1.col5, +.house.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row2.col5, +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row2.col5, +.house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col5:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row3.col5:checked ~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.house.row2.col2:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col5, +.house.row2.col2:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.house.row2.col2:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col5, +.house.row2.col2:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.house.row2.col2:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col5, +.house.row2.col2:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .hs.row2.col0:checked ~ .house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > shed > .row3.col0, +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > shed > .row4.col0, +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > shed > .row3.col-1 { + opacity: 0; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > shed > .row2.col-1, +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > shed > .row4.col-1 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .house.row1.col2:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .house.row1.col2:checked ~ div > div > shed > .row3.col3, +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .house.row1.col2:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .house.row1.col2:checked ~ div > div > shed > .row1.col4, +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .house.row1.col2:checked ~ div > div > shed > .row3.col4, +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .house.row1.col2:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .house.row1.col2:checked ~ div > div > shed > .row3.col5, +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .house.row1.col2:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .house.row0.col2:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked ~ .house.row0.col2:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked ~ .house.row0.col2:checked ~ div > div > shed > .row1.col4, +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked ~ .house.row0.col2:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked ~ .house.row0.col2:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked ~ .hs.row1.col5:checked ~ .house.row0.col2:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked ~ .house.row0.col2:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked ~ .hs.row1.col5:checked ~ .house.row0.col2:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked ~ .house.row0.col2:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked ~ .house.row0.col2:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .house.row0.col2:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row0.col1:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row0.col1:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row0.col1:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .house.row0.col1:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .house.row0.col1:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row0.col3 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .house.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row0.col5 { + opacity: 0; +} +.hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .house.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row4.col5 { + opacity: 0; +} + +.house.row2.col2:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col4, +.house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row3.col3, +.house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col5, +.house.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row3.col4, +.house.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row3.col5, +.house.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row3.col4, +.hs.row3.col3:checked ~ .house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row4.col3 { + opacity: 0; +} + +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ .house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row4.col2, +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ .house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row4.col4 { + opacity: 0; +} + +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row3.col3:checked ~ .house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row4.col5 { + opacity: 0; +} + +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row3.col3:checked ~ .house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row3.col3:checked +~ .hs.row3.col5:checked +~ .house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row3.col5, +.hs.row3.col4:checked ~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row4.col4 { + opacity: 0; +} + +.hs.row4.col4:checked ~ .hs.row3.col4:checked ~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row4.col3, +.hs.row4.col4:checked ~ .hs.row3.col4:checked ~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row4.col5 { + opacity: 0; +} + +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row3.col4:checked ~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row4.col2 { + opacity: 0; +} + +.hs.row3.col5:checked ~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row4.col5 { + opacity: 0; +} + +.hs.row4.col5:checked ~ .hs.row3.col5:checked ~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row4.col4 { + opacity: 0; +} + +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row3.col5:checked ~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row4.col3 { + opacity: 0; +} + +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row3.col5:checked ~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row4.col2 { + opacity: 0; +} + +.house.row3.col2:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col0:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col0:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row0.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row2.col-2 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col4, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row1.col0, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row0.col3, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row3.col3 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col1, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col2, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row0.col4, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col5, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col5, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row0.col4, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col5, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col0, +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col4, +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col0, +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col0, +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row1.col3, +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col-1:checked ~ div > div > shed > .row0.col-1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked ~ .hs.row0.col0:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked ~ .hs.row0.col0:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row2.col-1, +.house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked ~ div > div > shed > .row0.col0, +.house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked ~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > shed > .row0.col-1, +.house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div +> div +> shed +> .row2.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row3.col4, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col4, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row3.col4, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked +~ div +> div +> shed +> .row2.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row1.col0, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col1:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row0.col-1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row1.col-1, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row0.col-1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col4, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row1.col5:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row2.col4:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row0.col-1 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col2:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col2 { + opacity: 0; +} + +.house.row1.col2:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .house.row0.col2:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > house > .row3.col1, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > house > .row2.col1, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > house > .row2.col0, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > house > .row3.col1, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} + +.hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > house > .row2.col-1, +.hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > house > .row3.col0, +.hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} + +.hs.row2.col-1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > house > .row3.col-1, +.hs.row2.col-1:checked ~ .hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > house > .row1.col-1 { + opacity: 1; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col0:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked ~ div > div > house > .row0.col-1, +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} + +.hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row0.col2 { + opacity: 1; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > house > .row0.col1, +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > house > .row0.col-1 { + opacity: 1; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row0.col2 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > house > .row0.col2, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row0.col-1, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > house > .row4.col1 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > house > .row4.col0 { + opacity: 1; +} + +.hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > house > .row4.col-1 { + opacity: 1; +} + +.hs.row4.col-1:checked ~ .hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > house > .row4.col0 { + opacity: 1; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > house > .row4.col1 { + opacity: 1; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > house > .row4.col2 { + opacity: 1; +} + +.hs.row4.col0:checked ~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > house > .row4.col-1, +.hs.row4.col0:checked ~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > house > .row4.col0, +.hs.row4.col0:checked ~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > house > .row4.col1 { + opacity: 1; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > house > .row4.col2 { + opacity: 1; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > house > .row4.col1, +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > house > .row4.col2, +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > house > .row4.col0 { + opacity: 1; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > house > .row4.col-1 { + opacity: 1; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col1:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} + +.hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ div > div > house > .row4.col-1 { + opacity: 1; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col-1:checked ~ div > div > house > .row1.col0, +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col-1:checked ~ div > div > house > .row0.col-1 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col1:checked ~ div > div > house > .row0.col1, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col0:checked ~ div > div > house > .row0.col0, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col0:checked ~ div > div > house > .row0.col-1 { + opacity: 1; +} + +.house.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col0:checked ~ div > div > house > .row-1.col0, +.house.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row-1.col0:checked ~ div > div > house > .row-1.col-1 { + opacity: 1; +} + +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col4:checked ~ div > div > house > .row-1.col5, +.house.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col4:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row2.col-1, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row0.col-1, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} + +.house.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row-1.col2:checked +~ .hs.row0.col2:checked +~ .hs.row1.col2:checked +~ div > div > house > .row1.col-1, +.house.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row-1.col2:checked +~ .hs.row0.col2:checked +~ .hs.row1.col2:checked +~ div > div > house > .row0.col-1, +.house.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row-1.col2:checked +~ .hs.row0.col2:checked +~ .hs.row1.col2:checked +~ div > div > house > .row-1.col-1 { + opacity: 1; +} + +.hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row2.col-1, +.hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} + +.hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} + +.house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} + +.hs.row2.col0:checked ~ .house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row2.col0, +.hs.row2.col0:checked ~ .house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} + +.hs.row2.col-1:checked ~ .house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row2.col-1, +.hs.row2.col-1:checked ~ .house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col-1:checked ~ .house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row3.col0, +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row2.col-1:checked ~ .house.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col3, +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .house.row2.col2:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col3, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col4 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col4, +.hs.row2.col1:checked ~ .house.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} + +.house.row2.col2:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row2.col5, +.house.row2.col2:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row2.col4, +.house.row2.col2:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} + +.house.row2.col2:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row2.col5, +.house.row2.col2:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row2.col4, +.house.row2.col2:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .house.row2.col2:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col4, +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .house.row2.col2:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .house.row2.col2:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col5, +.hs.row3.col4:checked ~ .house.row2.col2:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row3.col5, +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} + +.house.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row1.col5, +.house.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ div > div > house > .row2.col5, +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} + +.house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row2.col5, +.house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col5:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row3.col5:checked ~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} + +.house.row2.col2:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col5, +.house.row2.col2:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} + +.house.row2.col2:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col5, +.house.row2.col2:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} + +.house.row2.col2:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col5, +.house.row2.col2:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .hs.row2.col0:checked ~ .house.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > house > .row3.col0, +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > house > .row4.col0, +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > house > .row3.col-1 { + opacity: 1; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > house > .row2.col-1, +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col1:checked ~ .house.row2.col2:checked ~ div > div > house > .row4.col-1 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .house.row1.col2:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .house.row1.col2:checked ~ div > div > house > .row3.col3, +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .house.row1.col2:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .house.row1.col2:checked ~ div > div > house > .row1.col4, +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .house.row1.col2:checked ~ div > div > house > .row3.col4, +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .house.row1.col2:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .house.row1.col2:checked ~ div > div > house > .row3.col5, +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .house.row1.col2:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .house.row0.col2:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked ~ .house.row0.col2:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked ~ .house.row0.col2:checked ~ div > div > house > .row1.col4, +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked ~ .house.row0.col2:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked ~ .house.row0.col2:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked ~ .hs.row1.col5:checked ~ .house.row0.col2:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked ~ .house.row0.col2:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked ~ .hs.row1.col5:checked ~ .house.row0.col2:checked ~ .hs.row0.col5:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked ~ .house.row0.col2:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked ~ .house.row0.col2:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .house.row0.col2:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row0.col1:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row0.col1:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row0.col1:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .house.row0.col1:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .house.row0.col1:checked +~ .hs.row0.col4:checked +~ div > div > house > .row0.col3 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .house.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row0.col5 { + opacity: 1; +} +.hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .house.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row4.col5 { + opacity: 1; +} + +.house.row2.col2:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col4, +.house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row3.col3, +.house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col5, +.house.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row3.col4, +.house.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row3.col5, +.house.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row3.col4, +.hs.row3.col3:checked ~ .house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row4.col3 { + opacity: 1; +} + +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ .house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row4.col2, +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ .house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row4.col4 { + opacity: 1; +} + +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row3.col3:checked ~ .house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row4.col5 { + opacity: 1; +} + +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row3.col3:checked ~ .house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row3.col3:checked +~ .hs.row3.col5:checked +~ .house.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row3.col5, +.hs.row3.col4:checked ~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row4.col4 { + opacity: 1; +} + +.hs.row4.col4:checked ~ .hs.row3.col4:checked ~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row4.col3, +.hs.row4.col4:checked ~ .hs.row3.col4:checked ~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row4.col5 { + opacity: 1; +} + +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row3.col4:checked ~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row4.col2 { + opacity: 1; +} + +.hs.row3.col5:checked ~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row4.col5 { + opacity: 1; +} + +.hs.row4.col5:checked ~ .hs.row3.col5:checked ~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row4.col4 { + opacity: 1; +} + +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row3.col5:checked ~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row4.col3 { + opacity: 1; +} + +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row3.col5:checked ~ .house.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row4.col2 { + opacity: 1; +} + +.house.row3.col2:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col0:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col0:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row0.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row2.col-2 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col4, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row0.col1:checked +~ div > div > house > .row1.col0, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row0.col1:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row0.col3, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row3.col3 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col1, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col2, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row0.col4, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col5, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col5, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row0.col4, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col5, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col0, +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col4, +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col0, +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > house > .row0.col0, +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > house > .row1.col3, +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col-1:checked ~ div > div > house > .row0.col-1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked ~ .hs.row0.col0:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col-1:checked ~ .hs.row0.col-1:checked ~ .hs.row0.col0:checked ~ .hs.row0.col1:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row2.col-1, +.house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked ~ div > div > house > .row0.col0, +.house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked ~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > house > .row0.col-1, +.house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ .hs.row0.col1:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div +> div +> house +> .row2.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row3.col4, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col4, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row3.col4, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked +~ div +> div +> house +> .row2.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row1.col0, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col1:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row0.col-1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col-1:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row1.col-1, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row0.col-1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col4, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row1.col5:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row2.col4:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col1:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row0.col-1 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col2:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col2 { + opacity: 1; +} + +.house.row2.col2:checked ~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .house.row1.col2:checked ~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > shed > .row4.col1, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > shed > .row3.col1, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > shed > .row3.col0, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > shed > .row4.col1, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > shed > .row3.col-1, +.hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > shed > .row4.col0, +.hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > shed > .row2.col0 { + opacity: 0; +} + +.hs.row3.col-1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > shed > .row4.col-1, +.hs.row3.col-1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > shed > .row2.col-1 { + opacity: 0; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col0:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ div > div > shed > .row1.col-1, +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > shed > .row1.col1, +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > shed > .row1.col-1 { + opacity: 0; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col2, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row1.col-1, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > shed > .row5.col1 { + opacity: 0; +} + +.hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > shed > .row5.col0 { + opacity: 0; +} + +.hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > shed > .row5.col-1 { + opacity: 0; +} + +.hs.row5.col-1:checked ~ .hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > shed > .row5.col0 { + opacity: 0; +} + +.hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > shed > .row5.col1 { + opacity: 0; +} + +.hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > shed > .row5.col2 { + opacity: 0; +} + +.hs.row5.col0:checked ~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > shed > .row5.col-1, +.hs.row5.col0:checked ~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > shed > .row5.col0, +.hs.row5.col0:checked ~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > shed > .row5.col1 { + opacity: 0; +} + +.hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > shed > .row5.col2 { + opacity: 0; +} + +.hs.row5.col1:checked ~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > shed > .row5.col1, +.hs.row5.col1:checked ~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > shed > .row5.col2, +.hs.row5.col1:checked ~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > shed > .row5.col0 { + opacity: 0; +} + +.hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > shed > .row5.col-1 { + opacity: 0; +} + +.hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > shed > .row4.col-1 { + opacity: 0; +} + +.hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row4.col-1:checked +~ .hs.row4.col1:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} + +.hs.row5.col0:checked ~ .hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > shed > .row5.col-1 { + opacity: 0; +} + +.hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row4.col-1:checked +~ .hs.row4.col1:checked +~ .house.row4.col2:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col-1:checked ~ div > div > shed > .row2.col0, +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col-1:checked ~ div > div > shed > .row1.col-1 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col1:checked ~ div > div > shed > .row1.col1, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col1:checked ~ div > div > shed > .row2.col0 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col0:checked ~ div > div > shed > .row1.col0, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col0:checked ~ div > div > shed > .row1.col-1 { + opacity: 0; +} + +.house.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col0:checked ~ div > div > shed > .row0.col0, +.house.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col0:checked ~ div > div > shed > .row0.col-1 { + opacity: 0; +} + +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col4:checked ~ div > div > shed > .row0.col5, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col4:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row3.col-1, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row1.col-1, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} + +.house.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row0.col2:checked +~ .hs.row1.col2:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row2.col-1, +.house.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row0.col2:checked +~ .hs.row1.col2:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row1.col-1, +.house.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row0.col2:checked +~ .hs.row1.col2:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row0.col-1 { + opacity: 0; +} + +.hs.row3.col-1:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row3.col-1, +.hs.row3.col-1:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row4.col-1 { + opacity: 0; +} + +.hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > shed > .row4.col0 { + opacity: 0; +} + +.house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row3.col0, +.hs.row3.col0:checked ~ .house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row4.col0 { + opacity: 0; +} + +.hs.row3.col-1:checked ~ .house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row3.col-1, +.hs.row3.col-1:checked ~ .house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row4.col-1 { + opacity: 0; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col-1:checked ~ .house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row4.col0, +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col-1:checked ~ .house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col3, +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col3, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col4, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.house.row3.col2:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row3.col5, +.house.row3.col2:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row3.col4, +.house.row3.col2:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row4.col4 { + opacity: 0; +} + +.house.row3.col2:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row3.col5, +.house.row3.col2:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row3.col4, +.house.row3.col2:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row4.col5 { + opacity: 0; +} + +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .house.row3.col2:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row4.col4, +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .house.row3.col2:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row4.col3 { + opacity: 0; +} + +.hs.row4.col4:checked ~ .house.row3.col2:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row4.col5, +.hs.row4.col4:checked ~ .house.row3.col2:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row4.col3 { + opacity: 0; +} + +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row4.col5, +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row4.col4 { + opacity: 0; +} + +.house.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row2.col5, +.house.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col5:checked +~ div > div > shed > .row3.col5, +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col5:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col5:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row3.col5, +.house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col5:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row4.col5 { + opacity: 0; +} + +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col5:checked +~ .hs.row2.col5:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row4.col5:checked ~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col5:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row4.col4 { + opacity: 0; +} + +.house.row3.col2:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked +~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col5, +.house.row3.col2:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked +~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.house.row3.col2:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col5, +.house.row3.col2:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.house.row3.col2:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col5, +.house.row3.col2:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row4.col0:checked ~ .hs.row3.col0:checked ~ .house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > shed > .row4.col0, +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > shed > .row5.col0, +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > shed > .row4.col-1 { + opacity: 0; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > shed > .row3.col-1, +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > shed > .row5.col-1 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .house.row2.col2:checked ~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .house.row2.col2:checked ~ div > div > shed > .row4.col3, +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .house.row2.col2:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .house.row2.col2:checked ~ div > div > shed > .row2.col4, +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .house.row2.col2:checked ~ div > div > shed > .row4.col4, +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .house.row2.col2:checked ~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .house.row2.col2:checked ~ div > div > shed > .row4.col5, +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .house.row2.col2:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .house.row1.col2:checked ~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked ~ .house.row1.col2:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked ~ .house.row1.col2:checked ~ div > div > shed > .row2.col4, +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked ~ .house.row1.col2:checked ~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked ~ .house.row1.col2:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked ~ .hs.row2.col5:checked ~ .house.row1.col2:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked ~ .house.row1.col2:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked ~ .hs.row2.col5:checked ~ .house.row1.col2:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked ~ .house.row1.col2:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked ~ .house.row1.col2:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .house.row1.col2:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row1.col1:checked ~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row1.col1:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row1.col1:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .house.row1.col1:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .house.row1.col1:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} +.hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row5.col5 { + opacity: 0; +} + +.house.row3.col2:checked ~ div > div > shed > .row3.col3 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row3.col4, +.house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row4.col3, +.house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row3.col5, +.house.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row4.col4, +.house.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row4.col5, +.house.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row4.col3:checked ~ .house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row4.col4, +.hs.row4.col3:checked ~ .house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row5.col3 { + opacity: 0; +} + +.hs.row5.col3:checked ~ .hs.row4.col3:checked ~ .house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row5.col2, +.hs.row5.col3:checked ~ .hs.row4.col3:checked ~ .house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row5.col4 { + opacity: 0; +} + +.hs.row5.col3:checked +~ .hs.row5.col4:checked +~ .hs.row4.col3:checked ~ .house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row5.col5 { + opacity: 0; +} + +.hs.row5.col3:checked +~ .hs.row5.col4:checked +~ .hs.row5.col5:checked +~ .hs.row4.col3:checked ~ .house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row4.col5 { + opacity: 0; +} + +.hs.row5.col3:checked +~ .hs.row5.col4:checked +~ .hs.row5.col5:checked +~ .hs.row4.col3:checked +~ .hs.row4.col5:checked +~ .house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row4.col4:checked ~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > shed > .row4.col5, +.hs.row4.col4:checked ~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > shed > .row5.col4 { + opacity: 0; +} + +.hs.row5.col4:checked ~ .hs.row4.col4:checked ~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > shed > .row5.col3, +.hs.row5.col4:checked ~ .hs.row4.col4:checked ~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > shed > .row5.col5 { + opacity: 0; +} + +.hs.row5.col3:checked +~ .hs.row5.col4:checked +~ .hs.row4.col4:checked ~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > shed > .row5.col2 { + opacity: 0; +} + +.hs.row4.col5:checked ~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ div > div > shed > .row5.col5 { + opacity: 0; +} + +.hs.row5.col5:checked ~ .hs.row4.col5:checked ~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ div > div > shed > .row5.col4 { + opacity: 0; +} + +.hs.row5.col4:checked +~ .hs.row5.col5:checked +~ .hs.row4.col5:checked ~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ div > div > shed > .row5.col3 { + opacity: 0; +} + +.hs.row5.col3:checked +~ .hs.row5.col4:checked +~ .hs.row5.col5:checked +~ .hs.row4.col5:checked ~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ div > div > shed > .row5.col2 { + opacity: 0; +} + +.house.row4.col2:checked ~ div > div > shed > .row3.col2 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col0:checked ~ .hs.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col0:checked ~ .hs.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row1.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row3.col-2 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row3.col3 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row3.col4, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row2.col0, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row1.col3, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col4, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row4.col3 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col1, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col2, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row1.col4, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row3.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row3.col5, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row1.col4, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row3.col1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row3.col0, +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col4, +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked ~ div > div > shed > .row2.col0, +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col0, +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row2.col3, +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col-1:checked ~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ div > div > shed > .row3.col-1, +.house.row4.col2:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col0:checked ~ div > div > shed > .row1.col0, +.house.row4.col2:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col0:checked ~ div > div > shed > .row2.col-1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > shed > .row1.col-1, +.house.row4.col2:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col4:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div +> div +> shed +> .row3.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col5:checked +~ .hs.row2.col2:checked +~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col4:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col5:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col4, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col5, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row4.col4, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row2.col4, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row4.col4, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked +~ div +> div +> shed +> .row3.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row2.col0, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col1:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row2.col-1, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col4, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row2.col5:checked ~ div > div > shed > .row3.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row3.col4:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col2:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.house.row2.col2:checked ~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .house.row1.col2:checked ~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > house > .row4.col1, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > house > .row3.col1, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > house > .row2.col1 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > house > .row3.col0, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > house > .row4.col1, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > house > .row2.col1 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > house > .row3.col-1, +.hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > house > .row4.col0, +.hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > house > .row2.col0 { + opacity: 1; +} + +.hs.row3.col-1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > house > .row4.col-1, +.hs.row3.col-1:checked ~ .hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > house > .row2.col-1 { + opacity: 1; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col0:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ div > div > house > .row1.col-1, +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} + +.hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > house > .row1.col1, +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > house > .row1.col-1 { + opacity: 1; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col2, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row1.col-1, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > house > .row5.col1 { + opacity: 1; +} + +.hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > house > .row5.col0 { + opacity: 1; +} + +.hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > house > .row5.col-1 { + opacity: 1; +} + +.hs.row5.col-1:checked ~ .hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > house > .row5.col0 { + opacity: 1; +} + +.hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > house > .row5.col1 { + opacity: 1; +} + +.hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > house > .row5.col2 { + opacity: 1; +} + +.hs.row5.col0:checked ~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > house > .row5.col-1, +.hs.row5.col0:checked ~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > house > .row5.col0, +.hs.row5.col0:checked ~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > house > .row5.col1 { + opacity: 1; +} + +.hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > house > .row5.col2 { + opacity: 1; +} + +.hs.row5.col1:checked ~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > house > .row5.col1, +.hs.row5.col1:checked ~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > house > .row5.col2, +.hs.row5.col1:checked ~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > house > .row5.col0 { + opacity: 1; +} + +.hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > house > .row5.col-1 { + opacity: 1; +} + +.hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > house > .row4.col-1 { + opacity: 1; +} + +.hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row4.col-1:checked +~ .hs.row4.col1:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} + +.hs.row5.col0:checked ~ .hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ div > div > house > .row5.col-1 { + opacity: 1; +} + +.hs.row5.col-1:checked +~ .hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row4.col-1:checked +~ .hs.row4.col1:checked +~ .house.row4.col2:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col-1:checked ~ div > div > house > .row2.col0, +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col-1:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col-1:checked ~ div > div > house > .row1.col-1 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col1:checked ~ div > div > house > .row1.col1, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col1:checked ~ div > div > house > .row2.col0 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col0:checked ~ div > div > house > .row1.col0, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col0:checked ~ div > div > house > .row1.col-1 { + opacity: 1; +} + +.house.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col0:checked ~ div > div > house > .row0.col0, +.house.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row0.col0:checked ~ div > div > house > .row0.col-1 { + opacity: 1; +} + +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col4:checked ~ div > div > house > .row0.col5, +.house.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col4:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row3.col-1, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row1.col-1, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} + +.house.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row0.col2:checked +~ .hs.row1.col2:checked +~ .hs.row2.col2:checked +~ div > div > house > .row2.col-1, +.house.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row0.col2:checked +~ .hs.row1.col2:checked +~ .hs.row2.col2:checked +~ div > div > house > .row1.col-1, +.house.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row0.col2:checked +~ .hs.row1.col2:checked +~ .hs.row2.col2:checked +~ div > div > house > .row0.col-1 { + opacity: 1; +} + +.hs.row3.col-1:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row3.col-1, +.hs.row3.col-1:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row4.col-1 { + opacity: 1; +} + +.hs.row4.col-1:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ div > div > house > .row4.col0 { + opacity: 1; +} + +.house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row3.col0, +.hs.row3.col0:checked ~ .house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row4.col0 { + opacity: 1; +} + +.hs.row3.col-1:checked ~ .house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row3.col-1, +.hs.row3.col-1:checked ~ .house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row4.col-1 { + opacity: 1; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col-1:checked ~ .house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row4.col0, +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row3.col-1:checked ~ .house.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row4.col1 { + opacity: 1; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col3, +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .house.row3.col2:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col3 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col3, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col4, +.hs.row3.col1:checked ~ .house.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} + +.house.row3.col2:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row3.col5, +.house.row3.col2:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row3.col4, +.house.row3.col2:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row4.col4 { + opacity: 1; +} + +.house.row3.col2:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row3.col5, +.house.row3.col2:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row3.col4, +.house.row3.col2:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row4.col5 { + opacity: 1; +} + +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .house.row3.col2:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row4.col4, +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .house.row3.col2:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row4.col3 { + opacity: 1; +} + +.hs.row4.col4:checked ~ .house.row3.col2:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row4.col5, +.hs.row4.col4:checked ~ .house.row3.col2:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row4.col3 { + opacity: 1; +} + +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row4.col5, +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row4.col4 { + opacity: 1; +} + +.house.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row2.col5, +.house.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col5:checked +~ div > div > house > .row3.col5, +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col5:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} + +.house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col5:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row3.col5, +.house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col5:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row4.col5 { + opacity: 1; +} + +.hs.row4.col3:checked +~ .hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col5:checked +~ .hs.row2.col5:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row4.col5:checked ~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col5:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row4.col4 { + opacity: 1; +} + +.house.row3.col2:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked +~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col5, +.house.row3.col2:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked +~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} + +.house.row3.col2:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col5, +.house.row3.col2:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} + +.house.row3.col2:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col5, +.house.row3.col2:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row4.col0:checked ~ .hs.row3.col0:checked ~ .house.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row4.col1 { + opacity: 1; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > house > .row4.col0, +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > house > .row5.col0, +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > house > .row4.col-1 { + opacity: 1; +} + +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > house > .row3.col-1, +.hs.row4.col-1:checked +~ .hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col1:checked ~ .house.row3.col2:checked ~ div > div > house > .row5.col-1 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .house.row2.col2:checked ~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .house.row2.col2:checked ~ div > div > house > .row4.col3, +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .house.row2.col2:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .house.row2.col2:checked ~ div > div > house > .row2.col4, +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .house.row2.col2:checked ~ div > div > house > .row4.col4, +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .house.row2.col2:checked ~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .house.row2.col2:checked ~ div > div > house > .row4.col5, +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .house.row2.col2:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .house.row1.col2:checked ~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked ~ .house.row1.col2:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked ~ .house.row1.col2:checked ~ div > div > house > .row2.col4, +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked ~ .house.row1.col2:checked ~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked ~ .house.row1.col2:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked ~ .hs.row2.col5:checked ~ .house.row1.col2:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked ~ .house.row1.col2:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col2:checked ~ .hs.row2.col5:checked ~ .house.row1.col2:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked ~ .house.row1.col2:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked ~ .house.row1.col2:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .house.row1.col2:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row1.col1:checked ~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row1.col1:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row1.col1:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .house.row1.col1:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .house.row1.col1:checked +~ .hs.row1.col4:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} +.hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row5.col5 { + opacity: 1; +} + +.house.row3.col2:checked ~ div > div > house > .row3.col3 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row3.col4, +.house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row4.col3, +.house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row3.col5, +.house.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row4.col4, +.house.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row4.col5, +.house.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row4.col3:checked ~ .house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row4.col4, +.hs.row4.col3:checked ~ .house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row5.col3 { + opacity: 1; +} + +.hs.row5.col3:checked ~ .hs.row4.col3:checked ~ .house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row5.col2, +.hs.row5.col3:checked ~ .hs.row4.col3:checked ~ .house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row5.col4 { + opacity: 1; +} + +.hs.row5.col3:checked +~ .hs.row5.col4:checked +~ .hs.row4.col3:checked ~ .house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row5.col5 { + opacity: 1; +} + +.hs.row5.col3:checked +~ .hs.row5.col4:checked +~ .hs.row5.col5:checked +~ .hs.row4.col3:checked ~ .house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row4.col5 { + opacity: 1; +} + +.hs.row5.col3:checked +~ .hs.row5.col4:checked +~ .hs.row5.col5:checked +~ .hs.row4.col3:checked +~ .hs.row4.col5:checked +~ .house.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row4.col4:checked ~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > house > .row4.col5, +.hs.row4.col4:checked ~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > house > .row5.col4 { + opacity: 1; +} + +.hs.row5.col4:checked ~ .hs.row4.col4:checked ~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > house > .row5.col3, +.hs.row5.col4:checked ~ .hs.row4.col4:checked ~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > house > .row5.col5 { + opacity: 1; +} + +.hs.row5.col3:checked +~ .hs.row5.col4:checked +~ .hs.row4.col4:checked ~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > house > .row5.col2 { + opacity: 1; +} + +.hs.row4.col5:checked ~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ div > div > house > .row5.col5 { + opacity: 1; +} + +.hs.row5.col5:checked ~ .hs.row4.col5:checked ~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ div > div > house > .row5.col4 { + opacity: 1; +} + +.hs.row5.col4:checked +~ .hs.row5.col5:checked +~ .hs.row4.col5:checked ~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ div > div > house > .row5.col3 { + opacity: 1; +} + +.hs.row5.col3:checked +~ .hs.row5.col4:checked +~ .hs.row5.col5:checked +~ .hs.row4.col5:checked ~ .house.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ div > div > house > .row5.col2 { + opacity: 1; +} + +.house.row4.col2:checked ~ div > div > house > .row3.col2 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col-1:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col0:checked ~ .hs.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col0:checked ~ .hs.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row1.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row3.col-2 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ div > div > house > .row3.col3 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row3.col4, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row1.col1:checked +~ div > div > house > .row2.col0, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row1.col1:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > house > .row1.col3, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col4, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > house > .row4.col3 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col1, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col2, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row1.col4, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row3.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row3.col5, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > house > .row1.col4, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ div > div > house > .row3.col1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > house > .row3.col0, +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col4, +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked ~ div > div > house > .row2.col0, +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col0, +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row2.col3, +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col-1:checked ~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col-1:checked +~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col-1:checked ~ .hs.row1.col-1:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ div > div > house > .row3.col-1, +.house.row4.col2:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col0:checked ~ div > div > house > .row1.col0, +.house.row4.col2:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col0:checked ~ div > div > house > .row2.col-1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > house > .row1.col-1, +.house.row4.col2:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col4:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div +> div +> house +> .row3.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col5:checked +~ .hs.row2.col2:checked +~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col4:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row3.col5:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col4, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col5, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row4.col4, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row2.col4, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row4.col4, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked +~ div +> div +> house +> .row3.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row2.col0, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col1:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col-1:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row2.col-1, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col-1:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col4, +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row2.col5:checked ~ div > div > house > .row3.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row3.col4:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col1:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} +.house.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row2.col2:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} + +.house.row0.col3:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row0.col3:checked ~ .house.row-1.col3:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > shed > .row2.col2, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > shed > .row1.col2, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > shed > .row1.col1, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > shed > .row2.col2, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > shed > .row1.col0, +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > shed > .row2.col1, +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} + +.hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > shed > .row2.col0, +.hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col1:checked ~ div > div > shed > .row-1.col1 { + opacity: 0; +} + +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > shed > .row-1.col0, +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > shed > .row-1.col1 { + opacity: 0; +} + +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > shed > .row-1.col2 { + opacity: 0; +} + +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row-1.col3 { + opacity: 0; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col2, +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col0 { + opacity: 0; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row-1.col3 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col3, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col1 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row-1.col0, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > shed > .row3.col0, +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > shed > .row3.col1, +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > shed > .row3.col2, +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > shed > .row3.col3, +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col0:checked ~ div > div > shed > .row0.col1, +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col0:checked ~ div > div > shed > .row-1.col0 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row-1.col2, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col1, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col0 { + opacity: 0; +} + +.house.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-2.col1:checked ~ div > div > shed > .row-2.col1, +.house.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-2.col1:checked ~ div > div > shed > .row-2.col0 { + opacity: 0; +} + +.house.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-2.col5:checked ~ div > div > shed > .row-2.col6, +.house.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-2.col5:checked ~ div > div > shed > .row-2.col5 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row1.col0, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row-1.col0, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} + +.house.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-2.col3:checked +~ .hs.row-1.col3:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col0, +.house.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-2.col3:checked +~ .hs.row-1.col3:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row-1.col0, +.house.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-2.col3:checked +~ .hs.row-1.col3:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row-2.col0 { + opacity: 0; +} + +.hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row1.col0, +.hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} + +.hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.house.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .house.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col1, +.hs.row1.col1:checked ~ .house.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.hs.row1.col0:checked ~ .house.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col0, +.hs.row1.col0:checked ~ .house.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col0:checked ~ .house.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col1, +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col0:checked ~ .house.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col2 { + opacity: 0; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row-1.col4, +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row0.col4 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row-1.col4, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row-1.col5 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row0.col5, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.house.row1.col3:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row1.col6, +.house.row1.col3:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row1.col5, +.house.row1.col3:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.house.row1.col3:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row1.col6, +.house.row1.col3:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row1.col5, +.house.row1.col3:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .house.row1.col3:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col5, +.hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .house.row1.col3:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row2.col5:checked ~ .house.row1.col3:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col6, +.hs.row2.col5:checked ~ .house.row1.col3:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col6, +.hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.house.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row0.col6, +.house.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row0.col5 { + opacity: 0; +} + +.hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row1.col6, +.hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row0.col6 { + opacity: 0; +} + +.house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row1.col6, +.house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row0.col6:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} + +.hs.row2.col6:checked ~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.house.row1.col3:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row1.col6, +.house.row1.col3:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.house.row1.col3:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row1.col6, +.house.row1.col3:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.house.row1.col3:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row1.col6, +.house.row1.col3:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .house.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col2 { + opacity: 0; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > shed > .row2.col1, +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > shed > .row3.col1, +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > shed > .row2.col0 { + opacity: 0; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > shed > .row1.col0, +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .house.row0.col3:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .house.row0.col3:checked ~ div > div > shed > .row2.col4, +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .house.row0.col3:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .house.row0.col3:checked ~ div > div > shed > .row0.col5, +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .house.row0.col3:checked ~ div > div > shed > .row2.col5, +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .house.row0.col3:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .house.row0.col3:checked ~ div > div > shed > .row2.col6, +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .house.row0.col3:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .house.row-1.col3:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked ~ .house.row-1.col3:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked ~ .house.row-1.col3:checked ~ div > div > shed > .row0.col5, +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked ~ .house.row-1.col3:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked ~ .house.row-1.col3:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked ~ .hs.row0.col6:checked ~ .house.row-1.col3:checked ~ div > div > shed > .row-1.col6 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked ~ .hs.row0.col5:checked ~ .house.row-1.col3:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked ~ .hs.row0.col6:checked ~ .house.row-1.col3:checked ~ .hs.row-1.col6:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked ~ .hs.row0.col5:checked ~ .house.row-1.col3:checked ~ .hs.row-1.col5:checked ~ div > div > shed > .row-1.col6 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked ~ .hs.row0.col5:checked ~ .house.row-1.col3:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .house.row-1.col3:checked ~ div > div > shed > .row-1.col6 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .house.row-1.col2:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .house.row-1.col2:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .house.row-1.col2:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} + +.hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col5:checked +~ .house.row-1.col2:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} + +.hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col5:checked +~ .house.row-1.col2:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row-1.col4 { + opacity: 0; +} + +.hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .house.row-1.col3:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row-1.col6 { + opacity: 0; +} +.hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .house.row-1.col3:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.house.row1.col3:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5, +.house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col4, +.house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col6, +.house.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row2.col5, +.house.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row2.col6, +.house.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col5, +.hs.row2.col4:checked ~ .house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row3.col3, +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row2.col4:checked ~ .house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row2.col4:checked ~ .house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.hs.row2.col5:checked ~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row2.col6, +.hs.row2.col5:checked ~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col4, +.hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row2.col5:checked ~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row2.col6:checked ~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row2.col6:checked ~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row2.col6:checked ~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.house.row2.col3:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row-1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row1.col-1 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row0.col1, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row-1.col4, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col5, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row0.col2, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row-1.col5, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row-1.col3, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > shed > .row-1.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row-1.col5, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ div > div > shed > .row-1.col6, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row-1.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col6, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row-1.col5, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row-1.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ div > div > shed > .row-1.col6, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row-1.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ .hs.row-1.col6:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col1, +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row0.col5, +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col1, +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col1, +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row0.col4, +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked ~ div > div > shed > .row-1.col0 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col0, +.house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked ~ div > div > shed > .row-1.col1, +.house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col0, +.house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div +> div +> shed +> .row1.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col5, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > shed > .row-1.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row0.col6, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row2.col5, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row0.col5, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row2.col5, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row-1.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked +~ div +> div +> shed +> .row1.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col1, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row-1.col0 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col0, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row-1.col0 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row1.col5, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row0.col6:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row1.col5:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col6:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > shed > .row-1.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row-1.col0 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.house.row0.col3:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row0.col3:checked ~ .house.row-1.col3:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > house > .row2.col2, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > house > .row1.col2, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > house > .row1.col1, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > house > .row2.col2, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > house > .row1.col0, +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > house > .row2.col1, +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} + +.hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > house > .row2.col0, +.hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col1:checked ~ div > div > house > .row-1.col1 { + opacity: 1; +} + +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > house > .row-1.col0, +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > house > .row-1.col1 { + opacity: 1; +} + +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ div > div > house > .row-1.col2 { + opacity: 1; +} + +.hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row-1.col3 { + opacity: 1; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col2, +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col0 { + opacity: 1; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row-1.col3 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col3, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col1 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row-1.col0, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > house > .row3.col0, +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > house > .row3.col1, +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > house > .row3.col2, +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > house > .row3.col3, +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col0:checked ~ div > div > house > .row0.col1, +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col0:checked ~ div > div > house > .row-1.col0 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col2:checked ~ div > div > house > .row-1.col2, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col1, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col0 { + opacity: 1; +} + +.house.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-2.col1:checked ~ div > div > house > .row-2.col1, +.house.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-2.col1:checked ~ div > div > house > .row-2.col0 { + opacity: 1; +} + +.house.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-2.col5:checked ~ div > div > house > .row-2.col6, +.house.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-2.col5:checked ~ div > div > house > .row-2.col5 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row1.col0, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row-1.col0, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} + +.house.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-2.col3:checked +~ .hs.row-1.col3:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col0, +.house.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-2.col3:checked +~ .hs.row-1.col3:checked +~ .hs.row0.col3:checked +~ div > div > house > .row-1.col0, +.house.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-2.col3:checked +~ .hs.row-1.col3:checked +~ .hs.row0.col3:checked +~ div > div > house > .row-2.col0 { + opacity: 1; +} + +.hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row1.col0, +.hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} + +.hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} + +.house.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .house.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col1, +.hs.row1.col1:checked ~ .house.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} + +.hs.row1.col0:checked ~ .house.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col0, +.hs.row1.col0:checked ~ .house.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col0:checked ~ .house.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col1, +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row1.col0:checked ~ .house.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col2 { + opacity: 1; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row-1.col4, +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .house.row1.col3:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row0.col4 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row-1.col4, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row-1.col5 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row0.col5, +.hs.row1.col2:checked ~ .house.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} + +.house.row1.col3:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row1.col6, +.house.row1.col3:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row1.col5, +.house.row1.col3:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} + +.house.row1.col3:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row1.col6, +.house.row1.col3:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row1.col5, +.house.row1.col3:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col6 { + opacity: 1; +} + +.hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .house.row1.col3:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col5, +.hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .house.row1.col3:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row2.col5:checked ~ .house.row1.col3:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col6, +.hs.row2.col5:checked ~ .house.row1.col3:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row2.col6, +.hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} + +.house.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row0.col6, +.house.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row0.col5 { + opacity: 1; +} + +.hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ div > div > house > .row1.col6, +.hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ div > div > house > .row0.col6 { + opacity: 1; +} + +.house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row1.col6, +.house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col6 { + opacity: 1; +} + +.hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row0.col6:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} + +.hs.row2.col6:checked ~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} + +.house.row1.col3:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row1.col6, +.house.row1.col3:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} + +.house.row1.col3:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row1.col6, +.house.row1.col3:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} + +.house.row1.col3:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row1.col6, +.house.row1.col3:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .house.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col2 { + opacity: 1; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > house > .row2.col1, +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > house > .row3.col1, +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > house > .row2.col0 { + opacity: 1; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > house > .row1.col0, +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col2:checked ~ .house.row1.col3:checked ~ div > div > house > .row3.col0 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .house.row0.col3:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .house.row0.col3:checked ~ div > div > house > .row2.col4, +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .house.row0.col3:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .house.row0.col3:checked ~ div > div > house > .row0.col5, +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .house.row0.col3:checked ~ div > div > house > .row2.col5, +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .house.row0.col3:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .house.row0.col3:checked ~ div > div > house > .row2.col6, +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .house.row0.col3:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .house.row-1.col3:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked ~ .house.row-1.col3:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked ~ .house.row-1.col3:checked ~ div > div > house > .row0.col5, +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked ~ .house.row-1.col3:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked ~ .house.row-1.col3:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked ~ .hs.row0.col6:checked ~ .house.row-1.col3:checked ~ div > div > house > .row-1.col6 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked ~ .hs.row0.col5:checked ~ .house.row-1.col3:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked ~ .hs.row0.col6:checked ~ .house.row-1.col3:checked ~ .hs.row-1.col6:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked ~ .hs.row0.col5:checked ~ .house.row-1.col3:checked ~ .hs.row-1.col5:checked ~ div > div > house > .row-1.col6 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked ~ .hs.row0.col5:checked ~ .house.row-1.col3:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .house.row-1.col3:checked ~ div > div > house > .row-1.col6 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .house.row-1.col2:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .house.row-1.col2:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .house.row-1.col2:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} + +.hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col5:checked +~ .house.row-1.col2:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} + +.hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col5:checked +~ .house.row-1.col2:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row-1.col4 { + opacity: 1; +} + +.hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .house.row-1.col3:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row-1.col6 { + opacity: 1; +} +.hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .house.row-1.col3:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} + +.house.row1.col3:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5, +.house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row2.col4, +.house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col6, +.house.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row2.col5, +.house.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row2.col6, +.house.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row2.col5, +.hs.row2.col4:checked ~ .house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row3.col3, +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row2.col4:checked ~ .house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row3.col6 { + opacity: 1; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row2.col4:checked ~ .house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .house.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} + +.hs.row2.col5:checked ~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row2.col6, +.hs.row2.col5:checked ~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col4, +.hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row2.col5:checked ~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row2.col6:checked ~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} + +.hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row2.col6:checked ~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row2.col6:checked ~ .house.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} + +.house.row2.col3:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col0:checked ~ .hs.row0.col0:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col1:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row-1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row1.col-1 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row0.col1, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > house > .row-1.col4, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col5, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row0.col2, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row-1.col5, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row-1.col3, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > house > .row-1.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row-1.col5, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ div > div > house > .row-1.col6, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > house > .row-1.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col6, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > house > .row-1.col5, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > house > .row-1.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ div > div > house > .row-1.col6, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ div > div > house > .row-1.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ .hs.row-1.col6:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col1, +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row0.col5, +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col1, +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked ~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col1, +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row0.col4, +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked ~ div > div > house > .row-1.col0 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked ~ .hs.row-1.col0:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col0, +.house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked ~ div > div > house > .row-1.col1, +.house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col0, +.house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div +> div +> house +> .row1.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col5, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > house > .row-1.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row0.col6, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row2.col5, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > house > .row0.col5, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > house > .row2.col5, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > house > .row-1.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked +~ div +> div +> house +> .row1.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col1, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row-1.col0 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col0:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col0, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row-1.col0 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row1.col5, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row0.col6:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row1.col5:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col6:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > house > .row-1.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row-1.col0 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} + +.house.row1.col3:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .house.row0.col3:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > shed > .row3.col2, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > shed > .row2.col2, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > shed > .row2.col1, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > shed > .row3.col2, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > shed > .row2.col0, +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > shed > .row3.col1, +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > shed > .row3.col0, +.hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col1:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > shed > .row0.col0, +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > shed > .row0.col2 { + opacity: 0; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row0.col3 { + opacity: 0; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col2, +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row0.col3 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col3, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row0.col0, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > shed > .row4.col2 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > shed > .row4.col0 { + opacity: 0; +} + +.hs.row4.col0:checked ~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > shed > .row4.col2 { + opacity: 0; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > shed > .row4.col3 { + opacity: 0; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > shed > .row4.col0, +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > shed > .row4.col1, +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > shed > .row4.col2 { + opacity: 0; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > shed > .row4.col3 { + opacity: 0; +} + +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > shed > .row4.col2, +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > shed > .row4.col3, +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > shed > .row4.col0 { + opacity: 0; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col0:checked +~ .hs.row3.col2:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > shed > .row4.col0 { + opacity: 0; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col0:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col0:checked ~ div > div > shed > .row1.col1, +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col0:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row0.col2, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col1:checked ~ div > div > shed > .row0.col1, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col1:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} + +.house.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col1, +.house.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col0 { + opacity: 0; +} + +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col5:checked ~ div > div > shed > .row-1.col6, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col5:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row2.col0, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row0.col0, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} + +.house.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row-1.col3:checked +~ .hs.row0.col3:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col0, +.house.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row-1.col3:checked +~ .hs.row0.col3:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row0.col0, +.house.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row-1.col3:checked +~ .hs.row0.col3:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row-1.col0 { + opacity: 0; +} + +.hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row2.col0, +.hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col1, +.hs.row2.col1:checked ~ .house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row2.col0:checked ~ .house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col0, +.hs.row2.col0:checked ~ .house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col0:checked ~ .house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col1, +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col0:checked ~ .house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row0.col4, +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row0.col4, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row0.col5 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row1.col5, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.house.row2.col3:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row2.col6, +.house.row2.col3:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row2.col5, +.house.row2.col3:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.house.row2.col3:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row2.col6, +.house.row2.col3:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row2.col5, +.house.row2.col3:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .house.row2.col3:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col5, +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .house.row2.col3:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col5:checked ~ .house.row2.col3:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col6, +.hs.row3.col5:checked ~ .house.row2.col3:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row3.col6, +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.house.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row1.col6, +.house.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row2.col6, +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row2.col6, +.house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .hs.row1.col6:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row3.col6:checked ~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.house.row2.col3:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked +~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col6, +.house.row2.col3:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked +~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.house.row2.col3:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col6, +.house.row2.col3:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.house.row2.col3:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col6, +.house.row2.col3:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > shed > .row3.col1, +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > shed > .row4.col1, +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > shed > .row2.col0, +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > shed > .row4.col0 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .house.row1.col3:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .house.row1.col3:checked ~ div > div > shed > .row3.col4, +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .house.row1.col3:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .house.row1.col3:checked ~ div > div > shed > .row1.col5, +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .house.row1.col3:checked ~ div > div > shed > .row3.col5, +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .house.row1.col3:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .house.row1.col3:checked ~ div > div > shed > .row3.col6, +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .house.row1.col3:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .house.row0.col3:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked ~ .house.row0.col3:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked ~ .house.row0.col3:checked ~ div > div > shed > .row1.col5, +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked ~ .house.row0.col3:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked ~ .house.row0.col3:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked ~ .hs.row1.col6:checked ~ .house.row0.col3:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked ~ .house.row0.col3:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked ~ .hs.row1.col6:checked ~ .house.row0.col3:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked ~ .house.row0.col3:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked ~ .house.row0.col3:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .house.row0.col3:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row0.col2:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row0.col2:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row0.col2:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .house.row0.col2:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} + +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .house.row0.col2:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row0.col4 { + opacity: 0; +} + +.hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .house.row0.col3:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row0.col6 { + opacity: 0; +} +.hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .house.row0.col3:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row4.col6 { + opacity: 0; +} + +.house.row2.col3:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col5, +.house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row3.col4, +.house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row2.col6, +.house.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row3.col5, +.house.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row3.col6, +.house.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row3.col5, +.hs.row3.col4:checked ~ .house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row4.col4 { + opacity: 0; +} + +.hs.row4.col4:checked ~ .hs.row3.col4:checked ~ .house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row4.col3, +.hs.row4.col4:checked ~ .hs.row3.col4:checked ~ .house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row4.col5 { + opacity: 0; +} + +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row3.col4:checked ~ .house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row4.col6 { + opacity: 0; +} + +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row3.col4:checked ~ .house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row3.col4:checked +~ .hs.row3.col6:checked +~ .house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.hs.row3.col5:checked ~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row3.col6, +.hs.row3.col5:checked ~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row4.col5 { + opacity: 0; +} + +.hs.row4.col5:checked ~ .hs.row3.col5:checked ~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row4.col4, +.hs.row4.col5:checked ~ .hs.row3.col5:checked ~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row4.col6 { + opacity: 0; +} + +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row3.col5:checked ~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row4.col3 { + opacity: 0; +} + +.hs.row3.col6:checked ~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row4.col6 { + opacity: 0; +} + +.hs.row4.col6:checked ~ .hs.row3.col6:checked ~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row4.col5 { + opacity: 0; +} + +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row3.col6:checked ~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row4.col4 { + opacity: 0; +} + +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row3.col6:checked ~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row4.col3 { + opacity: 0; +} + +.house.row3.col3:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row0.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col-1 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col5, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row1.col1, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row0.col4, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row1.col2, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col5, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col3, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row0.col5, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row0.col6, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row2.col6, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row0.col5, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row0.col6, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col1, +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row1.col5, +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col1, +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col1, +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row1.col4, +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row2.col0, +.house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked ~ div > div > shed > .row0.col1, +.house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col0, +.house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div +> div +> shed +> .row2.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col6, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row3.col5, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row1.col5, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row3.col5, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked +~ div +> div +> shed +> .row2.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col1, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col2:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col0, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col5, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row1.col6:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row2.col5:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.house.row1.col3:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .house.row0.col3:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > house > .row3.col2, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > house > .row2.col2, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > house > .row2.col1, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > house > .row3.col2, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > house > .row2.col0, +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > house > .row3.col1, +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} + +.hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > house > .row3.col0, +.hs.row2.col0:checked ~ .hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col1:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > house > .row0.col0, +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ div > div > house > .row0.col2 { + opacity: 1; +} + +.hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row0.col3 { + opacity: 1; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > house > .row0.col2, +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row0.col3 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col3, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row0.col0, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > house > .row4.col2 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > house > .row4.col1 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > house > .row4.col0 { + opacity: 1; +} + +.hs.row4.col0:checked ~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > house > .row4.col1 { + opacity: 1; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > house > .row4.col2 { + opacity: 1; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > house > .row4.col3 { + opacity: 1; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > house > .row4.col0, +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > house > .row4.col1, +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > house > .row4.col2 { + opacity: 1; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > house > .row4.col3 { + opacity: 1; +} + +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > house > .row4.col2, +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > house > .row4.col3, +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > house > .row4.col1 { + opacity: 1; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > house > .row4.col0 { + opacity: 1; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col0:checked +~ .hs.row3.col2:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ div > div > house > .row4.col0 { + opacity: 1; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col0:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col0:checked ~ div > div > house > .row1.col1, +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col0:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col2:checked ~ div > div > house > .row0.col2, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col1:checked ~ div > div > house > .row0.col1, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col1:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} + +.house.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col1, +.house.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col0 { + opacity: 1; +} + +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col5:checked ~ div > div > house > .row-1.col6, +.house.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col5:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row2.col0, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row0.col0, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} + +.house.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row-1.col3:checked +~ .hs.row0.col3:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col0, +.house.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row-1.col3:checked +~ .hs.row0.col3:checked +~ .hs.row1.col3:checked +~ div > div > house > .row0.col0, +.house.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row-1.col3:checked +~ .hs.row0.col3:checked +~ .hs.row1.col3:checked +~ div > div > house > .row-1.col0 { + opacity: 1; +} + +.hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row2.col0, +.hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col1, +.hs.row2.col1:checked ~ .house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row2.col0:checked ~ .house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col0, +.hs.row2.col0:checked ~ .house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col0:checked ~ .house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col1, +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row2.col0:checked ~ .house.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row0.col4, +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .house.row2.col3:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row0.col4, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row0.col5 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row1.col5, +.hs.row2.col2:checked ~ .house.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} + +.house.row2.col3:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row2.col6, +.house.row2.col3:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row2.col5, +.house.row2.col3:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} + +.house.row2.col3:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row2.col6, +.house.row2.col3:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row2.col5, +.house.row2.col3:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} + +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .house.row2.col3:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col5, +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .house.row2.col3:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col5:checked ~ .house.row2.col3:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col6, +.hs.row3.col5:checked ~ .house.row2.col3:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row3.col6, +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row3.col5 { + opacity: 1; +} + +.house.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row1.col6, +.house.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ div > div > house > .row2.col6, +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ div > div > house > .row1.col6 { + opacity: 1; +} + +.house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row2.col6, +.house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .hs.row1.col6:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row3.col6:checked ~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} + +.house.row2.col3:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked +~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col6, +.house.row2.col3:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked +~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} + +.house.row2.col3:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col6, +.house.row2.col3:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} + +.house.row2.col3:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col6, +.house.row2.col3:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .house.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > house > .row3.col1, +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > house > .row4.col1, +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > house > .row3.col0 { + opacity: 1; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > house > .row2.col0, +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col2:checked ~ .house.row2.col3:checked ~ div > div > house > .row4.col0 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .house.row1.col3:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .house.row1.col3:checked ~ div > div > house > .row3.col4, +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .house.row1.col3:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .house.row1.col3:checked ~ div > div > house > .row1.col5, +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .house.row1.col3:checked ~ div > div > house > .row3.col5, +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .house.row1.col3:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .house.row1.col3:checked ~ div > div > house > .row3.col6, +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .house.row1.col3:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .house.row0.col3:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked ~ .house.row0.col3:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked ~ .house.row0.col3:checked ~ div > div > house > .row1.col5, +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked ~ .house.row0.col3:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked ~ .house.row0.col3:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked ~ .hs.row1.col6:checked ~ .house.row0.col3:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked ~ .house.row0.col3:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked ~ .hs.row1.col6:checked ~ .house.row0.col3:checked ~ .hs.row0.col6:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked ~ .house.row0.col3:checked ~ .hs.row0.col5:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked ~ .house.row0.col3:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .house.row0.col3:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row0.col2:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row0.col2:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row0.col2:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .house.row0.col2:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} + +.hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .house.row0.col2:checked +~ .hs.row0.col5:checked +~ div > div > house > .row0.col4 { + opacity: 1; +} + +.hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .house.row0.col3:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row0.col6 { + opacity: 1; +} +.hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .house.row0.col3:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row4.col6 { + opacity: 1; +} + +.house.row2.col3:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col5, +.house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row3.col4, +.house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row2.col6, +.house.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row3.col5, +.house.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > house > .row3.col6, +.house.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row3.col5, +.hs.row3.col4:checked ~ .house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row4.col4 { + opacity: 1; +} + +.hs.row4.col4:checked ~ .hs.row3.col4:checked ~ .house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row4.col3, +.hs.row4.col4:checked ~ .hs.row3.col4:checked ~ .house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row4.col5 { + opacity: 1; +} + +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row3.col4:checked ~ .house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row4.col6 { + opacity: 1; +} + +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row3.col4:checked ~ .house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row3.col6 { + opacity: 1; +} + +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row3.col4:checked +~ .hs.row3.col6:checked +~ .house.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} + +.hs.row3.col5:checked ~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row3.col6, +.hs.row3.col5:checked ~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row4.col5 { + opacity: 1; +} + +.hs.row4.col5:checked ~ .hs.row3.col5:checked ~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row4.col4, +.hs.row4.col5:checked ~ .hs.row3.col5:checked ~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row4.col6 { + opacity: 1; +} + +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row3.col5:checked ~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row4.col3 { + opacity: 1; +} + +.hs.row3.col6:checked ~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row4.col6 { + opacity: 1; +} + +.hs.row4.col6:checked ~ .hs.row3.col6:checked ~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row4.col5 { + opacity: 1; +} + +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row3.col6:checked ~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row4.col4 { + opacity: 1; +} + +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row3.col6:checked ~ .house.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row4.col3 { + opacity: 1; +} + +.house.row3.col3:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col1:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row0.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col-1 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col5, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row0.col2:checked +~ div > div > house > .row1.col1, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row0.col2:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row0.col4, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row1.col2, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col5, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col3, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row0.col5, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > house > .row0.col6, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row2.col6, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > house > .row0.col5, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > house > .row0.col6, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col5:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col1, +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row1.col5, +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col1, +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col1, +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row1.col4, +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ .hs.row0.col1:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked ~ .hs.row0.col0:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row2.col0, +.house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked ~ div > div > house > .row0.col1, +.house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > house > .row0.col0, +.house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div +> div +> house +> .row2.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col6, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row3.col5, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row1.col5, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row3.col5, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked +~ div +> div +> house +> .row2.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col1, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col2:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col0:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col0, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col5, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row1.col6:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row2.col5:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked +~ .hs.row0.col2:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col3 { + opacity: 1; +} + +.house.row2.col3:checked ~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .house.row1.col3:checked ~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > shed > .row4.col2, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > shed > .row3.col2, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > shed > .row3.col1, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > shed > .row4.col2, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > shed > .row3.col0, +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > shed > .row4.col1, +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > shed > .row4.col0, +.hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > shed > .row2.col0 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col1:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > shed > .row1.col0, +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col2, +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row1.col0, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > shed > .row5.col2 { + opacity: 0; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > shed > .row5.col1 { + opacity: 0; +} + +.hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > shed > .row5.col0 { + opacity: 0; +} + +.hs.row5.col0:checked ~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > shed > .row5.col1 { + opacity: 0; +} + +.hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > shed > .row5.col2 { + opacity: 0; +} + +.hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > shed > .row5.col3 { + opacity: 0; +} + +.hs.row5.col1:checked ~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > shed > .row5.col0, +.hs.row5.col1:checked ~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > shed > .row5.col1, +.hs.row5.col1:checked ~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > shed > .row5.col2 { + opacity: 0; +} + +.hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > shed > .row5.col3 { + opacity: 0; +} + +.hs.row5.col2:checked ~ .hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > shed > .row5.col2, +.hs.row5.col2:checked ~ .hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > shed > .row5.col3, +.hs.row5.col2:checked ~ .hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > shed > .row5.col1 { + opacity: 0; +} + +.hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > shed > .row5.col0 { + opacity: 0; +} + +.hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > shed > .row4.col0 { + opacity: 0; +} + +.hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row4.col0:checked +~ .hs.row4.col2:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.hs.row5.col1:checked ~ .hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > shed > .row5.col0 { + opacity: 0; +} + +.hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row4.col0:checked +~ .hs.row4.col2:checked +~ .house.row4.col3:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col0:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col0:checked ~ div > div > shed > .row2.col1, +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col0:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col0:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row1.col2, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col1:checked ~ div > div > shed > .row1.col1, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col1:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} + +.house.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col1:checked ~ div > div > shed > .row0.col1, +.house.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col1:checked ~ div > div > shed > .row0.col0 { + opacity: 0; +} + +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row0.col5:checked ~ div > div > shed > .row0.col6, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row0.col5:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row3.col0, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row1.col0, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} + +.house.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row0.col3:checked +~ .hs.row1.col3:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row2.col0, +.house.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row0.col3:checked +~ .hs.row1.col3:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row1.col0, +.house.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row0.col3:checked +~ .hs.row1.col3:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row0.col0 { + opacity: 0; +} + +.hs.row3.col0:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row3.col0, +.hs.row3.col0:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row4.col0 { + opacity: 0; +} + +.hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row3.col1, +.hs.row3.col1:checked ~ .house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.hs.row3.col0:checked ~ .house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row3.col0, +.hs.row3.col0:checked ~ .house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row4.col0 { + opacity: 0; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col0:checked ~ .house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row4.col1, +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col0:checked ~ .house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row4.col2 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row1.col4, +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row1.col4, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row2.col5, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.house.row3.col3:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row3.col6, +.house.row3.col3:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row3.col5, +.house.row3.col3:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row4.col5 { + opacity: 0; +} + +.house.row3.col3:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row3.col6, +.house.row3.col3:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row3.col5, +.house.row3.col3:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row4.col6 { + opacity: 0; +} + +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .house.row3.col3:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row4.col5, +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .house.row3.col3:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row4.col4 { + opacity: 0; +} + +.hs.row4.col5:checked ~ .house.row3.col3:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row4.col6, +.hs.row4.col5:checked ~ .house.row3.col3:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row4.col4 { + opacity: 0; +} + +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row4.col6, +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row4.col5 { + opacity: 0; +} + +.house.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row2.col6, +.house.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col6:checked +~ div > div > shed > .row3.col6, +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col6:checked +~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col6:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row3.col6, +.house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col6:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row4.col6 { + opacity: 0; +} + +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col6:checked +~ .hs.row2.col6:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row4.col6:checked ~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col6:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row4.col5 { + opacity: 0; +} + +.house.row3.col3:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked +~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col6, +.house.row3.col3:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked +~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.house.row3.col3:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col6, +.house.row3.col3:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.house.row3.col3:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col6, +.house.row3.col3:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ .house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row4.col2 { + opacity: 0; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > shed > .row4.col1, +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > shed > .row5.col1, +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > shed > .row4.col0 { + opacity: 0; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > shed > .row3.col0, +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > shed > .row5.col0 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .house.row2.col3:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .house.row2.col3:checked ~ div > div > shed > .row4.col4, +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .house.row2.col3:checked ~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .house.row2.col3:checked ~ div > div > shed > .row2.col5, +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .house.row2.col3:checked ~ div > div > shed > .row4.col5, +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .house.row2.col3:checked ~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .house.row2.col3:checked ~ div > div > shed > .row4.col6, +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .house.row2.col3:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .house.row1.col3:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked ~ .house.row1.col3:checked ~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked ~ .house.row1.col3:checked ~ div > div > shed > .row2.col5, +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked ~ .house.row1.col3:checked ~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked ~ .house.row1.col3:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked ~ .hs.row2.col6:checked ~ .house.row1.col3:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked ~ .house.row1.col3:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked ~ .hs.row2.col6:checked ~ .house.row1.col3:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked ~ .house.row1.col3:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked ~ .house.row1.col3:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .house.row1.col3:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row1.col2:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row1.col2:checked ~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row1.col2:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .house.row1.col2:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .house.row1.col2:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .house.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row1.col6 { + opacity: 0; +} +.hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .house.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row5.col6 { + opacity: 0; +} + +.house.row3.col3:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row3.col5, +.house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row4.col4, +.house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row3.col6, +.house.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row4.col5, +.house.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ div > div > shed > .row4.col6, +.house.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.hs.row4.col4:checked ~ .house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row4.col5, +.hs.row4.col4:checked ~ .house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row5.col4 { + opacity: 0; +} + +.hs.row5.col4:checked ~ .hs.row4.col4:checked ~ .house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row5.col3, +.hs.row5.col4:checked ~ .hs.row4.col4:checked ~ .house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row5.col5 { + opacity: 0; +} + +.hs.row5.col4:checked +~ .hs.row5.col5:checked +~ .hs.row4.col4:checked ~ .house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row5.col6 { + opacity: 0; +} + +.hs.row5.col4:checked +~ .hs.row5.col5:checked +~ .hs.row5.col6:checked +~ .hs.row4.col4:checked ~ .house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row4.col6 { + opacity: 0; +} + +.hs.row5.col4:checked +~ .hs.row5.col5:checked +~ .hs.row5.col6:checked +~ .hs.row4.col4:checked +~ .hs.row4.col6:checked +~ .house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.hs.row4.col5:checked ~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ div > div > shed > .row4.col6, +.hs.row4.col5:checked ~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ div > div > shed > .row5.col5 { + opacity: 0; +} + +.hs.row5.col5:checked ~ .hs.row4.col5:checked ~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ div > div > shed > .row5.col4, +.hs.row5.col5:checked ~ .hs.row4.col5:checked ~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ div > div > shed > .row5.col6 { + opacity: 0; +} + +.hs.row5.col4:checked +~ .hs.row5.col5:checked +~ .hs.row4.col5:checked ~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ div > div > shed > .row5.col3 { + opacity: 0; +} + +.hs.row4.col6:checked ~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ div > div > shed > .row5.col6 { + opacity: 0; +} + +.hs.row5.col6:checked ~ .hs.row4.col6:checked ~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ div > div > shed > .row5.col5 { + opacity: 0; +} + +.hs.row5.col5:checked +~ .hs.row5.col6:checked +~ .hs.row4.col6:checked ~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ div > div > shed > .row5.col4 { + opacity: 0; +} + +.hs.row5.col4:checked +~ .hs.row5.col5:checked +~ .hs.row5.col6:checked +~ .hs.row4.col6:checked ~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ div > div > shed > .row5.col3 { + opacity: 0; +} + +.house.row4.col3:checked ~ div > div > shed > .row3.col3 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col1:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col1:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row1.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col-1 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row3.col5, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row2.col1, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row1.col4, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col5, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row4.col4 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row2.col2, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col3, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row1.col5, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col6, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row3.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row3.col6, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row1.col5, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row2.col2 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col6, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row3.col2 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row3.col1, +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row2.col5, +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row2.col1, +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col1, +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col4, +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col0:checked ~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ div > div > shed > .row3.col0, +.house.row4.col3:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col1:checked ~ div > div > shed > .row1.col1, +.house.row4.col3:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col1:checked ~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col0, +.house.row4.col3:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col5:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div +> div +> shed +> .row3.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col6:checked +~ .hs.row2.col3:checked +~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col5:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col6:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col5, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row2.col6, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row4.col5, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row2.col5, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row4.col5, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row3.col5 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked +~ div +> div +> shed +> .row3.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row2.col1, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col2:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row2.col0, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col5, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row2.col6:checked ~ div > div > shed > .row3.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row3.col5:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.house.row2.col3:checked ~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .house.row1.col3:checked ~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > house > .row4.col2, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > house > .row3.col2, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > house > .row3.col1, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > house > .row4.col2, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > house > .row3.col0, +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > house > .row4.col1, +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > house > .row2.col1 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > house > .row4.col0, +.hs.row3.col0:checked ~ .hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > house > .row2.col0 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col1:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > house > .row1.col0, +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} + +.hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col2, +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col3, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row1.col0, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} + +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > house > .row5.col2 { + opacity: 1; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > house > .row5.col1 { + opacity: 1; +} + +.hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > house > .row5.col0 { + opacity: 1; +} + +.hs.row5.col0:checked ~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > house > .row5.col1 { + opacity: 1; +} + +.hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > house > .row5.col2 { + opacity: 1; +} + +.hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > house > .row5.col3 { + opacity: 1; +} + +.hs.row5.col1:checked ~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > house > .row5.col0, +.hs.row5.col1:checked ~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > house > .row5.col1, +.hs.row5.col1:checked ~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > house > .row5.col2 { + opacity: 1; +} + +.hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > house > .row5.col3 { + opacity: 1; +} + +.hs.row5.col2:checked ~ .hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > house > .row5.col2, +.hs.row5.col2:checked ~ .hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > house > .row5.col3, +.hs.row5.col2:checked ~ .hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > house > .row5.col1 { + opacity: 1; +} + +.hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > house > .row5.col0 { + opacity: 1; +} + +.hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > house > .row4.col0 { + opacity: 1; +} + +.hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row4.col0:checked +~ .hs.row4.col2:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} + +.hs.row5.col1:checked ~ .hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ div > div > house > .row5.col0 { + opacity: 1; +} + +.hs.row5.col0:checked +~ .hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row4.col0:checked +~ .hs.row4.col2:checked +~ .house.row4.col3:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col0:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col0:checked ~ div > div > house > .row2.col1, +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col0:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col0:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col2:checked ~ div > div > house > .row1.col2, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col1 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col1:checked ~ div > div > house > .row1.col1, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col1:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} + +.house.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col1:checked ~ div > div > house > .row0.col1, +.house.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row0.col1:checked ~ div > div > house > .row0.col0 { + opacity: 1; +} + +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row0.col5:checked ~ div > div > house > .row0.col6, +.house.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row0.col5:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row3.col0, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row1.col0, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} + +.house.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row0.col3:checked +~ .hs.row1.col3:checked +~ .hs.row2.col3:checked +~ div > div > house > .row2.col0, +.house.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row0.col3:checked +~ .hs.row1.col3:checked +~ .hs.row2.col3:checked +~ div > div > house > .row1.col0, +.house.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row0.col3:checked +~ .hs.row1.col3:checked +~ .hs.row2.col3:checked +~ div > div > house > .row0.col0 { + opacity: 1; +} + +.hs.row3.col0:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row3.col0, +.hs.row3.col0:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row4.col0 { + opacity: 1; +} + +.hs.row4.col0:checked ~ .hs.row3.col0:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ div > div > house > .row4.col1 { + opacity: 1; +} + +.house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row3.col1, +.hs.row3.col1:checked ~ .house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row4.col1 { + opacity: 1; +} + +.hs.row3.col0:checked ~ .house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row3.col0, +.hs.row3.col0:checked ~ .house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row4.col0 { + opacity: 1; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col0:checked ~ .house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row4.col1, +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row3.col0:checked ~ .house.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row4.col2 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row1.col4, +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .house.row3.col3:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row1.col4, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row2.col5, +.hs.row3.col2:checked ~ .house.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} + +.house.row3.col3:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row3.col6, +.house.row3.col3:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row3.col5, +.house.row3.col3:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row4.col5 { + opacity: 1; +} + +.house.row3.col3:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row3.col6, +.house.row3.col3:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row3.col5, +.house.row3.col3:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row4.col6 { + opacity: 1; +} + +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .house.row3.col3:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row4.col5, +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .house.row3.col3:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row4.col4 { + opacity: 1; +} + +.hs.row4.col5:checked ~ .house.row3.col3:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row4.col6, +.hs.row4.col5:checked ~ .house.row3.col3:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row4.col4 { + opacity: 1; +} + +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row4.col6, +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row4.col5 { + opacity: 1; +} + +.house.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row2.col6, +.house.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col6:checked +~ div > div > house > .row3.col6, +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col6:checked +~ div > div > house > .row2.col6 { + opacity: 1; +} + +.house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col6:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row3.col6, +.house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col6:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row4.col6 { + opacity: 1; +} + +.hs.row4.col4:checked +~ .hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col6:checked +~ .hs.row2.col6:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row4.col6:checked ~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col6:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row4.col5 { + opacity: 1; +} + +.house.row3.col3:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked +~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col6, +.house.row3.col3:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked +~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} + +.house.row3.col3:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col6, +.house.row3.col3:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} + +.house.row3.col3:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col6, +.house.row3.col3:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ .house.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row4.col2 { + opacity: 1; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > house > .row4.col1, +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > house > .row5.col1, +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > house > .row4.col0 { + opacity: 1; +} + +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > house > .row3.col0, +.hs.row4.col0:checked +~ .hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col2:checked ~ .house.row3.col3:checked ~ div > div > house > .row5.col0 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .house.row2.col3:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .house.row2.col3:checked ~ div > div > house > .row4.col4, +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .house.row2.col3:checked ~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .house.row2.col3:checked ~ div > div > house > .row2.col5, +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .house.row2.col3:checked ~ div > div > house > .row4.col5, +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .house.row2.col3:checked ~ div > div > house > .row3.col6 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .house.row2.col3:checked ~ div > div > house > .row4.col6, +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .house.row2.col3:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .house.row1.col3:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked ~ .house.row1.col3:checked ~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked ~ .house.row1.col3:checked ~ div > div > house > .row2.col5, +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked ~ .house.row1.col3:checked ~ div > div > house > .row3.col6 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked ~ .house.row1.col3:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked ~ .hs.row2.col6:checked ~ .house.row1.col3:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked ~ .house.row1.col3:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col3:checked ~ .hs.row2.col6:checked ~ .house.row1.col3:checked ~ .hs.row1.col6:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked ~ .house.row1.col3:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked ~ .house.row1.col3:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .house.row1.col3:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row1.col2:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row1.col2:checked ~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row1.col2:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .house.row1.col2:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .house.row1.col2:checked +~ .hs.row1.col5:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .house.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row1.col6 { + opacity: 1; +} +.hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .house.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row5.col6 { + opacity: 1; +} + +.house.row3.col3:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row3.col5, +.house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row4.col4, +.house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row3.col6, +.house.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row4.col5, +.house.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ div > div > house > .row4.col6, +.house.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} + +.hs.row4.col4:checked ~ .house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row4.col5, +.hs.row4.col4:checked ~ .house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row5.col4 { + opacity: 1; +} + +.hs.row5.col4:checked ~ .hs.row4.col4:checked ~ .house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row5.col3, +.hs.row5.col4:checked ~ .hs.row4.col4:checked ~ .house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row5.col5 { + opacity: 1; +} + +.hs.row5.col4:checked +~ .hs.row5.col5:checked +~ .hs.row4.col4:checked ~ .house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row5.col6 { + opacity: 1; +} + +.hs.row5.col4:checked +~ .hs.row5.col5:checked +~ .hs.row5.col6:checked +~ .hs.row4.col4:checked ~ .house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row4.col6 { + opacity: 1; +} + +.hs.row5.col4:checked +~ .hs.row5.col5:checked +~ .hs.row5.col6:checked +~ .hs.row4.col4:checked +~ .hs.row4.col6:checked +~ .house.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row3.col6 { + opacity: 1; +} + +.hs.row4.col5:checked ~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ div > div > house > .row4.col6, +.hs.row4.col5:checked ~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ div > div > house > .row5.col5 { + opacity: 1; +} + +.hs.row5.col5:checked ~ .hs.row4.col5:checked ~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ div > div > house > .row5.col4, +.hs.row5.col5:checked ~ .hs.row4.col5:checked ~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ div > div > house > .row5.col6 { + opacity: 1; +} + +.hs.row5.col4:checked +~ .hs.row5.col5:checked +~ .hs.row4.col5:checked ~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ div > div > house > .row5.col3 { + opacity: 1; +} + +.hs.row4.col6:checked ~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ div > div > house > .row5.col6 { + opacity: 1; +} + +.hs.row5.col6:checked ~ .hs.row4.col6:checked ~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ div > div > house > .row5.col5 { + opacity: 1; +} + +.hs.row5.col5:checked +~ .hs.row5.col6:checked +~ .hs.row4.col6:checked ~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ div > div > house > .row5.col4 { + opacity: 1; +} + +.hs.row5.col4:checked +~ .hs.row5.col5:checked +~ .hs.row5.col6:checked +~ .hs.row4.col6:checked ~ .house.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ div > div > house > .row5.col3 { + opacity: 1; +} + +.house.row4.col3:checked ~ div > div > house > .row3.col3 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col0:checked ~ .hs.row2.col0:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col1:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col1:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row1.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col-1 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row3.col5, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row1.col2:checked +~ div > div > house > .row2.col1, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row1.col2:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > house > .row1.col4, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col5, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > house > .row4.col4 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row2.col2, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col3, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row1.col5, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col6, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > house > .row3.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row3.col6, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ div > div > house > .row1.col5, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row2.col2 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col6, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ div > div > house > .row3.col2 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col5:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row3.col1, +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row2.col5, +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked ~ div > div > house > .row2.col1, +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col1, +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row2.col4, +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col0:checked ~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col0:checked +~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col0:checked ~ .hs.row1.col0:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ div > div > house > .row3.col0, +.house.row4.col3:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col1:checked ~ div > div > house > .row1.col1, +.house.row4.col3:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col1:checked ~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col0, +.house.row4.col3:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col5:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ div +> div +> house +> .row3.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col6:checked +~ .hs.row2.col3:checked +~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col5:checked +~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row3.col6:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col5, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row2.col6, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row4.col5, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > house > .row2.col5, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > house > .row4.col5, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row3.col5 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked +~ div +> div +> house +> .row3.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row2.col1, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col2:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col0:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row2.col0, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col0:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col5, +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row2.col6:checked ~ div > div > house > .row3.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row3.col5:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .hs.row1.col2:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row2.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} + +.house.row0.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row0.col4:checked ~ .house.row-1.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > shed > .row2.col3, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > shed > .row1.col3, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > shed > .row1.col2, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > shed > .row2.col3, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > shed > .row1.col1, +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > shed > .row2.col2, +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > shed > .row2.col1, +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} + +.hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col2:checked ~ div > div > shed > .row-1.col2 { + opacity: 0; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col1, +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col2 { + opacity: 0; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > shed > .row-1.col3 { + opacity: 0; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row-1.col4 { + opacity: 0; +} + +.hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col3, +.hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col1 { + opacity: 0; +} + +.hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row-1.col4 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col4, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col2 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row-1.col1, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > shed > .row3.col1, +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > shed > .row3.col2, +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > shed > .row3.col3, +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > shed > .row3.col4, +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col1:checked ~ div > div > shed > .row0.col2, +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col1:checked ~ div > div > shed > .row-1.col1 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row-1.col3, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col2, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col1 { + opacity: 0; +} + +.house.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-2.col2:checked ~ div > div > shed > .row-2.col2, +.house.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-2.col2:checked ~ div > div > shed > .row-2.col1 { + opacity: 0; +} + +.house.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-2.col6:checked ~ div > div > shed > .row-2.col7, +.house.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-2.col6:checked ~ div > div > shed > .row-2.col6 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col1, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row-1.col1, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} + +.house.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-2.col4:checked +~ .hs.row-1.col4:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row0.col1, +.house.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-2.col4:checked +~ .hs.row-1.col4:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row-1.col1, +.house.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-2.col4:checked +~ .hs.row-1.col4:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row-2.col1 { + opacity: 0; +} + +.hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col1, +.hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col2 { + opacity: 0; +} + +.house.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} + +.hs.row1.col2:checked ~ .house.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row1.col2, +.hs.row1.col2:checked ~ .house.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col2 { + opacity: 0; +} + +.hs.row1.col1:checked ~ .house.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row1.col1, +.hs.row1.col1:checked ~ .house.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col1:checked ~ .house.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col2, +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col1:checked ~ .house.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row-1.col5, +.hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row0.col5 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row-1.col5, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row-1.col6 { + opacity: 0; +} + +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row0.col6, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.house.row1.col4:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row1.col7, +.house.row1.col4:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row1.col6, +.house.row1.col4:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.house.row1.col4:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > shed > .row1.col7, +.house.row1.col4:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > shed > .row1.col6, +.house.row1.col4:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > shed > .row2.col7 { + opacity: 0; +} + +.hs.row2.col6:checked +~ .hs.row2.col7:checked +~ .house.row1.col4:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > shed > .row2.col6, +.hs.row2.col6:checked +~ .hs.row2.col7:checked +~ .house.row1.col4:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row2.col6:checked ~ .house.row1.col4:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col7, +.hs.row2.col6:checked ~ .house.row1.col4:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row2.col7, +.hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.house.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row0.col7, +.house.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row0.col6 { + opacity: 0; +} + +.hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row1.col7, +.hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row0.col7 { + opacity: 0; +} + +.house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col7:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > shed > .row1.col7, +.house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col7:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > shed > .row2.col7 { + opacity: 0; +} + +.hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col7:checked +~ .hs.row0.col7:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} + +.hs.row2.col7:checked ~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col7:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.house.row1.col4:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked +~ .hs.row0.col7:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > shed > .row1.col7, +.house.row1.col4:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked +~ .hs.row0.col7:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.house.row1.col4:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row1.col7, +.house.row1.col4:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.house.row1.col4:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col7:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > shed > .row1.col7, +.house.row1.col4:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col7:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .house.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > shed > .row2.col2, +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > shed > .row3.col2, +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > shed > .row1.col1, +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row1.col4:checked ~ .house.row0.col4:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .house.row0.col4:checked ~ div > div > shed > .row2.col5, +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .house.row0.col4:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .house.row0.col4:checked ~ div > div > shed > .row0.col6, +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .house.row0.col4:checked ~ div > div > shed > .row2.col6, +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .house.row0.col4:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ .house.row0.col4:checked ~ div > div > shed > .row2.col7, +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ .house.row0.col4:checked ~ div > div > shed > .row0.col7 { + opacity: 0; +} + +.hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .house.row-1.col4:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col4:checked ~ .house.row-1.col4:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked ~ .house.row-1.col4:checked ~ div > div > shed > .row0.col6, +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked ~ .house.row-1.col4:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked ~ .house.row-1.col4:checked ~ div > div > shed > .row0.col7 { + opacity: 0; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked ~ .hs.row0.col7:checked ~ .house.row-1.col4:checked ~ div > div > shed > .row-1.col7 { + opacity: 0; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked ~ .hs.row0.col6:checked ~ .house.row-1.col4:checked ~ div > div > shed > .row-1.col6 { + opacity: 0; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked ~ .hs.row0.col7:checked ~ .house.row-1.col4:checked ~ .hs.row-1.col7:checked ~ div > div > shed > .row-1.col6 { + opacity: 0; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked ~ .hs.row0.col6:checked ~ .house.row-1.col4:checked ~ .hs.row-1.col6:checked ~ div > div > shed > .row-1.col7 { + opacity: 0; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked ~ .hs.row0.col6:checked ~ .house.row-1.col4:checked ~ div > div > shed > .row0.col7 { + opacity: 0; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked ~ .house.row-1.col4:checked ~ div > div > shed > .row-1.col7 { + opacity: 0; +} + +.hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .house.row-1.col3:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .house.row-1.col3:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .house.row-1.col3:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} + +.hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col6:checked +~ .house.row-1.col3:checked ~ div > div > shed > .row-1.col6 { + opacity: 0; +} + +.hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col6:checked +~ .house.row-1.col3:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row-1.col5 { + opacity: 0; +} + +.hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .house.row-1.col4:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > shed > .row-1.col7 { + opacity: 0; +} +.hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .house.row-1.col4:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > shed > .row3.col7 { + opacity: 0; +} + +.house.row1.col4:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col6, +.house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row2.col5, +.house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row1.col7, +.house.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row2.col6, +.house.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > shed > .row2.col7, +.house.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > shed > .row0.col7 { + opacity: 0; +} + +.hs.row2.col5:checked ~ .house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row2.col6, +.hs.row2.col5:checked ~ .house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row3.col4, +.hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row2.col5:checked ~ .house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row3.col7 { + opacity: 0; +} + +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row3.col7:checked +~ .hs.row2.col5:checked ~ .house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row2.col7 { + opacity: 0; +} + +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row3.col7:checked +~ .hs.row2.col5:checked +~ .hs.row2.col7:checked +~ .house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} + +.hs.row2.col6:checked ~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row2.col7, +.hs.row2.col6:checked ~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col5, +.hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col7 { + opacity: 0; +} + +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row2.col6:checked ~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row2.col7:checked ~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row3.col7 { + opacity: 0; +} + +.hs.row3.col7:checked ~ .hs.row2.col7:checked ~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.hs.row3.col6:checked +~ .hs.row3.col7:checked +~ .hs.row2.col7:checked ~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row3.col7:checked +~ .hs.row2.col7:checked ~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.house.row2.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row-1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col0 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col6, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row0.col2, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row-1.col5, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row0.col6, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col7:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row0.col3, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ div > div > shed > .row-1.col6, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ div > div > shed > .row-1.col4, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ div > div > shed > .row-1.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ .hs.row-1.col7:checked ~ div > div > shed > .row0.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row-1.col6, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row0.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .hs.row-1.col6:checked ~ div > div > shed > .row-1.col7, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked ~ div > div > shed > .row-1.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row1.col7, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row-1.col6, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row0.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked ~ div > div > shed > .row-1.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ .hs.row-1.col6:checked ~ div > div > shed > .row-1.col7, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ .hs.row-1.col6:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > shed > .row0.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ .hs.row0.col7:checked ~ div > div > shed > .row-1.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ .hs.row0.col7:checked ~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ .hs.row0.col7:checked ~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > shed > .row-1.col5 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ .hs.row0.col7:checked ~ .hs.row-1.col7:checked ~ div > div > shed > .row-1.col6 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col2, +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row0.col6, +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col2, +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col2, +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > shed > .row0.col5, +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > shed > .row-1.col6 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked ~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row1.col1, +.house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked ~ div > div > shed > .row-1.col2, +.house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col1, +.house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div +> div +> shed +> .row1.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col7:checked +~ .hs.row0.col4:checked +~ .hs.row0.col7:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col7:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col7:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row0.col6, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col7:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ div > div > shed > .row-1.col6 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ div > div > shed > .row-1.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ .hs.row-1.col7:checked ~ div > div > shed > .row0.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row0.col7, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row2.col6, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row-1.col6 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked ~ div > div > shed > .row0.col6, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked ~ div > div > shed > .row2.col6, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked ~ div > div > shed > .row-1.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked +~ div +> div +> shed +> .row1.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row0.col2, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col3:checked ~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row0.col1, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row-1.col4 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row1.col6, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row0.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row0.col7:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row1.col6:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col7:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row-1.col5 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > shed > .row-1.col6 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ div > div > shed > .row-1.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ .hs.row-1.col7:checked ~ div > div > shed > .row0.col7 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row-1.col3 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked +~ .hs.row-1.col3:checked +~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row-1.col2 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row-1.col1 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col4:checked +~ .hs.row-1.col4:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.house.row0.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row0.col4:checked ~ .house.row-1.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > house > .row2.col3, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > house > .row1.col3, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > house > .row1.col2, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > house > .row2.col3, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > house > .row1.col1, +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > house > .row2.col2, +.hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > house > .row2.col1, +.hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} + +.hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col2:checked ~ div > div > house > .row-1.col2 { + opacity: 1; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col1, +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col2 { + opacity: 1; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ div > div > house > .row-1.col3 { + opacity: 1; +} + +.hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row-1.col4 { + opacity: 1; +} + +.hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col3, +.hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col1 { + opacity: 1; +} + +.hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row-1.col4 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col4, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col2 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row-1.col1, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > house > .row3.col1, +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > house > .row3.col2, +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > house > .row3.col3, +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > house > .row3.col4, +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col1:checked ~ div > div > house > .row0.col2, +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col1:checked ~ div > div > house > .row-1.col1 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col3:checked ~ div > div > house > .row-1.col3, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col2, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col1 { + opacity: 1; +} + +.house.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-2.col2:checked ~ div > div > house > .row-2.col2, +.house.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-2.col2:checked ~ div > div > house > .row-2.col1 { + opacity: 1; +} + +.house.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-2.col6:checked ~ div > div > house > .row-2.col7, +.house.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-2.col6:checked ~ div > div > house > .row-2.col6 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col1, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row-1.col1, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} + +.house.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-2.col4:checked +~ .hs.row-1.col4:checked +~ .hs.row0.col4:checked +~ div > div > house > .row0.col1, +.house.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-2.col4:checked +~ .hs.row-1.col4:checked +~ .hs.row0.col4:checked +~ div > div > house > .row-1.col1, +.house.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-2.col4:checked +~ .hs.row-1.col4:checked +~ .hs.row0.col4:checked +~ div > div > house > .row-2.col1 { + opacity: 1; +} + +.hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col1, +.hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col2 { + opacity: 1; +} + +.house.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} + +.hs.row1.col2:checked ~ .house.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row1.col2, +.hs.row1.col2:checked ~ .house.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col2 { + opacity: 1; +} + +.hs.row1.col1:checked ~ .house.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row1.col1, +.hs.row1.col1:checked ~ .house.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col1:checked ~ .house.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col2, +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row1.col1:checked ~ .house.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col3 { + opacity: 1; +} + +.hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row-1.col5, +.hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .house.row1.col4:checked +~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row0.col5 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row-1.col5, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row-1.col6 { + opacity: 1; +} + +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row0.col6, +.hs.row1.col3:checked ~ .house.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row1.col6 { + opacity: 1; +} + +.house.row1.col4:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row1.col7, +.house.row1.col4:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row1.col6, +.house.row1.col4:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col6 { + opacity: 1; +} + +.house.row1.col4:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > house > .row1.col7, +.house.row1.col4:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > house > .row1.col6, +.house.row1.col4:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > house > .row2.col7 { + opacity: 1; +} + +.hs.row2.col6:checked +~ .hs.row2.col7:checked +~ .house.row1.col4:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > house > .row2.col6, +.hs.row2.col6:checked +~ .hs.row2.col7:checked +~ .house.row1.col4:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row2.col6:checked ~ .house.row1.col4:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col7, +.hs.row2.col6:checked ~ .house.row1.col4:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row2.col7, +.hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} + +.house.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row0.col7, +.house.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row0.col6 { + opacity: 1; +} + +.hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col7:checked +~ div > div > house > .row1.col7, +.hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col7:checked +~ div > div > house > .row0.col7 { + opacity: 1; +} + +.house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col7:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > house > .row1.col7, +.house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col7:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > house > .row2.col7 { + opacity: 1; +} + +.hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col7:checked +~ .hs.row0.col7:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} + +.hs.row2.col7:checked ~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col7:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > house > .row2.col6 { + opacity: 1; +} + +.house.row1.col4:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked +~ .hs.row0.col7:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > house > .row1.col7, +.house.row1.col4:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked +~ .hs.row0.col7:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > house > .row1.col6 { + opacity: 1; +} + +.house.row1.col4:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row1.col7, +.house.row1.col4:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row1.col6 { + opacity: 1; +} + +.house.row1.col4:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col7:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > house > .row1.col7, +.house.row1.col4:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col7:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > house > .row1.col6 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .house.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col3 { + opacity: 1; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > house > .row2.col2, +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > house > .row3.col2, +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > house > .row2.col1 { + opacity: 1; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > house > .row1.col1, +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col3:checked ~ .house.row1.col4:checked ~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row1.col4:checked ~ .house.row0.col4:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .house.row0.col4:checked ~ div > div > house > .row2.col5, +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .house.row0.col4:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .house.row0.col4:checked ~ div > div > house > .row0.col6, +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .house.row0.col4:checked ~ div > div > house > .row2.col6, +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .house.row0.col4:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ .house.row0.col4:checked ~ div > div > house > .row2.col7, +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ .house.row0.col4:checked ~ div > div > house > .row0.col7 { + opacity: 1; +} + +.hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .house.row-1.col4:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col4:checked ~ .house.row-1.col4:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked ~ .house.row-1.col4:checked ~ div > div > house > .row0.col6, +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked ~ .house.row-1.col4:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked ~ .house.row-1.col4:checked ~ div > div > house > .row0.col7 { + opacity: 1; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked ~ .hs.row0.col7:checked ~ .house.row-1.col4:checked ~ div > div > house > .row-1.col7 { + opacity: 1; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked ~ .hs.row0.col6:checked ~ .house.row-1.col4:checked ~ div > div > house > .row-1.col6 { + opacity: 1; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ .hs.row0.col4:checked ~ .hs.row0.col7:checked ~ .house.row-1.col4:checked ~ .hs.row-1.col7:checked ~ div > div > house > .row-1.col6 { + opacity: 1; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked ~ .hs.row0.col6:checked ~ .house.row-1.col4:checked ~ .hs.row-1.col6:checked ~ div > div > house > .row-1.col7 { + opacity: 1; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked ~ .hs.row0.col6:checked ~ .house.row-1.col4:checked ~ div > div > house > .row0.col7 { + opacity: 1; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked ~ .house.row-1.col4:checked ~ div > div > house > .row-1.col7 { + opacity: 1; +} + +.hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .house.row-1.col3:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .house.row-1.col3:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} + +.hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .house.row-1.col3:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} + +.hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col6:checked +~ .house.row-1.col3:checked ~ div > div > house > .row-1.col6 { + opacity: 1; +} + +.hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col6:checked +~ .house.row-1.col3:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row-1.col5 { + opacity: 1; +} + +.hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .house.row-1.col4:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > house > .row-1.col7 { + opacity: 1; +} +.hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .house.row-1.col4:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > house > .row3.col7 { + opacity: 1; +} + +.house.row1.col4:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col6, +.house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row2.col5, +.house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row1.col7, +.house.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row2.col6, +.house.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > house > .row2.col7, +.house.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > house > .row0.col7 { + opacity: 1; +} + +.hs.row2.col5:checked ~ .house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row2.col6, +.hs.row2.col5:checked ~ .house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row3.col4, +.hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row3.col6 { + opacity: 1; +} + +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row2.col5:checked ~ .house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row3.col7 { + opacity: 1; +} + +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row3.col7:checked +~ .hs.row2.col5:checked ~ .house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row2.col7 { + opacity: 1; +} + +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row3.col7:checked +~ .hs.row2.col5:checked +~ .hs.row2.col7:checked +~ .house.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} + +.hs.row2.col6:checked ~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row2.col7, +.hs.row2.col6:checked ~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} + +.hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col5, +.hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col7 { + opacity: 1; +} + +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row2.col6:checked ~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row2.col7:checked ~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row3.col7 { + opacity: 1; +} + +.hs.row3.col7:checked ~ .hs.row2.col7:checked ~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} + +.hs.row3.col6:checked +~ .hs.row3.col7:checked +~ .hs.row2.col7:checked ~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row3.col7:checked +~ .hs.row2.col7:checked ~ .house.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} + +.house.row2.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col2:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row-1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col0 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col6, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row0.col2, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > house > .row-1.col5, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > house > .row0.col6, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col7:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row0.col3, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ div > div > house > .row-1.col6, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ div > div > house > .row-1.col4, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ div > div > house > .row-1.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ .hs.row-1.col7:checked ~ div > div > house > .row0.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > house > .row-1.col6, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > house > .row0.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .hs.row-1.col6:checked ~ div > div > house > .row-1.col7, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked ~ div > div > house > .row-1.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row1.col7, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ div > div > house > .row-1.col6, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ div > div > house > .row0.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked ~ div > div > house > .row-1.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ .hs.row-1.col6:checked ~ div > div > house > .row-1.col7, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ .hs.row-1.col6:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > house > .row0.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ .hs.row0.col7:checked ~ div > div > house > .row-1.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ .hs.row0.col7:checked ~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ .hs.row0.col7:checked ~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > house > .row-1.col5 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ .hs.row0.col7:checked ~ .hs.row-1.col7:checked ~ div > div > house > .row-1.col6 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col2, +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row0.col6, +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col5:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col2, +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked ~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col2, +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > house > .row0.col5, +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > house > .row-1.col6 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked ~ .hs.row-1.col3:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked ~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked ~ .hs.row-1.col1:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row1.col1, +.house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked ~ div > div > house > .row-1.col2, +.house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col1, +.house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked ~ .hs.row-1.col2:checked ~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div +> div +> house +> .row1.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col7:checked +~ .hs.row0.col4:checked +~ .hs.row0.col7:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col7:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col7:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row0.col6, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col7:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ div > div > house > .row-1.col6 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ div > div > house > .row-1.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ .hs.row-1.col7:checked ~ div > div > house > .row0.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > house > .row0.col7, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > house > .row2.col6, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > house > .row-1.col6 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked ~ div > div > house > .row0.col6, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked ~ div > div > house > .row2.col6, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked ~ div > div > house > .row-1.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked +~ div +> div +> house +> .row1.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row0.col2, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col3:checked ~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row-1.col1:checked +~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row0.col1, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > house > .row-1.col4 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row1.col6, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row0.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row0.col7:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row1.col6:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col7:checked +~ .hs.row-1.col4:checked +~ .hs.row-1.col5:checked +~ .hs.row-1.col6:checked +~ .hs.row-1.col7:checked +~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row-1.col5 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ div > div > house > .row-1.col6 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ div > div > house > .row-1.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ .hs.row-1.col5:checked ~ .hs.row-1.col6:checked ~ .hs.row-1.col7:checked ~ div > div > house > .row0.col7 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row-1.col3 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked +~ .hs.row-1.col3:checked +~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row-1.col2 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col2:checked +~ .hs.row-1.col3:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row-1.col1 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row-1.col4:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col4:checked +~ .hs.row-1.col4:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} + +.house.row1.col4:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row1.col4:checked ~ .house.row0.col4:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > shed > .row3.col3, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > shed > .row2.col3, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > shed > .row2.col2, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > shed > .row3.col3, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > shed > .row2.col1, +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > shed > .row3.col2, +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > shed > .row3.col1, +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col2:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col1, +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > shed > .row0.col3 { + opacity: 0; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col4 { + opacity: 0; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col3, +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col4 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col1, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > shed > .row4.col3 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > shed > .row4.col2 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > shed > .row4.col2 { + opacity: 0; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > shed > .row4.col3 { + opacity: 0; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > shed > .row4.col4 { + opacity: 0; +} + +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > shed > .row4.col1, +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > shed > .row4.col2, +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > shed > .row4.col3 { + opacity: 0; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > shed > .row4.col4 { + opacity: 0; +} + +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > shed > .row4.col3, +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > shed > .row4.col4, +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > shed > .row4.col2 { + opacity: 0; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col3:checked ~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col3:checked ~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col1:checked +~ .hs.row3.col3:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col1:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col1:checked ~ div > div > shed > .row1.col2, +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col1:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row0.col3, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col2:checked ~ div > div > shed > .row0.col2, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col2:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} + +.house.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col2, +.house.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col2:checked ~ div > div > shed > .row-1.col1 { + opacity: 0; +} + +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col6:checked ~ div > div > shed > .row-1.col7, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col6:checked ~ div > div > shed > .row-1.col6 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col1, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row0.col1, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.house.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row-1.col4:checked +~ .hs.row0.col4:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row1.col1, +.house.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row-1.col4:checked +~ .hs.row0.col4:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row0.col1, +.house.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row-1.col4:checked +~ .hs.row0.col4:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row-1.col1 { + opacity: 0; +} + +.hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col1, +.hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col2 { + opacity: 0; +} + +.hs.row2.col2:checked ~ .house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row2.col2, +.hs.row2.col2:checked ~ .house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row2.col1:checked ~ .house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row2.col1, +.hs.row2.col1:checked ~ .house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col1:checked ~ .house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col2, +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col1:checked ~ .house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row0.col5, +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row0.col5, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row0.col6 { + opacity: 0; +} + +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row1.col6, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.house.row2.col4:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row2.col7, +.house.row2.col4:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row2.col6, +.house.row2.col4:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.house.row2.col4:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row2.col7, +.house.row2.col4:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row2.col6, +.house.row2.col4:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row3.col7 { + opacity: 0; +} + +.hs.row3.col6:checked +~ .hs.row3.col7:checked +~ .house.row2.col4:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row3.col6, +.hs.row3.col6:checked +~ .hs.row3.col7:checked +~ .house.row2.col4:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row3.col6:checked ~ .house.row2.col4:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col7, +.hs.row3.col6:checked ~ .house.row2.col4:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row3.col7, +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.house.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row1.col7, +.house.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row3.col7:checked +~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col7:checked +~ div > div > shed > .row2.col7, +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row3.col7:checked +~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col7:checked +~ div > div > shed > .row1.col7 { + opacity: 0; +} + +.house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col7:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row2.col7, +.house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col7:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row3.col7 { + opacity: 0; +} + +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row3.col7:checked +~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col7:checked +~ .hs.row1.col7:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.hs.row3.col7:checked ~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col7:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.house.row2.col4:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked +~ .hs.row1.col7:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > shed > .row2.col7, +.house.row2.col4:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked +~ .hs.row1.col7:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.house.row2.col4:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col7, +.house.row2.col4:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.house.row2.col4:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col7:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > shed > .row2.col7, +.house.row2.col4:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col7:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col3 { + opacity: 0; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > shed > .row3.col2, +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > shed > .row4.col2, +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > shed > .row2.col1, +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .house.row1.col4:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .house.row1.col4:checked ~ div > div > shed > .row3.col5, +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .house.row1.col4:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .house.row1.col4:checked ~ div > div > shed > .row1.col6, +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .house.row1.col4:checked ~ div > div > shed > .row3.col6, +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .house.row1.col4:checked ~ div > div > shed > .row2.col7 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ .house.row1.col4:checked ~ div > div > shed > .row3.col7, +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ .house.row1.col4:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .house.row0.col4:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col4:checked ~ .house.row0.col4:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked ~ .house.row0.col4:checked ~ div > div > shed > .row1.col6, +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked ~ .house.row0.col4:checked ~ div > div > shed > .row2.col7 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked ~ .house.row0.col4:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked ~ .hs.row1.col7:checked ~ .house.row0.col4:checked ~ div > div > shed > .row0.col7 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked ~ .house.row0.col4:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked ~ .hs.row1.col7:checked ~ .house.row0.col4:checked ~ .hs.row0.col7:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked ~ .house.row0.col4:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row0.col7 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked ~ .house.row0.col4:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ .house.row0.col4:checked ~ div > div > shed > .row0.col7 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .house.row0.col3:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .house.row0.col3:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .house.row0.col3:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .house.row0.col3:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} + +.hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .house.row0.col3:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row0.col5 { + opacity: 0; +} + +.hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .house.row0.col4:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > shed > .row0.col7 { + opacity: 0; +} +.hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .house.row0.col4:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > shed > .row4.col7 { + opacity: 0; +} + +.house.row2.col4:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row2.col6, +.house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row3.col5, +.house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row2.col7, +.house.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row3.col6, +.house.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ div > div > shed > .row3.col7, +.house.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} + +.hs.row3.col5:checked ~ .house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row3.col6, +.hs.row3.col5:checked ~ .house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row4.col5 { + opacity: 0; +} + +.hs.row4.col5:checked ~ .hs.row3.col5:checked ~ .house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row4.col4, +.hs.row4.col5:checked ~ .hs.row3.col5:checked ~ .house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row4.col6 { + opacity: 0; +} + +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row3.col5:checked ~ .house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row4.col7 { + opacity: 0; +} + +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row4.col7:checked +~ .hs.row3.col5:checked ~ .house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row3.col7 { + opacity: 0; +} + +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row4.col7:checked +~ .hs.row3.col5:checked +~ .hs.row3.col7:checked +~ .house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row2.col7 { + opacity: 0; +} + +.hs.row3.col6:checked ~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row3.col7, +.hs.row3.col6:checked ~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row4.col6 { + opacity: 0; +} + +.hs.row4.col6:checked ~ .hs.row3.col6:checked ~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row4.col5, +.hs.row4.col6:checked ~ .hs.row3.col6:checked ~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row4.col7 { + opacity: 0; +} + +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row3.col6:checked ~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row4.col4 { + opacity: 0; +} + +.hs.row3.col7:checked ~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > shed > .row4.col7 { + opacity: 0; +} + +.hs.row4.col7:checked ~ .hs.row3.col7:checked ~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > shed > .row4.col6 { + opacity: 0; +} + +.hs.row4.col6:checked +~ .hs.row4.col7:checked +~ .hs.row3.col7:checked ~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > shed > .row4.col5 { + opacity: 0; +} + +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row4.col7:checked +~ .hs.row3.col7:checked ~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > shed > .row4.col4 { + opacity: 0; +} + +.house.row3.col4:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col2 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col2 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row2.col2 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col2 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row0.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col0 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row2.col6, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col2, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row0.col5, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col6, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row3.col5 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col7:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > shed > .row2.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row1.col3, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row0.col6, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row0.col4, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row0.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row0.col6, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row0.col7, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > shed > .row0.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > shed > .row2.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row2.col7, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row0.col6, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > shed > .row0.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row0.col7, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ .hs.row1.col7:checked ~ div > div > shed > .row0.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ .hs.row1.col7:checked ~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ .hs.row1.col7:checked ~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ .hs.row1.col7:checked ~ .hs.row0.col7:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col2, +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row1.col6, +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col2, +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col2, +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row1.col5, +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row2.col1, +.house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked ~ div > div > shed > .row0.col2, +.house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col1, +.house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div +> div +> shed +> .row2.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col7:checked +~ .hs.row1.col4:checked +~ .hs.row1.col7:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col7:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col7:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col6, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col7:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > shed > .row2.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row0.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row1.col7, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row3.col6, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > shed > .row1.col6, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > shed > .row3.col6, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > shed > .row0.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked +~ div +> div +> shed +> .row2.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row1.col2, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col3:checked ~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row1.col1, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row0.col4 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col6, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row1.col7:checked ~ div > div > shed > .row2.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row2.col6:checked +~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > shed > .row2.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col7:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > shed > .row2.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col5 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row0.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row0.col3 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked +~ .hs.row0.col3:checked +~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row0.col2 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col4:checked +~ .hs.row0.col4:checked +~ div > div > shed > .row2.col4 { + opacity: 0; +} + +.house.row1.col4:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row1.col4:checked ~ .house.row0.col4:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > house > .row3.col3, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > house > .row2.col3, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > house > .row2.col2, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > house > .row3.col3, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > house > .row2.col1, +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > house > .row3.col2, +.hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > house > .row3.col1, +.hs.row2.col1:checked ~ .hs.row2.col2:checked ~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col2:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > house > .row0.col1, +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ div > div > house > .row0.col3 { + opacity: 1; +} + +.hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col4 { + opacity: 1; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col3, +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col4 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col1, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > house > .row4.col3 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > house > .row4.col2 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > house > .row4.col1 { + opacity: 1; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > house > .row4.col2 { + opacity: 1; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > house > .row4.col3 { + opacity: 1; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > house > .row4.col4 { + opacity: 1; +} + +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > house > .row4.col1, +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > house > .row4.col2, +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > house > .row4.col3 { + opacity: 1; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col2:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > house > .row4.col4 { + opacity: 1; +} + +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > house > .row4.col3, +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > house > .row4.col4, +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > house > .row4.col2 { + opacity: 1; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col3:checked ~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > house > .row4.col1 { + opacity: 1; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col3:checked ~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col1:checked +~ .hs.row3.col3:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} + +.hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ div > div > house > .row4.col1 { + opacity: 1; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col1:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col1:checked ~ div > div > house > .row1.col2, +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col1:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col3:checked ~ div > div > house > .row0.col3, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col2:checked ~ div > div > house > .row0.col2, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col2:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} + +.house.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col2, +.house.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row-1.col2:checked ~ div > div > house > .row-1.col1 { + opacity: 1; +} + +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col6:checked ~ div > div > house > .row-1.col7, +.house.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row-1.col6:checked ~ div > div > house > .row-1.col6 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col1, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row0.col1, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} + +.house.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row-1.col4:checked +~ .hs.row0.col4:checked +~ .hs.row1.col4:checked +~ div > div > house > .row1.col1, +.house.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row-1.col4:checked +~ .hs.row0.col4:checked +~ .hs.row1.col4:checked +~ div > div > house > .row0.col1, +.house.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row-1.col4:checked +~ .hs.row0.col4:checked +~ .hs.row1.col4:checked +~ div > div > house > .row-1.col1 { + opacity: 1; +} + +.hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col1, +.hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} + +.house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col2 { + opacity: 1; +} + +.hs.row2.col2:checked ~ .house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row2.col2, +.hs.row2.col2:checked ~ .house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row2.col1:checked ~ .house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row2.col1, +.hs.row2.col1:checked ~ .house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col1:checked ~ .house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col2, +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row2.col1:checked ~ .house.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row0.col5, +.hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .house.row2.col4:checked +~ .hs.row1.col2:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row0.col5, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row0.col6 { + opacity: 1; +} + +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row1.col6, +.hs.row2.col3:checked ~ .house.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col6 { + opacity: 1; +} + +.house.row2.col4:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row2.col7, +.house.row2.col4:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row2.col6, +.house.row2.col4:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} + +.house.row2.col4:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row2.col7, +.house.row2.col4:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row2.col6, +.house.row2.col4:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row3.col7 { + opacity: 1; +} + +.hs.row3.col6:checked +~ .hs.row3.col7:checked +~ .house.row2.col4:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row3.col6, +.hs.row3.col6:checked +~ .hs.row3.col7:checked +~ .house.row2.col4:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row3.col6:checked ~ .house.row2.col4:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col7, +.hs.row3.col6:checked ~ .house.row2.col4:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row3.col7, +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row3.col6 { + opacity: 1; +} + +.house.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row1.col7, +.house.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row1.col6 { + opacity: 1; +} + +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row3.col7:checked +~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col7:checked +~ div > div > house > .row2.col7, +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row3.col7:checked +~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col7:checked +~ div > div > house > .row1.col7 { + opacity: 1; +} + +.house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col7:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row2.col7, +.house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col7:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row3.col7 { + opacity: 1; +} + +.hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row3.col7:checked +~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col7:checked +~ .hs.row1.col7:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} + +.hs.row3.col7:checked ~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col7:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} + +.house.row2.col4:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked +~ .hs.row1.col7:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > house > .row2.col7, +.house.row2.col4:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked +~ .hs.row1.col7:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > house > .row2.col6 { + opacity: 1; +} + +.house.row2.col4:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col7, +.house.row2.col4:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col6 { + opacity: 1; +} + +.house.row2.col4:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col7:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > house > .row2.col7, +.house.row2.col4:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col7:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > house > .row2.col6 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row2.col2:checked ~ .house.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col3 { + opacity: 1; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > house > .row3.col2, +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > house > .row4.col2, +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > house > .row2.col1, +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row2.col3:checked ~ .house.row2.col4:checked ~ div > div > house > .row4.col1 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .house.row1.col4:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .house.row1.col4:checked ~ div > div > house > .row3.col5, +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .house.row1.col4:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .house.row1.col4:checked ~ div > div > house > .row1.col6, +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .house.row1.col4:checked ~ div > div > house > .row3.col6, +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .house.row1.col4:checked ~ div > div > house > .row2.col7 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ .house.row1.col4:checked ~ div > div > house > .row3.col7, +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ .house.row1.col4:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .house.row0.col4:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col4:checked ~ .house.row0.col4:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked ~ .house.row0.col4:checked ~ div > div > house > .row1.col6, +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked ~ .house.row0.col4:checked ~ div > div > house > .row2.col7 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked ~ .house.row0.col4:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked ~ .hs.row1.col7:checked ~ .house.row0.col4:checked ~ div > div > house > .row0.col7 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked ~ .house.row0.col4:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ .hs.row1.col4:checked ~ .hs.row1.col7:checked ~ .house.row0.col4:checked ~ .hs.row0.col7:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked ~ .house.row0.col4:checked ~ .hs.row0.col6:checked ~ div > div > house > .row0.col7 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked ~ .house.row0.col4:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ .house.row0.col4:checked ~ div > div > house > .row0.col7 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .house.row0.col3:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .house.row0.col3:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} + +.hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .house.row0.col3:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} + +.hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .house.row0.col3:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} + +.hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .house.row0.col3:checked +~ .hs.row0.col6:checked +~ div > div > house > .row0.col5 { + opacity: 1; +} + +.hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .house.row0.col4:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > house > .row0.col7 { + opacity: 1; +} +.hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .house.row0.col4:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > house > .row4.col7 { + opacity: 1; +} + +.house.row2.col4:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row2.col6, +.house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row3.col5, +.house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > house > .row2.col7, +.house.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > house > .row3.col6, +.house.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ div > div > house > .row3.col7, +.house.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} + +.hs.row3.col5:checked ~ .house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row3.col6, +.hs.row3.col5:checked ~ .house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row4.col5 { + opacity: 1; +} + +.hs.row4.col5:checked ~ .hs.row3.col5:checked ~ .house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row4.col4, +.hs.row4.col5:checked ~ .hs.row3.col5:checked ~ .house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row4.col6 { + opacity: 1; +} + +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row3.col5:checked ~ .house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row4.col7 { + opacity: 1; +} + +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row4.col7:checked +~ .hs.row3.col5:checked ~ .house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row3.col7 { + opacity: 1; +} + +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row4.col7:checked +~ .hs.row3.col5:checked +~ .hs.row3.col7:checked +~ .house.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row2.col7 { + opacity: 1; +} + +.hs.row3.col6:checked ~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row3.col7, +.hs.row3.col6:checked ~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row4.col6 { + opacity: 1; +} + +.hs.row4.col6:checked ~ .hs.row3.col6:checked ~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row4.col5, +.hs.row4.col6:checked ~ .hs.row3.col6:checked ~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row4.col7 { + opacity: 1; +} + +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row3.col6:checked ~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row4.col4 { + opacity: 1; +} + +.hs.row3.col7:checked ~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > house > .row4.col7 { + opacity: 1; +} + +.hs.row4.col7:checked ~ .hs.row3.col7:checked ~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > house > .row4.col6 { + opacity: 1; +} + +.hs.row4.col6:checked +~ .hs.row4.col7:checked +~ .hs.row3.col7:checked ~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > house > .row4.col5 { + opacity: 1; +} + +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row4.col7:checked +~ .hs.row3.col7:checked ~ .house.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > house > .row4.col4 { + opacity: 1; +} + +.house.row3.col4:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col2 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col2 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col2:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row2.col2 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col2 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row0.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col0 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row2.col6, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col2, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > house > .row0.col5, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col6, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > house > .row3.col5 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col7:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > house > .row2.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row1.col3, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > house > .row0.col6, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > house > .row0.col4, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > house > .row0.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row0.col6, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ div > div > house > .row0.col7, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > house > .row0.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > house > .row2.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > house > .row2.col7, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ div > div > house > .row0.col6, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > house > .row0.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ div > div > house > .row0.col7, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ .hs.row0.col6:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ .hs.row1.col7:checked ~ div > div > house > .row0.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ .hs.row1.col7:checked ~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ .hs.row1.col7:checked ~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ .hs.row1.col7:checked ~ .hs.row0.col7:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col6:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col2, +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row1.col6, +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col5:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col2, +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col2, +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row1.col5, +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked ~ .hs.row0.col3:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked ~ .hs.row0.col1:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row2.col1, +.house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked ~ div > div > house > .row0.col2, +.house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col1, +.house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked ~ .hs.row0.col2:checked ~ .hs.row0.col3:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div +> div +> house +> .row2.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col7:checked +~ .hs.row1.col4:checked +~ .hs.row1.col7:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col7:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col7:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col6, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col7:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > house > .row2.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > house > .row0.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row1.col7, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row3.col6, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > house > .row1.col6, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > house > .row3.col6, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > house > .row0.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked +~ div +> div +> house +> .row2.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row1.col2, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col3:checked ~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row0.col1:checked +~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row1.col1, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row0.col4 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col6, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row1.col7:checked ~ div > div > house > .row2.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row2.col6:checked +~ .hs.row1.col6:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ div > div > house > .row2.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col7:checked +~ .hs.row0.col4:checked +~ .hs.row0.col5:checked +~ .hs.row0.col6:checked +~ .hs.row0.col7:checked +~ div > div > house > .row2.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col5 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > house > .row0.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ .hs.row0.col5:checked ~ .hs.row0.col6:checked ~ .hs.row0.col7:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > house > .row0.col3 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked +~ .hs.row0.col3:checked +~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row0.col2 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col2:checked +~ .hs.row0.col3:checked +~ .hs.row0.col4:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row0.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col4:checked +~ .hs.row0.col4:checked +~ div > div > house > .row2.col4 { + opacity: 1; +} + +.house.row2.col4:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row2.col4:checked ~ .house.row1.col4:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > shed > .row4.col3, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > shed > .row3.col3, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > shed > .row3.col2, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > shed > .row4.col3, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > shed > .row3.col1, +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > shed > .row4.col2, +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > shed > .row4.col1, +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col2:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col1, +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3, +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col1, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > shed > .row5.col3 { + opacity: 0; +} + +.hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > shed > .row5.col2 { + opacity: 0; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > shed > .row5.col1 { + opacity: 0; +} + +.hs.row5.col1:checked ~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > shed > .row5.col2 { + opacity: 0; +} + +.hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > shed > .row5.col3 { + opacity: 0; +} + +.hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > shed > .row5.col4 { + opacity: 0; +} + +.hs.row5.col2:checked ~ .hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > shed > .row5.col1, +.hs.row5.col2:checked ~ .hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > shed > .row5.col2, +.hs.row5.col2:checked ~ .hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > shed > .row5.col3 { + opacity: 0; +} + +.hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > shed > .row5.col4 { + opacity: 0; +} + +.hs.row5.col3:checked ~ .hs.row4.col3:checked ~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > shed > .row5.col3, +.hs.row5.col3:checked ~ .hs.row4.col3:checked ~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > shed > .row5.col4, +.hs.row5.col3:checked ~ .hs.row4.col3:checked ~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > shed > .row5.col2 { + opacity: 0; +} + +.hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row4.col3:checked ~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > shed > .row5.col1 { + opacity: 0; +} + +.hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row4.col3:checked ~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row4.col1:checked +~ .hs.row4.col3:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row5.col2:checked ~ .hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > shed > .row5.col1 { + opacity: 0; +} + +.hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row4.col1:checked +~ .hs.row4.col3:checked +~ .house.row4.col4:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col1:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col1:checked ~ div > div > shed > .row2.col2, +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col1:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col1:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row1.col3, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col2 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col2:checked ~ div > div > shed > .row1.col2, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col2:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} + +.house.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col2:checked ~ div > div > shed > .row0.col2, +.house.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col2:checked ~ div > div > shed > .row0.col1 { + opacity: 0; +} + +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row0.col6:checked ~ div > div > shed > .row0.col7, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row0.col6:checked ~ div > div > shed > .row0.col6 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row3.col1, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row1.col1, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} + +.house.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row0.col4:checked +~ .hs.row1.col4:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row2.col1, +.house.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row0.col4:checked +~ .hs.row1.col4:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row1.col1, +.house.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row0.col4:checked +~ .hs.row1.col4:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row0.col1 { + opacity: 0; +} + +.hs.row3.col1:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row3.col1, +.hs.row3.col1:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > shed > .row4.col2 { + opacity: 0; +} + +.house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} + +.hs.row3.col2:checked ~ .house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row3.col2, +.hs.row3.col2:checked ~ .house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row4.col2 { + opacity: 0; +} + +.hs.row3.col1:checked ~ .house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row3.col1, +.hs.row3.col1:checked ~ .house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col1:checked ~ .house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row4.col2, +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col1:checked ~ .house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row4.col3 { + opacity: 0; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row1.col5, +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row2.col5 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row1.col5, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row2.col6, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.house.row3.col4:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row3.col7, +.house.row3.col4:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row3.col6, +.house.row3.col4:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row4.col6 { + opacity: 0; +} + +.house.row3.col4:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > shed > .row3.col7, +.house.row3.col4:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > shed > .row3.col6, +.house.row3.col4:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > shed > .row4.col7 { + opacity: 0; +} + +.hs.row4.col6:checked +~ .hs.row4.col7:checked +~ .house.row3.col4:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > shed > .row4.col6, +.hs.row4.col6:checked +~ .hs.row4.col7:checked +~ .house.row3.col4:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > shed > .row4.col5 { + opacity: 0; +} + +.hs.row4.col6:checked ~ .house.row3.col4:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row4.col7, +.hs.row4.col6:checked ~ .house.row3.col4:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row4.col5 { + opacity: 0; +} + +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row4.col7, +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row4.col6 { + opacity: 0; +} + +.house.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row2.col7, +.house.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row4.col7:checked +~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col7:checked +~ div > div > shed > .row3.col7, +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row4.col7:checked +~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col7:checked +~ div > div > shed > .row2.col7 { + opacity: 0; +} + +.house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col7:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > shed > .row3.col7, +.house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col7:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > shed > .row4.col7 { + opacity: 0; +} + +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row4.col7:checked +~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col7:checked +~ .hs.row2.col7:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.hs.row4.col7:checked ~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col7:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > shed > .row4.col6 { + opacity: 0; +} + +.house.row3.col4:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked +~ .hs.row2.col7:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row3.col7, +.house.row3.col4:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked +~ .hs.row2.col7:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.house.row3.col4:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col7, +.house.row3.col4:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.house.row3.col4:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col7:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row3.col7, +.house.row3.col4:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col7:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ .house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row4.col3 { + opacity: 0; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > shed > .row4.col2, +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > shed > .row5.col2, +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > shed > .row4.col1 { + opacity: 0; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > shed > .row3.col1, +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > shed > .row5.col1 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .house.row2.col4:checked ~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .house.row2.col4:checked ~ div > div > shed > .row4.col5, +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .house.row2.col4:checked ~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .house.row2.col4:checked ~ div > div > shed > .row2.col6, +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .house.row2.col4:checked ~ div > div > shed > .row4.col6, +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .house.row2.col4:checked ~ div > div > shed > .row3.col7 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ .house.row2.col4:checked ~ div > div > shed > .row4.col7, +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ .house.row2.col4:checked ~ div > div > shed > .row2.col7 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .house.row1.col4:checked ~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col4:checked ~ .house.row1.col4:checked ~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked ~ .house.row1.col4:checked ~ div > div > shed > .row2.col6, +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked ~ .house.row1.col4:checked ~ div > div > shed > .row3.col7 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked ~ .house.row1.col4:checked ~ div > div > shed > .row2.col7 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked ~ .hs.row2.col7:checked ~ .house.row1.col4:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked ~ .house.row1.col4:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked ~ .hs.row2.col7:checked ~ .house.row1.col4:checked ~ .hs.row1.col7:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked ~ .house.row1.col4:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked ~ .house.row1.col4:checked ~ div > div > shed > .row2.col7 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ .house.row1.col4:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col3:checked ~ div > div > shed > .row3.col5 { + opacity: 0; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col3:checked ~ div > div > shed > .row3.col6 { + opacity: 0; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col3:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .house.row1.col3:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .house.row1.col3:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} + +.hs.row3.col6:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .house.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row1.col7 { + opacity: 0; +} +.hs.row3.col6:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .house.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row5.col7 { + opacity: 0; +} + +.house.row3.col4:checked ~ div > div > shed > .row3.col5 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row3.col6, +.house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row4.col5, +.house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ div > div > shed > .row3.col7, +.house.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ div > div > shed > .row4.col6, +.house.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ div > div > shed > .row4.col7, +.house.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ div > div > shed > .row2.col7 { + opacity: 0; +} + +.hs.row4.col5:checked ~ .house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row4.col6, +.hs.row4.col5:checked ~ .house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row5.col5 { + opacity: 0; +} + +.hs.row5.col5:checked ~ .hs.row4.col5:checked ~ .house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row5.col4, +.hs.row5.col5:checked ~ .hs.row4.col5:checked ~ .house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row5.col6 { + opacity: 0; +} + +.hs.row5.col5:checked +~ .hs.row5.col6:checked +~ .hs.row4.col5:checked ~ .house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row5.col7 { + opacity: 0; +} + +.hs.row5.col5:checked +~ .hs.row5.col6:checked +~ .hs.row5.col7:checked +~ .hs.row4.col5:checked ~ .house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row4.col7 { + opacity: 0; +} + +.hs.row5.col5:checked +~ .hs.row5.col6:checked +~ .hs.row5.col7:checked +~ .hs.row4.col5:checked +~ .hs.row4.col7:checked +~ .house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row3.col7 { + opacity: 0; +} + +.hs.row4.col6:checked ~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ div > div > shed > .row4.col7, +.hs.row4.col6:checked ~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ div > div > shed > .row5.col6 { + opacity: 0; +} + +.hs.row5.col6:checked ~ .hs.row4.col6:checked ~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ div > div > shed > .row5.col5, +.hs.row5.col6:checked ~ .hs.row4.col6:checked ~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ div > div > shed > .row5.col7 { + opacity: 0; +} + +.hs.row5.col5:checked +~ .hs.row5.col6:checked +~ .hs.row4.col6:checked ~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ div > div > shed > .row5.col4 { + opacity: 0; +} + +.hs.row4.col7:checked ~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row3.col7:checked +~ div > div > shed > .row5.col7 { + opacity: 0; +} + +.hs.row5.col7:checked ~ .hs.row4.col7:checked ~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row3.col7:checked +~ div > div > shed > .row5.col6 { + opacity: 0; +} + +.hs.row5.col6:checked +~ .hs.row5.col7:checked +~ .hs.row4.col7:checked ~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row3.col7:checked +~ div > div > shed > .row5.col5 { + opacity: 0; +} + +.hs.row5.col5:checked +~ .hs.row5.col6:checked +~ .hs.row5.col7:checked +~ .hs.row4.col7:checked ~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row3.col7:checked +~ div > div > shed > .row5.col4 { + opacity: 0; +} + +.house.row4.col4:checked ~ div > div > shed > .row3.col4 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col2:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col2:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row2.col2 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col2 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row1.col2:checked ~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col0 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row3.col5 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row3.col6, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col2, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row1.col5, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row2.col6, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row4.col5 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row2.col7:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row3.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row2.col3, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row2.col2 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col6, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col4, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > shed > .row2.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row1.col6, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row2.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row1.col7, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ div > div > shed > .row3.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ div > div > shed > .row3.col7, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row1.col6, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row2.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row1.col7, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ div > div > shed > .row2.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ .hs.row2.col7:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ .hs.row2.col7:checked ~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ .hs.row2.col7:checked ~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ .hs.row2.col7:checked ~ .hs.row1.col7:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row3.col3 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row3.col2, +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row2.col6, +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row2.col2, +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col2, +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row2.col5, +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col1:checked ~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > shed > .row3.col1, +.house.row4.col4:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > shed > .row2.col2 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col2:checked ~ div > div > shed > .row1.col2, +.house.row4.col4:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col2:checked ~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col1, +.house.row4.col4:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col6:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div +> div +> shed +> .row3.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col7:checked +~ .hs.row2.col4:checked +~ .hs.row2.col7:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col6:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col7:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col7:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row3.col6 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col5 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row2.col6, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col7:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row3.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > shed > .row2.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row2.col7, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row4.col6, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ div > div > shed > .row2.col6, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ div > div > shed > .row4.col6, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > shed > .row3.col6 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked +~ div +> div +> shed +> .row3.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row2.col3 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row2.col2, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col3:checked ~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row2.col1 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row3.col1 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row2.col1, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > shed > .row1.col4 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col6, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row2.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row2.col7:checked ~ div > div > shed > .row3.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row3.col6:checked +~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > shed > .row3.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col7:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > shed > .row3.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col5 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > shed > .row1.col6 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row1.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > shed > .row2.col6 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > shed > .row2.col7 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row1.col3 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked +~ .hs.row1.col3:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row1.col2 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row1.col1 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > shed > .row2.col4 { + opacity: 0; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col4:checked +~ .hs.row1.col4:checked +~ div > div > shed > .row3.col4 { + opacity: 0; +} + +.house.row2.col4:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row2.col4:checked ~ .house.row1.col4:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > house > .row4.col3, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > house > .row3.col3, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > house > .row3.col2, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > house > .row4.col3, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > house > .row3.col1, +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > house > .row4.col2, +.hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > house > .row4.col1, +.hs.row3.col1:checked ~ .hs.row3.col2:checked ~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > house > .row2.col1 { + opacity: 1; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col2:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col1, +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col3, +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col1, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row4.col3:checked ~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > house > .row5.col3 { + opacity: 1; +} + +.hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > house > .row5.col2 { + opacity: 1; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > house > .row5.col1 { + opacity: 1; +} + +.hs.row5.col1:checked ~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > house > .row5.col2 { + opacity: 1; +} + +.hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > house > .row5.col3 { + opacity: 1; +} + +.hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > house > .row5.col4 { + opacity: 1; +} + +.hs.row5.col2:checked ~ .hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > house > .row5.col1, +.hs.row5.col2:checked ~ .hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > house > .row5.col2, +.hs.row5.col2:checked ~ .hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > house > .row5.col3 { + opacity: 1; +} + +.hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row4.col2:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > house > .row5.col4 { + opacity: 1; +} + +.hs.row5.col3:checked ~ .hs.row4.col3:checked ~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > house > .row5.col3, +.hs.row5.col3:checked ~ .hs.row4.col3:checked ~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > house > .row5.col4, +.hs.row5.col3:checked ~ .hs.row4.col3:checked ~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > house > .row5.col2 { + opacity: 1; +} + +.hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row4.col3:checked ~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > house > .row5.col1 { + opacity: 1; +} + +.hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row4.col3:checked ~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > house > .row4.col1 { + opacity: 1; +} + +.hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row4.col1:checked +~ .hs.row4.col3:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row5.col2:checked ~ .hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ div > div > house > .row5.col1 { + opacity: 1; +} + +.hs.row5.col1:checked +~ .hs.row5.col2:checked +~ .hs.row5.col3:checked +~ .hs.row4.col1:checked +~ .hs.row4.col3:checked +~ .house.row4.col4:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col1:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col1:checked ~ div > div > house > .row2.col2, +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col1:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col1:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col3:checked ~ div > div > house > .row1.col3, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col2 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col2:checked ~ div > div > house > .row1.col2, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row1.col2:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} + +.house.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col2:checked ~ div > div > house > .row0.col2, +.house.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row0.col2:checked ~ div > div > house > .row0.col1 { + opacity: 1; +} + +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row0.col6:checked ~ div > div > house > .row0.col7, +.house.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row0.col6:checked ~ div > div > house > .row0.col6 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row3.col1, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row1.col1, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} + +.house.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row0.col4:checked +~ .hs.row1.col4:checked +~ .hs.row2.col4:checked +~ div > div > house > .row2.col1, +.house.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row0.col4:checked +~ .hs.row1.col4:checked +~ .hs.row2.col4:checked +~ div > div > house > .row1.col1, +.house.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row0.col4:checked +~ .hs.row1.col4:checked +~ .hs.row2.col4:checked +~ div > div > house > .row0.col1 { + opacity: 1; +} + +.hs.row3.col1:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row3.col1, +.hs.row3.col1:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row4.col1 { + opacity: 1; +} + +.hs.row4.col1:checked ~ .hs.row3.col1:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ div > div > house > .row4.col2 { + opacity: 1; +} + +.house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} + +.hs.row3.col2:checked ~ .house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row3.col2, +.hs.row3.col2:checked ~ .house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row4.col2 { + opacity: 1; +} + +.hs.row3.col1:checked ~ .house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row3.col1, +.hs.row3.col1:checked ~ .house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row4.col1 { + opacity: 1; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col1:checked ~ .house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row4.col2, +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row3.col1:checked ~ .house.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row4.col3 { + opacity: 1; +} + +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row1.col5, +.hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .house.row3.col4:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row2.col5 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row1.col5, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row1.col6 { + opacity: 1; +} + +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row2.col6, +.hs.row3.col3:checked ~ .house.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} + +.house.row3.col4:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row3.col7, +.house.row3.col4:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row3.col6, +.house.row3.col4:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row4.col6 { + opacity: 1; +} + +.house.row3.col4:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > house > .row3.col7, +.house.row3.col4:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > house > .row3.col6, +.house.row3.col4:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > house > .row4.col7 { + opacity: 1; +} + +.hs.row4.col6:checked +~ .hs.row4.col7:checked +~ .house.row3.col4:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > house > .row4.col6, +.hs.row4.col6:checked +~ .hs.row4.col7:checked +~ .house.row3.col4:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > house > .row4.col5 { + opacity: 1; +} + +.hs.row4.col6:checked ~ .house.row3.col4:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row4.col7, +.hs.row4.col6:checked ~ .house.row3.col4:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row4.col5 { + opacity: 1; +} + +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row4.col7, +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row4.col6 { + opacity: 1; +} + +.house.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row2.col7, +.house.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div > div > house > .row2.col6 { + opacity: 1; +} + +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row4.col7:checked +~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col7:checked +~ div > div > house > .row3.col7, +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row4.col7:checked +~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col7:checked +~ div > div > house > .row2.col7 { + opacity: 1; +} + +.house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col7:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > house > .row3.col7, +.house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col7:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > house > .row4.col7 { + opacity: 1; +} + +.hs.row4.col5:checked +~ .hs.row4.col6:checked +~ .hs.row4.col7:checked +~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col7:checked +~ .hs.row2.col7:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} + +.hs.row4.col7:checked ~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col7:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ div > div > house > .row4.col6 { + opacity: 1; +} + +.house.row3.col4:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked +~ .hs.row2.col7:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row3.col7, +.house.row3.col4:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked +~ .hs.row2.col7:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} + +.house.row3.col4:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col7, +.house.row3.col4:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} + +.house.row3.col4:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col7:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row3.col7, +.house.row3.col4:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col7:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} + +.hs.row4.col2:checked ~ .hs.row3.col2:checked ~ .house.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row4.col3 { + opacity: 1; +} + +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > house > .row4.col2, +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > house > .row5.col2, +.hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > house > .row4.col1 { + opacity: 1; +} + +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > house > .row3.col1, +.hs.row4.col1:checked +~ .hs.row4.col2:checked +~ .hs.row4.col3:checked +~ .hs.row3.col3:checked ~ .house.row3.col4:checked ~ div > div > house > .row5.col1 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .house.row2.col4:checked ~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .house.row2.col4:checked ~ div > div > house > .row4.col5, +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .house.row2.col4:checked ~ div > div > house > .row3.col6 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .house.row2.col4:checked ~ div > div > house > .row2.col6, +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .house.row2.col4:checked ~ div > div > house > .row4.col6, +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .house.row2.col4:checked ~ div > div > house > .row3.col7 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ .house.row2.col4:checked ~ div > div > house > .row4.col7, +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ .house.row2.col4:checked ~ div > div > house > .row2.col7 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .house.row1.col4:checked ~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col4:checked ~ .house.row1.col4:checked ~ div > div > house > .row3.col6 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked ~ .house.row1.col4:checked ~ div > div > house > .row2.col6, +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked ~ .house.row1.col4:checked ~ div > div > house > .row3.col7 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked ~ .house.row1.col4:checked ~ div > div > house > .row2.col7 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked ~ .hs.row2.col7:checked ~ .house.row1.col4:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked ~ .house.row1.col4:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ .hs.row2.col4:checked ~ .hs.row2.col7:checked ~ .house.row1.col4:checked ~ .hs.row1.col7:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked ~ .house.row1.col4:checked ~ .hs.row1.col6:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked ~ .house.row1.col4:checked ~ div > div > house > .row2.col7 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ .house.row1.col4:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col3:checked ~ div > div > house > .row3.col5 { + opacity: 1; +} + +.hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col3:checked ~ div > div > house > .row3.col6 { + opacity: 1; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .house.row1.col3:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .house.row1.col3:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} + +.hs.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .house.row1.col3:checked +~ .hs.row1.col6:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} + +.hs.row3.col6:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .house.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row1.col7 { + opacity: 1; +} +.hs.row3.col6:checked ~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ .house.row1.col4:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row5.col7 { + opacity: 1; +} + +.house.row3.col4:checked ~ div > div > house > .row3.col5 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row3.col6, +.house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row4.col5, +.house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ div > div > house > .row3.col7, +.house.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ div > div > house > .row4.col6, +.house.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ div > div > house > .row4.col7, +.house.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ div > div > house > .row2.col7 { + opacity: 1; +} + +.hs.row4.col5:checked ~ .house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row4.col6, +.hs.row4.col5:checked ~ .house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row5.col5 { + opacity: 1; +} + +.hs.row5.col5:checked ~ .hs.row4.col5:checked ~ .house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row5.col4, +.hs.row5.col5:checked ~ .hs.row4.col5:checked ~ .house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row5.col6 { + opacity: 1; +} + +.hs.row5.col5:checked +~ .hs.row5.col6:checked +~ .hs.row4.col5:checked ~ .house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row5.col7 { + opacity: 1; +} + +.hs.row5.col5:checked +~ .hs.row5.col6:checked +~ .hs.row5.col7:checked +~ .hs.row4.col5:checked ~ .house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row4.col7 { + opacity: 1; +} + +.hs.row5.col5:checked +~ .hs.row5.col6:checked +~ .hs.row5.col7:checked +~ .hs.row4.col5:checked +~ .hs.row4.col7:checked +~ .house.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row3.col7 { + opacity: 1; +} + +.hs.row4.col6:checked ~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ div > div > house > .row4.col7, +.hs.row4.col6:checked ~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ div > div > house > .row5.col6 { + opacity: 1; +} + +.hs.row5.col6:checked ~ .hs.row4.col6:checked ~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ div > div > house > .row5.col5, +.hs.row5.col6:checked ~ .hs.row4.col6:checked ~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ div > div > house > .row5.col7 { + opacity: 1; +} + +.hs.row5.col5:checked +~ .hs.row5.col6:checked +~ .hs.row4.col6:checked ~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ div > div > house > .row5.col4 { + opacity: 1; +} + +.hs.row4.col7:checked ~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row3.col7:checked +~ div > div > house > .row5.col7 { + opacity: 1; +} + +.hs.row5.col7:checked ~ .hs.row4.col7:checked ~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row3.col7:checked +~ div > div > house > .row5.col6 { + opacity: 1; +} + +.hs.row5.col6:checked +~ .hs.row5.col7:checked +~ .hs.row4.col7:checked ~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row3.col7:checked +~ div > div > house > .row5.col5 { + opacity: 1; +} + +.hs.row5.col5:checked +~ .hs.row5.col6:checked +~ .hs.row5.col7:checked +~ .hs.row4.col7:checked ~ .house.row3.col4:checked +~ .hs.row3.col5:checked +~ .hs.row3.col6:checked +~ .hs.row3.col7:checked +~ div > div > house > .row5.col4 { + opacity: 1; +} + +.house.row4.col4:checked ~ div > div > house > .row3.col4 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col1:checked ~ .hs.row2.col1:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col2:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col2:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row2.col2 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col2 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row1.col2:checked ~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col0 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ div > div > house > .row3.col5 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row3.col6, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col2, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col3:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ div > div > house > .row1.col5, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ div > div > house > .row2.col6, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ div > div > house > .row4.col5 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row2.col7:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row3.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row2.col3, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row2.col2 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col6, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col4, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > house > .row2.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > house > .row1.col6, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > house > .row2.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ div > div > house > .row1.col7, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ div > div > house > .row3.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ div > div > house > .row3.col7, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ div > div > house > .row1.col6, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ div > div > house > .row2.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ div > div > house > .row1.col7, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row2.col6:checked ~ .hs.row1.col6:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ div > div > house > .row2.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ .hs.row2.col7:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ .hs.row2.col7:checked ~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ .hs.row2.col7:checked ~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col5:checked ~ .hs.row3.col6:checked ~ .hs.row3.col7:checked ~ .hs.row2.col7:checked ~ .hs.row1.col7:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ div > div > house > .row3.col3 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col6:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row3.col2, +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row2.col6, +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col5:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked ~ div > div > house > .row2.col2, +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col2, +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row2.col5, +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col3:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked ~ .hs.row1.col3:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col1:checked ~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col1:checked +~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col1:checked ~ .hs.row1.col1:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > house > .row3.col1, +.house.row4.col4:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ div > div > house > .row2.col2 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col2:checked ~ div > div > house > .row1.col2, +.house.row4.col4:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col2:checked ~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col1, +.house.row4.col4:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col2:checked +~ .hs.row3.col3:checked +~ .hs.row3.col4:checked +~ .hs.row2.col2:checked ~ .hs.row1.col2:checked ~ .hs.row1.col3:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col6:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col6:checked +~ div +> div +> house +> .row3.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col7:checked +~ .hs.row2.col4:checked +~ .hs.row2.col7:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col6:checked +~ .hs.row2.col4:checked +~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row3.col7:checked +~ .hs.row2.col4:checked +~ .hs.row2.col5:checked +~ .hs.row2.col7:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row3.col6 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col5 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row2.col6, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col7:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row3.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > house > .row2.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > house > .row2.col7, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > house > .row4.col6, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ div > div > house > .row2.col6, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ div > div > house > .row4.col6, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ div > div > house > .row3.col6 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col5:checked ~ .hs.row2.col6:checked ~ .hs.row2.col7:checked +~ div +> div +> house +> .row3.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > house > .row2.col3 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row2.col2, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col3:checked ~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row2.col1 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ .hs.row1.col1:checked +~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ div > div > house > .row3.col1 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row2.col1, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col1:checked +~ .hs.row2.col2:checked +~ .hs.row2.col3:checked +~ .hs.row2.col4:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ div > div > house > .row1.col4 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col6, +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row2.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row2.col7:checked ~ div > div > house > .row3.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col6:checked +~ .hs.row2.col7:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row3.col6:checked +~ .hs.row2.col6:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ div > div > house > .row3.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col7:checked +~ .hs.row1.col4:checked +~ .hs.row1.col5:checked +~ .hs.row1.col6:checked +~ .hs.row1.col7:checked +~ div > div > house > .row3.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col5 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ div > div > house > .row1.col6 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row1.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ div > div > house > .row2.col6 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ .hs.row1.col5:checked ~ .hs.row1.col6:checked ~ .hs.row1.col7:checked ~ div > div > house > .row2.col7 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row1.col3 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked +~ .hs.row1.col3:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row1.col2 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col2:checked +~ .hs.row1.col3:checked +~ .hs.row1.col4:checked +~ div > div > house > .row1.col1 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row1.col4:checked ~ div > div > house > .row2.col4 { + opacity: 1; +} +.house.row4.col4:checked ~ .hs.row3.col4:checked ~ .hs.row2.col4:checked ~ .hs.row2.col4:checked +~ .hs.row1.col4:checked +~ div > div > house > .row3.col4 { + opacity: 1; +} + +.hs.row1.col1:checked ~ div > div > house > .row1.col1.col3 > i:nth-of-type(4) { + background: #ff7700; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem #20112a, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 yellow, inset 0 -3.5rem 0 #ffa200, 0 0 2rem yellow; +} +.hs.row1.col1:checked ~ div > div > house > .row1.col1.col3 > i:nth-of-type(4):after, .hs.row1.col1:checked ~ div > div > house > .row1.col1.col3 > i:nth-of-type(4):before { + background: #20112a; +} + +.hs.row1.col2:checked ~ div > div > house > .row1.col2.col2 > i:nth-of-type(4) { + background: #ff7700; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem #20112a, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 yellow, inset 0 -3.5rem 0 #ffa200, 0 0 2rem yellow; +} +.hs.row1.col2:checked ~ div > div > house > .row1.col2.col2 > i:nth-of-type(4):after, .hs.row1.col2:checked ~ div > div > house > .row1.col2.col2 > i:nth-of-type(4):before { + background: #20112a; +} + +.hs.row1.col3:checked ~ div > div > house > .row1.col3.col4 > i:nth-of-type(4) { + background: #ff7700; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem #20112a, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 yellow, inset 0 -3.5rem 0 #ffa200, 0 0 2rem yellow; +} +.hs.row1.col3:checked ~ div > div > house > .row1.col3.col4 > i:nth-of-type(4):after, .hs.row1.col3:checked ~ div > div > house > .row1.col3.col4 > i:nth-of-type(4):before { + background: #20112a; +} + +.hs.row1.col4:checked ~ div > div > house > .row1.col4.col3 > i:nth-of-type(4) { + background: #ff7700; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem #20112a, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 yellow, inset 0 -3.5rem 0 #ffa200, 0 0 2rem yellow; +} +.hs.row1.col4:checked ~ div > div > house > .row1.col4.col3 > i:nth-of-type(4):after, .hs.row1.col4:checked ~ div > div > house > .row1.col4.col3 > i:nth-of-type(4):before { + background: #20112a; +} + +.hs.row2.col1:checked ~ div > div > house > .row2.col1.col2 > i:nth-of-type(4) { + background: #ff7700; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem #20112a, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 yellow, inset 0 -3.5rem 0 #ffa200, 0 0 2rem yellow; +} +.hs.row2.col1:checked ~ div > div > house > .row2.col1.col2 > i:nth-of-type(4):after, .hs.row2.col1:checked ~ div > div > house > .row2.col1.col2 > i:nth-of-type(4):before { + background: #20112a; +} + +.hs.row2.col2:checked ~ div > div > house > .row2.col2.col2 > i:nth-of-type(4) { + background: #ff7700; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem #20112a, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 yellow, inset 0 -3.5rem 0 #ffa200, 0 0 2rem yellow; +} +.hs.row2.col2:checked ~ div > div > house > .row2.col2.col2 > i:nth-of-type(4):after, .hs.row2.col2:checked ~ div > div > house > .row2.col2.col2 > i:nth-of-type(4):before { + background: #20112a; +} + +.hs.row2.col3:checked ~ div > div > house > .row2.col3.col2 > i:nth-of-type(4) { + background: #ff7700; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem #20112a, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 yellow, inset 0 -3.5rem 0 #ffa200, 0 0 2rem yellow; +} +.hs.row2.col3:checked ~ div > div > house > .row2.col3.col2 > i:nth-of-type(4):after, .hs.row2.col3:checked ~ div > div > house > .row2.col3.col2 > i:nth-of-type(4):before { + background: #20112a; +} + +.hs.row2.col4:checked ~ div > div > house > .row2.col4.col3 > i:nth-of-type(4) { + background: #ff7700; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem #20112a, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 yellow, inset 0 -3.5rem 0 #ffa200, 0 0 2rem yellow; +} +.hs.row2.col4:checked ~ div > div > house > .row2.col4.col3 > i:nth-of-type(4):after, .hs.row2.col4:checked ~ div > div > house > .row2.col4.col3 > i:nth-of-type(4):before { + background: #20112a; +} + +.hs.row3.col1:checked ~ div > div > house > .row3.col1.col2 > i:nth-of-type(4) { + background: #ff7700; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem #20112a, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 yellow, inset 0 -3.5rem 0 #ffa200, 0 0 2rem yellow; +} +.hs.row3.col1:checked ~ div > div > house > .row3.col1.col2 > i:nth-of-type(4):after, .hs.row3.col1:checked ~ div > div > house > .row3.col1.col2 > i:nth-of-type(4):before { + background: #20112a; +} + +.hs.row3.col2:checked ~ div > div > house > .row3.col2.col2 > i:nth-of-type(4) { + background: #ff7700; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem #20112a, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 yellow, inset 0 -3.5rem 0 #ffa200, 0 0 2rem yellow; +} +.hs.row3.col2:checked ~ div > div > house > .row3.col2.col2 > i:nth-of-type(4):after, .hs.row3.col2:checked ~ div > div > house > .row3.col2.col2 > i:nth-of-type(4):before { + background: #20112a; +} + +.hs.row3.col3:checked ~ div > div > house > .row3.col3.col3 > i:nth-of-type(4) { + background: #ff7700; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem #20112a, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 yellow, inset 0 -3.5rem 0 #ffa200, 0 0 2rem yellow; +} +.hs.row3.col3:checked ~ div > div > house > .row3.col3.col3 > i:nth-of-type(4):after, .hs.row3.col3:checked ~ div > div > house > .row3.col3.col3 > i:nth-of-type(4):before { + background: #20112a; +} + +.hs.row3.col4:checked ~ div > div > house > .row3.col4.col4 > i:nth-of-type(4) { + background: #ff7700; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem #20112a, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 yellow, inset 0 -3.5rem 0 #ffa200, 0 0 2rem yellow; +} +.hs.row3.col4:checked ~ div > div > house > .row3.col4.col4 > i:nth-of-type(4):after, .hs.row3.col4:checked ~ div > div > house > .row3.col4.col4 > i:nth-of-type(4):before { + background: #20112a; +} + +.hs.row4.col1:checked ~ div > div > house > .row4.col1.col4 > i:nth-of-type(4) { + background: #ff7700; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem #20112a, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 yellow, inset 0 -3.5rem 0 #ffa200, 0 0 2rem yellow; +} +.hs.row4.col1:checked ~ div > div > house > .row4.col1.col4 > i:nth-of-type(4):after, .hs.row4.col1:checked ~ div > div > house > .row4.col1.col4 > i:nth-of-type(4):before { + background: #20112a; +} + +.hs.row4.col2:checked ~ div > div > house > .row4.col2.col2 > i:nth-of-type(4) { + background: #ff7700; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem #20112a, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 yellow, inset 0 -3.5rem 0 #ffa200, 0 0 2rem yellow; +} +.hs.row4.col2:checked ~ div > div > house > .row4.col2.col2 > i:nth-of-type(4):after, .hs.row4.col2:checked ~ div > div > house > .row4.col2.col2 > i:nth-of-type(4):before { + background: #20112a; +} + +.hs.row4.col3:checked ~ div > div > house > .row4.col3.col1 > i:nth-of-type(4) { + background: #ff7700; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem #20112a, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 yellow, inset 0 -3.5rem 0 #ffa200, 0 0 2rem yellow; +} +.hs.row4.col3:checked ~ div > div > house > .row4.col3.col1 > i:nth-of-type(4):after, .hs.row4.col3:checked ~ div > div > house > .row4.col3.col1 > i:nth-of-type(4):before { + background: #20112a; +} + +.hs.row4.col4:checked ~ div > div > house > .row4.col4.col3 > i:nth-of-type(4) { + background: #ff7700; + box-shadow: inset 0 0 0 0.5rem rgba(79, 1, 14, 0.3), inset 0 0 0.5rem rgba(79, 1, 14, 0.9), inset 0 0 0 0.5rem #20112a, inset 0 0 1rem 1rem rgba(79, 1, 14, 0.9), inset 1rem 0 0 #bc592f, inset -1.25rem 0 0 #bc592f, inset 0 -2rem 0 yellow, inset 0 -3.5rem 0 #ffa200, 0 0 2rem yellow; +} +.hs.row4.col4:checked ~ div > div > house > .row4.col4.col3 > i:nth-of-type(4):after, .hs.row4.col4:checked ~ div > div > house > .row4.col4.col3 > i:nth-of-type(4):before { + background: #20112a; +} + +.lh { + pointer-events: none; + perspective: 30rem; + perspective-origin: 50% -5rem; + transform: translate3d(0, 0, -100rem) scale(0); + opacity: 0; +} + +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div.lh { + transform: translate3d(0, 0, -100rem) scale(1); + /* animation: lightson $timer linear infinite;*/ +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div.lh light { + top: -12rem; + left: -6.25rem; + transform: scaleX(3) rotateY(0); + /* animation: light 8s linear infinite;*/ + filter: blur(0.1rem); + opacity: 0.5; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div.lh light, .hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div.lh light:before, .hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div.lh light:after { + background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 244, 102, 0.5), rgba(255, 255, 255, 0)); + width: 100%; + height: 5rem; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div.lh light:before { + transform: rotate(15deg) rotateY(-5deg); +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div.lh light:after { + transform: rotate(-15deg) rotateY(5deg); +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div.lh lens { + top: -12rem; + left: -6.25rem; + width: 100%; + height: 5rem; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div.lh lens:before, .hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div.lh lens:after { + height: 5rem; + border-radius: 50%; + right: 0; + margin: auto; +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div.lh lens:before { + background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(252, 246, 165, 0.5), rgba(255, 255, 255, 0)); + width: 100%; + transform: scaleX(3) rotateY(0); + opacity: 0.25; + filter: blur(0.1rem); +} +.hs.house.row4.col1:not(:checked) +~ .hs.house.row4.col2:checked +~ .hs.house.row4.col3:not(:checked) +~ .hs.house.row3.col1:not(:checked) +~ .hs.shed.row3.col2:checked +~ .hs.house.row3.col3:not(:checked) +~ .hs.house.row2.col1:not(:checked) +~ .hs.house.row2.col2:checked +~ .hs.house.row2.col3:not(:checked) +~ .hs.house.row1.col1:not(:checked) +~ .hs.shed.row1.col2:checked +~ .hs.house.row1.col3:not(:checked) +~ div.lh lens:after { + width: 5rem; + background: radial-gradient(#fcf6a5, rgba(255, 255, 255, 0)); + opacity: 0.75; + box-shadow: 60rem 0 15rem #fcf6a5, -60rem 0 15rem #fcf6a5, 0 0 3rem #fcf6a5, inset 0 0 0 #fcf6a5; +} + +div.lh { + animation: lightson 400s linear infinite; +} +div.lh light { + animation: light 8s linear infinite; +} +div.lh lens:before { + animation: light 8s linear infinite; +} +div.lh lens:after { + animation: light2 8s ease-in-out infinite; +} + +@keyframes light { + 100% { + transform: scaleX(3) rotateY(-360deg); + } +} +@keyframes lightson { + 20%, + 80% { + opacity: 0; + } + 25%, + 75% { + opacity: 1; + } +} +@keyframes light2 { + 22%, + 27%, + 72%, + 77% { + box-shadow: 0rem 0 15rem #fcf6a5, 0rem 0 15rem #fcf6a5, 0 0 3rem #fcf6a5, inset 0 0 0 0 #fcf6a5; + } + 24%, + 74% { + box-shadow: 0rem 0 15rem #fcf6a5, 0rem 0 15rem #fcf6a5, 0 0 5rem 40rem rgba(252, 246, 165, 0.25), inset 0 0 0 2.5rem #fcf6a5; + } + 50% { + box-shadow: -60rem 0 15rem #fcf6a5, 60rem 0 15rem #fcf6a5, 0 0 3rem #fcf6a5, inset 0 0 0 0 #fcf6a5; + } +} +#graphics { + top: 1rem; + left: auto; + right: 1rem; + font-family: Telefon, Sans-Serif; + font-size: 1.4rem; + z-index: 1000; + letter-spacing: 0.1rem; + color: #fff; + line-height: 1.5; + max-height: 2.5rem; + overflow: hidden; +} +#graphics label { + display: flex; + align-content: center; + justify-content: flex-end; + gap: 0.5rem; + padding: 0.5rem; + border-radius: 1rem; + cursor: pointer; + transition: box-shadow 0.2s ease-in-out; + box-shadow: 0 0 0 1rem rgba(255, 255, 255, 0), inset 0 0 0 0 rgba(255, 255, 255, 0.2); +} +#graphics label:not(:nth-of-type(1)):hover { + box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.2), inset 0 0 0 2rem rgba(255, 255, 255, 0.2); +} +#graphics * { + position: static; +} + +#gfxmenu:checked ~ #graphics { + max-height: 10rem; +} + +#poor:checked ~ colour > div > div > house > label > i:nth-of-type(1), +#poor:checked ~ colour > div > div > shed > label > i:nth-of-type(1), +#poor:checked ~ colour > div > lens, +#poor:checked ~ colour > water:before, +#poor:checked ~ colour water:after { + display: none; +} + +#poor:checked ~ colour > div > div.main { + -webkit-box-reflect: none; +} + +#poor:checked ~ sky > time { + opacity: 0; +} + +#poor:checked ~ text > welldone, +#poor:checked ~ text > gameover { + box-shadow: none; +} + +#good:checked ~ x > [for="good"], +#poor:checked ~ x > [for="poor"] { + box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.1), inset 0 0 0 2rem rgba(255, 255, 255, 0.1); +} +#good:checked ~ x > [for="good"]:before, +#poor:checked ~ x > [for="poor"]:before { + content: "โœ“"; + position: static; +} + +#poor:checked ~ colour > div > div > shed > label:after, #poor:checked ~ colour > div > div > shed > label *:after, +#poor:checked ~ colour > div > div > house > label:after, +#poor:checked ~ colour > div > div > house > label *:after { + animation: none !important; +} +#poor:checked ~ colour > div > div > shed > label:before, #poor:checked ~ colour > div > div > shed > label *:before, +#poor:checked ~ colour > div > div > house > label:before, +#poor:checked ~ colour > div > div > house > label *:before { + animation: none !important; +} + +[for="gfxmenu"]:after { + border-bottom: 0.1rem solid #fff; + border-right: 0.1rem solid #fff; + transform: rotate(45deg) scaleY(1); + position: relative; + width: 0.6rem; + height: 0.6rem; + margin-left: 0.4rem; + top: 0.5rem; + transition: all 0.2s ease-in-out; +} + +#gfxmenu:checked ~ x > [for="gfxmenu"]:after { + transform: rotate(-45deg) scaleY(-1); +} + +script { + display: none; +} \ No newline at end of file diff --git a/a-pure-css-gameyou-must-build-a-lighthouse/license.txt b/a-pure-css-gameyou-must-build-a-lighthouse/license.txt new file mode 100644 index 0000000..68b9c64 --- /dev/null +++ b/a-pure-css-gameyou-must-build-a-lighthouse/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Ben Evans (https://codepen.io/ivorjetski/pen/OJXbvdL) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/a-pure-css-gameyou-must-build-a-lighthouse/src/index.html b/a-pure-css-gameyou-must-build-a-lighthouse/src/index.html new file mode 100644 index 0000000..3bdb462 --- /dev/null +++ b/a-pure-css-gameyou-must-build-a-lighthouse/src/index.html @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+ + + + +

NICE ONE!

+

You built a lighthouse before nightfall!

+

The ships and islanders are safe!

+
+
+ + + +

GAME OVER!

+

I'm afraid I have some very bad news...

+

A ship has crashed into your beautiful island.

+

Everybody is dead!

+

Soz! You should build a lighthouse.

+ Try Again +
+
+
+
+ +
+ \ No newline at end of file diff --git a/a-pure-css-gameyou-must-build-a-lighthouse/src/script.js b/a-pure-css-gameyou-must-build-a-lighthouse/src/script.js new file mode 100644 index 0000000..62370be --- /dev/null +++ b/a-pure-css-gameyou-must-build-a-lighthouse/src/script.js @@ -0,0 +1,5 @@ +// 100% CSS. No artificial colours or ingredients. + +// First person to screenshot a lighthouse wins! + +// Your time starts now... diff --git a/a-pure-css-gameyou-must-build-a-lighthouse/src/style.scss b/a-pure-css-gameyou-must-build-a-lighthouse/src/style.scss new file mode 100644 index 0000000..4acfcc0 --- /dev/null +++ b/a-pure-css-gameyou-must-build-a-lighthouse/src/style.scss @@ -0,0 +1,7160 @@ +// ## setup +$timer: 400s; + +$none: rgba(#fff, 0); +$light: #fcf6a5; +$sun: #ff7700; +$base: #bc2f2f; +$shadow: #4f010e; +$smoke: #252529; +$smoke2: #6f6f7a; +$sky: #608b88; +$stone: #a19372; +$tre1: #683f44; +$tre2: #20112a; + +.house.row3:checked, +.shed.row3:checked { + & ~ div { + filter: hue-rotate(-20deg); + } +} + +.house.row2:checked, +.shed.row2:checked { + & ~ div { + filter: hue-rotate(-35deg); + } +} + +.house.row1:checked, +.shed.row1:checked { + & ~ div { + filter: hue-rotate(-50deg); + } +} + +$r1: adjust-hue($base, random(50) + 5); +$r15: adjust-hue($base, random(50) + 10); +$r2: adjust-hue($base, random(50) - 30); +$r3: darken($r2, 20%); +$r4: adjust-hue($base, random(50) + 50); +$r41: adjust-hue($base, random(50) + 51); +$r42: adjust-hue($base, random(50) + 49); +$r43: darken($r42, 10%); +$shadow: rgba($shadow, 0.75); +$ls: rgba($shadow, 0.3); +$ds: rgba($shadow, 0.9); +$dark: darken($r2, 20%); +$background: lighten($base, 42%); +$b1: lighten($base, 4%); +$b2: lighten($r1, 4%); +$b3: lighten($r2, 4%); +$s1: lighten($stone, 4%); +$sd: darken($stone, 10%); + +$tre3: lighten($tre1, 10%); +$vls: rgba($tre1, 0.1); + +html { + font-size: 0.97vh; + width: 100%; + height: 100%; + background: $background; + overflow: hidden; +} + +body { + margin: 0; + overflow: hidden; + width: 100%; + height: 100%; + background: linear-gradient(rgba($sky, 0.5), rgba(#fff, 0.75), $none); + box-shadow: inset 0 0 5rem 0 $smoke; + + &, + *, + *:before, + *:after { + display: block; + top: 0; + left: 0; + box-sizing: border-box; + position: absolute; + content: ""; + } +} + +div, +house, +shed, +hbtn, +sbtn { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + width: 50rem; + height: 50rem; + display: flex; + flex-wrap: wrap; + align-content: flex-start; + + label { + width: calc(50rem / 4); + height: calc(50rem / 4); + position: relative; + border: none; + background: none; + padding: 0; + margin: 0; + display: inline; + cursor: pointer; + box-shadow: 0 0 0 2rem $none; + + *, + *:before, + *:after { + transform: translate3d(0, 0, 0); + z-index: 1; + left: 0; + top: 0; + background: none; + border: none; + box-shadow: none; + pointer-events: none; + } + + & > i:nth-of-type(1) { + &:before, + &:after { + filter: blur(0.5rem); + border: 1rem solid rgba($smoke2, 0.75); + width: 5rem; + height: 5rem; + background: $smoke2; + opacity: 0; + border-radius: 50%; + box-shadow: 2rem -1.5rem 0 1rem rgba($smoke2, 0.75), + // + 3rem -2rem 0 1.5rem rgba($smoke2, 0.5); + } + } + } +} + +colour { + width: 100%; + height: 100%; + + input, + br { + position: relative; + display: inline-block; + opacity: 0.2; + top: 1rem; + left: 1rem; + transform: scale(0.75); + margin: -0.2rem; + + @media (max-width: 900px) { + display: none; + } + } + + input:checked { + opacity: 1; + } + + br { + display: block; + } +} + +input { + display: none; +} + +div.main { + -webkit-box-reflect: below 4rem; +} + +div.ss { + pointer-events: none; +} + +sbtn { + height: calc(50rem - (50rem / 4)); + bottom: auto; + + label { + border: solid 1px rgba(#747474, 0.1); + + &:nth-of-type(1) { + border-radius: 3rem 0 0 0; + } + + &:nth-of-type(4) { + border-radius: 0 3rem 0 0; + } + + &:hover { + border-color: #555; + } + } +} + +hbtn label:nth-of-type(n + 12) { + border: solid 1px rgba(#747474, 0.1); + + &:hover { + border-color: #555; + } +} + +@keyframes smoke { + 0% { + transform: scale(0.2) translate3d(0, 0, 0) rotate(-15deg); + opacity: 0.075; + } + + 50% { + transform: scale(1) translate3d(2rem, -4rem, 0) rotate(0); + opacity: 0.15; + } + + 100% { + transform: scale(2) translate3d(5rem, -5rem, 0) rotate(10deg); + opacity: 0; + } +} + +//pretty +island { + position: absolute; + top: 76rem; + top: 49.25rem; + left: -50%; + right: -50%; + margin: auto; + width: 80rem; + height: 5rem; + background: $r42; + border-radius: 55% 55% 45% 45%; +} + +grass { + position: absolute; + z-index: 500; + top: 76rem; + top: 49.25rem; + left: -50%; + right: -50%; + margin: auto; + width: 80rem; + height: 5rem; + -webkit-box-reflect: below -5rem; + transform: skewX(0); + + &:after, + &:before { + top: 0.75rem; + left: 0.6rem; + z-index: 100; + width: 0.5rem; + height: 1.75rem; + transform: skewY(60deg); + background: $r42; + box-shadow: 1rem -1.6rem 0 $r42, + // + 2.1rem -3.6rem 0 $r42, + // + 2.9rem -4.8rem 0 $r42, + // + 4rem -7rem 0 $r42; + filter: drop-shadow(5rem -8.3rem 0 $r42) // + drop-shadow(10rem -17.3rem 0 $r42) // + drop-shadow(20rem -34.5rem 0 $r42) // + drop-shadow(40rem -69rem 0 $r42); + } + + &:before { + transform: skewY(-60deg); + box-shadow: 1rem 1.6rem 0 $r42, + // + 2.1rem 3.6rem 0 $r42, + // + 2.9rem 4.8rem 0 $r42, + // + 4rem 7rem 0 $r42; + filter: drop-shadow(5rem 8.3rem 0 $r42) // + drop-shadow(10rem 17.3rem 0 $r42) // + drop-shadow(20rem 34.5rem 0 $r42) // + drop-shadow(40rem 69rem 0 $r42); + left: 0; + top: 1.5rem; + } +} + +@keyframes grass { + 100% { + transform: skewX(5deg); + } +} + +input:focus ~ div > div { + animation: thud 0.1s linear; +} + +@keyframes thud { + 0% { + transform: translate3d(0, 1rem, 0); + } + + 60% { + transform: translate3d(0, -0.5rem, 0); + } + + 80% { + transform: translate3d(0, 0.25rem, 0); + } +} + +sig { + z-index: 500; + opacity: 0.2; + + &, + * { + height: 9.25em; + overflow: hidden; + border-radius: 0.5em; + } + + font-size: 0.5rem; + color: #000; + width: 10em; + top: auto; + left: auto; + bottom: 1em; + right: 1em; + transform: skewX(10deg) scaleY(0.45) rotate(2deg); + + &:before, + *:before { + width: 5em; + height: 5em; + background: currentColor; + transform: translate3d(-2.5em, 0, 0) rotate(-45deg); + box-shadow: -3em 3em 0 0 currentColor; + border-radius: 0.5em 2em 0.5em 2em; + } + + * { + width: 5em; + transform: translate3d(3.75em, 0, 0) scaleY(0.95); + display: block !important; + + &:before { + transform: translate3d(-3em, -2em, 0) rotate(-45deg); + box-shadow: -3em 3em 0 0 currentColor, -6em 6em 0 0 currentColor; + border-radius: 0.5em; + } + } +} + +text { + width: 95%; + max-width: 70rem; + bottom: 25%; + color: lighten($r1, 30%); + right: 0; + margin: auto; + height: 1rem; + font-size: 2.5rem; + text-align: center; + font-family: Telefon, Sans-Serif; + z-index: -1; + transform: scale(0); + font-weight: 100; + letter-spacing: 0.1rem; + opacity: 0; + + welldone, + gameover { + box-shadow: 0 0 5rem $sun, inset 0 0 0 0.5rem #fff; + background: rgba($tre2, 0.95); + padding: 5rem; + border-radius: 5rem; + border: 1rem solid $tre2; + } + + welldone { + display: none; + } + + & * { + position: static; + } + + p:nth-of-type(1) { + font-size: 4rem; + } + + p:nth-of-type(odd) { + color: $r2; + } + + label { + position: absolute; + left: auto; + right: 3rem; + top: 3rem; + color: $r2; + padding: 2rem; + border-radius: 2rem; + box-shadow: 0 0 1rem $none; + cursor: pointer; + transition: box-shadow 0.25s ease-in-out; + box-sizing: border-box; + line-height: 1; + + &:hover, + &:focus { + box-shadow: 0 0 0.15rem #fff; + } + } + + a { + padding: 0.5rem 1rem; + border-radius: 1rem; + text-decoration: none; + background: $r2; + color: $tre2; + box-shadow: 0 0 0 1rem $none, inset 0 0 0 0 rgba(#fff, 0.2); + transition: all 0.2s ease-in-out; + + &:hover, + &:focus { + box-shadow: 0 0 0 0 rgba(#fff, 0.2), inset 0 0 0 3rem rgba(#fff, 0.2); + } + } +} + +#done:checked ~ text { + transform: scale(0) !important; + transition: all 0.5s ease-in-out; + opacity: 0; +} +// ## sun +colour > *:not(.lh):not(text) { + filter: hue-rotate(0deg) brightness(100%); + animation: set $timer linear infinite; +} + +@media screen and (max-device-width: 480px) { + colour > *:not(.lh):not(text) { + animation: none; + } +} + +@keyframes set { + 15%, + 85% { + filter: hue-rotate(0deg) brightness(100%); + } + + 30%, + 70% { + filter: hue-rotate(-20deg) brightness(10%); + } + + 40%, + 60% { + filter: hue-rotate(-40deg) brightness(50%); + } +} + +@function stars($a) { + $random2: #f9b9c8; + $value: "#{random(100 + 100)}vmin #{random(60)}vmin 0 -.#{random(2)}rem "+$random2; + + @for $i from 2 through $a { + $random2: adjust-hue(#8beffc, random(360)); + $value: "#{$value} , #{random(100 + 100)}vmin #{random(60)}vmin 0 -.#{random(2)}rem "+$random2; + } + + @return unquote($value); +} + +$stars: stars(50); + +stars { + width: 220rem; + height: 100%; + position: absolute; + top: 0; + left: 0; + right: 0; + margin: auto; + animation: stars $timer linear infinite; + -webkit-box-reflect: below -50rem; + opacity: 0; + z-index: 0; + + &:before { + width: 0.5rem; + height: 0.5rem; + box-shadow: $stars; + border-radius: 50%; + content: ""; + position: absolute; + top: 5rem; + left: 5rem; + } + + i { + &:before, + &:after { + width: 0.5rem; + height: 0.5rem; + top: 40rem; + left: 40rem; + background: #fff; + border-radius: 50%; + animation: stars 1s linear infinite; + opacity: 0.5; + box-shadow: 0 0 1rem #fff; + } + + &:after { + top: 20rem; + left: 180rem; + animation: stars 1s 0.5s linear infinite; + background: #f9b9c8; + } + } +} + +sky { + width: 100%; + height: 78.5rem; + overflow: hidden; + -webkit-box-reflect: below 0; + z-index: 0; + + &:before, + &:after { + width: 100%; + height: 100%; + background: linear-gradient(#323248 10%, #fbd447, #d8480f); + opacity: 0; + animation: sky $timer linear infinite; + } + + &:after { + background: linear-gradient(#19043f, #1a0f6c); + } +} + +time { + pointer-events: none; + + &, + sun { + width: 170rem; + height: 170rem; + left: -100%; + right: -100%; + top: -100%; + bottom: -170%; + margin: auto; + } + + & sun { + bottom: -100%; + transform: rotate(0deg); + z-index: 1; + animation: sun $timer linear infinite; + filter: blur(1rem) brightness(400%); + + &:before { + width: 25rem; + height: 25rem; + border-radius: 50%; + background: radial-gradient($r1, $base); + right: 0; + margin: auto; + transform: rotate(0deg); + } + //moon + &:after { + width: 10rem; + height: 10rem; + border-radius: 50%; + box-shadow: inset 0 2rem 0 #5a4e38; + background: rgba(#000, 0.1); + left: 60%; + top: auto; + bottom: 0; + transform: rotate(0deg); + z-index: 1; + } + } +} + +@media (max-width: 500px) { + time, + input { + display: none; + } +} + +div.ss lens { + top: 20rem; + left: 70rem; + animation: lensflair $timer linear infinite; + width: 60rem; + height: 60rem; + filter: brightness(150%); + transform: rotate(0); + opacity: 0; + + &:before { + width: 60rem; + height: 60rem; + border-radius: 50%; + top: 0; + right: -50%; + left: -50%; + margin: auto; + box-shadow: 0 70rem 0 -20rem yellow, + // + 0 50rem 0 -25rem yellow, + // + 0 100rem 0 5rem #f437c5, + // + inset 0 0 3rem $sun; + border: 1rem solid $sun; + } + + &:after { + width: 100rem; + height: 100rem; + border-radius: 50%; + top: 140rem; + right: -50%; + left: -50%; + margin: auto; + border: 1rem solid yellow; + box-shadow: 0 0 3rem red, inset 0 0 3rem blue; + } +} + +@keyframes lensflair { + 20%, + 30%, + 70%, + 80% { + opacity: 0; + } + + 25%, + 75% { + opacity: 0.05; + } + + 100% { + transform: rotate(360deg); + opacity: 0; + } +} + +@keyframes sun { + 20%, + 80% { + filter: blur(1rem) brightness(390%); + } + + 27%, + 73% { + filter: blur(1rem) brightness(200%); + } + + 100% { + transform: rotate(360deg); + } +} + +@keyframes stars { + 50% { + opacity: 1; + } +} + +@keyframes sky { + 20%, + 85% { + filter: brightness(100%); + opacity: 0; + } + + 30%, + 70% { + filter: brightness(100%); + opacity: 1; + } + + 40%, + 60% { + filter: brightness(20%); + opacity: 1; + } +} + +sunset { + width: 150%; + height: 20rem; + left: -25%; + top: 60rem; + background: radial-gradient(farthest-side at 70% 100%, #ff6400, $none); + filter: blur(1rem); + -webkit-box-reflect: below 0; + animation: sunset $timer linear infinite; + opacity: 0; + transform: translate3d(0, 20rem, 0); + + &:before { + width: 100rem; + height: 50rem; + left: 55%; + top: -10rem; + border-radius: 50%; + background: radial-gradient(#ff6400, $none); + opacity: 0.1; + } + + &:after { + width: 50rem; + height: 25rem; + left: 65%; + top: 5rem; + border-radius: 50%; + background: radial-gradient(#fffd91, $none); + opacity: 0.1; + } +} + +@keyframes sunset { + 28%, + 75% { + opacity: 1; + transform: translate3d(0, 0, 0); + } + + 20%, + 35%, + 70%, + 80% { + opacity: 0; + transform: translate3d(0, 20rem, 0); + } +} + +text:nth-of-type(2) { + animation: gameover $timer linear; +} + +@keyframes gameover { + 34.8% { + transform: scale(0); + z-index: 0; + display: block; + opacity: 0; + } + + 35%, + 100% { + transform: scale(1); + z-index: 410; + transition: all 0.5s 1.5s ease-in-out; + opacity: 1; + } +} +// ## trees +tree:nth-of-type(1) { + width: 10rem; + height: 60.5rem; + top: -10rem; + transform: skew(-2deg); + border-radius: 0 50% 2rem 0; + box-shadow: 0.5rem 0 0 $tre1, 1rem 0 0 $tre3, 3rem 0 0 $tre1, 5rem 0 0 $tre2; + + &:before { + left: 16rem; + width: 10rem; + height: 60.5rem; + box-shadow: -2rem 0 0 $tre2, -3rem 0 0 $tre1, -4rem 0 0 $tre2; + border-radius: 50% 0 0 2rem; + transform: skew(4deg); + } + + &:after { + top: -4rem; + width: 10rem; + height: 5rem; + border-radius: 60% 60% 40% 40% / 70% 70% 40% 40%; + background: $r4; + box-shadow: inset -1rem -1rem 1rem $vls, + // + 13rem 0 0 -0.2rem $vls, + // + 9rem 1rem 0 -1rem $vls, + // + -2rem -3rem 0 1rem $vls, + // + 5rem -5rem 0 -0.5rem $vls, + // + 7rem -4rem 0 $vls, + // + 11rem -2rem 0 -0.5rem $vls, + // + // + 12rem 0 0 -0.2rem $r42, + // + 8rem 1rem 0 -1rem $r42, + // + -3rem -3rem 0 1rem $r41, + // + 4rem -5rem 0 -0.5rem $r42, + // + 6rem -4rem 0 $r41, + // + 10rem -2rem 0 -0.5rem $r42; // + } +} + +tree:nth-of-type(2) { + width: 10rem; + height: 50.5rem; + top: 0; + left: 25rem; + transform: skew(-3deg); + border-radius: 0 50% 2rem 0; + box-shadow: 0.5rem 0 0 $tre1, 1rem 0 0 $tre3, 3rem 0 0 $tre1, 5rem 0 0 $tre2; + + &:before { + left: 16rem; + width: 10rem; + height: 50.5rem; + box-shadow: -1.5rem 0 0 $tre2, -2.5rem 0 0 $tre1, -3rem 0 0 $tre2; + border-radius: 50% 0 0 2rem; + transform: skew(4deg); + } + + &:after { + top: -4rem; + left: 17rem; + width: 10rem; + height: 5rem; + border-radius: 60% 60% 40% 40% / 70% 70% 40% 40%; + background: $r4; + box-shadow: inset -1rem -1rem 1rem $vls, + // + -19rem 1rem 0 -0.2rem $vls, + // + -14rem -4rem 0 -1rem $vls, + // + -13rem -1rem 0 1rem $vls, + // + -1rem -4rem 0 -0.5rem $vls, + // + -4rem -1rem 0 $vls, + // + -21rem -2rem 0 -0.5rem $vls, + // + -7rem -5rem 0 1rem $vls, + // + // + -20rem 1rem 0 -0.2rem $r42, + // + -15rem -4rem 0 -1rem $r42, + // + -15rem -1rem 0 1rem $r41, + // + -2rem -4rem 0 -0.5rem $r42, + // + -5rem -1rem 0 $r41, + // + -22rem -2rem 0 -0.5rem $r42, + // + -8rem -5rem 0 1rem $r41; // + } +} + +tree i:nth-of-type(1) { + &, + &:before, + &:after { + width: 2.5rem; + height: 0.5rem; + background: lighten($r4, 10%); + border-radius: 0 0 100% 100%; + top: -5rem; + filter: drop-shadow(3rem 1.5rem 0 $r43) drop-shadow(1.5rem 2.5rem 0 $r43); + z-index: 1; + left: -3rem; + opacity: 0.5; + } + + &:before { + left: 6rem; + top: -1rem; + filter: drop-shadow(2rem 1.5rem 0 $r43); + } + + &:after { + left: 15rem; + top: -1.5rem; + filter: drop-shadow(2.5rem 0.5rem 0 $r43) drop-shadow(1rem 2rem 0 $r43); + } +} + +tree:nth-of-type(2) i:nth-of-type(1) { + &:after { + left: 20rem; + } +} + +tree i:nth-of-type(2) { + &, + &:before, + &:after { + width: 0.5rem; + height: 0.25rem; + background: $r41; + border-radius: 100% 0 100% 0; + top: -2rem; + } + + &:before { + left: 8rem; + top: -1rem; + } + + &:after { + left: 20rem; + top: 1.5rem; + } +} + +[type="radio"]:focus ~ div > div > tree { + i:nth-of-type(1), + &:after { + animation: shake 0.3s ease-in-out; + } +} + +[type="radio"]:focus ~ div > div > tree > i:nth-of-type(2) { + & { + animation: fall 5s ease-in-out; + } + + &:before { + animation: fall 10s ease-in-out; + } + + &:before { + animation: fall 5s ease-in-out; + } +} + +@keyframes shake { + 40% { + transform: translate3d(0, 0.5rem, 0); + } + + 60% { + transform: translate3d(0, -0.25rem, 0); + } + + 80% { + transform: translate3d(0, 0.15rem, 0); + } +} + +@keyframes fall { + 100% { + transform: translate3d(0, 15rem, 0); + opacity: 0; + } +} +// ## water +$w: #040b27; + +water { + position: absolute; + top: 78.5rem; + bottom: 0; + left: -100%; + right: -100%; + margin: auto; + width: 100%; + height: 25rem; + background: linear-gradient(rgba($sky, 0.5), $background); + z-index: 99; + overflow: hidden; + box-shadow: inset 0 0 5rem 0 rgba($smoke, 0.5); + + &:before, + &:after, + i { + width: 80rem; + height: 3rem; + border-radius: 50%; + opacity: 0.2; + right: 0; + margin: auto; + transform: scaleX(1) scaleY(0); + top: -1.5rem; + border: 0.5rem solid #fff; + box-shadow: 0 0 1rem 0.5rem $w, inset 0 0 1rem 1rem $w, inset 0 0 1rem #fff; + } + + &:before { + animation: waves 6s ease-in-out infinite; + } + + &:after { + animation: waves 8s 2s ease-in-out infinite; + } +} + +input:focus ~ water > i { + animation: waves 3s 0.25s ease-out; +} + +@keyframes waves { + 100% { + transform: scaleX(1.5) scaleY(7); + opacity: 0; + } +} +// ## shed +//treehouse + +shed > label { + & > i:nth-of-type(5) { + width: 100%; + height: 100%; + //ladder + &:after { + width: 2rem; + border-left: 0.5rem solid $smoke; + border-right: 0.5rem solid $smoke; + background: repeating-linear-gradient( + $none, + $none 1.5rem, + $smoke 1.5rem, + $smoke 2rem + ); + height: 325%; + left: -1.5rem; + transform: rotate(-1deg); + top: 10.5rem; + display: none; + } + //bridge + &:before { + width: 13rem; + height: 3rem; + top: 10.5rem; + left: 12.5rem; + border: 0.5rem dashed $none; + border-bottom-color: $tre1; + box-shadow: 0 0.25rem 0 $tre1; + transform: rotate(-3deg); + border-radius: 50%; + display: none; + } + } + + &:nth-of-type(n + 5) > i:nth-of-type(5):after { + height: 225%; + } + + &:nth-of-type(n + 9) > i:nth-of-type(5):after { + height: 15rem; + } + + &:nth-of-type(even) > i:nth-of-type(5):after { + left: 10rem; + transform: rotate(2deg); + } +} + +$row: 1, 2, 3; + +@each $i in $row { + $col: 1, 2, 3, 4; + + @each $x in $col { + .hs.row#{$i}.col#{$x}:checked ~ div > div > shed > .row#{$i}.col#{$x} { + //back + &:before { + background: repeating-linear-gradient($r1 1rem, $tre1 2.3rem); + width: 90%; + height: 98%; + left: 1.25rem; + border-radius: 0.5rem; + box-shadow: 0 0.5rem 0 0 $tre2; + } + //roof + &:after { + width: 105%; + height: 5rem; + background: repeating-linear-gradient( + to right, + $tre1 1rem, + $tre2 2.1rem + ); + top: -2rem; + border-bottom: solid 0.5rem $smoke; + box-shadow: 0 1.5rem 0.5rem -1rem $ds; + border-radius: 0.5rem; + left: auto; + right: -1rem; + } + //window + & > i:nth-of-type(4) { + width: 4rem; + height: 4rem; + right: 0; + margin: auto; + background: $ls; + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem $shadow; + transform: scale(0.5); + + &:before { + width: 3.4rem; + height: 0.5rem; + background: $smoke; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 0 1.5rem 0 $smoke, + // + 0 + 3rem + 0 + $smoke, + // + 0 + 0.5rem + 0 + #000, + // + 0 + 1rem + 0 + $ds, + // + 0 + 2rem + 0 + $ds, + // + 0 + 2.5rem + 0 + $shadow; // + } + + &:after { + width: 0.5rem; + height: 3.4rem; + background: $smoke; + left: 0.3rem; + top: 0.4rem; + border-radius: 0.25rem; + box-shadow: 1.5rem 0 0 $smoke, + // + 3rem + 0 + 0 + $smoke; // + } + } + //door / chimney / fence + & > i:nth-of-type(3) { + //door + width: 4rem; + height: 9rem; + right: 0; + margin: auto; + background: $r1; + top: 3rem; + border-radius: 0.5rem; + box-shadow: inset 0 0.5rem 1rem $shadow; + //chimney + &:after { + left: -4rem; + border: 1rem solid $none; + top: -11rem; + border-bottom-color: $smoke; + transform: rotate(-3deg); + height: 4rem; + box-shadow: 0 3.7rem 0 -0.5rem $smoke; + border-radius: 0 0 1rem 1rem; + } + //fence + &:before { + width: 14.5rem; + height: 4.5rem; + border-top: 0.5rem solid $tre2; + border-bottom: 0.5rem solid $tre2; + top: 5rem; + left: -5rem; + background: repeating-linear-gradient( + to right, + $tre1, + $tre2 0.5rem, + $none 0.5rem, + $none 1.4rem + ); + border-radius: 0.5rem; + } + } + //props + & > i:nth-of-type(2) { + &:before { + width: 1rem; + height: 9rem; + background: $tre2; + top: -7rem; + } + } + + &:nth-of-type(odd) > i:nth-of-type(2) { + width: 1rem; + background: $tre2; + height: 3rem; + border-radius: 0.25rem; + top: 18.5rem; + left: 10rem; + transform: rotate(5deg); + + &:before { + transform: rotate(-45deg); + left: -3rem; + border-radius: 0 1rem 0 0; + } + + &:after { + width: 1rem; + height: 4rem; + transform: rotate(45deg); + background: $tre2; + top: -6.5rem; + left: -2rem; + border-radius: 1rem 0 0 0; + } + } + + &:nth-of-type(even) > i:nth-of-type(3) { + //chimney + &:after { + left: 7rem; + transform: rotate(3deg); + } + } + //smoke + &:nth-of-type(even) > i:nth-of-type(1) { + left: 11rem; + } + + &:nth-of-type(even) > i:nth-of-type(2) { + &:before { + transform: rotate(45deg); + left: 5rem; + border-radius: 1rem 0 0 0; + top: 11rem; + } + } + //smoke + & > i:nth-of-type(1) { + &:before, + &:after { + top: -7.5rem; + left: -1rem; + animation: smoke 8s linear infinite; + } + + &:before { + animation: smoke 7.25s 3.75s linear infinite; + } + } + //ladder + & > i:nth-of-type(5):after { + display: block; + } + } + //no roof + .hs.row#{$i}.col#{$x}:checked ~ { + div > div > shed > .row#{$i + 1}.col#{$x} { + &:after, + & > i:nth-of-type(3):after, + & > i:nth-of-type(1) { + display: none; + } + } + } + //no fence / door / window + .hs.row#{$i}.col#{$x}:checked ~ { + div > div > shed > .row#{$i - 1}.col#{$x} { + & > i:nth-of-type(3):before, + & > i:nth-of-type(2), + & > i:nth-of-type(5):after { + display: none; + } + + & > i:nth-of-type(3) { + height: 0; + } + + & > i:nth-of-type(4) { + transform: scale(1); + right: #{random(2)}rem; + left: #{random(2)}rem; + } + } + } + //chimney + .hs.shed.row#{$i}.col#{$x + - + 3}:not(:checked) + ~ .hs.row#{$i}.col#{$x}:checked + ~ .shed.hs.row#{$i}.col#{$x + + 1}:not(:checked) + ~ { + .hs.row#{$i - 2}.col#{$x}:checked ~ { + div > div > shed > .row#{$i}.col#{$x} { + & > i:nth-of-type(3) { + //chimney + &:after { + left: 7rem; + transform: rotate(3deg); + } + } + //smoke + & > i:nth-of-type(1) { + left: 11rem; + } + } + } + } + //tall back + .hs.row#{$i}.col#{$x}:checked ~ .hs.row#{$i - 1}.col#{$x}:checked ~ { + div > div > shed > .row#{$i}.col#{$x} { + &:before { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + } + + div > div > shed > .row#{$i - 1}.col#{$x} { + &:before { + height: 12.5rem; + box-shadow: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + } + } + //random door + .hs.row#{$i}.col#{$x}:checked ~ { + .hs.row#{$i}.col#{$x + 1}:checked ~ { + div > div > shed > .row#{$i}.col#{$x} { + & > i:nth-of-type(3) { + height: 0; + } + + & > i:nth-of-type(4) { + transform: scale(1); + right: #{random(2)}rem; + left: #{random(2)}rem; + } + + & > i:nth-of-type(5):after { + display: none; + } + } + } + } + //ladder control + .hs.row#{$i + 2}.col#{$x}:checked ~ { + .hs.row#{$i}.col#{$x}:checked ~ { + div > div > shed > .row#{$i}.col#{$x} { + & > i:nth-of-type(5):after { + display: none; + } + } + } + } + + .hs.row2.col3:checked ~ .hs.row1.col2:checked ~ { + div > div > shed > .row1.col2 { + & > i:nth-of-type(5):after { + display: none; + } + } + } + + .hs.row#{$i + 1}.col#{$x - 1}:checked ~ { + .hs.row#{$i}.col#{$x}:checked ~ { + div > div > shed > .row#{$i}.col#{$x} { + & > i:nth-of-type(5):after { + display: none !important; + } + } + } + } + + .hs.row#{$i}.col#{$x}:checked ~ { + .hs.row#{$i - 1}.col#{$x + 1}:checked ~ { + div > div > shed > .row#{$i}.col#{$x} { + & > i:nth-of-type(1), + & > i:nth-of-type(3):after { + display: none; + } + } + } + } + //extended roof + .hs.row#{$i}.col#{$x}:checked ~, + .hs.row#{$i}.col#{$x + 1}:checked ~ { + .hs.row#{$i - 1}.col#{$x + 1}:checked ~ { + div > div > shed > .row#{$i}.col#{$x} { + &:after { + width: 110%; + right: -1.25rem; + } + } + } + } + } + //long back + $house: 1, 2, 3; + + @each $x in $house { + .hs.row#{$i}.col#{$x}:checked ~ { + .hs.row#{$i}.col#{$x + 1}:checked ~ { + div > div > shed > .row#{$i}.col#{$x} { + &:before { + width: 110%; + } + } + + div > div > shed > .row#{$i}.col#{$x + 1} { + //roof + &:after { + width: 120%; + left: -1.25rem; + } + } + } + } + } + ///////////////////////////// + //chimney + + $house: 2, 4; + + @each $x in $house { + .hs.row#{$i}.col#{$x}:checked ~ { + .hs.shed.row#{$i}.col#{$x + 1}:not(:checked) ~ { + div > div > shed > .row#{$i}.col#{$x} { + & > i:nth-of-type(3) { + //chimney + &:after { + left: 7rem; + transform: rotate(3deg); + } + } + //smoke + & > i:nth-of-type(1) { + left: 11rem; + } + } + } + } + } + + $house: 2, 3; + + @each $x in $house { + .hs.row#{$i}.col#{$x}:checked ~ { + .hs.row#{$i}.col#{$x + 1}:checked ~ { + div > div > shed > .row#{$i}.col#{$x} { + //chimney // smoke + & > i:nth-of-type(3):after, + & > i:nth-of-type(1) { + display: none; + } + + & > i:nth-of-type(3):before { + width: 10.25rem; + } + } + } + } + + .hs.row#{$i}.col#{$x}:checked ~ { + .hs.row#{$i}.col#{$x - 1}:checked ~ { + div > div > shed > .row#{$i}.col#{$x} { + & > i:nth-of-type(3) { + //chimney + &:after { + left: 6rem; + transform: rotate(3deg); + } + } + //smoke + & > i:nth-of-type(1) { + left: 10rem; + } + + & > i:nth-of-type(5):after { + left: -2.5rem; + transform: rotate(-3deg); + } + } + } + } + + .hs.row#{$i}.col#{$x}:checked ~ .hs.row#{$i}.col#{$x - 3}:checked ~, + .hs.row#{$i}.col#{$x}:checked ~ .hs.row#{$i}.col#{$x - 5}:checked ~ { + div > div > shed > .row#{$i}.col#{$x} { + //chimney // smoke + & > i:nth-of-type(3):after, + & > i:nth-of-type(1) { + display: none; + } + } + } + + //ladder + .hs.row#{$i}.col#{$x}:checked ~ .hs.row#{$i}.col#{$x - 3}:checked ~ { + div > div > shed > .row#{$i}.col#{$x} { + & > i:nth-of-type(5):after { + left: 10rem; + transform: rotate(2deg); + } + } + } + } + //bridge + + .hs.shed.row#{$i}.col1:checked + ~ .hs.shed.row#{$i}.col2:not(:checked) + ~ .hs.shed.row#{$i}.col3:not(:checked) + ~ .hs.shed.row#{$i}.col4:checked + ~ { + div > div > shed > .row#{$i}.col1 { + & > i:nth-of-type(5):before { + display: block; + width: 210%; + } + } + } + + .hs.shed.row#{$i}.col1:checked + ~ .hs.shed.row#{$i}.col2:not(:checked) + ~ .hs.shed.row#{$i}.col3:checked + ~ div + > div + > shed + > .row#{$i}.col1, + .hs.shed.row#{$i}.col2:checked + ~ .hs.shed.row#{$i}.col3:not(:checked) + ~ .hs.shed.row#{$i}.col4:checked + ~ div + > div + > shed + > .row#{$i}.col2 { + & > i:nth-of-type(5):before { + display: block; + width: 110%; + } + } + + // change bridge to rope + .hs.row#{$i + + 1}.col2:checked + ~ .hs.shed.row#{$i}.col1:checked + ~ .hs.shed.row#{$i}.col2:not(:checked) + ~ .hs.shed.row#{$i}.col3:checked + ~ div + > div + > shed + > .row#{$i}.col1, + .hs.row#{$i + + 1}.col3:checked + ~ .hs.shed.row#{$i}.col2:checked + ~ .hs.shed.row#{$i}.col3:not(:checked) + ~ .hs.shed.row#{$i}.col4:checked + ~ div + > div + > shed + > .row#{$i}.col2, + .hs.row#{$i + + 1}.col3:checked + ~ .hs.shed.row#{$i}.col1:checked + ~ .hs.shed.row#{$i}.col2:not(:checked) + ~ .hs.shed.row#{$i}.col3:not(:checked) + ~ .hs.shed.row#{$i}.col4:checked + ~ div + > div + > shed + > .row#{$i}.col1, + .hs.row#{$i + + 1}.col2:checked + ~ .hs.shed.row#{$i}.col1:checked + ~ .hs.shed.row#{$i}.col2:not(:checked) + ~ .hs.shed.row#{$i}.col3:not(:checked) + ~ .hs.shed.row#{$i}.col4:checked + ~ div + > div + > shed + > .row#{$i}.col1, + .hs.shed.row#{$i + + 1}.col1:checked + ~ .hs.shed.row#{$i}.col1:checked + ~ .hs.shed.row#{$i}.col2:not(:checked) + ~ .hs.shed.row#{$i}.col3:checked + ~ div + > div + > shed + > .row#{$i}.col1, + .hs.shed.row#{$i + + 1}.col2:checked + ~ .hs.shed.row#{$i}.col2:checked + ~ .hs.shed.row#{$i}.col3:not(:checked) + ~ .hs.shed.row#{$i}.col4:checked + ~ div + > div + > shed + > .row#{$i}.col2 { + & > i:nth-of-type(5):before { + top: 1rem; + border: none; + } + } +} +// ## house +//house + +div > div > house > label { + & > i:nth-of-type(5) { + width: 13rem; + height: 3rem; + top: 1rem; + border-bottom-color: $tre1; + box-shadow: 0 0.25rem 0 $tre1; + border-radius: 50%; + left: -0.5rem; + z-index: 1; + display: none; + + &:after { + border: 0.5rem solid $none; + border-top: 1rem solid $r1; + top: 2.75rem; + left: 1rem; + transform: rotate(5deg); + z-index: -1 !important; + filter: drop-shadow(2rem 0.25rem 0 $r2) drop-shadow(2rem 0rem 0 $r1); + } + + &:before { + border: 0.5rem solid $none; + border-top: 1rem solid $r4; + top: 3.25rem; + left: 7rem; + transform: rotate(-5deg); + z-index: -1 !important; + filter: drop-shadow(2rem -0.25rem 0 $r2) drop-shadow(2rem 0rem 0 $r1); + } + } +} + +$row: 1, 2, 3, 4; + +@each $i in $row { + $col: 1, 2, 3, 4; + + @each $x in $col { + .hs.row#{$i}.col#{$x}:checked ~ { + div > div > house > .row#{$i}.col#{$x} { + //back + &:before { + width: 1.5rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: -1.35rem; + left: 3rem; + box-shadow: 2rem 2rem 0 currentColor; + filter: hue-rotate(-10deg) brightness(1.1); + opacity: 0.7; + } + //bricks + &:after { + filter: hue-rotate(-10deg) brightness(1.1); + width: 2rem; + height: 1rem; + background: currentColor; + border-radius: 0.25rem; + top: 0.5rem; + left: -0.15rem; + box-shadow: 0 2rem 0 currentColor, + // + 0 + 4rem + 0 + currentColor, + // + 0 + 6rem + 0 + currentColor, + // + 0 + 8rem + 0 + currentColor, + // + 0 + 10rem + 0 + currentColor, + // + // + 10.75rem + 0 + 0 + currentColor, + // + 10.75rem + 2rem + 0 + currentColor, + // + 10.75rem + 4rem + 0 + currentColor, + // + 10.75rem + 6rem + 0 + currentColor, + // + 10.75rem + 8rem + 0 + currentColor, + // + 10.75rem + 10rem + 0 + currentColor; + } + //window + & > i:nth-of-type(4) { + //window + width: 5rem; + right: 0; + margin: auto; + top: 3.5rem; + background: $ds; + height: 5rem; + border-radius: 0.3rem; + box-shadow: inset 0 0 0 0.5rem $ls, + // + inset + 0 + 0 + 0.5rem + $ds, + // + inset + 0 + 0 + 0 + 0.5rem + currentColor, + // + inset + 0 + 0 + 1rem + 1rem + $ds, + // + inset + 1rem + 0 + 0 + $r1, + // + inset -1.25rem + 0 + 0 + $r1, + // + inset + 0 -2rem + 0 + #000, + // + inset + 0 -3.5rem + 0 + $tre2; + + &:after { + width: 4.5rem; + height: 0.25rem; + left: 0.25rem; + top: 2.4rem; + background: currentColor; + border-radius: 0.0001rem; + box-shadow: inset 0 0 0 0.5rem $ls, + // + 0 + 3rem + 0 + 0.3rem + lighten($r15, 20%), + // + 0 + 3.5rem + 0.35rem + 0.25rem + $ds; + } + + &:before { + width: 0.25rem; + height: 4.5rem; + left: 2.4rem; + top: 0.25rem; + background: currentColor; + box-shadow: inset 0 0 0 0.5rem $ls; + } + } + //random window + &.col#{random(4)} > i:nth-of-type(4) { + border-radius: 2.25rem 2.25rem 0.3rem 0.3rem; + } + //roof + & > i:nth-of-type(2) { + border: solid $none 1rem; + border-bottom: solid $r3 4rem; + width: calc(100% + 2.1rem); + left: -1rem; + top: -2.5rem; + box-shadow: 0 0.25rem 0 $tre2, 0 1.5rem 1rem -1rem $shadow; + + &:before { + width: 100%; + height: 3rem; + border-radius: 50%; + background: repeating-linear-gradient( + $none, + $none 0.75rem, + rgba($ds, 0.4), + $none 1rem + ); + } + //chimney + &:after { + width: 3rem; + height: 4rem; + border: 0.5rem solid $none; + border-top: 0.5rem solid $base; + top: -2rem; + box-shadow: inset 0 4rem 0 $base, + // + 0 -0.5rem + 0 -0.2rem + $dark, + // + 0 -3rem + 0 -1rem + $smoke; + border-radius: 0.5rem; + left: -0.25rem; + filter: drop-shadow(-0.25rem 2rem 0.5rem rgba(#000, 0.15)); + } + } + //smoke + & > i:nth-of-type(1) { + &:before, + &:after { + top: -8.5rem; + left: -1rem; + animation: smoke 8s linear infinite; + } + + &:before { + animation: smoke 7.25s 3.75s linear infinite; + } + } + + &:nth-of-type(even) { + i:nth-of-type(2):after { + left: 9.5rem; + } + //smoke + & > i:nth-of-type(1) { + left: 10rem; + } + } + } + //no roof + div > div > house > .row#{$i + 1}.col#{$x} { + i:nth-of-type(2), + i:nth-of-type(1) { + display: none; + } + } + } + + //shedhouse + .hs.house.row#{$i + + 1}.col#{$x}:checked + ~ .hs.shed.row#{$i}.col#{$x}:checked + ~ { + div > div > house > .row#{$i}.col#{$x} { + border-bottom: 0.25rem dashed $base; + } + + div > div > house > .row#{$i + 1}.col#{$x} { + &:before { + background: $r1; + } + } + } + + .hs.shed.row#{$i + + 1}.col#{$x}:checked + ~ .hs.house.row#{$i}.col#{$x}:checked + ~ { + div > div > house > .row#{$i}.col#{$x} { + border-bottom: 0.25rem dashed $r1; + } + + div > div > house > .row#{$i + 1}.col#{$x} { + &:before { + background: $base; + } + } + } + //chimney + .hs.house.row#{$i}.col#{$x + - + 3}:not(:checked) + ~ .hs.house.row#{$i}.col#{$x}:checked + ~ .hs.house.row#{$i}.col#{$x + + 1}:not(:checked) + ~ .hs.house.row#{$i + - + 2}.col#{$x}:checked + ~ { + div > div > house > .row#{$i}.col#{$x} { + & > i:nth-of-type(2):after { + //chimney + left: 9.5rem; + } + //smoke + & > i:nth-of-type(1) { + left: 11rem; + } + } + } + //center chimney + .hs.row#{$i + - + 1}.col#{$x + - + 1}:checked + ~ .hs.row#{$i + - + 1}.col#{$x}:not(:checked) + ~, + .hs.house.row#{$i + - + 1}.col#{$x}:not(:checked) + ~ .hs.house.row#{$i + - + 2}.col#{$x}:checked + ~ { + div > div > house > .row#{$i}.col#{$x} { + & > i:nth-of-type(2):after { + //chimney + left: 4.75rem; + height: 3rem; + box-shadow: inset 0 6rem 0 $base, + // + 0 -0.5rem + 0 -0.2rem + $dark, + // + 0 -2.25rem + 0 -1rem + $smoke; + border-radius: 0 0 1rem 1rem; + } + //smoke + & > i:nth-of-type(1) { + left: 5rem; + } + } + } + //small roof + .hs.row#{$i}.col#{$x + - + 1}:checked + ~ .hs.row#{$i}.col#{$x}:checked + ~ .hs.house.row#{$i + - + 1}.col#{$x + - + 1}:not(:checked) + ~ .hs.shed.row#{$i + - + 1}.col#{$x + - + 1}:not(:checked) + ~ .hs.row#{$i + - + 1}.col#{$x}:checked + ~ { + div > div > house > .row#{$i}.col#{$x} { + i:nth-of-type(2) { + display: block; + left: -42%; + width: 50%; + } + + i:nth-of-type(1), + i:nth-of-type(2):after { + display: none; + } + } + } + // no chimney + + .row#{$i}.col2:checked ~ .row#{$i}.col3:checked ~ { + div > div > house > .row#{$i}.col2 { + i:nth-of-type(1), + i:nth-of-type(2):after { + display: none; + } + } + + div > div > house > .row#{$i}.col3 { + & > i:nth-of-type(2):after { + //chimney + left: -1.5rem; + } + //smoke + & > i:nth-of-type(1) { + left: -1rem; + } + } + } + } +} + +///////////////////////////// + +@each $i in $row { + $col: 1, 2, 3, 4; + + @each $x in $col { + //bunting + .hs.row#{$i}.col#{$x}:checked + ~ .hs.house.row#{$i}.col#{$x + + 1}:not(:checked) + ~ .hs.row#{$i}.col#{$x + + 2}:checked + ~ { + div > div > house > .row#{$i}.col#{$x + 1} { + & > i:nth-of-type(5) { + display: block; + width: 105%; + } + } + } + //house to shed bunting + .hs.row#{$i}.col#{$x}:checked + ~ .hs.house.row#{$i}.col#{$x + + 1}:not(:checked) + ~ .hs.shed.row#{$i}.col#{$x + + 2}:checked + ~ { + div > div > house > .row#{$i}.col#{$x + 1} { + & > i:nth-of-type(5) { + display: block; + width: 115%; + } + } + } + } + + //bunting + $col: 1, 2, 3, 4; + + @each $x in $col { + .hs.row#{$i}.col#{$x}:checked + ~ .hs.house.row#{$i}.col#{$x + + 1}:not(:checked) + ~ .hs.house.row#{$i}.col#{$x + + 2}:not(:checked) + ~ .hs.row#{$i}.col#{$x + + 3}:checked + ~ { + div > div > house > .row#{$i}.col#{$x + 1} { + & > i:nth-of-type(5) { + display: block; + width: 205%; + + &:after { + border: 0.5rem solid $none; + border-top: 1rem solid $r1; + top: 2.75rem; + left: 3.5rem; + transform: rotate(4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem 0.1rem 0 $r2) drop-shadow(5rem 0 0 $r1); + } + + &:before { + border: 0.5rem solid $none; + border-top: 1rem solid $r4; + top: 3.25rem; + left: 13.5rem; + transform: rotate(-4deg); + z-index: -1 !important; + filter: drop-shadow(2.5rem -0.1rem 0 $r2) drop-shadow(5rem 0 0 $r1); + } + } + } + } + + //bricks + .hs.row#{$i}.col#{$x}:checked ~ .hs.row#{$i}.col#{$x + 1}:checked ~ { + div > div > house > .row#{$i}.col#{$x} { + //bricks + &:after { + box-shadow: 0 2rem 0 currentColor, + // + 0 + 4rem + 0 + currentColor, + // + 0 + 6rem + 0 + currentColor, + // + 0 + 8rem + 0 + currentColor, + // + 0 + 10rem + 0 + currentColor; + } + } + } + + //fixed + .hs.row#{$i}.col#{$x - 1}:checked ~ { + .hs.row#{$i}.col#{$x}:checked ~ .hs.row#{$i}.col#{$x + 1}:checked ~ { + div > div > house > .row#{$i}.col#{$x} { + //bricks + &:after { + box-shadow: -2rem #{random(3) + 3}rem 0 rgba($b1, 0.5), + // + 0 + #{random(3) + + 5}rem + 0 + currentColor; + } + } + } + } + + //bricks + .hs.row#{$i}.col#{$x - 1}:checked ~ { + .hs.row#{$i}.col#{$x}:checked ~ { + div > div > house > .row#{$i}.col#{$x} { + &:after { + box-shadow: -2rem 3rem 0 rgba($b1, 0.5), + // + 0 + 5rem + 0 + currentColor, + // + // + 10.75rem + 0 + 0 + currentColor, + // + 10.75rem + 2rem + 0 + currentColor, + // + 10.75rem + 4rem + 0 + currentColor, + // + 10.75rem + 6rem + 0 + currentColor, + // + 10.75rem + 8rem + 0 + currentColor, + // + 10.75rem + 10rem + 0 + currentColor; + } + } + } + } + } + + $row: 1, 2, 3; + + @each $i in $row { + $col: 1, 2, 3, 4; + + @each $x in $col { + //prop + .hs.row#{$i}.col#{$x}:checked ~ { + div > div > house > .row#{$i}.col#{$x} { + border-bottom: 0.75rem solid $tre2; + + & > i:nth-of-type(3) { + //prop + width: 2rem; + height: 325%; + border-left: 0.75rem solid $tre2; + border-right: 0.75rem solid $tre2; + top: 12rem; + background: repeating-linear-gradient( + $none, + $none 4rem, + $tre2, + $tre2 4.5rem + ); + z-index: -200; + + &:before { + width: 12rem; + height: 12rem; + border: 1.15rem dashed $none; + border-bottom-color: $tre2; + box-shadow: 0 0.75rem 0 $tre2, inset 0 -0.75rem 0 $tre2; + top: 0.5rem; + border-radius: 5rem; + left: -0.5rem; + transform: scaleY(-1); + } + + &:after { + width: 2rem; + height: 100%; + border-left: 0.75rem solid $tre2; + border-right: 0.75rem solid $tre2; + left: 9.8rem; + background: repeating-linear-gradient( + $none, + $none 4rem, + $tre2, + $tre2 4.5rem + ); + } + } + + &:nth-of-type(n + 5) > i:nth-of-type(3) { + height: 225%; + } + + &:nth-of-type(n + 9) > i:nth-of-type(3) { + height: 13.5rem; + } + } + } + + .hs.row#{$i + 1}.col#{$x}:checked ~ { + .hs.row#{$i}.col#{$x}:checked ~ { + div > div > house > .row#{$i}.col#{$x} { + border-bottom: none; + + & > i:nth-of-type(3) { + display: none !important; + } + } + } + } + } + } +} +//bottom row +@for $i from 23 through 26 { + [id^="cb#{$i}"]:checked ~ div > div > house > [for="ncb#{$i}"] { + box-shadow: 0 0.5rem 0 $base; + + & > i:nth-of-type(3) { + //door + width: 4rem; + height: 9rem; + right: 0; + margin: auto; + top: 3.5rem; + border-radius: 0.5rem; + //bushes + &:before { + width: 7rem; + height: 4rem; + left: -8em; + top: 6rem; + border-radius: 50% 50% 1rem 1rem / 80% 80% 1rem 1rem; + background: $r4; + box-shadow: 3rem 1rem 0 -1rem $r41, + // + 14rem + 0.5rem + 0 -0.5rem + $r42, + // + 10rem + 1rem + 0 -1.25rem + $r4; + } + //flowers + &:after { + width: 0.75rem; + height: 0.75rem; + background: #fff; + border-radius: 50%; + left: -5rem; + top: 7rem; + box-shadow: 2rem 0.5rem 0 -0.1rem #fff, + // + 1rem + 1.5rem + 0 -0.05rem + #fff, + // + 15rem + 1.5rem + 0 -0.05rem + #fff, + // + 16rem + 1rem + 0 -0.1rem + #fff; + } + } + //differences + &.col3 > i:nth-of-type(3) { + //bushes + &:before { + height: 3rem; + left: -8.5em; + top: 7rem; + background: $r4; + box-shadow: 3rem 0.75rem 0 -1rem $r41, + // + 14rem + 1rem + 0 + 0.5rem + $r4, + // + 10rem + 0.5rem + 0 -0.5rem + $r42; + } + //flowers + &:after { + left: -7rem; + } + } + + &.col2 > i:nth-of-type(3) { + //bushes + &:before { + height: 3.5rem; + width: 6rem; + left: -7em; + top: 6.5rem; + background: $r4; + box-shadow: 3rem 0.75rem 0 -1rem $r41, + // + 13rem + 1rem + 0 + 0.5rem + $r42, + // + 9rem + 0.5rem + 0 -0.5rem + $r41; + } + //flowers + &:after { + left: -7rem; + } + } + + &.col1 > i:nth-of-type(3) { + //bushes + &:before { + width: 6rem; + height: 3rem; + left: -6.5em; + top: 7rem; + border-radius: 50% 50% 1rem 1rem / 80% 80% 1rem 1rem; + background: $r41; + box-shadow: 3rem 0.5rem 0 -0.75rem $r4, + // + 9rem + 0.5rem + 0 -0.5rem + $r4, + // + 12rem -0.25rem + 0 + 0.5rem + $r42; + } + //flowers + &:after { + width: 0.75rem; + height: 0.75rem; + background: #fff; + border-radius: 50%; + left: -5rem; + top: 7rem; + box-shadow: 2rem 0.5rem 0 -0.1rem #fff, + // + 1rem + 0.75rem + 0 -0.05rem + #fff, + // + 16rem + 1.5rem + 0 -0.05rem + #fff, + // + 15rem + 1rem + 0 -0.1rem + #fff; + } + } + } + + #cb#{$i}:checked + ~ #cb#{$i + + 1}:not(:checked) + ~ div + > div + > house + > [for="ncb#{$i}"], + #cb23:checked + ~ #cb24:checked + ~ #cb25:checked + ~ #cb26:checked + ~ div + > div + > house + > [for="ncb24"], + #cb26:checked ~ div > div > house > [for="ncb26"] { + & > i:nth-of-type(3) { + //door + background: radial-gradient( + circle at 80% center, + $r2 0.25rem, + $none 0.25rem + ), + radial-gradient(circle at 81% 52%, $shadow 0.25rem, $none 0.4rem), $r3; + box-shadow: inset 0 0.5rem 1rem $shadow; + } + + &.col#{random(2 + 2)} > i:nth-of-type(3) { + //door + background: radial-gradient( + circle at 80% center, + $r2 0.25rem, + $none 0.25rem + ), + radial-gradient(circle at 81% 52%, $shadow 0.25rem, $none 0.4rem), $tre1; + } + + &.col#{random(2)} > i:nth-of-type(3) { + //door + background: radial-gradient( + circle at 80% center, + $r2 0.25rem, + $none 0.25rem + ), + radial-gradient(circle at 81% 52%, $shadow 0.25rem, $none 0.4rem), + $smoke; + } + + & > i:nth-of-type(4) { + transform: scale(0.5); + //window + box-shadow: inset 0 0 0 0.5rem $ls, + // + inset + 0 + 0 + 0.5rem + $ds, + // + inset + 0 + 0 + 0 + 0.5rem + $r3, + // + inset + 0 + 0 + 1rem + 1rem + $ds, + // + inset + 0 -2rem + 0 + #000, + // + inset + 0 -3.5rem + 0 + $tre2; + + &:after { + height: 0.5rem; + top: 2.3rem; + background: $r3; + box-shadow: inset 0 0 0 0.5rem $ls; + } + + &:before { + width: 0.5rem; + left: 2.3rem; + background: $r3; + } + } + } +} + +//castle + +.hs.house.row4.col2:not(:checked) + ~ .hs.row4.col3:checked + ~ .hs.house.row4.col4:not(:checked) + ~ .hs.house.row3.col2:not(:checked) + ~ .hs.row3.col3:checked + ~ .hs.house.row3.col4:not(:checked) + ~ .hs.house.row2.col2:not(:checked) + ~ .hs.row2.col3:checked + ~ .hs.house.row2.col4:not(:checked) + ~ .hs.house.row1.col2:not(:checked) + ~ .hs.row1.col3:checked + ~ .hs.house.row1.col4:not(:checked) + ~ { + div > div > house > .row1.col3, + div > div > house > .row2.col3, + div > div > house > .row3.col3, + div > div > house > .row4.col3 { + background: $stone; + color: $stone; + z-index: 310; + + & > i:nth-of-type(4), + & > i:nth-of-type(3) { + border-radius: 50% 50% 0.3rem 0.3rem; + } + + & > i:nth-of-type(3) { + height: 10rem; + width: 4.5rem; + top: 2.5rem; + + &:before { + top: 8rem; + } + + &:after { + top: 8rem; + } + } + + & > i:nth-of-type(4) { + &:after { + box-shadow: inset 0 0 0 0.5rem $ls; + } + } + } + + div > div > house > .row1.col3 { + & > i:nth-of-type(1) { + display: none; + } + + & > i:nth-of-type(2) { + border: 1rem solid $none; + border-left: 3rem solid $r1; + top: -8.5rem; + left: 4.25rem; + box-shadow: none; + + &:before { + top: 3.25rem; + left: -8.25rem; + background: $stone; + width: 2.75rem; + height: 5rem; + border-radius: 0.25rem 0.25rem 50% 50%; + box-shadow: 4rem 0 0 $stone, + // + 8rem 0 0 $stone, + // + 12rem 0 0 $stone; + } + + &:after { + width: 14.5rem; + height: 3rem; + top: 6.25rem; + border-radius: 0 0 2rem 2rem; + background: $stone; + left: -8.25rem; + filter: none; + border: none; + box-shadow: none; + } + } + + & > i:nth-of-type(4) { + &:before { + box-shadow: inset 0 0 0 0.5rem $ls, + // + -2rem -12.5rem 0 $tre2; + } + } + } +} + +//lighthouse + +.hs.house.row4.col1:not(:checked) + ~ .hs.house.row4.col2:checked + ~ .hs.house.row4.col3:not(:checked) + ~ .hs.house.row3.col1:not(:checked) + ~ .hs.shed.row3.col2:checked + ~ .hs.house.row3.col3:not(:checked) + ~ .hs.house.row2.col1:not(:checked) + ~ .hs.house.row2.col2:checked + ~ .hs.house.row2.col3:not(:checked) + ~ .hs.house.row1.col1:not(:checked) + ~ .hs.shed.row1.col2:checked + ~ .hs.house.row1.col3:not(:checked) + ~ { + div > div > house > .row1.col2, + div > div > house > .row2.col2, + div > div > house > .row3.col2, + div > div > house > .row4.col2 { + z-index: 310; + background: none; + border: none; + //back + &:before, + &:after { + width: 80%; + height: 105%; + background: linear-gradient(to right, $s1, currentColor); + transform: skewX(-2deg); + border-radius: 0.1rem 0.1rem 50% 50% / 50% 50% 0.25rem 0.25rem; + top: 0; + left: -1rem; + box-shadow: none; + filter: none; + opacity: 1; + } + + &:after { + left: auto; + right: -1rem; + transform: skewX(2deg); + background: linear-gradient(to right, $none, currentColor, $sd); + } + + & > i:nth-of-type(4) { + border-radius: 50%; + } + + & > i:nth-of-type(3) { + border-radius: 2rem 2rem 0.5rem 0.5rem; + } + + & > i:nth-of-type(4) { + &:after { + box-shadow: inset 0 0 0 0.5rem $ls; + } + } + } + //light + div > div > house > .row1.col2 { + & > i:nth-of-type(1) { + display: none; + } + + & > i:nth-of-type(2) { + width: 8rem; + height: 12rem; + border: 0.5rem solid $none; + border-top: 1rem solid $smoke; + border-bottom: 6rem solid $dark; + border-radius: 0.5rem 0.5rem 0 0; + top: -12rem; + left: 0; + right: 0; + margin: auto; + background: repeating-linear-gradient( + to right, + $smoke 0.5rem, + $smoke 1rem, + $none 1rem, + $none 3.25rem + ), + // + repeating-linear-gradient( + 45deg, + $dark, + $dark 0.2rem, + $none 0.5rem, + $none 1rem + ), + // + repeating-linear-gradient( + -45deg, + $dark, + $dark 0.2rem, + $none 0.5rem, + $none 1rem + ); + box-shadow: inset 0 -1rem 0 $smoke; + background-size: cover; + + &:before { + border: 3rem solid $none; + width: 6.5rem; + box-shadow: inset 0 3rem 0 $dark; + border-bottom-color: $tre2; + top: -10rem; + right: 0; + margin: auto; + height: 9rem; + border-radius: 0; + background: none; + } + + &:after { + width: 12.5rem; + background: repeating-linear-gradient( + to right, + $smoke, + $smoke 0.5rem, + $none 0.5rem, + $none 1.32rem + ); + height: 5rem; + top: 6rem; + border-radius: 0.5rem; + border: none; + border-bottom: 1rem solid $smoke; + border-top: 0.5rem solid $smoke; + left: -10rem; + right: -10rem; + margin: auto; + box-shadow: none; + display: block; + } + } + } + + div > div > house > .row3.col2 { + //back + color: $stone; + + &:before, + &:after { + left: -0.5rem; + } + + &:after { + left: auto; + right: -0.5rem; + } + } + + div > div > house > .row2.col2 { + //back + &:before, + &:after { + left: 0; + } + + &:after { + left: auto; + right: 0; + } + } + + div > div > house > .row1.col2 { + color: $stone; + //back + &:before, + &:after { + left: 0.5rem; + } + + &:after { + left: auto; + right: 0.5rem; + } + } + + text { + transform: scale(1) !important; + z-index: 410; + transition: all 0.5s 1s ease-in-out; + opacity: 1; + + welldone { + display: block; + } + + gameover { + display: none; + } + } +} + +.hs.row2.col2:checked ~ { + div > div > house > .row2.col2 { + & > i:nth-of-type(4) { + border-radius: 50% !important; + } + + & > i:nth-of-type(4) { + &:after { + box-shadow: inset 0 0 0 0.5rem $ls; + } + } + } +} + +.hs.house.row4.col2:checked ~ .hs.shed.row3.col2:checked ~ { + div > div > house > .row3.col2 { + & > i:nth-of-type(4) { + border-radius: 50%; + } + + & > i:nth-of-type(4) { + &:after { + box-shadow: inset 0 0 0 0.5rem $ls; + } + } + } +} +// ## logic +// +// +// +// + +house label, +shed label { + opacity: 0; + + & *, + &:after, + &:before { + transform: translate3d(0, 0, 0); + } +} + +@keyframes pop { + 0% { + opacity: 0; + transform: translate3d(0, -12rem, 0); + } + + 99% { + opacity: 1; + transform: translate3d(0, 0, 0); + } +} + +@keyframes popup { + 0% { + opacity: 0; + transform: translate3d(0, 12rem, 0); + } + + 99% { + opacity: 1; + transform: translate3d(0, 0, 0); + } +} + +$row: 1, 2, 3, 4; + +@each $i in $row { + $col: 1, 2, 3, 4; + //shed or house + @each $x in $col { + .shed.row#{$i}.col#{$x}:checked ~ div > div > shed > .row#{$i}.col#{$x}, + .house.row#{$i}.col#{$x}:checked ~ div > div > house > .row#{$i}.col#{$x} { + opacity: 1; + + &:after, + & *:after { + animation: pop 0.1s linear forwards; + } + + &:before, + & *:before { + animation: popup 0.1s linear forwards; + } + } + + .shed.row#{$i}.col#{$x}:checked ~ div > div > house > .row#{$i}.col#{$x} { + & > i:nth-of-type(5) { + display: none !important; + } + } + + //right + .house.row#{$i}.col#{$x}:checked + ~ div + > div + > hbtn + > .row#{$i}.col#{$x + - + 1} { + z-index: 100; + } + //left + .house.row#{$i}.col#{$x}:checked + ~ div + > div + > hbtn + > .row#{$i}.col#{$x + + 1} { + z-index: 100; + } + //down + .house.row#{$i}.col#{$x}:checked + ~ div + > div + > hbtn + > .row#{$i + + 1}.col#{$x} { + z-index: 100; + } + //up + .house.row#{$i}.col#{$x}:checked + ~ div + > div + > hbtn + > .row#{$i + - + 1}.col#{$x} { + z-index: 100; + } + } +} + +$row: 1, 2, 3, 4; + +@each $i in $row { + $col: 1, 2, 3, 4; + + @each $x in $col { + .hs.row#{$i}.col#{$x}:checked ~ div > div > shed > .row#{$i}.col#{$x} { + z-index: 300; + } + + .hs.row#{$i}.col#{$x}:checked ~ div > div > house > .row#{$i}.col#{$x} { + background: $base; + z-index: 300; + color: $base; + } + + .hs.shed.row#{$i}.col#{$x}:checked + ~ div + > div + > house + > .row#{$i}.col#{$x} { + background: $r1; + color: $r1; + } + } +} + +$col: 1, 2, 3, 4; + +@each $c in $col { + $row: 1, 2, 3; + + @each $r in $row { + $hs: ( + 0: "shed", + 1: "house" + ); + + @each $y, $z in $hs { + //down fix + .house.row#{$r - 1}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r}.col#{$c} { + opacity: $y; + } + } + + .hs.row#{$r - 1}.col#{$c}:checked ~ { + .house.row#{$r - 2}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r}.col#{$c} { + opacity: $y; + } + } + } + + //sh + .hs.row#{$r}.col#{$c - 1}:checked ~ .house.row#{$r}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r + 1}.col#{$c - 1}, + div > div > #{$z} > .row#{$r}.col#{$c - 1}, + div > div > #{$z} > .row#{$r - 1}.col#{$c - 1} { + opacity: $y; + } + } + + .hs.row#{$r}.col#{$c - 1}:checked ~ { + .house.row#{$r}.col#{$c}:checked ~ { + //..s + //.ssh + //..s + div > div > #{$z} > .row#{$r}.col#{$c - 2}, + div > div > #{$z} > .row#{$r + 1}.col#{$c - 1}, + div > div > #{$z} > .row#{$r - 1}.col#{$c - 1} { + opacity: $y; + } + } + } + + .hs.row#{$r}.col#{$c - 2}:checked ~ { + .hs.row#{$r}.col#{$c - 1}:checked ~ { + .house.row#{$r}.col#{$c}:checked ~ { + //.s + //sssh + //.s + div > div > #{$z} > .row#{$r}.col#{$c - 3}, + div > div > #{$z} > .row#{$r + 1}.col#{$c - 2}, + div > div > #{$z} > .row#{$r - 1}.col#{$c - 2} { + opacity: $y; + } + } + } + } + + .hs.row#{$r}.col#{$c - 3}:checked ~ { + .hs.row#{$r}.col#{$c - 2}:checked ~ { + .hs.row#{$r}.col#{$c - 1}:checked ~ { + .house.row#{$r}.col#{$c}:checked ~ { + //s + //sssh + //s + div > div > #{$z} > .row#{$r + 1}.col#{$c - 3}, + div > div > #{$z} > .row#{$r - 1}.col#{$c - 3} { + opacity: $y; + } + } + } + } + } + + .hs.row#{$r}.col#{$c + - + 2}:checked + ~ .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + .hs.row#{$r - 1}.col#{$c - 2}:checked ~ { + //s + //s + //ssh + div > div > #{$z} > .row#{$r - 2}.col#{$c - 2} { + opacity: $y; + } + } + } + + .hs.row#{$r}.col#{$c + - + 3}:checked + ~ .hs.row#{$r}.col#{$c + - + 2}:checked + ~ .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + .hs.row#{$r - 1}.col#{$c - 3}:checked ~ { + .hs.row#{$r - 2}.col#{$c - 3}:checked ~ { + //ss + //s + //sssh + div > div > #{$z} > .row#{$r - 2}.col#{$c - 3}, + div > div > #{$z} > .row#{$r - 2}.col#{$c - 2} { + opacity: $y; + } + } + } + } + + .hs.row#{$r}.col#{$c + - + 3}:checked + ~ .hs.row#{$r}.col#{$c + - + 2}:checked + ~ .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + .hs.row#{$r - 1}.col#{$c - 3}:checked ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ { + //sss + //s + //sssh + div > div > #{$z} > .row#{$r - 2}.col#{$c - 1} { + opacity: $y; + } + } + } + } + + .hs.row#{$r}.col#{$c + - + 3}:checked + ~ .hs.row#{$r}.col#{$c + - + 2}:checked + ~ .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + .hs.row#{$r - 1}.col#{$c - 3}:checked ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ { + //ssss + //s + //sssh + div > div > #{$z} > .row#{$r - 2}.col#{$c} { + opacity: $y; + } + } + } + } + + .hs.row#{$r}.col#{$c + - + 2}:checked + ~ .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + .hs.row#{$r - 1}.col#{$c - 2}:checked ~ { + .hs.row#{$r - 2}.col#{$c - 2}:checked ~ { + //sss + //.s + //.ssh + div > div > #{$z} > .row#{$r - 2}.col#{$c - 1}, + div > div > #{$z} > .row#{$r - 2}.col#{$c - 3} { + opacity: $y; + } + } + } + } + + .hs.row#{$r}.col#{$c + - + 2}:checked + ~ .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + .hs.row#{$r - 1}.col#{$c - 2}:checked ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ { + //.sss + //.s + //.ssh + div > div > #{$z} > .row#{$r - 2}.col#{$c} { + opacity: $y; + } + } + } + } + + .hs.row#{$r}.col#{$c - 1}:checked ~ .house.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r - 1}.col#{$c - 1}:checked ~ { + .hs.row#{$r - 2}.col#{$c - 1}:checked ~ { + //..ss + //..s + //..sh + div > div > #{$z} > .row#{$r - 2}.col#{$c}, + div > div > #{$z} > .row#{$r - 2}.col#{$c - 2} { + opacity: $y; + } + } + } + } + + .hs.row#{$r}.col#{$c - 1}:checked ~ .house.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r - 1}.col#{$c - 1}:checked ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ { + //sss + //s.s + //..sh + div > div > #{$z} > .row#{$r - 2}.col#{$c - 3}, + div > div > #{$z} > .row#{$r - 1}.col#{$c - 3} { + opacity: $y; + } + } + } + } + + .hs.row#{$r}.col#{$c - 1}:checked ~ .house.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ { + //sss + //s.s + //s.sh + div > div > #{$z} > .row#{$r}.col#{$c - 3} { + opacity: $y; + } + } + } + } + + .hs.row#{$r + 1}.col#{$c - 1}:checked ~ { + .hs.row#{$r}.col#{$c - 1}:checked ~ .house.row#{$r}.col#{$c}:checked ~ { + //..sh + //..s + //..s + div > div > #{$z} > .row#{$r + 2}.col#{$c - 1} { + opacity: $y; + } + } + } + + .hs.row#{$r + 1}.col#{$c - 2}:checked ~ { + .hs.row#{$r}.col#{$c + - + 2}:checked + ~ .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + //.ssh + //.s. + //.s. + div > div > #{$z} > .row#{$r + 2}.col#{$c - 2} { + opacity: $y; + } + } + } + + .hs.row#{$r + 1}.col#{$c - 3}:checked ~ { + .hs.row#{$r}.col#{$c + - + 3}:checked + ~ .hs.row#{$r}.col#{$c + - + 2}:checked + ~ .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + //sssh + //s + //s + div > div > #{$z} > .row#{$r + 2}.col#{$c - 3} { + opacity: $y; + } + } + } + + .hs.row#{$r + 2}.col#{$c - 3}:checked ~ { + .hs.row#{$r + 1}.col#{$c - 3}:checked ~ { + .hs.row#{$r}.col#{$c + - + 3}:checked + ~ .hs.row#{$r}.col#{$c + - + 2}:checked + ~ .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + //sssh + //s + //ss + div > div > #{$z} > .row#{$r + 2}.col#{$c - 2} { + opacity: $y; + } + } + } + } + + .hs.row#{$r + + 2}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + + 2}.col#{$c + - + 2}:checked + ~ { + .hs.row#{$r + 1}.col#{$c - 3}:checked ~ { + .hs.row#{$r}.col#{$c + - + 3}:checked + ~ .hs.row#{$r}.col#{$c + - + 2}:checked + ~ .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + //sssh + //s + //sss + div > div > #{$z} > .row#{$r + 2}.col#{$c - 1} { + opacity: $y; + } + } + } + } + + .hs.row#{$r + + 2}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + + 2}.col#{$c + - + 1}:checked + ~ { + .hs.row#{$r + 1}.col#{$c - 3}:checked ~ { + .hs.row#{$r}.col#{$c + - + 3}:checked + ~ .hs.row#{$r}.col#{$c + - + 2}:checked + ~ .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + //sssh + //s + //ssss + div > div > #{$z} > .row#{$r + 2}.col#{$c} { + opacity: $y; + } + } + } + } + + .hs.row#{$r + 2}.col#{$c - 2}:checked ~ { + .hs.row#{$r + 1}.col#{$c - 2}:checked ~ { + .hs.row#{$r}.col#{$c + - + 2}:checked + ~ .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + //.ssh + //.s + //sss + div > div > #{$z} > .row#{$r + 2}.col#{$c - 3}, + div > div > #{$z} > .row#{$r + 2}.col#{$c - 2}, + div > div > #{$z} > .row#{$r + 2}.col#{$c - 1} { + opacity: $y; + } + } + } + } + + .hs.row#{$r + + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + + 2}.col#{$c + - + 1}:checked + ~ { + .hs.row#{$r + 1}.col#{$c - 2}:checked ~ { + .hs.row#{$r}.col#{$c + - + 2}:checked + ~ .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + //.ssh + //.s + //.sss + div > div > #{$z} > .row#{$r + 2}.col#{$c} { + opacity: $y; + } + } + } + } + + .hs.row#{$r + 2}.col#{$c - 1}:checked ~ { + .hs.row#{$r + 1}.col#{$c - 1}:checked ~ { + .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + //..sh + //..s + //.sss + div > div > #{$z} > .row#{$r + 2}.col#{$c - 1}, + div > div > #{$z} > .row#{$r + 2}.col#{$c}, + div > div > #{$z} > .row#{$r + 2}.col#{$c - 2} { + opacity: $y; + } + } + } + } + + .hs.row#{$r + + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + + 2}.col#{$c + - + 1}:checked + ~ { + .hs.row#{$r + 1}.col#{$c - 1}:checked ~ { + .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + //..sh + //..s + //sss + div > div > #{$z} > .row#{$r + 2}.col#{$c - 3} { + opacity: $y; + } + } + } + } + + .hs.row#{$r + + 2}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + + 2}.col#{$c + - + 1}:checked + ~ { + .hs.row#{$r + 1}.col#{$c - 1}:checked ~ { + .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + //..sh + //s.s + //sss + div > div > #{$z} > .row#{$r + 1}.col#{$c - 3} { + opacity: $y; + } + } + } + } + + .hs.row#{$r + + 2}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + + 2}.col#{$c + - + 1}:checked + ~ { + .hs.row#{$r + + 1}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + + 1}.col#{$c + - + 1}:checked + ~ { + .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + //s.sh + //s.s + //sss + div > div > #{$z} > .row#{$r}.col#{$c - 3} { + opacity: $y; + } + } + } + } + + .hs.row#{$r + 2}.col#{$c - 2}:checked ~ { + .hs.row#{$r + + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + + 1}.col#{$c + - + 1}:checked + ~ { + .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + //..sh + //.ss + //ss + div > div > #{$z} > .row#{$r + 2}.col#{$c - 3} { + opacity: $y; + } + } + } + } + + .hs.row#{$r + + 2}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + + 2}.col#{$c + - + 1}:checked + ~ { + .hs.row#{$r + + 1}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + + 1}.col#{$c + - + 1}:checked + ~ .house.row#{$r + + 1}.col#{$c}:checked + ~ { + //s + //s.sh + //sss + div > div > #{$z} > .row#{$r}.col#{$c - 3} { + opacity: $y; + } + } + } + + .hs.row#{$r + + 1}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + + 1}.col#{$c + - + 1}:checked + ~ { + .hs.row#{$r}.col#{$c + - + 3}:checked + ~ .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + .hs.row#{$r - 1}.col#{$c - 3}:checked ~ { + //ss + //s.sh + //sss + div > div > #{$z} > .row#{$r - 1}.col#{$c - 2}, + div > div > #{$z} > .row#{$r - 2}.col#{$c - 3} { + opacity: $y; + } + } + } + } + + .hs.row#{$r}.col#{$c - 1}:checked ~ .house.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r - 1}.col#{$c - 1}:checked ~ { + //.ss + //..sh + div > div > #{$z} > .row#{$r - 2}.col#{$c - 1}, + div > div > #{$z} > .row#{$r - 1}.col#{$c - 2} { + opacity: $y; + } + } + } + + .hs.row#{$r}.col#{$c - 1}:checked ~ .house.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ { + .hs.row#{$r - 2}.col#{$c - 2}:checked ~ { + //ss + //.ss + //..sh + div > div > #{$z} > .row#{$r - 2}.col#{$c - 2}, + div > div > #{$z} > .row#{$r - 2}.col#{$c - 3} { + opacity: $y; + } + } + } + } + + .house.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ { + .hs.row#{$r - 3}.col#{$c - 2}:checked ~ { + //ss + //.ss + //..ss + //...h + div > div > #{$z} > .row#{$r - 3}.col#{$c - 2}, + div > div > #{$z} > .row#{$r - 3}.col#{$c - 3} { + opacity: $y; + } + } + } + } + } + + .house.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r - 1}.col#{$c}:checked ~ { + .hs.row#{$r + - + 2}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 2}:checked + ~ { + .hs.row#{$r - 3}.col#{$c + 2}:checked ~ { + //..ss + //sss + //s + //h + div > div > #{$z} > .row#{$r - 3}.col#{$c + 3}, + div > div > #{$z} > .row#{$r - 3}.col#{$c + 2} { + opacity: $y; + } + } + } + } + } + + .hs.row#{$r}.col#{$c - 1}:checked ~ .house.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ { + //s + //sss + //s.sh + div > div > #{$z} > .row#{$r}.col#{$c - 3}, + div > div > #{$z} > .row#{$r - 2}.col#{$c - 3}, + div > div > #{$z} > .row#{$r - 1}.col#{$c - 3} { + opacity: $y; + } + } + } + + .house.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + .hs.row#{$r + - + 3}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + //s + //sss + //s.ss + //...h + div > div > #{$z} > .row#{$r - 1}.col#{$c - 3}, + div > div > #{$z} > .row#{$r - 2}.col#{$c - 3}, + div > div > #{$z} > .row#{$r - 3}.col#{$c - 3} { + opacity: $y; + } + } + } + } + + .hs.row#{$r}.col#{$c + - + 3}:checked + ~ .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ { + //sss + //s.sh + //S + div > div > #{$z} > .row#{$r}.col#{$c - 3}, + div > div > #{$z} > .row#{$r + 1}.col#{$c - 3} { + opacity: $y; + } + } + } + + .hs.row#{$r + 1}.col#{$c - 3}:checked ~ { + .hs.row#{$r}.col#{$c + - + 3}:checked + ~ .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ { + //sss + //s.sh + //ss + div > div > #{$z} > .row#{$r + 1}.col#{$c - 2} { + opacity: $y; + } + } + } + } + + .house.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ { + //sss + //s.s + //s.h + div > div > #{$z} > .row#{$r}.col#{$c - 2} { + opacity: $y; + } + } + } + } + + .hs.row#{$r}.col#{$c - 2}:checked ~ .house.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + //sss + //s.h + //s + div > div > #{$z} > .row#{$r}.col#{$c - 2}, + div > div > #{$z} > .row#{$r + 1}.col#{$c - 2} { + opacity: $y; + } + } + } + + .hs.row#{$r}.col#{$c - 3}:checked ~ .house.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + //ssss + //s..h + //s + div > div > #{$z} > .row#{$r}.col#{$c - 3}, + div > div > #{$z} > .row#{$r + 1}.col#{$c - 3} { + opacity: $y; + } + } + } + + .hs.row#{$r + + 1}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + + 1}.col#{$c + - + 2}:checked + ~ { + .hs.row#{$r}.col#{$c - 3}:checked ~ .house.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + //ssss + //s..h + //sss + div > div > #{$z} > .row#{$r + 1}.col#{$c - 2}, + div > div > #{$z} > .row#{$r + 1}.col#{$c - 1} { + opacity: $y; + } + } + } + } + + .hs.row#{$r}.col#{$c + - + 2}:checked + ~ .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .house.row#{$r}.col#{$c}:checked + ~ { + .hs.row#{$r - 1}.col#{$c - 2}:checked ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ { + //ssss + //s..s + //ssh + div > div > #{$z} > .row#{$r - 2}.col#{$c + 1}, + div > div > #{$z} > .row#{$r - 1}.col#{$c + 1} { + opacity: $y; + } + } + } + } + + .hs.row#{$r}.col#{$c - 1}:checked ~ .house.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r - 1}.col#{$c - 1}:checked ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ { + //ssss + //s + //sh + div > div > #{$z} > .row#{$r - 2}.col#{$c + 1}, + div > div > #{$z} > .row#{$r - 2}.col#{$c + 2} { + opacity: $y; + } + } + } + } + + .hs.row#{$r}.col#{$c - 1}:checked ~ .house.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 2}:checked + ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ { + //ssss + //s..s + //sh.s + div > div > #{$z} > .row#{$r - 1}.col#{$c + 2}, + div > div > #{$z} > .row#{$r}.col#{$c + 2} { + opacity: $y; + } + } + } + } + + .house.row#{$r}.col#{$c}:checked ~ .hs.row#{$r}.col#{$c + 2}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 2}:checked + ~ { + //sss + //h.ss + //..s + div > div > #{$z} > .row#{$r}.col#{$c + 3}, + div > div > #{$z} > .row#{$r}.col#{$c + 2}, + div > div > #{$z} > .row#{$r + 1}.col#{$c + 2} { + opacity: $y; + } + } + } + + .house.row#{$r}.col#{$c}:checked ~ .hs.row#{$r}.col#{$c + 3}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 3}:checked + ~ { + //ssss + //h.ss + //...s + div > div > #{$z} > .row#{$r}.col#{$c + 3}, + div > div > #{$z} > .row#{$r}.col#{$c + 2}, + div > div > #{$z} > .row#{$r + 1}.col#{$c + 3} { + opacity: $y; + } + } + } + + .hs.row#{$r + + 1}.col#{$c + + 2}:checked + ~ .hs.row#{$r + + 1}.col#{$c + + 3}:checked + ~ { + .house.row#{$r}.col#{$c}:checked ~ .hs.row#{$r}.col#{$c + 3}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 3}:checked + ~ { + //ssss + //h..s + //.sss + div > div > #{$z} > .row#{$r + 1}.col#{$c + 2}, + div > div > #{$z} > .row#{$r + 1}.col#{$c + 1} { + opacity: $y; + } + } + } + } + + .hs.row#{$r + 1}.col#{$c + 2}:checked ~ { + .house.row#{$r}.col#{$c}:checked ~ .hs.row#{$r}.col#{$c + 2}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 2}:checked + ~ { + //sss + //h.s + //.sss + div > div > #{$z} > .row#{$r + 1}.col#{$c + 3}, + div > div > #{$z} > .row#{$r + 1}.col#{$c + 1} { + opacity: $y; + } + } + } + } + + .hs.row#{$r + + 1}.col#{$c + + 1}:checked + ~ .hs.row#{$r + + 1}.col#{$c + + 2}:checked + ~ { + .house.row#{$r}.col#{$c}:checked ~ .hs.row#{$r}.col#{$c + 1}:checked ~ { + //hs + //.sss + div > div > #{$z} > .row#{$r + 1}.col#{$c + 3}, + div > div > #{$z} > .row#{$r + 1}.col#{$c + 2} { + opacity: $y; + } + } + } + + .house.row#{$r}.col#{$c}:checked ~ .hs.row#{$r}.col#{$c + 1}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 2}:checked + ~ { + //.sss + //hs + div > div > #{$z} > .row#{$r - 1}.col#{$c + 3}, + div > div > #{$z} > .row#{$r - 1}.col#{$c + 2} { + opacity: $y; + } + } + } + + .hs.row#{$r + + 1}.col#{$c + + 1}:checked + ~ .hs.row#{$r + + 1}.col#{$c + + 2}:checked + ~ .hs.row#{$r + + 1}.col#{$c + + 3}:checked + ~ { + .house.row#{$r}.col#{$c}:checked + ~ .hs.row#{$r}.col#{$c + + 1}:checked + ~ .hs.row#{$r}.col#{$c + + 3}:checked + ~ { + //...s + //hs.s + //.sss + div > div > #{$z} > .row#{$r}.col#{$c + 3}, + div > div > #{$z} > .row#{$r - 1}.col#{$c + 3} { + opacity: $y; + } + } + } + + .house.row#{$r}.col#{$c}:checked + ~ .hs.row#{$r}.col#{$c + + 1}:checked + ~ .hs.row#{$r}.col#{$c + + 3}:checked + ~ { + .hs.row#{$r + - + 1}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 3}:checked + ~ { + //.sss + //hs.s + //...s + div > div > #{$z} > .row#{$r}.col#{$c + 3}, + div > div > #{$z} > .row#{$r + 1}.col#{$c + 3} { + opacity: $y; + } + } + } + + .hs.row#{$r + + 1}.col#{$c + + 1}:checked + ~ .hs.row#{$r + + 1}.col#{$c + + 2}:checked + ~ .hs.row#{$r + + 1}.col#{$c + + 3}:checked + ~ { + .house.row#{$r}.col#{$c}:checked + ~ .hs.row#{$r}.col#{$c + + 1}:checked + ~ .hs.row#{$r}.col#{$c + + 3}:checked + ~ { + .hs.row#{$r - 1}.col#{$c + 3}:checked ~ { + //..ss + //hs.s + //.sss + div > div > #{$z} > .row#{$r - 1}.col#{$c + 2} { + opacity: $y; + } + } + } + } + + .hs.row#{$r + 1}.col#{$c + 3}:checked ~ { + .house.row#{$r}.col#{$c}:checked + ~ .hs.row#{$r}.col#{$c + + 1}:checked + ~ .hs.row#{$r}.col#{$c + + 3}:checked + ~ { + .hs.row#{$r + - + 1}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 3}:checked + ~ { + //.sss + //hs.s + //..ss + div > div > #{$z} > .row#{$r + 1}.col#{$c + 2} { + opacity: $y; + } + } + } + } + + .house.row#{$r}.col#{$c}:checked ~ .hs.row#{$r}.col#{$c + 3}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 3}:checked + ~ { + .hs.row#{$r + - + 2}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 3}:checked + ~ { + //ssss + //s..s + //h.ss + div > div > #{$z} > .row#{$r}.col#{$c + 3}, + div > div > #{$z} > .row#{$r}.col#{$c + 2} { + opacity: $y; + } + } + } + } + + .house.row#{$r}.col#{$c}:checked ~ .hs.row#{$r}.col#{$c + 2}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 2}:checked + ~ { + .hs.row#{$r + - + 2}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 2}:checked + ~ { + //sss + //s.s + //h.ss + div > div > #{$z} > .row#{$r}.col#{$c + 3}, + div > div > #{$z} > .row#{$r}.col#{$c + 2} { + opacity: $y; + } + } + } + } + + .house.row#{$r}.col#{$c}:checked ~ .hs.row#{$r}.col#{$c + 3}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 3}:checked + ~ { + .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 3}:checked + ~ { + //.sss + //ss.s + //h.ss + div > div > #{$z} > .row#{$r}.col#{$c + 3}, + div > div > #{$z} > .row#{$r}.col#{$c + 2} { + opacity: $y; + } + } + } + } + + .hs.row#{$r + 1}.col#{$c - 2}:checked ~ { + .hs.row#{$r}.col#{$c - 2}:checked ~ .house.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + //sss + //s.h + //ss + div > div > #{$z} > .row#{$r + 1}.col#{$c - 1} { + opacity: $y; + } + } + } + } + + .hs.row#{$r + + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + + 1}.col#{$c + - + 1}:checked + ~ { + .hs.row#{$r}.col#{$c - 1}:checked ~ .house.row#{$r}.col#{$c}:checked ~ { + //..sh + //sss + //.s. + div > div > #{$z} > .row#{$r + 1}.col#{$c - 2}, + div > div > #{$z} > .row#{$r + 2}.col#{$c - 2}, + div > div > #{$z} > .row#{$r + 1}.col#{$c - 3} { + opacity: $y; + } + } + } + + .hs.row#{$r + + 1}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + + 1}.col#{$c + - + 1}:checked + ~ { + .hs.row#{$r}.col#{$c - 1}:checked ~ .house.row#{$r}.col#{$c}:checked ~ { + //s.sh + //sss + //s.. + div > div > #{$z} > .row#{$r}.col#{$c - 3}, + div > div > #{$z} > .row#{$r + 2}.col#{$c - 3} { + opacity: $y; + } + } + } + + .hs.row#{$r}.col#{$c}:checked ~ { + .house.row#{$r - 1}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 1} { + opacity: $y; + } + } + } + + .hs.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r}.col#{$c + 1}:checked ~ { + .house.row#{$r - 1}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r + 1}.col#{$c + 1}, + div > div > #{$z} > .row#{$r}.col#{$c + 2} { + opacity: $y; + } + } + } + } + + .hs.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r}.col#{$c + 1}:checked ~ { + .hs.row#{$r}.col#{$c + 2}:checked ~ { + .house.row#{$r - 1}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c + 2}, + div > div > #{$z} > .row#{$r + 1}.col#{$c + 2}, + div > div > #{$z} > .row#{$r}.col#{$c + 3} { + opacity: $y; + } + } + } + } + } + + .hs.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r}.col#{$c + 1}:checked ~ { + .hs.row#{$r}.col#{$c + 2}:checked ~ { + .hs.row#{$r}.col#{$c + 3}:checked ~ { + .house.row#{$r - 1}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r + 1}.col#{$c + 3}, + div > div > #{$z} > .row#{$r - 1}.col#{$c + 3} { + opacity: $y; + } + } + } + } + } + } + + .hs.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r - 1}.col#{$c}:checked ~ { + .house.row#{$r - 2}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 1} { + opacity: $y; + } + } + } + } + + .hs.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r}.col#{$c + 1}:checked ~ { + .hs.row#{$r - 1}.col#{$c}:checked ~ { + .house.row#{$r - 2}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 2} { + opacity: $y; + } + } + } + } + } + + .hs.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r}.col#{$c + 1}:checked ~ { + .hs.row#{$r}.col#{$c + 2}:checked ~ { + .hs.row#{$r - 1}.col#{$c}:checked ~ { + .house.row#{$r - 2}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c + 2}, + div > div > #{$z} > .row#{$r}.col#{$c + 3} { + opacity: $y; + } + } + } + } + } + } + + .hs.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r}.col#{$c + 1}:checked ~ { + .hs.row#{$r}.col#{$c + 2}:checked ~ { + .hs.row#{$r}.col#{$c + 3}:checked ~ { + .hs.row#{$r - 1}.col#{$c}:checked ~ { + .house.row#{$r - 2}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c + 3} { + opacity: $y; + } + } + } + } + } + } + } + //h..s + //s..s + //ssss + .hs.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r}.col#{$c + 1}:checked ~ { + .hs.row#{$r}.col#{$c + 2}:checked ~ { + .hs.row#{$r}.col#{$c + 3}:checked ~ { + .hs.row#{$r - 1}.col#{$c}:checked ~ { + .hs.row#{$r - 1}.col#{$c + 3}:checked ~ { + .house.row#{$r - 2}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 3} { + opacity: $y; + } + } + } + } + } + } + } + } + //h.s. + //s.s. + //sss. + .hs.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r}.col#{$c + 1}:checked ~ { + .hs.row#{$r}.col#{$c + 2}:checked ~ { + .hs.row#{$r - 1}.col#{$c}:checked ~ { + .hs.row#{$r - 1}.col#{$c + 2}:checked ~ { + .house.row#{$r - 2}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 2} { + opacity: $y; + } + } + } + } + } + } + } + //h.ss + //s..s + //ssss + .hs.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r}.col#{$c + 1}:checked ~ { + .hs.row#{$r}.col#{$c + 2}:checked ~ { + .hs.row#{$r}.col#{$c + 3}:checked ~ { + .hs.row#{$r - 1}.col#{$c}:checked ~ { + .hs.row#{$r - 1}.col#{$c + 3}:checked ~ { + .house.row#{$r - 2}.col#{$c}:checked ~ { + .hs.row#{$r - 2}.col#{$c + 3}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 2} { + opacity: $y; + } + } + } + } + } + } + } + } + } + //h.ss + //s.s. + //sss. + .hs.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r}.col#{$c + 1}:checked ~ { + .hs.row#{$r}.col#{$c + 2}:checked ~ { + .hs.row#{$r - 1}.col#{$c}:checked ~ { + .hs.row#{$r - 1}.col#{$c + 2}:checked ~ { + .house.row#{$r - 2}.col#{$c}:checked ~ { + .hs.row#{$r - 2}.col#{$c + 2}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 3} { + opacity: $y; + } + } + } + } + } + } + } + } + //h... + //s.ss + //sss. + .hs.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r}.col#{$c + 1}:checked ~ { + .hs.row#{$r}.col#{$c + 2}:checked ~ { + .hs.row#{$r - 1}.col#{$c}:checked ~ { + .hs.row#{$r - 1}.col#{$c + 2}:checked ~ { + .house.row#{$r - 2}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c + 3} { + opacity: $y; + } + } + } + } + } + } + } + //h..s + //s.ss + //sss. + .hs.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r}.col#{$c + 1}:checked ~ { + .hs.row#{$r}.col#{$c + 2}:checked ~ { + .hs.row#{$r - 1}.col#{$c}:checked ~ { + .hs.row#{$r - 1}.col#{$c + 2}:checked ~ { + .hs.row#{$r - 1}.col#{$c + 3}:checked ~ { + .house.row#{$r - 2}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 3} { + opacity: $y; + } + } + } + } + } + } + } + } + //h... + //ss.. + //.ss. + .hs.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + .house.row#{$r - 2}.col#{$c - 1}:checked ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 1} { + opacity: $y; + } + } + } + } + //h... + //ss.. + //.sss + .hs.row#{$r}.col#{$c}:checked ~ .hs.row#{$r}.col#{$c + 1}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + .house.row#{$r - 2}.col#{$c - 1}:checked ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 2} { + opacity: $y; + } + } + } + } + //h... + //ss.s + //.sss + .hs.row#{$r}.col#{$c}:checked + ~ .hs.row#{$r}.col#{$c + + 1}:checked + ~ .hs.row#{$r}.col#{$c + + 2}:checked + ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + .house.row#{$r - 2}.col#{$c - 1}:checked ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c + 2} { + opacity: $y; + } + } + } + } + //h..s + //ss.s + //.sss + .hs.row#{$r}.col#{$c}:checked + ~ .hs.row#{$r}.col#{$c + + 1}:checked + ~ .hs.row#{$r}.col#{$c + + 2}:checked + ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 2}:checked + ~ { + .house.row#{$r - 2}.col#{$c - 1}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 2} { + opacity: $y; + } + } + } + } + //h.ss + //ss.s + //.sss + .hs.row#{$r}.col#{$c}:checked + ~ .hs.row#{$r}.col#{$c + + 1}:checked + ~ .hs.row#{$r}.col#{$c + + 2}:checked + ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 2}:checked + ~ { + .house.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 2}:checked + ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 1} { + opacity: $y; + } + } + } + } + //h.ss + //sss + //..ss + //not done yet + .hs.row#{$r}.col#{$c + 2}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 2}:checked + ~ { + .house.row#{$r + - + 2}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 3}:checked + ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 3} { + opacity: $y; + } + //experiment + div > div > #{$z} > .row#{$r + 2}.col#{$c + 3} { + opacity: $y; + } + } + } + } + + .house.row#{$r}.col#{$c}:checked ~ { + //hs + div > div > #{$z} > .row#{$r}.col#{$c + 1} { + opacity: $y; + } + //.s + //hss + //.s + .hs.row#{$r}.col#{$c + 1}:checked ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 2}, + div > div > #{$z} > .row#{$r + 1}.col#{$c + 1}, + div > div > #{$z} > .row#{$r - 1}.col#{$c + 1} { + opacity: $y; + } + //..s + //hsss + //..s + .hs.row#{$r}.col#{$c + 2}:checked ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 3}, + div > div > #{$z} > .row#{$r + 1}.col#{$c + 2}, + div > div > #{$z} > .row#{$r - 1}.col#{$c + 2} { + opacity: $y; + } + //...s + //hsss + //...s + .hs.row#{$r}.col#{$c + 3}:checked ~ { + div > div > #{$z} > .row#{$r + 1}.col#{$c + 3}, + div > div > #{$z} > .row#{$r - 1}.col#{$c + 3} { + opacity: $y; + } + } + } + } + } + + .hs.row#{$r + 1}.col#{$c + 1}:checked ~ { + .house.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r}.col#{$c + 1}:checked ~ { + //hs + //.ss + //.s + div > div > #{$z} > .row#{$r + 1}.col#{$c + 2}, + div > div > #{$z} > .row#{$r + 2}.col#{$c + 1} { + opacity: $y; + } + } + } + } + + .hs.row#{$r + 2}.col#{$c + 1}:checked ~ { + .hs.row#{$r + 1}.col#{$c + 1}:checked ~ { + .house.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r}.col#{$c + 1}:checked ~ { + //hs + //.s + //sss + div > div > #{$z} > .row#{$r + 2}.col#{$c}, + div > div > #{$z} > .row#{$r + 2}.col#{$c + 2} { + opacity: $y; + } + } + } + } + } + + .hs.row#{$r + + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + + 2}.col#{$c + + 2}:checked + ~ { + .hs.row#{$r + 1}.col#{$c + 1}:checked ~ { + .house.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r}.col#{$c + 1}:checked ~ { + //hs + //.s + //.sss + div > div > #{$z} > .row#{$r + 2}.col#{$c + 3} { + opacity: $y; + } + } + } + } + } + + .hs.row#{$r + + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + + 2}.col#{$c + + 2}:checked + ~ .hs.row#{$r + + 2}.col#{$c + + 3}:checked + ~ { + .hs.row#{$r + 1}.col#{$c + 1}:checked ~ { + .house.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r}.col#{$c + 1}:checked ~ { + //hs + //.s.s + //.sss + div > div > #{$z} > .row#{$r + 1}.col#{$c + 3} { + opacity: $y; + } + } + } + } + } + + .hs.row#{$r + + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + + 2}.col#{$c + + 2}:checked + ~ .hs.row#{$r + + 2}.col#{$c + + 3}:checked + ~ { + .hs.row#{$r + + 1}.col#{$c + + 1}:checked + ~ .hs.row#{$r + + 1}.col#{$c + + 3}:checked + ~ { + .house.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r}.col#{$c + 1}:checked ~ { + //hs.s + //.s.s + //.sss + div > div > #{$z} > .row#{$r}.col#{$c + 3} { + opacity: $y; + } + } + } + } + } + + .hs.row#{$r + 1}.col#{$c + 2}:checked ~ { + .house.row#{$r}.col#{$c}:checked + ~ .hs.row#{$r}.col#{$c + + 1}:checked + ~ .hs.row#{$r}.col#{$c + + 2}:checked + ~ { + //hss + //..ss + //..s + div > div > #{$z} > .row#{$r + 1}.col#{$c + 3}, + div > div > #{$z} > .row#{$r + 2}.col#{$c + 2} { + opacity: $y; + } + } + } + + .hs.row#{$r + 2}.col#{$c + 2}:checked ~ { + .hs.row#{$r + 1}.col#{$c + 2}:checked ~ { + .house.row#{$r}.col#{$c}:checked + ~ .hs.row#{$r}.col#{$c + + 1}:checked + ~ .hs.row#{$r}.col#{$c + + 2}:checked + ~ { + //hss + //..s + //.sss + div > div > #{$z} > .row#{$r + 2}.col#{$c + 1}, + div > div > #{$z} > .row#{$r + 2}.col#{$c + 3} { + opacity: $y; + } + } + } + } + + .hs.row#{$r + + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + + 2}.col#{$c + + 2}:checked + ~ { + .hs.row#{$r + 1}.col#{$c + 2}:checked ~ { + .house.row#{$r}.col#{$c}:checked + ~ .hs.row#{$r}.col#{$c + + 1}:checked + ~ .hs.row#{$r}.col#{$c + + 2}:checked + ~ { + //hss + //..s + //sss + div > div > #{$z} > .row#{$r + 2}.col#{$c} { + opacity: $y; + } + } + } + } + + .hs.row#{$r + 1}.col#{$c + 3}:checked ~ { + .house.row#{$r}.col#{$c}:checked + ~ .hs.row#{$r}.col#{$c + + 1}:checked + ~ .hs.row#{$r}.col#{$c + + 2}:checked + ~ .hs.row#{$r}.col#{$c + + 3}:checked + ~ { + //hsss + //...s + //...s + div > div > #{$z} > .row#{$r + 2}.col#{$c + 3} { + opacity: $y; + } + } + } + + .hs.row#{$r + 2}.col#{$c + 3}:checked ~ { + .hs.row#{$r + 1}.col#{$c + 3}:checked ~ { + .house.row#{$r}.col#{$c}:checked + ~ .hs.row#{$r}.col#{$c + + 1}:checked + ~ .hs.row#{$r}.col#{$c + + 2}:checked + ~ .hs.row#{$r}.col#{$c + + 3}:checked + ~ { + //hsss + //...s + //..ss + div > div > #{$z} > .row#{$r + 2}.col#{$c + 2} { + opacity: $y; + } + } + } + } + + .hs.row#{$r + + 2}.col#{$c + + 2}:checked + ~ .hs.row#{$r + + 2}.col#{$c + + 3}:checked + ~ { + .hs.row#{$r + 1}.col#{$c + 3}:checked ~ { + .house.row#{$r}.col#{$c}:checked + ~ .hs.row#{$r}.col#{$c + + 1}:checked + ~ .hs.row#{$r}.col#{$c + + 2}:checked + ~ .hs.row#{$r}.col#{$c + + 3}:checked + ~ { + //hsss + //...s + //.sss + div > div > #{$z} > .row#{$r + 2}.col#{$c + 1} { + opacity: $y; + } + } + } + } + + .hs.row#{$r + + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + + 2}.col#{$c + + 2}:checked + ~ .hs.row#{$r + + 2}.col#{$c + + 3}:checked + ~ { + .hs.row#{$r + 1}.col#{$c + 3}:checked ~ { + .house.row#{$r}.col#{$c}:checked + ~ .hs.row#{$r}.col#{$c + + 1}:checked + ~ .hs.row#{$r}.col#{$c + + 2}:checked + ~ .hs.row#{$r}.col#{$c + + 3}:checked + ~ { + //hsss + //...s + //ssss + div > div > #{$z} > .row#{$r + 2}.col#{$c} { + opacity: $y; + } + } + } + } + + //////////////////////////////// + //UP + //x... + //x... + //x... + //x... + .house.row#{$r + 1}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r}.col#{$c} { + opacity: $y; + } + //RIGHT + //xxx. + //x.xx + //xx.x + //...x + .hs.row#{$r}.col#{$c - 3}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c - 2} { + opacity: $y; + } + } + } + } + //RIGHT + //xxx. + //x.xx + //xx.x + //...x + .hs.row#{$r}.col#{$c - 3}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c - 2} { + opacity: $y; + } + } + } + } + //RIGHT + //.... + //.xxx + //xx.x + //...x + .hs.row#{$r}.col#{$c - 2}:checked ~ .hs.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c - 3} { + opacity: $y; + } + } + } + //RIGHT + //.xxx + //.x.x + //xx.x + //...x + .hs.row#{$r}.col#{$c - 2}:checked ~ .hs.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c - 3} { + opacity: $y; + } + } + } + } + + .hs.row#{$r}.col#{$c}:checked ~ { + //RIGHT + //.... + //xxxx + //x..x + //...x + .hs.row#{$r + - + 1}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c - 3} { + opacity: $y; + } + } + //RIGHT + //.... + //.xxx + //.x.x + //...x + .hs.row#{$r + - + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c - 2} { + opacity: $y; + } + } + //RIGHT + //.xxx + //.x.x + //...x + //...x + .hs.row#{$r - 1}.col#{$c}:checked ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c - 2} { + opacity: $y; + } + } + } + //RIGHT + //.xxx + //.x.x + //.x.x + //...x + .hs.row#{$r + - + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c - 3} { + opacity: $y; + } + + div > div > #{$z} > .row#{$r}.col#{$c - 2} { + opacity: $y; + } + } + } + //RIGHT + //.xxx + //.x.x + //xx.x + //...x + .hs.row#{$r - 2}.col#{$c - 2}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c - 4} { + opacity: $y; + } + } + } + } + //RIGHT + //.xxx + //xx.x + //x..x + //...x + .hs.row#{$r + - + 1}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c - 3} { + opacity: $y; + } + } + } + //RIGHT + //xxxx + //x..x + //...x + //...x + .hs.row#{$r - 1}.col#{$c}:checked ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c - 3} { + opacity: $y; + } + } + } + //RIGHT + //xxxx + //x..x + //x..x + //...x + .hs.row#{$r + - + 1}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c - 3} { + opacity: $y; + } + } + } + } + //LEFT + //.... + //.... + //xxxx + //x... + .hs.row#{$r}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 1} { + opacity: $y; + } + //new bit + .hs.row#{$r}.col#{$c + 1}:checked ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 2}, + div > div > #{$z} > .row#{$r - 1}.col#{$c + 1} { + opacity: $y; + } + + .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c - 2}, + div > div > #{$z} > .row#{$r - 2}.col#{$c - 2} { + opacity: $y; + } + } + + .hs.row#{$r - 1}.col#{$c + 1}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 1}, + div > div > #{$z} > .row#{$r - 1}.col#{$c + 2}, + div > div > #{$z} > .row#{$r + 1}.col#{$c + 1} { + opacity: $y; + } + //silly down + .hs.row#{$r + - + 1}.col#{$c + + 3}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 3}:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 3} { + opacity: $y; + } + } + //backwards + .hs.row#{$r + - + 2}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c - 1} { + opacity: $y; + } + } + + .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c - 1}, + div > div > #{$z} > .row#{$r - 2}.col#{$c - 2} { + opacity: $y; + } + } + + .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c - 2} { + opacity: $y; + } + } + + .hs.row#{$r - 2}.col#{$c + 1}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 2}, + div > div > #{$z} > .row#{$r - 2}.col#{$c}, + div > div > #{$z} > .row#{$r - 1}.col#{$c} { + opacity: $y; + } + + .hs.row#{$r - 2}.col#{$c + 2}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 3} { + opacity: $y; + } + + .hs.row#{$r - 2}.col#{$c + 3}:checked ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c + 3} { + opacity: $y; + } + } + } + } + //> + .hs.row#{$r - 1}.col#{$c + 2}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 2}, + div > div > #{$z} > .row#{$r - 1}.col#{$c + 3} { + opacity: $y; + } + + .hs.row#{$r - 2}.col#{$c + 2}:checked ~, + .hs.row#{$r - 1}.col#{$c + 3}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 3} { + opacity: $y; + } + } + + .hs.row#{$r - 1}.col#{$c + 3}:checked ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 3} { + opacity: $y; + } + } + } + } + + .hs.row#{$r}.col#{$c + 2}:checked ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 3}, + div > div > #{$z} > .row#{$r - 1}.col#{$c + 2} { + opacity: $y; + } + + .hs.row#{$r - 1}.col#{$c + 2}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 2}, + div > div > #{$z} > .row#{$r - 1}.col#{$c + 3} { + opacity: $y; + } + + .hs.row#{$r - 1}.col#{$c + 3}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 3} { + opacity: $y; + } + } + + .hs.row#{$r + - + 2}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 2}:checked + ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c - 1} { + opacity: $y; + } + } + + .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 2}:checked + ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c - 1} { + opacity: $y; + } + } + + .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 2}:checked + ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c} { + opacity: $y; + } + } + + .hs.row#{$r - 2}.col#{$c + 2}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 3}, + div > div > #{$z} > .row#{$r - 2}.col#{$c + 1} { + opacity: $y; + } + } + } + + .hs.row#{$r}.col#{$c + 3}:checked ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c + 3} { + opacity: $y; + } + + .hs.row#{$r - 1}.col#{$c + 3}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 3} { + opacity: $y; + } + + .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 3}:checked + ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c} { + opacity: $y; + } + } + + .hs.row#{$r + - + 2}.col#{$c + + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 3}:checked + ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 1} { + opacity: $y; + } + } + + .hs.row#{$r - 2}.col#{$c + 3}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 2} { + opacity: $y; + } + } + } + } + } + } + } + //RIGHT + //.... + //.... + //xxxx + //...x + .hs.row#{$r}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r}.col#{$c - 1} { + opacity: $y; + } + } + + .hs.row#{$r}.col#{$c - 1}:checked ~ .hs.row#{$r}.col#{$c}:checked ~ { + .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 2}:checked + ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 2}:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 2} { + opacity: $y; + } + } + } + } + + .hs.row#{$r}.col#{$c - 1}:checked ~ .hs.row#{$r}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r}.col#{$c - 2}, + div > div > #{$z} > .row#{$r - 1}.col#{$c - 1} { + opacity: $y; + } + + .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 1}:checked + ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c + 2}, + div > div > #{$z} > .row#{$r}.col#{$c + 2} { + opacity: $y; + } + } + } + + .hs.row#{$r - 1}.col#{$c - 1}:checked ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c - 2}, + div > div > #{$z} > .row#{$r - 2}.col#{$c - 1} { + opacity: $y; + } + + .hs.row#{$r - 2}.col#{$c - 1}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c - 2}, + div > div > #{$z} > .row#{$r - 2}.col#{$c} { + opacity: $y; + } + + .hs.row#{$r - 2}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 1} { + opacity: $y; + } + + .hs.row#{$r - 2}.col#{$c + 1}:checked ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c + 1}, + div > div > #{$z} > .row#{$r - 2}.col#{$c + 2} { + opacity: $y; + } + + .hs.row#{$r - 2}.col#{$c + 2}:checked ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c + 2} { + opacity: $y; + } + } + } + } + } + } + } + //^ + .hs.row#{$r}.col#{$c + - + 3}:checked + ~ .hs.row#{$r}.col#{$c + - + 2}:checked + ~ .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .hs.row#{$r}.col#{$c}:checked + ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c - 3} { + opacity: $y; + } + + .hs.row#{$r - 1}.col#{$c - 3}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c - 3} { + opacity: $y; + } + + .hs.row#{$r - 2}.col#{$c - 3}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c - 2} { + opacity: $y; + } + + .hs.row#{$r - 2}.col#{$c - 2}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c - 1} { + opacity: $y; + } + + .hs.row#{$r - 2}.col#{$c - 1}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c} { + opacity: $y; + } + } + } + } + } + } + + .hs.row#{$r}.col#{$c + - + 2}:checked + ~ .hs.row#{$r}.col#{$c + - + 1}:checked + ~ .hs.row#{$r}.col#{$c}:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c - 3}, + div > div > #{$z} > .row#{$r - 1}.col#{$c - 2} { + opacity: $y; + } + + .hs.row#{$r - 1}.col#{$c - 2}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c - 2}, + div > div > #{$z} > .row#{$r - 1}.col#{$c - 3} { + opacity: $y; + } + + .hs.row#{$r - 2}.col#{$c - 2}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c - 3}, + div > div > #{$z} > .row#{$r - 2}.col#{$c - 1} { + opacity: $y; + } + + .hs.row#{$r - 2}.col#{$c - 1}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c} { + opacity: $y; + } + } + } + } + } + //^ + /////// + /////// + /////// + .hs.row#{$r}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c} { + opacity: $y; + } + //weirddown + //.... + //xxx. + //x.xx + //x... + .hs.row#{$r}.col#{$c + + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 2}:checked + ~ div + > div + > #{$z} + > .row#{$r}.col#{$c + + 3} { + opacity: $y; + } + //wierd down + //xxxx + //x..x + //x.xx + //x... + .hs.row#{$r}.col#{$c + + 3}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 3}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 3}:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 2} { + opacity: $y; + } + } + //wierd down + //xxx. + //x.x. + //x.xx + //x... + .hs.row#{$r}.col#{$c + + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ { + .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 2}:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 3} { + opacity: $y; + } + } + } + + .hs.row#{$r}.col#{$c + + 3}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 3}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 3}:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 2} { + opacity: $y; + } + } + //LEFT + //.... + //xxxx + //x... + //x... + .hs.row#{$r - 1}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c + 1} { + opacity: $y; + } + + .hs.row#{$r - 1}.col#{$c + 1}:checked ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c + 2}, + div > div > #{$z} > .row#{$r - 2}.col#{$c + 1} { + opacity: $y; + } + + .hs.row#{$r + - + 1}.col#{$c + + 3}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 3}:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 3} { + opacity: $y; + } + } + + .hs.row#{$r - 2}.col#{$c + 1}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 2} { + opacity: $y; + } + + .hs.row#{$r - 2}.col#{$c + 2}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 3} { + opacity: $y; + } + + .hs.row#{$r - 2}.col#{$c + 3}:checked ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c + 3} { + opacity: $y; + } + } + } + } + + .hs.row#{$r - 1}.col#{$c + 2}:checked ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c + 3}, + div > div > #{$z} > .row#{$r + 1}.col#{$c + 2}, + div > div > #{$z} > .row#{$r - 2}.col#{$c + 2} { + opacity: $y; + } + + .hs.row#{$r - 1}.col#{$c + 3}:checked ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c + 2}, + div > div > #{$z} > .row#{$r + 1}.col#{$c + 2}, + div > div > #{$z} > .row#{$r - 2}.col#{$c + 3} { + opacity: $y; + } + } + //DOWN + //.... + //xxx. + //x.x. + //x... + div > div > #{$z} > .row#{$r}.col#{$c + 2} { + opacity: $y; + } + //DOWN + //.... + //xxxx + //x..x + //x... + .hs.row#{$r + - + 1}.col#{$c + + 3}:checked + ~ div + > div + > #{$z} + > .row#{$r}.col#{$c + + 3} { + opacity: $y; + } + } + } + } + //RIGHT + //.... + //xxxx + //...x + //...x + .hs.row#{$r - 1}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c - 1} { + opacity: $y; + } + } + + .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c - 2}, + div > div > #{$z} > .row#{$r - 2}.col#{$c - 1} { + opacity: $y; + } + + .hs.row#{$r - 2}.col#{$c - 1}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c - 2} { + opacity: $y; + } + } + + .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c - 3} { + opacity: $y; + } + } + + .hs.row#{$r + - + 2}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c - 3} { + opacity: $y; + } + } + } + + .hs.row#{$r + - + 1}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + .hs.row#{$r + - + 2}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c - 3} { + opacity: $y; + } + } + } + /////// + .hs.row#{$r + - + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c - 3}, + div > div > #{$z} > .row#{$r - 2}.col#{$c - 2} { + opacity: $y; + } + } + + .hs.row#{$r + - + 1}.col#{$c + - + 3}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 1}.col#{$c}:checked + ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c - 3} { + opacity: $y; + } + } + ///////// + .hs.row#{$r - 1}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c} { + opacity: $y; + } + //wierd down + //xxx. + //x.x. + //x.x. + //x... + .hs.row#{$r + - + 1}.col#{$c + + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 2}:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 2}, + div > div > #{$z} > .row#{$r - 1}.col#{$c + 3} { + opacity: $y; + } + + .hs.row#{$r - 1}.col#{$c + 3}:checked ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 3} { + opacity: $y; + } + } + } + + .hs.row#{$r + - + 1}.col#{$c + + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 3}:checked + ~ { + .hs.row#{$r + - + 2}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 2}:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 3} { + opacity: $y; + } + } + } + //wierd down + //xxx. + //x.x. + //x.xx + //x... + .hs.row#{$r}.col#{$c + + 2}:checked + ~ .hs.row#{$r + - + 1}.col#{$c + + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 2}:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 3} { + opacity: $y; + } + } + //wierd down + //xxxx + //x..x + //x..x + //x... + .hs.row#{$r + - + 1}.col#{$c + + 3}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + + 3}:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c + 3} { + opacity: $y; + } + } + //LEFT + //xxxx + //x... + //x... + //x... + .hs.row#{$r - 2}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 1} { + opacity: $y; + } + + .hs.row#{$r - 2}.col#{$c + 1}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 2} { + opacity: $y; + } + + .hs.row#{$r - 2}.col#{$c + 2}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c + 3} { + opacity: $y; + } + //DOWN + //xxx. + //x.x. + //x... + //x... + div > div > #{$z} > .row#{$r - 1}.col#{$c + 2} { + opacity: $y; + } + //DOWN + //xxxx + //x..x + //x... + //x... + .hs.row#{$r - 2}.col#{$c + 3}:checked ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c + 3} { + opacity: $y; + } + } + } + } + } + //RIGHT + //xxxx + //...x + //...x + //...x + .hs.row#{$r - 2}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c - 1} { + opacity: $y; + } + } + + .hs.row#{$r + - + 2}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c - 2} { + opacity: $y; + } + } + + .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c - 2} { + opacity: $y; + } + } + + .hs.row#{$r + - + 2}.col#{$c + - + 2}:checked + ~ .hs.row#{$r + - + 2}.col#{$c + - + 1}:checked + ~ .hs.row#{$r + - + 2}.col#{$c}:checked + ~ { + div > div > #{$z} > .row#{$r - 2}.col#{$c - 3} { + opacity: $y; + } + } + //DOWN + //xxxx + //x..x + //x..x + //x... + .hs.row#{$r - 2}.col#{$c}:checked ~ { + div > div > #{$z} > .row#{$r - 1}.col#{$c} { + opacity: $y; + } + } + + .hs.row#{$r + - + 1}.col#{$c}:checked + ~ .hs.row#{$r + - + 2}.col4:checked + ~ { + div > div > #{$z} > .row#{$r}.col#{$c} { + opacity: $y; + } + } + } + } + } + } + } +} +// ## lights +$row: 1, 2, 3, 4; + +@each $i in $row { + $col: 1, 2, 3, 4; + + @each $x in $col { + .hs.row#{$i}.col#{$x}:checked ~ { + div > div > house > .row#{$i}.col#{$x} { + //window + &.col#{random(4)} > i:nth-of-type(4) { + //window + background: $sun; + box-shadow: inset 0 0 0 0.5rem $ls, + // + inset + 0 + 0 + 0.5rem + $ds, + // + inset + 0 + 0 + 0 + 0.5rem + $tre2, + // + inset + 0 + 0 + 1rem + 1rem + $ds, + // + inset + 1rem + 0 + 0 + $r1, + // + inset -1.25rem + 0 + 0 + $r1, + // + inset + 0 -2rem + 0 + yellow, + // + inset + 0 -3.5rem + 0 + #ffa200, + // + 0 + 0 + 2rem + yellow; + + &:after, + &:before { + background: $tre2; + } + } + } + } + } +} + +.lh { + pointer-events: none; + perspective: 30rem; + perspective-origin: 50% -5rem; + transform: translate3d(0, 0, -100rem) scale(0); + opacity: 0; +} + +.hs.house.row4.col1:not(:checked) + ~ .hs.house.row4.col2:checked + ~ .hs.house.row4.col3:not(:checked) + ~ .hs.house.row3.col1:not(:checked) + ~ .hs.shed.row3.col2:checked + ~ .hs.house.row3.col3:not(:checked) + ~ .hs.house.row2.col1:not(:checked) + ~ .hs.house.row2.col2:checked + ~ .hs.house.row2.col3:not(:checked) + ~ .hs.house.row1.col1:not(:checked) + ~ .hs.shed.row1.col2:checked + ~ .hs.house.row1.col3:not(:checked) + ~ { + div.lh { + transform: translate3d(0, 0, -100rem) scale(1); + /* animation: lightson $timer linear infinite;*/ + light { + top: -12rem; + left: -6.25rem; + transform: scaleX(3) rotateY(0); + /* animation: light 8s linear infinite;*/ + filter: blur(0.1rem); + opacity: 0.5; + + &, + &:before, + &:after { + background: linear-gradient(to right, $none, rgba(#fff466, 0.5), $none); + width: 100%; + height: 5rem; + } + + &:before { + transform: rotate(15deg) rotateY(-5deg); + } + + &:after { + transform: rotate(-15deg) rotateY(5deg); + } + } + + lens { + top: -12rem; + left: -6.25rem; + width: 100%; + height: 5rem; + + &:before, + &:after { + height: 5rem; + border-radius: 50%; + right: 0; + margin: auto; + } + + &:before { + background: linear-gradient(to right, $none, rgba($light, 0.5), $none); + width: 100%; + transform: scaleX(3) rotateY(0); + opacity: 0.25; + filter: blur(0.1rem); + } + + &:after { + width: 5rem; + background: radial-gradient($light, $none); + opacity: 0.75; + box-shadow: 60rem 0 15rem $light, -60rem 0 15rem $light, 0 0 3rem $light, + inset 0 0 0 $light; + } + } + } +} + +div.lh { + animation: lightson $timer linear infinite; + + light { + animation: light 8s linear infinite; + } + + lens { + &:before { + animation: light 8s linear infinite; + } + + &:after { + animation: light2 8s ease-in-out infinite; + } + } +} + +@keyframes light { + 100% { + transform: scaleX(3) rotateY(-360deg); + } +} + +@keyframes lightson { + 20%, + 80% { + opacity: 0; + } + + 25%, + 75% { + opacity: 1; + } +} + +@keyframes light2 { + 22%, + 27%, + 72%, + 77% { + box-shadow: 0rem 0 15rem $light, 0rem 0 15rem $light, 0 0 3rem $light, + inset 0 0 0 0 $light; + } + + 24%, + 74% { + box-shadow: 0rem 0 15rem $light, 0rem 0 15rem $light, + 0 0 5rem 40rem rgba($light, 0.25), inset 0 0 0 2.5rem $light; + } + + 50% { + box-shadow: -60rem 0 15rem $light, 60rem 0 15rem $light, 0 0 3rem $light, + inset 0 0 0 0 $light; + } +} +// ## gfx +#graphics { + top: 1rem; + left: auto; + right: 1rem; + font-family: Telefon, Sans-Serif; + font-size: 1.4rem; + z-index: 1000; + letter-spacing: 0.1rem; + color: #fff; + line-height: 1.5; + max-height: 2.5rem; + overflow: hidden; + + label { + display: flex; + align-content: center; + justify-content: flex-end; + gap: 0.5rem; + padding: 0.5rem; + border-radius: 1rem; + cursor: pointer; + transition: box-shadow 0.2s ease-in-out; + box-shadow: 0 0 0 1rem $none, inset 0 0 0 0 rgba(#fff, 0.2); + + &:not(:nth-of-type(1)):hover { + box-shadow: 0 0 0 0 rgba(#fff, 0.2), inset 0 0 0 2rem rgba(#fff, 0.2); + } + } + + * { + position: static; + } +} + +#gfxmenu:checked ~ #graphics { + max-height: 10rem; +} + +#poor:checked ~ colour > div > div > house > label > i:nth-of-type(1), +#poor:checked ~ colour > div > div > shed > label > i:nth-of-type(1), +#poor:checked ~ colour > div > lens, +#poor:checked ~ colour > water:before, +#poor:checked ~ colour water:after { + display: none; +} + +#poor:checked ~ colour > div > div.main { + -webkit-box-reflect: none; +} + +#poor:checked ~ sky > time { + opacity: 0; +} + +#poor:checked ~ text > welldone, +#poor:checked ~ text > gameover { + box-shadow: none; +} + +#good:checked ~ x > [for="good"], +#poor:checked ~ x > [for="poor"] { + box-shadow: 0 0 0 0 rgba(#fff, 0.1), inset 0 0 0 2rem rgba(#fff, 0.1); + + &:before { + content: "โœ“"; + position: static; + } +} + +#poor:checked ~ colour > div > div > shed > label, +#poor:checked ~ colour > div > div > house > label { + &:after, + & *:after { + animation: none !important; + } + + &:before, + & *:before { + animation: none !important; + } +} + +[for="gfxmenu"]:after { + border-bottom: 0.1rem solid #fff; + border-right: 0.1rem solid #fff; + transform: rotate(45deg) scaleY(1); + position: relative; + width: 0.6rem; + height: 0.6rem; + margin-left: 0.4rem; + top: 0.5rem; + transition: all 0.2s ease-in-out; +} + +#gfxmenu:checked ~ x > [for="gfxmenu"]:after { + transform: rotate(-45deg) scaleY(-1); +} +script { + display: none; +} diff --git a/a-tribute-to-manfred-mohrsimplex-noise/README.markdown b/a-tribute-to-manfred-mohrsimplex-noise/README.markdown new file mode 100644 index 0000000..45ba8b4 --- /dev/null +++ b/a-tribute-to-manfred-mohrsimplex-noise/README.markdown @@ -0,0 +1,16 @@ +# A Tribute to Manfred Mohr - Simplex Noise + +A Pen created on CodePen.io. Original URL: [https://codepen.io/DonKarlssonSan/pen/abNjZaQ](https://codepen.io/DonKarlssonSan/pen/abNjZaQ). + +Click to generate a new pattern! + +The pattern is based on simplex noise. + +Also check the sibling Pen based on randomness: https://codepen.io/DonKarlssonSan/pen/poyZbbR + +I was inspired by this image by Manfred Mohr: +https://twitter.com/manfredemohr/status/1305650441687101440?s=20 + +"Triangles Formed from Random Point in Squares" + +http://emohr.com/sc69-73/vfile_triangles1972_73.html diff --git a/a-tribute-to-manfred-mohrsimplex-noise/dist/index.html b/a-tribute-to-manfred-mohrsimplex-noise/dist/index.html new file mode 100644 index 0000000..7d18bb8 --- /dev/null +++ b/a-tribute-to-manfred-mohrsimplex-noise/dist/index.html @@ -0,0 +1,16 @@ + + + + + CodePen - A Tribute to Manfred Mohr - Simplex Noise + + + + + + + + + + + diff --git a/a-tribute-to-manfred-mohrsimplex-noise/dist/script.js b/a-tribute-to-manfred-mohrsimplex-noise/dist/script.js new file mode 100644 index 0000000..c67e734 --- /dev/null +++ b/a-tribute-to-manfred-mohrsimplex-noise/dist/script.js @@ -0,0 +1,86 @@ +/* + Johan Karlsson, 2020 + https://twitter.com/DonKarlssonSan + MIT License, see Details View +*/ +let canvas; +let ctx; +let w, h; +let simplex; + +function setup() { + canvas = document.querySelector("#canvas"); + ctx = canvas.getContext("2d"); + resize(); + window.addEventListener("resize", () => { + resize(); + draw(); + }); + canvas.addEventListener("click", draw); +} + +function resize() { + w = canvas.width = window.innerWidth; + h = canvas.height = window.innerHeight; +} + +function fillTriangle(x1, y1, x2, y2, x3, y3) { + ctx.beginPath(); + ctx.moveTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.lineTo(x3, y3); + ctx.closePath(); + ctx.fill(); +} + +function drawSquare(x, y, size) { + let zoom = 600; + let angle = simplex.noise2D(x / zoom, y / zoom) * Math.PI * 2; + let xc = Math.cos(angle) * size / 2 + x + size / 2; + let yc = Math.sin(angle) * size / 2 + y + size / 2; + ctx.fillStyle = "darkgray"; + fillTriangle(x, y, x, y + size, xc, yc); + ctx.fillStyle = "gray"; + fillTriangle(x, y + size, x + size, y + size, xc, yc); + ctx.fillStyle = "black"; + fillTriangle(x + size, y + size, x + size, y, xc, yc); + ctx.fillStyle = "beige"; + fillTriangle(x + size, y, x, y, xc, yc); + ctx.strokeRect(x, y, size, size); +} + +function drawPattern() { + let min = Math.min(w, h) * 0.75; + let steps = 16; + let size = Math.round(min / steps); + let x0 = Math.round((w - min) / 2); + let y0 = Math.round((h - min) / 2); + + ctx.shadowColor = "black"; + ctx.shadowBlur = 15; + ctx.fillStyle = "black"; + ctx.fillRect(x0 - 2, y0 - 2, size * steps + 4, size * steps + 4); + ctx.shadowBlur = 0; + + for(let col = 0; col < steps; col++) { + for(let row = 0; row < steps; row++) { + let x = size * col + x0; + let y = size * row + y0; + drawSquare(x, y, size); + } + } +} + +function draw() { + console.clear(); + simplex = new SimplexNoise(); + ctx.fillStyle = "white"; + ctx.fillRect(0, 0, w, h); + ctx.fillStyle = "black"; + let max = Math.max(w, h); + drawSquare(0, 0, max); + drawPattern(); +} + +setup(); +draw(); \ No newline at end of file diff --git a/a-tribute-to-manfred-mohrsimplex-noise/dist/style.css b/a-tribute-to-manfred-mohrsimplex-noise/dist/style.css new file mode 100644 index 0000000..4567039 --- /dev/null +++ b/a-tribute-to-manfred-mohrsimplex-noise/dist/style.css @@ -0,0 +1,8 @@ +body, html { + margin: 0; +} + +canvas { + display: block; + cursor: pointer; +} \ No newline at end of file diff --git a/a-tribute-to-manfred-mohrsimplex-noise/license.txt b/a-tribute-to-manfred-mohrsimplex-noise/license.txt new file mode 100644 index 0000000..898e976 --- /dev/null +++ b/a-tribute-to-manfred-mohrsimplex-noise/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Johan Karlsson (https://codepen.io/DonKarlssonSan/pen/abNjZaQ) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/a-tribute-to-manfred-mohrsimplex-noise/src/index.html b/a-tribute-to-manfred-mohrsimplex-noise/src/index.html new file mode 100644 index 0000000..30325df --- /dev/null +++ b/a-tribute-to-manfred-mohrsimplex-noise/src/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/a-tribute-to-manfred-mohrsimplex-noise/src/script.js b/a-tribute-to-manfred-mohrsimplex-noise/src/script.js new file mode 100644 index 0000000..c67e734 --- /dev/null +++ b/a-tribute-to-manfred-mohrsimplex-noise/src/script.js @@ -0,0 +1,86 @@ +/* + Johan Karlsson, 2020 + https://twitter.com/DonKarlssonSan + MIT License, see Details View +*/ +let canvas; +let ctx; +let w, h; +let simplex; + +function setup() { + canvas = document.querySelector("#canvas"); + ctx = canvas.getContext("2d"); + resize(); + window.addEventListener("resize", () => { + resize(); + draw(); + }); + canvas.addEventListener("click", draw); +} + +function resize() { + w = canvas.width = window.innerWidth; + h = canvas.height = window.innerHeight; +} + +function fillTriangle(x1, y1, x2, y2, x3, y3) { + ctx.beginPath(); + ctx.moveTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.lineTo(x3, y3); + ctx.closePath(); + ctx.fill(); +} + +function drawSquare(x, y, size) { + let zoom = 600; + let angle = simplex.noise2D(x / zoom, y / zoom) * Math.PI * 2; + let xc = Math.cos(angle) * size / 2 + x + size / 2; + let yc = Math.sin(angle) * size / 2 + y + size / 2; + ctx.fillStyle = "darkgray"; + fillTriangle(x, y, x, y + size, xc, yc); + ctx.fillStyle = "gray"; + fillTriangle(x, y + size, x + size, y + size, xc, yc); + ctx.fillStyle = "black"; + fillTriangle(x + size, y + size, x + size, y, xc, yc); + ctx.fillStyle = "beige"; + fillTriangle(x + size, y, x, y, xc, yc); + ctx.strokeRect(x, y, size, size); +} + +function drawPattern() { + let min = Math.min(w, h) * 0.75; + let steps = 16; + let size = Math.round(min / steps); + let x0 = Math.round((w - min) / 2); + let y0 = Math.round((h - min) / 2); + + ctx.shadowColor = "black"; + ctx.shadowBlur = 15; + ctx.fillStyle = "black"; + ctx.fillRect(x0 - 2, y0 - 2, size * steps + 4, size * steps + 4); + ctx.shadowBlur = 0; + + for(let col = 0; col < steps; col++) { + for(let row = 0; row < steps; row++) { + let x = size * col + x0; + let y = size * row + y0; + drawSquare(x, y, size); + } + } +} + +function draw() { + console.clear(); + simplex = new SimplexNoise(); + ctx.fillStyle = "white"; + ctx.fillRect(0, 0, w, h); + ctx.fillStyle = "black"; + let max = Math.max(w, h); + drawSquare(0, 0, max); + drawPattern(); +} + +setup(); +draw(); \ No newline at end of file diff --git a/a-tribute-to-manfred-mohrsimplex-noise/src/style.css b/a-tribute-to-manfred-mohrsimplex-noise/src/style.css new file mode 100644 index 0000000..4567039 --- /dev/null +++ b/a-tribute-to-manfred-mohrsimplex-noise/src/style.css @@ -0,0 +1,8 @@ +body, html { + margin: 0; +} + +canvas { + display: block; + cursor: pointer; +} \ No newline at end of file diff --git a/academy/README.markdown b/academy/README.markdown new file mode 100644 index 0000000..7a60927 --- /dev/null +++ b/academy/README.markdown @@ -0,0 +1,5 @@ +# Academy + +A Pen created on CodePen.io. Original URL: [https://codepen.io/limitedunlimited/pen/pabERa](https://codepen.io/limitedunlimited/pen/pabERa). + +Falling leafs triggered by an event listener diff --git a/academy/dist/index.html b/academy/dist/index.html new file mode 100644 index 0000000..c08a619 --- /dev/null +++ b/academy/dist/index.html @@ -0,0 +1,23 @@ + + + + + CodePen - Academy + + + + + + +
+ + + +
Scroll +
+
+ + + + + diff --git a/academy/dist/script.js b/academy/dist/script.js new file mode 100644 index 0000000..696e789 --- /dev/null +++ b/academy/dist/script.js @@ -0,0 +1,168 @@ +//svg name space +const ns = "http://www.w3.org/2000/svg" + +//Create new svg group and place in the dom for copies +const svg = document.getElementsByTagName('svg')[0] +const copyGroup = document.createElementNS(ns,'g') +copyGroup.setAttribute('id','copy'); +svg.appendChild(copyGroup) + + +const header = document.querySelector('header'); +const header_height = getComputedStyle(header).height.split('px')[0]; +console.log(header_height); + +function changeArrow(direction){ + const arrow = document.querySelector('.scroll-direction'); + console.log(arrow) + arrow.setAttribute('data-direction', direction) +} + +function changeDirection(){ + if(window.pageYOffset > header_height){ + changeArrow("โ†‘") + } + if(window.pageYOffset < header_height){ + changeArrow("โ†“") + } +} + + +console.log(window.pageYOffset) + +// Array helper for leafPicker function. 'collection' key matches svg data attribute, 'leafs' key creates a +const leafPickers = [ + {leafs:"orangeLeafs", + collection: "Orange"}, + {leafs:"purpleLeafs", + collection:"Purple"}, + {leafs:"redLeafs", + collection: "Red"}, + {leafs:"pinkLeafs", + collection:"Pink"}, + {leafs:"blueLeafs", + collection:"blue"}, + {leafs:"greenLeafs", + collection:"green"} +] + +// Function to copy leafs to a groupd tag in the dom +let leafCopy = []; +function leafPicker(collection){ + const leafs = document.querySelectorAll(`[data-name="${collection}"]`) + for(const leaf of leafs){ + leafCopy.push(leaf.cloneNode(true)) + } +} + + + +for(const leafs of leafPickers){ + leafPicker(leafs.collection) +} + +console.log(leafCopy) + +function makeCopies(){ +for(const copies of leafCopy){ + copyGroup.appendChild(copies) + +const leafCopies = Array.from(document.getElementById('copy').querySelectorAll('[data-name]')) + +for(const [index, leafCopy] of leafCopies.entries()){ + leafCopy.setAttribute('id' , `copy-${index}`) +} +} +} + +makeCopies() +const leafCopies = Array.from(document.getElementById('copy').querySelectorAll('[data-name]')) + + let spring = {}, + summer = {}, + autumn = {}; + +function shuffle(array) { + var counter = array.length, temp, index; + + // While there are elements in the array + while (counter--) { + // Pick a random index + index = (Math.random() * counter) | 0; + + // And swap the last element with it + temp = array[counter]; + array[counter] = array[index]; + array[index] = temp; + } + + return array; +} + +spring = shuffle(leafCopies); +spring.length = 20; // get 4 random elements + + +summer = shuffle(leafCopies); +summer.length = 40; + + + function debounce(func, wait = 20, immediate = true) { + var timeout; + return function() { + var context = this, args = arguments; + var later = function() { + timeout = null; + if (!immediate) func.apply(context, args); + }; + var callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) func.apply(context, args); + }; + } + +// function checkSlide(){ +// changeDirection() +// console.log(window.scrollY) +// } +changeDirection() + + +const summerFall = anime({ + targets : summer, + easing: 'easeInOutQuint', + opacity : 0, + translateY: 200, + duration: function(el,i,l){ + return 2500 + (i * 100) + }, + autoplay : false + +}) + +function playAnimation(){ + +if (window.pageYOffset < 10) + { + summerFall.play() + summerFall.restart() + }; +}; + + +document.addEventListener("touchmove", ScrollStart, false); +document.addEventListener("scroll", Scroll, false); + +function ScrollStart() { + debounce(playAnimation,10) +} + +function Scroll() { + //end of scroll event for iOS + //and + debounce(playAnimation,10) + //start/end of scroll event for other browsers +} + +window.addEventListener('scroll' , debounce(playAnimation,10)) \ No newline at end of file diff --git a/academy/dist/style.css b/academy/dist/style.css new file mode 100644 index 0000000..275477e --- /dev/null +++ b/academy/dist/style.css @@ -0,0 +1,45 @@ +body { + height: 300vh; +} + +:root { + --width: 100%; + --bg: #efefef; +} + +.scroll-direction { + font-size: 3rem; +} + +.scroll-direction:after { + content: attr(data-direction); +} + +header { + position: fixed; + width: var(--width); + margin: 0; + background: var(--bg); + padding: 1rem; + height: 100vh; +} + +.logo { + position: absolute; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + height: 30rem; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +main, article { + height: 100%; +} + +.wrapper { + margin: 0 auto; + max-width: var(--width); +} \ No newline at end of file diff --git a/academy/license.txt b/academy/license.txt new file mode 100644 index 0000000..3631c0c --- /dev/null +++ b/academy/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by James Grubb (https://codepen.io/limitedunlimited/pen/pabERa) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/academy/src/index.html b/academy/src/index.html new file mode 100644 index 0000000..8a7aae9 --- /dev/null +++ b/academy/src/index.html @@ -0,0 +1,7 @@ +
+ + + +
Scroll +
+
\ No newline at end of file diff --git a/academy/src/script.js b/academy/src/script.js new file mode 100644 index 0000000..521193f --- /dev/null +++ b/academy/src/script.js @@ -0,0 +1,169 @@ + +//svg name space +const ns = "http://www.w3.org/2000/svg" + +//Create new svg group and place in the dom for copies +const svg = document.getElementsByTagName('svg')[0] +const copyGroup = document.createElementNS(ns,'g') +copyGroup.setAttribute('id','copy'); +svg.appendChild(copyGroup) + + +const header = document.querySelector('header'); +const header_height = getComputedStyle(header).height.split('px')[0]; +console.log(header_height); + +function changeArrow(direction){ + const arrow = document.querySelector('.scroll-direction'); + console.log(arrow) + arrow.setAttribute('data-direction', direction) +} + +function changeDirection(){ + if(window.pageYOffset > header_height){ + changeArrow("โ†‘") + } + if(window.pageYOffset < header_height){ + changeArrow("โ†“") + } +} + + +console.log(window.pageYOffset) + +// Array helper for leafPicker function. 'collection' key matches svg data attribute, 'leafs' key creates a +const leafPickers = [ + {leafs:"orangeLeafs", + collection: "Orange"}, + {leafs:"purpleLeafs", + collection:"Purple"}, + {leafs:"redLeafs", + collection: "Red"}, + {leafs:"pinkLeafs", + collection:"Pink"}, + {leafs:"blueLeafs", + collection:"blue"}, + {leafs:"greenLeafs", + collection:"green"} +] + +// Function to copy leafs to a groupd tag in the dom +let leafCopy = []; +function leafPicker(collection){ + const leafs = document.querySelectorAll(`[data-name="${collection}"]`) + for(const leaf of leafs){ + leafCopy.push(leaf.cloneNode(true)) + } +} + + + +for(const leafs of leafPickers){ + leafPicker(leafs.collection) +} + +console.log(leafCopy) + +function makeCopies(){ +for(const copies of leafCopy){ + copyGroup.appendChild(copies) + +const leafCopies = Array.from(document.getElementById('copy').querySelectorAll('[data-name]')) + +for(const [index, leafCopy] of leafCopies.entries()){ + leafCopy.setAttribute('id' , `copy-${index}`) +} +} +} + +makeCopies() +const leafCopies = Array.from(document.getElementById('copy').querySelectorAll('[data-name]')) + + let spring = {}, + summer = {}, + autumn = {}; + +function shuffle(array) { + var counter = array.length, temp, index; + + // While there are elements in the array + while (counter--) { + // Pick a random index + index = (Math.random() * counter) | 0; + + // And swap the last element with it + temp = array[counter]; + array[counter] = array[index]; + array[index] = temp; + } + + return array; +} + +spring = shuffle(leafCopies); +spring.length = 20; // get 4 random elements + + +summer = shuffle(leafCopies); +summer.length = 40; + + + function debounce(func, wait = 20, immediate = true) { + var timeout; + return function() { + var context = this, args = arguments; + var later = function() { + timeout = null; + if (!immediate) func.apply(context, args); + }; + var callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) func.apply(context, args); + }; + } + +// function checkSlide(){ +// changeDirection() +// console.log(window.scrollY) +// } +changeDirection() + + +const summerFall = anime({ + targets : summer, + easing: 'easeInOutQuint', + opacity : 0, + translateY: 200, + duration: function(el,i,l){ + return 2500 + (i * 100) + }, + autoplay : false + +}) + +function playAnimation(){ + +if (window.pageYOffset < 10) + { + summerFall.play() + summerFall.restart() + }; +}; + + +document.addEventListener("touchmove", ScrollStart, false); +document.addEventListener("scroll", Scroll, false); + +function ScrollStart() { + debounce(playAnimation,10) +} + +function Scroll() { + //end of scroll event for iOS + //and + debounce(playAnimation,10) + //start/end of scroll event for other browsers +} + +window.addEventListener('scroll' , debounce(playAnimation,10)) \ No newline at end of file diff --git a/academy/src/style.scss b/academy/src/style.scss new file mode 100644 index 0000000..6c2c9f9 --- /dev/null +++ b/academy/src/style.scss @@ -0,0 +1,52 @@ +$colors: #1d1d1b, #e8336e, #007036, #bc0b3b, #823783, #ec6608,#ec6608,#1d1d1b, #e8336e, #007036, #bc0b3b, #823783, #ec6608,#ec6608,#1d1d1b, #e8336e, #007036, #bc0b3b, #823783, #ec6608; + +body{ + height: 300vh +} + +:root{ + --width : 100%; + --bg : #efefef; +} + +.scroll-direction{ + font-size: 3rem; + +} +.scroll-direction:after{ + content: attr(data-direction); + +} + +header{ + position: fixed; + width: var(--width); + margin: 0; + background: var(--bg); + padding: 1rem; + height: 100vh; + + +} + +.logo{ + position: absolute; + transform: translate3d(0,0,0); + height: 30rem; + top:50%; + left:50%; + transform: translate(-50%, -50%) + +} + +main, article{ + height: 100%; + +} + +.wrapper{ + margin: 0 auto; + max-width: var(--width); + +} + diff --git a/accessibility-to-a11y/README.markdown b/accessibility-to-a11y/README.markdown new file mode 100644 index 0000000..c7229bf --- /dev/null +++ b/accessibility-to-a11y/README.markdown @@ -0,0 +1,6 @@ +# Accessibility to a11y + _A Pen created at CodePen.io. Original URL: [https://codepen.io/alvaromontoro/pen/NJMMaL](https://codepen.io/alvaromontoro/pen/NJMMaL). + + Animation that shows how accessibility turns into a11y. + +This pen uses animations on pseudo elements, so it will not work on IE, Edge, or iOS. \ No newline at end of file diff --git a/accessibility-to-a11y/dist/index.html b/accessibility-to-a11y/dist/index.html new file mode 100644 index 0000000..1f36fd1 --- /dev/null +++ b/accessibility-to-a11y/dist/index.html @@ -0,0 +1,16 @@ + + + + + Accessibility to a11y + + + + +
+ accessibility +
+ + + + \ No newline at end of file diff --git a/accessibility-to-a11y/dist/style.css b/accessibility-to-a11y/dist/style.css new file mode 100644 index 0000000..a313094 --- /dev/null +++ b/accessibility-to-a11y/dist/style.css @@ -0,0 +1,201 @@ +@keyframes colorize { + 0% { + color: #909; + } + 100% { + color: #e00; + } +} +@keyframes fadeOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} +@keyframes removeLetters { + 0% { + max-width: 8vw; + } + 100% { + max-width: 0; + } +} +@keyframes addMargin { + 0% { + margin: 0 0; + } + 100% { + margin: 0 5vw; + } +} +@keyframes numbersUp { + 0% { + transform: translate(-50%, 100%); + } + 100% { + transform: translate(-50%, -3%); + } +} +@keyframes lineGrow { + 0% { + width: 0%; + } + 100% { + width: 84%; + } +} +@keyframes numberUpdate { + 0% { + content: ""; + } + 9% { + content: "1"; + } + 18% { + content: "2"; + } + 27% { + content: "3"; + } + 36% { + content: "4"; + } + 45% { + content: "5"; + } + 54% { + content: "6"; + } + 63% { + content: "7"; + } + 72% { + content: "8"; + } + 81% { + content: "9"; + } + 90% { + content: "10"; + } + 100% { + content: "11"; + } +} +div { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + white-space: nowrap; +} + +div::before { + content: ""; + position: absolute; + bottom: 0; + width: 0%; + left: 50%; + border-bottom: 0.5vw solid #505; + transform: translate(-50%, 50%); + animation: lineGrow 1s, fadeOut 1s linear; + animation-delay: 1s, 8s; + animation-fill-mode: forwards; +} + +div::after { + content: ""; + font-size: 8vw; + font-family: 'Courier', 'Courier New', 'Courier New Sans', sans-serif; + color: #909; + position: absolute; + bottom: 0; + left: 50%; + transform: translate(-50%, 100%); + animation: numberUpdate 5.5s steps(11, end), numbersUp 0.75s linear; + animation-delay: 2s, 9s; + animation-fill-mode: forwards; +} + +span { + font-size: 8vw; + font-family: 'Courier', 'Courier New', 'Courier New Sans', sans-serif; + color: #909; + display: inline-block; + overflow: hidden; + max-width: 8vw; +} + +div span:nth-child(2) { + animation: colorize 1s, fadeOut 1s linear, removeLetters 0.75s linear; + animation-delay: 2s, 8s, 9s; + animation-fill-mode: forwards; +} + +div span:nth-child(3) { + animation: colorize 1s, fadeOut 1s linear, removeLetters 0.75s linear; + animation-delay: 2.5s, 8s, 9s; + animation-fill-mode: forwards; +} + +div span:nth-child(4) { + animation: colorize 1s, fadeOut 1s linear, removeLetters 0.75s linear; + animation-delay: 3s, 8s, 9s; + animation-fill-mode: forwards; +} + +div span:nth-child(5) { + animation: colorize 1s, fadeOut 1s linear, removeLetters 0.75s linear; + animation-delay: 3.5s, 8s, 9s; + animation-fill-mode: forwards; +} + +div span:nth-child(6) { + animation: colorize 1s, fadeOut 1s linear, removeLetters 0.75s linear; + animation-delay: 4s, 8s, 9s; + animation-fill-mode: forwards; +} + +div span:nth-child(7) { + animation: colorize 1s, fadeOut 1s linear, removeLetters 0.75s linear; + animation-delay: 4.5s, 8s, 9s; + animation-fill-mode: forwards; +} + +div span:nth-child(8) { + animation: colorize 1s, fadeOut 1s linear, removeLetters 0.75s linear; + animation-delay: 5s, 8s, 9s; + animation-fill-mode: forwards; +} + +div span:nth-child(9) { + animation: colorize 1s, fadeOut 1s linear, removeLetters 0.75s linear; + animation-delay: 5.5s, 8s, 9s; + animation-fill-mode: forwards; +} + +div span:nth-child(10) { + animation: colorize 1s, fadeOut 1s linear, removeLetters 0.75s linear; + animation-delay: 6s, 8s, 9s; + animation-fill-mode: forwards; +} + +div span:nth-child(11) { + animation: colorize 1s, fadeOut 1s linear, removeLetters 0.75s linear; + animation-delay: 6.5s, 8s, 9s; + animation-fill-mode: forwards; +} + +div span:nth-child(12) { + animation: colorize 1s, fadeOut 1s linear, removeLetters 0.75s linear; + animation-delay: 7s, 8s, 9s; + animation-fill-mode: forwards; +} + +div span:first-child, div span:last-child { + animation: addMargin 0.5s; + animation-delay: 9s; + animation-fill-mode: forwards; +} diff --git a/accessibility-to-a11y/license.txt b/accessibility-to-a11y/license.txt new file mode 100644 index 0000000..c802087 --- /dev/null +++ b/accessibility-to-a11y/license.txt @@ -0,0 +1,13 @@ + + + + diff --git a/accessibility-to-a11y/src/index.html b/accessibility-to-a11y/src/index.html new file mode 100644 index 0000000..b4375b9 --- /dev/null +++ b/accessibility-to-a11y/src/index.html @@ -0,0 +1,3 @@ +
+ accessibility +
\ No newline at end of file diff --git a/accessibility-to-a11y/src/style.scss b/accessibility-to-a11y/src/style.scss new file mode 100644 index 0000000..6e71b37 --- /dev/null +++ b/accessibility-to-a11y/src/style.scss @@ -0,0 +1,95 @@ +@keyframes colorize { + 0% { color: #909; } + 100% { color: #e00; } +} + +@keyframes fadeOut { + 0% { opacity: 1; } + 100% { opacity: 0; } +} + +@keyframes removeLetters { + 0% { max-width: 8vw; } + 100% { max-width: 0; } +} + +@keyframes addMargin { + 0% { margin: 0 0; } + 100% { margin: 0 5vw; } +} + +@keyframes numbersUp { + 0% { transform: translate(-50%, 100%); } + 100% { transform: translate(-50%, -3%); } +} + +@keyframes lineGrow { + 0% { width: 0%; } + 100% { width: 84%; } +} + +@keyframes numberUpdate { + 0% { content: ""; } + @for $i from 1 through 10 { + #{$i * 9}% { content: "#{$i}"; } + } + 100% { content: "11"; } +} + +div { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + white-space: nowrap; +} + +div::before { + content: ""; + position: absolute; + bottom: 0; + width: 0%; + left: 50%; + border-bottom: 0.5vw solid #505; + transform: translate(-50%, 50%); + animation: lineGrow 1s, fadeOut 1s linear; + animation-delay: 1s, 8s; + animation-fill-mode: forwards; +} + +div::after { + content: ""; + font-size: 8vw; + font-family: 'Courier', 'Courier New', 'Courier New Sans', sans-serif; + color: #909; + position: absolute; + bottom: 0; + left: 50%; + transform: translate(-50%, 100%); + animation: numberUpdate 5.5s steps(11,end), numbersUp 0.75s linear; + animation-delay: 2s, 9s; + animation-fill-mode: forwards; +} + +span { + font-size: 8vw; + font-family: 'Courier', 'Courier New', 'Courier New Sans', sans-serif; + color: #909; + display: inline-block; + overflow: hidden; + max-width: 8vw; +} + +@for $i from 2 through 12 { + div span:nth-child(#{$i}) { + animation: colorize 1s, fadeOut 1s linear, removeLetters 0.75s linear; + animation-delay: #{$i/2 + 1}s, 8s, 9s; + animation-fill-mode: forwards; + } +} + +div span:first-child, div span:last-child { + animation: addMargin 0.5s; + animation-delay: 9s; + animation-fill-mode: forwards; +} \ No newline at end of file diff --git a/acrobatic-preloader/README.markdown b/acrobatic-preloader/README.markdown new file mode 100644 index 0000000..db60fc9 --- /dev/null +++ b/acrobatic-preloader/README.markdown @@ -0,0 +1,5 @@ +# Acrobatic Preloader + +A Pen created on CodePen.io. Original URL: [https://codepen.io/jkantner/pen/VwrYggy](https://codepen.io/jkantner/pen/VwrYggy). + +It goes round and round and out like a dolphin. diff --git a/acrobatic-preloader/dist/index.html b/acrobatic-preloader/dist/index.html new file mode 100644 index 0000000..7df4b08 --- /dev/null +++ b/acrobatic-preloader/dist/index.html @@ -0,0 +1,32 @@ + + + + + CodePen - Acrobatic Preloader + + + + + +
+ + + + + + + + + + + + + + + + +
+ + + + diff --git a/acrobatic-preloader/dist/style.css b/acrobatic-preloader/dist/style.css new file mode 100644 index 0000000..bc1d8d4 --- /dev/null +++ b/acrobatic-preloader/dist/style.css @@ -0,0 +1,98 @@ +* { + border: 0; + box-sizing: border-box; + margin: 0; + padding: 0; +} +:root { + --hue: 223; + --bg: hsl(var(--hue),10%,90%); + --fg: hsl(var(--hue),10%,10%); + font-size: calc(16px + (24 - 16) * (100vw - 320px) / (1280 - 320)); +} +body { + background-color: var(--bg); + color: var(--fg); + font: 1em/1.5 sans-serif; + height: 100vh; + display: grid; + place-items: center; + transition: background-color 0.3s; +} +main { + padding: 1.5em 0; +} + +.ap { + width: 8em; + height: 16em; +} +.ap__ring { + stroke: hsla(var(--hue),10%,10%,0.15); + transition: stroke 0.3s; +} +.ap__worm1, +.ap__worm2 { + animation-duration: 3s; + animation-iteration-count: infinite; +} +.ap__worm1 { + animation-name: worm1; +} +.ap__worm2 { + animation-name: worm2; + visibility: hidden; +} + +/* Dark theme */ +@media (prefers-color-scheme: dark) { + :root { + --bg: hsl(var(--hue),10%,10%); + --fg: hsl(var(--hue),10%,90%); + } + .ap__ring { + stroke: hsla(var(--hue),10%,90%,0.1); + } +} + +/* Animtions */ +@keyframes worm1 { + from { + animation-timing-function: ease-in-out; + stroke-dashoffset: -87.96; + } + 20% { + animation-timing-function: ease-in; + stroke-dashoffset: 0; + } + 60% { + stroke-dashoffset: -791.68; + visibility: visible; + } + 60.1%, + to { + stroke-dashoffset: -791.68; + visibility: hidden; + } +} +@keyframes worm2 { + from, + 60% { + stroke-dashoffset: -87.96; + visibility: hidden; + } + 60.1% { + animation-timing-function: cubic-bezier(0,0,0.5,0.75); + stroke-dashoffset: -87.96; + visibility: visible; + } + 77% { + animation-timing-function: cubic-bezier(0.5,0.25,0.5,0.88); + stroke-dashoffset: -340; + visibility: visible; + } + to { + stroke-dashoffset: -669.92; + visibility: visible; + } +} \ No newline at end of file diff --git a/acrobatic-preloader/license.txt b/acrobatic-preloader/license.txt new file mode 100644 index 0000000..8b03093 --- /dev/null +++ b/acrobatic-preloader/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2022 by Jon Kantner (https://codepen.io/jkantner/pen/VwrYggy) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/acrobatic-preloader/src/index.html b/acrobatic-preloader/src/index.html new file mode 100644 index 0000000..feca1c2 --- /dev/null +++ b/acrobatic-preloader/src/index.html @@ -0,0 +1,18 @@ +
+ + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/acrobatic-preloader/src/style.css b/acrobatic-preloader/src/style.css new file mode 100644 index 0000000..bc1d8d4 --- /dev/null +++ b/acrobatic-preloader/src/style.css @@ -0,0 +1,98 @@ +* { + border: 0; + box-sizing: border-box; + margin: 0; + padding: 0; +} +:root { + --hue: 223; + --bg: hsl(var(--hue),10%,90%); + --fg: hsl(var(--hue),10%,10%); + font-size: calc(16px + (24 - 16) * (100vw - 320px) / (1280 - 320)); +} +body { + background-color: var(--bg); + color: var(--fg); + font: 1em/1.5 sans-serif; + height: 100vh; + display: grid; + place-items: center; + transition: background-color 0.3s; +} +main { + padding: 1.5em 0; +} + +.ap { + width: 8em; + height: 16em; +} +.ap__ring { + stroke: hsla(var(--hue),10%,10%,0.15); + transition: stroke 0.3s; +} +.ap__worm1, +.ap__worm2 { + animation-duration: 3s; + animation-iteration-count: infinite; +} +.ap__worm1 { + animation-name: worm1; +} +.ap__worm2 { + animation-name: worm2; + visibility: hidden; +} + +/* Dark theme */ +@media (prefers-color-scheme: dark) { + :root { + --bg: hsl(var(--hue),10%,10%); + --fg: hsl(var(--hue),10%,90%); + } + .ap__ring { + stroke: hsla(var(--hue),10%,90%,0.1); + } +} + +/* Animtions */ +@keyframes worm1 { + from { + animation-timing-function: ease-in-out; + stroke-dashoffset: -87.96; + } + 20% { + animation-timing-function: ease-in; + stroke-dashoffset: 0; + } + 60% { + stroke-dashoffset: -791.68; + visibility: visible; + } + 60.1%, + to { + stroke-dashoffset: -791.68; + visibility: hidden; + } +} +@keyframes worm2 { + from, + 60% { + stroke-dashoffset: -87.96; + visibility: hidden; + } + 60.1% { + animation-timing-function: cubic-bezier(0,0,0.5,0.75); + stroke-dashoffset: -87.96; + visibility: visible; + } + 77% { + animation-timing-function: cubic-bezier(0.5,0.25,0.5,0.88); + stroke-dashoffset: -340; + visibility: visible; + } + to { + stroke-dashoffset: -669.92; + visibility: visible; + } +} \ No newline at end of file diff --git a/ambient-blur-using-backdrop-filter/README.markdown b/ambient-blur-using-backdrop-filter/README.markdown new file mode 100644 index 0000000..9766f33 --- /dev/null +++ b/ambient-blur-using-backdrop-filter/README.markdown @@ -0,0 +1,5 @@ +# Ambient blur using backdrop filter + +A Pen created on CodePen.io. Original URL: [https://codepen.io/pepf/pen/GqZkdj](https://codepen.io/pepf/pen/GqZkdj). + +Testing the backdrop filter property in a interesting looking visual diff --git a/ambient-blur-using-backdrop-filter/dist/index.html b/ambient-blur-using-backdrop-filter/dist/index.html new file mode 100644 index 0000000..79e229c --- /dev/null +++ b/ambient-blur-using-backdrop-filter/dist/index.html @@ -0,0 +1,27 @@ + + + + + CodePen - Ambient blur using backdrop filter + + + + + +
+
+
+
+
+
+ +
+
+ +You need a recent Safari browser or Chrome >= 49 with the "Experimental Web Platform Features" flag enabled to view this pen properly + + + + + + diff --git a/ambient-blur-using-backdrop-filter/dist/script.js b/ambient-blur-using-backdrop-filter/dist/script.js new file mode 100644 index 0000000..6859506 --- /dev/null +++ b/ambient-blur-using-backdrop-filter/dist/script.js @@ -0,0 +1,51 @@ +cubes = []; + +//random int +function rand(min, max) { + return Math.floor(Math.random() * (max - min + 1)) + min; +} + +function draw() { + var ctx = canvas.getContext('2d'); + ctx.clearRect(0,0,w,h); + + var t = new Date().getTime(); + + cubes.forEach(function(cube) { + var speed = cube.speed || 500; + cube.dx = 50 * Math.sin(t/speed - cube.offset); + cube.dy = 200 * Math.sin(t/speed); + drawCube(ctx, cube); + }); + + + window.requestAnimationFrame(draw); +} + +function drawCube( ctx, cube ) { + ctx.fillStyle = cube.color; + ctx.fillRect(cube.x + cube.dx, cube.y + cube.dy, + cube.w, cube.h); +} + +function init() { + canvas = document.getElementById('canvas'); + w = canvas.width; + h = canvas.height; + + var i=0; + while(i<100) { + cubes.push({ + color: "#"+rand(0,999999), + w: rand(50,150), h: rand(50,150), + x: rand(0,w), y: rand(0,h), + dx: 0, dy: 0, + offset: rand(0,10), + speed: rand(500,2000) + }); + i++; + } + window.requestAnimationFrame(draw); +} + +init(); \ No newline at end of file diff --git a/ambient-blur-using-backdrop-filter/dist/style.css b/ambient-blur-using-backdrop-filter/dist/style.css new file mode 100644 index 0000000..e860346 --- /dev/null +++ b/ambient-blur-using-backdrop-filter/dist/style.css @@ -0,0 +1,64 @@ +body { + background: #efefef; + display: flex; + justify-content: center; + align-items: center; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; +} +.wrapper { + background-color: white; + padding: 1em; + display:inline-block; + border-radius: 5px; + box-shadow: 0px 0px 50px rgba(0,0,0,0.1) +} +.demo { + border: 1px solid #ddd; + display: inline-block; + padding: 0; + position: relative; +} +.overlay { + position: absolute; + top: 0; + left: 0; + width: 50%; + height: 50%; + -webkit-backdrop-filter: brightness(150%) saturate(150%) blur(15px); + backdrop-filter: brightness(150%) saturate(150%) blur(15px); +} +.second { + left:50%; + width:50%; + -webkit-backdrop-filter: blur(30px) brightness(150%); + backdrop-filter: blur(30px) brightness(150%); +} +.third { + bottom: 0; + left: 0; + top: 50%; + height: 50%; + width: 50%; + -webkit-backdrop-filter: blur(30px) brightness(150%); + backdrop-filter: blur(30px) brightness(150%); +} +.fourth { + top: 50%; + left: 50%; + right: 0; + bottom: 0; + -webkit-backdrop-filter: brightness(150%) saturate(150%) blur(15px); + backdrop-filter: brightness(150%) saturate(150%) blur(15px); +} + +.disclaimer { + font-family: sans-serif; + color: #aaa; + font-size:14px; + position:absolute; + top: 0 +} \ No newline at end of file diff --git a/ambient-blur-using-backdrop-filter/license.txt b/ambient-blur-using-backdrop-filter/license.txt new file mode 100644 index 0000000..4eefabc --- /dev/null +++ b/ambient-blur-using-backdrop-filter/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2022 by Pepijn (https://codepen.io/pepf/pen/GqZkdj) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/ambient-blur-using-backdrop-filter/src/index.html b/ambient-blur-using-backdrop-filter/src/index.html new file mode 100644 index 0000000..bfd6fec --- /dev/null +++ b/ambient-blur-using-backdrop-filter/src/index.html @@ -0,0 +1,12 @@ +
+
+
+
+
+
+ +
+
+ +You need a recent Safari browser or Chrome >= 49 with the "Experimental Web Platform Features" flag enabled to view this pen properly + diff --git a/ambient-blur-using-backdrop-filter/src/script.js b/ambient-blur-using-backdrop-filter/src/script.js new file mode 100644 index 0000000..dd37aaa --- /dev/null +++ b/ambient-blur-using-backdrop-filter/src/script.js @@ -0,0 +1,51 @@ +cubes = []; + +//random int +function rand(min, max) { + return Math.floor(Math.random() * (max - min + 1)) + min; +} + +function draw() { + var ctx = canvas.getContext('2d'); + ctx.clearRect(0,0,w,h); + + var t = new Date().getTime(); + + cubes.forEach(function(cube) { + var speed = cube.speed || 500; + cube.dx = 50 * Math.sin(t/speed - cube.offset); + cube.dy = 200 * Math.sin(t/speed); + drawCube(ctx, cube); + }); + + + window.requestAnimationFrame(draw); +} + +function drawCube( ctx, cube ) { + ctx.fillStyle = cube.color; + ctx.fillRect(cube.x + cube.dx, cube.y + cube.dy, + cube.w, cube.h); +} + +function init() { + canvas = document.getElementById('canvas'); + w = canvas.width; + h = canvas.height; + + var i=0; + while(i<100) { + cubes.push({ + color: "#"+rand(0,999999), + w: rand(50,150), h: rand(50,150), + x: rand(0,w), y: rand(0,h), + dx: 0, dy: 0, + offset: rand(0,10), + speed: rand(500,2000) + }); + i++; + } + window.requestAnimationFrame(draw); +} + +init(); diff --git a/ambient-blur-using-backdrop-filter/src/style.css b/ambient-blur-using-backdrop-filter/src/style.css new file mode 100644 index 0000000..e4af238 --- /dev/null +++ b/ambient-blur-using-backdrop-filter/src/style.css @@ -0,0 +1,60 @@ +body { + background: #efefef; + display: flex; + justify-content: center; + align-items: center; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; +} +.wrapper { + background-color: white; + padding: 1em; + display:inline-block; + border-radius: 5px; + box-shadow: 0px 0px 50px rgba(0,0,0,0.1) +} +.demo { + border: 1px solid #ddd; + display: inline-block; + padding: 0; + position: relative; +} +.overlay { + position: absolute; + top: 0; + left: 0; + width: 50%; + height: 50%; + backdrop-filter: brightness(150%) saturate(150%) blur(15px); +} +.second { + left:50%; + width:50%; + backdrop-filter: blur(30px) brightness(150%); +} +.third { + bottom: 0; + left: 0; + top: 50%; + height: 50%; + width: 50%; + backdrop-filter: blur(30px) brightness(150%); +} +.fourth { + top: 50%; + left: 50%; + right: 0; + bottom: 0; + backdrop-filter: brightness(150%) saturate(150%) blur(15px); +} + +.disclaimer { + font-family: sans-serif; + color: #aaa; + font-size:14px; + position:absolute; + top: 0 +} \ No newline at end of file diff --git a/animated-atom-svg/README.markdown b/animated-atom-svg/README.markdown new file mode 100644 index 0000000..fee8fae --- /dev/null +++ b/animated-atom-svg/README.markdown @@ -0,0 +1,4 @@ +# Animated atom SVG + _A Pen created at CodePen.io. Original URL: [https://codepen.io/bradfrost/pen/KKwpzxG](https://codepen.io/bradfrost/pen/KKwpzxG). + + \ No newline at end of file diff --git a/animated-atom-svg/dist/index.html b/animated-atom-svg/dist/index.html new file mode 100644 index 0000000..c90c4e3 --- /dev/null +++ b/animated-atom-svg/dist/index.html @@ -0,0 +1,48 @@ + + + + + Animated atom SVG + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/animated-striped-gradient-button/dist/style.css b/animated-striped-gradient-button/dist/style.css new file mode 100644 index 0000000..a205d1b --- /dev/null +++ b/animated-striped-gradient-button/dist/style.css @@ -0,0 +1,89 @@ +@import url("https://fonts.googleapis.com/css2?family=Calistoga&display=swap"); +html, +body { + width: 100%; + height: 100%; + margin: 0; + height: 0; + text-align: center; +} + +button { + position: relative; + margin: 50px; + width: 400px; + height: 100px; + background: transparent; + border: 5px solid #000000; + border-radius: 60px; + color: #fff; + cursor: pointer; + font-family: "Calistoga", cursive; + font-size: 1.5em; + font-weight: bold; + overflow: hidden; +} + +button::before { + display: block; + content: ""; + position: absolute; + top: 0; + left: 0; + width: 400px; + height: 100px; + background-image: linear-gradient(45deg, #f04d4d 11.36%, #000000 11.36%, #000000 12.5%, #ffd903 12.5%, #ffd903 23.86%, #000000 23.86%, #000000 25%, #2dc40f 25%, #2dc40f 36.36%, #000000 36.36%, #000000 37.5%, #5ba1fc 37.5%, #5ba1fc 48.86%, #000000 48.86%, #000000 50%, #f04d4d 50%, #f04d4d 61.36%, #000000 61.36%, #000000 62.5%, #ffd903 62.5%, #ffd903 73.86%, #000000 73.86%, #000000 75%, #2dc40f 75%, #2dc40f 86.36%, #000000 86.36%, #000000 87.5%, #5ba1fc 87.5%, #5ba1fc 98.86%, #000000 98.86%, #000000 100%); + background-size: 200px 200px; + -webkit-animation: barberpole 10s linear infinite; + animation: barberpole 10s linear infinite; + z-index: -1; +} + +button::after { + display: block; + content: ""; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 250px; + height: 50px; + background: #000000; + border: 5px solid #000; + border-radius: 100px; + box-shadow: 0px 10px 20px -10px rgba(0, 0, 0, 0.75); + z-index: -1; +} + +button:hover { + color: #000; +} + +button:hover::after { + background: #fff; +} + +button:active { + color: #fff; +} + +button:active::before { + -webkit-animation-play-state: paused; + animation-play-state: paused; +} + +button:active::after { + background: #000; +} + +@-webkit-keyframes barberpole { + 100% { + background-position: 50% 50%; + } +} + +@keyframes barberpole { + 100% { + background-position: 50% 50%; + } +} \ No newline at end of file diff --git a/animated-striped-gradient-button/src/index.html b/animated-striped-gradient-button/src/index.html new file mode 100644 index 0000000..0d0325c --- /dev/null +++ b/animated-striped-gradient-button/src/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/animated-striped-gradient-button/src/style.scss b/animated-striped-gradient-button/src/style.scss new file mode 100644 index 0000000..9ca35aa --- /dev/null +++ b/animated-striped-gradient-button/src/style.scss @@ -0,0 +1,116 @@ +@import url('https://fonts.googleapis.com/css2?family=Calistoga&display=swap'); + +html, +body { + width: 100%; + height: 100%; + margin: 0; + height: 0; + text-align: center; +} + +button { + position: relative; + margin: 50px; + width: 400px; + height: 100px; + background: transparent; + border: 5px solid #000000; + border-radius: 60px; + color: #fff; + cursor: pointer; + font-family: 'Calistoga', cursive; + font-size: 1.5em; + font-weight: bold; + overflow: hidden; +} + +button::before { + display: block; + content: ''; + position: absolute; + top: 0; + left: 0; + width: 400px; + height: 100px; + background-image: linear-gradient( + 45deg, + #f04d4d 11.36%, + #000000 11.36%, + #000000 12.5%, + #ffd903 12.5%, + #ffd903 23.86%, + #000000 23.86%, + #000000 25%, + #2dc40f 25%, + #2dc40f 36.36%, + #000000 36.36%, + #000000 37.5%, + #5ba1fc 37.5%, + #5ba1fc 48.86%, + #000000 48.86%, + #000000 50%, + #f04d4d 50%, + #f04d4d 61.36%, + #000000 61.36%, + #000000 62.5%, + #ffd903 62.5%, + #ffd903 73.86%, + #000000 73.86%, + #000000 75%, + #2dc40f 75%, + #2dc40f 86.36%, + #000000 86.36%, + #000000 87.5%, + #5ba1fc 87.5%, + #5ba1fc 98.86%, + #000000 98.86%, + #000000 100% + ); + background-size: 200px 200px; + animation: barberpole 10s linear infinite; + z-index: -1; +} + +button::after { + display: block; + content: ''; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 250px; + height: 50px; + background: #000000; + border: 5px solid #000; + border-radius: 100px; + box-shadow: 0px 10px 20px -10px rgba(0,0,0,0.75); + z-index: -1; +} + +button:hover { + color: #000; +} + +button:hover::after { + background: #fff; +} + +button:active { + color: #fff; +} + +button:active::before { + animation-play-state: paused; +} + +button:active::after { + background: #000; +} + + +@keyframes barberpole { + 100% { + background-position: 50% 50%; + } +} diff --git a/animated-verbs-ii/README.markdown b/animated-verbs-ii/README.markdown new file mode 100644 index 0000000..1c04167 --- /dev/null +++ b/animated-verbs-ii/README.markdown @@ -0,0 +1,6 @@ +# Animated Verbs II + _A Pen created at CodePen.io. Original URL: [https://codepen.io/hexagoncircle/pen/OJLxWKq](https://codepen.io/hexagoncircle/pen/OJLxWKq). + + A second take on animating characters in verbs to represent their action. Leave a comment if there's a word you'd like to see added and animated on this list. + +Part one: https://codepen.io/hexagoncircle/pen/MWgbqON \ No newline at end of file diff --git a/animated-verbs-ii/dist/index.html b/animated-verbs-ii/dist/index.html new file mode 100644 index 0000000..ab2defc --- /dev/null +++ b/animated-verbs-ii/dist/index.html @@ -0,0 +1,27 @@ + + + + + Animated Verbs II + + + + + + + + +
+

yelling

+

ghosting

+

sailing

+

shivering

+

fading

+

rocking

+
+ + + + + + \ No newline at end of file diff --git a/animated-verbs-ii/dist/mwgbqon.css b/animated-verbs-ii/dist/mwgbqon.css new file mode 100644 index 0000000..57b717c --- /dev/null +++ b/animated-verbs-ii/dist/mwgbqon.css @@ -0,0 +1,227 @@ +$colors: #f9ca24, #3498db, #ff7979, #1abc9c, #e74c3c, #f8c291; + +* { + box-sizing: border-box; +} + +html, body { + height: 100%; +} + +.container { + max-height: 100vh; + overflow-y: scroll; + position: relative; + scroll-snap-type: y mandatory; + -webkit-overflow-scrolling: touch; +} + +.headline { + align-items: center; + background-color: var(--color); + display: flex; + font-family: 'Lexend Deca', sans-serif; + font-weight: 700; + font-size: calc(1rem + 15vmin); + height: 100vh; + justify-content: center; + overflow: hidden; + perspective: 1000px; + scroll-snap-align: start; + width: 100vw; + + @for $i from 1 through length($colors) { + &:nth-child(#{$i}) { + --color: #{nth($colors, $i)}; + } + } +} + +.word, +.char { + animation-delay: var(--del); + animation-direction: var(--dir, normal); + animation-duration: var(--dur); + animation-iteration-count: infinite; + animation-name: var(--name); + animation-timing-function: var(--tf); + display: inline-block; + position: relative; + transform-origin: 50% 100%; + z-index: 1; +} + + +// ========================= +// Headline animations +// ========================= + +.headline--fall { + .char { + --name: fall; + --dur: 600ms; + --del: calc(var(--char-index) * -0.05s); + --tf: cubic-bezier(0.165, 0.44, 0.64, 1); + } + + @keyframes fall { + 0% { + transform: rotateY(-25deg); + } + 25% { + transform: translateY(2%) rotateY(25deg); + } + 50% { + transform: rotateY(-25deg); + } + 75% { + transform: translateY(4%) rotateY(25deg); + } + 100% { + transform: rotateY(-25deg); + } + } +} + +.headline--flip { + .char { + --name: flip; + --dur: 4000ms; + --del: calc(var(--char-index) * 0.075s); + --tf: linear; + } + + @keyframes flip { + 5% { + transform: rotateX(1turn); + } + 10% { + transform: rotateX(2turn); + } + 20% { + transform: rotateX(3turn); + } + 40% { + transform: rotateX(4turn); + } + 70%, 100% { + transform: rotateX(5turn); + } + } +} + +.headline--float { + .char { + --name: float; + --dur: 2200ms; + --del: calc(var(--char-index) * -0.5s); + --tf: ease-in-out; + --dir: alternate; + + &:nth-child(2n) { + --name: float-alt; + } + } + + @keyframes float { + from { + transform: translate(2%, -10%) rotate(-1deg); + } + to { + transform: translate(-2%, 5%) rotate(3deg); + } + } + + @keyframes float-alt { + from { + transform: translate(0%, -5%) rotate(-1deg); + } + to { + transform: translate(2%, 10%) rotate(3deg); + } + } +} + +.headline--jog { + .char { + --name: jog; + --dur: 500ms; + --del: calc(var(--char-index) * -0.025s); + --tf: linear; + } + + @keyframes jog { + 0% { + transform: translate(0, 0) rotate(5deg); + } + 25% { + transform: translate(5%, -5%) rotate(10deg); + } + 50% { + transform: translate(5%, 0) rotate(15deg); + } + 75% { + transform: translate(10%, -5%) rotate(10deg); + } + 100% { + transform: translate(0, 0) rotate(5deg); + } + } +} + +.headline--jump { + .char { + --name: jump; + --dur: 800ms; + --del: calc(var(--char-index) * 0.075s); + --tf: cubic-bezier(0.165, 0.44, 0.64, 1); + } + + @keyframes jump { + 20% { + transform: translateY(2%) scaleY(0.9); + } + 40% { + transform: translateY(-100%) scaleY(1.2); + } + 50% { + transform: translateY(10%) scaleY(0.8); + } + 70% { + transform: translateY(-5%) scaleY(1); + } + 80%, 100% { + transform: translateY(0) scaleY(1); + } + } +} + +.headline--twirl { + .char { + --name: twirl; + --dur: 6000ms; + --del: calc(var(--char-index) * 0.025s); + --tf: linear; + } + + @keyframes twirl { + 2.5% { + transform: rotateY(1turn); + } + 5% { + transform: rotateY(2turn); + } + 10% { + transform: rotateY(3turn); + } + 20% { + transform: rotateY(4turn); + } + 40% { + transform: rotateY(5turn); + } + 70%, 100% { + transform: rotateY(6turn); + } + } +} \ No newline at end of file diff --git a/animated-verbs-ii/dist/script.js b/animated-verbs-ii/dist/script.js new file mode 100644 index 0000000..dc4e89e --- /dev/null +++ b/animated-verbs-ii/dist/script.js @@ -0,0 +1 @@ +Splitting(); \ No newline at end of file diff --git a/animated-verbs-ii/dist/style.css b/animated-verbs-ii/dist/style.css new file mode 100644 index 0000000..5f4d716 --- /dev/null +++ b/animated-verbs-ii/dist/style.css @@ -0,0 +1,441 @@ +.headline:nth-child(1) { + --color: #e74c3c; +} +.headline:nth-child(2) { + --color: #f5f6fa; +} +.headline:nth-child(3) { + --color: #48dbfb; +} +.headline:nth-child(4) { + --color: #9980FA; +} +.headline:nth-child(5) { + --color: #F79F1F; +} +.headline:nth-child(6) { + --color: #f8c291; +} + +.headline--fade .char { + --name: fade; + --dur: 2s; + --del: calc(var(--distance-percent) * 0.15s); + --td: ease-in-out; + -webkit-transform-origin: 0 100%; + transform-origin: 0 100%; +} +@-webkit-keyframes fade { + 50% { + opacity: 0; + } +} +@keyframes fade { + 50% { + opacity: 0; + } +} +.headline--ghost .char { + --name: rise; + --dur: 3s; + --del: calc(var(--distance-percent) * 0.125s); + --tf: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -webkit-transform-origin: 50% 100%; + transform-origin: 50% 100%; +} +.headline--ghost .char:after { + -webkit-animation: ghost var(--dur) ease-in var(--del) infinite; + animation: ghost var(--dur) ease-in var(--del) infinite; + content: attr(data-char); + opacity: 0; + -webkit-transform-origin: 100% 50%; + transform-origin: 100% 50%; + visibility: visible; +} +@-webkit-keyframes rise { + 40% { + -webkit-transform: translateY(-40%) rotate(calc(var(--distance-sine) * 10deg)); + transform: translateY(-40%) rotate(calc(var(--distance-sine) * 10deg)); + } + 50% { + -webkit-transform: translateY(6%); + transform: translateY(6%); + } + 55% { + -webkit-transform: translateY(-4%); + transform: translateY(-4%); + } + 60% { + -webkit-transform: translateY(2%); + transform: translateY(2%); + } + 65% { + -webkit-transform: translateY(-1%); + transform: translateY(-1%); + } + 70% { + -webkit-transform: translateY(0%); + transform: translateY(0%); + } +} +@keyframes rise { + 40% { + -webkit-transform: translateY(-40%) rotate(calc(var(--distance-sine) * 10deg)); + transform: translateY(-40%) rotate(calc(var(--distance-sine) * 10deg)); + } + 50% { + -webkit-transform: translateY(6%); + transform: translateY(6%); + } + 55% { + -webkit-transform: translateY(-4%); + transform: translateY(-4%); + } + 60% { + -webkit-transform: translateY(2%); + transform: translateY(2%); + } + 65% { + -webkit-transform: translateY(-1%); + transform: translateY(-1%); + } + 70% { + -webkit-transform: translateY(0%); + transform: translateY(0%); + } +} +@-webkit-keyframes ghost { + 8% { + opacity: 0; + -webkit-transform: translateY(0); + transform: translateY(0); + } + 40% { + opacity: 0.25; + -webkit-transform: translateY(-30%) rotate(calc(var(--distance-sine) * -10deg)); + transform: translateY(-30%) rotate(calc(var(--distance-sine) * -10deg)); + } + 60%, 100% { + opacity: 0; + -webkit-transform: translateY(-200%); + transform: translateY(-200%); + } +} +@keyframes ghost { + 8% { + opacity: 0; + -webkit-transform: translateY(0); + transform: translateY(0); + } + 40% { + opacity: 0.25; + -webkit-transform: translateY(-30%) rotate(calc(var(--distance-sine) * -10deg)); + transform: translateY(-30%) rotate(calc(var(--distance-sine) * -10deg)); + } + 60%, 100% { + opacity: 0; + -webkit-transform: translateY(-200%); + transform: translateY(-200%); + } +} +.headline--rock .char { + --name: rock; + --dur: 2s; + --td: ease-in-out; + -webkit-transform-origin: 0 100%; + transform-origin: 0 100%; +} +@-webkit-keyframes rock { + 0%, 100% { + -webkit-transform: rotate(-10deg); + transform: rotate(-10deg); + } + 50% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); + } +} +@keyframes rock { + 0%, 100% { + -webkit-transform: rotate(-10deg); + transform: rotate(-10deg); + } + 50% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); + } +} +.headline--sail .word { + --dur: 5s; +} +.headline--sail .word:before, .headline--sail .word:after { + -webkit-animation: wave var(--dur) linear infinite; + animation: wave var(--dur) linear infinite; + background-image: radial-gradient(circle at 20px -30px, transparent 40px, var(--color) 41px); + background-repeat: repeat-x; + background-size: 40px 100%; + content: ''; + height: 150%; + left: 0; + position: absolute; + top: 90%; + width: 200%; + z-index: 2; +} +.headline--sail .word:after { + -webkit-animation-duration: calc(var(--dur) * 1.4); + animation-duration: calc(var(--dur) * 1.4); + opacity: 0.8; + top: 70%; +} +.headline--sail .char { + --name: sail; + --del: calc(var(--char-index) * -0.15s); + --tf: linear; +} +@-webkit-keyframes sail { + 25% { + -webkit-transform: rotate(-1deg) translateY(2%); + transform: rotate(-1deg) translateY(2%); + } + 50% { + -webkit-transform: rotate(0) translateY(0); + transform: rotate(0) translateY(0); + } + 75% { + -webkit-transform: rotate(1deg) translateY(1%); + transform: rotate(1deg) translateY(1%); + } +} +@keyframes sail { + 25% { + -webkit-transform: rotate(-1deg) translateY(2%); + transform: rotate(-1deg) translateY(2%); + } + 50% { + -webkit-transform: rotate(0) translateY(0); + transform: rotate(0) translateY(0); + } + 75% { + -webkit-transform: rotate(1deg) translateY(1%); + transform: rotate(1deg) translateY(1%); + } +} +@-webkit-keyframes wave { + to { + -webkit-transform: translateX(-200px); + transform: translateX(-200px); + } +} +@keyframes wave { + to { + -webkit-transform: translateX(-200px); + transform: translateX(-200px); + } +} +.headline--shiver .word { + --name: shiver; + --dur: 3s; + --td: linear; +} +.headline--shiver .char { + --name: shiver-letter; + --del: calc(var(--char-index) * -0.0125s); + --dur: 140ms; + --td: linear; +} +@-webkit-keyframes shiver { + 1% { + -webkit-transform: translateX(2%); + transform: translateX(2%); + } + 2% { + -webkit-transform: translateX(-2%); + transform: translateX(-2%); + } + 3% { + -webkit-transform: translateX(3%); + transform: translateX(3%); + } + 4% { + -webkit-transform: translateX(-3%); + transform: translateX(-3%); + } + 5% { + -webkit-transform: translateX(4%); + transform: translateX(4%); + } + 6% { + -webkit-transform: translateX(-4%); + transform: translateX(-4%); + } + 7% { + -webkit-transform: translateX(3%); + transform: translateX(3%); + } + 8% { + -webkit-transform: translateX(-3%); + transform: translateX(-3%); + } + 9% { + -webkit-transform: translateX(2%); + transform: translateX(2%); + } + 10% { + -webkit-transform: translateX(-2%); + transform: translateX(-2%); + } + 11% { + -webkit-transform: translateX(1%); + transform: translateX(1%); + } + 12% { + -webkit-transform: translateX(0%); + transform: translateX(0%); + } +} +@keyframes shiver { + 1% { + -webkit-transform: translateX(2%); + transform: translateX(2%); + } + 2% { + -webkit-transform: translateX(-2%); + transform: translateX(-2%); + } + 3% { + -webkit-transform: translateX(3%); + transform: translateX(3%); + } + 4% { + -webkit-transform: translateX(-3%); + transform: translateX(-3%); + } + 5% { + -webkit-transform: translateX(4%); + transform: translateX(4%); + } + 6% { + -webkit-transform: translateX(-4%); + transform: translateX(-4%); + } + 7% { + -webkit-transform: translateX(3%); + transform: translateX(3%); + } + 8% { + -webkit-transform: translateX(-3%); + transform: translateX(-3%); + } + 9% { + -webkit-transform: translateX(2%); + transform: translateX(2%); + } + 10% { + -webkit-transform: translateX(-2%); + transform: translateX(-2%); + } + 11% { + -webkit-transform: translateX(1%); + transform: translateX(1%); + } + 12% { + -webkit-transform: translateX(0%); + transform: translateX(0%); + } +} +@-webkit-keyframes shiver-letter { + 25% { + -webkit-transform: translateY(1%); + transform: translateY(1%); + } + 50% { + -webkit-transform: translate(calc(var(--distance-percent) * 1%), calc(var(--distance-percent) * 1%)); + transform: translate(calc(var(--distance-percent) * 1%), calc(var(--distance-percent) * 1%)); + } + 75% { + -webkit-transform: translateY(1%); + transform: translateY(1%); + } +} +@keyframes shiver-letter { + 25% { + -webkit-transform: translateY(1%); + transform: translateY(1%); + } + 50% { + -webkit-transform: translate(calc(var(--distance-percent) * 1%), calc(var(--distance-percent) * 1%)); + transform: translate(calc(var(--distance-percent) * 1%), calc(var(--distance-percent) * 1%)); + } + 75% { + -webkit-transform: translateY(1%); + transform: translateY(1%); + } +} +.headline--yell .char { + --name: yell; + --dur: 3s; + --tf: ease; + -webkit-transform-origin: 50% 100%; + transform-origin: 50% 100%; +} +@-webkit-keyframes yell { + 3% { + -webkit-transform: scale(calc(1 * var(--distance-percent) + 1.5)) rotate(calc(15deg * var(--distance-sine))) translateY(-10%); + transform: scale(calc(1 * var(--distance-percent) + 1.5)) rotate(calc(15deg * var(--distance-sine))) translateY(-10%); + } + 6% { + -webkit-transform: scale(calc(1 * var(--distance-percent) + 1.2)) rotate(calc(15deg * var(--distance-sine))) translateY(-10%); + transform: scale(calc(1 * var(--distance-percent) + 1.2)) rotate(calc(15deg * var(--distance-sine))) translateY(-10%); + } + 12% { + -webkit-transform: scale(calc(1 * var(--distance-percent) + 1.5)) rotate(calc(15deg * var(--distance-sine))) translateY(-10%); + transform: scale(calc(1 * var(--distance-percent) + 1.5)) rotate(calc(15deg * var(--distance-sine))) translateY(-10%); + } + 18% { + -webkit-transform: scaleY(1) translateY(-2%); + transform: scaleY(1) translateY(-2%); + } + 25% { + -webkit-transform: scaleY(0.98); + transform: scaleY(0.98); + } + 50% { + -webkit-transform: scaleY(1); + transform: scaleY(1); + } + 75% { + -webkit-transform: scale(0.98); + transform: scale(0.98); + } +} +@keyframes yell { + 3% { + -webkit-transform: scale(calc(1 * var(--distance-percent) + 1.5)) rotate(calc(15deg * var(--distance-sine))) translateY(-10%); + transform: scale(calc(1 * var(--distance-percent) + 1.5)) rotate(calc(15deg * var(--distance-sine))) translateY(-10%); + } + 6% { + -webkit-transform: scale(calc(1 * var(--distance-percent) + 1.2)) rotate(calc(15deg * var(--distance-sine))) translateY(-10%); + transform: scale(calc(1 * var(--distance-percent) + 1.2)) rotate(calc(15deg * var(--distance-sine))) translateY(-10%); + } + 12% { + -webkit-transform: scale(calc(1 * var(--distance-percent) + 1.5)) rotate(calc(15deg * var(--distance-sine))) translateY(-10%); + transform: scale(calc(1 * var(--distance-percent) + 1.5)) rotate(calc(15deg * var(--distance-sine))) translateY(-10%); + } + 18% { + -webkit-transform: scaleY(1) translateY(-2%); + transform: scaleY(1) translateY(-2%); + } + 25% { + -webkit-transform: scaleY(0.98); + transform: scaleY(0.98); + } + 50% { + -webkit-transform: scaleY(1); + transform: scaleY(1); + } + 75% { + -webkit-transform: scale(0.98); + transform: scale(0.98); + } +} diff --git a/animated-verbs-ii/license.txt b/animated-verbs-ii/license.txt new file mode 100644 index 0000000..0302e34 --- /dev/null +++ b/animated-verbs-ii/license.txt @@ -0,0 +1,17 @@ + + + + diff --git a/animated-verbs-ii/src/index.html b/animated-verbs-ii/src/index.html new file mode 100644 index 0000000..ce5d786 --- /dev/null +++ b/animated-verbs-ii/src/index.html @@ -0,0 +1,8 @@ +
+

yelling

+

ghosting

+

sailing

+

shivering

+

fading

+

rocking

+
\ No newline at end of file diff --git a/animated-verbs-ii/src/mwgbqon.css b/animated-verbs-ii/src/mwgbqon.css new file mode 100644 index 0000000..57b717c --- /dev/null +++ b/animated-verbs-ii/src/mwgbqon.css @@ -0,0 +1,227 @@ +$colors: #f9ca24, #3498db, #ff7979, #1abc9c, #e74c3c, #f8c291; + +* { + box-sizing: border-box; +} + +html, body { + height: 100%; +} + +.container { + max-height: 100vh; + overflow-y: scroll; + position: relative; + scroll-snap-type: y mandatory; + -webkit-overflow-scrolling: touch; +} + +.headline { + align-items: center; + background-color: var(--color); + display: flex; + font-family: 'Lexend Deca', sans-serif; + font-weight: 700; + font-size: calc(1rem + 15vmin); + height: 100vh; + justify-content: center; + overflow: hidden; + perspective: 1000px; + scroll-snap-align: start; + width: 100vw; + + @for $i from 1 through length($colors) { + &:nth-child(#{$i}) { + --color: #{nth($colors, $i)}; + } + } +} + +.word, +.char { + animation-delay: var(--del); + animation-direction: var(--dir, normal); + animation-duration: var(--dur); + animation-iteration-count: infinite; + animation-name: var(--name); + animation-timing-function: var(--tf); + display: inline-block; + position: relative; + transform-origin: 50% 100%; + z-index: 1; +} + + +// ========================= +// Headline animations +// ========================= + +.headline--fall { + .char { + --name: fall; + --dur: 600ms; + --del: calc(var(--char-index) * -0.05s); + --tf: cubic-bezier(0.165, 0.44, 0.64, 1); + } + + @keyframes fall { + 0% { + transform: rotateY(-25deg); + } + 25% { + transform: translateY(2%) rotateY(25deg); + } + 50% { + transform: rotateY(-25deg); + } + 75% { + transform: translateY(4%) rotateY(25deg); + } + 100% { + transform: rotateY(-25deg); + } + } +} + +.headline--flip { + .char { + --name: flip; + --dur: 4000ms; + --del: calc(var(--char-index) * 0.075s); + --tf: linear; + } + + @keyframes flip { + 5% { + transform: rotateX(1turn); + } + 10% { + transform: rotateX(2turn); + } + 20% { + transform: rotateX(3turn); + } + 40% { + transform: rotateX(4turn); + } + 70%, 100% { + transform: rotateX(5turn); + } + } +} + +.headline--float { + .char { + --name: float; + --dur: 2200ms; + --del: calc(var(--char-index) * -0.5s); + --tf: ease-in-out; + --dir: alternate; + + &:nth-child(2n) { + --name: float-alt; + } + } + + @keyframes float { + from { + transform: translate(2%, -10%) rotate(-1deg); + } + to { + transform: translate(-2%, 5%) rotate(3deg); + } + } + + @keyframes float-alt { + from { + transform: translate(0%, -5%) rotate(-1deg); + } + to { + transform: translate(2%, 10%) rotate(3deg); + } + } +} + +.headline--jog { + .char { + --name: jog; + --dur: 500ms; + --del: calc(var(--char-index) * -0.025s); + --tf: linear; + } + + @keyframes jog { + 0% { + transform: translate(0, 0) rotate(5deg); + } + 25% { + transform: translate(5%, -5%) rotate(10deg); + } + 50% { + transform: translate(5%, 0) rotate(15deg); + } + 75% { + transform: translate(10%, -5%) rotate(10deg); + } + 100% { + transform: translate(0, 0) rotate(5deg); + } + } +} + +.headline--jump { + .char { + --name: jump; + --dur: 800ms; + --del: calc(var(--char-index) * 0.075s); + --tf: cubic-bezier(0.165, 0.44, 0.64, 1); + } + + @keyframes jump { + 20% { + transform: translateY(2%) scaleY(0.9); + } + 40% { + transform: translateY(-100%) scaleY(1.2); + } + 50% { + transform: translateY(10%) scaleY(0.8); + } + 70% { + transform: translateY(-5%) scaleY(1); + } + 80%, 100% { + transform: translateY(0) scaleY(1); + } + } +} + +.headline--twirl { + .char { + --name: twirl; + --dur: 6000ms; + --del: calc(var(--char-index) * 0.025s); + --tf: linear; + } + + @keyframes twirl { + 2.5% { + transform: rotateY(1turn); + } + 5% { + transform: rotateY(2turn); + } + 10% { + transform: rotateY(3turn); + } + 20% { + transform: rotateY(4turn); + } + 40% { + transform: rotateY(5turn); + } + 70%, 100% { + transform: rotateY(6turn); + } + } +} \ No newline at end of file diff --git a/animated-verbs-ii/src/script.js b/animated-verbs-ii/src/script.js new file mode 100644 index 0000000..dc4e89e --- /dev/null +++ b/animated-verbs-ii/src/script.js @@ -0,0 +1 @@ +Splitting(); \ No newline at end of file diff --git a/animated-verbs-ii/src/style.scss b/animated-verbs-ii/src/style.scss new file mode 100644 index 0000000..8aa6646 --- /dev/null +++ b/animated-verbs-ii/src/style.scss @@ -0,0 +1,222 @@ +// ================================================== +// Base styles imported from original Animated Verbs +// https://codepen.io/hexagoncircle/pen/MWgbqON +// ================================================== +$colors: #e74c3c, #f5f6fa, #48dbfb, #9980FA, #F79F1F, #f8c291; + +.headline { + @for $i from 1 through length($colors) { + &:nth-child(#{$i}) { + --color: #{nth($colors, $i)}; + } + } +} + +// ========================= +// Headline animations +// ========================= + +.headline--fade { + .char { + --name: fade; + --dur: 2s; + --del: calc(var(--distance-percent) * 0.15s); + --td: ease-in-out; + + transform-origin: 0 100%; + } + + @keyframes fade { + 50% { opacity: 0; } + } +} + +.headline--ghost { + .char { + --name: rise; + --dur: 3s; + --del: calc(var(--distance-percent) * 0.125s); + --tf: cubic-bezier(0.25, 0.46, 0.45, 0.94); + + transform-origin: 50% 100%; + + &:after { + animation: ghost var(--dur) ease-in var(--del) infinite; + content: attr(data-char); + opacity: 0; + transform-origin: 100% 50%; + visibility: visible; + } + } + + @keyframes rise { + 40% { + transform: + translateY(-40%) + rotate(calc(var(--distance-sine) * 10deg) + ); + } + 50% { transform: translateY( 6%); } + 55% { transform: translateY(-4%); } + 60% { transform: translateY( 2%); } + 65% { transform: translateY(-1%); } + 70% { transform: translateY( 0%); } + } + + @keyframes ghost { + 8% { + opacity: 0; + transform: translateY(0); + } + 40% { + opacity: 0.25; + transform: + translateY(-30%) + rotate(calc(var(--distance-sine) * -10deg) + ); + } + 60%, 100% { + opacity: 0; + transform: translateY(-200%); + } + } +} + +.headline--rock { + .char { + --name: rock; + --dur: 2s; + --td: ease-in-out; + + transform-origin: 0 100%; + } + + @keyframes rock { + 0%, 100% { transform: rotate(-10deg); } + 50% { transform: rotate(-18deg); } + } +} + +.headline--sail { + .word { + --dur: 5s; + + &:before, + &:after { + animation: wave var(--dur) linear infinite; + background-image: + radial-gradient( + circle at 20px -30px, + transparent 40px, + var(--color) 41px + ); + background-repeat: repeat-x; + background-size: 40px 100%; + content: ''; + height: 150%; + left: 0; + position: absolute; + top: 90%; + width: 200%; + z-index: 2; + } + + &:after { + animation-duration: calc(var(--dur) * 1.4); + opacity: 0.8; + top: 70%; + } + } + + .char { + --name: sail; + --del: calc(var(--char-index) * -0.15s); + --tf: linear; + } + + @keyframes sail { + 25% { transform: rotate(-1deg) translateY(2%); } + 50% { transform: rotate(0) translateY(0); } + 75% { transform: rotate(1deg) translateY(1%); } + } + + @keyframes wave { + to { transform: translateX(-200px); } + } +} + +.headline--shiver { + .word { + --name: shiver; + --dur: 3s; + --td: linear; + } + + .char { + --name: shiver-letter; + --del: calc(var(--char-index) * -0.0125s); + --dur: 140ms; + --td: linear; + } + + @keyframes shiver { + 1% { transform: translateX( 2%); } + 2% { transform: translateX(-2%); } + 3% { transform: translateX( 3%); } + 4% { transform: translateX(-3%); } + 5% { transform: translateX( 4%); } + 6% { transform: translateX(-4%); } + 7% { transform: translateX( 3%); } + 8% { transform: translateX(-3%); } + 9% { transform: translateX( 2%); } + 10% { transform: translateX(-2%); } + 11% { transform: translateX( 1%); } + 12% { transform: translateX( 0%); } + } + + @keyframes shiver-letter { + 25% { transform: translateY( 1%); } + 50% { + transform: translate( + calc(var(--distance-percent) * 1%), + calc(var(--distance-percent) * 1%) + ); + } + 75% { transform: translateY( 1%); } + } +} + +.headline--yell { + .char { + --name: yell; + --dur: 3s; + --tf: ease; + + transform-origin: 50% 100%; + } + + @keyframes yell { + 3% { + transform: + scale(calc(1 * var(--distance-percent) + 1.5)) + rotate(calc(15deg * var(--distance-sine))) + translateY(-10%); + } + 6% { + transform: + scale(calc(1 * var(--distance-percent) + 1.2)) + rotate(calc(15deg * var(--distance-sine))) + translateY(-10%); + } + 12% { + transform: + scale(calc(1 * var(--distance-percent) + 1.5)) + rotate(calc(15deg * var(--distance-sine))) + translateY(-10%); + } + 18% { transform: scaleY(1) translateY(-2%); } + 25% { transform: scaleY(0.98); } + 50% { transform: scaleY(1); } + 75% { transform: scale(0.98); } + } +} \ No newline at end of file diff --git a/anime-js-scrollmagic-scroll-based-animations/LICENSE.txt b/anime-js-scrollmagic-scroll-based-animations/LICENSE.txt new file mode 100644 index 0000000..0226aa1 --- /dev/null +++ b/anime-js-scrollmagic-scroll-based-animations/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2022 by Rex Bullington (https://codepen.io/rexjbull/pen/RwRRezq) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/anime-js-scrollmagic-scroll-based-animations/README.md b/anime-js-scrollmagic-scroll-based-animations/README.md new file mode 100644 index 0000000..b7b53a7 --- /dev/null +++ b/anime-js-scrollmagic-scroll-based-animations/README.md @@ -0,0 +1,5 @@ +# Anime.js + ScrollMagic Scroll Based Animations + +A Pen created on CodePen.io. Original URL: [https://codepen.io/rexjbull/pen/RwRRezq](https://codepen.io/rexjbull/pen/RwRRezq). + +A example of using ScrollMagic to trigger Anime.js animations. Some of the animations are set to play when triggered and some are set to progress as the user scrolls the page. \ No newline at end of file diff --git a/anime-js-scrollmagic-scroll-based-animations/dist/index.html b/anime-js-scrollmagic-scroll-based-animations/dist/index.html new file mode 100644 index 0000000..2d0a206 --- /dev/null +++ b/anime-js-scrollmagic-scroll-based-animations/dist/index.html @@ -0,0 +1,129 @@ + + + + + CodePen - Anime.js + ScrollMagic Scroll Based Animations + + + + + + + +
+
+
+

SCROLL DOWN TO TRY ANIMATIONS

+ Responsive image +
+
+
+
+
+
+ The Neuron scales the steepest climbs and descends with complete + control thanks to its 130 - 140mm suspension, 29โ€ wheels (in sizes + M-XL) and confidence-inspiring geometry. +
+
+
+
+
+
+
+
+
+
+

2021

+
Neuron CF SLX 9
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Responsive image +
+
+
+
+
+
+
+
+
+
+

GET OUT THERE

+
+
+
+
+
+
+
+
+
+

GO RIDE

+
+
+
+
+
+ + + + + + + + + diff --git a/anime-js-scrollmagic-scroll-based-animations/dist/script.js b/anime-js-scrollmagic-scroll-based-animations/dist/script.js new file mode 100644 index 0000000..c53a54e --- /dev/null +++ b/anime-js-scrollmagic-scroll-based-animations/dist/script.js @@ -0,0 +1,317 @@ +// Add active class to current nav selected link +var a = document.querySelectorAll(".navbar li a"); +for (var i = 0, length = a.length; i < length; i++) { + a[i].onclick = function() { + var b = document.querySelector(".navbar li.active"); + if (b) b.classList.remove("active"); + this.parentNode.classList.add('active'); + }; +} + +// Color palette variables +let dark = '#252525'; +let mid = '#888'; +let light = 'rgba(255, 255, 255, 0.4)'; + +// Add scrollmagic controller +let controller = new ScrollMagic.Controller(); + +//------------------ +//TIMELINE 1 +//------------------ + +// Add timeline +let tl1 = anime.timeline({autoplay: false}); + +// Add animations +let s1a1 = { + targets: '#one .elem', + opacity: 1, + translateX: { + value: [250, 0], + duration: 800 + }, + rotate: { + value: [90, 0], + duration: 1200, + easing: 'easeInOutSine' + }, + scale: { + value: [2, 1.5], + duration: 1100, + delay: 800, + easing: 'easeInOutQuart' + }, + color: [light, dark], + duration: 800, + delay: 0, + easing: 'easeInOutSine' +}; + +let s1a2 = { + targets: '#one .elem .blocks > div', + backgroundColor: [light, dark], + borderRadius: function(el) { return anime.random(2, 10); }, + delay: function(el) { return anime.random(0, 800); } +}; + +let s1a3 = { + targets: '#one .rectangle', + opacity: [0,1], + translateX: { + value: ['-100vw', '0vw'], + duration: 1500, + }, + translateY: { + value: [-100, 0], + duration: 1500, + }, + easing: 'easeInOutSine', + duration: 2000 +}; + +// Add children +tl1.add(s1a3).add(s1a1, '-=1600').add(s1a2, '-=1300'); + +// Get section height +let oneHeight = document.getElementById("one").clientHeight; +console.log('oneHeight: ' + oneHeight); + +//------------------ +//SCENE 1 +//------------------ + +//Add first scrollmagic scene +let scene1 = new ScrollMagic.Scene({ + triggerElement: "#one", + triggerHook: 0.5, + reverse: false +}) + +// Add debug indicators +.addIndicators({ + colorTrigger: "black", + colorStart: "blue", + colorEnd: "red", + indent: 10 +}) + +// Trigger animation timeline +.on("enter", function (event) { + tl1.play(); +}) + +.addTo(controller); + + + +//------------------ +//TIMELINE 2 +//------------------ + +// Add timeline +let tl2 = anime.timeline({autoplay: false}); + +// Add animations +let s2a1 = { + targets: '#two .elem img', + opacity: [0.3,1], + scale: [4,1], + duration: 1000, + delay: 0, + easing: 'easeInOutSine' +}; + +let s2a2 = { + targets: '#two .elem img', + scale: 1, + duration: 2000, +}; + +// Add children +tl2.add(s2a1).add(s2a2); + +// Get section height +let twoHeight = document.getElementById("two").clientHeight; +console.log('twoHeight: ' + twoHeight); + +//------------------ +//SCENE 2 +//------------------ + +//Add second scrollmagic scene +let scene2 = new ScrollMagic.Scene({ + triggerElement: "#two", + duration: 4500, + triggerHook: 0, +}) + +// Add debug indicators +.addIndicators({ + colorTrigger: "black", + colorStart: "blue", + colorEnd: "red", + indent: 10 +}) + +// Trigger animation timeline +//Use scroll position to play animation +.on("progress", function (event) { + tl2.seek(tl2.duration * event.progress); +}) + +.setPin('#two') +.addTo(controller); + + + +//------------------ +//TIMELINE 3 +//------------------ + +// Add timeline +let tl3 = anime.timeline({autoplay: false}); + +// Add animations +let s3a1 = { + targets: '#three h2', + opacity: 1, + scale: [4,1.5], + duration: 1000, + delay: 0, + easing: 'easeInOutSine' +}; + +// Add children +tl3.add(s3a1); + +//------------------ +//TIMELINE 4 +//------------------ + +// Add timeline +let tl4 = anime.timeline({autoplay: false}); + +// Add animations +let s3a2 = { + targets: '#three .image', + opacity: [0,.5], + translateX: { + value: ['-100%', '0%'], + duration: 1500, + }, + duration: 1000, + delay: 0, + easing: 'easeInOutSine' +}; + +// Add children +tl4.add(s3a2); + +//------------------ +//SCENE 3 +//------------------ + +//Add third scrollmagic scene +let scene3 = new ScrollMagic.Scene({ + triggerElement: "#three", + duration: 2000, + triggerHook: 0 +}) + +// Add debug indicators +.addIndicators({ + colorTrigger: "black", + colorStart: "blue", + colorEnd: "red", + indent: 10 +}) + +// Trigger animation timeline +//Use scroll position to play animation +.on("enter", function (event) { + tl3.play(); +}) +.on("progress", function (event) { + tl4.seek((tl4.duration * event.progress) * 3); +}) + +.setPin('#three') +.addTo(controller); + + + + +//------------------ +//TIMELINE 5 +//------------------ + +// Add timeline +let tl5 = anime.timeline({autoplay: false}); + +// Add animations +let s4a1 = { + targets: '#four h2', + opacity: 1, + scale: [1.5,3], + duration: 1000, + delay: 0, + easing: 'easeInOutSine' +}; + +// Add children +tl5.add(s4a1); + +//------------------ +//TIMELINE 6 +//------------------ + +// Add timeline +let tl6 = anime.timeline({autoplay: false}); + +// Add animations +let s4a2 = { + targets: '#four .image', + opacity: [0,.5], + translateX: { + value: ['100%', '0%'], + duration: 1500, + }, + duration: 1000, + delay: 0, + easing: 'easeInOutSine' +}; + +// Add children +tl6.add(s4a2); + +//------------------ +//SCENE 4 +//------------------ + +//Add third scrollmagic scene +let scene4 = new ScrollMagic.Scene({ + triggerElement: "#four", + duration: 2000, + triggerHook: 0 +}) + +// Add debug indicators +.addIndicators({ + colorTrigger: "black", + colorStart: "blue", + colorEnd: "red", + indent: 10 +}) + +// Trigger animation timeline +//Use scroll position to play animation +.on("enter", function (event) { + tl5.play(); +}) +.on("progress", function (event) { + tl6.seek((tl6.duration * event.progress) * 3); +}) + +.setPin('#four') +.addTo(controller); \ No newline at end of file diff --git a/anime-js-scrollmagic-scroll-based-animations/dist/style.css b/anime-js-scrollmagic-scroll-based-animations/dist/style.css new file mode 100644 index 0000000..bbe73ef --- /dev/null +++ b/anime-js-scrollmagic-scroll-based-animations/dist/style.css @@ -0,0 +1,137 @@ +body { + padding-top: 56px; + font-weight: 300; + letter-spacing: 0.03em; + background-color: #f7f7f7; +} + +nav.navbar { + border-bottom: solid 1px #d6d6d6; +} + +.navbar .navbar-brand { + font-weight: 500; + letter-spacing: .065em; +} + + +.navbar-nav .nav-link { + letter-spacing: .035em; +} + +.navbar li.active a { + font-weight: 400; +} + +main.container-fluid { + padding-left: 0; + padding-right: 0; +} + +.spacer { + height: 40vh; +} + +.rectangle { + position: absolute; + width: 97vw; + height: 30vw; + border-radius: 10px; + background: linear-gradient(45deg, #69b7bf 25%, #ffe664); +} + +@media (min-width: 500px) { + .rectangle { + width: 80%; + } +} + +.section > .row > .col { + height: 100vh; + display: flex; + justify-content: center; + align-content: center; + align-items: center; +} + +#intro .col { + height: 50vh; + padding: 9vw 6vw; + font-size: 18px; +} + +@media (min-width: 1000px) { + #intro .col { + padding: 18vw 12vw; + font-size: 2.7vw; + } +} + +#one { + background-color: #212121; +} + +#one .elem { + opacity: 0; + letter-spacing: 0.04em; +} + +#one .text-block h2 { + font-size: 5vw; + letter-spacing: 0.2em; + font-weight: 300; + line-height: 1; +} + +#one .text-block h5 { + font-size: 4vw; + line-height: 1; +} + +#one .elem .blocks { + display: flex; + justify-content: space-between; + align-content: center; + align-items: center; +} + +#one .elem .blocks > div { + height: 20px; + width: 20px; + margin: 2px; + border-radius: 2px; + background-color: #333; +} + +#two { + height: auto; + overflow: hidden; + padding: 3vw 15vw 10vw; + background: linear-gradient(0deg, #69b7bf 25%, #ffe664); +} + +#three, #four { + position: relative; + overflow: hidden; +} + +#three .image, #four .image { + position: absolute; + top: 0; + bottom:0; + width: 100%; +} + +#three .image { + background-image: url("https://drive.google.com/uc?export=view&id=10tzeBrvoR5OO3EK_Wcg-gRxbVO7xv6em"); + background-size: cover; + background-repeat: no-repeat; + background-position: center; +} + +#four .image { + background-image: url("https://drive.google.com/uc?export=view&id=1SzCTDu5_eAF569lFHtNyIlUCrdW2mOXu"); + background-size: cover; + background-repeat: no-repeat; + background-position: center; +} \ No newline at end of file diff --git a/anime-js-scrollmagic-scroll-based-animations/src/index.html b/anime-js-scrollmagic-scroll-based-animations/src/index.html new file mode 100644 index 0000000..bff87e2 --- /dev/null +++ b/anime-js-scrollmagic-scroll-based-animations/src/index.html @@ -0,0 +1,110 @@ + + +
+
+
+

SCROLL DOWN TO TRY ANIMATIONS

+ Responsive image +
+
+
+
+
+
+ The Neuron scales the steepest climbs and descends with complete + control thanks to its 130 - 140mm suspension, 29โ€ wheels (in sizes + M-XL) and confidence-inspiring geometry. +
+
+
+
+
+
+
+
+
+
+

2021

+
Neuron CF SLX 9
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Responsive image +
+
+
+
+
+
+
+
+
+
+

GET OUT THERE

+
+
+
+
+
+
+
+
+
+

GO RIDE

+
+
+
+
+
\ No newline at end of file diff --git a/anime-js-scrollmagic-scroll-based-animations/src/script.js b/anime-js-scrollmagic-scroll-based-animations/src/script.js new file mode 100644 index 0000000..b3c8509 --- /dev/null +++ b/anime-js-scrollmagic-scroll-based-animations/src/script.js @@ -0,0 +1,319 @@ +// Add active class to current nav selected link +var a = document.querySelectorAll(".navbar li a"); +for (var i = 0, length = a.length; i < length; i++) { + a[i].onclick = function() { + var b = document.querySelector(".navbar li.active"); + if (b) b.classList.remove("active"); + this.parentNode.classList.add('active'); + }; +} + +// Color palette variables +let dark = '#252525'; +let mid = '#888'; +let light = 'rgba(255, 255, 255, 0.4)'; + +// Add scrollmagic controller +let controller = new ScrollMagic.Controller(); + +//------------------ +//TIMELINE 1 +//------------------ + +// Add timeline +let tl1 = anime.timeline({autoplay: false}); + +// Add animations +let s1a1 = { + targets: '#one .elem', + opacity: 1, + translateX: { + value: [250, 0], + duration: 800 + }, + rotate: { + value: [90, 0], + duration: 1200, + easing: 'easeInOutSine' + }, + scale: { + value: [2, 1.5], + duration: 1100, + delay: 800, + easing: 'easeInOutQuart' + }, + color: [light, dark], + duration: 800, + delay: 0, + easing: 'easeInOutSine' +}; + +let s1a2 = { + targets: '#one .elem .blocks > div', + backgroundColor: [light, dark], + borderRadius: function(el) { return anime.random(2, 10); }, + delay: function(el) { return anime.random(0, 800); } +}; + +let s1a3 = { + targets: '#one .rectangle', + opacity: [0,1], + translateX: { + value: ['-100vw', '0vw'], + duration: 1500, + }, + translateY: { + value: [-100, 0], + duration: 1500, + }, + easing: 'easeInOutSine', + duration: 2000 +}; + +// Add children +tl1.add(s1a3).add(s1a1, '-=1600').add(s1a2, '-=1300'); + +// Get section height +let oneHeight = document.getElementById("one").clientHeight; +console.log('oneHeight: ' + oneHeight); + +//------------------ +//SCENE 1 +//------------------ + +//Add first scrollmagic scene +let scene1 = new ScrollMagic.Scene({ + triggerElement: "#one", + triggerHook: 0.5, + reverse: false +}) + +// Add debug indicators +.addIndicators({ + colorTrigger: "black", + colorStart: "blue", + colorEnd: "red", + indent: 10 +}) + +// Trigger animation timeline +.on("enter", function (event) { + tl1.play(); +}) + +.addTo(controller); + + + +//------------------ +//TIMELINE 2 +//------------------ + +// Add timeline +let tl2 = anime.timeline({autoplay: false}); + +// Add animations +let s2a1 = { + targets: '#two .elem img', + opacity: [0.3,1], + scale: [4,1], + duration: 1000, + delay: 0, + easing: 'easeInOutSine' +}; + +let s2a2 = { + targets: '#two .elem img', + scale: 1, + duration: 2000, +}; + +// Add children +tl2.add(s2a1).add(s2a2); + +// Get section height +let twoHeight = document.getElementById("two").clientHeight; +console.log('twoHeight: ' + twoHeight); + +//------------------ +//SCENE 2 +//------------------ + +//Add second scrollmagic scene +let scene2 = new ScrollMagic.Scene({ + triggerElement: "#two", + duration: 4500, + triggerHook: 0, +}) + +// Add debug indicators +.addIndicators({ + colorTrigger: "black", + colorStart: "blue", + colorEnd: "red", + indent: 10 +}) + +// Trigger animation timeline +//Use scroll position to play animation +.on("progress", function (event) { + tl2.seek(tl2.duration * event.progress); +}) + +.setPin('#two') +.addTo(controller); + + + +//------------------ +//TIMELINE 3 +//------------------ + +// Add timeline +let tl3 = anime.timeline({autoplay: false}); + +// Add animations +let s3a1 = { + targets: '#three h2', + opacity: 1, + scale: [4,1.5], + duration: 1000, + delay: 0, + easing: 'easeInOutSine' +}; + +// Add children +tl3.add(s3a1); + +//------------------ +//TIMELINE 4 +//------------------ + +// Add timeline +let tl4 = anime.timeline({autoplay: false}); + +// Add animations +let s3a2 = { + targets: '#three .image', + opacity: [0,.5], + translateX: { + value: ['-100%', '0%'], + duration: 1500, + }, + duration: 1000, + delay: 0, + easing: 'easeInOutSine' +}; + +// Add children +tl4.add(s3a2); + +//------------------ +//SCENE 3 +//------------------ + +//Add third scrollmagic scene +let scene3 = new ScrollMagic.Scene({ + triggerElement: "#three", + duration: 2000, + triggerHook: 0 +}) + +// Add debug indicators +.addIndicators({ + colorTrigger: "black", + colorStart: "blue", + colorEnd: "red", + indent: 10 +}) + +// Trigger animation timeline +//Use scroll position to play animation +.on("enter", function (event) { + tl3.play(); +}) +.on("progress", function (event) { + tl4.seek((tl4.duration * event.progress) * 3); +}) + +.setPin('#three') +.addTo(controller); + + + + +//------------------ +//TIMELINE 5 +//------------------ + +// Add timeline +let tl5 = anime.timeline({autoplay: false}); + +// Add animations +let s4a1 = { + targets: '#four h2', + opacity: 1, + scale: [1.5,3], + duration: 1000, + delay: 0, + easing: 'easeInOutSine' +}; + +// Add children +tl5.add(s4a1); + +//------------------ +//TIMELINE 6 +//------------------ + +// Add timeline +let tl6 = anime.timeline({autoplay: false}); + +// Add animations +let s4a2 = { + targets: '#four .image', + opacity: [0,.5], + translateX: { + value: ['100%', '0%'], + duration: 1500, + }, + duration: 1000, + delay: 0, + easing: 'easeInOutSine' +}; + +// Add children +tl6.add(s4a2); + +//------------------ +//SCENE 4 +//------------------ + +//Add third scrollmagic scene +let scene4 = new ScrollMagic.Scene({ + triggerElement: "#four", + duration: 2000, + triggerHook: 0 +}) + +// Add debug indicators +.addIndicators({ + colorTrigger: "black", + colorStart: "blue", + colorEnd: "red", + indent: 10 +}) + +// Trigger animation timeline +//Use scroll position to play animation +.on("enter", function (event) { + tl5.play(); +}) +.on("progress", function (event) { + tl6.seek((tl6.duration * event.progress) * 3); +}) + +.setPin('#four') +.addTo(controller); + + diff --git a/anime-js-scrollmagic-scroll-based-animations/src/style.css b/anime-js-scrollmagic-scroll-based-animations/src/style.css new file mode 100644 index 0000000..2a85ea5 --- /dev/null +++ b/anime-js-scrollmagic-scroll-based-animations/src/style.css @@ -0,0 +1,137 @@ +body { + padding-top: 56px; + font-weight: 300; + letter-spacing: 0.03em; + background-color: #f7f7f7; +} + +nav.navbar { + border-bottom: solid 1px #d6d6d6; +} + +.navbar .navbar-brand { + font-weight: 500; + letter-spacing: .065em; +} + + +.navbar-nav .nav-link { + letter-spacing: .035em; +} + +.navbar li.active a { + font-weight: 400; +} + +main.container-fluid { + padding-left: 0; + padding-right: 0; +} + +.spacer { + height: 40vh; +} + +.rectangle { + position: absolute; + width: 97vw; + height: 30vw; + border-radius: 10px; + background: linear-gradient(45deg, #69b7bf 25%, #ffe664); +} + +@media (min-width: 500px) { + .rectangle { + width: 80%; + } +} + +.section > .row > .col { + height: 100vh; + display: flex; + justify-content: center; + align-content: center; + align-items: center; +} + +#intro .col { + height: 50vh; + padding: 9vw 6vw; + font-size: 18px; +} + +@media (min-width: 1000px) { + #intro .col { + padding: 18vw 12vw; + font-size: 2.7vw; + } +} + +#one { + background-color: #212121; +} + +#one .elem { + opacity: 0; + letter-spacing: 0.04em; +} + +#one .text-block h2 { + font-size: 5vw; + letter-spacing: 0.2em; + font-weight: 300; + line-height: 1; +} + +#one .text-block h5 { + font-size: 4vw; + line-height: 1; +} + +#one .elem .blocks { + display: flex; + justify-content: space-between; + align-content: center; + align-items: center; +} + +#one .elem .blocks > div { + height: 20px; + width: 20px; + margin: 2px; + border-radius: 2px; + background-color: #333; +} + +#two { + height: auto; + overflow: hidden; + padding: 3vw 15vw 10vw; + background: linear-gradient(0deg, #69b7bf 25%, #ffe664); +} + +#three, #four { + position: relative; + overflow: hidden; +} + +#three .image, #four .image { + position: absolute; + top: 0; + bottom:0; + width: 100%; +} + +#three .image { + background-image: url("https://drive.google.com/uc?export=view&id=10tzeBrvoR5OO3EK_Wcg-gRxbVO7xv6em"); + background-size: cover; + background-repeat: no-repeat; + background-position: center; +} + +#four .image { + background-image: url("https://drive.google.com/uc?export=view&id=1SzCTDu5_eAF569lFHtNyIlUCrdW2mOXu"); + background-size: cover; + background-repeat: no-repeat; + background-position: center; +} diff --git a/another-branching-strategy-svg/README.markdown b/another-branching-strategy-svg/README.markdown new file mode 100644 index 0000000..1795626 --- /dev/null +++ b/another-branching-strategy-svg/README.markdown @@ -0,0 +1,15 @@ +# Another Branching Strategy | SVG + +A Pen created on CodePen.io. Original URL: [https://codepen.io/DonKarlssonSan/pen/zYoGejE](https://codepen.io/DonKarlssonSan/pen/zYoGejE). + +Click to generate a new random image! + +The lines are not allowed to intersect. + +My previous attempt is using recursion. I was not 100% happy with the results, the tree look unbalanced because the branches are drawn from the root to end, giving the posibility for one branch to occopy a lot of space. +https://codepen.io/DonKarlssonSan/pen/yLVNBrz + +This algorithm on the other hand uses a for loop instead of recursion, forcing it to draw all branches of the same level in one sweep. + +Buy a unique Crypto Art (NFT) on OpenSea: +https://opensea.io/collection/branching-strategy/ diff --git a/another-branching-strategy-svg/dist/index.html b/another-branching-strategy-svg/dist/index.html new file mode 100644 index 0000000..22e6488 --- /dev/null +++ b/another-branching-strategy-svg/dist/index.html @@ -0,0 +1,21 @@ + + + + + CodePen - Another Branching Strategy | SVG + + + + + + + + + + + + + diff --git a/another-branching-strategy-svg/dist/script.js b/another-branching-strategy-svg/dist/script.js new file mode 100644 index 0000000..3b17330 --- /dev/null +++ b/another-branching-strategy-svg/dist/script.js @@ -0,0 +1,175 @@ +/* + Johan Karlsson, 2021 + https://twitter.com/DonKarlssonSan + MIT License, see Details View +*/ + +let svg; +let w = 1650; +let h = 1170; +let lines; +let lengthFactor; +let branchFactor; +let revDivisor; + +function setup() { + svg = document.querySelector("svg"); + document.addEventListener("click", draw); + document.addEventListener("keydown", onKeyDown); +} + +function createSvgElement(elementName) { + const svgNs = "http://www.w3.org/2000/svg"; + return document.createElementNS(svgNs, elementName); +} + +function onKeyDown (e) { + if(e.code === "KeyD") { + download(); + } +} + +function download() { + let svgDoc = svg.outerHTML; + let filename = "branching-strategy.svg"; + let element = document.createElement("a"); + element.setAttribute("href", "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svgDoc)); + element.setAttribute("download", filename); + element.style.display = "none"; + document.body.appendChild(element); + element.addEventListener("click", e => e.stopPropagation()); + element.click(); + document.body.removeChild(element); +} + +// http://paulbourke.net/geometry/pointlineplane/ +function intersects(x1, y1, x2, y2, x3, y3, x4, y4) { + let denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1); + if (denom === 0) { + return false; + } + let ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denom; + let ub = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / denom; + if(ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1) { + return true; + } + else { + return false; + } +} + +function intersectsAnotherLine(x3, y3, x4, y4) { + for(let i = 0; i < lines.length; i++) { + let x1 = lines[i][0]; + let y1 = lines[i][1]; + let x2 = lines[i][2]; + let y2 = lines[i][3]; + if(intersects(x1, y1, x2, y2, x3, y3, x4, y4)) { + return true; + } + } + if(x4 < 0 || x4 > w || y4 < 0 || y4 > h) { + return true; + } + return false; +} + +function drawLine(groupElement, x1, y1, x2, y2) { + let line = createSvgElement("line"); + line.setAttribute("x1", x1); + line.setAttribute("y1", y1); + line.setAttribute("x2", x2); + line.setAttribute("y2", y2); + + groupElement.appendChild(line); +} + +// I have a recursive version here that I did first: +// https://codepen.io/DonKarlssonSan/pen/yLVNBrz +// But I was not satisfied with the result. The +// problem being it draws a branch at a time. But +// since I want revDivisor number of base branches +// I don't want the first base branch take up all +// the space. +// The solution is to perform the drawing with a +// loop instead. First drawing each base branch and +// then draw their children and then their children +// and so on. This gives a more balanced tree +// around the center. +function drawTree(groupElement) { + lines = []; + maxLength = Math.min(w, h) / 2; + branchFactor = Math.random() * 4 + 3; + lengthFactor = Math.random() * 0.8 + 0.2; + revDivisor = Math.round(Math.random() * 8 + 2); + let nrOfIterations = Math.round(Math.random() * 5 + 2); + let nodes = []; + for(let i = 0; i < revDivisor; i++) { + let angle = i / revDivisor * Math.PI * 2; + let x = w / 2; + let y = h / 2; + nodes.push({ + x: x, + y: y, + angle: angle, + level: 0 + }); + } + while(nodes.length > 0) { + let node = nodes.shift(); + let length = (Math.random() * 0.9 + 0.1) * (nrOfIterations - node.level) / nrOfIterations * maxLength; + // Move the start point slightly to avoid intersection + node.x += Math.cos(node.angle); + node.y += Math.sin(node.angle); + let x2 = node.x + Math.cos(node.angle) * length; + let y2 = node.y + Math.sin(node.angle) * length; + + if(intersectsAnotherLine(node.x, node.y, x2, y2)) { + continue; + } + drawLine(groupElement, node.x, node.y, x2, y2); + lines.push([node.x, node.y, x2, y2]); + + if(node.level < nrOfIterations) { + let nrOfBranches = (nrOfIterations - node.level) * 2; //Math.ceil(1 * (nrOfIterations - node.level) * branchFactor); + for(let i = 0; i < nrOfBranches; i++) { + let f = Math.random() * lengthFactor; + let newLength = length * f; + let newX = node.x + Math.cos(node.angle) * newLength; + let newY = node.y + Math.sin(node.angle) * newLength; + let direction = Math.random() > 0.5 ? -1 : 1; + let deltaAngle = Math.PI / revDivisor * direction; + let angle = node.angle + deltaAngle; + nodes.push({ + x: newX, + y: newY, + angle: angle, + level: node.level + 1, + }); + } + } + } +} + +function draw() { + console.clear(); + + let group = document.querySelector("#container"); + if(group) { + group.remove(); + } + group = createSvgElement("g"); + group.setAttribute("id", "container"); + group.setAttribute("fill", "none"); + group.setAttribute("stroke", "white"); + + drawTree(group); + + let logo = new Logo(w - 90, h - 70, "white"); + logo.draw(group); + + svg.appendChild(group); +} + +setup(); +draw(); \ No newline at end of file diff --git a/another-branching-strategy-svg/dist/style.css b/another-branching-strategy-svg/dist/style.css new file mode 100644 index 0000000..1178cb6 --- /dev/null +++ b/another-branching-strategy-svg/dist/style.css @@ -0,0 +1,13 @@ +html, body { + height: 100%; + margin: 0; + cursor: pointer; + background-color: #000; +} + +svg { + position: absolute; + width: 100%; + height: 100%; + background-color: #223; +} \ No newline at end of file diff --git a/another-branching-strategy-svg/license.txt b/another-branching-strategy-svg/license.txt new file mode 100644 index 0000000..dff0881 --- /dev/null +++ b/another-branching-strategy-svg/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Johan Karlsson (https://codepen.io/DonKarlssonSan/pen/zYoGejE) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/another-branching-strategy-svg/src/index.html b/another-branching-strategy-svg/src/index.html new file mode 100644 index 0000000..6dd7cb4 --- /dev/null +++ b/another-branching-strategy-svg/src/index.html @@ -0,0 +1,6 @@ + + + diff --git a/another-branching-strategy-svg/src/script.js b/another-branching-strategy-svg/src/script.js new file mode 100644 index 0000000..f5b563a --- /dev/null +++ b/another-branching-strategy-svg/src/script.js @@ -0,0 +1,175 @@ +/* + Johan Karlsson, 2021 + https://twitter.com/DonKarlssonSan + MIT License, see Details View +*/ + +let svg; +let w = 1650; +let h = 1170; +let lines; +let lengthFactor; +let branchFactor; +let revDivisor; + +function setup() { + svg = document.querySelector("svg"); + document.addEventListener("click", draw); + document.addEventListener("keydown", onKeyDown); +} + +function createSvgElement(elementName) { + const svgNs = "http://www.w3.org/2000/svg"; + return document.createElementNS(svgNs, elementName); +} + +function onKeyDown (e) { + if(e.code === "KeyD") { + download(); + } +} + +function download() { + let svgDoc = svg.outerHTML; + let filename = "branching-strategy.svg"; + let element = document.createElement("a"); + element.setAttribute("href", "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svgDoc)); + element.setAttribute("download", filename); + element.style.display = "none"; + document.body.appendChild(element); + element.addEventListener("click", e => e.stopPropagation()); + element.click(); + document.body.removeChild(element); +} + +// http://paulbourke.net/geometry/pointlineplane/ +function intersects(x1, y1, x2, y2, x3, y3, x4, y4) { + let denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1); + if (denom === 0) { + return false; + } + let ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denom; + let ub = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / denom; + if(ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1) { + return true; + } + else { + return false; + } +} + +function intersectsAnotherLine(x3, y3, x4, y4) { + for(let i = 0; i < lines.length; i++) { + let x1 = lines[i][0]; + let y1 = lines[i][1]; + let x2 = lines[i][2]; + let y2 = lines[i][3]; + if(intersects(x1, y1, x2, y2, x3, y3, x4, y4)) { + return true; + } + } + if(x4 < 0 || x4 > w || y4 < 0 || y4 > h) { + return true; + } + return false; +} + +function drawLine(groupElement, x1, y1, x2, y2) { + let line = createSvgElement("line"); + line.setAttribute("x1", x1); + line.setAttribute("y1", y1); + line.setAttribute("x2", x2); + line.setAttribute("y2", y2); + + groupElement.appendChild(line); +} + +// I have a recursive version here that I did first: +// https://codepen.io/DonKarlssonSan/pen/yLVNBrz +// But I was not satisfied with the result. The +// problem being it draws a branch at a time. But +// since I want revDivisor number of base branches +// I don't want the first base branch take up all +// the space. +// The solution is to perform the drawing with a +// loop instead. First drawing each base branch and +// then draw their children and then their children +// and so on. This gives a more balanced tree +// around the center. +function drawTree(groupElement) { + lines = []; + maxLength = Math.min(w, h) / 2; + branchFactor = Math.random() * 4 + 3; + lengthFactor = Math.random() * 0.8 + 0.2; + revDivisor = Math.round(Math.random() * 8 + 2); + let nrOfIterations = Math.round(Math.random() * 5 + 2); + let nodes = []; + for(let i = 0; i < revDivisor; i++) { + let angle = i / revDivisor * Math.PI * 2; + let x = w / 2; + let y = h / 2; + nodes.push({ + x: x, + y: y, + angle: angle, + level: 0 + }); + } + while(nodes.length > 0) { + let node = nodes.shift(); + let length = (Math.random() * 0.9 + 0.1) * (nrOfIterations - node.level) / nrOfIterations * maxLength; + // Move the start point slightly to avoid intersection + node.x += Math.cos(node.angle); + node.y += Math.sin(node.angle); + let x2 = node.x + Math.cos(node.angle) * length; + let y2 = node.y + Math.sin(node.angle) * length; + + if(intersectsAnotherLine(node.x, node.y, x2, y2)) { + continue; + } + drawLine(groupElement, node.x, node.y, x2, y2); + lines.push([node.x, node.y, x2, y2]); + + if(node.level < nrOfIterations) { + let nrOfBranches = (nrOfIterations - node.level) * 2; //Math.ceil(1 * (nrOfIterations - node.level) * branchFactor); + for(let i = 0; i < nrOfBranches; i++) { + let f = Math.random() * lengthFactor; + let newLength = length * f; + let newX = node.x + Math.cos(node.angle) * newLength; + let newY = node.y + Math.sin(node.angle) * newLength; + let direction = Math.random() > 0.5 ? -1 : 1; + let deltaAngle = Math.PI / revDivisor * direction; + let angle = node.angle + deltaAngle; + nodes.push({ + x: newX, + y: newY, + angle: angle, + level: node.level + 1, + }); + } + } + } +} + +function draw() { + console.clear(); + + let group = document.querySelector("#container"); + if(group) { + group.remove(); + } + group = createSvgElement("g"); + group.setAttribute("id", "container"); + group.setAttribute("fill", "none"); + group.setAttribute("stroke", "white"); + + drawTree(group); + + let logo = new Logo(w - 90, h - 70, "white"); + logo.draw(group); + + svg.appendChild(group); +} + +setup(); +draw(); diff --git a/another-branching-strategy-svg/src/style.css b/another-branching-strategy-svg/src/style.css new file mode 100644 index 0000000..f928470 --- /dev/null +++ b/another-branching-strategy-svg/src/style.css @@ -0,0 +1,13 @@ +html, body { + height: 100%; + margin: 0; + cursor: pointer; + background-color: #000; +} + +svg { + position: absolute; + width: 100%; + height: 100%; + background-color: #223; +} diff --git a/apart/README.markdown b/apart/README.markdown new file mode 100644 index 0000000..efd4574 --- /dev/null +++ b/apart/README.markdown @@ -0,0 +1,5 @@ +# Apart + +A Pen created on CodePen.io. Original URL: [https://codepen.io/Gthibaud/pen/zYBZmVg](https://codepen.io/Gthibaud/pen/zYBZmVg). + + diff --git a/apart/dist/index.html b/apart/dist/index.html new file mode 100644 index 0000000..afc7107 --- /dev/null +++ b/apart/dist/index.html @@ -0,0 +1,16 @@ + + + + + CodePen - Apart + + + + + + + + + + + diff --git a/apart/dist/script.js b/apart/dist/script.js new file mode 100644 index 0000000..e9e70f1 --- /dev/null +++ b/apart/dist/script.js @@ -0,0 +1,166 @@ +let shape = [{ + "x": 0.04, + "y": 0.46430333455403644 + }, + { + "x": 0.11380900382995605, + "y": 0.3257950146993001 + }, + { + "x": 0.13240699768066405, + "y": 0.18728583653767902 + }, + { + "x": 0.3311690139770508, + "y": 0.03333333333333333 + }, + { + "x": 0.7106759643554688, + "y": 0.03333333333333333 + }, + { + "x": 0.8193560028076172, + "y": 0.12213333447774251 + }, + { + "x": 0.8960710144042969, + "y": 0.35668166478474933 + }, + { + "x": 0.7821600341796875, + "y": 0.5477949778238932 + }, + { + "x": 0.7821600341796875, + "y": 0.8016475041707357 + }, + { + "x": 0.96, + "y": 1 + }, + { + "x": 0.42822498321533203, + "y": 1 + }, + { + "x": 0.405, + "y": 0.7292558034261067 + }, + { + "x": 0.2427669906616211, + "y": 0.7198350270589192 + }, + { + "x": 0.18, + "y": 0.6875 + }, + { + "x": 0.15268500328063964, + "y": 0.6397216796875 + }, + { + "x": 0.13240699768066405, + "y": 0.49181251525878905 + }, + { + "x": 0.05278580188751221, + "y": 0.4807125091552734 + } + ]; + + function getShape(points, x, y, w, h) { + + let source_ratio = 100 / 120, + target_ratio = w / h; + + let image_width, image_height; + + let side = source_ratio > target_ratio; + + if (side) { + image_width = w; + image_height = image_width / source_ratio; + } else { + image_height = h; + image_width = image_height * source_ratio; + } + + let offset_x = x + w / 2 - image_width / 2, + offset_y = y + h - image_height; + + return points.map((p, i) => { + return { + x: offset_x + p.x * image_width, + y: offset_y + p.y * image_height + }; + }); + + } + + function getDistance(points) { + let result = []; + for (var i = 0; i < points.length; i++) { + let p = points[i], + past_p = points[mod(i - 1, points.length)], + next_p = points[(i + 1) % points.length]; + let last_dist = dist(past_p.x, past_p.y, p.x, p.y), + next_dist = dist(p.x, p.y, next_p.x, next_p.y); + result.push(min(last_dist, next_dist)); + } + return result; + } + let faces = []; + + function setup() { + createCanvas(windowWidth, windowHeight); + noStroke(); + init(); + } + + function windowResized() { + resizeCanvas(windowWidth, windowHeight); + init(); + } + + function init() { + let f1 = { + color: "#FD86FF", + origin: getShape(shape, -width * 0.1, 0, width, height) + }; + f1.point_dist = getDistance(f1.origin); + + let f2 = { + color: "#FFEB35", + origin: getShape(shape, 0, height * 0.1, width, height) + }; + f2.point_dist = getDistance(f2.origin); + + let f3 = { + color: "#2CB3FF", + origin: getShape(shape, width * 0.1, 0, width, height) + }; + f3.point_dist = getDistance(f3.origin); + faces = [f1, f2, f3]; + } + + function draw() { + background("#FFFAEF"); + blendMode(MULTIPLY); + faces.forEach((f, i) => { + fill(f.color); + beginShape(); + f.origin.forEach((p, p_i) => { + let t = millis() / 1000; + let s = map(mouseX, 0, width, 0.1, 0.5), + s_cos = map(mouseY, 0, height, 0.1, 0.5); + vertex(p.x + sin(t + (i + p_i)) * f.point_dist[p_i] * s_cos, p.y + cos(1000 + t - (i + p_i)) * f.point_dist[p_i] * s); + }); + endShape(CLOSE); + }); + blendMode(BLEND); + } + + + function mod(n, m) { + return ((n % m) + m) % m; + } \ No newline at end of file diff --git a/apart/dist/style.css b/apart/dist/style.css new file mode 100644 index 0000000..45e7cf0 --- /dev/null +++ b/apart/dist/style.css @@ -0,0 +1,4 @@ +body{ + margin: 0; + overflow: hidden; + } \ No newline at end of file diff --git a/apart/license.txt b/apart/license.txt new file mode 100644 index 0000000..3d55de2 --- /dev/null +++ b/apart/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Tibo (https://codepen.io/Gthibaud/pen/zYBZmVg) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/apart/src/index.html b/apart/src/index.html new file mode 100644 index 0000000..e69de29 diff --git a/apart/src/script.js b/apart/src/script.js new file mode 100644 index 0000000..3afde2e --- /dev/null +++ b/apart/src/script.js @@ -0,0 +1,166 @@ + let shape = [{ + "x": 0.04, + "y": 0.46430333455403644 + }, + { + "x": 0.11380900382995605, + "y": 0.3257950146993001 + }, + { + "x": 0.13240699768066405, + "y": 0.18728583653767902 + }, + { + "x": 0.3311690139770508, + "y": 0.03333333333333333 + }, + { + "x": 0.7106759643554688, + "y": 0.03333333333333333 + }, + { + "x": 0.8193560028076172, + "y": 0.12213333447774251 + }, + { + "x": 0.8960710144042969, + "y": 0.35668166478474933 + }, + { + "x": 0.7821600341796875, + "y": 0.5477949778238932 + }, + { + "x": 0.7821600341796875, + "y": 0.8016475041707357 + }, + { + "x": 0.96, + "y": 1 + }, + { + "x": 0.42822498321533203, + "y": 1 + }, + { + "x": 0.405, + "y": 0.7292558034261067 + }, + { + "x": 0.2427669906616211, + "y": 0.7198350270589192 + }, + { + "x": 0.18, + "y": 0.6875 + }, + { + "x": 0.15268500328063964, + "y": 0.6397216796875 + }, + { + "x": 0.13240699768066405, + "y": 0.49181251525878905 + }, + { + "x": 0.05278580188751221, + "y": 0.4807125091552734 + } + ]; + + function getShape(points, x, y, w, h) { + + let source_ratio = 100 / 120, + target_ratio = w / h; + + let image_width, image_height; + + let side = source_ratio > target_ratio; + + if (side) { + image_width = w; + image_height = image_width / source_ratio; + } else { + image_height = h; + image_width = image_height * source_ratio; + } + + let offset_x = x + w / 2 - image_width / 2, + offset_y = y + h - image_height; + + return points.map((p, i) => { + return { + x: offset_x + p.x * image_width, + y: offset_y + p.y * image_height + }; + }); + + } + + function getDistance(points) { + let result = []; + for (var i = 0; i < points.length; i++) { + let p = points[i], + past_p = points[mod(i - 1, points.length)], + next_p = points[(i + 1) % points.length]; + let last_dist = dist(past_p.x, past_p.y, p.x, p.y), + next_dist = dist(p.x, p.y, next_p.x, next_p.y); + result.push(min(last_dist, next_dist)); + } + return result; + } + let faces = []; + + function setup() { + createCanvas(windowWidth, windowHeight); + noStroke(); + init(); + } + + function windowResized() { + resizeCanvas(windowWidth, windowHeight); + init(); + } + + function init() { + let f1 = { + color: "#FD86FF", + origin: getShape(shape, -width * 0.1, 0, width, height) + }; + f1.point_dist = getDistance(f1.origin); + + let f2 = { + color: "#FFEB35", + origin: getShape(shape, 0, height * 0.1, width, height) + }; + f2.point_dist = getDistance(f2.origin); + + let f3 = { + color: "#2CB3FF", + origin: getShape(shape, width * 0.1, 0, width, height) + }; + f3.point_dist = getDistance(f3.origin); + faces = [f1, f2, f3]; + } + + function draw() { + background("#FFFAEF"); + blendMode(MULTIPLY); + faces.forEach((f, i) => { + fill(f.color); + beginShape(); + f.origin.forEach((p, p_i) => { + let t = millis() / 1000; + let s = map(mouseX, 0, width, 0.1, 0.5), + s_cos = map(mouseY, 0, height, 0.1, 0.5); + vertex(p.x + sin(t + (i + p_i)) * f.point_dist[p_i] * s_cos, p.y + cos(1000 + t - (i + p_i)) * f.point_dist[p_i] * s); + }); + endShape(CLOSE); + }); + blendMode(BLEND); + } + + + function mod(n, m) { + return ((n % m) + m) % m; + } diff --git a/apart/src/style.css b/apart/src/style.css new file mode 100644 index 0000000..7c5650a --- /dev/null +++ b/apart/src/style.css @@ -0,0 +1,4 @@ + body{ + margin: 0; + overflow: hidden; + } \ No newline at end of file diff --git a/apple-inspired-pride-clock/LICENSE.txt b/apple-inspired-pride-clock/LICENSE.txt new file mode 100644 index 0000000..2e4b2f7 --- /dev/null +++ b/apple-inspired-pride-clock/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2022 by Scott Kellum (https://codepen.io/scottkellum/pen/gOvXodv) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/apple-inspired-pride-clock/README.md b/apple-inspired-pride-clock/README.md new file mode 100644 index 0000000..1c0ada5 --- /dev/null +++ b/apple-inspired-pride-clock/README.md @@ -0,0 +1,4 @@ +# Apple inspired Pride clock + +A Pen created on CodePen.io. Original URL: [https://codepen.io/scottkellum/pen/gOvXodv](https://codepen.io/scottkellum/pen/gOvXodv). + diff --git a/apple-inspired-pride-clock/dist/index.html b/apple-inspired-pride-clock/dist/index.html new file mode 100644 index 0000000..a0c8192 --- /dev/null +++ b/apple-inspired-pride-clock/dist/index.html @@ -0,0 +1,24 @@ + + + + + CodePen - Apple inspired Pride clock + + + + + +a
+
+
+
9
+
41
+
+
+
+
+ + + + + diff --git a/apple-inspired-pride-clock/dist/script.js b/apple-inspired-pride-clock/dist/script.js new file mode 100644 index 0000000..32ad86a --- /dev/null +++ b/apple-inspired-pride-clock/dist/script.js @@ -0,0 +1,7 @@ +var time = new Date(); + +h = time.getHours(); +m = time.getMinutes(); + +document.getElementById("hour").innerHTML = h; +document.getElementById("min").innerHTML = m; \ No newline at end of file diff --git a/apple-inspired-pride-clock/dist/style.css b/apple-inspired-pride-clock/dist/style.css new file mode 100644 index 0000000..e54cbe1 --- /dev/null +++ b/apple-inspired-pride-clock/dist/style.css @@ -0,0 +1,73 @@ +html { + font-family: -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, helvetica, Ubuntu, roboto, noto, arial, sans-serif; +} + +html, +body { + height: 100%; + width: 100%; + overflow: hidden; +} + +::-moz-selection { + background: #000; + color: #858585; +} + +::selection { + background: #000; + color: #858585; +} + +.clock { + font-size: 45vmin; + line-height: 0.8; + position: static; + top: 0; + bottom: 0; + left: 0; + right: 0; + font-style: italic; + font-weight: 1000; + letter-spacing: -0.05em; + font-variant-numeric: tabular-nums; + overflow: hidden; +} + +.clock-inner { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + display: grid; + place-content: center; + background: repeating-radial-gradient(circle at -150% -25%, #fff, #777 0.025em, #fff 0.05em); + filter: contrast(2000%); +} + +.numbers { + font-size: 1em; + filter: blur(0.0125em); + transform: rotate(6deg); + opacity: 0.46; +} + +.hour { + transform: translatex(0.2em); +} + +.min { + transform: translatex(-0.2em); +} + +.clock-overlay { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + mix-blend-mode: lighten; + pointer-events: none; + background: repeating-radial-gradient(circle at -150% -25% , #f7b232 0em, #f7b232 0.05em, #e12626 0.05em, #e12626 0.1em, #733d2c 0.1em, #733d2c 0.15em, #2b1d1d 0.15em, #2b1d1d 0.2em, #511c69 0.2em, #511c69 0.25em, #1c73c4 0.25em, #1c73c4 0.3em, #a0cdfb 0.3em, #a0cdfb 0.35em, #69d6ad 0.35em, #69d6ad 0.4em, #ffcd04 0.4em, #ffcd04 0.45em, #fbaaaa 0.45em, #fbaaaa 0.5em); +} \ No newline at end of file diff --git a/apple-inspired-pride-clock/src/index.html b/apple-inspired-pride-clock/src/index.html new file mode 100644 index 0000000..fc12e02 --- /dev/null +++ b/apple-inspired-pride-clock/src/index.html @@ -0,0 +1,9 @@ +a
+
+
+
9
+
41
+
+
+
+
\ No newline at end of file diff --git a/apple-inspired-pride-clock/src/script.js b/apple-inspired-pride-clock/src/script.js new file mode 100644 index 0000000..0527b8a --- /dev/null +++ b/apple-inspired-pride-clock/src/script.js @@ -0,0 +1,7 @@ +var time = new Date(); + +h = time.getHours(); +m = time.getMinutes(); + +document.getElementById("hour").innerHTML = h; +document.getElementById("min").innerHTML = m; diff --git a/apple-inspired-pride-clock/src/style.scss b/apple-inspired-pride-clock/src/style.scss new file mode 100644 index 0000000..80a861d --- /dev/null +++ b/apple-inspired-pride-clock/src/style.scss @@ -0,0 +1,94 @@ +$density: 0.05em; + +html { + font-family: -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, + helvetica neue, helvetica, Ubuntu, roboto, noto, arial, sans-serif; +} + +html, +body { + height: 100%; + width: 100%; + overflow: hidden; +} + +::selection { + background: #000; + color: hsl(0deg, 0%, 52%); +} + +@mixin rainbow($colors...) { + $output: ""; + $i: 0; + + @each $color in $colors { + $output: $output + + ", #{$color} #{$density * $i}, #{$color} #{$density * ($i + 1)}"; + $i: $i + 1; + } + background: repeating-radial-gradient(circle at -150% -25% unquote($output)); +} + +.clock { + font-size: 45vmin; + line-height: 0.8; + position: static; + top: 0; + bottom: 0; + left: 0; + right: 0; + font-style: italic; + font-weight: 1000; + letter-spacing: -0.05em; + font-variant-numeric: tabular-nums; + overflow: hidden; +} +.clock-inner { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + display: grid; + place-content: center; + background: repeating-radial-gradient( + circle at -150% -25%, + #fff, + #777 ($density / 2), + #fff $density + ); + filter: contrast(2000%); +} +.numbers { + font-size: 1em; + filter: blur($density / 4); + transform: rotate(6deg); + opacity: 0.46; +} +.hour { + transform: translatex(0.2em); +} +.min { + transform: translatex(-0.2em); +} +.clock-overlay { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + mix-blend-mode: lighten; + pointer-events: none; + @include rainbow( + #f7b232, + #e12626, + #733d2c, + #2b1d1d, + #511c69, + #1c73c4, + #a0cdfb, + #69d6ad, + #ffcd04, + #fbaaaa + ); +} diff --git a/apple-keynote-animation/README.markdown b/apple-keynote-animation/README.markdown new file mode 100644 index 0000000..825c9bd --- /dev/null +++ b/apple-keynote-animation/README.markdown @@ -0,0 +1,5 @@ +# Apple Keynote animation + +A Pen created on CodePen.io. Original URL: [https://codepen.io/Mamboleoo/pen/ZELqMOg](https://codepen.io/Mamboleoo/pen/ZELqMOg). + + diff --git a/apple-keynote-animation/dist/index.html b/apple-keynote-animation/dist/index.html new file mode 100644 index 0000000..d609d4f --- /dev/null +++ b/apple-keynote-animation/dist/index.html @@ -0,0 +1,20 @@ + + + + + CodePen - Apple Keynote animation + + + + + + + + + + + + + + + diff --git a/apple-keynote-animation/dist/script.js b/apple-keynote-animation/dist/script.js new file mode 100644 index 0000000..c6ee096 --- /dev/null +++ b/apple-keynote-animation/dist/script.js @@ -0,0 +1,145 @@ +console.clear(); + +const canvas = document.querySelector('canvas'); +const svg = document.querySelector('svg'); +const ctx = canvas.getContext('2d'); +let width = svg.clientWidth; +let height = svg.clientHeight; + +canvas.width = width; +canvas.height = height; + +const gradients = [ + [ + [0, [118, 179, 236]], + [10, [41, 102, 193]], + [20, [129, 77, 185]], + [30, [129, 77, 185]], + [50, [250, 148, 170]], + [60, [237, 70, 54]], + [70, [253, 134, 100]], + [80, [254, 156, 33]], + [90, [250, 213, 0]], + [100, [171, 211, 96]] + ], + [ + [0, [1, 123, 147]], + [100, [131, 201, 167]] + ] +]; + +const dots = []; +class Dot { + constructor (x, y, color, delay) { + this.x = x; + this.y = y; + this.r = 0; + this.color = color; + this.delay = (delay * 0.9); + this.tween = gsap.fromTo(this, { + r: 0, + x: x - 0.05, + y: y - 0.05 + }, { + x: x, + y: y, + r: () => width * 0.03 + (Math.abs(Math.sin(this.delay * 3.4 - 1.5)) * width * 0.02), + duration: 1.8, + ease: 'elastic.out(1, 0.5)', + delay: this.delay + }); + } + draw () { + ctx.fillStyle = this.color; + ctx.beginPath(); + ctx.arc(this.x * width, this.y * height, this.r, 0, 2 * Math.PI); + ctx.fill(); + } +} + +function init () { + const paths = svg.querySelectorAll('path'); + const totalLength = [...paths].reduce((p) => p.getTotalLength()); + let sum_length = 0; + paths.forEach((path, pathIndex) => { + const length = path.getTotalLength(); + for (let i = 0; i < length; i+=2) { + const point = path.getPointAtLength(i); + const x = point.x / 400; + const y = point.y / 488; + const RGB_color = getColor(pathIndex, length, i / length); + const color = `rgb(${RGB_color[0]}, ${RGB_color[1]}, ${RGB_color[2]})`; + + const dot = new Dot(x, y, color, (1.5 - (sum_length / totalLength))); + dots.push(dot); + sum_length += 2; + } + }); +} + +/* Code copied from https://stackoverflow.com/a/30144587 */ +function pickHex(color1, color2, weight) { + var p = weight; + var w = p * 2 - 1; + var w1 = (w/1+1) / 2; + var w2 = 1 - w1; + var rgb = [Math.round(color1[0] * w1 + color2[0] * w2), + Math.round(color1[1] * w1 + color2[1] * w2), + Math.round(color1[2] * w1 + color2[2] * w2)]; + return rgb; +} +function getColor(pathIndex, pathLength, colorIndex) { + var colorRange = []; + let stop = false; + const gradient = gradients[pathIndex]; + gradient.forEach((step, index) => { + if (!stop && (colorIndex * 100) <= step[0]) { + if (index === 0) { + index = 1; + } + colorRange = [index - 1, index]; + stop = true; + } + }); + + //Get the two closest colors + var firstcolor = gradient[colorRange[0]][1]; + var secondcolor = gradient[colorRange[1]][1]; + //Calculate ratio between the two closest colors + var firstcolor_x = pathLength * (gradient[colorRange[0]][0]/100); + var secondcolor_x = pathLength * (gradient[colorRange[1]][0]/100)-firstcolor_x; + var slider_x = pathLength * colorIndex - firstcolor_x; + var ratio = slider_x / secondcolor_x; + + //Get the color with pickHex(thx, less.js's mix function!) + return pickHex(secondcolor, firstcolor, ratio); +} + + +function render () { + requestAnimationFrame(render); + ctx.clearRect(0, 0, width, height); + dots.forEach(dot => { + dot.draw(); + }); +} + +window.addEventListener('click', () => { + dots.forEach(dot => { + dot.tween.restart(true); + }); +}); + +window.addEventListener('resize', () => { + width = svg.clientWidth; + height = svg.clientHeight; + + canvas.width = width; + canvas.height = height; + dots.forEach(dot => { + dot.tween.invalidate().restart(true); + }); +}); + +init(); +requestAnimationFrame(render); \ No newline at end of file diff --git a/apple-keynote-animation/dist/style.css b/apple-keynote-animation/dist/style.css new file mode 100644 index 0000000..a2dd441 --- /dev/null +++ b/apple-keynote-animation/dist/style.css @@ -0,0 +1,25 @@ +svg { + width: 80vmin; + opacity: 0; + position: absolute; + left: 50%; + top: 48%; + transform: translate(-50%, -50%); + transition: 0.15s ease-out; +} +svg:hover { + opacity: 1; +} + +body { + height: 100vh; + overflow: hidden; + cursor: pointer; +} + +canvas { + position: absolute; + left: 50%; + top: 48%; + transform: translate(-50%, -50%); +} \ No newline at end of file diff --git a/apple-keynote-animation/license.txt b/apple-keynote-animation/license.txt new file mode 100644 index 0000000..cc0f3a9 --- /dev/null +++ b/apple-keynote-animation/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Louis Hoebregts (https://codepen.io/Mamboleoo/pen/ZELqMOg) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/apple-keynote-animation/src/index.html b/apple-keynote-animation/src/index.html new file mode 100644 index 0000000..4c7ac6f --- /dev/null +++ b/apple-keynote-animation/src/index.html @@ -0,0 +1,5 @@ + + + + + diff --git a/apple-keynote-animation/src/script.js b/apple-keynote-animation/src/script.js new file mode 100644 index 0000000..c6ee096 --- /dev/null +++ b/apple-keynote-animation/src/script.js @@ -0,0 +1,145 @@ +console.clear(); + +const canvas = document.querySelector('canvas'); +const svg = document.querySelector('svg'); +const ctx = canvas.getContext('2d'); +let width = svg.clientWidth; +let height = svg.clientHeight; + +canvas.width = width; +canvas.height = height; + +const gradients = [ + [ + [0, [118, 179, 236]], + [10, [41, 102, 193]], + [20, [129, 77, 185]], + [30, [129, 77, 185]], + [50, [250, 148, 170]], + [60, [237, 70, 54]], + [70, [253, 134, 100]], + [80, [254, 156, 33]], + [90, [250, 213, 0]], + [100, [171, 211, 96]] + ], + [ + [0, [1, 123, 147]], + [100, [131, 201, 167]] + ] +]; + +const dots = []; +class Dot { + constructor (x, y, color, delay) { + this.x = x; + this.y = y; + this.r = 0; + this.color = color; + this.delay = (delay * 0.9); + this.tween = gsap.fromTo(this, { + r: 0, + x: x - 0.05, + y: y - 0.05 + }, { + x: x, + y: y, + r: () => width * 0.03 + (Math.abs(Math.sin(this.delay * 3.4 - 1.5)) * width * 0.02), + duration: 1.8, + ease: 'elastic.out(1, 0.5)', + delay: this.delay + }); + } + draw () { + ctx.fillStyle = this.color; + ctx.beginPath(); + ctx.arc(this.x * width, this.y * height, this.r, 0, 2 * Math.PI); + ctx.fill(); + } +} + +function init () { + const paths = svg.querySelectorAll('path'); + const totalLength = [...paths].reduce((p) => p.getTotalLength()); + let sum_length = 0; + paths.forEach((path, pathIndex) => { + const length = path.getTotalLength(); + for (let i = 0; i < length; i+=2) { + const point = path.getPointAtLength(i); + const x = point.x / 400; + const y = point.y / 488; + const RGB_color = getColor(pathIndex, length, i / length); + const color = `rgb(${RGB_color[0]}, ${RGB_color[1]}, ${RGB_color[2]})`; + + const dot = new Dot(x, y, color, (1.5 - (sum_length / totalLength))); + dots.push(dot); + sum_length += 2; + } + }); +} + +/* Code copied from https://stackoverflow.com/a/30144587 */ +function pickHex(color1, color2, weight) { + var p = weight; + var w = p * 2 - 1; + var w1 = (w/1+1) / 2; + var w2 = 1 - w1; + var rgb = [Math.round(color1[0] * w1 + color2[0] * w2), + Math.round(color1[1] * w1 + color2[1] * w2), + Math.round(color1[2] * w1 + color2[2] * w2)]; + return rgb; +} +function getColor(pathIndex, pathLength, colorIndex) { + var colorRange = []; + let stop = false; + const gradient = gradients[pathIndex]; + gradient.forEach((step, index) => { + if (!stop && (colorIndex * 100) <= step[0]) { + if (index === 0) { + index = 1; + } + colorRange = [index - 1, index]; + stop = true; + } + }); + + //Get the two closest colors + var firstcolor = gradient[colorRange[0]][1]; + var secondcolor = gradient[colorRange[1]][1]; + //Calculate ratio between the two closest colors + var firstcolor_x = pathLength * (gradient[colorRange[0]][0]/100); + var secondcolor_x = pathLength * (gradient[colorRange[1]][0]/100)-firstcolor_x; + var slider_x = pathLength * colorIndex - firstcolor_x; + var ratio = slider_x / secondcolor_x; + + //Get the color with pickHex(thx, less.js's mix function!) + return pickHex(secondcolor, firstcolor, ratio); +} + + +function render () { + requestAnimationFrame(render); + ctx.clearRect(0, 0, width, height); + dots.forEach(dot => { + dot.draw(); + }); +} + +window.addEventListener('click', () => { + dots.forEach(dot => { + dot.tween.restart(true); + }); +}); + +window.addEventListener('resize', () => { + width = svg.clientWidth; + height = svg.clientHeight; + + canvas.width = width; + canvas.height = height; + dots.forEach(dot => { + dot.tween.invalidate().restart(true); + }); +}); + +init(); +requestAnimationFrame(render); \ No newline at end of file diff --git a/apple-keynote-animation/src/style.scss b/apple-keynote-animation/src/style.scss new file mode 100644 index 0000000..b6fcef1 --- /dev/null +++ b/apple-keynote-animation/src/style.scss @@ -0,0 +1,23 @@ +svg { + width: 80vmin; + opacity: 0; + position: absolute; + left: 50%; + top: 48%; + transform: translate(-50%, -50%); + transition: 0.15s ease-out; + &:hover { + opacity: 1; + } +} +body { + height: 100vh; + overflow: hidden; + cursor: pointer; +} +canvas { + position: absolute; + left: 50%; + top: 48%; + transform: translate(-50%, -50%); +} \ No newline at end of file diff --git a/art-gallery/README.markdown b/art-gallery/README.markdown new file mode 100644 index 0000000..ce0f121 --- /dev/null +++ b/art-gallery/README.markdown @@ -0,0 +1,6 @@ +# Art Gallery + +A Pen created on CodePen.io. Original URL: [https://codepen.io/isladjan/pen/BazjqKe](https://codepen.io/isladjan/pen/BazjqKe). + +โ€œStop thinking about art works as objects and start thinking about them as triggers for experiences. What makes a work of art good for you is not something that s already inside it but something that happens inside you.โ€ +โ€• Brian Eno diff --git a/art-gallery/dist/index.html b/art-gallery/dist/index.html new file mode 100644 index 0000000..e8083ac --- /dev/null +++ b/art-gallery/dist/index.html @@ -0,0 +1,28 @@ + + + + + CodePen - Art Gallery + + + + + + +
+
+ +
+
+ +
+
Light OFF
+ My Gallery +
+ +
+ + + + + diff --git a/art-gallery/dist/script.js b/art-gallery/dist/script.js new file mode 100644 index 0000000..e7395c5 --- /dev/null +++ b/art-gallery/dist/script.js @@ -0,0 +1,516 @@ +let camera, + renderer1, + scene, + uniformsBlob, + uniformsPano, + container1 = document.getElementById("canvas_container1"), + bg = document.querySelector(".bg"), + floor = document.querySelector(".floor"), + btn_Light = document.querySelector(".btn_Light"), + timeout_Debounce, + lightOFF = true, + renderer2, + camera2, + scene2, + sprites = new THREE.Group(), + container2 = document.getElementById("canvas_container2"), + mouse = { x: 1 } + + +init(); +animate(); + + +function init() { + renderer1 = new THREE.WebGLRenderer({ antialias: true, alpha: true }); + renderer1.setSize(container1.clientWidth, container1.clientHeight); + renderer1.setPixelRatio(window.devicePixelRatio); + container1.appendChild(renderer1.domElement); + + scene = new THREE.Scene(); + camera = new THREE.PerspectiveCamera(75, container1.clientWidth / container1.clientHeight, 0.1, 1000); + camera.position.set(0, 0, 40); + + const light1 = new THREE.DirectionalLight("#ffffff", 0.7); + light1.position.set(-10, 30, 20); + scene.add(light1); + + const light2 = new THREE.DirectionalLight("#ffffff", 0.7); + light2.position.set(10, 30, 20); + scene.add(light2); + + const light3 = new THREE.DirectionalLight("#fcfcfc", 0.3); + light3.position.set(0, -20, 10); + scene.add(light3); + + const textureLoader = new THREE.TextureLoader(); + const blobTexture = textureLoader.load("https://res.cloudinary.com/di1ldxpot/image/upload/v1602936154/Modern_Gallery/blob1_ls1rst.jpg"); + const panoTexture = textureLoader.load("https://res.cloudinary.com/di1ldxpot/image/upload/v1602936153/Modern_Gallery/pano_ex9djn.jpg"); + + + + /*** Blob ***/ + let blobGeometry = new THREE.IcosahedronBufferGeometry(10, 50); + + uniformsBlob = THREE.UniformsUtils.merge([uniformsBlob, THREE.UniformsLib["lights"]]); + Object.assign(uniformsBlob, { + t_texture: { type: "t", value: blobTexture }, + u_time: { type: "f", value: 0.0 }, + u_mouse1: { type: "v2", value: new THREE.Vector2(1, 1) }, + u_mouse2: { type: "v2", value: new THREE.Vector2(20, 20) }, + u_lightOFF: { type: "b", value: lightOFF }, + u_effect_Switch: { type: "f", value: 0.0 }, + u_textura_Zoom: { type: "f", value: 1.0 }, + }); + + uniformsBlob.t_texture.value.anisotropy = 16 + uniformsBlob.t_texture.value.wrapS = THREE.MirroredRepeatWrapping; + uniformsBlob.t_texture.value.wrapT = THREE.ClampToEdgeWrapping; + + let shaderMaterialBlob = new THREE.ShaderMaterial({ + uniforms: uniformsBlob, + fragmentShader: blobFragmentShader(), + vertexShader: blobVertexShader(), + lights: true, + }); + blob = new THREE.Mesh(blobGeometry, shaderMaterialBlob); + blob.position.set(2, -2.2, 10); + scene.add(blob); + + + + /*** Pano ****/ + let panoGeometry = new THREE.PlaneBufferGeometry(54.5, 27.3); + + uniformsPano = { + t_texture: { type: "t", value: panoTexture }, + u_resolution: { type: "v2", value: new THREE.Vector2() }, + u_time: { type: 'f', value: 0 }, + u_mouse: { type: "v2", value: new THREE.Vector2() }, + u_lightOFF: { type: "b", value: lightOFF }, + u_randomColor: { type: "v3", value: new THREE.Vector3(0.2, 0.2, 0.2) }, + u_panoScale: { type: "v2", value: new THREE.Vector2(10.1, 0.2) }, + }; + + uniformsPano.u_resolution.value.x = renderer1.domElement.width; + uniformsPano.u_resolution.value.y = renderer1.domElement.height; + + uniformsPano.t_texture.value.wrapS = THREE.ClampToEdgeWrapping; + uniformsPano.t_texture.value.wrapT = THREE.ClampToEdgeWrapping; + + let shaderMaterialPano = new THREE.ShaderMaterial({ + uniforms: uniformsPano, + fragmentShader: panoFragmentShader(), + vertexShader: panoVertexShader(), + }); + pano = new THREE.Mesh(panoGeometry, shaderMaterialPano); + pano.position.set(0.5, -1.6, 10); + scene.add(pano); + + + /* Mouse Event Handler */ + function norm(val, max, min) { return (val - min) / (max - min); } + window.addEventListener("mousemove", (e) => { + mouse.x = e.x; + + let x = norm(-(container1.clientWidth / 2 - e.x), container1.clientWidth / 2, 0) + 0.999; + if (x > 0) uniformsBlob.u_mouse1.value.x = x - 1; + else uniformsBlob.u_mouse1.value.x = x + 1; + + uniformsBlob.u_mouse1.value.y = norm(container1.clientHeight / 2 - e.y, container1.clientHeight / 2, 0); + + uniformsBlob.u_mouse2.value.x = norm(e.x, container1.clientWidth, 0) + 0.5; + uniformsPano.u_mouse.value.x = uniformsBlob.u_mouse2.value.x - 0.5; + uniformsPano.u_mouse.value.y = uniformsBlob.u_mouse1.value.y + }); + + + + /* CANVAS 2 Particles */ + let spriteSet = function () { + let h = window.innerHeight; + + renderer2 = new THREE.WebGLRenderer({ antialias: true, alpha: true }); + renderer2.setSize(window.innerWidth, h); + renderer2.setPixelRatio(window.devicePixelRatio); + container2.appendChild(renderer2.domElement); + scene2 = new THREE.Scene(); + + //better to do this dynamically + camera2 = new THREE.PerspectiveCamera(75, window.innerWidth / h, 0.1, 1000); + camera2.position.set(0, 0, 40); + if (h <= 500) camera2.position.set(0, 0, 40); + else if (h > 500 && h <= 600) camera2.position.set(0, -3, 50); + else if (h > 600 && h <= 700) camera2.position.set(0, -12, 60); + else if (h > 700 && h <= 800) camera2.position.set(0, -18, 60); + else if (h > 800 && h <= 900) camera2.position.set(0, -25, 60); + else camera2.position.set(0, -28, 60); + + for (var i = 0; i < 1000; i++) { + spriteMaterial = new THREE.SpriteMaterial({ + transparent: true, + opacity: 0.8, + }); + let sprite = new THREE.Sprite(spriteMaterial); + + sprite.position.set( + THREE.MathUtils.randFloat(-40, 40), //x + THREE.MathUtils.randFloat(-22, 17), //y + THREE.MathUtils.randFloat(-1, -6), //z + ); + sprite.scale.set(0.8, 0.8); + + //can't do in shader because is difference renderer from pano + if (sprite.position.y > 12 && sprite.position.y <= 17) spriteMaterial.color.set("#F9BE6E"); + else if (sprite.position.y > 8 && sprite.position.y <= 12) spriteMaterial.color.set("#F9DA8A"); + else if (sprite.position.y > 3 && sprite.position.y <= 8) spriteMaterial.color.set("#E29A50"); + else if (sprite.position.y > 0 && sprite.position.y <= 3) spriteMaterial.color.set("#7A5437"); + else if (sprite.position.y > -11 && sprite.position.y <= 0) spriteMaterial.color.set("#1B5A7D"); + else if (sprite.position.y > -16 && sprite.position.y <= -11) spriteMaterial.color.set("#038BA5"); + else if (sprite.position.y >= -22 && sprite.position.y <= -16) spriteMaterial.color.set("#CCD79F"); + + sprite.velocity = { + x: (Math.random() - 0.5) / 6, + z: -0.1 - Math.random() / 4 + } + sprites.add(sprite); + } + scene2.add(sprites); + spriteSet = function () { }; + } + + + + btn_Light.addEventListener("click", e => { + if (lightOFF) { + sprites.visible = true; + bg.style.webkitFilter = "brightness(25%)"; + floor.style.webkitFilter = "brightness(25%)"; + btn_Light.innerHTML = "Light ON"; + lightOFF = false; + btn_Light.style.color = "#3ef93e"; + uniformsPano.u_lightOFF.value = false; + uniformsBlob.u_lightOFF.value = false; + spriteSet(); + uniformsPano.u_panoScale.value.x = 80; + uniformsPano.u_panoScale.value.y = 0; + + } else { + bg.style.webkitFilter = "brightness(100%)"; + floor.style.webkitFilter = "brightness(100%)"; + btn_Light.innerHTML = "Light OFF"; + btn_Light.style.color = "#feaeae"; + lightOFF = true; + uniformsBlob.u_lightOFF.value = true; + uniformsPano.u_lightOFF.value = true; + sprites.visible = false; + renderer2.clear(); + + if (uniformsBlob.u_effect_Switch.value == 0.0) { + uniformsBlob.u_effect_Switch.value = 0.08; + uniformsPano.u_randomColor.value.x = THREE.MathUtils.randFloat(-0.9, -0.5); + uniformsPano.u_randomColor.value.y = uniformsPano.u_randomColor.value.x; + uniformsPano.u_randomColor.value.z = uniformsPano.u_randomColor.value.x; + uniformsPano.u_panoScale.value.x = 10; + uniformsPano.u_panoScale.value.y = 5.4; + } + + else { + uniformsBlob.u_effect_Switch.value = 0.0; + uniformsPano.u_panoScale.value.x = 40; + uniformsPano.u_panoScale.value.y = 0; + uniformsPano.u_randomColor.value.x = 0.2; + uniformsPano.u_randomColor.value.y = 0.2; + uniformsPano.u_randomColor.value.z = 0.2; + } + } + document.querySelector(".pngLights").classList.toggle("active"); //sakriva jedno png svetlo sa lampe + }); +} + + +function blobVertexShader() { + return ` + varying vec3 v_normal; + varying vec2 v_uv; + + uniform float u_time; + uniform vec2 u_mouse1; + uniform bool u_lightOFF; + + /*** Classic 3D Perlin noise, periodic version by Stefan Gustavson ***/ + vec3 mod289(vec3 x){ return x - floor(x * (1.0 / 289.0)) * 289.0; } + vec4 mod289(vec4 x){ return x - floor(x * (1.0 / 289.0)) * 289.0;} + vec4 permute(vec4 x){ return mod289(((x*34.0)+1.0)*x); } + vec4 taylorInvSqrt(vec4 r){ return 1.79284291400159 - 0.85373472095314 * r;} + vec3 fade(vec3 t) { return t*t*t*(t*(t*6.0-15.0)+10.0);} + float pnoise(vec3 P, vec3 rep) { + vec3 Pi0 = mod(floor(P), rep); + vec3 Pi1 = mod(Pi0 + vec3(1.0), rep); + Pi0 = mod289(Pi0); + Pi1 = mod289(Pi1); + vec3 Pf0 = fract(P); + vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0 + vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x); + vec4 iy = vec4(Pi0.yy, Pi1.yy); + vec4 iz0 = Pi0.zzzz; + vec4 iz1 = Pi1.zzzz; + + vec4 ixy = permute(permute(ix) + iy); + vec4 ixy0 = permute(ixy + iz0); + vec4 ixy1 = permute(ixy + iz1); + + vec4 gx0 = ixy0 * (1.0 / 7.0); + vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5; + gx0 = fract(gx0); + vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0); + vec4 sz0 = step(gz0, vec4(0.0)); + gx0 -= sz0 * (step(0.0, gx0) - 0.5); + gy0 -= sz0 * (step(0.0, gy0) - 0.5); + + vec4 gx1 = ixy1 * (1.0 / 7.0); + vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5; + gx1 = fract(gx1); + vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1); + vec4 sz1 = step(gz1, vec4(0.0)); + gx1 -= sz1 * (step(0.0, gx1) - 0.5); + gy1 -= sz1 * (step(0.0, gy1) - 0.5); + + vec3 g000 = vec3(gx0.x,gy0.x,gz0.x); + vec3 g100 = vec3(gx0.y,gy0.y,gz0.y); + vec3 g010 = vec3(gx0.z,gy0.z,gz0.z); + vec3 g110 = vec3(gx0.w,gy0.w,gz0.w); + vec3 g001 = vec3(gx1.x,gy1.x,gz1.x); + vec3 g101 = vec3(gx1.y,gy1.y,gz1.y); + vec3 g011 = vec3(gx1.z,gy1.z,gz1.z); + vec3 g111 = vec3(gx1.w,gy1.w,gz1.w); + + vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); + g000 *= norm0.x; + g010 *= norm0.y; + g100 *= norm0.z; + g110 *= norm0.w; + vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); + g001 *= norm1.x; + g011 *= norm1.y; + g101 *= norm1.z; + g111 *= norm1.w; + + float n000 = dot(g000, Pf0); + float n100 = dot(g100, vec3(Pf1.x, Pf0.yz)); + float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z)); + float n110 = dot(g110, vec3(Pf1.xy, Pf0.z)); + float n001 = dot(g001, vec3(Pf0.xy, Pf1.z)); + float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z)); + float n011 = dot(g011, vec3(Pf0.x, Pf1.yz)); + float n111 = dot(g111, Pf1); + + vec3 fade_xyz = fade(Pf0); + vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z); + vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y); + float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); + return 2.2 * n_xyz; + } + + void main() { + v_normal = normalMatrix * normal; + v_uv = uv; + + // Static Boolean Uniform in conditional + if (u_lightOFF) { + float b = 6.0 * pnoise( (u_mouse1.y - u_mouse1.x)/10. * position + vec3( u_time*2.), vec3( 10.0 ) ); + vec3 newPosition = position + normal * b; + gl_Position = projectionMatrix * modelViewMatrix * vec4( newPosition, 1.0 ); + } else { + gl_Position = vec4( 0.0, 0.0, -50.0, 1.0 ); + } + } + ` +} + +function blobFragmentShader() { + return ` + varying vec3 v_normal; + varying vec2 v_uv; + + uniform sampler2D t_texture; + uniform vec2 u_mouse2; + uniform float u_time; + uniform bool u_lightOFF; + uniform float u_effect_Switch; + uniform float u_textura_Zoom; + + float random( vec3 scale, float seed ){ + return fract( sin( dot( gl_FragCoord.xyz + seed, scale ) ) * 43758.5453 + seed ) ; + } + + struct DirectionalLight { + vec3 direction; + vec3 color; + }; + uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ]; + + void main() { + if (u_lightOFF) { + /*** Light ***/ + vec3 lightFactor1 = vec3(0.0, 0.0, 0.0); + vec3 lightFactor2 = vec3(0.0, 0.0, 0.0); + vec3 lightFactor3 = vec3(0.0, 0.0, 0.0); + + vec3 ecFromLight1 = normalize( directionalLights[0].direction ); + float NdotL1 = max(0.1, dot(v_normal, ecFromLight1)); + lightFactor1 += NdotL1 * directionalLights[0].color; + + vec3 ecFromLight2 = normalize( directionalLights[1].direction ); + float NdotL2 = max(0.1, dot(v_normal, ecFromLight2)); + lightFactor2 += NdotL2 * directionalLights[1].color; + + vec3 ecFromLight3 = normalize( directionalLights[2].direction ); + float NdotL3 = max(0.0, dot(v_normal, ecFromLight3)); + lightFactor3 += NdotL3 * directionalLights[2].color; + + vec3 directionalLights = lightFactor1 + lightFactor2 + lightFactor3; + + /*** texture Effect Distortion ***/ + float effect = random( vec3( 12.9898, 78.233, 151.7182), 0.0 ) * u_effect_Switch; + + vec4 color = texture2D( t_texture, (v_uv + effect + u_time/3.) + sin(u_mouse2) * u_textura_Zoom ); + gl_FragColor = vec4( color.rgb * directionalLights, 1.0 ); + + } else { + gl_FragColor = vec4( 0.0, 0.0, 0.0, 0.0 ); + } + } + ` +} + + + + +function panoVertexShader() { + return ` + varying vec2 v_uv; + void main() { + v_uv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); + } + ` +} + +function panoFragmentShader() { + return ` + uniform sampler2D t_texture; + uniform vec2 u_resolution; + uniform float u_time; + uniform vec2 u_mouse; + uniform bool u_lightOFF; + uniform vec3 u_randomColor; + uniform vec2 u_panoScale; + + varying vec2 v_uv; + + // voronoise by inigo quilez - iq/2013 + vec3 hash3( vec2 p ) { + vec3 q = vec3( dot(p,vec2(127.1,311.7)), dot(p,vec2(269.5,183.3)), dot(p,vec2(419.2,371.9)) ); + return fract(sin(q)*43758.5453 + u_time+ sin(u_mouse.y)/2. ); + } + float iqnoise( in vec2 x, float u, float v ) { + vec2 p = floor(x); + vec2 f = fract(x); + float k = 1.0+63.0*pow(1.0-v,4.0); + float va = 0.0; + float wt = 0.0; + for (int j=-2; j<=2; j++) { + for (int i=-2; i<=2; i++) { + vec2 g = vec2(float(i),float(j)); + vec3 o = hash3(p + g)*vec3(u,u,1.0); + vec2 r = g - f + o.xy; + float d = dot(r,r); + float ww = pow( 1.0-smoothstep(0.0,1.414,sqrt(d)), k ); + va += o.z*ww; + wt += ww; + } + } + return va/wt; + } + + void main() { + vec2 st = gl_FragCoord.xy/u_resolution.xy; + st.x *= u_resolution.x/u_resolution.y; + + st *= u_panoScale.x + 5.0 + sin(u_mouse.y)/2. * u_panoScale.y; + + float n = iqnoise(st, u_mouse.x, 0.0); + + if (u_lightOFF) { + gl_FragColor = vec4(vec3(n + u_randomColor.r, n + u_randomColor.g, n + u_randomColor.b) ,1.0); + } else { + vec4 textura = texture2D( t_texture, v_uv + vec2(u_mouse.x, 0.0)/10. ); + gl_FragColor = vec4( textura.rgb * vec3(n), 1.0); + } + } + ` +} + + + +function animate() { + uniformsBlob.u_time.value += 0.0015; + uniformsPano.u_time.value += 0.01; + + for (var i = 0; i < sprites.children.length; i++) { + if (lightOFF) { break; } + + let pos = sprites.children[i].position; + let velocity = sprites.children[i].velocity; + + pos.x = pos.x - (velocity.x); + pos.z = pos.z - (velocity.z); + + velocity.z = velocity.z - Math.sin(mouse.x) / 200; + pos.z <= -5 ? sprites.children[i].visible = false : sprites.children[i].visible = true; + + if (pos.z >= 61 || pos.z <= -20) { + pos.z = -5; + velocity.z = -0.1 - Math.random() / 4; + } + + if (pos.x <= -40 || pos.x >= 40) velocity.x = velocity.x * -0.8; + } + + renderer1.render(scene, camera); + if (renderer2 && !lightOFF) renderer2.render(scene2, camera2); + requestAnimationFrame(animate); +} + + +/* Resize */ +window.addEventListener("resize", () => { + clearTimeout(timeout_Debounce); + timeout_Debounce = setTimeout(onWindowResize, 20); +}); +function onWindowResize() { + camera.aspect = container1.clientWidth / container1.clientHeight; + camera.updateProjectionMatrix(); + renderer1.setSize(container1.clientWidth, container1.clientHeight); + + if (renderer2 && !lightOFF) { + let h = window.innerHeight; + if (h <= 500) camera2.position.set(0, 0, 40); + else if (h > 500 && h <= 600) camera2.position.set(0, -3, 50); + else if (h > 600 && h <= 700) camera2.position.set(0, -12, 60); + else if (h > 700 && h <= 800) camera2.position.set(0, -18, 60); + else if (h > 800 && h <= 900) camera2.position.set(0, -25, 60); + else camera2.position.set(0, -28, 60); + + + camera2.aspect = window.innerWidth / h; + camera2.updateProjectionMatrix(); + renderer2.setSize(window.innerWidth, h); + } + uniformsPano.u_resolution.value.x = renderer1.domElement.width; + uniformsPano.u_resolution.value.y = renderer1.domElement.height; +} + +/* Call for action */ +setInterval(() => { btn_Light.classList.toggle("blink") }, 3000); \ No newline at end of file diff --git a/art-gallery/dist/style.css b/art-gallery/dist/style.css new file mode 100644 index 0000000..b9ac6a3 --- /dev/null +++ b/art-gallery/dist/style.css @@ -0,0 +1,139 @@ +body { + height: 100vh; + width: 100%; + margin: 0; + overflow: hidden; + background-color: #79838b; + display: flex; + flex-flow: column; + position: relative; +} + +.bg { + position: relative; + width: 100%; + height: 100vh; + max-height: 500px; + background-image: url("https://user-images.githubusercontent.com/26748614/96336781-733b6f80-1082-11eb-82a6-9b422f8f91c1.jpg"); + background-size: contain; + background-repeat: repeat-x; + background-position: 50% 50%; +} + +.pngLights { + position: absolute; + z-index: 8; + width: 100%; + height: 100vh; + max-height: 500px; + background-image: url("https://user-images.githubusercontent.com/26748614/96336791-759dc980-1082-11eb-85cb-c8761a9a5672.png"), url("https://user-images.githubusercontent.com/26748614/96336777-72a2d900-1082-11eb-9422-8f2ca0a4f302.png"), url("https://user-images.githubusercontent.com/26748614/96336777-72a2d900-1082-11eb-9422-8f2ca0a4f302.png"); + background-size: contain; + background-repeat: no-repeat; + background-position: 50% -22px; +} + +.pngLights.active { + background-image: url("https://user-images.githubusercontent.com/26748614/96336791-759dc980-1082-11eb-85cb-c8761a9a5672.png"), url("https://user-images.githubusercontent.com/26748614/96336777-72a2d900-1082-11eb-9422-8f2ca0a4f302.png"), url(""); +} + +.cc { + width: 100%; + height: 100vh; + position: absolute; + top: 0; + left: 0; +} + +#canvas_container1 { + max-height: 500px; + z-index: 1; +} + +#canvas_container2 { + height: 100vh; + z-index: 2; +} + +.floor { + flex: 1 1 auto; + background-image: url("https://user-images.githubusercontent.com/26748614/96336787-746c9c80-1082-11eb-941f-7846cba8223b.jpg"); + background-size: cover; + background-repeat: no-repeat; + background-position: 50% 0%; +} + + +/**** Buttons *****/ +.buttons { + position: absolute; + width: 100%; + height: 100vh; + max-height: 500px; +} + +.btn { + position: absolute; + bottom: 5%; + z-index: 10; + border: 1px solid white; + border-radius: 5px; + padding: 3px 15px; + background-color: #1f1f1f; + color: #fdfcfc; + -webkit-font-smoothing: antialiased; + font-size: 18px; + font-family: 'Rajdhani', sans-serif; + letter-spacing: 1px; + cursor: pointer; + user-select: none; + box-shadow: 5px 3px 12px 0px rgba(0, 0, 0, 0.75); + transition: color .3s; +} + +.btn_Works { + left: 5%; + text-decoration: none; +} + +.btn_Light { + left: 50%; + transform: translateX(-50%); + transform-origin: 25% 50%; + color: #feaeae; +} + +.btn_Works:hover { + background-color: #3d3d3d; + color: #6286f4; +} + +.btn_Light:hover { + background-color: #3d3d3d; + color: #da1616; +} + +.btn_Light.blink { + animation: blinkAni 500ms; +} + +@keyframes blinkAni { + 0% { + background: #f5f6e4; + transform: scale(1) translateX(-50%); + } + 50% { + transform: scale(1.2) translateX(-50%); + } + 100% { + transform: scale(1) translateX(-50%); + } +} + +@media only screen and (max-height: 350px) { + .btn { + font-size: 4.5vh; + bottom: 2%; + box-shadow: none; + color: #fdfcfc; + } +} \ No newline at end of file diff --git a/art-gallery/license.txt b/art-gallery/license.txt new file mode 100644 index 0000000..7832fe0 --- /dev/null +++ b/art-gallery/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by isladjan (https://codepen.io/isladjan/pen/BazjqKe) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/art-gallery/src/index.html b/art-gallery/src/index.html new file mode 100644 index 0000000..230219f --- /dev/null +++ b/art-gallery/src/index.html @@ -0,0 +1,12 @@ +
+
+ +
+
+ +
+
Light OFF
+ My Gallery +
+ +
\ No newline at end of file diff --git a/art-gallery/src/script.js b/art-gallery/src/script.js new file mode 100644 index 0000000..e7395c5 --- /dev/null +++ b/art-gallery/src/script.js @@ -0,0 +1,516 @@ +let camera, + renderer1, + scene, + uniformsBlob, + uniformsPano, + container1 = document.getElementById("canvas_container1"), + bg = document.querySelector(".bg"), + floor = document.querySelector(".floor"), + btn_Light = document.querySelector(".btn_Light"), + timeout_Debounce, + lightOFF = true, + renderer2, + camera2, + scene2, + sprites = new THREE.Group(), + container2 = document.getElementById("canvas_container2"), + mouse = { x: 1 } + + +init(); +animate(); + + +function init() { + renderer1 = new THREE.WebGLRenderer({ antialias: true, alpha: true }); + renderer1.setSize(container1.clientWidth, container1.clientHeight); + renderer1.setPixelRatio(window.devicePixelRatio); + container1.appendChild(renderer1.domElement); + + scene = new THREE.Scene(); + camera = new THREE.PerspectiveCamera(75, container1.clientWidth / container1.clientHeight, 0.1, 1000); + camera.position.set(0, 0, 40); + + const light1 = new THREE.DirectionalLight("#ffffff", 0.7); + light1.position.set(-10, 30, 20); + scene.add(light1); + + const light2 = new THREE.DirectionalLight("#ffffff", 0.7); + light2.position.set(10, 30, 20); + scene.add(light2); + + const light3 = new THREE.DirectionalLight("#fcfcfc", 0.3); + light3.position.set(0, -20, 10); + scene.add(light3); + + const textureLoader = new THREE.TextureLoader(); + const blobTexture = textureLoader.load("https://res.cloudinary.com/di1ldxpot/image/upload/v1602936154/Modern_Gallery/blob1_ls1rst.jpg"); + const panoTexture = textureLoader.load("https://res.cloudinary.com/di1ldxpot/image/upload/v1602936153/Modern_Gallery/pano_ex9djn.jpg"); + + + + /*** Blob ***/ + let blobGeometry = new THREE.IcosahedronBufferGeometry(10, 50); + + uniformsBlob = THREE.UniformsUtils.merge([uniformsBlob, THREE.UniformsLib["lights"]]); + Object.assign(uniformsBlob, { + t_texture: { type: "t", value: blobTexture }, + u_time: { type: "f", value: 0.0 }, + u_mouse1: { type: "v2", value: new THREE.Vector2(1, 1) }, + u_mouse2: { type: "v2", value: new THREE.Vector2(20, 20) }, + u_lightOFF: { type: "b", value: lightOFF }, + u_effect_Switch: { type: "f", value: 0.0 }, + u_textura_Zoom: { type: "f", value: 1.0 }, + }); + + uniformsBlob.t_texture.value.anisotropy = 16 + uniformsBlob.t_texture.value.wrapS = THREE.MirroredRepeatWrapping; + uniformsBlob.t_texture.value.wrapT = THREE.ClampToEdgeWrapping; + + let shaderMaterialBlob = new THREE.ShaderMaterial({ + uniforms: uniformsBlob, + fragmentShader: blobFragmentShader(), + vertexShader: blobVertexShader(), + lights: true, + }); + blob = new THREE.Mesh(blobGeometry, shaderMaterialBlob); + blob.position.set(2, -2.2, 10); + scene.add(blob); + + + + /*** Pano ****/ + let panoGeometry = new THREE.PlaneBufferGeometry(54.5, 27.3); + + uniformsPano = { + t_texture: { type: "t", value: panoTexture }, + u_resolution: { type: "v2", value: new THREE.Vector2() }, + u_time: { type: 'f', value: 0 }, + u_mouse: { type: "v2", value: new THREE.Vector2() }, + u_lightOFF: { type: "b", value: lightOFF }, + u_randomColor: { type: "v3", value: new THREE.Vector3(0.2, 0.2, 0.2) }, + u_panoScale: { type: "v2", value: new THREE.Vector2(10.1, 0.2) }, + }; + + uniformsPano.u_resolution.value.x = renderer1.domElement.width; + uniformsPano.u_resolution.value.y = renderer1.domElement.height; + + uniformsPano.t_texture.value.wrapS = THREE.ClampToEdgeWrapping; + uniformsPano.t_texture.value.wrapT = THREE.ClampToEdgeWrapping; + + let shaderMaterialPano = new THREE.ShaderMaterial({ + uniforms: uniformsPano, + fragmentShader: panoFragmentShader(), + vertexShader: panoVertexShader(), + }); + pano = new THREE.Mesh(panoGeometry, shaderMaterialPano); + pano.position.set(0.5, -1.6, 10); + scene.add(pano); + + + /* Mouse Event Handler */ + function norm(val, max, min) { return (val - min) / (max - min); } + window.addEventListener("mousemove", (e) => { + mouse.x = e.x; + + let x = norm(-(container1.clientWidth / 2 - e.x), container1.clientWidth / 2, 0) + 0.999; + if (x > 0) uniformsBlob.u_mouse1.value.x = x - 1; + else uniformsBlob.u_mouse1.value.x = x + 1; + + uniformsBlob.u_mouse1.value.y = norm(container1.clientHeight / 2 - e.y, container1.clientHeight / 2, 0); + + uniformsBlob.u_mouse2.value.x = norm(e.x, container1.clientWidth, 0) + 0.5; + uniformsPano.u_mouse.value.x = uniformsBlob.u_mouse2.value.x - 0.5; + uniformsPano.u_mouse.value.y = uniformsBlob.u_mouse1.value.y + }); + + + + /* CANVAS 2 Particles */ + let spriteSet = function () { + let h = window.innerHeight; + + renderer2 = new THREE.WebGLRenderer({ antialias: true, alpha: true }); + renderer2.setSize(window.innerWidth, h); + renderer2.setPixelRatio(window.devicePixelRatio); + container2.appendChild(renderer2.domElement); + scene2 = new THREE.Scene(); + + //better to do this dynamically + camera2 = new THREE.PerspectiveCamera(75, window.innerWidth / h, 0.1, 1000); + camera2.position.set(0, 0, 40); + if (h <= 500) camera2.position.set(0, 0, 40); + else if (h > 500 && h <= 600) camera2.position.set(0, -3, 50); + else if (h > 600 && h <= 700) camera2.position.set(0, -12, 60); + else if (h > 700 && h <= 800) camera2.position.set(0, -18, 60); + else if (h > 800 && h <= 900) camera2.position.set(0, -25, 60); + else camera2.position.set(0, -28, 60); + + for (var i = 0; i < 1000; i++) { + spriteMaterial = new THREE.SpriteMaterial({ + transparent: true, + opacity: 0.8, + }); + let sprite = new THREE.Sprite(spriteMaterial); + + sprite.position.set( + THREE.MathUtils.randFloat(-40, 40), //x + THREE.MathUtils.randFloat(-22, 17), //y + THREE.MathUtils.randFloat(-1, -6), //z + ); + sprite.scale.set(0.8, 0.8); + + //can't do in shader because is difference renderer from pano + if (sprite.position.y > 12 && sprite.position.y <= 17) spriteMaterial.color.set("#F9BE6E"); + else if (sprite.position.y > 8 && sprite.position.y <= 12) spriteMaterial.color.set("#F9DA8A"); + else if (sprite.position.y > 3 && sprite.position.y <= 8) spriteMaterial.color.set("#E29A50"); + else if (sprite.position.y > 0 && sprite.position.y <= 3) spriteMaterial.color.set("#7A5437"); + else if (sprite.position.y > -11 && sprite.position.y <= 0) spriteMaterial.color.set("#1B5A7D"); + else if (sprite.position.y > -16 && sprite.position.y <= -11) spriteMaterial.color.set("#038BA5"); + else if (sprite.position.y >= -22 && sprite.position.y <= -16) spriteMaterial.color.set("#CCD79F"); + + sprite.velocity = { + x: (Math.random() - 0.5) / 6, + z: -0.1 - Math.random() / 4 + } + sprites.add(sprite); + } + scene2.add(sprites); + spriteSet = function () { }; + } + + + + btn_Light.addEventListener("click", e => { + if (lightOFF) { + sprites.visible = true; + bg.style.webkitFilter = "brightness(25%)"; + floor.style.webkitFilter = "brightness(25%)"; + btn_Light.innerHTML = "Light ON"; + lightOFF = false; + btn_Light.style.color = "#3ef93e"; + uniformsPano.u_lightOFF.value = false; + uniformsBlob.u_lightOFF.value = false; + spriteSet(); + uniformsPano.u_panoScale.value.x = 80; + uniformsPano.u_panoScale.value.y = 0; + + } else { + bg.style.webkitFilter = "brightness(100%)"; + floor.style.webkitFilter = "brightness(100%)"; + btn_Light.innerHTML = "Light OFF"; + btn_Light.style.color = "#feaeae"; + lightOFF = true; + uniformsBlob.u_lightOFF.value = true; + uniformsPano.u_lightOFF.value = true; + sprites.visible = false; + renderer2.clear(); + + if (uniformsBlob.u_effect_Switch.value == 0.0) { + uniformsBlob.u_effect_Switch.value = 0.08; + uniformsPano.u_randomColor.value.x = THREE.MathUtils.randFloat(-0.9, -0.5); + uniformsPano.u_randomColor.value.y = uniformsPano.u_randomColor.value.x; + uniformsPano.u_randomColor.value.z = uniformsPano.u_randomColor.value.x; + uniformsPano.u_panoScale.value.x = 10; + uniformsPano.u_panoScale.value.y = 5.4; + } + + else { + uniformsBlob.u_effect_Switch.value = 0.0; + uniformsPano.u_panoScale.value.x = 40; + uniformsPano.u_panoScale.value.y = 0; + uniformsPano.u_randomColor.value.x = 0.2; + uniformsPano.u_randomColor.value.y = 0.2; + uniformsPano.u_randomColor.value.z = 0.2; + } + } + document.querySelector(".pngLights").classList.toggle("active"); //sakriva jedno png svetlo sa lampe + }); +} + + +function blobVertexShader() { + return ` + varying vec3 v_normal; + varying vec2 v_uv; + + uniform float u_time; + uniform vec2 u_mouse1; + uniform bool u_lightOFF; + + /*** Classic 3D Perlin noise, periodic version by Stefan Gustavson ***/ + vec3 mod289(vec3 x){ return x - floor(x * (1.0 / 289.0)) * 289.0; } + vec4 mod289(vec4 x){ return x - floor(x * (1.0 / 289.0)) * 289.0;} + vec4 permute(vec4 x){ return mod289(((x*34.0)+1.0)*x); } + vec4 taylorInvSqrt(vec4 r){ return 1.79284291400159 - 0.85373472095314 * r;} + vec3 fade(vec3 t) { return t*t*t*(t*(t*6.0-15.0)+10.0);} + float pnoise(vec3 P, vec3 rep) { + vec3 Pi0 = mod(floor(P), rep); + vec3 Pi1 = mod(Pi0 + vec3(1.0), rep); + Pi0 = mod289(Pi0); + Pi1 = mod289(Pi1); + vec3 Pf0 = fract(P); + vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0 + vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x); + vec4 iy = vec4(Pi0.yy, Pi1.yy); + vec4 iz0 = Pi0.zzzz; + vec4 iz1 = Pi1.zzzz; + + vec4 ixy = permute(permute(ix) + iy); + vec4 ixy0 = permute(ixy + iz0); + vec4 ixy1 = permute(ixy + iz1); + + vec4 gx0 = ixy0 * (1.0 / 7.0); + vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5; + gx0 = fract(gx0); + vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0); + vec4 sz0 = step(gz0, vec4(0.0)); + gx0 -= sz0 * (step(0.0, gx0) - 0.5); + gy0 -= sz0 * (step(0.0, gy0) - 0.5); + + vec4 gx1 = ixy1 * (1.0 / 7.0); + vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5; + gx1 = fract(gx1); + vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1); + vec4 sz1 = step(gz1, vec4(0.0)); + gx1 -= sz1 * (step(0.0, gx1) - 0.5); + gy1 -= sz1 * (step(0.0, gy1) - 0.5); + + vec3 g000 = vec3(gx0.x,gy0.x,gz0.x); + vec3 g100 = vec3(gx0.y,gy0.y,gz0.y); + vec3 g010 = vec3(gx0.z,gy0.z,gz0.z); + vec3 g110 = vec3(gx0.w,gy0.w,gz0.w); + vec3 g001 = vec3(gx1.x,gy1.x,gz1.x); + vec3 g101 = vec3(gx1.y,gy1.y,gz1.y); + vec3 g011 = vec3(gx1.z,gy1.z,gz1.z); + vec3 g111 = vec3(gx1.w,gy1.w,gz1.w); + + vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); + g000 *= norm0.x; + g010 *= norm0.y; + g100 *= norm0.z; + g110 *= norm0.w; + vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); + g001 *= norm1.x; + g011 *= norm1.y; + g101 *= norm1.z; + g111 *= norm1.w; + + float n000 = dot(g000, Pf0); + float n100 = dot(g100, vec3(Pf1.x, Pf0.yz)); + float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z)); + float n110 = dot(g110, vec3(Pf1.xy, Pf0.z)); + float n001 = dot(g001, vec3(Pf0.xy, Pf1.z)); + float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z)); + float n011 = dot(g011, vec3(Pf0.x, Pf1.yz)); + float n111 = dot(g111, Pf1); + + vec3 fade_xyz = fade(Pf0); + vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z); + vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y); + float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); + return 2.2 * n_xyz; + } + + void main() { + v_normal = normalMatrix * normal; + v_uv = uv; + + // Static Boolean Uniform in conditional + if (u_lightOFF) { + float b = 6.0 * pnoise( (u_mouse1.y - u_mouse1.x)/10. * position + vec3( u_time*2.), vec3( 10.0 ) ); + vec3 newPosition = position + normal * b; + gl_Position = projectionMatrix * modelViewMatrix * vec4( newPosition, 1.0 ); + } else { + gl_Position = vec4( 0.0, 0.0, -50.0, 1.0 ); + } + } + ` +} + +function blobFragmentShader() { + return ` + varying vec3 v_normal; + varying vec2 v_uv; + + uniform sampler2D t_texture; + uniform vec2 u_mouse2; + uniform float u_time; + uniform bool u_lightOFF; + uniform float u_effect_Switch; + uniform float u_textura_Zoom; + + float random( vec3 scale, float seed ){ + return fract( sin( dot( gl_FragCoord.xyz + seed, scale ) ) * 43758.5453 + seed ) ; + } + + struct DirectionalLight { + vec3 direction; + vec3 color; + }; + uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ]; + + void main() { + if (u_lightOFF) { + /*** Light ***/ + vec3 lightFactor1 = vec3(0.0, 0.0, 0.0); + vec3 lightFactor2 = vec3(0.0, 0.0, 0.0); + vec3 lightFactor3 = vec3(0.0, 0.0, 0.0); + + vec3 ecFromLight1 = normalize( directionalLights[0].direction ); + float NdotL1 = max(0.1, dot(v_normal, ecFromLight1)); + lightFactor1 += NdotL1 * directionalLights[0].color; + + vec3 ecFromLight2 = normalize( directionalLights[1].direction ); + float NdotL2 = max(0.1, dot(v_normal, ecFromLight2)); + lightFactor2 += NdotL2 * directionalLights[1].color; + + vec3 ecFromLight3 = normalize( directionalLights[2].direction ); + float NdotL3 = max(0.0, dot(v_normal, ecFromLight3)); + lightFactor3 += NdotL3 * directionalLights[2].color; + + vec3 directionalLights = lightFactor1 + lightFactor2 + lightFactor3; + + /*** texture Effect Distortion ***/ + float effect = random( vec3( 12.9898, 78.233, 151.7182), 0.0 ) * u_effect_Switch; + + vec4 color = texture2D( t_texture, (v_uv + effect + u_time/3.) + sin(u_mouse2) * u_textura_Zoom ); + gl_FragColor = vec4( color.rgb * directionalLights, 1.0 ); + + } else { + gl_FragColor = vec4( 0.0, 0.0, 0.0, 0.0 ); + } + } + ` +} + + + + +function panoVertexShader() { + return ` + varying vec2 v_uv; + void main() { + v_uv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); + } + ` +} + +function panoFragmentShader() { + return ` + uniform sampler2D t_texture; + uniform vec2 u_resolution; + uniform float u_time; + uniform vec2 u_mouse; + uniform bool u_lightOFF; + uniform vec3 u_randomColor; + uniform vec2 u_panoScale; + + varying vec2 v_uv; + + // voronoise by inigo quilez - iq/2013 + vec3 hash3( vec2 p ) { + vec3 q = vec3( dot(p,vec2(127.1,311.7)), dot(p,vec2(269.5,183.3)), dot(p,vec2(419.2,371.9)) ); + return fract(sin(q)*43758.5453 + u_time+ sin(u_mouse.y)/2. ); + } + float iqnoise( in vec2 x, float u, float v ) { + vec2 p = floor(x); + vec2 f = fract(x); + float k = 1.0+63.0*pow(1.0-v,4.0); + float va = 0.0; + float wt = 0.0; + for (int j=-2; j<=2; j++) { + for (int i=-2; i<=2; i++) { + vec2 g = vec2(float(i),float(j)); + vec3 o = hash3(p + g)*vec3(u,u,1.0); + vec2 r = g - f + o.xy; + float d = dot(r,r); + float ww = pow( 1.0-smoothstep(0.0,1.414,sqrt(d)), k ); + va += o.z*ww; + wt += ww; + } + } + return va/wt; + } + + void main() { + vec2 st = gl_FragCoord.xy/u_resolution.xy; + st.x *= u_resolution.x/u_resolution.y; + + st *= u_panoScale.x + 5.0 + sin(u_mouse.y)/2. * u_panoScale.y; + + float n = iqnoise(st, u_mouse.x, 0.0); + + if (u_lightOFF) { + gl_FragColor = vec4(vec3(n + u_randomColor.r, n + u_randomColor.g, n + u_randomColor.b) ,1.0); + } else { + vec4 textura = texture2D( t_texture, v_uv + vec2(u_mouse.x, 0.0)/10. ); + gl_FragColor = vec4( textura.rgb * vec3(n), 1.0); + } + } + ` +} + + + +function animate() { + uniformsBlob.u_time.value += 0.0015; + uniformsPano.u_time.value += 0.01; + + for (var i = 0; i < sprites.children.length; i++) { + if (lightOFF) { break; } + + let pos = sprites.children[i].position; + let velocity = sprites.children[i].velocity; + + pos.x = pos.x - (velocity.x); + pos.z = pos.z - (velocity.z); + + velocity.z = velocity.z - Math.sin(mouse.x) / 200; + pos.z <= -5 ? sprites.children[i].visible = false : sprites.children[i].visible = true; + + if (pos.z >= 61 || pos.z <= -20) { + pos.z = -5; + velocity.z = -0.1 - Math.random() / 4; + } + + if (pos.x <= -40 || pos.x >= 40) velocity.x = velocity.x * -0.8; + } + + renderer1.render(scene, camera); + if (renderer2 && !lightOFF) renderer2.render(scene2, camera2); + requestAnimationFrame(animate); +} + + +/* Resize */ +window.addEventListener("resize", () => { + clearTimeout(timeout_Debounce); + timeout_Debounce = setTimeout(onWindowResize, 20); +}); +function onWindowResize() { + camera.aspect = container1.clientWidth / container1.clientHeight; + camera.updateProjectionMatrix(); + renderer1.setSize(container1.clientWidth, container1.clientHeight); + + if (renderer2 && !lightOFF) { + let h = window.innerHeight; + if (h <= 500) camera2.position.set(0, 0, 40); + else if (h > 500 && h <= 600) camera2.position.set(0, -3, 50); + else if (h > 600 && h <= 700) camera2.position.set(0, -12, 60); + else if (h > 700 && h <= 800) camera2.position.set(0, -18, 60); + else if (h > 800 && h <= 900) camera2.position.set(0, -25, 60); + else camera2.position.set(0, -28, 60); + + + camera2.aspect = window.innerWidth / h; + camera2.updateProjectionMatrix(); + renderer2.setSize(window.innerWidth, h); + } + uniformsPano.u_resolution.value.x = renderer1.domElement.width; + uniformsPano.u_resolution.value.y = renderer1.domElement.height; +} + +/* Call for action */ +setInterval(() => { btn_Light.classList.toggle("blink") }, 3000); \ No newline at end of file diff --git a/art-gallery/src/style.css b/art-gallery/src/style.css new file mode 100644 index 0000000..b9ac6a3 --- /dev/null +++ b/art-gallery/src/style.css @@ -0,0 +1,139 @@ +body { + height: 100vh; + width: 100%; + margin: 0; + overflow: hidden; + background-color: #79838b; + display: flex; + flex-flow: column; + position: relative; +} + +.bg { + position: relative; + width: 100%; + height: 100vh; + max-height: 500px; + background-image: url("https://user-images.githubusercontent.com/26748614/96336781-733b6f80-1082-11eb-82a6-9b422f8f91c1.jpg"); + background-size: contain; + background-repeat: repeat-x; + background-position: 50% 50%; +} + +.pngLights { + position: absolute; + z-index: 8; + width: 100%; + height: 100vh; + max-height: 500px; + background-image: url("https://user-images.githubusercontent.com/26748614/96336791-759dc980-1082-11eb-85cb-c8761a9a5672.png"), url("https://user-images.githubusercontent.com/26748614/96336777-72a2d900-1082-11eb-9422-8f2ca0a4f302.png"), url("https://user-images.githubusercontent.com/26748614/96336777-72a2d900-1082-11eb-9422-8f2ca0a4f302.png"); + background-size: contain; + background-repeat: no-repeat; + background-position: 50% -22px; +} + +.pngLights.active { + background-image: url("https://user-images.githubusercontent.com/26748614/96336791-759dc980-1082-11eb-85cb-c8761a9a5672.png"), url("https://user-images.githubusercontent.com/26748614/96336777-72a2d900-1082-11eb-9422-8f2ca0a4f302.png"), url(""); +} + +.cc { + width: 100%; + height: 100vh; + position: absolute; + top: 0; + left: 0; +} + +#canvas_container1 { + max-height: 500px; + z-index: 1; +} + +#canvas_container2 { + height: 100vh; + z-index: 2; +} + +.floor { + flex: 1 1 auto; + background-image: url("https://user-images.githubusercontent.com/26748614/96336787-746c9c80-1082-11eb-941f-7846cba8223b.jpg"); + background-size: cover; + background-repeat: no-repeat; + background-position: 50% 0%; +} + + +/**** Buttons *****/ +.buttons { + position: absolute; + width: 100%; + height: 100vh; + max-height: 500px; +} + +.btn { + position: absolute; + bottom: 5%; + z-index: 10; + border: 1px solid white; + border-radius: 5px; + padding: 3px 15px; + background-color: #1f1f1f; + color: #fdfcfc; + -webkit-font-smoothing: antialiased; + font-size: 18px; + font-family: 'Rajdhani', sans-serif; + letter-spacing: 1px; + cursor: pointer; + user-select: none; + box-shadow: 5px 3px 12px 0px rgba(0, 0, 0, 0.75); + transition: color .3s; +} + +.btn_Works { + left: 5%; + text-decoration: none; +} + +.btn_Light { + left: 50%; + transform: translateX(-50%); + transform-origin: 25% 50%; + color: #feaeae; +} + +.btn_Works:hover { + background-color: #3d3d3d; + color: #6286f4; +} + +.btn_Light:hover { + background-color: #3d3d3d; + color: #da1616; +} + +.btn_Light.blink { + animation: blinkAni 500ms; +} + +@keyframes blinkAni { + 0% { + background: #f5f6e4; + transform: scale(1) translateX(-50%); + } + 50% { + transform: scale(1.2) translateX(-50%); + } + 100% { + transform: scale(1) translateX(-50%); + } +} + +@media only screen and (max-height: 350px) { + .btn { + font-size: 4.5vh; + bottom: 2%; + box-shadow: none; + color: #fdfcfc; + } +} \ No newline at end of file diff --git a/art-of-noise-29/README.markdown b/art-of-noise-29/README.markdown new file mode 100644 index 0000000..da561a7 --- /dev/null +++ b/art-of-noise-29/README.markdown @@ -0,0 +1,5 @@ +# Art of Noise #29 + +A Pen created on CodePen.io. Original URL: [https://codepen.io/Tibixx/pen/jOBZoKV](https://codepen.io/Tibixx/pen/jOBZoKV). + + diff --git a/art-of-noise-29/dist/index.html b/art-of-noise-29/dist/index.html new file mode 100644 index 0000000..e007dfe --- /dev/null +++ b/art-of-noise-29/dist/index.html @@ -0,0 +1,24 @@ + + + + + CodePen - Art of Noise #29 + + + + + + + + + + + + + + diff --git a/art-of-noise-29/dist/script.js b/art-of-noise-29/dist/script.js new file mode 100644 index 0000000..26ea687 --- /dev/null +++ b/art-of-noise-29/dist/script.js @@ -0,0 +1,149 @@ +/* === Setup === */ +var scene, camera, renderer, controls; +config = { + planeSegments: 100, + xNoiseScale: 40, + yNoiseScale: 40, + zNoiseScale: 20, + noiseSpeed: 0.001, + nt1: Math.random(), + nt2: Math.random(), + nt3: Math.random(), + col1: "255, 0, 0", + col2: "0, 255, 0", + col3: "0, 0, 255" +} + +/* Dat Gui */ +var gui = new dat.GUI(); +gui.add(config, "xNoiseScale", 10, 100).step(1).name("Noise X"); +gui.add(config, "yNoiseScale", 10, 100).step(1).name("Noise Y"); +gui.add(config, "zNoiseScale", 10, 100).step(1).name("Noise Z"); +gui.add(config, "noiseSpeed", 0.00001, 0.01).name("Noise Speed"); + +/* === Events === */ +window.onresize = function(){ + var w = window.innerWidth, h = window.innerHeight; + camera.aspect = w / h; + camera.updateProjectionMatrix(); + renderer.setSize( w, h ); +} + +/* === Scene === */ +var scene = new THREE.Scene(); + +/* === Camera === */ +var camera = new THREE.PerspectiveCamera( 35, window.innerWidth/window.innerHeight, 0.1, 1000 ); +camera.position.y = -config.planeSegments/2; +camera.position.z = config.planeSegments/2; +camera.lookAt(0,0,0); + +/* === Renderer === */ +var renderer = new THREE.WebGLRenderer({antialias:true}); +renderer.setClearColor("#000000"); +renderer.setSize( window.innerWidth, window.innerHeight ); +document.body.appendChild( renderer.domElement ); + +/* Orbit Controls */ +oControls = new THREE.OrbitControls(camera, renderer.domElement); +oControls.update(); + +/* === Stars === */ +var starsGeometry = new THREE.Geometry(); +for(i=0; i<3000; i++){ + var star = new THREE.Vector3(); + star.x = THREE.Math.randFloatSpread(2000); + star.y = THREE.Math.randFloatSpread(2000); + star.z = THREE.Math.randFloatSpread(2000); + starsGeometry.vertices.push(star); +} +var starsMaterial = new THREE.PointsMaterial({color: 0xFFFFFF}); +var starField = new THREE.Points(starsGeometry,starsMaterial); +scene.add(starField); + + +/* === Sprites === */ +function generateSprite(col) { + var canvas = document.createElement("canvas"); + canvas.width = 16; + canvas.height = 16; + + var context = canvas.getContext("2d"); + var gradient = context.createRadialGradient( + canvas.width / 2, + canvas.height / 2, + 0, + canvas.width / 2, + canvas.height / 2, + canvas.width / 2 + ); + gradient.addColorStop(0.0, "rgba("+col+", 1)"); + gradient.addColorStop(0.9, "rgba("+col+", 0)"); + gradient.addColorStop(1.0, "rgba("+col+", 0)"); + + context.fillStyle = gradient; + context.fillRect(0, 0, canvas.width, canvas.height); + + var texture = new THREE.Texture(canvas); + texture.needsUpdate = true; + return texture; +} + +/* === Particle System === */ +function createParticleSystem(geom, col) { + var material = new THREE.ParticleBasicMaterial({ + color: 0xffffff, + size: 3, + transparent: true, + blending: THREE.AdditiveBlending, // Time to Shine! + map: generateSprite(col) + }); + + var system = new THREE.ParticleSystem(geom, material); + system.sortParticles = true; + return system; +} + +/* === Meshes === */ +geo1 = new THREE.PlaneBufferGeometry(config.planeSegments,config.planeSegments,config.planeSegments/2, config.planeSegments/2); +plane1 = createParticleSystem(geo1, config.col1); +scene.add(plane1); + +geo2 = new THREE.PlaneBufferGeometry(config.planeSegments,config.planeSegments,config.planeSegments/2, config.planeSegments/2); +plane2 = createParticleSystem(geo2, config.col2); +scene.add(plane2); + +geo3 = new THREE.PlaneBufferGeometry(config.planeSegments,config.planeSegments,config.planeSegments/2, config.planeSegments/2); +plane3 = createParticleSystem(geo3, config.col3); +scene.add(plane3); + +/* === Lights === */ +ambientLight = new THREE.AmbientLight("#333"), +scene.add(ambientLight); + +/* === Animate Points === */ +function animate() { + gp1 = plane1.geometry.attributes.position; + gp2 = plane2.geometry.attributes.position; + gp3 = plane3.geometry.attributes.position; + config.nt1 += config.noiseSpeed; + config.nt2 += config.noiseSpeed; + config.nt3 += config.noiseSpeed; + for (i=0; i + + View Collection + Art of Noise + + \ No newline at end of file diff --git a/art-of-noise-29/src/script.js b/art-of-noise-29/src/script.js new file mode 100644 index 0000000..26ea687 --- /dev/null +++ b/art-of-noise-29/src/script.js @@ -0,0 +1,149 @@ +/* === Setup === */ +var scene, camera, renderer, controls; +config = { + planeSegments: 100, + xNoiseScale: 40, + yNoiseScale: 40, + zNoiseScale: 20, + noiseSpeed: 0.001, + nt1: Math.random(), + nt2: Math.random(), + nt3: Math.random(), + col1: "255, 0, 0", + col2: "0, 255, 0", + col3: "0, 0, 255" +} + +/* Dat Gui */ +var gui = new dat.GUI(); +gui.add(config, "xNoiseScale", 10, 100).step(1).name("Noise X"); +gui.add(config, "yNoiseScale", 10, 100).step(1).name("Noise Y"); +gui.add(config, "zNoiseScale", 10, 100).step(1).name("Noise Z"); +gui.add(config, "noiseSpeed", 0.00001, 0.01).name("Noise Speed"); + +/* === Events === */ +window.onresize = function(){ + var w = window.innerWidth, h = window.innerHeight; + camera.aspect = w / h; + camera.updateProjectionMatrix(); + renderer.setSize( w, h ); +} + +/* === Scene === */ +var scene = new THREE.Scene(); + +/* === Camera === */ +var camera = new THREE.PerspectiveCamera( 35, window.innerWidth/window.innerHeight, 0.1, 1000 ); +camera.position.y = -config.planeSegments/2; +camera.position.z = config.planeSegments/2; +camera.lookAt(0,0,0); + +/* === Renderer === */ +var renderer = new THREE.WebGLRenderer({antialias:true}); +renderer.setClearColor("#000000"); +renderer.setSize( window.innerWidth, window.innerHeight ); +document.body.appendChild( renderer.domElement ); + +/* Orbit Controls */ +oControls = new THREE.OrbitControls(camera, renderer.domElement); +oControls.update(); + +/* === Stars === */ +var starsGeometry = new THREE.Geometry(); +for(i=0; i<3000; i++){ + var star = new THREE.Vector3(); + star.x = THREE.Math.randFloatSpread(2000); + star.y = THREE.Math.randFloatSpread(2000); + star.z = THREE.Math.randFloatSpread(2000); + starsGeometry.vertices.push(star); +} +var starsMaterial = new THREE.PointsMaterial({color: 0xFFFFFF}); +var starField = new THREE.Points(starsGeometry,starsMaterial); +scene.add(starField); + + +/* === Sprites === */ +function generateSprite(col) { + var canvas = document.createElement("canvas"); + canvas.width = 16; + canvas.height = 16; + + var context = canvas.getContext("2d"); + var gradient = context.createRadialGradient( + canvas.width / 2, + canvas.height / 2, + 0, + canvas.width / 2, + canvas.height / 2, + canvas.width / 2 + ); + gradient.addColorStop(0.0, "rgba("+col+", 1)"); + gradient.addColorStop(0.9, "rgba("+col+", 0)"); + gradient.addColorStop(1.0, "rgba("+col+", 0)"); + + context.fillStyle = gradient; + context.fillRect(0, 0, canvas.width, canvas.height); + + var texture = new THREE.Texture(canvas); + texture.needsUpdate = true; + return texture; +} + +/* === Particle System === */ +function createParticleSystem(geom, col) { + var material = new THREE.ParticleBasicMaterial({ + color: 0xffffff, + size: 3, + transparent: true, + blending: THREE.AdditiveBlending, // Time to Shine! + map: generateSprite(col) + }); + + var system = new THREE.ParticleSystem(geom, material); + system.sortParticles = true; + return system; +} + +/* === Meshes === */ +geo1 = new THREE.PlaneBufferGeometry(config.planeSegments,config.planeSegments,config.planeSegments/2, config.planeSegments/2); +plane1 = createParticleSystem(geo1, config.col1); +scene.add(plane1); + +geo2 = new THREE.PlaneBufferGeometry(config.planeSegments,config.planeSegments,config.planeSegments/2, config.planeSegments/2); +plane2 = createParticleSystem(geo2, config.col2); +scene.add(plane2); + +geo3 = new THREE.PlaneBufferGeometry(config.planeSegments,config.planeSegments,config.planeSegments/2, config.planeSegments/2); +plane3 = createParticleSystem(geo3, config.col3); +scene.add(plane3); + +/* === Lights === */ +ambientLight = new THREE.AmbientLight("#333"), +scene.add(ambientLight); + +/* === Animate Points === */ +function animate() { + gp1 = plane1.geometry.attributes.position; + gp2 = plane2.geometry.attributes.position; + gp3 = plane3.geometry.attributes.position; + config.nt1 += config.noiseSpeed; + config.nt2 += config.noiseSpeed; + config.nt3 += config.noiseSpeed; + for (i=0; i + + + + CodePen - ASCII Corridor + + + + + + +
+ + + + + diff --git a/ascii-corridor/dist/script.js b/ascii-corridor/dist/script.js new file mode 100644 index 0000000..c7d05ce --- /dev/null +++ b/ascii-corridor/dist/script.js @@ -0,0 +1,136 @@ +// ref: http://paulbourke.net/dataformats/asciiart/ +const ascii = ".:-=+*#%@"; + +const canvas = document.createElement('canvas'); +canvas.width = 32; +canvas.height = 48; + +const ctx = canvas.getContext('2d'); + +const asciicontainer = document.querySelector('.ascii'); + +const map = (x, max, min, tmax, tmin) => (x - min) / (max - min) * (tmax - tmin) + tmin; + +const lerp = (x, a, b) => a + (b - a) * x; + +const map_table = new Array(255).fill(1).map((_, i) => Math.ceil(map(i, 255, 0, ascii.length - 1, 0))); + +const line = (x1, y1, x2, y2) => { + ctx.beginPath(); + + let grad = ctx.createLinearGradient(x1, y1, x2, y2); + grad.addColorStop(0, "rgba(255, 255, 255, 0.75)"); + grad.addColorStop(0.5, "rgba(255, 255, 255, 0.35)"); + grad.addColorStop(1, "rgba(255, 255, 255, 0.12)"); + + ctx.strokeStyle = grad; + ctx.moveTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.stroke(); + ctx.closePath(); +} + +const getAsciiOutput = (canvas, ctx) => { + let imgd = ctx.getImageData(0, 0, canvas.width, canvas.height); + let pix = imgd.data; + + let output = ''; + + for (let i = 0, n = pix.length; i < n; i += 4) { + let xpos = (i / 4) % canvas.width; + let char = ascii[map_table[pix[i]]]; + + if (xpos == 0) { + output += '
'; + } else if (xpos == canvas.width - 1) { + output.innerHTML += '
'; + } + + output += char == ascii[0] ? `${char}` : char; + } + + return output; +} + +const randomBox = () => ({ + x: Math.floor(Math.random() * 10) + 7, + y: Math.floor(Math.random() * 15) + 7, + sx: 0, + sy: 0, + w: 6, + h: 10, + progress: 0 +}); + +let box = randomBox(); +box.sx = box.x; +box.sy = box.y; + +let nextPos = randomBox(); + +let tick = 0; +let mouseState = false; + +const loop = () => { + tick += 0.025; + + ctx.fillStyle = '#000'; + ctx.fillRect(0, 0, canvas.width, canvas.height); + + ctx.fillStyle = '#f4f4f4' + ctx.fillRect(box.x, box.y, box.w, box.h); + + + line(box.x, box.y, 0, 0); + line(box.x + box.w, box.y, canvas.width, 0); + line(box.x, box.y + box.h, 0, canvas.height); + line(box.x + box.w, box.y + box.h, canvas.width, canvas.height); + + ctx.beginPath(); + let x = box.x + box.w / 2; + let y = box.y + box.h / 2; + + let grad = ctx.createRadialGradient(x, y, 5, x, y, 20); + grad.addColorStop(0, "rgba(255, 255, 255, 0.5)"); + grad.addColorStop(0.5, "rgba(0, 0, 0, 0)"); + grad.addColorStop(1, "rgba(0, 0, 0, 0)"); + + ctx.fillStyle = grad; + ctx.arc(x, y, 6 + 2.5 * Math.acos(Math.sin(tick) * Math.PI / 4), 0, 2 * Math.PI); + ctx.fill(); + ctx.closePath(); + + if (!mouseState) { + if (box.progress < 0.99) { + box.progress += 0.005; + box.x = lerp(box.progress, box.sx, nextPos.x); + box.y = lerp(box.progress, box.sy, nextPos.y); + } else { + box = Object.assign({}, nextPos); + box.sx = box.x; + box.sy = box.y; + nextPos = randomBox(); + } + } + + asciicontainer.innerHTML = getAsciiOutput(canvas, ctx); + + requestAnimationFrame(loop); +} + +loop(); + +asciicontainer.addEventListener('mouseenter', _ => { + mouseState = true; +}); + +asciicontainer.addEventListener('mouseleave', _ => { + mouseState = false; +}); + +window.addEventListener('mousemove', e => { + if (mouseState) { + box.x = map(e.clientX, window.innerWidth, 0, canvas.width, 0) - box.w / 2; + box.y = map(e.clientY, window.innerHeight, 0, canvas.height, 0) - box.h / 2; + } +}); \ No newline at end of file diff --git a/ascii-corridor/dist/style.css b/ascii-corridor/dist/style.css new file mode 100644 index 0000000..e20b084 --- /dev/null +++ b/ascii-corridor/dist/style.css @@ -0,0 +1,22 @@ +@import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Mono&display=swap"); +body { + font-family: "IBM Plex Mono", monospace; + font-size: 12px; + background-color: black; + letter-spacing: 4px; + line-height: 12px; +} + +.ascii { + border: 1px dashed #585858; + color: #ffe599; + padding: 20px; +} + +.ascii, .screen { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} \ No newline at end of file diff --git a/ascii-corridor/license.txt b/ascii-corridor/license.txt new file mode 100644 index 0000000..eb55ab9 --- /dev/null +++ b/ascii-corridor/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by ร–mercan Balandฤฑ (https://codepen.io/omercanbalandi/pen/jOWVOYL) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/ascii-corridor/src/index.html b/ascii-corridor/src/index.html new file mode 100644 index 0000000..9a8d9e9 --- /dev/null +++ b/ascii-corridor/src/index.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/ascii-corridor/src/script.js b/ascii-corridor/src/script.js new file mode 100644 index 0000000..c7d05ce --- /dev/null +++ b/ascii-corridor/src/script.js @@ -0,0 +1,136 @@ +// ref: http://paulbourke.net/dataformats/asciiart/ +const ascii = ".:-=+*#%@"; + +const canvas = document.createElement('canvas'); +canvas.width = 32; +canvas.height = 48; + +const ctx = canvas.getContext('2d'); + +const asciicontainer = document.querySelector('.ascii'); + +const map = (x, max, min, tmax, tmin) => (x - min) / (max - min) * (tmax - tmin) + tmin; + +const lerp = (x, a, b) => a + (b - a) * x; + +const map_table = new Array(255).fill(1).map((_, i) => Math.ceil(map(i, 255, 0, ascii.length - 1, 0))); + +const line = (x1, y1, x2, y2) => { + ctx.beginPath(); + + let grad = ctx.createLinearGradient(x1, y1, x2, y2); + grad.addColorStop(0, "rgba(255, 255, 255, 0.75)"); + grad.addColorStop(0.5, "rgba(255, 255, 255, 0.35)"); + grad.addColorStop(1, "rgba(255, 255, 255, 0.12)"); + + ctx.strokeStyle = grad; + ctx.moveTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.stroke(); + ctx.closePath(); +} + +const getAsciiOutput = (canvas, ctx) => { + let imgd = ctx.getImageData(0, 0, canvas.width, canvas.height); + let pix = imgd.data; + + let output = ''; + + for (let i = 0, n = pix.length; i < n; i += 4) { + let xpos = (i / 4) % canvas.width; + let char = ascii[map_table[pix[i]]]; + + if (xpos == 0) { + output += '
'; + } else if (xpos == canvas.width - 1) { + output.innerHTML += '
'; + } + + output += char == ascii[0] ? `${char}` : char; + } + + return output; +} + +const randomBox = () => ({ + x: Math.floor(Math.random() * 10) + 7, + y: Math.floor(Math.random() * 15) + 7, + sx: 0, + sy: 0, + w: 6, + h: 10, + progress: 0 +}); + +let box = randomBox(); +box.sx = box.x; +box.sy = box.y; + +let nextPos = randomBox(); + +let tick = 0; +let mouseState = false; + +const loop = () => { + tick += 0.025; + + ctx.fillStyle = '#000'; + ctx.fillRect(0, 0, canvas.width, canvas.height); + + ctx.fillStyle = '#f4f4f4' + ctx.fillRect(box.x, box.y, box.w, box.h); + + + line(box.x, box.y, 0, 0); + line(box.x + box.w, box.y, canvas.width, 0); + line(box.x, box.y + box.h, 0, canvas.height); + line(box.x + box.w, box.y + box.h, canvas.width, canvas.height); + + ctx.beginPath(); + let x = box.x + box.w / 2; + let y = box.y + box.h / 2; + + let grad = ctx.createRadialGradient(x, y, 5, x, y, 20); + grad.addColorStop(0, "rgba(255, 255, 255, 0.5)"); + grad.addColorStop(0.5, "rgba(0, 0, 0, 0)"); + grad.addColorStop(1, "rgba(0, 0, 0, 0)"); + + ctx.fillStyle = grad; + ctx.arc(x, y, 6 + 2.5 * Math.acos(Math.sin(tick) * Math.PI / 4), 0, 2 * Math.PI); + ctx.fill(); + ctx.closePath(); + + if (!mouseState) { + if (box.progress < 0.99) { + box.progress += 0.005; + box.x = lerp(box.progress, box.sx, nextPos.x); + box.y = lerp(box.progress, box.sy, nextPos.y); + } else { + box = Object.assign({}, nextPos); + box.sx = box.x; + box.sy = box.y; + nextPos = randomBox(); + } + } + + asciicontainer.innerHTML = getAsciiOutput(canvas, ctx); + + requestAnimationFrame(loop); +} + +loop(); + +asciicontainer.addEventListener('mouseenter', _ => { + mouseState = true; +}); + +asciicontainer.addEventListener('mouseleave', _ => { + mouseState = false; +}); + +window.addEventListener('mousemove', e => { + if (mouseState) { + box.x = map(e.clientX, window.innerWidth, 0, canvas.width, 0) - box.w / 2; + box.y = map(e.clientY, window.innerHeight, 0, canvas.height, 0) - box.h / 2; + } +}); \ No newline at end of file diff --git a/ascii-corridor/src/style.sass b/ascii-corridor/src/style.sass new file mode 100644 index 0000000..e5727d6 --- /dev/null +++ b/ascii-corridor/src/style.sass @@ -0,0 +1,21 @@ +@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono&display=swap') + +body + font-family: 'IBM Plex Mono', monospace + font-size: 12px + background-color: black + letter-spacing: 4px + line-height: 12px + + +.ascii + border: 1px dashed #585858 + color: #ffe599 + padding: 20px + + +.ascii, .screen + position: absolute + top: 50% + left: 50% + transform: translate(-50%, -50%) diff --git a/background-patterns/README.markdown b/background-patterns/README.markdown new file mode 100644 index 0000000..ed69a3c --- /dev/null +++ b/background-patterns/README.markdown @@ -0,0 +1,5 @@ +# Background patterns + +A Pen created on CodePen.io. Original URL: [https://codepen.io/yuanchuan/pen/xxEXwZw](https://codepen.io/yuanchuan/pen/xxEXwZw). + + diff --git a/background-patterns/dist/index.html b/background-patterns/dist/index.html new file mode 100644 index 0000000..063304c --- /dev/null +++ b/background-patterns/dist/index.html @@ -0,0 +1,365 @@ + + + + + CodePen - Background patterns + + + + + + + + + +
+
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
+
+ + + + + diff --git a/background-patterns/dist/script.js b/background-patterns/dist/script.js new file mode 100644 index 0000000..c0c5151 --- /dev/null +++ b/background-patterns/dist/script.js @@ -0,0 +1,6 @@ +Array.from(document.querySelectorAll('li')).forEach(li => { + li.addEventListener('click', e => { + li.classList.toggle('active'); + return false; + }); +}); \ No newline at end of file diff --git a/background-patterns/dist/style.css b/background-patterns/dist/style.css new file mode 100644 index 0000000..fe93e35 --- /dev/null +++ b/background-patterns/dist/style.css @@ -0,0 +1,82 @@ +/* Layout things */ + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +html, body, main { + height: 100%; +} + +body { + background: #35363A; +} + +main { + display: grid; + place-items: center; + max-width: 80em; + margin: auto; +} + +ul { + width: 100%; + list-style: none; + display: grid; + grid-template-columns: repeat(5, 1fr); + grid-gap: 1em; + padding: 2em; + grid-template-columns: repeat(auto-fill, minmax(14em, 1fr)); +} + +li { + height: 20em; + border: 6px solid #fff; + overflow: hidden; +} + +li css-doodle { + transition: transform .2s ease; + will-change: transform; +} + +li.active { + position: fixed; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 9; + border: none; +} +li.active css-doodle { + animation: scale-down .4s ease; +} +li:not(.active):hover { + cursor: pointer; +} +li:not(.active):hover css-doodle { + transform: scale(1.02); +} +li.active:after { + content: ''; + cursor: pointer; + position: fixed; + top: 1em; + right: 1em; + width: 4em; + height: 4em; + border-radius: 50%; + background-image: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10'%3E%3Cg stroke='%23fff' stroke-width='.5'%3E%3Cline x1='1' y1='1' x2='9' y2='9' /%3E%3Cline x1='9' y1='1' x2='1' y2='9' /%3E%3C/g%3E%3C/svg%3E"); + background-color: rgba(0, 0, 0, .8); + background-size: 50%; + background-repeat: no-repeat; + background-position: center center; +} + +@keyframes scale-down { + from { transform: scale(1.02); } + to { transform: scale(1); } +} \ No newline at end of file diff --git a/background-patterns/license.txt b/background-patterns/license.txt new file mode 100644 index 0000000..3971d2e --- /dev/null +++ b/background-patterns/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by yuanchuan (https://codepen.io/yuanchuan/pen/xxEXwZw) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/background-patterns/src/index.html b/background-patterns/src/index.html new file mode 100644 index 0000000..4d56812 --- /dev/null +++ b/background-patterns/src/index.html @@ -0,0 +1,350 @@ + + + + +
+
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
+
\ No newline at end of file diff --git a/background-patterns/src/script.js b/background-patterns/src/script.js new file mode 100644 index 0000000..c0c5151 --- /dev/null +++ b/background-patterns/src/script.js @@ -0,0 +1,6 @@ +Array.from(document.querySelectorAll('li')).forEach(li => { + li.addEventListener('click', e => { + li.classList.toggle('active'); + return false; + }); +}); \ No newline at end of file diff --git a/background-patterns/src/style.css b/background-patterns/src/style.css new file mode 100644 index 0000000..fe93e35 --- /dev/null +++ b/background-patterns/src/style.css @@ -0,0 +1,82 @@ +/* Layout things */ + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +html, body, main { + height: 100%; +} + +body { + background: #35363A; +} + +main { + display: grid; + place-items: center; + max-width: 80em; + margin: auto; +} + +ul { + width: 100%; + list-style: none; + display: grid; + grid-template-columns: repeat(5, 1fr); + grid-gap: 1em; + padding: 2em; + grid-template-columns: repeat(auto-fill, minmax(14em, 1fr)); +} + +li { + height: 20em; + border: 6px solid #fff; + overflow: hidden; +} + +li css-doodle { + transition: transform .2s ease; + will-change: transform; +} + +li.active { + position: fixed; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 9; + border: none; +} +li.active css-doodle { + animation: scale-down .4s ease; +} +li:not(.active):hover { + cursor: pointer; +} +li:not(.active):hover css-doodle { + transform: scale(1.02); +} +li.active:after { + content: ''; + cursor: pointer; + position: fixed; + top: 1em; + right: 1em; + width: 4em; + height: 4em; + border-radius: 50%; + background-image: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10'%3E%3Cg stroke='%23fff' stroke-width='.5'%3E%3Cline x1='1' y1='1' x2='9' y2='9' /%3E%3Cline x1='9' y1='1' x2='1' y2='9' /%3E%3C/g%3E%3C/svg%3E"); + background-color: rgba(0, 0, 0, .8); + background-size: 50%; + background-repeat: no-repeat; + background-position: center center; +} + +@keyframes scale-down { + from { transform: scale(1.02); } + to { transform: scale(1); } +} \ No newline at end of file diff --git a/balanced-truncation/LICENSE.txt b/balanced-truncation/LICENSE.txt new file mode 100644 index 0000000..232aa23 --- /dev/null +++ b/balanced-truncation/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2023 Adam Argyle (https://codepen.io/argyleink/pen/XWyRrxz) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/balanced-truncation/README.md b/balanced-truncation/README.md new file mode 100644 index 0000000..dcff9ba --- /dev/null +++ b/balanced-truncation/README.md @@ -0,0 +1,4 @@ +# Balanced Truncation + +A Pen created on CodePen.io. Original URL: [https://codepen.io/argyleink/pen/XWyRrxz](https://codepen.io/argyleink/pen/XWyRrxz). + diff --git a/balanced-truncation/dist/index.html b/balanced-truncation/dist/index.html new file mode 100644 index 0000000..3ee4962 --- /dev/null +++ b/balanced-truncation/dist/index.html @@ -0,0 +1,16 @@ + + + + + CodePen - Balanced Truncation + + + + + + +

Lorem ipsum dolor sit amet consectetur elit. Quasi, commodi laudantium recusandae repellat accusantium, praesentium expedita magnam labore vitae neque ex. Dolorem enim asperiores corporis officia inventore impedit ratione laudantium.

+ + + + diff --git a/balanced-truncation/dist/style.css b/balanced-truncation/dist/style.css new file mode 100644 index 0000000..16aa596 --- /dev/null +++ b/balanced-truncation/dist/style.css @@ -0,0 +1,41 @@ +@layer demo { + p { + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; + max-inline-size: 40ch; + } + + html:has(input[type=checkbox]:checked) p { + text-wrap: balance; + } +} + +@layer demo.support { + * { + box-sizing: border-box; + margin: 0; + } + + html { + block-size: 100%; + color-scheme: dark light; + } + + body { + min-block-size: 100%; + font-family: system-ui, sans-serif; + + display: grid; + place-content: center; + gap: 1rem; + } + + label { + display: flex; + justify-content: flex-end; + flex-direction: row-reverse; + gap: 1ch; + } +} \ No newline at end of file diff --git a/balanced-truncation/src/index.html b/balanced-truncation/src/index.html new file mode 100644 index 0000000..d9d547a --- /dev/null +++ b/balanced-truncation/src/index.html @@ -0,0 +1,2 @@ + +

Lorem ipsum dolor sit amet consectetur elit. Quasi, commodi laudantium recusandae repellat accusantium, praesentium expedita magnam labore vitae neque ex. Dolorem enim asperiores corporis officia inventore impedit ratione laudantium.

\ No newline at end of file diff --git a/balanced-truncation/src/style.css b/balanced-truncation/src/style.css new file mode 100644 index 0000000..16aa596 --- /dev/null +++ b/balanced-truncation/src/style.css @@ -0,0 +1,41 @@ +@layer demo { + p { + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; + max-inline-size: 40ch; + } + + html:has(input[type=checkbox]:checked) p { + text-wrap: balance; + } +} + +@layer demo.support { + * { + box-sizing: border-box; + margin: 0; + } + + html { + block-size: 100%; + color-scheme: dark light; + } + + body { + min-block-size: 100%; + font-family: system-ui, sans-serif; + + display: grid; + place-content: center; + gap: 1rem; + } + + label { + display: flex; + justify-content: flex-end; + flex-direction: row-reverse; + gap: 1ch; + } +} \ No newline at end of file diff --git a/banksyvalentine-s-day/README.markdown b/banksyvalentine-s-day/README.markdown new file mode 100644 index 0000000..508ed65 --- /dev/null +++ b/banksyvalentine-s-day/README.markdown @@ -0,0 +1,4 @@ +# Banksy - Valentine's Day + _A Pen created at CodePen.io. Original URL: [https://codepen.io/loficodes/pen/MWwyaxj](https://codepen.io/loficodes/pen/MWwyaxj). + + \ No newline at end of file diff --git a/banksyvalentine-s-day/dist/index.html b/banksyvalentine-s-day/dist/index.html new file mode 100644 index 0000000..25460a4 --- /dev/null +++ b/banksyvalentine-s-day/dist/index.html @@ -0,0 +1,16 @@ + + + + + CodePen - Banksy - Valentine's Day + + + + + + + + + + + diff --git a/banksyvalentine-s-day/dist/script.js b/banksyvalentine-s-day/dist/script.js new file mode 100644 index 0000000..2defa85 --- /dev/null +++ b/banksyvalentine-s-day/dist/script.js @@ -0,0 +1,231 @@ +var startPos; +var endPos; +var bullets = []; +var flowers = []; +var showVector = false; +var splatterPane; +var flowerCount = 20; +var dripCount = 4; +var maxSpeed = 50; +var girlW = 100; +var girlH = girlW * 1.72; +var buttonW = Math.max(window.innerWidth * .1, 80); +var buttonH = Math.max(window.innerHeight * .05, 20); + +// BULLET CLASS +function Bullet(x, y) { + this.pos = createVector(girlW, height-girlH); + this.vel = createVector(x, y); + this.grav= createVector(0,.25); + this.maxSpeed = 20; + + this.vel.setMag(map(this.vel.mag(), 0,500,0,this.maxSpeed)) + + this.update = function() { + this.vel.add(this.grav); + this.pos.add(this.vel); + } + + this.show = function() { + noStroke(); + ellipse(this.pos.x, this.pos.y, 10, 10); + } +} + +// FLOWER CLASS +function Flower(pos, vel, chance) { + this.chance = chance; + this.pos = pos; + this.vel = vel; + this.acc = createVector(0,0); + this.lifetimeStart = 20; + this.lifetime = this.lifetimeStart; + this.grav = createVector(0, .25); + this.dead = false; + this.size = 10; + this.prevPos; + + this.update = function() { + if ( !this.dead ){ + //save + this.prevPos = this.pos.copy(); + + // accumulate + this.acc.add(this.grav); + this.vel.add(this.acc); + this.pos.add(this.vel); + + // reset + this.acc = createVector(0,0); + + // increment + this.lifetime--; + if ( this.lifetime == 0 ) { + this.dead = true; + } + } + } + + this.show = function() { + var size = this.size * (this.lifetime/this.lifetimeStart); + var lightness = floor(random(42,50)); + + if (random() < this.chance ) { + splatterPane.stroke(color("hsl(0,60%,"+lightness+"%)")); + splatterPane.strokeWeight(size); + splatterPane.noFill(); + splatterPane.line(this.pos.x, this.pos.y, this.prevPos.x, this.prevPos.y); + } + } +} + +// P5 setup +function preload() { + girl = loadImage('https://s3-us-west-2.amazonaws.com/s.cdpn.io/5946/banksy.png'); + + chelsea = loadFont('https://s3-us-west-2.amazonaws.com/s.cdpn.io/5946/ChelseaMarket-Regular.ttf'); + +} +function setup() { + createCanvas(windowWidth,windowHeight); + splatterPane = createGraphics(width, height); + + button = createButton('RESET'); + button.position(width - (buttonW + 20), height - (buttonH + 40)); + button.mousePressed(reset); + + button.size(buttonW, buttonH); +} +function draw() { + background(204); + drawInstructions(); + image(girl, 0, height-girlH, girlW, girlH); + image(splatterPane, 0, 0, width, height); + + fill(0) + + // VECTOR + if ( showVector ) { + var d = dist(startPos.x, startPos.y, mouseX, mouseY); + var m = createVector(mouseX, mouseY); + var angle = startPos.angleBetween(m); + var hue = min(map(d, 0, height/3, 0, 100), 100); + var col = color('hsl('+floor(hue)+',50%,50%)'); + stroke(col); + + strokeWeight(10) + line(startPos.x, startPos.y, mouseX, mouseY); + } + + // BULLETS + for(let i = bullets.length-1; i >=0; i--) { + var b = bullets[i]; + b.update(); + b.show(); + if ( b.pos.y > height ) { + bullets.splice(i, 1); + } + } + + // FLOWERS + for(let i = flowers.length-1; i >=0; i--) { + var f = flowers[i]; + f.update(); + f.show(); + if ( f.dead ) { + flowers.splice(i, 1); + } + } +} + +// BULLET TO FLOWERS +function burst () { + for ( var j = 0; j < bullets.length; j++){ + var b = bullets[j]; + var mag = b.vel.mag(); + var magPower = 1.2 + + for ( var i = 0; i < (mag*magPower); i++){ + var pos = createVector(b.pos.x, b.pos.y); + var vel = createVector(b.vel.x, b.vel.y); + + var angle = (TAU/(mag*magPower))*i; + + newVel = createVector(vel.x, vel.y).rotate(angle); + var angle = vel.angleBetween(newVel); + var angleDiff = PI - abs(angle) + .5; + + var chanceOfShowing = map(angleDiff, 0, PI, 0, .9); + newVel.mult(map(angleDiff, 0, PI, 0, .5)) + + var f = new Flower(pos, newVel, chanceOfShowing); + flowers.push(f); + } + for ( var i = 0; i < dripCount; i++){ + + var pos = createVector(b.pos.x+(random(-mag,mag)), b.pos.y); + var vel = createVector(0,1).setMag(mag*.3); + var f = new Flower(pos, vel, .8); + flowers.push(f); + } + } + console.log(flowers) + bullets = new Array; +} + +// FIRE A BULLET +function fire() { + var d = dist(startPos.x, startPos.y, endPos.x, endPos.y); + + if ( d < 10 ) { + burst(); + } else { + var b = new Bullet(startPos.x - endPos.x, startPos.y - endPos.y); + bullets.push(b); + } +} + +// EVENTS +function start() { + startPos = createVector(mouseX, mouseY); + showVector = true; +} +function end() { + endPos = createVector(mouseX, mouseY); + showVector = false; + fire(); +} +function mousePressed() { + start() +} +function touchStarted() { + start() +} +function mouseReleased() { + end() +} +function touchEnded() { + end() +} + +// RESET +function reset() { + splatterPane.clear(); +} + +// DRAW INSTRUCTIONS +function drawInstructions () { + noStroke(); + fill(70); + textFont(chelsea); + textSize(32); + textAlign(CENTER); + var topAlign = max(height*.1) + text('drag to aim', width/2, topAlign); + text('tap to burst', width/2, topAlign*2); +} + +// NO WEIRDNESS ON MOBILE +document.ontouchmove = function(event){ + event.preventDefault(); +} \ No newline at end of file diff --git a/banksyvalentine-s-day/dist/style.css b/banksyvalentine-s-day/dist/style.css new file mode 100644 index 0000000..1709a6e --- /dev/null +++ b/banksyvalentine-s-day/dist/style.css @@ -0,0 +1,19 @@ +html, body { + margin: 0; + padding: 0; + position: fixed; + width: 100%; + height: 100%; +} + +canvas { + width: 500px; + height: 500px; + max-width: 100vw; + max-height: 100vh; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + border: 2px solid #8DA5B2; +} \ No newline at end of file diff --git a/banksyvalentine-s-day/license.txt b/banksyvalentine-s-day/license.txt new file mode 100644 index 0000000..33cb8ed --- /dev/null +++ b/banksyvalentine-s-day/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by LoFi (https://codepen.io/loficodes/pen/MWwyaxj) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/banksyvalentine-s-day/src/index.html b/banksyvalentine-s-day/src/index.html new file mode 100644 index 0000000..e69de29 diff --git a/banksyvalentine-s-day/src/script.js b/banksyvalentine-s-day/src/script.js new file mode 100644 index 0000000..2defa85 --- /dev/null +++ b/banksyvalentine-s-day/src/script.js @@ -0,0 +1,231 @@ +var startPos; +var endPos; +var bullets = []; +var flowers = []; +var showVector = false; +var splatterPane; +var flowerCount = 20; +var dripCount = 4; +var maxSpeed = 50; +var girlW = 100; +var girlH = girlW * 1.72; +var buttonW = Math.max(window.innerWidth * .1, 80); +var buttonH = Math.max(window.innerHeight * .05, 20); + +// BULLET CLASS +function Bullet(x, y) { + this.pos = createVector(girlW, height-girlH); + this.vel = createVector(x, y); + this.grav= createVector(0,.25); + this.maxSpeed = 20; + + this.vel.setMag(map(this.vel.mag(), 0,500,0,this.maxSpeed)) + + this.update = function() { + this.vel.add(this.grav); + this.pos.add(this.vel); + } + + this.show = function() { + noStroke(); + ellipse(this.pos.x, this.pos.y, 10, 10); + } +} + +// FLOWER CLASS +function Flower(pos, vel, chance) { + this.chance = chance; + this.pos = pos; + this.vel = vel; + this.acc = createVector(0,0); + this.lifetimeStart = 20; + this.lifetime = this.lifetimeStart; + this.grav = createVector(0, .25); + this.dead = false; + this.size = 10; + this.prevPos; + + this.update = function() { + if ( !this.dead ){ + //save + this.prevPos = this.pos.copy(); + + // accumulate + this.acc.add(this.grav); + this.vel.add(this.acc); + this.pos.add(this.vel); + + // reset + this.acc = createVector(0,0); + + // increment + this.lifetime--; + if ( this.lifetime == 0 ) { + this.dead = true; + } + } + } + + this.show = function() { + var size = this.size * (this.lifetime/this.lifetimeStart); + var lightness = floor(random(42,50)); + + if (random() < this.chance ) { + splatterPane.stroke(color("hsl(0,60%,"+lightness+"%)")); + splatterPane.strokeWeight(size); + splatterPane.noFill(); + splatterPane.line(this.pos.x, this.pos.y, this.prevPos.x, this.prevPos.y); + } + } +} + +// P5 setup +function preload() { + girl = loadImage('https://s3-us-west-2.amazonaws.com/s.cdpn.io/5946/banksy.png'); + + chelsea = loadFont('https://s3-us-west-2.amazonaws.com/s.cdpn.io/5946/ChelseaMarket-Regular.ttf'); + +} +function setup() { + createCanvas(windowWidth,windowHeight); + splatterPane = createGraphics(width, height); + + button = createButton('RESET'); + button.position(width - (buttonW + 20), height - (buttonH + 40)); + button.mousePressed(reset); + + button.size(buttonW, buttonH); +} +function draw() { + background(204); + drawInstructions(); + image(girl, 0, height-girlH, girlW, girlH); + image(splatterPane, 0, 0, width, height); + + fill(0) + + // VECTOR + if ( showVector ) { + var d = dist(startPos.x, startPos.y, mouseX, mouseY); + var m = createVector(mouseX, mouseY); + var angle = startPos.angleBetween(m); + var hue = min(map(d, 0, height/3, 0, 100), 100); + var col = color('hsl('+floor(hue)+',50%,50%)'); + stroke(col); + + strokeWeight(10) + line(startPos.x, startPos.y, mouseX, mouseY); + } + + // BULLETS + for(let i = bullets.length-1; i >=0; i--) { + var b = bullets[i]; + b.update(); + b.show(); + if ( b.pos.y > height ) { + bullets.splice(i, 1); + } + } + + // FLOWERS + for(let i = flowers.length-1; i >=0; i--) { + var f = flowers[i]; + f.update(); + f.show(); + if ( f.dead ) { + flowers.splice(i, 1); + } + } +} + +// BULLET TO FLOWERS +function burst () { + for ( var j = 0; j < bullets.length; j++){ + var b = bullets[j]; + var mag = b.vel.mag(); + var magPower = 1.2 + + for ( var i = 0; i < (mag*magPower); i++){ + var pos = createVector(b.pos.x, b.pos.y); + var vel = createVector(b.vel.x, b.vel.y); + + var angle = (TAU/(mag*magPower))*i; + + newVel = createVector(vel.x, vel.y).rotate(angle); + var angle = vel.angleBetween(newVel); + var angleDiff = PI - abs(angle) + .5; + + var chanceOfShowing = map(angleDiff, 0, PI, 0, .9); + newVel.mult(map(angleDiff, 0, PI, 0, .5)) + + var f = new Flower(pos, newVel, chanceOfShowing); + flowers.push(f); + } + for ( var i = 0; i < dripCount; i++){ + + var pos = createVector(b.pos.x+(random(-mag,mag)), b.pos.y); + var vel = createVector(0,1).setMag(mag*.3); + var f = new Flower(pos, vel, .8); + flowers.push(f); + } + } + console.log(flowers) + bullets = new Array; +} + +// FIRE A BULLET +function fire() { + var d = dist(startPos.x, startPos.y, endPos.x, endPos.y); + + if ( d < 10 ) { + burst(); + } else { + var b = new Bullet(startPos.x - endPos.x, startPos.y - endPos.y); + bullets.push(b); + } +} + +// EVENTS +function start() { + startPos = createVector(mouseX, mouseY); + showVector = true; +} +function end() { + endPos = createVector(mouseX, mouseY); + showVector = false; + fire(); +} +function mousePressed() { + start() +} +function touchStarted() { + start() +} +function mouseReleased() { + end() +} +function touchEnded() { + end() +} + +// RESET +function reset() { + splatterPane.clear(); +} + +// DRAW INSTRUCTIONS +function drawInstructions () { + noStroke(); + fill(70); + textFont(chelsea); + textSize(32); + textAlign(CENTER); + var topAlign = max(height*.1) + text('drag to aim', width/2, topAlign); + text('tap to burst', width/2, topAlign*2); +} + +// NO WEIRDNESS ON MOBILE +document.ontouchmove = function(event){ + event.preventDefault(); +} \ No newline at end of file diff --git a/banksyvalentine-s-day/src/style.css b/banksyvalentine-s-day/src/style.css new file mode 100644 index 0000000..1709a6e --- /dev/null +++ b/banksyvalentine-s-day/src/style.css @@ -0,0 +1,19 @@ +html, body { + margin: 0; + padding: 0; + position: fixed; + width: 100%; + height: 100%; +} + +canvas { + width: 500px; + height: 500px; + max-width: 100vw; + max-height: 100vh; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + border: 2px solid #8DA5B2; +} \ No newline at end of file diff --git a/based-on-moir-motion-by-takahiro-kurashima-san/README.markdown b/based-on-moir-motion-by-takahiro-kurashima-san/README.markdown new file mode 100644 index 0000000..ee5022a --- /dev/null +++ b/based-on-moir-motion-by-takahiro-kurashima-san/README.markdown @@ -0,0 +1,6 @@ +# Based on Moirรฉmotion by TAKAHIRO KURASHIMA-san + +A Pen created on CodePen.io. Original URL: [https://codepen.io/toshiya-marukubo/pen/ExwbrVV](https://codepen.io/toshiya-marukubo/pen/ExwbrVV). + +Based on Moirรฉmotion by TAKAHIRO KURASHIMA-san. +Please google it. It's an amazing book. diff --git a/based-on-moir-motion-by-takahiro-kurashima-san/dist/index.html b/based-on-moir-motion-by-takahiro-kurashima-san/dist/index.html new file mode 100644 index 0000000..b3d288b --- /dev/null +++ b/based-on-moir-motion-by-takahiro-kurashima-san/dist/index.html @@ -0,0 +1,17 @@ + + + + + CodePen - Based on Moirรฉmotion by TAKAHIRO KURASHIMA-san + + + + + + +

Based on Moirรฉmotion by TAKAHIRO KURASHIMA-san

+ + + + + diff --git a/based-on-moir-motion-by-takahiro-kurashima-san/dist/script.js b/based-on-moir-motion-by-takahiro-kurashima-san/dist/script.js new file mode 100644 index 0000000..cf7f995 --- /dev/null +++ b/based-on-moir-motion-by-takahiro-kurashima-san/dist/script.js @@ -0,0 +1,123 @@ +class Sketch { + constructor() { + this.setupCanvas(); + this.setupEvents(); + + this.initialize(); + } + + setupCanvas() { + this.canvas = document.createElement('canvas'); + document.getElementsByTagName('body')[0].appendChild(this.canvas); + this.ctx = this.canvas.getContext('2d'); + this.canvas.style.display = 'block'; + this.canvas.style.height = '100%'; + this.canvas.style.width = '100%'; + this.canvas.style.position = 'fixed'; + this.canvas.style.top = '0'; + this.canvas.style.left = '0'; + this.canvas.style.zIndex = '-1'; + this.canvas.style.background = '#FFF'; + } + + setupEvents() { + window.addEventListener('resize', this.onResize.bind(this)); + document.body.addEventListener('click', this.onClick.bind(this)); + document.body.addEventListener('mousemove', this.onMousemove.bind(this)); + document.body.addEventListener('touchmove', this.onTouchmove.bind(this)); + } + + onResize() { + this.initialize(); + } + + onClick() { + if (this.display) { + this.display = false; + } else { + this.display = true; + } + } + + onMousemove(e) { + this.mouseX = e.clientX; + this.mouseY = e.clientY; + } + + onTouchmove(e) { + const touches = e.touches[0]; + + this.mouseX = touches.clientX; + this.mouseY = touches.clientY; + } + + initialize() { + if (this.id) { + cancelAnimationFrame(this.id); + } + + this.display = true; + + this.width = this.canvas.width = Math.floor(window.innerWidth); + this.height = this.canvas.height = Math.floor(window.innerHeight); + + this.mouseX = this.width / 2; + this.mouseY = this.height / 2; + + this.shapes = []; + this.step = 5; + + for (let x = -this.width; x <= this.width; x += this.step) { + const tmp = { + x: x, + y: 0, + r: (2.0 - Math.abs(x) / (this.width)) * 0.8 + }; + + this.shapes.push(tmp); + } + + this.draw(0); + } + + draw(t) { + t *= 0.1; + + this.ctx.save(); + this.ctx.clearRect(0, 0, this.width, this.height); + this.ctx.translate(this.width / 2, 0); + + if (this.display) { + for (let i = 0; i < this.shapes.length; i++) { + const s = this.shapes[i]; + this.ctx.beginPath(); + this.ctx.moveTo(s.x * s.r, s.y); + this.ctx.lineTo(s.x * s.r - this.step * 10, this.height); + this.ctx.stroke(); + } + } + + this.ctx.restore(); + + this.ctx.save(); + this.ctx.translate(this.mouseX, this.mouseY); + this.ctx.lineWidth = this.step; + for (let i = -this.width / 4; i <= this.width / 4; i += this.step + 1) { + this.ctx.beginPath(); + this.ctx.moveTo(i, -this.height / 4); + this.ctx.lineTo(i, this.height / 4); + this.ctx.stroke(); + } + this.ctx.restore(); + + this.id = requestAnimationFrame(this.draw.bind(this)); + } +} + +(function() { + window.addEventListener('DOMContentLoaded', () => { + console.clear(); + + new Sketch(); + }); +})(); \ No newline at end of file diff --git a/based-on-moir-motion-by-takahiro-kurashima-san/dist/style.css b/based-on-moir-motion-by-takahiro-kurashima-san/dist/style.css new file mode 100644 index 0000000..4c6146b --- /dev/null +++ b/based-on-moir-motion-by-takahiro-kurashima-san/dist/style.css @@ -0,0 +1,21 @@ +* { + margin: 0; + padding: 0; + overflow: hidden; + cursor: pointer; +} +html, +body { + font-size: 12px; + font-family: serif; +} +h1 { + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background: rgba(0,0,0,0.8); + color: #fff; + padding: 16px; + line-height: 1.5; +} \ No newline at end of file diff --git a/based-on-moir-motion-by-takahiro-kurashima-san/license.txt b/based-on-moir-motion-by-takahiro-kurashima-san/license.txt new file mode 100644 index 0000000..1d615cb --- /dev/null +++ b/based-on-moir-motion-by-takahiro-kurashima-san/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2022 by Toshiya Marukubo (https://codepen.io/toshiya-marukubo/pen/ExwbrVV) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/based-on-moir-motion-by-takahiro-kurashima-san/src/index.pug b/based-on-moir-motion-by-takahiro-kurashima-san/src/index.pug new file mode 100644 index 0000000..ae689a2 --- /dev/null +++ b/based-on-moir-motion-by-takahiro-kurashima-san/src/index.pug @@ -0,0 +1 @@ +h1 Based on Moirรฉmotion by TAKAHIRO KURASHIMA-san \ No newline at end of file diff --git a/based-on-moir-motion-by-takahiro-kurashima-san/src/script.js b/based-on-moir-motion-by-takahiro-kurashima-san/src/script.js new file mode 100644 index 0000000..cf7f995 --- /dev/null +++ b/based-on-moir-motion-by-takahiro-kurashima-san/src/script.js @@ -0,0 +1,123 @@ +class Sketch { + constructor() { + this.setupCanvas(); + this.setupEvents(); + + this.initialize(); + } + + setupCanvas() { + this.canvas = document.createElement('canvas'); + document.getElementsByTagName('body')[0].appendChild(this.canvas); + this.ctx = this.canvas.getContext('2d'); + this.canvas.style.display = 'block'; + this.canvas.style.height = '100%'; + this.canvas.style.width = '100%'; + this.canvas.style.position = 'fixed'; + this.canvas.style.top = '0'; + this.canvas.style.left = '0'; + this.canvas.style.zIndex = '-1'; + this.canvas.style.background = '#FFF'; + } + + setupEvents() { + window.addEventListener('resize', this.onResize.bind(this)); + document.body.addEventListener('click', this.onClick.bind(this)); + document.body.addEventListener('mousemove', this.onMousemove.bind(this)); + document.body.addEventListener('touchmove', this.onTouchmove.bind(this)); + } + + onResize() { + this.initialize(); + } + + onClick() { + if (this.display) { + this.display = false; + } else { + this.display = true; + } + } + + onMousemove(e) { + this.mouseX = e.clientX; + this.mouseY = e.clientY; + } + + onTouchmove(e) { + const touches = e.touches[0]; + + this.mouseX = touches.clientX; + this.mouseY = touches.clientY; + } + + initialize() { + if (this.id) { + cancelAnimationFrame(this.id); + } + + this.display = true; + + this.width = this.canvas.width = Math.floor(window.innerWidth); + this.height = this.canvas.height = Math.floor(window.innerHeight); + + this.mouseX = this.width / 2; + this.mouseY = this.height / 2; + + this.shapes = []; + this.step = 5; + + for (let x = -this.width; x <= this.width; x += this.step) { + const tmp = { + x: x, + y: 0, + r: (2.0 - Math.abs(x) / (this.width)) * 0.8 + }; + + this.shapes.push(tmp); + } + + this.draw(0); + } + + draw(t) { + t *= 0.1; + + this.ctx.save(); + this.ctx.clearRect(0, 0, this.width, this.height); + this.ctx.translate(this.width / 2, 0); + + if (this.display) { + for (let i = 0; i < this.shapes.length; i++) { + const s = this.shapes[i]; + this.ctx.beginPath(); + this.ctx.moveTo(s.x * s.r, s.y); + this.ctx.lineTo(s.x * s.r - this.step * 10, this.height); + this.ctx.stroke(); + } + } + + this.ctx.restore(); + + this.ctx.save(); + this.ctx.translate(this.mouseX, this.mouseY); + this.ctx.lineWidth = this.step; + for (let i = -this.width / 4; i <= this.width / 4; i += this.step + 1) { + this.ctx.beginPath(); + this.ctx.moveTo(i, -this.height / 4); + this.ctx.lineTo(i, this.height / 4); + this.ctx.stroke(); + } + this.ctx.restore(); + + this.id = requestAnimationFrame(this.draw.bind(this)); + } +} + +(function() { + window.addEventListener('DOMContentLoaded', () => { + console.clear(); + + new Sketch(); + }); +})(); \ No newline at end of file diff --git a/based-on-moir-motion-by-takahiro-kurashima-san/src/style.styl b/based-on-moir-motion-by-takahiro-kurashima-san/src/style.styl new file mode 100644 index 0000000..600790a --- /dev/null +++ b/based-on-moir-motion-by-takahiro-kurashima-san/src/style.styl @@ -0,0 +1,19 @@ +* + margin: 0; + padding: 0; + overflow: hidden; + cursor: pointer; + +html, body + font-size: 12px; + font-family: serif; + +h1 + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background: rgba(0, 0, 0, 0.8); + color: #FFF; + padding: 16px; + line-height: 1.5; \ No newline at end of file diff --git a/baubudsgenerative-bauhaus-inspired-characters/README.markdown b/baubudsgenerative-bauhaus-inspired-characters/README.markdown new file mode 100644 index 0000000..c5f5a54 --- /dev/null +++ b/baubudsgenerative-bauhaus-inspired-characters/README.markdown @@ -0,0 +1,5 @@ +# BauBuds - Generative Bauhaus inspired Characters + +A Pen created on CodePen.io. Original URL: [https://codepen.io/georgedoescode/pen/VwmbxRy](https://codepen.io/georgedoescode/pen/VwmbxRy). + +BauBuds are generative Bauhaus inspired characters for an upcoming project... keep an eye out for them in the future! ๐Ÿ‘€ diff --git a/baubudsgenerative-bauhaus-inspired-characters/dist/index.html b/baubudsgenerative-bauhaus-inspired-characters/dist/index.html new file mode 100644 index 0000000..e97c1af --- /dev/null +++ b/baubudsgenerative-bauhaus-inspired-characters/dist/index.html @@ -0,0 +1,16 @@ + + + + + CodePen - BauBuds - Generative Bauhaus inspired Characters + + + + + +
+ + + + + diff --git a/baubudsgenerative-bauhaus-inspired-characters/dist/script.js b/baubudsgenerative-bauhaus-inspired-characters/dist/script.js new file mode 100644 index 0000000..dc8fcb3 --- /dev/null +++ b/baubudsgenerative-bauhaus-inspired-characters/dist/script.js @@ -0,0 +1,237 @@ +import { SVG } from "https://cdn.skypack.dev/@svgdotjs/svg.js"; + +function random(min, max, clamp = false) { + const value = Math.random() * (max - min) + min; + + return clamp ? Math.round(value) : value; +} + +class BauBudEyes {} + +class BauBudPatternGenerator { + constructor(svg) { + this.svg = svg; + this.types = ["dots", "rects"]; + } + + generate(fill) { + this.type = this.types[random(0, this.types.length, true)]; + + return this.svg.pattern(4, 4, (add) => { + if (this.type === "rects") { + add.rect(2, 2).cx(0).cy(0).fill(fill); + } else { + add.circle(1).cx(2).cy(2).fill(fill); + } + }); + } +} + +class BauBudBody { + constructor(svg, x, y, width, height) { + this.svg = svg.group(); + this.x = x; + this.y = y; + this.width = width; + this.height = height; + + this.types = [ + this.circle, + this.rect, + this.equilateralTriangle, + this.rightAngleTriangle, + this.semiCircle + ]; + + this.patternGenerator = new BauBudPatternGenerator(this.svg); + } + + circle() { + this.type = "circle"; + + return this.svg + .circle(Math.max(this.width, this.height)) + .cx(this.x) + .cy(this.height); + } + + rect() { + this.type = "rect"; + + return this.svg.rect(this.width, this.height).cx(this.x).cy(this.y); + } + + equilateralTriangle() { + this.type = "equilateralTriangle"; + + return this.svg + .path( + ` + M ${this.x} ${this.y - this.height / 2} + L ${this.x + this.width / 2} ${this.y + this.height / 2} + L ${this.x - this.width / 2} ${this.y + this.height / 2} + Z + ` + ) + .rotate(this.randomRotation(180)); + } + + rightAngleTriangle() { + this.type = "rightAngleTriangle"; + + return this.svg + .path( + ` + M ${this.x - this.width / 2} ${this.y - this.height / 2} + L ${this.x + this.width / 2} ${this.y + this.height / 2} + L ${this.x - this.width / 2} ${this.y + this.height / 2} + Z + ` + ) + .rotate(this.randomRotation(90)); + } + + semiCircle() { + this.type = "semiCircle"; + + const rad = Math.max(this.width, this.height) / 2; + + return this.svg + .path( + ` + M ${this.x - rad} ${this.y + rad / 2} + A ${rad} ${rad} 0 0 1 ${this.x + this.width / 2} ${this.y + rad / 2} + Z + ` + ) + .rotate(this.randomRotation(180)); + } + + randomRotation(step = 90) { + const n = 360 / step; + return random(0, n, true) * step; + } + + generate() { + this.svg.clear(); + + this.fill = ["red", "yellow", "blue"][random(0, 2, true)]; + + const pattern = this.patternGenerator.generate("#000"); + + this.base = this.types[random(0, this.types.length - 1, true)] + .call(this) + .fill("none") + .stroke("none"); + + let translateVal = random(5, 15); + if (random(0, 1) > 0.5) translateVal *= -1; + + this.fill = this.base + .clone() + .addTo(this.svg) + .fill(this.fill) + .translate(translateVal, -translateVal); + + this.pattern = this.base + .clone() + .addTo(this.svg) + .fill(pattern) + .translate(-translateVal * 2, translateVal * 2) + .scale(random(0.625, 0.825)); + + this.outline = this.base + .clone() + .addTo(this.svg) + .stroke("black") + .fill("transparent"); + } +} + +class BauBud { + constructor(target) { + this.svg = SVG().viewbox(0, 0, 200, 200).addTo(target); + + this.body = new BauBudBody(this.svg, 100, 100, 100, 100); + this.eyes = new BauBudEyes(this.svg, 100, 100); + } + + generate() { + this.body.generate(); + + const eyeWidth = random(5, 20); + const innerWidth = 8; + + this.svg + .ellipse(16) + .stroke("#000") + .fill("#fff") + .cx(100 - eyeWidth) + .cy(100); + this.svg + .ellipse(16) + .stroke("#000") + .fill("#fff") + .cx(100 + eyeWidth) + .cy(100); + + const choice = random(0, 5, true); + + let leftEyeInnerX = 100 - eyeWidth; + let rightEyeInnerX = 100 + eyeWidth; + + let eyeY = 100; + + switch (choice) { + case 1: + leftEyeInnerX -= 4; + rightEyeInnerX -= 4; + break; + case 2: + leftEyeInnerX += 4; + rightEyeInnerX += 4; + break; + case 3: + eyeY += 4; + break; + case 4: + eyeY -= 4; + break; + + default: + leftEyeInnerX = leftEyeInnerX; + rightEyeInnerX = rightEyeInnerX; + } + + this.svg + .ellipse(innerWidth) + .stroke("#000") + .fill("#000") + .cx(leftEyeInnerX) + .cy(eyeY); + this.svg + .ellipse(innerWidth) + .stroke("#000") + .fill("#000") + .cx(rightEyeInnerX) + .cy(eyeY); + } +} + +for (let i = 0; i < 100; i++) { + const bauBud = new BauBud(document.querySelector(".buds")); + bauBud.generate(); +} + +const buds = document.querySelector(".buds"); + +setInterval(() => { + const y = window.pageYOffset; + const windowHeight = window.innerHeight; + if (y + 200 + windowHeight >= buds.scrollHeight) { + for (let i = 0; i < 100; i++) { + const bauBud = new BauBud(buds); + bauBud.generate(); + } + } +}, 100); \ No newline at end of file diff --git a/baubudsgenerative-bauhaus-inspired-characters/dist/style.css b/baubudsgenerative-bauhaus-inspired-characters/dist/style.css new file mode 100644 index 0000000..0378ccd --- /dev/null +++ b/baubudsgenerative-bauhaus-inspired-characters/dist/style.css @@ -0,0 +1,48 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +:root { + --grid-rows: repeat(2, 1fr); +} + +html { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body { + font-family: Helvetica, system-ui, sans-serif; + color: #000; + padding: 1.5rem; + line-height: 1; +} + +.buds { + display: grid; + grid-template-columns: var(--grid-rows); +} + +svg { + width: 100%; +} + +@media only screen and (min-width: 800px) { + :root { + --grid-rows: repeat(3, 1fr); + } +} + +@media only screen and (min-width: 1280px) { + :root { + --grid-rows: repeat(4, 1fr); + } +} + +@media only screen and (min-width: 1600px) { + :root { + --grid-rows: repeat(5, 1fr); + } +} \ No newline at end of file diff --git a/baubudsgenerative-bauhaus-inspired-characters/license.txt b/baubudsgenerative-bauhaus-inspired-characters/license.txt new file mode 100644 index 0000000..2bd315e --- /dev/null +++ b/baubudsgenerative-bauhaus-inspired-characters/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by George Francis (https://codepen.io/georgedoescode/pen/VwmbxRy) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/baubudsgenerative-bauhaus-inspired-characters/src/index.html b/baubudsgenerative-bauhaus-inspired-characters/src/index.html new file mode 100644 index 0000000..1e5b05f --- /dev/null +++ b/baubudsgenerative-bauhaus-inspired-characters/src/index.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/baubudsgenerative-bauhaus-inspired-characters/src/script.js b/baubudsgenerative-bauhaus-inspired-characters/src/script.js new file mode 100644 index 0000000..d7c2dc8 --- /dev/null +++ b/baubudsgenerative-bauhaus-inspired-characters/src/script.js @@ -0,0 +1,237 @@ +import { SVG } from "https://cdn.skypack.dev/@svgdotjs/svg.js"; + +function random(min, max, clamp = false) { + const value = Math.random() * (max - min) + min; + + return clamp ? Math.round(value) : value; +} + +class BauBudEyes {} + +class BauBudPatternGenerator { + constructor(svg) { + this.svg = svg; + this.types = ["dots", "rects"]; + } + + generate(fill) { + this.type = this.types[random(0, this.types.length, true)]; + + return this.svg.pattern(4, 4, (add) => { + if (this.type === "rects") { + add.rect(2, 2).cx(0).cy(0).fill(fill); + } else { + add.circle(1).cx(2).cy(2).fill(fill); + } + }); + } +} + +class BauBudBody { + constructor(svg, x, y, width, height) { + this.svg = svg.group(); + this.x = x; + this.y = y; + this.width = width; + this.height = height; + + this.types = [ + this.circle, + this.rect, + this.equilateralTriangle, + this.rightAngleTriangle, + this.semiCircle + ]; + + this.patternGenerator = new BauBudPatternGenerator(this.svg); + } + + circle() { + this.type = "circle"; + + return this.svg + .circle(Math.max(this.width, this.height)) + .cx(this.x) + .cy(this.height); + } + + rect() { + this.type = "rect"; + + return this.svg.rect(this.width, this.height).cx(this.x).cy(this.y); + } + + equilateralTriangle() { + this.type = "equilateralTriangle"; + + return this.svg + .path( + ` + M ${this.x} ${this.y - this.height / 2} + L ${this.x + this.width / 2} ${this.y + this.height / 2} + L ${this.x - this.width / 2} ${this.y + this.height / 2} + Z + ` + ) + .rotate(this.randomRotation(180)); + } + + rightAngleTriangle() { + this.type = "rightAngleTriangle"; + + return this.svg + .path( + ` + M ${this.x - this.width / 2} ${this.y - this.height / 2} + L ${this.x + this.width / 2} ${this.y + this.height / 2} + L ${this.x - this.width / 2} ${this.y + this.height / 2} + Z + ` + ) + .rotate(this.randomRotation(90)); + } + + semiCircle() { + this.type = "semiCircle"; + + const rad = Math.max(this.width, this.height) / 2; + + return this.svg + .path( + ` + M ${this.x - rad} ${this.y + rad / 2} + A ${rad} ${rad} 0 0 1 ${this.x + this.width / 2} ${this.y + rad / 2} + Z + ` + ) + .rotate(this.randomRotation(180)); + } + + randomRotation(step = 90) { + const n = 360 / step; + return random(0, n, true) * step; + } + + generate() { + this.svg.clear(); + + this.fill = ["red", "yellow", "blue"][random(0, 2, true)]; + + const pattern = this.patternGenerator.generate("#000"); + + this.base = this.types[random(0, this.types.length - 1, true)] + .call(this) + .fill("none") + .stroke("none"); + + let translateVal = random(5, 15); + if (random(0, 1) > 0.5) translateVal *= -1; + + this.fill = this.base + .clone() + .addTo(this.svg) + .fill(this.fill) + .translate(translateVal, -translateVal); + + this.pattern = this.base + .clone() + .addTo(this.svg) + .fill(pattern) + .translate(-translateVal * 2, translateVal * 2) + .scale(random(0.625, 0.825)); + + this.outline = this.base + .clone() + .addTo(this.svg) + .stroke("black") + .fill("transparent"); + } +} + +class BauBud { + constructor(target) { + this.svg = SVG().viewbox(0, 0, 200, 200).addTo(target); + + this.body = new BauBudBody(this.svg, 100, 100, 100, 100); + this.eyes = new BauBudEyes(this.svg, 100, 100); + } + + generate() { + this.body.generate(); + + const eyeWidth = random(5, 20); + const innerWidth = 8; + + this.svg + .ellipse(16) + .stroke("#000") + .fill("#fff") + .cx(100 - eyeWidth) + .cy(100); + this.svg + .ellipse(16) + .stroke("#000") + .fill("#fff") + .cx(100 + eyeWidth) + .cy(100); + + const choice = random(0, 5, true); + + let leftEyeInnerX = 100 - eyeWidth; + let rightEyeInnerX = 100 + eyeWidth; + + let eyeY = 100; + + switch (choice) { + case 1: + leftEyeInnerX -= 4; + rightEyeInnerX -= 4; + break; + case 2: + leftEyeInnerX += 4; + rightEyeInnerX += 4; + break; + case 3: + eyeY += 4; + break; + case 4: + eyeY -= 4; + break; + + default: + leftEyeInnerX = leftEyeInnerX; + rightEyeInnerX = rightEyeInnerX; + } + + this.svg + .ellipse(innerWidth) + .stroke("#000") + .fill("#000") + .cx(leftEyeInnerX) + .cy(eyeY); + this.svg + .ellipse(innerWidth) + .stroke("#000") + .fill("#000") + .cx(rightEyeInnerX) + .cy(eyeY); + } +} + +for (let i = 0; i < 100; i++) { + const bauBud = new BauBud(document.querySelector(".buds")); + bauBud.generate(); +} + +const buds = document.querySelector(".buds"); + +setInterval(() => { + const y = window.pageYOffset; + const windowHeight = window.innerHeight; + if (y + 200 + windowHeight >= buds.scrollHeight) { + for (let i = 0; i < 100; i++) { + const bauBud = new BauBud(buds); + bauBud.generate(); + } + } +}, 100); diff --git a/baubudsgenerative-bauhaus-inspired-characters/src/style.css b/baubudsgenerative-bauhaus-inspired-characters/src/style.css new file mode 100644 index 0000000..6d79833 --- /dev/null +++ b/baubudsgenerative-bauhaus-inspired-characters/src/style.css @@ -0,0 +1,48 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +:root { + --grid-rows: repeat(2, 1fr); +} + +html { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body { + font-family: Helvetica, system-ui, sans-serif; + color: #000; + padding: 1.5rem; + line-height: 1; +} + +.buds { + display: grid; + grid-template-columns: var(--grid-rows); +} + +svg { + width: 100%; +} + +@media only screen and (min-width: 800px) { + :root { + --grid-rows: repeat(3, 1fr); + } +} + +@media only screen and (min-width: 1280px) { + :root { + --grid-rows: repeat(4, 1fr); + } +} + +@media only screen and (min-width: 1600px) { + :root { + --grid-rows: repeat(5, 1fr); + } +} diff --git a/bbc13-minutes-to-the-moon/README.markdown b/bbc13-minutes-to-the-moon/README.markdown new file mode 100644 index 0000000..6c3d1b3 --- /dev/null +++ b/bbc13-minutes-to-the-moon/README.markdown @@ -0,0 +1,7 @@ +# BBC - 13 Minutes to the Moon + +A Pen created on CodePen.io. Original URL: [https://codepen.io/petebarr/pen/VwLqRYv](https://codepen.io/petebarr/pen/VwLqRYv). + +From the BBC's series: https://www.bbc.co.uk/programmes/w13xttx2 + +I initially tried it with html/css masking/clipping but it was very poor cross browser with the things I needed to do with background-clip: text; So just went all out SVG which is far easier. diff --git a/bbc13-minutes-to-the-moon/dist/index.html b/bbc13-minutes-to-the-moon/dist/index.html new file mode 100644 index 0000000..bd8e785 --- /dev/null +++ b/bbc13-minutes-to-the-moon/dist/index.html @@ -0,0 +1,67 @@ + + + + + CodePen - BBC - 13 Minutes to the Moon + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + 13 + + + MINUTES + + + TO + + + THE + + + MOON + + + + + + + +
+
+
+ + + + + diff --git a/bbc13-minutes-to-the-moon/dist/script.js b/bbc13-minutes-to-the-moon/dist/script.js new file mode 100644 index 0000000..f68a1f2 --- /dev/null +++ b/bbc13-minutes-to-the-moon/dist/script.js @@ -0,0 +1,99 @@ +console.clear(); + +select = e => document.querySelector(e); +selectAll = e => document.querySelectorAll(e); + +const container = select('.container'); +let wArray = [161, 614, 189, 278, 404], + tl; + +function animate() { + tl = gsap.timeline( { + delay: 0.5, + repeat: -1, + defaults: { + ease: "expo.inOut", + duration: 2 + } + }); + + tl.from('.container__base', { + scaleX: 0, + duration: 2, + transformOrigin: "top right", + // ease: "expo" + }) + + .from('.moon__svg-rects rect', { + scaleX: 0, + stagger: 0.07, + duration: 3, + ease: "expo" + }, "-=1.0") + + .to('.moon__txt-bg rect', { + stagger: 0.14, + scaleX: 1 + }, "-=2.5") + + .from('text', { + x: function(i) { + return -wArray[i] + }, + ease: 'power4', + stagger: 0.14 + }, "-=1.6") + + .from('.moon__img', { + x: "+=200", + ease: 'power4', + duration: 15 + }, 0); +} + +function init() { + gsap.set(container, { autoAlpha: 1 }); + + gsap.set('.moon__txt-bg rect', { + width: function(i) { + return wArray[i] + }, + scaleX: 0 + }) + + animate(); + + container.onclick = () => { + tl.restart(); + } + +} + +function resize() { + let vw = window.innerWidth; + let vh = window.innerHeight; + let wh = container.offsetWidth; + let scaleFactor = 1; + + if(vw/vh >= 1) { + scaleFactor = vh/wh + } + else { + scaleFactor = vw/wh + } + + if(scaleFactor<1) { + gsap.set(container, { scale: scaleFactor }); + } + else { + gsap.set(container, { scale: 1 }); + } +} + +window.onresize = resize; + +window.onload = () => { + init(); + resize(); + // GSDevTools.create(); +}; \ No newline at end of file diff --git a/bbc13-minutes-to-the-moon/dist/style.css b/bbc13-minutes-to-the-moon/dist/style.css new file mode 100644 index 0000000..b70f259 --- /dev/null +++ b/bbc13-minutes-to-the-moon/dist/style.css @@ -0,0 +1,83 @@ +@font-face { + font-family: "MonumentExtended-Ultrabold"; + src: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/61488/MonumentExtended-Ultrabold.woff") format("woff"), url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/61488/MonumentExtended-Ultrabold.woff2") format("woff2"); + font-weight: normal; + font-style: normal; + font-display: block; +} +html { + box-sizing: border-box; +} + +*, *:before, *:after { + box-sizing: inherit; +} + +html, body { + width: 100%; + height: 100%; +} + +body { + display: -webkit-box; + display: flex; + -webkit-box-align: center; + align-items: center; + -webkit-box-pack: center; + justify-content: center; + background-color: black; + color: white; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + overflow: hidden; +} + +.container { + position: relative; + display: -webkit-box; + display: flex; + -webkit-box-align: center; + align-items: center; + -webkit-box-pack: center; + justify-content: center; + position: relative; + max-width: 679px; + max-height: 679px; + min-width: 679px; + min-height: 679px; + background: black; + cursor: pointer; + visibility: hidden; +} + +.container__base { + position: absolute; + z-index: 0; + width: 100%; + height: 100%; + background: #D5CEC6; +} + +.moon { + position: relative; + z-index: 2; + width: 611px; + height: 611px; +} + +.moon__svg { + width: 611px; + height: 611px; +} + +.moon__txt { + font-family: "MonumentExtended-Ultrabold", sans-serif; + font-size: 103px; + line-height: 1; + fill: black; + letter-spacing: 2.1px; +} + +.moon__txt-overlay { + fill: rgba(0, 0, 0, 0.6); +} \ No newline at end of file diff --git a/bbc13-minutes-to-the-moon/license.txt b/bbc13-minutes-to-the-moon/license.txt new file mode 100644 index 0000000..36e8464 --- /dev/null +++ b/bbc13-minutes-to-the-moon/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Pete Barr (https://codepen.io/petebarr/pen/VwLqRYv) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/bbc13-minutes-to-the-moon/src/index.html b/bbc13-minutes-to-the-moon/src/index.html new file mode 100644 index 0000000..7f63a16 --- /dev/null +++ b/bbc13-minutes-to-the-moon/src/index.html @@ -0,0 +1,51 @@ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + 13 + + + MINUTES + + + TO + + + THE + + + MOON + + + + + + + +
+
+
\ No newline at end of file diff --git a/bbc13-minutes-to-the-moon/src/script.js b/bbc13-minutes-to-the-moon/src/script.js new file mode 100644 index 0000000..f68a1f2 --- /dev/null +++ b/bbc13-minutes-to-the-moon/src/script.js @@ -0,0 +1,99 @@ +console.clear(); + +select = e => document.querySelector(e); +selectAll = e => document.querySelectorAll(e); + +const container = select('.container'); +let wArray = [161, 614, 189, 278, 404], + tl; + +function animate() { + tl = gsap.timeline( { + delay: 0.5, + repeat: -1, + defaults: { + ease: "expo.inOut", + duration: 2 + } + }); + + tl.from('.container__base', { + scaleX: 0, + duration: 2, + transformOrigin: "top right", + // ease: "expo" + }) + + .from('.moon__svg-rects rect', { + scaleX: 0, + stagger: 0.07, + duration: 3, + ease: "expo" + }, "-=1.0") + + .to('.moon__txt-bg rect', { + stagger: 0.14, + scaleX: 1 + }, "-=2.5") + + .from('text', { + x: function(i) { + return -wArray[i] + }, + ease: 'power4', + stagger: 0.14 + }, "-=1.6") + + .from('.moon__img', { + x: "+=200", + ease: 'power4', + duration: 15 + }, 0); +} + +function init() { + gsap.set(container, { autoAlpha: 1 }); + + gsap.set('.moon__txt-bg rect', { + width: function(i) { + return wArray[i] + }, + scaleX: 0 + }) + + animate(); + + container.onclick = () => { + tl.restart(); + } + +} + +function resize() { + let vw = window.innerWidth; + let vh = window.innerHeight; + let wh = container.offsetWidth; + let scaleFactor = 1; + + if(vw/vh >= 1) { + scaleFactor = vh/wh + } + else { + scaleFactor = vw/wh + } + + if(scaleFactor<1) { + gsap.set(container, { scale: scaleFactor }); + } + else { + gsap.set(container, { scale: 1 }); + } +} + +window.onresize = resize; + +window.onload = () => { + init(); + resize(); + // GSDevTools.create(); +}; \ No newline at end of file diff --git a/bbc13-minutes-to-the-moon/src/style.scss b/bbc13-minutes-to-the-moon/src/style.scss new file mode 100644 index 0000000..19593ea --- /dev/null +++ b/bbc13-minutes-to-the-moon/src/style.scss @@ -0,0 +1,80 @@ +@font-face { + font-family: "MonumentExtended-Ultrabold"; + src: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/61488/MonumentExtended-Ultrabold.woff") format("woff"), + url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/61488/MonumentExtended-Ultrabold.woff2") format("woff2"); + font-weight: normal; + font-style: normal; + font-display: block; +} + +html { + box-sizing: border-box; +} + +*, *:before, *:after { + box-sizing: inherit; +} + +html, body { + width: 100%; + height: 100%; +} + +body { + display: flex; + align-items: center; + justify-content: center; + background-color: black; + color: white; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + overflow: hidden; +} + +.container { + position: relative; + display: flex; + align-items: center; + justify-content: center; + position: relative; + max-width: 679px; + max-height: 679px; + min-width: 679px; + min-height: 679px; + background: black; + cursor: pointer; + visibility: hidden; +} + +.container__base { + position: absolute; + z-index: 0; + width: 100%; + height: 100%; + background: #D5CEC6; +} + +.moon { + position: relative; + z-index: 2; + width: 611px; + height: 611px; +} + +.moon__svg { + width: 611px; + height: 611px; +} + +.moon__txt { + font-family: "MonumentExtended-Ultrabold", sans-serif; + font-size: 103px; + line-height: 1; + fill: black; + letter-spacing: 2.1px; +} + +.moon__txt-overlay { + fill: rgba(0, 0, 0, 0.6); +} + diff --git a/beating-heart/README.markdown b/beating-heart/README.markdown new file mode 100644 index 0000000..47d2960 --- /dev/null +++ b/beating-heart/README.markdown @@ -0,0 +1,5 @@ +# Beating heart โค + +A Pen created on CodePen.io. Original URL: [https://codepen.io/Mamboleoo/pen/YzQzQgo](https://codepen.io/Mamboleoo/pen/YzQzQgo). + + diff --git a/beating-heart/dist/index.html b/beating-heart/dist/index.html new file mode 100644 index 0000000..0604a7a --- /dev/null +++ b/beating-heart/dist/index.html @@ -0,0 +1,21 @@ + + + + + CodePen - Beating heart โค + + + + + + + + + + + + + + + + diff --git a/beating-heart/dist/script.js b/beating-heart/dist/script.js new file mode 100644 index 0000000..0c31b7e --- /dev/null +++ b/beating-heart/dist/script.js @@ -0,0 +1,130 @@ +console.clear(); + +const scene = new THREE.Scene(); +const camera = new THREE.PerspectiveCamera( + 75, + window.innerWidth / window.innerHeight, + 0.1, + 1000 +); + +const renderer = new THREE.WebGLRenderer({ + antialias: true +}); +renderer.setClearColor(0xff5555); +renderer.setSize(window.innerWidth, window.innerHeight); +document.body.appendChild(renderer.domElement); + +camera.position.z = 1; + +const controls = new THREE.TrackballControls(camera, renderer.domElement); +controls.noPan = true; +controls.maxDistance = 3; +controls.minDistance = 0.7; + +const group = new THREE.Group(); +scene.add(group); + +let heart = null; +let sampler = null; +let originHeart = null; +new THREE.OBJLoader().load('https://assets.codepen.io/127738/heart_2.obj',obj => { + heart = obj.children[0]; + heart.geometry.rotateX(-Math.PI * 0.5); + heart.geometry.scale(0.04, 0.04, 0.04); + heart.geometry.translate(0, -0.4, 0); + group.add(heart); + + heart.material = new THREE.MeshBasicMaterial({ + color: 0xff5555 + }); + originHeart = Array.from(heart.geometry.attributes.position.array); + sampler = new THREE.MeshSurfaceSampler(heart).build(); + init(); + renderer.setAnimationLoop(render); +}); + +let positions = []; +const geometry = new THREE.BufferGeometry(); +const material = new THREE.LineBasicMaterial({ + color: 0xffffff +}); +const lines = new THREE.LineSegments(geometry, material); +group.add(lines); + +const simplex = new SimplexNoise(); +const pos = new THREE.Vector3(); +class Grass { + constructor () { + sampler.sample(pos); + this.pos = pos.clone(); + this.scale = Math.random() * 0.01 + 0.001; + this.one = null; + this.two = null; + } + update (a) { + const noise = simplex.noise4D(this.pos.x*1.5, this.pos.y*1.5, this.pos.z*1.5, a * 0.0005) + 1; + this.one = this.pos.clone().multiplyScalar(1.01 + (noise * 0.15 * beat.a)); + this.two = this.one.clone().add(this.one.clone().setLength(this.scale)); + } +} + +let spikes = []; +function init (a) { + positions = []; + for (let i = 0; i < 20000; i++) { + const g = new Grass(); + spikes.push(g); + } +} + +const beat = { a: 0 }; +gsap.timeline({ + repeat: -1, + repeatDelay: 0.3 +}).to(beat, { + a: 1.2, + duration: 0.6, + ease: 'power2.in' +}).to(beat, { + a: 0.0, + duration: 0.6, + ease: 'power3.out' +}); +gsap.to(group.rotation, { + y: Math.PI * 2, + duration: 12, + ease: 'none', + repeat: -1 +}); + +function render(a) { + positions = []; + spikes.forEach(g => { + g.update(a); + positions.push(g.one.x, g.one.y, g.one.z); + positions.push(g.two.x, g.two.y, g.two.z); + }); + geometry.setAttribute('position', new THREE.BufferAttribute(new Float32Array(positions), 3)); + + const vs = heart.geometry.attributes.position.array; + for (let i = 0; i < vs.length; i+=3) { + const v = new THREE.Vector3(originHeart[i], originHeart[i+1], originHeart[i+2]); + const noise = simplex.noise4D(originHeart[i]*1.5, originHeart[i+1]*1.5, originHeart[i+2]*1.5, a * 0.0005) + 1; + v.multiplyScalar(1 + (noise * 0.15 * beat.a)); + vs[i] = v.x; + vs[i+1] = v.y; + vs[i+2] = v.z; + } + heart.geometry.attributes.position.needsUpdate = true; + + controls.update(); + renderer.render(scene, camera); +} + +window.addEventListener("resize", onWindowResize, false); +function onWindowResize() { + camera.aspect = window.innerWidth / window.innerHeight; + camera.updateProjectionMatrix(); + renderer.setSize(window.innerWidth, window.innerHeight); +} \ No newline at end of file diff --git a/beating-heart/dist/style.css b/beating-heart/dist/style.css new file mode 100644 index 0000000..e099e7a --- /dev/null +++ b/beating-heart/dist/style.css @@ -0,0 +1,5 @@ +body { + background: #000; + overflow: hidden; + margin: 0; +} \ No newline at end of file diff --git a/beating-heart/license.txt b/beating-heart/license.txt new file mode 100644 index 0000000..7d1f7ce --- /dev/null +++ b/beating-heart/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Louis Hoebregts (https://codepen.io/Mamboleoo/pen/YzQzQgo) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/beating-heart/src/index.html b/beating-heart/src/index.html new file mode 100644 index 0000000..e69de29 diff --git a/beating-heart/src/script.js b/beating-heart/src/script.js new file mode 100644 index 0000000..9c81666 --- /dev/null +++ b/beating-heart/src/script.js @@ -0,0 +1,130 @@ +console.clear(); + +const scene = new THREE.Scene(); +const camera = new THREE.PerspectiveCamera( + 75, + window.innerWidth / window.innerHeight, + 0.1, + 1000 +); + +const renderer = new THREE.WebGLRenderer({ + antialias: true +}); +renderer.setClearColor(0xff5555); +renderer.setSize(window.innerWidth, window.innerHeight); +document.body.appendChild(renderer.domElement); + +camera.position.z = 1; + +const controls = new THREE.TrackballControls(camera, renderer.domElement); +controls.noPan = true; +controls.maxDistance = 3; +controls.minDistance = 0.7; + +const group = new THREE.Group(); +scene.add(group); + +let heart = null; +let sampler = null; +let originHeart = null; +new THREE.OBJLoader().load('https://assets.codepen.io/127738/heart_2.obj',obj => { + heart = obj.children[0]; + heart.geometry.rotateX(-Math.PI * 0.5); + heart.geometry.scale(0.04, 0.04, 0.04); + heart.geometry.translate(0, -0.4, 0); + group.add(heart); + + heart.material = new THREE.MeshBasicMaterial({ + color: 0xff5555 + }); + originHeart = Array.from(heart.geometry.attributes.position.array); + sampler = new THREE.MeshSurfaceSampler(heart).build(); + init(); + renderer.setAnimationLoop(render); +}); + +let positions = []; +const geometry = new THREE.BufferGeometry(); +const material = new THREE.LineBasicMaterial({ + color: 0xffffff +}); +const lines = new THREE.LineSegments(geometry, material); +group.add(lines); + +const simplex = new SimplexNoise(); +const pos = new THREE.Vector3(); +class Grass { + constructor () { + sampler.sample(pos); + this.pos = pos.clone(); + this.scale = Math.random() * 0.01 + 0.001; + this.one = null; + this.two = null; + } + update (a) { + const noise = simplex.noise4D(this.pos.x*1.5, this.pos.y*1.5, this.pos.z*1.5, a * 0.0005) + 1; + this.one = this.pos.clone().multiplyScalar(1.01 + (noise * 0.15 * beat.a)); + this.two = this.one.clone().add(this.one.clone().setLength(this.scale)); + } +} + +let spikes = []; +function init (a) { + positions = []; + for (let i = 0; i < 20000; i++) { + const g = new Grass(); + spikes.push(g); + } +} + +const beat = { a: 0 }; +gsap.timeline({ + repeat: -1, + repeatDelay: 0.3 +}).to(beat, { + a: 1.2, + duration: 0.6, + ease: 'power2.in' +}).to(beat, { + a: 0.0, + duration: 0.6, + ease: 'power3.out' +}); +gsap.to(group.rotation, { + y: Math.PI * 2, + duration: 12, + ease: 'none', + repeat: -1 +}); + +function render(a) { + positions = []; + spikes.forEach(g => { + g.update(a); + positions.push(g.one.x, g.one.y, g.one.z); + positions.push(g.two.x, g.two.y, g.two.z); + }); + geometry.setAttribute('position', new THREE.BufferAttribute(new Float32Array(positions), 3)); + + const vs = heart.geometry.attributes.position.array; + for (let i = 0; i < vs.length; i+=3) { + const v = new THREE.Vector3(originHeart[i], originHeart[i+1], originHeart[i+2]); + const noise = simplex.noise4D(originHeart[i]*1.5, originHeart[i+1]*1.5, originHeart[i+2]*1.5, a * 0.0005) + 1; + v.multiplyScalar(1 + (noise * 0.15 * beat.a)); + vs[i] = v.x; + vs[i+1] = v.y; + vs[i+2] = v.z; + } + heart.geometry.attributes.position.needsUpdate = true; + + controls.update(); + renderer.render(scene, camera); +} + +window.addEventListener("resize", onWindowResize, false); +function onWindowResize() { + camera.aspect = window.innerWidth / window.innerHeight; + camera.updateProjectionMatrix(); + renderer.setSize(window.innerWidth, window.innerHeight); +} diff --git a/beating-heart/src/style.scss b/beating-heart/src/style.scss new file mode 100644 index 0000000..e099e7a --- /dev/null +++ b/beating-heart/src/style.scss @@ -0,0 +1,5 @@ +body { + background: #000; + overflow: hidden; + margin: 0; +} \ No newline at end of file diff --git a/best-css-3d-cuboid-ever/README.markdown b/best-css-3d-cuboid-ever/README.markdown new file mode 100644 index 0000000..532e39b --- /dev/null +++ b/best-css-3d-cuboid-ever/README.markdown @@ -0,0 +1,15 @@ +# Best CSS 3D Cuboid Ever! + +A Pen created on CodePen.io. Original URL: [https://codepen.io/ShadowShahriar/pen/rNGJNwy](https://codepen.io/ShadowShahriar/pen/rNGJNwy). + +How many `
`s do we need to make a cube? ๐Ÿค” + +Seven? Six? Probably three? + +NO. + +Two `
`s are enough not only to make a cube but also to make a flexible cuboid. + +Here is a demo pen showing how we can do that ๐Ÿ˜„ + +> Some of you probably noticed the flow direction of base gradients is from **left to right**. Similarly, the flow direction of side gradients is from **bottom to top**. diff --git a/best-css-3d-cuboid-ever/dist/index.html b/best-css-3d-cuboid-ever/dist/index.html new file mode 100644 index 0000000..be259a6 --- /dev/null +++ b/best-css-3d-cuboid-ever/dist/index.html @@ -0,0 +1,24 @@ + + + + + CodePen - Best CSS 3D Cuboid Ever! + + + + + + +
+
+
+
+
+
+
+ + + + + + diff --git a/best-css-3d-cuboid-ever/dist/script.js b/best-css-3d-cuboid-ever/dist/script.js new file mode 100644 index 0000000..8b74b9b --- /dev/null +++ b/best-css-3d-cuboid-ever/dist/script.js @@ -0,0 +1,11 @@ +window.addEventListener("load", () => { + new Camera() + .setOptimalPerspective() + .with({ + debug: true, + rotate: { + speed: 1.2 + } + }) + .init(); +}); \ No newline at end of file diff --git a/best-css-3d-cuboid-ever/dist/style.css b/best-css-3d-cuboid-ever/dist/style.css new file mode 100644 index 0000000..444d5d8 --- /dev/null +++ b/best-css-3d-cuboid-ever/dist/style.css @@ -0,0 +1,228 @@ +:root { + --unit: 1vmin; + --zoom: 100; + --available-screen-min: 665; + --px: calc(var(--zoom) * (var(--unit) / var(--available-screen-min))); + --auto-rotate-duration: 10s; + --auto-rotate-timing-func: ease; + --auto-rotate-direction: forwards; + --fallback-fonts: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, + Arial, Ubuntu, sans-serif, "Apple Color Emoji", "Twemoji Mozilla", + "Segoe UI Emoji", "Segoe UI Symbol"; +} + +*, +*::before, +*::after { + padding: 0; + margin: 0; + box-sizing: border-box; + -webkit-text-size-adjust: none; + -moz-text-size-adjust: none; + text-size-adjust: none; +} + +*::before, +*::after { + display: block; +} + +body { + touch-action: none; +} + +html { + cursor: -webkit-grab; + cursor: grab; +} + +html:active { + cursor: -webkit-grabbing; + cursor: grabbing; +} + +html, +body { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + scrollbar-width: thin; + font-size: 0; + overflow: hidden; + /* to make touch gestures work correctly */ +} + +html::before { + content: ""; + position: fixed; + left: 0; + top: 0; + width: 100vw; + height: 100vh; + background-image: radial-gradient(circle at 50% 50%, #fff, #f8f8f8); + background-size: 100vw 100vh; + background-repeat: no-repeat; +} + +[data-camera] { + --scene-size: 500; + --scale: 100; + --perspective: 1200; + --cameraZ: 0; + --cameraY: 0; + --translateX: 0; + --translateY: 0; + --translateZ: 0; +} + +[data-camera] { + position: absolute; + left: 0; + top: 0; + width: 100vw; + height: 100vh; + --fmt-s: calc(var(--scale, 100) / 100); + transform: scale(var(--fmt-s)); + display: grid; + place-items: center; + overflow: visible; + transition: transform ease 500ms; + will-change: transform; +} + +[data-scene] { + position: relative; + left: 0; + top: 0; + width: calc(var(--scene-size) * var(--px)); + height: calc(var(--scene-size) * var(--px)); + background-color: rgba(0, 0, 0, 0.1); + transform: perspective(calc(var(--perspective, 1000) * 1px)) rotateX(calc(var(--cameraY, 0) * 1deg)) rotateZ(calc(var(--cameraZ, 0) * 1deg)) translate3d(calc(var(--translateX, 0) * var(--px)), calc(var(--translateY, 0) * var(--px) * -1), calc(var(--translateZ, 0) * var(--px) * -1)); + --max-rotation: calc((360 + var(--cameraZ)) * 1deg); + transform-origin: 50% 50%; +} + +[data-camera][data-dragging] { + transition: none; +} + +@-webkit-keyframes rotateCamera { + to { + transform: perspective(calc(var(--perspective, 1000) * 1px)) rotateX(calc(var(--cameraY, 0) * 1deg)) rotateZ(var(--max-rotation)) translate3d(calc(var(--translateX, 0) * var(--px)), calc(var(--translateY, 0) * var(--px) * -1), calc(var(--translateZ, 0) * var(--px) * -1)); + } +} + +@keyframes rotateCamera { + to { + transform: perspective(calc(var(--perspective, 1000) * 1px)) rotateX(calc(var(--cameraY, 0) * 1deg)) rotateZ(var(--max-rotation)) translate3d(calc(var(--translateX, 0) * var(--px)), calc(var(--translateY, 0) * var(--px) * -1), calc(var(--translateZ, 0) * var(--px) * -1)); + } +} +[data-scene], +[data-camera], +[data-3d] { + transform-style: preserve-3d; +} + +[data-hidden], +.class-hidden { + display: none; +} + +.test .cuboid { + --base-width: 256; + --side-width: 256; + --height: 172; + --color-base: #f52d2d; + --color-side: #f52d2d; + --color-shade: rgba(0, 0, 0, 0.1); + --edge-fix: 0 0 0 1px rgba(0, 0, 0, 0.01); + --base-flw-dir: linear-gradient(to right, skyblue, purple); + --side-flw-dir: linear-gradient(to right, skyblue, purple); + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); +} + +.test .cuboid { + width: calc(var(--base-width) * var(--px)); + height: calc(var(--side-width) * var(--px)); + background-image: var(--base-flw-dir); + background-color: var(--color-base); +} +.test .cuboid::before, .test .cuboid::after { + top: 0; + width: calc(var(--height) * var(--px)); + height: 100%; + background-image: linear-gradient(var(--color-shade) 0 0), var(--side-flw-dir); + background-color: var(--color-side); + transform: rotateY(-90deg); + transform-origin: top left; +} +.test .cuboid::before { + left: 0; +} +.test .cuboid::after { + left: 100%; +} +.test .cuboid div { + position: absolute; + left: 0; + top: 0; + width: inherit; + height: inherit; + background-image: inherit; + background-color: inherit; + transform: translateZ(calc(var(--height) * var(--px))); + transform-style: inherit; +} +.test .cuboid div::before, .test .cuboid div::after { + right: 100%; + background-image: linear-gradient(var(--color-shade) 0 0), linear-gradient(var(--color-shade) 0 0), var(--side-flw-dir); + background-color: var(--color-side); + width: calc(var(--height) * var(--px)); + height: calc(var(--base-width) * var(--px)); + transform: rotateX(90deg) rotateZ(90deg); + transform-origin: bottom right; +} +.test .cuboid div::before { + bottom: 100%; +} +.test .cuboid div::after { + bottom: 0; +} +.test .cuboid::before, .test .cuboid::after, .test .cuboid div::before, .test .cuboid div::after { + content: ""; + position: absolute; + display: block; + box-shadow: var(--edge-fix); + box-sizing: border-box; +} +.test .cuboid, .test .cuboid div { + box-shadow: var(--edge-fix); + box-sizing: border-box; +} + +.test [data-camera] { + --cameraY: 62; + --cameraZ: 140; + --translateZ: 30; +} +.test input, +.test label { + position: relative; + cursor: pointer; + z-index: 10; + margin: 14px 10px; +} +.test input:not(:checked) ~ [data-camera] .cuboid { + --base-flw-dir: none; + --side-flw-dir: none; +} +.test label { + font-size: 16px; + font-family: var(--fallback-fonts); + margin-left: 0; +} \ No newline at end of file diff --git a/best-css-3d-cuboid-ever/dist/vyegypg.css b/best-css-3d-cuboid-ever/dist/vyegypg.css new file mode 100644 index 0000000..46b051b --- /dev/null +++ b/best-css-3d-cuboid-ever/dist/vyegypg.css @@ -0,0 +1,146 @@ +// =================== +// === starter.css === +// =================== + +:root { + --unit: 1vmin; + --zoom: 100; + --available-screen-min: 665; + --px: calc(var(--zoom) * (var(--unit) / var(--available-screen-min))); + + --auto-rotate-duration: 10s; + --auto-rotate-timing-func: ease; + --auto-rotate-direction: forwards; + + --fallback-fonts: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, + Arial, Ubuntu, sans-serif, "Apple Color Emoji", "Twemoji Mozilla", + "Segoe UI Emoji", "Segoe UI Symbol"; +} + +*, +*::before, +*::after { + padding: 0; + margin: 0; + box-sizing: border-box; + -webkit-text-size-adjust: none; + text-size-adjust: none; +} + +*::before, +*::after { + display: block; +} + +body { + touch-action: none; +} + +html { + cursor: grab; +} + +html:active { + cursor: grabbing; +} + +html, +body { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + scrollbar-width: thin; + font-size: 0; + overflow: hidden; /* to make touch gestures work correctly */ +} + +html::before { + content: ""; + position: fixed; + left: 0; + top: 0; + width: 100vw; + height: 100vh; + background-image: radial-gradient(circle at 50% 50%, #fff, #f8f8f8); + background-size: 100vw 100vh; + background-repeat: no-repeat; +} + +// ============== +// === 3D.css === +// ============== + +[data-camera] { + --scene-size: 500; + --scale: 100; + --perspective: 1200; + --cameraZ: 0; + --cameraY: 0; + --translateX: 0; + --translateY: 0; + --translateZ: 0; +} + +[data-camera] { + position: absolute; + left: 0; + top: 0; + width: 100vw; + height: 100vh; + --fmt-s: calc(var(--scale, 100) / 100); + transform: scale(var(--fmt-s)); + display: grid; + place-items: center; + overflow: visible; + + transition: transform ease 500ms; + will-change: transform; +} + +[data-scene] { + position: relative; + left: 0; + top: 0; + width: calc(var(--scene-size) * var(--px)); + height: calc(var(--scene-size) * var(--px)); + background-color: rgba(0, 0, 0, 0.1); + transform: perspective(calc(var(--perspective, 1000) * 1px)) + rotateX(calc(var(--cameraY, 0) * 1deg)) + rotateZ(calc(var(--cameraZ, 0) * 1deg)) + translate3d( + calc(var(--translateX, 0) * var(--px)), + calc(var(--translateY, 0) * var(--px) * -1), + calc(var(--translateZ, 0) * var(--px) * -1) + ); + --max-rotation: calc((360 + var(--cameraZ)) * 1deg); + transform-origin: 50% 50%; +} + +[data-camera][data-dragging] { + transition: none; +} + +@keyframes rotateCamera { + to { + transform: perspective(calc(var(--perspective, 1000) * 1px)) + rotateX(calc(var(--cameraY, 0) * 1deg)) rotateZ(var(--max-rotation)) + translate3d( + calc(var(--translateX, 0) * var(--px)), + calc(var(--translateY, 0) * var(--px) * -1), + calc(var(--translateZ, 0) * var(--px) * -1) + ); + } +} + +[data-scene], +[data-camera], +[data-3d] { + transform-style: preserve-3d; +} + +[data-hidden], +.class-hidden { + display: none; +} diff --git a/best-css-3d-cuboid-ever/license.txt b/best-css-3d-cuboid-ever/license.txt new file mode 100644 index 0000000..c0e8cf3 --- /dev/null +++ b/best-css-3d-cuboid-ever/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2022 by S. Shahriar (https://codepen.io/ShadowShahriar/pen/rNGJNwy) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/best-css-3d-cuboid-ever/src/index.pug b/best-css-3d-cuboid-ever/src/index.pug new file mode 100644 index 0000000..0ca8e64 --- /dev/null +++ b/best-css-3d-cuboid-ever/src/index.pug @@ -0,0 +1,7 @@ +input#flow_dir(type="checkbox", checked, data-isolated) +section(data-camera) + section(data-scene) + .cuboid(data-3d) + div +label(for="flow_dir", data-isolated) + | Show Flow Direction diff --git a/best-css-3d-cuboid-ever/src/script.js b/best-css-3d-cuboid-ever/src/script.js new file mode 100644 index 0000000..07219fe --- /dev/null +++ b/best-css-3d-cuboid-ever/src/script.js @@ -0,0 +1,11 @@ +window.addEventListener("load", () => { + new Camera() + .setOptimalPerspective() + .with({ + debug: true, + rotate: { + speed: 1.2 + } + }) + .init(); +}); diff --git a/best-css-3d-cuboid-ever/src/style.scss b/best-css-3d-cuboid-ever/src/style.scss new file mode 100644 index 0000000..862c1d5 --- /dev/null +++ b/best-css-3d-cuboid-ever/src/style.scss @@ -0,0 +1,131 @@ +// * 29 December 2021 +// * CSS 3D Cubiod (a highly customizable cubiod module) +// * โœ” less markup, โœ” responsive, โœ” extendable + +.test .cuboid { + --base-width: 256; + --side-width: 256; + --height: 172; + + --color-base: #f52d2d; + --color-side: #f52d2d; + --color-shade: rgba(0, 0, 0, 0.1); + --edge-fix: 0 0 0 1px rgba(0, 0, 0, 0.01); + + // --base-flw-dir: radial-gradient(circle at center, skyblue, purple 85%); + --base-flw-dir: linear-gradient(to right, skyblue, purple); + --side-flw-dir: linear-gradient(to right, skyblue, purple); + + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); +} + +@mixin cubiod { + width: calc(var(--base-width) * var(--px)); + height: calc(var(--side-width) * var(--px)); + background-image: var(--base-flw-dir); + background-color: var(--color-base); + + &::before, + &::after { + top: 0; + width: calc(var(--height) * var(--px)); + height: 100%; + background-image: linear-gradient(var(--color-shade) 0 0), var(--side-flw-dir); + background-color: var(--color-side); + transform: rotateY(-90deg); + transform-origin: top left; + } + + &::before { + left: 0; + } + + &::after { + left: 100%; + } + + & div { + position: absolute; + left: 0; + top: 0; + + width: inherit; + height: inherit; + background-image: inherit; + background-color: inherit; + + transform: translateZ(calc(var(--height) * var(--px))); + transform-style: inherit; + + &::before, + &::after { + right: 100%; + background-image: linear-gradient(var(--color-shade) 0 0), + linear-gradient(var(--color-shade) 0 0), var(--side-flw-dir); + background-color: var(--color-side); + width: calc(var(--height) * var(--px)); + height: calc(var(--base-width) * var(--px)); + transform: rotateX(90deg) rotateZ(90deg); + transform-origin: bottom right; + } + + &::before { + bottom: 100%; + } + + &::after { + bottom: 0; + } + } + + &::before, + &::after, + & div::before, + & div::after { + content: ""; + position: absolute; + display: block; + box-shadow: var(--edge-fix); + box-sizing: border-box; + } + + &, + & div { + box-shadow: var(--edge-fix); + box-sizing: border-box; + } +} + +.test .cuboid { + @include cubiod; +} + +.test { + [data-camera] { + --cameraY: 62; + --cameraZ: 140; // -36 + --translateZ: 30; + } + + input, + label { + position: relative; + cursor: pointer; + z-index: 10; + margin: 14px 10px; + } + + input:not(:checked) ~ [data-camera] .cuboid { + --base-flw-dir: none; + --side-flw-dir: none; + } + + label { + font-size: 16px; + font-family: var(--fallback-fonts); + margin-left: 0; + } +} diff --git a/best-css-3d-cuboid-ever/src/vyegypg.css b/best-css-3d-cuboid-ever/src/vyegypg.css new file mode 100644 index 0000000..46b051b --- /dev/null +++ b/best-css-3d-cuboid-ever/src/vyegypg.css @@ -0,0 +1,146 @@ +// =================== +// === starter.css === +// =================== + +:root { + --unit: 1vmin; + --zoom: 100; + --available-screen-min: 665; + --px: calc(var(--zoom) * (var(--unit) / var(--available-screen-min))); + + --auto-rotate-duration: 10s; + --auto-rotate-timing-func: ease; + --auto-rotate-direction: forwards; + + --fallback-fonts: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, + Arial, Ubuntu, sans-serif, "Apple Color Emoji", "Twemoji Mozilla", + "Segoe UI Emoji", "Segoe UI Symbol"; +} + +*, +*::before, +*::after { + padding: 0; + margin: 0; + box-sizing: border-box; + -webkit-text-size-adjust: none; + text-size-adjust: none; +} + +*::before, +*::after { + display: block; +} + +body { + touch-action: none; +} + +html { + cursor: grab; +} + +html:active { + cursor: grabbing; +} + +html, +body { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + scrollbar-width: thin; + font-size: 0; + overflow: hidden; /* to make touch gestures work correctly */ +} + +html::before { + content: ""; + position: fixed; + left: 0; + top: 0; + width: 100vw; + height: 100vh; + background-image: radial-gradient(circle at 50% 50%, #fff, #f8f8f8); + background-size: 100vw 100vh; + background-repeat: no-repeat; +} + +// ============== +// === 3D.css === +// ============== + +[data-camera] { + --scene-size: 500; + --scale: 100; + --perspective: 1200; + --cameraZ: 0; + --cameraY: 0; + --translateX: 0; + --translateY: 0; + --translateZ: 0; +} + +[data-camera] { + position: absolute; + left: 0; + top: 0; + width: 100vw; + height: 100vh; + --fmt-s: calc(var(--scale, 100) / 100); + transform: scale(var(--fmt-s)); + display: grid; + place-items: center; + overflow: visible; + + transition: transform ease 500ms; + will-change: transform; +} + +[data-scene] { + position: relative; + left: 0; + top: 0; + width: calc(var(--scene-size) * var(--px)); + height: calc(var(--scene-size) * var(--px)); + background-color: rgba(0, 0, 0, 0.1); + transform: perspective(calc(var(--perspective, 1000) * 1px)) + rotateX(calc(var(--cameraY, 0) * 1deg)) + rotateZ(calc(var(--cameraZ, 0) * 1deg)) + translate3d( + calc(var(--translateX, 0) * var(--px)), + calc(var(--translateY, 0) * var(--px) * -1), + calc(var(--translateZ, 0) * var(--px) * -1) + ); + --max-rotation: calc((360 + var(--cameraZ)) * 1deg); + transform-origin: 50% 50%; +} + +[data-camera][data-dragging] { + transition: none; +} + +@keyframes rotateCamera { + to { + transform: perspective(calc(var(--perspective, 1000) * 1px)) + rotateX(calc(var(--cameraY, 0) * 1deg)) rotateZ(var(--max-rotation)) + translate3d( + calc(var(--translateX, 0) * var(--px)), + calc(var(--translateY, 0) * var(--px) * -1), + calc(var(--translateZ, 0) * var(--px) * -1) + ); + } +} + +[data-scene], +[data-camera], +[data-3d] { + transform-style: preserve-3d; +} + +[data-hidden], +.class-hidden { + display: none; +} diff --git a/big-collection-houdini-animated-1-element-spinners/README.markdown b/big-collection-houdini-animated-1-element-spinners/README.markdown new file mode 100644 index 0000000..1328e2f --- /dev/null +++ b/big-collection-houdini-animated-1-element-spinners/README.markdown @@ -0,0 +1,5 @@ +# Big collection: Houdini-animated 1 element spinners + +A Pen created on CodePen.io. Original URL: [https://codepen.io/thebabydino/pen/WNrbGBz](https://codepen.io/thebabydino/pen/WNrbGBz). + +Houdini support is needed for the animations to work. This means this demo is currently limited to Chromium browsers. diff --git a/big-collection-houdini-animated-1-element-spinners/dist/index.html b/big-collection-houdini-animated-1-element-spinners/dist/index.html new file mode 100644 index 0000000..7d7ddb9 --- /dev/null +++ b/big-collection-houdini-animated-1-element-spinners/dist/index.html @@ -0,0 +1,91 @@ + + + + + CodePen - Big collection: Houdini-animated 1 element spinners + + + + + +
+

Houdini-animated 1 element spinners

+

Note that they're only animated in supporting browsers - that's just Chromium browsers for now.
They're all different, no two of them identical - can you spot the differences between similar ones?
Can you figure out how they were made before checking the code?

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + diff --git a/big-collection-houdini-animated-1-element-spinners/dist/script.js b/big-collection-houdini-animated-1-element-spinners/dist/script.js new file mode 100644 index 0000000..0356d3e --- /dev/null +++ b/big-collection-houdini-animated-1-element-spinners/dist/script.js @@ -0,0 +1,23 @@ +/* this is all the JS, only registering custom properties here so they can be animated in CSS and nothing else */ +CSS.registerProperty({ + name: '--hue', + syntax: '', + initialValue: '0deg', + inherits: true }); + + +CSS.registerProperty({ + name: '--a', + syntax: '', + initialValue: '0deg', + inherits: true }); + + +for (let i = 0; i < 12; i++) { + CSS.registerProperty({ + name: `--alpha${i}`, + syntax: '', + initialValue: 0, + inherits: true }); + +} \ No newline at end of file diff --git a/big-collection-houdini-animated-1-element-spinners/dist/style.css b/big-collection-houdini-animated-1-element-spinners/dist/style.css new file mode 100644 index 0000000..195d563 --- /dev/null +++ b/big-collection-houdini-animated-1-element-spinners/dist/style.css @@ -0,0 +1,1132 @@ +body { + box-sizing: border-box; + display: grid; + grid-gap: 2em; + grid-template-columns: repeat(auto-fill, 5em); + place-content: center; + margin: 0; + padding: 2em; + min-height: 100vh; + background: repeating-linear-Gradient(45deg, #131313 0 2px, #000 0 7px); +} + +header { + grid-column: 1/ -1; + color: #eee; + font: 1em/ 1.375 segoe script, purisa, comic sans ms, cursive; + text-align: center; +} + +h3 { + font-size: 2em; +} + +small { + display: block; + font-style: italic; + font-size: .375em; + font-weight: normal; +} + +.load { + position: relative; + width: 5em; + height: 5em; + border-radius: 50%; + -webkit-mask: var(--mask); + mask: var(--mask); +} +.load::before, .load::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + border-radius: inherit; + -webkit-mask: var(--mask); + mask: var(--mask); +} + +#load-1 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ), radial-Gradient(transparent 1.25em, red 0), linear-Gradient(0deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(30deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(60deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(90deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(120deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(150deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(180deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(210deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(240deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(270deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(300deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(330deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)); + -webkit-mask-composite: source-in, source-in, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, intersect, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} + +#load-2 { + background: rgba(255, 255, 255, 0.2); + --mask: radial-Gradient(transparent 1.25em, red 0), linear-Gradient(0deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(30deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(60deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(90deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(120deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(150deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(180deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(210deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(240deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(270deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(300deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(330deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)); + -webkit-mask-composite: source-in, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} +#load-2::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ); + content: ""; +} + +#load-3 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg), radial-Gradient(transparent 1.25em, red 0), linear-Gradient(0deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(30deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(60deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(90deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(120deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(150deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(180deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(210deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(240deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(270deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(300deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(330deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)); + -webkit-mask-composite: source-in, source-in, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, intersect, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} + +#load-4 { + background: rgba(255, 255, 255, 0.2); + --mask: radial-Gradient(transparent 1.25em, red 0), linear-Gradient(0deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(30deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(60deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(90deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(120deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(150deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(180deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(210deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(240deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(270deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(300deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(330deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)); + -webkit-mask-composite: source-in, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} +#load-4::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg); + content: ""; +} + +#load-5 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ), radial-Gradient(transparent 1.25em, red 0), linear-Gradient(0deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(30deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(60deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(90deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(120deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(150deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(180deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(210deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(240deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(270deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(300deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(330deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)); + -webkit-mask-composite: source-in, source-in, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, intersect, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} + +#load-6 { + background: rgba(255, 255, 255, 0.2); + --mask: radial-Gradient(transparent 1.25em, red 0), linear-Gradient(0deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(30deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(60deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(90deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(120deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(150deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(180deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(210deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(240deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(270deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(300deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(330deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)); + -webkit-mask-composite: source-in, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} +#load-6::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ); + content: ""; +} + +#load-7 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ), linear-Gradient(red, red), radial-Gradient(red 1.25em, transparent 0), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: source-in, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} + +#load-8 { + background: rgba(255, 255, 255, 0.2); + --mask: linear-Gradient(red, red), radial-Gradient(red 1.25em, transparent 0), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over; + mask-composite: exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} +#load-8::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ); + content: ""; +} + +#load-9 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg), linear-Gradient(red, red), radial-Gradient(red 1.25em, transparent 0), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: source-in, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} + +#load-10 { + background: rgba(255, 255, 255, 0.2); + --mask: linear-Gradient(red, red), radial-Gradient(red 1.25em, transparent 0), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over; + mask-composite: exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} +#load-10::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg); + content: ""; +} + +#load-11 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ), linear-Gradient(red, red), radial-Gradient(red 1.25em, transparent 0), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: source-in, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} + +#load-12 { + background: rgba(255, 255, 255, 0.2); + --mask: linear-Gradient(red, red), radial-Gradient(red 1.25em, transparent 0), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over; + mask-composite: exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} +#load-12::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ); + content: ""; +} + +#load-13 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ), radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-mask-composite: source-in, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} + +#load-14 { + background: rgba(255, 255, 255, 0.2); + --mask: radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} +#load-14::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ); + content: ""; +} + +#load-15 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg), radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-mask-composite: source-in, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} + +#load-16 { + background: rgba(255, 255, 255, 0.2); + --mask: radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} +#load-16::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg); + content: ""; +} + +#load-17 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ), radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-mask-composite: source-in, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} + +#load-18 { + background: rgba(255, 255, 255, 0.2); + --mask: radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} +#load-18::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ); + content: ""; +} + +#load-19 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ), linear-Gradient(red, red), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: source-in, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, exclude, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} + +#load-20 { + background: rgba(255, 255, 255, 0.2); + --mask: linear-Gradient(red, red), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over; + mask-composite: exclude, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} +#load-20::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ); + content: ""; +} + +#load-21 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg), linear-Gradient(red, red), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: source-in, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, exclude, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} + +#load-22 { + background: rgba(255, 255, 255, 0.2); + --mask: linear-Gradient(red, red), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over; + mask-composite: exclude, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} +#load-22::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg); + content: ""; +} + +#load-23 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ), linear-Gradient(red, red), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: source-in, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, exclude, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} + +#load-24 { + background: rgba(255, 255, 255, 0.2); + --mask: linear-Gradient(red, red), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over; + mask-composite: exclude, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} +#load-24::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ); + content: ""; +} + +#load-25 { + background: radial-Gradient(var(--c) calc(69% - 1px), transparent 69%) 50% 0, radial-Gradient(var(--c) calc(69% - 1px), transparent 69%) 0, radial-Gradient(var(--c) calc(69% - 1px), transparent 69%) 50% 100%, radial-Gradient(var(--c) calc(69% - 1px), transparent 69%) 100%; + background-repeat: no-repeat; + background-size: 0.79247em 1.58494em, 1.58494em 0.79247em; + --c: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ); + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} +#load-25::before, #load-25:after { + -webkit-transform: rotate(var(--az, 30deg)); + transform: rotate(var(--az, 30deg)); + background: inherit; + -webkit-mask: none; + mask: none; + content: ""; +} +#load-25::after { + --az: -30deg; +} + +#load-26 { + background: radial-Gradient(var(--c) calc(69% - 1px), transparent 69%) 50% 0, radial-Gradient(var(--c) calc(69% - 1px), transparent 69%) 0, radial-Gradient(var(--c) calc(69% - 1px), transparent 69%) 50% 100%, radial-Gradient(var(--c) calc(69% - 1px), transparent 69%) 100%; + background-repeat: no-repeat; + background-size: 0.79247em 1.58494em, 1.58494em 0.79247em; + --c: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg); + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} +#load-26::before, #load-26:after { + -webkit-transform: rotate(var(--az, 30deg)); + transform: rotate(var(--az, 30deg)); + background: inherit; + -webkit-mask: none; + mask: none; + content: ""; +} +#load-26::after { + --az: -30deg; +} + +#load-27 { + background: radial-Gradient(var(--c) calc(69% - 1px), transparent 69%) 50% 0, radial-Gradient(var(--c) calc(69% - 1px), transparent 69%) 0, radial-Gradient(var(--c) calc(69% - 1px), transparent 69%) 50% 100%, radial-Gradient(var(--c) calc(69% - 1px), transparent 69%) 100%; + background-repeat: no-repeat; + background-size: 0.79247em 1.58494em, 1.58494em 0.79247em; + --c: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ); + -webkit-animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} +#load-27::before, #load-27:after { + -webkit-transform: rotate(var(--az, 30deg)); + transform: rotate(var(--az, 30deg)); + background: inherit; + -webkit-mask: none; + mask: none; + content: ""; +} +#load-27::after { + --az: -30deg; +} + +#load-28 { + background: radial-Gradient(at 50% 100%, var(--c) calc(69% - 1px), transparent 69%) 50% 0, radial-Gradient(at 100% 50%, var(--c) calc(69% - 1px), transparent 69%) 0, radial-Gradient(at 50% 0, var(--c) calc(69% - 1px), transparent 69%) 50% 100%, radial-Gradient(at 0 50%, var(--c) calc(69% - 1px), transparent 69%) 100%; + background-repeat: no-repeat; + background-size: 0.79247em 0.79247em, 0.79247em 0.79247em; + --c: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ); + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} +#load-28::before, #load-28:after { + -webkit-transform: rotate(var(--az, 30deg)); + transform: rotate(var(--az, 30deg)); + background: inherit; + -webkit-mask: none; + mask: none; + content: ""; +} +#load-28::after { + --az: -30deg; +} + +#load-29 { + background: radial-Gradient(at 50% 100%, var(--c) calc(69% - 1px), transparent 69%) 50% 0, radial-Gradient(at 100% 50%, var(--c) calc(69% - 1px), transparent 69%) 0, radial-Gradient(at 50% 0, var(--c) calc(69% - 1px), transparent 69%) 50% 100%, radial-Gradient(at 0 50%, var(--c) calc(69% - 1px), transparent 69%) 100%; + background-repeat: no-repeat; + background-size: 0.79247em 0.79247em, 0.79247em 0.79247em; + --c: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg); + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} +#load-29::before, #load-29:after { + -webkit-transform: rotate(var(--az, 30deg)); + transform: rotate(var(--az, 30deg)); + background: inherit; + -webkit-mask: none; + mask: none; + content: ""; +} +#load-29::after { + --az: -30deg; +} + +#load-30 { + background: radial-Gradient(at 50% 100%, var(--c) calc(69% - 1px), transparent 69%) 50% 0, radial-Gradient(at 100% 50%, var(--c) calc(69% - 1px), transparent 69%) 0, radial-Gradient(at 50% 0, var(--c) calc(69% - 1px), transparent 69%) 50% 100%, radial-Gradient(at 0 50%, var(--c) calc(69% - 1px), transparent 69%) 100%; + background-repeat: no-repeat; + background-size: 0.79247em 0.79247em, 0.79247em 0.79247em; + --c: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ); + -webkit-animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} +#load-30::before, #load-30:after { + -webkit-transform: rotate(var(--az, 30deg)); + transform: rotate(var(--az, 30deg)); + background: inherit; + -webkit-mask: none; + mask: none; + content: ""; +} +#load-30::after { + --az: -30deg; +} + +#load-31 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ), linear-gradient(#ff0000, #ff0000), linear-Gradient(15deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(45deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(75deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(105deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(135deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(165deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(195deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(225deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(255deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(285deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(315deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(345deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-gradient(#ff0000, #ff0000), radial-Gradient(red 1.97169em, transparent 0), radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-mask-composite: source-in, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, exclude, add, add, add, add, add, add, add, add, add, add, add, add, exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} + +#load-32 { + background: rgba(255, 255, 255, 0.2); + --mask: linear-gradient(#ff0000, #ff0000), linear-Gradient(15deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(45deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(75deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(105deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(135deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(165deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(195deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(225deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(255deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(285deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(315deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(345deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-gradient(#ff0000, #ff0000), radial-Gradient(red 1.97169em, transparent 0), radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-mask-composite: xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over; + mask-composite: exclude, add, add, add, add, add, add, add, add, add, add, add, add, exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} +#load-32::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ); + content: ""; +} + +#load-33 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg), linear-gradient(#ff0000, #ff0000), linear-Gradient(15deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(45deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(75deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(105deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(135deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(165deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(195deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(225deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(255deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(285deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(315deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(345deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-gradient(#ff0000, #ff0000), radial-Gradient(red 1.97169em, transparent 0), radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-mask-composite: source-in, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, exclude, add, add, add, add, add, add, add, add, add, add, add, add, exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} + +#load-34 { + background: rgba(255, 255, 255, 0.2); + --mask: linear-gradient(#ff0000, #ff0000), linear-Gradient(15deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(45deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(75deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(105deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(135deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(165deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(195deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(225deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(255deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(285deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(315deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(345deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-gradient(#ff0000, #ff0000), radial-Gradient(red 1.97169em, transparent 0), radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-mask-composite: xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over; + mask-composite: exclude, add, add, add, add, add, add, add, add, add, add, add, add, exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} +#load-34::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg); + content: ""; +} + +#load-35 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ), linear-gradient(#ff0000, #ff0000), linear-Gradient(15deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(45deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(75deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(105deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(135deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(165deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(195deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(225deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(255deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(285deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(315deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(345deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-gradient(#ff0000, #ff0000), radial-Gradient(red 1.97169em, transparent 0), radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-mask-composite: source-in, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, exclude, add, add, add, add, add, add, add, add, add, add, add, add, exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} + +#load-36 { + background: rgba(255, 255, 255, 0.2); + --mask: linear-gradient(#ff0000, #ff0000), linear-Gradient(15deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(45deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(75deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(105deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(135deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(165deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(195deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(225deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(255deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(285deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(315deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(345deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-gradient(#ff0000, #ff0000), radial-Gradient(red 1.97169em, transparent 0), radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-mask-composite: xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over; + mask-composite: exclude, add, add, add, add, add, add, add, add, add, add, add, add, exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} +#load-36::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ); + content: ""; +} + +#load-37 { + background: conic-Gradient(from -15deg, HSL(0deg, 85%, 65%) 30deg, HSL(30deg, 85%, 65%) 0 60deg, HSL(60deg, 85%, 65%) 0 90deg, HSL(90deg, 85%, 65%) 0 120deg, HSL(120deg, 85%, 65%) 0 150deg, HSL(150deg, 85%, 65%) 0 180deg, HSL(180deg, 85%, 65%) 0 210deg, HSL(210deg, 85%, 65%) 0 240deg, HSL(240deg, 85%, 65%) 0 270deg, HSL(270deg, 85%, 65%) 0 300deg, HSL(300deg, 85%, 65%) 0 330deg, HSL(330deg, 85%, 65%) 0 ); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ), radial-Gradient(transparent 1.25em, red 0), linear-Gradient(0deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(30deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(60deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(90deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(120deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(150deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(180deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(210deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(240deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(270deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(300deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(330deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)); + -webkit-mask-composite: source-in, source-in, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, intersect, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: a 1s steps(12) infinite; + animation: a 1s steps(12) infinite; +} + +#load-38 { + background: rgba(255, 255, 255, 0.2); + --mask: radial-Gradient(transparent 1.25em, red 0), linear-Gradient(0deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(30deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(60deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(90deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(120deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(150deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(180deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(210deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(240deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(270deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(300deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(330deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)); + -webkit-mask-composite: source-in, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: a 1s steps(12) infinite; + animation: a 1s steps(12) infinite; +} +#load-38::before { + background: conic-Gradient(from -15deg, HSL(0deg, 100%, 35%) 30deg, HSL(30deg, 100%, 35%) 0 60deg, HSL(60deg, 100%, 35%) 0 90deg, HSL(90deg, 100%, 35%) 0 120deg, HSL(120deg, 100%, 35%) 0 150deg, HSL(150deg, 100%, 35%) 0 180deg, HSL(180deg, 100%, 35%) 0 210deg, HSL(210deg, 100%, 35%) 0 240deg, HSL(240deg, 100%, 35%) 0 270deg, HSL(270deg, 100%, 35%) 0 300deg, HSL(300deg, 100%, 35%) 0 330deg, HSL(330deg, 100%, 35%) 0 ); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ); + content: ""; +} + +#load-39 { + background: conic-Gradient(from -15deg, HSL(0deg, 85%, 65%) 30deg, HSL(30deg, 85%, 65%) 0 60deg, HSL(60deg, 85%, 65%) 0 90deg, HSL(90deg, 85%, 65%) 0 120deg, HSL(120deg, 85%, 65%) 0 150deg, HSL(150deg, 85%, 65%) 0 180deg, HSL(180deg, 85%, 65%) 0 210deg, HSL(210deg, 85%, 65%) 0 240deg, HSL(240deg, 85%, 65%) 0 270deg, HSL(270deg, 85%, 65%) 0 300deg, HSL(300deg, 85%, 65%) 0 330deg, HSL(330deg, 85%, 65%) 0 ); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg), radial-Gradient(transparent 1.25em, red 0), linear-Gradient(0deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(30deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(60deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(90deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(120deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(150deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(180deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(210deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(240deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(270deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(300deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(330deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)); + -webkit-mask-composite: source-in, source-in, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, intersect, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: a 1s steps(12) infinite; + animation: a 1s steps(12) infinite; +} + +#load-40 { + background: rgba(255, 255, 255, 0.2); + --mask: radial-Gradient(transparent 1.25em, red 0), linear-Gradient(0deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(30deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(60deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(90deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(120deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(150deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(180deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(210deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(240deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(270deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(300deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(330deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)); + -webkit-mask-composite: source-in, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: a 1s steps(12) infinite; + animation: a 1s steps(12) infinite; +} +#load-40::before { + background: conic-Gradient(from -15deg, HSL(0deg, 100%, 35%) 30deg, HSL(30deg, 100%, 35%) 0 60deg, HSL(60deg, 100%, 35%) 0 90deg, HSL(90deg, 100%, 35%) 0 120deg, HSL(120deg, 100%, 35%) 0 150deg, HSL(150deg, 100%, 35%) 0 180deg, HSL(180deg, 100%, 35%) 0 210deg, HSL(210deg, 100%, 35%) 0 240deg, HSL(240deg, 100%, 35%) 0 270deg, HSL(270deg, 100%, 35%) 0 300deg, HSL(300deg, 100%, 35%) 0 330deg, HSL(330deg, 100%, 35%) 0 ); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg); + content: ""; +} + +#load-41 { + background: conic-Gradient(from -15deg, HSL(0deg, 100%, 35%) 30deg, HSL(30deg, 100%, 35%) 0 60deg, HSL(60deg, 100%, 35%) 0 90deg, HSL(90deg, 100%, 35%) 0 120deg, HSL(120deg, 100%, 35%) 0 150deg, HSL(150deg, 100%, 35%) 0 180deg, HSL(180deg, 100%, 35%) 0 210deg, HSL(210deg, 100%, 35%) 0 240deg, HSL(240deg, 100%, 35%) 0 270deg, HSL(270deg, 100%, 35%) 0 300deg, HSL(300deg, 100%, 35%) 0 330deg, HSL(330deg, 100%, 35%) 0 ); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ), radial-Gradient(transparent 1.25em, red 0), linear-Gradient(0deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(30deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(60deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(90deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(120deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(150deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(180deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(210deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(240deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(270deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(300deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(330deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)); + -webkit-mask-composite: source-in, source-in, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, intersect, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} + +#load-42 { + background: rgba(255, 255, 255, 0.2); + --mask: radial-Gradient(transparent 1.25em, red 0), linear-Gradient(0deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(30deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(60deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(90deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(120deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(150deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(180deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(210deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(240deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(270deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(300deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)), linear-Gradient(330deg, transparent calc(50% - 0.125em - 1px), red calc(50% - 0.125em) calc(50% + 0.125em), transparent calc(50% - 0.125em + 1px)); + -webkit-mask-composite: source-in, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} +#load-42::before { + background: conic-Gradient(from -15deg, HSL(0deg, 100%, 35%) 30deg, HSL(30deg, 100%, 35%) 0 60deg, HSL(60deg, 100%, 35%) 0 90deg, HSL(90deg, 100%, 35%) 0 120deg, HSL(120deg, 100%, 35%) 0 150deg, HSL(150deg, 100%, 35%) 0 180deg, HSL(180deg, 100%, 35%) 0 210deg, HSL(210deg, 100%, 35%) 0 240deg, HSL(240deg, 100%, 35%) 0 270deg, HSL(270deg, 100%, 35%) 0 300deg, HSL(300deg, 100%, 35%) 0 330deg, HSL(330deg, 100%, 35%) 0 ); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ); + content: ""; +} + +#load-43 { + background: conic-Gradient(from 0deg, HSL(0deg, 85%, 65%) 30deg, HSL(30deg, 85%, 65%) 0 60deg, HSL(60deg, 85%, 65%) 0 90deg, HSL(90deg, 85%, 65%) 0 120deg, HSL(120deg, 85%, 65%) 0 150deg, HSL(150deg, 85%, 65%) 0 180deg, HSL(180deg, 85%, 65%) 0 210deg, HSL(210deg, 85%, 65%) 0 240deg, HSL(240deg, 85%, 65%) 0 270deg, HSL(270deg, 85%, 65%) 0 300deg, HSL(300deg, 85%, 65%) 0 330deg, HSL(330deg, 85%, 65%) 0 ); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ), linear-Gradient(red, red), radial-Gradient(red 1.25em, transparent 0), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: source-in, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: a 1s steps(12) infinite; + animation: a 1s steps(12) infinite; +} + +#load-44 { + background: rgba(255, 255, 255, 0.2); + --mask: linear-Gradient(red, red), radial-Gradient(red 1.25em, transparent 0), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over; + mask-composite: exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: a 1s steps(12) infinite; + animation: a 1s steps(12) infinite; +} +#load-44::before { + background: conic-Gradient(from 0deg, HSL(0deg, 100%, 35%) 30deg, HSL(30deg, 100%, 35%) 0 60deg, HSL(60deg, 100%, 35%) 0 90deg, HSL(90deg, 100%, 35%) 0 120deg, HSL(120deg, 100%, 35%) 0 150deg, HSL(150deg, 100%, 35%) 0 180deg, HSL(180deg, 100%, 35%) 0 210deg, HSL(210deg, 100%, 35%) 0 240deg, HSL(240deg, 100%, 35%) 0 270deg, HSL(270deg, 100%, 35%) 0 300deg, HSL(300deg, 100%, 35%) 0 330deg, HSL(330deg, 100%, 35%) 0 ); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ); + content: ""; +} + +#load-45 { + background: conic-Gradient(from 0deg, HSL(0deg, 100%, 35%) 30deg, HSL(30deg, 100%, 35%) 0 60deg, HSL(60deg, 100%, 35%) 0 90deg, HSL(90deg, 100%, 35%) 0 120deg, HSL(120deg, 100%, 35%) 0 150deg, HSL(150deg, 100%, 35%) 0 180deg, HSL(180deg, 100%, 35%) 0 210deg, HSL(210deg, 100%, 35%) 0 240deg, HSL(240deg, 100%, 35%) 0 270deg, HSL(270deg, 100%, 35%) 0 300deg, HSL(300deg, 100%, 35%) 0 330deg, HSL(330deg, 100%, 35%) 0 ); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg), linear-Gradient(red, red), radial-Gradient(red 1.25em, transparent 0), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: source-in, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: a 1s steps(12) infinite; + animation: a 1s steps(12) infinite; +} + +#load-46 { + background: rgba(255, 255, 255, 0.2); + --mask: linear-Gradient(red, red), radial-Gradient(red 1.25em, transparent 0), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over; + mask-composite: exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: a 1s steps(12) infinite; + animation: a 1s steps(12) infinite; +} +#load-46::before { + background: conic-Gradient(from 0deg, HSL(0deg, 100%, 35%) 30deg, HSL(30deg, 100%, 35%) 0 60deg, HSL(60deg, 100%, 35%) 0 90deg, HSL(90deg, 100%, 35%) 0 120deg, HSL(120deg, 100%, 35%) 0 150deg, HSL(150deg, 100%, 35%) 0 180deg, HSL(180deg, 100%, 35%) 0 210deg, HSL(210deg, 100%, 35%) 0 240deg, HSL(240deg, 100%, 35%) 0 270deg, HSL(270deg, 100%, 35%) 0 300deg, HSL(300deg, 100%, 35%) 0 330deg, HSL(330deg, 100%, 35%) 0 ); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg); + content: ""; +} + +#load-47 { + background: conic-Gradient(from 0deg, HSL(0deg, 100%, 35%) 30deg, HSL(30deg, 100%, 35%) 0 60deg, HSL(60deg, 100%, 35%) 0 90deg, HSL(90deg, 100%, 35%) 0 120deg, HSL(120deg, 100%, 35%) 0 150deg, HSL(150deg, 100%, 35%) 0 180deg, HSL(180deg, 100%, 35%) 0 210deg, HSL(210deg, 100%, 35%) 0 240deg, HSL(240deg, 100%, 35%) 0 270deg, HSL(270deg, 100%, 35%) 0 300deg, HSL(300deg, 100%, 35%) 0 330deg, HSL(330deg, 100%, 35%) 0 ); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ), linear-Gradient(red, red), radial-Gradient(red 1.25em, transparent 0), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: source-in, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} + +#load-48 { + background: rgba(255, 255, 255, 0.2); + --mask: linear-Gradient(red, red), radial-Gradient(red 1.25em, transparent 0), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over; + mask-composite: exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} +#load-48::before { + background: conic-Gradient(from 0deg, HSL(0deg, 100%, 35%) 30deg, HSL(30deg, 100%, 35%) 0 60deg, HSL(60deg, 100%, 35%) 0 90deg, HSL(90deg, 100%, 35%) 0 120deg, HSL(120deg, 100%, 35%) 0 150deg, HSL(150deg, 100%, 35%) 0 180deg, HSL(180deg, 100%, 35%) 0 210deg, HSL(210deg, 100%, 35%) 0 240deg, HSL(240deg, 100%, 35%) 0 270deg, HSL(270deg, 100%, 35%) 0 300deg, HSL(300deg, 100%, 35%) 0 330deg, HSL(330deg, 100%, 35%) 0 ); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ); + content: ""; +} + +#load-49 { + background: conic-Gradient(from -15deg, HSL(0deg, 85%, 65%) 30deg, HSL(30deg, 85%, 65%) 0 60deg, HSL(60deg, 85%, 65%) 0 90deg, HSL(90deg, 85%, 65%) 0 120deg, HSL(120deg, 85%, 65%) 0 150deg, HSL(150deg, 85%, 65%) 0 180deg, HSL(180deg, 85%, 65%) 0 210deg, HSL(210deg, 85%, 65%) 0 240deg, HSL(240deg, 85%, 65%) 0 270deg, HSL(270deg, 85%, 65%) 0 300deg, HSL(300deg, 85%, 65%) 0 330deg, HSL(330deg, 85%, 65%) 0 ); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ), radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-mask-composite: source-in, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: a 1s steps(12) infinite; + animation: a 1s steps(12) infinite; +} + +#load-50 { + background: rgba(255, 255, 255, 0.2); + --mask: radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-animation: a 1s steps(12) infinite; + animation: a 1s steps(12) infinite; +} +#load-50::before { + background: conic-Gradient(from -15deg, HSL(0deg, 85%, 65%) 30deg, HSL(30deg, 85%, 65%) 0 60deg, HSL(60deg, 85%, 65%) 0 90deg, HSL(90deg, 85%, 65%) 0 120deg, HSL(120deg, 85%, 65%) 0 150deg, HSL(150deg, 85%, 65%) 0 180deg, HSL(180deg, 85%, 65%) 0 210deg, HSL(210deg, 85%, 65%) 0 240deg, HSL(240deg, 85%, 65%) 0 270deg, HSL(270deg, 85%, 65%) 0 300deg, HSL(300deg, 85%, 65%) 0 330deg, HSL(330deg, 85%, 65%) 0 ); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ); + content: ""; +} + +#load-51 { + background: conic-Gradient(from -15deg, HSL(0deg, 85%, 65%) 30deg, HSL(30deg, 85%, 65%) 0 60deg, HSL(60deg, 85%, 65%) 0 90deg, HSL(90deg, 85%, 65%) 0 120deg, HSL(120deg, 85%, 65%) 0 150deg, HSL(150deg, 85%, 65%) 0 180deg, HSL(180deg, 85%, 65%) 0 210deg, HSL(210deg, 85%, 65%) 0 240deg, HSL(240deg, 85%, 65%) 0 270deg, HSL(270deg, 85%, 65%) 0 300deg, HSL(300deg, 85%, 65%) 0 330deg, HSL(330deg, 85%, 65%) 0 ); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg), radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-mask-composite: source-in, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: a 1s steps(12) infinite; + animation: a 1s steps(12) infinite; +} + +#load-52 { + background: rgba(255, 255, 255, 0.2); + --mask: radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-animation: a 1s steps(12) infinite; + animation: a 1s steps(12) infinite; +} +#load-52::before { + background: conic-Gradient(from -15deg, HSL(0deg, 85%, 65%) 30deg, HSL(30deg, 85%, 65%) 0 60deg, HSL(60deg, 85%, 65%) 0 90deg, HSL(90deg, 85%, 65%) 0 120deg, HSL(120deg, 85%, 65%) 0 150deg, HSL(150deg, 85%, 65%) 0 180deg, HSL(180deg, 85%, 65%) 0 210deg, HSL(210deg, 85%, 65%) 0 240deg, HSL(240deg, 85%, 65%) 0 270deg, HSL(270deg, 85%, 65%) 0 300deg, HSL(300deg, 85%, 65%) 0 330deg, HSL(330deg, 85%, 65%) 0 ); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg); + content: ""; +} + +#load-53 { + background: conic-Gradient(from -15deg, HSL(0deg, 85%, 65%) 30deg, HSL(30deg, 85%, 65%) 0 60deg, HSL(60deg, 85%, 65%) 0 90deg, HSL(90deg, 85%, 65%) 0 120deg, HSL(120deg, 85%, 65%) 0 150deg, HSL(150deg, 85%, 65%) 0 180deg, HSL(180deg, 85%, 65%) 0 210deg, HSL(210deg, 85%, 65%) 0 240deg, HSL(240deg, 85%, 65%) 0 270deg, HSL(270deg, 85%, 65%) 0 300deg, HSL(300deg, 85%, 65%) 0 330deg, HSL(330deg, 85%, 65%) 0 ); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ), radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-mask-composite: source-in, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} + +#load-54 { + background: rgba(255, 255, 255, 0.2); + --mask: radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-animation: alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} +#load-54::before { + background: conic-Gradient(from -15deg, HSL(0deg, 85%, 65%) 30deg, HSL(30deg, 85%, 65%) 0 60deg, HSL(60deg, 85%, 65%) 0 90deg, HSL(90deg, 85%, 65%) 0 120deg, HSL(120deg, 85%, 65%) 0 150deg, HSL(150deg, 85%, 65%) 0 180deg, HSL(180deg, 85%, 65%) 0 210deg, HSL(210deg, 85%, 65%) 0 240deg, HSL(240deg, 85%, 65%) 0 270deg, HSL(270deg, 85%, 65%) 0 300deg, HSL(300deg, 85%, 65%) 0 330deg, HSL(330deg, 85%, 65%) 0 ); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ); + content: ""; +} + +#load-55 { + background: conic-Gradient(from 0deg, HSL(0deg, 85%, 65%) 30deg, HSL(30deg, 85%, 65%) 0 60deg, HSL(60deg, 85%, 65%) 0 90deg, HSL(90deg, 85%, 65%) 0 120deg, HSL(120deg, 85%, 65%) 0 150deg, HSL(150deg, 85%, 65%) 0 180deg, HSL(180deg, 85%, 65%) 0 210deg, HSL(210deg, 85%, 65%) 0 240deg, HSL(240deg, 85%, 65%) 0 270deg, HSL(270deg, 85%, 65%) 0 300deg, HSL(300deg, 85%, 65%) 0 330deg, HSL(330deg, 85%, 65%) 0 ); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ), linear-Gradient(red, red), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: source-in, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, exclude, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: a 1s steps(12) infinite; + animation: a 1s steps(12) infinite; +} + +#load-56 { + background: rgba(255, 255, 255, 0.2); + --mask: linear-Gradient(red, red), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over; + mask-composite: exclude, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: a 1s steps(12) infinite; + animation: a 1s steps(12) infinite; +} +#load-56::before { + background: conic-Gradient(from 0deg, HSL(0deg, 85%, 65%) 30deg, HSL(30deg, 85%, 65%) 0 60deg, HSL(60deg, 85%, 65%) 0 90deg, HSL(90deg, 85%, 65%) 0 120deg, HSL(120deg, 85%, 65%) 0 150deg, HSL(150deg, 85%, 65%) 0 180deg, HSL(180deg, 85%, 65%) 0 210deg, HSL(210deg, 85%, 65%) 0 240deg, HSL(240deg, 85%, 65%) 0 270deg, HSL(270deg, 85%, 65%) 0 300deg, HSL(300deg, 85%, 65%) 0 330deg, HSL(330deg, 85%, 65%) 0 ); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ); + content: ""; +} + +#load-57 { + background: conic-Gradient(from 0deg, HSL(0deg, 85%, 65%) 30deg, HSL(30deg, 85%, 65%) 0 60deg, HSL(60deg, 85%, 65%) 0 90deg, HSL(90deg, 85%, 65%) 0 120deg, HSL(120deg, 85%, 65%) 0 150deg, HSL(150deg, 85%, 65%) 0 180deg, HSL(180deg, 85%, 65%) 0 210deg, HSL(210deg, 85%, 65%) 0 240deg, HSL(240deg, 85%, 65%) 0 270deg, HSL(270deg, 85%, 65%) 0 300deg, HSL(300deg, 85%, 65%) 0 330deg, HSL(330deg, 85%, 65%) 0 ); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg), linear-Gradient(red, red), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: source-in, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, exclude, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: a 1s steps(12) infinite; + animation: a 1s steps(12) infinite; +} + +#load-58 { + background: rgba(255, 255, 255, 0.2); + --mask: linear-Gradient(red, red), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over; + mask-composite: exclude, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: a 1s steps(12) infinite; + animation: a 1s steps(12) infinite; +} +#load-58::before { + background: conic-Gradient(from 0deg, HSL(0deg, 85%, 65%) 30deg, HSL(30deg, 85%, 65%) 0 60deg, HSL(60deg, 85%, 65%) 0 90deg, HSL(90deg, 85%, 65%) 0 120deg, HSL(120deg, 85%, 65%) 0 150deg, HSL(150deg, 85%, 65%) 0 180deg, HSL(180deg, 85%, 65%) 0 210deg, HSL(210deg, 85%, 65%) 0 240deg, HSL(240deg, 85%, 65%) 0 270deg, HSL(270deg, 85%, 65%) 0 300deg, HSL(300deg, 85%, 65%) 0 330deg, HSL(330deg, 85%, 65%) 0 ); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg); + content: ""; +} + +#load-59 { + background: conic-Gradient(from 0deg, HSL(0deg, 85%, 65%) 30deg, HSL(30deg, 85%, 65%) 0 60deg, HSL(60deg, 85%, 65%) 0 90deg, HSL(90deg, 85%, 65%) 0 120deg, HSL(120deg, 85%, 65%) 0 150deg, HSL(150deg, 85%, 65%) 0 180deg, HSL(180deg, 85%, 65%) 0 210deg, HSL(210deg, 85%, 65%) 0 240deg, HSL(240deg, 85%, 65%) 0 270deg, HSL(270deg, 85%, 65%) 0 300deg, HSL(300deg, 85%, 65%) 0 330deg, HSL(330deg, 85%, 65%) 0 ); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ), linear-Gradient(red, red), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: source-in, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, exclude, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} + +#load-60 { + background: rgba(255, 255, 255, 0.2); + --mask: linear-Gradient(red, red), linear-Gradient(0deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(30deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(60deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(90deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(120deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(150deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(180deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(210deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(240deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(270deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(300deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(330deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)); + -webkit-mask-composite: xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over; + mask-composite: exclude, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} +#load-60::before { + background: conic-Gradient(from 0deg, HSL(0deg, 85%, 65%) 30deg, HSL(30deg, 85%, 65%) 0 60deg, HSL(60deg, 85%, 65%) 0 90deg, HSL(90deg, 85%, 65%) 0 120deg, HSL(120deg, 85%, 65%) 0 150deg, HSL(150deg, 85%, 65%) 0 180deg, HSL(180deg, 85%, 65%) 0 210deg, HSL(210deg, 85%, 65%) 0 240deg, HSL(240deg, 85%, 65%) 0 270deg, HSL(270deg, 85%, 65%) 0 300deg, HSL(300deg, 85%, 65%) 0 330deg, HSL(330deg, 85%, 65%) 0 ); + --mask: conic-Gradient(from var(--a, 0deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ); + content: ""; +} + +#load-61 { + --az: 0deg; + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ); + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} +#load-61, #load-61::before, #load-61::after { + background: radial-Gradient(HSL(var(--az), 85%, 65%) calc(69% - 1px), transparent 69%) 50% 0, radial-Gradient(HSL(calc(var(--az) + 90deg), 85%, 65%) calc(69% - 1px), transparent 69%) 100%, radial-Gradient(HSL(calc(var(--az) + 180deg), 85%, 65%) calc(69% - 1px), transparent 69%) 50% 100%, radial-Gradient(HSL(calc(var(--az) + 270deg), 85%, 65%) calc(69% - 1px), transparent 69%) 0; + background-repeat: no-repeat; + background-size: 0.79247em 1.58494em, 1.58494em 0.79247em; +} +#load-61::before, #load-61:after { + --az: 30deg; + -webkit-transform: rotate(var(--az)); + transform: rotate(var(--az)); + -webkit-mask: none; + mask: none; + content: ""; +} +#load-61::after { + --az: -30deg; +} + +#load-62 { + --az: 0deg; + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg); + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} +#load-62, #load-62::before, #load-62::after { + background: radial-Gradient(HSL(var(--az), 85%, 65%) calc(69% - 1px), transparent 69%) 50% 0, radial-Gradient(HSL(calc(var(--az) + 90deg), 85%, 65%) calc(69% - 1px), transparent 69%) 100%, radial-Gradient(HSL(calc(var(--az) + 180deg), 85%, 65%) calc(69% - 1px), transparent 69%) 50% 100%, radial-Gradient(HSL(calc(var(--az) + 270deg), 85%, 65%) calc(69% - 1px), transparent 69%) 0; + background-repeat: no-repeat; + background-size: 0.79247em 1.58494em, 1.58494em 0.79247em; +} +#load-62::before, #load-62:after { + --az: 30deg; + -webkit-transform: rotate(var(--az)); + transform: rotate(var(--az)); + -webkit-mask: none; + mask: none; + content: ""; +} +#load-62::after { + --az: -30deg; +} + +#load-63 { + --az: 0deg; + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ); + -webkit-animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} +#load-63, #load-63::before, #load-63::after { + background: radial-Gradient(HSL(var(--az), 85%, 65%) calc(69% - 1px), transparent 69%) 50% 0, radial-Gradient(HSL(calc(var(--az) + 90deg), 85%, 65%) calc(69% - 1px), transparent 69%) 100%, radial-Gradient(HSL(calc(var(--az) + 180deg), 85%, 65%) calc(69% - 1px), transparent 69%) 50% 100%, radial-Gradient(HSL(calc(var(--az) + 270deg), 85%, 65%) calc(69% - 1px), transparent 69%) 0; + background-repeat: no-repeat; + background-size: 0.79247em 1.58494em, 1.58494em 0.79247em; +} +#load-63::before, #load-63:after { + --az: 30deg; + -webkit-transform: rotate(var(--az)); + transform: rotate(var(--az)); + -webkit-mask: none; + mask: none; + content: ""; +} +#load-63::after { + --az: -30deg; +} + +#load-64 { + --az: 0deg; + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ); + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} +#load-64, #load-64::before, #load-64::after { + background: radial-Gradient(at 50% 100%, HSL(var(--az), 85%, 65%) calc(69% - 1px), transparent 69%) 50% 0, radial-Gradient(at 0 50%, HSL(calc(var(--az) + 90deg), 85%, 65%) calc(69% - 1px), transparent 69%) 100%, radial-Gradient(at 50% 0, HSL(calc(var(--az) + 180deg), 85%, 65%) calc(69% - 1px), transparent 69%) 50% 100%, radial-Gradient(at 100% 50%, HSL(calc(var(--az) + 270deg), 85%, 65%) calc(69% - 1px), transparent 69%) 0; + background-repeat: no-repeat; + background-size: 0.79247em 0.79247em, 0.79247em 0.79247em; +} +#load-64::before, #load-64:after { + --az: 30deg; + -webkit-transform: rotate(var(--az, 30deg)); + transform: rotate(var(--az, 30deg)); + -webkit-mask: none; + mask: none; + content: ""; +} +#load-64::after { + --az: -30deg; +} + +#load-65 { + --az: 0deg; + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg); + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} +#load-65, #load-65::before, #load-65::after { + background: radial-Gradient(at 50% 100%, HSL(var(--az), 85%, 65%) calc(69% - 1px), transparent 69%) 50% 0, radial-Gradient(at 0 50%, HSL(calc(var(--az) + 90deg), 85%, 65%) calc(69% - 1px), transparent 69%) 100%, radial-Gradient(at 50% 0, HSL(calc(var(--az) + 180deg), 85%, 65%) calc(69% - 1px), transparent 69%) 50% 100%, radial-Gradient(at 100% 50%, HSL(calc(var(--az) + 270deg), 85%, 65%) calc(69% - 1px), transparent 69%) 0; + background-repeat: no-repeat; + background-size: 0.79247em 0.79247em, 0.79247em 0.79247em; +} +#load-65::before, #load-65:after { + --az: 30deg; + -webkit-transform: rotate(var(--az, 30deg)); + transform: rotate(var(--az, 30deg)); + -webkit-mask: none; + mask: none; + content: ""; +} +#load-65::after { + --az: -30deg; +} + +#load-66 { + --az: 0deg; + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ); + -webkit-animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} +#load-66, #load-66::before, #load-66::after { + background: radial-Gradient(at 50% 100%, HSL(var(--az), 85%, 65%) calc(69% - 1px), transparent 69%) 50% 0, radial-Gradient(at 0 50%, HSL(calc(var(--az) + 90deg), 85%, 65%) calc(69% - 1px), transparent 69%) 100%, radial-Gradient(at 50% 0, HSL(calc(var(--az) + 180deg), 85%, 65%) calc(69% - 1px), transparent 69%) 50% 100%, radial-Gradient(at 100% 50%, HSL(calc(var(--az) + 270deg), 85%, 65%) calc(69% - 1px), transparent 69%) 0; + background-repeat: no-repeat; + background-size: 0.79247em 0.79247em, 0.79247em 0.79247em; +} +#load-66::before, #load-66:after { + --az: 30deg; + -webkit-transform: rotate(var(--az, 30deg)); + transform: rotate(var(--az, 30deg)); + -webkit-mask: none; + mask: none; + content: ""; +} +#load-66::after { + --az: -30deg; +} + +#load-67 { + background: conic-Gradient(from -15deg, HSL(0deg, 85%, 65%) 30deg, HSL(30deg, 85%, 65%) 0 60deg, HSL(60deg, 85%, 65%) 0 90deg, HSL(90deg, 85%, 65%) 0 120deg, HSL(120deg, 85%, 65%) 0 150deg, HSL(150deg, 85%, 65%) 0 180deg, HSL(180deg, 85%, 65%) 0 210deg, HSL(210deg, 85%, 65%) 0 240deg, HSL(240deg, 85%, 65%) 0 270deg, HSL(270deg, 85%, 65%) 0 300deg, HSL(300deg, 85%, 65%) 0 330deg, HSL(330deg, 85%, 65%) 0 ); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ), linear-gradient(#ff0000, #ff0000), linear-Gradient(15deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(45deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(75deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(105deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(135deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(165deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(195deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(225deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(255deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(285deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(315deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(345deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-gradient(#ff0000, #ff0000), radial-Gradient(red 1.97169em, transparent 0), radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-mask-composite: source-in, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, exclude, add, add, add, add, add, add, add, add, add, add, add, add, exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} + +#load-68 { + background: rgba(255, 255, 255, 0.2); + --mask: linear-gradient(#ff0000, #ff0000), linear-Gradient(15deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(45deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(75deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(105deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(135deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(165deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(195deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(225deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(255deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(285deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(315deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(345deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-gradient(#ff0000, #ff0000), radial-Gradient(red 1.97169em, transparent 0), radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-mask-composite: xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over; + mask-composite: exclude, add, add, add, add, add, add, add, add, add, add, add, add, exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} +#load-68::before { + background: conic-Gradient(from -15deg, HSL(0deg, 85%, 65%) 30deg, HSL(30deg, 85%, 65%) 0 60deg, HSL(60deg, 85%, 65%) 0 90deg, HSL(90deg, 85%, 65%) 0 120deg, HSL(120deg, 85%, 65%) 0 150deg, HSL(150deg, 85%, 65%) 0 180deg, HSL(180deg, 85%, 65%) 0 210deg, HSL(210deg, 85%, 65%) 0 240deg, HSL(240deg, 85%, 65%) 0 270deg, HSL(270deg, 85%, 65%) 0 300deg, HSL(300deg, 85%, 65%) 0 330deg, HSL(330deg, 85%, 65%) 0 ); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 30deg, RGBA(0, 0, 0, 0.09091) 0deg 60deg, RGBA(0, 0, 0, 0.18182) 0deg 90deg, RGBA(0, 0, 0, 0.27273) 0deg 120deg, RGBA(0, 0, 0, 0.36364) 0deg 150deg, RGBA(0, 0, 0, 0.45455) 0deg 180deg, RGBA(0, 0, 0, 0.54545) 0deg 210deg, RGBA(0, 0, 0, 0.63636) 0deg 240deg, RGBA(0, 0, 0, 0.72727) 0deg 270deg, RGBA(0, 0, 0, 0.81818) 0deg 300deg, RGBA(0, 0, 0, 0.90909) 0deg 330deg, RGBA(0, 0, 0, 1) 0deg ); + content: ""; +} + +#load-69 { + background: conic-Gradient(from -15deg, HSL(0deg, 85%, 65%) 30deg, HSL(30deg, 85%, 65%) 0 60deg, HSL(60deg, 85%, 65%) 0 90deg, HSL(90deg, 85%, 65%) 0 120deg, HSL(120deg, 85%, 65%) 0 150deg, HSL(150deg, 85%, 65%) 0 180deg, HSL(180deg, 85%, 65%) 0 210deg, HSL(210deg, 85%, 65%) 0 240deg, HSL(240deg, 85%, 65%) 0 270deg, HSL(270deg, 85%, 65%) 0 300deg, HSL(300deg, 85%, 65%) 0 330deg, HSL(330deg, 85%, 65%) 0 ); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg), linear-gradient(#ff0000, #ff0000), linear-Gradient(15deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(45deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(75deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(105deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(135deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(165deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(195deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(225deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(255deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(285deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(315deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(345deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-gradient(#ff0000, #ff0000), radial-Gradient(red 1.97169em, transparent 0), radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-mask-composite: source-in, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, exclude, add, add, add, add, add, add, add, add, add, add, add, add, exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} + +#load-70 { + background: rgba(255, 255, 255, 0.2); + --mask: linear-gradient(#ff0000, #ff0000), linear-Gradient(15deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(45deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(75deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(105deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(135deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(165deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(195deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(225deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(255deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(285deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(315deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(345deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-gradient(#ff0000, #ff0000), radial-Gradient(red 1.97169em, transparent 0), radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-mask-composite: xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over; + mask-composite: exclude, add, add, add, add, add, add, add, add, add, add, add, add, exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, a 1s steps(12) infinite; + animation: hue 12s linear infinite, a 1s steps(12) infinite; +} +#load-70::before { + background: conic-Gradient(from -15deg, HSL(0deg, 85%, 65%) 30deg, HSL(30deg, 85%, 65%) 0 60deg, HSL(60deg, 85%, 65%) 0 90deg, HSL(90deg, 85%, 65%) 0 120deg, HSL(120deg, 85%, 65%) 0 150deg, HSL(150deg, 85%, 65%) 0 180deg, HSL(180deg, 85%, 65%) 0 210deg, HSL(210deg, 85%, 65%) 0 240deg, HSL(240deg, 85%, 65%) 0 270deg, HSL(270deg, 85%, 65%) 0 300deg, HSL(300deg, 85%, 65%) 0 330deg, HSL(330deg, 85%, 65%) 0 ); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, 0) 240deg, RGBA(0, 0, 0, 0.25) 210deg 270deg, RGBA(0, 0, 0, 0.5) 210deg 300deg, RGBA(0, 0, 0, 0.75) 210deg 330deg, RGBA(0, 0, 0, 1) 210deg 360deg); + content: ""; +} + +#load-71 { + background: conic-Gradient(from -15deg, HSL(0deg, 85%, 65%) 30deg, HSL(30deg, 85%, 65%) 0 60deg, HSL(60deg, 85%, 65%) 0 90deg, HSL(90deg, 85%, 65%) 0 120deg, HSL(120deg, 85%, 65%) 0 150deg, HSL(150deg, 85%, 65%) 0 180deg, HSL(180deg, 85%, 65%) 0 210deg, HSL(210deg, 85%, 65%) 0 240deg, HSL(240deg, 85%, 65%) 0 270deg, HSL(270deg, 85%, 65%) 0 300deg, HSL(300deg, 85%, 65%) 0 330deg, HSL(330deg, 85%, 65%) 0 ); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ), linear-gradient(#ff0000, #ff0000), linear-Gradient(15deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(45deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(75deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(105deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(135deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(165deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(195deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(225deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(255deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(285deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(315deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(345deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-gradient(#ff0000, #ff0000), radial-Gradient(red 1.97169em, transparent 0), radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-mask-composite: source-in, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor; + mask-composite: intersect, exclude, add, add, add, add, add, add, add, add, add, add, add, add, exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} + +#load-72 { + background: rgba(255, 255, 255, 0.2); + --mask: linear-gradient(#ff0000, #ff0000), linear-Gradient(15deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(45deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(75deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(105deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(135deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(165deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(195deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(225deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(255deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(285deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(315deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-Gradient(345deg, transparent calc(50% - 1px - 1px), red calc(50% - 1px) calc(50% + 1px), transparent calc(50% - 1px + 1px)), linear-gradient(#ff0000, #ff0000), radial-Gradient(red 1.97169em, transparent 0), radial-Gradient(circle at calc(50% + 1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + 1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + 1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + 0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.97169em) calc(50% + 0em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + -0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0em) calc(50% + -1.97169em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 0.98584em) calc(50% + -1.70753em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)), radial-Gradient(circle at calc(50% + 1.70753em) calc(50% + -0.98584em), red calc(0.52831em - 2px), transparent calc(0.52831em - 1px)); + -webkit-mask-composite: xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, xor, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over, source-over; + mask-composite: exclude, add, add, add, add, add, add, add, add, add, add, add, add, exclude, add, add, add, add, add, add, add, add, add, add, add, add, add; + -webkit-animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; + animation: hue 12s linear infinite, alpha0 1s steps(1) -0.5s infinite alternate, alpha1 1s steps(1) -0.45833s infinite alternate, alpha2 1s steps(1) -0.41667s infinite alternate, alpha3 1s steps(1) -0.375s infinite alternate, alpha4 1s steps(1) -0.33333s infinite alternate, alpha5 1s steps(1) -0.29167s infinite alternate, alpha6 1s steps(1) -0.25s infinite alternate, alpha7 1s steps(1) -0.20833s infinite alternate, alpha8 1s steps(1) -0.16667s infinite alternate, alpha9 1s steps(1) -0.125s infinite alternate, alpha10 1s steps(1) -0.08333s infinite alternate, alpha11 1s steps(1) -0.04167s infinite alternate; +} +#load-72::before { + background: conic-Gradient(from -15deg, HSL(0deg, 85%, 65%) 30deg, HSL(30deg, 85%, 65%) 0 60deg, HSL(60deg, 85%, 65%) 0 90deg, HSL(90deg, 85%, 65%) 0 120deg, HSL(120deg, 85%, 65%) 0 150deg, HSL(150deg, 85%, 65%) 0 180deg, HSL(180deg, 85%, 65%) 0 210deg, HSL(210deg, 85%, 65%) 0 240deg, HSL(240deg, 85%, 65%) 0 270deg, HSL(270deg, 85%, 65%) 0 300deg, HSL(300deg, 85%, 65%) 0 330deg, HSL(330deg, 85%, 65%) 0 ); + --mask: conic-Gradient(from calc(var(--a, 0deg) - 15deg), RGBA(0, 0, 0, var(--alpha0)) 30deg, RGBA(0, 0, 0, var(--alpha1)) 0deg 60deg, RGBA(0, 0, 0, var(--alpha2)) 0deg 90deg, RGBA(0, 0, 0, var(--alpha3)) 0deg 120deg, RGBA(0, 0, 0, var(--alpha4)) 0deg 150deg, RGBA(0, 0, 0, var(--alpha5)) 0deg 180deg, RGBA(0, 0, 0, var(--alpha6)) 0deg 210deg, RGBA(0, 0, 0, var(--alpha7)) 0deg 240deg, RGBA(0, 0, 0, var(--alpha8)) 0deg 270deg, RGBA(0, 0, 0, var(--alpha9)) 0deg 300deg, RGBA(0, 0, 0, var(--alpha10)) 0deg 330deg, RGBA(0, 0, 0, var(--alpha11)) 0deg ); + content: ""; +} + +@-webkit-keyframes hue { + to { + --hue: 360deg; + } +} + +@keyframes hue { + to { + --hue: 360deg; + } +} +@-webkit-keyframes a { + to { + --a: 360deg; + } +} +@keyframes a { + to { + --a: 360deg; + } +} +@-webkit-keyframes alpha0 { + 50% { + --alpha0: 1; + } +} +@keyframes alpha0 { + 50% { + --alpha0: 1; + } +} +@-webkit-keyframes alpha1 { + 50% { + --alpha1: 1; + } +} +@keyframes alpha1 { + 50% { + --alpha1: 1; + } +} +@-webkit-keyframes alpha2 { + 50% { + --alpha2: 1; + } +} +@keyframes alpha2 { + 50% { + --alpha2: 1; + } +} +@-webkit-keyframes alpha3 { + 50% { + --alpha3: 1; + } +} +@keyframes alpha3 { + 50% { + --alpha3: 1; + } +} +@-webkit-keyframes alpha4 { + 50% { + --alpha4: 1; + } +} +@keyframes alpha4 { + 50% { + --alpha4: 1; + } +} +@-webkit-keyframes alpha5 { + 50% { + --alpha5: 1; + } +} +@keyframes alpha5 { + 50% { + --alpha5: 1; + } +} +@-webkit-keyframes alpha6 { + 50% { + --alpha6: 1; + } +} +@keyframes alpha6 { + 50% { + --alpha6: 1; + } +} +@-webkit-keyframes alpha7 { + 50% { + --alpha7: 1; + } +} +@keyframes alpha7 { + 50% { + --alpha7: 1; + } +} +@-webkit-keyframes alpha8 { + 50% { + --alpha8: 1; + } +} +@keyframes alpha8 { + 50% { + --alpha8: 1; + } +} +@-webkit-keyframes alpha9 { + 50% { + --alpha9: 1; + } +} +@keyframes alpha9 { + 50% { + --alpha9: 1; + } +} +@-webkit-keyframes alpha10 { + 50% { + --alpha10: 1; + } +} +@keyframes alpha10 { + 50% { + --alpha10: 1; + } +} +@-webkit-keyframes alpha11 { + 50% { + --alpha11: 1; + } +} +@keyframes alpha11 { + 50% { + --alpha11: 1; + } +} \ No newline at end of file diff --git a/big-collection-houdini-animated-1-element-spinners/license.txt b/big-collection-houdini-animated-1-element-spinners/license.txt new file mode 100644 index 0000000..ef2fb15 --- /dev/null +++ b/big-collection-houdini-animated-1-element-spinners/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Ana Tudor (https://codepen.io/thebabydino/pen/WNrbGBz) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/big-collection-houdini-animated-1-element-spinners/src/index.pug b/big-collection-houdini-animated-1-element-spinners/src/index.pug new file mode 100644 index 0000000..a898621 --- /dev/null +++ b/big-collection-houdini-animated-1-element-spinners/src/index.pug @@ -0,0 +1,8 @@ +- let n = 72; + +header + h3 Houdini-animated 1 element spinners + p Note that they're only animated in supporting browsers - that's just Chromium browsers for now.
They're all different, no two of them identical - can you spot the differences between similar ones?
Can you figure out how they were made before checking the code? + +- for(let i = 0; i < n; i++) + .load(id=`load-${i + 1}`) \ No newline at end of file diff --git a/big-collection-houdini-animated-1-element-spinners/src/script.babel b/big-collection-houdini-animated-1-element-spinners/src/script.babel new file mode 100644 index 0000000..7feab8d --- /dev/null +++ b/big-collection-houdini-animated-1-element-spinners/src/script.babel @@ -0,0 +1,23 @@ +/* this is all the JS, only registering custom properties here so they can be animated in CSS and nothing else */ +CSS.registerProperty({ + name: '--hue', + syntax: '', + initialValue: '0deg', + inherits: true +}); + +CSS.registerProperty({ + name: '--a', + syntax: '', + initialValue: '0deg', + inherits: true +}); + +for(let i = 0; i < 12; i++) { + CSS.registerProperty({ + name: `--alpha${i}`, + syntax: '', + initialValue: 0, + inherits: true + }); +} \ No newline at end of file diff --git a/big-collection-houdini-animated-1-element-spinners/src/style.scss b/big-collection-houdini-animated-1-element-spinners/src/style.scss new file mode 100644 index 0000000..ea58dd7 --- /dev/null +++ b/big-collection-houdini-animated-1-element-spinners/src/style.scss @@ -0,0 +1,1537 @@ +@import 'compass/css3'; + +$d: 5em; +$n: 12; +$m: 5; +$t: 1s; + +@function vrepeat($val, $n: 12) { + $list: (); + + @for $i from 0 to $n { + $list: $list, $val + } + + @return $list +} + +@function rainbow($n: 12, $sat: 100%, $lum: 50%, $o: 0) { + $ba: 360deg/$n; + $c-list: from ($o - .5)*$ba; + + @for $i from 0 to $n { + $c-list: $c-list, + HSL($i*$ba, $sat, $lum) + if($i > 0, 0, unquote('')) + if($i < $n - 1, ($i + 1)*$ba, unquote('')) + } + + @return $c-list +} + +@function bars($n: 12, $bar-w: .05*$d, $a: 0) { + $n: $n - $n%2; + $ba: 360deg/$n; + $g-list: (); + $m: .5*$n; + $o: .5*$bar-w; + + @for $i from 0 to $n { + $g-list: $g-list, + linear-Gradient(($i + $a)*$ba, + transparent calc(50% - #{$o} - 1px), + red calc(50% - #{$o}) calc(50% + #{$o}), + transparent calc(50% - #{$o} + 1px)) + } + + @return $g-list +} + +@function dots($n: 12, $ro: .5*$d) { + $ba: 360deg/$n; + $rd: $ro*tan(.5*$ba)/(1 + tan(.5*$ba)); + $rp: $ro - $rd; + $g-list: (); + + @for $i from 0 to $n { + $ca: $i*$ba; + $x: calc(50% + #{$rp*cos($ca)}); + $y: calc(50% + #{$rp*sin($ca)}); + $g-list: $g-list, + radial-Gradient(#{circle at $x $y}, + red calc(#{$rd} - 2px), transparent calc(#{$rd} - 1px)) + } + + @return $g-list +} + +@function base-steps($n: 12, $m: $n, $a-ani: 0) { + $ba: 360deg/$n; + $s-list: (); + + @for $i from 0 to $m { + $s-list: $s-list, + RGBA(0, 0, 0, if($a-ani > 0, var(--alpha#{$i}), $i/($m - 1))) + if($i > 0, ($n - $m)*$ba, unquote('')) + if($i < $n - 1, ($n - $m + $i + 1)*$ba, unquote('')) + } + + @return $s-list +} + +@function alpha-ani($n: 12) { + $a-list: (); + + @for $i from 0 to $n { + $a-list: $a-list, alpha#{$i} $t steps(1) ($i/$n - 1)*.5*$t infinite alternate + } + + @return $a-list +} + +body { + box-sizing: border-box; + display: grid; + grid-gap: 2em; + grid-template-columns: repeat(auto-fill, $d); + place-content: center; + margin: 0; + padding: 2em; + min-height: 100vh; + background: repeating-linear-Gradient(45deg, + #131313 0 2px, #000 0 7px) +} + +header { + grid-column: 1/ -1; + color: #eee; + font: 1em/ 1.375 segoe script, purisa, comic sans ms, cursive; + text-align: center; +} + +h3 { font-size: 2em } + +small { display: block; font-style: italic; font-size: .375em; font-weight: normal; } + +.load { + position: relative; + width: $d; height: $d; + border-radius: 50%; + mask: var(--mask); + + &::before, &::after { + position: absolute; + top: 0; right: 0; bottom: 0; left: 0; + border-radius: inherit; + mask: var(--mask); + } +} + +#load-1 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n)}), + radial-Gradient(transparent #{.25*$d}, red 0), + #{bars($n)}; + mask-composite: intersect, intersect, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite +} + +#load-2 { + background: rgba(#fff, .2); + --mask: + radial-Gradient(transparent #{.25*$d}, red 0), + #{bars($n)}; + mask-composite: intersect, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite; + + &::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n)}); + content: '' + } +} + +#load-3 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $m)}), + radial-Gradient(transparent #{.25*$d}, red 0), + #{bars($n)}; + mask-composite: intersect, intersect, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite +} + +#load-4 { + background: rgba(#fff, .2); + --mask: + radial-Gradient(transparent #{.25*$d}, red 0), + #{bars($n)}; + mask-composite: intersect, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite; + + &::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $m)}); + content: '' + } +} + +#load-5 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $a-ani: 1)}), + radial-Gradient(transparent #{.25*$d}, red 0), + #{bars($n)}; + mask-composite: intersect, intersect, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + alpha-ani() +} + +#load-6 { + background: rgba(#fff, .2); + --mask: + radial-Gradient(transparent #{.25*$d}, red 0), + #{bars($n)}; + mask-composite: intersect, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + alpha-ani(); + + &::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $a-ani: 1)}); + content: '' + } +} + +#load-7 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from var(--a, 0deg), #{base-steps($n)}), + linear-Gradient(red, red), + radial-Gradient(red #{.25*$d}, transparent 0), + #{bars($n, 2px)}; + mask-composite: intersect, exclude, vrepeat(add, $n + 1); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite +} + +#load-8 { + background: rgba(#fff, .2); + --mask: + linear-Gradient(red, red), + radial-Gradient(red #{.25*$d}, transparent 0), + #{bars($n, 2px)}; + mask-composite: exclude, vrepeat(add, $n + 1); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite; + + &::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from var(--a, 0deg), + #{base-steps($n)}); + content: '' + } +} + +#load-9 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from var(--a, 0deg), #{base-steps($n, $m)}), + linear-Gradient(red, red), + radial-Gradient(red #{.25*$d}, transparent 0), + #{bars($n, 2px)}; + mask-composite: intersect, exclude, vrepeat(add, $n + 1); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite +} + +#load-10 { + background: rgba(#fff, .2); + --mask: + linear-Gradient(red, red), + radial-Gradient(red #{.25*$d}, transparent 0), + #{bars($n, 2px)}; + mask-composite: exclude, vrepeat(add, $n + 1); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite; + + &::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from var(--a, 0deg), #{base-steps($n, $m)}); + content: '' + } +} + +#load-11 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from var(--a, 0deg), + #{base-steps($n, $a-ani: 1)}), + linear-Gradient(red, red), + radial-Gradient(red #{.25*$d}, transparent 0), + #{bars($n, 2px)}; + mask-composite: intersect, exclude, vrepeat(add, $n + 1); + animation: + hue $n*$t linear infinite, + alpha-ani() +} + +#load-12 { + background: rgba(#fff, .2); + --mask: + linear-Gradient(red, red), + radial-Gradient(red #{.25*$d}, transparent 0), + #{bars($n, 2px)}; + mask-composite: exclude, vrepeat(add, $n + 1); + animation: + hue $n*$t linear infinite, + alpha-ani(); + + &::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from var(--a, 0deg), #{base-steps($n, $a-ani: 1)}); + content: '' + } +} + +#load-13 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n)}), + #{dots($n)}; + mask-composite: intersect, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite +} + +#load-14 { + background: rgba(#fff, .2); + --mask: #{dots($n)}; + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite; + + &::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n)}); + content: '' + } +} + +#load-15 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $m)}), + #{dots($n)}; + mask-composite: intersect, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite +} + +#load-16 { + background: rgba(#fff, .2); + --mask: #{dots($n)}; + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite; + + &::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $m)}); + content: '' + } +} + +#load-17 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $a-ani: 1)}), + #{dots($n)}; + mask-composite: intersect, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + alpha-ani() +} + +#load-18 { + background: rgba(#fff, .2); + --mask: #{dots($n)}; + animation: + hue $n*$t linear infinite, + alpha-ani(); + + &::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $a-ani: 1)}); + content: '' + } +} + +#load-19 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from var(--a, 0deg), #{base-steps($n)}), + linear-Gradient(red, red), + #{bars($n, 2px)}; + mask-composite: intersect, exclude, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite +} + +#load-20 { + background: rgba(#fff, .2); + --mask: + linear-Gradient(red, red), + #{bars($n, 2px)}; + mask-composite: exclude, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite; + + &::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from var(--a, 0deg), + #{base-steps($n)}); + content: '' + } +} + +#load-21 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from var(--a, 0deg), #{base-steps($n, $m)}), + linear-Gradient(red, red), + #{bars($n, 2px)}; + mask-composite: intersect, exclude, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite +} + +#load-22 { + background: rgba(#fff, .2); + --mask: + linear-Gradient(red, red), + #{bars($n, 2px)}; + mask-composite: exclude, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite; + + &::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from var(--a, 0deg), #{base-steps($n, $m)}); + content: '' + } +} + +#load-23 { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from var(--a, 0deg), + #{base-steps($n, $a-ani: 1)}), + linear-Gradient(red, red), + #{bars($n, 2px)}; + mask-composite: intersect, exclude, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + alpha-ani() +} + +#load-24 { + background: rgba(#fff, .2); + --mask: + linear-Gradient(red, red), + #{bars($n, 2px)}; + mask-composite: exclude, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + alpha-ani(); + + &::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from var(--a, 0deg), #{base-steps($n, $a-ani: 1)}); + content: '' + } +} + +#load-25 { + $ba: 360deg/12; + $rx: .375*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $ry: 2*$rx; + background: + radial-Gradient(var(--c) calc(69% - 1px), + transparent 69%) 50% 0, + radial-Gradient(var(--c) calc(69% - 1px), + transparent 69%) 0, + radial-Gradient(var(--c) calc(69% - 1px), + transparent 69%) 50% 100%, + radial-Gradient(var(--c) calc(69% - 1px), + transparent 69%) 100%; + background-repeat: no-repeat; + background-size: 2*$rx 2*$ry, 2*$ry 2*$rx; + --c: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n)}); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite; + + &::before, &:after { + transform: rotate(var(--az, 30deg)); + background: inherit; + mask: none; + content: '' + } + + &::after { --az: -30deg } +} + +#load-26 { + $ba: 360deg/12; + $rx: .375*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $ry: 2*$rx; + background: + radial-Gradient(var(--c) calc(69% - 1px), + transparent 69%) 50% 0, + radial-Gradient(var(--c) calc(69% - 1px), + transparent 69%) 0, + radial-Gradient(var(--c) calc(69% - 1px), + transparent 69%) 50% 100%, + radial-Gradient(var(--c) calc(69% - 1px), + transparent 69%) 100%; + background-repeat: no-repeat; + background-size: 2*$rx 2*$ry, 2*$ry 2*$rx; + --c: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $m)}); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite; + + &::before, &:after { + transform: rotate(var(--az, 30deg)); + background: inherit; + mask: none; + content: '' + } + + &::after { --az: -30deg } +} + +#load-27 { + $ba: 360deg/12; + $rx: .375*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $ry: 2*$rx; + background: + radial-Gradient(var(--c) calc(69% - 1px), + transparent 69%) 50% 0, + radial-Gradient(var(--c) calc(69% - 1px), + transparent 69%) 0, + radial-Gradient(var(--c) calc(69% - 1px), + transparent 69%) 50% 100%, + radial-Gradient(var(--c) calc(69% - 1px), + transparent 69%) 100%; + background-repeat: no-repeat; + background-size: 2*$rx 2*$ry, 2*$ry 2*$rx; + --c: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $a-ani: 1)}); + animation: + hue $n*$t linear infinite, + alpha-ani(); + + &::before, &:after { + transform: rotate(var(--az, 30deg)); + background: inherit; + mask: none; + content: '' + } + + &::after { --az: -30deg } +} + +#load-28 { + $ba: 360deg/12; + $rx: .375*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $ry: 2*$rx; + background: + radial-Gradient(at 50% 100%, + var(--c) calc(69% - 1px), + transparent 69%) 50% 0, + radial-Gradient(at 100% 50%, + var(--c) calc(69% - 1px), + transparent 69%) 0, + radial-Gradient(at 50% 0, + var(--c) calc(69% - 1px), + transparent 69%) 50% 100%, + radial-Gradient(at 0 50%, + var(--c) calc(69% - 1px), + transparent 69%) 100%; + background-repeat: no-repeat; + background-size: 2*$rx $ry, $ry 2*$rx; + --c: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n)}); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite; + + &::before, &:after { + transform: rotate(var(--az, 30deg)); + background: inherit; + mask: none; + content: '' + } + + &::after { --az: -30deg } +} + +#load-29 { + $ba: 360deg/12; + $rx: .375*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $ry: 2*$rx; + background: + radial-Gradient(at 50% 100%, + var(--c) calc(69% - 1px), + transparent 69%) 50% 0, + radial-Gradient(at 100% 50%, + var(--c) calc(69% - 1px), + transparent 69%) 0, + radial-Gradient(at 50% 0, + var(--c) calc(69% - 1px), + transparent 69%) 50% 100%, + radial-Gradient(at 0 50%, + var(--c) calc(69% - 1px), + transparent 69%) 100%; + background-repeat: no-repeat; + background-size: 2*$rx $ry, $ry 2*$rx; + --c: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $m)}); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite; + + &::before, &:after { + transform: rotate(var(--az, 30deg)); + background: inherit; + mask: none; + content: '' + } + + &::after { --az: -30deg } +} + +#load-30 { + $ba: 360deg/12; + $rx: .375*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $ry: 2*$rx; + background: + radial-Gradient(at 50% 100%, + var(--c) calc(69% - 1px), + transparent 69%) 50% 0, + radial-Gradient(at 100% 50%, + var(--c) calc(69% - 1px), + transparent 69%) 0, + radial-Gradient(at 50% 0, + var(--c) calc(69% - 1px), + transparent 69%) 50% 100%, + radial-Gradient(at 0 50%, + var(--c) calc(69% - 1px), + transparent 69%) 100%; + background-repeat: no-repeat; + background-size: 2*$rx $ry, $ry 2*$rx; + --c: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $a-ani: 1)}); + animation: + hue $n*$t linear infinite, + alpha-ani(); + + &::before, &:after { + transform: rotate(var(--az, 30deg)); + background: inherit; + mask: none; + content: '' + } + + &::after { --az: -30deg } +} + +#load-31 { + $ba: 360deg/$n; + $rd: .5*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $rp: .5*$d - $rd; + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n)}), + linear-gradient(red, red), + #{bars($n, 2px, .5)}, + linear-gradient(red, red), + radial-Gradient(red #{$rp}, transparent 0), + #{dots($n)}; + mask-composite: intersect, exclude, vrepeat(add, $n), exclude, add, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite +} + +#load-32 { + $ba: 360deg/$n; + $rd: .5*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $rp: .5*$d - $rd; + background: rgba(#fff, .2); + --mask: + linear-gradient(red, red), + #{bars($n, 2px, .5)}, + linear-gradient(red, red), + radial-Gradient(red #{$rp}, transparent 0), + #{dots($n)}; + mask-composite: exclude, vrepeat(add, $n), exclude, add, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite; + + &::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n)}); + content: '' + } +} + +#load-33 { + $ba: 360deg/$n; + $rd: .5*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $rp: .5*$d - $rd; + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $m)}), + linear-gradient(red, red), + #{bars($n, 2px, .5)}, + linear-gradient(red, red), + radial-Gradient(red #{$rp}, transparent 0), + #{dots($n)}; + mask-composite: intersect, exclude, vrepeat(add, $n), exclude, add, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite +} + +#load-34 { + $ba: 360deg/$n; + $rd: .5*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $rp: .5*$d - $rd; + background: rgba(#fff, .2); + --mask: + linear-gradient(red, red), + #{bars($n, 2px, .5)}, + linear-gradient(red, red), + radial-Gradient(red #{$rp}, transparent 0), + #{dots($n)}; + mask-composite: exclude, vrepeat(add, $n), exclude, add, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite; + + &::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $m)}); + content: '' + } +} + +#load-35 { + $ba: 360deg/$n; + $rd: .5*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $rp: .5*$d - $rd; + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $a-ani: 1)}), + linear-gradient(red, red), + #{bars($n, 2px, .5)}, + linear-gradient(red, red), + radial-Gradient(red #{$rp}, transparent 0), + #{dots($n)}; + mask-composite: intersect, exclude, vrepeat(add, $n), exclude, add, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + alpha-ani() +} + +#load-36 { + $ba: 360deg/$n; + $rd: .5*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $rp: .5*$d - $rd; + background: rgba(#fff, .2); + --mask: + linear-gradient(red, red), + #{bars($n, 2px, .5)}, + linear-gradient(red, red), + radial-Gradient(red #{$rp}, transparent 0), + #{dots($n)}; + mask-composite: exclude, vrepeat(add, $n), exclude, add, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + alpha-ani(); + + &::before { + background: HSL(var(--hue, 0deg), 85%, 65%); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $a-ani: 1)}); + content: '' + } +} + +#load-37 { + $n: 12; + background: conic-Gradient(rainbow($n, 85%, 65%)); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n)}), + radial-Gradient(transparent #{.25*$d}, red 0), + #{bars($n)}; + mask-composite: intersect, intersect, vrepeat(add, $n); + animation: a $t steps($n) infinite +} + +#load-38 { + $n: 12; + background: rgba(#fff, .2); + --mask: + radial-Gradient(transparent #{.25*$d}, red 0), + #{bars($n)}; + mask-composite: intersect, vrepeat(add, $n); + animation: a $t steps($n) infinite; + + &::before { + background: conic-Gradient(rainbow($n, 100%, 35%)); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n)}); + content: '' + } +} + +#load-39 { + $n: 12; + $m: 5; + background: conic-Gradient(rainbow($n, 85%, 65%)); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $m)}), + radial-Gradient(transparent #{.25*$d}, red 0), + #{bars($n)}; + mask-composite: intersect, intersect, vrepeat(add, $n); + animation: a $t steps($n) infinite; +} + +#load-40 { + $n: 12; + $m: 5; + background: rgba(#fff, .2); + --mask: + radial-Gradient(transparent #{.25*$d}, red 0), + #{bars($n)}; + mask-composite: intersect, vrepeat(add, $n); + animation: a $t steps($n) infinite; + + &::before { + background: conic-Gradient(rainbow($n, 100%, 35%)); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $m)}); + content: '' + } +} + +#load-41 { + background: conic-Gradient(rainbow($n, 100%, 35%)); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $a-ani: 1)}), + radial-Gradient(transparent #{.25*$d}, red 0), + #{bars($n)}; + mask-composite: intersect, intersect, vrepeat(add, $n); + animation: alpha-ani() +} + +#load-42 { + background: rgba(#fff, .2); + --mask: + radial-Gradient(transparent #{.25*$d}, red 0), + #{bars($n)}; + mask-composite: intersect, vrepeat(add, $n); + animation: alpha-ani(); + + &::before { + background: conic-Gradient(rainbow($n, 100%, 35%)); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $a-ani: 1)}); + content: '' + } +} + +#load-43 { + background: conic-Gradient(rainbow($n, 85%, 65%, .5)); + --mask: + conic-Gradient(from var(--a, 0deg), #{base-steps($n)}), + linear-Gradient(red, red), + radial-Gradient(red #{.25*$d}, transparent 0), + #{bars($n, 2px)}; + mask-composite: intersect, exclude, vrepeat(add, $n + 1); + animation: a $t steps($n) infinite +} + +#load-44 { + background: rgba(#fff, .2); + --mask: + linear-Gradient(red, red), + radial-Gradient(red #{.25*$d}, transparent 0), + #{bars($n, 2px)}; + mask-composite: exclude, vrepeat(add, $n + 1); + animation: a $t steps($n) infinite; + + &::before { + background: conic-Gradient(rainbow($n, 100%, 35%, .5)); + --mask: + conic-Gradient(from var(--a, 0deg), + #{base-steps($n)}); + content: '' + } +} + +#load-45 { + background: conic-Gradient(rainbow($n, 100%, 35%, .5)); + --mask: + conic-Gradient(from var(--a, 0deg), #{base-steps($n, $m)}), + linear-Gradient(red, red), + radial-Gradient(red #{.25*$d}, transparent 0), + #{bars($n, 2px)}; + mask-composite: intersect, exclude, vrepeat(add, $n + 1); + animation: a $t steps($n) infinite +} + +#load-46 { + background: rgba(#fff, .2); + --mask: + linear-Gradient(red, red), + radial-Gradient(red #{.25*$d}, transparent 0), + #{bars($n, 2px)}; + mask-composite: exclude, vrepeat(add, $n + 1); + animation: a $t steps($n) infinite; + + &::before { + background: conic-Gradient(rainbow($n, 100%, 35%, .5)); + --mask: + conic-Gradient(from var(--a, 0deg), #{base-steps($n, $m)}); + content: '' + } +} + +#load-47 { + background: conic-Gradient(rainbow($n, 100%, 35%, .5)); + --mask: + conic-Gradient(from var(--a, 0deg), + #{base-steps($n, $a-ani: 1)}), + linear-Gradient(red, red), + radial-Gradient(red #{.25*$d}, transparent 0), + #{bars($n, 2px)}; + mask-composite: intersect, exclude, vrepeat(add, $n + 1); + animation: alpha-ani() +} + +#load-48 { + background: rgba(#fff, .2); + --mask: + linear-Gradient(red, red), + radial-Gradient(red #{.25*$d}, transparent 0), + #{bars($n, 2px)}; + mask-composite: exclude, vrepeat(add, $n + 1); + animation: alpha-ani(); + + &::before { + background: conic-Gradient(rainbow($n, 100%, 35%, .5)); + --mask: + conic-Gradient(from var(--a, 0deg), #{base-steps($n, $a-ani: 1)}); + content: '' + } +} + +#load-49 { + background: conic-Gradient(rainbow($n, 85%, 65%)); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n)}), + #{dots($n)}; + mask-composite: intersect, vrepeat(add, $n); + animation: a $t steps($n) infinite +} + +#load-50 { + background: rgba(#fff, .2); + --mask: #{dots($n)}; + animation: a $t steps($n) infinite; + + &::before { + background: conic-Gradient(rainbow($n, 85%, 65%)); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n)}); + content: '' + } +} + +#load-51 { + background: conic-Gradient(rainbow($n, 85%, 65%)); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $m)}), + #{dots($n)}; + mask-composite: intersect, vrepeat(add, $n); + animation: a $t steps($n) infinite +} + +#load-52 { + background: rgba(#fff, .2); + --mask: #{dots($n)}; + animation: a $t steps($n) infinite; + + &::before { + background: conic-Gradient(rainbow($n, 85%, 65%)); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $m)}); + content: '' + } +} + +#load-53 { + background: conic-Gradient(rainbow($n, 85%, 65%)); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $a-ani: 1)}), + #{dots($n)}; + mask-composite: intersect, vrepeat(add, $n); + animation: alpha-ani() +} + +#load-54 { + background: rgba(#fff, .2); + --mask: + #{dots($n)}; + animation: alpha-ani(); + + &::before { + background: conic-Gradient(rainbow($n, 85%, 65%)); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $a-ani: 1)}); + content: '' + } +} + +#load-55 { + background: conic-Gradient(rainbow($n, 85%, 65%, .5)); + --mask: + conic-Gradient(from var(--a, 0deg), #{base-steps($n)}), + linear-Gradient(red, red), + #{bars($n, 2px)}; + mask-composite: intersect, exclude, vrepeat(add, $n); + animation: a $t steps($n) infinite +} + +#load-56 { + background: rgba(#fff, .2); + --mask: + linear-Gradient(red, red), + #{bars($n, 2px)}; + mask-composite: exclude, vrepeat(add, $n); + animation: a $t steps($n) infinite; + + &::before { + background: conic-Gradient(rainbow($n, 85%, 65%, .5)); + --mask: + conic-Gradient(from var(--a, 0deg), + #{base-steps($n)}); + content: '' + } +} + +#load-57 { + background: conic-Gradient(rainbow($n, 85%, 65%, .5)); + --mask: + conic-Gradient(from var(--a, 0deg), #{base-steps($n, $m)}), + linear-Gradient(red, red), + #{bars($n, 2px)}; + mask-composite: intersect, exclude, vrepeat(add, $n); + animation: a $t steps($n) infinite +} + +#load-58 { + background: rgba(#fff, .2); + --mask: + linear-Gradient(red, red), + #{bars($n, 2px)}; + mask-composite: exclude, vrepeat(add, $n); + animation: a $t steps($n) infinite; + + &::before { + background: conic-Gradient(rainbow($n, 85%, 65%, .5)); + --mask: + conic-Gradient(from var(--a, 0deg), #{base-steps($n, $m)}); + content: '' + } +} + +#load-59 { + background: conic-Gradient(rainbow($n, 85%, 65%, .5)); + --mask: + conic-Gradient(from var(--a, 0deg), + #{base-steps($n, $a-ani: 1)}), + linear-Gradient(red, red), + #{bars($n, 2px)}; + mask-composite: intersect, exclude, vrepeat(add, $n); + animation: alpha-ani() +} + +#load-60 { + background: rgba(#fff, .2); + --mask: + linear-Gradient(red, red), + #{bars($n, 2px)}; + mask-composite: exclude, vrepeat(add, $n); + animation: alpha-ani(); + + &::before { + background: conic-Gradient(rainbow($n, 85%, 65%, .5)); + --mask: + conic-Gradient(from var(--a, 0deg), #{base-steps($n, $a-ani: 1)}); + content: '' + } +} + +#load-61 { + $ba: 360deg/12; + $rx: .375*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $ry: 2*$rx; + --az: 0deg; + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n)}); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite; + + &, &::before, &::after { + background: + radial-Gradient(HSL(var(--az), 85%, 65%) calc(69% - 1px), + transparent 69%) 50% 0, + radial-Gradient(HSL(calc(var(--az) + #{3*$ba}), 85%, 65%) calc(69% - 1px), + transparent 69%) 100%, + radial-Gradient(HSL(calc(var(--az) + #{6*$ba}), 85%, 65%) calc(69% - 1px), + transparent 69%) 50% 100%, + radial-Gradient(HSL(calc(var(--az) + #{9*$ba}), 85%, 65%) calc(69% - 1px), + transparent 69%) 0; + background-repeat: no-repeat; + background-size: 2*$rx 2*$ry, 2*$ry 2*$rx; + } + + &::before, &:after { + --az: 30deg; + transform: rotate(var(--az)); + mask: none; + content: '' + } + + &::after { --az: -30deg } +} + +#load-62 { + $ba: 360deg/12; + $rx: .375*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $ry: 2*$rx; + --az: 0deg; + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $m)}); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite; + + &, &::before, &::after { + background: + radial-Gradient(HSL(var(--az), 85%, 65%) calc(69% - 1px), + transparent 69%) 50% 0, + radial-Gradient(HSL(calc(var(--az) + #{3*$ba}), 85%, 65%) calc(69% - 1px), + transparent 69%) 100%, + radial-Gradient(HSL(calc(var(--az) + #{6*$ba}), 85%, 65%) calc(69% - 1px), + transparent 69%) 50% 100%, + radial-Gradient(HSL(calc(var(--az) + #{9*$ba}), 85%, 65%) calc(69% - 1px), + transparent 69%) 0; + background-repeat: no-repeat; + background-size: 2*$rx 2*$ry, 2*$ry 2*$rx; + } + + &::before, &:after { + --az: 30deg; + transform: rotate(var(--az)); + mask: none; + content: '' + } + + &::after { --az: -30deg } +} + +#load-63 { + $ba: 360deg/12; + $rx: .375*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $ry: 2*$rx; + --az: 0deg; + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $a-ani: 1)}); + animation: + hue $n*$t linear infinite, + alpha-ani(); + + &, &::before, &::after { + background: + radial-Gradient(HSL(var(--az), 85%, 65%) calc(69% - 1px), + transparent 69%) 50% 0, + radial-Gradient(HSL(calc(var(--az) + #{3*$ba}), 85%, 65%) calc(69% - 1px), + transparent 69%) 100%, + radial-Gradient(HSL(calc(var(--az) + #{6*$ba}), 85%, 65%) calc(69% - 1px), + transparent 69%) 50% 100%, + radial-Gradient(HSL(calc(var(--az) + #{9*$ba}), 85%, 65%) calc(69% - 1px), + transparent 69%) 0; + background-repeat: no-repeat; + background-size: 2*$rx 2*$ry, 2*$ry 2*$rx; + } + + &::before, &:after { + --az: 30deg; + transform: rotate(var(--az)); + mask: none; + content: '' + } + + &::after { --az: -30deg } +} + +#load-64 { + $ba: 360deg/12; + $rx: .375*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $ry: 2*$rx; + --az: 0deg; + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n)}); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite; + + &, &::before, &::after { + background: + radial-Gradient(at 50% 100%, + HSL(var(--az), 85%, 65%) calc(69% - 1px), + transparent 69%) 50% 0, + radial-Gradient(at 0 50%, + HSL(calc(var(--az) + #{3*$ba}), 85%, 65%) calc(69% - 1px), + transparent 69%) 100%, + radial-Gradient(at 50% 0, + HSL(calc(var(--az) + #{6*$ba}), 85%, 65%) calc(69% - 1px), + transparent 69%) 50% 100%, + radial-Gradient(at 100% 50%, + HSL(calc(var(--az) + #{9*$ba}), 85%, 65%) calc(69% - 1px), + transparent 69%) 0; + background-repeat: no-repeat; + background-size: 2*$rx $ry, $ry 2*$rx; + } + + &::before, &:after { + --az: 30deg; + transform: rotate(var(--az, 30deg)); + mask: none; + content: '' + } + + &::after { --az: -30deg } +} + +#load-65 { + $ba: 360deg/12; + $rx: .375*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $ry: 2*$rx; + --az: 0deg; + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $m)}); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite; + + &, &::before, &::after { + background: + radial-Gradient(at 50% 100%, + HSL(var(--az), 85%, 65%) calc(69% - 1px), + transparent 69%) 50% 0, + radial-Gradient(at 0 50%, + HSL(calc(var(--az) + #{3*$ba}), 85%, 65%) calc(69% - 1px), + transparent 69%) 100%, + radial-Gradient(at 50% 0, + HSL(calc(var(--az) + #{6*$ba}), 85%, 65%) calc(69% - 1px), + transparent 69%) 50% 100%, + radial-Gradient(at 100% 50%, + HSL(calc(var(--az) + #{9*$ba}), 85%, 65%) calc(69% - 1px), + transparent 69%) 0; + background-repeat: no-repeat; + background-size: 2*$rx $ry, $ry 2*$rx; + } + + &::before, &:after { + --az: 30deg; + transform: rotate(var(--az, 30deg)); + mask: none; + content: '' + } + + &::after { --az: -30deg } +} + +#load-66 { + $ba: 360deg/12; + $rx: .375*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $ry: 2*$rx; + --az: 0deg; + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $a-ani: 1)}); + animation: + hue $n*$t linear infinite, + alpha-ani(); + + &, &::before, &::after { + background: + radial-Gradient(at 50% 100%, + HSL(var(--az), 85%, 65%) calc(69% - 1px), + transparent 69%) 50% 0, + radial-Gradient(at 0 50%, + HSL(calc(var(--az) + #{3*$ba}), 85%, 65%) calc(69% - 1px), + transparent 69%) 100%, + radial-Gradient(at 50% 0, + HSL(calc(var(--az) + #{6*$ba}), 85%, 65%) calc(69% - 1px), + transparent 69%) 50% 100%, + radial-Gradient(at 100% 50%, + HSL(calc(var(--az) + #{9*$ba}), 85%, 65%) calc(69% - 1px), + transparent 69%) 0; + background-repeat: no-repeat; + background-size: 2*$rx $ry, $ry 2*$rx; + } + + &::before, &:after { + --az: 30deg; + transform: rotate(var(--az, 30deg)); + mask: none; + content: '' + } + + &::after { --az: -30deg } +} + +#load-67 { + $ba: 360deg/$n; + $rd: .5*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $rp: .5*$d - $rd; + background: conic-Gradient(rainbow($n, 85%, 65%)); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n)}), + linear-gradient(red, red), + #{bars($n, 2px, .5)}, + linear-gradient(red, red), + radial-Gradient(red #{$rp}, transparent 0), + #{dots($n)}; + mask-composite: intersect, exclude, vrepeat(add, $n), exclude, add, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite +} + +#load-68 { + $ba: 360deg/$n; + $rd: .5*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $rp: .5*$d - $rd; + background: rgba(#fff, .2); + --mask: + linear-gradient(red, red), + #{bars($n, 2px, .5)}, + linear-gradient(red, red), + radial-Gradient(red #{$rp}, transparent 0), + #{dots($n)}; + mask-composite: exclude, vrepeat(add, $n), exclude, add, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite; + + &::before { + background: conic-Gradient(rainbow($n, 85%, 65%)); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n)}); + content: '' + } +} + +#load-69 { + $ba: 360deg/$n; + $rd: .5*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $rp: .5*$d - $rd; + background: conic-Gradient(rainbow($n, 85%, 65%)); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $m)}), + linear-gradient(red, red), + #{bars($n, 2px, .5)}, + linear-gradient(red, red), + radial-Gradient(red #{$rp}, transparent 0), + #{dots($n)}; + mask-composite: intersect, exclude, vrepeat(add, $n), exclude, add, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite +} + +#load-70 { + $ba: 360deg/$n; + $rd: .5*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $rp: .5*$d - $rd; + background: rgba(#fff, .2); + --mask: + linear-gradient(red, red), + #{bars($n, 2px, .5)}, + linear-gradient(red, red), + radial-Gradient(red #{$rp}, transparent 0), + #{dots($n)}; + mask-composite: exclude, vrepeat(add, $n), exclude, add, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + a $t steps($n) infinite; + + &::before { + background: conic-Gradient(rainbow($n, 85%, 65%)); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $m)}); + content: '' + } +} + +#load-71 { + $ba: 360deg/$n; + $rd: .5*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $rp: .5*$d - $rd; + background: conic-Gradient(rainbow($n, 85%, 65%)); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $a-ani: 1)}), + linear-gradient(red, red), + #{bars($n, 2px, .5)}, + linear-gradient(red, red), + radial-Gradient(red #{$rp}, transparent 0), + #{dots($n)}; + mask-composite: intersect, exclude, vrepeat(add, $n), exclude, add, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + alpha-ani() +} + +#load-72 { + $ba: 360deg/$n; + $rd: .5*$d*tan(.5*$ba)/(1 + tan(.5*$ba)); + $rp: .5*$d - $rd; + background: rgba(#fff, .2); + --mask: + linear-gradient(red, red), + #{bars($n, 2px, .5)}, + linear-gradient(red, red), + radial-Gradient(red #{$rp}, transparent 0), + #{dots($n)}; + mask-composite: exclude, vrepeat(add, $n), exclude, add, vrepeat(add, $n); + animation: + hue $n*$t linear infinite, + alpha-ani(); + + &::before { + background: conic-Gradient(rainbow($n, 85%, 65%)); + --mask: + conic-Gradient(from calc(var(--a, 0deg) - #{.5*360deg/$n}), + #{base-steps($n, $a-ani: 1)}); + content: '' + } +} + +@keyframes hue { to { --hue: 360deg } } + +@keyframes a { to { --a: 360deg } } + +@for $i from 0 to $n { + @keyframes alpha#{$i} { 50% { --alpha#{$i}: 1 } } +} \ No newline at end of file diff --git a/bind-css-keyframe-animation-to-scroll/LICENSE.txt b/bind-css-keyframe-animation-to-scroll/LICENSE.txt new file mode 100644 index 0000000..da637d1 --- /dev/null +++ b/bind-css-keyframe-animation-to-scroll/LICENSE.txt @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2023 Chris Coyier (https://codepen.io/chriscoyier/pen/NWxpJVx) +Fork of an original work Bind CSS keyframe animation to scroll (https://codepen.io/chriscoyier/pen/NWxpJVx) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/bind-css-keyframe-animation-to-scroll/README.md b/bind-css-keyframe-animation-to-scroll/README.md new file mode 100644 index 0000000..cecffc9 --- /dev/null +++ b/bind-css-keyframe-animation-to-scroll/README.md @@ -0,0 +1,4 @@ +# Bind CSS keyframe animation to scroll + +A Pen created on CodePen.io. Original URL: [https://codepen.io/chriscoyier/pen/NWxpJVx](https://codepen.io/chriscoyier/pen/NWxpJVx). + diff --git a/bind-css-keyframe-animation-to-scroll/dist/index.html b/bind-css-keyframe-animation-to-scroll/dist/index.html new file mode 100644 index 0000000..f02c991 --- /dev/null +++ b/bind-css-keyframe-animation-to-scroll/dist/index.html @@ -0,0 +1,27 @@ + + + + + CodePen - Bind CSS keyframe animation to scroll + + + + + +
+ +
+
+
+
+
+
+
+
+
+
+ + + + + diff --git a/bind-css-keyframe-animation-to-scroll/dist/script.js b/bind-css-keyframe-animation-to-scroll/dist/script.js new file mode 100644 index 0000000..c498ba5 --- /dev/null +++ b/bind-css-keyframe-animation-to-scroll/dist/script.js @@ -0,0 +1,3 @@ +window.addEventListener('scroll', () => { + document.body.style.setProperty('--scroll',window.pageYOffset / (document.body.offsetHeight - window.innerHeight)); +}, false); \ No newline at end of file diff --git a/bind-css-keyframe-animation-to-scroll/dist/style.css b/bind-css-keyframe-animation-to-scroll/dist/style.css new file mode 100644 index 0000000..d8c3568 --- /dev/null +++ b/bind-css-keyframe-animation-to-scroll/dist/style.css @@ -0,0 +1,92 @@ +body { + padding: 0; + margin: 0; + min-height: 500vh; + background-color: rgb(139, 201, 228); + animation: body 1s linear; +} +@keyframes body { + to { + background-color: rgb(19, 48, 97); + } +} + +.progress { + height: 3px; + width: 0%; + background-color: #fff; + position: fixed; + top: 0; + left: 0; + animation: progress 1s linear; +} +@keyframes progress { + to { + background-color: rgb(20, 255, 226); + width: 100%; + } +} + +.cube-wrap { + --size: 30vmin; + position: fixed; + top: 50%; + left: 50%; + width: 0; + height: 0; + perspective: 100vmin; +} +.cube { + transform-style: preserve-3d; + transform: rotateX(0deg) rotateZ(45deg) rotateY(-45deg); + animation: cube 1s linear; +} +@keyframes cube { + to { + transform: rotateX(360deg) rotateZ(45deg) rotateY(-45deg); + } +} + +.side { + position: absolute; + width: var(--size); + height: var(--size); + background-color: #eee; + backface-visibility: visible; + top: calc(var(--size) * -.5); + left: calc(var(--size) * -.5); +} +.top { + background-color: #fff; + transform: rotateX(90deg) translateZ(calc(var(--size) * .5)); +} +.bottom { + background-color: #999; + transform: rotateX(90deg) translateZ(calc(var(--size) * -.5)); +} +.left { + background-color: #ccc; + transform: rotateY(90deg) translateZ(calc(var(--size) * .5)); +} +.right { + background-color: #ddd; + transform: rotateY(90deg) translateZ(calc(var(--size) * -.5)); +} +.front { + background-color: #aaa; + transform: translateZ(calc(var(--size) * .5)); +} +.back { + background-color: #bbb; + transform: translateZ(calc(var(--size) * -.5)); +} + +:root * { + /* Pause the animation */ + animation-play-state: paused; + /* Bind the animation to scroll */ + animation-delay: calc(var(--scroll) * -1s); + /* These last 2 properites clean up overshoot weirdness */ + animation-iteration-count: 1; + animation-fill-mode: both; +} \ No newline at end of file diff --git a/bind-css-keyframe-animation-to-scroll/src/index.html b/bind-css-keyframe-animation-to-scroll/src/index.html new file mode 100644 index 0000000..8a261a0 --- /dev/null +++ b/bind-css-keyframe-animation-to-scroll/src/index.html @@ -0,0 +1,12 @@ +
+ +
+
+
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/bind-css-keyframe-animation-to-scroll/src/script.js b/bind-css-keyframe-animation-to-scroll/src/script.js new file mode 100644 index 0000000..c498ba5 --- /dev/null +++ b/bind-css-keyframe-animation-to-scroll/src/script.js @@ -0,0 +1,3 @@ +window.addEventListener('scroll', () => { + document.body.style.setProperty('--scroll',window.pageYOffset / (document.body.offsetHeight - window.innerHeight)); +}, false); \ No newline at end of file diff --git a/bind-css-keyframe-animation-to-scroll/src/style.css b/bind-css-keyframe-animation-to-scroll/src/style.css new file mode 100644 index 0000000..d8c3568 --- /dev/null +++ b/bind-css-keyframe-animation-to-scroll/src/style.css @@ -0,0 +1,92 @@ +body { + padding: 0; + margin: 0; + min-height: 500vh; + background-color: rgb(139, 201, 228); + animation: body 1s linear; +} +@keyframes body { + to { + background-color: rgb(19, 48, 97); + } +} + +.progress { + height: 3px; + width: 0%; + background-color: #fff; + position: fixed; + top: 0; + left: 0; + animation: progress 1s linear; +} +@keyframes progress { + to { + background-color: rgb(20, 255, 226); + width: 100%; + } +} + +.cube-wrap { + --size: 30vmin; + position: fixed; + top: 50%; + left: 50%; + width: 0; + height: 0; + perspective: 100vmin; +} +.cube { + transform-style: preserve-3d; + transform: rotateX(0deg) rotateZ(45deg) rotateY(-45deg); + animation: cube 1s linear; +} +@keyframes cube { + to { + transform: rotateX(360deg) rotateZ(45deg) rotateY(-45deg); + } +} + +.side { + position: absolute; + width: var(--size); + height: var(--size); + background-color: #eee; + backface-visibility: visible; + top: calc(var(--size) * -.5); + left: calc(var(--size) * -.5); +} +.top { + background-color: #fff; + transform: rotateX(90deg) translateZ(calc(var(--size) * .5)); +} +.bottom { + background-color: #999; + transform: rotateX(90deg) translateZ(calc(var(--size) * -.5)); +} +.left { + background-color: #ccc; + transform: rotateY(90deg) translateZ(calc(var(--size) * .5)); +} +.right { + background-color: #ddd; + transform: rotateY(90deg) translateZ(calc(var(--size) * -.5)); +} +.front { + background-color: #aaa; + transform: translateZ(calc(var(--size) * .5)); +} +.back { + background-color: #bbb; + transform: translateZ(calc(var(--size) * -.5)); +} + +:root * { + /* Pause the animation */ + animation-play-state: paused; + /* Bind the animation to scroll */ + animation-delay: calc(var(--scroll) * -1s); + /* These last 2 properites clean up overshoot weirdness */ + animation-iteration-count: 1; + animation-fill-mode: both; +} \ No newline at end of file diff --git a/blob-study/README.markdown b/blob-study/README.markdown new file mode 100644 index 0000000..c74ebb4 --- /dev/null +++ b/blob-study/README.markdown @@ -0,0 +1,5 @@ +# Blob study + +A Pen created on CodePen.io. Original URL: [https://codepen.io/shubniggurath/pen/dyOKjLG](https://codepen.io/shubniggurath/pen/dyOKjLG). + +A 3D blob distance field study. diff --git a/blob-study/dist/apxlmx.js b/blob-study/dist/apxlmx.js new file mode 100644 index 0000000..2b29a76 --- /dev/null +++ b/blob-study/dist/apxlmx.js @@ -0,0 +1,726 @@ +/** + * A basic Web GL class. This provides a very basic setup for GLSL shader code. + * Currently it doesn't support anything except for clip-space 3d, but this was + * done so that we could start writing fragments right out of the gate. My + * Intention is to update it with particle and polygonal 3d support later on. + * + * @class WTCGL + * @author Liam Egan + * @version 0.0.8 + * @created Jan 16, 2019 + */ +class WTCGL { + + /** + * The WTCGL Class constructor. If construction of the webGL context fails + * for any reason this will return null. + * + * @TODO make the dimension properties properly optional + * @TODO provide the ability to allow for programmable buffers + * + * @constructor + * @param {HTMLElement} el The canvas element to use as the root + * @param {string} vertexShaderSource The vertex shader source + * @param {string} fragmentShaderSource The fragment shader source + * @param {number} [width] The width of the webGL context. This will default to the canvas dimensions + * @param {number} [height] The height of the webGL context. This will default to the canvas dimensions + * @param {number} [pxratio=1] The pixel aspect ratio of the canvas + * @param {boolean} [styleElement] A boolean indicating whether to apply a style property to the canvas (resizing the canvas by the inverse of the pixel ratio) + * @param {boolean} [webgl2] A boolean indicating whether to try to create a webgl2 context instead of a regulart context + */ + constructor(el, vertexShaderSource, fragmentShaderSource, width, height, pxratio, styleElement, webgl2) { + this.run = this.run.bind(this); + + this._onRun = ()=>{}; + + // Destructure if an object is aprovided instead a series of parameters + if(el instanceof Object && el.el) { + ({el, vertexShaderSource, fragmentShaderSource, width, height, pxratio, webgl2, styleElement} = el); + } + + // If the HTML element isn't a canvas, return null + if(!el instanceof HTMLElement || el.nodeName.toLowerCase() !== 'canvas') { + console.log('Provided element should be a canvas element'); + return null; + } + + this._el = el; + // The context should be either webgl2, webgl or experimental-webgl + if(webgl2 === true) { + this.isWebgl2 = true; + this._ctx = this._el.getContext("webgl2", this.webgl_params) || this._el.getContext("webgl", this.webgl_params) || this._el.getContext("experimental-webgl", this.webgl_params); + } else { + this.isWebgl2 = false; + this._ctx = this._el.getContext("webgl", this.webgl_params) || this._el.getContext("experimental-webgl", this.webgl_params); + } + + // Set up the extensions + this._ctx.getExtension('OES_standard_derivatives'); + this._ctx.getExtension('EXT_shader_texture_lod'); + this._ctx.getExtension('OES_texture_float'); + this._ctx.getExtension('WEBGL_color_buffer_float'); + this._ctx.getExtension('OES_texture_float_linear'); + this._ctx.getExtension('EXT_color_buffer_float'); + + // We can't make the context so return an error + if (!this._ctx) { + console.log('Browser doesn\'t support WebGL '); + return null; + } + + // Create the shaders + this._vertexShader = WTCGL.createShaderOfType(this._ctx, this._ctx.VERTEX_SHADER, vertexShaderSource); + this._fragmentShader = WTCGL.createShaderOfType(this._ctx, this._ctx.FRAGMENT_SHADER, fragmentShaderSource); + + // Create the program and link the shaders + this._program = this._ctx.createProgram(); + this._ctx.attachShader(this._program, this._vertexShader); + this._ctx.attachShader(this._program, this._fragmentShader); + this._ctx.linkProgram(this._program); + + // If we can't set up the params, this means the shaders have failed for some reason + if (!this._ctx.getProgramParameter(this._program, this._ctx.LINK_STATUS)) { + console.log('Unable to initialize the shader program: ' + this._ctx.getProgramInfoLog(this._program)); + return null; + } + + // Initialise the vertex buffers + this.initBuffers([ + -1.0, 1.0, -1., + 1.0, 1.0, -1., + -1.0, -1.0, -1., + 1.0, -1.0, -1., + ]); + + // Initialise the frame buffers + this.frameBuffers = []; + + // The program information object. This is essentially a state machine for the webGL instance + this._programInfo = { + attribs: { + vertexPosition: this._ctx.getAttribLocation(this._program, 'a_position'), + }, + uniforms: { + projectionMatrix: this._ctx.getUniformLocation(this._program, 'u_projectionMatrix'), + modelViewMatrix: this._ctx.getUniformLocation(this._program, 'u_modelViewMatrix'), + resolution: this._ctx.getUniformLocation(this._program, 'u_resolution'), + time: this._ctx.getUniformLocation(this._program, 'u_time'), + }, + }; + + // Tell WebGL to use our program when drawing + this._ctx.useProgram(this._program); + + this.pxratio = pxratio; + + this.styleElement = styleElement !== true; + + this.resize(width, height); + } + + + /** + * Public methods + */ + + addFrameBuffer(w, h, tiling = 0, buffertype = 0) { + // create to render to + const gl = this._ctx; + const targetTextureWidth = w * this.pxratio; + const targetTextureHeight = h * this.pxratio; + const targetTexture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, targetTexture); + { + // define size and format of level 0 + const level = 0; + let internalFormat = gl.RGBA; + const border = 0; + let format = gl.RGBA; + let t; + if(buffertype & WTCGL.TEXTYPE_FLOAT) { + const e = gl.getExtension('OES_texture_float'); + window.extension = e; + t = e.FLOAT; + // internalFormat = gl.RGBA32F; + } else if(buffertype & WTCGL.TEXTYPE_HALF_FLOAT_OES) { + // t = gl.renderer.isWebgl2 ? e.HALF_FLOAT : e.HALF_FLOAT_OES; + // gl.renderer.extensions['OES_texture_half_float'] ? gl.renderer.extensions['OES_texture_half_float'].HALF_FLOAT_OES : + // gl.UNSIGNED_BYTE; + const e = gl.getExtension('OES_texture_half_float'); + t = this.isWebgl2 ? gl.HALF_FLOAT : e.HALF_FLOAT_OES; + // format = gl.RGBA; + if(this.isWebgl2) { + internalFormat = gl.RGBA16F; + } + // internalFormat = gl.RGB32F; + // format = gl.RGB32F; + // window.gl = gl + // t = e.HALF_FLOAT_OES; + } else { + t = gl.UNSIGNED_BYTE; + } + const type = t; + const data = null; + gl.texImage2D(gl.TEXTURE_2D, level, internalFormat, + targetTextureWidth, targetTextureHeight, border, + format, type, data); + // gl.generateMipmap(gl.TEXTURE_2D); + + // set the filtering so we don't need mips + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + + // Set the parameters based on the passed type + if(tiling === WTCGL.IMAGETYPE_TILE) { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } else if(tiling === WTCGL.IMAGETYPE_MIRROR) { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.MIRRORED_REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.MIRRORED_REPEAT); + } else if(tiling === WTCGL.IMAGETYPE_REGULAR) { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + } + + // Create and bind the framebuffer + const fb = gl.createFramebuffer(); + gl.bindFramebuffer(gl.FRAMEBUFFER, fb); + + // attach the texture as the first color attachment + const attachmentPoint = gl.COLOR_ATTACHMENT0; + const level = 0; + gl.framebufferTexture2D(gl.FRAMEBUFFER, attachmentPoint, gl.TEXTURE_2D, targetTexture, level); + + return { + w: w * this.pxratio, + h: h * this.pxratio, + fb: fb, + frameTexture: targetTexture + }; + } + + + /** + * Resizes the canvas to a specified width and height, respecting the pixel ratio + * + * @param {number} w The width of the canvas + * @param {number} h The height of the canvas + * @return {Void} + */ + resize(w, h) { + this.width = w; + this.height = h; + this._el.width = w * this.pxratio; + this._el.height = h * this.pxratio; + this._size = [w * this.pxratio, h * this.pxratio]; + if(this.styleElement) { + this._el.style.width = w + 'px'; + this._el.style.height = h + 'px'; + } + + this._ctx.viewportWidth = w * this.pxratio; + this._ctx.viewportHeight = h * this.pxratio; + + this._ctx.uniform2fv( this._programInfo.uniforms.resolution, this._size); + + this.initBuffers(this._positions); + } + + /** + * Initialise a provided vertex buffer + * + * @param {array} positions The vertex positions to initialise + * @return {Void} + */ + initBuffers(positions) { + this._positions = positions; + this._positionBuffer = this._ctx.createBuffer(); + + this._ctx.bindBuffer(this._ctx.ARRAY_BUFFER, this._positionBuffer); + + this._ctx.bufferData(this._ctx.ARRAY_BUFFER, + new Float32Array(positions), + this._ctx.STATIC_DRAW); + } + + /** + * Add a uniform to the program. At this time the following types are supported: + * - Float - WTCGL.TYPE_FLOAT + * - Vector 2 - WTCGL.TYPE_V2 + * - Vector 3 - WTCGL.TYPE_V3 + * - Vector 4 - WTCGL.TYPE_V4 + * + * @param {string} name The name of the uniform. N.B. your name will be prepended with a `u_` in your shaders. So providing a name of `foo` here will result in a uniform named `u_foo` + * @param {WTCGL.UNIFORM_TYPE} type The unfiform type + * @param {number|array} value The unfiform value. The type depends on the uniform type being created + * @return {WebGLUniformLocation} The uniform location for later reference + */ + addUniform(name, type, value) { + let uniform = this._programInfo.uniforms[name]; + uniform = this._ctx.getUniformLocation(this._program, `u_${name}`); + switch(type) { + case WTCGL.TYPE_INT : + if(!isNaN(value)) this._ctx.uniform1i( uniform, value); + break; + case WTCGL.TYPE_FLOAT : + if(!isNaN(value)) this._ctx.uniform1f( uniform, value); + break; + case WTCGL.TYPE_V2 : + if(value instanceof Array && value.length === 2.) this._ctx.uniform2fv( uniform, value); + break; + case WTCGL.TYPE_V3 : + if(value instanceof Array && value.length === 3.) this._ctx.uniform3fv( uniform, value); + break; + case WTCGL.TYPE_V4 : + if(value instanceof Array && value.length === 4.) this._ctx.uniform4fv( uniform, value); + break; + case WTCGL.TYPE_BOOL : + if(!isNaN(value)) this._ctx.uniform1i( uniform, value); + break; + } + this._programInfo.uniforms[name] = uniform; + return uniform; + } + + /** + * Adds a texture to the program and links it to a named uniform. Providing the type changes the tiling properties of the texture. Possible values for type: + * - WTCGL.IMAGETYPE_REGULAR - No tiling, clamp to edges and doesn't need to be power of 2. + * - WTCGL.IMAGETYPE_TILE - full x and y tiling, needs to be power of 2. + * - WTCGL.IMAGETYPE_MIRROR - mirror tiling, needs to be power of 2. + * + * @public + * @param {string} name The name of the uniform. N.B. your name will be prepended with a `u_` in your shaders. So providing a name of `foo` here will result in a uniform named `u_foo` + * @param {WTCGL.TYPE_IMAGETYPE} type The type of texture to create. This is basically the tiling behaviour of the texture as described above + * @param {Image} image The image object to add to the texture + * @return {WebGLTexture} The texture object + */ + addTexture(name, type, image, liveUpdate = false) { + + var texture = this._ctx.createTexture(); + this._ctx.pixelStorei(this._ctx.UNPACK_FLIP_Y_WEBGL, true); + this._ctx.bindTexture(this._ctx.TEXTURE_2D, texture); + + // this._ctx.generateMipmap(this._ctx.TEXTURE_2D); + + // Set the parameters based on the passed type + if(type === WTCGL.IMAGETYPE_MIRROR) { + this._ctx.texParameteri(this._ctx.TEXTURE_2D, this._ctx.TEXTURE_WRAP_S, this._ctx.MIRRORED_REPEAT); + this._ctx.texParameteri(this._ctx.TEXTURE_2D, this._ctx.TEXTURE_WRAP_T, this._ctx.MIRRORED_REPEAT); + } else if(type === WTCGL.IMAGETYPE_REGULAR) { + this._ctx.texParameteri(this._ctx.TEXTURE_2D, this._ctx.TEXTURE_WRAP_S, this._ctx.CLAMP_TO_EDGE); + this._ctx.texParameteri(this._ctx.TEXTURE_2D, this._ctx.TEXTURE_WRAP_T, this._ctx.CLAMP_TO_EDGE); + } + + this._ctx.texParameteri(this._ctx.TEXTURE_2D, this._ctx.TEXTURE_MIN_FILTER, this._ctx.LINEAR); + // this._ctx.texParameteri(this._ctx.TEXTURE_2D, this._ctx.TEXTURE_MAG_FILTER, this._ctx.LINEAR); + + // Upload the image into the texture. + this._ctx.texImage2D(this._ctx.TEXTURE_2D, 0, this._ctx.RGBA, this._ctx.RGBA, this._ctx.UNSIGNED_BYTE, image); + + // add the texture to the array of textures. + this.pushTexture(name, texture, image, this._ctx.TEXTURE_2D, liveUpdate); + + + return texture; + } + + pushTexture(name, texture, image, target, liveUpdate = false) { + let textures = this.textures; + + textures.push({ name: name, tex: texture, liveUpdate: liveUpdate, image: image, target: target }); + + // Finally set the this.textures (this is just to get around the funnyness of default getters) + this.textures = textures; + } + + /** + * Updates a texture location for a given WebGLTexture with an image + * + * @param {WebGLTexture} texture The texture location to update + * @param {Image} image The image object to add to the texture + * @return {Void} + */ + updateTexture(texture, image, name) { + + let uniform = this._ctx.getUniformLocation(this._program, `u_${name}`); + // Set the texture unit to the uniform + this._ctx.uniform1i(uniform, 0); + this._ctx.activeTexture(this._ctx.TEXTURE0); + + this._ctx.bindTexture(this._ctx.TEXTURE_2D, texture); + // Upload the image into the texture. + this._ctx.texImage2D(this._ctx.TEXTURE_2D, 0, this._ctx.RGBA, this._ctx.RGBA, this._ctx.UNSIGNED_BYTE, image); + } + + /** + * Initialise texture locations in the program + * + * @return {Void} + */ + initTextures() { + for(let i = 0; i < this.textures.length; i++) { + let name = this.textures[i].name; + let uniform = this._programInfo.uniforms[name]; + uniform = this._ctx.getUniformLocation(this._program, `u_${name}`); + + // Set the texture unit to the uniform + this._ctx.uniform1i(uniform, i); + + // find the active texture based on the index + this._ctx.activeTexture(this._ctx[`TEXTURE${i}`]); + + // Finally, bind the texture + this._ctx.bindTexture(this.textures[i].target, this.textures[i].tex); + } + } + + /** + * The run loop. This function is run as a part of a RaF and updates the internal + * time uniform (`u_time`). + * + * @param {number} delta The delta time provided by the RaF loop + * @return {Void} + */ + run(delta) { + this.running && requestAnimationFrame(this.run); + + const runFunction = () => { + this.time = this.startTime + delta * .0002; + this.onRun(delta); + this.render(); + } + + if(this.frameRate) { + let now = Date.now(); + let elapsed = now - this._then; + + if (elapsed > this.frameRate) { + this._then = now - (elapsed % this.frameRate); + + runFunction(); + } + } else { + runFunction(); + } + } + + /** + * Render the program + * + * @return {Void} + */ + render(buffer = {}) { + this._ctx.bindFramebuffer(this._ctx.FRAMEBUFFER, buffer.fb || null); + // Update the time uniform + this._ctx.uniform1f( this._programInfo.uniforms.time, this.time); + + this.textures.forEach((textureInfo) => { + if(textureInfo.liveUpdate === true) { + this.updateTexture(textureInfo.tex, textureInfo.image, textureInfo.name); + } + }); + + this._ctx.viewport(0, 0, buffer.w || this._ctx.viewportWidth, buffer.h || this._ctx.viewportHeight); + if(this.clearing) { + this._ctx.clearColor(1.0, 0.0, 0.0, 0.0); + // this._ctx.clearDepth(1.0); + // this._ctx.enable(this._ctx.DEPTH_TEST); + // this._ctx.depthFunc(this._ctx.LEQUAL); + + this._ctx.blendFunc(this._ctx.SRC_ALPHA, this._ctx.ONE_MINUS_SRC_ALPHA); + + this._ctx.clear( this._ctx.COLOR_BUFFER_BIT ); + } + + this._ctx.bindBuffer(this._ctx.ARRAY_BUFFER, this._positionBuffer); + this._ctx.vertexAttribPointer( + this._programInfo.attribs.vertexPosition, + 3, + this._ctx.FLOAT, + false, + 0, + 0); + this._ctx.enableVertexAttribArray(this._programInfo.attribs.vertexPosition); + + // Set the shader uniforms + this.includePerspectiveMatrix && this._ctx.uniformMatrix4fv( this._programInfo.uniforms.projectionMatrix, false, this.perspectiveMatrix); + this.includeModelViewMatrix && this._ctx.uniformMatrix4fv( this._programInfo.uniforms.modelViewMatrix, false, this.modelViewMatrix); + + this._ctx.drawArrays(this._ctx.TRIANGLE_STRIP, 0, 4); + } + + + /** + * Getters and setters + */ + + /** + * The default webGL parameters to be used for the program. + * This is read only and should only be overridden as a part of a subclass. + * + * @readonly + * @type {object} + * @default { alpha: true } + */ + get webgl_params() { + return { alpha: true }; + } + + /** + * (getter/setter) Whether the element should include styling as a part of + * its rendition. + * + * @type {boolean} + * @default true + */ + set styleElement(value) { + this._styleElement = value === true; + if(this._styleElement === false && this._el) { + this._el.style.width = ''; + this._el.style.height = ''; + } + } + get styleElement() { + return this._styleElement !== false; + } + + /** + * (getter/setter) startTime. This is a value to begin the `u_time` + * unform at. This is here in case you want `u_time` to begin at a + * specific value other than 0. + * + * @type {number} + * @default 0 + */ + set startTime(value) { + if(!isNaN(value)) { + this._startTime = value; + } + } + get startTime() { + return this._startTime || 0; + } + + /** + * (getter/setter) time. This is the time that the program currently + * sits at. By default this value is set as a part of the run loop + * however this is a public property so that we can specify time + * for rendition outside of the run loop. + * + * @type {number} + * @default 0 + */ + set time(value) { + if(!isNaN(value)) { + this._time = value; + } + } + get time() { + return this._time || 0; + } + + /** + * (getter/setter) includePerspectiveMatrix. This determines whether the + * perspecive matrix is included in the program. This doesn't really make + * a difference right now, but this is here to provide future interoperability. + * + * @type {boolean} + * @default false + */ + set includePerspectiveMatrix(value) { + this._includePerspectiveMatrix = value === true; + } + get includePerspectiveMatrix() { + return this._includePerspectiveMatrix === true; + } + + /** + * (getter/setter) includeModelViewMatrix. This determines whether the + * model view matrix is included in the program. This doesn't really make + * a difference right now, but this is here to provide future interoperability. + * + * @type {boolean} + * @default false + */ + set includeModelViewMatrix(value) { + this._includeModelViewMatrix = value === true; + } + get includeModelViewMatrix() { + return this._includeModelViewMatrix === true; + } + + /** + * (getter/setter) textures. The array of textures to initialise into the program. + * + * @private + * @type {array} + * @default [] + */ + set textures(value) { + if(value instanceof Array) { + this._textures = value; + } + } + get textures() { + return this._textures || []; + } + + /** + * (getter/setter) clearing. Specifies whether the program should clear the screen + * before drawing anew. + * + * @type {boolean} + * @default false + */ + set clearing(value) { + this._clearing = value === true; + } + get clearing() { + return this._clearing === true; + } + + /** + * (getter/setter) running. Specifies whether the programming is running. Setting + * this to true will create a RaF loop which will call the run function. + * + * @type {boolean} + * @default false + */ + set running(value) { + if(!this.running && value === true) { + + this._then = Date.now(); + + requestAnimationFrame(this.run); + } + this._running = value === true; + } + get running() { + return this._running === true; + } + + set frameRate(value) { + if(!isNaN(value)) this._frameRate = 1000 / value; + } + get frameRate() { + return this._frameRate || null; + } + + /** + * (getter/setter) pxratio. The 1-dimensional pixel ratio of the application. + * This should be used either for making a program look good on high density + * screens or for raming down pixel density for performance. + * + * @type {number} + * @default 1 + */ + set pxratio(value) { + if(value > 0) this._pxratio = value; + } + get pxratio() { + return this._pxratio || 1; + } + + /** + * (getter/setter) perspectiveMatrix. Calculate a perspective matrix, a + * special matrix that is used to simulate the distortion of perspective in + * a camera. Our field of view is 45 degrees, with a width/height ratio + * that matches the display size of the canvas and we only want to see + * objects between 0.1 units and 100 units away from the camera. + * + * @readonly + * @type {mat4} + */ + get perspectiveMatrix() { + const fieldOfView = 45 * Math.PI / 180; // in radians + const aspect = this._size.w / this._size.h; + const zNear = 0.1; + const zFar = 100.0; + const projectionMatrix = mat4.create(); + // note: glmatrix.js always has the first argument + // as the destination to receive the result. + mat4.perspective(projectionMatrix, + fieldOfView, + aspect, + zNear, + zFar); + + return projectionMatrix; + } + + /** + * (getter/setter) perspectiveMatrix. Calculate a model view matrix. + * + * @readonly + * @type {mat4} + */ + get modelViewMatrix() { + // Set the drawing position to the "identity" point, which is + // the center of the scene. + const modelViewMatrix = mat4.create(); + + // Now move the drawing position a bit to where we want to + // start drawing the square. + mat4.translate(modelViewMatrix, // destination matrix + modelViewMatrix, // matrix to translate + [-0.0, 0.0, -1.]); // amount to translate + + return modelViewMatrix; + } + + set onRun(runMethod) { + if(typeof runMethod == 'function') { + this._onRun = runMethod.bind(this); + } + } + get onRun() { + return this._onRun; + } + + get context() { + return this._ctx || null; + } + + /** + * Static Methods + */ + + /** + * Create a shader of a given type given a context, type and source. + * + * @static + * @param {WebGLContext} ctx The context under which to create the shader + * @param {WebGLShaderType} type The shader type, vertex or fragment + * @param {string} source The shader source. + * @return {WebGLShader} The created shader + */ + static createShaderOfType(ctx, type, source) { + const shader = ctx.createShader(type); + ctx.shaderSource(shader, source); + ctx.compileShader(shader); + + if (!ctx.getShaderParameter(shader, ctx.COMPILE_STATUS)) { + console.log('An error occurred compiling the shaders: ' + ctx.getShaderInfoLog(shader)); + ctx.deleteShader(shader); + return null; + } + + return shader; + } +} + +WTCGL.TYPE_INT = 0; +WTCGL.TYPE_FLOAT = 1; +WTCGL.TYPE_V2 = 2; +WTCGL.TYPE_V3 = 3; +WTCGL.TYPE_V4 = 4; +WTCGL.TYPE_BOOL = 5; + +WTCGL.IMAGETYPE_REGULAR = 0; +WTCGL.IMAGETYPE_TILE = 1; +WTCGL.IMAGETYPE_MIRROR = 2; + +WTCGL.TEXTYPE_FLOAT = 0; +WTCGL.TEXTYPE_UNSIGNED_BYTE = 1; +WTCGL.TEXTYPE_HALF_FLOAT_OES = 2; \ No newline at end of file diff --git a/blob-study/dist/index.html b/blob-study/dist/index.html new file mode 100644 index 0000000..43a3890 --- /dev/null +++ b/blob-study/dist/index.html @@ -0,0 +1,219 @@ + + + + + CodePen - Blob study + + + + + + + + + + + + + + diff --git a/blob-study/dist/script.js b/blob-study/dist/script.js new file mode 100644 index 0000000..9cc346e --- /dev/null +++ b/blob-study/dist/script.js @@ -0,0 +1,916 @@ +/** + * A basic Web GL class. This provides a very basic setup for GLSL shader code. + * Currently it doesn't support anything except for clip-space 3d, but this was + * done so that we could start writing fragments right out of the gate. My + * Intention is to update it with particle and polygonal 3d support later on. + * + * @class WTCGL + * @author Liam Egan + * @version 0.0.8 + * @created Jan 16, 2019 + */ +class WTCGL { + + /** + * The WTCGL Class constructor. If construction of the webGL context fails + * for any reason this will return null. + * + * @TODO make the dimension properties properly optional + * @TODO provide the ability to allow for programmable buffers + * + * @constructor + * @param {HTMLElement} el The canvas element to use as the root + * @param {string} vertexShaderSource The vertex shader source + * @param {string} fragmentShaderSource The fragment shader source + * @param {number} [width] The width of the webGL context. This will default to the canvas dimensions + * @param {number} [height] The height of the webGL context. This will default to the canvas dimensions + * @param {number} [pxratio=1] The pixel aspect ratio of the canvas + * @param {boolean} [styleElement] A boolean indicating whether to apply a style property to the canvas (resizing the canvas by the inverse of the pixel ratio) + * @param {boolean} [webgl2] A boolean indicating whether to try to create a webgl2 context instead of a regulart context + */ + constructor(el, vertexShaderSource, fragmentShaderSource, width, height, pxratio, styleElement, webgl2) { + this.run = this.run.bind(this); + + this._onRun = () => {}; + + // Destructure if an object is aprovided instead a series of parameters + if (el instanceof Object && el.el) { + ({ el, vertexShaderSource, fragmentShaderSource, width, height, pxratio, webgl2, styleElement } = el); + } + + // If the HTML element isn't a canvas, return null + if (!el instanceof HTMLElement || el.nodeName.toLowerCase() !== 'canvas') { + console.log('Provided element should be a canvas element'); + return null; + } + + this._el = el; + // The context should be either webgl2, webgl or experimental-webgl + if (webgl2 === true) { + this.isWebgl2 = true; + this._ctx = this._el.getContext("webgl2", this.webgl_params) || this._el.getContext("webgl", this.webgl_params) || this._el.getContext("experimental-webgl", this.webgl_params); + } else { + this.isWebgl2 = false; + this._ctx = this._el.getContext("webgl", this.webgl_params) || this._el.getContext("experimental-webgl", this.webgl_params); + } + + // Set up the extensions + this._ctx.getExtension('OES_standard_derivatives'); + this._ctx.getExtension('EXT_shader_texture_lod'); + this._ctx.getExtension('OES_texture_float'); + this._ctx.getExtension('WEBGL_color_buffer_float'); + this._ctx.getExtension('OES_texture_float_linear'); + this._ctx.getExtension('EXT_color_buffer_float'); + + // We can't make the context so return an error + if (!this._ctx) { + console.log('Browser doesn\'t support WebGL '); + return null; + } + + // Create the shaders + this._vertexShader = WTCGL.createShaderOfType(this._ctx, this._ctx.VERTEX_SHADER, vertexShaderSource); + this._fragmentShader = WTCGL.createShaderOfType(this._ctx, this._ctx.FRAGMENT_SHADER, fragmentShaderSource); + + // Create the program and link the shaders + this._program = this._ctx.createProgram(); + this._ctx.attachShader(this._program, this._vertexShader); + this._ctx.attachShader(this._program, this._fragmentShader); + this._ctx.linkProgram(this._program); + + // If we can't set up the params, this means the shaders have failed for some reason + if (!this._ctx.getProgramParameter(this._program, this._ctx.LINK_STATUS)) { + console.log('Unable to initialize the shader program: ' + this._ctx.getProgramInfoLog(this._program)); + return null; + } + + // Initialise the vertex buffers + this.initBuffers([ + -1.0, 1.0, -1., + 1.0, 1.0, -1., + -1.0, -1.0, -1., + 1.0, -1.0, -1.]); + + + // Initialise the frame buffers + this.frameBuffers = []; + + // The program information object. This is essentially a state machine for the webGL instance + this._programInfo = { + attribs: { + vertexPosition: this._ctx.getAttribLocation(this._program, 'a_position') }, + + uniforms: { + projectionMatrix: this._ctx.getUniformLocation(this._program, 'u_projectionMatrix'), + modelViewMatrix: this._ctx.getUniformLocation(this._program, 'u_modelViewMatrix'), + resolution: this._ctx.getUniformLocation(this._program, 'u_resolution'), + time: this._ctx.getUniformLocation(this._program, 'u_time') } }; + + + + // Tell WebGL to use our program when drawing + this._ctx.useProgram(this._program); + + this.pxratio = pxratio; + + this.styleElement = styleElement !== true; + + this.resize(width, height); + } + + + /** + * Public methods + */ + + addFrameBuffer(w, h, tiling = 0, buffertype = 0) { + // create to render to + const gl = this._ctx; + const targetTextureWidth = w * this.pxratio; + const targetTextureHeight = h * this.pxratio; + const targetTexture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, targetTexture); + { + // define size and format of level 0 + const level = 0; + let internalFormat = gl.RGBA; + const border = 0; + let format = gl.RGBA; + let t; + if (buffertype & WTCGL.TEXTYPE_FLOAT) { + const e = gl.getExtension('OES_texture_float'); + window.extension = e; + t = e.FLOAT; + // internalFormat = gl.RGBA32F; + } else if (buffertype & WTCGL.TEXTYPE_HALF_FLOAT_OES) { + // t = gl.renderer.isWebgl2 ? e.HALF_FLOAT : e.HALF_FLOAT_OES; + // gl.renderer.extensions['OES_texture_half_float'] ? gl.renderer.extensions['OES_texture_half_float'].HALF_FLOAT_OES : + // gl.UNSIGNED_BYTE; + const e = gl.getExtension('OES_texture_half_float'); + t = this.isWebgl2 ? gl.HALF_FLOAT : e.HALF_FLOAT_OES; + // format = gl.RGBA; + if (this.isWebgl2) { + internalFormat = gl.RGBA16F; + } + // internalFormat = gl.RGB32F; + // format = gl.RGB32F; + // window.gl = gl + // t = e.HALF_FLOAT_OES; + } else { + t = gl.UNSIGNED_BYTE; + } + const type = t; + const data = null; + gl.texImage2D(gl.TEXTURE_2D, level, internalFormat, + targetTextureWidth, targetTextureHeight, border, + format, type, data); + // gl.generateMipmap(gl.TEXTURE_2D); + + // set the filtering so we don't need mips + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + + // Set the parameters based on the passed type + if (tiling === WTCGL.IMAGETYPE_TILE) { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } else if (tiling === WTCGL.IMAGETYPE_MIRROR) { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.MIRRORED_REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.MIRRORED_REPEAT); + } else if (tiling === WTCGL.IMAGETYPE_REGULAR) { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + } + + // Create and bind the framebuffer + const fb = gl.createFramebuffer(); + gl.bindFramebuffer(gl.FRAMEBUFFER, fb); + + // attach the texture as the first color attachment + const attachmentPoint = gl.COLOR_ATTACHMENT0; + const level = 0; + gl.framebufferTexture2D(gl.FRAMEBUFFER, attachmentPoint, gl.TEXTURE_2D, targetTexture, level); + + return { + w: w * this.pxratio, + h: h * this.pxratio, + fb: fb, + frameTexture: targetTexture }; + + } + + + /** + * Resizes the canvas to a specified width and height, respecting the pixel ratio + * + * @param {number} w The width of the canvas + * @param {number} h The height of the canvas + * @return {Void} + */ + resize(w, h) { + this.width = w; + this.height = h; + this._el.width = w * this.pxratio; + this._el.height = h * this.pxratio; + this._size = [w * this.pxratio, h * this.pxratio]; + if (this.styleElement) { + this._el.style.width = w + 'px'; + this._el.style.height = h + 'px'; + } + + this._ctx.viewportWidth = w * this.pxratio; + this._ctx.viewportHeight = h * this.pxratio; + + this._ctx.uniform2fv(this._programInfo.uniforms.resolution, this._size); + + this.initBuffers(this._positions); + } + + /** + * Initialise a provided vertex buffer + * + * @param {array} positions The vertex positions to initialise + * @return {Void} + */ + initBuffers(positions) { + this._positions = positions; + this._positionBuffer = this._ctx.createBuffer(); + + this._ctx.bindBuffer(this._ctx.ARRAY_BUFFER, this._positionBuffer); + + this._ctx.bufferData(this._ctx.ARRAY_BUFFER, + new Float32Array(positions), + this._ctx.STATIC_DRAW); + } + + /** + * Add a uniform to the program. At this time the following types are supported: + * - Float - WTCGL.TYPE_FLOAT + * - Vector 2 - WTCGL.TYPE_V2 + * - Vector 3 - WTCGL.TYPE_V3 + * - Vector 4 - WTCGL.TYPE_V4 + * + * @param {string} name The name of the uniform. N.B. your name will be prepended with a `u_` in your shaders. So providing a name of `foo` here will result in a uniform named `u_foo` + * @param {WTCGL.UNIFORM_TYPE} type The unfiform type + * @param {number|array} value The unfiform value. The type depends on the uniform type being created + * @return {WebGLUniformLocation} The uniform location for later reference + */ + addUniform(name, type, value) { + let uniform = this._programInfo.uniforms[name]; + uniform = this._ctx.getUniformLocation(this._program, `u_${name}`); + switch (type) { + case WTCGL.TYPE_INT: + if (!isNaN(value)) this._ctx.uniform1i(uniform, value); + break; + case WTCGL.TYPE_FLOAT: + if (!isNaN(value)) this._ctx.uniform1f(uniform, value); + break; + case WTCGL.TYPE_V2: + if (value instanceof Array && value.length === 2.) this._ctx.uniform2fv(uniform, value); + break; + case WTCGL.TYPE_V3: + if (value instanceof Array && value.length === 3.) this._ctx.uniform3fv(uniform, value); + break; + case WTCGL.TYPE_V4: + if (value instanceof Array && value.length === 4.) this._ctx.uniform4fv(uniform, value); + break; + case WTCGL.TYPE_BOOL: + if (!isNaN(value)) this._ctx.uniform1i(uniform, value); + break;} + + this._programInfo.uniforms[name] = uniform; + return uniform; + } + + /** + * Adds a texture to the program and links it to a named uniform. Providing the type changes the tiling properties of the texture. Possible values for type: + * - WTCGL.IMAGETYPE_REGULAR - No tiling, clamp to edges and doesn't need to be power of 2. + * - WTCGL.IMAGETYPE_TILE - full x and y tiling, needs to be power of 2. + * - WTCGL.IMAGETYPE_MIRROR - mirror tiling, needs to be power of 2. + * + * @public + * @param {string} name The name of the uniform. N.B. your name will be prepended with a `u_` in your shaders. So providing a name of `foo` here will result in a uniform named `u_foo` + * @param {WTCGL.TYPE_IMAGETYPE} type The type of texture to create. This is basically the tiling behaviour of the texture as described above + * @param {Image} image The image object to add to the texture + * @return {WebGLTexture} The texture object + */ + addTexture(name, type, image, liveUpdate = false) { + + var texture = this._ctx.createTexture(); + this._ctx.pixelStorei(this._ctx.UNPACK_FLIP_Y_WEBGL, true); + this._ctx.bindTexture(this._ctx.TEXTURE_2D, texture); + + // this._ctx.generateMipmap(this._ctx.TEXTURE_2D); + + // Set the parameters based on the passed type + if (type === WTCGL.IMAGETYPE_MIRROR) { + this._ctx.texParameteri(this._ctx.TEXTURE_2D, this._ctx.TEXTURE_WRAP_S, this._ctx.MIRRORED_REPEAT); + this._ctx.texParameteri(this._ctx.TEXTURE_2D, this._ctx.TEXTURE_WRAP_T, this._ctx.MIRRORED_REPEAT); + } else if (type === WTCGL.IMAGETYPE_REGULAR) { + this._ctx.texParameteri(this._ctx.TEXTURE_2D, this._ctx.TEXTURE_WRAP_S, this._ctx.CLAMP_TO_EDGE); + this._ctx.texParameteri(this._ctx.TEXTURE_2D, this._ctx.TEXTURE_WRAP_T, this._ctx.CLAMP_TO_EDGE); + } + + this._ctx.texParameteri(this._ctx.TEXTURE_2D, this._ctx.TEXTURE_MIN_FILTER, this._ctx.LINEAR); + // this._ctx.texParameteri(this._ctx.TEXTURE_2D, this._ctx.TEXTURE_MAG_FILTER, this._ctx.LINEAR); + + // Upload the image into the texture. + this._ctx.texImage2D(this._ctx.TEXTURE_2D, 0, this._ctx.RGBA, this._ctx.RGBA, this._ctx.UNSIGNED_BYTE, image); + + // add the texture to the array of textures. + this.pushTexture(name, texture, image, this._ctx.TEXTURE_2D, liveUpdate); + + + return texture; + } + + pushTexture(name, texture, image, target, liveUpdate = false) { + let textures = this.textures; + + textures.push({ name: name, tex: texture, liveUpdate: liveUpdate, image: image, target: target }); + + // Finally set the this.textures (this is just to get around the funnyness of default getters) + this.textures = textures; + } + + /** + * Updates a texture location for a given WebGLTexture with an image + * + * @param {WebGLTexture} texture The texture location to update + * @param {Image} image The image object to add to the texture + * @return {Void} + */ + updateTexture(texture, image, name) { + + let uniform = this._ctx.getUniformLocation(this._program, `u_${name}`); + // Set the texture unit to the uniform + this._ctx.uniform1i(uniform, 0); + this._ctx.activeTexture(this._ctx.TEXTURE0); + + this._ctx.bindTexture(this._ctx.TEXTURE_2D, texture); + // Upload the image into the texture. + this._ctx.texImage2D(this._ctx.TEXTURE_2D, 0, this._ctx.RGBA, this._ctx.RGBA, this._ctx.UNSIGNED_BYTE, image); + } + + /** + * Initialise texture locations in the program + * + * @return {Void} + */ + initTextures() { + for (let i = 0; i < this.textures.length; i++) { + let name = this.textures[i].name; + let uniform = this._programInfo.uniforms[name]; + uniform = this._ctx.getUniformLocation(this._program, `u_${name}`); + + // Set the texture unit to the uniform + this._ctx.uniform1i(uniform, i); + + // find the active texture based on the index + this._ctx.activeTexture(this._ctx[`TEXTURE${i}`]); + + // Finally, bind the texture + this._ctx.bindTexture(this.textures[i].target, this.textures[i].tex); + } + } + + /** + * The run loop. This function is run as a part of a RaF and updates the internal + * time uniform (`u_time`). + * + * @param {number} delta The delta time provided by the RaF loop + * @return {Void} + */ + run(delta) { + this.running && requestAnimationFrame(this.run); + + const runFunction = () => { + this.time = this.startTime + delta * .0002; + this.onRun(delta); + this.render(); + }; + + if (this.frameRate) { + let now = Date.now(); + let elapsed = now - this._then; + + if (elapsed > this.frameRate) { + this._then = now - elapsed % this.frameRate; + + runFunction(); + } + } else { + runFunction(); + } + } + + /** + * Render the program + * + * @return {Void} + */ + render(buffer = {}) { + this._ctx.bindFramebuffer(this._ctx.FRAMEBUFFER, buffer.fb || null); + // Update the time uniform + this._ctx.uniform1f(this._programInfo.uniforms.time, this.time); + + this.textures.forEach(textureInfo => { + if (textureInfo.liveUpdate === true) { + this.updateTexture(textureInfo.tex, textureInfo.image, textureInfo.name); + } + }); + + this._ctx.viewport(0, 0, buffer.w || this._ctx.viewportWidth, buffer.h || this._ctx.viewportHeight); + if (this.clearing) { + this._ctx.clearColor(1.0, 0.0, 0.0, 0.0); + // this._ctx.clearDepth(1.0); + // this._ctx.enable(this._ctx.DEPTH_TEST); + // this._ctx.depthFunc(this._ctx.LEQUAL); + + this._ctx.blendFunc(this._ctx.SRC_ALPHA, this._ctx.ONE_MINUS_SRC_ALPHA); + + this._ctx.clear(this._ctx.COLOR_BUFFER_BIT); + } + + this._ctx.bindBuffer(this._ctx.ARRAY_BUFFER, this._positionBuffer); + this._ctx.vertexAttribPointer( + this._programInfo.attribs.vertexPosition, + 3, + this._ctx.FLOAT, + false, + 0, + 0); + this._ctx.enableVertexAttribArray(this._programInfo.attribs.vertexPosition); + + // Set the shader uniforms + this.includePerspectiveMatrix && this._ctx.uniformMatrix4fv(this._programInfo.uniforms.projectionMatrix, false, this.perspectiveMatrix); + this.includeModelViewMatrix && this._ctx.uniformMatrix4fv(this._programInfo.uniforms.modelViewMatrix, false, this.modelViewMatrix); + + this._ctx.drawArrays(this._ctx.TRIANGLE_STRIP, 0, 4); + } + + + /** + * Getters and setters + */ + + /** + * The default webGL parameters to be used for the program. + * This is read only and should only be overridden as a part of a subclass. + * + * @readonly + * @type {object} + * @default { alpha: true } + */ + get webgl_params() { + return { alpha: true }; + } + + /** + * (getter/setter) Whether the element should include styling as a part of + * its rendition. + * + * @type {boolean} + * @default true + */ + set styleElement(value) { + this._styleElement = value === true; + if (this._styleElement === false && this._el) { + this._el.style.width = ''; + this._el.style.height = ''; + } + } + get styleElement() { + return this._styleElement !== false; + } + + /** + * (getter/setter) startTime. This is a value to begin the `u_time` + * unform at. This is here in case you want `u_time` to begin at a + * specific value other than 0. + * + * @type {number} + * @default 0 + */ + set startTime(value) { + if (!isNaN(value)) { + this._startTime = value; + } + } + get startTime() { + return this._startTime || 0; + } + + /** + * (getter/setter) time. This is the time that the program currently + * sits at. By default this value is set as a part of the run loop + * however this is a public property so that we can specify time + * for rendition outside of the run loop. + * + * @type {number} + * @default 0 + */ + set time(value) { + if (!isNaN(value)) { + this._time = value; + } + } + get time() { + return this._time || 0; + } + + /** + * (getter/setter) includePerspectiveMatrix. This determines whether the + * perspecive matrix is included in the program. This doesn't really make + * a difference right now, but this is here to provide future interoperability. + * + * @type {boolean} + * @default false + */ + set includePerspectiveMatrix(value) { + this._includePerspectiveMatrix = value === true; + } + get includePerspectiveMatrix() { + return this._includePerspectiveMatrix === true; + } + + /** + * (getter/setter) includeModelViewMatrix. This determines whether the + * model view matrix is included in the program. This doesn't really make + * a difference right now, but this is here to provide future interoperability. + * + * @type {boolean} + * @default false + */ + set includeModelViewMatrix(value) { + this._includeModelViewMatrix = value === true; + } + get includeModelViewMatrix() { + return this._includeModelViewMatrix === true; + } + + /** + * (getter/setter) textures. The array of textures to initialise into the program. + * + * @private + * @type {array} + * @default [] + */ + set textures(value) { + if (value instanceof Array) { + this._textures = value; + } + } + get textures() { + return this._textures || []; + } + + /** + * (getter/setter) clearing. Specifies whether the program should clear the screen + * before drawing anew. + * + * @type {boolean} + * @default false + */ + set clearing(value) { + this._clearing = value === true; + } + get clearing() { + return this._clearing === true; + } + + /** + * (getter/setter) running. Specifies whether the programming is running. Setting + * this to true will create a RaF loop which will call the run function. + * + * @type {boolean} + * @default false + */ + set running(value) { + if (!this.running && value === true) { + + this._then = Date.now(); + + requestAnimationFrame(this.run); + } + this._running = value === true; + } + get running() { + return this._running === true; + } + + set frameRate(value) { + if (!isNaN(value)) this._frameRate = 1000 / value; + } + get frameRate() { + return this._frameRate || null; + } + + /** + * (getter/setter) pxratio. The 1-dimensional pixel ratio of the application. + * This should be used either for making a program look good on high density + * screens or for raming down pixel density for performance. + * + * @type {number} + * @default 1 + */ + set pxratio(value) { + if (value > 0) this._pxratio = value; + } + get pxratio() { + return this._pxratio || 1; + } + + /** + * (getter/setter) perspectiveMatrix. Calculate a perspective matrix, a + * special matrix that is used to simulate the distortion of perspective in + * a camera. Our field of view is 45 degrees, with a width/height ratio + * that matches the display size of the canvas and we only want to see + * objects between 0.1 units and 100 units away from the camera. + * + * @readonly + * @type {mat4} + */ + get perspectiveMatrix() { + const fieldOfView = 45 * Math.PI / 180; // in radians + const aspect = this._size.w / this._size.h; + const zNear = 0.1; + const zFar = 100.0; + const projectionMatrix = mat4.create(); + // note: glmatrix.js always has the first argument + // as the destination to receive the result. + mat4.perspective(projectionMatrix, + fieldOfView, + aspect, + zNear, + zFar); + + return projectionMatrix; + } + + /** + * (getter/setter) perspectiveMatrix. Calculate a model view matrix. + * + * @readonly + * @type {mat4} + */ + get modelViewMatrix() { + // Set the drawing position to the "identity" point, which is + // the center of the scene. + const modelViewMatrix = mat4.create(); + + // Now move the drawing position a bit to where we want to + // start drawing the square. + mat4.translate(modelViewMatrix, // destination matrix + modelViewMatrix, // matrix to translate + [-0.0, 0.0, -1.]); // amount to translate + + return modelViewMatrix; + } + + set onRun(runMethod) { + if (typeof runMethod == 'function') { + this._onRun = runMethod.bind(this); + } + } + get onRun() { + return this._onRun; + } + + get context() { + return this._ctx || null; + } + + /** + * Static Methods + */ + + /** + * Create a shader of a given type given a context, type and source. + * + * @static + * @param {WebGLContext} ctx The context under which to create the shader + * @param {WebGLShaderType} type The shader type, vertex or fragment + * @param {string} source The shader source. + * @return {WebGLShader} The created shader + */ + static createShaderOfType(ctx, type, source) { + const shader = ctx.createShader(type); + ctx.shaderSource(shader, source); + ctx.compileShader(shader); + + if (!ctx.getShaderParameter(shader, ctx.COMPILE_STATUS)) { + console.log('An error occurred compiling the shaders: ' + ctx.getShaderInfoLog(shader)); + ctx.deleteShader(shader); + return null; + } + + return shader; + }} + + +WTCGL.TYPE_INT = 0; +WTCGL.TYPE_FLOAT = 1; +WTCGL.TYPE_V2 = 2; +WTCGL.TYPE_V3 = 3; +WTCGL.TYPE_V4 = 4; +WTCGL.TYPE_BOOL = 5; + +WTCGL.IMAGETYPE_REGULAR = 0; +WTCGL.IMAGETYPE_TILE = 1; +WTCGL.IMAGETYPE_MIRROR = 2; + +WTCGL.TEXTYPE_FLOAT = 0; +WTCGL.TEXTYPE_UNSIGNED_BYTE = 1; +WTCGL.TEXTYPE_HALF_FLOAT_OES = 2; +import * as dat from 'https://cdn.skypack.dev/dat.gui'; +console.clear(); + +const twodWebGL = new WTCGL( +document.querySelector('canvas#webgl'), +document.querySelector('script#vertexShader').textContent, +document.querySelector('script#fragmentShader').textContent, +window.innerWidth, +window.innerHeight, +window.devicePixelRatio); + + +window.addEventListener('resize', () => { + twodWebGL.resize(window.innerWidth, window.innerHeight); +}); + + + +// track mouse move +let mousepos = [0, 0]; +const u_mousepos = twodWebGL.addUniform('mouse', WTCGL.TYPE_V2, mousepos); +window.addEventListener('pointermove', e => { + let ratio = window.innerHeight / window.innerWidth; + if (window.innerHeight > window.innerWidth) { + mousepos[0] = (e.pageX - window.innerWidth / 2) / window.innerWidth; + mousepos[1] = (e.pageY - window.innerHeight / 2) / window.innerHeight * -1 * ratio; + } else { + mousepos[0] = (e.pageX - window.innerWidth / 2) / window.innerWidth / ratio; + mousepos[1] = (e.pageY - window.innerHeight / 2) / window.innerHeight * -1; + } + twodWebGL.addUniform('mouse', WTCGL.TYPE_V2, mousepos); +}); + +const uniforms = { + octaves: { + v: 3, + max: 12, + min: 0, + type: WTCGL.TYPE_INT }, + sceneWeight: { + v: 1, + max: 10, + min: .01, + type: WTCGL.TYPE_FLOAT }, + maxIterations: { + v: 256, + max: 512, + min: 2, + type: WTCGL.TYPE_INT }, + internalStep: { + v: .003, + max: 1, + min: 0.0001, + type: WTCGL.TYPE_FLOAT }, + stopThreshold: { + v: .01, + max: .1, + min: .0001, + type: WTCGL.TYPE_FLOAT }, + stepScale: { + v: .8, + max: 2., + min: .1, + type: WTCGL.TYPE_FLOAT }, + clipBGColour: { + v: '#000000', + type: 'COLOUR' }, + blobColour: { + v: '#FFFFFF', + type: 'COLOUR' }, + lightColour: { + v: '#3F66FF', + type: 'COLOUR' }, + lightStrength: { + v: 2, + min: .1, + max: 5, + type: WTCGL.TYPE_FLOAT } }; + + + +const hexToGL = hex => { + const components = /^#?([A-F0-9]{2})([A-F0-9]{2})([A-F0-9]{2})/i.exec(hex); + if (components && components.length === 4) { + const r = Math.round(`0x${components[1]}` / 255 * 1000) / 1000; + const g = Math.round(`0x${components[2]}` / 255 * 1000) / 1000; + const b = Math.round(`0x${components[3]}` / 255 * 1000) / 1000; + return [r, g, b]; + } else { + return []; + } +}; +const updateUniform = (e, n) => { + const prop = uniforms[e]; + if (prop.type === 'COLOUR') { + const c = hexToGL(n); + twodWebGL.addUniform(e, WTCGL.TYPE_V3, c); + } else { + twodWebGL.addUniform(e, prop.type, n); + } +}; + +// const updateUniform(name, value) => { + +// } + +const gui = new dat.GUI(); +Object.entries(uniforms).forEach((u, v) => { + console.log(u); + const prop = uniforms[u[0]]; + if (prop.type === 'COLOUR') { + const c = hexToGL(prop.v); + console.log(c); + twodWebGL.addUniform(u[0], WTCGL.TYPE_V3, c); + } else { + twodWebGL.addUniform(u[0], prop.type, prop.v); + } + if (prop.type === 'COLOUR') { + gui.addColor(prop, 'v').name(u[0]).onChange(v => {updateUniform(u[0], v);}); + } else { + gui.add(prop, 'v', prop.min, prop.max).name(u[0]).onChange(v => {updateUniform(u[0], v);}); + } +}); + + + + + + + + + +// Load all our textures. We only initiate the instance once all images are loaded. +const textures = [ +{ + name: 'noise', + url: 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/982762/noise.png', + type: WTCGL.IMAGETYPE_TILE, + img: null }]; + + +const loadImage = function (imageObject) { + let img = document.createElement('img'); + img.crossOrigin = "anonymous"; + + return new Promise((resolve, reject) => { + img.addEventListener('load', e => { + imageObject.img = img; + resolve(imageObject); + }); + img.addEventListener('error', e => { + reject(e); + }); + img.src = imageObject.url; + }); +}; +const loadTextures = function (textures) { + return new Promise((resolve, reject) => { + const loadTexture = pointer => { + if (pointer >= textures.length || pointer > 10) { + resolve(textures); + return; + }; + const imageObject = textures[pointer]; + + const p = loadImage(imageObject); + p.then( + result => { + twodWebGL.addTexture(result.name, result.type, result.img); + }, + error => { + console.log('error', error); + }).finally(e => { + loadTexture(pointer + 1); + }); + }; + loadTexture(0); + }); + +}; + +loadTextures(textures).then( +result => { + twodWebGL.initTextures(); + // twodWebGL.render(); + twodWebGL.running = true; +}, +error => { + console.log('error'); +}); \ No newline at end of file diff --git a/blob-study/dist/style.css b/blob-study/dist/style.css new file mode 100644 index 0000000..c013696 --- /dev/null +++ b/blob-study/dist/style.css @@ -0,0 +1,7 @@ +body { + margin:0; +} + +canvas { + position: fixed; +} \ No newline at end of file diff --git a/blob-study/license.txt b/blob-study/license.txt new file mode 100644 index 0000000..fb5c1bf --- /dev/null +++ b/blob-study/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Liam Egan (https://codepen.io/shubniggurath/pen/dyOKjLG) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/blob-study/src/apxlmx.js b/blob-study/src/apxlmx.js new file mode 100644 index 0000000..2b29a76 --- /dev/null +++ b/blob-study/src/apxlmx.js @@ -0,0 +1,726 @@ +/** + * A basic Web GL class. This provides a very basic setup for GLSL shader code. + * Currently it doesn't support anything except for clip-space 3d, but this was + * done so that we could start writing fragments right out of the gate. My + * Intention is to update it with particle and polygonal 3d support later on. + * + * @class WTCGL + * @author Liam Egan + * @version 0.0.8 + * @created Jan 16, 2019 + */ +class WTCGL { + + /** + * The WTCGL Class constructor. If construction of the webGL context fails + * for any reason this will return null. + * + * @TODO make the dimension properties properly optional + * @TODO provide the ability to allow for programmable buffers + * + * @constructor + * @param {HTMLElement} el The canvas element to use as the root + * @param {string} vertexShaderSource The vertex shader source + * @param {string} fragmentShaderSource The fragment shader source + * @param {number} [width] The width of the webGL context. This will default to the canvas dimensions + * @param {number} [height] The height of the webGL context. This will default to the canvas dimensions + * @param {number} [pxratio=1] The pixel aspect ratio of the canvas + * @param {boolean} [styleElement] A boolean indicating whether to apply a style property to the canvas (resizing the canvas by the inverse of the pixel ratio) + * @param {boolean} [webgl2] A boolean indicating whether to try to create a webgl2 context instead of a regulart context + */ + constructor(el, vertexShaderSource, fragmentShaderSource, width, height, pxratio, styleElement, webgl2) { + this.run = this.run.bind(this); + + this._onRun = ()=>{}; + + // Destructure if an object is aprovided instead a series of parameters + if(el instanceof Object && el.el) { + ({el, vertexShaderSource, fragmentShaderSource, width, height, pxratio, webgl2, styleElement} = el); + } + + // If the HTML element isn't a canvas, return null + if(!el instanceof HTMLElement || el.nodeName.toLowerCase() !== 'canvas') { + console.log('Provided element should be a canvas element'); + return null; + } + + this._el = el; + // The context should be either webgl2, webgl or experimental-webgl + if(webgl2 === true) { + this.isWebgl2 = true; + this._ctx = this._el.getContext("webgl2", this.webgl_params) || this._el.getContext("webgl", this.webgl_params) || this._el.getContext("experimental-webgl", this.webgl_params); + } else { + this.isWebgl2 = false; + this._ctx = this._el.getContext("webgl", this.webgl_params) || this._el.getContext("experimental-webgl", this.webgl_params); + } + + // Set up the extensions + this._ctx.getExtension('OES_standard_derivatives'); + this._ctx.getExtension('EXT_shader_texture_lod'); + this._ctx.getExtension('OES_texture_float'); + this._ctx.getExtension('WEBGL_color_buffer_float'); + this._ctx.getExtension('OES_texture_float_linear'); + this._ctx.getExtension('EXT_color_buffer_float'); + + // We can't make the context so return an error + if (!this._ctx) { + console.log('Browser doesn\'t support WebGL '); + return null; + } + + // Create the shaders + this._vertexShader = WTCGL.createShaderOfType(this._ctx, this._ctx.VERTEX_SHADER, vertexShaderSource); + this._fragmentShader = WTCGL.createShaderOfType(this._ctx, this._ctx.FRAGMENT_SHADER, fragmentShaderSource); + + // Create the program and link the shaders + this._program = this._ctx.createProgram(); + this._ctx.attachShader(this._program, this._vertexShader); + this._ctx.attachShader(this._program, this._fragmentShader); + this._ctx.linkProgram(this._program); + + // If we can't set up the params, this means the shaders have failed for some reason + if (!this._ctx.getProgramParameter(this._program, this._ctx.LINK_STATUS)) { + console.log('Unable to initialize the shader program: ' + this._ctx.getProgramInfoLog(this._program)); + return null; + } + + // Initialise the vertex buffers + this.initBuffers([ + -1.0, 1.0, -1., + 1.0, 1.0, -1., + -1.0, -1.0, -1., + 1.0, -1.0, -1., + ]); + + // Initialise the frame buffers + this.frameBuffers = []; + + // The program information object. This is essentially a state machine for the webGL instance + this._programInfo = { + attribs: { + vertexPosition: this._ctx.getAttribLocation(this._program, 'a_position'), + }, + uniforms: { + projectionMatrix: this._ctx.getUniformLocation(this._program, 'u_projectionMatrix'), + modelViewMatrix: this._ctx.getUniformLocation(this._program, 'u_modelViewMatrix'), + resolution: this._ctx.getUniformLocation(this._program, 'u_resolution'), + time: this._ctx.getUniformLocation(this._program, 'u_time'), + }, + }; + + // Tell WebGL to use our program when drawing + this._ctx.useProgram(this._program); + + this.pxratio = pxratio; + + this.styleElement = styleElement !== true; + + this.resize(width, height); + } + + + /** + * Public methods + */ + + addFrameBuffer(w, h, tiling = 0, buffertype = 0) { + // create to render to + const gl = this._ctx; + const targetTextureWidth = w * this.pxratio; + const targetTextureHeight = h * this.pxratio; + const targetTexture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, targetTexture); + { + // define size and format of level 0 + const level = 0; + let internalFormat = gl.RGBA; + const border = 0; + let format = gl.RGBA; + let t; + if(buffertype & WTCGL.TEXTYPE_FLOAT) { + const e = gl.getExtension('OES_texture_float'); + window.extension = e; + t = e.FLOAT; + // internalFormat = gl.RGBA32F; + } else if(buffertype & WTCGL.TEXTYPE_HALF_FLOAT_OES) { + // t = gl.renderer.isWebgl2 ? e.HALF_FLOAT : e.HALF_FLOAT_OES; + // gl.renderer.extensions['OES_texture_half_float'] ? gl.renderer.extensions['OES_texture_half_float'].HALF_FLOAT_OES : + // gl.UNSIGNED_BYTE; + const e = gl.getExtension('OES_texture_half_float'); + t = this.isWebgl2 ? gl.HALF_FLOAT : e.HALF_FLOAT_OES; + // format = gl.RGBA; + if(this.isWebgl2) { + internalFormat = gl.RGBA16F; + } + // internalFormat = gl.RGB32F; + // format = gl.RGB32F; + // window.gl = gl + // t = e.HALF_FLOAT_OES; + } else { + t = gl.UNSIGNED_BYTE; + } + const type = t; + const data = null; + gl.texImage2D(gl.TEXTURE_2D, level, internalFormat, + targetTextureWidth, targetTextureHeight, border, + format, type, data); + // gl.generateMipmap(gl.TEXTURE_2D); + + // set the filtering so we don't need mips + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + + // Set the parameters based on the passed type + if(tiling === WTCGL.IMAGETYPE_TILE) { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } else if(tiling === WTCGL.IMAGETYPE_MIRROR) { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.MIRRORED_REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.MIRRORED_REPEAT); + } else if(tiling === WTCGL.IMAGETYPE_REGULAR) { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + } + + // Create and bind the framebuffer + const fb = gl.createFramebuffer(); + gl.bindFramebuffer(gl.FRAMEBUFFER, fb); + + // attach the texture as the first color attachment + const attachmentPoint = gl.COLOR_ATTACHMENT0; + const level = 0; + gl.framebufferTexture2D(gl.FRAMEBUFFER, attachmentPoint, gl.TEXTURE_2D, targetTexture, level); + + return { + w: w * this.pxratio, + h: h * this.pxratio, + fb: fb, + frameTexture: targetTexture + }; + } + + + /** + * Resizes the canvas to a specified width and height, respecting the pixel ratio + * + * @param {number} w The width of the canvas + * @param {number} h The height of the canvas + * @return {Void} + */ + resize(w, h) { + this.width = w; + this.height = h; + this._el.width = w * this.pxratio; + this._el.height = h * this.pxratio; + this._size = [w * this.pxratio, h * this.pxratio]; + if(this.styleElement) { + this._el.style.width = w + 'px'; + this._el.style.height = h + 'px'; + } + + this._ctx.viewportWidth = w * this.pxratio; + this._ctx.viewportHeight = h * this.pxratio; + + this._ctx.uniform2fv( this._programInfo.uniforms.resolution, this._size); + + this.initBuffers(this._positions); + } + + /** + * Initialise a provided vertex buffer + * + * @param {array} positions The vertex positions to initialise + * @return {Void} + */ + initBuffers(positions) { + this._positions = positions; + this._positionBuffer = this._ctx.createBuffer(); + + this._ctx.bindBuffer(this._ctx.ARRAY_BUFFER, this._positionBuffer); + + this._ctx.bufferData(this._ctx.ARRAY_BUFFER, + new Float32Array(positions), + this._ctx.STATIC_DRAW); + } + + /** + * Add a uniform to the program. At this time the following types are supported: + * - Float - WTCGL.TYPE_FLOAT + * - Vector 2 - WTCGL.TYPE_V2 + * - Vector 3 - WTCGL.TYPE_V3 + * - Vector 4 - WTCGL.TYPE_V4 + * + * @param {string} name The name of the uniform. N.B. your name will be prepended with a `u_` in your shaders. So providing a name of `foo` here will result in a uniform named `u_foo` + * @param {WTCGL.UNIFORM_TYPE} type The unfiform type + * @param {number|array} value The unfiform value. The type depends on the uniform type being created + * @return {WebGLUniformLocation} The uniform location for later reference + */ + addUniform(name, type, value) { + let uniform = this._programInfo.uniforms[name]; + uniform = this._ctx.getUniformLocation(this._program, `u_${name}`); + switch(type) { + case WTCGL.TYPE_INT : + if(!isNaN(value)) this._ctx.uniform1i( uniform, value); + break; + case WTCGL.TYPE_FLOAT : + if(!isNaN(value)) this._ctx.uniform1f( uniform, value); + break; + case WTCGL.TYPE_V2 : + if(value instanceof Array && value.length === 2.) this._ctx.uniform2fv( uniform, value); + break; + case WTCGL.TYPE_V3 : + if(value instanceof Array && value.length === 3.) this._ctx.uniform3fv( uniform, value); + break; + case WTCGL.TYPE_V4 : + if(value instanceof Array && value.length === 4.) this._ctx.uniform4fv( uniform, value); + break; + case WTCGL.TYPE_BOOL : + if(!isNaN(value)) this._ctx.uniform1i( uniform, value); + break; + } + this._programInfo.uniforms[name] = uniform; + return uniform; + } + + /** + * Adds a texture to the program and links it to a named uniform. Providing the type changes the tiling properties of the texture. Possible values for type: + * - WTCGL.IMAGETYPE_REGULAR - No tiling, clamp to edges and doesn't need to be power of 2. + * - WTCGL.IMAGETYPE_TILE - full x and y tiling, needs to be power of 2. + * - WTCGL.IMAGETYPE_MIRROR - mirror tiling, needs to be power of 2. + * + * @public + * @param {string} name The name of the uniform. N.B. your name will be prepended with a `u_` in your shaders. So providing a name of `foo` here will result in a uniform named `u_foo` + * @param {WTCGL.TYPE_IMAGETYPE} type The type of texture to create. This is basically the tiling behaviour of the texture as described above + * @param {Image} image The image object to add to the texture + * @return {WebGLTexture} The texture object + */ + addTexture(name, type, image, liveUpdate = false) { + + var texture = this._ctx.createTexture(); + this._ctx.pixelStorei(this._ctx.UNPACK_FLIP_Y_WEBGL, true); + this._ctx.bindTexture(this._ctx.TEXTURE_2D, texture); + + // this._ctx.generateMipmap(this._ctx.TEXTURE_2D); + + // Set the parameters based on the passed type + if(type === WTCGL.IMAGETYPE_MIRROR) { + this._ctx.texParameteri(this._ctx.TEXTURE_2D, this._ctx.TEXTURE_WRAP_S, this._ctx.MIRRORED_REPEAT); + this._ctx.texParameteri(this._ctx.TEXTURE_2D, this._ctx.TEXTURE_WRAP_T, this._ctx.MIRRORED_REPEAT); + } else if(type === WTCGL.IMAGETYPE_REGULAR) { + this._ctx.texParameteri(this._ctx.TEXTURE_2D, this._ctx.TEXTURE_WRAP_S, this._ctx.CLAMP_TO_EDGE); + this._ctx.texParameteri(this._ctx.TEXTURE_2D, this._ctx.TEXTURE_WRAP_T, this._ctx.CLAMP_TO_EDGE); + } + + this._ctx.texParameteri(this._ctx.TEXTURE_2D, this._ctx.TEXTURE_MIN_FILTER, this._ctx.LINEAR); + // this._ctx.texParameteri(this._ctx.TEXTURE_2D, this._ctx.TEXTURE_MAG_FILTER, this._ctx.LINEAR); + + // Upload the image into the texture. + this._ctx.texImage2D(this._ctx.TEXTURE_2D, 0, this._ctx.RGBA, this._ctx.RGBA, this._ctx.UNSIGNED_BYTE, image); + + // add the texture to the array of textures. + this.pushTexture(name, texture, image, this._ctx.TEXTURE_2D, liveUpdate); + + + return texture; + } + + pushTexture(name, texture, image, target, liveUpdate = false) { + let textures = this.textures; + + textures.push({ name: name, tex: texture, liveUpdate: liveUpdate, image: image, target: target }); + + // Finally set the this.textures (this is just to get around the funnyness of default getters) + this.textures = textures; + } + + /** + * Updates a texture location for a given WebGLTexture with an image + * + * @param {WebGLTexture} texture The texture location to update + * @param {Image} image The image object to add to the texture + * @return {Void} + */ + updateTexture(texture, image, name) { + + let uniform = this._ctx.getUniformLocation(this._program, `u_${name}`); + // Set the texture unit to the uniform + this._ctx.uniform1i(uniform, 0); + this._ctx.activeTexture(this._ctx.TEXTURE0); + + this._ctx.bindTexture(this._ctx.TEXTURE_2D, texture); + // Upload the image into the texture. + this._ctx.texImage2D(this._ctx.TEXTURE_2D, 0, this._ctx.RGBA, this._ctx.RGBA, this._ctx.UNSIGNED_BYTE, image); + } + + /** + * Initialise texture locations in the program + * + * @return {Void} + */ + initTextures() { + for(let i = 0; i < this.textures.length; i++) { + let name = this.textures[i].name; + let uniform = this._programInfo.uniforms[name]; + uniform = this._ctx.getUniformLocation(this._program, `u_${name}`); + + // Set the texture unit to the uniform + this._ctx.uniform1i(uniform, i); + + // find the active texture based on the index + this._ctx.activeTexture(this._ctx[`TEXTURE${i}`]); + + // Finally, bind the texture + this._ctx.bindTexture(this.textures[i].target, this.textures[i].tex); + } + } + + /** + * The run loop. This function is run as a part of a RaF and updates the internal + * time uniform (`u_time`). + * + * @param {number} delta The delta time provided by the RaF loop + * @return {Void} + */ + run(delta) { + this.running && requestAnimationFrame(this.run); + + const runFunction = () => { + this.time = this.startTime + delta * .0002; + this.onRun(delta); + this.render(); + } + + if(this.frameRate) { + let now = Date.now(); + let elapsed = now - this._then; + + if (elapsed > this.frameRate) { + this._then = now - (elapsed % this.frameRate); + + runFunction(); + } + } else { + runFunction(); + } + } + + /** + * Render the program + * + * @return {Void} + */ + render(buffer = {}) { + this._ctx.bindFramebuffer(this._ctx.FRAMEBUFFER, buffer.fb || null); + // Update the time uniform + this._ctx.uniform1f( this._programInfo.uniforms.time, this.time); + + this.textures.forEach((textureInfo) => { + if(textureInfo.liveUpdate === true) { + this.updateTexture(textureInfo.tex, textureInfo.image, textureInfo.name); + } + }); + + this._ctx.viewport(0, 0, buffer.w || this._ctx.viewportWidth, buffer.h || this._ctx.viewportHeight); + if(this.clearing) { + this._ctx.clearColor(1.0, 0.0, 0.0, 0.0); + // this._ctx.clearDepth(1.0); + // this._ctx.enable(this._ctx.DEPTH_TEST); + // this._ctx.depthFunc(this._ctx.LEQUAL); + + this._ctx.blendFunc(this._ctx.SRC_ALPHA, this._ctx.ONE_MINUS_SRC_ALPHA); + + this._ctx.clear( this._ctx.COLOR_BUFFER_BIT ); + } + + this._ctx.bindBuffer(this._ctx.ARRAY_BUFFER, this._positionBuffer); + this._ctx.vertexAttribPointer( + this._programInfo.attribs.vertexPosition, + 3, + this._ctx.FLOAT, + false, + 0, + 0); + this._ctx.enableVertexAttribArray(this._programInfo.attribs.vertexPosition); + + // Set the shader uniforms + this.includePerspectiveMatrix && this._ctx.uniformMatrix4fv( this._programInfo.uniforms.projectionMatrix, false, this.perspectiveMatrix); + this.includeModelViewMatrix && this._ctx.uniformMatrix4fv( this._programInfo.uniforms.modelViewMatrix, false, this.modelViewMatrix); + + this._ctx.drawArrays(this._ctx.TRIANGLE_STRIP, 0, 4); + } + + + /** + * Getters and setters + */ + + /** + * The default webGL parameters to be used for the program. + * This is read only and should only be overridden as a part of a subclass. + * + * @readonly + * @type {object} + * @default { alpha: true } + */ + get webgl_params() { + return { alpha: true }; + } + + /** + * (getter/setter) Whether the element should include styling as a part of + * its rendition. + * + * @type {boolean} + * @default true + */ + set styleElement(value) { + this._styleElement = value === true; + if(this._styleElement === false && this._el) { + this._el.style.width = ''; + this._el.style.height = ''; + } + } + get styleElement() { + return this._styleElement !== false; + } + + /** + * (getter/setter) startTime. This is a value to begin the `u_time` + * unform at. This is here in case you want `u_time` to begin at a + * specific value other than 0. + * + * @type {number} + * @default 0 + */ + set startTime(value) { + if(!isNaN(value)) { + this._startTime = value; + } + } + get startTime() { + return this._startTime || 0; + } + + /** + * (getter/setter) time. This is the time that the program currently + * sits at. By default this value is set as a part of the run loop + * however this is a public property so that we can specify time + * for rendition outside of the run loop. + * + * @type {number} + * @default 0 + */ + set time(value) { + if(!isNaN(value)) { + this._time = value; + } + } + get time() { + return this._time || 0; + } + + /** + * (getter/setter) includePerspectiveMatrix. This determines whether the + * perspecive matrix is included in the program. This doesn't really make + * a difference right now, but this is here to provide future interoperability. + * + * @type {boolean} + * @default false + */ + set includePerspectiveMatrix(value) { + this._includePerspectiveMatrix = value === true; + } + get includePerspectiveMatrix() { + return this._includePerspectiveMatrix === true; + } + + /** + * (getter/setter) includeModelViewMatrix. This determines whether the + * model view matrix is included in the program. This doesn't really make + * a difference right now, but this is here to provide future interoperability. + * + * @type {boolean} + * @default false + */ + set includeModelViewMatrix(value) { + this._includeModelViewMatrix = value === true; + } + get includeModelViewMatrix() { + return this._includeModelViewMatrix === true; + } + + /** + * (getter/setter) textures. The array of textures to initialise into the program. + * + * @private + * @type {array} + * @default [] + */ + set textures(value) { + if(value instanceof Array) { + this._textures = value; + } + } + get textures() { + return this._textures || []; + } + + /** + * (getter/setter) clearing. Specifies whether the program should clear the screen + * before drawing anew. + * + * @type {boolean} + * @default false + */ + set clearing(value) { + this._clearing = value === true; + } + get clearing() { + return this._clearing === true; + } + + /** + * (getter/setter) running. Specifies whether the programming is running. Setting + * this to true will create a RaF loop which will call the run function. + * + * @type {boolean} + * @default false + */ + set running(value) { + if(!this.running && value === true) { + + this._then = Date.now(); + + requestAnimationFrame(this.run); + } + this._running = value === true; + } + get running() { + return this._running === true; + } + + set frameRate(value) { + if(!isNaN(value)) this._frameRate = 1000 / value; + } + get frameRate() { + return this._frameRate || null; + } + + /** + * (getter/setter) pxratio. The 1-dimensional pixel ratio of the application. + * This should be used either for making a program look good on high density + * screens or for raming down pixel density for performance. + * + * @type {number} + * @default 1 + */ + set pxratio(value) { + if(value > 0) this._pxratio = value; + } + get pxratio() { + return this._pxratio || 1; + } + + /** + * (getter/setter) perspectiveMatrix. Calculate a perspective matrix, a + * special matrix that is used to simulate the distortion of perspective in + * a camera. Our field of view is 45 degrees, with a width/height ratio + * that matches the display size of the canvas and we only want to see + * objects between 0.1 units and 100 units away from the camera. + * + * @readonly + * @type {mat4} + */ + get perspectiveMatrix() { + const fieldOfView = 45 * Math.PI / 180; // in radians + const aspect = this._size.w / this._size.h; + const zNear = 0.1; + const zFar = 100.0; + const projectionMatrix = mat4.create(); + // note: glmatrix.js always has the first argument + // as the destination to receive the result. + mat4.perspective(projectionMatrix, + fieldOfView, + aspect, + zNear, + zFar); + + return projectionMatrix; + } + + /** + * (getter/setter) perspectiveMatrix. Calculate a model view matrix. + * + * @readonly + * @type {mat4} + */ + get modelViewMatrix() { + // Set the drawing position to the "identity" point, which is + // the center of the scene. + const modelViewMatrix = mat4.create(); + + // Now move the drawing position a bit to where we want to + // start drawing the square. + mat4.translate(modelViewMatrix, // destination matrix + modelViewMatrix, // matrix to translate + [-0.0, 0.0, -1.]); // amount to translate + + return modelViewMatrix; + } + + set onRun(runMethod) { + if(typeof runMethod == 'function') { + this._onRun = runMethod.bind(this); + } + } + get onRun() { + return this._onRun; + } + + get context() { + return this._ctx || null; + } + + /** + * Static Methods + */ + + /** + * Create a shader of a given type given a context, type and source. + * + * @static + * @param {WebGLContext} ctx The context under which to create the shader + * @param {WebGLShaderType} type The shader type, vertex or fragment + * @param {string} source The shader source. + * @return {WebGLShader} The created shader + */ + static createShaderOfType(ctx, type, source) { + const shader = ctx.createShader(type); + ctx.shaderSource(shader, source); + ctx.compileShader(shader); + + if (!ctx.getShaderParameter(shader, ctx.COMPILE_STATUS)) { + console.log('An error occurred compiling the shaders: ' + ctx.getShaderInfoLog(shader)); + ctx.deleteShader(shader); + return null; + } + + return shader; + } +} + +WTCGL.TYPE_INT = 0; +WTCGL.TYPE_FLOAT = 1; +WTCGL.TYPE_V2 = 2; +WTCGL.TYPE_V3 = 3; +WTCGL.TYPE_V4 = 4; +WTCGL.TYPE_BOOL = 5; + +WTCGL.IMAGETYPE_REGULAR = 0; +WTCGL.IMAGETYPE_TILE = 1; +WTCGL.IMAGETYPE_MIRROR = 2; + +WTCGL.TEXTYPE_FLOAT = 0; +WTCGL.TEXTYPE_UNSIGNED_BYTE = 1; +WTCGL.TEXTYPE_HALF_FLOAT_OES = 2; \ No newline at end of file diff --git a/blob-study/src/index.html b/blob-study/src/index.html new file mode 100644 index 0000000..eb63a41 --- /dev/null +++ b/blob-study/src/index.html @@ -0,0 +1,204 @@ + + + + \ No newline at end of file diff --git a/blob-study/src/script.babel b/blob-study/src/script.babel new file mode 100644 index 0000000..405b9eb --- /dev/null +++ b/blob-study/src/script.babel @@ -0,0 +1,191 @@ +import * as dat from 'https://cdn.skypack.dev/dat.gui'; +console.clear(); + +const twodWebGL = new WTCGL( + document.querySelector('canvas#webgl'), + document.querySelector('script#vertexShader').textContent, + document.querySelector('script#fragmentShader').textContent, + window.innerWidth, + window.innerHeight, + window.devicePixelRatio +); + +window.addEventListener('resize', () => { + twodWebGL.resize(window.innerWidth, window.innerHeight); +}); + + + +// track mouse move +let mousepos = [0,0]; +const u_mousepos = twodWebGL.addUniform('mouse', WTCGL.TYPE_V2, mousepos); +window.addEventListener('pointermove', (e) => { + let ratio = window.innerHeight / window.innerWidth; + if(window.innerHeight > window.innerWidth) { + mousepos[0] = (e.pageX - window.innerWidth / 2) / window.innerWidth; + mousepos[1] = (e.pageY - window.innerHeight / 2) / window.innerHeight * -1 * ratio; + } else { + mousepos[0] = (e.pageX - window.innerWidth / 2) / window.innerWidth / ratio; + mousepos[1] = (e.pageY - window.innerHeight / 2) / window.innerHeight * -1; + } + twodWebGL.addUniform('mouse', WTCGL.TYPE_V2, mousepos); +}); + +const uniforms = { + octaves: { + v: 3, + max: 12, + min: 0, + type: WTCGL.TYPE_INT }, + sceneWeight: { + v: 1, + max: 10, + min: .01, + type: WTCGL.TYPE_FLOAT }, + maxIterations: { + v: 256, + max: 512, + min: 2, + type: WTCGL.TYPE_INT }, + internalStep: { + v: .003, + max: 1, + min: 0.0001, + type: WTCGL.TYPE_FLOAT }, + stopThreshold: { + v: .01, + max: .1, + min: .0001, + type: WTCGL.TYPE_FLOAT }, + stepScale: { + v: .8, + max: 2., + min: .1, + type: WTCGL.TYPE_FLOAT }, + clipBGColour: { + v: '#000000', + type: 'COLOUR' }, + blobColour: { + v: '#FFFFFF', + type: 'COLOUR' }, + lightColour: { + v: '#3F66FF', + type: 'COLOUR' }, + lightStrength: { + v: 2, + min: .1, + max: 5, + type: WTCGL.TYPE_FLOAT } + +} + +const hexToGL = (hex) => { + const components = /^#?([A-F0-9]{2})([A-F0-9]{2})([A-F0-9]{2})/i.exec(hex); + if(components && components.length === 4) { + const r = Math.round(`0x${components[1]}` / 255 * 1000) / 1000; + const g = Math.round(`0x${components[2]}` / 255 * 1000) / 1000; + const b = Math.round(`0x${components[3]}` / 255 * 1000) / 1000; + return [r,g,b] + } else { + return []; + } +} +const updateUniform = (e, n) => { + const prop = uniforms[e]; + if(prop.type === 'COLOUR') { + const c = hexToGL(n); + twodWebGL.addUniform(e, WTCGL.TYPE_V3, c); + } else { + twodWebGL.addUniform(e, prop.type, n); + } +} + +// const updateUniform(name, value) => { + +// } + +const gui = new dat.GUI(); +Object.entries(uniforms).forEach((u, v) => { + console.log(u); + const prop = uniforms[u[0]]; + if(prop.type === 'COLOUR') { + const c = hexToGL(prop.v); + console.log(c) + twodWebGL.addUniform(u[0], WTCGL.TYPE_V3, c); + } else { + twodWebGL.addUniform(u[0], prop.type, prop.v); + } + if(prop.type === 'COLOUR') { + gui.addColor(prop, 'v').name(u[0]).onChange((v) => { updateUniform(u[0], v) }); + } else { + gui.add(prop, 'v', prop.min, prop.max).name(u[0]).onChange((v) => { updateUniform(u[0], v) }); + } +}); + + + + + + + + + +// Load all our textures. We only initiate the instance once all images are loaded. +const textures = [ + { + name: 'noise', + url: 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/982762/noise.png', + type: WTCGL.IMAGETYPE_TILE, + img: null + } +]; +const loadImage = function (imageObject) { + let img = document.createElement('img'); + img.crossOrigin="anonymous"; + + return new Promise((resolve, reject) => { + img.addEventListener('load', (e) => { + imageObject.img = img; + resolve(imageObject); + }); + img.addEventListener('error', (e) => { + reject(e); + }); + img.src = imageObject.url + }); +} +const loadTextures = function(textures) { + return new Promise((resolve, reject) => { + const loadTexture = (pointer) => { + if(pointer >= textures.length || pointer > 10) { + resolve(textures); + return; + }; + const imageObject = textures[pointer]; + + const p = loadImage(imageObject); + p.then( + (result) => { + twodWebGL.addTexture(result.name, result.type, result.img); + }, + (error) => { + console.log('error', error) + }).finally((e) => { + loadTexture(pointer+1); + }); + } + loadTexture(0); + }); + +} + +loadTextures(textures).then( + (result) => { + twodWebGL.initTextures(); + // twodWebGL.render(); + twodWebGL.running = true; + }, + (error) => { + console.log('error'); + } +); \ No newline at end of file diff --git a/blob-study/src/style.css b/blob-study/src/style.css new file mode 100644 index 0000000..c013696 --- /dev/null +++ b/blob-study/src/style.css @@ -0,0 +1,7 @@ +body { + margin:0; +} + +canvas { + position: fixed; +} \ No newline at end of file diff --git a/blobby-deerthreejs-to-svg-render-gsap/README.markdown b/blobby-deerthreejs-to-svg-render-gsap/README.markdown new file mode 100644 index 0000000..6f530aa --- /dev/null +++ b/blobby-deerthreejs-to-svg-render-gsap/README.markdown @@ -0,0 +1,5 @@ +# Blobby deer - ThreeJS to SVG render + GSAP + +A Pen created on CodePen.io. Original URL: [https://codepen.io/Mamboleoo/pen/JjNvQGP](https://codepen.io/Mamboleoo/pen/JjNvQGP). + + diff --git a/blobby-deerthreejs-to-svg-render-gsap/dist/index.html b/blobby-deerthreejs-to-svg-render-gsap/dist/index.html new file mode 100644 index 0000000..a8e859a --- /dev/null +++ b/blobby-deerthreejs-to-svg-render-gsap/dist/index.html @@ -0,0 +1,1442 @@ + + + + + CodePen - Blobby deer - ThreeJS to SVG render + GSAP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/blobby-deerthreejs-to-svg-render-gsap/dist/script.js b/blobby-deerthreejs-to-svg-render-gsap/dist/script.js new file mode 100644 index 0000000..7379311 --- /dev/null +++ b/blobby-deerthreejs-to-svg-render-gsap/dist/script.js @@ -0,0 +1,54 @@ +console.clear(); +const circles = [...document.querySelectorAll('circle')]; +const svg = document.querySelector('svg'); +circles.sort((a, b) => { + const a_z = parseFloat(a.getAttribute('z')); + const b_z = parseFloat(b.getAttribute('z')); + return b_z - a_z; +}); +let colors = ['#16F8C0','#00D4C0','#00AFB5','#008B9E','#22687E','#2F4858']; + +circles.forEach((node, i) => { + svg.appendChild(node); + node.setAttribute('r', parseFloat(node.getAttribute('r')) * 1.5); + node.style.fill = colors[Math.floor(i / 70) % 6]; + + /* Rainbow colors */ + // node.setAttribute('stroke', `hsl(${Math.floor(i / circles.length * 360)}deg, 70%, 60%)`); + // node.style.fill = `hsl(${Math.floor(i / circles.length * 360)}deg, 70%, 60%)`; +}); + +const tween = gsap.timeline({ + repeat: -1 +}); + +tween.fromTo('circle',{ + strokeDasharray: (i, node) => { + return node.getTotalLength(); + }, + strokeDashoffset: (i, node) => { + return node.getTotalLength(); + }, + transformOrigin: 'center', + rotation: Math.random() * 360, + scale: 0 +}, { + scale: 1, + rotation: Math.random() * 360, + strokeDashoffset: 0, + stagger: 0.004, + duration: 'random(0.8, 2.5)', + ease: 'elastic.out(1,0.3)' +}); +tween.to('circle', { + cx: () => { + return `+=${(Math.random() - 0.5) * 500}` + }, + cy: () => { + return `+=${(Math.random() - 0.5) * 500}` + }, + scale: 0, + opacity: 0, + duration: 'random(0.4, 1.5)', + stagger: 0.001 +}); \ No newline at end of file diff --git a/blobby-deerthreejs-to-svg-render-gsap/dist/style.css b/blobby-deerthreejs-to-svg-render-gsap/dist/style.css new file mode 100644 index 0000000..2957aea --- /dev/null +++ b/blobby-deerthreejs-to-svg-render-gsap/dist/style.css @@ -0,0 +1,19 @@ +body { + overflow: hidden; + margin: 0; + background: radial-gradient(#005FA2 0%, #030847 80%); + height: 100vh; + filter: drop-shadow(0 0 30px rgba(161, 238, 243, 0.3)); +} + +svg { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +circle { + fill: none; +} \ No newline at end of file diff --git a/blobby-deerthreejs-to-svg-render-gsap/license.txt b/blobby-deerthreejs-to-svg-render-gsap/license.txt new file mode 100644 index 0000000..ace1a81 --- /dev/null +++ b/blobby-deerthreejs-to-svg-render-gsap/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Louis Hoebregts (https://codepen.io/Mamboleoo/pen/JjNvQGP) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/blobby-deerthreejs-to-svg-render-gsap/src/index.html b/blobby-deerthreejs-to-svg-render-gsap/src/index.html new file mode 100644 index 0000000..1ff0ab9 --- /dev/null +++ b/blobby-deerthreejs-to-svg-render-gsap/src/index.html @@ -0,0 +1,1427 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blobby-deerthreejs-to-svg-render-gsap/src/script.js b/blobby-deerthreejs-to-svg-render-gsap/src/script.js new file mode 100644 index 0000000..7379311 --- /dev/null +++ b/blobby-deerthreejs-to-svg-render-gsap/src/script.js @@ -0,0 +1,54 @@ +console.clear(); +const circles = [...document.querySelectorAll('circle')]; +const svg = document.querySelector('svg'); +circles.sort((a, b) => { + const a_z = parseFloat(a.getAttribute('z')); + const b_z = parseFloat(b.getAttribute('z')); + return b_z - a_z; +}); +let colors = ['#16F8C0','#00D4C0','#00AFB5','#008B9E','#22687E','#2F4858']; + +circles.forEach((node, i) => { + svg.appendChild(node); + node.setAttribute('r', parseFloat(node.getAttribute('r')) * 1.5); + node.style.fill = colors[Math.floor(i / 70) % 6]; + + /* Rainbow colors */ + // node.setAttribute('stroke', `hsl(${Math.floor(i / circles.length * 360)}deg, 70%, 60%)`); + // node.style.fill = `hsl(${Math.floor(i / circles.length * 360)}deg, 70%, 60%)`; +}); + +const tween = gsap.timeline({ + repeat: -1 +}); + +tween.fromTo('circle',{ + strokeDasharray: (i, node) => { + return node.getTotalLength(); + }, + strokeDashoffset: (i, node) => { + return node.getTotalLength(); + }, + transformOrigin: 'center', + rotation: Math.random() * 360, + scale: 0 +}, { + scale: 1, + rotation: Math.random() * 360, + strokeDashoffset: 0, + stagger: 0.004, + duration: 'random(0.8, 2.5)', + ease: 'elastic.out(1,0.3)' +}); +tween.to('circle', { + cx: () => { + return `+=${(Math.random() - 0.5) * 500}` + }, + cy: () => { + return `+=${(Math.random() - 0.5) * 500}` + }, + scale: 0, + opacity: 0, + duration: 'random(0.4, 1.5)', + stagger: 0.001 +}); \ No newline at end of file diff --git a/blobby-deerthreejs-to-svg-render-gsap/src/style.scss b/blobby-deerthreejs-to-svg-render-gsap/src/style.scss new file mode 100644 index 0000000..46aff17 --- /dev/null +++ b/blobby-deerthreejs-to-svg-render-gsap/src/style.scss @@ -0,0 +1,18 @@ +body { + overflow: hidden; + margin: 0; + // background: radial-gradient(circle at center, #aaeeff 60%, #6293c5 120%); + background: radial-gradient(#005FA2 0%, #030847 80%); + height: 100vh; + filter: drop-shadow(0 0 30px rgba(161,238,243, 0.3)); +} +svg { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +circle { + fill: none; +} \ No newline at end of file diff --git a/blobhow-to/README.markdown b/blobhow-to/README.markdown new file mode 100644 index 0000000..649d940 --- /dev/null +++ b/blobhow-to/README.markdown @@ -0,0 +1,5 @@ +# Blob - How to + +A Pen created on CodePen.io. Original URL: [https://codepen.io/Mamboleoo/pen/QWbmPGZ](https://codepen.io/Mamboleoo/pen/QWbmPGZ). + + diff --git a/blobhow-to/dist/index.html b/blobhow-to/dist/index.html new file mode 100644 index 0000000..4d4d53f --- /dev/null +++ b/blobhow-to/dist/index.html @@ -0,0 +1,29 @@ + + + + + CodePen - Blob - How to + + + + + + + + +
+

Draw 100 evenly-spaced dots along a circle

+

For every dot, use a noise algorithm to vary the radius

+

Connect the dots and hide them

+

Draw more shapes with the same logic while reducing the radius

+

Fade the lines from the center to the outside

+

Animate the shapes using the frame count in your noise function

+

Go crazy

+
+ + + + + + + diff --git a/blobhow-to/dist/script.js b/blobhow-to/dist/script.js new file mode 100644 index 0000000..b8a71c9 --- /dev/null +++ b/blobhow-to/dist/script.js @@ -0,0 +1,249 @@ +const _noise = noise; +_noise.seed(Math.random() * 100); +const anim = {t: 0}; +let ctx; +console.clear(); + +/* ====== STEP 1 ====== */ +function goToStep1 () { + noLoop(); + fill(255); +} + +function step1 () { + clear(); + const r = min(width, height) * 0.35; + for (let i = 0; i < 100; i++) { + const x = cos(i / 100 * TWO_PI) * r + width / 2; + const y = sin(i / 100 * TWO_PI) * r + height / 2; + circle(x, y, 5); + } +} + +/* ====== STEP 2 ====== */ +function goToStep2 () { + loop(); + fill(255); + noStroke(); + gsap.fromTo(anim, { + t: 0 + }, { + t: 1, + duration: 3, + ease: 'power2.out' + }); +} + +function step2 () { + clear(); + const r = min(width, height) * 0.35; + for (let i = 0; i < 100; i++) { + let x = cos(i / 100 * TWO_PI); + let y = sin(i / 100 * TWO_PI); + const offset = _noise.simplex3(x, y, 0) * (r / 5) * anim.t; + x *= r + offset; + y *= r + offset; + x += width / 2; + y += height / 2; + circle(x, y, 5); + } +} + +/* ====== STEP 3 ====== */ +function goToStep3 () { + loop(); + noFill(); + gsap.fromTo(anim, { + t: 0 + }, { + t: 1, + duration: 3, + ease: 'none' + }); +} + +function step3 () { + clear(); + const r = min(width, height) * 0.35; + beginShape(); + for (let i = 0; i <= 100; i++) { + let x = cos(i / 100 * TWO_PI); + let y = sin(i / 100 * TWO_PI); + const offset = _noise.simplex3(x, y, 0) * (r / 5); + x *= r + offset; + y *= r + offset; + x += width / 2; + y += height / 2; + if (anim.t >= (i/100)) { + vertex(x, y); + } + fill(255); + noStroke(); + circle(x, y, 5 * (1 - anim.t)); + } + stroke(255); + noFill(); + endShape(); +} + +/* ====== STEP 4 ====== */ +function goToStep4 () { + loop(); + stroke(255); + fill(0); + gsap.fromTo(anim, { + t: 0 + }, { + t: 1, + duration: 3, + ease: 'none' + }); +} + +function step4 () { + clear(); + let r = min(width, height) * 0.35; + const rings = 70; + for (let j = 0; j <= (rings * anim.t); j++) { + let rad = (r / rings) * (rings - j); + beginShape(); + for (let i = 0; i <= 100; i++) { + let x = cos(i / 100 * TWO_PI); + let y = sin(i / 100 * TWO_PI); + const offset = _noise.simplex3(x, y + (j * 0.03), 0) * (rad / 5); + x *= rad + offset; + y *= rad + offset; + x += width / 2; + y += height / 2; + vertex(x, y); + } + endShape(); + } +} + +/* ====== STEP 5 ====== */ +function goToStep5 () { + loop(); + stroke(255); + noFill(); + gsap.fromTo(anim, { + t: 0 + }, { + t: 1, + duration: 3, + ease: 'none' + }); +} + +function step5 () { + clear(); + let r = min(width, height) * 0.35; + const rings = 70; + for (let j = 0; j < rings; j++) { + let rad = (r / rings) * (rings - j); + beginShape(); + for (let i = 0; i <= 100; i++) { + let x = cos(i / 100 * TWO_PI); + let y = sin(i / 100 * TWO_PI); + const offset = _noise.simplex3(x, y + (j * 0.03), 0) * (rad / 5); + x *= rad + offset; + y *= rad + offset; + x += width / 2; + y += height / 2; + vertex(x, y); + } + stroke(j / rings * 175 + 80); + endShape(); + } +} + +/* ====== STEP 6 ====== */ +let frames = 0; +function goToStep6 () { + loop(); + ctx.fillStyle = 'black'; + frames = 0; +} + +function step6 () { + clear(); + let r = min(width, height) * 0.35; + const rings = 70; + for (let j = 0; j < rings; j++) { + let rad = (r / rings) * (rings - j); + beginShape(); + for (let i = 0; i <= 100; i++) { + let x = cos(i / 100 * TWO_PI); + let y = sin(i / 100 * TWO_PI); + const offset = _noise.simplex3(x, y + (j * 0.03), frames * 0.003) * (rad / 5); + x *= rad + offset; + y *= rad + offset; + x += width / 2; + y += height / 2; + vertex(x, y); + } + stroke(j / rings * 175 + 80); + endShape(); + } + frames++; +} + +/* ====== STEP 7 ====== */ +function goToStep7 () { + loop(); +} + +function step7 () { + clear(); + let r = min(width, height) * 0.35; + const rings = 40; + for (let j = 0; j < rings; j++) { + let rad = (r / rings) * (rings - j); + ctx.beginPath(); + for (let i = 0; i <= 150; i++) { + let x = cos(i / 100 * TWO_PI); + let y = sin(i / 100 * TWO_PI); + const offset = _noise.simplex3(x, y + (j * 0.03), frames * 0.003) * (rad / 3); + x *= rad + offset; + y *= rad + offset; + x += width / 2; + y += height / 2; + ctx.lineTo(x, y); + } + ctx.fillStyle = `hsl(${j/rings * 360}, 70%, 70%)`; + ctx.strokeStyle = `hsl(${j/rings * 360}, 70%, 80%)`; + ctx.fill(); + ctx.stroke(); + } + frames++; +} + +function setup () { + const canvas = createCanvas(windowWidth, windowHeight); + ctx = canvas.drawingContext; + + windowResized(); + document.querySelector('#step').addEventListener('input', () => { + if (window['goToStep' + step.value]) { + window['goToStep' + step.value](); + } + draw(); + }); +} + +function windowResized () { + resizeCanvas(windowWidth, windowHeight); + + if (window['goToStep' + step.value]) { + window['goToStep' + step.value](); + } + draw(); +} + +const texts = document.querySelectorAll('section p'); +function draw () { + window['step' + step.value](); + + texts.forEach(text => text.style.display = 'none'); + texts[step.value - 1].style.display = 'block'; +} \ No newline at end of file diff --git a/blobhow-to/dist/style.css b/blobhow-to/dist/style.css new file mode 100644 index 0000000..8e244a8 --- /dev/null +++ b/blobhow-to/dist/style.css @@ -0,0 +1,113 @@ +body { + margin: 0; + overflow: hidden; + display: flex; + height: 100vh; + background: black; +} + +canvas { + margin: auto; + touch-action: none; +} + +input { + position: fixed; + left: 50%; + bottom: 20px; + transform: translateX(-50%); + width: 80%; + height: 34px; + max-width: 400px; + background: transparent; + -webkit-appearance: none; + appearance: none; +} +input:active { + cursor: grabbing; +} +input::-webkit-slider-runnable-track { + box-sizing: border-box; + height: 6px; + background: #fff; + -webkit-appearance: none; + appearance: none; +} +input::-moz-range-track { + box-sizing: border-box; + height: 6px; + background: #fff; + -webkit-appearance: none; + appearance: none; +} +input::-ms-track { + box-sizing: border-box; + height: 6px; + background: #fff; + -webkit-appearance: none; + appearance: none; +} +input::-webkit-slider-thumb { + margin-top: -12px; + box-sizing: border-box; + width: 30px; + height: 30px; + border-radius: 50%; + background: #fff; + border: 2px solid black; + -webkit-appearance: none; + appearance: none; + cursor: grab; +} +input::-moz-range-thumb { + box-sizing: border-box; + width: 30px; + height: 30px; + border-radius: 50%; + background: #fff; + border: 2px solid black; + -webkit-appearance: none; + appearance: none; + cursor: grab; +} +input::-ms-thumb { + margin-top: 0px; + box-sizing: border-box; + width: 30px; + height: 30px; + border-radius: 50%; + background: #fff; + border: 2px solid black; + -webkit-appearance: none; + appearance: none; + cursor: grab; +} + +section { + box-sizing: border-box; + font-size: 30px; + color: white; + position: fixed; + left: 0; + top: 20px; + width: 100%; + text-align: center; + padding: 10px 10%; + z-index: 10; + pointer-events: none; + text-shadow: 0 0 3px black, 0 0 4px black, 0 0 5px black; + background: rgba(0, 0, 0, 0.7); + font-family: 'Montserrat', sans-serif; +} +section p { + margin: 0; +} +@media (max-width: 500px) { + section { + font-size: 24px; + } +} + +code { + white-space: nowrap; +} \ No newline at end of file diff --git a/blobhow-to/license.txt b/blobhow-to/license.txt new file mode 100644 index 0000000..7e5517c --- /dev/null +++ b/blobhow-to/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Louis Hoebregts (https://codepen.io/Mamboleoo/pen/QWbmPGZ) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/blobhow-to/src/index.html b/blobhow-to/src/index.html new file mode 100644 index 0000000..863c062 --- /dev/null +++ b/blobhow-to/src/index.html @@ -0,0 +1,10 @@ + +
+

Draw 100 evenly-spaced dots along a circle

+

For every dot, use a noise algorithm to vary the radius

+

Connect the dots and hide them

+

Draw more shapes with the same logic while reducing the radius

+

Fade the lines from the center to the outside

+

Animate the shapes using the frame count in your noise function

+

Go crazy

+
diff --git a/blobhow-to/src/script.js b/blobhow-to/src/script.js new file mode 100644 index 0000000..d6ac970 --- /dev/null +++ b/blobhow-to/src/script.js @@ -0,0 +1,249 @@ +const _noise = noise; +_noise.seed(Math.random() * 100); +const anim = {t: 0}; +let ctx; +console.clear(); + +/* ====== STEP 1 ====== */ +function goToStep1 () { + noLoop(); + fill(255); +} + +function step1 () { + clear(); + const r = min(width, height) * 0.35; + for (let i = 0; i < 100; i++) { + const x = cos(i / 100 * TWO_PI) * r + width / 2; + const y = sin(i / 100 * TWO_PI) * r + height / 2; + circle(x, y, 5); + } +} + +/* ====== STEP 2 ====== */ +function goToStep2 () { + loop(); + fill(255); + noStroke(); + gsap.fromTo(anim, { + t: 0 + }, { + t: 1, + duration: 3, + ease: 'power2.out' + }); +} + +function step2 () { + clear(); + const r = min(width, height) * 0.35; + for (let i = 0; i < 100; i++) { + let x = cos(i / 100 * TWO_PI); + let y = sin(i / 100 * TWO_PI); + const offset = _noise.simplex3(x, y, 0) * (r / 5) * anim.t; + x *= r + offset; + y *= r + offset; + x += width / 2; + y += height / 2; + circle(x, y, 5); + } +} + +/* ====== STEP 3 ====== */ +function goToStep3 () { + loop(); + noFill(); + gsap.fromTo(anim, { + t: 0 + }, { + t: 1, + duration: 3, + ease: 'none' + }); +} + +function step3 () { + clear(); + const r = min(width, height) * 0.35; + beginShape(); + for (let i = 0; i <= 100; i++) { + let x = cos(i / 100 * TWO_PI); + let y = sin(i / 100 * TWO_PI); + const offset = _noise.simplex3(x, y, 0) * (r / 5); + x *= r + offset; + y *= r + offset; + x += width / 2; + y += height / 2; + if (anim.t >= (i/100)) { + vertex(x, y); + } + fill(255); + noStroke(); + circle(x, y, 5 * (1 - anim.t)); + } + stroke(255); + noFill(); + endShape(); +} + +/* ====== STEP 4 ====== */ +function goToStep4 () { + loop(); + stroke(255); + fill(0); + gsap.fromTo(anim, { + t: 0 + }, { + t: 1, + duration: 3, + ease: 'none' + }); +} + +function step4 () { + clear(); + let r = min(width, height) * 0.35; + const rings = 70; + for (let j = 0; j <= (rings * anim.t); j++) { + let rad = (r / rings) * (rings - j); + beginShape(); + for (let i = 0; i <= 100; i++) { + let x = cos(i / 100 * TWO_PI); + let y = sin(i / 100 * TWO_PI); + const offset = _noise.simplex3(x, y + (j * 0.03), 0) * (rad / 5); + x *= rad + offset; + y *= rad + offset; + x += width / 2; + y += height / 2; + vertex(x, y); + } + endShape(); + } +} + +/* ====== STEP 5 ====== */ +function goToStep5 () { + loop(); + stroke(255); + noFill(); + gsap.fromTo(anim, { + t: 0 + }, { + t: 1, + duration: 3, + ease: 'none' + }); +} + +function step5 () { + clear(); + let r = min(width, height) * 0.35; + const rings = 70; + for (let j = 0; j < rings; j++) { + let rad = (r / rings) * (rings - j); + beginShape(); + for (let i = 0; i <= 100; i++) { + let x = cos(i / 100 * TWO_PI); + let y = sin(i / 100 * TWO_PI); + const offset = _noise.simplex3(x, y + (j * 0.03), 0) * (rad / 5); + x *= rad + offset; + y *= rad + offset; + x += width / 2; + y += height / 2; + vertex(x, y); + } + stroke(j / rings * 175 + 80); + endShape(); + } +} + +/* ====== STEP 6 ====== */ +let frames = 0; +function goToStep6 () { + loop(); + ctx.fillStyle = 'black'; + frames = 0; +} + +function step6 () { + clear(); + let r = min(width, height) * 0.35; + const rings = 70; + for (let j = 0; j < rings; j++) { + let rad = (r / rings) * (rings - j); + beginShape(); + for (let i = 0; i <= 100; i++) { + let x = cos(i / 100 * TWO_PI); + let y = sin(i / 100 * TWO_PI); + const offset = _noise.simplex3(x, y + (j * 0.03), frames * 0.003) * (rad / 5); + x *= rad + offset; + y *= rad + offset; + x += width / 2; + y += height / 2; + vertex(x, y); + } + stroke(j / rings * 175 + 80); + endShape(); + } + frames++; +} + +/* ====== STEP 7 ====== */ +function goToStep7 () { + loop(); +} + +function step7 () { + clear(); + let r = min(width, height) * 0.35; + const rings = 40; + for (let j = 0; j < rings; j++) { + let rad = (r / rings) * (rings - j); + ctx.beginPath(); + for (let i = 0; i <= 150; i++) { + let x = cos(i / 100 * TWO_PI); + let y = sin(i / 100 * TWO_PI); + const offset = _noise.simplex3(x, y + (j * 0.03), frames * 0.003) * (rad / 3); + x *= rad + offset; + y *= rad + offset; + x += width / 2; + y += height / 2; + ctx.lineTo(x, y); + } + ctx.fillStyle = `hsl(${j/rings * 360}, 70%, 70%)`; + ctx.strokeStyle = `hsl(${j/rings * 360}, 70%, 80%)`; + ctx.fill(); + ctx.stroke(); + } + frames++; +} + +function setup () { + const canvas = createCanvas(windowWidth, windowHeight); + ctx = canvas.drawingContext; + + windowResized(); + document.querySelector('#step').addEventListener('input', () => { + if (window['goToStep' + step.value]) { + window['goToStep' + step.value](); + } + draw(); + }); +} + +function windowResized () { + resizeCanvas(windowWidth, windowHeight); + + if (window['goToStep' + step.value]) { + window['goToStep' + step.value](); + } + draw(); +} + +const texts = document.querySelectorAll('section p'); +function draw () { + window['step' + step.value](); + + texts.forEach(text => text.style.display = 'none'); + texts[step.value - 1].style.display = 'block'; +} diff --git a/blobhow-to/src/style.scss b/blobhow-to/src/style.scss new file mode 100644 index 0000000..3b8d93a --- /dev/null +++ b/blobhow-to/src/style.scss @@ -0,0 +1,81 @@ +body { + margin: 0; + overflow: hidden; + display: flex; + height: 100vh; + background: black; +} +canvas { + margin: auto; + touch-action: none; +} + +@mixin track { + box-sizing: border-box; + height: 6px; + background: #fff; + -webkit-appearance: none; + appearance: none; +} + +@mixin thumb { + box-sizing: border-box; + width: 30px; + height: 30px; + border-radius: 50%; + background: #fff; + border: 2px solid black; + -webkit-appearance: none; + appearance: none; + cursor: grab; +} + +input { + position: fixed; + left: 50%; + bottom: 20px; + transform: translateX(-50%); + width: 80%; + height: 34px; + max-width: 400px; + background: transparent; + -webkit-appearance: none; + appearance: none; + &:active { + cursor: grabbing; + } + &::-webkit-slider-runnable-track {@include track } + &::-moz-range-track { @include track } + &::-ms-track { @include track } + + &::-webkit-slider-thumb {margin-top: -12px;@include thumb} + &::-moz-range-thumb { @include thumb } + &::-ms-thumb {margin-top:0px;@include thumb} +} + +section { + box-sizing: border-box; + font-size: 30px; + color: white; + position: fixed; + left: 0; + top: 20px; + width: 100%; + text-align: center; + padding: 10px 10%; + z-index: 10; + pointer-events: none; + text-shadow: 0 0 3px black, 0 0 4px black, 0 0 5px black; + background: rgba(0, 0, 0, 0.7); + font-family: 'Montserrat', sans-serif; + p { + margin: 0; + } + @media (max-width: 500px) { + font-size: 24px; + } +} + +code { + white-space: nowrap; +} \ No newline at end of file diff --git a/blobs/README.markdown b/blobs/README.markdown new file mode 100644 index 0000000..e2566f1 --- /dev/null +++ b/blobs/README.markdown @@ -0,0 +1,4 @@ +# Blobs + _A Pen created at CodePen.io. Original URL: [https://codepen.io/Mamboleoo/pen/BWXeqR](https://codepen.io/Mamboleoo/pen/BWXeqR). + + Drag, swipe, click, move, do whatever you want with those blobs. They won't hurt you :) \ No newline at end of file diff --git a/blobs/dist/index.html b/blobs/dist/index.html new file mode 100644 index 0000000..cf2f727 --- /dev/null +++ b/blobs/dist/index.html @@ -0,0 +1,222 @@ + + + + + CodePen - Blobs + + + + + + + + + + + + + + + + + diff --git a/blobs/dist/script.js b/blobs/dist/script.js new file mode 100644 index 0000000..1a2deb8 --- /dev/null +++ b/blobs/dist/script.js @@ -0,0 +1,179 @@ +var ww = window.innerWidth, + wh = window.innerHeight; + +var renderer = new THREE.WebGLRenderer({ + canvas: document.querySelector("canvas") +}); +renderer.setSize(ww, wh); + +var scene = new THREE.Scene(); + +var camera = new THREE.PerspectiveCamera(45, ww / wh, 0.01, 10000); +camera.position.z = 180; +camera.position.y = 1; + +var controls = new THREE.OrbitControls(camera, renderer.domElement); +var dollyIn = controls.dollyIn; +controls.dollyIn = function(){ + dollyIn(); + checkCameraPosition(); +}; +var dollyOut = controls.dollyOut; +controls.dollyOut = function(){ + dollyOut(); + checkCameraPosition(); +}; +controls.noPan = true; + +var vectCenter = new THREE.Vector3(0,0,0); +function checkCameraPosition() { + var dist = vectCenter.distanceTo(camera.position); + if(dist < 60){ + wireframe = true; + } else { + wireframe = false; + } + for (var i = 0; i < amount; i++) { + spheres.children[i].material.wireframe = wireframe; + } +} + +var sphereGeom = new THREE.SphereGeometry(4, 28, 28); + +function Blobby(x, y, z, i) { + this.uniforms = { + time: { + value: 1.0 + }, + rainbow: { + value: new THREE.Vector2(0.2, noise.simplex3(x * 0.001, y * 0.001, z * 0.001)) + } + }; + var mat = new THREE.ShaderMaterial({ + uniforms: this.uniforms, + vertexShader: document.getElementById("wrapVertexShader").textContent, + fragmentShader: document.getElementById("wrapFragmentShader").textContent, + wireframe: true + }); + this.sphere = new THREE.Mesh(sphereGeom, mat); + this.sphere.offset = Math.random() * 500; + this.sphere.uniforms = this.uniforms; + var ratio = Math.random()*0.1 + 1; + this.sphere.position.x = x*ratio; + this.sphere.position.y = y*ratio; + this.sphere.position.z = z*ratio; +} + +var spheres = new THREE.Object3D(); +scene.add(spheres); +var tempSphere = new THREE.IcosahedronGeometry(60, 3); +var vertices = tempSphere.vertices; +amount = vertices.length; +for (var i = 0; i < amount; i++) { + var x = vertices[i].x; + var y = vertices[i].y; + var z = vertices[i].z; + var twin = false; + for (var j = 0; j < spheres.children.length; j++) { + if (Math.round(spheres.children[j].position.x) === Math.round(x)) { + if (Math.round(spheres.children[j].position.y) === Math.round(y)) { + if (Math.round(spheres.children[j].position.z) === Math.round(z)) { + twin = true; + } + } + } + } + if (!twin) { + var blob = new Blobby(x, y, z, i); + spheres.add(blob.sphere); + } +} + +function render(d) { + + for (var i = 0; i < spheres.children.length; i++) { + spheres.children[i].uniforms.time.value = d * 0.0005 + spheres.children[i].offset; + } + spheres.rotation.z = d * 0.00004; + var color = new THREE.Color("hsl(" + (d * 0.006 + 200) + ",90%,75%)"); + renderer.setClearColor(color); + + renderer.render(scene, camera); + requestAnimationFrame(render); +} +requestAnimationFrame(render); + +var wireframe = true; + +window.addEventListener("resize", onResize); + +function onResize() { + ww = window.innerWidth; + wh = window.innerHeight; + camera.aspect = ww / wh; + camera.updateProjectionMatrix(); + renderer.setSize(ww, wh); +} + +window.addEventListener("mousedown", onClick); +window.addEventListener("mousemove", onClick); +window.addEventListener("touchdown", onClick); +function onClick(e) { + var vector = new THREE.Vector2(); + if(e.type === "touchdown"){ + vector.set( + 2 * (e.touches[0].clientX / ww) - 1, + 1 - 2 * (e.touches[0].clientY / wh ) + ); + } else { + vector.set( + 2 * (e.clientX / ww) - 1, + 1 - 2 * (e.clientY / wh ) + ); + } + raycaster = new THREE.Raycaster(); + raycaster.setFromCamera(vector,camera); + intersects = raycaster.intersectObjects(spheres.children); + if(intersects.length > 0 ){ + var blob = intersects[0].object; + if(e.type === "mousemove"){ + if(!blob.bounce && blob.scale.x < 1.5){ + TweenMax.to(blob.scale, 1.3, { + x: 1.5, + y: 1.5, + z: 1.5, + ease: Elastic.easeOut.config(1.5, 0.2), + onComplete : function(){ + TweenMax.to(blob.scale, 2, { + x: 1, + y: 1, + z: 1, + ease: Power1.easeIn + }); + blob.bounce = false; + } + }); + } + } else { + TweenMax.to(blob.scale, 1.3, { + x: "+=0.5", + y: "+=0.5", + z: "+=0.5", + ease: Elastic.easeOut.config(1.5, 0.2), + onComplete : function(){ + TweenMax.to(blob.scale, 2, { + x: 1, + y: 1, + z: 1, + ease: Power1.easeIn + }); + blob.bounce = false; + } + }); + } + blob.bounce = true; + } +} + +camera.rotation.set(0,0,0); +checkCameraPosition(); \ No newline at end of file diff --git a/blobs/dist/style.css b/blobs/dist/style.css new file mode 100644 index 0000000..a96bb7a --- /dev/null +++ b/blobs/dist/style.css @@ -0,0 +1,9 @@ +body{ + overflow: hidden; + cursor: pointer; +} +canvas{ + position: absolute; + top: 0; + left: 0; +} \ No newline at end of file diff --git a/blobs/license.txt b/blobs/license.txt new file mode 100644 index 0000000..1c11e4e --- /dev/null +++ b/blobs/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Louis Hoebregts (https://codepen.io/Mamboleoo/pen/BWXeqR) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/blobs/src/index.html b/blobs/src/index.html new file mode 100644 index 0000000..718304e --- /dev/null +++ b/blobs/src/index.html @@ -0,0 +1,204 @@ + + + + \ No newline at end of file diff --git a/blobs/src/script.js b/blobs/src/script.js new file mode 100644 index 0000000..1a2deb8 --- /dev/null +++ b/blobs/src/script.js @@ -0,0 +1,179 @@ +var ww = window.innerWidth, + wh = window.innerHeight; + +var renderer = new THREE.WebGLRenderer({ + canvas: document.querySelector("canvas") +}); +renderer.setSize(ww, wh); + +var scene = new THREE.Scene(); + +var camera = new THREE.PerspectiveCamera(45, ww / wh, 0.01, 10000); +camera.position.z = 180; +camera.position.y = 1; + +var controls = new THREE.OrbitControls(camera, renderer.domElement); +var dollyIn = controls.dollyIn; +controls.dollyIn = function(){ + dollyIn(); + checkCameraPosition(); +}; +var dollyOut = controls.dollyOut; +controls.dollyOut = function(){ + dollyOut(); + checkCameraPosition(); +}; +controls.noPan = true; + +var vectCenter = new THREE.Vector3(0,0,0); +function checkCameraPosition() { + var dist = vectCenter.distanceTo(camera.position); + if(dist < 60){ + wireframe = true; + } else { + wireframe = false; + } + for (var i = 0; i < amount; i++) { + spheres.children[i].material.wireframe = wireframe; + } +} + +var sphereGeom = new THREE.SphereGeometry(4, 28, 28); + +function Blobby(x, y, z, i) { + this.uniforms = { + time: { + value: 1.0 + }, + rainbow: { + value: new THREE.Vector2(0.2, noise.simplex3(x * 0.001, y * 0.001, z * 0.001)) + } + }; + var mat = new THREE.ShaderMaterial({ + uniforms: this.uniforms, + vertexShader: document.getElementById("wrapVertexShader").textContent, + fragmentShader: document.getElementById("wrapFragmentShader").textContent, + wireframe: true + }); + this.sphere = new THREE.Mesh(sphereGeom, mat); + this.sphere.offset = Math.random() * 500; + this.sphere.uniforms = this.uniforms; + var ratio = Math.random()*0.1 + 1; + this.sphere.position.x = x*ratio; + this.sphere.position.y = y*ratio; + this.sphere.position.z = z*ratio; +} + +var spheres = new THREE.Object3D(); +scene.add(spheres); +var tempSphere = new THREE.IcosahedronGeometry(60, 3); +var vertices = tempSphere.vertices; +amount = vertices.length; +for (var i = 0; i < amount; i++) { + var x = vertices[i].x; + var y = vertices[i].y; + var z = vertices[i].z; + var twin = false; + for (var j = 0; j < spheres.children.length; j++) { + if (Math.round(spheres.children[j].position.x) === Math.round(x)) { + if (Math.round(spheres.children[j].position.y) === Math.round(y)) { + if (Math.round(spheres.children[j].position.z) === Math.round(z)) { + twin = true; + } + } + } + } + if (!twin) { + var blob = new Blobby(x, y, z, i); + spheres.add(blob.sphere); + } +} + +function render(d) { + + for (var i = 0; i < spheres.children.length; i++) { + spheres.children[i].uniforms.time.value = d * 0.0005 + spheres.children[i].offset; + } + spheres.rotation.z = d * 0.00004; + var color = new THREE.Color("hsl(" + (d * 0.006 + 200) + ",90%,75%)"); + renderer.setClearColor(color); + + renderer.render(scene, camera); + requestAnimationFrame(render); +} +requestAnimationFrame(render); + +var wireframe = true; + +window.addEventListener("resize", onResize); + +function onResize() { + ww = window.innerWidth; + wh = window.innerHeight; + camera.aspect = ww / wh; + camera.updateProjectionMatrix(); + renderer.setSize(ww, wh); +} + +window.addEventListener("mousedown", onClick); +window.addEventListener("mousemove", onClick); +window.addEventListener("touchdown", onClick); +function onClick(e) { + var vector = new THREE.Vector2(); + if(e.type === "touchdown"){ + vector.set( + 2 * (e.touches[0].clientX / ww) - 1, + 1 - 2 * (e.touches[0].clientY / wh ) + ); + } else { + vector.set( + 2 * (e.clientX / ww) - 1, + 1 - 2 * (e.clientY / wh ) + ); + } + raycaster = new THREE.Raycaster(); + raycaster.setFromCamera(vector,camera); + intersects = raycaster.intersectObjects(spheres.children); + if(intersects.length > 0 ){ + var blob = intersects[0].object; + if(e.type === "mousemove"){ + if(!blob.bounce && blob.scale.x < 1.5){ + TweenMax.to(blob.scale, 1.3, { + x: 1.5, + y: 1.5, + z: 1.5, + ease: Elastic.easeOut.config(1.5, 0.2), + onComplete : function(){ + TweenMax.to(blob.scale, 2, { + x: 1, + y: 1, + z: 1, + ease: Power1.easeIn + }); + blob.bounce = false; + } + }); + } + } else { + TweenMax.to(blob.scale, 1.3, { + x: "+=0.5", + y: "+=0.5", + z: "+=0.5", + ease: Elastic.easeOut.config(1.5, 0.2), + onComplete : function(){ + TweenMax.to(blob.scale, 2, { + x: 1, + y: 1, + z: 1, + ease: Power1.easeIn + }); + blob.bounce = false; + } + }); + } + blob.bounce = true; + } +} + +camera.rotation.set(0,0,0); +checkCameraPosition(); \ No newline at end of file diff --git a/blobs/src/style.css b/blobs/src/style.css new file mode 100644 index 0000000..a96bb7a --- /dev/null +++ b/blobs/src/style.css @@ -0,0 +1,9 @@ +body{ + overflow: hidden; + cursor: pointer; +} +canvas{ + position: absolute; + top: 0; + left: 0; +} \ No newline at end of file diff --git a/bloom/README.markdown b/bloom/README.markdown new file mode 100644 index 0000000..d3ca3f8 --- /dev/null +++ b/bloom/README.markdown @@ -0,0 +1,6 @@ +# Bloom + _A Pen created at CodePen.io. Original URL: [https://codepen.io/MillerTime/pen/OJPBGyv](https://codepen.io/MillerTime/pen/OJPBGyv). + + SVG strokes animated with JavaScript. I originally tried animating with CSS only, but I ended up needing a custom easing curve for each style property I was animating. + +I was inspired to create a visual with rings splitting apart after seeing [this animation](https://twitter.com/beesandbombs/status/1215675762352717824) by [@beesandbombs](https://twitter.com/beesandbombs). \ No newline at end of file diff --git a/bloom/dist/index.html b/bloom/dist/index.html new file mode 100644 index 0000000..8744e8f --- /dev/null +++ b/bloom/dist/index.html @@ -0,0 +1,24 @@ + + + + + CodePen - Bloom + + + + + + + + + + + + + + + + + + + diff --git a/bloom/dist/script.js b/bloom/dist/script.js new file mode 100644 index 0000000..d018c49 --- /dev/null +++ b/bloom/dist/script.js @@ -0,0 +1,99 @@ +console.clear(); + +// Config +const DURATION = 10000; +const TURNS = 1.5; +const SPLITS_INITIAL = 16; +const SPLITS_FINAL = 32; + +// Elements +const ringSelectors = ['.ring1', '.ring2', '.ring3', '.ring4', '.ring5', '.ring6']; +const ringElements = ringSelectors.map(selector => document.querySelector(selector)); + +// Helpers +const clamp = (num, min, max) => Math.min(Math.max(num, min), max); +const map = (num, min, max, minTarget, maxTarget) => { + const currentRatio = (num - min) / (max - min); + return (maxTarget - minTarget) * currentRatio + minTarget; +}; +const lerp = (a, b, p) => (b - a) * p + a; +const easeOut1_5 = p => 1 - ((1-p) ** 1.5); +const easeOut5 = p => 1 - ((1-p) ** 5); + +// Gradient sampler factory. +// Creates an instance with a `sample(position)` method used to query a color from a specific position on the gradient. +// `position` is a number, where `0` is the start of the gradient and `1` is the end. Out-of-range values are wrapped. +// I experimented with this kind of gradient here: https://codepen.io/MillerTime/pen/NXxxma?editors=0010 +const gradientSampler = (function GradientSamplerFactory() { + // The instance to be returned. + const sampler = {}; + + // Gradient color stops in RGB format. + // Note: does not currently wrap smoothly - this is by design. + // Perhaps a `wrap` flag could be added to `sample()` method. + const colors = [ + { r: 255, g: 232, b: 0 }, + { r: 255, g: 103, b: 0 }, + { r: 191, g: 26, b: 156 }, + { r: 0, g: 79, b: 229 }, + { r: 0, g: 196, b: 9 } + // The real gradient continues from green back into orange and pink, but IMO it looks better without it. + // { r: 247, g: 154, b: 0 }, + // { r: 243, g: 63, b: 149 } + ]; + + const colorCount = colors.length; + const colorSpans = colorCount - 1; + const spanSize = 1 / colorSpans; + + sampler.sample = function sample(position) { + // Normalize position to 0..1 scale (inclusive of 0, exlusive of 1). + position -= position | 0; + if (position < 0) position = 1 - position * -1; + + const startIndex = position * colorSpans | 0; + const startColor = colors[startIndex]; + const endColor = colors[startIndex + 1]; + // Compute relative position between two chosen color stops. + const innerPosition = (position - (startIndex / colorSpans)) / spanSize; + + const r = lerp(startColor.r, endColor.r, innerPosition) | 0; + const g = lerp(startColor.g, endColor.g, innerPosition) | 0; + const b = lerp(startColor.b, endColor.b, innerPosition) | 0; + + return `rgb(${r},${g},${b})`; + }; + + return sampler; +})(); + +// 200 is the diameter of the element +const ringCircumference = 200 * Math.PI; + +// Style a ring, given the current animation time in milliseconds. Setting `flip` to `true` reverses rotation. +function styleRing(el, time, flip) { + const progress = Math.max(0, time) % DURATION / DURATION; + const delayedProgress = clamp(map(progress, 0, 1, -0.1, 1), 0, 1); + el.style.stroke = gradientSampler.sample(easeOut1_5(progress)); + el.style.transform = `rotate(${flip ? '-' : ''}${progress ** 1.25 * TURNS}turn) scale(${progress ** 1.35 * 6})`; + el.style.strokeWidth = lerp(200, 0, easeOut5(delayedProgress)); + const dash = lerp(ringCircumference / SPLITS_INITIAL, ringCircumference / (2*SPLITS_FINAL), easeOut5(delayedProgress)); + const gap = lerp(0, ringCircumference / (2*SPLITS_FINAL), easeOut5(delayedProgress)); + el.style.strokeDasharray = `${dash} ${gap}`; +} + +let startTime = -1; + +// Animation Loop +function tick(time) { + if (startTime === -1) startTime = time; + const timeFromZero = time - startTime; + + ringElements.forEach((ringEl, i) => { + styleRing(ringEl, timeFromZero - DURATION / ringElements.length * i, i % 2 !== 0); + }); + + requestAnimationFrame(tick); +} + +requestAnimationFrame(tick); \ No newline at end of file diff --git a/bloom/dist/style.css b/bloom/dist/style.css new file mode 100644 index 0000000..40bdf39 --- /dev/null +++ b/bloom/dist/style.css @@ -0,0 +1,17 @@ +body { + display: -webkit-box; + display: flex; + height: 100vh; + background-color: #123; +} + +svg { + margin: auto; + width: 100%; + max-width: 100vh; + height: auto; +} + +circle { + fill: none; +} \ No newline at end of file diff --git a/bloom/license.txt b/bloom/license.txt new file mode 100644 index 0000000..9c91aad --- /dev/null +++ b/bloom/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Caleb Miller (https://codepen.io/MillerTime/pen/OJPBGyv) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/bloom/src/index.html b/bloom/src/index.html new file mode 100644 index 0000000..c2ff3b5 --- /dev/null +++ b/bloom/src/index.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/bloom/src/script.js b/bloom/src/script.js new file mode 100644 index 0000000..a987ca6 --- /dev/null +++ b/bloom/src/script.js @@ -0,0 +1,99 @@ +console.clear(); + +// Config +const DURATION = 10000; +const TURNS = 1.5; +const SPLITS_INITIAL = 16; +const SPLITS_FINAL = 32; + +// Elements +const ringSelectors = ['.ring1', '.ring2', '.ring3', '.ring4', '.ring5', '.ring6']; +const ringElements = ringSelectors.map(selector => document.querySelector(selector)); + +// Helpers +const clamp = (num, min, max) => Math.min(Math.max(num, min), max); +const map = (num, min, max, minTarget, maxTarget) => { + const currentRatio = (num - min) / (max - min); + return (maxTarget - minTarget) * currentRatio + minTarget; +}; +const lerp = (a, b, p) => (b - a) * p + a; +const easeOut1_5 = p => 1 - ((1-p) ** 1.5); +const easeOut5 = p => 1 - ((1-p) ** 5); + +// Gradient sampler factory. +// Creates an instance with a `sample(position)` method used to query a color from a specific position on the gradient. +// `position` is a number, where `0` is the start of the gradient and `1` is the end. Out-of-range values are wrapped. +// I experimented with this kind of gradient here: https://codepen.io/MillerTime/pen/NXxxma?editors=0010 +const gradientSampler = (function GradientSamplerFactory() { + // The instance to be returned. + const sampler = {}; + + // Gradient color stops in RGB format. + // Note: does not currently wrap smoothly - this is by design. + // Perhaps a `wrap` flag could be added to `sample()` method. + const colors = [ + { r: 255, g: 232, b: 0 }, + { r: 255, g: 103, b: 0 }, + { r: 191, g: 26, b: 156 }, + { r: 0, g: 79, b: 229 }, + { r: 0, g: 196, b: 9 } + // The real gradient continues from green back into orange and pink, but IMO it looks better without it. + // { r: 247, g: 154, b: 0 }, + // { r: 243, g: 63, b: 149 } + ]; + + const colorCount = colors.length; + const colorSpans = colorCount - 1; + const spanSize = 1 / colorSpans; + + sampler.sample = function sample(position) { + // Normalize position to 0..1 scale (inclusive of 0, exlusive of 1). + position -= position | 0; + if (position < 0) position = 1 - position * -1; + + const startIndex = position * colorSpans | 0; + const startColor = colors[startIndex]; + const endColor = colors[startIndex + 1]; + // Compute relative position between two chosen color stops. + const innerPosition = (position - (startIndex / colorSpans)) / spanSize; + + const r = lerp(startColor.r, endColor.r, innerPosition) | 0; + const g = lerp(startColor.g, endColor.g, innerPosition) | 0; + const b = lerp(startColor.b, endColor.b, innerPosition) | 0; + + return `rgb(${r},${g},${b})`; + }; + + return sampler; +})(); + +// 200 is the diameter of the element +const ringCircumference = 200 * Math.PI; + +// Style a ring, given the current animation time in milliseconds. Setting `flip` to `true` reverses rotation. +function styleRing(el, time, flip) { + const progress = Math.max(0, time) % DURATION / DURATION; + const delayedProgress = clamp(map(progress, 0, 1, -0.1, 1), 0, 1); + el.style.stroke = gradientSampler.sample(easeOut1_5(progress)); + el.style.transform = `rotate(${flip ? '-' : ''}${progress ** 1.25 * TURNS}turn) scale(${progress ** 1.35 * 6})`; + el.style.strokeWidth = lerp(200, 0, easeOut5(delayedProgress)); + const dash = lerp(ringCircumference / SPLITS_INITIAL, ringCircumference / (2*SPLITS_FINAL), easeOut5(delayedProgress)); + const gap = lerp(0, ringCircumference / (2*SPLITS_FINAL), easeOut5(delayedProgress)); + el.style.strokeDasharray = `${dash} ${gap}`; +} + +let startTime = -1; + +// Animation Loop +function tick(time) { + if (startTime === -1) startTime = time; + const timeFromZero = time - startTime; + + ringElements.forEach((ringEl, i) => { + styleRing(ringEl, timeFromZero - DURATION / ringElements.length * i, i % 2 !== 0); + }); + + requestAnimationFrame(tick); +} + +requestAnimationFrame(tick); diff --git a/bloom/src/style.scss b/bloom/src/style.scss new file mode 100644 index 0000000..f7be9f5 --- /dev/null +++ b/bloom/src/style.scss @@ -0,0 +1,16 @@ +body { + display: flex; + height: 100vh; + background-color: #123; +} + +svg { + margin: auto; + width: 100%; + max-width: 100vh; + height: auto; +} + +circle { + fill: none; +} \ No newline at end of file diff --git a/bongo-cat-codes-2jamming/README.markdown b/bongo-cat-codes-2jamming/README.markdown new file mode 100644 index 0000000..7734ed5 --- /dev/null +++ b/bongo-cat-codes-2jamming/README.markdown @@ -0,0 +1,7 @@ +# Bongo Cat Codes #2 - Jamming + +A Pen created on CodePen.io. Original URL: [https://codepen.io/carolineartz/pen/qBOEzQa](https://codepen.io/carolineartz/pen/qBOEzQa). + +A variation on an older pen: https://codepen.io/carolineartz/pen/VwYwZaP + +beyond the obvious differences, this version uses gsap vs the linked pen animates via css. diff --git a/bongo-cat-codes-2jamming/dist/index.html b/bongo-cat-codes-2jamming/dist/index.html new file mode 100644 index 0000000..3005b62 --- /dev/null +++ b/bongo-cat-codes-2jamming/dist/index.html @@ -0,0 +1,214 @@ + + + + + CodePen - Bongo Cat Codes #2 - Jamming + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + diff --git a/bongo-cat-codes-2jamming/dist/script.js b/bongo-cat-codes-2jamming/dist/script.js new file mode 100644 index 0000000..6fa15e2 --- /dev/null +++ b/bongo-cat-codes-2jamming/dist/script.js @@ -0,0 +1,114 @@ +// Inspired By +// https://codepen.io/abeatrize/pen/LJqYey + +// Bongo Cat originally created by @StrayRogue and @DitzyFlama + +const ID = "bongo-cat"; +const s = selector => `#${ID} ${selector}`; +const notes = document.querySelectorAll(".note"); + +for (let note of notes) { + note.parentElement.appendChild(note.cloneNode(true)); + note.parentElement.appendChild(note.cloneNode(true)); +} + +const music = { note: s(".music .note") }; +const terminal = { frame: s(".terminal-frame"), code: s(".terminal-code line") }; +const cat = { + pawRight: { + up: s(".paw-right .up"), + down: s(".paw-right .down") }, + + pawLeft: { + up: s(".paw-left .up"), + down: s(".paw-left .down") } }; + + + +const style = getComputedStyle(document.documentElement); + +const green = style.getPropertyValue("--green"); +const pink = style.getPropertyValue("--pink"); +const blue = style.getPropertyValue("--blue"); +const orange = style.getPropertyValue("--orange"); +const cyan = style.getPropertyValue("--cyan"); + +gsap.set(music.note, { scale: 0, autoAlpha: 1 }); + +const animatePawState = (selector) => +gsap.fromTo( +selector, +{ autoAlpha: 0 }, +{ + autoAlpha: 1, + duration: 0.01, + repeatDelay: 0.19, + yoyo: true, + repeat: -1 }); + + + +const tl = gsap.timeline(); + +tl. +add(animatePawState(cat.pawLeft.up), "start"). +add(animatePawState(cat.pawRight.down), "start"). +add(animatePawState(cat.pawLeft.down), "start+=0.19"). +add(animatePawState(cat.pawRight.up), "start+=0.19"). +timeScale(1.6); + +gsap.from(".terminal-code line", { + drawSVG: "0%", + duration: 0.1, + stagger: 0.1, + ease: 'none', + repeat: -1 }); + + +const noteEls = gsap.utils.pipe( +gsap.utils.toArray, +gsap.utils.shuffle)( +music.note); + +const numNotes = noteEls.length / 3; +const notesG1 = noteEls.splice(0, numNotes); +const notesG2 = noteEls.splice(0, numNotes); +const notesG3 = noteEls; + +const colorizer = gsap.utils.random([green, pink, blue, orange, cyan, "#a3a4ec", "#67b5c0", "#fd7c6e"], true); +const rotator = gsap.utils.random(-50, 50, 1, true); +const dir = amt => `${gsap.utils.random(["-", "+"])}=${amt}`; + +const animateNotes = els => { + els.forEach(el => { + gsap.set(el, { + stroke: colorizer(), + rotation: rotator(), + x: gsap.utils.random(-25, 25, 1) }); + + }); + + return gsap.fromTo(els, { + autoAlpha: 1, + y: 0, + scale: 0 }, + { + duration: 2, + autoAlpha: 0, + scale: 1, + ease: "none", + stagger: { + from: "random", + each: 0.5 }, + + rotation: dir(gsap.utils.random(20, 30, 1)), + x: dir(gsap.utils.random(40, 60, 1)), + y: gsap.utils.random(-200, -220, 1), + onComplete: () => animateNotes(els) }); + +}; + +tl. +add(animateNotes(notesG1)). +add(animateNotes(notesG2), ">0.05"). +add(animateNotes(notesG3), ">0.25"); \ No newline at end of file diff --git a/bongo-cat-codes-2jamming/dist/style.css b/bongo-cat-codes-2jamming/dist/style.css new file mode 100644 index 0000000..eb0f3f0 --- /dev/null +++ b/bongo-cat-codes-2jamming/dist/style.css @@ -0,0 +1,69 @@ +:root { + --bg: #1a1e2d; + --green: #a5ea9b; + --pink: #ff61d8; + --blue: #569cfa; + --orange: #ffcc81; + --cyan: #7ed1e2; +} + +body { + height: 100vh; + width: 100vw; + background: var(--bg); + display: -webkit-box; + display: flex; + place-content: center; + -webkit-box-align: end; + align-items: flex-end; +} + +.container { + width: 80vw; + height: 80vh; +} +.container svg { + height: 100%; + width: 100%; + overflow: visible; +} + +#bongo-cat { + fill: var(--bg); + stroke-linecap: round; + stroke-linejoin: round; + stroke-width: 4; +} +#bongo-cat .laptop-cover, +#bongo-cat .headphone .band { + fill: none; +} +#bongo-cat .paw, #bongo-cat .head { + stroke: var(--orange); +} +#bongo-cat .laptop-keyboard { + stroke-width: 2; +} +#bongo-cat .terminal-code { + stroke-width: 5; +} +#bongo-cat .music .note, +#bongo-cat .laptop-base, +#bongo-cat .laptop-cover, +#bongo-cat .paw .pads { + stroke: var(--pink); +} +#bongo-cat .table line, +#bongo-cat .headphone .band, +#bongo-cat .headphone .speaker path:nth-child(3) { + stroke: var(--green); +} +#bongo-cat .terminal-frame, +#bongo-cat .laptop-keyboard, +#bongo-cat .headphone .speaker path:nth-child(2) { + stroke: var(--blue); +} +#bongo-cat .terminal-code, +#bongo-cat .headphone .speaker path:first-child { + stroke: var(--cyan); +} \ No newline at end of file diff --git a/bongo-cat-codes-2jamming/license.txt b/bongo-cat-codes-2jamming/license.txt new file mode 100644 index 0000000..bcdec38 --- /dev/null +++ b/bongo-cat-codes-2jamming/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Caroline Artz (https://codepen.io/carolineartz/pen/qBOEzQa) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/bongo-cat-codes-2jamming/src/index.pug b/bongo-cat-codes-2jamming/src/index.pug new file mode 100644 index 0000000..21f9175 --- /dev/null +++ b/bongo-cat-codes-2jamming/src/index.pug @@ -0,0 +1,157 @@ +.container + svg(xmlns='http://www.w3.org/2000/svg' viewbox='0 0 785.5 465.8') + g#bongo-cat + g.head + path(d='M280.4,221l383.8,62.6a171.4,171.4,0,0,0-9.2-40.5,174,174,0,0,0-28.7-50.5,163.3,163.3,0,0,0,3.2-73.8c-11.6-1.9-42,14.2-44.5,17.5-19.6-24-88.5-52.7-153.7-48.1A78.8,78.8,0,0,0,398,67.1c-9.8,2.9-19,29.7-19.4,33.7a320,320,0,0,0-31.7,23.6c-14,11.8-28.9,24.4-42.5,44.3A173,173,0,0,0,280.4,221Z') + path(d='M396.6,178.6c.4.9,2.7,6.5,8.5,8.4s13.4-1.2,17.2-7.9c-.9,7.5,3.8,14.3,10.4,16a14.4,14.4,0,0,0,15-5.7') + path(d='M474,179.2a6.6,6.6,0,0,0-4.9,3.6,6,6,0,0,0,1.5,7.3,6,6,0,0,0,7.9-1c2.3-2.6,2-7,.2-8s-5.9,1.6-5.7,3.5,1.9,2.8,3.2,2.3,1.1-2.2,1.1-2.3') + path(d='M365.4,168.9c0,.3-.8,3.6,1.5,6a5.9,5.9,0,0,0,7.2,1.4,6.1,6.1,0,0,0,2.2-7.7c-1.5-3.1-5.7-4.5-7.3-3.2s-.8,6,1,6.6,3.3-.7,3.3-2.1-1.5-1.8-1.6-1.9') + g.headphone.headphone-right + g.speaker + path(d='M400.7,80.2c-14.1-20.8-40.2.3-50.7,15-8.7,12.2-9.7,30.3,2.8,37.3,5.4-9,11.8-15.6,21-26.2A214.1,214.1,0,0,1,400.7,80.2Z') + path(d='M381.5,79.4c-6.6-7.5-9.6-5.8-12.3-5.5-16.3,1.3-32,20.3-27.8,33.9a21.8,21.8,0,0,0,5.9,8.5c1.7-2.6,3.5-5.1,5.4-7.7A150.7,150.7,0,0,1,381.5,79.4Z') + path(d='M367.3,77.8a13.1,13.1,0,0,0-5.1-1.8c-8.5-.9-18.7,7.5-18.4,16.1a12.8,12.8,0,0,0,2.6,7c3.1-3.3,6.3-6.8,9.6-10.2S363.6,81.3,367.3,77.8Z') + path.band(d='M515,40.6c-15.9-4.6-57-14.1-104,2.3a166.9,166.9,0,0,0-60.9,37.3') + g.music.music-right + g.note + g + path(d='M368.5,46.5c.5,2.1,1.2,3.5,3.8,6.3s5.1,4.3,6.5,7.2a11.1,11.1,0,0,1,.7,2,10.5,10.5,0,0,1-.7,6.5') + path(d='M368.5,46.5a20.8,20.8,0,0,0,2.4,11.7c2.3,4.4,5,5.4,6.8,9.5a17.5,17.5,0,0,1,.4,11') + line(x1='368.5' y1='47.7' x2='368.5' y2='92.8') + path(d='M368.5,92.8c.1-3.1-4.7-6.3-9-6.3s-8.7,2.7-8.7,5.8,4.8,5.7,8.7,5.8S368.3,95.8,368.5,92.8Z') + g + path(d='M368.5,46.5c.5,2.1,1.2,3.5,3.8,6.3s5.1,4.3,6.5,7.2a11.1,11.1,0,0,1,.7,2,10.5,10.5,0,0,1-.7,6.5') + path(d='M368.5,46.5a20.8,20.8,0,0,0,2.4,11.7c2.3,4.4,5,5.4,6.8,9.5a17.5,17.5,0,0,1,.4,11') + line(x1='368.5' y1='47.7' x2='368.5' y2='92.8') + path(d='M368.5,92.8c.1-3.1-4.7-6.3-9-6.3s-8.7,2.7-8.7,5.8,4.8,5.7,8.7,5.8S368.3,95.8,368.5,92.8Z') + g.note + g + polyline(points='350 81.7 350 43.5 382.7 50.7 382.7 89.5') + path(d='M350,82.3c0-3.1-4.5-5.7-8.2-5.9s-9.3,2.8-9.2,6,4.7,5.7,8.6,5.7S349.9,85.5,350,82.3Z') + path(d='M382.7,89.9c0-3.1-4.4-5.7-8.2-5.8s-9.3,2.7-9.2,5.9,4.7,5.7,8.7,5.7S382.7,93.1,382.7,89.9Z') + g + polyline(points='350 81.7 350 43.5 382.7 50.7 382.7 89.5') + path(d='M350,82.3c0-3.1-4.5-5.7-8.2-5.9s-9.3,2.8-9.2,6,4.7,5.7,8.6,5.7S349.9,85.5,350,82.3Z') + path(d='M382.7,89.9c0-3.1-4.4-5.7-8.2-5.8s-9.3,2.7-9.2,5.9,4.7,5.7,8.7,5.7S382.7,93.1,382.7,89.9Z') + g.note + polyline(points='388.2 73.6 388.2 34.6 354.9 42.6 354.9 82.4') + path(d='M388.2,74.1c0-3-4.4-5.6-8.1-5.8s-9.2,2.8-9.1,6,4.6,5.6,8.6,5.6S388.2,77.3,388.2,74.1Z') + path(d='M354.9,81.9c0-3.1-4.4-5.7-8.2-5.9s-9.3,2.8-9.2,6,4.7,5.7,8.7,5.7S354.9,85.1,354.9,81.9Z') + line(x1='354.9' y1='48.4' x2='388.2' y2='40.3') + line(x1='354.9' y1='54.6' x2='388.2' y2='47') + g.note + g + path(d='M371.8,79.5c0-3.1-4.5-5.8-8.3-5.9s-9.3,2.8-9.2,6,4.7,5.7,8.7,5.7S371.8,82.7,371.8,79.5Z') + line(x1='371.8' y1='79.5' x2='371.8' y2='33.3') + path(d='M371.8,33.4a26.6,26.6,0,0,0,3.6,7.8c3.7,5.7,7.6,7,8.8,11.6.5,1.7.7,4.4-.9,8.3') + g + path(d='M371.8,79.5c0-3.1-4.5-5.8-8.3-5.9s-9.3,2.8-9.2,6,4.7,5.7,8.7,5.7S371.8,82.7,371.8,79.5Z') + line(x1='371.8' y1='79.5' x2='371.8' y2='33.3') + path(d='M371.8,33.4a26.6,26.6,0,0,0,3.6,7.8c3.7,5.7,7.6,7,8.8,11.6.5,1.7.7,4.4-.9,8.3') + g.table + polyline(points='27.3 160.5 785.2 295 785.4 465.8') + line(x1='785.2' y1='295' x2='27.3' y2='160.5') + polygon.laptop-base(points='103.2 263.6 258.9 219.3 636.5 294.4 452.1 339 103.2 263.6') + g.laptop-keyboard + polygon(points='369.6 265.6 255.3 244.3 255.5 243.5 264.7 241.9 380.9 262.3 380.8 263.1 369.6 265.6') + polygon(points='235.9 256.4 219.8 253.2 219.9 252.5 228.7 251 245.3 253.4 245.1 254.2 235.9 256.4') + polygon(points='473.1 303.7 248.4 258.9 248.6 258.1 257.7 256.6 486.2 300.4 486 301.3 473.1 303.7') + polygon(points='410.3 300.2 202.7 257.5 202.9 256.8 211.4 255.3 422.4 297.1 422.2 298 410.3 300.2') + polygon(points='448.5 308.1 427 303.7 427.3 302.8 439.2 301.4 461.2 304.9 461 305.8 448.5 308.1') + polygon(points='200.1 264.7 186 261.7 186.2 261 194.5 259.5 208.9 261.8 208.8 262.5 200.1 264.7') + polygon(points='221.1 269.1 206.6 266.1 206.8 265.3 215.4 263.9 230.3 266.2 230.1 267 221.1 269.1') + polygon(points='361.4 298.9 230 271 230.2 270.3 239.2 268.9 372.7 295.9 372.5 296.7 361.4 298.9') + polygon(points='442.8 279.2 383.7 268.2 383.9 267.3 395.1 265.7 455.4 275.9 455.2 276.7 442.8 279.2') + polygon(points='524.6 294.4 458.6 282.1 458.8 281.2 471.3 279.7 538.6 291 538.4 291.9 524.6 294.4') + polygon(points='424.7 312.4 374.6 301.7 374.8 300.9 385.9 299.5 437 309.3 436.8 310.2 424.7 312.4') + polygon(points='409.1 277.3 397.6 278.8 397.4 279.6 498.4 299.1 511.8 296.7 512 295.8 409.1 277.3') + polygon(points='394.2 274.5 394.4 273.6 246.7 246.5 237.7 248.1 237.5 248.8 382.8 276.8 394.2 274.5') + g.paw.paw-right + path.down(d='M289.1,181.7c-12.1,9.8-20.6,20.7-20.7,32.1-.2,9,3.8,20.4,13.3,25.2s20.1.6,29.6-3.4c13.4-5.7,23.9-14.6,29.4-21.5') + g.up + path(d='M327.3,170c-.4-1.4-6.3-18.8-23.5-23.5-.8-.2-18.6-4.7-28.9,6.3-8.4,9.1-6,22.5-4.6,30.2a54.3,54.3,0,0,0,8.1,19.9') + g.pads + path(d='M297.2,154.8c1-.5,2.7-.1,3,.6s-1.4,2.4-2.6,2.1a1.6,1.6,0,0,1-1.1-1.2A1.6,1.6,0,0,1,297.2,154.8Z') + path(d='M285.8,159.4c.3-.4,1-1.1,1.7-.8s.9,1.4.8,2.2-1.8,2.1-2.5,1.5S285.2,160.4,285.8,159.4Z') + path(d='M276.9,171c.5-.4,2.7-.3,3.2.6s-.6,1.8-1.4,1.8S276.2,171.6,276.9,171Z') + path(d='M296.4,168.6c2.3-.9,6.4,6.3,7.6,9s-5.2,4.5-7.4,6-5.1-6.1-5.9-8.3S293.7,169.8,296.4,168.6Z') + polygon.terminal-frame(points='93.8 63.3 284.1 73 335.9 230.5 146.2 197.6 93.8 63.3') + g.terminal-code + line(x1='260.2' y1='92.3' x2='212.2' y2='88.7') + line(x1='197.3' y1='87.5' x2='145.2' y2='83.5') + line(x1='251' y1='104.2' x2='223.4' y2='101.8') + line(x1='209.4' y1='100.5' x2='154.4' y2='95.6') + line(x1='256.4' y1='117.9' x2='227.5' y2='114.7') + line(x1='215.9' y1='113.4' x2='183.5' y2='109.8') + line(x1='169.1' y1='108.2' x2='142.9' y2='105.3') + line(x1='275.4' y1='132.8' x2='249.4' y2='129.6') + line(x1='234.4' y1='127.8' x2='197.3' y2='123.3') + line(x1='185.6' y1='121.9' x2='149.1' y2='117.5') + line(x1='261' y1='144.6' x2='244.5' y2='142.5') + line(x1='235.5' y1='141.3' x2='214.9' y2='138.7') + line(x1='203.4' y1='137.2' x2='180.4' y2='134.3') + line(x1='169.3' y1='132.9' x2='155.1' y2='131.1') + line(x1='264.7' y1='158.3' x2='221.9' y2='152.1') + line(x1='208.2' y1='150.1' x2='191.7' y2='147.7') + line(x1='291.3' y1='174.3' x2='268.8' y2='170.9') + line(x1='257.8' y1='169.2' x2='226.5' y2='164.4') + line(x1='217.3' y1='163' x2='185' y2='158.1') + line(x1='173.8' y1='156.4' x2='152.9' y2='153.2') + line(x1='278.5' y1='185.6' x2='257.3' y2='182.2') + line(x1='243.8' y1='179.9' x2='230.3' y2='177.7') + line(x1='216.5' y1='175.8' x2='196.7' y2='172.5') + line(x2='262.1' y2='196.1' x1='280.5' y1='199.2') + line(x2='213.8' y2='187.9' x1='251.1' y1='194.2') + line(x2='180.8' y2='182.3' x1='202.7' y1='186') + polygon.laptop-cover(points='103.2 263.6 452.1 339 360.8 12.4 2 2 103.2 263.6') + g.paw.paw-left + g.up + path(d='M586.6,208.8c-.6-2.3-4.2-15.6-17.2-22.2-2.7-1.3-12.8-6.4-23.6-1.8s-14.6,16.5-14.8,18.4c-1.2,9-.7,18.4,2.4,26.1,2.4,6,7.5,17.2,9.7,20.2') + g.pads + path(d='M561.4,194.9a2.7,2.7,0,0,1,3,.5c.4,1-1.4,2.4-2.6,2.2a1.5,1.5,0,0,1-1.1-1.3A1.2,1.2,0,0,1,561.4,194.9Z') + path(d='M550.7,200.4c.4-.5,1.1-1.1,1.7-.8a2,2,0,0,1,.8,2.2c-.3,1.2-1.8,2-2.5,1.5S550.1,201.3,550.7,200.4Z') + path(d='M541.1,211.1c.5-.4,2.7-.4,3.2.5s-.6,1.8-1.5,1.9S540.4,211.6,541.1,211.1Z') + path(d='M560.6,209.2c2.3-.9,6.4,6.3,7.6,9s-5.3,4.5-7.4,6-5.1-6-5.9-8.3S557.9,210.4,560.6,209.2Z') + path.down(d='M534.1,231.4c-19.7,6-32.9,18.4-34.2,29.1a30.1,30.1,0,0,0,1.7,14.1,24.8,24.8,0,0,0,6.1,8.8c6,5.1,16.8,4,38-3.9a288.7,288.7,0,0,0,46.5-22.1') + g.headphone.headphone-left + g.speaker + path(d='M609.5,137.3c-17.1,6.3-20.7,51.4-4.5,67.3,1.4,1.5,5.5,5.5,11.3,5.9,8.2.5,14.5-6.3,16.9-8.9,10.1-11,11.5-27.5,8.1-40.1-1.4-4.8-3.9-14-12.7-19.9C627.4,140.8,617.7,134.3,609.5,137.3Z') + path(d='M626.5,196.1c2.7-.4,5.9-2.6,9.3-6,6.6-6.6,6.8-16.6,5.8-24s-4.2-16.1-11.3-19.7a18.7,18.7,0,0,0-10.9-1.9C614,149.3,615.3,192.6,626.5,196.1Z') + path(d='M631.6,151c-4.5,3.3-.5,27.1,3.8,28.2s6.9-6.6,6.2-13.1S637.4,153.5,631.6,151Z') + path.band(d='M638.9,157.7c-4-16.8-25.9-61.9-75.3-95.3A155.5,155.5,0,0,0,515,40.6') + g.music.music-left + g.note + g + path(d='M633.3,119.9c.6,2,1.3,3.5,3.8,6.3s5.2,4.3,6.5,7.2a6.9,6.9,0,0,1,.7,1.9,10.2,10.2,0,0,1-.7,6.6') + path(d='M633.3,119.9a23,23,0,0,0,2.4,11.7c2.4,4.3,5.1,5.4,6.8,9.5a16.9,16.9,0,0,1,.5,11') + line(x1='633.3' y1='121.1' x2='633.3' y2='166.2') + path(d='M633.3,166.2c.2-3.2-4.6-6.3-8.9-6.3s-8.7,2.6-8.7,5.7,4.7,5.7,8.7,5.8S633.1,169.2,633.3,166.2Z') + g + path(d='M633.3,119.9c.6,2,1.3,3.5,3.8,6.3s5.2,4.3,6.5,7.2a6.9,6.9,0,0,1,.7,1.9,10.2,10.2,0,0,1-.7,6.6') + path(d='M633.3,119.9a23,23,0,0,0,2.4,11.7c2.4,4.3,5.1,5.4,6.8,9.5a16.9,16.9,0,0,1,.5,11') + line(x1='633.3' y1='121.1' x2='633.3' y2='166.2') + path(d='M633.3,166.2c.2-3.2-4.6-6.3-8.9-6.3s-8.7,2.6-8.7,5.7,4.7,5.7,8.7,5.8S633.1,169.2,633.3,166.2Z') + g.note + g + polyline(points='614.8 155 614.8 116.8 647.5 124 647.5 162.9') + path(d='M614.8,155.7c0-3.1-4.4-5.7-8.2-5.9s-9.2,2.8-9.2,6,4.7,5.6,8.7,5.6S614.8,158.8,614.8,155.7Z') + path(d='M647.5,163.3c.1-3.1-4.4-5.7-8.2-5.9s-9.2,2.8-9.1,6,4.7,5.7,8.6,5.7S647.5,166.5,647.5,163.3Z') + g + polyline(points='614.8 155 614.8 116.8 647.5 124 647.5 162.9') + path(d='M614.8,155.7c0-3.1-4.4-5.7-8.2-5.9s-9.2,2.8-9.2,6,4.7,5.6,8.7,5.6S614.8,158.8,614.8,155.7Z') + path(d='M647.5,163.3c.1-3.1-4.4-5.7-8.2-5.9s-9.2,2.8-9.1,6,4.7,5.7,8.6,5.7S647.5,166.5,647.5,163.3Z') + g.note + polyline(points='646.5 148.5 646.5 109.4 613.2 117.4 613.2 157.2') + path(d='M646.5,149c0-3.1-4.4-5.7-8.1-5.8s-9.2,2.7-9.1,5.9,4.7,5.6,8.6,5.6S646.5,152.1,646.5,149Z') + path(d='M613.2,156.7c.1-3.1-4.4-5.7-8.2-5.8s-9.3,2.7-9.2,6,4.7,5.6,8.7,5.6S613.2,159.9,613.2,156.7Z') + line(x1='613.2' y1='123.2' x2='646.5' y2='115.1') + line(x1='613.2' y1='129.4' x2='646.5' y2='121.8') + g.note + g + path(d='M636.6,152.9c0-3.2-4.4-5.8-8.2-5.9s-9.3,2.8-9.3,6,4.8,5.7,8.7,5.7S636.6,156.1,636.6,152.9Z') + line(x1='636.6' y1='152.9' x2='636.6' y2='106.6') + path(d='M636.6,106.8a33.2,33.2,0,0,0,3.6,7.8c3.8,5.7,7.6,6.9,8.9,11.5a13.3,13.3,0,0,1-.9,8.4') + g + path(d='M636.6,152.9c0-3.2-4.4-5.8-8.2-5.9s-9.3,2.8-9.3,6,4.8,5.7,8.7,5.7S636.6,156.1,636.6,152.9Z') + line(x1='636.6' y1='152.9' x2='636.6' y2='106.6') + path(d='M636.6,106.8a33.2,33.2,0,0,0,3.6,7.8c3.8,5.7,7.6,6.9,8.9,11.5a13.3,13.3,0,0,1-.9,8.4') \ No newline at end of file diff --git a/bongo-cat-codes-2jamming/src/script.babel b/bongo-cat-codes-2jamming/src/script.babel new file mode 100644 index 0000000..4c98287 --- /dev/null +++ b/bongo-cat-codes-2jamming/src/script.babel @@ -0,0 +1,114 @@ +// Inspired By +// https://codepen.io/abeatrize/pen/LJqYey + +// Bongo Cat originally created by @StrayRogue and @DitzyFlama + +const ID = "bongo-cat" +const s = selector => `#${ID} ${selector}` +const notes = document.querySelectorAll(".note") + +for (let note of notes) { + note.parentElement.appendChild(note.cloneNode(true)) + note.parentElement.appendChild(note.cloneNode(true)) +} + +const music = { note: s(".music .note") } +const terminal = { frame: s(".terminal-frame"), code: s(".terminal-code line") } +const cat = { + pawRight: { + up: s(".paw-right .up"), + down: s(".paw-right .down") + }, + pawLeft: { + up: s(".paw-left .up"), + down: s(".paw-left .down") + } +} + +const style = getComputedStyle(document.documentElement) + +const green = style.getPropertyValue("--green") +const pink = style.getPropertyValue("--pink") +const blue = style.getPropertyValue("--blue") +const orange = style.getPropertyValue("--orange") +const cyan = style.getPropertyValue("--cyan") + +gsap.set(music.note, { scale: 0, autoAlpha: 1 }) + +const animatePawState = selector => + gsap.fromTo( + selector, + { autoAlpha: 0 }, + { + autoAlpha: 1, + duration: 0.01, + repeatDelay: 0.19, + yoyo: true, + repeat: -1 + } + ) + +const tl = gsap.timeline() + +tl + .add(animatePawState(cat.pawLeft.up), "start") + .add(animatePawState(cat.pawRight.down), "start") + .add(animatePawState(cat.pawLeft.down), "start+=0.19") + .add(animatePawState(cat.pawRight.up), "start+=0.19") + .timeScale(1.6) + +gsap.from(".terminal-code line", { + drawSVG: "0%", + duration: 0.1, + stagger: 0.1, + ease: 'none', + repeat: -1 +}) + +const noteEls = gsap.utils.pipe( + gsap.utils.toArray, + gsap.utils.shuffle +)(music.note) + +const numNotes = noteEls.length/3 +const notesG1 = noteEls.splice(0, numNotes) +const notesG2 = noteEls.splice(0, numNotes) +const notesG3 = noteEls + +const colorizer = gsap.utils.random([green, pink, blue, orange, cyan, "#a3a4ec", "#67b5c0", "#fd7c6e"], true) +const rotator = gsap.utils.random(-50, 50, 1, true); +const dir = amt => `${gsap.utils.random(["-", "+"])}=${amt}` + +const animateNotes = (els) => { + els.forEach(el => { + gsap.set(el, { + stroke: colorizer(), + rotation: rotator(), + x: gsap.utils.random(-25, 25, 1) + }) + }) + + return gsap.fromTo(els, { + autoAlpha: 1, + y: 0, + scale: 0 + }, { + duration: 2, + autoAlpha: 0, + scale: 1, + ease: "none", + stagger: { + from: "random", + each: 0.5 + }, + rotation: dir(gsap.utils.random(20, 30, 1)), + x: dir(gsap.utils.random(40, 60, 1)), + y: gsap.utils.random(-200, -220, 1), + onComplete: () => animateNotes(els) + }) +} + +tl + .add(animateNotes(notesG1)) + .add(animateNotes(notesG2), ">0.05") + .add(animateNotes(notesG3), ">0.25") diff --git a/bongo-cat-codes-2jamming/src/style.scss b/bongo-cat-codes-2jamming/src/style.scss new file mode 100644 index 0000000..c4dc80c --- /dev/null +++ b/bongo-cat-codes-2jamming/src/style.scss @@ -0,0 +1,76 @@ +:root { + --bg: #1a1e2d; + --green: #a5ea9b; + --pink: #ff61d8; + --blue: #569cfa; + --orange: #ffcc81; + --cyan: #7ed1e2; +} + +body { + height: 100vh; + width: 100vw; + background: var(--bg); + display: flex; + place-content: center; + align-items: flex-end; +} + +.container { + width: 80vw; + height: 80vh; + + svg { + height: 100%; + width: 100%; + overflow: visible; + } +} + +#bongo-cat { + fill: var(--bg); + stroke-linecap: round; + stroke-linejoin: round; + stroke-width: 4; + + .laptop-cover, + .headphone .band { + fill: none; + } + + .paw, .head { + stroke: var(--orange); + } + + .laptop-keyboard { + stroke-width: 2; + } + + .terminal-code { + stroke-width: 5; + } + + .music .note, + .laptop-base, + .laptop-cover, + .paw .pads { + stroke: var(--pink); + } + + .table line, + .headphone .band, + .headphone .speaker path:nth-child(3) { + stroke: var(--green); + } + + .terminal-frame, + .laptop-keyboard, + .headphone .speaker path:nth-child(2) { + stroke: var(--blue); + } + + .terminal-code, + .headphone .speaker path:first-child { + stroke: var(--cyan); + } +} \ No newline at end of file diff --git a/bongo-cat-codes/README.markdown b/bongo-cat-codes/README.markdown new file mode 100644 index 0000000..0609e92 --- /dev/null +++ b/bongo-cat-codes/README.markdown @@ -0,0 +1,9 @@ +# Bongo Cat Codes + _A Pen created at CodePen.io. Original URL: [https://codepen.io/carolineartz/pen/VwYwZaP](https://codepen.io/carolineartz/pen/VwYwZaP). + + Part of an upcoming personal site update + +Inspired By +https://codepen.io/abeatrize/pen/LJqYey + +Bongo Cat originally created by @StrayRogue and @DitzyFlama \ No newline at end of file diff --git a/bongo-cat-codes/dist/index.html b/bongo-cat-codes/dist/index.html new file mode 100644 index 0000000..c7f87c1 --- /dev/null +++ b/bongo-cat-codes/dist/index.html @@ -0,0 +1,144 @@ + + + + + Bongo Cat Codes + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + \ No newline at end of file diff --git a/bongo-cat-codes/dist/script.js b/bongo-cat-codes/dist/script.js new file mode 100644 index 0000000..b6ff590 --- /dev/null +++ b/bongo-cat-codes/dist/script.js @@ -0,0 +1,6 @@ +// Part of an upcoming personal site update + +// Inspired By +// https://codepen.io/abeatrize/pen/LJqYey + +// Bongo Cat originally created by @StrayRogue and @DitzyFlama \ No newline at end of file diff --git a/bongo-cat-codes/dist/style.css b/bongo-cat-codes/dist/style.css new file mode 100644 index 0000000..e26c01d --- /dev/null +++ b/bongo-cat-codes/dist/style.css @@ -0,0 +1,364 @@ +.content { + position: relative; +} + +.container { + top: 0; + bottom: 0; + left: 0; + right: 0; +} + +#bongo-cat { + position: absolute; + height: 80vh; + width: 80vw; + top: 100vh; + bottom: 0; + left: 0; + right: 0; + margin: auto; +} + +.typing-animation { + -webkit-animation-timing-function: linear; + animation-timing-function: linear; + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; + -webkit-animation-duration: 1200ms; + animation-duration: 1200ms; +} + +path#f1-l1 { + -webkit-animation-name: typing-f1-l1; + animation-name: typing-f1-l1; +} + +path#f1-l2 { + -webkit-animation-name: typing-f1-l2; + animation-name: typing-f1-l2; +} + +path#f1-l3 { + -webkit-animation-name: typing-f1-l3; + animation-name: typing-f1-l3; +} + +path#f2-l4 { + -webkit-animation-name: typing-f2-l4; + animation-name: typing-f2-l4; +} + +path#f2-l5 { + -webkit-animation-name: typing-f2-l5; + animation-name: typing-f2-l5; +} + +path#f2-l6 { + -webkit-animation-name: typing-f2-l6; + animation-name: typing-f2-l6; +} + +path#f3-l7 { + -webkit-animation-name: typing-f3-l7; + animation-name: typing-f3-l7; +} + +path#f3-l8 { + -webkit-animation-name: typing-f3-l8; + animation-name: typing-f3-l8; +} + +path#f3-l9 { + -webkit-animation-name: typing-f3-l9; + animation-name: typing-f3-l9; +} + +@-webkit-keyframes typing-f3-l9 { + 0% { + d: path("M8,25L8,25"); + } + 82% { + d: path("M8,25L8,25"); + } + 92% { + d: path("M8,25L96,25"); + } + 100% { + d: path("M8,25L96,25"); + } +} + +@keyframes typing-f3-l9 { + 0% { + d: path("M8,25L8,25"); + } + 82% { + d: path("M8,25L8,25"); + } + 92% { + d: path("M8,25L96,25"); + } + 100% { + d: path("M8,25L96,25"); + } +} +@-webkit-keyframes typing-f3-l8 { + 0% { + d: path("M8,13L8,13"); + } + 68% { + d: path("M8,13L8,13"); + } + 82% { + d: path("M8,13L146,13"); + } + 100% { + d: path("M8,13L146,13"); + } +} +@keyframes typing-f3-l8 { + 0% { + d: path("M8,13L8,13"); + } + 68% { + d: path("M8,13L8,13"); + } + 82% { + d: path("M8,13L146,13"); + } + 100% { + d: path("M8,13L146,13"); + } +} +@-webkit-keyframes typing-f3-l7 { + 0% { + d: path("M0,1L0,1"); + } + 60% { + d: path("M0,1L0,1"); + } + 68% { + d: path("M0,1L96,1"); + } + 100% { + d: path("M0,1L96,1"); + } +} +@keyframes typing-f3-l7 { + 0% { + d: path("M0,1L0,1"); + } + 60% { + d: path("M0,1L0,1"); + } + 68% { + d: path("M0,1L96,1"); + } + 100% { + d: path("M0,1L96,1"); + } +} +@-webkit-keyframes typing-f2-l6 { + 0% { + d: path("M8,25L8,25"); + } + 54% { + d: path("M8,25L8,25"); + } + 60% { + d: path("M8,25L69,25"); + } + 100% { + d: path("M8,25L69,25"); + } +} +@keyframes typing-f2-l6 { + 0% { + d: path("M8,25L8,25"); + } + 54% { + d: path("M8,25L8,25"); + } + 60% { + d: path("M8,25L69,25"); + } + 100% { + d: path("M8,25L69,25"); + } +} +@-webkit-keyframes typing-f2-l5 { + 0% { + d: path("M8,13L8,13"); + } + 44% { + d: path("M8,13L8,13"); + } + 54% { + d: path("M8,13L114,13"); + } + 100% { + d: path("M8,13L114,13"); + } +} +@keyframes typing-f2-l5 { + 0% { + d: path("M8,13L8,13"); + } + 44% { + d: path("M8,13L8,13"); + } + 54% { + d: path("M8,13L114,13"); + } + 100% { + d: path("M8,13L114,13"); + } +} +@-webkit-keyframes typing-f2-l4 { + 0% { + d: path("M0,1L0,1"); + } + 30% { + d: path("M0,1L0,1"); + } + 44% { + d: path("M0,1L136,1"); + } + 100% { + d: path("M0,1L136,1"); + } +} +@keyframes typing-f2-l4 { + 0% { + d: path("M0,1L0,1"); + } + 30% { + d: path("M0,1L0,1"); + } + 44% { + d: path("M0,1L136,1"); + } + 100% { + d: path("M0,1L136,1"); + } +} +@-webkit-keyframes typing-f1-l3 { + 0% { + d: path("M8,25L8,25"); + } + 24% { + d: path("M8,25L8,25"); + } + 30% { + d: path("M8,25L61,25"); + } + 100% { + d: path("M8,25L61,25"); + } +} +@keyframes typing-f1-l3 { + 0% { + d: path("M8,25L8,25"); + } + 24% { + d: path("M8,25L8,25"); + } + 30% { + d: path("M8,25L61,25"); + } + 100% { + d: path("M8,25L61,25"); + } +} +@-webkit-keyframes typing-f1-l2 { + 0% { + d: path("M8,13L8,13"); + } + 14% { + d: path("M8,13L8,13"); + } + 24% { + d: path("M8,13L124,13"); + } + 100% { + d: path("M8,13L124,13"); + } +} +@keyframes typing-f1-l2 { + 0% { + d: path("M8,13L8,13"); + } + 14% { + d: path("M8,13L8,13"); + } + 24% { + d: path("M8,13L124,13"); + } + 100% { + d: path("M8,13L124,13"); + } +} +@-webkit-keyframes typing-f1-l1 { + 0% { + d: path("M0,1L0,1"); + } + 14% { + d: path("M0,1L160,1"); + } + 100% { + d: path("M0,1L160,1"); + } +} +@keyframes typing-f1-l1 { + 0% { + d: path("M0,1L0,1"); + } + 14% { + d: path("M0,1L160,1"); + } + 100% { + d: path("M0,1L160,1"); + } +} +#paw-right--up, +#paw-right--down, +#paw-left--up, +#paw-left--down { + -webkit-animation: blink 300ms infinite; + animation: blink 300ms infinite; +} + +#paw-right--up, +#paw-left--down { + -webkit-animation-delay: 150ms; + animation-delay: 150ms; +} + +@-webkit-keyframes blink { + 0% { + opacity: 0; + } + 49% { + opacity: 0; + } + 50% { + opacity: 1; + } +} + +@keyframes blink { + 0% { + opacity: 0; + } + 49% { + opacity: 0; + } + 50% { + opacity: 1; + } +} +#laptop__code { + -webkit-transform: rotateX(-37deg) rotateY(-46deg) rotateZ(-23deg) translateX(8px) translateY(20px) translateZ(-50px); + transform: rotateX(-37deg) rotateY(-46deg) rotateZ(-23deg) translateX(8px) translateY(20px) translateZ(-50px); +} \ No newline at end of file diff --git a/bongo-cat-codes/license.txt b/bongo-cat-codes/license.txt new file mode 100644 index 0000000..4d8810d --- /dev/null +++ b/bongo-cat-codes/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2019 by Caroline Artz (https://codepen.io/carolineartz/pen/VwYwZaP) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/bongo-cat-codes/src/index.pug b/bongo-cat-codes/src/index.pug new file mode 100644 index 0000000..e4974ac --- /dev/null +++ b/bongo-cat-codes/src/index.pug @@ -0,0 +1,96 @@ +.content + .container + svg#bongo-cat(xmlns='http://www.w3.org/2000/svg', xmlns:xlink='http://www.w3.org/1999/xlink', viewBox='0 0 787.3 433.8') + defs + symbol#eye(data-name='eye', viewBox='0 0 19.2 18.7') + circle(cx='9.4', cy='9.1', r='8') + path(d='M16.3,5.1a1.3,1.3,0,0,1-1.4-.3,7.2,7.2,0,0,0-4.5-2.6A7.2,7.2,0,0,0,5.5,3.5,6.8,6.8,0,0,0,2.8,7.8a6.8,6.8,0,0,0,1,4.8,6.2,6.2,0,0,0,4,2.7,6.1,6.1,0,0,0,4.6-.7,6.7,6.7,0,0,0,2.9-3.7,6.4,6.4,0,0,0-.5-4.5c-.1-.2.8-1,1.5-1.3s2.2,0,2.3.5a9.4,9.4,0,0,1-.2,7.2,9.4,9.4,0,0,1-5.1,5.1,9,9,0,0,1-7,.2A9.6,9.6,0,0,1,1,13.5,9.2,9.2,0,0,1,.4,6.6,8.9,8.9,0,0,1,4.6,1.3,9,9,0,0,1,11.2.2,9.3,9.3,0,0,1,16.7,4C16.9,4.3,17,4.8,16.3,5.1Z') + symbol#paw-pads(data-name='paw-pads', viewBox='0 0 31.4 33.9') + path(d='M6.8,16a3.7,3.7,0,0,1,1.1,2.8,3.2,3.2,0,0,1-1.6,2.6L5,21.8H4.4a2.8,2.8,0,0,1-1.8.3A4.2,4.2,0,0,1,.2,19.1,7.7,7.7,0,0,1,0,17.6a2.8,2.8,0,0,1,.6-2,3.2,3.2,0,0,1,2.1-.8H4A5,5,0,0,1,6.8,16Zm7.3-4.8a1.8,1.8,0,0,0,.7-.5l.7-.4a3.5,3.5,0,0,0,1.1-1,3.2,3.2,0,0,0,.3-1.4,1.4,1.4,0,0,0-.2-.6,3.4,3.4,0,0,0-.3-2.4,3.2,3.2,0,0,0-2.1-1.5H13.1a4.7,4.7,0,0,0-1.6.4,2,2,0,0,0-.9.9l-.4.6v.4a6.1,6.1,0,0,0-.5,1.2,4.3,4.3,0,0,0,0,1.6,3.5,3.5,0,0,0,.5,2l.7.6a3.3,3.3,0,0,0,1.7.7A3,3,0,0,0,14.1,11.2ZM22.7,7l.6.2h.3A2.3,2.3,0,0,0,25,6.8l.4-.3.6-.3a7.5,7.5,0,0,0,1.5-.9,4.2,4.2,0,0,0,.8-1.2,1.9,1.9,0,0,0,.1-1.5A2.6,2.6,0,0,0,27.5,1,3.5,3.5,0,0,0,23.6.3a3.8,3.8,0,0,0-2,1.5,4.8,4.8,0,0,0-.7,2,3.6,3.6,0,0,0,.9,2.6ZM31,24.1a13.5,13.5,0,0,0-2.2-4.7,36.6,36.6,0,0,0-3.2-3.9,5.3,5.3,0,0,0-5-1.9,10.5,10.5,0,0,0-4.5,2.2A5.6,5.6,0,0,0,13.5,20a15.1,15.1,0,0,0,1.2,6.3c.8,2,1.7,4,2.6,5.9a1.6,1.6,0,0,0,1.5.8,1.7,1.7,0,0,0,1.9.9,17.1,17.1,0,0,0,8.7-4.8,8.2,8.2,0,0,0,1.7-2C31.6,26.3,31.3,25,31,24.1Z', fill='#ef97b0') + g#head + g#head__outline + path(d='M303.2,186.3c4-7,14.8-20.2,20-26,17-19,34.6-34.9,43-41l12-8s16.6-32,21-33c9-2,33,22,33,22s20-9,79,7c41,11.1,47,14,57,22,7.5,6,18,16,18,16s33.7-19.5,41-15-2,66-2,66,5.9,12.9,11,22c9.1,16.2,13.6,20.2,19,31,3.6,7.2,8.4,28.5,10.5,43.5l-385-62Z', fill='#fff') + path(d='M302.9,186.9c-1.2,3-5.9,12.6-9,18.8l-12.5,25.5-.6-1.2c32.2,4.8,64.4,9.2,96.6,13.6s64.4,8.9,96.5,13.7,64.3,9.7,96.4,14.9,64.1,10.5,96.2,15.8l-5.6,5.5c-1.2-8.5-2.8-17.1-4.8-25.6-1-4.1-2.1-8.4-3.4-12.3l-.5-1.4-.5-1.4-.6-1.3-.7-1.3a59.5,59.5,0,0,0-3.1-5.5c-2.2-3.6-4.7-7.2-7.1-11s-4.8-7.6-7-11.5c-4.5-7.9-8.3-15.9-12.1-24a4,4,0,0,1-.3-2.6h0c1.4-9.1,2.7-18.2,3.7-27.4.5-4.5.9-9.1,1.2-13.7s.4-9.1.2-13.4a26.4,26.4,0,0,0-.8-6,8.1,8.1,0,0,0-.3-1.1c-.1-.3-.2-.4-.1-.3h.3c0,.1.1.1,0,.1h-.6a11.9,11.9,0,0,0-2.5.2,16.3,16.3,0,0,0-3,.7,56.7,56.7,0,0,0-6.2,2.1,212.6,212.6,0,0,0-24.5,11.9h-.1a3.9,3.9,0,0,1-4.7-.6c-4.9-4.7-10-9.4-15.1-13.8a86.6,86.6,0,0,0-7.9-6,46.1,46.1,0,0,0-8.5-4.6c-6-2.6-12.6-4.6-19.2-6.7l-19.8-5.7a324.9,324.9,0,0,0-40-8.9,196.8,196.8,0,0,0-20.2-1.8c-1.7,0-3.4-.1-5.1,0h-2.5l-2.5.2-2.5.2-2.4.4-2.4.5-1.1.3h-.5l-.4.2H433a2.5,2.5,0,0,1-2.6-.7c-4.6-4.6-9.5-9.1-14.5-13.2a82.7,82.7,0,0,0-7.9-5.7L403.9,81a10.8,10.8,0,0,0-4-.9c-.1,0-.3,0-.3.1h0l-.7.5-1.5,1.7c-1,1.2-2,2.6-2.9,3.9s-3.6,5.5-5.3,8.3c-3.5,5.7-6.8,11.4-9.9,17.3h0l-.4.4-10.2,6.6a53.6,53.6,0,0,0-4.9,3.4l-4.6,3.8c-6.2,5.1-12.1,10.6-17.9,16.2s-11.3,11.4-16.7,17.4c-2.7,3-5.3,6.1-7.8,9.2s-5,6.3-7.4,9.5c-4.2,5.6-7,10-5.7,7.1a34.1,34.1,0,0,1,2.1-3.8l3.8-5.6c2.9-4,6.3-8.3,8.5-10.9s4.4-5.2,6.7-7.7l6.9-7.4c4.7-4.9,9.4-9.7,14.3-14.3s9.8-9.3,15-13.7l4-3.2,4.2-2.9,8.3-5.7-.4.4c3-5.9,6.1-11.8,9.4-17.7,1.6-2.9,3.3-5.8,5.1-8.6l2.9-4.3,1.8-2a7.5,7.5,0,0,1,1.3-1.1c.1-.2.6-.4,1-.5l.9-.2h1.7l1.4.2,2.7.8c1.7.7,3.3,1.5,4.8,2.3a84,84,0,0,1,8.5,5.7A175.7,175.7,0,0,1,434,98.5l-2.9-.6.8-.3.7-.2L434,97l2.7-.7,2.7-.5a23,23,0,0,1,2.6-.3l2.7-.3,2.7-.2h5.3a182.1,182.1,0,0,1,21,1.3,332.5,332.5,0,0,1,41.1,8.4l20,5.5c6.7,2,13.4,4,20.1,6.7a65.3,65.3,0,0,1,9.8,5.1c3.1,2.1,5.9,4.3,8.6,6.5,5.4,4.5,10.6,9.2,15.7,14l-4.8-.6c4.1-2.4,8.2-4.6,12.4-6.7s8.6-4.2,13-6c2.3-.9,4.6-1.7,7-2.4a23.4,23.4,0,0,1,3.8-.9,20,20,0,0,1,4.4-.4h1.3l1.5.4a5.1,5.1,0,0,1,1.7.7l.9.7.8.7a8.3,8.3,0,0,1,1.6,2.6,12.7,12.7,0,0,1,.8,2.3,44.6,44.6,0,0,1,1.1,7.7c.2,5,.1,9.7-.1,14.4s-.7,9.5-1.2,14.1c-.9,9.4-2.1,18.6-3.6,27.9l-.3-2.6c3.7,7.9,7.5,15.8,11.8,23.3,2.1,3.7,4.4,7.4,6.8,11s4.9,7.2,7.3,11.1c1.3,2,2.4,4,3.5,6.1a10.9,10.9,0,0,0,.8,1.5l.8,1.8.7,1.7.6,1.7c1.5,4.4,2.6,8.7,3.7,13.1a262,262,0,0,1,5.2,26.4,4.9,4.9,0,0,1-4.1,5.6h-1.5c-32.1-5-64.2-9.9-96.3-15.1s-64.1-10.6-96.1-16.1-64-11.4-96-17.4-63.9-11.9-95.9-17.4h-.1a.8.8,0,0,1-.6-.9v-.2l16.6-32.1C299.8,192.2,304.1,183.9,302.9,186.9Z') + g#head__face + g#eyes + use(width='19.2', height='18.7', transform='translate(474.8 195.2)', xlink:href='#eye') + use(width='19.2', height='18.7', transform='matrix(-0.51, -0.85, 0.82, -0.5, 370.39, 192.59)', xlink:href='#eye') + g#mouth + path(d='M399.2,186.3c.9,3.6,2.6,7.8,6,9,6.4,2.3,19-6,19-6s4.1,12.4,10,15,10.7-1.7,16-6', fill='#fff') + path(d='M450.2,198.3c.6,1.2.2,1.9-.2,2.2a36.7,36.7,0,0,1-7.6,4.9,14.9,14.9,0,0,1-4.8,1.4h-1.4l-1.3-.2-1.4-.4-1.3-.6a21.6,21.6,0,0,1-6.4-7.2,52.8,52.8,0,0,1-4-8.3l3.8,1.3a62.3,62.3,0,0,1-7.1,4.1,32.1,32.1,0,0,1-7.9,2.8,13.2,13.2,0,0,1-4.9.2l-1.4-.3a7.5,7.5,0,0,1-1.3-.6,7.9,7.9,0,0,1-2.3-1.6,16.8,16.8,0,0,1-2.9-4,24.1,24.1,0,0,1-1.6-4.2c-.1-.5,1.6-1.3,3-1.4s3.5.2,3.6.6a10.3,10.3,0,0,0,2.6,4.9l.7.5h2.4l1.5-.2a28.4,28.4,0,0,0,6.5-2c2.1-1,4.3-2.1,6.3-3.3h.1a2.5,2.5,0,0,1,3.4.9l.3.5a43.1,43.1,0,0,0,3.2,7.7,19.8,19.8,0,0,0,2.2,3.4,8.1,8.1,0,0,0,2.6,2.6,5,5,0,0,0,3,.7,10.8,10.8,0,0,0,3.7-1,33.4,33.4,0,0,0,7.2-4.3C448.8,197.4,449.5,197.2,450.2,198.3Z') + g#table + path(d='M65.7,181.8l714,124c0,74-2,54-2,128l-673-161Z', fill='#fff') + path(d='M786.7,304.2c-2.7,1.2-10.8,0-16.1-.9L31.1,176.4c-5.2-.9-8.9-3.8-6.2-5s14.3-1.4,19.5-.5L777.1,300.6C782.3,301.6,789.4,303.1,786.7,304.2Z') + g#laptop + g#laptop__base + polygon(points='641.9 304.1 454.7 348.2 103.8 271.3 254.6 230.3 641.9 304.1', fill='#f2f2f2') + path(d='M641.9,304.1c1.5-.1-2.3,1.5-10.3,3.6-28.9,7.5-58.1,15.2-87.7,22.6s-59.1,14.5-88.4,21.3l-.8.2-.8-.2-349.5-78-1.1-.2-8.7-1.9,8.6-2.3,150.6-41.5.6-.2h.7c62.5,11.7,125.5,23.6,188.4,35.9s125.6,25.1,188,37.6c8,1.6,11.9,3,10.4,3a185.6,185.6,0,0,1-18.4-2.6c-61.9-11.2-123.6-22.2-185-33.5s-122.7-23.1-184.4-35h1.2L104.4,273.4h-.1v-4.3l351.2,75.7h-1.5c28.3-6.7,56.3-13.3,84.3-19.5s56.5-12,85.2-18.1C631.3,305.6,640.4,304.1,641.9,304.1Z', fill='#231f20') + g#laptop__keyboard + polygon(points='371.1 274.8 256.8 253.5 257 252.7 266.2 251.1 382.4 271.5 382.3 272.3 371.1 274.8', fill='#3e3e54') + polygon(points='237.4 265.6 221.3 262.4 221.4 261.7 230.2 260.2 246.8 262.6 246.6 263.4 237.4 265.6', fill='#3e3e54') + polygon(points='474.6 312.9 249.9 268.1 250.1 267.3 259.2 265.8 487.7 309.6 487.5 310.5 474.6 312.9', fill='#3e3e54') + polygon(points='411.8 309.4 204.2 266.7 204.4 266 212.9 264.5 423.9 306.3 423.7 307.2 411.8 309.4', fill='#3e3e54') + polygon(points='450 317.3 428.5 312.9 428.8 312 440.7 310.6 462.7 314.1 462.5 315 450 317.3', fill='#3e3e54') + polygon(points='201.6 273.9 187.5 270.9 187.7 270.2 196 268.7 210.4 271 210.3 271.7 201.6 273.9', fill='#3e3e54') + polygon(points='222.6 278.3 208.1 275.3 208.3 274.5 216.9 273.1 231.8 275.4 231.6 276.2 222.6 278.3', fill='#3e3e54') + polygon(points='362.9 308.1 231.5 280.2 231.7 279.5 240.7 278.1 374.2 305.1 374 305.9 362.9 308.1', fill='#3e3e54') + polygon(points='444.3 288.4 385.2 277.4 385.4 276.5 396.6 274.9 456.9 285.1 456.7 285.9 444.3 288.4', fill='#3e3e54') + polygon(points='526.1 303.6 460.1 291.3 460.3 290.4 472.8 288.9 540.1 300.2 539.9 301.1 526.1 303.6', fill='#3e3e54') + polygon(points='426.2 321.6 376.1 310.9 376.3 310.1 387.4 308.7 438.5 318.5 438.3 319.4 426.2 321.6', fill='#3e3e54') + g + polygon(points='410.6 286.5 399.1 288 398.9 288.8 499.9 308.3 513.3 305.9 513.5 305 410.6 286.5', fill='#3e3e54') + polygon(points='395.7 283.7 395.9 282.8 248.2 255.7 239.2 257.3 239 258 384.3 286 395.7 283.7', fill='#3e3e54') + polygon(points='371.3 273.9 256.9 252.7 266.4 250.3 382.4 271.5 371.3 273.9', stroke='#000', stroke-linecap='round', stroke-linejoin='round', stroke-width='1.2') + polygon(points='237.6 264.9 221.4 261.7 230.4 259.4 246.8 262.6 237.6 264.9', stroke='#000', stroke-linecap='round', stroke-linejoin='round', stroke-width='1.2') + polygon(points='474.8 312 250 267.3 259.4 265.1 487.7 309.6 474.8 312', stroke='#000', stroke-linecap='round', stroke-linejoin='round', stroke-width='1.2') + polygon(points='412 308.5 204.4 266 213.1 263.8 423.9 306.3 412 308.5', stroke='#000', stroke-linecap='round', stroke-linejoin='round', stroke-width='1.2') + polygon(points='450.2 316.4 428.8 312 440.9 309.7 462.8 314.1 450.2 316.4', stroke='#000', stroke-linecap='round', stroke-linejoin='round', stroke-width='1.2') + polygon(points='201.7 273.1 187.7 270.2 196.2 268 210.4 271 201.7 273.1', stroke='#000', stroke-linecap='round', stroke-linejoin='round', stroke-width='1.2') + polygon(points='222.8 277.6 208.3 274.5 217.1 272.4 231.8 275.4 222.8 277.6', stroke='#000', stroke-linecap='round', stroke-linejoin='round', stroke-width='1.2') + polygon(points='363.1 307.3 231.7 279.5 240.9 277.3 374.2 305.1 363.1 307.3', stroke='#000', stroke-linecap='round', stroke-linejoin='round', stroke-width='1.2') + polygon(points='444.6 287.5 385.4 276.5 396.8 274.1 456.9 285 444.6 287.5', stroke='#000', stroke-linecap='round', stroke-linejoin='round', stroke-width='1.2') + polygon(points='526.3 302.7 460.3 290.4 473 288 540.1 300.2 526.3 302.7', stroke='#000', stroke-linecap='round', stroke-linejoin='round', stroke-width='1.2') + polygon(points='426.4 320.7 376.3 310.1 387.6 307.9 438.5 318.5 426.4 320.7', stroke='#000', stroke-linecap='round', stroke-linejoin='round', stroke-width='1.2') + g + polygon(points='410.7 285.6 399.1 288 500.1 307.4 513.5 305 410.7 285.6', stroke='#000', stroke-linecap='round', stroke-linejoin='round', stroke-width='1.2') + polygon(points='395.9 282.8 248.4 255 239.2 257.3 384.5 285.2 395.9 282.8', stroke='#000', stroke-linecap='round', stroke-linejoin='round', stroke-width='1.2') + g#paw-right + g#paw-right--down + path(d='M293.2,191.3l10-7s-18.4,11.1-24,20-13,20.4-9,31c4.7,12.4,20.5,15.7,22,16,20,3.8,47.8-24.3,47.8-24.3s1.9-3.3,2.2-3.7', fill='#fff') + path(d='M342.1,223.4c.9,1.2.2,2.8-.3,3.7l-.4.7-.3.3a118.1,118.1,0,0,1-14.2,12.3,83.2,83.2,0,0,1-16.2,9.8,43.9,43.9,0,0,1-9.3,3,26.3,26.3,0,0,1-10.1.2,44.5,44.5,0,0,1-9.3-3.2,34.2,34.2,0,0,1-8.3-5.5,23,23,0,0,1-5.8-8.5,21.3,21.3,0,0,1-1.3-10.3,34.9,34.9,0,0,1,2.7-9.7,76.1,76.1,0,0,1,4.5-8.5l2.4-4,.6-1,.8-1.1a15.6,15.6,0,0,1,1.6-2,49.9,49.9,0,0,1,7-6.8,136.1,136.1,0,0,1,15.3-11.2,3.1,3.1,0,0,1,4.4,1,3,3,0,0,1-.8,4.2H305l-8.6,6.2c-.9.6-2.7-.5-3.1-1.9s.5-4.4,1.5-5l6.6-4.5,3.5,5.3A131.9,131.9,0,0,0,290,197.4a52.7,52.7,0,0,0-6.4,6,6.5,6.5,0,0,0-1.3,1.6l-.6.8-.7,1-2.4,3.8c-1.6,2.6-3.1,5.2-4.4,7.8a27.7,27.7,0,0,0-2.4,8.1,15.6,15.6,0,0,0,.8,8,17.4,17.4,0,0,0,4.4,6.7,27.2,27.2,0,0,0,7.1,4.9,39.5,39.5,0,0,0,8.1,3,21.6,21.6,0,0,0,8.4,0,37.8,37.8,0,0,0,8.5-2.6,84.9,84.9,0,0,0,15.7-9,142.4,142.4,0,0,0,14.1-11.6l-.3.3,1.1-1.8C340.3,223.4,341.3,222.2,342.1,223.4Z') + g#paw-right--up + g + path(d='M282.2,215.2c-1.6-1.6-12.8-17.9-14-34.3-.1-2.5,1.7-16,12.9-22.4s22.3-1.9,26.2.4c12.2,7.3,21.2,19.1,22.8,22.4', fill='#fff') + path(d='M330,181.2a2.4,2.4,0,0,1-2.6-1.3,71.4,71.4,0,0,0-9.8-10.8,64,64,0,0,0-11.7-8.6,26.3,26.3,0,0,0-6.5-2.3,26.9,26.9,0,0,0-6.9-.6,24.9,24.9,0,0,0-6.7,1.3,20.8,20.8,0,0,0-5.8,3.3,23.1,23.1,0,0,0-7.6,11,32.5,32.5,0,0,0-1.4,6.6,6.6,6.6,0,0,0,.1,1.4l.2,1.8c.1,1.2.4,2.3.6,3.5a65,65,0,0,0,4.8,13.4c1,2.2,2.2,4.3,3.4,6.4a43.1,43.1,0,0,0,3.9,5.9.6.6,0,0,1,0,.6c0,.2-.2.4-.4.7a5.7,5.7,0,0,1-1.5,1.6c-1.3.6-4.1.1-4.6-.6a89.5,89.5,0,0,1-7.2-13.7,63.7,63.7,0,0,1-4.3-14.9,25.7,25.7,0,0,1-.5-4c0-.3-.1-.6-.1-1v-1.2a12.5,12.5,0,0,1,.2-2.1,35.2,35.2,0,0,1,2.4-7.8,28.6,28.6,0,0,1,4.1-6.9,24.6,24.6,0,0,1,6.1-5.5,26.2,26.2,0,0,1,15.5-4.2,28.9,28.9,0,0,1,7.8,1.2l3.8,1.3,1.8.9,1.8,1a78.2,78.2,0,0,1,11.9,9.6,80.2,80.2,0,0,1,9.7,11.8C331.1,179.7,331.4,181,330,181.2Z') + use(width='31.4', height='33.93', transform='translate(273.2 166.1) rotate(-5.6)', xlink:href='#paw-pads') + g#laptop__terminal + path(d='M316.9,238.7,153.5,205.2a5.1,5.1,0,0,1-4-3.5L109.8,75.4c-1-3.3,1.9-6.6,5.6-6.3L277.9,84.5a5.2,5.2,0,0,1,4.6,3.7l40.7,144.4C324.2,236.2,320.8,239.5,316.9,238.7Z') + path(d='M317.3,238.7a7.9,7.9,0,0,0,2.2-.7,5,5,0,0,0,2.2-1.9,3.7,3.7,0,0,0,.6-2.9l-.3-.8-.2-.9a15.4,15.4,0,0,1-.5-1.7L300,154.6l-10.7-37.5L284,98.3l-2.6-9.4a7.9,7.9,0,0,0-.4-.9,4.3,4.3,0,0,0-.4-.7,3.3,3.3,0,0,0-1.5-1.1l-.9-.3h-1.1l-2.4-.2L119.2,71.2l-2.4-.3h-2.2a3.3,3.3,0,0,0-2.8,1.6,2.4,2.4,0,0,0-.5,1.4v.8c.1.1.1.2.1.4l.2.6,1.5,4.6L119,98.8l11.8,37.3,11.7,37.2,5.9,18.6,2.9,9.3a3.4,3.4,0,0,0,2.2,2h1l1.2.3,2.4.4,153,31.1c4.3.9,7.4,2.9,5.2,3.3s-11.7-.1-16-1l-75.8-15.7L186.6,214l-19-3.9-9.5-2-4.7-1h-.7l-.8-.3a6.1,6.1,0,0,1-1.4-.7,7.6,7.6,0,0,1-2.3-2.4l-.4-.8a1.9,1.9,0,0,1-.2-.7l-.4-1.2-.7-2.3-1.4-4.6-2.9-9.2-5.8-18.5-11.5-36.9-11.5-37-2.9-9.2L109,78.5l-.7-2.3v-.6c0-.3-.1-.6-.1-.8a4.8,4.8,0,0,1,0-1.7,6.8,6.8,0,0,1,3.8-5,10.1,10.1,0,0,1,3-.7h2.6l9.6,1L204.1,76l38.5,3.7,19.3,1.9,9.6.9,4.8.5h2.6a6.6,6.6,0,0,1,2.7,1.2,7.2,7.2,0,0,1,1.9,2.4,12.1,12.1,0,0,1,.5,1.4l.3,1.1,1.3,4.7,2.6,9.3,5.2,18.6,10.4,37.3,10.4,37.3,5.3,18.6,2.6,9.4,1.3,4.6.6,2.4a7,7,0,0,1,.4,2.7,5.7,5.7,0,0,1-1.8,3.7,5.9,5.9,0,0,1-3.4,1.6,3.5,3.5,0,0,1-2.1-.4C316.7,239,316.8,238.9,317.3,238.7Z') + + g#laptop__terminal_code_scene + g#laptop__code + g(stroke='#3DE0E8', stroke-width='6', transform='matrix(-1 0 0 1 278 103)') + g#f3(transform='translate(0 76)') + path#f3-l9.typing-animation(d='M8,25L8,25', stroke-dasharray='60,10') + path#f3-l8.typing-animation(d='M8,13L8,13', stroke-dasharray='50,10') + path#f3-l7.typing-animation(d='M0,1L0,1', stroke-dasharray='25,10') + g#f2(transform='translate(0 38)') + path#f2-l6.typing-animation(d='M8,25L8,25', stroke-dasharray='40,10') + path#f2-l5.typing-animation(d='M8,13L8,13', stroke-dasharray='60,10') + path#f2-l4.typing-animation(d='M0,1L0,1', stroke-dasharray='30,10') + g#f1 + path#f1-l3.typing-animation(d='M8,25L8,25', stroke-dasharray='60,10') + path#f1-l2.typing-animation(d='M8,13L8,13', stroke-dasharray='60,10') + path#f1-l1.typing-animation(d='M0,1L0,1', stroke-dasharray='60,10') + g#laptop__cover(style='mix-blend-mode: hard-light;') + polygon(points='440.7 347.2 90.3 275.6 4.7 3.8 353 36.7 440.7 347.2', fill='#f2f2f2') + path(d='M440.4,346.4c-2.5-5.3-6.5-18.8-9-27.4L390.7,178c-13.6-46.8-26.9-93.7-40.3-140.6l2.3,2L4.4,7.1,7.9,2.8,94,274.5l-2.9-2.6q83.7,16.8,166.8,34.2t166.8,35.4c8.8,1.9,17.5,5.1,14.7,5.5s-6.3-.2-12-.9-12.3-1.5-16.8-2.3Q330.5,328.1,250,312.1c-53.5-10.8-107.1-21.7-160.4-32.7l-2.3-.5-.6-2.1L1.5,4.8,0,0,5,.5,353.3,34l1.8.2.5,1.8q20.7,73.8,41.2,147.8l40.6,147.5C439.8,340.1,442.9,351.7,440.4,346.4Z') + g#paw-left + g#paw-left--up + g + path(d='M545.4,261.9c-7.1-13-12.9-31.1-13.3-37.6-.6-9,0-15.6,5.2-22.2s15-9.8,22.7-8.8a26.7,26.7,0,0,1,17.3,9.4c5.3,5.8,9.4,12.9,11.6,16.6', fill='#fff') + path(d='M588.9,219.2c-1.4.4-2.3-.7-2.8-1.4a93.9,93.9,0,0,0-8.9-12.5c-3.3-3.9-7.1-7-11.7-8.6a24.2,24.2,0,0,0-7.1-1.4,24.5,24.5,0,0,0-7.1.7,27,27,0,0,0-6.6,2.7,21,21,0,0,0-5.2,4.6,20.6,20.6,0,0,0-3.5,6.1,22.2,22.2,0,0,0-1.3,6.9,47.3,47.3,0,0,0,.1,7.5,52.2,52.2,0,0,0,1.4,7.1c1.4,4.8,3.1,9.7,5,14.4a147.7,147.7,0,0,0,6.5,13.9c.4.7-1,2.3-2.4,2.6s-4-.6-4.4-1.4c-2.3-4.8-4.3-9.7-6.1-14.6a128.8,128.8,0,0,1-4.6-15.3c-.3-1.3-.5-2.6-.7-4a16.4,16.4,0,0,1-.2-2.2v-2a57,57,0,0,1,.4-8.2,27.2,27.2,0,0,1,2.3-8.2c.7-1.3,1.4-2.5,2.2-3.7l1.3-1.7,1.4-1.6a28.8,28.8,0,0,1,7-5,27.6,27.6,0,0,1,8-2.5,25.6,25.6,0,0,1,8.3-.2,27.4,27.4,0,0,1,15.1,6.7,50.6,50.6,0,0,1,5.5,5.9,111.3,111.3,0,0,1,8.7,13.2C589.8,217.7,590.3,218.9,588.9,219.2Z') + use(width='31.4', height='33.93', transform='matrix(0.99, -0.03, 0.04, 1, 539.85, 203.52)', xlink:href='#paw-pads') + g#paw-left--down + path(d='M538.2,239.3c-3.2,1.6-33,10.8-37,28-.4,1.8-2.1,18.9,7,26,5.5,4.3,12.7,2.8,25,0,10.3-2.3,19-5.8,40-16,9.1-4.4,16.6-8.2,22-11', fill='#fff') + path(d='M595.1,266.4c.1,1.4-1.4,2.4-2.4,2.9l-18.3,9.4c-6.2,3.1-12.3,6.1-18.6,9a120.8,120.8,0,0,1-19.6,7.2l-5.1,1.2-5.1,1.1a43.4,43.4,0,0,1-5.2.9,33.8,33.8,0,0,1-5.6.3,17.8,17.8,0,0,1-5.8-1.5,6.1,6.1,0,0,1-1.4-.7l-1.3-.9-2.2-2a23.6,23.6,0,0,1-5.2-10.2,44.5,44.5,0,0,1-1.3-10.9c0-.9.1-1.8.1-2.7a6.6,6.6,0,0,0,.1-1.4v-.7c.1-.3.1-.7.2-.9a21.6,21.6,0,0,1,2.1-5.5,33.4,33.4,0,0,1,7.1-8.7,67.1,67.1,0,0,1,8.7-6.4,121.7,121.7,0,0,1,19-9,1.5,1.5,0,0,1,1.7.6,3.4,3.4,0,0,1,.9,1.9c.1,1.5-1.6,4.2-2.6,4.6a91.1,91.1,0,0,0-17.8,8.5,40.1,40.1,0,0,0-7.6,5.8,22.8,22.8,0,0,0-5.2,7.3l-.4,1-.3,1a1.7,1.7,0,0,0-.2.5v.4c-.1.4-.1.8-.2,1.2s-.1,3.1-.1,4.7a35.4,35.4,0,0,0,1.4,9.3,15.6,15.6,0,0,0,4.5,7.3c2,1.9,4.7,2.6,7.8,2.5a55.9,55.9,0,0,0,9.7-1.2l4.9-1.1,4.9-1.1a121,121,0,0,0,18.8-6.8c12.4-5.3,24.6-11.5,36.8-17.4C593.4,265.4,595,264.9,595.1,266.4Z') \ No newline at end of file diff --git a/bongo-cat-codes/src/script.babel b/bongo-cat-codes/src/script.babel new file mode 100644 index 0000000..b6ff590 --- /dev/null +++ b/bongo-cat-codes/src/script.babel @@ -0,0 +1,6 @@ +// Part of an upcoming personal site update + +// Inspired By +// https://codepen.io/abeatrize/pen/LJqYey + +// Bongo Cat originally created by @StrayRogue and @DitzyFlama \ No newline at end of file diff --git a/bongo-cat-codes/src/style.scss b/bongo-cat-codes/src/style.scss new file mode 100644 index 0000000..d560ab6 --- /dev/null +++ b/bongo-cat-codes/src/style.scss @@ -0,0 +1,115 @@ +$base-typing-speed: 300ms; +$code-typing-animation-duration: 1200ms; + +.content { + position: relative; +} + +.container { + top: 0; bottom: 0; left: 0; right: 0; +} + +#bongo-cat { + position: absolute; + height: 80vh; + width: 80vw; + top: 100vh; bottom: 0; left: 0; right: 0; + margin: auto; +} + +.typing-animation { + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-duration: $code-typing-animation-duration; +} + +@for $line from 1 through 9 { + $fn-group: ceil($line / 3); + path#f#{$fn-group}-l#{$line} { + animation-name: typing-f#{$fn-group}-l#{$line} + } +} + +@keyframes typing-f3-l9 { + 0% { d: path('M8,25L8,25') } + 82% { d: path('M8,25L8,25') } + 92% { d: path('M8,25L96,25') } + 100% { d: path('M8,25L96,25') } +} + +@keyframes typing-f3-l8 { + 0% { d: path('M8,13L8,13') } + 68% { d: path('M8,13L8,13') } + 82% { d: path('M8,13L146,13') } + 100% { d: path('M8,13L146,13') } +} + +@keyframes typing-f3-l7 { + 0% { d: path('M0,1L0,1') } + 60% { d: path('M0,1L0,1') } + 68% { d: path('M0,1L96,1') } + 100% { d: path('M0,1L96,1') } +} + +@keyframes typing-f2-l6 { + 0% { d: path('M8,25L8,25') } + 54% { d: path('M8,25L8,25') } + 60% { d: path('M8,25L69,25') } + 100% { d: path('M8,25L69,25') } +} + +@keyframes typing-f2-l5 { + 0% { d: path('M8,13L8,13') } + 44% { d: path('M8,13L8,13') } + 54% { d: path('M8,13L114,13') } + 100% { d: path('M8,13L114,13') } +} + +@keyframes typing-f2-l4 { + 0% { d: path('M0,1L0,1') } + 30% { d: path('M0,1L0,1') } + 44% { d: path('M0,1L136,1') } + 100% { d: path('M0,1L136,1') } +} + +@keyframes typing-f1-l3 { + 0% { d: path('M8,25L8,25') } + 24% { d: path('M8,25L8,25') } + 30% { d: path('M8,25L61,25') } + 100% { d: path('M8,25L61,25') } +} + +@keyframes typing-f1-l2 { + 0% { d: path('M8,13L8,13') } + 14% { d: path('M8,13L8,13') } + 24% { d: path('M8,13L124,13') } + 100% { d: path('M8,13L124,13') } +} + +@keyframes typing-f1-l1 { + 0% { d: path('M0,1L0,1') } + 14% { d: path('M0,1L160,1') } + 100% { d: path('M0,1L160,1') } +} + +#paw-right--up, +#paw-right--down, +#paw-left--up, +#paw-left--down { + animation: blink $base-typing-speed infinite; +} + +#paw-right--up, +#paw-left--down{ + animation-delay: $base-typing-speed/2; +} + +@keyframes blink { + 0% { opacity: 0; } + 49% { opacity: 0; } + 50% { opacity: 1; } +} + +#laptop__code { + transform: rotateX(-37deg) rotateY(-46deg) rotateZ(-23deg) translateX(8px) translateY(20px) translateZ(-50px); +} \ No newline at end of file diff --git a/book-store-ui/LICENSE.txt b/book-store-ui/LICENSE.txt new file mode 100644 index 0000000..d514c26 --- /dev/null +++ b/book-store-ui/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2023 Aysenur Turk (https://codepen.io/TurkAysenur/pen/JjGKKrP) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/book-store-ui/README.markdown b/book-store-ui/README.markdown new file mode 100644 index 0000000..e342cf6 --- /dev/null +++ b/book-store-ui/README.markdown @@ -0,0 +1,7 @@ +# Book Store UI + +A Pen created on CodePen.io. Original URL: [https://codepen.io/TurkAysenur/pen/JjGKKrP](https://codepen.io/TurkAysenur/pen/JjGKKrP). + +Inspired by Dwinawan +https://dribbble.com/shots/2425824--Exploration-Book-Store-Website + diff --git a/book-store-ui/README.md b/book-store-ui/README.md new file mode 100644 index 0000000..482e902 --- /dev/null +++ b/book-store-ui/README.md @@ -0,0 +1,6 @@ +# Book Store UI + +A Pen created on CodePen.io. Original URL: [https://codepen.io/TurkAysenur/pen/JjGKKrP](https://codepen.io/TurkAysenur/pen/JjGKKrP). + +Inspired by Dwinawan +https://dribbble.com/shots/2425824--Exploration-Book-Store-Website diff --git a/book-store-ui/dist/index.html b/book-store-ui/dist/index.html new file mode 100644 index 0000000..8301de5 --- /dev/null +++ b/book-store-ui/dist/index.html @@ -0,0 +1,540 @@ + + + + + CodePen - Book Store UI + + + + + +
+
+
+
+ Browse Category + + +
+ +
+
readbooks
+
+ +
+ + + Menu +
+
+
+
+
+
+
+ +
+
+
BIG MAGIC
+
by Elizabeth Gilbert
+
+
+ + + + + + + + + + +
+ 1.987 voters +
+
Readers of all ages and walks of life have drawn inspiration and empowerment from Elizabeth Gilbertโ€™s books for years.
+
See The Book
+
+
+
+
+ +
+
+
Ten Thousand Skies Above You
+
by Claudia Gray
+
+
+ + + + + + + + + + +
+ 1.987 voters +
+
The hunt for each splinter of Paul's soul sends Marguerite racing through a war-torn San Francisco.
+
See The Book
+
+
+
+
+ +
+
+
A Tale For The Time Being
+
by Ruth Ozeki
+
+
+ + + + + + + + + + +
+ 1.987 voters +
+
In Tokyo, sixteen-year-old Nao has decided thereโ€™s only one escape from her aching loneliness and her classmatesโ€™ bullying.
+
See The Book
+
+
+
+
+ +
+
+
The Great Gatsby
+
by F.Scott Fitzgerald
+
+
+ + + + + + + + + + +
+ 1.987 voters +
+
The Great Gatsby, F. Scott Fitzgeraldโ€™s third book, stands as the supreme achievement of his career.
+
See The Book
+
+
+
+
+ +
+
+
After You
+
by Jojo Moyes
+
+
+ + + + + + + + + + +
+ 1.987 voters +
+
Louisa Clark is no longer just an ordinary girl living an ordinary life. After the transformative six months spent.
+
See The Book
+
+
+
+
+
+
+
+
Author of the week
+
+ +
Sebastian Jeremy
+
+
+ +
Jonathan Doe
+
+
+ +
Angeline Summer
+
+
+ +
Noah Jones
+
+
+ +
Tommy Adam
+
+
+ +
Ian Cassandra
+
+
+
+
Books of the year
+
+ +
+
Disappearing Earth
+
by Julia Phillips
+
+
+
+ +
+
Lost Children Archive
+
by Valeria Luiselli
+
+
+
+ +
+
Phantoms: A Thriller
+
by Dean Koontz
+
+
+
+ +
+
Midnight in Chernobyl
+
by Adam Higginbotham
+
+
+
+ +
+
10 Minutes 38 Seconds
+
by Elif Shafak
+
+
+
+
+
+ +
+
+ + + + + diff --git a/book-store-ui/dist/style.css b/book-store-ui/dist/style.css new file mode 100644 index 0000000..2ac7049 --- /dev/null +++ b/book-store-ui/dist/style.css @@ -0,0 +1,762 @@ +@charset "UTF-8"; +@import url("https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap"); +@import url(//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css); +:root { + --body-bg-color: #e5f4f9; + --body-color-light: #8b939c; + --body-font: "Roboto", sans-serif; + --page-bg-color: #f2f5f7; + --body-color: #3d4954; + --border-color: #b8bec3; + --placeholder: #ccd0d2; +} + +* { + outline: none; + box-sizing: border-box; +} + +img { + max-width: 100%; +} + +html { + box-sizing: border-box; + -webkit-font-smoothing: antialiased; +} + +body { + background-color: #fff; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='946' height='473' viewBox='0 0 1600 800'%3E%3Cpath fill='%23e436ff' d='M1102.5 734.8c2.5-1.2 24.8-8.6 25.6-7.5.5.7-3.9 23.8-4.6 24.5C1123.3 752.1 1107.5 739.5 1102.5 734.8zM1226.3 229.1c0-.1-4.9-9.4-7-14.2-.1-.3-.3-1.1-.4-1.6-.1-.4-.3-.7-.6-.9-.3-.2-.6-.1-.8.1l-13.1 12.3c0 0 0 0 0 0-.2.2-.3.5-.4.8 0 .3 0 .7.2 1 .1.1 1.4 2.5 2.1 3.6 2.4 3.7 6.5 12.1 6.5 12.2.2.3.4.5.7.6.3 0 .5-.1.7-.3 0 0 1.8-2.5 2.7-3.6 1.5-1.6 3-3.2 4.6-4.7 1.2-1.2 1.6-1.4 2.1-1.6.5-.3 1.1-.5 2.5-1.9C1226.5 230.4 1226.6 229.6 1226.3 229.1zM33 770.3C33 770.3 33 770.3 33 770.3c0-.7-.5-1.2-1.2-1.2-.1 0-.3 0-.4.1-1.6.2-14.3.1-22.2 0-.3 0-.6.1-.9.4-.2.2-.4.5-.4.9 0 .2 0 4.9.1 5.9l.4 13.6c0 .3.2.6.4.9.2.2.5.3.8.3 0 0 .1 0 .1 0 7.3-.7 14.7-.9 22-.6.3 0 .7-.1.9-.3.2-.2.4-.6.4-.9C32.9 783.3 32.9 776.2 33 770.3z'/%3E%3Cpath fill='%232ee7ff' d='M171.1 383.4c1.3-2.5 14.3-22 15.6-21.6.8.3 11.5 21.2 11.5 22.1C198.1 384.2 177.9 384 171.1 383.4zM596.4 711.8c-.1-.1-6.7-8.2-9.7-12.5-.2-.3-.5-1-.7-1.5-.2-.4-.4-.7-.7-.8-.3-.1-.6 0-.8.3L574 712c0 0 0 0 0 0-.2.2-.2.5-.2.9 0 .3.2.7.4.9.1.1 1.8 2.2 2.8 3.1 3.1 3.1 8.8 10.5 8.9 10.6.2.3.5.4.8.4.3 0 .5-.2.6-.5 0 0 1.2-2.8 2-4.1 1.1-1.9 2.3-3.7 3.5-5.5.9-1.4 1.3-1.7 1.7-2 .5-.4 1-.7 2.1-2.4C596.9 713.1 596.8 712.3 596.4 711.8zM727.5 179.9C727.5 179.9 727.5 179.9 727.5 179.9c.6.2 1.3-.2 1.4-.8 0-.1 0-.2 0-.4.2-1.4 2.8-12.6 4.5-19.5.1-.3 0-.6-.2-.8-.2-.3-.5-.4-.8-.5-.2 0-4.7-1.1-5.7-1.3l-13.4-2.7c-.3-.1-.7 0-.9.2-.2.2-.4.4-.5.6 0 0 0 .1 0 .1-.8 6.5-2.2 13.1-3.9 19.4-.1.3 0 .6.2.9.2.3.5.4.8.5C714.8 176.9 721.7 178.5 727.5 179.9zM728.5 178.1c-.1-.1-.2-.2-.4-.2C728.3 177.9 728.4 178 728.5 178.1z'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M699.6 472.7c-1.5 0-2.8-.8-3.5-2.3-.8-1.9 0-4.2 1.9-5 3.7-1.6 6.8-4.7 8.4-8.5 1.6-3.8 1.7-8.1.2-11.9-.3-.9-.8-1.8-1.2-2.8-.8-1.7-1.8-3.7-2.3-5.9-.9-4.1-.2-8.6 2-12.8 1.7-3.1 4.1-6.1 7.6-9.1 1.6-1.4 4-1.2 5.3.4 1.4 1.6 1.2 4-.4 5.3-2.8 2.5-4.7 4.7-5.9 7-1.4 2.6-1.9 5.3-1.3 7.6.3 1.4 1 2.8 1.7 4.3.5 1.1 1 2.2 1.5 3.3 2.1 5.6 2 12-.3 17.6-2.3 5.5-6.8 10.1-12.3 12.5C700.6 472.6 700.1 472.7 699.6 472.7zM740.4 421.4c1.5-.2 3 .5 3.8 1.9 1.1 1.8.4 4.2-1.4 5.3-3.7 2.1-6.4 5.6-7.6 9.5-1.2 4-.8 8.4 1.1 12.1.4.9 1 1.7 1.6 2.7 1 1.7 2.2 3.5 3 5.7 1.4 4 1.2 8.7-.6 13.2-1.4 3.4-3.5 6.6-6.8 10.1-1.5 1.6-3.9 1.7-5.5.2-1.6-1.4-1.7-3.9-.2-5.4 2.6-2.8 4.3-5.3 5.3-7.7 1.1-2.8 1.3-5.6.5-7.9-.5-1.3-1.3-2.7-2.2-4.1-.6-1-1.3-2.1-1.9-3.2-2.8-5.4-3.4-11.9-1.7-17.8 1.8-5.9 5.8-11 11.2-14C739.4 421.6 739.9 421.4 740.4 421.4zM261.3 590.9c5.7 6.8 9 15.7 9.4 22.4.5 7.3-2.4 16.4-10.2 20.4-3 1.5-6.7 2.2-11.2 2.2-7.9-.1-12.9-2.9-15.4-8.4-2.1-4.7-2.3-11.4 1.8-15.9 3.2-3.5 7.8-4.1 11.2-1.6 1.2.9 1.5 2.7.6 3.9-.9 1.2-2.7 1.5-3.9.6-1.8-1.3-3.6.6-3.8.8-2.4 2.6-2.1 7-.8 9.9 1.5 3.4 4.7 5 10.4 5.1 3.6 0 6.4-.5 8.6-1.6 4.7-2.4 7.7-8.6 7.2-15-.5-7.3-5.3-18.2-13-23.9-4.2-3.1-8.5-4.1-12.9-3.1-3.1.7-6.2 2.4-9.7 5-6.6 5.1-11.7 11.8-14.2 19-2.7 7.7-2.1 15.8 1.9 23.9.7 1.4.1 3.1-1.3 3.7-1.4.7-3.1.1-3.7-1.3-4.6-9.4-5.4-19.2-2.2-28.2 2.9-8.2 8.6-15.9 16.1-21.6 4.1-3.1 8-5.1 11.8-6 6-1.4 12 0 17.5 4C257.6 586.9 259.6 588.8 261.3 590.9z'/%3E%3Ccircle cx='1013.7' cy='153.9' r='7.1'/%3E%3Ccircle cx='1024.3' cy='132.1' r='7.1'/%3E%3Ccircle cx='1037.3' cy='148.9' r='7.1'/%3E%3Cpath d='M1508.7 297.2c-4.8-5.4-9.7-10.8-14.8-16.2 5.6-5.6 11.1-11.5 15.6-18.2 1.2-1.7.7-4.1-1-5.2-1.7-1.2-4.1-.7-5.2 1-4.2 6.2-9.1 11.6-14.5 16.9-4.8-5-9.7-10-14.7-14.9-1.5-1.5-3.9-1.5-5.3 0-1.5 1.5-1.5 3.9 0 5.3 4.9 4.8 9.7 9.8 14.5 14.8-1.1 1.1-2.3 2.2-3.5 3.2-4.1 3.8-8.4 7.8-12.4 12-1.4 1.5-1.4 3.8 0 5.3 0 0 0 0 0 0 1.5 1.4 3.9 1.4 5.3-.1 3.9-4 8.1-7.9 12.1-11.7 1.2-1.1 2.3-2.2 3.5-3.3 4.9 5.3 9.8 10.6 14.6 15.9.1.1.1.1.2.2 1.4 1.4 3.7 1.5 5.2.2C1510 301.2 1510.1 298.8 1508.7 297.2zM327.6 248.6l-.4-2.6c-1.5-11.1-2.2-23.2-2.3-37 0-5.5 0-11.5.2-18.5 0-.7 0-1.5 0-2.3 0-5 0-11.2 3.9-13.5 2.2-1.3 5.1-1 8.5.9 5.7 3.1 13.2 8.7 17.5 14.9 5.5 7.8 7.3 16.9 5 25.7-3.2 12.3-15 31-30 32.1L327.6 248.6zM332.1 179.2c-.2 0-.3 0-.4.1-.1.1-.7.5-1.1 2.7-.3 1.9-.3 4.2-.3 6.3 0 .8 0 1.7 0 2.4-.2 6.9-.2 12.8-.2 18.3.1 12.5.7 23.5 2 33.7 11-2.7 20.4-18.1 23-27.8 1.9-7.2.4-14.8-4.2-21.3l0 0C347 188.1 340 183 335 180.3 333.6 179.5 332.6 179.2 332.1 179.2zM516.3 60.8c-.1 0-.2 0-.4-.1-2.4-.7-4-.9-6.7-.7-.7 0-1.3-.5-1.4-1.2 0-.7.5-1.3 1.2-1.4 3.1-.2 4.9 0 7.6.8.7.2 1.1.9.9 1.6C517.3 60.4 516.8 60.8 516.3 60.8zM506.1 70.5c-.5 0-1-.3-1.2-.8-.8-2.1-1.2-4.3-1.3-6.6 0-.7.5-1.3 1.2-1.3.7 0 1.3.5 1.3 1.2.1 2 .5 3.9 1.1 5.8.2.7-.1 1.4-.8 1.6C506.4 70.5 506.2 70.5 506.1 70.5zM494.1 64.4c-.4 0-.8-.2-1-.5-.4-.6-.3-1.4.2-1.8 1.8-1.4 3.7-2.6 5.8-3.6.6-.3 1.4 0 1.7.6.3.6 0 1.4-.6 1.7-1.9.9-3.7 2-5.3 3.3C494.7 64.3 494.4 64.4 494.1 64.4zM500.5 55.3c-.5 0-.9-.3-1.2-.7-.5-1-1.2-1.9-2.4-3.4-.3-.4-.7-.9-1.1-1.4-.4-.6-.3-1.4.2-1.8.6-.4 1.4-.3 1.8.2.4.5.8 1 1.1 1.4 1.3 1.6 2.1 2.6 2.7 3.9.3.6 0 1.4-.6 1.7C500.9 55.3 500.7 55.3 500.5 55.3zM506.7 55c-.3 0-.5-.1-.8-.2-.6-.4-.7-1.2-.3-1.8 1.2-1.7 2.3-3.4 3.3-5.2.3-.6 1.1-.9 1.7-.5.6.3.9 1.1.5 1.7-1 1.9-2.2 3.8-3.5 5.6C507.4 54.8 507.1 55 506.7 55zM1029.3 382.8c-.1 0-.2 0-.4-.1-2.4-.7-4-.9-6.7-.7-.7 0-1.3-.5-1.4-1.2 0-.7.5-1.3 1.2-1.4 3.1-.2 4.9 0 7.6.8.7.2 1.1.9.9 1.6C1030.3 382.4 1029.8 382.8 1029.3 382.8zM1019.1 392.5c-.5 0-1-.3-1.2-.8-.8-2.1-1.2-4.3-1.3-6.6 0-.7.5-1.3 1.2-1.3.7 0 1.3.5 1.3 1.2.1 2 .5 3.9 1.1 5.8.2.7-.1 1.4-.8 1.6C1019.4 392.5 1019.2 392.5 1019.1 392.5zM1007.1 386.4c-.4 0-.8-.2-1-.5-.4-.6-.3-1.4.2-1.8 1.8-1.4 3.7-2.6 5.8-3.6.6-.3 1.4 0 1.7.6.3.6 0 1.4-.6 1.7-1.9.9-3.7 2-5.3 3.3C1007.7 386.3 1007.4 386.4 1007.1 386.4zM1013.5 377.3c-.5 0-.9-.3-1.2-.7-.5-1-1.2-1.9-2.4-3.4-.3-.4-.7-.9-1.1-1.4-.4-.6-.3-1.4.2-1.8.6-.4 1.4-.3 1.8.2.4.5.8 1 1.1 1.4 1.3 1.6 2.1 2.6 2.7 3.9.3.6 0 1.4-.6 1.7C1013.9 377.3 1013.7 377.3 1013.5 377.3zM1019.7 377c-.3 0-.5-.1-.8-.2-.6-.4-.7-1.2-.3-1.8 1.2-1.7 2.3-3.4 3.3-5.2.3-.6 1.1-.9 1.7-.5.6.3.9 1.1.5 1.7-1 1.9-2.2 3.8-3.5 5.6C1020.4 376.8 1020.1 377 1019.7 377zM1329.7 573.4c-1.4 0-2.9-.2-4.5-.7-8.4-2.7-16.6-12.7-18.7-20-.4-1.4-.7-2.9-.9-4.4-8.1 3.3-15.5 10.6-15.4 21 0 1.5-1.2 2.7-2.7 2.8 0 0 0 0 0 0-1.5 0-2.7-1.2-2.7-2.7-.1-6.7 2.4-12.9 7-18 3.6-4 8.4-7.1 13.7-8.8.5-6.5 3.1-12.9 7.4-17.4 7-7.4 18.2-8.9 27.3-10.1l.7-.1c1.5-.2 2.9.9 3.1 2.3.2 1.5-.9 2.9-2.3 3.1l-.7.1c-8.6 1.2-18.4 2.5-24 8.4-3 3.2-5 7.7-5.7 12.4 7.9-1 17.7 1.3 24.3 5.7 4.3 2.9 7.1 7.8 7.2 12.7.2 4.3-1.7 8.3-5.2 11.1C1335.2 572.4 1332.6 573.4 1329.7 573.4zM1311 546.7c.1 1.5.4 3 .8 4.4 1.7 5.8 8.7 14.2 15.1 16.3 2.8.9 5.1.5 7.2-1.1 2.7-2.1 3.2-4.8 3.1-6.6-.1-3.2-2-6.4-4.8-8.3C1326.7 547.5 1317.7 545.6 1311 546.7z'/%3E%3C/g%3E%3C/svg%3E"); + background-attachment: fixed; + font-family: var(--body-font); + color: var(--body-color); + font-weight: 400; + margin: 0; +} + +.likes, .year-book, .author, .main-menu, .profile-menu, .profile, .browse-category, .browse, .header { + display: flex; + align-items: center; +} + +.book-store { + display: flex; + flex-direction: column; + max-width: 1400px; + height: 100vh; + background-color: var(--page-bg-color); + margin: 0 auto; + overflow: hidden; + box-shadow: 0px 2px 50px 10px rgba(0, 0, 0, 0.21); +} + +.header { + height: 70px; + width: 100%; + background-color: #ffffff; + padding: 0 30px; + font-size: 14px; + font-weight: 500; + color: var(--body-color-light); + justify-content: space-between; + flex-shrink: 0; +} + +.search-bar { + position: relative; +} +.search-bar input { + height: 100%; + width: 100%; + display: block; + background-color: transparent; + border: none; + font-weight: 600; + padding: 0 10px 0 40px; + background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%238b939c' stroke-width='3' stroke-linecap='round' stroke-linejoin='round' class='feather feather-search'%3e%3ccircle cx='11' cy='11' r='8'/%3e%3cpath d='M21 21l-4.35-4.35'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-size: 15px; + background-position: 15px 50%; + color: var(--body-color); + font-family: var(--body-font); +} +.search-bar input::placeholder { + color: var(--placeholder); +} + +.browse-category { + border-right: 1px solid var(--border-color); + white-space: nowrap; +} +.browse-category svg { + width: 16px; + margin: 2px 10px 0 8px; +} + +.header-title { + font-size: 16px; + font-weight: 400; + margin-right: 120px; +} +.header-title span { + font-weight: 500; + color: var(--body-color); +} + +.user-img { + width: 28px; + height: 28px; + border-radius: 50%; + margin-right: 15px; +} + +.user-profile { + position: relative; + cursor: pointer; + flex-shrink: 0; +} +.user-profile:before { + content: ""; + position: absolute; + background-color: #f86d72; + width: 7px; + height: 7px; + border-radius: 50%; + border: 2px solid var(--theme-bg-color); + right: 12px; + top: -3px; + border: 2px solid #fff; +} + +.profile { + flex-shrink: 0; +} +.profile-menu { + border-left: 1px solid var(--border-color); +} +.profile svg { + width: 16px; + margin: 0 8px 0 15px; + flex-shrink: 0; +} + +.book-slide { + width: 100%; +} + +.book { + background: #fff; +} + +.book-cell { + position: relative; + display: flex; + padding: 25px; + width: 40%; + height: 250px; + margin-right: 1px; +} +.book-cell:nth-child(1) { + background-color: #fbadaf; +} +.book-cell:nth-child(2) { + background-color: #a4e0eb; +} +.book-cell:nth-child(3) { + background-color: #edb9d6; +} +.book-cell:nth-child(4) { + background-color: #fdca95; +} +.book-cell:nth-child(5) { + background-color: #cbb5e2; +} + +.flickity-page-dots { + display: none; +} + +.flickity-prev-next-button .arrow { + fill: #d6d6d6; +} + +.flickity-prev-next-button svg { + left: 25%; + top: 25%; + width: 50%; + height: 50%; +} + +.flickity-prev-next-button.previous { + left: 15px; +} +.flickity-prev-next-button.next { + right: 15px; +} + +.flickity-viewport { + overflow: visible; +} + +.book-photo { + width: 180px; + flex-shrink: 0; + bottom: -35px; + left: 35px; + border-radius: 2px; + box-shadow: -2px 6px 19px 0px #7f818e; + transition: 0.3s ease; +} +.book-photo:hover { + transform: scale(1.03); +} + +.book-img { + flex-shrink: 0; +} + +.book-title { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.book-title { + color: #ffffff; + font-weight: 600; +} + +.book-author { + margin-top: 3px; + font-size: 14px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.book-content { + padding: 0 20px; + color: #ffffff; + overflow: hidden; +} + +fieldset, +label { + margin: 0; + padding: 0; + display: inline-block; + vertical-align: middle; +} + +h1 { + font-size: 0.5em; + margin: 10px; +} + +.rating { + border: none; +} + +.rating > input { + display: none; +} + +.rating > label:before { + margin-right: 5px; + margin-top: 10px; + font-size: 0.9em; + font-family: FontAwesome; + display: inline-block; + content: "๏€…"; +} + +.rating > label { + color: #fff; + float: right; +} + +.rating > input:checked ~ label, +.rating:not(:checked) > label:hover, +.rating:not(:checked) > label:hover ~ label { + color: #d85d61; +} + +.rating > input:checked + label:hover, +.rating > input:checked ~ label:hover, +.rating > label:hover ~ input:checked ~ label, +.rating > input:checked ~ label:hover ~ label { + color: #d85d61; +} + +.blue > input:checked ~ label, +.blue:not(:checked) > label:hover, +.blue:not(:checked) > label:hover ~ label { + color: #458997; +} + +.blue > input:checked + label:hover, +.blue > input:checked ~ label:hover, +.blue > label:hover ~ input:checked ~ label, +.blue > input:checked ~ label:hover ~ label { + color: #458997; +} + +.purple > input:checked ~ label, +.purple:not(:checked) > label:hover, +.purple:not(:checked) > label:hover ~ label { + color: #a76287; +} + +.purple > input:checked + label:hover, +.purple > input:checked ~ label:hover, +.purple > label:hover ~ input:checked ~ label, +.purple > input:checked ~ label:hover ~ label { + color: #a76287; +} + +.yellow > input:checked ~ label, +.yellow:not(:checked) > label:hover, +.yellow:not(:checked) > label:hover ~ label { + color: #ffad58; +} + +.yellow > input:checked + label:hover, +.yellow > input:checked ~ label:hover, +.yellow > label:hover ~ input:checked ~ label, +.yellow > input:checked ~ label:hover ~ label { + color: #ffad58; +} + +.dark-purp > input:checked ~ label, +.dark-purp:not(:checked) > label:hover, +.dark-purp:not(:checked) > label:hover ~ label { + color: #905587; +} + +.dark-purp > input:checked + label:hover, +.dark-purp > input:checked ~ label:hover, +.dark-purp > label:hover ~ input:checked ~ label, +.dark-purp > input:checked ~ label:hover ~ label { + color: #905587; +} + +.book-voters { + color: #fff; + vertical-align: sub; + font-size: 13px; + margin-left: 7px; + white-space: nowrap; + margin-top: 7px; +} + +.book-sum { + margin-top: 20px; + font-size: 14px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.book-see { + margin-top: 25px; + text-align: center; + background-color: #fff; + color: #fbadaf; + font-weight: 600; + padding: 8px; + font-size: 14px; + width: 160px; + border-radius: 20px; +} +.book-see:hover { + color: #ff6e72; +} +.book-see.book-blue { + color: #a4e0eb; +} +.book-see.book-blue:hover { + color: #22cdec; +} +.book-see.book-pink { + color: #edb9d6; +} +.book-see.book-pink:hover { + color: #ff6dbe; +} +.book-see.book-yellow { + color: #fdca95; +} +.book-see.book-yellow:hover { + color: #fb9124; +} +.book-see.book-purple { + color: #cbb5e2; +} +.book-see.book-purple:hover { + color: #a764ec; +} + +.main-wrapper { + width: 100%; + display: flex; + flex-grow: 1; + margin-top: 100px; + overflow: hidden; +} + +.books-of { + width: 320px; + display: flex; + flex-direction: column; + overflow-y: auto; + overflow-x: hidden; + flex-shrink: 0; +} + +.popular-books { + flex-grow: 1; + padding: 0 30px 50px; + overflow-y: auto; +} + +.genre { + font-weight: 500; + font-size: 15px; +} + +.main-menu { + white-space: nowrap; + padding-bottom: 15px; + border-bottom: 1px solid #dcddde; + position: sticky; + top: 0; + right: 0; + background-color: var(--page-bg-color); + z-index: 2; +} + +.book-types { + margin-left: auto; +} +.book-types a { + text-decoration: none; + color: var(--body-color); + font-size: 14px; +} + +.book-type + .book-type { + margin-left: 20px; +} + +.book-type { + position: relative; + transition: 0.2s; +} +.book-type.active, .book-type:hover { + -webkit-text-stroke: 0.3px; +} +.book-type.active:before, .book-type:hover:before { + content: ""; + position: absolute; + width: 28px; + height: 2px; + bottom: -17px; + right: 15px; + background-color: #67d4ea; + box-shadow: 0px -1px 5px 0px #67d4ea; +} +.book-type:nth-child(2):before { + right: 12px; +} +.book-type:nth-child(3):before { + right: 8px; +} +.book-type:nth-child(4):before { + right: 6px; +} +.book-type:nth-child(5):before { + right: 20px; +} + +.week { + padding: 0 30px; +} + +.author + .author { + margin-top: 20px; +} +.author-name { + font-size: 14px; +} +.author:last-child { + margin-bottom: 40px; +} + +.author-title { + padding: 0 0 20px; + font-weight: 500; + font-size: 15px; +} + +.author-img { + border-radius: 50%; + width: 30px; + height: 30px; + margin-right: 16px; + object-fit: cover; + object-position: center; +} + +.year-book-img { + width: 45px; + margin-right: 16px; +} +.year-book-name { + margin-bottom: 15px; + font-weight: 500; +} +.year-book-author { + font-size: 13px; +} +.year-book + .year-book { + margin-top: 20px; +} + +.year-book-content { + display: flex; + flex-direction: column; + font-size: 14px; +} + +.overlay { + position: sticky; + bottom: 0; + left: 0; + width: 340px; + flex-shrink: 0; + background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, #f2f5f7 65%, #f2f5f7 100%); + height: 60px; + margin-left: -35px; +} + +.book-cards { + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-column-gap: 40px; + grid-row-gap: 40px; + padding-top: 40px; + position: relative; +} + +.book-card { + margin-top: 20px; + background-color: #fff; + height: 270px; + box-shadow: -1px 3px 8px -1px rgba(0, 0, 0, 0.1); + border-radius: 4px; + display: flex; + flex-direction: column; + cursor: pointer; + padding: 0 0 20px 20px; + color: var(--body-color-light); +} + +.book-card-img { + width: 160px; + margin-top: -35px; + border-radius: 2px; + box-shadow: 0px 1px 7px 2px #c7c9d3; + border-bottom: 1px solid #dcddde; + object-fit: cover; + margin-bottom: 20px; + transition: 0.3s ease; +} +.book-card-img:hover { + transform: scale(1.04); +} + +.card-content { + color: var(--body-color); + padding: 30px; + overflow: hidden; + position: relative; +} + +.book-name { + font-weight: 500; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} + +.book-by { + font-size: 13px; + color: var(--body-color-light); + margin-top: 4px; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} + +.book-rate > label { + color: #cccccc; +} + +.rate { + display: inline-block; + white-space: nowrap; +} + +.book-rate > input:checked ~ label, +.book-rate:not(:checked) > label:hover, +.book-rate:not(:checked) > label:hover ~ label { + color: #ff9700; +} + +.book-rate > input:checked + label:hover, +.book-rate > input:checked ~ label:hover, +.book-rate > label:hover ~ input:checked ~ label, +.book-rate > input:checked ~ label:hover ~ label { + color: #ff9700; +} + +.card-vote { + color: var(--body-color-light); +} + +.card-sum { + color: var(--body-color-light); + font-size: 13px; + line-height: 1.6em; + -webkit-line-clamp: 4; + margin-top: 15px; +} + +.content-wrapper { + display: flex; + border-bottom: 1px solid #ebedef; + position: relative; +} +.content-wrapper:before { + content: ""; + position: absolute; + background-color: #8f98a9; + background-color: #aaaebc; + box-shadow: 0 -6px 0 0 #aaaebc, 0 6px 0 0 #aaaebc; + width: 4px; + height: 4px; + border: 0; + padding: 0; + right: 12px; + top: 17px; + border-radius: 50%; + margin-left: auto; +} + +.like-profile { + margin-top: 8px; +} +.like-profile + .like-profile { + margin-left: -5px; +} + +.like-img { + border-radius: 50%; + width: 28px; + object-fit: cover; + border: 2px solid #fff; +} + +.like-name { + font-size: 13px; + margin-left: 15px; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} +.like-name span { + font-weight: 600; +} + +@media (max-width: 1103px) { + .book-cell { + width: 60%; + } +} +@media (max-width: 765px) { + .book-cell { + width: 80%; + } +} +@media (max-width: 575px) { + .book-cell { + width: 100%; + } +} +@media (max-width: 458px) { + .book-photo { + width: 180px; + } + + .book-voters { + display: none; + } +} +@media (max-width: 420px) { + .book-see { + width: 120px; + font-size: 13px; + } + + .book-photo { + width: 130px; + } + + .main-wrapper { + margin-top: 50px; + } +} +@media (max-width: 360px) { + .rating > label:before { + font-size: 0.8em; + } +} +@media (max-width: 1220px) { + .card-vote { + display: none; + } +} +@media (max-width: 1085px) { + .book-rate > label { + font-size: 0.7em; + } +} +@media (max-width: 1045px) { + .books-of { + display: none; + } +} +@media (max-width: 725px) { + .browse-category, .search-bar { + display: none; + } + + .header-title { + margin-right: auto; + } + + .book-cards { + grid-template-columns: 1fr; + } + + .book-types { + display: none; + } +} +@media (max-width: 372px) { + .card-content { + padding: 20px; + } +} \ No newline at end of file diff --git a/book-store-ui/license.txt b/book-store-ui/license.txt new file mode 100644 index 0000000..4068ae2 --- /dev/null +++ b/book-store-ui/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Aysenur Turk (https://codepen.io/TurkAysenur/pen/JjGKKrP) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/book-store-ui/src/index.html b/book-store-ui/src/index.html new file mode 100644 index 0000000..677e5df --- /dev/null +++ b/book-store-ui/src/index.html @@ -0,0 +1,525 @@ +
+
+
+
+ Browse Category + + +
+ +
+
readbooks
+
+ +
+ + + Menu +
+
+
+
+
+
+
+ +
+
+
BIG MAGIC
+
by Elizabeth Gilbert
+
+
+ + + + + + + + + + +
+ 1.987 voters +
+
Readers of all ages and walks of life have drawn inspiration and empowerment from Elizabeth Gilbertโ€™s books for years.
+
See The Book
+
+
+
+
+ +
+
+
Ten Thousand Skies Above You
+
by Claudia Gray
+
+
+ + + + + + + + + + +
+ 1.987 voters +
+
The hunt for each splinter of Paul's soul sends Marguerite racing through a war-torn San Francisco.
+
See The Book
+
+
+
+
+ +
+
+
A Tale For The Time Being
+
by Ruth Ozeki
+
+
+ + + + + + + + + + +
+ 1.987 voters +
+
In Tokyo, sixteen-year-old Nao has decided thereโ€™s only one escape from her aching loneliness and her classmatesโ€™ bullying.
+
See The Book
+
+
+
+
+ +
+
+
The Great Gatsby
+
by F.Scott Fitzgerald
+
+
+ + + + + + + + + + +
+ 1.987 voters +
+
The Great Gatsby, F. Scott Fitzgeraldโ€™s third book, stands as the supreme achievement of his career.
+
See The Book
+
+
+
+
+ +
+
+
After You
+
by Jojo Moyes
+
+
+ + + + + + + + + + +
+ 1.987 voters +
+
Louisa Clark is no longer just an ordinary girl living an ordinary life. After the transformative six months spent.
+
See The Book
+
+
+
+
+
+
+
+
Author of the week
+
+ +
Sebastian Jeremy
+
+
+ +
Jonathan Doe
+
+
+ +
Angeline Summer
+
+
+ +
Noah Jones
+
+
+ +
Tommy Adam
+
+
+ +
Ian Cassandra
+
+
+
+
Books of the year
+
+ +
+
Disappearing Earth
+
by Julia Phillips
+
+
+
+ +
+
Lost Children Archive
+
by Valeria Luiselli
+
+
+
+ +
+
Phantoms: A Thriller
+
by Dean Koontz
+
+
+
+ +
+
Midnight in Chernobyl
+
by Adam Higginbotham
+
+
+
+ +
+
10 Minutes 38 Seconds
+
by Elif Shafak
+
+
+
+
+
+ +
+
\ No newline at end of file diff --git a/book-store-ui/src/style.scss b/book-store-ui/src/style.scss new file mode 100644 index 0000000..280b1ee --- /dev/null +++ b/book-store-ui/src/style.scss @@ -0,0 +1,787 @@ +@import url("https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap"); + +@import url(//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css); + +:root { + --body-bg-color: #e5f4f9; + --body-color-light: #8b939c; + --body-font: "Roboto", sans-serif; + --page-bg-color: #f2f5f7; + --body-color: #3d4954; + --border-color: #b8bec3; + --placeholder: #ccd0d2; +} + +* { + outline: none; + box-sizing: border-box; +} + +img { + max-width: 100%; +} + +html { + box-sizing: border-box; + -webkit-font-smoothing: antialiased; +} + +body { +background-color: #fff; +background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='946' height='473' viewBox='0 0 1600 800'%3E%3Cpath fill='%23e436ff' d='M1102.5 734.8c2.5-1.2 24.8-8.6 25.6-7.5.5.7-3.9 23.8-4.6 24.5C1123.3 752.1 1107.5 739.5 1102.5 734.8zM1226.3 229.1c0-.1-4.9-9.4-7-14.2-.1-.3-.3-1.1-.4-1.6-.1-.4-.3-.7-.6-.9-.3-.2-.6-.1-.8.1l-13.1 12.3c0 0 0 0 0 0-.2.2-.3.5-.4.8 0 .3 0 .7.2 1 .1.1 1.4 2.5 2.1 3.6 2.4 3.7 6.5 12.1 6.5 12.2.2.3.4.5.7.6.3 0 .5-.1.7-.3 0 0 1.8-2.5 2.7-3.6 1.5-1.6 3-3.2 4.6-4.7 1.2-1.2 1.6-1.4 2.1-1.6.5-.3 1.1-.5 2.5-1.9C1226.5 230.4 1226.6 229.6 1226.3 229.1zM33 770.3C33 770.3 33 770.3 33 770.3c0-.7-.5-1.2-1.2-1.2-.1 0-.3 0-.4.1-1.6.2-14.3.1-22.2 0-.3 0-.6.1-.9.4-.2.2-.4.5-.4.9 0 .2 0 4.9.1 5.9l.4 13.6c0 .3.2.6.4.9.2.2.5.3.8.3 0 0 .1 0 .1 0 7.3-.7 14.7-.9 22-.6.3 0 .7-.1.9-.3.2-.2.4-.6.4-.9C32.9 783.3 32.9 776.2 33 770.3z'/%3E%3Cpath fill='%232ee7ff' d='M171.1 383.4c1.3-2.5 14.3-22 15.6-21.6.8.3 11.5 21.2 11.5 22.1C198.1 384.2 177.9 384 171.1 383.4zM596.4 711.8c-.1-.1-6.7-8.2-9.7-12.5-.2-.3-.5-1-.7-1.5-.2-.4-.4-.7-.7-.8-.3-.1-.6 0-.8.3L574 712c0 0 0 0 0 0-.2.2-.2.5-.2.9 0 .3.2.7.4.9.1.1 1.8 2.2 2.8 3.1 3.1 3.1 8.8 10.5 8.9 10.6.2.3.5.4.8.4.3 0 .5-.2.6-.5 0 0 1.2-2.8 2-4.1 1.1-1.9 2.3-3.7 3.5-5.5.9-1.4 1.3-1.7 1.7-2 .5-.4 1-.7 2.1-2.4C596.9 713.1 596.8 712.3 596.4 711.8zM727.5 179.9C727.5 179.9 727.5 179.9 727.5 179.9c.6.2 1.3-.2 1.4-.8 0-.1 0-.2 0-.4.2-1.4 2.8-12.6 4.5-19.5.1-.3 0-.6-.2-.8-.2-.3-.5-.4-.8-.5-.2 0-4.7-1.1-5.7-1.3l-13.4-2.7c-.3-.1-.7 0-.9.2-.2.2-.4.4-.5.6 0 0 0 .1 0 .1-.8 6.5-2.2 13.1-3.9 19.4-.1.3 0 .6.2.9.2.3.5.4.8.5C714.8 176.9 721.7 178.5 727.5 179.9zM728.5 178.1c-.1-.1-.2-.2-.4-.2C728.3 177.9 728.4 178 728.5 178.1z'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M699.6 472.7c-1.5 0-2.8-.8-3.5-2.3-.8-1.9 0-4.2 1.9-5 3.7-1.6 6.8-4.7 8.4-8.5 1.6-3.8 1.7-8.1.2-11.9-.3-.9-.8-1.8-1.2-2.8-.8-1.7-1.8-3.7-2.3-5.9-.9-4.1-.2-8.6 2-12.8 1.7-3.1 4.1-6.1 7.6-9.1 1.6-1.4 4-1.2 5.3.4 1.4 1.6 1.2 4-.4 5.3-2.8 2.5-4.7 4.7-5.9 7-1.4 2.6-1.9 5.3-1.3 7.6.3 1.4 1 2.8 1.7 4.3.5 1.1 1 2.2 1.5 3.3 2.1 5.6 2 12-.3 17.6-2.3 5.5-6.8 10.1-12.3 12.5C700.6 472.6 700.1 472.7 699.6 472.7zM740.4 421.4c1.5-.2 3 .5 3.8 1.9 1.1 1.8.4 4.2-1.4 5.3-3.7 2.1-6.4 5.6-7.6 9.5-1.2 4-.8 8.4 1.1 12.1.4.9 1 1.7 1.6 2.7 1 1.7 2.2 3.5 3 5.7 1.4 4 1.2 8.7-.6 13.2-1.4 3.4-3.5 6.6-6.8 10.1-1.5 1.6-3.9 1.7-5.5.2-1.6-1.4-1.7-3.9-.2-5.4 2.6-2.8 4.3-5.3 5.3-7.7 1.1-2.8 1.3-5.6.5-7.9-.5-1.3-1.3-2.7-2.2-4.1-.6-1-1.3-2.1-1.9-3.2-2.8-5.4-3.4-11.9-1.7-17.8 1.8-5.9 5.8-11 11.2-14C739.4 421.6 739.9 421.4 740.4 421.4zM261.3 590.9c5.7 6.8 9 15.7 9.4 22.4.5 7.3-2.4 16.4-10.2 20.4-3 1.5-6.7 2.2-11.2 2.2-7.9-.1-12.9-2.9-15.4-8.4-2.1-4.7-2.3-11.4 1.8-15.9 3.2-3.5 7.8-4.1 11.2-1.6 1.2.9 1.5 2.7.6 3.9-.9 1.2-2.7 1.5-3.9.6-1.8-1.3-3.6.6-3.8.8-2.4 2.6-2.1 7-.8 9.9 1.5 3.4 4.7 5 10.4 5.1 3.6 0 6.4-.5 8.6-1.6 4.7-2.4 7.7-8.6 7.2-15-.5-7.3-5.3-18.2-13-23.9-4.2-3.1-8.5-4.1-12.9-3.1-3.1.7-6.2 2.4-9.7 5-6.6 5.1-11.7 11.8-14.2 19-2.7 7.7-2.1 15.8 1.9 23.9.7 1.4.1 3.1-1.3 3.7-1.4.7-3.1.1-3.7-1.3-4.6-9.4-5.4-19.2-2.2-28.2 2.9-8.2 8.6-15.9 16.1-21.6 4.1-3.1 8-5.1 11.8-6 6-1.4 12 0 17.5 4C257.6 586.9 259.6 588.8 261.3 590.9z'/%3E%3Ccircle cx='1013.7' cy='153.9' r='7.1'/%3E%3Ccircle cx='1024.3' cy='132.1' r='7.1'/%3E%3Ccircle cx='1037.3' cy='148.9' r='7.1'/%3E%3Cpath d='M1508.7 297.2c-4.8-5.4-9.7-10.8-14.8-16.2 5.6-5.6 11.1-11.5 15.6-18.2 1.2-1.7.7-4.1-1-5.2-1.7-1.2-4.1-.7-5.2 1-4.2 6.2-9.1 11.6-14.5 16.9-4.8-5-9.7-10-14.7-14.9-1.5-1.5-3.9-1.5-5.3 0-1.5 1.5-1.5 3.9 0 5.3 4.9 4.8 9.7 9.8 14.5 14.8-1.1 1.1-2.3 2.2-3.5 3.2-4.1 3.8-8.4 7.8-12.4 12-1.4 1.5-1.4 3.8 0 5.3 0 0 0 0 0 0 1.5 1.4 3.9 1.4 5.3-.1 3.9-4 8.1-7.9 12.1-11.7 1.2-1.1 2.3-2.2 3.5-3.3 4.9 5.3 9.8 10.6 14.6 15.9.1.1.1.1.2.2 1.4 1.4 3.7 1.5 5.2.2C1510 301.2 1510.1 298.8 1508.7 297.2zM327.6 248.6l-.4-2.6c-1.5-11.1-2.2-23.2-2.3-37 0-5.5 0-11.5.2-18.5 0-.7 0-1.5 0-2.3 0-5 0-11.2 3.9-13.5 2.2-1.3 5.1-1 8.5.9 5.7 3.1 13.2 8.7 17.5 14.9 5.5 7.8 7.3 16.9 5 25.7-3.2 12.3-15 31-30 32.1L327.6 248.6zM332.1 179.2c-.2 0-.3 0-.4.1-.1.1-.7.5-1.1 2.7-.3 1.9-.3 4.2-.3 6.3 0 .8 0 1.7 0 2.4-.2 6.9-.2 12.8-.2 18.3.1 12.5.7 23.5 2 33.7 11-2.7 20.4-18.1 23-27.8 1.9-7.2.4-14.8-4.2-21.3l0 0C347 188.1 340 183 335 180.3 333.6 179.5 332.6 179.2 332.1 179.2zM516.3 60.8c-.1 0-.2 0-.4-.1-2.4-.7-4-.9-6.7-.7-.7 0-1.3-.5-1.4-1.2 0-.7.5-1.3 1.2-1.4 3.1-.2 4.9 0 7.6.8.7.2 1.1.9.9 1.6C517.3 60.4 516.8 60.8 516.3 60.8zM506.1 70.5c-.5 0-1-.3-1.2-.8-.8-2.1-1.2-4.3-1.3-6.6 0-.7.5-1.3 1.2-1.3.7 0 1.3.5 1.3 1.2.1 2 .5 3.9 1.1 5.8.2.7-.1 1.4-.8 1.6C506.4 70.5 506.2 70.5 506.1 70.5zM494.1 64.4c-.4 0-.8-.2-1-.5-.4-.6-.3-1.4.2-1.8 1.8-1.4 3.7-2.6 5.8-3.6.6-.3 1.4 0 1.7.6.3.6 0 1.4-.6 1.7-1.9.9-3.7 2-5.3 3.3C494.7 64.3 494.4 64.4 494.1 64.4zM500.5 55.3c-.5 0-.9-.3-1.2-.7-.5-1-1.2-1.9-2.4-3.4-.3-.4-.7-.9-1.1-1.4-.4-.6-.3-1.4.2-1.8.6-.4 1.4-.3 1.8.2.4.5.8 1 1.1 1.4 1.3 1.6 2.1 2.6 2.7 3.9.3.6 0 1.4-.6 1.7C500.9 55.3 500.7 55.3 500.5 55.3zM506.7 55c-.3 0-.5-.1-.8-.2-.6-.4-.7-1.2-.3-1.8 1.2-1.7 2.3-3.4 3.3-5.2.3-.6 1.1-.9 1.7-.5.6.3.9 1.1.5 1.7-1 1.9-2.2 3.8-3.5 5.6C507.4 54.8 507.1 55 506.7 55zM1029.3 382.8c-.1 0-.2 0-.4-.1-2.4-.7-4-.9-6.7-.7-.7 0-1.3-.5-1.4-1.2 0-.7.5-1.3 1.2-1.4 3.1-.2 4.9 0 7.6.8.7.2 1.1.9.9 1.6C1030.3 382.4 1029.8 382.8 1029.3 382.8zM1019.1 392.5c-.5 0-1-.3-1.2-.8-.8-2.1-1.2-4.3-1.3-6.6 0-.7.5-1.3 1.2-1.3.7 0 1.3.5 1.3 1.2.1 2 .5 3.9 1.1 5.8.2.7-.1 1.4-.8 1.6C1019.4 392.5 1019.2 392.5 1019.1 392.5zM1007.1 386.4c-.4 0-.8-.2-1-.5-.4-.6-.3-1.4.2-1.8 1.8-1.4 3.7-2.6 5.8-3.6.6-.3 1.4 0 1.7.6.3.6 0 1.4-.6 1.7-1.9.9-3.7 2-5.3 3.3C1007.7 386.3 1007.4 386.4 1007.1 386.4zM1013.5 377.3c-.5 0-.9-.3-1.2-.7-.5-1-1.2-1.9-2.4-3.4-.3-.4-.7-.9-1.1-1.4-.4-.6-.3-1.4.2-1.8.6-.4 1.4-.3 1.8.2.4.5.8 1 1.1 1.4 1.3 1.6 2.1 2.6 2.7 3.9.3.6 0 1.4-.6 1.7C1013.9 377.3 1013.7 377.3 1013.5 377.3zM1019.7 377c-.3 0-.5-.1-.8-.2-.6-.4-.7-1.2-.3-1.8 1.2-1.7 2.3-3.4 3.3-5.2.3-.6 1.1-.9 1.7-.5.6.3.9 1.1.5 1.7-1 1.9-2.2 3.8-3.5 5.6C1020.4 376.8 1020.1 377 1019.7 377zM1329.7 573.4c-1.4 0-2.9-.2-4.5-.7-8.4-2.7-16.6-12.7-18.7-20-.4-1.4-.7-2.9-.9-4.4-8.1 3.3-15.5 10.6-15.4 21 0 1.5-1.2 2.7-2.7 2.8 0 0 0 0 0 0-1.5 0-2.7-1.2-2.7-2.7-.1-6.7 2.4-12.9 7-18 3.6-4 8.4-7.1 13.7-8.8.5-6.5 3.1-12.9 7.4-17.4 7-7.4 18.2-8.9 27.3-10.1l.7-.1c1.5-.2 2.9.9 3.1 2.3.2 1.5-.9 2.9-2.3 3.1l-.7.1c-8.6 1.2-18.4 2.5-24 8.4-3 3.2-5 7.7-5.7 12.4 7.9-1 17.7 1.3 24.3 5.7 4.3 2.9 7.1 7.8 7.2 12.7.2 4.3-1.7 8.3-5.2 11.1C1335.2 572.4 1332.6 573.4 1329.7 573.4zM1311 546.7c.1 1.5.4 3 .8 4.4 1.7 5.8 8.7 14.2 15.1 16.3 2.8.9 5.1.5 7.2-1.1 2.7-2.1 3.2-4.8 3.1-6.6-.1-3.2-2-6.4-4.8-8.3C1326.7 547.5 1317.7 545.6 1311 546.7z'/%3E%3C/g%3E%3C/svg%3E"); +background-attachment: fixed; + font-family: var(--body-font); + color: var(--body-color); + font-weight: 400; + margin: 0; +} + +%display { + display: flex; + align-items: center; +} + +.book-store { + display: flex; + flex-direction: column; + max-width: 1400px; + height: 100vh; + background-color: var(--page-bg-color); + margin: 0 auto; + overflow: hidden; + box-shadow: 0px 2px 50px 10px rgba(0, 0, 0, 0.21); +} + +.header { + @extend %display; + height: 70px; + width: 100%; + background-color: #ffffff; + padding: 0 30px; + font-size: 14px; + font-weight: 500; + color: var(--body-color-light); + justify-content: space-between; + flex-shrink: 0; +} + +.search-bar { + position: relative; + input { + height: 100%; + width: 100%; + display: block; + background-color: transparent; + border: none; + font-weight: 600; + padding: 0 10px 0 40px; + background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%238b939c' stroke-width='3' stroke-linecap='round' stroke-linejoin='round' class='feather feather-search'%3e%3ccircle cx='11' cy='11' r='8'/%3e%3cpath d='M21 21l-4.35-4.35'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-size: 15px; + background-position: 15px 50%; + color: var(--body-color); + font-family: var(--body-font); + &::placeholder { + color: var(--placeholder); + } + } +} + +.browse { + @extend %display; + &-category { + @extend %display; + border-right: 1px solid var(--border-color); + white-space: nowrap; + svg { + width: 16px; + margin: 2px 10px 0 8px; + } + } +} + +.header-title { + font-size: 16px; + font-weight: 400; + margin-right: 120px; + span { + font-weight: 500; + color: var(--body-color); + } +} + +.user-img { + width: 28px; + height: 28px; + border-radius: 50%; + margin-right: 15px; +} + +.user-profile { + position: relative; + cursor: pointer; + flex-shrink: 0; + &:before { + content: ""; + position: absolute; + background-color: #f86d72; + width: 7px; + height: 7px; + border-radius: 50%; + border: 2px solid var(--theme-bg-color); + right: 12px; + top: -3px; + border: 2px solid #fff; + } +} + +.profile { + @extend %display; + flex-shrink: 0; + &-menu { + @extend %display; + border-left: 1px solid var(--border-color); + } + svg { + width: 16px; + margin: 0 8px 0 15px; + flex-shrink: 0; + } +} + +.book-slide { + width: 100%; +} + +.book { + background: #fff; +} + +.book-cell { + position: relative; + display: flex; + padding: 25px; + width: 40%; + height: 250px; + margin-right: 1px; + &:nth-child(1) { + background-color: #fbadaf; + } + &:nth-child(2) { + background-color: #a4e0eb; + } + &:nth-child(3) { + background-color: #edb9d6; + } + &:nth-child(4) { + background-color: #fdca95; + } + &:nth-child(5) { + background-color: #cbb5e2; + } +} + +.flickity-page-dots { + display: none; +} + +.flickity-prev-next-button .arrow { + fill: #d6d6d6; +} + +.flickity-prev-next-button svg { + left: 25%; + top: 25%; + width: 50%; + height: 50%; +} + +.flickity-prev-next-button { + &.previous { + left: 15px; + } + &.next { + right: 15px; + } +} + +.flickity-viewport { + overflow: visible; +} + +.book-photo { + width: 180px; + flex-shrink: 0; + bottom: -35px; + left: 35px; + border-radius: 2px; + box-shadow: -2px 6px 19px 0px #7f818e; + transition: .3s ease; + &:hover { + transform: scale(1.03); + } +} + +.book-img { + flex-shrink: 0; +} + +.book-title { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.book-title { + color: #ffffff; + font-weight: 600; +} + +.book-author { + margin-top: 3px; + font-size: 14px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.book-content { + padding: 0 20px; + color: #ffffff; + overflow: hidden; +} + +fieldset, +label { + margin: 0; + padding: 0; + display: inline-block; + vertical-align: middle; +} + +h1 { + font-size: 0.5em; + margin: 10px; +} +.rating { + border: none; +} + +.rating > input { + display: none; +} +.rating > label:before { + margin-right: 5px; + margin-top: 10px; + font-size: 0.9em; + font-family: FontAwesome; + display: inline-block; + content: "\f005"; +} + +.rating > label { + color: #fff; + float: right; +} + +.rating > input:checked ~ label, +.rating:not(:checked) > label:hover, +.rating:not(:checked) > label:hover ~ label { + color: #d85d61; +} +.rating > input:checked + label:hover, +.rating > input:checked ~ label:hover, +.rating > label:hover ~ input:checked ~ label, +.rating > input:checked ~ label:hover ~ label { + color: #d85d61; +} + +.blue > input:checked ~ label, +.blue:not(:checked) > label:hover, +.blue:not(:checked) > label:hover ~ label { + color: #458997; +} +.blue > input:checked + label:hover, +.blue > input:checked ~ label:hover, +.blue > label:hover ~ input:checked ~ label, +.blue > input:checked ~ label:hover ~ label { + color: #458997; +} + +.purple > input:checked ~ label, +.purple:not(:checked) > label:hover, +.purple:not(:checked) > label:hover ~ label { + color: #a76287; +} +.purple > input:checked + label:hover, +.purple > input:checked ~ label:hover, +.purple > label:hover ~ input:checked ~ label, +.purple > input:checked ~ label:hover ~ label { + color: #a76287; +} + +.yellow > input:checked ~ label, +.yellow:not(:checked) > label:hover, +.yellow:not(:checked) > label:hover ~ label { + color: #ffad58; +} +.yellow > input:checked + label:hover, +.yellow > input:checked ~ label:hover, +.yellow > label:hover ~ input:checked ~ label, +.yellow > input:checked ~ label:hover ~ label { + color: #ffad58; +} + +.dark-purp > input:checked ~ label, +.dark-purp:not(:checked) > label:hover, +.dark-purp:not(:checked) > label:hover ~ label { + color: #905587; +} +.dark-purp > input:checked + label:hover, +.dark-purp > input:checked ~ label:hover, +.dark-purp > label:hover ~ input:checked ~ label, +.dark-purp > input:checked ~ label:hover ~ label { + color: #905587; +} + +.book-voters { + color: #fff; + vertical-align: sub; + font-size: 13px; + margin-left: 7px; + white-space: nowrap; + margin-top: 7px; +} + +.book-sum { + margin-top: 20px; + font-size: 14px; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} + +.book-see { + margin-top: 25px; + text-align: center; + background-color: #fff; + color: #fbadaf; + font-weight: 600; + padding: 8px; + font-size: 14px; + width: 160px; + border-radius: 20px; + &:hover { + color: #ff6e72; + } + &.book-blue { + color: #a4e0eb; + &:hover { + color: #22cdec; + } + } + &.book-pink { + color: #edb9d6; + &:hover { + color: #ff6dbe; + } + } + &.book-yellow { + color: #fdca95; + &:hover { + color: #fb9124; + } + } + &.book-purple { + color: #cbb5e2; + &:hover { + color: #a764ec; + } + } +} + +.main-wrapper { + width: 100%; + display: flex; + flex-grow: 1; + margin-top: 100px; + overflow: hidden; +} + +.books-of { + width: 320px; + display: flex; + flex-direction: column; + overflow-y: auto; + overflow-x: hidden; + flex-shrink: 0; +} + +.popular-books { + flex-grow: 1; + padding: 0 30px 50px; + overflow-y: auto; +} + +.genre { + font-weight: 500; + font-size: 15px; +} + +.main-menu { + @extend %display; + white-space: nowrap; + padding-bottom: 15px; + border-bottom: 1px solid #dcddde; + position: sticky; + top: 0; + right: 0; + background-color: var(--page-bg-color); + z-index: 2; +} + +.book-types { + margin-left: auto; + a { + text-decoration: none; + color: var(--body-color); + font-size: 14px; + } +} + +.book-type + .book-type { + margin-left: 20px; +} + +.book-type { + position: relative; + transition: 0.2s; + &.active, + &:hover { + -webkit-text-stroke: .3px; + &:before { + content: ""; + position: absolute; + width: 28px; + height: 2px; + bottom: -17px; + right: 15px; + background-color: #67d4ea; + box-shadow: 0px -1px 5px 0px #67d4ea; + } + } + &:nth-child(2):before { + right: 12px; + } + &:nth-child(3):before { + right: 8px; + } + &:nth-child(4):before { + right: 6px; + } + &:nth-child(5):before { + right: 20px; + } +} + +.week { + padding: 0 30px; +} + +.author { + @extend %display; + & + & { + margin-top: 20px; + } + &-name { + font-size: 14px; + } + &:last-child { + margin-bottom: 40px; + } +} + +.author-title { + padding: 0 0 20px; + font-weight: 500; + font-size: 15px; +} + +.author-img { + border-radius: 50%; + width: 30px; + height: 30px; + margin-right: 16px; + object-fit: cover; + object-position: center; +} + +.year-book { + @extend %display; + &-img { + width: 45px; + margin-right: 16px; + } + &-name { + margin-bottom: 15px; + font-weight: 500; + } + &-author { + font-size: 13px; + } + & + & { + margin-top: 20px; + } +} + +.year-book-content { + display: flex; + flex-direction: column; + font-size: 14px; +} + +.overlay { + position: sticky; + bottom: 0; + left: 0; + width: 340px; + flex-shrink: 0; + background: linear-gradient( + to bottom, + rgba(255, 255, 255, 0) 0%, + #f2f5f7 65%, + #f2f5f7 100% + ); + height: 60px; + margin-left: -35px; +} + +.book-cards { + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-column-gap: 40px; + grid-row-gap: 40px; + padding-top: 40px; + position: relative; +} + +.book-card { + margin-top: 20px; + background-color: #fff; + height: 270px; + box-shadow: -1px 3px 8px -1px rgba(0, 0, 0, 0.1); + border-radius: 4px; + display: flex; + flex-direction: column; + cursor: pointer; + padding: 0 0 20px 20px; + color: var(--body-color-light); +} + +.book-card-img { + width: 160px; + margin-top: -35px; + border-radius: 2px; + box-shadow: 0px 1px 7px 2px #c7c9d3; + border-bottom: 1px solid #dcddde; + object-fit: cover; + margin-bottom: 20px; + transition: .3s ease; + &:hover { + transform: scale(1.04); + } +} + + +.card-content { + color: var(--body-color); + padding: 30px; + overflow: hidden; + position: relative; +} + +.book-name { + font-weight: 500; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} + +.book-by { + font-size: 13px; + color: var(--body-color-light); + margin-top: 4px; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} + +.book-rate > label { + color: #cccccc; +} + +.rate { + display: inline-block; + white-space: nowrap; +} + +.book-rate > input:checked ~ label, +.book-rate:not(:checked) > label:hover, +.book-rate:not(:checked) > label:hover ~ label { + color: #ff9700; +} +.book-rate > input:checked + label:hover, +.book-rate > input:checked ~ label:hover, +.book-rate > label:hover ~ input:checked ~ label, +.book-rate > input:checked ~ label:hover ~ label { + color: #ff9700; +} + +.card-vote { + color: var(--body-color-light); +} + +.card-sum { + color: var(--body-color-light); + font-size: 13px; + line-height: 1.6em; + -webkit-line-clamp: 4; + margin-top: 15px; +} + +.content-wrapper { + display: flex; + border-bottom: 1px solid #ebedef; + position: relative; + &:before { + content: ""; + position: absolute; + background-color: #8f98a9; + background-color: #aaaebc; + box-shadow: 0 -6px 0 0 #aaaebc, 0 6px 0 0 #aaaebc; + width: 4px; + height: 4px; + border: 0; + padding: 0; + right: 12px; + top: 17px; + border-radius: 50%; + margin-left: auto; + } +} + +.like-profile { + margin-top: 8px; + & + & { + margin-left: -5px; + } +} + +.like-img { + border-radius: 50%; + width: 28px; + object-fit: cover; + border: 2px solid #fff; +} + +.like-name { + font-size: 13px; + margin-left: 15px; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + span { + font-weight: 600; + } +} + +.likes { + @extend %display; +} + + +@media (max-width: 1103px) { + .book-cell { + width: 60%; + } +} + +@media (max-width: 765px) { + .book-cell { + width: 80%; + } +} + +@media (max-width: 575px) { + .book-cell { + width: 100%; + } +} + +@media (max-width: 458px) { + .book-photo { + width: 180px; + } + .book-voters { + display: none; + } +} + +@media (max-width: 420px) { + .book-see { + width: 120px; + font-size: 13px; + } + .book-photo { + width: 130px; + } + .main-wrapper { + margin-top: 50px; + } +} + +@media (max-width: 360px) { + .rating > label:before { + font-size: 0.8em; + } +} + +@media (max-width: 1220px) { + .card-vote { + display: none; + } +} + +@media (max-width: 1085px) { + .book-rate > label { + font-size: .7em; +} +} + +@media (max-width: 1045px) { + .books-of { + display: none; +} +} + +@media (max-width: 725px) { + .browse-category, .search-bar { + display: none; +} + .header-title { + margin-right: auto; + } + .book-cards { + grid-template-columns: 1fr; + } + .book-types { + display: none; + } +} + +@media (max-width: 372px) { + .card-content { + padding: 20px; + } +} \ No newline at end of file diff --git a/bouncing-bunnies-animation-delay-lesson/README.markdown b/bouncing-bunnies-animation-delay-lesson/README.markdown new file mode 100644 index 0000000..7139a44 --- /dev/null +++ b/bouncing-bunnies-animation-delay-lesson/README.markdown @@ -0,0 +1,5 @@ +# Bouncing Bunnies (animation-delay lesson) ๐Ÿ˜Ž + +A Pen created on CodePen.io. Original URL: [https://codepen.io/jh3y/pen/mdEPXPj](https://codepen.io/jh3y/pen/mdEPXPj). + + diff --git a/bouncing-bunnies-animation-delay-lesson/dist/index.html b/bouncing-bunnies-animation-delay-lesson/dist/index.html new file mode 100644 index 0000000..a530371 --- /dev/null +++ b/bouncing-bunnies-animation-delay-lesson/dist/index.html @@ -0,0 +1,45 @@ + + + + + CodePen - Bouncing Bunnies (animation-delay lesson) ๐Ÿ˜Ž + + + + + + +
+
+
+
+
+
+
+ +

No delay

+

Delay

+

Negative Delay

+

Staggered

+

Staggered w/ Negative Delay

+

Reverse Stagger

+

Reverse Stagger w/ Negative Delay

+

Animate simulataneously with no delay

+

Animate simulataneously with a delay

+

Animate simulataneously with a negative delay

+

Use a variable to create a stagger

+

Use an offset to make the delays negative so that the elements retain stagger but don't stagger in

+

Use the total amount of bunnies to reverse the stagger

+

Use a negative coefficient to create a stagger in the opposite direction

+
.bunny {  animation-delay: 0s;}
+
.bunny {  animation-delay: 2s;}
+
.bunny {  animation-delay: -0.5s;}
+
.bunny {  animation-delay: calc(var(--index) * 0.15s);}
+
.bunny {  animation-delay: calc((var(--index) - 5) * 0.15s);}
+
.bunny {  animation-delay: calc((5 - var(--index)) * 0.15s);}
+
.bunny {  animation-delay: calc(var(--index) * -0.15s);}
+ + + + + diff --git a/bouncing-bunnies-animation-delay-lesson/dist/script.js b/bouncing-bunnies-animation-delay-lesson/dist/script.js new file mode 100644 index 0000000..6f875c7 --- /dev/null +++ b/bouncing-bunnies-animation-delay-lesson/dist/script.js @@ -0,0 +1,44 @@ +// Get started! +const RANGE = document.querySelector('input'); +const CONTAINER = document.querySelector('.container'); +const TITLES = [...document.querySelectorAll('h1')]; +const BLURBS = [...document.querySelectorAll('p')]; +const CODES = [...document.querySelectorAll('pre')]; + +// Each config reps delay, duration, stagger, coefficient, offset +const STEP_CONFIGS = [ +[0, 0.9, 0, 1, 0], +[2, 0.9, 0, 1, 0], +[-0.5, 0.9, 0, 1, 0], +[0, 0.9, 0.15, 1, 0], +[0, 0.9, 0.15, 1, -5], +[0, 0.9, 0.15, 1, 0], +[0, 0.9, 0.15, -1, 0]]; + + +const update = () => { + // Show/Hide elements + for (let e = 0; e < TITLES.length; e++) { + TITLES[e].style.display = BLURBS[e].style.display = CODES[e].style.display = + e === parseInt(RANGE.value, 10) ? 'block' : 'none'; + } + // Running the step function + const CONFIG = STEP_CONFIGS[parseInt(RANGE.value, 10)]; + document.documentElement.style.setProperty('--delay', CONFIG[0]); + document.documentElement.style.setProperty('--duration', CONFIG[1]); + document.documentElement.style.setProperty('--stagger-step', CONFIG[2]); + document.documentElement.style.setProperty('--coefficient', CONFIG[3]); + document.documentElement.style.setProperty('--offset', CONFIG[4]); + if (parseInt(RANGE.value, 10) === 5) { + CONTAINER.classList.add('reversed'); + } else { + CONTAINER.classList.remove('reversed'); + } + // Retrigger the animation + CONTAINER.hidden = true; + requestAnimationFrame(() => CONTAINER.hidden = false); +}; + +RANGE.addEventListener('change', update); +// Run the first time to show step 0 ๐Ÿ‘ +update(); \ No newline at end of file diff --git a/bouncing-bunnies-animation-delay-lesson/dist/style.css b/bouncing-bunnies-animation-delay-lesson/dist/style.css new file mode 100644 index 0000000..9a0c76b --- /dev/null +++ b/bouncing-bunnies-animation-delay-lesson/dist/style.css @@ -0,0 +1,104 @@ +* { + box-sizing: border-box; +} +:root { + --delay: 0; + --duration: 1; + --stagger-step: 0; + --coefficient: 1; + --offset: 0; +} +body { + background: linear-gradient(-45deg, #593, #a8d194); + min-height: 100vh; + display: -webkit-box; + display: flex; + color: #fff; + -webkit-box-align: center; + align-items: center; + font-family: sans-serif; + font-size: 1.2rem; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + text-align: center; +} +pre, +code { + background: #1a1a1a; + font-weight: bold; + font-size: 1.25rem; + font-family: monospace; +} +pre { + padding: 1rem; + border-radius: 6px; +} +.bunny { + height: 50px; + width: 50px; + background-image: url("https://assets.codepen.io/605876/bunny-ready.png"); + background-size: contain; + background-position: center; + background-repeat: no-repeat; + -webkit-transform-origin: 50% 100%; + transform-origin: 50% 100%; + -webkit-animation: jump calc(var(--duration) * 1s) infinite both; + animation: jump calc(var(--duration) * 1s) infinite both; + -webkit-animation-delay: calc((((var(--delay, 0) + (var(--index) * var(--stagger-step))) + var(--offset)) * var(--coefficient)) * 1s); + animation-delay: calc((((var(--delay, 0) + (var(--index) * var(--stagger-step))) + var(--offset)) * var(--coefficient)) * 1s); +} +.reversed .bunny { + -webkit-animation-delay: calc((((var(--delay, 0) + ((5 - var(--index)) * var(--stagger-step))) + var(--offset)) * var(--coefficient)) * 1s); + animation-delay: calc((((var(--delay, 0) + ((5 - var(--index)) * var(--stagger-step))) + var(--offset)) * var(--coefficient)) * 1s); +} +.container { + display: grid; + grid-template-columns: repeat(5, 1fr); + grid-gap: 1vmin; + margin: 4rem 0; +} +h1, +p, +pre { + display: none; + text-align: left; +} +h1 { + margin-bottom: 0.25rem; +} +p { + max-width: 550px; +} +code { + line-height: 1.75; + display: block; +} +[hidden] * { + -webkit-animation: none; + animation: none; +} +@-webkit-keyframes jump { + 10%, 90% { + -webkit-transform: translate(0, 0) scaleX(1.1) scaleY(0.8); + transform: translate(0, 0) scaleX(1.1) scaleY(0.8); + } + 50% { + background-image: url("https://assets.codepen.io/605876/bunny-jump.png"); + -webkit-transform: translate(0, -60px) scaleX(0.9) scaleY(1.2); + transform: translate(0, -60px) scaleX(0.9) scaleY(1.2); + } +} +@keyframes jump { + 10%, 90% { + -webkit-transform: translate(0, 0) scaleX(1.1) scaleY(0.8); + transform: translate(0, 0) scaleX(1.1) scaleY(0.8); + } + 50% { + background-image: url("https://assets.codepen.io/605876/bunny-jump.png"); + -webkit-transform: translate(0, -60px) scaleX(0.9) scaleY(1.2); + transform: translate(0, -60px) scaleX(0.9) scaleY(1.2); + } +} \ No newline at end of file diff --git a/bouncing-bunnies-animation-delay-lesson/license.txt b/bouncing-bunnies-animation-delay-lesson/license.txt new file mode 100644 index 0000000..4e17c7e --- /dev/null +++ b/bouncing-bunnies-animation-delay-lesson/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Jhey (https://codepen.io/jh3y/pen/mdEPXPj) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/bouncing-bunnies-animation-delay-lesson/src/index.pug b/bouncing-bunnies-animation-delay-lesson/src/index.pug new file mode 100644 index 0000000..e5b864d --- /dev/null +++ b/bouncing-bunnies-animation-delay-lesson/src/index.pug @@ -0,0 +1,50 @@ +.container + - let b = 0 + while (b < 5) + .bunny(style=`--index: ${b};`) + - b++ + +input(type='range', min="0", max="6", value="0") + +h1 No delay +h1 Delay +h1 Negative Delay +h1 Staggered +h1 Staggered w/ Negative Delay +h1 Reverse Stagger +h1 Reverse Stagger w/ Negative Delay +p Animate simulataneously with no delay +p Animate simulataneously with a delay +p Animate simulataneously with a negative delay +p Use a variable to create a stagger +p Use an offset to make the delays negative so that the elements retain stagger but don't stagger in +p Use the total amount of bunnies to reverse the stagger +p Use a negative coefficient to create a stagger in the opposite direction +pre + code .bunny { + code animation-delay: 0s; + code } +pre + code .bunny { + code animation-delay: 2s; + code } +pre + code .bunny { + code animation-delay: -0.5s; + code } +pre + code .bunny { + code animation-delay: calc(var(--index) * 0.15s); + code } +pre + code .bunny { + code animation-delay: calc((var(--index) - 5) * 0.15s); + code } +pre + code .bunny { + code animation-delay: calc((5 - var(--index)) * 0.15s); + code } +pre + code .bunny { + code animation-delay: calc(var(--index) * -0.15s); + code } \ No newline at end of file diff --git a/bouncing-bunnies-animation-delay-lesson/src/script.babel b/bouncing-bunnies-animation-delay-lesson/src/script.babel new file mode 100644 index 0000000..fec8cd8 --- /dev/null +++ b/bouncing-bunnies-animation-delay-lesson/src/script.babel @@ -0,0 +1,44 @@ +// Get started! +const RANGE = document.querySelector('input') +const CONTAINER = document.querySelector('.container') +const TITLES = [...document.querySelectorAll('h1')] +const BLURBS = [...document.querySelectorAll('p')] +const CODES = [...document.querySelectorAll('pre')] + +// Each config reps delay, duration, stagger, coefficient, offset +const STEP_CONFIGS = [ + [0, 0.9, 0, 1, 0], + [2, 0.9, 0, 1, 0], + [-0.5, 0.9, 0, 1, 0], + [0, 0.9, 0.15, 1, 0], + [0, 0.9, 0.15, 1, -5], + [0, 0.9, 0.15, 1, 0], + [0, 0.9, 0.15, -1, 0], +] + +const update = () => { + // Show/Hide elements + for (let e = 0; e < TITLES.length; e++) { + TITLES[e].style.display = BLURBS[e].style.display = CODES[e].style.display = + e === parseInt(RANGE.value, 10) ? 'block' : 'none' + } + // Running the step function + const CONFIG = STEP_CONFIGS[parseInt(RANGE.value, 10)] + document.documentElement.style.setProperty('--delay', CONFIG[0]) + document.documentElement.style.setProperty('--duration', CONFIG[1]) + document.documentElement.style.setProperty('--stagger-step', CONFIG[2]) + document.documentElement.style.setProperty('--coefficient', CONFIG[3]) + document.documentElement.style.setProperty('--offset', CONFIG[4]) + if (parseInt(RANGE.value, 10) === 5) { + CONTAINER.classList.add('reversed') + } else { + CONTAINER.classList.remove('reversed') + } + // Retrigger the animation + CONTAINER.hidden = true + requestAnimationFrame(() => (CONTAINER.hidden = false)) +} + +RANGE.addEventListener('change', update) +// Run the first time to show step 0 ๐Ÿ‘ +update() diff --git a/bouncing-bunnies-animation-delay-lesson/src/style.styl b/bouncing-bunnies-animation-delay-lesson/src/style.styl new file mode 100644 index 0000000..dc1fdff --- /dev/null +++ b/bouncing-bunnies-animation-delay-lesson/src/style.styl @@ -0,0 +1,77 @@ +* + box-sizing border-box + +:root + --delay 0 + --duration 1 + --stagger-step 0 + --coefficient 1 + --offset 0 + +body + background linear-gradient(-45deg, hsl(100, 50%, 40%), hsl(100, 40%, 70%)) + min-height 100vh + display flex + color hsl(0, 0%, 100%) + align-items center + font-family sans-serif + font-size 1.2rem + justify-content center + flex-direction column + text-align center + +pre +code + background hsl(0, 0%, 10%) + font-weight bold + font-size 1.25rem + font-family monospace +pre + padding 1rem + border-radius 6px + +.bunny + height 50px + width 50px + background-image url("https://assets.codepen.io/605876/bunny-ready.png") + background-size contain + background-position center + background-repeat no-repeat + transform-origin 50% 100% + animation jump calc(var(--duration) * 1s) infinite both + animation-delay calc((((var(--delay, 0) + (var(--index) * var(--stagger-step))) + var(--offset)) * var(--coefficient)) * 1s) + +@keyframes jump + 10%, 90% + transform translate(0, 0) scaleX(1.1) scaleY(0.8) + 50% + background-image url("https://assets.codepen.io/605876/bunny-jump.png") + transform translate(0, -60px) scaleX(0.9) scaleY(1.2) + +.reversed .bunny + animation-delay calc((((var(--delay, 0) + ((5 - var(--index)) * var(--stagger-step))) + var(--offset)) * var(--coefficient)) * 1s) + +.container + display grid + grid-template-columns repeat(5, 1fr) + grid-gap 1vmin + margin 4rem 0 + +h1 +p +pre + display none + text-align left + +h1 + margin-bottom 0.25rem + +p + max-width 550px + +code + line-height 1.75 + display block + +[hidden] * + animation none diff --git a/box-model/README.markdown b/box-model/README.markdown new file mode 100644 index 0000000..e58faa8 --- /dev/null +++ b/box-model/README.markdown @@ -0,0 +1,5 @@ +# Box Model + +A Pen created on CodePen.io. Original URL: [https://codepen.io/argyleink/pen/bGNmgGW](https://codepen.io/argyleink/pen/bGNmgGW). + + diff --git a/box-model/dist/index.html b/box-model/dist/index.html new file mode 100644 index 0000000..3195255 --- /dev/null +++ b/box-model/dist/index.html @@ -0,0 +1,31 @@ + + + + + CodePen - Box Model + + + + + + +
+
+ Content Box + + +
+
+ +
+ + + + + +
+ + + + + diff --git a/box-model/dist/script.js b/box-model/dist/script.js new file mode 100644 index 0000000..7e75b0b --- /dev/null +++ b/box-model/dist/script.js @@ -0,0 +1,7 @@ +document.body.setAttribute('dir', 'ltr'); + +window.show_scrollbars.addEventListener('input', (e) => +window.box_model.setAttribute('scrollbars', e.target.checked)); + +window.inline_scrollbars.addEventListener('input', (e) => +window.box_model.setAttribute('inline-scrollbars', e.target.checked)); \ No newline at end of file diff --git a/box-model/dist/style.css b/box-model/dist/style.css new file mode 100644 index 0000000..40e0f9b --- /dev/null +++ b/box-model/dist/style.css @@ -0,0 +1,127 @@ +body { + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + /* scale the whole thing here */ + font-size: min(2vmax, 2rem); +} + +article { + background: repeating-linear-gradient(-45deg, hsl(0, 0%, 70%), hsl(0, 0%, 70%) 1px, white 1px, white 10px); + box-shadow: 0 2rem 5rem hsla(0, 0%, 0%, 0.25); + position: relative +} + +article::before { + content: "Margin Box"; + position: absolute; + top: 1ex; + left: 50%; + transform: translateX(-50%); + height: 3ex; + display: flex; + align-items: center; + justify-content: center; + font-size: .5em; + background: white; + padding: .25rem 1rem; + border-radius: 3rem; + } + +article::after { + content: "Outline & Box Shadow"; + position: absolute; + top: 6ex; + left: 0; + width: 100%; + height: 6ex; + display: flex; + align-items: center; + justify-content: center; + font-size: .5em; + color: white; + } + +figure { + width: 25vmin; + height: 25vmin; + display: flex; + align-items: center; + justify-content: center; + margin: 6ex; + border: 3ex solid black; + outline: 3ex solid hsla(270, 50%, 40%, 0.8); + padding: 3ex; + background: + linear-gradient(white, white) content-box, + linear-gradient(hotpink, hotpink) padding-box; + position: relative +} + +figure::after { + content: "Padding Box"; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 6ex; + display: flex; + align-items: center; + justify-content: center; + font-size: .5em; + } + +figure::before { + content: "Border Box"; + color: white; + position: absolute; + top: 0; + left: 0; + transform: translateY(-100%); + width: 100%; + height: 6ex; + display: flex; + align-items: center; + justify-content: center; + font-size: .5em; + } + +figure > .scrollbar { + background: hsla(0, 0%, 0%, 0.25); + position: absolute; + visibility: hidden + } + +figure > .scrollbar.vertical { + width: 1ex; + height: 100%; + top: 0; + right: 0; + } + +figure > .scrollbar.horizontal { + height: 1ex; + width: 100%; + bottom: 0; + left: 0; + } + +figure[scrollbars="true"] .scrollbar { + visibility: visible; + } + +figure[inline-scrollbars="true"] { + padding: 3ex 4ex 4ex 3ex; + } + +form { + display: grid; + grid-template-columns: 1fr auto; + align-items: center; + justify-items: flex-end; + grid-gap: 1rem; + gap: 1rem; + margin-top: 3rem; +} \ No newline at end of file diff --git a/box-model/license.txt b/box-model/license.txt new file mode 100644 index 0000000..df0d922 --- /dev/null +++ b/box-model/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Adam Argyle (https://codepen.io/argyleink/pen/bGNmgGW) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/box-model/src/index.html b/box-model/src/index.html new file mode 100644 index 0000000..a329a8b --- /dev/null +++ b/box-model/src/index.html @@ -0,0 +1,15 @@ +
+
+ Content Box + + +
+
+ +
+ + + + + +
\ No newline at end of file diff --git a/box-model/src/script.babel b/box-model/src/script.babel new file mode 100644 index 0000000..848f191 --- /dev/null +++ b/box-model/src/script.babel @@ -0,0 +1,7 @@ +document.body.setAttribute('dir', 'ltr') + +window.show_scrollbars.addEventListener('input', e => + window.box_model.setAttribute('scrollbars', e.target.checked)) + +window.inline_scrollbars.addEventListener('input', e => + window.box_model.setAttribute('inline-scrollbars', e.target.checked)) \ No newline at end of file diff --git a/box-model/src/style.css b/box-model/src/style.css new file mode 100644 index 0000000..401b3c2 --- /dev/null +++ b/box-model/src/style.css @@ -0,0 +1,130 @@ +@use postcss-preset-env { + stage: 0; +} + +body { + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + /* scale the whole thing here */ + font-size: min(2vmax, 2rem); +} + +article { + background: repeating-linear-gradient(-45deg, hsl(0 0% 70%), hsl(0 0% 70%) 1px, white 1px, white 10px); + box-shadow: 0 2rem 5rem hsl(0 0% 0% / 25%); + position: relative; + + &::before { + content: "Margin Box"; + position: absolute; + top: 1ex; + left: 50%; + transform: translateX(-50%); + height: 3ex; + display: flex; + align-items: center; + justify-content: center; + font-size: .5em; + background: white; + padding: .25rem 1rem; + border-radius: 3rem; + } + + &::after { + content: "Outline & Box Shadow"; + position: absolute; + top: 6ex; + left: 0; + width: 100%; + height: 6ex; + display: flex; + align-items: center; + justify-content: center; + font-size: .5em; + color: white; + } +} + +figure { + width: 25vmin; + height: 25vmin; + display: flex; + align-items: center; + justify-content: center; + margin: 6ex; + border: 3ex solid black; + outline: 3ex solid hsl(270 50% 40% / 80%); + padding: 3ex; + background: + linear-gradient(white, white) content-box, + linear-gradient(hotpink, hotpink) padding-box; + position: relative; + + &::after { + content: "Padding Box"; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 6ex; + display: flex; + align-items: center; + justify-content: center; + font-size: .5em; + } + + &::before { + content: "Border Box"; + color: white; + position: absolute; + top: 0; + left: 0; + transform: translateY(-100%); + width: 100%; + height: 6ex; + display: flex; + align-items: center; + justify-content: center; + font-size: .5em; + } + + & > .scrollbar { + background: hsl(0 0% 0% / 25%); + position: absolute; + visibility: hidden; + + &.vertical { + width: 1ex; + height: 100%; + top: 0; + right: 0; + } + + &.horizontal { + height: 1ex; + width: 100%; + bottom: 0; + left: 0; + } + } + + &[scrollbars="true"] .scrollbar { + visibility: visible; + } + + &[inline-scrollbars="true"] { + padding: 3ex 4ex 4ex 3ex; + } +} + +form { + display: grid; + grid-template-columns: 1fr auto; + align-items: center; + justify-items: flex-end; + gap: 1rem; + margin-block-start: 3rem; +} \ No newline at end of file diff --git a/break-out-of-parent-element-indented/README.markdown b/break-out-of-parent-element-indented/README.markdown new file mode 100644 index 0000000..d358a54 --- /dev/null +++ b/break-out-of-parent-element-indented/README.markdown @@ -0,0 +1,4 @@ +# Break out of parent element (indented) + _A Pen created at CodePen.io. Original URL: [https://codepen.io/jakob-e/pen/YbrRYN](https://codepen.io/jakob-e/pen/YbrRYN). + + Break out of parent element while keeping content aligned โ€“ a small guide. \ No newline at end of file diff --git a/break-out-of-parent-element-indented/dist/index.html b/break-out-of-parent-element-indented/dist/index.html new file mode 100644 index 0000000..d9c8ba9 --- /dev/null +++ b/break-out-of-parent-element-indented/dist/index.html @@ -0,0 +1,89 @@ + + + + + Break out of parent element (indented) + + + + + + + + + + + + + + +
+
+

The Great Escape

+
+ +
+  .breakout {
+    /* click next */
+  }
+
+
+  .breakout {
+    margin-left: 50%;
+  }
+
+
+  .breakout {
+    margin-left: calc(50% - 50vw);
+  }
+
+
+  .breakout {
+    margin-left:  calc(50% - 50vw);
+    padding-left: 50vw;
+  }
+
+
+  .breakout {
+    margin-left:  calc(50% - 50vw);
+    padding-left: calc(50vw - 50%);
+  }
+
+
+  .breakout {
+    margin-left:   calc(50% - 50vw);
+    margin-right:  calc(50% - 50vw);
+    padding-left:  calc(50vw - 50%);
+    padding-right: calc(50vw - 50%);
+  }
+ 
+  /* ---------------------------
+     leave out padding to make 
+     content stretch to viewport 
+     --------------------------- */ 
+	 
+
+ + + + + + + +
+ + + + \ No newline at end of file diff --git a/break-out-of-parent-element-indented/dist/style.css b/break-out-of-parent-element-indented/dist/style.css new file mode 100644 index 0000000..ce30ec6 --- /dev/null +++ b/break-out-of-parent-element-indented/dist/style.css @@ -0,0 +1,282 @@ +html { + box-sizing: border-box; +} + +*, *::before, *::after { + box-sizing: inherit; + position: relative; + z-index: 0; +} + +body { + padding: 1rem; + background: whitesmoke; + -webkit-font-smoothing: antialiased; +} + +*:before, *:after { + z-index: 1; +} + +.wrap { + max-width: 50vw; + margin: 0 auto; + background: white; + outline: 1px solid #ccc; + outline-offset: -1px; + min-height: 80vh; + padding: 2rem; +} +.wrap:after { + content: ''; + position: absolute; + display: block; + outline: 1px dotted silver; + top: 2rem; + left: 2rem; + bottom: 2rem; + right: 2rem; + z-index: -1; +} + +.content { + background: rgba(255, 69, 0, 0.5); + height: 100px; +} + +.breakout { + background-image: url('data:image/svg+xml,%3Csvg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg"%3E%3Cg fill="%23ff6a33" fill-opacity="0.4" fill-rule="evenodd"%3E%3Cpath d="M0 40L40 0H20L0 20M40 40V20L20 40"/%3E%3C/g%3E%3C/svg%3E'); + transition: all 600ms; + font: caption; + outline: 1px dotted silver; +} +.breakout h2 { + text-align: center; + padding: 1rem 0; + font-size: 1.1rem; +} +.breakout:before, .breakout:after { + transition: all 300ms; +} + +[id="step1"]:checked ~ * .breakout { + margin-left: calc(50%); +} +[id="step1"]:checked ~ * .breakout:before { + content: '+50% margin'; + position: absolute; + display: block; + width: 100%; + left: -100%; + top: 50%; + border-bottom: 1px dashed; + text-align: center; +} +[id="step1"]:checked ~ * .breakout:after { + content: ''; + position: absolute; + display: block; + left: 0; + top: -1rem; + height: calc(100% + 3rem); + border-left: 1px dashed; + text-align: center; +} + +[id="step2"]:checked ~ * .breakout { + margin-left: calc(50% - 50vw); +} +[id="step2"]:checked ~ * .breakout:before { + content: '-50vw margin'; + position: absolute; + display: block; + width: 50vw; + top: 50%; + border-bottom: 1px dashed; + text-align: center; +} +[id="step2"]:checked ~ * .breakout:after { + content: ''; + position: fixed; + display: block; + left: calc(50% - 1px); + top: 0; + height: 100vh; + border-left: 1px dashed silver; + text-align: center; + transition: none; +} + +[id="step3"]:checked ~ * .breakout { + margin-left: calc(50% - 50vw); + padding-left: calc(50vw); +} +[id="step3"]:checked ~ * .breakout:before { + content: '+50vw padding'; + position: absolute; + display: block; + width: 50vw; + top: 50%; + left: 0; + border-bottom: 1px dashed; + text-align: center; +} +[id="step3"]:checked ~ * .breakout:after { + content: ''; + position: fixed; + display: block; + left: calc(50% - 1px); + top: 0; + height: 100vh; + border-left: 1px dashed silver; + text-align: center; + transition: none; +} + +[id="step4"]:checked ~ * .breakout { + margin-left: calc(50% - 50vw); + padding-left: calc(50vw - 50%); +} +[id="step4"]:checked ~ * .breakout:before { + content: '-50% padding'; + position: absolute; + display: block; + width: 50%; + top: 50%; + left: 0; + border-bottom: 1px dashed; + text-align: center; + white-space: pre; +} +[id="step4"]:checked ~ * .breakout:after { + content: ''; + position: absolute; + display: block; + left: 50%; + top: -1rem; + height: calc(100% + 3rem); + border-left: 1px dashed; + text-align: center; +} + +[id="step5"]:checked ~ * .breakout { + margin-left: calc(50% - 50vw); + margin-right: calc(50% - 50vw); + padding-left: calc(50vw - 50%); + padding-right: calc(50vw - 50%); +} + +pre { + overflow: auto; + display: none; + font-size: 12px; + background: whitesmoke; + padding: 1.5rem; + margin-top: 2rem; + font-family: monospace; +} +pre span { + color: #999; +} + +[id="step0"]:checked ~ * pre:nth-of-type(1) { + display: block; +} + +[id="step1"]:checked ~ * pre:nth-of-type(2) { + display: block; +} + +[id="step2"]:checked ~ * pre:nth-of-type(3) { + display: block; +} + +[id="step3"]:checked ~ * pre:nth-of-type(4) { + display: block; +} + +[id="step4"]:checked ~ * pre:nth-of-type(5) { + display: block; +} + +[id="step5"]:checked ~ * pre:nth-of-type(6) { + display: block; +} + +input { + position: fixed; + top: -100px; +} + +.prev, .next { + width: 40px; + text-align: center; + position: absolute; + bottom: 3rem; +} + +.prev { + right: 5.5rem; +} + +.next { + right: 3rem; +} + +label { + display: none; + cursor: pointer; +} + +svg { + background: white; + border-radius: 50%; + border: 2px solid; + padding: 4px; + width: 32px; + height: 32px; +} + +[id="step1"]:checked ~ * .prev label:nth-of-type(1) { + display: block; +} + +[id="step2"]:checked ~ * .prev label:nth-of-type(2) { + display: block; +} + +[id="step3"]:checked ~ * .prev label:nth-of-type(3) { + display: block; +} + +[id="step4"]:checked ~ * .prev label:nth-of-type(4) { + display: block; +} + +[id="step5"]:checked ~ * .prev label:nth-of-type(5) { + display: block; +} + +[id="step0"]:checked ~ * .next label:nth-of-type(1) { + display: block; +} + +[id="step1"]:checked ~ * .next label:nth-of-type(2) { + display: block; +} + +[id="step2"]:checked ~ * .next label:nth-of-type(3) { + display: block; +} + +[id="step3"]:checked ~ * .next label:nth-of-type(4) { + display: block; +} + +[id="step4"]:checked ~ * .next label:nth-of-type(5) { + display: block; +} + +[id="step5"]:checked ~ * .next label:nth-of-type(6) { + display: block; +} diff --git a/break-out-of-parent-element-indented/license.txt b/break-out-of-parent-element-indented/license.txt new file mode 100644 index 0000000..79e94dd --- /dev/null +++ b/break-out-of-parent-element-indented/license.txt @@ -0,0 +1,13 @@ + + + + diff --git a/break-out-of-parent-element-indented/src/index.html b/break-out-of-parent-element-indented/src/index.html new file mode 100644 index 0000000..ea917c0 --- /dev/null +++ b/break-out-of-parent-element-indented/src/index.html @@ -0,0 +1,75 @@ + + + + + + + + + +
+
+

The Great Escape

+
+ +
+  .breakout {
+    /* click next */
+  }
+
+
+  .breakout {
+    margin-left: 50%;
+  }
+
+
+  .breakout {
+    margin-left: calc(50% - 50vw);
+  }
+
+
+  .breakout {
+    margin-left:  calc(50% - 50vw);
+    padding-left: 50vw;
+  }
+
+
+  .breakout {
+    margin-left:  calc(50% - 50vw);
+    padding-left: calc(50vw - 50%);
+  }
+
+
+  .breakout {
+    margin-left:   calc(50% - 50vw);
+    margin-right:  calc(50% - 50vw);
+    padding-left:  calc(50vw - 50%);
+    padding-right: calc(50vw - 50%);
+  }
+ 
+  /* ---------------------------
+     leave out padding to make 
+     content stretch to viewport 
+     --------------------------- */ 
+	 
+
+ + + + + + + +
\ No newline at end of file diff --git a/break-out-of-parent-element-indented/src/style.scss b/break-out-of-parent-element-indented/src/style.scss new file mode 100644 index 0000000..611fb4f --- /dev/null +++ b/break-out-of-parent-element-indented/src/style.scss @@ -0,0 +1,190 @@ +html { box-sizing: border-box; } *,*::before,*::after { box-sizing: inherit; position: relative; z-index: 0; } +body { padding: 1rem; background: whitesmoke; -webkit-font-smoothing: antialiased; } +*:before, *:after { z-index: 1; } +.wrap { + max-width: 50vw; + margin: 0 auto; + background: white; + outline: 1px solid #ccc; + outline-offset: -1px; + min-height: 80vh; + padding: 2rem; + + &:after { + content: ''; + position: absolute; + display: block; + outline: 1px dotted silver; + top: 2rem; + left: 2rem; + bottom: 2rem; + right: 2rem; + z-index: -1; + } +} + +.content { + background: rgba(orangered, 0.5); + height: 100px; +} +.breakout { + h2 { text-align: center; padding: 1rem 0; font-size: 1.1rem; } +background-image: url('data:image/svg+xml,%3Csvg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg"%3E%3Cg fill="%23ff6a33" fill-opacity="0.4" fill-rule="evenodd"%3E%3Cpath d="M0 40L40 0H20L0 20M40 40V20L20 40"/%3E%3C/g%3E%3C/svg%3E'); + transition: all 600ms; + font: caption; + outline: 1px dotted silver; + &:before, &:after { transition: all 300ms;} +} + +[id="step1"]:checked ~ * .breakout { + margin-left: calc(50%); + + &:before { + content: '+50% margin'; + position: absolute; + display: block; + width: 100%; + left: -100%; + top : 50%; + border-bottom: 1px dashed; + text-align: center; + } + + &:after { + content: ''; + position: absolute; + display: block; + left: 0; + top : -1rem; + height: calc(100% + 3rem); + border-left: 1px dashed; + text-align: center; + + } +} + + + +[id="step2"]:checked ~ * .breakout { + margin-left: calc(50% - 50vw); + &:before { + content: '-50vw margin'; + position: absolute; + display: block; + width: 50vw; + top : 50%; + border-bottom: 1px dashed; + text-align: center; + } + + &:after { + content: ''; + position: fixed; + display: block; + left: calc(50% - 1px); + top : 0; + height: 100vh; + border-left: 1px dashed silver; + text-align: center; + transition: none; + } +} +[id="step3"]:checked ~ * .breakout { + margin-left: calc(50% - 50vw); + padding-left: calc(50vw); + &:before { + content: '+50vw padding'; + position: absolute; + display: block; + width: 50vw; + top : 50%; + left: 0; + border-bottom: 1px dashed; + text-align: center; + } + + &:after { + content: ''; + position: fixed; + display: block; + left: calc(50% - 1px); + top : 0; + height: 100vh; + border-left: 1px dashed silver; + text-align: center; + transition: none; + } +} +[id="step4"]:checked ~ * .breakout { + margin-left: calc(50% - 50vw); + // margin-right: calc(50% - 50vw); + padding-left: calc(50vw - 50%); + &:before { + content: '-50% padding'; + position: absolute; + display: block; + width: 50%; + top : 50%; + left: 0; + border-bottom: 1px dashed; + text-align: center; + white-space: pre; + } + + &:after { + content: ''; + position: absolute; + display: block; + left: 50%; + top : -1rem; + height: calc(100% + 3rem); + border-left: 1px dashed; + text-align: center; + + } +} +[id="step5"]:checked ~ * .breakout { + margin-left: calc(50% - 50vw); + margin-right: calc(50% - 50vw); + padding-left: calc(50vw - 50%); + padding-right: calc(50vw - 50%); +} + + +pre { + overflow: auto; + display: none; + font-size: 12px; + background: whitesmoke; + padding: 1.5rem; + margin-top: 2rem; + font-family: monospace; + span { color: #999; } +} +[id="step0"]:checked ~ * pre:nth-of-type(1) { display: block; } +[id="step1"]:checked ~ * pre:nth-of-type(2) { display: block; } +[id="step2"]:checked ~ * pre:nth-of-type(3) { display: block; } +[id="step3"]:checked ~ * pre:nth-of-type(4) { display: block; } +[id="step4"]:checked ~ * pre:nth-of-type(5) { display: block; } +[id="step5"]:checked ~ * pre:nth-of-type(6) { display: block; } + + + +input { position: fixed; top: -100px; } +.prev,.next { width: 40px; text-align: center; position: absolute; bottom: 3rem; } +.prev { right: 5.5rem; } +.next { right: 3rem; } +label { display: none; cursor: pointer; } +svg { background:white; border-radius: 50%; border: 2px solid; padding: 4px; width:32px; height: 32px; } +[id="step1"]:checked ~ * .prev label:nth-of-type(1) { display: block; } +[id="step2"]:checked ~ * .prev label:nth-of-type(2) { display: block; } +[id="step3"]:checked ~ * .prev label:nth-of-type(3) { display: block; } +[id="step4"]:checked ~ * .prev label:nth-of-type(4) { display: block; } +[id="step5"]:checked ~ * .prev label:nth-of-type(5) { display: block; } + +[id="step0"]:checked ~ * .next label:nth-of-type(1) { display: block; } +[id="step1"]:checked ~ * .next label:nth-of-type(2) { display: block; } +[id="step2"]:checked ~ * .next label:nth-of-type(3) { display: block; } +[id="step3"]:checked ~ * .next label:nth-of-type(4) { display: block; } +[id="step4"]:checked ~ * .next label:nth-of-type(5) { display: block; } +[id="step5"]:checked ~ * .next label:nth-of-type(6) { display: block; } diff --git a/breathe/README.markdown b/breathe/README.markdown new file mode 100644 index 0000000..a0f6df3 --- /dev/null +++ b/breathe/README.markdown @@ -0,0 +1,5 @@ +# Breathe + +A Pen created on CodePen.io. Original URL: [https://codepen.io/supah/pen/OJXJgZq](https://codepen.io/supah/pen/OJXJgZq). + + diff --git a/breathe/dist/index.html b/breathe/dist/index.html new file mode 100644 index 0000000..64d5af2 --- /dev/null +++ b/breathe/dist/index.html @@ -0,0 +1,27 @@ + + + + + CodePen - Breathe + + + + + + + + + + + + + + diff --git a/breathe/dist/script.js b/breathe/dist/script.js new file mode 100644 index 0000000..0bddfeb --- /dev/null +++ b/breathe/dist/script.js @@ -0,0 +1,144 @@ +/*-------------------- +Utils +--------------------*/ +const mapRange = (a, b, c, d, e) => { + return (a - b) * (e - d) / (c - b) + d; +}; +const lerp = (v0, v1, t) => { + return v0 * (1 - t) + v1 * t; +}; +const random = (min, max) => min + Math.random() * (max - min); +const sin = t => Math.sin(t); +const cos = t => Math.cos(t); +const PI = Math.PI; +const TAO = PI * 2; +const LOOP = 4; + + +/*-------------------- + Raf + --------------------*/ +class Raf { + constructor() { + this.raf(); + } + + raf() { + if (this.onRaf) { + window.requestAnimationFrame(() => { + const o = {}; + o.time = window.performance.now() / 1000; + o.playhead = o.time % LOOP / LOOP; + this.raf(); + this.onRaf(o); + }); + } + }} + + + +/*-------------------- + Canvas + --------------------*/ +class Canvas extends Raf { + constructor(obj) { + super(); + this.canvas = document.getElementById(obj.id); + this.ctx = this.canvas.getContext('2d'); + this.resize(); + this.events(); + } + + resize() { + this.dpr = window.devicePixelRatio; + this.canvas.style.width = `${window.innerWidth}px`; + this.canvas.style.height = `${window.innerHeight}px`; + this.canvas.width = window.innerWidth * this.dpr; + this.canvas.height = window.innerHeight * this.dpr; + } + + events() { + window.addEventListener('resize', this.resize); + } + + clear() { + this.ctx.clearRect(0, 0, window.innerWidth * this.dpr, window.innerHeight * this.dpr); + } + + onRaf() { + this.clear(); + }} + + + +/*-------------------- + Circle + --------------------*/ +class Circle extends Raf { + constructor(obj) { + super(); + Object.assign(this, obj); + this.draw(); + } + + draw(playhead, time) { + const breathe = sin(playhead * TAO); + this.ctx.globalCompositeOperation = "screen"; + this.ctx.save(); + this.ctx.translate(window.innerWidth / 2 * this.dpr, window.innerHeight / 2 * this.dpr - 30 * this.dpr); + this.ctx.rotate(PI); + + this.ctx.strokeStyle = this.color; + this.ctx.fillStyle = 'rgba(0, 100, 0, 0)'; + this.ctx.lineWidth = this.lineWidth; + this.ctx.beginPath(); + + for (let i = 0; i <= this.points; i++) { + const p = i / this.points; + + const times = 7; + + const phase = mapRange(cos(p * TAO), -1, 1, 1, mapRange(sin(((this.offset + time * this.speed) * .2 + p) * times * TAO), -1, 1, .5, .58)); + + let x = phase * this.radius * sin(p * TAO); + let y = phase * this.radius * cos(p * TAO); + + const type = i === 0 ? 'moveTo' : 'lineTo'; + this.ctx[type](x, y); + } + + this.ctx.fill(); + this.ctx.stroke(); + this.ctx.beginPath(); + this.ctx.fillStyle = this.color; + this.ctx.fill(); + this.ctx.restore(); + } + + onRaf({ playhead, time }) { + this.draw(playhead, time); + }} + + + + + +/*-------------------- + Init + --------------------*/ +const canvas = new Canvas({ + id: 'canvas' }); + + +for (let i = 0; i < 8; i++) { + new Circle({ + ctx: canvas.ctx, + dpr: canvas.dpr, + lineWidth: 1 * canvas.dpr, + points: 200, + offset: i * 1.5, + speed: .7, + radius: (150 - i * 4) * canvas.dpr, + color: `hsl(${220 + i * 10}, 60%, 70%)` }); + +} \ No newline at end of file diff --git a/breathe/dist/style.css b/breathe/dist/style.css new file mode 100644 index 0000000..2660c01 --- /dev/null +++ b/breathe/dist/style.css @@ -0,0 +1,42 @@ +body { + margin: 0; + padding: 0; + background: #172442; +} +body:before { + content: ''; + position: absolute; + z-index: 1; + background: -webkit-gradient(linear, left bottom, left top, from(#191842), color-stop(95%, transparent)); + background: linear-gradient(0deg, #191842, transparent 95%); + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + width: 320px; + height: 400px; + box-shadow: -5px 35px 30px -20px rgba(0, 0, 0, 0.5); +} +body:after { + position: absolute; + z-index: 2; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + letter-spacing: 1.4em; + margin: 0 0 0 0.6em; + text-transform: uppercase; + content: 'BREATHE'; + color: violet; + mix-blend-mode: lighten; + font-size: 12px; + font-family: serif; + opacity: .8; +} + +canvas { + position: relative; + z-index: 2; + background: transparent; +} \ No newline at end of file diff --git a/breathe/license.txt b/breathe/license.txt new file mode 100644 index 0000000..d7f75ab --- /dev/null +++ b/breathe/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Fabio Ottaviani (https://codepen.io/supah/pen/OJXJgZq) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/breathe/src/index.html b/breathe/src/index.html new file mode 100644 index 0000000..651b9fa --- /dev/null +++ b/breathe/src/index.html @@ -0,0 +1,11 @@ + + + \ No newline at end of file diff --git a/breathe/src/script.babel b/breathe/src/script.babel new file mode 100644 index 0000000..b718469 --- /dev/null +++ b/breathe/src/script.babel @@ -0,0 +1,144 @@ +/*-------------------- +Utils +--------------------*/ +const mapRange = (a, b, c, d, e) => { + return (a - b) * (e - d) / (c - b) + d +} +const lerp = (v0, v1, t) => { + return v0 * (1 - t) + v1 * t +} +const random = (min, max) => min + Math.random() * (max - min) +const sin = (t) => (Math.sin(t)) +const cos = (t) => (Math.cos(t)) +const PI = Math.PI +const TAO = PI * 2 +const LOOP = 4 + + +/*-------------------- +Raf +--------------------*/ +class Raf { + constructor() { + this.raf() + } + + raf() { + if (this.onRaf) { + window.requestAnimationFrame(() => { + const o = {} + o.time = window.performance.now() / 1000 + o.playhead = o.time % LOOP / LOOP + this.raf() + this.onRaf(o) + }) + } + } +} + + +/*-------------------- +Canvas +--------------------*/ +class Canvas extends Raf { + constructor(obj) { + super() + this.canvas = document.getElementById(obj.id) + this.ctx = this.canvas.getContext('2d') + this.resize() + this.events() + } + + resize() { + this.dpr = window.devicePixelRatio + this.canvas.style.width = `${window.innerWidth}px` + this.canvas.style.height = `${window.innerHeight}px` + this.canvas.width = window.innerWidth * this.dpr + this.canvas.height = window.innerHeight * this.dpr + } + + events() { + window.addEventListener('resize', this.resize) + } + + clear() { + this.ctx.clearRect(0, 0, window.innerWidth * this.dpr, window.innerHeight * this.dpr) + } + + onRaf() { + this.clear() + } +} + + +/*-------------------- +Circle +--------------------*/ +class Circle extends Raf { + constructor(obj) { + super() + Object.assign(this, obj) + this.draw() + } + + draw(playhead, time) { + const breathe = sin(playhead * TAO) + this.ctx.globalCompositeOperation = "screen" + this.ctx.save() + this.ctx.translate(window.innerWidth / 2 * this.dpr, window.innerHeight / 2 * this.dpr - 30 * this.dpr) + this.ctx.rotate(PI) + + this.ctx.strokeStyle = this.color + this.ctx.fillStyle = 'rgba(0, 100, 0, 0)' + this.ctx.lineWidth = this.lineWidth + this.ctx.beginPath() + + for (let i = 0; i <= this.points; i++) { + const p = i / this.points + + const times = 7 + + const phase = mapRange(cos(p * TAO), -1, 1, 1, mapRange(sin(((this.offset + time * this.speed) * .2 + p) * times * TAO), -1, 1, .5, .58)) + + let x = phase * this.radius * sin(p * TAO) + let y = phase * this.radius * cos(p * TAO) + + const type = i === 0 ? 'moveTo' : 'lineTo' + this.ctx[type](x, y) + } + + this.ctx.fill() + this.ctx.stroke() + this.ctx.beginPath() + this.ctx.fillStyle = this.color + this.ctx.fill() + this.ctx.restore() + } + + onRaf({playhead, time}) { + this.draw(playhead, time) + } + +} + + + +/*-------------------- +Init +--------------------*/ +const canvas = new Canvas({ + id: 'canvas' +}) + +for (let i = 0; i < 8; i++) { + new Circle({ + ctx: canvas.ctx, + dpr: canvas.dpr, + lineWidth: 1 * canvas.dpr, + points: 200, + offset: i * 1.5, + speed: .7, + radius: (150 - i * 4) * canvas.dpr, + color: `hsl(${220 + i * 10}, 60%, 70%)` + }) +} diff --git a/breathe/src/style.scss b/breathe/src/style.scss new file mode 100644 index 0000000..dbe83c9 --- /dev/null +++ b/breathe/src/style.scss @@ -0,0 +1,42 @@ +body { + margin: 0; + padding: 0; + background: #172442; + + &:before { + content: ''; + position: absolute; + z-index: 1; + background: linear-gradient(0deg, #191842, transparent 95%); + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 320px; + height: 400px; + box-shadow: -5px 35px 30px -20px rgba(0, 0, 0, 0.5); + } + + &:after { + position: absolute; + z-index: 2; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + letter-spacing: 1.4em; + margin: 0 0 0 0.6em; + text-transform: uppercase; + content: 'BREATHE'; + color: violet; + mix-blend-mode: lighten; + font-size: 12px; + font-family: serif; + opacity: .8; + } +} + +canvas { + position: relative; + z-index: 2; + background: transparent; +} \ No newline at end of file diff --git a/bricks-darkcss-doodle/README.markdown b/bricks-darkcss-doodle/README.markdown new file mode 100644 index 0000000..8fe41de --- /dev/null +++ b/bricks-darkcss-doodle/README.markdown @@ -0,0 +1,4 @@ +# Bricks(dark) - CSS Doodle + _A Pen created at CodePen.io. Original URL: [https://codepen.io/aragakey/pen/YMvPRd](https://codepen.io/aragakey/pen/YMvPRd). + + \ No newline at end of file diff --git a/bricks-darkcss-doodle/dist/index.html b/bricks-darkcss-doodle/dist/index.html new file mode 100644 index 0000000..164a40c --- /dev/null +++ b/bricks-darkcss-doodle/dist/index.html @@ -0,0 +1,90 @@ + + + + + Bricks(dark) - CSS Doodle + + + + + + + :doodle { + @grid: 6x6 / 100vmin; + } + color: hsla( + calc(360 - @i() * 4), 70%, 68%, @r(.99) + ); + @nth(1, 3, 5, 13, 15, 17, 25, 27, 29) { + z-index: 100; + + ::after{ + content: ""; + opacity: .5; + position: absolute; + z-index: 100; + top: 50%; + left: 50%; + @size: 100%; + background-image: linear-gradient( + transparent calc(25% - 1px), + #000 calc(25% - 1px), + #000 calc(25% + 1px), + transparent calc(25% + 1px), + transparent calc(75% - 1px), + #000 calc(75% - 1px), + #000 calc(75% + 1px), + transparent calc(75% + 1px)),linear-gradient(90deg, + transparent calc(25% - 1px), + #000 calc(25% - 1px), + #000 calc(25% + 1px), + transparent calc(25% + 1px), + transparent calc(75% - 1px), + #000 calc(75% - 1px), + #000 calc(75% + 1px), + transparent calc(75% + 1px) + ); + background-color: currentColor; + transition: .8s ease all; + transform: rotate(@p(0deg, 90deg, 180deg, -90deg)); + } + } + @nth(1, 3, 5, 13, 15, 17, 25, 27, 29, 8, 10, 12, 20, 22, 24, 32, 34, 36) { + ::before { + content: ""; + position: absolute; + top: 0; left: 0; + @size: 100%; + background: + radial-gradient(circle at 50% 100%, currentColor 22.2%, transparent 22.2%, transparent calc(22.2% + 2px), currentColor calc(22.2% + 2px), currentColor 44.4%, transparent 44.4%); + transform: rotate(@p(0deg, 90deg, 180deg, -90deg)); + transition: .8s ease all; + } + } + @nth(2, 4, 6, 14, 16, 18, 26, 28, 30, 7, 9, 11, 19, 21, 23, 31, 33, 35) { + ::after { + content: ""; + position: absolute; + top: calc(25% - 2px); + left: calc(25% - 2px); + @size: 50%; + border: 2px solid #000; + } + ::before { + content: ""; + position: absolute; + top: 0; + left: 0; + @size: 100%; + background: linear-gradient(45deg, transparent 50%, currentColor 50%); + transition: .8s ease all; + transform: rotate(@p(0deg, 90deg, 180deg, -90deg)); + } + } + + + + + + + \ No newline at end of file diff --git a/bricks-darkcss-doodle/dist/script.js b/bricks-darkcss-doodle/dist/script.js new file mode 100644 index 0000000..a3b6c7f --- /dev/null +++ b/bricks-darkcss-doodle/dist/script.js @@ -0,0 +1,6 @@ +document.addEventListener('click', function (e) { + e.target.update && e.target.update(); +}); +document.addEventListener('touchstart', function (e) { + e.target.update && e.target.update(); +}); \ No newline at end of file diff --git a/bricks-darkcss-doodle/dist/style.css b/bricks-darkcss-doodle/dist/style.css new file mode 100644 index 0000000..85fbe1b --- /dev/null +++ b/bricks-darkcss-doodle/dist/style.css @@ -0,0 +1,16 @@ +html, body { + width: 100vw; + height: 100vh; + overflow: hidden; + background: #000; +} + +body { + display: flex; + align-items: center; + justify-content: center; +} + +* { + box-sizing: border-box; +} diff --git a/bricks-darkcss-doodle/license.txt b/bricks-darkcss-doodle/license.txt new file mode 100644 index 0000000..133a913 --- /dev/null +++ b/bricks-darkcss-doodle/license.txt @@ -0,0 +1,13 @@ + + + + diff --git a/bricks-darkcss-doodle/src/index.html b/bricks-darkcss-doodle/src/index.html new file mode 100644 index 0000000..ab4ad0a --- /dev/null +++ b/bricks-darkcss-doodle/src/index.html @@ -0,0 +1,74 @@ + + :doodle { + @grid: 6x6 / 100vmin; + } + color: hsla( + calc(360 - @i() * 4), 70%, 68%, @r(.99) + ); + @nth(1, 3, 5, 13, 15, 17, 25, 27, 29) { + z-index: 100; + + ::after{ + content: ""; + opacity: .5; + position: absolute; + z-index: 100; + top: 50%; + left: 50%; + @size: 100%; + background-image: linear-gradient( + transparent calc(25% - 1px), + #000 calc(25% - 1px), + #000 calc(25% + 1px), + transparent calc(25% + 1px), + transparent calc(75% - 1px), + #000 calc(75% - 1px), + #000 calc(75% + 1px), + transparent calc(75% + 1px)),linear-gradient(90deg, + transparent calc(25% - 1px), + #000 calc(25% - 1px), + #000 calc(25% + 1px), + transparent calc(25% + 1px), + transparent calc(75% - 1px), + #000 calc(75% - 1px), + #000 calc(75% + 1px), + transparent calc(75% + 1px) + ); + background-color: currentColor; + transition: .8s ease all; + transform: rotate(@p(0deg, 90deg, 180deg, -90deg)); + } + } + @nth(1, 3, 5, 13, 15, 17, 25, 27, 29, 8, 10, 12, 20, 22, 24, 32, 34, 36) { + ::before { + content: ""; + position: absolute; + top: 0; left: 0; + @size: 100%; + background: + radial-gradient(circle at 50% 100%, currentColor 22.2%, transparent 22.2%, transparent calc(22.2% + 2px), currentColor calc(22.2% + 2px), currentColor 44.4%, transparent 44.4%); + transform: rotate(@p(0deg, 90deg, 180deg, -90deg)); + transition: .8s ease all; + } + } + @nth(2, 4, 6, 14, 16, 18, 26, 28, 30, 7, 9, 11, 19, 21, 23, 31, 33, 35) { + ::after { + content: ""; + position: absolute; + top: calc(25% - 2px); + left: calc(25% - 2px); + @size: 50%; + border: 2px solid #000; + } + ::before { + content: ""; + position: absolute; + top: 0; + left: 0; + @size: 100%; + background: linear-gradient(45deg, transparent 50%, currentColor 50%); + transition: .8s ease all; + transform: rotate(@p(0deg, 90deg, 180deg, -90deg)); + } + } + \ No newline at end of file diff --git a/bricks-darkcss-doodle/src/script.babel b/bricks-darkcss-doodle/src/script.babel new file mode 100644 index 0000000..9268b1d --- /dev/null +++ b/bricks-darkcss-doodle/src/script.babel @@ -0,0 +1,6 @@ +document.addEventListener('click', function(e) { + e.target.update && e.target.update(); +}); +document.addEventListener('touchstart', function(e) { + e.target.update && e.target.update(); +}); \ No newline at end of file diff --git a/bricks-darkcss-doodle/src/style.scss b/bricks-darkcss-doodle/src/style.scss new file mode 100644 index 0000000..ab6aa0a --- /dev/null +++ b/bricks-darkcss-doodle/src/style.scss @@ -0,0 +1,16 @@ +html, body { + width: 100vw; + height: 100vh; + overflow: hidden; + background: #000; +} + +body { + display: flex; + align-items: center; + justify-content: center; +} + +* { + box-sizing: border-box; +} \ No newline at end of file diff --git a/brutalism/README.markdown b/brutalism/README.markdown new file mode 100644 index 0000000..8c6d422 --- /dev/null +++ b/brutalism/README.markdown @@ -0,0 +1,5 @@ +# Brutalism + +A Pen created on CodePen.io. Original URL: [https://codepen.io/CrystalS/pen/VwjYxoO](https://codepen.io/CrystalS/pen/VwjYxoO). + +https://dribbble.com/shots/6774839-Brutalism diff --git a/brutalism/dist/index.html b/brutalism/dist/index.html new file mode 100644 index 0000000..21af27e --- /dev/null +++ b/brutalism/dist/index.html @@ -0,0 +1,55 @@ + + + + + CodePen - Brutalism + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + diff --git a/brutalism/dist/style.css b/brutalism/dist/style.css new file mode 100644 index 0000000..c1d52bd --- /dev/null +++ b/brutalism/dist/style.css @@ -0,0 +1,118 @@ +body { + background: #ffcabb; + background: linear-gradient(to top, #ffcabb 50%, #f7c0aa 100%); + overflow: hidden; +} + +.block { + background: #73695D; + background: linear-gradient(180deg, #444035 0%, #444035 22%, #73695D 22%, #73695D 35%, #444035 45%, #444035 60%, #73695D 60%, #73695D 73%, #444035 88%, #444035 98%, #73695D 98%); + z-index: 0; + position: absolute; + left: 150px; + width: 100px; + min-height: 939px; + height: 100vh; +} + +.stairs { + display: flex; + flex-direction: column; + min-height: 100vh; + width: 800px; +} +.stairs--layer { + position: absolute; + top: 50px; + width: 800px; + z-index: 0; +} + +.level { + position: relative; + display: flex; + height: 360px; +} + +.level > * { + position: relative; + height: 100px; +} + +.level > *:before { + content: ""; + display: block; + position: absolute; + top: -97px; + width: 100%; + height: 95px; + background-image: linear-gradient(180deg, transparent 0%, transparent 30%, #404040 30%, #404040 33%, transparent 33%, transparent 63%, #404040 63%, #404040 66%, transparent 66%, transparent 100%); + box-shadow: inset -3px 0px 0 0px #404040; + background-size: 10% 100%; + border-top: 3px solid #404040; +} +.stairs--layer .level > *:before { + content: none; +} + +.level > *:after { + content: ""; + display: block; + position: absolute; + top: 100px; + background-color: #23261C; + width: 100%; + height: 75px; +} + +.upper { + background: #73695D; + width: 40%; +} + +.upper:after { + height: 55px; +} +.stairs--layer .upper:after { + height: 75px; +} + +.middle { + background: #A69886; + transform: skew(0deg, 33deg); + transform-origin: left; + width: 35%; +} +.stairs--layer .middle { + background: #73695D; + transform: skew(0deg, -33deg); +} +.stairs--layer .middle:before { + content: ""; + display: block; + position: absolute; + top: -97px; + width: 100%; + height: 95px; + background-image: linear-gradient(180deg, transparent 0%, transparent 30%, #404040 30%, #404040 33%, transparent 33%, transparent 63%, #404040 63%, #404040 66%, transparent 66%, transparent 100%); + box-shadow: inset -3px 0px 0 0px #404040; + background-size: 10% 100%; + border-top: 3px solid #404040; +} + +.lower { + background: #73695D; + margin-top: 182px; + width: 25%; +} +.stairs--layer .lower { + background: transparent; + margin-top: -182px; +} +.lower:after { + transform: skewX(-20deg); + left: -14px; +} +.stairs--layer .lower:after { + left: -31px; +} \ No newline at end of file diff --git a/brutalism/license.txt b/brutalism/license.txt new file mode 100644 index 0000000..b1537bf --- /dev/null +++ b/brutalism/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Crystal S (https://codepen.io/CrystalS/pen/VwjYxoO) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/brutalism/src/index.html b/brutalism/src/index.html new file mode 100644 index 0000000..91ad48d --- /dev/null +++ b/brutalism/src/index.html @@ -0,0 +1,41 @@ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ diff --git a/brutalism/src/style.scss b/brutalism/src/style.scss new file mode 100644 index 0000000..57bd502 --- /dev/null +++ b/brutalism/src/style.scss @@ -0,0 +1,140 @@ +// Based on this Dribbble shot by Roy Smith +// https://dribbble.com/shots/6774839-Brutalism + +$grey: #D9D9D9; +$grey-dark: #404040; +$shade: #23261C; +$brown: #A69886; +$brown-dark: #73695D; +$brown-shade: #444035; + +body { + background: #ffcabb; + background:linear-gradient(to top, #ffcabb 50%, #f7c0aa 100%); + overflow: hidden; +} + +.block { + background: $brown-dark; + background: linear-gradient(180deg, $brown-shade 0%, $brown-shade 22%, $brown-dark 22%, $brown-dark 35%, $brown-shade 45%, $brown-shade 60%, $brown-dark 60%, $brown-dark 73%, $brown-shade 88%, $brown-shade 98%, $brown-dark 98%); + z-index: 0; + position: absolute; + left: 150px; + width: 100px; + min-height: 939px; + height: 100vh; +} + +.stairs { + display: flex; + flex-direction: column; + min-height: 100vh; + width: 800px; + + &--layer { + position: absolute; + top: 50px; + width: 800px; + z-index: 0; + } +} + +.level { + position: relative; + display: flex; + height: 360px; +} + +.level > * { + position: relative; + height: 100px; +} + +.level > *:before { + content: ""; + display: block; + position: absolute; + top: -97px; + width: 100%; + height: 95px; + background-image: linear-gradient(180deg, transparent 0%, transparent 30%, $grey-dark 30%, $grey-dark 33%, transparent 33%, transparent 63%, $grey-dark 63%, $grey-dark 66%, transparent 66%, transparent 100%); + box-shadow: inset -3px 0px 0 0px $grey-dark; + background-size: 10% 100%; + border-top: 3px solid $grey-dark; + + .stairs--layer & { + content: none; + } +} + +.level > *:after { + content: ""; + display: block; + position: absolute; + top: 100px; + background-color: $shade; + width: 100%; + height: 75px; +} + + +.upper { + background: $brown-dark; + width: 40%; +} + +.upper:after { + height: 55px; + + .stairs--layer & { + height: 75px; + } +} + +.middle { + background: $brown; + transform: skew(0deg, 33deg); + transform-origin: left; + width: 35%; + + .stairs--layer & { + background: $brown-dark; + transform: skew(0deg, -33deg); + } + + &:before { + + .stairs--layer & { + content: ""; + display: block; + position: absolute; + top: -97px; + width: 100%; + height: 95px; + background-image: linear-gradient(180deg, transparent 0%, transparent 30%, $grey-dark 30%, $grey-dark 33%, transparent 33%, transparent 63%, $grey-dark 63%, $grey-dark 66%, transparent 66%, transparent 100%); + box-shadow: inset -3px 0px 0 0px $grey-dark; + background-size: 10% 100%; + border-top: 3px solid $grey-dark; + } + } +} + +.lower { + background: $brown-dark; + margin-top: 182px; + width: 25%; + + .stairs--layer & { + background: transparent; + margin-top: -182px; + } + + &:after { + transform: skewX(-20deg); + left: -14px; + + .stairs--layer & { + left: -31px; + } + } +} \ No newline at end of file diff --git a/bubble-sort-colors/README.markdown b/bubble-sort-colors/README.markdown new file mode 100644 index 0000000..b4f74e3 --- /dev/null +++ b/bubble-sort-colors/README.markdown @@ -0,0 +1,4 @@ +# Bubble Sort Colors + _A Pen created at CodePen.io. Original URL: [https://codepen.io/borntofrappe/pen/WWLXGN](https://codepen.io/borntofrappe/pen/WWLXGN). + + Using CSS grid and a few lines of JavaScript, visualize a bubble sort algorithm with a bit of a rainbow. \ No newline at end of file diff --git a/bubble-sort-colors/dist/index.html b/bubble-sort-colors/dist/index.html new file mode 100644 index 0000000..5112838 --- /dev/null +++ b/bubble-sort-colors/dist/index.html @@ -0,0 +1,20 @@ + + + + + Bubble Sort Colors + + + + + + + + + + + \ No newline at end of file diff --git a/bubble-sort-colors/dist/script.js b/bubble-sort-colors/dist/script.js new file mode 100644 index 0000000..d99940b --- /dev/null +++ b/bubble-sort-colors/dist/script.js @@ -0,0 +1,96 @@ +/* +variables tweaking the design + +- numberOfColumns: the number of columns to be included in the viewport + ! the value is capped to 360 to have at most one color for each hue in the [0-360] color wheel +- duration: the number of seconds it takes to complete the bubble sort + ! this does not account for the animation of the button, but the animation of the columns only + +- lightness and saturation: default values for the hsl color +*/ +const numberOfColumns = 359; +const duration = 7.5; +const saturation = 70; +const lightness = 70; + +// array describing the hues of the different columns, to avoid doubles +const hues = []; +// function returning a random hue, which is not already in the hues array +const uniqueHue = () => { + const hue = Math.floor(Math.random() * 360); + // if the hue is already present re-run the function + if (hues.includes(hue)) { + return uniqueHue(); + } + // else add the hue to the array and return its value + hues.push(hue); + return hue; +}; + +// select the node in which to add the columns +const body = document.querySelector('body'); + +// in the body include as many div elements as specified by the columns variable +for (let i = 0; i < Math.min(numberOfColumns, 359); i += 1) { + const columns = document.createElement('div'); + // with a unique hue + const hue = uniqueHue(); + columns.style.background = `hsl(${hue}, ${saturation}%, ${lightness}%)`; + // with a transition incrementally delayed for each successive column + // ! ultimately this has the effect of swapping the columns one after the other + columns.style.transition = `all 0.2s ${duration / numberOfColumns * i}s ease-out`; + // add a data attribute to rapidly order the columns according to the hue value + columns.setAttribute('data-hue', hue); + body.appendChild(columns); +} + +// target the button +const button = document.querySelector('button'); + +// function called to sort the items of an array according to data-hue attribute +function bubbleSort(arr) { + // bubble sort algorithm + // instead of swapping the items based on their values, swap them on the basis of the data-hue attribute + for (let n = arr.length; n >= 0; n -= 1) { + for (let i = 0; i < n - 1; i += 1) { + const currentPosition = i; + const nextPosition = i + 1; + + const current = arr[currentPosition]; + const next = arr[nextPosition]; + + const currentHue = Number.parseInt(current.getAttribute('data-hue'), 10); + const nextHue = Number.parseInt(next.getAttribute('data-hue'), 10); + + if (currentHue > nextHue) { + [arr[currentPosition], arr[nextPosition]] = [arr[nextPosition], arr[currentPosition]]; + } + } + } + return arr; +} + +// function called when the button is pressed +function handleClick() { + // add the class prompting the transition + button.classList.add('clicked'); + // once the button's animation is complete + button.addEventListener('animationend', () => { + // target all the columns + const columns = body.querySelectorAll('div'); + // sort an copy of the node list, converting it first to an array + const sortedColumns = bubbleSort([...columns]); + + // loop through the sortedColumns array + for (let i = 0; i < sortedColumns.length; i += 1) { + // find the column in the unsorted data structure with the data-hue attribute matching the sorted value + const sortedColumn = sortedColumns[i]; + const matchingColumn = [...columns].find(column => column.getAttribute('data-hue') === sortedColumn.getAttribute('data-hue')); + // apply a property of order beginning with the smallest values, pushing the smaller hues to the beginning of the grid + matchingColumn.style.order = i - sortedColumns.length; + } + }); +} + +// on click call the function prompting the sorting and the application of the order property according to the hue +button.addEventListener('click', handleClick); \ No newline at end of file diff --git a/bubble-sort-colors/dist/style.css b/bubble-sort-colors/dist/style.css new file mode 100644 index 0000000..def0012 --- /dev/null +++ b/bubble-sort-colors/dist/style.css @@ -0,0 +1,67 @@ +@import url("https://fonts.googleapis.com/css?family=Luckiest+Guy"); + +* { + box-sizing: border-box; + padding: 0; + margin: 0; +} +/* specify the width and height of the body to encompass the viewport */ +body { + width: 100vw; + height: 100vh; + /* include a grid whose items are automatically added as column and occupy a fraction of the width */ + display: grid; + grid-auto-columns: 1fr; + grid-auto-flow: column; +} + +/* absolute position the button in the center of teh viewport */ +button { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + padding: 0.6rem 1.25rem; + background: hsl(0, 0%, 100%); + border: none; + border-radius: 10px; + box-shadow: 0 2px 5px hsla(0, 0%, 0%, 0.3); + color: #1c2d4a; + text-transform: uppercase; + font-family: "Luckiest Guy", cursive; + font-size: 2rem; + letter-spacing: 0.3rem; + /* transition for the transform and box-shadow properties */ + transition: all 0.3s ease-out; +} +/* on hover slightly elevate the button */ +button:hover { + transform: translate(-50%, calc(-50% - 2px)); + box-shadow: 0 2px 7px hsla(0, 0%, 0%, 0.4); +} +/* when a class of .clicked is added (through the script) animate the button out of sight */ +button.clicked { + animation: clicked 0.8s cubic-bezier(0.13, 1.03, 0.72, 1.32) forwards; +} + +/* animation to have the button pushed downward and then disappear as it returns to its original location */ +@keyframes clicked { + 10%, + 35% { + transform: translate(-50%, calc(-50% + 8px)) scaleY(0.95); + box-shadow: 0 1px 5px hsla(0, 0%, 0%, 0.2); + opacity: 1; + visibility: visible; + } + 80%, + 100% { + opacity: 0; + visibility: hidden; + } +} + + +button span { + display: inline-block; + transform: rotateY(180deg); +} \ No newline at end of file diff --git a/bubble-sort-colors/license.txt b/bubble-sort-colors/license.txt new file mode 100644 index 0000000..ce0286d --- /dev/null +++ b/bubble-sort-colors/license.txt @@ -0,0 +1,13 @@ + + + + diff --git a/bubble-sort-colors/src/index.html b/bubble-sort-colors/src/index.html new file mode 100644 index 0000000..5d93aed --- /dev/null +++ b/bubble-sort-colors/src/index.html @@ -0,0 +1,6 @@ + + \ No newline at end of file diff --git a/bubble-sort-colors/src/script.js b/bubble-sort-colors/src/script.js new file mode 100644 index 0000000..7a020ae --- /dev/null +++ b/bubble-sort-colors/src/script.js @@ -0,0 +1,96 @@ +/* +variables tweaking the design + +- numberOfColumns: the number of columns to be included in the viewport + ! the value is capped to 360 to have at most one color for each hue in the [0-360] color wheel +- duration: the number of seconds it takes to complete the bubble sort + ! this does not account for the animation of the button, but the animation of the columns only + +- lightness and saturation: default values for the hsl color +*/ +const numberOfColumns = 359; +const duration = 7.5; +const saturation = 70; +const lightness = 70; + +// array describing the hues of the different columns, to avoid doubles +const hues = []; +// function returning a random hue, which is not already in the hues array +const uniqueHue = () => { + const hue = Math.floor(Math.random() * 360); + // if the hue is already present re-run the function + if (hues.includes(hue)) { + return uniqueHue(); + } + // else add the hue to the array and return its value + hues.push(hue); + return hue; +}; + +// select the node in which to add the columns +const body = document.querySelector('body'); + +// in the body include as many div elements as specified by the columns variable +for (let i = 0; i < Math.min(numberOfColumns, 359); i += 1) { + const columns = document.createElement('div'); + // with a unique hue + const hue = uniqueHue(); + columns.style.background = `hsl(${hue}, ${saturation}%, ${lightness}%)`; + // with a transition incrementally delayed for each successive column + // ! ultimately this has the effect of swapping the columns one after the other + columns.style.transition = `all 0.2s ${duration / numberOfColumns * i}s ease-out`; + // add a data attribute to rapidly order the columns according to the hue value + columns.setAttribute('data-hue', hue); + body.appendChild(columns); +} + +// target the button +const button = document.querySelector('button'); + +// function called to sort the items of an array according to data-hue attribute +function bubbleSort(arr) { + // bubble sort algorithm + // instead of swapping the items based on their values, swap them on the basis of the data-hue attribute + for (let n = arr.length; n >= 0; n -= 1) { + for (let i = 0; i < n - 1; i += 1) { + const currentPosition = i; + const nextPosition = i + 1; + + const current = arr[currentPosition]; + const next = arr[nextPosition]; + + const currentHue = Number.parseInt(current.getAttribute('data-hue'), 10); + const nextHue = Number.parseInt(next.getAttribute('data-hue'), 10); + + if (currentHue > nextHue) { + [arr[currentPosition], arr[nextPosition]] = [arr[nextPosition], arr[currentPosition]]; + } + } + } + return arr; +} + +// function called when the button is pressed +function handleClick() { + // add the class prompting the transition + button.classList.add('clicked'); + // once the button's animation is complete + button.addEventListener('animationend', () => { + // target all the columns + const columns = body.querySelectorAll('div'); + // sort an copy of the node list, converting it first to an array + const sortedColumns = bubbleSort([...columns]); + + // loop through the sortedColumns array + for (let i = 0; i < sortedColumns.length; i += 1) { + // find the column in the unsorted data structure with the data-hue attribute matching the sorted value + const sortedColumn = sortedColumns[i]; + const matchingColumn = [...columns].find(column => column.getAttribute('data-hue') === sortedColumn.getAttribute('data-hue')); + // apply a property of order beginning with the smallest values, pushing the smaller hues to the beginning of the grid + matchingColumn.style.order = i - sortedColumns.length; + } + }); +} + +// on click call the function prompting the sorting and the application of the order property according to the hue +button.addEventListener('click', handleClick); diff --git a/bubble-sort-colors/src/style.css b/bubble-sort-colors/src/style.css new file mode 100644 index 0000000..def0012 --- /dev/null +++ b/bubble-sort-colors/src/style.css @@ -0,0 +1,67 @@ +@import url("https://fonts.googleapis.com/css?family=Luckiest+Guy"); + +* { + box-sizing: border-box; + padding: 0; + margin: 0; +} +/* specify the width and height of the body to encompass the viewport */ +body { + width: 100vw; + height: 100vh; + /* include a grid whose items are automatically added as column and occupy a fraction of the width */ + display: grid; + grid-auto-columns: 1fr; + grid-auto-flow: column; +} + +/* absolute position the button in the center of teh viewport */ +button { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + padding: 0.6rem 1.25rem; + background: hsl(0, 0%, 100%); + border: none; + border-radius: 10px; + box-shadow: 0 2px 5px hsla(0, 0%, 0%, 0.3); + color: #1c2d4a; + text-transform: uppercase; + font-family: "Luckiest Guy", cursive; + font-size: 2rem; + letter-spacing: 0.3rem; + /* transition for the transform and box-shadow properties */ + transition: all 0.3s ease-out; +} +/* on hover slightly elevate the button */ +button:hover { + transform: translate(-50%, calc(-50% - 2px)); + box-shadow: 0 2px 7px hsla(0, 0%, 0%, 0.4); +} +/* when a class of .clicked is added (through the script) animate the button out of sight */ +button.clicked { + animation: clicked 0.8s cubic-bezier(0.13, 1.03, 0.72, 1.32) forwards; +} + +/* animation to have the button pushed downward and then disappear as it returns to its original location */ +@keyframes clicked { + 10%, + 35% { + transform: translate(-50%, calc(-50% + 8px)) scaleY(0.95); + box-shadow: 0 1px 5px hsla(0, 0%, 0%, 0.2); + opacity: 1; + visibility: visible; + } + 80%, + 100% { + opacity: 0; + visibility: hidden; + } +} + + +button span { + display: inline-block; + transform: rotateY(180deg); +} \ No newline at end of file diff --git a/bubblegum-on-hover/README.markdown b/bubblegum-on-hover/README.markdown new file mode 100644 index 0000000..2831e87 --- /dev/null +++ b/bubblegum-on-hover/README.markdown @@ -0,0 +1,5 @@ +# Bubblegum on hover + +A Pen created on CodePen.io. Original URL: [https://codepen.io/natszafraniec/pen/oNGmoOa](https://codepen.io/natszafraniec/pen/oNGmoOa). + + diff --git a/bubblegum-on-hover/dist/index.html b/bubblegum-on-hover/dist/index.html new file mode 100644 index 0000000..b5f07c9 --- /dev/null +++ b/bubblegum-on-hover/dist/index.html @@ -0,0 +1,26 @@ + + + + + CodePen - Bubblegum on hover + + + + + + +
+ + + + + + + + +
+ + + + + diff --git a/bubblegum-on-hover/dist/script.js b/bubblegum-on-hover/dist/script.js new file mode 100644 index 0000000..4c9510e --- /dev/null +++ b/bubblegum-on-hover/dist/script.js @@ -0,0 +1,159 @@ +class Animation { + cols = 16; + rows = 9; + + circleSize = 30; + scaleMin = 0.15; + scaleMax = 2.5; + range = 175; + + spacingHorizontal = 60; + spacingVertical = 80; + fill = getComputedStyle(document.documentElement).getPropertyValue('--circles'); + + svgMargin = 40; + svgHeight = 0; + svgWidth = 0; + + circles = []; + screen = { + width: window.innerWidth, + height: window.innerHeight + }; + mouse = { + x: window.innerWidth / 2, + y: window.innerHeight / 2 + }; + mouseStored = Object.assign({}, this.mouse); + + constructor(selector) { + this.svg = document.querySelector(selector); + this.g = this.svg.querySelector("g"); + + this.svgWidth = this.cols * this.circleSize + 2 * this.svgMargin + (this.cols - 1) * this.spacingHorizontal; + this.svgHeight = this.rows + 2 * this.svgMargin + (this.rows - 1) * this.spacingVertical; + + this.svg.setAttribute("viewBox", `0 0 ${this.svgWidth} ${this.svgHeight}`); + + this.addEventListeners(); + // Draw all the circles + this.draw(); + // And animate them if the user is fine with it + window.matchMedia('(prefers-reduced-motion: no-preference)').matches ? this.animate() : null; + } + + addEventListeners() { + let self = this; + // Don't redraw everything, only recalculate the centers of all arrows + window.addEventListener("resize", function() { + self.screen.width = window.innerWidth; + self.screen.height = window.innerHeight; + self.setCircleCenters(); + }); + } + + draw() { + for(var i = 0; i < this.rows; i++) { + const offset = i % 2; + for(var j = 0; j < this.cols + 2 * offset; j++) { + // We're drawing the initial lines horizontally + let c = new Circle( + this.svgMargin + j*this.circleSize + j*this.spacingHorizontal - (offset * (this.spacingHorizontal + this.circleSize)/2), + this.svgMargin + i*this.spacingVertical, + this.circleSize, + this.fill + ); + + // Set a transform origin and add the HTML element to the SVG + const cElement = c.getElement(); + gsap.set(cElement, {transformOrigin: "50% 50%"}); + this.g.appendChild(cElement); + + this.circles.push(c); + } + } + + this.setCircleCenters(); + } + + clamp(num, min, max) { + return Math.min(Math.max(num, min), max); + } + + setMouseCoords(event) { + this.mouse.x = event.clientX; + this.mouse.y = event.clientY; + } + + setCircleCenters() { + this.circles.forEach(circle => { + // Get the center of the line + // Instead of mapping svg coords to the screen position, get the position on the actual screen using boundingRect + const boundingRect = circle.getElement().getBoundingClientRect(); + circle.center = { + x: boundingRect.x + boundingRect.width / 2, + y: boundingRect.y + boundingRect.height / 2 + }; + }) + } + + animate() { + // Listen for the mouse movements + window.addEventListener("mousemove", this.setMouseCoords.bind(this)); + // And use the ticker to update the rotation accordingly + gsap.ticker.add(this.setCircleScale.bind(this)); + } + + setCircleScale() { + // Don't do anything if the cursor's position is the same as in the previous tick + if (this.mouseStored.x === this.mouse.x && this.mouseStored.y === this.mouse.y) return; + + this.circles.forEach(circle => { + // d = โˆš[(x2 โˆ’ x1)2 + (y2 โˆ’ y1)2] + const distance = Math.sqrt((Math.pow((circle.center.x - this.mouse.x), 2) + Math.pow((circle.center.y - this.mouse.y), 2))); + const scale = this.range / (distance + this.circleSize); + + gsap.to( + circle.getElement(), + { + scale: this.clamp(scale, this.scaleMin, this.scaleMax) + } + ); + }); + + // Store the mouse position for the next tick + this.mouseStored.x = this.mouse.x; + this.mouseStored.y = this.mouse.y; + } +} + +class Circle { + cx = 0; + cy = 0; + r = 0; + fill = "white"; + element = null; + + constructor(cx, cy, r, fill) { + this.cx = cx; + this.cy = cy; + this.r = r; + this.fill = fill; + this.element = document.createElementNS("http://www.w3.org/2000/svg", 'circle'); + + this.setElement(); + } + + getElement() { + return this.element; + } + + setElement(cx, cy, r, fill) { + this.element.setAttribute("cx", cx ? cx : this.cx); + this.element.setAttribute("cy", cy ? cy : this.cy); + this.element.setAttribute("r", r ? r : this.r); + this.element.setAttribute("fill", fill ? fill : this.fill); + } +} + +const animation = new Animation("#animation"); \ No newline at end of file diff --git a/bubblegum-on-hover/dist/style.css b/bubblegum-on-hover/dist/style.css new file mode 100644 index 0000000..6b74dc0 --- /dev/null +++ b/bubblegum-on-hover/dist/style.css @@ -0,0 +1,25 @@ +:root { + --circles: #ff9ff3; + --background: #f368e0; +} + +body { + margin: 0; + padding: 0; + overflow: hidden; +} + +.flex { + align-items: center; + display: flex; + justify-content: center; +} + +.scene { + background: var(--background); + height: 100vh; +} +.scene__animation { + height: 100%; + width: 100%; +} \ No newline at end of file diff --git a/bubblegum-on-hover/license.txt b/bubblegum-on-hover/license.txt new file mode 100644 index 0000000..fe506a2 --- /dev/null +++ b/bubblegum-on-hover/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2022 by Natalia ๐ŸคŸ (https://codepen.io/natszafraniec/pen/oNGmoOa) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/bubblegum-on-hover/src/index.html b/bubblegum-on-hover/src/index.html new file mode 100644 index 0000000..0168fba --- /dev/null +++ b/bubblegum-on-hover/src/index.html @@ -0,0 +1,10 @@ +
+ + + + + + + + +
\ No newline at end of file diff --git a/bubblegum-on-hover/src/script.js b/bubblegum-on-hover/src/script.js new file mode 100644 index 0000000..4c9510e --- /dev/null +++ b/bubblegum-on-hover/src/script.js @@ -0,0 +1,159 @@ +class Animation { + cols = 16; + rows = 9; + + circleSize = 30; + scaleMin = 0.15; + scaleMax = 2.5; + range = 175; + + spacingHorizontal = 60; + spacingVertical = 80; + fill = getComputedStyle(document.documentElement).getPropertyValue('--circles'); + + svgMargin = 40; + svgHeight = 0; + svgWidth = 0; + + circles = []; + screen = { + width: window.innerWidth, + height: window.innerHeight + }; + mouse = { + x: window.innerWidth / 2, + y: window.innerHeight / 2 + }; + mouseStored = Object.assign({}, this.mouse); + + constructor(selector) { + this.svg = document.querySelector(selector); + this.g = this.svg.querySelector("g"); + + this.svgWidth = this.cols * this.circleSize + 2 * this.svgMargin + (this.cols - 1) * this.spacingHorizontal; + this.svgHeight = this.rows + 2 * this.svgMargin + (this.rows - 1) * this.spacingVertical; + + this.svg.setAttribute("viewBox", `0 0 ${this.svgWidth} ${this.svgHeight}`); + + this.addEventListeners(); + // Draw all the circles + this.draw(); + // And animate them if the user is fine with it + window.matchMedia('(prefers-reduced-motion: no-preference)').matches ? this.animate() : null; + } + + addEventListeners() { + let self = this; + // Don't redraw everything, only recalculate the centers of all arrows + window.addEventListener("resize", function() { + self.screen.width = window.innerWidth; + self.screen.height = window.innerHeight; + self.setCircleCenters(); + }); + } + + draw() { + for(var i = 0; i < this.rows; i++) { + const offset = i % 2; + for(var j = 0; j < this.cols + 2 * offset; j++) { + // We're drawing the initial lines horizontally + let c = new Circle( + this.svgMargin + j*this.circleSize + j*this.spacingHorizontal - (offset * (this.spacingHorizontal + this.circleSize)/2), + this.svgMargin + i*this.spacingVertical, + this.circleSize, + this.fill + ); + + // Set a transform origin and add the HTML element to the SVG + const cElement = c.getElement(); + gsap.set(cElement, {transformOrigin: "50% 50%"}); + this.g.appendChild(cElement); + + this.circles.push(c); + } + } + + this.setCircleCenters(); + } + + clamp(num, min, max) { + return Math.min(Math.max(num, min), max); + } + + setMouseCoords(event) { + this.mouse.x = event.clientX; + this.mouse.y = event.clientY; + } + + setCircleCenters() { + this.circles.forEach(circle => { + // Get the center of the line + // Instead of mapping svg coords to the screen position, get the position on the actual screen using boundingRect + const boundingRect = circle.getElement().getBoundingClientRect(); + circle.center = { + x: boundingRect.x + boundingRect.width / 2, + y: boundingRect.y + boundingRect.height / 2 + }; + }) + } + + animate() { + // Listen for the mouse movements + window.addEventListener("mousemove", this.setMouseCoords.bind(this)); + // And use the ticker to update the rotation accordingly + gsap.ticker.add(this.setCircleScale.bind(this)); + } + + setCircleScale() { + // Don't do anything if the cursor's position is the same as in the previous tick + if (this.mouseStored.x === this.mouse.x && this.mouseStored.y === this.mouse.y) return; + + this.circles.forEach(circle => { + // d = โˆš[(x2 โˆ’ x1)2 + (y2 โˆ’ y1)2] + const distance = Math.sqrt((Math.pow((circle.center.x - this.mouse.x), 2) + Math.pow((circle.center.y - this.mouse.y), 2))); + const scale = this.range / (distance + this.circleSize); + + gsap.to( + circle.getElement(), + { + scale: this.clamp(scale, this.scaleMin, this.scaleMax) + } + ); + }); + + // Store the mouse position for the next tick + this.mouseStored.x = this.mouse.x; + this.mouseStored.y = this.mouse.y; + } +} + +class Circle { + cx = 0; + cy = 0; + r = 0; + fill = "white"; + element = null; + + constructor(cx, cy, r, fill) { + this.cx = cx; + this.cy = cy; + this.r = r; + this.fill = fill; + this.element = document.createElementNS("http://www.w3.org/2000/svg", 'circle'); + + this.setElement(); + } + + getElement() { + return this.element; + } + + setElement(cx, cy, r, fill) { + this.element.setAttribute("cx", cx ? cx : this.cx); + this.element.setAttribute("cy", cy ? cy : this.cy); + this.element.setAttribute("r", r ? r : this.r); + this.element.setAttribute("fill", fill ? fill : this.fill); + } +} + +const animation = new Animation("#animation"); \ No newline at end of file diff --git a/bubblegum-on-hover/src/style.scss b/bubblegum-on-hover/src/style.scss new file mode 100644 index 0000000..eabf0a5 --- /dev/null +++ b/bubblegum-on-hover/src/style.scss @@ -0,0 +1,26 @@ +:root { + --circles: #ff9ff3; + --background: #f368e0; +} + +body { + margin: 0; + padding: 0; + overflow: hidden; +} + +.flex { + align-items: center; + display: flex; + justify-content: center; +} + +.scene { + background: var(--background); + height: 100vh; + + &__animation { + height: 100%; + width: 100%; + } +} \ No newline at end of file diff --git a/bug-report-d20/README.markdown b/bug-report-d20/README.markdown new file mode 100644 index 0000000..233180f --- /dev/null +++ b/bug-report-d20/README.markdown @@ -0,0 +1,4 @@ +# Bug Report D20 + _A Pen created at CodePen.io. Original URL: [https://codepen.io/chrisvfritz/pen/BxXyEJ](https://codepen.io/chrisvfritz/pen/BxXyEJ). + + \ No newline at end of file diff --git a/bug-report-d20/dist/index.html b/bug-report-d20/dist/index.html new file mode 100644 index 0000000..a7758d7 --- /dev/null +++ b/bug-report-d20/dist/index.html @@ -0,0 +1,45 @@ + + + + + Bug Report D20 + + + + + + + +
+
+
+
+ + {{ faces[n - 1] }} + +
+
+
+
+ +

(built off 3d d20 die with pure CSS)

+ + + + + \ No newline at end of file diff --git a/bug-report-d20/dist/script.js b/bug-report-d20/dist/script.js new file mode 100644 index 0000000..4b7b93d --- /dev/null +++ b/bug-report-d20/dist/script.js @@ -0,0 +1,42 @@ +new Vue({ + el: '#app', + data: { + currentFaceIndex: 0, + isRolling: false, + faces: [ + 'works on my machine', + 'try updating', + 'but the tests pass', + 'did you rebase?', + 'huh', + 'even on master?', + 'are you sure?', + 'even in prod?', + 'oh, windows?', + 'oh, high sierra?', + 'what error?', + '๐Ÿค”', + 'every time?', + 'i\'m on vacation', + 'force refresh', + 'no, it should not', + 'it\'s a feature', + 'don\'t do that then', + 'try a fresh clone', + 'it sorta works'] }, + + + computed: { + currentFace() { + return this.faces[this.currentFaceIndex]; + } }, + + methods: { + roll() { + if (this.isRolling) return; + this.currentFaceIndex = Math.floor(Math.random() * this.faces.length); + this.isRolling = true; + setTimeout(() => { + this.isRolling = false; + }, 3000); + } } }); \ No newline at end of file diff --git a/bug-report-d20/dist/style.css b/bug-report-d20/dist/style.css new file mode 100644 index 0000000..5b05cd8 --- /dev/null +++ b/bug-report-d20/dist/style.css @@ -0,0 +1,273 @@ +@-webkit-keyframes roll { + 10% { + -webkit-transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); + transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); + } + 30% { + -webkit-transform: rotateX(120deg) rotateY(240deg) rotateZ(0deg) translateX(40px) translateY(40px); + transform: rotateX(120deg) rotateY(240deg) rotateZ(0deg) translateX(40px) translateY(40px); + } + 50% { + -webkit-transform: rotateX(240deg) rotateY(480deg) rotateZ(0deg) translateX(-40px) translateY(-40px); + transform: rotateX(240deg) rotateY(480deg) rotateZ(0deg) translateX(-40px) translateY(-40px); + } + 70% { + -webkit-transform: rotateX(360deg) rotateY(720deg) rotateZ(0deg); + transform: rotateX(360deg) rotateY(720deg) rotateZ(0deg); + } + 90% { + -webkit-transform: rotateX(480deg) rotateY(960deg) rotateZ(0deg); + transform: rotateX(480deg) rotateY(960deg) rotateZ(0deg); + } +} +@keyframes roll { + 10% { + -webkit-transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); + transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg); + } + 30% { + -webkit-transform: rotateX(120deg) rotateY(240deg) rotateZ(0deg) translateX(40px) translateY(40px); + transform: rotateX(120deg) rotateY(240deg) rotateZ(0deg) translateX(40px) translateY(40px); + } + 50% { + -webkit-transform: rotateX(240deg) rotateY(480deg) rotateZ(0deg) translateX(-40px) translateY(-40px); + transform: rotateX(240deg) rotateY(480deg) rotateZ(0deg) translateX(-40px) translateY(-40px); + } + 70% { + -webkit-transform: rotateX(360deg) rotateY(720deg) rotateZ(0deg); + transform: rotateX(360deg) rotateY(720deg) rotateZ(0deg); + } + 90% { + -webkit-transform: rotateX(480deg) rotateY(960deg) rotateZ(0deg); + transform: rotateX(480deg) rotateY(960deg) rotateZ(0deg); + } +} +body { + background: #35495e; + padding: 20px; +} + +.content { + margin: auto auto; + position: relative; + width: 400px; + height: 400px; + -webkit-perspective: 1500px; + perspective: 1500px; +} + +.die { + position: absolute; + width: 100%; + height: 100%; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + transition: -webkit-transform 0.5s ease-out; + transition: transform 0.5s ease-out; + transition: transform 0.5s ease-out, -webkit-transform 0.5s ease-out; + cursor: pointer; + -webkit-transform: rotateX(-53deg); + transform: rotateX(-53deg); +} +.die.rolling { + -webkit-animation: roll 3s linear; + animation: roll 3s linear; +} +.die[data-face="1"] { + -webkit-transform: rotateX(-53deg) rotateY(0deg); + transform: rotateX(-53deg) rotateY(0deg); +} +.die[data-face="2"] { + -webkit-transform: rotateX(-53deg) rotateY(72deg); + transform: rotateX(-53deg) rotateY(72deg); +} +.die[data-face="3"] { + -webkit-transform: rotateX(-53deg) rotateY(144deg); + transform: rotateX(-53deg) rotateY(144deg); +} +.die[data-face="4"] { + -webkit-transform: rotateX(-53deg) rotateY(216deg); + transform: rotateX(-53deg) rotateY(216deg); +} +.die[data-face="5"] { + -webkit-transform: rotateX(-53deg) rotateY(288deg); + transform: rotateX(-53deg) rotateY(288deg); +} +.die[data-face="16"] { + -webkit-transform: rotateX(127deg) rotateY(-72deg); + transform: rotateX(127deg) rotateY(-72deg); +} +.die[data-face="17"] { + -webkit-transform: rotateX(127deg) rotateY(-144deg); + transform: rotateX(127deg) rotateY(-144deg); +} +.die[data-face="18"] { + -webkit-transform: rotateX(127deg) rotateY(-216deg); + transform: rotateX(127deg) rotateY(-216deg); +} +.die[data-face="19"] { + -webkit-transform: rotateX(127deg) rotateY(-288deg); + transform: rotateX(127deg) rotateY(-288deg); +} +.die[data-face="20"] { + -webkit-transform: rotateX(127deg) rotateY(-360deg); + transform: rotateX(127deg) rotateY(-360deg); +} +.die[data-face="6"] { + -webkit-transform: rotateX(11deg) rotateZ(180deg) rotateY(0deg); + transform: rotateX(11deg) rotateZ(180deg) rotateY(0deg); +} +.die[data-face="7"] { + -webkit-transform: rotateX(11deg) rotateZ(180deg) rotateY(72deg); + transform: rotateX(11deg) rotateZ(180deg) rotateY(72deg); +} +.die[data-face="8"] { + -webkit-transform: rotateX(11deg) rotateZ(180deg) rotateY(144deg); + transform: rotateX(11deg) rotateZ(180deg) rotateY(144deg); +} +.die[data-face="9"] { + -webkit-transform: rotateX(11deg) rotateZ(180deg) rotateY(216deg); + transform: rotateX(11deg) rotateZ(180deg) rotateY(216deg); +} +.die[data-face="10"] { + -webkit-transform: rotateX(11deg) rotateZ(180deg) rotateY(288deg); + transform: rotateX(11deg) rotateZ(180deg) rotateY(288deg); +} +.die[data-face="11"] { + -webkit-transform: rotateX(11deg) rotateY(-252deg); + transform: rotateX(11deg) rotateY(-252deg); +} +.die[data-face="12"] { + -webkit-transform: rotateX(11deg) rotateY(-324deg); + transform: rotateX(11deg) rotateY(-324deg); +} +.die[data-face="13"] { + -webkit-transform: rotateX(11deg) rotateY(-396deg); + transform: rotateX(11deg) rotateY(-396deg); +} +.die[data-face="14"] { + -webkit-transform: rotateX(11deg) rotateY(-468deg); + transform: rotateX(11deg) rotateY(-468deg); +} +.die[data-face="15"] { + -webkit-transform: rotateX(11deg) rotateY(-540deg); + transform: rotateX(11deg) rotateY(-540deg); +} +.die .face { + position: absolute; + left: 50%; + top: 0; + margin: 0 -100px; + border-left: 100px solid transparent; + border-right: 100px solid transparent; + border-bottom: 172px solid rgba(0, 166, 100, 0.75); + width: 0px; + height: 0px; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + counter-increment: steps 1; +} +.die .face .face-text { + position: absolute; + top: 77.4px; + left: -50px; + color: #fff; + text-shadow: 1px 1px 3px #000; + font-size: 21.5px; + text-align: center; + line-height: 1.3; + width: 100px; + height: 172px; + font-family: monospace; +} +.die .face:nth-child(1) { + -webkit-transform: rotateY(0deg) translateZ(67px) translateY(-25.8px) rotateX(53deg); + transform: rotateY(0deg) translateZ(67px) translateY(-25.8px) rotateX(53deg); +} +.die .face:nth-child(2) { + -webkit-transform: rotateY(-72deg) translateZ(67px) translateY(-25.8px) rotateX(53deg); + transform: rotateY(-72deg) translateZ(67px) translateY(-25.8px) rotateX(53deg); +} +.die .face:nth-child(3) { + -webkit-transform: rotateY(-144deg) translateZ(67px) translateY(-25.8px) rotateX(53deg); + transform: rotateY(-144deg) translateZ(67px) translateY(-25.8px) rotateX(53deg); +} +.die .face:nth-child(4) { + -webkit-transform: rotateY(-216deg) translateZ(67px) translateY(-25.8px) rotateX(53deg); + transform: rotateY(-216deg) translateZ(67px) translateY(-25.8px) rotateX(53deg); +} +.die .face:nth-child(5) { + -webkit-transform: rotateY(-288deg) translateZ(67px) translateY(-25.8px) rotateX(53deg); + transform: rotateY(-288deg) translateZ(67px) translateY(-25.8px) rotateX(53deg); +} +.die .face:nth-child(16) { + -webkit-transform: rotateY(-108deg) translateZ(67px) translateY(242.52px) rotateZ(180deg) rotateX(53deg); + transform: rotateY(-108deg) translateZ(67px) translateY(242.52px) rotateZ(180deg) rotateX(53deg); +} +.die .face:nth-child(17) { + -webkit-transform: rotateY(-36deg) translateZ(67px) translateY(242.52px) rotateZ(180deg) rotateX(53deg); + transform: rotateY(-36deg) translateZ(67px) translateY(242.52px) rotateZ(180deg) rotateX(53deg); +} +.die .face:nth-child(18) { + -webkit-transform: rotateY(36deg) translateZ(67px) translateY(242.52px) rotateZ(180deg) rotateX(53deg); + transform: rotateY(36deg) translateZ(67px) translateY(242.52px) rotateZ(180deg) rotateX(53deg); +} +.die .face:nth-child(19) { + -webkit-transform: rotateY(108deg) translateZ(67px) translateY(242.52px) rotateZ(180deg) rotateX(53deg); + transform: rotateY(108deg) translateZ(67px) translateY(242.52px) rotateZ(180deg) rotateX(53deg); +} +.die .face:nth-child(20) { + -webkit-transform: rotateY(180deg) translateZ(67px) translateY(242.52px) rotateZ(180deg) rotateX(53deg); + transform: rotateY(180deg) translateZ(67px) translateY(242.52px) rotateZ(180deg) rotateX(53deg); +} +.die .face:nth-child(6) { + -webkit-transform: rotateY(360deg) translateZ(150px) translateY(108.36px) rotateZ(180deg) rotateX(-11deg); + transform: rotateY(360deg) translateZ(150px) translateY(108.36px) rotateZ(180deg) rotateX(-11deg); +} +.die .face:nth-child(7) { + -webkit-transform: rotateY(288deg) translateZ(150px) translateY(108.36px) rotateZ(180deg) rotateX(-11deg); + transform: rotateY(288deg) translateZ(150px) translateY(108.36px) rotateZ(180deg) rotateX(-11deg); +} +.die .face:nth-child(8) { + -webkit-transform: rotateY(216deg) translateZ(150px) translateY(108.36px) rotateZ(180deg) rotateX(-11deg); + transform: rotateY(216deg) translateZ(150px) translateY(108.36px) rotateZ(180deg) rotateX(-11deg); +} +.die .face:nth-child(9) { + -webkit-transform: rotateY(144deg) translateZ(150px) translateY(108.36px) rotateZ(180deg) rotateX(-11deg); + transform: rotateY(144deg) translateZ(150px) translateY(108.36px) rotateZ(180deg) rotateX(-11deg); +} +.die .face:nth-child(10) { + -webkit-transform: rotateY(72deg) translateZ(150px) translateY(108.36px) rotateZ(180deg) rotateX(-11deg); + transform: rotateY(72deg) translateZ(150px) translateY(108.36px) rotateZ(180deg) rotateX(-11deg); +} +.die .face:nth-child(11) { + -webkit-transform: rotateY(252deg) translateZ(150px) translateY(108.36px) rotateX(-11deg); + transform: rotateY(252deg) translateZ(150px) translateY(108.36px) rotateX(-11deg); +} +.die .face:nth-child(12) { + -webkit-transform: rotateY(324deg) translateZ(150px) translateY(108.36px) rotateX(-11deg); + transform: rotateY(324deg) translateZ(150px) translateY(108.36px) rotateX(-11deg); +} +.die .face:nth-child(13) { + -webkit-transform: rotateY(396deg) translateZ(150px) translateY(108.36px) rotateX(-11deg); + transform: rotateY(396deg) translateZ(150px) translateY(108.36px) rotateX(-11deg); +} +.die .face:nth-child(14) { + -webkit-transform: rotateY(468deg) translateZ(150px) translateY(108.36px) rotateX(-11deg); + transform: rotateY(468deg) translateZ(150px) translateY(108.36px) rotateX(-11deg); +} +.die .face:nth-child(15) { + -webkit-transform: rotateY(540deg) translateZ(150px) translateY(108.36px) rotateX(-11deg); + transform: rotateY(540deg) translateZ(150px) translateY(108.36px) rotateX(-11deg); +} + +.source { + color: #bbb; + text-align: center; + margin-top: 50px; +} +.source a { + color: #ccc; +} diff --git a/bug-report-d20/license.txt b/bug-report-d20/license.txt new file mode 100644 index 0000000..d8126e2 --- /dev/null +++ b/bug-report-d20/license.txt @@ -0,0 +1,17 @@ + + + + diff --git a/bug-report-d20/src/index.html b/bug-report-d20/src/index.html new file mode 100644 index 0000000..d899779 --- /dev/null +++ b/bug-report-d20/src/index.html @@ -0,0 +1,30 @@ + + +
+
+
+
+ + {{ faces[n - 1] }} + +
+
+
+
+ +

(built off 3d d20 die with pure CSS)

\ No newline at end of file diff --git a/bug-report-d20/src/script.babel b/bug-report-d20/src/script.babel new file mode 100644 index 0000000..8cdb286 --- /dev/null +++ b/bug-report-d20/src/script.babel @@ -0,0 +1,44 @@ +new Vue({ + el: '#app', + data: { + currentFaceIndex: 0, + isRolling: false, + faces: [ + 'works on my machine', + 'try updating', + 'but the tests pass', + 'did you rebase?', + 'huh', + 'even on master?', + 'are you sure?', + 'even in prod?', + 'oh, windows?', + 'oh, high sierra?', + 'what error?', + '๐Ÿค”', + 'every time?', + 'i\'m on vacation', + 'force refresh', + 'no, it should not', + 'it\'s a feature', + 'don\'t do that then', + 'try a fresh clone', + 'it sorta works' + ] + }, + computed: { + currentFace() { + return this.faces[this.currentFaceIndex] + } + }, + methods: { + roll() { + if (this.isRolling) return + this.currentFaceIndex = Math.floor(Math.random() * this.faces.length) + this.isRolling = true + setTimeout(() => { + this.isRolling = false + }, 3000) + } + } +}) \ No newline at end of file diff --git a/bug-report-d20/src/style.scss b/bug-report-d20/src/style.scss new file mode 100644 index 0000000..796a5bf --- /dev/null +++ b/bug-report-d20/src/style.scss @@ -0,0 +1,157 @@ +$containerWidth: 400px; +$containerHeight: $containerWidth; + +$faceWidth: $containerWidth*0.5; +$faceHeight: $faceWidth*0.86; +$faceTextWidth: $faceWidth*0.5; +$faceTextFontSize: $faceHeight*0.125; +$faceTextLineHeight: 1.3; + +$transitionDuration: 0.5s; +$animationDuration: 3s; + +$angle: 53deg; +$ringAngle: -11deg; +$sideAngle: 360deg/5; +$opacity: 0.75; +$color: rgba(0, 166, 100, $opacity); + +$rotateX: -$angle; +$translateZ: $faceWidth*0.335; +$translateY: -$faceHeight*0.15; +$translateRingZ: $faceWidth*0.75; +$translateRingY: $faceHeight*0.78 + $translateY; +$translateLowerZ: $translateZ; +$translateLowerY: $faceHeight*0.78 + $translateRingY; + +@keyframes roll { + 10% { transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg) } + 30% { transform: rotateX(120deg) rotateY(240deg) rotateZ(0deg) translateX(40px) translateY(40px) } + 50% { transform: rotateX(240deg) rotateY(480deg) rotateZ(0deg) translateX(-40px) translateY(-40px) } + 70% { transform: rotateX(360deg) rotateY(720deg) rotateZ(0deg) } + 90% { transform: rotateX(480deg) rotateY(960deg) rotateZ(0deg) } +} + +body { + background: rgb(53, 73, 94); + padding: 20px; +} + +.content { + margin: auto auto; + position: relative; + width: $containerWidth; + height: $containerHeight; + perspective: 1500px; +} + +.die { + position: absolute; + width: 100%; + height: 100%; + transform-style: preserve-3d; + transition: transform $transitionDuration ease-out; + cursor: pointer; + + transform: rotateX($rotateX); + + &.rolling { + animation: roll $animationDuration linear; + } + + @for $i from 1 through 5 { + &[data-face="#{$i}"] { + $angleMultiplier: $i - 1; + transform: rotateX(-$angle) rotateY($sideAngle * $angleMultiplier); + } + } + + @for $i from 16 through 20 { + &[data-face="#{$i}"] { + $angleMultiplier: $i - 15; + transform: rotateX(-$angle + 180deg) rotateY(-$sideAngle * $angleMultiplier); + } + } + + @for $i from 6 through 10 { + &[data-face="#{$i}"] { + $angleMultiplier: $i - 6; + transform: rotateX(-$ringAngle) rotateZ(180deg) rotateY($sideAngle * $angleMultiplier); + } + } + + @for $i from 11 through 15 { + &[data-face="#{$i}"] { + $angleMultiplier: $i - 8; + transform: rotateX(-$ringAngle) rotateY(-$sideAngle * $angleMultiplier - $sideAngle/2); + } + } + + .face { + $horizontalMargin: -$faceWidth*0.5; + + position: absolute; + left: 50%; + top: 0; + margin: 0 $horizontalMargin; + border-left: $faceWidth*0.5 solid transparent; + border-right: $faceWidth*0.5 solid transparent; + border-bottom: $faceHeight solid $color; + width: 0px; + height: 0px; + transform-style: preserve-3d; + backface-visibility: hidden; + counter-increment: steps 1; + + .face-text { + position: absolute; + top: $faceHeight*0.45; + left: -$faceTextWidth / 2; + color: #fff; + text-shadow: 1px 1px 3px #000; + font-size: $faceTextFontSize; + text-align: center; + line-height: $faceTextLineHeight; + width: $faceTextWidth; + height: $faceHeight; + font-family: monospace; + } + + @for $i from 1 through 5 { + &:nth-child(#{$i}) { + $angleMultiplier: $i - 1; + transform: rotateY(-$sideAngle * $angleMultiplier) translateZ($translateZ) translateY($translateY) rotateX($angle); + } + } + + @for $i from 16 through 20 { + &:nth-child(#{$i}) { + $angleMultiplier: $i - 18; + transform: rotateY($sideAngle * $angleMultiplier + $sideAngle/2) translateZ($translateLowerZ) translateY($translateLowerY) rotateZ(180deg) rotateX($angle); + } + } + + @for $i from 6 through 10 { + &:nth-child(#{$i}) { + $angleMultiplier: $i - 11; + transform: rotateY(-$sideAngle * $angleMultiplier) translateZ($translateRingZ) translateY($translateRingY) rotateZ(180deg) rotateX($ringAngle); + } + } + + @for $i from 11 through 15 { + &:nth-child(#{$i}) { + $angleMultiplier: $i - 8; + transform: rotateY($sideAngle * $angleMultiplier + $sideAngle/2) translateZ($translateRingZ) translateY($translateRingY) rotateX($ringAngle); + } + } + } +} + +.source { + color: #bbb; + text-align: center; + margin-top: 50px; + a { + color: #ccc; + } +} \ No newline at end of file diff --git a/building-a-realtime-photoshop/README.markdown b/building-a-realtime-photoshop/README.markdown new file mode 100644 index 0000000..1519de0 --- /dev/null +++ b/building-a-realtime-photoshop/README.markdown @@ -0,0 +1,5 @@ +# Building a Realtime Photoshop ๐ŸŽจ + +A Pen created on CodePen.io. Original URL: [https://codepen.io/rebelchris/pen/LYNNPpp](https://codepen.io/rebelchris/pen/LYNNPpp). + + diff --git a/building-a-realtime-photoshop/dist/index.html b/building-a-realtime-photoshop/dist/index.html new file mode 100644 index 0000000..81caf79 --- /dev/null +++ b/building-a-realtime-photoshop/dist/index.html @@ -0,0 +1,56 @@ + + + + + CodePen - Building a Realtime Photoshop ๐ŸŽจ + + + + + +
+ +
+ + + + + + + + + +
+
+ + + + + diff --git a/building-a-realtime-photoshop/dist/script.js b/building-a-realtime-photoshop/dist/script.js new file mode 100644 index 0000000..48d43f2 --- /dev/null +++ b/building-a-realtime-photoshop/dist/script.js @@ -0,0 +1,9 @@ +var img = document.getElementById('main-image'); + +var inputs = document.querySelectorAll('input'); + +[].forEach.call(inputs, function(input) { + input.addEventListener('input', e => { + img.style.setProperty('--'+input.id, input.value); + }); +}); \ No newline at end of file diff --git a/building-a-realtime-photoshop/dist/style.css b/building-a-realtime-photoshop/dist/style.css new file mode 100644 index 0000000..7a6cae7 --- /dev/null +++ b/building-a-realtime-photoshop/dist/style.css @@ -0,0 +1,41 @@ +* { + margin: 0; + padding: 0; + font-family: Roboto, "Helvetica Neue", Arial, sans-serif; +} +:root { + --blur: 0; + --brightness: 1; + --contrast: 100; + --grayscale: 0; + --hue: 0; + --invert: 0; + --opacity: 100; + --saturate: 100; + --sepia: 0; +} +#main-image { + transition: all 300ms ease-in-out; + filter: blur(calc(1px * var(--blur))) brightness(var(--brightness)) + contrast(calc(1% * var(--contrast))) grayscale(calc(1% * var(--grayscale))) + hue-rotate(calc(1deg * var(--hue))) invert(calc(1% * var(--invert))) + opacity(calc(1% * var(--opacity))) saturate(calc(1% * var(--saturate))) + sepia(calc(1% * var(--sepia))); + border: 5px solid #fff; +} +.container { + display: flex; + align-items: center; + justify-content: center; + height: 100vh; + background: #eee; +} +.toolbox { + margin-left: 50px; + display: flex; + justify-content: center; + flex-direction: column; +} +label { + margin-bottom: 5px; +} \ No newline at end of file diff --git a/building-a-realtime-photoshop/license.txt b/building-a-realtime-photoshop/license.txt new file mode 100644 index 0000000..cbf8902 --- /dev/null +++ b/building-a-realtime-photoshop/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Chris Bongers (https://codepen.io/rebelchris/pen/LYNNPpp) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/building-a-realtime-photoshop/src/index.html b/building-a-realtime-photoshop/src/index.html new file mode 100644 index 0000000..2edc8fd --- /dev/null +++ b/building-a-realtime-photoshop/src/index.html @@ -0,0 +1,41 @@ +
+ +
+ + + + + + + + + +
+
\ No newline at end of file diff --git a/building-a-realtime-photoshop/src/script.js b/building-a-realtime-photoshop/src/script.js new file mode 100644 index 0000000..48d43f2 --- /dev/null +++ b/building-a-realtime-photoshop/src/script.js @@ -0,0 +1,9 @@ +var img = document.getElementById('main-image'); + +var inputs = document.querySelectorAll('input'); + +[].forEach.call(inputs, function(input) { + input.addEventListener('input', e => { + img.style.setProperty('--'+input.id, input.value); + }); +}); \ No newline at end of file diff --git a/building-a-realtime-photoshop/src/style.css b/building-a-realtime-photoshop/src/style.css new file mode 100644 index 0000000..12d8ada --- /dev/null +++ b/building-a-realtime-photoshop/src/style.css @@ -0,0 +1,41 @@ +* { + margin: 0; + padding: 0; + font-family: Roboto, "Helvetica Neue", Arial, sans-serif; +} +:root { + --blur: 0; + --brightness: 1; + --contrast: 100; + --grayscale: 0; + --hue: 0; + --invert: 0; + --opacity: 100; + --saturate: 100; + --sepia: 0; +} +#main-image { + transition: all 300ms ease-in-out; + filter: blur(calc(1px * var(--blur))) brightness(var(--brightness)) + contrast(calc(1% * var(--contrast))) grayscale(calc(1% * var(--grayscale))) + hue-rotate(calc(1deg * var(--hue))) invert(calc(1% * var(--invert))) + opacity(calc(1% * var(--opacity))) saturate(calc(1% * var(--saturate))) + sepia(calc(1% * var(--sepia))); + border: 5px solid #fff; +} +.container { + display: flex; + align-items: center; + justify-content: center; + height: 100vh; + background: #eee; +} +.toolbox { + margin-left: 50px; + display: flex; + justify-content: center; + flex-direction: column; +} +label { + margin-bottom: 5px; +} diff --git a/button-and-link-with-no-labelling-linthtmlwithcss/README.markdown b/button-and-link-with-no-labelling-linthtmlwithcss/README.markdown new file mode 100644 index 0000000..aa60b57 --- /dev/null +++ b/button-and-link-with-no-labelling-linthtmlwithcss/README.markdown @@ -0,0 +1,5 @@ +# Button and link with no labelling #lintHTMLwithCSS + +A Pen created on CodePen.io. Original URL: [https://codepen.io/GeoffreyCrofte/pen/PoZQKNj](https://codepen.io/GeoffreyCrofte/pen/PoZQKNj). + +A big CSS selector to get most of the use case where a link/button is empty in a way or another. diff --git a/button-and-link-with-no-labelling-linthtmlwithcss/dist/index.html b/button-and-link-with-no-labelling-linthtmlwithcss/dist/index.html new file mode 100644 index 0000000..7f62cb2 --- /dev/null +++ b/button-and-link-with-no-labelling-linthtmlwithcss/dist/index.html @@ -0,0 +1,40 @@ + + + + + CodePen - Button and link with no labelling #lintHTMLwithCSS + + + + + + +

Lint button and link with no labelling

+ +

With content (ok)

+A link + + +

Empty (not ok)

+ + + +

Not empty, with img no alt (not ok)

+ + + +

Not empty, with img empty alt (not ok)

+ + + +

Not empty, with i (icon) with no labelling (not ok)

+ + + +

Faux-negative because of :only-child (should be ok)

+ Text + + + + + diff --git a/button-and-link-with-no-labelling-linthtmlwithcss/dist/style.css b/button-and-link-with-no-labelling-linthtmlwithcss/dist/style.css new file mode 100644 index 0000000..6d9cb90 --- /dev/null +++ b/button-and-link-with-no-labelling-linthtmlwithcss/dist/style.css @@ -0,0 +1,13 @@ +/* Empty buttons or links without any kind of labelling */ +:is(button, a):empty:not([aria-label]):not([aria-labelledby]), +:is(button, a):not([aria-label]):not([aria-labelledby]) img:only-child:is(:not([alt]),[alt=""]), +:is(button, a):not([aria-label]):not([aria-labelledby]) i:only-child:not([aria-label]):not([aria-labelledby]) { + outline: 2px dashed darksalmon; + padding: 8px; +} + + +body { + margin: 2em; + text-align: center; +} \ No newline at end of file diff --git a/button-and-link-with-no-labelling-linthtmlwithcss/license.txt b/button-and-link-with-no-labelling-linthtmlwithcss/license.txt new file mode 100644 index 0000000..d9bff5e --- /dev/null +++ b/button-and-link-with-no-labelling-linthtmlwithcss/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Geoffrey Crofte (https://codepen.io/GeoffreyCrofte/pen/PoZQKNj) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/button-and-link-with-no-labelling-linthtmlwithcss/src/index.html b/button-and-link-with-no-labelling-linthtmlwithcss/src/index.html new file mode 100644 index 0000000..ab35df9 --- /dev/null +++ b/button-and-link-with-no-labelling-linthtmlwithcss/src/index.html @@ -0,0 +1,25 @@ +

Lint button and link with no labelling

+ +

With content (ok)

+A link + + +

Empty (not ok)

+ + + +

Not empty, with img no alt (not ok)

+ + + +

Not empty, with img empty alt (not ok)

+ + + +

Not empty, with i (icon) with no labelling (not ok)

+ + + +

Faux-negative because of :only-child (should be ok)

+ Text + \ No newline at end of file diff --git a/button-and-link-with-no-labelling-linthtmlwithcss/src/style.css b/button-and-link-with-no-labelling-linthtmlwithcss/src/style.css new file mode 100644 index 0000000..6d9cb90 --- /dev/null +++ b/button-and-link-with-no-labelling-linthtmlwithcss/src/style.css @@ -0,0 +1,13 @@ +/* Empty buttons or links without any kind of labelling */ +:is(button, a):empty:not([aria-label]):not([aria-labelledby]), +:is(button, a):not([aria-label]):not([aria-labelledby]) img:only-child:is(:not([alt]),[alt=""]), +:is(button, a):not([aria-label]):not([aria-labelledby]) i:only-child:not([aria-label]):not([aria-labelledby]) { + outline: 2px dashed darksalmon; + padding: 8px; +} + + +body { + margin: 2em; + text-align: center; +} \ No newline at end of file diff --git a/c3-color-contrast-checker/README.markdown b/c3-color-contrast-checker/README.markdown new file mode 100644 index 0000000..44a395e --- /dev/null +++ b/c3-color-contrast-checker/README.markdown @@ -0,0 +1,4 @@ +# C3: Color Contrast Checker + _A Pen created at CodePen.io. Original URL: [https://codepen.io/alvaromontoro/pen/YgpWZG](https://codepen.io/alvaromontoro/pen/YgpWZG). + + Interactive validator that gets two colors (in RGB or HEX), and calculates the contrast difference between the two, providing information about their accessibility based on [WCAG 2.1 criteria](https://www.w3.org/TR/WCAG/#contrast-minimum) \ No newline at end of file diff --git a/c3-color-contrast-checker/dist/index.html b/c3-color-contrast-checker/dist/index.html new file mode 100644 index 0000000..f29243f --- /dev/null +++ b/c3-color-contrast-checker/dist/index.html @@ -0,0 +1,133 @@ + + + + + C3: Color Contrast Checker + + + + +
+

Color Contrast Checker (C3)

+
+
+ + Teacher + Cartoon of a Caucasian woman smiling, and wearing black glasses and a purple shirt with white collar. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ Large Text + WCAG AA +
+
+ Normal Text + WCAG AA +
+
+ Large Text + WCAG AAA +
+
+ Normal Text + WCAG AAA +
+
+
+
+ Click to change demo text +
+
+
+
+

Foreground

+
+ + + +
+
+ + + +
+
+ + + +
+ +
+
+

Background

+
+ + + +
+
+ + + +
+
+ + + +
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/c3-color-contrast-checker/dist/script.js b/c3-color-contrast-checker/dist/script.js new file mode 100644 index 0000000..82d190c --- /dev/null +++ b/c3-color-contrast-checker/dist/script.js @@ -0,0 +1,136 @@ +function updateDemoColors(colorFront, colorBack) { + const demo = document.querySelector("#sample-text"); + demo.style.color = `rgb(${colorFront.toString()})`; + demo.style.backgroundColor = `rgb(${colorBack.toString()})`; +} + +/* the following functions are adapted from https://stackoverflow.com/a/9733420/3695983 */ +function luminanace(r, g, b) { + var a = [r, g, b].map(function (v) { + v /= 255; + return v <= 0.03928 + ? v / 12.92 + : Math.pow( (v + 0.055) / 1.055, 2.4 ); + }); + return a[0] * 0.2126 + a[1] * 0.7152 + a[2] * 0.0722; +} +function contrast(rgb1, rgb2) { + const luminanceFront = luminanace(rgb1[0], rgb1[1], rgb1[2]); + const luminanceBack = luminanace(rgb2[0], rgb2[1], rgb2[2]); + return luminanceBack > luminanceFront + ? ((luminanceFront + 0.05) / (luminanceBack + 0.05)) + : ((luminanceBack + 0.05) / (luminanceFront + 0.05)); +} + +function updateBoxesColors(colorFront, colorBack) { + const ratio = contrast(colorFront, colorBack); + document.querySelector("#aa-normal").className = ratio < 0.22222 ? "" : "fail"; + document.querySelector("#aa-large").className = ratio < 0.33333 ? "" : "fail"; + document.querySelector("#aaa-normal").className = ratio < 0.14285 ? "" : "fail"; + document.querySelector("#aaa-large").className = ratio < 0.22222 ? "" : "fail"; + + const totalWrong = document.querySelectorAll(".fail").length; + let mouth = document.querySelector("#mouth"); + let smile = document.querySelector("#smile"); + + switch(totalWrong) { + case 0: + mouth.setAttribute("d", "M 106,132 C 113,127 125,128 125,132 125,128 137,127 144,132 141,142 134,149 125,149 116,149 109,142 106,132 Z"); + smile.setAttribute("d", "M125,144 C 140,144 143,132 143,132 143,132 125,133 125,133 125,133 106.5,132 106.5,132 106.5,132 110,144 125,144 Z"); + break; + case 1: + case 2: + mouth.setAttribute("d", "M 106,132 C 113,127 125,128 125,132 125,128 137,127 144,132 141,142 134,146 125,146 116,146 109,142 106,132 Z"); + smile.setAttribute("d", "M125,141 C 140,141 143,132 143,132 143,132 125,133 125,133 125,133 106.5,132 106.5,132 106.5,132 110,141 125,141 Z"); + break; + case 3: + mouth.setAttribute("d", "M 106,132 C 113,127 125,128 125,132 125,128 137,127 144,132 141,138 140,143 125,143 110,143 109,138 106,132 Z"); + smile.setAttribute("d", "M125,138 C 140,138 143.5,132 143.5,132 143.5,132 125,133 125,133 125,133 106.5,132 106.5,132 106.5,132 110,138 125,138 Z"); + break; + case 4: + mouth.setAttribute("d", "M 106,132 C 113,127 125,128 125,132 125,128 137,127 144,132 141,138 134,142 125,142 116,142 109,138 106,132 Z"); + smile.setAttribute("d", "M125,135 C 140,135 143,132 143,132 143,135 125,136 125,136 125,136 106.5,135 106.5,132 106.5,132 110,135 125,135 Z"); + break; + } +} + +function updateHex(colorFront, colorBack) { + const colorFrontHex = colorFront.map(function(el) { return Number(el).toString(16).padStart(2, "0").toUpperCase(); }); + const colorBackHex = colorBack.map(function(el) { return Number(el).toString(16).padStart(2, "0").toUpperCase(); }); + document.querySelector("#color-1-hex").value = `#${colorFrontHex.join('')}`; + document.querySelector("#color-2-hex").value = `#${colorBackHex.join('')}` +} + +function updateColors() { + const colorFront = [ + document.querySelector("#color-1-r").value, + document.querySelector("#color-1-g").value, + document.querySelector("#color-1-b").value + ]; + const colorBack = [ + document.querySelector("#color-2-r").value, + document.querySelector("#color-2-g").value, + document.querySelector("#color-2-b").value + ]; + + updateDemoColors(colorFront, colorBack); + updateBoxesColors(colorFront, colorBack); + updateHex(colorFront, colorBack); +} + +document.querySelectorAll("input[type='number'], input[type='range']").forEach(function(el) { + el.addEventListener("input", function() { + if (this.type === "range") { + this.nextElementSibling.value = this.value; + } else if (this.type === "number") { + this.previousElementSibling.value = this.value; + } + updateColors(); + }); +}); + +document.querySelectorAll("input[type='text']").forEach(function(el) { + el.addEventListener("blur", function() { + let val = this.value; + let wrongValue = false; + if (val[0] === "#") val = val.substring(1); + if (val.length === 3 || val.length === 6) { + if (val.length === 3) { + val = `${val[0]}${val[0]}${val[1]}${val[1]}${val[2]}${val[2]}`; + } + if (val.match(/[0-9A-Fa-f]{6}/)) { + const red = parseInt(`${val[0]}${val[1]}`, 16); + const green = parseInt(`${val[2]}${val[3]}`, 16); + const blue = parseInt(`${val[4]}${val[5]}`, 16); + const target = this.dataset.target; + + document.getElementById(`number-${target}-r`).value = red; + document.getElementById(`number-${target}-g`).value = green; + document.getElementById(`number-${target}-b`).value = blue; + document.getElementById(`color-${target}-r`).value = red; + document.getElementById(`color-${target}-g`).value = green; + document.getElementById(`color-${target}-b`).value = blue; + + updateColors(); + } else { + wrongValue = true; + } + } else { + wrongValue = true; + } + + if (wrongValue){ + const colorFront = [ + document.querySelector("#color-1-r").value, + document.querySelector("#color-1-g").value, + document.querySelector("#color-1-b").value + ]; + const colorBack = [ + document.querySelector("#color-2-r").value, + document.querySelector("#color-2-g").value, + document.querySelector("#color-2-b").value + ]; + updateHex(colorFront, colorBack) + } + }); +}) \ No newline at end of file diff --git a/c3-color-contrast-checker/dist/style.css b/c3-color-contrast-checker/dist/style.css new file mode 100644 index 0000000..fa1c8e5 --- /dev/null +++ b/c3-color-contrast-checker/dist/style.css @@ -0,0 +1,183 @@ +/* Generic */ +@import url('https://fonts.googleapis.com/css?family=Ubuntu'); + +html, body { + background: #ddd; + font-family: Ubuntu, sans-serif; + font-size: 16px; +} + +h1, h2 { + text-align: center; + display: block; + margin-top: 0; +} + +/* Tool general styles */ +#color-contrast { + background: #fff; + box-shadow: 0 0 1rem rgba(0,0,0,0.25); + border-radius: 2px; + width: 500px; + margin: auto auto; + box-sizing: border-box; + padding: 2rem; + /*position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%);*/ +} + +/* character */ +#jill { + width: 250px; + height: 250px; + margin: auto auto; + border-radius: 100%; +} + +/* SVG */ +@-moz-keyframes blink { + 0% { ry: 5; } + 49% { ry: 5; } + 50% { ry: 0; } + 51% { ry: 5; } +} +@-webkit-keyframes blink { + 0% { ry: 5; } + 49% { ry: 5; } + 50% { ry: 0; } + 51% { ry: 5; } +} +@keyframes blink { + 0% { ry: 5; } + 49% { ry: 5; } + 50% { ry: 0; } + 51% { ry: 5; } +} +.skin { fill: #eab38f; } +.eyes { fill: #1f1f1f; animation: blink 10s alternate infinite; -webkit-animation: blink 10s alternate infinite; -moz-animation: blink 10s alternate infinite;} +.hair { fill: #2f1b0d; } +.line { fill: none; stroke: #2f1b0d; stroke-width:2px; } +.arm, #mouth, #smile, .eyes, .hand, .eyebrow { transition: all 0.25s; } + +/* boxes */ +#boxes { + display: flex; + margin-top: 1.5rem; +} + +#boxes > div { + flex: 1; + text-align: center; + background: #081; + color: white; + padding: 0.5rem 0; + margin-left: 10px; + border-radius: 3px; + transition: background 0.5s; + position: relative; +} + +#boxes > div::after { + content: "โœ“ Pass"; + display: block; + position: absolute; + color: #000; + text-align:center; + width: 100%; + margin-top: 10px; +} + +#boxes > div.fail { + background: #d32; +} + +#boxes > div.fail::after { + content: "โœ• Fail"; +} + +#boxes > div:first-child { + margin-left: 0; +} + +#boxes span:first-child { + font-size: 0.75em; + display: inline-block; + margin-bottom: 0.5em; +} + +/* demo */ +#sample-text { + margin: 2.5rem 0 1.6rem 0; + padding: 1rem; + background: #fff; + color: #000; + text-align: center; + font-size: 20px; + border-radius: 2px; +} + +/* sliders */ +#bars { + display: flex; + flex-direction: row; +} + +#bars > div { + flex: 1; + display: flex; + flex-direction: column; +} + +#bars > div:first-child { + margin-right: 0.5rem; +} + +#bars > div:last-child { + margin-left: 0.5rem; +} + +#bars > div > div { + display: flex; + margin-bottom: 0.5rem; +} + +#bars label { + display: inline-block; + color: white; + width: 2rem; + height: 2rem; + line-height: 2rem; + font-size: 1rem; + text-align: center; + border-radius: 2px; + box-sizing: border-box; +} + +label.red { background: #d32; } +label.green { background: #081; } +label.blue { background: #26e; } + +#bars input[type="range"] { + flex: 1; +} +#bars input[type="number"] { + text-align: center; + width: 3rem; + border-radius: 2px; + border: 1px solid #ccc; + font-size: 0.75rem; + height: 2rem; + box-sizing:border-box; + line-height: 2rem; +} +#bars input[type="text"] { + border-radius: 2px; + border: 1px solid #ccc; + text-align: center; + font-size: 1rem; + height: 2rem; + box-sizing:border-box; + line-height: 2rem; +} \ No newline at end of file diff --git a/c3-color-contrast-checker/license.txt b/c3-color-contrast-checker/license.txt new file mode 100644 index 0000000..909f205 --- /dev/null +++ b/c3-color-contrast-checker/license.txt @@ -0,0 +1,13 @@ + + + + diff --git a/c3-color-contrast-checker/src/index.html b/c3-color-contrast-checker/src/index.html new file mode 100644 index 0000000..8d7b854 --- /dev/null +++ b/c3-color-contrast-checker/src/index.html @@ -0,0 +1,119 @@ +
+

Color Contrast Checker (C3)

+
+
+ + Teacher + Cartoon of a Caucasian woman smiling, and wearing black glasses and a purple shirt with white collar. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ Large Text + WCAG AA +
+
+ Normal Text + WCAG AA +
+
+ Large Text + WCAG AAA +
+
+ Normal Text + WCAG AAA +
+
+
+
+ Click to change demo text +
+
+
+
+

Foreground

+
+ + + +
+
+ + + +
+
+ + + +
+ +
+
+

Background

+
+ + + +
+
+ + + +
+
+ + + +
+ +
+
+
\ No newline at end of file diff --git a/c3-color-contrast-checker/src/script.js b/c3-color-contrast-checker/src/script.js new file mode 100644 index 0000000..82d190c --- /dev/null +++ b/c3-color-contrast-checker/src/script.js @@ -0,0 +1,136 @@ +function updateDemoColors(colorFront, colorBack) { + const demo = document.querySelector("#sample-text"); + demo.style.color = `rgb(${colorFront.toString()})`; + demo.style.backgroundColor = `rgb(${colorBack.toString()})`; +} + +/* the following functions are adapted from https://stackoverflow.com/a/9733420/3695983 */ +function luminanace(r, g, b) { + var a = [r, g, b].map(function (v) { + v /= 255; + return v <= 0.03928 + ? v / 12.92 + : Math.pow( (v + 0.055) / 1.055, 2.4 ); + }); + return a[0] * 0.2126 + a[1] * 0.7152 + a[2] * 0.0722; +} +function contrast(rgb1, rgb2) { + const luminanceFront = luminanace(rgb1[0], rgb1[1], rgb1[2]); + const luminanceBack = luminanace(rgb2[0], rgb2[1], rgb2[2]); + return luminanceBack > luminanceFront + ? ((luminanceFront + 0.05) / (luminanceBack + 0.05)) + : ((luminanceBack + 0.05) / (luminanceFront + 0.05)); +} + +function updateBoxesColors(colorFront, colorBack) { + const ratio = contrast(colorFront, colorBack); + document.querySelector("#aa-normal").className = ratio < 0.22222 ? "" : "fail"; + document.querySelector("#aa-large").className = ratio < 0.33333 ? "" : "fail"; + document.querySelector("#aaa-normal").className = ratio < 0.14285 ? "" : "fail"; + document.querySelector("#aaa-large").className = ratio < 0.22222 ? "" : "fail"; + + const totalWrong = document.querySelectorAll(".fail").length; + let mouth = document.querySelector("#mouth"); + let smile = document.querySelector("#smile"); + + switch(totalWrong) { + case 0: + mouth.setAttribute("d", "M 106,132 C 113,127 125,128 125,132 125,128 137,127 144,132 141,142 134,149 125,149 116,149 109,142 106,132 Z"); + smile.setAttribute("d", "M125,144 C 140,144 143,132 143,132 143,132 125,133 125,133 125,133 106.5,132 106.5,132 106.5,132 110,144 125,144 Z"); + break; + case 1: + case 2: + mouth.setAttribute("d", "M 106,132 C 113,127 125,128 125,132 125,128 137,127 144,132 141,142 134,146 125,146 116,146 109,142 106,132 Z"); + smile.setAttribute("d", "M125,141 C 140,141 143,132 143,132 143,132 125,133 125,133 125,133 106.5,132 106.5,132 106.5,132 110,141 125,141 Z"); + break; + case 3: + mouth.setAttribute("d", "M 106,132 C 113,127 125,128 125,132 125,128 137,127 144,132 141,138 140,143 125,143 110,143 109,138 106,132 Z"); + smile.setAttribute("d", "M125,138 C 140,138 143.5,132 143.5,132 143.5,132 125,133 125,133 125,133 106.5,132 106.5,132 106.5,132 110,138 125,138 Z"); + break; + case 4: + mouth.setAttribute("d", "M 106,132 C 113,127 125,128 125,132 125,128 137,127 144,132 141,138 134,142 125,142 116,142 109,138 106,132 Z"); + smile.setAttribute("d", "M125,135 C 140,135 143,132 143,132 143,135 125,136 125,136 125,136 106.5,135 106.5,132 106.5,132 110,135 125,135 Z"); + break; + } +} + +function updateHex(colorFront, colorBack) { + const colorFrontHex = colorFront.map(function(el) { return Number(el).toString(16).padStart(2, "0").toUpperCase(); }); + const colorBackHex = colorBack.map(function(el) { return Number(el).toString(16).padStart(2, "0").toUpperCase(); }); + document.querySelector("#color-1-hex").value = `#${colorFrontHex.join('')}`; + document.querySelector("#color-2-hex").value = `#${colorBackHex.join('')}` +} + +function updateColors() { + const colorFront = [ + document.querySelector("#color-1-r").value, + document.querySelector("#color-1-g").value, + document.querySelector("#color-1-b").value + ]; + const colorBack = [ + document.querySelector("#color-2-r").value, + document.querySelector("#color-2-g").value, + document.querySelector("#color-2-b").value + ]; + + updateDemoColors(colorFront, colorBack); + updateBoxesColors(colorFront, colorBack); + updateHex(colorFront, colorBack); +} + +document.querySelectorAll("input[type='number'], input[type='range']").forEach(function(el) { + el.addEventListener("input", function() { + if (this.type === "range") { + this.nextElementSibling.value = this.value; + } else if (this.type === "number") { + this.previousElementSibling.value = this.value; + } + updateColors(); + }); +}); + +document.querySelectorAll("input[type='text']").forEach(function(el) { + el.addEventListener("blur", function() { + let val = this.value; + let wrongValue = false; + if (val[0] === "#") val = val.substring(1); + if (val.length === 3 || val.length === 6) { + if (val.length === 3) { + val = `${val[0]}${val[0]}${val[1]}${val[1]}${val[2]}${val[2]}`; + } + if (val.match(/[0-9A-Fa-f]{6}/)) { + const red = parseInt(`${val[0]}${val[1]}`, 16); + const green = parseInt(`${val[2]}${val[3]}`, 16); + const blue = parseInt(`${val[4]}${val[5]}`, 16); + const target = this.dataset.target; + + document.getElementById(`number-${target}-r`).value = red; + document.getElementById(`number-${target}-g`).value = green; + document.getElementById(`number-${target}-b`).value = blue; + document.getElementById(`color-${target}-r`).value = red; + document.getElementById(`color-${target}-g`).value = green; + document.getElementById(`color-${target}-b`).value = blue; + + updateColors(); + } else { + wrongValue = true; + } + } else { + wrongValue = true; + } + + if (wrongValue){ + const colorFront = [ + document.querySelector("#color-1-r").value, + document.querySelector("#color-1-g").value, + document.querySelector("#color-1-b").value + ]; + const colorBack = [ + document.querySelector("#color-2-r").value, + document.querySelector("#color-2-g").value, + document.querySelector("#color-2-b").value + ]; + updateHex(colorFront, colorBack) + } + }); +}) \ No newline at end of file diff --git a/c3-color-contrast-checker/src/style.css b/c3-color-contrast-checker/src/style.css new file mode 100644 index 0000000..fa1c8e5 --- /dev/null +++ b/c3-color-contrast-checker/src/style.css @@ -0,0 +1,183 @@ +/* Generic */ +@import url('https://fonts.googleapis.com/css?family=Ubuntu'); + +html, body { + background: #ddd; + font-family: Ubuntu, sans-serif; + font-size: 16px; +} + +h1, h2 { + text-align: center; + display: block; + margin-top: 0; +} + +/* Tool general styles */ +#color-contrast { + background: #fff; + box-shadow: 0 0 1rem rgba(0,0,0,0.25); + border-radius: 2px; + width: 500px; + margin: auto auto; + box-sizing: border-box; + padding: 2rem; + /*position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%);*/ +} + +/* character */ +#jill { + width: 250px; + height: 250px; + margin: auto auto; + border-radius: 100%; +} + +/* SVG */ +@-moz-keyframes blink { + 0% { ry: 5; } + 49% { ry: 5; } + 50% { ry: 0; } + 51% { ry: 5; } +} +@-webkit-keyframes blink { + 0% { ry: 5; } + 49% { ry: 5; } + 50% { ry: 0; } + 51% { ry: 5; } +} +@keyframes blink { + 0% { ry: 5; } + 49% { ry: 5; } + 50% { ry: 0; } + 51% { ry: 5; } +} +.skin { fill: #eab38f; } +.eyes { fill: #1f1f1f; animation: blink 10s alternate infinite; -webkit-animation: blink 10s alternate infinite; -moz-animation: blink 10s alternate infinite;} +.hair { fill: #2f1b0d; } +.line { fill: none; stroke: #2f1b0d; stroke-width:2px; } +.arm, #mouth, #smile, .eyes, .hand, .eyebrow { transition: all 0.25s; } + +/* boxes */ +#boxes { + display: flex; + margin-top: 1.5rem; +} + +#boxes > div { + flex: 1; + text-align: center; + background: #081; + color: white; + padding: 0.5rem 0; + margin-left: 10px; + border-radius: 3px; + transition: background 0.5s; + position: relative; +} + +#boxes > div::after { + content: "โœ“ Pass"; + display: block; + position: absolute; + color: #000; + text-align:center; + width: 100%; + margin-top: 10px; +} + +#boxes > div.fail { + background: #d32; +} + +#boxes > div.fail::after { + content: "โœ• Fail"; +} + +#boxes > div:first-child { + margin-left: 0; +} + +#boxes span:first-child { + font-size: 0.75em; + display: inline-block; + margin-bottom: 0.5em; +} + +/* demo */ +#sample-text { + margin: 2.5rem 0 1.6rem 0; + padding: 1rem; + background: #fff; + color: #000; + text-align: center; + font-size: 20px; + border-radius: 2px; +} + +/* sliders */ +#bars { + display: flex; + flex-direction: row; +} + +#bars > div { + flex: 1; + display: flex; + flex-direction: column; +} + +#bars > div:first-child { + margin-right: 0.5rem; +} + +#bars > div:last-child { + margin-left: 0.5rem; +} + +#bars > div > div { + display: flex; + margin-bottom: 0.5rem; +} + +#bars label { + display: inline-block; + color: white; + width: 2rem; + height: 2rem; + line-height: 2rem; + font-size: 1rem; + text-align: center; + border-radius: 2px; + box-sizing: border-box; +} + +label.red { background: #d32; } +label.green { background: #081; } +label.blue { background: #26e; } + +#bars input[type="range"] { + flex: 1; +} +#bars input[type="number"] { + text-align: center; + width: 3rem; + border-radius: 2px; + border: 1px solid #ccc; + font-size: 0.75rem; + height: 2rem; + box-sizing:border-box; + line-height: 2rem; +} +#bars input[type="text"] { + border-radius: 2px; + border: 1px solid #ccc; + text-align: center; + font-size: 1rem; + height: 2rem; + box-sizing:border-box; + line-height: 2rem; +} \ No newline at end of file diff --git a/cacheable-3-colour-svgs-via-use/README.markdown b/cacheable-3-colour-svgs-via-use/README.markdown new file mode 100644 index 0000000..1ccd509 --- /dev/null +++ b/cacheable-3-colour-svgs-via-use/README.markdown @@ -0,0 +1,5 @@ +# Cacheable 3 colour SVGs via + +A Pen created on CodePen.io. Original URL: [https://codepen.io/scootman/pen/MWmombb](https://codepen.io/scootman/pen/MWmombb). + + diff --git a/cacheable-3-colour-svgs-via-use/dist/index.html b/cacheable-3-colour-svgs-via-use/dist/index.html new file mode 100644 index 0000000..94e3038 --- /dev/null +++ b/cacheable-3-colour-svgs-via-use/dist/index.html @@ -0,0 +1,30 @@ + + + + + CodePen - Cacheable 3 colour SVGs via <use> + + + + + + + + +
+
+ +
+
+ +
+ +
+ + + + + + diff --git a/cacheable-3-colour-svgs-via-use/dist/script.js b/cacheable-3-colour-svgs-via-use/dist/script.js new file mode 100644 index 0000000..6f2109a --- /dev/null +++ b/cacheable-3-colour-svgs-via-use/dist/script.js @@ -0,0 +1,5 @@ +$('input[name="theme"]').on('change', function() { + if ($(this).prop("checked", true)) { + $('body').attr('data-theme', $(this).prop('value')); + } + }); \ No newline at end of file diff --git a/cacheable-3-colour-svgs-via-use/dist/style.css b/cacheable-3-colour-svgs-via-use/dist/style.css new file mode 100644 index 0000000..b6c412a --- /dev/null +++ b/cacheable-3-colour-svgs-via-use/dist/style.css @@ -0,0 +1,174 @@ +@import url("https://fonts.googleapis.com/css2?family=Barlow:wght@400&display=swap"); +svg { + -webkit-backface-visibility: hidden; + -webkit-transform: translateZ(0) scale(1); + font-smoothing: antialiased !important; +} + +body { + margin: 0; + display: flex; + justify-content: center; + min-height: 100vh; + min-width: 375px; + color: #0e0e11; + background: #eeeef1; + font-family: "Barlow", sans-serif; + font-size: 14px; + transition: all 0.1s ease-in-out; +} +body[data-theme=dark] { + color: white; + background: #1c1c21; +} + +.layout { + display: grid; + grid-template-rows: 20fr auto 21fr; + grid-template-columns: 1fr 2fr 1fr; + grid-template-areas: "header header header" ". icons ." "footer footer footer"; + justify-items: center; + min-height: 192px; + flex: 1 0 0; + max-width: 1200px; +} + +.icons { + display: flex; + grid-area: icons; +} +.icons button { + all: unset; + position: relative; + cursor: pointer; +} +@media (hover: hover) { + .icons button::before { + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + opacity: 0; + background: white; + z-index: -1; + border-radius: 10%; + transition: all 0.1s ease-in-out; + } + [data-theme=dark] .icons button::before { + background: #0e0e11; + } +} +.icons button:hover svg, .icons button:hover::before { + opacity: 1; +} +.icons button:hover svg { + color: #05c7b7; + fill: #007399; +} +.icons button.alt:hover svg { + color: #ffaa00; + fill: #e5592e; +} + +svg { + color: #75758a; + fill: #0e0e11; +} +[data-theme=dark] svg { + color: white; + fill: #868698; +} +svg.defs { + position: absolute; + height: 0; + width: 0; +} +svg.icon { + width: 60%; + margin: 20%; + opacity: 0.6; + transition: all 0.1s ease-in-out; +} + +.segmented-control { + grid-area: header; + align-self: start; + display: flex; + width: 144px; + margin: 27px 0; + height: 27px; + border-radius: 5px; + background: white; + z-index: 1; + transition: all 0.1s ease-in-out; +} +[data-theme=dark] .segmented-control { + background: #0e0e11; +} +[data-theme=dark] .segmented-control label { + color: #868698; +} +[data-theme=dark] .segmented-control label:last-child::before { + background-color: #1c1c21; +} +.segmented-control input { + position: absolute; + transform: scale(0); +} +.segmented-control input:checked + label { + color: inherit; +} +.segmented-control input:checked + label ~ label:last-child::before { + transform: translate(-100%); +} +.segmented-control label { + flex: 1 0 0px; + display: flex; + justify-content: center; + align-items: center; + position: relative; + padding-bottom: 1px; + color: #75758a; + transition: all 0.1s ease-in-out; + cursor: pointer; +} +.segmented-control label:hover { + color: inherit; +} +.segmented-control label:last-child::before { + content: ""; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + background-clip: padding-box; + background-color: #eeeef1; + border-radius: 5px; + border: 2px solid transparent; + z-index: -1; + transition: transform 0.25s ease-in-out, background-color 0.1s ease-in-out; +} + +.links { + grid-area: footer; + align-self: end; + display: flex; + opacity: 0.55; +} +.links a { + all: unset; + cursor: pointer; + margin: 27px 0; + padding: 0 0.5em; + color: #75758a; + transition: all 0.1s ease-in-out; +} +[data-theme=dark] .links a { + color: #868698; +} +.links a:hover { + color: inherit; +} \ No newline at end of file diff --git a/cacheable-3-colour-svgs-via-use/license.txt b/cacheable-3-colour-svgs-via-use/license.txt new file mode 100644 index 0000000..3b2fef3 --- /dev/null +++ b/cacheable-3-colour-svgs-via-use/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Scott Henderson (https://codepen.io/scootman/pen/MWmombb) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/cacheable-3-colour-svgs-via-use/src/index.slim b/cacheable-3-colour-svgs-via-use/src/index.slim new file mode 100644 index 0000000..f437c25 --- /dev/null +++ b/cacheable-3-colour-svgs-via-use/src/index.slim @@ -0,0 +1,47 @@ +// A full explanation about this approach can be found here: https://twitter.com/_AntiAlias_/status/1416989388429352961?s=20 + +body data-theme="dark" + + // Below would be shifted to an external asset (icons.svg) to be cacheable (see notes below) + // Refer https://codepen.io/scootman/project/editor/28a25d9b324f8b1ce54b2917b241ca14 for production ready cacheable demo + svg.defs xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" + defs + symbol id="package" viewBox="0 0 36 36" + g data-note="darker elements" + path d="M33.94,10.08A3.11,3.11,0,0,0,33.56,9L18,18l-7-4h0L27,4.72,25,3.57,9,12.8H9L2.44,9a3.11,3.11,0,0,0-.38,1.07,1.26,1.26,0,0,0,0,.27,2.64,2.64,0,0,0,0,.29V25.38a3.28,3.28,0,0,0,1.63,2.8l12.75,7.36a3.27,3.27,0,0,0,3.24,0l12.76-7.36.35-.24A3.27,3.27,0,0,0,34,25.38V10.64a2.64,2.64,0,0,0,0-.29A1.26,1.26,0,0,0,33.94,10.08Z" + g data-note="lighter elements" style="fill: currentcolor" + path d="M9,12.8,25,3.56,19.62.46a3,3,0,0,0-.78-.33A3,3,0,0,0,18.11,0a1.92,1.92,0,0,0-.24,0,3.37,3.37,0,0,0-.71.09,3.16,3.16,0,0,0-.79.33L3.62,7.82,3.38,8l-.21.17A3.18,3.18,0,0,0,2.44,9Z" + path d="M33.56,9a3.18,3.18,0,0,0-.73-.86L32.62,8l-.25-.16L32,7.58,27,4.72,11,14h0l7,4Z" + path d="M11,14v5.22a.5.5,0,0,1-.75.43l-.75-.43a1,1,0,0,1-.5-.87V12.8H9L2.44,9a3.11,3.11,0,0,0-.38,1.07,1.26,1.26,0,0,0,0,.27,2.64,2.64,0,0,0,0,.29V25.36a2.64,2.64,0,0,0,0,.29,1.26,1.26,0,0,0,0,.27,3.23,3.23,0,0,0,1.11,1.93l.21.16a2.2,2.2,0,0,0,.25.17l.81.47,11.94,6.89A3.27,3.27,0,0,0,18,36V18Z" style="opacity: 0.5" + + symbol id="delivery" viewBox="0 0 36 36" + g data-note="darker elements" + path d="M35.72,5.41l-.14-.11-24.93,16,2,8.83a.92.92,0,0,0,.65.69.94.94,0,0,0,.93-.24l5.14-5.22-4-1.87Z" + g data-note="lighter elements" style="fill: currentcolor" + path d="M34.81,5.17.68,14.85A.94.94,0,0,0,.54,16.6l10.11,4.71,24.93-16A.9.9,0,0,0,34.81,5.17Z" + path d="M35.72,5.41,15.34,23.5l4,1.87,6.52,3a1.87,1.87,0,0,0,2.56-1.06l7.51-21A.92.92,0,0,0,35.72,5.41Z" + path d="M35.72,5.41l-.14-.11-24.93,16,2,8.83a.92.92,0,0,0,.65.69l2.06-7.33Z" style="opacity: 0.5" + + + .layout + + .icons + button#icon-1 + svg.icon viewBox="0 0 36 36" + use href="#package" + / use href="https://assets.codepen.io/436544/icons.svg#package" + / ^ this should work in a production environment, but in the Codepen environment you get a 'Unsafe attempt to load' error (see CodePen project link above) + button#icon-2.alt + svg.icon viewBox="0 0 36 36" + use href="#delivery" + / use href="https://assets.codepen.io/436544/icons.svg#delivery" + + .segmented-control + input#light-theme type="radio" name="theme" value="light" + label for="light-theme" Light + input#dark-theme {type="radio" name="theme" value="dark" checked} + label for="dark-theme" Dark + + .links + a href="https://twitter.com/_AntiAlias_/status/1416989388429352961?s=20" target="_top" title='Twitter thread' Detailed explanation + a href="https://codepen.io/scootman/project/editor/ArpPQr" target="_top" title='Codepen project' Production ready demo \ No newline at end of file diff --git a/cacheable-3-colour-svgs-via-use/src/script.js b/cacheable-3-colour-svgs-via-use/src/script.js new file mode 100644 index 0000000..6f2109a --- /dev/null +++ b/cacheable-3-colour-svgs-via-use/src/script.js @@ -0,0 +1,5 @@ +$('input[name="theme"]').on('change', function() { + if ($(this).prop("checked", true)) { + $('body').attr('data-theme', $(this).prop('value')); + } + }); \ No newline at end of file diff --git a/cacheable-3-colour-svgs-via-use/src/style.scss b/cacheable-3-colour-svgs-via-use/src/style.scss new file mode 100644 index 0000000..12a4aef --- /dev/null +++ b/cacheable-3-colour-svgs-via-use/src/style.scss @@ -0,0 +1,237 @@ +// This is an extension of the two colour 'SVG use' approach that has been documented for some time (e.g. https://css-tricks.com/lodge/svg/21-get-two-colors-use/) +// This example includes changing the opacity on some lighter elements to create a third colour + +// A full explanation about this approach can be found here: https://twitter.com/_AntiAlias_/status/1416989388429352961?s=20 + + +// Defs --------- + +// neutral colors +$light-theme-fgd: hsl(240,8%,6%); +$light-theme-fgd-weaker: hsl(240,8%,50%); // weaker contrast +$light-theme-bgd: hsl(240,8%,94%); +$light-theme-bgd-stronger: white; // stronger contrast + +$dark-theme-fgd: white; +$dark-theme-fgd-weaker: hsl(240,8%,56%); +$dark-theme-bgd: hsl(240,8%,12%); +$dark-theme-bgd-stronger: hsl(240,8%,6%); + +// neutral colors (as applied to svg icons; note reversal of contrast to make 3D icons 'lit' naturally for both themes) +$light-theme-icon-light: $light-theme-fgd-weaker; +$light-theme-icon-dark: $light-theme-fgd; +$dark-theme-icon-light: $dark-theme-fgd; +$dark-theme-icon-dark: $dark-theme-fgd-weaker; + +// turquoise (same colors are used for both themes) +$icon-color-a-light: hsl(175,95%,40%); +$icon-color-a-dark: hsl(195,100%,30%); + +// amber (same colors are used for both themes) +$icon-color-b-light: hsl(40,100%,50%); +$icon-color-b-dark: hsl(14,78%,54%); + + +// typeface (an awesome one by Jeremy Tribby) +@import url('https://fonts.googleapis.com/css2?family=Barlow:wght@400&display=swap'); + +// standard transition +$transition: all .1s ease-in-out; + +// changing the color state of an SVG may cause it to jiggle in Safari +%svg-safari-jiggle-fix { + -webkit-backface-visibility: hidden; + -webkit-transform: translateZ(0) scale(1); + font-smoothing: antialiased !important; +} + + + +// Rules --------- + +body { + margin: 0; + display: flex; + justify-content: center; + min-height: 100vh; + min-width: 375px; + color: $light-theme-fgd; + background: $light-theme-bgd; + font-family: 'Barlow', sans-serif; + font-size: 14px; + transition: $transition; + &[data-theme='dark'] { + color: $dark-theme-fgd; + background: $dark-theme-bgd; + } +} + +.layout { + display: grid; + grid-template-rows: 20fr auto 21fr; // +1fr to shift icons up to optical center + grid-template-columns: 1fr 2fr 1fr; + grid-template-areas: + "header header header" + ". icons ." + "footer footer footer"; + justify-items: center; + min-height: 192px; + flex: 1 0 0; + max-width: 1200px; +} + +.icons { + display: flex; + grid-area: icons; + button { + all: unset; + position: relative; + cursor: pointer; + @media (hover: hover) { + &::before { + // hover background + // Making this a (psuedo) child of label helps with transitions sync, however pseudo elements revealed on hover + // sometimes require an additional touch on mobile devices, so disabed in this case + content: ''; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + opacity: 0; + background: $light-theme-bgd-stronger; + z-index: -1; + border-radius: 10%; + transition: $transition; + [data-theme='dark'] & { + background: $dark-theme-bgd-stronger; + } + } + } + &:hover { + svg, &::before { + opacity: 1; + } + svg { + color: $icon-color-a-light; + fill: $icon-color-a-dark; + } + } + &.alt:hover { + svg { + color: $icon-color-b-light; + fill: $icon-color-b-dark; + } + } + } +} + +svg { + color: $light-theme-icon-light; + fill: $light-theme-icon-dark; + @extend %svg-safari-jiggle-fix; + [data-theme='dark'] & { + color: $dark-theme-icon-light; + fill: $dark-theme-icon-dark; + } + &.defs { + position: absolute; + height: 0; + width: 0; + } + &.icon { + width: 60%; + margin: 20%; + opacity: .6; + transition: $transition; + } +} + +.segmented-control { + grid-area: header; + align-self: start; + display: flex; + width: 144px; + margin: 27px 0; + height: 27px; + border-radius: 5px; + background: $light-theme-bgd-stronger; + z-index: 1; + transition: $transition; + [data-theme='dark'] & { + background: $dark-theme-bgd-stronger; + label { + color: $dark-theme-fgd-weaker; + &:last-child::before { + background-color: $dark-theme-bgd; + } + } + } + input { + position: absolute; + transform: scale(0); // not 'hidden' for better accessibilty + &:checked + label { + color: inherit; + ~ label:last-child::before { + // if first radio checked shift background of last radio left + // this approach can be extended to 3 or 4 segments, but gets messy beyond 4 + // 3 value control example can be found here: https://codepen.io/scootman/pen/qBEPoLO + transform: translate(-100%); + } + } + } + label { + flex: 1 0 0px; + display: flex; + justify-content: center; + align-items: center; + position: relative; + padding-bottom: 1px; + color: $light-theme-fgd-weaker; + transition: $transition; + cursor: pointer; + &:hover { + color: inherit; + } + &:last-child::before { + // checked background + // placed on light item so it can 'detect' if radios are check before it in the DOM & + // and allows for sliding transition effect + content: ''; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + background-clip: padding-box; + background-color: $light-theme-bgd; + border-radius: 5px; + border: 2px solid transparent; + z-index: -1; + transition: transform .25s ease-in-out, background-color .1s ease-in-out ; + } + } +} + + +.links { + grid-area: footer; + align-self: end; + display: flex; + opacity: .55; + a { + all: unset; + cursor: pointer; + margin: 27px 0; + padding: 0 .5em; + color: $light-theme-fgd-weaker; + transition: $transition; + [data-theme='dark'] & { + color: $dark-theme-fgd-weaker; + } + &:hover { + color: inherit; + } + } +} + diff --git a/cafe-menu-interactive-codepen-challenge/README.markdown b/cafe-menu-interactive-codepen-challenge/README.markdown new file mode 100644 index 0000000..6b8a73b --- /dev/null +++ b/cafe-menu-interactive-codepen-challenge/README.markdown @@ -0,0 +1,19 @@ +# Cafe Menu Interactive Codepen challenge + +A Pen created on CodePen.io. Original URL: [https://codepen.io/toruskit/pen/bGWNYjj](https://codepen.io/toruskit/pen/bGWNYjj). + +Magazine Layout design for Codepen challenge. CSS interactions are made with [Torus Kit] (https://toruskit.com). + +Animations are done with this super simple HTML code: + +```html +data-tor-group=" +h2 => active(p):reveal(up) slow quad wait(400ms); + +.prices span => active(p):[pull.right(md) fade.in] slow wait(500ms) delay(/+100ms/); + +hr => active(p):scale.from(0) origin.left slow wait(500ms); + +.product => active(p):[fade.in pull.up(md)] slower wait(500ms) delay(/+100ms/); +" +``` diff --git a/cafe-menu-interactive-codepen-challenge/dist/index.html b/cafe-menu-interactive-codepen-challenge/dist/index.html new file mode 100644 index 0000000..20c9c61 --- /dev/null +++ b/cafe-menu-interactive-codepen-challenge/dist/index.html @@ -0,0 +1,350 @@ + + + + + CodePen - Cafe Menu Interactive Codepen challenge + + + + + + + + + +
+
+ + +
+
+ +
+
+
+
+

The Cascade Cafe

+ +
+
+
+ + + +
+ +

123 Main Street
Smalltown, PA

+ +
+ + + +
+ 412-555-0100 +
+ + + + + + + + + + + + + + + + +
Mon. - Thurs.6 a.m. - 9 p.m.
Fri. - Sat.6 a.m. - 11 p.m.
Sunday8 a.m. - 2 p.m.
+
+ +
+ three hands toasting with coffee drinks +
+
+
+ + + + +
+
+ +
+
+ + + + + + diff --git a/cafe-menu-interactive-codepen-challenge/dist/style.css b/cafe-menu-interactive-codepen-challenge/dist/style.css new file mode 100644 index 0000000..c9f1ec7 --- /dev/null +++ b/cafe-menu-interactive-codepen-challenge/dist/style.css @@ -0,0 +1,56 @@ +body { + background-color: #29372a; + color: #fff; + font-family: "Poppins", sans-serif; + min-height: 200%; +} + +html, +body { + margin: 0; + padding: 0; + height: 100%; +} + +strong, +.fw-700 { + font-weight: 700; +} + +h1, +h2, +h3, +.h3, +.number { + font-family: "Abril Fatface", cursive; +} + +h1 { + font-size: clamp(1rem, calc(6vmin + 6vmax), 10rem); + line-height: 0.8; +} + +h2 { + font-size: clamp(1rem, calc(3vmin + 3vmax), 5rem); +} + +.h3, +h3 { + font-size: 1.5rem; +} + +.number { + font-size: clamp(1rem, calc(2vmin + 2vmax), 3.75rem); +} + +[data-tor-slider-target] { + background-color: #ecbf7f; +} + +#address { + background-color: #415444; +} + +.list { + column-count: 2; +} \ No newline at end of file diff --git a/cafe-menu-interactive-codepen-challenge/license.txt b/cafe-menu-interactive-codepen-challenge/license.txt new file mode 100644 index 0000000..3fb90d2 --- /dev/null +++ b/cafe-menu-interactive-codepen-challenge/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Andrew (https://codepen.io/toruskit/pen/bGWNYjj) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/cafe-menu-interactive-codepen-challenge/src/index.html b/cafe-menu-interactive-codepen-challenge/src/index.html new file mode 100644 index 0000000..0da3bd0 --- /dev/null +++ b/cafe-menu-interactive-codepen-challenge/src/index.html @@ -0,0 +1,325 @@ +
+
+ + +
+
+ +
+
+
+
+

The Cascade Cafe

+ +
+
+
+ + + +
+ +

123 Main Street
Smalltown, PA

+ +
+ + + +
+ 412-555-0100 +
+ + + + + + + + + + + + + + + + +
Mon. - Thurs.6 a.m. - 9 p.m.
Fri. - Sat.6 a.m. - 11 p.m.
Sunday8 a.m. - 2 p.m.
+
+ +
+ three hands toasting with coffee drinks +
+
+
+ + + + +
+
+ +
+
+ + \ No newline at end of file diff --git a/cafe-menu-interactive-codepen-challenge/src/style.css b/cafe-menu-interactive-codepen-challenge/src/style.css new file mode 100644 index 0000000..ee770ca --- /dev/null +++ b/cafe-menu-interactive-codepen-challenge/src/style.css @@ -0,0 +1,56 @@ +body { + background-color: #29372a; + color: #fff; + font-family: "Poppins", sans-serif; + min-height: 200%; +} + +html, +body { + margin: 0; + padding: 0; + height: 100%; +} + +strong, +.fw-700 { + font-weight: 700; +} + +h1, +h2, +h3, +.h3, +.number { + font-family: "Abril Fatface", cursive; +} + +h1 { + font-size: clamp(1rem, calc(6vmin + 6vmax), 10rem); + line-height: 0.8; +} + +h2 { + font-size: clamp(1rem, calc(3vmin + 3vmax), 5rem); +} + +.h3, +h3 { + font-size: 1.5rem; +} + +.number { + font-size: clamp(1rem, calc(2vmin + 2vmax), 3.75rem); +} + +[data-tor-slider-target] { + background-color: #ecbf7f; +} + +#address { + background-color: #415444; +} + +.list { + column-count: 2; +} diff --git a/calm-in-the-iridescence/README.markdown b/calm-in-the-iridescence/README.markdown new file mode 100644 index 0000000..166cae9 --- /dev/null +++ b/calm-in-the-iridescence/README.markdown @@ -0,0 +1,5 @@ +# Calm in the Iridescence + +A Pen created on CodePen.io. Original URL: [https://codepen.io/darrylhuffman/pen/rNWpmjP](https://codepen.io/darrylhuffman/pen/rNWpmjP). + + diff --git a/calm-in-the-iridescence/dist/index.html b/calm-in-the-iridescence/dist/index.html new file mode 100644 index 0000000..09237a1 --- /dev/null +++ b/calm-in-the-iridescence/dist/index.html @@ -0,0 +1,32 @@ + + + + + CodePen - Calm in the Iridescence + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/calm-in-the-iridescence/dist/script.js b/calm-in-the-iridescence/dist/script.js new file mode 100644 index 0000000..02b9d9b --- /dev/null +++ b/calm-in-the-iridescence/dist/script.js @@ -0,0 +1,251 @@ +function perlin() { + return ` +#ifdef GL_ES + precision highp float; + #endif + + #define PI 3.14159265359; + + uniform vec2 u_resolution; + uniform vec2 u_mouse; + uniform float u_time; + uniform float u_xpos; + uniform float u_ypos; + +vec3 mod289(vec3 x) { + return x - floor(x * (1.0 / 289.0)) * 289.0; +} + +vec4 mod289(vec4 x) { + return x - floor(x * (1.0 / 289.0)) * 289.0; +} + +vec4 permute(vec4 x) { + return mod289(((x*34.0)+1.0)*x); +} + +vec4 taylorInvSqrt(vec4 r) +{ + return 1.79284291400159 - 0.85373472095314 * r; +} + +float snoise(vec3 v) + { + const vec2 C = vec2(1.0/6.0, 1.0/3.0) ; + const vec4 D = vec4(0.0, 0.5, 1.0, 2.0); + + vec3 i = floor(v + dot(v, C.yyy) ); + vec3 x0 = v - i + dot(i, C.xxx) ; + + vec3 g = step(x0.yzx, x0.xyz); + vec3 l = 1.0 - g; + vec3 i1 = min( g.xyz, l.zxy ); + vec3 i2 = max( g.xyz, l.zxy ); + + vec3 x1 = x0 - i1 + C.xxx; + vec3 x2 = x0 - i2 + C.yyy; + vec3 x3 = x0 - D.yyy; + + i = mod289(i); + vec4 p = permute( permute( permute( + i.z + vec4(0.0, i1.z, i2.z, 1.0 )) + + i.y + vec4(0.0, i1.y, i2.y, 1.0 )) + + i.x + vec4(0.0, i1.x, i2.x, 1.0 )); + + float n_ = 0.142857142857; + vec3 ns = n_ * D.wyz - D.xzx; + + vec4 j = p - 49.0 * floor(p * ns.z * ns.z); + + vec4 x_ = floor(j * ns.z); + vec4 y_ = floor(j - 7.0 * x_ ); + + vec4 x = x_ *ns.x + ns.yyyy; + vec4 y = y_ *ns.x + ns.yyyy; + vec4 h = 1.0 - abs(x) - abs(y); + + vec4 b0 = vec4( x.xy, y.xy ); + vec4 b1 = vec4( x.zw, y.zw ); + + vec4 s0 = floor(b0)*2.0 + 1.0; + vec4 s1 = floor(b1)*2.0 + 1.0; + vec4 sh = -step(h, vec4(0.0)); + + vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ; + vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ; + + vec3 p0 = vec3(a0.xy,h.x); + vec3 p1 = vec3(a0.zw,h.y); + vec3 p2 = vec3(a1.xy,h.z); + vec3 p3 = vec3(a1.zw,h.w); + + vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3))); + p0 *= norm.x; + p1 *= norm.y; + p2 *= norm.z; + p3 *= norm.w; + + vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0); + m = m * m; + return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1), + dot(p2,x2), dot(p3,x3) ) ); + } +`; +} + +const shaders = { + cloth: { + vertex: ` + +uniform float time; + +varying vec3 vUv; + +${perlin()} + +void main() { + vec3 p = position; + float e = sin(snoise(vec3(p.xy * .15, time * 0.1)) * 10.) * .5; + + p.z += e; + + + vec4 modelViewPosition = modelViewMatrix * vec4(p, 1.0); + vUv = p; + gl_Position = projectionMatrix * modelViewPosition; +} + +`, + fragment: ` + +uniform vec3 camera; +uniform float time; + +varying vec3 vUv; + +vec3 hsv2rgb(vec3 c) +{ + vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} + +void main() { + float d = dot(camera, normalize(vUv)) / 3.1415; + vec3 c = hsv2rgb(vec3(d, 1., 1.)); + c = mix(vec3(1., 0., 1.), c, .75); + + gl_FragColor = vec4(c * 0.29, 1.0); +} + +` } }; + + + + + +const scene = new THREE.Scene(), +width = window.innerWidth, +height = window.innerHeight, +camera = new THREE.PerspectiveCamera(45, width / height, 0.1, 1000), +renderer = new THREE.WebGLRenderer(), +startTime = new Date().getTime(), +timeOffset = 15; + +var composer, outlinePass; + +let currentTime = 0; + +renderer.setSize(window.innerWidth, window.innerHeight); +document.body.appendChild(renderer.domElement); + +let CameraHolder = new THREE.Object3D(); +CameraHolder.add(camera); +scene.add(CameraHolder); + + +composer = new THREE.EffectComposer(renderer); + +var renderPass = new THREE.RenderPass(scene, camera); +composer.addPass(renderPass); + +outlinePass = new THREE.OutlinePass(new THREE.Vector2(window.innerWidth, window.innerHeight), scene, camera); +composer.addPass(outlinePass); + + +let bloomPass = new THREE.UnrealBloomPass(new THREE.Vector2(width, height), 1.5, .4, .85); +renderer.toneMappingExposure = 1; +bloomPass.threshold = 0; +bloomPass.strength = 1.5; +bloomPass.radius = 1.5; +composer.addPass(bloomPass); + +/* +let filmPass = new THREE.FilmPass(0.34, 0.025, 256, false); +composer.addPass(filmPass); + +outlinePass.edgeStrength = 3 +outlinePass.edgeThickness = 1 +outlinePass.edgeGlow = 0 +outlinePass.visibleEdgeColor.set('#ffffff') +outlinePass.hiddenEdgeColor.set('#ffffff') +outlinePass.BlurDirectionX = new THREE.Vector2(0.0, 0.0) +outlinePass.BlurDirectionY = new THREE.Vector2(0.0, 0.0) +*/ + +let uniforms = { + camera: { value: camera.position }, + time: { value: 0 } }; + + +let length = 60, +cameraZ = 5; + +var geometry = new THREE.PlaneGeometry(length * 1.2, length, 600, 600); +//var geometry = new THREE.SphereGeometry( 1, 100, 100 ); +let material = new THREE.ShaderMaterial({ + uniforms: uniforms, + fragmentShader: shaders.cloth.fragment, + vertexShader: shaders.cloth.vertex }); + +var plane = new THREE.Mesh(geometry, material); +scene.add(plane); + +plane.rotation.x = Math.PI * 1.5; +plane.position.y = -6; +plane.position.z = -(length * .3); + +var plane2 = new THREE.Mesh(geometry, material); +scene.add(plane2); + +plane2.rotation.x = Math.PI * .15; +plane2.position.z = -length * .25; + +camera.position.z = length * .5 - cameraZ / 2; + +const sgeom = new THREE.SphereGeometry(3, 50, 50); +const smat = new THREE.MeshBasicMaterial({ color: 0x000000 }); +const sphere = new THREE.Mesh(sgeom, smat); +scene.add(sphere); + +function animate() { + var now = new Date().getTime(); + currentTime = (now - startTime) / 1000; + let t = currentTime + timeOffset; + + CameraHolder.updateMatrixWorld(); + camera.updateMatrixWorld(); + var vector = camera.position.clone(); + vector.applyMatrix4(camera.matrixWorld); + + uniforms.time.value = t; + uniforms.camera.value = vector; + + //CameraHolder.rotation.y = t * 0.1 + CameraHolder.rotation.x = -.1 + Math.cos(t * 0.15) * (Math.PI * .01); + + requestAnimationFrame(animate); + //renderer.render(scene, camera) + composer.render(); +} +animate(); \ No newline at end of file diff --git a/calm-in-the-iridescence/dist/style.css b/calm-in-the-iridescence/dist/style.css new file mode 100644 index 0000000..3bf3706 --- /dev/null +++ b/calm-in-the-iridescence/dist/style.css @@ -0,0 +1,9 @@ +body { + margin: 0; +} + +canvas { + position: absolute; + top: 0px; + left: 0px; +} \ No newline at end of file diff --git a/calm-in-the-iridescence/license.txt b/calm-in-the-iridescence/license.txt new file mode 100644 index 0000000..75215f6 --- /dev/null +++ b/calm-in-the-iridescence/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Darryl Huffman (https://codepen.io/darrylhuffman/pen/rNWpmjP) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/calm-in-the-iridescence/src/index.html b/calm-in-the-iridescence/src/index.html new file mode 100644 index 0000000..b02dbbb --- /dev/null +++ b/calm-in-the-iridescence/src/index.html @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/calm-in-the-iridescence/src/script.babel b/calm-in-the-iridescence/src/script.babel new file mode 100644 index 0000000..3141e4a --- /dev/null +++ b/calm-in-the-iridescence/src/script.babel @@ -0,0 +1,251 @@ +function perlin(){ + return ` +#ifdef GL_ES + precision highp float; + #endif + + #define PI 3.14159265359; + + uniform vec2 u_resolution; + uniform vec2 u_mouse; + uniform float u_time; + uniform float u_xpos; + uniform float u_ypos; + +vec3 mod289(vec3 x) { + return x - floor(x * (1.0 / 289.0)) * 289.0; +} + +vec4 mod289(vec4 x) { + return x - floor(x * (1.0 / 289.0)) * 289.0; +} + +vec4 permute(vec4 x) { + return mod289(((x*34.0)+1.0)*x); +} + +vec4 taylorInvSqrt(vec4 r) +{ + return 1.79284291400159 - 0.85373472095314 * r; +} + +float snoise(vec3 v) + { + const vec2 C = vec2(1.0/6.0, 1.0/3.0) ; + const vec4 D = vec4(0.0, 0.5, 1.0, 2.0); + + vec3 i = floor(v + dot(v, C.yyy) ); + vec3 x0 = v - i + dot(i, C.xxx) ; + + vec3 g = step(x0.yzx, x0.xyz); + vec3 l = 1.0 - g; + vec3 i1 = min( g.xyz, l.zxy ); + vec3 i2 = max( g.xyz, l.zxy ); + + vec3 x1 = x0 - i1 + C.xxx; + vec3 x2 = x0 - i2 + C.yyy; + vec3 x3 = x0 - D.yyy; + + i = mod289(i); + vec4 p = permute( permute( permute( + i.z + vec4(0.0, i1.z, i2.z, 1.0 )) + + i.y + vec4(0.0, i1.y, i2.y, 1.0 )) + + i.x + vec4(0.0, i1.x, i2.x, 1.0 )); + + float n_ = 0.142857142857; + vec3 ns = n_ * D.wyz - D.xzx; + + vec4 j = p - 49.0 * floor(p * ns.z * ns.z); + + vec4 x_ = floor(j * ns.z); + vec4 y_ = floor(j - 7.0 * x_ ); + + vec4 x = x_ *ns.x + ns.yyyy; + vec4 y = y_ *ns.x + ns.yyyy; + vec4 h = 1.0 - abs(x) - abs(y); + + vec4 b0 = vec4( x.xy, y.xy ); + vec4 b1 = vec4( x.zw, y.zw ); + + vec4 s0 = floor(b0)*2.0 + 1.0; + vec4 s1 = floor(b1)*2.0 + 1.0; + vec4 sh = -step(h, vec4(0.0)); + + vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ; + vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ; + + vec3 p0 = vec3(a0.xy,h.x); + vec3 p1 = vec3(a0.zw,h.y); + vec3 p2 = vec3(a1.xy,h.z); + vec3 p3 = vec3(a1.zw,h.w); + + vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3))); + p0 *= norm.x; + p1 *= norm.y; + p2 *= norm.z; + p3 *= norm.w; + + vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0); + m = m * m; + return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1), + dot(p2,x2), dot(p3,x3) ) ); + } +` +} + +const shaders = { + cloth: { + vertex: ` + +uniform float time; + +varying vec3 vUv; + +${perlin()} + +void main() { + vec3 p = position; + float e = sin(snoise(vec3(p.xy * .15, time * 0.1)) * 10.) * .5; + + p.z += e; + + + vec4 modelViewPosition = modelViewMatrix * vec4(p, 1.0); + vUv = p; + gl_Position = projectionMatrix * modelViewPosition; +} + +`, + fragment: ` + +uniform vec3 camera; +uniform float time; + +varying vec3 vUv; + +vec3 hsv2rgb(vec3 c) +{ + vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} + +void main() { + float d = dot(camera, normalize(vUv)) / 3.1415; + vec3 c = hsv2rgb(vec3(d, 1., 1.)); + c = mix(vec3(1., 0., 1.), c, .75); + + gl_FragColor = vec4(c * 0.29, 1.0); +} + +` + } +} + + + +const scene = new THREE.Scene(), + width = window.innerWidth, + height = window.innerHeight, + camera = new THREE.PerspectiveCamera( 45, width / height, 0.1, 1000 ), + renderer = new THREE.WebGLRenderer(), + startTime = new Date().getTime(), + timeOffset = 15 + +var composer, outlinePass; + +let currentTime = 0 + +renderer.setSize( window.innerWidth, window.innerHeight ) +document.body.appendChild( renderer.domElement ) + +let CameraHolder = new THREE.Object3D() +CameraHolder.add(camera) +scene.add(CameraHolder) + + +composer = new THREE.EffectComposer( renderer ) + +var renderPass = new THREE.RenderPass( scene, camera ); +composer.addPass( renderPass ); + +outlinePass = new THREE.OutlinePass(new THREE.Vector2(window.innerWidth, window.innerHeight ), scene, camera); +composer.addPass( outlinePass ); + + +let bloomPass = new THREE.UnrealBloomPass( new THREE.Vector2( width, height ), 1.5, .4, .85 ); +renderer.toneMappingExposure = 1; +bloomPass.threshold = 0; +bloomPass.strength = 1.5; +bloomPass.radius = 1.5; +composer.addPass(bloomPass); + +/* +let filmPass = new THREE.FilmPass(0.34, 0.025, 256, false); +composer.addPass(filmPass); + +outlinePass.edgeStrength = 3 +outlinePass.edgeThickness = 1 +outlinePass.edgeGlow = 0 +outlinePass.visibleEdgeColor.set('#ffffff') +outlinePass.hiddenEdgeColor.set('#ffffff') +outlinePass.BlurDirectionX = new THREE.Vector2(0.0, 0.0) +outlinePass.BlurDirectionY = new THREE.Vector2(0.0, 0.0) +*/ + +let uniforms = { + camera: { value: camera.position }, + time: { value: 0 } +} + +let length = 60, + cameraZ = 5 + +var geometry = new THREE.PlaneGeometry( length * 1.2, length, 600, 600 ); +//var geometry = new THREE.SphereGeometry( 1, 100, 100 ); +let material = new THREE.ShaderMaterial({ + uniforms: uniforms, + fragmentShader: shaders.cloth.fragment, + vertexShader: shaders.cloth.vertex + }) +var plane = new THREE.Mesh( geometry, material ); +scene.add( plane ); + +plane.rotation.x = Math.PI * 1.5 +plane.position.y = -6 +plane.position.z = -(length * .3) + +var plane2 = new THREE.Mesh( geometry, material ); +scene.add( plane2 ); + +plane2.rotation.x = Math.PI * .15 +plane2.position.z = -length * .25 + +camera.position.z = length*.5 - cameraZ/2 + +const sgeom = new THREE.SphereGeometry(3, 50, 50); +const smat = new THREE.MeshBasicMaterial({ color: 0x000000 }); +const sphere = new THREE.Mesh(sgeom, smat); +scene.add( sphere ); + +function animate() { + var now = new Date().getTime(); + currentTime = (now - startTime) / 1000; + let t = currentTime + timeOffset; + + CameraHolder.updateMatrixWorld(); + camera.updateMatrixWorld(); + var vector = camera.position.clone(); + vector.applyMatrix4( camera.matrixWorld ); + + uniforms.time.value = t; + uniforms.camera.value = vector; + + //CameraHolder.rotation.y = t * 0.1 + CameraHolder.rotation.x = -.1 + Math.cos(t * 0.15) * (Math.PI * .01) + + requestAnimationFrame(animate) + //renderer.render(scene, camera) + composer.render() +} +animate() \ No newline at end of file diff --git a/calm-in-the-iridescence/src/style.scss b/calm-in-the-iridescence/src/style.scss new file mode 100644 index 0000000..a39e74e --- /dev/null +++ b/calm-in-the-iridescence/src/style.scss @@ -0,0 +1,2 @@ +body { margin: 0; } +canvas { position: absolute; top: 0px; left: 0px; } \ No newline at end of file diff --git a/candy-cane/README.markdown b/candy-cane/README.markdown new file mode 100644 index 0000000..c13d542 --- /dev/null +++ b/candy-cane/README.markdown @@ -0,0 +1,4 @@ +# Candy Cane + _A Pen created at CodePen.io. Original URL: [https://codepen.io/danwilson/pen/BayBWgr](https://codepen.io/danwilson/pen/BayBWgr). + + CSS Motion Path (Firefox 72+ and Chrome/newEdge/Blink) \ No newline at end of file diff --git a/candy-cane/dist/index.html b/candy-cane/dist/index.html new file mode 100644 index 0000000..2ed0b7f --- /dev/null +++ b/candy-cane/dist/index.html @@ -0,0 +1,59 @@ + + + + + Candy Cane + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/candy-cane/dist/script.js b/candy-cane/dist/script.js new file mode 100644 index 0000000..d23ae12 --- /dev/null +++ b/candy-cane/dist/script.js @@ -0,0 +1,50 @@ +const stripes = document.querySelectorAll('.stripe'); +const duration = 11000; +const offset = 12; +const offsetBase = 88; + +const getPath = () => `polygon(${Math.random()*offset*1.95}% ${Math.random()*offset}%, ${Math.random()*offset+offsetBase}% ${Math.random()*offset}%, ${Math.random()*offset+offsetBase}% ${Math.random()*offset+offsetBase}%, ${Math.random()*offset*1.95}% ${Math.random()*offset+offsetBase}%)`; + + + +stripes.forEach((stripe, i) => { + stripe.setAttribute('width',i%2===1 ? 18 : 24); + stripe.setAttribute('height',i%2===1 ?28:24); + stripe.animate({ + offsetDistance: ['0%', '100%'], + opacity: [0,1,1,1,1,1,1,0] + }, { + duration, + direction: 'reverse', + delay: -i / stripes.length * duration, + iterations: Infinity + }); + +// stripe.animate({ +// clipPath: [getPath(), getPath()] +// }, { +// duration: duration * Math.random() + duration / 12, +// direction: 'alternate', +// iterations: Infinity +// }); + +// stripe.animate({ +// transform: ['skewX(18deg)','skewX(6deg)'], +// }, { +// duration: Math.random() / 2 * duration / 12 + duration / 12, +// direction: 'alternate', +// iterations: Infinity +// }); +}); + + +// const drawn = document.getElementById('drawn').querySelector('feTurbulence'); +// let freq = 0.001; +// const filtered = () => { +// freq += 0.001; +// drawn.setAttribute('baseFrequency',freq); + +// requestAnimationFrame(filtered) +// } + +// requestAnimationFrame(filtered) \ No newline at end of file diff --git a/candy-cane/dist/style.css b/candy-cane/dist/style.css new file mode 100644 index 0000000..bfcece0 --- /dev/null +++ b/candy-cane/dist/style.css @@ -0,0 +1,44 @@ +body { + height: 100vh; + background: linear-gradient(108deg,hsl(233, 80%,18%),hsl(233, 80%,12%)); + overflow: hidden; + margin: 0; + display: flex; +} + +svg { + height: 80vmin; + width: 80vmin; + margin: auto; + transform: rotate(18deg); +} + +#toDraw { + filter: url(#drawn); +} + +#mint { + animation: r 3456ms infinite linear; + transform-origin: 50px 190px; +} + +.stripe { + transform-box: fill-box; + transform: skewX(18deg); + offset-path: path('M190,280 L190,80 C190,0 90,0 90,80'); + offset-anchor: center center; +} +.stripe:nth-child(odd) { + fill: white; +} + +@keyframes r { + 100% { + transform: rotate(-1turn); + } +} +@keyframes f { + 100% { + filter: url(#drawn2); + } +} \ No newline at end of file diff --git a/candy-cane/license.txt b/candy-cane/license.txt new file mode 100644 index 0000000..c63a719 --- /dev/null +++ b/candy-cane/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2019 by Dan Wilson (https://codepen.io/danwilson/pen/BayBWgr) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/candy-cane/src/index.html b/candy-cane/src/index.html new file mode 100644 index 0000000..d16b7c6 --- /dev/null +++ b/candy-cane/src/index.html @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/candy-cane/src/script.js b/candy-cane/src/script.js new file mode 100644 index 0000000..d23ae12 --- /dev/null +++ b/candy-cane/src/script.js @@ -0,0 +1,50 @@ +const stripes = document.querySelectorAll('.stripe'); +const duration = 11000; +const offset = 12; +const offsetBase = 88; + +const getPath = () => `polygon(${Math.random()*offset*1.95}% ${Math.random()*offset}%, ${Math.random()*offset+offsetBase}% ${Math.random()*offset}%, ${Math.random()*offset+offsetBase}% ${Math.random()*offset+offsetBase}%, ${Math.random()*offset*1.95}% ${Math.random()*offset+offsetBase}%)`; + + + +stripes.forEach((stripe, i) => { + stripe.setAttribute('width',i%2===1 ? 18 : 24); + stripe.setAttribute('height',i%2===1 ?28:24); + stripe.animate({ + offsetDistance: ['0%', '100%'], + opacity: [0,1,1,1,1,1,1,0] + }, { + duration, + direction: 'reverse', + delay: -i / stripes.length * duration, + iterations: Infinity + }); + +// stripe.animate({ +// clipPath: [getPath(), getPath()] +// }, { +// duration: duration * Math.random() + duration / 12, +// direction: 'alternate', +// iterations: Infinity +// }); + +// stripe.animate({ +// transform: ['skewX(18deg)','skewX(6deg)'], +// }, { +// duration: Math.random() / 2 * duration / 12 + duration / 12, +// direction: 'alternate', +// iterations: Infinity +// }); +}); + + +// const drawn = document.getElementById('drawn').querySelector('feTurbulence'); +// let freq = 0.001; +// const filtered = () => { +// freq += 0.001; +// drawn.setAttribute('baseFrequency',freq); + +// requestAnimationFrame(filtered) +// } + +// requestAnimationFrame(filtered) \ No newline at end of file diff --git a/candy-cane/src/style.css b/candy-cane/src/style.css new file mode 100644 index 0000000..bfcece0 --- /dev/null +++ b/candy-cane/src/style.css @@ -0,0 +1,44 @@ +body { + height: 100vh; + background: linear-gradient(108deg,hsl(233, 80%,18%),hsl(233, 80%,12%)); + overflow: hidden; + margin: 0; + display: flex; +} + +svg { + height: 80vmin; + width: 80vmin; + margin: auto; + transform: rotate(18deg); +} + +#toDraw { + filter: url(#drawn); +} + +#mint { + animation: r 3456ms infinite linear; + transform-origin: 50px 190px; +} + +.stripe { + transform-box: fill-box; + transform: skewX(18deg); + offset-path: path('M190,280 L190,80 C190,0 90,0 90,80'); + offset-anchor: center center; +} +.stripe:nth-child(odd) { + fill: white; +} + +@keyframes r { + 100% { + transform: rotate(-1turn); + } +} +@keyframes f { + 100% { + filter: url(#drawn2); + } +} \ No newline at end of file diff --git a/candy-stacker/README.markdown b/candy-stacker/README.markdown new file mode 100644 index 0000000..7fe270d --- /dev/null +++ b/candy-stacker/README.markdown @@ -0,0 +1,5 @@ +# Candy Stacker + +A Pen created on CodePen.io. Original URL: [https://codepen.io/pjkarlik/pen/ZEyKymB](https://codepen.io/pjkarlik/pen/ZEyKymB). + +Some work on timing / animation / stacking stuff. Probably have more around this theme - I like the mechanics / taking vec - time + traveled to change animation - GLSL Fragment Shader in HTML window / WebGL Bootstrap in JS wnidow diff --git a/candy-stacker/dist/index.html b/candy-stacker/dist/index.html new file mode 100644 index 0000000..ce4dbdc --- /dev/null +++ b/candy-stacker/dist/index.html @@ -0,0 +1,331 @@ + + + + + CodePen - Candy Stacker + + + + + + + + + +
+ + + + + diff --git a/candy-stacker/dist/script.js b/candy-stacker/dist/script.js new file mode 100644 index 0000000..8486e42 --- /dev/null +++ b/candy-stacker/dist/script.js @@ -0,0 +1,153 @@ +function _defineProperty(obj, key, value) {if (key in obj) {Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });} else {obj[key] = value;}return obj;}const swidth = 800; +const sheight = 450; + +// Boostrap for WebGL and Attaching Shaders // +// Fragment & Vertex Shaders in HTML window // +class Render { + constructor() {_defineProperty(this, "createShader", + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (type, source) => { + const shader = this.gl.createShader(type); + this.gl.shaderSource(shader, source); + this.gl.compileShader(shader); + const success = this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS); + if (!success) { + console.log(this.gl.getShaderInfoLog(shader)); + this.gl.deleteShader(shader); + return false; + } + return shader; + });_defineProperty(this, "createWebGL", + + (vertexSource, fragmentSource) => { + // Setup Vertext/Fragment Shader functions + this.vertexShader = this.createShader(this.gl.VERTEX_SHADER, vertexSource); + this.fragmentShader = this.createShader( + this.gl.FRAGMENT_SHADER, + fragmentSource); + + + // Setup Program and Attach Shader functions + this.program = this.gl.createProgram(); + this.gl.attachShader(this.program, this.vertexShader); + this.gl.attachShader(this.program, this.fragmentShader); + this.gl.linkProgram(this.program); + this.gl.useProgram(this.program); + + if (!this.gl.getProgramParameter(this.program, this.gl.LINK_STATUS)) { + console.warn( + "Unable to initialize the shader program: " + + this.gl.getProgramInfoLog(this.program)); + + return null; + } + + // Create and Bind buffer // + const buffer = this.gl.createBuffer(); + this.gl.bindBuffer(this.gl.ARRAY_BUFFER, buffer); + + this.gl.bufferData( + this.gl.ARRAY_BUFFER, + new Float32Array([-1, 1, -1, -1, 1, -1, 1, 1]), + this.gl.STATIC_DRAW); + + + const vPosition = this.gl.getAttribLocation(this.program, "vPosition"); + + this.gl.enableVertexAttribArray(vPosition); + this.gl.vertexAttribPointer( + vPosition, + 2, // size: 2 components per iteration + this.gl.FLOAT, // type: the data is 32bit floats + false, // normalize: don't normalize the data + 0, // stride: 0 = move forward size * sizeof(type) each iteration to get the next position + 0 // start at the beginning of the buffer + ); + + this.clearCanvas(); + this.importUniforms(); + });_defineProperty(this, "clearCanvas", + + () => { + this.gl.clearColor(0, 0, 0, 0); + this.gl.clear(this.gl.COLOR_BUFFER_BIT); + });_defineProperty(this, "importUniforms", + + + () => { + const width = swidth; + const height = sheight; + this.resolution = new Float32Array([width, height]); + this.gl.uniform2fv( + this.gl.getUniformLocation(this.program, "resolution"), + this.resolution); + + // get the uniform ins from the shader fragments + this.ut = this.gl.getUniformLocation(this.program, "time"); + });_defineProperty(this, "updateUniforms", + + + () => { + let tm = (Date.now() - this.start) / 1000; + //prevent time from getting too big + if (tm > 2000) this.start = Date.now(); + // this.gl.uniform1f(this.ut,150.230); + this.gl.uniform1f(this.ut, (Date.now() - this.start) / 1000); + + const factor = 0.15; + + this.gl.drawArrays( + this.gl.TRIANGLE_FAN, // primitiveType + 0, // Offset + 4 // Count + ); + });_defineProperty(this, "init", + + + () => { + this.createWebGL( + document.getElementById("vertexShader").textContent, + document.getElementById("fragmentShader").textContent); + + this.renderLoop(); + });_defineProperty(this, "renderLoop", + + () => { + this.updateUniforms(); + this.animation = window.requestAnimationFrame(this.renderLoop); + });this.start = Date.now(); // Setup WebGL canvas and surface object // + // Make Canvas and get WebGl2 Context // + let _width = swidth; //(this.width = ~~(document.documentElement.clientWidth,window.innerWidth || 0)); + let _height = sheight; //(this.height = ~~(document.documentElement.clientHeight,window.innerHeight || 0)); + const canvas = this.canvas = document.createElement("canvas");const container = document.getElementById("container");canvas.id = "GLShaders";canvas.width = _width;canvas.height = _height;document.body.appendChild(canvas);const gl = this.gl = canvas.getContext("webgl2");if (!gl) {console.warn("WebGL 2 is not available.");return;} // WebGl and WebGl2 Extension // + this.gl.getExtension("OES_standard_derivatives");this.gl.getExtension("EXT_shader_texture_lod");this.gl.getExtension("OES_texture_float");this.gl.getExtension("WEBGL_color_buffer_float");this.gl.getExtension("OES_texture_float_linear");this.gl.viewport(0, 0, canvas.width, canvas.height);this.init();} // Shader Bootstrap code // +}const demo = new Render(document.body); \ No newline at end of file diff --git a/candy-stacker/dist/style.css b/candy-stacker/dist/style.css new file mode 100644 index 0000000..15f68dc --- /dev/null +++ b/candy-stacker/dist/style.css @@ -0,0 +1,30 @@ +html { + height: 100%; +} +body { + background-color: #464646; + background-image: linear-gradient(30deg, #222222 12%, transparent 12.5%, transparent 87%, #222222 87.5%, #222222), linear-gradient(150deg, #222222 12%, transparent 12.5%, transparent 87%, #222222 87.5%, #222222), linear-gradient(30deg, #222222 12%, transparent 12.5%, transparent 87%, #222222 87.5%, #222222), linear-gradient(150deg, #222222 12%, transparent 12.5%, transparent 87%, #222222 87.5%, #222222), linear-gradient(60deg, #22222277 25%, transparent 25.5%, transparent 75%, #22222277 75%, #22222277), linear-gradient(60deg, #22222277 25%, transparent 25.5%, transparent 75%, #22222277 75%, #22222277); + background-size: 62px 109px; + background-position: 0 0, 0 0, 31px 54px, 31px 54px, 0 0, 31px 54px; + overflow: hidden; + padding: 0; + margin: 0; + width: 100%; + height: 100%; + min-height: 100vh; + display: flex; + align-items: center; +} +canvas { + box-sizing: border-box; + padding: 0; + margin: 0; + outline: none; + box-shadow: 2px 10px 13px rgba(0, 0, 0, 0.75); + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 800px; + height: 450px; +} \ No newline at end of file diff --git a/candy-stacker/license.txt b/candy-stacker/license.txt new file mode 100644 index 0000000..917f0b4 --- /dev/null +++ b/candy-stacker/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by pjkarlik (https://codepen.io/pjkarlik/pen/ZEyKymB) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/candy-stacker/src/index.html b/candy-stacker/src/index.html new file mode 100644 index 0000000..bd706d3 --- /dev/null +++ b/candy-stacker/src/index.html @@ -0,0 +1,316 @@ + + + + +
\ No newline at end of file diff --git a/candy-stacker/src/script.babel b/candy-stacker/src/script.babel new file mode 100644 index 0000000..9e8ad05 --- /dev/null +++ b/candy-stacker/src/script.babel @@ -0,0 +1,150 @@ +const swidth = 800; +const sheight = 450; + +// Boostrap for WebGL and Attaching Shaders // +// Fragment & Vertex Shaders in HTML window // +class Render { + constructor() { + this.start = Date.now(); + // Setup WebGL canvas and surface object // + // Make Canvas and get WebGl2 Context // + let width = swidth; //(this.width = ~~(document.documentElement.clientWidth,window.innerWidth || 0)); + let height = sheight; //(this.height = ~~(document.documentElement.clientHeight,window.innerHeight || 0)); + const canvas = (this.canvas = document.createElement("canvas")); + const container = document.getElementById("container"); + canvas.id = "GLShaders"; + + canvas.width = width; + canvas.height = height; + document.body.appendChild(canvas); + const gl = (this.gl = canvas.getContext("webgl2")); + + if (!gl) { + console.warn("WebGL 2 is not available."); + return; + } + // WebGl and WebGl2 Extension // + this.gl.getExtension("OES_standard_derivatives"); + this.gl.getExtension("EXT_shader_texture_lod"); + this.gl.getExtension("OES_texture_float"); + this.gl.getExtension("WEBGL_color_buffer_float"); + this.gl.getExtension("OES_texture_float_linear"); + this.gl.viewport(0, 0, canvas.width, canvas.height); + + this.init(); + } + + // Shader Bootstrap code // + createShader = (type, source) => { + const shader = this.gl.createShader(type); + this.gl.shaderSource(shader, source); + this.gl.compileShader(shader); + const success = this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS); + if (!success) { + console.log(this.gl.getShaderInfoLog(shader)); + this.gl.deleteShader(shader); + return false; + } + return shader; + }; + + createWebGL = (vertexSource, fragmentSource) => { + // Setup Vertext/Fragment Shader functions + this.vertexShader = this.createShader(this.gl.VERTEX_SHADER, vertexSource); + this.fragmentShader = this.createShader( + this.gl.FRAGMENT_SHADER, + fragmentSource + ); + + // Setup Program and Attach Shader functions + this.program = this.gl.createProgram(); + this.gl.attachShader(this.program, this.vertexShader); + this.gl.attachShader(this.program, this.fragmentShader); + this.gl.linkProgram(this.program); + this.gl.useProgram(this.program); + + if (!this.gl.getProgramParameter(this.program, this.gl.LINK_STATUS)) { + console.warn( + "Unable to initialize the shader program: " + + this.gl.getProgramInfoLog(this.program) + ); + return null; + } + + // Create and Bind buffer // + const buffer = this.gl.createBuffer(); + this.gl.bindBuffer(this.gl.ARRAY_BUFFER, buffer); + + this.gl.bufferData( + this.gl.ARRAY_BUFFER, + new Float32Array([-1, 1, -1, -1, 1, -1, 1, 1]), + this.gl.STATIC_DRAW + ); + + const vPosition = this.gl.getAttribLocation(this.program, "vPosition"); + + this.gl.enableVertexAttribArray(vPosition); + this.gl.vertexAttribPointer( + vPosition, + 2, // size: 2 components per iteration + this.gl.FLOAT, // type: the data is 32bit floats + false, // normalize: don't normalize the data + 0, // stride: 0 = move forward size * sizeof(type) each iteration to get the next position + 0 // start at the beginning of the buffer + ); + + this.clearCanvas(); + this.importUniforms(); + }; + + clearCanvas = () => { + this.gl.clearColor(0, 0, 0, 0); + this.gl.clear(this.gl.COLOR_BUFFER_BIT); + }; + + // add other uniforms here + importUniforms = () => { + const width = swidth; + const height = sheight; + this.resolution = new Float32Array([width, height]); + this.gl.uniform2fv( + this.gl.getUniformLocation(this.program, "resolution"), + this.resolution + ); + // get the uniform ins from the shader fragments + this.ut = this.gl.getUniformLocation(this.program, "time"); + }; + + // things that need to be updated per frame + updateUniforms = () => { + let tm = (Date.now() - this.start) / 1000; + //prevent time from getting too big + if (tm > 2000) this.start = Date.now(); + // this.gl.uniform1f(this.ut,150.230); + this.gl.uniform1f(this.ut, (Date.now() - this.start) / 1000); + + const factor = 0.15; + + this.gl.drawArrays( + this.gl.TRIANGLE_FAN, // primitiveType + 0, // Offset + 4 // Count + ); + }; + + // setup shaders and send to render loop + init = () => { + this.createWebGL( + document.getElementById("vertexShader").textContent, + document.getElementById("fragmentShader").textContent + ); + this.renderLoop(); + }; + + renderLoop = () => { + this.updateUniforms(); + this.animation = window.requestAnimationFrame(this.renderLoop); + }; +} + +const demo = new Render(document.body); diff --git a/candy-stacker/src/style.less b/candy-stacker/src/style.less new file mode 100644 index 0000000..2ebcd19 --- /dev/null +++ b/candy-stacker/src/style.less @@ -0,0 +1,80 @@ +html { + height: 100%; +} + +body { + background-color: #464646; + background-image: linear-gradient( + 30deg, + #222222 12%, + transparent 12.5%, + transparent 87%, + #222222 87.5%, + #222222 + ), + linear-gradient( + 150deg, + #222222 12%, + transparent 12.5%, + transparent 87%, + #222222 87.5%, + #222222 + ), + linear-gradient( + 30deg, + #222222 12%, + transparent 12.5%, + transparent 87%, + #222222 87.5%, + #222222 + ), + linear-gradient( + 150deg, + #222222 12%, + transparent 12.5%, + transparent 87%, + #222222 87.5%, + #222222 + ), + linear-gradient( + 60deg, + #22222277 25%, + transparent 25.5%, + transparent 75%, + #22222277 75%, + #22222277 + ), + linear-gradient( + 60deg, + #22222277 25%, + transparent 25.5%, + transparent 75%, + #22222277 75%, + #22222277 + ); + background-size: 62px 109px; + background-position: 0 0, 0 0, 31px 54px, 31px 54px, 0 0, 31px 54px; + + overflow: hidden; + padding: 0; + margin: 0; + width: 100%; + height: 100%; + min-height: 100vh; + display: flex; + align-items: center; +} + +canvas { + box-sizing: border-box; + padding: 0; + margin: 0; + outline: none; + box-shadow: 2px 10px 13px rgba(0, 0, 0, 0.75); + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 800px; + height: 450px; +} diff --git a/canvas-image-hover-interaction/README.markdown b/canvas-image-hover-interaction/README.markdown new file mode 100644 index 0000000..0698f7e --- /dev/null +++ b/canvas-image-hover-interaction/README.markdown @@ -0,0 +1,5 @@ +# Canvas Image Hover Interaction + +A Pen created on CodePen.io. Original URL: [https://codepen.io/dev_loop/pen/Bajvged](https://codepen.io/dev_loop/pen/Bajvged). + + diff --git a/canvas-image-hover-interaction/dist/index.html b/canvas-image-hover-interaction/dist/index.html new file mode 100644 index 0000000..174b4ab --- /dev/null +++ b/canvas-image-hover-interaction/dist/index.html @@ -0,0 +1,55 @@ + + + + + CodePen - Canvas Image Hover Interaction + + + + + + +
+
+
+
+
+
+
+ DESERT +
+
+ +
+
+
+
+
+ FOREST +
+
+ +
+
+
+
+
+ OCEAN +
+
+
+
+ +
+
Loading...
+
+ +
+ + +
+ + + + + diff --git a/canvas-image-hover-interaction/dist/script.js b/canvas-image-hover-interaction/dist/script.js new file mode 100644 index 0000000..f6c2acb --- /dev/null +++ b/canvas-image-hover-interaction/dist/script.js @@ -0,0 +1,628 @@ +// this might look cluttery on codepen, you can check the repo (below) +// GITHUB LINK --> https://github.com/devloop01/canvas-image-interaction + +// I added comments just in case you are exploring through the code. + +// ALL THE CARD OPTIONS LISTED BELOW --> +// 1. jumpToRandomPosition: If `true` the particles on every frame will jump to random position. Else the particles will move randomly without jumping. Defaults to `false` +// 2. growAndShrink: If `true` the particles will grow & shrink, it will grow .8 times larger than the radius. Defaults to `false` +// 3. fill: If `true` the particles are filled with the current pixel color that they are on, else they will be stroked for that same color. Defaults to `true` +// 4. bounceFromEdges: If `true` the particles will bounce back when they hit the (specified) edges, or else thay will continue their path from the opposite edges/walls. Defaults to `true`. +// 5. shape: You can specify what shape of the particles. Currently you can specify any one from the following, i.e. "circle", "square", "hexagon". If not specified then it defaults to "circle" +// 6. radius: You can specity the radius of the particles, defaults to "5" if not specified. +// 7. randomRadius: If `true` then the particles will have random radius, else defaults to `false` +// 8. maxRadius: You can specify the minimum radius of the particles, else defaults to "2" +// 9. minRadius: You can specify the maximum radius of the particles, else defaults to "5" +// 10. maxVelocity: You can specify the maximum velocity of the particles, else defaults to "8" + +// Okay that's it, that's all the options I could add. Play around and see what fits for you. +// Also please STAR this project if you think it's interesting, you can even fork it and make/add something new. + +console.clear(); + +const cards = Array.from(document.querySelectorAll(".card")); +const cardOptions = [ + { + imageURL: { + default: "https://source.unsplash.com/8xznAGy4HcY/400x600", + hovered: "https://source.unsplash.com/Xc6gtOwSMSA/400x600" + }, + totalParticles: 1500, + mouseRange: 80, + particlesConfig: { + jumpToRandomPosition: false, + fill: true, + randomRadius: true, + minRadius: 1, + maxRadius: 2 + } + }, + { + imageURL: { + default: "https://source.unsplash.com/wQImoykAwGs/400x600", + hovered: "https://source.unsplash.com/QsWG0kjPQRY/400x600" + }, + totalParticles: 2500, + particlesConfig: { + jumpToRandomPosition: true, + fill: true, + shape: "square", + radius: 2 + } + }, + { + imageURL: { + default: "https://source.unsplash.com/sLAk1guBG90/400x600", + hovered: "https://source.unsplash.com/xe-ss5Tg2mo/400x600" + }, + totalParticles: 2500, + particlesConfig: { + jumpToRandomPosition: false, + bounceFromEdges: false, + fill: false, + shape: "hexagon", + radius: 1 + } + } +]; + +const imageURLS = cardOptions + .map((option) => Object.values(option.imageURL)) + .flat(); + +// --------------------- CLASSES ---------------------------- + +class App { + init() { + // after all images are loaded remove loader + // (this is not the best way to do so but it gets the job done) + loadImages(imageURLS, (images) => { + // this array holds the images in a sub array + // i.e [img, img, img, img, img, img] ==> [[img, img], [img, img], [img, img]] + const splitedImagesArray = splitArray(images, 2); + + cards.forEach((card, index) => { + new Canvas({ + parent: card.querySelector(".card__image--inner"), + dimensions: { + width: card.getBoundingClientRect().width, + height: card.getBoundingClientRect().height + }, + ...cardOptions[index], + images: { + default: splitedImagesArray[index][0], + hovered: splitedImagesArray[index][1] + } + }); + }); + + // hide the loading wrapper + document.querySelector(".loading__wrapper").classList.add("hide"); + + // let the gsap animation begin + gsap + .timeline({ + delay: 0.8, + defaults: { + duration: 1.5, + stagger: 0.1, + ease: "expo.out" + } + }) + .fromTo( + cards.map((card) => card.querySelector(".card__image")), + { + translateY: "-100%" + }, + { + translateY: "0%" + } + ) + .fromTo( + cards.map((card) => card.querySelector(".card__image--inner")), + { + translateY: "100%" + }, + { + translateY: "0%" + }, + 0 + ) + .fromTo( + cards.map((card) => card.querySelector(".card__text--inner")), + { + translateY: "100%" + }, + { + duration: 1.2, + translateY: "0%" + }, + 0.4 + ); + }); + } +} + +class Canvas { + constructor(options = {}) { + // the parent where the canvas will be appended + this.parent = options.parent; + + // canvas dimensions + this.dimensions = options.dimensions; + + // all imageURL's, images(optional) & imagesData that are required + this.imageURL = options.imageURL || {}; + this.images = options.images || {}; + this.imagesData = options.imagesData || { + default: null, + hovered: null + }; + this.currentImageData = null; + + // Array where all the particles will be stored + this.particles = null; + this.totalParticles = options.totalParticles || 400; + + // boolean which changes to 'true' when hovered, oe else false + this.hovered = false; + + // particles configs + this.particlesConfig = options.particlesConfig; + + // mouse range and mouse particle instance + this.mouseRange = options.mouseRange || null; + this.mouse = null; + + // initialize the canvas + this.init(); + } + + init() { + // create the canvas element + this.canvas = document.createElement("canvas"); + // get the canvas context + this.ctx = this.canvas.getContext("2d"); + // set the canvas dimensions + this.canvas.width = this.dimensions.width; + this.canvas.height = this.dimensions.height; + + const initialize = () => { + // this variable holds the current image data + this.currentImageData = this.imagesData.default; + + // add many Particle instances + this.addParticles(this.totalParticles); + // start rendering the canvas + this.startRender(); + // initialize all the canvas events + this.initEvents(); + // append the canvas on the parent + this.parent.appendChild(this.canvas); + }; + + // what happens here is if the user/dev provides the loaded image directly then use the images provided by the use directly + // and if the user provides the URL for the image then load the images from the URL and initialize + if ( + !this.images.hasOwnProperty("default") && + !this.images.hasOwnProperty("hovered") + ) { + // load all the images that are required and after all the images are loaded the callback is called. + loadImages([this.imageURL.default, this.imageURL.hovered], (images) => { + // set the image data so that they can be accessed later when needed + this.imagesData.default = returnImageData(images[0], this.dimensions); + this.imagesData.hovered = returnImageData(images[1], this.dimensions); + initialize(); + }); + } else { + // set the image data so that they can be accessed later when needed + this.imagesData.default = returnImageData( + this.images.default, + this.dimensions + ); + this.imagesData.hovered = returnImageData( + this.images.hovered, + this.dimensions + ); + initialize(); + } + + // init mouse particle + if (this.mouseRange != null) { + this.mouse = new Particle({ + ctx: this.ctx, + position: { + x: 0, + y: 0 + }, + radius: this.mouseRange, + color: "#000", + avoisEdges: true, + shape: "circle" + }); + } + } + + initEvents() { + const onMouseEnter = () => { + this.hovered = true; + this.currentImageData = this.imagesData.hovered; + }; + const onMouseLeave = () => { + this.hovered = false; + this.currentImageData = this.imagesData.default; + }; + const onMouseMove = (e) => { + if (this.mouse != null && this.hovered) { + this.mouse.position.x = e.offsetX; + this.mouse.position.y = e.offsetY; + } + }; + + this.canvas.addEventListener("mouseenter", onMouseEnter); + this.canvas.addEventListener("mouseleave", onMouseLeave); + this.canvas.addEventListener("mousemove", onMouseMove); + } + + addParticles(n) { + this.particles = new Particles({ + ctx: this.ctx, + totalParticles: n, + maxBounds: { width: this.dimensions.width, height: this.dimensions.height }, + imageData: this.currentImageData, + particlesConfig: this.particlesConfig + }); + } + + updateParticleColor(imageData, particle) { + const color = returnPixelColor(imageData, Math.floor(this.dimensions.width), { + x: Math.floor(particle.position.x), + y: Math.floor(particle.position.y) + }); + particle.updateColor(color); + } + + startRender() { + requestAnimationFrame(() => this.render()); + } + + render() { + // this.ctx.clearRect(0, 0, this.dimensions.width, this.dimensions.height); + + // loop through all the particles + this.particles.particles.forEach((particle) => { + if (this.mouseRange != null) { + // if the mouse range is not null then calculate the dist between mouse particle & all the other particles + const d = dist(this.mouse.position, particle.position); + // if the dist between the particles is less than the summation of the radius of the mouse particle & the other particle, that means they are intersecting + if (d < this.mouse.radius + particle.radius && this.hovered) { + // update the color of the intersecting particle only if mouse is hovered + this.updateParticleColor(this.imagesData.hovered, particle); + } + // else update every other particle too + else this.updateParticleColor(this.imagesData.default, particle); + } + // if the mouserange is null then update all particles at once + else this.updateParticleColor(this.currentImageData, particle); + }); + + this.particles.update(); + + requestAnimationFrame(() => this.render()); + } +} + +class Particles { + constructor(options = {}) { + this.ctx = options.ctx; // canvas context + this.totalParticles = options.totalParticles; + this.maxBounds = options.maxBounds; + this.imageData = options.imageData; + + // array that holds all the particles + this.particles = []; + + // all the particles config + this.particlesConfig = { + jumpToRandomPosition: options.particlesConfig.hasOwnProperty( + "jumpToRandomPosition" + ) + ? options.particlesConfig.jumpToRandomPosition + : false, + growAndShrink: options.particlesConfig.hasOwnProperty("growAndShrink") + ? options.particlesConfig.growAndShrink + : false, + fill: options.particlesConfig.hasOwnProperty("fill") + ? options.particlesConfig.fill + : true, + bounceFromEdges: options.particlesConfig.hasOwnProperty("bounceFromEdges") + ? options.particlesConfig.bounceFromEdges + : true, + shape: options.particlesConfig.hasOwnProperty("shape") + ? options.particlesConfig.shape + : "circle", + radius: options.particlesConfig.hasOwnProperty("radius") + ? options.particlesConfig.radius + : 5, + randomRadius: options.particlesConfig.hasOwnProperty("randomRadius") + ? options.particlesConfig.randomRadius + : false, + maxRadius: options.particlesConfig.hasOwnProperty("maxRadius") + ? options.particlesConfig.maxRadius + : 5, + minRadius: options.particlesConfig.hasOwnProperty("minRadius") + ? options.particlesConfig.minRadius + : 2, + maxVelocity: options.particlesConfig.hasOwnProperty("maxVelocity") + ? options.particlesConfig.maxVelocity + : 8 + }; + + this.init(); + } + + init() { + const ctx = this.ctx; + const color = "transparent"; + for (let i = 0; i < this.totalParticles; i++) { + const radius = this.particlesConfig.randomRadius + ? randomIntegerFromRange( + this.particlesConfig.minRadius, + this.particlesConfig.maxRadius + ) + : this.particlesConfig.radius; + const position = { + x: randomIntegerFromRange(radius, this.maxBounds.width - radius), + y: randomIntegerFromRange(radius, this.maxBounds.height - radius) + }; + this.particles.push( + new Particle({ + ctx, + position, + radius, + color, + imageData: this.imageData, + maxVelocity: 8, + bounceFromEdges: this.particlesConfig.bounceFromEdges, + shape: this.particlesConfig.shape, + edges: { width: this.maxBounds.width, height: this.maxBounds.height } + }) + ); + } + } + + update() { + // loop through particles, draw & update each particle + this.particles.forEach((particle) => { + particle.draw(); + if (this.particlesConfig.fill) particle.fillShape(); + else particle.strokeShape(); + + particle.update(); + + if (this.particlesConfig.growAndShrink) + particle.growAndShrink(particle.minRadius * 0.65); + + if (!this.particlesConfig.jumpToRandomPosition) particle.updatePosition(); + else + particle.jumpToRandomPosition({ + width: this.maxBounds.width, + height: this.maxBounds.height + }); + }); + } +} + +class Particle { + constructor(options = {}) { + this.ctx = options.ctx; + + this.position = options.position || { + x: 0, + y: 0 + }; + this.maxVelocity = options.maxVelocity || 5; + this.velocity = options.velocity || { + x: (0.5 - Math.random()) * this.maxVelocity, + y: (0.5 - Math.random()) * this.maxVelocity + }; + + this.radius = options.radius; + this.minRadius = this.radius; + + this.color = options.color; + + this.imageData = options.imageData; + + this.rotation = 0; + this.rotationIncrement = randomIntegerFromRange(2, 5); + + this.stroke = false; + this.fill = true; + + this.shape = options.shape || "circle"; + + this.edges = options.edges || null; + this.bounceFromEdges = options.bounceFromEdges; + this.avoidEdges = options.avoidEdges || false; + + this.tick = 0; + this.tickIncrement = 0.02 + Math.random() * 0.03; + } + + draw() { + this.ctx.beginPath(); + this.ctx.save(); + this.ctx.translate(this.position.x, this.position.y); + this.ctx.rotate((Math.PI / 180) * this.rotation); + this.drawShape(this.shape); + this.ctx.restore(); + this.ctx.closePath(); + } + + fillShape() { + this.ctx.fillStyle = this.color; + this.ctx.fill(); + } + + strokeShape() { + this.ctx.strokeStyle = this.color; + this.ctx.stroke(); + } + + drawShape(shape) { + if (shape === "square") + this.ctx.rect(-this.radius / 2, -this.radius / 2, this.radius, this.radius); + else if (shape === "circle") this.ctx.arc(0, 0, this.radius, 0, Math.PI * 2); + else if (shape === "hexagon") { + this.ctx.moveTo(this.radius * Math.cos(0), this.radius * Math.sin(0)); + for (let side = 0; side < 7; side++) { + this.ctx.lineTo( + this.radius * Math.cos((side * 2 * Math.PI) / 6), + this.radius * Math.sin((side * 2 * Math.PI) / 6) + ); + } + } + } + + update() { + if (this.bounceFromEdges) this.changeVelocityOnBounce(this.edges); + else this.continueFromEdge(); + + this.rotation += this.rotationIncrement; + this.tick += this.tickIncrement; + } + + updatePosition() { + this.position.x += this.velocity.x; + this.position.y += this.velocity.y; + } + + jumpToRandomPosition(bounds) { + this.position.x = Math.random() * bounds.width; + this.position.y = Math.random() * bounds.height; + } + + growAndShrink(max) { + this.radius = this.minRadius + Math.abs(Math.sin(this.tick)) * max; + } + + updateColor(color) { + this.color = color; + } + + continueFromEdge() { + if (!this.avoidEdges) { + if (this.position.x > this.edges.width) this.position.x = 0; + else if (this.position.x < 0) this.position.x = this.edges.width; + if (this.position.y > this.edges.height) this.position.y = 0; + else if (this.position.y < 0) this.position.y = this.edges.height; + } + } + + changeVelocityOnBounce() { + if (!this.avoidEdges) { + if ( + this.position.x + this.radius > this.edges.width || + this.position.x - this.radius < 0 + ) + this.velocity.x *= -1; + if ( + this.position.y + this.radius > this.edges.height || + this.position.y - this.radius < 0 + ) + this.velocity.y *= -1; + } + } +} + +// ---------------- UTILITY FUNCTIONS ------------------------ + +function randomIntegerFromRange(min, max) { + return Math.floor(Math.random() * (max - min + 1) + min); +} + +function dist(a, b) { + return Math.sqrt(Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2)); +} + +function splitArray(array, n) { + let [...arr] = array; + var res = []; + while (arr.length) { + res.push(arr.splice(0, n)); + } + return res; +} + +function returnPixelColor(imageData, width, position) { + const index = (position.x + position.y * width) * 4; + let pixel = { + r: imageData.data[index + 0], + g: imageData.data[index + 1], + b: imageData.data[index + 2] + }; + return `rgb(${pixel.r}, ${pixel.g}, ${pixel.b})`; +} + +function toDataURL(url) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.onload = function () { + var reader = new FileReader(); + reader.onloadend = function () { + resolve(reader.result); + }; + reader.readAsDataURL(xhr.response); + }; + xhr.onerror = reject; + xhr.open("GET", url); + xhr.responseType = "blob"; + xhr.send(); + }); +} + +function returnImageData(image, dimensions) { + const imageCanvas = document.createElement("canvas"); + const imageCanvasCtx = imageCanvas.getContext("2d"); + imageCanvas.width = dimensions.width; + imageCanvas.height = dimensions.height; + imageCanvasCtx.drawImage(image, 0, 0, imageCanvas.width, imageCanvas.height); + return imageCanvasCtx.getImageData( + 0, + 0, + imageCanvas.width, + imageCanvas.height + ); +} + +function loadImage(imageURL, callback) { + toDataURL(imageURL).then((data) => { + const IMAGE = new Image(); + IMAGE.src = data; + IMAGE.onload = function () { + callback(IMAGE); + }; + }); +} + +function loadImages(imagesURLS, callback) { + const totalImageToLoad = imagesURLS.length; + let curentImageIndex = 0; + let imagesArray = []; + + const load = () => { + loadImage(imagesURLS[curentImageIndex], (image) => { + imagesArray.push(image); + curentImageIndex++; + if (curentImageIndex === totalImageToLoad) callback(imagesArray); + else load(); + }); + }; + + load(); +} + +// initiate the App instance +const app = new App(); +app.init(); \ No newline at end of file diff --git a/canvas-image-hover-interaction/dist/style.css b/canvas-image-hover-interaction/dist/style.css new file mode 100644 index 0000000..33a9086 --- /dev/null +++ b/canvas-image-hover-interaction/dist/style.css @@ -0,0 +1,125 @@ +@import url("https://fonts.googleapis.com/css2?family=Red+Rose:wght@400;700&display=swap"); +* { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +body { + width: 100%; + height: 100vh; + display: grid; + place-items: center; + background: #161616; +} + +main { + width: 100%; + height: 100%; + display: grid; + place-items: center; + padding: 4rem; +} + +.cards { + width: 100%; + display: flex; + flex-wrap: wrap; + justify-content: center; + align-items: center; +} +.cards .card { + position: relative; + width: 260px; + height: 360px; + margin: 2rem 4rem; +} +.cards .card__image { + position: relative; + width: 100%; + height: 100%; + overflow: hidden; +} +.cards .card__image--inner { + width: 100%; + height: 100%; + overflow: hidden; +} +.cards .card__image--inner canvas { + transform: scale(1.02); +} +.cards .card__text { + position: absolute; + left: 0; + bottom: 25%; + transform: translateX(-50%); + pointer-events: none; + user-select: none; + overflow: hidden; +} +.cards .card__text--inner { + display: inline-block; + color: #fff; + font-size: 3rem; + font-family: "Red Rose", Roboto; + font-weight: 700; +} + +.loading__wrapper { + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + background: #000; + z-index: 200; + transition: opacity 500ms ease-in; +} +.loading__wrapper .loader__text { + color: #fff; + font-family: "Red Rose", Roboto; + font-weight: 400; + margin-bottom: 1.4rem; +} +.loading__wrapper.hide { + pointer-events: none; + user-select: none; + opacity: 0; +} + +.support { + position: fixed; + right: 10px; + bottom: 10px; + padding: 10px; + display: flex; +} +.support a { + margin: 0 10px; + color: #fff; + font-size: 1.8rem; + backface-visibility: hidden; + transition: all 150ms ease; +} +.support a:hover { + transform: scale(1.1); +} + +@keyframes octocat-wave { + 0%, + 100% { + transform: rotate(0); + } + 20%, + 60% { + transform: rotate(-20deg); + } + 40%, + 80% { + transform: rotate(10deg); + } +} \ No newline at end of file diff --git a/canvas-image-hover-interaction/license.txt b/canvas-image-hover-interaction/license.txt new file mode 100644 index 0000000..f32bf44 --- /dev/null +++ b/canvas-image-hover-interaction/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Sikriti Dakua (https://codepen.io/dev_loop/pen/Bajvged) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/canvas-image-hover-interaction/src/index.html b/canvas-image-hover-interaction/src/index.html new file mode 100644 index 0000000..772b29b --- /dev/null +++ b/canvas-image-hover-interaction/src/index.html @@ -0,0 +1,40 @@ +
+
+
+
+
+
+
+ DESERT +
+
+ +
+
+
+
+
+ FOREST +
+
+ +
+
+
+
+
+ OCEAN +
+
+
+
+ +
+
Loading...
+
+ +
+ + +
+ diff --git a/canvas-image-hover-interaction/src/script.js b/canvas-image-hover-interaction/src/script.js new file mode 100644 index 0000000..3f5405e --- /dev/null +++ b/canvas-image-hover-interaction/src/script.js @@ -0,0 +1,628 @@ +// this might look cluttery on codepen, you can check the repo (below) +// GITHUB LINK --> https://github.com/devloop01/canvas-image-interaction + +// I added comments just in case you are exploring through the code. + +// ALL THE CARD OPTIONS LISTED BELOW --> +// 1. jumpToRandomPosition: If `true` the particles on every frame will jump to random position. Else the particles will move randomly without jumping. Defaults to `false` +// 2. growAndShrink: If `true` the particles will grow & shrink, it will grow .8 times larger than the radius. Defaults to `false` +// 3. fill: If `true` the particles are filled with the current pixel color that they are on, else they will be stroked for that same color. Defaults to `true` +// 4. bounceFromEdges: If `true` the particles will bounce back when they hit the (specified) edges, or else thay will continue their path from the opposite edges/walls. Defaults to `true`. +// 5. shape: You can specify what shape of the particles. Currently you can specify any one from the following, i.e. "circle", "square", "hexagon". If not specified then it defaults to "circle" +// 6. radius: You can specity the radius of the particles, defaults to "5" if not specified. +// 7. randomRadius: If `true` then the particles will have random radius, else defaults to `false` +// 8. maxRadius: You can specify the minimum radius of the particles, else defaults to "2" +// 9. minRadius: You can specify the maximum radius of the particles, else defaults to "5" +// 10. maxVelocity: You can specify the maximum velocity of the particles, else defaults to "8" + +// Okay that's it, that's all the options I could add. Play around and see what fits for you. +// Also please STAR this project if you think it's interesting, you can even fork it and make/add something new. + +console.clear(); + +const cards = Array.from(document.querySelectorAll(".card")); +const cardOptions = [ + { + imageURL: { + default: "https://source.unsplash.com/8xznAGy4HcY/400x600", + hovered: "https://source.unsplash.com/Xc6gtOwSMSA/400x600" + }, + totalParticles: 1500, + mouseRange: 80, + particlesConfig: { + jumpToRandomPosition: false, + fill: true, + randomRadius: true, + minRadius: 1, + maxRadius: 2 + } + }, + { + imageURL: { + default: "https://source.unsplash.com/wQImoykAwGs/400x600", + hovered: "https://source.unsplash.com/QsWG0kjPQRY/400x600" + }, + totalParticles: 2500, + particlesConfig: { + jumpToRandomPosition: true, + fill: true, + shape: "square", + radius: 2 + } + }, + { + imageURL: { + default: "https://source.unsplash.com/sLAk1guBG90/400x600", + hovered: "https://source.unsplash.com/xe-ss5Tg2mo/400x600" + }, + totalParticles: 2500, + particlesConfig: { + jumpToRandomPosition: false, + bounceFromEdges: false, + fill: false, + shape: "hexagon", + radius: 1 + } + } +]; + +const imageURLS = cardOptions + .map((option) => Object.values(option.imageURL)) + .flat(); + +// --------------------- CLASSES ---------------------------- + +class App { + init() { + // after all images are loaded remove loader + // (this is not the best way to do so but it gets the job done) + loadImages(imageURLS, (images) => { + // this array holds the images in a sub array + // i.e [img, img, img, img, img, img] ==> [[img, img], [img, img], [img, img]] + const splitedImagesArray = splitArray(images, 2); + + cards.forEach((card, index) => { + new Canvas({ + parent: card.querySelector(".card__image--inner"), + dimensions: { + width: card.getBoundingClientRect().width, + height: card.getBoundingClientRect().height + }, + ...cardOptions[index], + images: { + default: splitedImagesArray[index][0], + hovered: splitedImagesArray[index][1] + } + }); + }); + + // hide the loading wrapper + document.querySelector(".loading__wrapper").classList.add("hide"); + + // let the gsap animation begin + gsap + .timeline({ + delay: 0.8, + defaults: { + duration: 1.5, + stagger: 0.1, + ease: "expo.out" + } + }) + .fromTo( + cards.map((card) => card.querySelector(".card__image")), + { + translateY: "-100%" + }, + { + translateY: "0%" + } + ) + .fromTo( + cards.map((card) => card.querySelector(".card__image--inner")), + { + translateY: "100%" + }, + { + translateY: "0%" + }, + 0 + ) + .fromTo( + cards.map((card) => card.querySelector(".card__text--inner")), + { + translateY: "100%" + }, + { + duration: 1.2, + translateY: "0%" + }, + 0.4 + ); + }); + } +} + +class Canvas { + constructor(options = {}) { + // the parent where the canvas will be appended + this.parent = options.parent; + + // canvas dimensions + this.dimensions = options.dimensions; + + // all imageURL's, images(optional) & imagesData that are required + this.imageURL = options.imageURL || {}; + this.images = options.images || {}; + this.imagesData = options.imagesData || { + default: null, + hovered: null + }; + this.currentImageData = null; + + // Array where all the particles will be stored + this.particles = null; + this.totalParticles = options.totalParticles || 400; + + // boolean which changes to 'true' when hovered, oe else false + this.hovered = false; + + // particles configs + this.particlesConfig = options.particlesConfig; + + // mouse range and mouse particle instance + this.mouseRange = options.mouseRange || null; + this.mouse = null; + + // initialize the canvas + this.init(); + } + + init() { + // create the canvas element + this.canvas = document.createElement("canvas"); + // get the canvas context + this.ctx = this.canvas.getContext("2d"); + // set the canvas dimensions + this.canvas.width = this.dimensions.width; + this.canvas.height = this.dimensions.height; + + const initialize = () => { + // this variable holds the current image data + this.currentImageData = this.imagesData.default; + + // add many Particle instances + this.addParticles(this.totalParticles); + // start rendering the canvas + this.startRender(); + // initialize all the canvas events + this.initEvents(); + // append the canvas on the parent + this.parent.appendChild(this.canvas); + }; + + // what happens here is if the user/dev provides the loaded image directly then use the images provided by the use directly + // and if the user provides the URL for the image then load the images from the URL and initialize + if ( + !this.images.hasOwnProperty("default") && + !this.images.hasOwnProperty("hovered") + ) { + // load all the images that are required and after all the images are loaded the callback is called. + loadImages([this.imageURL.default, this.imageURL.hovered], (images) => { + // set the image data so that they can be accessed later when needed + this.imagesData.default = returnImageData(images[0], this.dimensions); + this.imagesData.hovered = returnImageData(images[1], this.dimensions); + initialize(); + }); + } else { + // set the image data so that they can be accessed later when needed + this.imagesData.default = returnImageData( + this.images.default, + this.dimensions + ); + this.imagesData.hovered = returnImageData( + this.images.hovered, + this.dimensions + ); + initialize(); + } + + // init mouse particle + if (this.mouseRange != null) { + this.mouse = new Particle({ + ctx: this.ctx, + position: { + x: 0, + y: 0 + }, + radius: this.mouseRange, + color: "#000", + avoisEdges: true, + shape: "circle" + }); + } + } + + initEvents() { + const onMouseEnter = () => { + this.hovered = true; + this.currentImageData = this.imagesData.hovered; + }; + const onMouseLeave = () => { + this.hovered = false; + this.currentImageData = this.imagesData.default; + }; + const onMouseMove = (e) => { + if (this.mouse != null && this.hovered) { + this.mouse.position.x = e.offsetX; + this.mouse.position.y = e.offsetY; + } + }; + + this.canvas.addEventListener("mouseenter", onMouseEnter); + this.canvas.addEventListener("mouseleave", onMouseLeave); + this.canvas.addEventListener("mousemove", onMouseMove); + } + + addParticles(n) { + this.particles = new Particles({ + ctx: this.ctx, + totalParticles: n, + maxBounds: { width: this.dimensions.width, height: this.dimensions.height }, + imageData: this.currentImageData, + particlesConfig: this.particlesConfig + }); + } + + updateParticleColor(imageData, particle) { + const color = returnPixelColor(imageData, Math.floor(this.dimensions.width), { + x: Math.floor(particle.position.x), + y: Math.floor(particle.position.y) + }); + particle.updateColor(color); + } + + startRender() { + requestAnimationFrame(() => this.render()); + } + + render() { + // this.ctx.clearRect(0, 0, this.dimensions.width, this.dimensions.height); + + // loop through all the particles + this.particles.particles.forEach((particle) => { + if (this.mouseRange != null) { + // if the mouse range is not null then calculate the dist between mouse particle & all the other particles + const d = dist(this.mouse.position, particle.position); + // if the dist between the particles is less than the summation of the radius of the mouse particle & the other particle, that means they are intersecting + if (d < this.mouse.radius + particle.radius && this.hovered) { + // update the color of the intersecting particle only if mouse is hovered + this.updateParticleColor(this.imagesData.hovered, particle); + } + // else update every other particle too + else this.updateParticleColor(this.imagesData.default, particle); + } + // if the mouserange is null then update all particles at once + else this.updateParticleColor(this.currentImageData, particle); + }); + + this.particles.update(); + + requestAnimationFrame(() => this.render()); + } +} + +class Particles { + constructor(options = {}) { + this.ctx = options.ctx; // canvas context + this.totalParticles = options.totalParticles; + this.maxBounds = options.maxBounds; + this.imageData = options.imageData; + + // array that holds all the particles + this.particles = []; + + // all the particles config + this.particlesConfig = { + jumpToRandomPosition: options.particlesConfig.hasOwnProperty( + "jumpToRandomPosition" + ) + ? options.particlesConfig.jumpToRandomPosition + : false, + growAndShrink: options.particlesConfig.hasOwnProperty("growAndShrink") + ? options.particlesConfig.growAndShrink + : false, + fill: options.particlesConfig.hasOwnProperty("fill") + ? options.particlesConfig.fill + : true, + bounceFromEdges: options.particlesConfig.hasOwnProperty("bounceFromEdges") + ? options.particlesConfig.bounceFromEdges + : true, + shape: options.particlesConfig.hasOwnProperty("shape") + ? options.particlesConfig.shape + : "circle", + radius: options.particlesConfig.hasOwnProperty("radius") + ? options.particlesConfig.radius + : 5, + randomRadius: options.particlesConfig.hasOwnProperty("randomRadius") + ? options.particlesConfig.randomRadius + : false, + maxRadius: options.particlesConfig.hasOwnProperty("maxRadius") + ? options.particlesConfig.maxRadius + : 5, + minRadius: options.particlesConfig.hasOwnProperty("minRadius") + ? options.particlesConfig.minRadius + : 2, + maxVelocity: options.particlesConfig.hasOwnProperty("maxVelocity") + ? options.particlesConfig.maxVelocity + : 8 + }; + + this.init(); + } + + init() { + const ctx = this.ctx; + const color = "transparent"; + for (let i = 0; i < this.totalParticles; i++) { + const radius = this.particlesConfig.randomRadius + ? randomIntegerFromRange( + this.particlesConfig.minRadius, + this.particlesConfig.maxRadius + ) + : this.particlesConfig.radius; + const position = { + x: randomIntegerFromRange(radius, this.maxBounds.width - radius), + y: randomIntegerFromRange(radius, this.maxBounds.height - radius) + }; + this.particles.push( + new Particle({ + ctx, + position, + radius, + color, + imageData: this.imageData, + maxVelocity: 8, + bounceFromEdges: this.particlesConfig.bounceFromEdges, + shape: this.particlesConfig.shape, + edges: { width: this.maxBounds.width, height: this.maxBounds.height } + }) + ); + } + } + + update() { + // loop through particles, draw & update each particle + this.particles.forEach((particle) => { + particle.draw(); + if (this.particlesConfig.fill) particle.fillShape(); + else particle.strokeShape(); + + particle.update(); + + if (this.particlesConfig.growAndShrink) + particle.growAndShrink(particle.minRadius * 0.65); + + if (!this.particlesConfig.jumpToRandomPosition) particle.updatePosition(); + else + particle.jumpToRandomPosition({ + width: this.maxBounds.width, + height: this.maxBounds.height + }); + }); + } +} + +class Particle { + constructor(options = {}) { + this.ctx = options.ctx; + + this.position = options.position || { + x: 0, + y: 0 + }; + this.maxVelocity = options.maxVelocity || 5; + this.velocity = options.velocity || { + x: (0.5 - Math.random()) * this.maxVelocity, + y: (0.5 - Math.random()) * this.maxVelocity + }; + + this.radius = options.radius; + this.minRadius = this.radius; + + this.color = options.color; + + this.imageData = options.imageData; + + this.rotation = 0; + this.rotationIncrement = randomIntegerFromRange(2, 5); + + this.stroke = false; + this.fill = true; + + this.shape = options.shape || "circle"; + + this.edges = options.edges || null; + this.bounceFromEdges = options.bounceFromEdges; + this.avoidEdges = options.avoidEdges || false; + + this.tick = 0; + this.tickIncrement = 0.02 + Math.random() * 0.03; + } + + draw() { + this.ctx.beginPath(); + this.ctx.save(); + this.ctx.translate(this.position.x, this.position.y); + this.ctx.rotate((Math.PI / 180) * this.rotation); + this.drawShape(this.shape); + this.ctx.restore(); + this.ctx.closePath(); + } + + fillShape() { + this.ctx.fillStyle = this.color; + this.ctx.fill(); + } + + strokeShape() { + this.ctx.strokeStyle = this.color; + this.ctx.stroke(); + } + + drawShape(shape) { + if (shape === "square") + this.ctx.rect(-this.radius / 2, -this.radius / 2, this.radius, this.radius); + else if (shape === "circle") this.ctx.arc(0, 0, this.radius, 0, Math.PI * 2); + else if (shape === "hexagon") { + this.ctx.moveTo(this.radius * Math.cos(0), this.radius * Math.sin(0)); + for (let side = 0; side < 7; side++) { + this.ctx.lineTo( + this.radius * Math.cos((side * 2 * Math.PI) / 6), + this.radius * Math.sin((side * 2 * Math.PI) / 6) + ); + } + } + } + + update() { + if (this.bounceFromEdges) this.changeVelocityOnBounce(this.edges); + else this.continueFromEdge(); + + this.rotation += this.rotationIncrement; + this.tick += this.tickIncrement; + } + + updatePosition() { + this.position.x += this.velocity.x; + this.position.y += this.velocity.y; + } + + jumpToRandomPosition(bounds) { + this.position.x = Math.random() * bounds.width; + this.position.y = Math.random() * bounds.height; + } + + growAndShrink(max) { + this.radius = this.minRadius + Math.abs(Math.sin(this.tick)) * max; + } + + updateColor(color) { + this.color = color; + } + + continueFromEdge() { + if (!this.avoidEdges) { + if (this.position.x > this.edges.width) this.position.x = 0; + else if (this.position.x < 0) this.position.x = this.edges.width; + if (this.position.y > this.edges.height) this.position.y = 0; + else if (this.position.y < 0) this.position.y = this.edges.height; + } + } + + changeVelocityOnBounce() { + if (!this.avoidEdges) { + if ( + this.position.x + this.radius > this.edges.width || + this.position.x - this.radius < 0 + ) + this.velocity.x *= -1; + if ( + this.position.y + this.radius > this.edges.height || + this.position.y - this.radius < 0 + ) + this.velocity.y *= -1; + } + } +} + +// ---------------- UTILITY FUNCTIONS ------------------------ + +function randomIntegerFromRange(min, max) { + return Math.floor(Math.random() * (max - min + 1) + min); +} + +function dist(a, b) { + return Math.sqrt(Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2)); +} + +function splitArray(array, n) { + let [...arr] = array; + var res = []; + while (arr.length) { + res.push(arr.splice(0, n)); + } + return res; +} + +function returnPixelColor(imageData, width, position) { + const index = (position.x + position.y * width) * 4; + let pixel = { + r: imageData.data[index + 0], + g: imageData.data[index + 1], + b: imageData.data[index + 2] + }; + return `rgb(${pixel.r}, ${pixel.g}, ${pixel.b})`; +} + +function toDataURL(url) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.onload = function () { + var reader = new FileReader(); + reader.onloadend = function () { + resolve(reader.result); + }; + reader.readAsDataURL(xhr.response); + }; + xhr.onerror = reject; + xhr.open("GET", url); + xhr.responseType = "blob"; + xhr.send(); + }); +} + +function returnImageData(image, dimensions) { + const imageCanvas = document.createElement("canvas"); + const imageCanvasCtx = imageCanvas.getContext("2d"); + imageCanvas.width = dimensions.width; + imageCanvas.height = dimensions.height; + imageCanvasCtx.drawImage(image, 0, 0, imageCanvas.width, imageCanvas.height); + return imageCanvasCtx.getImageData( + 0, + 0, + imageCanvas.width, + imageCanvas.height + ); +} + +function loadImage(imageURL, callback) { + toDataURL(imageURL).then((data) => { + const IMAGE = new Image(); + IMAGE.src = data; + IMAGE.onload = function () { + callback(IMAGE); + }; + }); +} + +function loadImages(imagesURLS, callback) { + const totalImageToLoad = imagesURLS.length; + let curentImageIndex = 0; + let imagesArray = []; + + const load = () => { + loadImage(imagesURLS[curentImageIndex], (image) => { + imagesArray.push(image); + curentImageIndex++; + if (curentImageIndex === totalImageToLoad) callback(imagesArray); + else load(); + }); + }; + + load(); +} + +// initiate the App instance +const app = new App(); +app.init(); diff --git a/canvas-image-hover-interaction/src/style.scss b/canvas-image-hover-interaction/src/style.scss new file mode 100644 index 0000000..f864d63 --- /dev/null +++ b/canvas-image-hover-interaction/src/style.scss @@ -0,0 +1,127 @@ +@import url("https://fonts.googleapis.com/css2?family=Red+Rose:wght@400;700&display=swap"); + +* { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +body { + width: 100%; + height: 100vh; + display: grid; + place-items: center; + background: #161616; +} + +main { + width: 100%; + height: 100%; + display: grid; + place-items: center; + padding: 4rem; +} + +.cards { + width: 100%; + display: flex; + flex-wrap: wrap; + justify-content: center; + align-items: center; + .card { + position: relative; + width: 260px; + height: 360px; + margin: 2rem 4rem; + &__image { + position: relative; + width: 100%; + height: 100%; + overflow: hidden; + &--inner { + width: 100%; + height: 100%; + overflow: hidden; + canvas { + transform: scale(1.02); + } + } + } + &__text { + position: absolute; + left: 0; + bottom: 25%; + transform: translateX(-50%); + pointer-events: none; + user-select: none; + overflow: hidden; + &--inner { + display: inline-block; + color: #fff; + font-size: 3rem; + font-family: "Red Rose", Roboto; + font-weight: 700; + } + } + } +} + +.loading__wrapper { + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + background: #000; + z-index: 200; + transition: opacity 500ms ease-in; + .loader__text { + color: #fff; + font-family: "Red Rose", Roboto; + font-weight: 400; + margin-bottom: 1.4rem; + } + &.hide { + pointer-events: none; + user-select: none; + opacity: 0; + } +} + +.support { + position: fixed; + right: 10px; + bottom: 10px; + padding: 10px; + display: flex; + a { + margin: 0 10px; + color: #fff; + font-size: 1.8rem; + backface-visibility: hidden; + transition: all 150ms ease; + &:hover { + transform: scale(1.1); + } + } +} + + +@keyframes octocat-wave { + 0%, + 100% { + transform: rotate(0); + } + 20%, + 60% { + transform: rotate(-20deg); + } + 40%, + 80% { + transform: rotate(10deg); + } +} diff --git a/card-hover-interactions/README.markdown b/card-hover-interactions/README.markdown new file mode 100644 index 0000000..0528f0a --- /dev/null +++ b/card-hover-interactions/README.markdown @@ -0,0 +1,4 @@ +# Card Hover Interactions + _A Pen created at CodePen.io. Original URL: [https://codepen.io/hexagoncircle/pen/XWbWKwL](https://codepen.io/hexagoncircle/pen/XWbWKwL). + + Hacking together a solution to show part of an element in a card as a default state, lining up the element headline across each card and then animating the element to the center of its parent element \ No newline at end of file diff --git a/card-hover-interactions/dist/index.html b/card-hover-interactions/dist/index.html new file mode 100644 index 0000000..089fe43 --- /dev/null +++ b/card-hover-interactions/dist/index.html @@ -0,0 +1,45 @@ + + + + + CodePen - Card Hover Interactions + + + + + + +
+
+
+

Mountain View

+

Check out all of these gorgeous mountain trips with beautiful views of, you guessed it, the mountains

+ +
+
+
+
+

To The Beach

+

Plan your next beach trip with these fabulous destinations

+ +
+
+
+
+

Desert Destinations

+

It's the desert you've always dreamed of

+ +
+
+
+
+

Explore The Galaxy

+

Seriously, straight up, just blast off into outer space today

+ +
+
+
+ + + + diff --git a/card-hover-interactions/dist/style.css b/card-hover-interactions/dist/style.css new file mode 100644 index 0000000..9212a2d --- /dev/null +++ b/card-hover-interactions/dist/style.css @@ -0,0 +1,215 @@ +@import url("https://fonts.googleapis.com/css?family=Cardo:400i|Rubik:400,700&display=swap"); +:root { + --d: 700ms; + --e: cubic-bezier(0.19, 1, 0.22, 1); + --font-sans: 'Rubik', sans-serif; + --font-serif: 'Cardo', serif; +} + +* { + box-sizing: border-box; +} + +html, body { + height: 100%; +} + +body { + display: grid; + place-items: center; +} + +.page-content { + display: grid; + grid-gap: 1rem; + padding: 1rem; + max-width: 1024px; + margin: 0 auto; + font-family: var(--font-sans); +} +@media (min-width: 600px) { + .page-content { + grid-template-columns: repeat(2, 1fr); + } +} +@media (min-width: 800px) { + .page-content { + grid-template-columns: repeat(4, 1fr); + } +} + +.card { + position: relative; + display: -webkit-box; + display: flex; + -webkit-box-align: end; + align-items: flex-end; + overflow: hidden; + padding: 1rem; + width: 100%; + text-align: center; + color: whitesmoke; + background-color: whitesmoke; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1), 0 2px 2px rgba(0, 0, 0, 0.1), 0 4px 4px rgba(0, 0, 0, 0.1), 0 8px 8px rgba(0, 0, 0, 0.1), 0 16px 16px rgba(0, 0, 0, 0.1); +} +@media (min-width: 600px) { + .card { + height: 350px; + } +} +.card:before { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 110%; + background-size: cover; + background-position: 0 0; + -webkit-transition: -webkit-transform calc(var(--d) * 1.5) var(--e); + transition: -webkit-transform calc(var(--d) * 1.5) var(--e); + transition: transform calc(var(--d) * 1.5) var(--e); + transition: transform calc(var(--d) * 1.5) var(--e), -webkit-transform calc(var(--d) * 1.5) var(--e); + pointer-events: none; +} +.card:after { + content: ''; + display: block; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 200%; + pointer-events: none; + background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), color-stop(11.7%, rgba(0, 0, 0, 0.009)), color-stop(22.1%, rgba(0, 0, 0, 0.034)), color-stop(31.2%, rgba(0, 0, 0, 0.072)), color-stop(39.4%, rgba(0, 0, 0, 0.123)), color-stop(46.6%, rgba(0, 0, 0, 0.182)), color-stop(53.1%, rgba(0, 0, 0, 0.249)), color-stop(58.9%, rgba(0, 0, 0, 0.32)), color-stop(64.3%, rgba(0, 0, 0, 0.394)), color-stop(69.3%, rgba(0, 0, 0, 0.468)), color-stop(74.1%, rgba(0, 0, 0, 0.54)), color-stop(78.8%, rgba(0, 0, 0, 0.607)), color-stop(83.6%, rgba(0, 0, 0, 0.668)), color-stop(88.7%, rgba(0, 0, 0, 0.721)), color-stop(94.1%, rgba(0, 0, 0, 0.762)), to(rgba(0, 0, 0, 0.79))); + background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.009) 11.7%, rgba(0, 0, 0, 0.034) 22.1%, rgba(0, 0, 0, 0.072) 31.2%, rgba(0, 0, 0, 0.123) 39.4%, rgba(0, 0, 0, 0.182) 46.6%, rgba(0, 0, 0, 0.249) 53.1%, rgba(0, 0, 0, 0.32) 58.9%, rgba(0, 0, 0, 0.394) 64.3%, rgba(0, 0, 0, 0.468) 69.3%, rgba(0, 0, 0, 0.54) 74.1%, rgba(0, 0, 0, 0.607) 78.8%, rgba(0, 0, 0, 0.668) 83.6%, rgba(0, 0, 0, 0.721) 88.7%, rgba(0, 0, 0, 0.762) 94.1%, rgba(0, 0, 0, 0.79) 100%); + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + -webkit-transition: -webkit-transform calc(var(--d) * 2) var(--e); + transition: -webkit-transform calc(var(--d) * 2) var(--e); + transition: transform calc(var(--d) * 2) var(--e); + transition: transform calc(var(--d) * 2) var(--e), -webkit-transform calc(var(--d) * 2) var(--e); +} +.card:nth-child(1):before { + background-image: url(https://images.unsplash.com/photo-1517021897933-0e0319cfbc28?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE0NTg5fQ); +} +.card:nth-child(2):before { + background-image: url(https://images.unsplash.com/photo-1533903345306-15d1c30952de?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE0NTg5fQ); +} +.card:nth-child(3):before { + background-image: url(https://images.unsplash.com/photo-1545243424-0ce743321e11?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE0NTg5fQ); +} +.card:nth-child(4):before { + background-image: url(https://images.unsplash.com/photo-1531306728370-e2ebd9d7bb99?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE0NTg5fQ); +} + +.content { + position: relative; + display: -webkit-box; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-align: center; + align-items: center; + width: 100%; + padding: 1rem; + -webkit-transition: -webkit-transform var(--d) var(--e); + transition: -webkit-transform var(--d) var(--e); + transition: transform var(--d) var(--e); + transition: transform var(--d) var(--e), -webkit-transform var(--d) var(--e); + z-index: 1; +} +.content > * + * { + margin-top: 1rem; +} + +.title { + font-size: 1.3rem; + font-weight: bold; + line-height: 1.2; +} + +.copy { + font-family: var(--font-serif); + font-size: 1.125rem; + font-style: italic; + line-height: 1.35; +} + +.btn { + cursor: pointer; + margin-top: 1.5rem; + padding: 0.75rem 1.5rem; + font-size: 0.65rem; + font-weight: bold; + letter-spacing: 0.025rem; + text-transform: uppercase; + color: white; + background-color: black; + border: none; +} +.btn:hover { + background-color: #0d0d0d; +} +.btn:focus { + outline: 1px dashed yellow; + outline-offset: 3px; +} + +@media (hover: hover) and (min-width: 600px) { + .card:after { + -webkit-transform: translateY(0); + transform: translateY(0); + } + + .content { + -webkit-transform: translateY(calc(100% - 4.5rem)); + transform: translateY(calc(100% - 4.5rem)); + } + .content > *:not(.title) { + opacity: 0; + -webkit-transform: translateY(1rem); + transform: translateY(1rem); + -webkit-transition: opacity var(--d) var(--e), -webkit-transform var(--d) var(--e); + transition: opacity var(--d) var(--e), -webkit-transform var(--d) var(--e); + transition: transform var(--d) var(--e), opacity var(--d) var(--e); + transition: transform var(--d) var(--e), opacity var(--d) var(--e), -webkit-transform var(--d) var(--e); + } + + .card:hover, + .card:focus-within { + -webkit-box-align: center; + align-items: center; + } + .card:hover:before, + .card:focus-within:before { + -webkit-transform: translateY(-4%); + transform: translateY(-4%); + } + .card:hover:after, + .card:focus-within:after { + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + } + .card:hover .content, + .card:focus-within .content { + -webkit-transform: translateY(0); + transform: translateY(0); + } + .card:hover .content > *:not(.title), + .card:focus-within .content > *:not(.title) { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + -webkit-transition-delay: calc(var(--d) / 8); + transition-delay: calc(var(--d) / 8); + } + + .card:focus-within:before, .card:focus-within:after, + .card:focus-within .content, + .card:focus-within .content > *:not(.title) { + -webkit-transition-duration: 0s; + transition-duration: 0s; + } +} \ No newline at end of file diff --git a/card-hover-interactions/license.txt b/card-hover-interactions/license.txt new file mode 100644 index 0000000..031e537 --- /dev/null +++ b/card-hover-interactions/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Ryan Mulligan (https://codepen.io/hexagoncircle/pen/XWbWKwL) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/card-hover-interactions/src/index.pug b/card-hover-interactions/src/index.pug new file mode 100644 index 0000000..b92abf1 --- /dev/null +++ b/card-hover-interactions/src/index.pug @@ -0,0 +1,13 @@ +- var cards = [{ title: 'Mountain View', copy: 'Check out all of these gorgeous mountain trips with beautiful views of, you guessed it, the mountains', button: 'View Trips' }, { title: 'To The Beach', copy: 'Plan your next beach trip with these fabulous destinations', button: 'View Trips' }, { title: 'Desert Destinations', copy: 'It\'s the desert you\'ve always dreamed of', button: 'Book Now' }, { title: 'Explore The Galaxy', copy: 'Seriously, straight up, just blast off into outer space today', button: 'Book Now' }] + + +mixin card(title, copy, button) + .card + .content + h2.title= title + p.copy= copy + button.btn= button + +main.page-content + each card in cards + +card(card.title, card.copy, card.button) \ No newline at end of file diff --git a/card-hover-interactions/src/style.scss b/card-hover-interactions/src/style.scss new file mode 100644 index 0000000..0368cdc --- /dev/null +++ b/card-hover-interactions/src/style.scss @@ -0,0 +1,214 @@ +@import url('https://fonts.googleapis.com/css?family=Cardo:400i|Rubik:400,700&display=swap'); + +$imageIds: '1517021897933-0e0319cfbc28', '1533903345306-15d1c30952de', '1545243424-0ce743321e11', '1531306728370-e2ebd9d7bb99'; + +$bp-md: 600px; +$bp-lg: 800px; + +:root { + --d: 700ms; + --e: cubic-bezier(0.19, 1, 0.22, 1); + --font-sans: 'Rubik', sans-serif; + --font-serif: 'Cardo', serif; +} + +* { + box-sizing: border-box; +} + +html, body { + height: 100%; +} + +body { + display: grid; + place-items: center; +} + +.page-content { + display: grid; + grid-gap: 1rem; + padding: 1rem; + max-width: 1024px; + margin: 0 auto; + font-family: var(--font-sans); + + @media (min-width: $bp-md) { + grid-template-columns: repeat(2, 1fr); + } + + @media (min-width: $bp-lg) { + grid-template-columns: repeat(4, 1fr); + } +} + + + +.card { + position: relative; + display: flex; + align-items: flex-end; + overflow: hidden; + padding: 1rem; + width: 100%; + text-align: center; + color: whitesmoke; + background-color: whitesmoke; + box-shadow: 0 1px 1px rgba(0,0,0,0.1), + 0 2px 2px rgba(0,0,0,0.1), + 0 4px 4px rgba(0,0,0,0.1), + 0 8px 8px rgba(0,0,0,0.1), + 0 16px 16px rgba(0,0,0,0.1); + + @media (min-width: $bp-md) { + height: 350px; + } + + &:before { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 110%; + background-size: cover; + background-position: 0 0; + transition: transform calc(var(--d) * 1.5) var(--e); + pointer-events: none; + } + + &:after { + content: ''; + display: block; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 200%; + pointer-events: none; + background-image: linear-gradient( + to bottom, + hsla(0, 0%, 0%, 0) 0%, + hsla(0, 0%, 0%, 0.009) 11.7%, + hsla(0, 0%, 0%, 0.034) 22.1%, + hsla(0, 0%, 0%, 0.072) 31.2%, + hsla(0, 0%, 0%, 0.123) 39.4%, + hsla(0, 0%, 0%, 0.182) 46.6%, + hsla(0, 0%, 0%, 0.249) 53.1%, + hsla(0, 0%, 0%, 0.320) 58.9%, + hsla(0, 0%, 0%, 0.394) 64.3%, + hsla(0, 0%, 0%, 0.468) 69.3%, + hsla(0, 0%, 0%, 0.540) 74.1%, + hsla(0, 0%, 0%, 0.607) 78.8%, + hsla(0, 0%, 0%, 0.668) 83.6%, + hsla(0, 0%, 0%, 0.721) 88.7%, + hsla(0, 0%, 0%, 0.762) 94.1%, + hsla(0, 0%, 0%, 0.790) 100% + ); + transform: translateY(-50%); + transition: transform calc(var(--d) * 2) var(--e); + } + + @each $id in $imageIds { + $i: index($imageIds, $id); + + &:nth-child(#{$i}):before { + background-image: url(https://images.unsplash.com/photo-#{$id}?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=400&fit=max&ixid=eyJhcHBfaWQiOjE0NTg5fQ); + } + } +} + +.content { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + width: 100%; + padding: 1rem; + transition: transform var(--d) var(--e); + z-index: 1; + + > * + * { + margin-top: 1rem; + } +} + +.title { + font-size: 1.3rem; + font-weight: bold; + line-height: 1.2; +} + +.copy { + font-family: var(--font-serif); + font-size: 1.125rem; + font-style: italic; + line-height: 1.35; +} + +.btn { + cursor: pointer; + margin-top: 1.5rem; + padding: 0.75rem 1.5rem; + font-size: 0.65rem; + font-weight: bold; + letter-spacing: 0.025rem; + text-transform: uppercase; + color: white; + background-color: black; + border: none; + + &:hover { + background-color: lighten(black, 5%); + } + + &:focus { + outline: 1px dashed yellow; + outline-offset: 3px; + } +} + +@media (hover: hover) and (min-width: $bp-md) { + .card:after { + transform: translateY(0); + } + + .content { + transform: translateY(calc(100% - 4.5rem)); + + > *:not(.title) { + opacity: 0; + transform: translateY(1rem); + transition: + transform var(--d) var(--e), + opacity var(--d) var(--e); + } + } + + .card:hover, + .card:focus-within { + align-items: center; + + &:before { transform: translateY(-4%); } + &:after { transform: translateY(-50%); } + + .content { + transform: translateY(0); + + > *:not(.title) { + opacity: 1; + transform: translateY(0); + transition-delay: calc(var(--d) / 8); + } + } + } + + .card:focus-within { + &:before, + &:after, + .content, + .content > *:not(.title) { + transition-duration: 0s; + } + } +} \ No newline at end of file diff --git a/card-interactions-with-gsap/README.markdown b/card-interactions-with-gsap/README.markdown new file mode 100644 index 0000000..fa001a0 --- /dev/null +++ b/card-interactions-with-gsap/README.markdown @@ -0,0 +1,9 @@ +# Card Interactions with GSAP + +A Pen created on CodePen.io. Original URL: [https://codepen.io/dilums/pen/VwbBGVr](https://codepen.io/dilums/pen/VwbBGVr). + +Card Interactions with GSAP + +[You can use Codepen live link to try it on mobile](https://codepen.io/dilums/live/VwbBGVr) + +[Inspiration : Darkmode card interactions by Sam Atmore](https://dribbble.com/shots/11109492-Darkmode-card-interactions-using-principleapp) diff --git a/card-interactions-with-gsap/dist/index.html b/card-interactions-with-gsap/dist/index.html new file mode 100644 index 0000000..d67cea3 --- /dev/null +++ b/card-interactions-with-gsap/dist/index.html @@ -0,0 +1,306 @@ + + + + + CodePen - Card Interactions with GSAP + + + + + +
+
+
+ + + +
+
+
+
+
+
+ +
+
+
+ Emma Wallace +
+
13 Photos
+
+
+
+
+
+
+
+
+ +
+
+
+ Harry Sans +
+
16 Photos
+
+
+
+
+
+
+
+
+ +
+
+
+ Emma Wallace +
+
13 Photos
+
+
+
+
+
+ + +
+ +
+
+ +
+
+
+
+ + +
+
+ + +
+
+
+ +
+ + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+ + + + + + diff --git a/card-interactions-with-gsap/dist/script.js b/card-interactions-with-gsap/dist/script.js new file mode 100644 index 0000000..8e4d5ff --- /dev/null +++ b/card-interactions-with-gsap/dist/script.js @@ -0,0 +1,279 @@ +const { innerWidth } = window; +const { set, to } = gsap; + +const stackPadding = 24; +let stackStep = -1; +let mainStep = 0; +let showOptions = false; + +let cardHeight = 600; +let cardWidth = 340; +let deviceWidth = 414; +let sectionOffset = -500; + +if (innerWidth < 640) { + deviceWidth = innerWidth; + cardWidth = (340 / 414) * deviceWidth; + cardHeight = (600 / 414) * deviceWidth; + sectionOffset = -428; +} + +const restCardSize = deviceWidth - 2 * stackPadding; +const stackBackgroundOffset = cardWidth - cardHeight; + +const click = (item) => (func) => { + document.querySelector(item).addEventListener("click", func); +}; + +const btnOptions = ".btn-options"; +const btnHome = ".btn-home"; + +const page = ".page"; +const backdrop = ".backdrop"; +const nav = ".nav"; +const titleSets = ".title-sets"; +const titleSet1 = ".title-set-1"; +const titleSet2 = ".title-set-2"; +const section2 = ".section-2"; +const section1 = ".section-1"; +const cardSet = ".card-set"; + +const card1 = ".card-1"; +const card2 = ".card-2"; +const card3 = ".card-3"; +const card = ".card"; +const gallery = ".gallery"; +const userDetails = ".user-details"; +const btnFolders = ".btn-folders"; +const btnCamera = ".btn-camera"; +const btnPlay = ".btn-play"; +const navBottomBack = ".nav-bottom-back"; +const plusBtnBg = ".plus-btn-bg"; +const plusIcon = ".plus-icon"; + +const iconHome = ".icon-home"; +const iconArrowDown = ".icon-arrow-down"; + +set(gallery, { scale: 0 }); +set(backdrop, { display: "none", opacity: 0 }); +set(titleSet2, { scale: 0 }); +set(titleSet2, { scale: 0 }); +set(userDetails, { scale: 0.8, transformOrigin: "Bottom Left" }); +set(btnFolders, { scale: 0, x: 0, y: 0 }); +set(btnPlay, { scale: 0, x: 0, y: 0 }); +set(btnCamera, { scale: 0, x: 0, y: 0 }); +set(plusBtnBg, { scale: 0 }); +set(cardSet, { width: restCardSize, height: restCardSize }); +set(card, { backgroundSize: `${restCardSize}px ${restCardSize}px` }); +set(iconArrowDown, { opacity: 0 }); + +click(btnOptions)(() => { + showOptions = !showOptions; + + const getPos = (angle) => ({ + x: 100 * Math.cos(angle), + y: 100 * Math.sin(angle) + }); + + const alpha = Math.PI * 0.3; + const start = Math.PI * -0.5; + + if (showOptions) { + to(page, { scale: 0.8 }); + to(backdrop, { display: "block", opacity: 0.7 }); + to(navBottomBack, { scale: 0 }); + to(btnFolders, { scale: 1, ...getPos(start - alpha) }); + to(btnCamera, { scale: 1, ...getPos(start), delay: 0.15 }); + to(btnPlay, { scale: 1, ...getPos(start + alpha), delay: 0.3 }); + to(plusBtnBg, { scale: 1.05 }); + to(plusIcon, { rotation: 45, color: "#ffffff" }); + } else { + to(page, { scale: 1 }); + to(backdrop, { display: "none", opacity: 0 }); + to(navBottomBack, { scale: 1 }); + to(btnFolders, { scale: 0, x: 0, y: 0, delay: 0.3 }); + to(btnCamera, { scale: 0, x: 0, y: 0, delay: 0.15 }); + to(btnPlay, { scale: 0, x: 0, y: 0 }); + to(plusBtnBg, { scale: 0 }); + to(plusBtnBg, { scale: 0 }); + to(plusIcon, { rotation: 0, color: "#39414D" }); + } +}); + +const roi = new Hammer(document.getElementById("section-1")); + +roi.on("swipe", ({ direction }) => { + if (mainStep === 1) { + if (direction === 2) { + stackStep = Math.min(stackStep + 1, 2); + } else { + stackStep = Math.max(stackStep - 1, 0); + } + + updateStack(); + } +}); + +const updateStack = () => { + if (stackStep === 0) { + to(card1, { + x: 0, + scale: 1, + backgroundSize: `${cardHeight}px ${cardHeight}px`, + backgroundPosition: `${stackBackgroundOffset * 0.5}px 0px` + }); + to(card2, { + x: 30, + scale: 0.9, + backgroundSize: `${cardHeight * 1.2}px ${cardHeight * 1.2}px`, + backgroundPosition: `${stackBackgroundOffset * 1.2 * 0.5}px ${ + -cardHeight * 0.2 * 0.5 + }px` + }); + to(card3, { + x: 60, + scale: 0.8, + backgroundSize: `${cardHeight * 1.2}px ${cardHeight * 1.2}px`, + backgroundPosition: `${stackBackgroundOffset * 1.2 * 0.5}px ${ + -cardHeight * 0.2 * 0.5 + }px` + }); + } + if (stackStep === 1) { + to(card1, { + x: -deviceWidth, + scale: 0.8, + backgroundSize: `${cardHeight}px ${cardHeight}px`, + backgroundPosition: `${stackBackgroundOffset * 0.5 + deviceWidth}px 0px` + }); + to(card2, { + x: 0, + scale: 1, + backgroundSize: `${cardHeight}px ${cardHeight}px`, + backgroundPosition: `${stackBackgroundOffset * 0.5}px 0px` + }); + to(card3, { + x: 30, + scale: 0.9, + backgroundSize: `${cardHeight * 1.2}px ${cardHeight * 1.2}px`, + backgroundPosition: `${stackBackgroundOffset * 1.2 * 0.5}px ${ + -cardHeight * 0.2 * 0.5 + }px` + }); + } + if (stackStep === 2) { + to(card1, { + x: -deviceWidth, + scale: 0.8, + backgroundSize: `${cardHeight}px ${cardHeight}px`, + backgroundPosition: `${stackBackgroundOffset * 0.5 + deviceWidth}px 0px` + }); + to(card2, { + x: -deviceWidth, + scale: 0.8, + backgroundSize: `${cardHeight}px ${cardHeight}px`, + backgroundPosition: `${stackBackgroundOffset * 0.5 + deviceWidth}px 0px` + }); + to(card3, { + x: 0, + scale: 1, + backgroundSize: `${cardHeight}px ${cardHeight}px`, + backgroundPosition: `${stackBackgroundOffset * 0.5}px 0px` + }); + } + + if (stackStep === -1) { + to(card1, { + x: 0, + backgroundSize: `${restCardSize}px ${restCardSize}px`, + backgroundPosition: "0px 0px", + scale: 1 + }); + to(card2, { + x: 0, + backgroundSize: `${restCardSize}px ${restCardSize}px`, + backgroundPosition: "0px 0px", + scale: 0.9 + }); + to(card3, { + x: 0, + backgroundSize: `${restCardSize}px ${restCardSize}px`, + backgroundPosition: "0px 0px", + scale: 0.8 + }); + } +}; + +const stackOnSelect = () => { + to(card1, { + backgroundPosition: `${(deviceWidth - cardHeight) * 0.5}px 0px` + }); + to(card2, { + backgroundPosition: `${(deviceWidth - cardHeight) * 0.5}px 0px` + }); + to(card3, { + backgroundPosition: `${(deviceWidth - cardHeight) * 0.5}px 0px` + }); +}; + +const updateLayout = (reset = false) => { + if (mainStep === 0) { + to(nav, { height: 120 }); + to(titleSet1, { scale: 1, transformOrigin: "Top Left" }); + to(titleSet2, { scale: 0, transformOrigin: "Bottom Left" }); + to(titleSets, { y: 0 }); + + to(section1, { height: deviceWidth, y: 0 }); + to(cardSet, { height: restCardSize, width: restCardSize }); + to(userDetails, { scale: 0.8, transformOrigin: "Bottom Left" }); + + stackStep = -1; + updateStack(); + } + + if (mainStep === 1) { + to(nav, { height: 72 }); + to(titleSet1, { scale: 0, transformOrigin: "Top Left" }); + to(titleSet2, { scale: 1, transformOrigin: "Bottom Left" }); + to(titleSets, { y: -120 }); + to(userDetails, { scale: 0.85, transformOrigin: "Bottom Left" }); + + to(section1, { height: 1200, y: 0, padding: stackPadding }); + to(cardSet, { height: cardHeight, width: cardWidth }); + to(card, { borderRadius: 24 }); + to(gallery, { scale: 0 }); + if (reset) { + stackStep = 0; + } + to(iconArrowDown, { opacity: 0, scale: 0 }); + to(iconHome, { opacity: 1, scale: 1 }); + updateStack(); + } + + if (mainStep === 2) { + to(section1, { y: sectionOffset, padding: 0, height: 1200 }); + to(gallery, { scale: 1 }); + to(cardSet, { width: deviceWidth, height: cardHeight }); + to(card, { borderRadius: 0 }); + to(userDetails, { scale: 1, transformOrigin: "Bottom Left" }); + to(iconArrowDown, { opacity: 1, scale: 1 }); + to(iconHome, { opacity: 0, scale: 0 }); + stackOnSelect(); + } +}; + +updateLayout(); + +roi.on("tap", () => { + if ([0, 1].includes(mainStep)) { + mainStep += 1; + updateLayout(true); + } +}); + +click(btnHome)(() => { + if ([1, 2].includes(mainStep)) { + mainStep -= 1; + updateLayout(false); + } +}); \ No newline at end of file diff --git a/card-interactions-with-gsap/dist/style.css b/card-interactions-with-gsap/dist/style.css new file mode 100644 index 0000000..a1a3560 --- /dev/null +++ b/card-interactions-with-gsap/dist/style.css @@ -0,0 +1,107 @@ +@import url("https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"); + +body { + font-family: "Roboto", sans-serif; + color: white; + background: linear-gradient(180deg, #ae5c49 0%, #593733 100%); +} + +.mock-window { + width: 100vw; + height: 100vh; + display: grid; + grid-template-columns: 1fr; + grid-template-rows: 72px 1fr 100px; + background-color: #131517; +} + +@media (min-width: 640px) { + .mock-window { + width: 414px; + height: 896px; + } +} + +.device-details { + grid-row: 1/2; + grid-column: 1/2; +} +.page { + grid-row: 1/4; + grid-column: 1/2; +} +.backdrop { + grid-row: 1/4; + grid-column: 1/2; + background: #171010; + display: none; +} +.bottom-nav { + grid-row: 3/4; + grid-column: 1/2; +} + +.device-top { + height: 72px; +} +.nav { + height: 120px; +} +.titles { + height: 72px; +} + +.tabs { + height: 48px; +} + +.card { + border-radius: 24px; +} + +.card-1 { + background: url("https://assets.codepen.io/3685267/card-interactions-gsap-image1.jpg"); + background-size: 366px 366px; + background-repeat: no-repeat; + background-position: 0px 0px; +} +.card-2 { + background: url("https://assets.codepen.io/3685267/card-interactions-gsap-image2.jpg"); + background-size: 366px 366px; + background-repeat: no-repeat; + background-position: 0px 0px; +} +.card-3 { + background: url("https://assets.codepen.io/3685267/card-interactions-gsap-image3.jpg"); + background-size: 366px 366px; + background-repeat: no-repeat; + background-position: 0px 0px; +} + +.tab-selected { + background-color: #444346; +} + +.text-secondary { + color: #9fa1a3; +} + +.absolute-center { + left: 50%; + top: 50%; + transform: translate(-50%, -50%); +} + +.test { + transform: translate(-100px, -100px); +} +.test1 { + transform: translate(0px, -100px); +} +.test2 { + transform: translate(100px, -100px); +} + +.btn-options { + box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.25); +} \ No newline at end of file diff --git a/card-interactions-with-gsap/license.txt b/card-interactions-with-gsap/license.txt new file mode 100644 index 0000000..95ebc14 --- /dev/null +++ b/card-interactions-with-gsap/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Dilum (https://codepen.io/dilums/pen/VwbBGVr) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/card-interactions-with-gsap/src/index.html b/card-interactions-with-gsap/src/index.html new file mode 100644 index 0000000..354a15e --- /dev/null +++ b/card-interactions-with-gsap/src/index.html @@ -0,0 +1,290 @@ +
+
+
+ + + +
+
+
+
+
+
+ +
+
+
+ Emma Wallace +
+
13 Photos
+
+
+
+
+
+
+
+
+ +
+
+
+ Harry Sans +
+
16 Photos
+
+
+
+
+
+
+
+
+ +
+
+
+ Emma Wallace +
+
13 Photos
+
+
+
+
+
+ + +
+ +
+
+ +
+
+
+
+ + +
+
+ + +
+
+
+ +
+ + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/card-interactions-with-gsap/src/script.js b/card-interactions-with-gsap/src/script.js new file mode 100644 index 0000000..0a0911c --- /dev/null +++ b/card-interactions-with-gsap/src/script.js @@ -0,0 +1,279 @@ +const { innerWidth } = window; +const { set, to } = gsap; + +const stackPadding = 24; +let stackStep = -1; +let mainStep = 0; +let showOptions = false; + +let cardHeight = 600; +let cardWidth = 340; +let deviceWidth = 414; +let sectionOffset = -500; + +if (innerWidth < 640) { + deviceWidth = innerWidth; + cardWidth = (340 / 414) * deviceWidth; + cardHeight = (600 / 414) * deviceWidth; + sectionOffset = -428; +} + +const restCardSize = deviceWidth - 2 * stackPadding; +const stackBackgroundOffset = cardWidth - cardHeight; + +const click = (item) => (func) => { + document.querySelector(item).addEventListener("click", func); +}; + +const btnOptions = ".btn-options"; +const btnHome = ".btn-home"; + +const page = ".page"; +const backdrop = ".backdrop"; +const nav = ".nav"; +const titleSets = ".title-sets"; +const titleSet1 = ".title-set-1"; +const titleSet2 = ".title-set-2"; +const section2 = ".section-2"; +const section1 = ".section-1"; +const cardSet = ".card-set"; + +const card1 = ".card-1"; +const card2 = ".card-2"; +const card3 = ".card-3"; +const card = ".card"; +const gallery = ".gallery"; +const userDetails = ".user-details"; +const btnFolders = ".btn-folders"; +const btnCamera = ".btn-camera"; +const btnPlay = ".btn-play"; +const navBottomBack = ".nav-bottom-back"; +const plusBtnBg = ".plus-btn-bg"; +const plusIcon = ".plus-icon"; + +const iconHome = ".icon-home"; +const iconArrowDown = ".icon-arrow-down"; + +set(gallery, { scale: 0 }); +set(backdrop, { display: "none", opacity: 0 }); +set(titleSet2, { scale: 0 }); +set(titleSet2, { scale: 0 }); +set(userDetails, { scale: 0.8, transformOrigin: "Bottom Left" }); +set(btnFolders, { scale: 0, x: 0, y: 0 }); +set(btnPlay, { scale: 0, x: 0, y: 0 }); +set(btnCamera, { scale: 0, x: 0, y: 0 }); +set(plusBtnBg, { scale: 0 }); +set(cardSet, { width: restCardSize, height: restCardSize }); +set(card, { backgroundSize: `${restCardSize}px ${restCardSize}px` }); +set(iconArrowDown, { opacity: 0 }); + +click(btnOptions)(() => { + showOptions = !showOptions; + + const getPos = (angle) => ({ + x: 100 * Math.cos(angle), + y: 100 * Math.sin(angle) + }); + + const alpha = Math.PI * 0.3; + const start = Math.PI * -0.5; + + if (showOptions) { + to(page, { scale: 0.8 }); + to(backdrop, { display: "block", opacity: 0.7 }); + to(navBottomBack, { scale: 0 }); + to(btnFolders, { scale: 1, ...getPos(start - alpha) }); + to(btnCamera, { scale: 1, ...getPos(start), delay: 0.15 }); + to(btnPlay, { scale: 1, ...getPos(start + alpha), delay: 0.3 }); + to(plusBtnBg, { scale: 1.05 }); + to(plusIcon, { rotation: 45, color: "#ffffff" }); + } else { + to(page, { scale: 1 }); + to(backdrop, { display: "none", opacity: 0 }); + to(navBottomBack, { scale: 1 }); + to(btnFolders, { scale: 0, x: 0, y: 0, delay: 0.3 }); + to(btnCamera, { scale: 0, x: 0, y: 0, delay: 0.15 }); + to(btnPlay, { scale: 0, x: 0, y: 0 }); + to(plusBtnBg, { scale: 0 }); + to(plusBtnBg, { scale: 0 }); + to(plusIcon, { rotation: 0, color: "#39414D" }); + } +}); + +const roi = new Hammer(document.getElementById("section-1")); + +roi.on("swipe", ({ direction }) => { + if (mainStep === 1) { + if (direction === 2) { + stackStep = Math.min(stackStep + 1, 2); + } else { + stackStep = Math.max(stackStep - 1, 0); + } + + updateStack(); + } +}); + +const updateStack = () => { + if (stackStep === 0) { + to(card1, { + x: 0, + scale: 1, + backgroundSize: `${cardHeight}px ${cardHeight}px`, + backgroundPosition: `${stackBackgroundOffset * 0.5}px 0px` + }); + to(card2, { + x: 30, + scale: 0.9, + backgroundSize: `${cardHeight * 1.2}px ${cardHeight * 1.2}px`, + backgroundPosition: `${stackBackgroundOffset * 1.2 * 0.5}px ${ + -cardHeight * 0.2 * 0.5 + }px` + }); + to(card3, { + x: 60, + scale: 0.8, + backgroundSize: `${cardHeight * 1.2}px ${cardHeight * 1.2}px`, + backgroundPosition: `${stackBackgroundOffset * 1.2 * 0.5}px ${ + -cardHeight * 0.2 * 0.5 + }px` + }); + } + if (stackStep === 1) { + to(card1, { + x: -deviceWidth, + scale: 0.8, + backgroundSize: `${cardHeight}px ${cardHeight}px`, + backgroundPosition: `${stackBackgroundOffset * 0.5 + deviceWidth}px 0px` + }); + to(card2, { + x: 0, + scale: 1, + backgroundSize: `${cardHeight}px ${cardHeight}px`, + backgroundPosition: `${stackBackgroundOffset * 0.5}px 0px` + }); + to(card3, { + x: 30, + scale: 0.9, + backgroundSize: `${cardHeight * 1.2}px ${cardHeight * 1.2}px`, + backgroundPosition: `${stackBackgroundOffset * 1.2 * 0.5}px ${ + -cardHeight * 0.2 * 0.5 + }px` + }); + } + if (stackStep === 2) { + to(card1, { + x: -deviceWidth, + scale: 0.8, + backgroundSize: `${cardHeight}px ${cardHeight}px`, + backgroundPosition: `${stackBackgroundOffset * 0.5 + deviceWidth}px 0px` + }); + to(card2, { + x: -deviceWidth, + scale: 0.8, + backgroundSize: `${cardHeight}px ${cardHeight}px`, + backgroundPosition: `${stackBackgroundOffset * 0.5 + deviceWidth}px 0px` + }); + to(card3, { + x: 0, + scale: 1, + backgroundSize: `${cardHeight}px ${cardHeight}px`, + backgroundPosition: `${stackBackgroundOffset * 0.5}px 0px` + }); + } + + if (stackStep === -1) { + to(card1, { + x: 0, + backgroundSize: `${restCardSize}px ${restCardSize}px`, + backgroundPosition: "0px 0px", + scale: 1 + }); + to(card2, { + x: 0, + backgroundSize: `${restCardSize}px ${restCardSize}px`, + backgroundPosition: "0px 0px", + scale: 0.9 + }); + to(card3, { + x: 0, + backgroundSize: `${restCardSize}px ${restCardSize}px`, + backgroundPosition: "0px 0px", + scale: 0.8 + }); + } +}; + +const stackOnSelect = () => { + to(card1, { + backgroundPosition: `${(deviceWidth - cardHeight) * 0.5}px 0px` + }); + to(card2, { + backgroundPosition: `${(deviceWidth - cardHeight) * 0.5}px 0px` + }); + to(card3, { + backgroundPosition: `${(deviceWidth - cardHeight) * 0.5}px 0px` + }); +}; + +const updateLayout = (reset = false) => { + if (mainStep === 0) { + to(nav, { height: 120 }); + to(titleSet1, { scale: 1, transformOrigin: "Top Left" }); + to(titleSet2, { scale: 0, transformOrigin: "Bottom Left" }); + to(titleSets, { y: 0 }); + + to(section1, { height: deviceWidth, y: 0 }); + to(cardSet, { height: restCardSize, width: restCardSize }); + to(userDetails, { scale: 0.8, transformOrigin: "Bottom Left" }); + + stackStep = -1; + updateStack(); + } + + if (mainStep === 1) { + to(nav, { height: 72 }); + to(titleSet1, { scale: 0, transformOrigin: "Top Left" }); + to(titleSet2, { scale: 1, transformOrigin: "Bottom Left" }); + to(titleSets, { y: -120 }); + to(userDetails, { scale: 0.85, transformOrigin: "Bottom Left" }); + + to(section1, { height: 1200, y: 0, padding: stackPadding }); + to(cardSet, { height: cardHeight, width: cardWidth }); + to(card, { borderRadius: 24 }); + to(gallery, { scale: 0 }); + if (reset) { + stackStep = 0; + } + to(iconArrowDown, { opacity: 0, scale: 0 }); + to(iconHome, { opacity: 1, scale: 1 }); + updateStack(); + } + + if (mainStep === 2) { + to(section1, { y: sectionOffset, padding: 0, height: 1200 }); + to(gallery, { scale: 1 }); + to(cardSet, { width: deviceWidth, height: cardHeight }); + to(card, { borderRadius: 0 }); + to(userDetails, { scale: 1, transformOrigin: "Bottom Left" }); + to(iconArrowDown, { opacity: 1, scale: 1 }); + to(iconHome, { opacity: 0, scale: 0 }); + stackOnSelect(); + } +}; + +updateLayout(); + +roi.on("tap", () => { + if ([0, 1].includes(mainStep)) { + mainStep += 1; + updateLayout(true); + } +}); + +click(btnHome)(() => { + if ([1, 2].includes(mainStep)) { + mainStep -= 1; + updateLayout(false); + } +}); diff --git a/card-interactions-with-gsap/src/style.css b/card-interactions-with-gsap/src/style.css new file mode 100644 index 0000000..5e8e4b4 --- /dev/null +++ b/card-interactions-with-gsap/src/style.css @@ -0,0 +1,107 @@ +@import url("https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"); + +body { + font-family: "Roboto", sans-serif; + color: white; + background: linear-gradient(180deg, #ae5c49 0%, #593733 100%); +} + +.mock-window { + width: 100vw; + height: 100vh; + display: grid; + grid-template-columns: 1fr; + grid-template-rows: 72px 1fr 100px; + background-color: #131517; +} + +@media (min-width: 640px) { + .mock-window { + width: 414px; + height: 896px; + } +} + +.device-details { + grid-row: 1/2; + grid-column: 1/2; +} +.page { + grid-row: 1/4; + grid-column: 1/2; +} +.backdrop { + grid-row: 1/4; + grid-column: 1/2; + background: #171010; + display: none; +} +.bottom-nav { + grid-row: 3/4; + grid-column: 1/2; +} + +.device-top { + height: 72px; +} +.nav { + height: 120px; +} +.titles { + height: 72px; +} + +.tabs { + height: 48px; +} + +.card { + border-radius: 24px; +} + +.card-1 { + background: url("https://assets.codepen.io/3685267/card-interactions-gsap-image1.jpg"); + background-size: 366px 366px; + background-repeat: no-repeat; + background-position: 0px 0px; +} +.card-2 { + background: url("https://assets.codepen.io/3685267/card-interactions-gsap-image2.jpg"); + background-size: 366px 366px; + background-repeat: no-repeat; + background-position: 0px 0px; +} +.card-3 { + background: url("https://assets.codepen.io/3685267/card-interactions-gsap-image3.jpg"); + background-size: 366px 366px; + background-repeat: no-repeat; + background-position: 0px 0px; +} + +.tab-selected { + background-color: #444346; +} + +.text-secondary { + color: #9fa1a3; +} + +.absolute-center { + left: 50%; + top: 50%; + transform: translate(-50%, -50%); +} + +.test { + transform: translate(-100px, -100px); +} +.test1 { + transform: translate(0px, -100px); +} +.test2 { + transform: translate(100px, -100px); +} + +.btn-options { + box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.25); +} diff --git a/cards-with-simple-stripe-backgrounds/README.markdown b/cards-with-simple-stripe-backgrounds/README.markdown new file mode 100644 index 0000000..5a2daaa --- /dev/null +++ b/cards-with-simple-stripe-backgrounds/README.markdown @@ -0,0 +1,4 @@ +# Cards with simple stripe backgrounds + _A Pen created at CodePen.io. Original URL: [https://codepen.io/thebabydino/pen/poJJgKq](https://codepen.io/thebabydino/pen/poJJgKq). + + Inspiration from these Shutterstock sets: [#1](https://www.shutterstock.com/image-vector/flat-cover-templates-set-geometric-lines-1544522735), [#2](https://www.shutterstock.com/image-vector/tech-cover-templates-set-geometric-lines-1577082949), [#3](https://www.shutterstock.com/image-vector/tech-cover-templates-set-geometric-lines-1448836910), [#4](https://www.shutterstock.com/image-vector/colorful-cover-templates-set-geometric-lines-1433157926), [#4](https://www.shutterstock.com/image-vector/dynamic-cover-templates-set-geometric-lines-1458828635), [#5](https://www.shutterstock.com/image-vector/minimalist-covers-linear-design-geometric-lines-1495500647), [#6](https://www.shutterstock.com/image-vector/colored-cover-templates-set-geometric-lines-1521829895), [#7](https://www.shutterstock.com/image-vector/colored-cover-templates-set-geometric-lines-1521829895). \ No newline at end of file diff --git a/cards-with-simple-stripe-backgrounds/dist/index.html b/cards-with-simple-stripe-backgrounds/dist/index.html new file mode 100644 index 0000000..a70a8db --- /dev/null +++ b/cards-with-simple-stripe-backgrounds/dist/index.html @@ -0,0 +1,43 @@ + + + + + CodePen - Cards with simple stripe backgrounds + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + diff --git a/cards-with-simple-stripe-backgrounds/dist/style.css b/cards-with-simple-stripe-backgrounds/dist/style.css new file mode 100644 index 0000000..9cf62b1 --- /dev/null +++ b/cards-with-simple-stripe-backgrounds/dist/style.css @@ -0,0 +1,188 @@ +body { + --h: 19em; + display: grid; + grid-template-columns: repeat(var(--n, 7), var(--w, 13em)); + grid-gap: 1em; + place-content: center; + margin: 0; + min-height: 100vh; + background: #333; +} +@media (max-width: 99em) { + body { + --n: 6 ; + } +} +@media (max-width: 85em) { + body { + --n: 5 ; + } +} +@media (max-width: 71em) { + body { + --n: 4 ; + } +} +@media (max-width: 57em) { + body { + --n: 3 ; + } +} +@media (max-width: 43em) { + body { + --n: 2 ; + } +} +@media (max-width: 29em) { + body { + --n: 1 ; + } +} +@media (max-width: 15em) { + body { + --w: 100%; + --h: 146.1538461538vw; + } +} + +.card { + --rlist: var(--c) 0 3px, transparent 0 7px; + --dim: 100% 50% no-repeat; + --ang: 90deg; + overflow: hidden; + position: relative; + height: var(--h); + border-radius: 7px; + box-shadow: 2px 2px 17px #000; + background: repeating-linear-gradient(var(--ang-0, -45deg), var(--rlist)) var(--pos-0, 0 0)/var(--dim), repeating-linear-gradient(var(--ang-1, 45deg), var(--rlist)) var(--pos-1, 0 100%)/var(--dim), linear-gradient(var(--ang), var(--nlist)); +} +.card:nth-child(4n + 2) { + --ang-0: 45deg; + --ang-1: 135deg; +} +.card:nth-child(4n + 3) { + --ang-0: -60deg; + --ang-1: 60deg; +} +.card:nth-child(4n) { + --ang-0: -120deg; + --ang-1: 120deg; +} +.card:nth-child(1) { + --c: #3ea814; + --nlist: #e8f4c6, #3bb720; +} +.card:nth-child(2) { + --c: #5d6f80; + --nlist: #768896, #cbd4d6; +} +.card:nth-child(3) { + --c: #fe3a01; + --nlist: #fe3502, #efd25d; +} +.card:nth-child(4) { + --c: #14282d; + --nlist: #81b7c9, #26353c; +} +.card:nth-child(5) { + --c: #0e685e; + --nlist: #77dddd, #1e766a; +} +.card:nth-child(6) { + --c: #dd7519; + --nlist: #e68323, #fcdf85; +} +.card:nth-child(7) { + --c: #034077; + --nlist: #013579, #3fdbe5; +} +.card:nth-child(8) { + --c: #05131f; + --nlist: #2c6f90, #0e1f29; +} +.card:nth-child(9) { + --c: #b63e03; + --nlist: #ebd346, #c2400c; +} +.card:nth-child(10) { + --c: #010e05; + --nlist: #051e18, #186d56; +} +.card:nth-child(11) { + --c: #093658; + --nlist: #193961, #72cadd; +} +.card:nth-child(12) { + --c: #011422; + --nlist: #027899, #05262d; +} +.card:nth-child(13) { + --c: #e0aa0a; + --nlist: #fcef34, #dead1f; +} +.card:nth-child(14) { + --c: #13507e; + --nlist: #235790, #7fc8d3; +} +.card:nth-child(15) { + --c: #326f12; + --nlist: #397d28, #cce296; +} +.card:nth-child(16) { + --c: #4486b0; + --nlist: #d4eef7, #3b8cbc; +} +.card:nth-child(17) { + --c: #4d3628; + --nlist: #dac7b0, #513831; +} +.card:nth-child(18) { + --c: #ed1d00; + --nlist: #ef2902, #f6940a; +} +.card:nth-child(19) { + --c: #c71b01; + --nlist: #cd1700, #f76705; +} +.card:nth-child(20) { + --c: #2e354c; + --nlist: #adc0e0, #303548; +} +.card:nth-child(21) { + --c: #88b70f; + --nlist: #e2eb81, #9cc323; +} +.card:nth-child(22) { + --c: #243eb1; + --nlist: #3046bb, #a4c9e6; +} +.card:nth-child(23) { + --c: #990741; + --nlist: #a6103c, #f246d6; +} +.card:nth-child(24) { + --c: #456400; + --nlist: #d2e001, #3a6202; +} +.card:nth-child(25) { + --c: #bf5734; + --nlist: #ecd7bc, #c95c3a; +} +.card:nth-child(26) { + --c: #228f8a; + --nlist: #2b9c96, #90e1e2; +} +.card:nth-child(27) { + --c: #49130c; + --nlist: #de8068, #55221a; +} +.card:nth-child(28) { + --c: #32453f; + --nlist: #b9dcce, #333e3a; +} + +.v { + --dim: 50% no-repeat; + --ang: 0deg; + --pos-1: 100%; +} \ No newline at end of file diff --git a/cards-with-simple-stripe-backgrounds/license.txt b/cards-with-simple-stripe-backgrounds/license.txt new file mode 100644 index 0000000..745bb98 --- /dev/null +++ b/cards-with-simple-stripe-backgrounds/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Ana Tudor (https://codepen.io/thebabydino/pen/poJJgKq) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/cards-with-simple-stripe-backgrounds/src/index.html b/cards-with-simple-stripe-backgrounds/src/index.html new file mode 100644 index 0000000..6d1948f --- /dev/null +++ b/cards-with-simple-stripe-backgrounds/src/index.html @@ -0,0 +1,28 @@ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/cards-with-simple-stripe-backgrounds/src/style.scss b/cards-with-simple-stripe-backgrounds/src/style.scss new file mode 100644 index 0000000..729169c --- /dev/null +++ b/cards-with-simple-stripe-backgrounds/src/style.scss @@ -0,0 +1,204 @@ +$w: 13em; +$f: 19/13; +$g: 1em; +$n: 7; +$c: #4B384C; + +body { + --h: #{$f*$w}; + display: grid; + grid-template-columns: repeat(var(--n, #{$n}), var(--w, #{$w})); + grid-gap: 1em; + place-content: center; + margin: 0; + min-height: 100vh; + background: #333; + + @for $i from 1 through $n { + @media (max-width: ($n - $i + 1)*$w + ($n - $i + 2)*$g) { + @if $i == $n { + --w: 100%; + --h: #{$f*100vw}; + } + @else { --n: #{$n - $i} } + } + } +} + +.card { + --rlist: var(--c) 0 3px, transparent 0 7px; + --dim: 100% 50% no-repeat; + --ang: 90deg; + overflow: hidden; + position: relative; + height: var(--h); + border-radius: 7px; + box-shadow: 2px 2px 17px #000; + background: + repeating-linear-gradient(var(--ang-0, -45deg), + var(--rlist)) var(--pos-0, 0 0)/ var(--dim), + repeating-linear-gradient(var(--ang-1, 45deg), + var(--rlist)) var(--pos-1, 0 100%)/ var(--dim), + linear-gradient(var(--ang), var(--nlist)); + + &:nth-child(4n + 2) { + --ang-0: 45deg; + --ang-1: 135deg; + } + + &:nth-child(4n + 3) { + --ang-0: -60deg; + --ang-1: 60deg; + } + + &:nth-child(4n) { + --ang-0: -120deg; + --ang-1: 120deg; + } + + &:nth-child(1) { + --c: #3ea814; + --nlist: #e8f4c6, #3bb720; + } + + &:nth-child(2) { + --c: #5d6f80; + --nlist: #768896, #cbd4d6; + } + + &:nth-child(3) { + --c: #fe3a01; + --nlist: #fe3502, #efd25d; + } + + &:nth-child(4) { + --c: #14282d; + --nlist: #81b7c9, #26353c; + } + + &:nth-child(5) { + --c: #0e685e; + --nlist: #77dddd, #1e766a; + } + + &:nth-child(6) { + --c: #dd7519; + --nlist: #e68323, #fcdf85; + } + + &:nth-child(7) { + --c: #034077; + --nlist: #013579, #3fdbe5; + } + + &:nth-child(8) { + --c: #05131f; + --nlist: #2c6f90, #0e1f29; + } + + &:nth-child(9) { + --c: #b63e03; + --nlist: #ebd346, #c2400c; + } + + &:nth-child(10) { + --c: #010e05; + --nlist: #051e18, #186d56; + } + + &:nth-child(11) { + --c: #093658; + --nlist: #193961, #72cadd; + } + + &:nth-child(12) { + --c: #011422; + --nlist: #027899, #05262d; + } + + &:nth-child(13) { + --c: #e0aa0a; + --nlist: #fcef34, #dead1f; + } + + &:nth-child(14) { + --c: #13507e; + --nlist: #235790, #7fc8d3; + } + + &:nth-child(15) { + --c: #326f12; + --nlist: #397d28, #cce296; + } + + &:nth-child(16) { + --c: #4486b0; + --nlist: #d4eef7, #3b8cbc; + } + + &:nth-child(17) { + --c: #4d3628; + --nlist: #dac7b0, #513831; + } + + &:nth-child(18) { + --c: #ed1d00; + --nlist: #ef2902, #f6940a; + } + + &:nth-child(19) { + --c: #c71b01; + --nlist: #cd1700, #f76705; + } + + &:nth-child(20) { + --c: #2e354c; + --nlist: #adc0e0, #303548; + } + + &:nth-child(21) { + --c: #88b70f; + --nlist: #e2eb81, #9cc323; + } + + &:nth-child(22) { + --c: #243eb1; + --nlist: #3046bb, #a4c9e6; + } + + &:nth-child(23) { + --c: #990741; + --nlist: #a6103c, #f246d6; + } + + &:nth-child(24) { + --c: #456400; + --nlist: #d2e001, #3a6202; + } + + &:nth-child(25) { + --c: #bf5734; + --nlist: #ecd7bc, #c95c3a; + } + + &:nth-child(26) { + --c: #228f8a; + --nlist: #2b9c96, #90e1e2; + } + + &:nth-child(27) { + --c: #49130c; + --nlist: #de8068, #55221a; + } + + &:nth-child(28) { + --c: #32453f; + --nlist: #b9dcce, #333e3a; + } +} + +.v { + --dim: 50% no-repeat; + --ang: 0deg; + --pos-1: 100%; +} \ No newline at end of file diff --git a/carousel-lock-interface/README.markdown b/carousel-lock-interface/README.markdown new file mode 100644 index 0000000..798456f --- /dev/null +++ b/carousel-lock-interface/README.markdown @@ -0,0 +1,9 @@ +# Carousel Lock Interface + _A Pen created at CodePen.io. Original URL: [https://codepen.io/jackrugile/pen/RxqdxL](https://codepen.io/jackrugile/pen/RxqdxL). + + Having some fun with carousels! Use the sliding carousels to enter the super secret code. + +This demo was made with: + +- [Flickity](https://flickity.metafizzy.co/) by [Metafizzy](https://metafizzy.co/) +- [howler.js](https://howlerjs.com/) by [James Simpson](https://twitter.com/GoldFireStudios) \ No newline at end of file diff --git a/carousel-lock-interface/dist/index.html b/carousel-lock-interface/dist/index.html new file mode 100644 index 0000000..10024ce --- /dev/null +++ b/carousel-lock-interface/dist/index.html @@ -0,0 +1,163 @@ + + + + + Carousel Lock Interface + + + + + + + + + +
+
+
+
0000
+
LOCKED
+
+
+
+
+
+
0
+
+
+
1
+
+
+
2
+
+
+
3
+
+
+
4
+
+
+
5
+
+
+
6
+
+
+
7
+
+
+
8
+
+
+
9
+
+
+
+
+
0
+
+
+
1
+
+
+
2
+
+
+
3
+
+
+
4
+
+
+
5
+
+
+
6
+
+
+
7
+
+
+
8
+
+
+
9
+
+
+
+
+
0
+
+
+
1
+
+
+
2
+
+
+
3
+
+
+
4
+
+
+
5
+
+
+
6
+
+
+
7
+
+
+
8
+
+
+
9
+
+
+
+
+
0
+
+
+
1
+
+
+
2
+
+
+
3
+
+
+
4
+
+
+
5
+
+
+
6
+
+
+
7
+
+
+
8
+
+
+
9
+
+
+
+
+
+

Super Secret Code: 1234

+

Made with Flickity

+
+ + + + + + + \ No newline at end of file diff --git a/carousel-lock-interface/dist/script.js b/carousel-lock-interface/dist/script.js new file mode 100644 index 0000000..734c34c --- /dev/null +++ b/carousel-lock-interface/dist/script.js @@ -0,0 +1,158 @@ +class Lock { + + constructor() { + this.pin = '1234'; + this.setupDom(); + this.setupFlickity(); + this.setupAudio(); + this.onResize(); + this.listen(); + } + + listen() { + window.addEventListener('resize', () => this.onResize()); + } + + onResize() { + if (window.innerWidth % 2 === 0) { + this.dom.lock.style.marginLeft = '0px'; + } else { + this.dom.lock.style.marginLeft = '1px'; + } + } + + onChange() { + this.sounds.select.play(); + this.code = this.getCode(); + this.dom.code.textContent = this.code; + if (this.code === this.pin) { + this.verified = true; + this.dom.lock.classList.add('verified'); + this.dom.status.textContent = 'UNLOCKED'; + this.sounds.success.play(); + } else { + this.dom.lock.classList.remove('verified'); + this.dom.status.textContent = 'LOCKED'; + if (this.verified) { + this.sounds.fail.play(); + } + this.verified = false; + } + } + + getCode() { + let code = ''; + for (let i = 0, len = this.dom.rows.length; i < len; i++) { + let cell = this.dom.rows[i].querySelector('.is-selected .text'); + let num = cell.textContent; + code += num; + } + return code; + } + + setupDom() { + this.dom = {}; + this.dom.lock = document.querySelector('.lock'); + this.dom.rows = document.querySelectorAll('.row'); + this.dom.code = document.querySelector('.code'); + this.dom.status = document.querySelector('.status'); + } + + setupAudio() { + this.sounds = {}; + + this.sounds.select = new Howl({ + src: [ + 'https://jackrugile.com/sounds/misc/lock-button-1.mp3', + 'https://jackrugile.com/sounds/misc/lock-button-1.ogg'], + + volume: 0.5, + rate: 1.4 }); + + + this.sounds.prev = new Howl({ + src: [ + 'https://jackrugile.com/sounds/misc/lock-button-4.mp3', + 'https://jackrugile.com/sounds/misc/lock-button-4.ogg'], + + volume: 0.5, + rate: 1 }); + + + this.sounds.next = new Howl({ + src: [ + 'https://jackrugile.com/sounds/misc/lock-button-4.mp3', + 'https://jackrugile.com/sounds/misc/lock-button-4.ogg'], + + volume: 0.5, + rate: 1.2 }); + + + this.sounds.hover = new Howl({ + src: [ + 'https://jackrugile.com/sounds/misc/lock-button-1.mp3', + 'https://jackrugile.com/sounds/misc/lock-button-1.ogg'], + + volume: 0.2, + rate: 3 }); + + + this.sounds.success = new Howl({ + src: [ + 'https://jackrugile.com/sounds/misc/lock-online-1.mp3', + 'https://jackrugile.com/sounds/misc/lock-online-1.ogg'], + + volume: 0.5, + rate: 1 }); + + + this.sounds.fail = new Howl({ + src: [ + 'https://jackrugile.com/sounds/misc/lock-fail-1.mp3', + 'https://jackrugile.com/sounds/misc/lock-fail-1.ogg'], + + volume: 0.6, + rate: 1 }); + + } + + setupFlickity() { + for (let i = 0, len = this.dom.rows.length; i < len; i++) { + let row = this.dom.rows[i]; + let flkty = new Flickity(row, { + selectedAttraction: 0.25, + friction: 0.9, + cellAlign: 'center', + pageDots: false, + wrapAround: true }); + + flkty.lastIndex = 0; + + flkty.on('select', () => { + if (flkty.selectedIndex !== flkty.lastIndex) { + this.onChange(); + } + flkty.lastIndex = flkty.selectedIndex; + }); + + row.addEventListener('mouseenter', () => { + this.sounds.hover.play(); + }); + } + + this.dom.prevNextBtns = this.dom.lock.querySelectorAll('.flickity-prev-next-button'); + for (let i = 0, len = this.dom.prevNextBtns.length; i < len; i++) { + let btn = this.dom.prevNextBtns[i]; + btn.addEventListener('click', () => { + if (btn.classList.contains('previous')) { + this.sounds.prev.play(); + } else { + this.sounds.next.play(); + } + }); + } + }} + + + +let lock = new Lock(); \ No newline at end of file diff --git a/carousel-lock-interface/dist/style.css b/carousel-lock-interface/dist/style.css new file mode 100644 index 0000000..b93bc51 --- /dev/null +++ b/carousel-lock-interface/dist/style.css @@ -0,0 +1,363 @@ +html, +body { + height: 100%; + overflow: hidden; +} + +body { + align-items: center; + background: #111; + background: radial-gradient(#1a1a1a, black); + display: flex; + flex-direction: column; + justify-content: center; +} +body:after { + -webkit-animation: fade 1000ms 100ms forwards; + animation: fade 1000ms 100ms forwards; + background: #000; + bottom: 0; + content: ''; + left: 0; + pointer-events: none; + position: fixed; + right: 0; + top: 0; + z-index: 100; +} + +@-webkit-keyframes fade { + 100% { + opacity: 0; + } +} + +@keyframes fade { + 100% { + opacity: 0; + } +} +.lock { + background: #000; + border-bottom: 1px solid #262626; + border-left: 1px solid #262626; + box-shadow: -1px 1px 0 #0f0f0f, -2px 2px 0 #0d0d0d, -3px 3px 0 #0a0a0a, -4px 4px 0 #080808, -8px 8px 16px rgba(0, 0, 0, 0.5); + position: relative; + z-index: 20; +} +.lock:before { + background: linear-gradient(90deg, #262626 0%, #595959 100%); + content: ''; + height: 1px; + left: 0; + pointer-events: none; + position: absolute; + top: 0; + width: 100%; + z-index: 1; +} +.lock:after { + background: linear-gradient(0deg, #262626 0%, #595959 100%); + bottom: 0; + content: ''; + height: 100%; + pointer-events: none; + position: absolute; + right: 0; + top: 0; + width: 1px; +} + +.screen { + background: #000; + height: 40px; + position: relative; +} +.screen:before { + background: linear-gradient(45deg, rgba(255, 255, 255, 0) 40%, rgba(255, 255, 255, 0.2) 100%); + bottom: 0; + content: ''; + left: 0; + pointer-events: none; + position: absolute; + right: 0; + top: 0; + z-index: 1; +} +.screen:after { + background: linear-gradient(90deg, #262626 0%, #595959 100%); + bottom: 0; + content: ''; + height: 1px; + left: 0; + position: absolute; + width: 100%; +} + +.code, +.status { + font-family: 'Share Tech Mono', monospace; + font-size: 1em; + height: 40px; + line-height: 42px; + padding: 0 0.75em; + position: absolute; +} + +.code { + color: #fff; + left: 0; + text-shadow: 0 0 15px #fff; +} + +.status { + -webkit-animation: pulse 1000ms infinite alternate; + animation: pulse 1000ms infinite alternate; + color: #f00; + right: 0; + text-shadow: 0 0 15px #f00; +} +.verified .status { + -webkit-animation: pulse 300ms infinite alternate; + animation: pulse 300ms infinite alternate; + color: #0f0; + text-shadow: 0 0 15px #0f0; +} + +@-webkit-keyframes pulse { + 0%, + 0% { + opacity: 0.25; + } + 100% { + opacity: 1; + } +} + +@keyframes pulse { + 0%, + 0% { + opacity: 0.25; + } + 100% { + opacity: 1; + } +} +.scanlines { + background: linear-gradient(rgba(255, 255, 255, 0.04) 50%, rgba(0, 0, 0, 0.1) 50%); + background-size: 100% 2px; + bottom: 1px; + left: 0; + pointer-events: none; + position: absolute; + right: 1px; + top: 1px; + z-index: 1; +} + +.rows { + padding: 1px 2px 1px 1px; + width: 210px; +} + +.row { + height: 50px; + width: 210px; + position: relative; +} +.row:before, .row:after { + bottom: 0; + content: ''; + pointer-events: none; + position: absolute; + top: 0; + width: 35%; + z-index: 1; +} +.row:before { + background: linear-gradient(90deg, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); + left: 0; +} +.row:after { + background: linear-gradient(90deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.5)); + right: 0; +} + +.cell { + background: linear-gradient(45deg, #0d0d0d, #262626); + box-shadow: inset 0 0 0 1px #000, inset 0 0 0 2px #383838; + display: flex; + height: 50px; + position: relative; + justify-content: center; + width: 70px; +} +.cell:before { + background: url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/836/noise.jpg); + background-size: 256px 256px; + bottom: 0; + content: ''; + left: 0; + opacity: 0.08; + position: absolute; + right: 0; + top: 0; + z-index: 1; +} +.cell:after { + background: radial-gradient(rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0)); + bottom: 0; + content: ''; + left: 0; + opacity: 0; + position: absolute; + right: 0; + top: 0; + transition-duration: 200ms; + transition-property: opacity; + z-index: 2; +} +.row:hover .cell:after { + opacity: 1; + transition-duration: 64ms; +} + +.text { + color: #fff; + font-family: 'Orbitron', monospace; + font-size: 1.25em; + font-weight: 500; + line-height: 56px; + opacity: 0.3; + -webkit-transform: scale(0.55); + transform: scale(0.55); + transition-duration: 150ms; + transition-property: color, opacity, text-shadow, -webkit-transform; + transition-property: color, opacity, text-shadow, transform; + transition-property: color, opacity, text-shadow, transform, -webkit-transform; +} +.is-selected .text { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); +} +.verified .is-selected .text { + color: #0f0; +} + +/* ---- previous/next buttons ---- */ +.flickity-prev-next-button { + width: 60px; + height: 50px; + border: none; + border-radius: 0; + background: none; +} +.flickity-prev-next-button:before { + background: linear-gradient(135deg, #8c8c8c, #333333); + bottom: 0; + box-shadow: inset 0 1px 0 0 rgba(255, 255, 255, 0.3), inset 0 0 0 1px rgba(255, 255, 255, 0.2); + content: ''; + height: 12px; + left: 0; + margin: auto; + opacity: 0; + position: absolute; + right: 0; + top: 0; + -webkit-transform: scale(1) rotate(45deg); + transform: scale(1) rotate(45deg); + transition-duration: 200ms; + transition-property: background, box-shadow, opacity, -webkit-transform; + transition-property: background, box-shadow, opacity, transform; + transition-property: background, box-shadow, opacity, transform, -webkit-transform; + width: 12px; + z-index: 1; +} +.flickity-prev-next-button:after { + background: rgba(26, 26, 26, 0.1); + background: linear-gradient(135deg, #404040, #1a1a1a); + box-shadow: inset 0 1px 0 0 rgba(255, 255, 255, 0.15), inset 0 0 0 1px rgba(255, 255, 255, 0.1), 0 1px 0 #212121, 0 2px 0 #1a1a1a, 0 3px 0 #141414, 0 4px 0 #0f0f0f, 0 5px 16px rgba(0, 0, 0, 0.75); + bottom: 0; + content: ''; + height: 12px; + left: 0; + margin: auto; + position: absolute; + right: 0; + top: 0; + -webkit-transform: scale(1) rotate(45deg); + transform: scale(1) rotate(45deg); + transition-duration: 200ms; + transition-property: background, box-shadow, opacity, -webkit-transform; + transition-property: background, box-shadow, opacity, transform; + transition-property: background, box-shadow, opacity, transform, -webkit-transform; + width: 12px; +} + +.flickity-prev-next-button:hover { + background: none; +} +.flickity-prev-next-button:hover:before { + opacity: 1; + -webkit-transform: scale(1) rotate(45deg); + transform: scale(1) rotate(45deg); + transition-duration: 64ms; +} +.flickity-prev-next-button:hover:after { + transition-duration: 64ms; +} + +.flickity-prev-next-button:focus { + outline: none; + box-shadow: none; +} + +.flickity-prev-next-button:active { + opacity: 1; +} +.flickity-prev-next-button:active:before { + -webkit-transform: scale(1) translateX(-1px) translateY(3px) rotate(45deg); + transform: scale(1) translateX(-1px) translateY(3px) rotate(45deg); + transition-duration: 64ms; +} +.flickity-prev-next-button:active:after { + box-shadow: inset 0 1px 0 0 rgba(255, 255, 255, 0.15), inset 0 0 0 1px rgba(255, 255, 255, 0.1), 0 0px 0 #262626, 0 0px 0 #1f1f1f, 0 0px 0 #1a1a1a, 0 0px 0 #141414, 0 5px 4px rgba(0, 0, 0, 0.5); + -webkit-transform: scale(1) translateX(-1px) translateY(3px) rotate(45deg); + transform: scale(1) translateX(-1px) translateY(3px) rotate(45deg); + transition-duration: 64ms; +} + +.flickity-prev-next-button.previous { + left: -60px; +} + +.flickity-prev-next-button.next { + right: -60px; +} + +.flickity-prev-next-button svg { + display: none; +} + +.info { + color: #666; + font-family: 'Share Tech Mono', monospace; + font-size: 0.75em; + line-height: 1; + padding-top: 40px; + text-align: center; + text-transform: uppercase; +} + +.info p { + margin-bottom: 10px; +} +.info p:last-child { + margin-bottom: 0; +} + +.info a { + color: #fff; + text-decoration: none; +} diff --git a/carousel-lock-interface/license.txt b/carousel-lock-interface/license.txt new file mode 100644 index 0000000..67c74ad --- /dev/null +++ b/carousel-lock-interface/license.txt @@ -0,0 +1,13 @@ + + + + diff --git a/carousel-lock-interface/src/index.html b/carousel-lock-interface/src/index.html new file mode 100644 index 0000000..b0aa395 --- /dev/null +++ b/carousel-lock-interface/src/index.html @@ -0,0 +1,143 @@ + +
+
+
+
0000
+
LOCKED
+
+
+
+
+
+
0
+
+
+
1
+
+
+
2
+
+
+
3
+
+
+
4
+
+
+
5
+
+
+
6
+
+
+
7
+
+
+
8
+
+
+
9
+
+
+
+
+
0
+
+
+
1
+
+
+
2
+
+
+
3
+
+
+
4
+
+
+
5
+
+
+
6
+
+
+
7
+
+
+
8
+
+
+
9
+
+
+
+
+
0
+
+
+
1
+
+
+
2
+
+
+
3
+
+
+
4
+
+
+
5
+
+
+
6
+
+
+
7
+
+
+
8
+
+
+
9
+
+
+
+
+
0
+
+
+
1
+
+
+
2
+
+
+
3
+
+
+
4
+
+
+
5
+
+
+
6
+
+
+
7
+
+
+
8
+
+
+
9
+
+
+
+
+
+

Super Secret Code: 1234

+

Made with Flickity

+
\ No newline at end of file diff --git a/carousel-lock-interface/src/script.babel b/carousel-lock-interface/src/script.babel new file mode 100644 index 0000000..70db32e --- /dev/null +++ b/carousel-lock-interface/src/script.babel @@ -0,0 +1,158 @@ +class Lock { + + constructor() { + this.pin = '1234'; + this.setupDom(); + this.setupFlickity(); + this.setupAudio(); + this.onResize(); + this.listen(); + } + + listen() { + window.addEventListener('resize', () => this.onResize()); + } + + onResize() { + if(window.innerWidth % 2 === 0) { + this.dom.lock.style.marginLeft = '0px'; + } else { + this.dom.lock.style.marginLeft = '1px'; + } + } + + onChange() { + this.sounds.select.play(); + this.code = this.getCode(); + this.dom.code.textContent = this.code; + if(this.code === this.pin) { + this.verified = true; + this.dom.lock.classList.add('verified'); + this.dom.status.textContent = 'UNLOCKED'; + this.sounds.success.play(); + } else { + this.dom.lock.classList.remove('verified'); + this.dom.status.textContent = 'LOCKED'; + if(this.verified) { + this.sounds.fail.play(); + } + this.verified = false; + } + } + + getCode() { + let code = ''; + for(let i = 0, len = this.dom.rows.length; i < len; i++) { + let cell = this.dom.rows[i].querySelector('.is-selected .text'); + let num = cell.textContent; + code += num; + } + return code; + } + + setupDom() { + this.dom = {}; + this.dom.lock = document.querySelector('.lock'); + this.dom.rows = document.querySelectorAll('.row'); + this.dom.code = document.querySelector('.code'); + this.dom.status = document.querySelector('.status'); + } + + setupAudio() { + this.sounds = {}; + + this.sounds.select = new Howl({ + src: [ + 'https://jackrugile.com/sounds/misc/lock-button-1.mp3', + 'https://jackrugile.com/sounds/misc/lock-button-1.ogg' + ], + volume: 0.5, + rate: 1.4 + }); + + this.sounds.prev = new Howl({ + src: [ + 'https://jackrugile.com/sounds/misc/lock-button-4.mp3', + 'https://jackrugile.com/sounds/misc/lock-button-4.ogg' + ], + volume: 0.5, + rate: 1 + }); + + this.sounds.next = new Howl({ + src: [ + 'https://jackrugile.com/sounds/misc/lock-button-4.mp3', + 'https://jackrugile.com/sounds/misc/lock-button-4.ogg' + ], + volume: 0.5, + rate: 1.2 + }); + + this.sounds.hover = new Howl({ + src: [ + 'https://jackrugile.com/sounds/misc/lock-button-1.mp3', + 'https://jackrugile.com/sounds/misc/lock-button-1.ogg' + ], + volume: 0.2, + rate: 3 + }); + + this.sounds.success = new Howl({ + src: [ + 'https://jackrugile.com/sounds/misc/lock-online-1.mp3', + 'https://jackrugile.com/sounds/misc/lock-online-1.ogg' + ], + volume: 0.5, + rate: 1 + }); + + this.sounds.fail = new Howl({ + src: [ + 'https://jackrugile.com/sounds/misc/lock-fail-1.mp3', + 'https://jackrugile.com/sounds/misc/lock-fail-1.ogg' + ], + volume: 0.6, + rate: 1 + }); + } + + setupFlickity() { + for(let i = 0, len = this.dom.rows.length; i < len; i++) { + let row = this.dom.rows[i]; + let flkty = new Flickity( row, { + selectedAttraction: 0.25, + friction: 0.9, + cellAlign: 'center', + pageDots: false, + wrapAround: true + }); + flkty.lastIndex = 0; + + flkty.on('select', () => { + if(flkty.selectedIndex !== flkty.lastIndex) { + this.onChange(); + } + flkty.lastIndex = flkty.selectedIndex; + }); + + row.addEventListener('mouseenter', () => { + this.sounds.hover.play(); + }); + } + + this.dom.prevNextBtns = this.dom.lock.querySelectorAll('.flickity-prev-next-button'); + for(let i = 0, len = this.dom.prevNextBtns.length; i < len; i++) { + let btn = this.dom.prevNextBtns[i]; + btn.addEventListener('click', () => { + if(btn.classList.contains('previous')) { + this.sounds.prev.play(); + } else { + this.sounds.next.play(); + } + }); + } + } + +} + +let lock = new Lock(); \ No newline at end of file diff --git a/carousel-lock-interface/src/style.scss b/carousel-lock-interface/src/style.scss new file mode 100644 index 0000000..e8ac557 --- /dev/null +++ b/carousel-lock-interface/src/style.scss @@ -0,0 +1,405 @@ +html, +body { + height: 100%; + overflow: hidden; +} + +body { + align-items: center; + background: #111; + background: radial-gradient( + hsla(0, 0%, 10%, 1), + hsla(0, 0%, 0%, 1) + ); + display: flex; + flex-direction: column; + justify-content: center; + &:after { + animation: fade 1000ms 100ms forwards; + background: #000; + bottom: 0; + content: ''; + left: 0; + pointer-events: none; + position: fixed; + right: 0; + top: 0; + z-index: 100 + } +} + +@keyframes fade { + 100% { + opacity: 0; + } +} + +.lock { + background: #000; + border-bottom: 1px solid hsla(0, 0%, 15%, 1); + border-left: 1px solid hsla(0, 0%, 15%, 1); + box-shadow: + -1px 1px 0 hsla(0, 0%, 6%, 1), + -2px 2px 0 hsla(0, 0%, 5%, 1), + -3px 3px 0 hsla(0, 0%, 4%, 1), + -4px 4px 0 hsla(0, 0%, 3%, 1), + -8px 8px 16px hsla(0, 0%, 0%, 0.5) + ; + position: relative; + z-index: 20; + &:before { + background: linear-gradient( + 90deg, + hsla(0, 0%, 15%, 1) 0%, + hsla( 0, 0%, 35%, 1) 100% + ); + content: ''; + height: 1px; + left: 0; + pointer-events: none; + position: absolute; + top: 0; + width: 100%; + z-index: 1; + } + &:after { + background: linear-gradient( + 0deg, + hsla(0, 0%, 15%, 1) 0%, + hsla(0, 0%, 35%, 1) 100% + ); + bottom: 0; + content: ''; + height: 100%; + pointer-events: none; + position: absolute; + right: 0; + top: 0; + width: 1px; + } +} + +.screen { + background: #000; + height: 40px; + position: relative; + &:before { + background: linear-gradient( + 45deg, + hsla(0, 0%, 100%, 0) 40%, + hsla(0, 0%, 100%, 0.2) 100% + ); + bottom: 0; + content: ''; + left: 0; + pointer-events: none; + position: absolute; + right: 0; + top: 0; + z-index: 1; + } + &:after { + background: linear-gradient( + 90deg, + hsla(0, 0%, 15%, 1) 0%, + hsla(0, 0%, 35%, 1) 100% + ); + bottom: 0; + content: ''; + height: 1px; + left: 0; + position: absolute; + width: 100%; + } +} + +.code, +.status { + font-family: 'Share Tech Mono', monospace; + font-size: 1em; + height: 40px; + line-height: 42px; + padding: 0 0.75em; + position: absolute; +} + +.code { + color: #fff; + left: 0; + text-shadow: 0 0 15px #fff ; +} + +.status { + animation: pulse 1000ms infinite alternate; + color: #f00; + right: 0; + text-shadow: 0 0 15px #f00; + .verified & { + animation: pulse 300ms infinite alternate; + color: #0f0; + text-shadow: 0 0 15px #0f0; + } +} + +@keyframes pulse { + 0%, + 0% { + opacity: 0.25; + } + 100% { + opacity: 1; + } +} + +.scanlines { + background: linear-gradient( + hsla(0, 0%, 100%, 0.04) 50%, + hsla(0, 0%, 0%, 0.1) 50% + ); + background-size: 100% 2px; + bottom: 1px; + left: 0; + pointer-events: none; + position: absolute; + right: 1px; + top: 1px; + z-index: 1; +} + +.rows { + padding: 1px 2px 1px 1px; + width: 210px; +} + +.row { + height: 50px; + width: 210px; + position: relative; + &:before, + &:after { + bottom: 0; + content: ''; + pointer-events: none; + position: absolute; + top: 0; + width: 35%; + z-index: 1; + } + &:before { + background: linear-gradient( + 90deg, + hsla(0, 0%, 0%, 0.5), + hsla(0, 0%, 0%, 0) + ); + left: 0; + } + &:after { + background: linear-gradient( + 90deg, + hsla(0, 0%, 0%, 0), + hsla(0, 0%, 0%, 0.5) + ); + right: 0; + } +} + +.cell { + background: linear-gradient( + 45deg, + hsla(0, 0%, 5%, 1), + hsla(0, 0%, 15%, 1) + ); + box-shadow: + inset 0 0 0 1px #000, + inset 0 0 0 2px #383838 + ; + display: flex; + height: 50px; + position: relative; + justify-content: center; + width: 70px; + &:before { + background: url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/836/noise.jpg); + background-size: 256px 256px; + bottom: 0; + content: ''; + left: 0; + opacity: 0.08; + position: absolute; + right: 0; + top: 0; + z-index: 1; + } + &:after { + background: radial-gradient( + hsla(0, 0%, 100%, 0.1), + hsla( 0, 0%, 100%, 0) + ); + bottom: 0; + content: ''; + left: 0; + opacity: 0; + position: absolute; + right: 0; + top: 0; + transition-duration: 200ms; + transition-property: opacity; + z-index: 2; + } + .row:hover & { + &:after { + opacity: 1; + transition-duration: 64ms; + } + } +} + +.text { + color: #fff; + font-family: 'Orbitron', monospace; + font-size: 1.25em; + font-weight: 500; + line-height: 56px; + opacity: 0.3; + transform: scale(0.55); + transition-duration: 150ms; + transition-property: color, opacity, text-shadow, transform; + .is-selected & { + opacity: 1; + transform: scale(1); + } + .verified .is-selected & { + color: #0f0; + } +} + +/* ---- previous/next buttons ---- */ + +.flickity-prev-next-button { + width: 60px; + height: 50px; + border: none; + border-radius: 0; + background: none; + &:before { + background: linear-gradient( + 135deg, + hsla(0, 0%, 55%, 1), + hsla(0, 0%, 20%, 1) + ); + bottom: 0; + box-shadow: + inset 0 1px 0 0 hsla(0, 0%, 100%, 0.3), + inset 0 0 0 1px hsla(0, 0%, 100%, 0.2) + ; + content: ''; + height: 12px; + left: 0; + margin: auto; + opacity: 0; + position: absolute; + right: 0; + top: 0; + transform: scale(1) rotate(45deg); + transition-duration: 200ms; + transition-property: background, box-shadow, opacity, transform; + width: 12px; + z-index: 1; + } + &:after { + background: hsla(0, 0%, 10%, 0.1); + background: linear-gradient( + 135deg, + hsla(0, 0%, 25%, 1), + hsla(0, 0%, 10%, 1) + ); + box-shadow: + inset 0 1px 0 0 hsla(0, 0%, 100%, 0.15), + inset 0 0 0 1px hsla(0, 0%, 100%, 0.1), + 0 1px 0 hsla(0, 0%, 13%, 1), + 0 2px 0 hsla(0, 0%, 10%, 1), + 0 3px 0 hsla(0, 0%, 8%, 1), + 0 4px 0 hsla(0, 0%, 6%, 1), + 0 5px 16px hsla(0, 0%, 0%, 0.75) + ; + bottom: 0; + content: ''; + height: 12px; + left: 0; + margin: auto; + position: absolute; + right: 0; + top: 0; + transform: scale(1) rotate(45deg); + transition-duration: 200ms; + transition-property: background, box-shadow, opacity, transform; + width: 12px; + } +} + +.flickity-prev-next-button:hover { + background: none; + &:before { + opacity: 1; + transform: scale(1) rotate(45deg); + transition-duration: 64ms; + } + &:after { + transition-duration: 64ms; + } +} + +.flickity-prev-next-button:focus { + outline: none; + box-shadow: none; +} + +.flickity-prev-next-button:active { + opacity: 1; + &:before { + transform: scale(1) translateX(-1px) translateY(3px) rotate(45deg); + transition-duration: 64ms; + } + &:after { + box-shadow: + inset 0 1px 0 0 hsla(0, 0%, 100%, 0.15), + inset 0 0 0 1px hsla(0, 0%, 100%, 0.1), + 0 0px 0 hsla(0, 0%, 15%, 1), + 0 0px 0 hsla(0, 0%, 12%, 1), + 0 0px 0 hsla(0, 0%, 10%, 1), + 0 0px 0 hsla(0, 0%, 8%, 1), + 0 5px 4px hsla(0, 0%, 0%, 0.5) + ; + transform: scale(1) translateX(-1px) translateY(3px) rotate(45deg); + transition-duration: 64ms; + } +} + +.flickity-prev-next-button.previous { left: -60px; } +.flickity-prev-next-button.next { right: -60px; } + +.flickity-prev-next-button svg { + display: none; +} + +.info { + color: #666; + font-family: 'Share Tech Mono', monospace; + font-size: 0.75em; + line-height: 1; + padding-top: 40px; + text-align: center; + text-transform: uppercase; +} + +.info p { + margin-bottom: 10px; + &:last-child { + margin-bottom: 0; + } +} + +.info a { + color: #fff; + text-decoration: none; +} \ No newline at end of file diff --git a/casio-pt-1-with-html-css-js/README.markdown b/casio-pt-1-with-html-css-js/README.markdown new file mode 100644 index 0000000..7c3523c --- /dev/null +++ b/casio-pt-1-with-html-css-js/README.markdown @@ -0,0 +1,5 @@ +# CASIO PT-1 with HTML/CSS/JS + +A Pen created on CodePen.io. Original URL: [https://codepen.io/manz/pen/KKmdjQZ](https://codepen.io/manz/pen/KKmdjQZ). + + diff --git a/casio-pt-1-with-html-css-js/dist/index.html b/casio-pt-1-with-html-css-js/dist/index.html new file mode 100644 index 0000000..418c1f8 --- /dev/null +++ b/casio-pt-1-with-html-css-js/dist/index.html @@ -0,0 +1,230 @@ + + + + + CodePen - CASIO PT-1 with HTML/CSS/JS + + + + + +
+ + + + +
+ +
+
+
+
+
+
+
+
+
+ power +
+ +
+
+
+
+
+
+
mode
+
+ power off + record + play +
+
+
+
volume
+
+ min + |||||||||| + max +
+
+ +
+
tone
+
+ piano + fantasy + violin + flute +
+
+ +
+
+ clear + del. + โ–ผ + โ–ฒ + rhythm select + reset + demo + memory play +
+
tempo
+
+ +
+
one key play
+
+
+
+
+
+ + + + + + + + +
+
+ + + + + + + + + + + + + + +
+
+ + + + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ELECTRONIC MUSICAL INSTRUMENT
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
G
+
A
+
B
+
C
+
D
+
E
+
F
+
G
+
A
+
B
+
C
+
D
+
E
+
F
+
G
+
A
+
B
+
+
+
+
+
+ +
+ Created by +

Manz.dev

+

on Twitch / Youtube

+
+ + + + + diff --git a/casio-pt-1-with-html-css-js/dist/script.js b/casio-pt-1-with-html-css-js/dist/script.js new file mode 100644 index 0000000..e973b9c --- /dev/null +++ b/casio-pt-1-with-html-css-js/dist/script.js @@ -0,0 +1,172 @@ +import Soundfont from "https://cdn.skypack.dev/soundfont-player"; + +const NOTES = { + "keyz": "G3", + "keyx": "A3", + "keyc": "B3", + "keyv": "C4", + "keyb": "D4", + "keyn": "E4", + "keym": "F4", + "keyq": "G4", + "keyw": "A4", + "keye": "B4", + "keyr": "C5", + "keyt": "D5", + "keyy": "E5", + "keyu": "F5", + "keyi": "G5", + "keyo": "A5", + "keyp": "B5", + "keys": "G#3", + "keyd": "A#3", + "keyg": "C#4", + "keyh": "D#4", + "keyk": "F#4", + "keyl": "G#4", + "keyรฑ": "A#4", + "key5": "C#5", + "key6": "D#5", + "key8": "F#5", + "key9": "G#5", + "key0": "A#5" }; + + +const ac = new AudioContext(); +const options = { soundfont: "FluidR3_GM" }; +const cumbiaSong = new Audio("https://manzdev.github.io/twitch-casio-pt1/cumbia.mp3"); +cumbiaSong.volume = 0.45; +const playingNotes = {}; +let currentInstrument = "piano"; +let currentVolume = 1; +let thanosMode = false; + +const COLORMODES = [ +{ bgcolor: "#171e27", color: "#909eb4" }, +{ bgcolor: "#c0beaf", color: "#4d1210" }, +{ bgcolor: "#c02628", color: "#e17d75" }, +{ bgcolor: "#becedd", color: "#6b799e" }]; + + +const colorsButtons = document.querySelectorAll(".colorButtons button"); +colorsButtons.forEach((button, index) => { + button.style.setProperty("--casio-bgcolor", COLORMODES[index].bgcolor); + button.style.setProperty("--casio-color", COLORMODES[index].color); + button.addEventListener("click", () => { + document.body.style.setProperty("--casio-bgcolor", COLORMODES[index].bgcolor); + document.body.style.setProperty("--casio-color", COLORMODES[index].color); + }); +}); + +const instruments = { + piano: "acoustic_grand_piano", + fantasy: "lead_2_sawtooth", + violin: "violin", + flute: "flute" }; + + +for (const pair of Object.entries(instruments)) { + const [key, value] = pair; + Soundfont.instrument(ac, value, options). + then(data => {instruments[key] = data;}); +} + +const play = (instrument, note, duration = 6) => { + playingNotes[note] = instruments[instrument].start(note, ac.currentTime, { duration, gain: currentVolume }); +}; + +const stop = note => { + const playingNote = playingNotes[note]; + playingNote.stop(); + playingNotes[note] = null; +}; + +const pianoKeys = document.querySelectorAll(".key"); +pianoKeys.forEach(key => { + const note = key.dataset.note; + key.addEventListener("mousedown", () => play(currentInstrument, note)); + key.addEventListener("mouseleave", () => playingNotes[note] && stop(note)); + key.addEventListener("mouseup", () => playingNotes[note] && stop(note)); +}); + +document.addEventListener("keydown", ev => { + const id = `key${ev.key}`; + const note = NOTES[id]; + if (!playingNotes[note] && note) { + const key = document.querySelector(`[data-note="${note}"]`); + key.classList.add("active"); + play(currentInstrument, note); + } +}); + +document.addEventListener("keyup", ev => { + const id = `key${ev.key}`; + const note = NOTES[id]; + if (playingNotes[note] && note) { + const key = document.querySelector(`[data-note="${note}"]`); + key.classList.remove("active"); + stop(note); + } +}); + +const toneSliders = document.querySelectorAll(".tone input"); +toneSliders.forEach(input => { + input.addEventListener("click", () => { + const instrument = input.id; + currentInstrument = String(instrument); + }); +}); + +const volumeSliders = document.querySelectorAll(".volume input"); +volumeSliders.forEach(input => { + input.addEventListener("click", () => { + const volume = input.value; + currentVolume = Number(volume); + }); +}); + +// Thanos egg easter +const COLORS = ["#d81313", "#eace17", "#33ea12", "#12eae3", "#101eea", "#ea10e3"]; + +const changeColor = () => { + setTimeout(() => { + const color = COLORS[~~(Math.random() * COLORS.length)]; + document.body.classList.remove("dark"); + document.body.style.setProperty("--body-color", color); + if (thanosMode) {setTimeout(() => changeColor(), 350);} + }, 350); +}; + +const disableThanosMode = () => { + document.body.classList.remove(...["dark", "party"]); + const thanosImage = document.querySelector(".thanos"); + thanosImage && thanosImage.remove(); + thanosMode = false; + cumbiaSong.pause(); +}; + +const enableThanosMode = () => { + thanosMode = true; + cumbiaSong.currentTime = 0; + cumbiaSong.play(); + document.body.classList.add("dark"); + + // Thanos image add + setTimeout(() => { + const image = document.createElement("img"); + image.src = "https://manzdev.github.io/twitch-casio-pt1/thanos.png"; + image.className = "thanos"; + document.body.appendChild(image); + }, 18000); + + // Party mode + setTimeout(() => { + document.body.classList.add("party"); + changeColor(); + }, 27000); +}; + +const demoButton = document.querySelector("[data-type=demo"); +demoButton.addEventListener("click", () => { + if (cumbiaSong.paused) {enableThanosMode();} else {disableThanosMode();} +}); \ No newline at end of file diff --git a/casio-pt-1-with-html-css-js/dist/style.css b/casio-pt-1-with-html-css-js/dist/style.css new file mode 100644 index 0000000..7600c28 --- /dev/null +++ b/casio-pt-1-with-html-css-js/dist/style.css @@ -0,0 +1,632 @@ +@font-face { + font-family: Michroma; + src: + url(https://manzdev.github.io/twitch-casio-pt1/michroma.woff2) format("woff2"), + url(https://manzdev.github.io/twitch-casio-pt1/michroma.woff) format("woff"); + font-display: swap; +} + +@font-face { + font-family: Tourney; + src: + url(https://manzdev.github.io/twitch-casio-pt1/tourney.woff2) format("woff2"), + url(https://manzdev.github.io/twitch-casio-pt1/tourney.woff) format("woff"); + font-display: swap; +} + +@font-face { + font-family: Raleway; + src: + url(/raleway.woff2) format("woff2"), + url(/raleway.woff) format("woff"); + font-display: swap; +} + +:root { + --casio-bgcolor: #171e27; + --casio-color: #909eb4; +} + +.colorButtons { + display: flex; + justify-content: center; + padding: 0 10px; +} + +.colorButtons button { + width: 25px; + height: 25px; + margin: 0 5px; + border-radius: 5px; + border: 2px solid var(--casio-color); + background: var(--casio-bgcolor); + } + +body { + transition: background 1s; +} + +body.dark { + background: #000; + -webkit-animation: prepareSong 8s ease 8s alternate 3; + animation: prepareSong 8s ease 8s alternate 3; +} + +.thanos { + width: 100px; + -webkit-animation: moveThanos 5s linear infinite; + animation: moveThanos 5s linear infinite; + position: absolute; + top: 0; + left: 0; + z-index: 25; + border-radius: 50%; +} + +@-webkit-keyframes moveThanos { + 0%, + 100% { transform: translate(0, 0); } + 25% { transform: translate(90vw, 75vh); } + 50% { transform: translate(90vw, 0); } + 75% { transform: translate(0, 75vh); } +} + +@keyframes moveThanos { + 0%, + 100% { transform: translate(0, 0); } + 25% { transform: translate(90vw, 75vh); } + 50% { transform: translate(90vw, 0); } + 75% { transform: translate(0, 75vh); } +} + +@-webkit-keyframes prepareSong { + 0% { background: #000; } + 100% { background: #333; } +} + +@keyframes prepareSong { + 0% { background: #000; } + 100% { background: #333; } +} + +body.party { + background: var(--body-color, #000); +} + +.container { + display: flex; + justify-content: center; + margin-top: 3em; +} + +.casio-pt1 { + display: flex; + width: 900px; + height: 250px; + background: var(--casio-bgcolor); + border-radius: 4px; + font-family: Raleway, Arial, serif; + font-weight: 400; + font-size: 9px; + color: var(--casio-color); + padding: 8px 5px 5px 5px; + box-shadow: + 0 2px 1px #fffc inset, + 1px 1px 0 #0001, + 1px 1px 0 var(--casio-bgcolor), + 2px 2px 0 #0003, + 2px 2px 0 var(--casio-bgcolor), + 4px 4px 0 #0005, + 4px 4px 0 var(--casio-bgcolor), + 6px 6px 0 #0006, + 6px 6px 0 var(--casio-bgcolor), + 8px 8px 0 #0007, + 8px 8px 0 var(--casio-bgcolor), + 8px 8px 4px #0005; +} + +.casio-pt1 .casio-left { + width: 200px; + min-width: 200px; + height: 100%; + display: flex; + flex-direction: column; + justify-content: flex-end; + align-items: center; + } + +.casio-pt1 .casio-left .speaker-container { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 100%; + } + +.casio-pt1 .casio-left .speaker-container .speaker { + width: 170px; + height: 180px; + background: + repeating-linear-gradient(to bottom, #0003 0 2px, #0005 2px 3px, transparent 3px 7px), + linear-gradient( + to right, + transparent 0 32%, + var(--casio-bgcolor) 32% 35%, + transparent 35% 66%, + var(--casio-bgcolor) 66% 68%, + transparent 68% 100% + ), + radial-gradient(circle, #0001 65%, transparent 65% 100%); + } + +.casio-pt1 .casio-left .speaker-bottom { + width: 100%; + height: 50px; + display: flex; + } + +.casio-pt1 .casio-left .speaker-bottom .power { + width: 60px; + height: 90%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + +.casio-pt1 .casio-left .speaker-bottom .power .led { + width: 12px; + height: 4px; + background: #2f1f2a; + } + +.casio-pt1 .casio-left .speaker-bottom .power .led.on { + background: #c01812; + } + +.casio-pt1 .casio-left .speaker-bottom .logo { + display: flex; + width: 100%; + align-items: baseline; + } + +.casio-pt1 .casio-left .speaker-bottom .logo .brand { + font-family: "Michroma", sans-serif; + font-weight: bold; + font-size: 16px; + margin-left: 6px; + } + +.casio-pt1 .casio-left .speaker-bottom .logo .model { + font-family: "Tourney", serif; + font-weight: normal; + font-size: 18px; + margin-left: 6px; + } + +.casio-pt1 .casio-right { + display: flex; + flex-direction: column; + width: 100%; + height: 100%; + padding-right: 8px; + } + +.casio-pt1 .casio-right .casio-controls { + min-height: 80px; + border-top: 2px solid var(--casio-color); + } + +.casio-pt1 .casio-right .casio-controls .controls-label { + display: flex; + align-items: flex-end; + font-size: 9px; + } + +.casio-pt1 .casio-right .casio-controls .controls-label .group { + display: inline-flex; + flex-direction: column; + align-items: center; + } + +.casio-pt1 .casio-right .casio-controls .controls-label .group.buttons .semi.box { + border-bottom: 0; + border-radius: 2px 2px 0 0; + padding: 2px 3px; + position: absolute; + height: 10px; + transform: translate(-28px, -2px); + } + +.casio-pt1 .casio-right .casio-controls .controls-label .group.buttons .options { + display: flex; + align-items: flex-end; + } + +.casio-pt1 .casio-right .casio-controls .controls-label .group.buttons span:not(.fill)::after { + content: "โ–ช"; + display: block; + } + +.casio-pt1 .casio-right .casio-controls .controls-label .group.buttons .fill { + margin: 0 2px; + display: flex; + justify-content: center; + width: 5px; + text-align: center; + } + +.casio-pt1 .casio-right .casio-controls .controls-label .group.buttons .arrow { + width: 4px; + margin: 0 6px; + } + +.casio-pt1 .casio-right .casio-controls .controls-label .group .box { + display: inline-block; + border: 1px solid var(--casio-color); + border-radius: 2px; + padding: 0 10px; + font-size: 10px; + margin: 4px; + } + +.casio-pt1 .casio-right .casio-controls .controls-label .group .box.last { + margin-left: 2em; + } + +.casio-pt1 .casio-right .casio-controls .controls-label .group .fill { + background: var(--casio-color); + color: var(--casio-bgcolor); + } + +.casio-pt1 .casio-right .casio-controls .controls-label .group .options { + display: flex; + } + +.casio-pt1 .casio-right .casio-controls .controls-label .group .options > span { + display: inline-block; + max-width: 26px; + padding: 2px 5px; + text-align: center; + } + +.casio-pt1 .casio-right .casio-controls .controls-label .group .options > span.inline { + max-width: none; + width: 42px; + } + +.casio-pt1 .casio-right .casio-controls .controls-label .group .options .volume { + -webkit-clip-path: polygon(0 50%, 100% 15%, 100% 85%, 0 50%); + clip-path: polygon(0 50%, 100% 15%, 100% 85%, 0 50%); + } + +.casio-pt1 .casio-right .casio-controls .controls-label > :nth-child(4) .options { + margin-left: 6px; + } + +.casio-pt1 .casio-right .casio-controls .controls-label > :nth-child(4) .options > span { width: 20px; } + +.casio-pt1 .casio-right .casio-controls .controls-label > :nth-child(4) .options > span:nth-child(n+7) { + transform: translateX(-3px); + } + +.casio-pt1 .casio-right .casio-controls .controls-buttons { + width: 100%; + height: 25px; + margin: 4px 0; + } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid { + border: 1px solid #0004; + border-bottom-color: #fff4; + border-right-color: #fff4; + width: 100%; + height: 100%; + background: + linear-gradient(to bottom, var(--casio-bgcolor) 0 15%, transparent 15% 85%, var(--casio-bgcolor) 85% 100%), + repeating-linear-gradient(to right, transparent 0 2px, #0004 2px 3px); + display: flex; + align-items: center; + } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid > div { + background: var(--casio-bgcolor); + padding: 0 6px; + } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid > div:nth-child(1) { margin-left: 32px; } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid > div:nth-child(2) { margin-left: 36px; } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid > div:nth-child(3) { margin-left: 38px; } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid > div:nth-child(4) { margin-left: 36px; } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid > div:nth-child(5) { margin-left: 38px; } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid .group { + display: flex; + justify-content: space-around; + } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid .group.buttons .button { + margin: 0 10px; + } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid .group.end { + margin-left: 24px; + } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid .group.end .big { + margin: 0 4px; + } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid .button { + display: inline-block; + border: 0; + width: 8px; + height: 18px; + background: black; + box-shadow: + 1px 1px 2px #0006, + 1px 0 0 #fff5 inset; + } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid .button:active { + box-shadow: 0 0 3px #0005 inset; + } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid .big.button { + width: 26px; + background-image: + linear-gradient(to top, #44517a 0 20%, transparent 20% 80%, #44517a 80% 100%), + repeating-linear-gradient(to top, transparent 0 1px, #0003 1px 2px); + } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid .steelblue { background: #44517a; } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid .orange { background: #b34431; } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid .gold { background: #b67523; } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid .green { background: #398d79; } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid .grey { background: #53586b; } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid .slider { + display: flex; + align-items: center; + height: 18px; + border: 1px solid #0004; + border-bottom-color: #fff7; + border-right-color: #fff7; + box-shadow: 2px 2px 2px #0003 inset; + } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid .slider input { + display: none; + } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid .slider input + label { + display: block; + width: 12px; + height: 8px; + background: #000; + } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid .slider input:checked + label { + height: 16px; + background: transparent; + display: flex; + position: relative; + } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid .slider input:checked + label::before, + .casio-pt1 .casio-right .casio-controls .controls-buttons .grid .slider input:checked + label::after { + content: ""; + display: block; + background: #444; + width: 5px; + border-radius: 1px; + border-right: 1px solid #222; + height: 16px; + position: absolute; + } + +.casio-pt1 .casio-right .casio-controls .controls-buttons .grid .slider input:checked + label::after { right: 0; } + +.casio-pt1 .casio-right .keys-container { + display: flex; + flex-direction: column; + height: 100%; + border-top: 4px solid var(--casio-color); + position: relative; + } + +.casio-pt1 .casio-right .keys-container .name-keys { + min-height: 15px; + display: flex; + } + +.casio-pt1 .casio-right .keys-container .name-keys .key-name { + width: 100%; + text-align: center; + position: relative; + } + +.casio-pt1 .casio-right .keys-container .name-keys .key-name[data-rhytm]::before { + content: attr(data-rhytm); + } + +.casio-pt1 .casio-right .keys-container .name-keys .key-name:nth-child(9)::before { + width: 200%; + position: absolute; + left: -50%; + } + +.casio-pt1 .casio-right .keys-container .name-keys .key-name:nth-child(9)::after { + margin-top: 10px; + } + +.casio-pt1 .casio-right .keys-container .name-keys .key-name[data-rhytm]::after { + content: "|"; + display: block; + } + +.casio-pt1 .casio-right .keys-container .name-keys .instrument-type { + font-size: 8px; + position: absolute; + right: 0; + } + +.casio-pt1 .casio-right .keys-container .keys { + min-height: 135px; + position: relative; + box-shadow: 0 1px 0 1px #1113; + } + +.casio-pt1 .casio-right .keys-container .keys .black-keys { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 73px; + display: flex; + justify-content: space-evenly; + } + +.casio-pt1 .casio-right .keys-container .keys .black-keys .black.key { + grid-area: key; + width: 22px; + height: 100%; + background-color: #111; + background-image: + linear-gradient(to right, #111 0 2px, transparent 2px), + linear-gradient(to left, #111 0 2px, transparent 2px), + linear-gradient(to top, transparent 0 3px, #fff8 4px 5px, transparent 8px); + border: 1px outset #ccc; + border-top: 0; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + position: relative; + z-index: 10; + } + +.casio-pt1 .casio-right .keys-container .keys .black-keys .black.key:nth-child(2), + .casio-pt1 .casio-right .keys-container .keys .black-keys .black.key:nth-child(4), + .casio-pt1 .casio-right .keys-container .keys .black-keys .black.key:nth-child(7), + .casio-pt1 .casio-right .keys-container .keys .black-keys .black.key:nth-child(9) { + margin-right: 28px; + } + +.casio-pt1 .casio-right .keys-container .keys .black-keys .black.key:active, + .casio-pt1 .casio-right .keys-container .keys .black-keys .black.key.active { + z-index: 8; + background-image: + linear-gradient(to right, #111 0 2px, transparent 2px), + linear-gradient(to left, #111 0 2px, transparent 2px), + linear-gradient(to top, transparent 0 1px, #fff3 2px 3px, transparent 6px); + } + +.casio-pt1 .casio-right .keys-container .keys .white-keys { + display: flex; + height: 100%; + } + +.casio-pt1 .casio-right .keys-container .keys .white-keys .white.key { + width: 100%; + height: 136px; + background: #fff; + border: 1px solid #ccc; + border-left: 2px solid #fff; + border-right: 2px solid #ddd; + border-top: 0; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + position: relative; + z-index: 5; + box-shadow: 0 2px 2px #0004; + } + +.casio-pt1 .casio-right .keys-container .keys .white-keys .white.key::after { + content: ""; + display: block; + background: linear-gradient(to bottom, #0006 0 1px, #0005 2px 10px, transparent 15% 100%); + width: 100%; + height: 100%; + position: absolute; + top: 0; + } + +.casio-pt1 .casio-right .keys-container .keys .white-keys .white.key:active, + .casio-pt1 .casio-right .keys-container .keys .white-keys .white.key.active { + transform: translate(2px, 0); + z-index: 2; + border-top: 2px solid #fff; + box-shadow: 0 0 2px #0004; + } + +.casio-pt1 .casio-right .keys-container .keys .white-keys .white.key:active::after, .casio-pt1 .casio-right .keys-container .keys .white-keys .white.key.active::after { + transform: translate(-2px, -2px); + } + +.casio-pt1 .casio-right .keys-container .note-keys { + width: 100%; + height: 100%; + display: flex; + font-size: 8px; + justify-content: space-around; + transform: translateY(3px); + box-shadow: 0 5px 4px #0005 inset; + border-right: 1px solid #fff2; + border-top: 1px solid #0007; + position: relative; + top: -2px; + left: -1px; + padding: 0 1px; + } + +.created { + background: + url(https://assets.codepen.io/154065/internal/avatars/users/default.png), + linear-gradient(to bottom, #884ced, #ec1cce); + background-size: 75px 75px, cover; + background-repeat: no-repeat; + position: absolute; + top: 0; + right: 0; + width: 250px; + height: 75px; + display: flex; + flex-direction: column; + align-items: center; + padding-left: 2em; +} + +.created span, + .created h2, + .created p, + .created a { + font-family: Montserrat; + margin: 0; + } + +.created a, + .created p, + .created span { + color: #fff; + } + +.created h2 { + font-weight: 700; + transform: translate(0, -4px); + } + +.created a { + -webkit-text-decoration-color: rgba(255,255,255,0.4); + text-decoration-color: rgba(255,255,255,0.4); + } + +.created a:hover { + color: #e6e82a; + } \ No newline at end of file diff --git a/casio-pt-1-with-html-css-js/license.txt b/casio-pt-1-with-html-css-js/license.txt new file mode 100644 index 0000000..aed1e82 --- /dev/null +++ b/casio-pt-1-with-html-css-js/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Manz (https://codepen.io/manz/pen/KKmdjQZ) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/casio-pt-1-with-html-css-js/src/index.html b/casio-pt-1-with-html-css-js/src/index.html new file mode 100644 index 0000000..852408b --- /dev/null +++ b/casio-pt-1-with-html-css-js/src/index.html @@ -0,0 +1,215 @@ +
+ + + + +
+ +
+
+
+
+
+
+
+
+
+ power +
+ +
+
+
+
+
+
+
mode
+
+ power off + record + play +
+
+
+
volume
+
+ min + |||||||||| + max +
+
+ +
+
tone
+
+ piano + fantasy + violin + flute +
+
+ +
+
+ clear + del. + โ–ผ + โ–ฒ + rhythm select + reset + demo + memory play +
+
tempo
+
+ +
+
one key play
+
+
+
+
+
+ + + + + + + + +
+
+ + + + + + + + + + + + + + +
+
+ + + + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ELECTRONIC MUSICAL INSTRUMENT
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
G
+
A
+
B
+
C
+
D
+
E
+
F
+
G
+
A
+
B
+
C
+
D
+
E
+
F
+
G
+
A
+
B
+
+
+
+
+
+ +
+ Created by +

Manz.dev

+

on Twitch / Youtube

+
\ No newline at end of file diff --git a/casio-pt-1-with-html-css-js/src/script.babel b/casio-pt-1-with-html-css-js/src/script.babel new file mode 100644 index 0000000..4b2de1b --- /dev/null +++ b/casio-pt-1-with-html-css-js/src/script.babel @@ -0,0 +1,172 @@ +import Soundfont from "https://cdn.skypack.dev/soundfont-player"; + +const NOTES = { + "keyz": "G3", + "keyx": "A3", + "keyc": "B3", + "keyv": "C4", + "keyb": "D4", + "keyn": "E4", + "keym": "F4", + "keyq": "G4", + "keyw": "A4", + "keye": "B4", + "keyr": "C5", + "keyt": "D5", + "keyy": "E5", + "keyu": "F5", + "keyi": "G5", + "keyo": "A5", + "keyp": "B5", + "keys": "G#3", + "keyd": "A#3", + "keyg": "C#4", + "keyh": "D#4", + "keyk": "F#4", + "keyl": "G#4", + "keyรฑ": "A#4", + "key5": "C#5", + "key6": "D#5", + "key8": "F#5", + "key9": "G#5", + "key0": "A#5" +}; + +const ac = new AudioContext(); +const options = { soundfont: "FluidR3_GM" }; +const cumbiaSong = new Audio("https://manzdev.github.io/twitch-casio-pt1/cumbia.mp3"); +cumbiaSong.volume = 0.45; +const playingNotes = {}; +let currentInstrument = "piano"; +let currentVolume = 1; +let thanosMode = false; + +const COLORMODES = [ + { bgcolor: "#171e27", color: "#909eb4" }, + { bgcolor: "#c0beaf", color: "#4d1210" }, + { bgcolor: "#c02628", color: "#e17d75" }, + { bgcolor: "#becedd", color: "#6b799e" }, +]; + +const colorsButtons = document.querySelectorAll(".colorButtons button"); +colorsButtons.forEach((button, index) => { + button.style.setProperty("--casio-bgcolor", COLORMODES[index].bgcolor); + button.style.setProperty("--casio-color", COLORMODES[index].color); + button.addEventListener("click", () => { + document.body.style.setProperty("--casio-bgcolor", COLORMODES[index].bgcolor); + document.body.style.setProperty("--casio-color", COLORMODES[index].color); + }); +}); + +const instruments = { + piano: "acoustic_grand_piano", + fantasy: "lead_2_sawtooth", + violin: "violin", + flute: "flute" +}; + +for (const pair of Object.entries(instruments)) { + const [key, value] = pair; + Soundfont.instrument(ac, value, options) + .then(data => { instruments[key] = data; }); +} + +const play = (instrument, note, duration = 6) => { + playingNotes[note] = instruments[instrument].start(note, ac.currentTime, { duration, gain: currentVolume }); +}; + +const stop = (note) => { + const playingNote = playingNotes[note]; + playingNote.stop(); + playingNotes[note] = null; +}; + +const pianoKeys = document.querySelectorAll(".key"); +pianoKeys.forEach(key => { + const note = key.dataset.note; + key.addEventListener("mousedown", () => play(currentInstrument, note)); + key.addEventListener("mouseleave", () => playingNotes[note] && stop(note)); + key.addEventListener("mouseup", () => playingNotes[note] && stop(note)); +}); + +document.addEventListener("keydown", (ev) => { + const id = `key${ev.key}`; + const note = NOTES[id]; + if (!playingNotes[note] && note) { + const key = document.querySelector(`[data-note="${note}"]`); + key.classList.add("active"); + play(currentInstrument, note); + } +}); + +document.addEventListener("keyup", (ev) => { + const id = `key${ev.key}`; + const note = NOTES[id]; + if (playingNotes[note] && note) { + const key = document.querySelector(`[data-note="${note}"]`); + key.classList.remove("active"); + stop(note); + } +}); + +const toneSliders = document.querySelectorAll(".tone input"); +toneSliders.forEach(input => { + input.addEventListener("click", () => { + const instrument = input.id; + currentInstrument = String(instrument); + }); +}); + +const volumeSliders = document.querySelectorAll(".volume input"); +volumeSliders.forEach(input => { + input.addEventListener("click", () => { + const volume = input.value; + currentVolume = Number(volume); + }); +}); + +// Thanos egg easter +const COLORS = ["#d81313", "#eace17", "#33ea12", "#12eae3", "#101eea", "#ea10e3"]; + +const changeColor = () => { + setTimeout(() => { + const color = COLORS[~~(Math.random() * COLORS.length)]; + document.body.classList.remove("dark"); + document.body.style.setProperty("--body-color", color); + if (thanosMode) { setTimeout(() => changeColor(), 350); } + }, 350); +}; + +const disableThanosMode = () => { + document.body.classList.remove(...["dark", "party"]); + const thanosImage = document.querySelector(".thanos"); + thanosImage && thanosImage.remove(); + thanosMode = false; + cumbiaSong.pause(); +}; + +const enableThanosMode = () => { + thanosMode = true; + cumbiaSong.currentTime = 0; + cumbiaSong.play(); + document.body.classList.add("dark"); + + // Thanos image add + setTimeout(() => { + const image = document.createElement("img"); + image.src = "https://manzdev.github.io/twitch-casio-pt1/thanos.png"; + image.className = "thanos"; + document.body.appendChild(image); + }, 18000); + + // Party mode + setTimeout(() => { + document.body.classList.add("party"); + changeColor(); + }, 27000); +}; + +const demoButton = document.querySelector("[data-type=demo"); +demoButton.addEventListener("click", () => { + if (cumbiaSong.paused) { enableThanosMode(); } else { disableThanosMode(); } +}); \ No newline at end of file diff --git a/casio-pt-1-with-html-css-js/src/style.css b/casio-pt-1-with-html-css-js/src/style.css new file mode 100644 index 0000000..b1b4cbd --- /dev/null +++ b/casio-pt-1-with-html-css-js/src/style.css @@ -0,0 +1,612 @@ +@use postcss-nested; + +@font-face { + font-family: Michroma; + src: + url(https://manzdev.github.io/twitch-casio-pt1/michroma.woff2) format("woff2"), + url(https://manzdev.github.io/twitch-casio-pt1/michroma.woff) format("woff"); + font-display: swap; +} + +@font-face { + font-family: Tourney; + src: + url(https://manzdev.github.io/twitch-casio-pt1/tourney.woff2) format("woff2"), + url(https://manzdev.github.io/twitch-casio-pt1/tourney.woff) format("woff"); + font-display: swap; +} + +@font-face { + font-family: Raleway; + src: + url(/raleway.woff2) format("woff2"), + url(/raleway.woff) format("woff"); + font-display: swap; +} + +:root { + --casio-bgcolor: #171e27; + --casio-color: #909eb4; +} + +.colorButtons { + display: flex; + justify-content: center; + padding: 0 10px; + + & button { + width: 25px; + height: 25px; + margin: 0 5px; + border-radius: 5px; + border: 2px solid var(--casio-color); + background: var(--casio-bgcolor); + } +} + +body { + transition: background 1s; +} + +body.dark { + background: #000; + animation: prepareSong 8s ease 8s alternate 3; +} + +.thanos { + width: 100px; + animation: moveThanos 5s linear infinite; + position: absolute; + top: 0; + left: 0; + z-index: 25; + border-radius: 50%; +} + +@keyframes moveThanos { + 0%, + 100% { transform: translate(0, 0); } + 25% { transform: translate(90vw, 75vh); } + 50% { transform: translate(90vw, 0); } + 75% { transform: translate(0, 75vh); } +} + +@keyframes prepareSong { + 0% { background: #000; } + 100% { background: #333; } +} + +body.party { + background: var(--body-color, #000); +} + +.container { + display: flex; + justify-content: center; + margin-top: 3em; +} + +.casio-pt1 { + display: flex; + width: 900px; + height: 250px; + background: var(--casio-bgcolor); + border-radius: 4px; + font-family: Raleway, Arial, serif; + font-weight: 400; + font-size: 9px; + color: var(--casio-color); + padding: 8px 5px 5px 5px; + box-shadow: + 0 2px 1px #fffc inset, + 1px 1px 0 #0001, + 1px 1px 0 var(--casio-bgcolor), + 2px 2px 0 #0003, + 2px 2px 0 var(--casio-bgcolor), + 4px 4px 0 #0005, + 4px 4px 0 var(--casio-bgcolor), + 6px 6px 0 #0006, + 6px 6px 0 var(--casio-bgcolor), + 8px 8px 0 #0007, + 8px 8px 0 var(--casio-bgcolor), + 8px 8px 4px #0005; + + & .casio-left { + width: 200px; + min-width: 200px; + height: 100%; + display: flex; + flex-direction: column; + justify-content: flex-end; + align-items: center; + + & .speaker-container { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 100%; + + & .speaker { + width: 170px; + height: 180px; + background: + repeating-linear-gradient(to bottom, #0003 0 2px, #0005 2px 3px, transparent 3px 7px), + linear-gradient( + to right, + transparent 0 32%, + var(--casio-bgcolor) 32% 35%, + transparent 35% 66%, + var(--casio-bgcolor) 66% 68%, + transparent 68% 100% + ), + radial-gradient(circle, #0001 65%, transparent 65% 100%); + } + } + + & .speaker-bottom { + width: 100%; + height: 50px; + display: flex; + + & .power { + width: 60px; + height: 90%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + + & .led { + width: 12px; + height: 4px; + background: #2f1f2a; + + &.on { + background: #c01812; + } + } + } + + & .logo { + display: flex; + width: 100%; + align-items: baseline; + + & .brand { + font-family: "Michroma", sans-serif; + font-weight: bold; + font-size: 16px; + margin-left: 6px; + } + + & .model { + font-family: "Tourney", serif; + font-weight: normal; + font-size: 18px; + margin-left: 6px; + } + } + } + } + + & .casio-right { + display: flex; + flex-direction: column; + width: 100%; + height: 100%; + padding-right: 8px; + + & .casio-controls { + min-height: 80px; + border-top: 2px solid var(--casio-color); + + & .controls-label { + display: flex; + align-items: flex-end; + font-size: 9px; + + & .group { + display: inline-flex; + flex-direction: column; + align-items: center; + + &.buttons { + & .semi.box { + border-bottom: 0; + border-radius: 2px 2px 0 0; + padding: 2px 3px; + position: absolute; + height: 10px; + transform: translate(-28px, -2px); + } + + & .options { + display: flex; + align-items: flex-end; + } + + & span:not(.fill)::after { + content: "โ–ช"; + display: block; + } + + & .fill { + margin: 0 2px; + display: flex; + justify-content: center; + width: 5px; + text-align: center; + } + + & .arrow { + width: 4px; + margin: 0 6px; + } + } + + & .box { + display: inline-block; + border: 1px solid var(--casio-color); + border-radius: 2px; + padding: 0 10px; + font-size: 10px; + margin: 4px; + + &.last { + margin-left: 2em; + } + } + + & .fill { + background: var(--casio-color); + color: var(--casio-bgcolor); + } + + & .options { + display: flex; + + & > span { + display: inline-block; + max-width: 26px; + padding: 2px 5px; + text-align: center; + + &.inline { + max-width: none; + width: 42px; + } + } + + & .volume { + clip-path: polygon(0 50%, 100% 15%, 100% 85%, 0 50%); + } + } + } + + & > :nth-child(4) .options { + margin-left: 6px; + + & > span { width: 20px; } + + & > span:nth-child(n+7) { + transform: translateX(-3px); + } + } + } + + & .controls-buttons { + width: 100%; + height: 25px; + margin: 4px 0; + + & .grid { + border: 1px solid #0004; + border-bottom-color: #fff4; + border-right-color: #fff4; + width: 100%; + height: 100%; + background: + linear-gradient(to bottom, var(--casio-bgcolor) 0 15%, transparent 15% 85%, var(--casio-bgcolor) 85% 100%), + repeating-linear-gradient(to right, transparent 0 2px, #0004 2px 3px); + display: flex; + align-items: center; + + & > div { + background: var(--casio-bgcolor); + padding: 0 6px; + + &:nth-child(1) { margin-left: 32px; } + &:nth-child(2) { margin-left: 36px; } + &:nth-child(3) { margin-left: 38px; } + &:nth-child(4) { margin-left: 36px; } + &:nth-child(5) { margin-left: 38px; } + } + + & .group { + display: flex; + justify-content: space-around; + + &.buttons .button { + margin: 0 10px; + } + + &.end { + margin-left: 24px; + + & .big { + margin: 0 4px; + } + } + } + + & .button { + display: inline-block; + border: 0; + width: 8px; + height: 18px; + background: black; + box-shadow: + 1px 1px 2px #0006, + 1px 0 0 #fff5 inset; + + &:active { + box-shadow: 0 0 3px #0005 inset; + } + } + + & .big.button { + width: 26px; + background-image: + linear-gradient(to top, #44517a 0 20%, transparent 20% 80%, #44517a 80% 100%), + repeating-linear-gradient(to top, transparent 0 1px, #0003 1px 2px); + } + + & .steelblue { background: #44517a; } + & .orange { background: #b34431; } + & .gold { background: #b67523; } + & .green { background: #398d79; } + & .grey { background: #53586b; } + + & .slider { + display: flex; + align-items: center; + height: 18px; + border: 1px solid #0004; + border-bottom-color: #fff7; + border-right-color: #fff7; + box-shadow: 2px 2px 2px #0003 inset; + + & input { + display: none; + } + + & input + label { + display: block; + width: 12px; + height: 8px; + background: #000; + } + + & input:checked + label { + height: 16px; + background: transparent; + display: flex; + position: relative; + + &::before, + &::after { + content: ""; + display: block; + background: #444; + width: 5px; + border-radius: 1px; + border-right: 1px solid #222; + height: 16px; + position: absolute; + } + &::after { right: 0; } + } + } + } + } + } + + & .keys-container { + display: flex; + flex-direction: column; + height: 100%; + border-top: 4px solid var(--casio-color); + position: relative; + + & .name-keys { + min-height: 15px; + display: flex; + + & .key-name { + width: 100%; + text-align: center; + position: relative; + + &[data-rhytm]::before { + content: attr(data-rhytm); + } + + &:nth-child(9) { + &::before { + width: 200%; + position: absolute; + left: -50%; + } + + &::after { + margin-top: 10px; + } + } + + &[data-rhytm]::after { + content: "|"; + display: block; + } + } + + & .instrument-type { + font-size: 8px; + position: absolute; + right: 0; + } + } + + & .keys { + min-height: 135px; + position: relative; + box-shadow: 0 1px 0 1px #1113; + + & .black-keys { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 73px; + display: flex; + justify-content: space-evenly; + + & .black.key { + grid-area: key; + width: 22px; + height: 100%; + background-color: #111; + background-image: + linear-gradient(to right, #111 0 2px, transparent 2px), + linear-gradient(to left, #111 0 2px, transparent 2px), + linear-gradient(to top, transparent 0 3px, #fff8 4px 5px, transparent 8px); + border: 1px outset #ccc; + border-top: 0; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + position: relative; + z-index: 10; + + &:nth-child(2), + &:nth-child(4), + &:nth-child(7), + &:nth-child(9) { + margin-right: 28px; + } + + &:active, + &.active { + z-index: 8; + background-image: + linear-gradient(to right, #111 0 2px, transparent 2px), + linear-gradient(to left, #111 0 2px, transparent 2px), + linear-gradient(to top, transparent 0 1px, #fff3 2px 3px, transparent 6px); + } + } + } + + & .white-keys { + display: flex; + height: 100%; + + & .white.key { + width: 100%; + height: 136px; + background: #fff; + border: 1px solid #ccc; + border-left: 2px solid #fff; + border-right: 2px solid #ddd; + border-top: 0; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + position: relative; + z-index: 5; + box-shadow: 0 2px 2px #0004; + + &::after { + content: ""; + display: block; + background: linear-gradient(to bottom, #0006 0 1px, #0005 2px 10px, transparent 15% 100%); + width: 100%; + height: 100%; + position: absolute; + top: 0; + } + + &:active, + &.active { + transform: translate(2px, 0); + z-index: 2; + border-top: 2px solid #fff; + box-shadow: 0 0 2px #0004; + + &::after { + transform: translate(-2px, -2px); + } + } + } + } + } + + & .note-keys { + width: 100%; + height: 100%; + display: flex; + font-size: 8px; + justify-content: space-around; + transform: translateY(3px); + box-shadow: 0 5px 4px #0005 inset; + border-right: 1px solid #fff2; + border-top: 1px solid #0007; + position: relative; + top: -2px; + left: -1px; + padding: 0 1px; + } + } + } +} + +.created { + background: + url(https://assets.codepen.io/154065/internal/avatars/users/default.png), + linear-gradient(to bottom, #884ced, #ec1cce); + background-size: 75px 75px, cover; + background-repeat: no-repeat; + position: absolute; + top: 0; + right: 0; + width: 250px; + height: 75px; + display: flex; + flex-direction: column; + align-items: center; + padding-left: 2em; + + & span, + & h2, + & p, + & a { + font-family: Montserrat; + margin: 0; + } + + & a, + & p, + & span { + color: #fff; + } + + & h2 { + font-weight: 700; + transform: translate(0, -4px); + } + + & a { + text-decoration-color: rgba(255,255,255,0.4); + } + + & a:hover { + color: #e6e82a; + } +} \ No newline at end of file diff --git a/casiopt-1-css/README.markdown b/casiopt-1-css/README.markdown new file mode 100644 index 0000000..5ad7c70 --- /dev/null +++ b/casiopt-1-css/README.markdown @@ -0,0 +1,16 @@ +# CasioPT-1.css + +A Pen created on CodePen.io. Original URL: [https://codepen.io/fossheim/pen/VweaNYW](https://codepen.io/fossheim/pen/VweaNYW). + +Vintage Casio PT-1 keyboard drawn entirely with HTML and CSS; using divs, gradients and box-shadows. + +Tutorials on how to make drawings like this: +https://fossheim.io/writing/posts/css-macintosh/ +https://fossheim.io/writing/posts/css-polaroid-camera/ + +GitHub repo with my CSS drawings: +https://github.com/sarahfossheim/art.css + +If you like my work: +https://www.buymeacoffee.com/fossheim +https://www.patreon.com/fossheim diff --git a/casiopt-1-css/dist/index.html b/casiopt-1-css/dist/index.html new file mode 100644 index 0000000..ec3f54f --- /dev/null +++ b/casiopt-1-css/dist/index.html @@ -0,0 +1,104 @@ + + + + + CodePen - CasioPT-1.css + + + + + + + + + +
+ +
+ + + + + + diff --git a/casiopt-1-css/dist/style.css b/casiopt-1-css/dist/style.css new file mode 100644 index 0000000..53c2889 --- /dev/null +++ b/casiopt-1-css/dist/style.css @@ -0,0 +1,881 @@ +/* tutorials on https://fossheim.io/writing/ */ + +* { + padding: 0; + margin: 0; + box-sizing: border-box; +} + +body { + background-color: #333335; + background-color: #E996AF; +} + +.casio { + display: block; + width: 960px; + height: 260px; + margin: 100px auto 0 auto; + margin: calc(50vh - 150px) auto 0 auto; + border-radius: 4px; + background-color: #EFEFE7; + background-image: linear-gradient(90deg, #EFEFE7, #F4F3EE); + position: relative; + box-shadow: 0 -2px 2px -0.5px #D0CCC1 inset, + 2px 0 2px -0.5px #E1DFE0 inset, + 0 3px 1px #FBFAF8 inset, + 0 45px 10px -25px rgba(0,0,0,0.1), + 0 65px 50px -10px rgba(0,0,0,0.05); +} + +.speaker { + display: block; + width: 180px; + height: 200px; + position: absolute; + top: 12px; + left: 14px; + border-radius: 0.5px; + background-color: #D6C6A2; + background-image: linear-gradient(transparent 40%, #EFEFE7 60%), + linear-gradient(90deg, #BFA58D, transparent 2% 96%, #C9B59A), + linear-gradient(#D1BBA3 20%, transparent 65%), + linear-gradient(90deg, #D6C6A2, #E2D9CA), + linear-gradient(90deg, #D6C6A2, #E2D9CA), + radial-gradient(#897866 60%, transparent 61%); + background-size: 100% 8px, + 100% 100%, + 100% 8px, + 6px 100%, + 6px 100%, + 190px 190px; + background-repeat: repeat, + no-repeat, + repeat, + no-repeat, + no-repeat, + no-repeat; + background-position: 0 0, + 0 0, + 0 0, + 50px 0, + 120px 0, + -7px 7px; +} + +.controls { + display: block; + width: 745px; + height: 80px; + background-color: transparent; + position: absolute; + top: 7px; + right: 15px; + box-shadow: 0 2px 0.75px -0.8px #543F44 inset, 0 -2.5px 0.75px -0.8px #543F44 inset; +} + +.controls-labels { + display: block; + width: 745px; + height: 30px; + font-family: sans-serif; + color: #4F4949; +} + +.controls-labels p { + font-size: 0.5rem; + letter-spacing: 0.5px; + display: inline-block; + border: 1px solid #7A7174; + padding: 0px 8px; + border-radius: 2px; + position: absolute; + top: 4px; +} + +.controls-labels p:nth-child(1) { + left: 55px; +} + +.controls-labels p:nth-child(2) { + left: 130px; + padding: 0 15px; +} + +.controls-labels p:nth-child(3) { + left: 265px; + padding: 0 15px; +} + +.controls-labels p:nth-child(4) { + left: 400px; +} + +.controls-labels p:nth-child(5) { + left: 645px; + padding: 0 11px; +} + +.controls-bar { + display: block; + width: 745px; + height: 30px; + position: absolute; + top: 30px; + background-image: linear-gradient( + 90deg, + transparent 0% 2.5%, #DCDCD0 2.5% 5%, + transparent 5% 7.5%, #E1DFD3 7.5% 10%, + transparent 10% 12.5%, #D5D5CD 12.5% 15%, + transparent 15% 17.5%, #DCDCD0 17.5% 20%, + transparent 20% 22.5%, #E1DFD3 22.5% 25%, + transparent 25% 27.5%, #D5D5CD 27.5% 30%, + transparent 30% 32.5%, #DCDCD0 32.5% 35%, + transparent 35% 37.5%, #E1DFD3 37.5% 40%, + transparent 40% 42.5%, #D5D5CD 42.5% 45%, + transparent 45% 47.5%, #DCDCD0 47.5% 50%, + transparent 50% 52.5%, #E1DFD3 52.5% 55%, + transparent 55% 57.5%, #D5D5CD 57.5% 60%, + transparent 60% 62.5%, #DCDCD0 62.5% 65%, + transparent 65% 67.5%, #E1DFD3 67.5% 70%, + transparent 70% 72.5%, #D5D5CD 72.5% 75%, + transparent 75% 77.5%, #DCDCD0 77.5% 80%, + transparent 80% 82.5%, #E1DFD3 82.5% 85%, + transparent 85% 87.5%, #D5D5CD 87.5% 90%, + transparent 90% 92.5%, #DCDCD0 92.5% 95%, + transparent 95% 97.5%, #E1DFD3 97.5% 100% + ), linear-gradient( + 90deg, + transparent 0% 7%, #DCDCD0 7% 14%, + transparent 14% 21%, #E1DFD3 21% 28%, + transparent 28% 35%, #D5D5CD 35% 42%, + transparent 42% 49%, #DCDCD0 49% 56%, + transparent 56% 63%, #E1DFD3 63% 70%, + transparent 70% 77%, #D5D5CD 77% 84%, + transparent 84% 91%, #DCDCD0 91% 98%, + transparent 98% + ), linear-gradient( + 90deg, + transparent 0% 2.5%, #E0DED1 2.5% 5%, + transparent 5% 7.5%, #DDDBCE 7.5% 10%, + transparent 10% 12.5%, #DEDCCF 12.5% 15%, + transparent 15% 17.5%, #E0DED1 17.5% 20%, + transparent 20% 22.5%, #E1DFD3 22.5% 25%, + transparent 25% 27.5%, #DDDBCE 27.5% 30%, + transparent 30% 32.5%, #DEDCCF 32.5% 35%, + transparent 35% 37.5%, #E0DED1 37.5% 40%, + transparent 40% 42.5%, #D5D5CD 42.5% 45%, + transparent 45% 47.5%, #DDDBCE 47.5% 50%, + transparent 50% 52.5%, #E4E2D6 52.5% 55%, + transparent 55% 57.5%, #E0DED1 57.5% 60%, + transparent 60% 62.5%, #DCDCD0 62.5% 65%, + transparent 65% 67.5%, #DDDBCE 67.5% 70%, + transparent 70% 72.5%, #DEDCCF 72.5% 75%, + transparent 75% 77.5%, #E0DED1 77.5% 80%, + transparent 80% 82.5%, #E1DFD3 82.5% 85%, + transparent 85% 87.5%, #E4E2D6 87.5% 90%, + transparent 90% 92.5%, #E0DED1 92.5% 95%, + transparent 95% 97.5%, #E1DFD3 97.5% 100% + ), linear-gradient( + 90deg, + transparent 0% 7%, #CAC8BC 7% 14%, + transparent 14% 21%, #DBD9CD 21% 28%, + transparent 28% 35%, #D0CEC2 35% 42%, + transparent 42% 49%, #CAC8BC 49% 56%, + transparent 56% 63%, #DBD9CD 63% 70%, + transparent 70% 77%, #D0CEC2 77% 84%, + transparent 84% 91%, #CAC8BC 91% 98%, + transparent 98% + ), linear-gradient( + 90deg, + transparent 0% 2.5%, #E0DED1 2.5% 5%, + transparent 5% 7.5%, #DDDBCE 7.5% 10%, + transparent 10% 12.5%, #DEDCCF 12.5% 15%, + transparent 15% 17.5%, #E0DED1 17.5% 20%, + transparent 20% 22.5%, #E1DFD3 22.5% 25%, + transparent 25% 27.5%, #DDDBCE 27.5% 30%, + transparent 30% 32.5%, #DEDCCF 32.5% 35%, + transparent 35% 37.5%, #E0DED1 37.5% 40%, + transparent 40% 42.5%, #D5D5CD 42.5% 45%, + transparent 45% 47.5%, #DDDBCE 47.5% 50%, + transparent 50% 52.5%, #E4E2D6 52.5% 55%, + transparent 55% 57.5%, #E0DED1 57.5% 60%, + transparent 60% 62.5%, #DCDCD0 62.5% 65%, + transparent 65% 67.5%, #DDDBCE 67.5% 70%, + transparent 70% 72.5%, #DEDCCF 72.5% 75%, + transparent 75% 77.5%, #E0DED1 77.5% 80%, + transparent 80% 82.5%, #E1DFD3 82.5% 85%, + transparent 85% 87.5%, #D5D5CD 87.5% 90%, + transparent 90% 92.5%, #DCDCD0 92.5% 95%, + transparent 95% 97.5%, #E1DFD3 97.5% 100% + ), linear-gradient( + 90deg, + transparent 0% 2.5%, #DCDCD0 2.5% 5%, + transparent 5% 7.5%, #E1DFD3 7.5% 10%, + transparent 10% 12.5%, #D5D5CD 12.5% 15%, + transparent 15% 17.5%, #DCDCD0 17.5% 20%, + transparent 20% 22.5%, #E1DFD3 22.5% 25%, + transparent 25% 27.5%, #D5D5CD 27.5% 30%, + transparent 30% 32.5%, #DCDCD0 32.5% 35%, + transparent 35% 37.5%, #E1DFD3 37.5% 40%, + transparent 40% 42.5%, #D5D5CD 42.5% 45%, + transparent 45% 47.5%, #DCDCD0 47.5% 50%, + transparent 50% 52.5%, #E1DFD3 52.5% 55%, + transparent 55% 57.5%, #D5D5CD 57.5% 60%, + transparent 60% 62.5%, #DCDCD0 62.5% 65%, + transparent 65% 67.5%, #DDDBCE 67.5% 70%, + transparent 70% 72.5%, #DEDCCF 72.5% 75%, + transparent 75% 77.5%, #E0DED1 77.5% 80%, + transparent 80% 82.5%, #E1DFD3 82.5% 85%, + transparent 85% 87.5%, #E4E2D6 87.5% 90%, + transparent 90% 92.5%, #E0DED1 92.5% 95%, + transparent 95% 97.5%, #E1DFD3 97.5% 100% + ), linear-gradient( + 90deg, + transparent 0% 7%, #CAC8BC 7% 14%, + transparent 14% 21%, #DBD9CD 21% 28%, + transparent 28% 35%, #D0CEC2 35% 42%, + transparent 42% 49%, #CAC8BC 49% 56%, + transparent 56% 63%, #DBD9CD 63% 70%, + transparent 70% 77%, #D0CEC2 77% 84%, + transparent 84% 91%, #CAC8BC 91% 98%, + transparent 98% + ), linear-gradient(90deg, #F1EEE7, #EDE8E2, #EBE8E1); + background-size: 52px 20px, + 16px 20px, + 52px 20px, + 16px 20px, + 52px 20px, + 52px 20px, + 16px 20px, + 100% 100%; + background-repeat: no-repeat; + background-position: 1px 5px, + 107px 5px, + 203px 5px, + 325px 5px, + 537px 5px, + 589px 5px, + 730px 5px, + top left; + box-shadow: 0 2px 1px -1px #C1BEB5 inset, 0 -2px 1px -1px #FCFCFA inset, 1px 0 0.5px -0.5px #DFDFD7 inset, -2.5px 0 1px -1px #D4CDC5 inset; + border-radius: 1px; +} + +.mode-container { + display: block; + width: 45px; + height: 20px; + border-radius: 2px; + background-image: linear-gradient(90deg,#E6E4D7, #EAE7DE); + position: absolute; + top: 5px; + left: 55px; + box-shadow: 0 4.5px 1px -2px #837363 inset, + 4px 0 3px -2px #BEB8A8 inset, + -3px 0 2px -2px #DBDBD3 inset, + 0 -0.5px 1px #DBD8CF inset, + 0 1px 0.5px -0.75px #FFFCF5; +} + +.mode-bar { + display: block; + width: 35px; + height: 8px; + background-color: black; + position: absolute; + left: 5px; + top: 7px; + background-image: linear-gradient(#1E1E23 45%, #3D3D3D 55%); + border-radius: 1px; + box-shadow: 0 -0.5px 0.5px 0 #D6DBDE, 0 0 1px 0.5px #F7F4ED, 0 -1.25px 2px -1px #2A2925 inset, 0 1.25px 2px -1px black inset; +} + +.mode-handle { + display: block; + width: 14px; + height: 7px; + border-radius: 3px; + position: absolute; + top: 8px; + left: 7px; + background-image: radial-gradient(transparent 40%, #1A1C1D 70%), + linear-gradient(#23272A 60%, #484852 70%); + box-shadow: 0 1.5px 1px -1px #676B6E inset, + 1px 3px 2px -2px #6B685F, + 3px 5px 5px rgba(110, 106, 94, 0.3); +} + +.volume-container { + display: block; + width: 65px; + height: 20px; + position: absolute; + top: 5px; + left: 130px; + border-radius: 2px; + background-image: linear-gradient(90deg, #E5E0DA, #F0EEE1); + box-shadow: 0 1px 0.5px -0.75px #FFFCF5, + 0 3.5px 1.5px -1.5px #807060 inset, + 0 -1.75px 2px -2px #ECE9E0 inset, + 3.5px 0 2px -2px #C7BFB2 inset, + -1.5px 0 0.5px -0.75px #DBD8D1 inset, + 0 -0.5px 1px #D2D1CF; +} + +.volume-bar { + display: block; + width: 55px; + height: 10px; + position: absolute; + top: 6px; + left: 5px; + border-radius: 1px; + background-image: linear-gradient(#1D1E23 45%, #3F3D40 55%); +} + +.volume-handle { + display: block; + width: 19px; + height: 19px; + border-radius: 2px; + position: absolute; + left: 14px; + top: 1px; + background-color: #6A6964; + background-image: radial-gradient(#262626 50%, #3E3D39 80%), + radial-gradient(#353537, #3E3E40 80%, #323031 90%), + linear-gradient(#4C4942, #676860 10% 25%, #282C2C 30% 70%, #777370 75%), + linear-gradient(#4C4942, #676860 10% 25%, #282C2C 30% 70%, #777370 75%); + background-size: 17px 4px, + 15px 15px, + 3px 20px, + 3px 20px; + background-repeat: no-repeat; + background-position: bottom left, + 2px 0, + top right, + top left; + box-shadow: 0 1.5px 0.75px -0.5px #454442 inset, + 0 2px 1px -0.5px #797876 inset, + -0.5px 0 0.5px rgba(30,32,36,0.5) inset, + 5px 0 6px -2px rgba(24,23,28,0.3), + 0 5px 4px rgba(76,74,72,0.3), + 0 6px 2px -3px rgba(76,74,72,0.75); +} + +.tone-container { + display: block; + width: 52px; + height: 20px; + position: absolute; + left: 265px; + top: 5px; + border-radius: 2px; + box-shadow: 0 3.5px 1.5px -1.5px #6B5E4B inset, + 4px 0 3px -2px #A9A79B inset, + -3px 0 2px -2px #D1CAB7 inset, + 0 -0.5px 1px #DEDCD0 inset, + 0 1px 0.5px -0.75px #FFFCF5; + background-image: linear-gradient(90deg, rgba(207,202,196,0.5), rgba(246,243,226,0.5)); +} + +.tone-bar { + display: block; + width: 45px; + height: 9px; + position: absolute; + left: 3px; + top: 6px; + background-image: linear-gradient(#282C2D 25%, #3C3D3F 35%, #373739); + border-radius: 1px; + box-shadow: 0 0.5px 0.5px #F8F5EC, + -1px 0 0.5px #CBC8C1, + 1px 0 0.5px #E9EBDD, + 0 -1px 0.5px #E2E2E2; +} + +.tone-handle { + display: block; + position: absolute; + width: 19px; + height: 18px; + border-radius: 2px; + left: 5px; + top: 1px; + background-color: #6A6964; + background-image: radial-gradient(#272729, #22211C 60%, #5F5C55), + radial-gradient(#3E3F41, #363638 80%, #272729 90%), + linear-gradient(#4C4942, #676860 10% 25%, #282C2C 30% 70%, #777370 75%), + linear-gradient(#4F4A46, #65645F); + background-size: 18px 4px, + 15px 15px, + 2px 20px, + 3px 20px; + background-repeat: no-repeat; + background-position: bottom left, + 2.25px 0, + top right, + top left; + box-shadow: 0 1.5px 0.75px -0.5px #494846 inset, + 0 2.5px 1px -0.75px #313131 inset, + -0.75px 0 0.5px -0.25px #454545 inset, + 0.5px 0 0.5px #3D3A35 inset, + 0 5px 4px 1px rgba(76,74,72,0.4), + 0 6px 2px -3px rgba(76,74,72,0.7); +} + +.btn { + display: block; + width: 9px; + height: 20px; + position: absolute; + top: 5px; + border-radius: 1px; +} + +.clear.btn { + left: 350px; + background-color: #7C99DB; + box-shadow: 0 -1px 1px -0.5px #2F3B43 inset, + 0 -2px 0.5px -0.5px #474D67 inset, + 0 0 1px 1.25px #93A6D1 inset, + 0 0 1px 0.5px #889FBF inset, + 0 3px 3px -1px #59524C, + 0 4px 4px -1px #9D998E, + -0.5px 0 0.5px #707E9A, + 0 2px 4px #D6D4C5; +} + +.del.btn { + left: 375px; + background-color: #EB8372; + box-shadow: 0.5px 0 0.5px #945C4E inset, + 0 -1px 1px -0.5px #6A331E inset, + 0 -2px 0.5px -0.5px #A65F50 inset, + 0 0 1px 1.25px #D38671 inset, + 0 0 1px 0.5px #EF8C7F inset, + 0 3px 3px -1px #966C51, + 0 4px 4px -1px #C9A99A, + -0.5px 0 0.5px #D5AEA2, + 0 2px 4px #DBBBB0; +} + +.down.btn { + left: 400px; + background-color: #EE8273; + box-shadow: 0.5px 0 0.5px #C07C69 inset, + 0 -1px 1px -0.5px #6A331E inset, + 0 -2px 0.5px -0.5px #A65F50 inset, + 0 0 1.25px 1px #EC8775 inset, + 0 0 1px 0.5px #EF8C7F inset, + 0 3px 3px -1px #966C51, + 0 4px 4px -1px #C9A99A, + -0.5px 0 0.5px #D5AEA2, + 0 2px 4px #DBBBB0; +} + +.up.btn { + left: 425px; + background-color: #EB8372; + box-shadow: 0.5px 0 0.5px #945C4E inset, + 0 -1px 1px -0.5px #6A331E inset, + 0 -2px 0.5px -0.5px #A65F50 inset, + 0 0 1.25px 1px #D38671 inset, + 0 0 1px 1px #EF8C7F inset, + 0 3px 3px -1px #966C51, + 0 4px 4px -1px #C9A99A, + -0.5px 0 0.5px #D5AEA2, + 0 2px 4px #DBBBB0; +} + +.select.btn { + left: 450px; + background-color: #EE8273; + box-shadow: 0.5px 0 0.5px #945C4E inset, + 0 -1px 1px -0.5px #6A331E inset, + 0 -2px 0.5px -0.5px #A65F50 inset, + 0 0 1.25px 1px #D38671 inset, + 0 0 1px 1px #EF8C7F inset, + 0 3px 3px -1px #966C51, + 0 4px 4px -1px #C9A99A, + -0.5px 0 0.5px #D5AEA2, + 0 2px 4px #DBBBB0; +} + +.reset.btn { + left: 475px; + background-color: #EDAF5D; + box-shadow: 0.75px 0 0.5px #AE8059 inset, + 0 -0.75px 0.5px #975A2B inset, + 0 0 1px 1.5px #E3AC75 inset, + 0 0 1px 3px #E6AE60 inset, + 0 3px 3px -1px #966C51, + 0 4px 4px -1px #C9A99A, + 1px 0 3px #F8CD94, + -1px 0 5px -2px #D1A78E, + 0 0 4px 1px #EAD4B4; +} + +.demo.btn { + left: 500px; + background-color: #8ED8C5; + box-shadow: 1.25px 0 0.5px #729883 inset, + 0.5px 0 1px 2px #9AD4BE inset, + -3px 0 4px -2px #B4BFAF, + 0 3px 3px -1px #464F3E, + 0 0 5px #D6E4DA, + 0 0 7px #D1D1C7; +} + +.memory.btn { + left: 525px; + background-color: #92A5C3; + box-shadow: 0 -1px 1px -0.5px #2F3B43 inset, + 0 -2px 0.5px -0.5px #474D67 inset, + 0 0 1px 1.25px #93A6D1 inset, + 0 0 1px 0.5px #889FBF inset, + 0 3px 3px -1px #59524C, + 0 4px 4px -1px #9D998E, + -0.5px 0 0.5px #707E9A, + 0 2px 4px #D6D4C5; +} + +.bigbtn { + display: block; + width: 35px; + height: 20px; + background-color: red; + border-radius: 3px; + position: absolute; + top: 4px; + background-color: #759ADE; +} + +.bigbtn.onekey-1 { + right: 65px; + + background-image: linear-gradient( + transparent 25%, + + #405E94 28%, + #A4BFF6 31%, + #8398D1 34%, + + #405E94 37%, + #A4BFF6 40%, + #8398D1 43%, + + #405E94 46%, + #A4BFF6 49%, + #8398D1 52%, + + #405E94 55%, + #A4BFF6 58%, + #8398D1 61%, + + #405E94 64%, + #A4BFF6 67%, + #8398D1 70%, + + #405E94 73%, + #A4BFF6 76%, + #8398D1 79%, + + transparent 80% + ); + box-shadow: 0 -0.5px 1px #15172C inset, + 1.25px 0 0.5px -0.5px #3B3B47 inset, + 2.5px 0 1px #65748B inset, + 3.5px 0 1px #98AED3 inset, + 0 1px 1px #D4E0FA inset, + 0 -1.5px 1px #8DA3D4 inset, + -0.5px 0 0.5px #9AAED1 inset, + -0.75px 0.25px 0.5px #2C2C38, + -1.25px -0.1px 0.1px #EDEEF3, + 0 5px 3px -2.5px #4F4B40, + 0 3px 4px -1px #ACA59D, + 0 4px 5px #CFCBCA; +} + +.bigbtn.onekey-2 { + right: 20px; + + background-image: linear-gradient( + transparent 25%, + + #405E94 28%, + #A4BFF6 31%, + #8398D1 34%, + + #405E94 37%, + #A4BFF6 40%, + #8398D1 43%, + + #47659B 46%, + #A4BFF6 49%, + #8398D1 52%, + + #5871A7 55%, + #A4BFF6 58%, + #8398D1 61%, + + #405E94 64%, + #A4BFF6 67%, + #8398D1 70%, + + #5871A7 73%, + #A4BFF6 76%, + #8398D1 79%, + + transparent 80% + ); + box-shadow: 0 -0.5px 1px #535E70 inset, + 1.25px 0 0.5px -0.5px #3B3B47 inset, + 2.5px 0 1px #65748B inset, + 3.5px 0 1px #98AED3 inset, + 0 1px 1px #D4E0FA inset, + 0 -1.5px 1px #8DA3D4 inset, + -0.5px 0 0.5px #9AAED1 inset, + -0.75px 0.25px 0.5px #454F59, + -1.25px -0.1px 0.1px #EDEEF3, + 0 5px 3px -2.5px #433E38, + 0 3px 4px -1px #C0B9B1, + 0 4px 5px #CFCBCA; +} + +.keys-container { + display: block; + width: 720px; + height: 150px; + position: absolute; + bottom: 0; + right: 35px; + background-color: #E3DFDA; + background-image: linear-gradient(90deg, #E3DFDA, #DFDCD3); + border-radius: 0.5px; + box-shadow: 0 3px 1.25px -0.75px #282421 inset, + 5px 0 2px #AFA896 inset, + -2px 0 4px #9F9684 inset, + -6px 0 2px #BFB3A5 inset, + 0 -1.5px 1px 1px #F1F6EF; +} + +.white { + width: 710px; + height: 135px; + background-color: #141312; + position: absolute; + top: 2px; + left: 5px; + box-shadow: -1px 0 2px -1px rgba(40,36,33,0.35), + 3px 0 2px -1px rgba(40,36,33,0.5), + -2px 0 3px -2px #574E45, + 0 8px 6px -3px #CBC8B9; + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr; + -ms-grid-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr; + grid-gap: 2px; + +} + +.white .key { + height: 133px; + background-color: #E9E7D8; + border-radius: 3px; + background-image: linear-gradient(#E9E7D8, #F4F2E3); + box-shadow: 1px 0 1px -0.5px #F6EDDC inset, + -1.25px 0 0.5px -0.5px #9D9885 inset, + 0 0 1px 2px #F7F5E8 inset, + 0 10px 5px -5px rgba(34,33,28,0.75), + 0 10px 7px -3px rgba(40,36,33,0.25); +} + +.black { + display: grid; + width: 665px; + height: 72px; + position: absolute; + top: 2px; + left: 35px; + grid-template-columns: 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px; + -ms-grid-columns: 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px; + grid-gap: 21px; +} + +.black .key { + background-color: #000; + background-image: linear-gradient( + #B5BDD2 15%, + #556478 17%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); + box-shadow: 1px 0 1px #1D212D inset, + 2px 0 1px #252D3A inset, + -2px 0 0.75px #252D3A inset, + 0 -2px 0.5px #22252A inset, + 0 -6px 0.5px #3B3F42 inset, + 0 0 0.5px 1px #181913, + 7px 7px 1px -5px #FAFBF3, + -7.25px 7px 1px -5px #FAFBF3; + border-radius: 1.5px; +} + +.black .key:nth-child(1) { + background-image: linear-gradient( + #B5BDD2 4%, + #556478 7%, + #3C4759 50%, + #262E31 90% + ); +} + +.black .key:nth-child(4) { + background-image: linear-gradient( + 176deg, + #B5BDD2 4%, + #556478 8%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); +} + +.black .key:nth-child(5) { + background-image: linear-gradient( + 178deg, + #B5BDD2 2%, + #556478 3%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); +} + +.black .key:nth-child(7) { + background-image: linear-gradient( + #B5BDD2 12%, + #556478 15%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); +} + +.black .key:nth-child(8) { + background-image: linear-gradient( + 182deg, + #B5BDD2 2%, + #556478 3% 10%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); +} + +.black .key:nth-child(9) { + background-image: linear-gradient( + #B5BDD2 7%, + #556478 10% 20%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); +} + +.black .key:nth-child(11) { + background-image: linear-gradient( + 182deg, + #B5BDD2 7%, + #556478 10% 20%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); +} + +.black .key:nth-child(12) { + background-image: linear-gradient( + 181deg, + #B5BDD2 5%, + #556478 8%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); +} + + +.black .key:nth-child(14) { + background-image: linear-gradient( + #B5BDD2 2%, + #556478 8%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); +} + +.black .key:nth-child(15) { + background-image: linear-gradient( + 175deg, + #B5BDD2 3%, + #556478 8% 15%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); +} + +.black .key:nth-child(16) { + background-image: linear-gradient( + 179deg, + #B5BDD2 5%, + #556478 7%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); +} + +.logo { + position: absolute; + top: 225px; + left: 15px; + display: block; + width: 180px; +} + +.logo h1 { + font-family: "Montserrat", sans-serif; + font-size: 12px; + text-transform: uppercase; + letter-spacing: 0.5px; + text-align: center; +} + +.logo h1 span:first-child { + color: #6C4351; + text-shadow: 0 0 1px #C3A9B2, 0 0 2px #EEDFE2; +} + +.logo h1 span:last-child { + color: #ECE8E5; + letter-spacing: 1px; + text-shadow: 0px 0.5px 0.75px #BCBBB7, + 0.5px 0.5px 0.75px #BCBBB7, + 0.5px 0px 0.75px #BCBBB7, + 0.5px -0.5px 0.75px #BCBBB7, + 0 -0.5px 0.75px #BCBBB7, + -0.5px -0.5px 0.75px #BCBBB7, + -0.5px 0.5px 0.75px #BCBBB7, + -0.5px 0 0.75px #BCBBB7; +} + +/* + If you like my work: + https://www.buymeacoffee.com/fossheim + https://www.patreon.com/fossheim +*/ \ No newline at end of file diff --git a/casiopt-1-css/license.txt b/casiopt-1-css/license.txt new file mode 100644 index 0000000..1c0f5f4 --- /dev/null +++ b/casiopt-1-css/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Sarah Fossheim (https://codepen.io/fossheim/pen/VweaNYW) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/casiopt-1-css/src/index.html b/casiopt-1-css/src/index.html new file mode 100644 index 0000000..856263c --- /dev/null +++ b/casiopt-1-css/src/index.html @@ -0,0 +1,90 @@ + + + + +
+ +
+ + \ No newline at end of file diff --git a/casiopt-1-css/src/style.css b/casiopt-1-css/src/style.css new file mode 100644 index 0000000..53c2889 --- /dev/null +++ b/casiopt-1-css/src/style.css @@ -0,0 +1,881 @@ +/* tutorials on https://fossheim.io/writing/ */ + +* { + padding: 0; + margin: 0; + box-sizing: border-box; +} + +body { + background-color: #333335; + background-color: #E996AF; +} + +.casio { + display: block; + width: 960px; + height: 260px; + margin: 100px auto 0 auto; + margin: calc(50vh - 150px) auto 0 auto; + border-radius: 4px; + background-color: #EFEFE7; + background-image: linear-gradient(90deg, #EFEFE7, #F4F3EE); + position: relative; + box-shadow: 0 -2px 2px -0.5px #D0CCC1 inset, + 2px 0 2px -0.5px #E1DFE0 inset, + 0 3px 1px #FBFAF8 inset, + 0 45px 10px -25px rgba(0,0,0,0.1), + 0 65px 50px -10px rgba(0,0,0,0.05); +} + +.speaker { + display: block; + width: 180px; + height: 200px; + position: absolute; + top: 12px; + left: 14px; + border-radius: 0.5px; + background-color: #D6C6A2; + background-image: linear-gradient(transparent 40%, #EFEFE7 60%), + linear-gradient(90deg, #BFA58D, transparent 2% 96%, #C9B59A), + linear-gradient(#D1BBA3 20%, transparent 65%), + linear-gradient(90deg, #D6C6A2, #E2D9CA), + linear-gradient(90deg, #D6C6A2, #E2D9CA), + radial-gradient(#897866 60%, transparent 61%); + background-size: 100% 8px, + 100% 100%, + 100% 8px, + 6px 100%, + 6px 100%, + 190px 190px; + background-repeat: repeat, + no-repeat, + repeat, + no-repeat, + no-repeat, + no-repeat; + background-position: 0 0, + 0 0, + 0 0, + 50px 0, + 120px 0, + -7px 7px; +} + +.controls { + display: block; + width: 745px; + height: 80px; + background-color: transparent; + position: absolute; + top: 7px; + right: 15px; + box-shadow: 0 2px 0.75px -0.8px #543F44 inset, 0 -2.5px 0.75px -0.8px #543F44 inset; +} + +.controls-labels { + display: block; + width: 745px; + height: 30px; + font-family: sans-serif; + color: #4F4949; +} + +.controls-labels p { + font-size: 0.5rem; + letter-spacing: 0.5px; + display: inline-block; + border: 1px solid #7A7174; + padding: 0px 8px; + border-radius: 2px; + position: absolute; + top: 4px; +} + +.controls-labels p:nth-child(1) { + left: 55px; +} + +.controls-labels p:nth-child(2) { + left: 130px; + padding: 0 15px; +} + +.controls-labels p:nth-child(3) { + left: 265px; + padding: 0 15px; +} + +.controls-labels p:nth-child(4) { + left: 400px; +} + +.controls-labels p:nth-child(5) { + left: 645px; + padding: 0 11px; +} + +.controls-bar { + display: block; + width: 745px; + height: 30px; + position: absolute; + top: 30px; + background-image: linear-gradient( + 90deg, + transparent 0% 2.5%, #DCDCD0 2.5% 5%, + transparent 5% 7.5%, #E1DFD3 7.5% 10%, + transparent 10% 12.5%, #D5D5CD 12.5% 15%, + transparent 15% 17.5%, #DCDCD0 17.5% 20%, + transparent 20% 22.5%, #E1DFD3 22.5% 25%, + transparent 25% 27.5%, #D5D5CD 27.5% 30%, + transparent 30% 32.5%, #DCDCD0 32.5% 35%, + transparent 35% 37.5%, #E1DFD3 37.5% 40%, + transparent 40% 42.5%, #D5D5CD 42.5% 45%, + transparent 45% 47.5%, #DCDCD0 47.5% 50%, + transparent 50% 52.5%, #E1DFD3 52.5% 55%, + transparent 55% 57.5%, #D5D5CD 57.5% 60%, + transparent 60% 62.5%, #DCDCD0 62.5% 65%, + transparent 65% 67.5%, #E1DFD3 67.5% 70%, + transparent 70% 72.5%, #D5D5CD 72.5% 75%, + transparent 75% 77.5%, #DCDCD0 77.5% 80%, + transparent 80% 82.5%, #E1DFD3 82.5% 85%, + transparent 85% 87.5%, #D5D5CD 87.5% 90%, + transparent 90% 92.5%, #DCDCD0 92.5% 95%, + transparent 95% 97.5%, #E1DFD3 97.5% 100% + ), linear-gradient( + 90deg, + transparent 0% 7%, #DCDCD0 7% 14%, + transparent 14% 21%, #E1DFD3 21% 28%, + transparent 28% 35%, #D5D5CD 35% 42%, + transparent 42% 49%, #DCDCD0 49% 56%, + transparent 56% 63%, #E1DFD3 63% 70%, + transparent 70% 77%, #D5D5CD 77% 84%, + transparent 84% 91%, #DCDCD0 91% 98%, + transparent 98% + ), linear-gradient( + 90deg, + transparent 0% 2.5%, #E0DED1 2.5% 5%, + transparent 5% 7.5%, #DDDBCE 7.5% 10%, + transparent 10% 12.5%, #DEDCCF 12.5% 15%, + transparent 15% 17.5%, #E0DED1 17.5% 20%, + transparent 20% 22.5%, #E1DFD3 22.5% 25%, + transparent 25% 27.5%, #DDDBCE 27.5% 30%, + transparent 30% 32.5%, #DEDCCF 32.5% 35%, + transparent 35% 37.5%, #E0DED1 37.5% 40%, + transparent 40% 42.5%, #D5D5CD 42.5% 45%, + transparent 45% 47.5%, #DDDBCE 47.5% 50%, + transparent 50% 52.5%, #E4E2D6 52.5% 55%, + transparent 55% 57.5%, #E0DED1 57.5% 60%, + transparent 60% 62.5%, #DCDCD0 62.5% 65%, + transparent 65% 67.5%, #DDDBCE 67.5% 70%, + transparent 70% 72.5%, #DEDCCF 72.5% 75%, + transparent 75% 77.5%, #E0DED1 77.5% 80%, + transparent 80% 82.5%, #E1DFD3 82.5% 85%, + transparent 85% 87.5%, #E4E2D6 87.5% 90%, + transparent 90% 92.5%, #E0DED1 92.5% 95%, + transparent 95% 97.5%, #E1DFD3 97.5% 100% + ), linear-gradient( + 90deg, + transparent 0% 7%, #CAC8BC 7% 14%, + transparent 14% 21%, #DBD9CD 21% 28%, + transparent 28% 35%, #D0CEC2 35% 42%, + transparent 42% 49%, #CAC8BC 49% 56%, + transparent 56% 63%, #DBD9CD 63% 70%, + transparent 70% 77%, #D0CEC2 77% 84%, + transparent 84% 91%, #CAC8BC 91% 98%, + transparent 98% + ), linear-gradient( + 90deg, + transparent 0% 2.5%, #E0DED1 2.5% 5%, + transparent 5% 7.5%, #DDDBCE 7.5% 10%, + transparent 10% 12.5%, #DEDCCF 12.5% 15%, + transparent 15% 17.5%, #E0DED1 17.5% 20%, + transparent 20% 22.5%, #E1DFD3 22.5% 25%, + transparent 25% 27.5%, #DDDBCE 27.5% 30%, + transparent 30% 32.5%, #DEDCCF 32.5% 35%, + transparent 35% 37.5%, #E0DED1 37.5% 40%, + transparent 40% 42.5%, #D5D5CD 42.5% 45%, + transparent 45% 47.5%, #DDDBCE 47.5% 50%, + transparent 50% 52.5%, #E4E2D6 52.5% 55%, + transparent 55% 57.5%, #E0DED1 57.5% 60%, + transparent 60% 62.5%, #DCDCD0 62.5% 65%, + transparent 65% 67.5%, #DDDBCE 67.5% 70%, + transparent 70% 72.5%, #DEDCCF 72.5% 75%, + transparent 75% 77.5%, #E0DED1 77.5% 80%, + transparent 80% 82.5%, #E1DFD3 82.5% 85%, + transparent 85% 87.5%, #D5D5CD 87.5% 90%, + transparent 90% 92.5%, #DCDCD0 92.5% 95%, + transparent 95% 97.5%, #E1DFD3 97.5% 100% + ), linear-gradient( + 90deg, + transparent 0% 2.5%, #DCDCD0 2.5% 5%, + transparent 5% 7.5%, #E1DFD3 7.5% 10%, + transparent 10% 12.5%, #D5D5CD 12.5% 15%, + transparent 15% 17.5%, #DCDCD0 17.5% 20%, + transparent 20% 22.5%, #E1DFD3 22.5% 25%, + transparent 25% 27.5%, #D5D5CD 27.5% 30%, + transparent 30% 32.5%, #DCDCD0 32.5% 35%, + transparent 35% 37.5%, #E1DFD3 37.5% 40%, + transparent 40% 42.5%, #D5D5CD 42.5% 45%, + transparent 45% 47.5%, #DCDCD0 47.5% 50%, + transparent 50% 52.5%, #E1DFD3 52.5% 55%, + transparent 55% 57.5%, #D5D5CD 57.5% 60%, + transparent 60% 62.5%, #DCDCD0 62.5% 65%, + transparent 65% 67.5%, #DDDBCE 67.5% 70%, + transparent 70% 72.5%, #DEDCCF 72.5% 75%, + transparent 75% 77.5%, #E0DED1 77.5% 80%, + transparent 80% 82.5%, #E1DFD3 82.5% 85%, + transparent 85% 87.5%, #E4E2D6 87.5% 90%, + transparent 90% 92.5%, #E0DED1 92.5% 95%, + transparent 95% 97.5%, #E1DFD3 97.5% 100% + ), linear-gradient( + 90deg, + transparent 0% 7%, #CAC8BC 7% 14%, + transparent 14% 21%, #DBD9CD 21% 28%, + transparent 28% 35%, #D0CEC2 35% 42%, + transparent 42% 49%, #CAC8BC 49% 56%, + transparent 56% 63%, #DBD9CD 63% 70%, + transparent 70% 77%, #D0CEC2 77% 84%, + transparent 84% 91%, #CAC8BC 91% 98%, + transparent 98% + ), linear-gradient(90deg, #F1EEE7, #EDE8E2, #EBE8E1); + background-size: 52px 20px, + 16px 20px, + 52px 20px, + 16px 20px, + 52px 20px, + 52px 20px, + 16px 20px, + 100% 100%; + background-repeat: no-repeat; + background-position: 1px 5px, + 107px 5px, + 203px 5px, + 325px 5px, + 537px 5px, + 589px 5px, + 730px 5px, + top left; + box-shadow: 0 2px 1px -1px #C1BEB5 inset, 0 -2px 1px -1px #FCFCFA inset, 1px 0 0.5px -0.5px #DFDFD7 inset, -2.5px 0 1px -1px #D4CDC5 inset; + border-radius: 1px; +} + +.mode-container { + display: block; + width: 45px; + height: 20px; + border-radius: 2px; + background-image: linear-gradient(90deg,#E6E4D7, #EAE7DE); + position: absolute; + top: 5px; + left: 55px; + box-shadow: 0 4.5px 1px -2px #837363 inset, + 4px 0 3px -2px #BEB8A8 inset, + -3px 0 2px -2px #DBDBD3 inset, + 0 -0.5px 1px #DBD8CF inset, + 0 1px 0.5px -0.75px #FFFCF5; +} + +.mode-bar { + display: block; + width: 35px; + height: 8px; + background-color: black; + position: absolute; + left: 5px; + top: 7px; + background-image: linear-gradient(#1E1E23 45%, #3D3D3D 55%); + border-radius: 1px; + box-shadow: 0 -0.5px 0.5px 0 #D6DBDE, 0 0 1px 0.5px #F7F4ED, 0 -1.25px 2px -1px #2A2925 inset, 0 1.25px 2px -1px black inset; +} + +.mode-handle { + display: block; + width: 14px; + height: 7px; + border-radius: 3px; + position: absolute; + top: 8px; + left: 7px; + background-image: radial-gradient(transparent 40%, #1A1C1D 70%), + linear-gradient(#23272A 60%, #484852 70%); + box-shadow: 0 1.5px 1px -1px #676B6E inset, + 1px 3px 2px -2px #6B685F, + 3px 5px 5px rgba(110, 106, 94, 0.3); +} + +.volume-container { + display: block; + width: 65px; + height: 20px; + position: absolute; + top: 5px; + left: 130px; + border-radius: 2px; + background-image: linear-gradient(90deg, #E5E0DA, #F0EEE1); + box-shadow: 0 1px 0.5px -0.75px #FFFCF5, + 0 3.5px 1.5px -1.5px #807060 inset, + 0 -1.75px 2px -2px #ECE9E0 inset, + 3.5px 0 2px -2px #C7BFB2 inset, + -1.5px 0 0.5px -0.75px #DBD8D1 inset, + 0 -0.5px 1px #D2D1CF; +} + +.volume-bar { + display: block; + width: 55px; + height: 10px; + position: absolute; + top: 6px; + left: 5px; + border-radius: 1px; + background-image: linear-gradient(#1D1E23 45%, #3F3D40 55%); +} + +.volume-handle { + display: block; + width: 19px; + height: 19px; + border-radius: 2px; + position: absolute; + left: 14px; + top: 1px; + background-color: #6A6964; + background-image: radial-gradient(#262626 50%, #3E3D39 80%), + radial-gradient(#353537, #3E3E40 80%, #323031 90%), + linear-gradient(#4C4942, #676860 10% 25%, #282C2C 30% 70%, #777370 75%), + linear-gradient(#4C4942, #676860 10% 25%, #282C2C 30% 70%, #777370 75%); + background-size: 17px 4px, + 15px 15px, + 3px 20px, + 3px 20px; + background-repeat: no-repeat; + background-position: bottom left, + 2px 0, + top right, + top left; + box-shadow: 0 1.5px 0.75px -0.5px #454442 inset, + 0 2px 1px -0.5px #797876 inset, + -0.5px 0 0.5px rgba(30,32,36,0.5) inset, + 5px 0 6px -2px rgba(24,23,28,0.3), + 0 5px 4px rgba(76,74,72,0.3), + 0 6px 2px -3px rgba(76,74,72,0.75); +} + +.tone-container { + display: block; + width: 52px; + height: 20px; + position: absolute; + left: 265px; + top: 5px; + border-radius: 2px; + box-shadow: 0 3.5px 1.5px -1.5px #6B5E4B inset, + 4px 0 3px -2px #A9A79B inset, + -3px 0 2px -2px #D1CAB7 inset, + 0 -0.5px 1px #DEDCD0 inset, + 0 1px 0.5px -0.75px #FFFCF5; + background-image: linear-gradient(90deg, rgba(207,202,196,0.5), rgba(246,243,226,0.5)); +} + +.tone-bar { + display: block; + width: 45px; + height: 9px; + position: absolute; + left: 3px; + top: 6px; + background-image: linear-gradient(#282C2D 25%, #3C3D3F 35%, #373739); + border-radius: 1px; + box-shadow: 0 0.5px 0.5px #F8F5EC, + -1px 0 0.5px #CBC8C1, + 1px 0 0.5px #E9EBDD, + 0 -1px 0.5px #E2E2E2; +} + +.tone-handle { + display: block; + position: absolute; + width: 19px; + height: 18px; + border-radius: 2px; + left: 5px; + top: 1px; + background-color: #6A6964; + background-image: radial-gradient(#272729, #22211C 60%, #5F5C55), + radial-gradient(#3E3F41, #363638 80%, #272729 90%), + linear-gradient(#4C4942, #676860 10% 25%, #282C2C 30% 70%, #777370 75%), + linear-gradient(#4F4A46, #65645F); + background-size: 18px 4px, + 15px 15px, + 2px 20px, + 3px 20px; + background-repeat: no-repeat; + background-position: bottom left, + 2.25px 0, + top right, + top left; + box-shadow: 0 1.5px 0.75px -0.5px #494846 inset, + 0 2.5px 1px -0.75px #313131 inset, + -0.75px 0 0.5px -0.25px #454545 inset, + 0.5px 0 0.5px #3D3A35 inset, + 0 5px 4px 1px rgba(76,74,72,0.4), + 0 6px 2px -3px rgba(76,74,72,0.7); +} + +.btn { + display: block; + width: 9px; + height: 20px; + position: absolute; + top: 5px; + border-radius: 1px; +} + +.clear.btn { + left: 350px; + background-color: #7C99DB; + box-shadow: 0 -1px 1px -0.5px #2F3B43 inset, + 0 -2px 0.5px -0.5px #474D67 inset, + 0 0 1px 1.25px #93A6D1 inset, + 0 0 1px 0.5px #889FBF inset, + 0 3px 3px -1px #59524C, + 0 4px 4px -1px #9D998E, + -0.5px 0 0.5px #707E9A, + 0 2px 4px #D6D4C5; +} + +.del.btn { + left: 375px; + background-color: #EB8372; + box-shadow: 0.5px 0 0.5px #945C4E inset, + 0 -1px 1px -0.5px #6A331E inset, + 0 -2px 0.5px -0.5px #A65F50 inset, + 0 0 1px 1.25px #D38671 inset, + 0 0 1px 0.5px #EF8C7F inset, + 0 3px 3px -1px #966C51, + 0 4px 4px -1px #C9A99A, + -0.5px 0 0.5px #D5AEA2, + 0 2px 4px #DBBBB0; +} + +.down.btn { + left: 400px; + background-color: #EE8273; + box-shadow: 0.5px 0 0.5px #C07C69 inset, + 0 -1px 1px -0.5px #6A331E inset, + 0 -2px 0.5px -0.5px #A65F50 inset, + 0 0 1.25px 1px #EC8775 inset, + 0 0 1px 0.5px #EF8C7F inset, + 0 3px 3px -1px #966C51, + 0 4px 4px -1px #C9A99A, + -0.5px 0 0.5px #D5AEA2, + 0 2px 4px #DBBBB0; +} + +.up.btn { + left: 425px; + background-color: #EB8372; + box-shadow: 0.5px 0 0.5px #945C4E inset, + 0 -1px 1px -0.5px #6A331E inset, + 0 -2px 0.5px -0.5px #A65F50 inset, + 0 0 1.25px 1px #D38671 inset, + 0 0 1px 1px #EF8C7F inset, + 0 3px 3px -1px #966C51, + 0 4px 4px -1px #C9A99A, + -0.5px 0 0.5px #D5AEA2, + 0 2px 4px #DBBBB0; +} + +.select.btn { + left: 450px; + background-color: #EE8273; + box-shadow: 0.5px 0 0.5px #945C4E inset, + 0 -1px 1px -0.5px #6A331E inset, + 0 -2px 0.5px -0.5px #A65F50 inset, + 0 0 1.25px 1px #D38671 inset, + 0 0 1px 1px #EF8C7F inset, + 0 3px 3px -1px #966C51, + 0 4px 4px -1px #C9A99A, + -0.5px 0 0.5px #D5AEA2, + 0 2px 4px #DBBBB0; +} + +.reset.btn { + left: 475px; + background-color: #EDAF5D; + box-shadow: 0.75px 0 0.5px #AE8059 inset, + 0 -0.75px 0.5px #975A2B inset, + 0 0 1px 1.5px #E3AC75 inset, + 0 0 1px 3px #E6AE60 inset, + 0 3px 3px -1px #966C51, + 0 4px 4px -1px #C9A99A, + 1px 0 3px #F8CD94, + -1px 0 5px -2px #D1A78E, + 0 0 4px 1px #EAD4B4; +} + +.demo.btn { + left: 500px; + background-color: #8ED8C5; + box-shadow: 1.25px 0 0.5px #729883 inset, + 0.5px 0 1px 2px #9AD4BE inset, + -3px 0 4px -2px #B4BFAF, + 0 3px 3px -1px #464F3E, + 0 0 5px #D6E4DA, + 0 0 7px #D1D1C7; +} + +.memory.btn { + left: 525px; + background-color: #92A5C3; + box-shadow: 0 -1px 1px -0.5px #2F3B43 inset, + 0 -2px 0.5px -0.5px #474D67 inset, + 0 0 1px 1.25px #93A6D1 inset, + 0 0 1px 0.5px #889FBF inset, + 0 3px 3px -1px #59524C, + 0 4px 4px -1px #9D998E, + -0.5px 0 0.5px #707E9A, + 0 2px 4px #D6D4C5; +} + +.bigbtn { + display: block; + width: 35px; + height: 20px; + background-color: red; + border-radius: 3px; + position: absolute; + top: 4px; + background-color: #759ADE; +} + +.bigbtn.onekey-1 { + right: 65px; + + background-image: linear-gradient( + transparent 25%, + + #405E94 28%, + #A4BFF6 31%, + #8398D1 34%, + + #405E94 37%, + #A4BFF6 40%, + #8398D1 43%, + + #405E94 46%, + #A4BFF6 49%, + #8398D1 52%, + + #405E94 55%, + #A4BFF6 58%, + #8398D1 61%, + + #405E94 64%, + #A4BFF6 67%, + #8398D1 70%, + + #405E94 73%, + #A4BFF6 76%, + #8398D1 79%, + + transparent 80% + ); + box-shadow: 0 -0.5px 1px #15172C inset, + 1.25px 0 0.5px -0.5px #3B3B47 inset, + 2.5px 0 1px #65748B inset, + 3.5px 0 1px #98AED3 inset, + 0 1px 1px #D4E0FA inset, + 0 -1.5px 1px #8DA3D4 inset, + -0.5px 0 0.5px #9AAED1 inset, + -0.75px 0.25px 0.5px #2C2C38, + -1.25px -0.1px 0.1px #EDEEF3, + 0 5px 3px -2.5px #4F4B40, + 0 3px 4px -1px #ACA59D, + 0 4px 5px #CFCBCA; +} + +.bigbtn.onekey-2 { + right: 20px; + + background-image: linear-gradient( + transparent 25%, + + #405E94 28%, + #A4BFF6 31%, + #8398D1 34%, + + #405E94 37%, + #A4BFF6 40%, + #8398D1 43%, + + #47659B 46%, + #A4BFF6 49%, + #8398D1 52%, + + #5871A7 55%, + #A4BFF6 58%, + #8398D1 61%, + + #405E94 64%, + #A4BFF6 67%, + #8398D1 70%, + + #5871A7 73%, + #A4BFF6 76%, + #8398D1 79%, + + transparent 80% + ); + box-shadow: 0 -0.5px 1px #535E70 inset, + 1.25px 0 0.5px -0.5px #3B3B47 inset, + 2.5px 0 1px #65748B inset, + 3.5px 0 1px #98AED3 inset, + 0 1px 1px #D4E0FA inset, + 0 -1.5px 1px #8DA3D4 inset, + -0.5px 0 0.5px #9AAED1 inset, + -0.75px 0.25px 0.5px #454F59, + -1.25px -0.1px 0.1px #EDEEF3, + 0 5px 3px -2.5px #433E38, + 0 3px 4px -1px #C0B9B1, + 0 4px 5px #CFCBCA; +} + +.keys-container { + display: block; + width: 720px; + height: 150px; + position: absolute; + bottom: 0; + right: 35px; + background-color: #E3DFDA; + background-image: linear-gradient(90deg, #E3DFDA, #DFDCD3); + border-radius: 0.5px; + box-shadow: 0 3px 1.25px -0.75px #282421 inset, + 5px 0 2px #AFA896 inset, + -2px 0 4px #9F9684 inset, + -6px 0 2px #BFB3A5 inset, + 0 -1.5px 1px 1px #F1F6EF; +} + +.white { + width: 710px; + height: 135px; + background-color: #141312; + position: absolute; + top: 2px; + left: 5px; + box-shadow: -1px 0 2px -1px rgba(40,36,33,0.35), + 3px 0 2px -1px rgba(40,36,33,0.5), + -2px 0 3px -2px #574E45, + 0 8px 6px -3px #CBC8B9; + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr; + -ms-grid-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr; + grid-gap: 2px; + +} + +.white .key { + height: 133px; + background-color: #E9E7D8; + border-radius: 3px; + background-image: linear-gradient(#E9E7D8, #F4F2E3); + box-shadow: 1px 0 1px -0.5px #F6EDDC inset, + -1.25px 0 0.5px -0.5px #9D9885 inset, + 0 0 1px 2px #F7F5E8 inset, + 0 10px 5px -5px rgba(34,33,28,0.75), + 0 10px 7px -3px rgba(40,36,33,0.25); +} + +.black { + display: grid; + width: 665px; + height: 72px; + position: absolute; + top: 2px; + left: 35px; + grid-template-columns: 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px; + -ms-grid-columns: 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px 21px; + grid-gap: 21px; +} + +.black .key { + background-color: #000; + background-image: linear-gradient( + #B5BDD2 15%, + #556478 17%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); + box-shadow: 1px 0 1px #1D212D inset, + 2px 0 1px #252D3A inset, + -2px 0 0.75px #252D3A inset, + 0 -2px 0.5px #22252A inset, + 0 -6px 0.5px #3B3F42 inset, + 0 0 0.5px 1px #181913, + 7px 7px 1px -5px #FAFBF3, + -7.25px 7px 1px -5px #FAFBF3; + border-radius: 1.5px; +} + +.black .key:nth-child(1) { + background-image: linear-gradient( + #B5BDD2 4%, + #556478 7%, + #3C4759 50%, + #262E31 90% + ); +} + +.black .key:nth-child(4) { + background-image: linear-gradient( + 176deg, + #B5BDD2 4%, + #556478 8%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); +} + +.black .key:nth-child(5) { + background-image: linear-gradient( + 178deg, + #B5BDD2 2%, + #556478 3%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); +} + +.black .key:nth-child(7) { + background-image: linear-gradient( + #B5BDD2 12%, + #556478 15%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); +} + +.black .key:nth-child(8) { + background-image: linear-gradient( + 182deg, + #B5BDD2 2%, + #556478 3% 10%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); +} + +.black .key:nth-child(9) { + background-image: linear-gradient( + #B5BDD2 7%, + #556478 10% 20%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); +} + +.black .key:nth-child(11) { + background-image: linear-gradient( + 182deg, + #B5BDD2 7%, + #556478 10% 20%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); +} + +.black .key:nth-child(12) { + background-image: linear-gradient( + 181deg, + #B5BDD2 5%, + #556478 8%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); +} + + +.black .key:nth-child(14) { + background-image: linear-gradient( + #B5BDD2 2%, + #556478 8%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); +} + +.black .key:nth-child(15) { + background-image: linear-gradient( + 175deg, + #B5BDD2 3%, + #556478 8% 15%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); +} + +.black .key:nth-child(16) { + background-image: linear-gradient( + 179deg, + #B5BDD2 5%, + #556478 7%, + #3C4759 30%, + #262E31 90%, + #192026 92% + ); +} + +.logo { + position: absolute; + top: 225px; + left: 15px; + display: block; + width: 180px; +} + +.logo h1 { + font-family: "Montserrat", sans-serif; + font-size: 12px; + text-transform: uppercase; + letter-spacing: 0.5px; + text-align: center; +} + +.logo h1 span:first-child { + color: #6C4351; + text-shadow: 0 0 1px #C3A9B2, 0 0 2px #EEDFE2; +} + +.logo h1 span:last-child { + color: #ECE8E5; + letter-spacing: 1px; + text-shadow: 0px 0.5px 0.75px #BCBBB7, + 0.5px 0.5px 0.75px #BCBBB7, + 0.5px 0px 0.75px #BCBBB7, + 0.5px -0.5px 0.75px #BCBBB7, + 0 -0.5px 0.75px #BCBBB7, + -0.5px -0.5px 0.75px #BCBBB7, + -0.5px 0.5px 0.75px #BCBBB7, + -0.5px 0 0.75px #BCBBB7; +} + +/* + If you like my work: + https://www.buymeacoffee.com/fossheim + https://www.patreon.com/fossheim +*/ \ No newline at end of file diff --git a/ceramic-looped/README.markdown b/ceramic-looped/README.markdown new file mode 100644 index 0000000..d0e4176 --- /dev/null +++ b/ceramic-looped/README.markdown @@ -0,0 +1,5 @@ +# Ceramic looped + +A Pen created on CodePen.io. Original URL: [https://codepen.io/supah/pen/jOrNgOM](https://codepen.io/supah/pen/jOrNgOM). + + diff --git a/ceramic-looped/dist/index.html b/ceramic-looped/dist/index.html new file mode 100644 index 0000000..bbea6f5 --- /dev/null +++ b/ceramic-looped/dist/index.html @@ -0,0 +1,25 @@ + + + + + CodePen - Ceramic looped + + + + + + + + + + + + diff --git a/ceramic-looped/dist/script.js b/ceramic-looped/dist/script.js new file mode 100644 index 0000000..f10ff33 --- /dev/null +++ b/ceramic-looped/dist/script.js @@ -0,0 +1,230 @@ +/*-------------------- +Vars +--------------------*/ +let ball; +let pattern; +let palettes; +const win = { w: window.innerWidth, h: window.innerHeight }; +const mouse = { x: win.w * 0.5, y: win.h * 0.5 }; + + +/*-------------------- + Utils + --------------------*/ +const lerp = (v0, v1, t) => v0 * (1 - t) + v1 * t; + + +/*-------------------- + Pattern Generator + --------------------*/ +class Pattern { + constructor(obj) { + Object.assign(this, obj); + this.init(); + } + + init() { + this.canvas = document.querySelector(`#${this.id}`) || document.createElement('canvas'); + this.canvas.id = this.id; + this.canvas.width = this.width; + this.canvas.height = this.height; + document.body.appendChild(this.canvas); + this.ctx = this.canvas.getContext('2d'); + this.generate(); + } + + random(min, max) { + return Math.floor(min + Math.random() * (max - min)); + } + + generate() { + let randomPalette = this.random(0, 100); + // randomPalette = 65 + this.palette = palettes[randomPalette]; + console.log('palette ---->', randomPalette); + let start = 0; + while (start < this.height + this.maxStroke) { + const off = this.random(this.minStroke, this.maxStroke); + this.ctx.beginPath(); + this.ctx.strokeStyle = this.palette[this.random(0, 5)]; + this.ctx.lineWidth = off; + this.ctx.moveTo(-this.maxStroke, start); + this.ctx.lineTo(this.width + this.maxStroke, start); + this.ctx.stroke(); + this.ctx.closePath(); + start += off; + } + + if (ball) { + ball.material.map.needsUpdate = true; + } + }} + + + +/*-------------------- + Ball + --------------------*/ +class Ball { + constructor(obj) { + Object.assign(this, obj); + this.init(); + this.events = this.events.bind(this); + } + + init() { + this.renderer = new THREE.WebGLRenderer({ antialias: true, transparent: true }); + this.renderer.setSize(window.innerWidth, window.innerHeight); + document.body.appendChild(this.renderer.domElement); + + this.camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); + this.camera.position.z = 5; + + this.scene = new THREE.Scene(); + + this.createLights(); + this.createGeo(); + + this.events(); + this.render(); + } + + createLights() { + this.ambientLight = new THREE.AmbientLight(0xffffff, .7); + this.scene.add(this.ambientLight); + this.ambientLight.castShadow = true; + + this.light = new THREE.SpotLight(0xffffff, .5); + this.light.position.set(0, 0, 10); + this.light.castShadow = true; + + this.scene.add(this.light); + this.scene.add(this.ambientLight); + } + + createGeo() { + this.texture = new THREE.Texture(document.getElementById(this.textureID)); + this.texture.wrapS = THREE.RepeatWrapping; + this.texture.wrapT = THREE.RepeatWrapping; + + const path = 'https://threejs.org/examples/textures/cube/SwedishRoyalCastle/'; + const format = '.jpg'; + const urls = [ + `${path}px${format}`, `${path}nx${format}`, + `${path}py${format}`, `${path}ny${format}`, + `${path}pz${format}`, `${path}nz${format}`]; + + this.cubeTexture = new THREE.CubeTextureLoader().load(urls); + this.cubeTexture.mapping = THREE.CubeRefractionMapping; + + console.log(this.cubeTexture); + this.geo = new THREE.SphereBufferGeometry(1.5, 100, 100); + this.material = new THREE.MeshStandardMaterial({ + roughness: 0.1, + metalness: 0.2, + emissive: 0x111111, + map: this.texture, + envMap: this.cubeTexture, + reflectivity: 0, + refractionRatio: 0.8 }); + + this.material.map.needsUpdate = true; + + this.material.onBeforeCompile = function (shader) { + shader.uniforms.time = { value: 0 }; + + shader.vertexShader = ` + uniform float time; + ${shader.vertexShader}`; + shader.vertexShader = shader.vertexShader.replace( + '#include ', + ` + #include + float speed = 8.; + float TAO = 3.14159265 * 2.; + float t = mod(time, speed) / speed; + mat3 mat = mat3( + vec3(1. + sin(TAO * t * 2. + position.z * 2.5) * .5, 0., 0.), + vec3(0., 1. + cos(TAO * t + position.x * 2.) * .5, 0.), + vec3(0., 0., 1. + sin(TAO * t + position.y * 3.) * .5) + ); + transformed *= mat; + vNormal *= mat; + `); + + this.userData.shader = shader; + }; + this.material.castShadow = true; + this.material.receiveShadow = true; + + this.box = new THREE.Mesh(this.geo, this.material); + this.scene.add(this.box); + } + + render() { + this.renderer.render(this.scene, this.camera); + requestAnimationFrame(this.render.bind(this)); + + const time = performance.now() / 1000; + + if (this.material.userData) { + this.material.userData.shader.uniforms.time.value = time; + this.material.map.offset.y = time % 8 / 8; + } + this.box.rotation.y = lerp(this.box.rotation.z, -mouse.x * 0.005, 0.08); + this.box.rotation.z = lerp(this.box.rotation.y, mouse.y * 0.005, 0.08); + this.box.rotation.x = Math.PI * 2 * (time % 8) / 8; + + this.light.position.x = lerp(this.light.position.x, -10 + mouse.x / win.w * 20, 0.08); + this.light.position.y = lerp(this.light.position.y, 10 + mouse.y / win.h * -20, 0.08); + this.light.position.z = lerp(this.light.position.z, -10 + Math.sin(mouse.x / win.w * Math.PI) * 20, 0.08); + } + + handleMouse(e) { + mouse.x = e.clientX || e.touches[0].clientX; + mouse.y = e.clientY || e.touches[0].clientY; + } + + events() { + window.addEventListener('resize', () => { + this.camera.aspect = window.innerWidth / window.innerHeight; + this.camera.updateProjectionMatrix(); + + this.renderer.setSize(window.innerWidth, window.innerHeight); + + win.w = window.innerWidth; + win.h = window.innerHeight; + }); + + window.addEventListener('touchmove', e => {this.handleMouse(e);}); + window.addEventListener('mousemove', e => {this.handleMouse(e);}); + }} + + + +/*-------------------- + Init + --------------------*/ +fetch('https://cdn.jsdelivr.net/npm/nice-color-palettes@3.0.0/100.json'). +then(response => response.json()). +then(data => { + palettes = data; + + pattern = new Pattern({ + id: 'canvas-pattern', + width: 1024, + height: 1024, + minStroke: 2, + maxStroke: 6 }); + + + ball = new Ball({ + textureID: 'canvas-pattern' }); + +}); + + +/*-------------------- + Listeners + --------------------*/ +document.body.addEventListener('click', () => {pattern.generate();}); \ No newline at end of file diff --git a/ceramic-looped/dist/style.css b/ceramic-looped/dist/style.css new file mode 100644 index 0000000..0354a50 --- /dev/null +++ b/ceramic-looped/dist/style.css @@ -0,0 +1,20 @@ +html, +body { + margin: 0; + touch-action: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + background: #030303; +} + +#canvas-pattern { + position: fixed; + top: 0; + left: 0; + z-index: -1; + width: 30px; + height: 30px; +} \ No newline at end of file diff --git a/ceramic-looped/license.txt b/ceramic-looped/license.txt new file mode 100644 index 0000000..0442a7b --- /dev/null +++ b/ceramic-looped/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Fabio Ottaviani (https://codepen.io/supah/pen/jOrNgOM) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/ceramic-looped/src/index.html b/ceramic-looped/src/index.html new file mode 100644 index 0000000..72f5cf5 --- /dev/null +++ b/ceramic-looped/src/index.html @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/ceramic-looped/src/script.babel b/ceramic-looped/src/script.babel new file mode 100644 index 0000000..2295551 --- /dev/null +++ b/ceramic-looped/src/script.babel @@ -0,0 +1,230 @@ +/*-------------------- +Vars +--------------------*/ +let ball +let pattern +let palettes +const win = { w: window.innerWidth, h : window.innerHeight } +const mouse = { x: win.w * 0.5 , y: win.h * 0.5 } + + +/*-------------------- +Utils +--------------------*/ +const lerp = (v0, v1, t) => (v0 * (1 - t) + v1 * t) + + +/*-------------------- +Pattern Generator +--------------------*/ +class Pattern { + constructor (obj) { + Object.assign(this, obj) + this.init() + } + + init() { + this.canvas = document.querySelector(`#${this.id}`) || document.createElement('canvas') + this.canvas.id = this.id + this.canvas.width = this.width + this.canvas.height = this.height + document.body.appendChild(this.canvas) + this.ctx = this.canvas.getContext('2d') + this.generate() + } + + random(min, max) { + return Math.floor(min + Math.random() * (max - min)) + } + + generate() { + let randomPalette = this.random(0, 100) + // randomPalette = 65 + this.palette = palettes[randomPalette] + console.log('palette ---->', randomPalette) + let start = 0 + while (start < this.height + this.maxStroke) { + const off = this.random(this.minStroke, this.maxStroke) + this.ctx.beginPath() + this.ctx.strokeStyle = this.palette[this.random(0, 5)] + this.ctx.lineWidth = off + this.ctx.moveTo(-this.maxStroke, start) + this.ctx.lineTo(this.width + this.maxStroke, start) + this.ctx.stroke() + this.ctx.closePath() + start += off + } + + if (ball) { + ball.material.map.needsUpdate = true + } + } +} + + +/*-------------------- +Ball +--------------------*/ +class Ball { + constructor(obj) { + Object.assign(this, obj) + this.init() + this.events = this.events.bind(this) + } + + init() { + this.renderer = new THREE.WebGLRenderer({ antialias: true, transparent: true }) + this.renderer.setSize(window.innerWidth, window.innerHeight) + document.body.appendChild(this.renderer.domElement) + + this.camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 ) + this.camera.position.z = 5 + + this.scene = new THREE.Scene() + + this.createLights() + this.createGeo() + + this.events() + this.render() + } + + createLights() { + this.ambientLight = new THREE.AmbientLight(0xffffff, .7) + this.scene.add(this.ambientLight) + this.ambientLight.castShadow = true + + this.light = new THREE.SpotLight( 0xffffff, .5 ) + this.light.position.set(0, 0, 10) + this.light.castShadow = true + + this.scene.add(this.light) + this.scene.add(this.ambientLight) + } + + createGeo() { + this.texture = new THREE.Texture(document.getElementById(this.textureID)) + this.texture.wrapS = THREE.RepeatWrapping + this.texture.wrapT = THREE.RepeatWrapping + + const path = 'https://threejs.org/examples/textures/cube/SwedishRoyalCastle/' + const format = '.jpg' + const urls = [ + `${path}px${format}`, `${path}nx${format}`, + `${path}py${format}`, `${path}ny${format}`, + `${path}pz${format}`, `${path}nz${format}` + ] + this.cubeTexture = new THREE.CubeTextureLoader().load(urls) + this.cubeTexture.mapping = THREE.CubeRefractionMapping + + console.log(this.cubeTexture) + this.geo = new THREE.SphereBufferGeometry( 1.5, 100, 100) + this.material = new THREE.MeshStandardMaterial({ + roughness: 0.1, + metalness: 0.2, + emissive: 0x111111, + map: this.texture, + envMap: this.cubeTexture, + reflectivity: 0, + refractionRatio: 0.8, + }) + this.material.map.needsUpdate = true + + this.material.onBeforeCompile = function ( shader ) { + shader.uniforms.time = { value: 0 } + + shader.vertexShader = ` + uniform float time; + ${shader.vertexShader}`; + shader.vertexShader = shader.vertexShader.replace( + '#include ', + ` + #include + float speed = 8.; + float TAO = 3.14159265 * 2.; + float t = mod(time, speed) / speed; + mat3 mat = mat3( + vec3(1. + sin(TAO * t * 2. + position.z * 2.5) * .5, 0., 0.), + vec3(0., 1. + cos(TAO * t + position.x * 2.) * .5, 0.), + vec3(0., 0., 1. + sin(TAO * t + position.y * 3.) * .5) + ); + transformed *= mat; + vNormal *= mat; + ` + ); + this.userData.shader = shader + } + this.material.castShadow = true + this.material.receiveShadow = true + + this.box = new THREE.Mesh(this.geo, this.material) + this.scene.add(this.box) + } + + render() { + this.renderer.render(this.scene, this.camera) + requestAnimationFrame(this.render.bind(this)) + + const time = performance.now() / 1000 + + if (this.material.userData) { + this.material.userData.shader.uniforms.time.value = time + this.material.map.offset.y = (time % 8) / 8 + } + this.box.rotation.y = lerp(this.box.rotation.z, -mouse.x * 0.005, 0.08) + this.box.rotation.z = lerp(this.box.rotation.y, mouse.y * 0.005, 0.08) + this.box.rotation.x = Math.PI * 2 * (time % 8) / 8 + + this.light.position.x = lerp(this.light.position.x, -10 + mouse.x / win.w * 20, 0.08) + this.light.position.y = lerp(this.light.position.y, 10 + mouse.y / win.h * -20, 0.08) + this.light.position.z = lerp(this.light.position.z, -10 + Math.sin(mouse.x / win.w * Math.PI) * 20, 0.08) + } + + handleMouse(e) { + mouse.x = e.clientX || e.touches[0].clientX + mouse.y = e.clientY || e.touches[0].clientY + } + + events() { + window.addEventListener('resize', () => { + this.camera.aspect = window.innerWidth / window.innerHeight + this.camera.updateProjectionMatrix() + + this.renderer.setSize(window.innerWidth, window.innerHeight) + + win.w = window.innerWidth + win.h = window.innerHeight + }) + + window.addEventListener('touchmove', (e) => { this.handleMouse(e)}) + window.addEventListener('mousemove', (e) => { this.handleMouse(e)}) + } +} + + +/*-------------------- +Init +--------------------*/ +fetch('https://cdn.jsdelivr.net/npm/nice-color-palettes@3.0.0/100.json') + .then(response => response.json()) + .then(data => { + palettes = data + + pattern = new Pattern({ + id: 'canvas-pattern', + width: 1024, + height: 1024, + minStroke: 2, + maxStroke: 6 + }) + + ball = new Ball({ + textureID: 'canvas-pattern' + }) +}) + + +/*-------------------- +Listeners +--------------------*/ +document.body.addEventListener('click', () => { pattern.generate() }) \ No newline at end of file diff --git a/ceramic-looped/src/style.scss b/ceramic-looped/src/style.scss new file mode 100644 index 0000000..1d1308d --- /dev/null +++ b/ceramic-looped/src/style.scss @@ -0,0 +1,17 @@ +html, +body { + margin: 0; + touch-action: none; + user-select: none; + cursor: pointer; + background: #030303; +} + +#canvas-pattern { + position: fixed; + top: 0; + left: 0; + z-index: -1; + width: 30px; + height: 30px; +} \ No newline at end of file diff --git a/checkbox-group-styled-as-tiles/README.markdown b/checkbox-group-styled-as-tiles/README.markdown new file mode 100644 index 0000000..e3b69bf --- /dev/null +++ b/checkbox-group-styled-as-tiles/README.markdown @@ -0,0 +1,7 @@ +# Checkbox group styled as tiles + +A Pen created on CodePen.io. Original URL: [https://codepen.io/havardob/pen/BapJYMg](https://codepen.io/havardob/pen/BapJYMg). + +A demonstration of how to create checkboxes that doesn't necessarily looks like... well, checkboxes. + +Icons by https://phosphoricons.com/ diff --git a/checkbox-group-styled-as-tiles/dist/index.html b/checkbox-group-styled-as-tiles/dist/index.html new file mode 100644 index 0000000..ddbc267 --- /dev/null +++ b/checkbox-group-styled-as-tiles/dist/index.html @@ -0,0 +1,160 @@ + + + + + CodePen - Checkbox group styled as tiles + + + + + + + +
+ Choose your favorites +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + + + + diff --git a/checkbox-group-styled-as-tiles/dist/script.js b/checkbox-group-styled-as-tiles/dist/script.js new file mode 100644 index 0000000..91557d7 --- /dev/null +++ b/checkbox-group-styled-as-tiles/dist/script.js @@ -0,0 +1 @@ +// Nope \ No newline at end of file diff --git a/checkbox-group-styled-as-tiles/dist/style.css b/checkbox-group-styled-as-tiles/dist/style.css new file mode 100644 index 0000000..44cef49 --- /dev/null +++ b/checkbox-group-styled-as-tiles/dist/style.css @@ -0,0 +1,128 @@ +@import url("https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap"); +*, +*:after, +*:before { + box-sizing: border-box; +} + +body { + font-family: "Inter", sans-serif; + line-height: 1.5; + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + background-color: #f8f8f9; +} + +.checkbox-group { + display: flex; + flex-wrap: wrap; + justify-content: center; + width: 90%; + margin-left: auto; + margin-right: auto; + max-width: 600px; +} +.checkbox-group > * { + margin: 0.5rem 0.5rem; +} + +.checkbox-group-legend { + font-size: 1.5rem; + font-weight: 700; + color: #9c9c9c; + text-align: center; + line-height: 1.125; + margin-bottom: 1.25rem; +} + +.checkbox-input { + clip: rect(0 0 0 0); + -webkit-clip-path: inset(100%); + clip-path: inset(100%); + height: 1px; + overflow: hidden; + position: absolute; + white-space: nowrap; + width: 1px; +} +.checkbox-input:checked + .checkbox-tile { + border-color: #2260ff; + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1); + color: #2260ff; +} +.checkbox-input:checked + .checkbox-tile:before { + transform: scale(1); + opacity: 1; + background-color: #2260ff; + border-color: #2260ff; +} +.checkbox-input:checked + .checkbox-tile .checkbox-icon, .checkbox-input:checked + .checkbox-tile .checkbox-label { + color: #2260ff; +} +.checkbox-input:focus + .checkbox-tile { + border-color: #2260ff; + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1), 0 0 0 4px #b5c9fc; +} +.checkbox-input:focus + .checkbox-tile:before { + transform: scale(1); + opacity: 1; +} + +.checkbox-tile { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 7rem; + min-height: 7rem; + border-radius: 0.5rem; + border: 2px solid #b5bfd9; + background-color: #fff; + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1); + transition: 0.15s ease; + cursor: pointer; + position: relative; +} +.checkbox-tile:before { + content: ""; + position: absolute; + display: block; + width: 1.25rem; + height: 1.25rem; + border: 2px solid #b5bfd9; + background-color: #fff; + border-radius: 50%; + top: 0.25rem; + left: 0.25rem; + opacity: 0; + transform: scale(0); + transition: 0.25s ease; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='192' height='192' fill='%23FFFFFF' viewBox='0 0 256 256'%3E%3Crect width='256' height='256' fill='none'%3E%3C/rect%3E%3Cpolyline points='216 72.005 104 184 48 128.005' fill='none' stroke='%23FFFFFF' stroke-linecap='round' stroke-linejoin='round' stroke-width='32'%3E%3C/polyline%3E%3C/svg%3E"); + background-size: 12px; + background-repeat: no-repeat; + background-position: 50% 50%; +} +.checkbox-tile:hover { + border-color: #2260ff; +} +.checkbox-tile:hover:before { + transform: scale(1); + opacity: 1; +} + +.checkbox-icon { + transition: 0.375s ease; + color: #494949; +} +.checkbox-icon svg { + width: 3rem; + height: 3rem; +} + +.checkbox-label { + color: #707070; + transition: 0.375s ease; + text-align: center; +} \ No newline at end of file diff --git a/checkbox-group-styled-as-tiles/license.txt b/checkbox-group-styled-as-tiles/license.txt new file mode 100644 index 0000000..5922deb --- /dev/null +++ b/checkbox-group-styled-as-tiles/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Hรฅvard Brynjulfsen (https://codepen.io/havardob/pen/BapJYMg) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/checkbox-group-styled-as-tiles/src/index.html b/checkbox-group-styled-as-tiles/src/index.html new file mode 100644 index 0000000..f7f55b4 --- /dev/null +++ b/checkbox-group-styled-as-tiles/src/index.html @@ -0,0 +1,143 @@ +
+ Choose your favorites +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
\ No newline at end of file diff --git a/checkbox-group-styled-as-tiles/src/script.js b/checkbox-group-styled-as-tiles/src/script.js new file mode 100644 index 0000000..91557d7 --- /dev/null +++ b/checkbox-group-styled-as-tiles/src/script.js @@ -0,0 +1 @@ +// Nope \ No newline at end of file diff --git a/checkbox-group-styled-as-tiles/src/style.scss b/checkbox-group-styled-as-tiles/src/style.scss new file mode 100644 index 0000000..b749b52 --- /dev/null +++ b/checkbox-group-styled-as-tiles/src/style.scss @@ -0,0 +1,136 @@ +@import url("https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap"); + +*, +*:after, +*:before { + box-sizing: border-box; +} + +body { + font-family: "Inter", sans-serif; + line-height: 1.5; + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + background-color: #f8f8f9; +} + +.checkbox-group { + display: flex; + flex-wrap: wrap; + justify-content: center; + width: 90%; + margin-left: auto; + margin-right: auto; + max-width: 600px; + & > * { + margin: .5rem 0.5rem; + } +} + + + +.checkbox-group-legend { + font-size: 1.5rem; + font-weight: 700; + color: #9c9c9c; + text-align: center; + line-height: 1.125; + margin-bottom: 1.25rem; +} + +.checkbox-input { + // Code to hide the input + clip: rect(0 0 0 0); + clip-path: inset(100%); + height: 1px; + overflow: hidden; + position: absolute; + white-space: nowrap; + width: 1px; + + &:checked + .checkbox-tile { + border-color: #2260ff; + box-shadow: 0 5px 10px rgba(#000, 0.1); + color: #2260ff; + &:before { + transform: scale(1); + opacity: 1; + background-color: #2260ff; + border-color: #2260ff; + } + + .checkbox-icon, .checkbox-label { + color: #2260ff; + } + } + + &:focus + .checkbox-tile { + border-color: #2260ff; + box-shadow: 0 5px 10px rgba(#000, 0.1), 0 0 0 4px #b5c9fc; + &:before { + transform: scale(1); + opacity: 1; + } + } +} + +.checkbox-tile { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 7rem; + min-height: 7rem; + border-radius: 0.5rem; + border: 2px solid #b5bfd9; + background-color: #fff; + box-shadow: 0 5px 10px rgba(#000, 0.1); + transition: 0.15s ease; + cursor: pointer; + position: relative; + + &:before { + content: ""; + position: absolute; + display: block; + width: 1.25rem; + height: 1.25rem; + border: 2px solid #b5bfd9; + background-color: #fff; + border-radius: 50%; + top: 0.25rem; + left: 0.25rem; + opacity: 0; + transform: scale(0); + transition: 0.25s ease; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='192' height='192' fill='%23FFFFFF' viewBox='0 0 256 256'%3E%3Crect width='256' height='256' fill='none'%3E%3C/rect%3E%3Cpolyline points='216 72.005 104 184 48 128.005' fill='none' stroke='%23FFFFFF' stroke-linecap='round' stroke-linejoin='round' stroke-width='32'%3E%3C/polyline%3E%3C/svg%3E"); + background-size: 12px; + background-repeat: no-repeat; + background-position: 50% 50%; + } + + &:hover { + border-color: #2260ff; + &:before { + transform: scale(1); + opacity: 1; + } + } +} + +.checkbox-icon { + transition: .375s ease; + color: #494949; + svg { + width: 3rem; + height: 3rem; + } +} + +.checkbox-label { + color: #707070; + transition: .375s ease; + text-align: center; +} diff --git a/checkbox-switch-input-element-only-css-crossbrowser/README.markdown b/checkbox-switch-input-element-only-css-crossbrowser/README.markdown new file mode 100644 index 0000000..9ade3d8 --- /dev/null +++ b/checkbox-switch-input-element-only-css-crossbrowser/README.markdown @@ -0,0 +1,4 @@ +# Checkbox switch, input element only + CSS, crossbrowser + _A Pen created at CodePen.io. Original URL: [https://codepen.io/rakeizer/pen/QQRBoZ](https://codepen.io/rakeizer/pen/QQRBoZ). + + Checkbox switch using no extra markup, CSS only \ No newline at end of file diff --git a/checkbox-switch-input-element-only-css-crossbrowser/dist/index.html b/checkbox-switch-input-element-only-css-crossbrowser/dist/index.html new file mode 100644 index 0000000..48f38ab --- /dev/null +++ b/checkbox-switch-input-element-only-css-crossbrowser/dist/index.html @@ -0,0 +1,14 @@ + + + + + Checkbox switch, input element only + CSS, crossbrowser + + + + + + + + + \ No newline at end of file diff --git a/checkbox-switch-input-element-only-css-crossbrowser/dist/style.css b/checkbox-switch-input-element-only-css-crossbrowser/dist/style.css new file mode 100644 index 0000000..a0ca7f8 --- /dev/null +++ b/checkbox-switch-input-element-only-css-crossbrowser/dist/style.css @@ -0,0 +1,19 @@ +input.switch { + -moz-appearance: none; + -webkit-appearance: none; + -o-appearance: none; + height: 20px; + width: 40px; + border-radius: 10px; + box-shadow: inset -20px 0px 0px 0px rgba(192, 192, 192, 1); + background-color: white; + border: 1px solid rgba(192, 192, 192, 1); + outline: none; + -webkit-transition: 0.2s; + transition: 0.2s; +} + +input.switch:checked { + box-shadow: inset 20px 0px 0px 1px rgba(33, 150, 243, 0.5); + border: 1px solid rgba(33, 150, 243, 1); +} diff --git a/checkbox-switch-input-element-only-css-crossbrowser/license.txt b/checkbox-switch-input-element-only-css-crossbrowser/license.txt new file mode 100644 index 0000000..d6832bc --- /dev/null +++ b/checkbox-switch-input-element-only-css-crossbrowser/license.txt @@ -0,0 +1,13 @@ + + + + diff --git a/checkbox-switch-input-element-only-css-crossbrowser/src/index.html b/checkbox-switch-input-element-only-css-crossbrowser/src/index.html new file mode 100644 index 0000000..dca1e99 --- /dev/null +++ b/checkbox-switch-input-element-only-css-crossbrowser/src/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/checkbox-switch-input-element-only-css-crossbrowser/src/style.css b/checkbox-switch-input-element-only-css-crossbrowser/src/style.css new file mode 100644 index 0000000..a0ca7f8 --- /dev/null +++ b/checkbox-switch-input-element-only-css-crossbrowser/src/style.css @@ -0,0 +1,19 @@ +input.switch { + -moz-appearance: none; + -webkit-appearance: none; + -o-appearance: none; + height: 20px; + width: 40px; + border-radius: 10px; + box-shadow: inset -20px 0px 0px 0px rgba(192, 192, 192, 1); + background-color: white; + border: 1px solid rgba(192, 192, 192, 1); + outline: none; + -webkit-transition: 0.2s; + transition: 0.2s; +} + +input.switch:checked { + box-shadow: inset 20px 0px 0px 1px rgba(33, 150, 243, 0.5); + border: 1px solid rgba(33, 150, 243, 1); +} diff --git a/checklist-animation/README.markdown b/checklist-animation/README.markdown new file mode 100644 index 0000000..4514ce2 --- /dev/null +++ b/checklist-animation/README.markdown @@ -0,0 +1,4 @@ +# Checklist animation + _A Pen created at CodePen.io. Original URL: [https://codepen.io/milanraring/pen/QWbqBGo](https://codepen.io/milanraring/pen/QWbqBGo). + + Simple checklist animation \ No newline at end of file diff --git a/checklist-animation/dist/index.html b/checklist-animation/dist/index.html new file mode 100644 index 0000000..75c8125 --- /dev/null +++ b/checklist-animation/dist/index.html @@ -0,0 +1,30 @@ + + + + + CodePen - Checklist animation + + + + + + +
+ + + + + + +
+ + + +
+ + +
+ + + + diff --git a/checklist-animation/dist/style.css b/checklist-animation/dist/style.css new file mode 100644 index 0000000..ebd058b --- /dev/null +++ b/checklist-animation/dist/style.css @@ -0,0 +1,316 @@ +#checklist { + --background: #ffffff; + --text: #414856; + --check: #4F29F0; + --disabled: #C3C8DE; + --width: 100px; + --height: 140px; + --border-radius: 10px; + background: var(--background); + width: var(--width); + height: var(--height); + border-radius: var(--border-radius); + position: relative; + box-shadow: 0 10px 30px rgba(65, 72, 86, 0.05); + padding: 30px 45px; + display: grid; + grid-template-columns: 30px auto; + -webkit-box-align: center; + align-items: center; +} +#checklist label { + color: var(--text); + position: relative; + cursor: pointer; + display: grid; + -webkit-box-align: center; + align-items: center; + width: -webkit-fit-content; + width: -moz-fit-content; + width: fit-content; + -webkit-transition: color .3s ease; + transition: color .3s ease; +} +#checklist label::before, #checklist label::after { + content: ""; + position: absolute; +} +#checklist label::before { + height: 2px; + width: 8px; + left: -27px; + background: var(--check); + border-radius: 2px; + -webkit-transition: background .3s ease; + transition: background .3s ease; +} +#checklist label:after { + height: 4px; + width: 4px; + top: 8px; + left: -25px; + border-radius: 50%; +} +#checklist input[type="checkbox"] { + -webkit-appearance: none; + -moz-appearance: none; + position: relative; + height: 15px; + width: 15px; + outline: none; + border: 0; + margin: 0 15px 0 0; + cursor: pointer; + background: var(--background); + display: grid; + -webkit-box-align: center; + align-items: center; +} +#checklist input[type="checkbox"]::before, #checklist input[type="checkbox"]::after { + content: ""; + position: absolute; + height: 2px; + top: auto; + background: var(--check); + border-radius: 2px; +} +#checklist input[type="checkbox"]::before { + width: 0px; + right: 60%; + -webkit-transform-origin: right bottom; + transform-origin: right bottom; +} +#checklist input[type="checkbox"]::after { + width: 0px; + left: 40%; + -webkit-transform-origin: left bottom; + transform-origin: left bottom; +} +#checklist input[type="checkbox"]:checked::before { + -webkit-animation: check-01 .4s ease forwards; + animation: check-01 .4s ease forwards; +} +#checklist input[type="checkbox"]:checked::after { + -webkit-animation: check-02 .4s ease forwards; + animation: check-02 .4s ease forwards; +} +#checklist input[type="checkbox"]:checked + label { + color: var(--disabled); + -webkit-animation: move .3s ease .1s forwards; + animation: move .3s ease .1s forwards; +} +#checklist input[type="checkbox"]:checked + label::before { + background: var(--disabled); + -webkit-animation: slice .4s ease forwards; + animation: slice .4s ease forwards; +} +#checklist input[type="checkbox"]:checked + label::after { + -webkit-animation: firework .5s ease forwards .1s; + animation: firework .5s ease forwards .1s; +} + +@-webkit-keyframes move { + 50% { + padding-left: 8px; + padding-right: 0px; + } + 100% { + padding-right: 4px; + } +} + +@keyframes move { + 50% { + padding-left: 8px; + padding-right: 0px; + } + 100% { + padding-right: 4px; + } +} +@-webkit-keyframes slice { + 60% { + width: 100%; + left: 4px; + } + 100% { + width: 100%; + left: -2px; + padding-left: 0; + } +} +@keyframes slice { + 60% { + width: 100%; + left: 4px; + } + 100% { + width: 100%; + left: -2px; + padding-left: 0; + } +} +@-webkit-keyframes check-01 { + 0% { + width: 4px; + top: auto; + -webkit-transform: rotate(0); + transform: rotate(0); + } + 50% { + width: 0px; + top: auto; + -webkit-transform: rotate(0); + transform: rotate(0); + } + 51% { + width: 0px; + top: 8px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + } + 100% { + width: 5px; + top: 8px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + } +} +@keyframes check-01 { + 0% { + width: 4px; + top: auto; + -webkit-transform: rotate(0); + transform: rotate(0); + } + 50% { + width: 0px; + top: auto; + -webkit-transform: rotate(0); + transform: rotate(0); + } + 51% { + width: 0px; + top: 8px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + } + 100% { + width: 5px; + top: 8px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + } +} +@-webkit-keyframes check-02 { + 0% { + width: 4px; + top: auto; + -webkit-transform: rotate(0); + transform: rotate(0); + } + 50% { + width: 0px; + top: auto; + -webkit-transform: rotate(0); + transform: rotate(0); + } + 51% { + width: 0px; + top: 8px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + } + 100% { + width: 10px; + top: 8px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + } +} +@keyframes check-02 { + 0% { + width: 4px; + top: auto; + -webkit-transform: rotate(0); + transform: rotate(0); + } + 50% { + width: 0px; + top: auto; + -webkit-transform: rotate(0); + transform: rotate(0); + } + 51% { + width: 0px; + top: 8px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + } + 100% { + width: 10px; + top: 8px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + } +} +@-webkit-keyframes firework { + 0% { + opacity: 1; + box-shadow: 0 0 0 -2px #4F29F0, 0 0 0 -2px #4F29F0, 0 0 0 -2px #4F29F0, 0 0 0 -2px #4F29F0, 0 0 0 -2px #4F29F0, 0 0 0 -2px #4F29F0; + } + 30% { + opacity: 1; + } + 100% { + opacity: 0; + box-shadow: 0 -15px 0 0px #4F29F0, 14px -8px 0 0px #4F29F0, 14px 8px 0 0px #4F29F0, 0 15px 0 0px #4F29F0, -14px 8px 0 0px #4F29F0, -14px -8px 0 0px #4F29F0; + } +} +@keyframes firework { + 0% { + opacity: 1; + box-shadow: 0 0 0 -2px #4F29F0, 0 0 0 -2px #4F29F0, 0 0 0 -2px #4F29F0, 0 0 0 -2px #4F29F0, 0 0 0 -2px #4F29F0, 0 0 0 -2px #4F29F0; + } + 30% { + opacity: 1; + } + 100% { + opacity: 0; + box-shadow: 0 -15px 0 0px #4F29F0, 14px -8px 0 0px #4F29F0, 14px 8px 0 0px #4F29F0, 0 15px 0 0px #4F29F0, -14px 8px 0 0px #4F29F0, -14px -8px 0 0px #4F29F0; + } +} +body { + background: #E8EBF3; + height: 100vh; + font: 400 16px 'Varela Round', sans-serif; + display: -webkit-box; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; +} +body .socials { + position: fixed; + display: block; + left: 20px; + bottom: 20px; +} +body .socials > a { + display: block; + width: 30px; + opacity: .2; + -webkit-transform: scale(var(--scale, 0.8)); + transform: scale(var(--scale, 0.8)); + -webkit-transition: -webkit-transform 0.3s cubic-bezier(0.38, -0.12, 0.24, 1.91); + transition: -webkit-transform 0.3s cubic-bezier(0.38, -0.12, 0.24, 1.91); + transition: transform 0.3s cubic-bezier(0.38, -0.12, 0.24, 1.91); + transition: transform 0.3s cubic-bezier(0.38, -0.12, 0.24, 1.91), -webkit-transform 0.3s cubic-bezier(0.38, -0.12, 0.24, 1.91); +} +body .socials > a:hover { + --scale: 1; +} \ No newline at end of file diff --git a/checklist-animation/license.txt b/checklist-animation/license.txt new file mode 100644 index 0000000..3162436 --- /dev/null +++ b/checklist-animation/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Milan Raring (https://codepen.io/milanraring/pen/QWbqBGo) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/checklist-animation/src/index.html b/checklist-animation/src/index.html new file mode 100644 index 0000000..a4f5656 --- /dev/null +++ b/checklist-animation/src/index.html @@ -0,0 +1,15 @@ +
+ + + + + + +
+ + + +
+ + +
\ No newline at end of file diff --git a/checklist-animation/src/style.scss b/checklist-animation/src/style.scss new file mode 100644 index 0000000..2f7d43d --- /dev/null +++ b/checklist-animation/src/style.scss @@ -0,0 +1,206 @@ +#checklist { + --background: #ffffff; + --text: #414856; + --check: #4F29F0; + --disabled: #C3C8DE; + --width: 100px; + --height: 140px; + --border-radius: 10px; + background: var(--background); + width: var(--width); + height: var(--height); + border-radius: var(--border-radius); + position: relative; + box-shadow: 0 10px 30px rgba(#414856, 0.05); + padding: 30px 45px; + display: grid; + grid-template-columns: 30px auto; + align-items: center; + label { + color: var(--text); + position: relative; + cursor: pointer; + display: grid; + align-items: center; + width: fit-content; + transition: color .3s ease; + &::before, + &::after { + content:""; + position: absolute; + } + &::before { + height: 2px; + width: 8px; + left: -27px; + background: var(--check); + border-radius: 2px; + transition: background .3s ease; + } + &:after { + height: 4px; + width: 4px; + top: 8px; + left: -25px; + border-radius: 50%; + } + } + input[type="checkbox"] { + -webkit-appearance: none; + -moz-appearance: none; + position: relative; + height: 15px; + width: 15px; + outline: none; + border: 0; + margin: 0 15px 0 0; + cursor: pointer; + background: var(--background); + display: grid; + align-items: center; + &::before, + &::after { + content:""; + position: absolute; + height: 2px; + top: auto; + background: var(--check); + border-radius: 2px; + } + &::before { + width: 0px; + right: 60%; + transform-origin: right bottom; + } + &::after { + width: 0px; + left: 40%; + transform-origin: left bottom; + } + &:checked { + &::before { + animation: check-01 .4s ease forwards; + } + &::after { + animation: check-02 .4s ease forwards; + } + + label { + color: var(--disabled); + animation: move .3s ease .1s forwards; + &::before { + background: var(--disabled); + animation: slice .4s ease forwards; + } + &::after { + animation: firework .5s ease forwards .1s; + } + } + } + } +} + +@keyframes move { + 50% { + padding-left: 8px; + padding-right: 0px; + } + 100% { + padding-right: 4px; + } +} +@keyframes slice { + 60% { + width: 100%; + left: 4px; + } + 100% { + width: 100%; + left: -2px; + padding-left: 0; + } +} +@keyframes check-01 { + 0% { + width: 4px; + top: auto; + transform: rotate(0); + } + 50% { + width: 0px; + top: auto; + transform: rotate(0); + } + 51% { + width: 0px; + top: 8px; + transform: rotate(45deg); + } + 100% { + width: 5px; + top: 8px; + transform: rotate(45deg); + } +} +@keyframes check-02 { + 0% { + width: 4px; + top: auto; + transform: rotate(0); + } + 50% { + width: 0px; + top: auto; + transform: rotate(0); + } + 51% { + width: 0px; + top: 8px; + transform: rotate(-45deg); + } + 100% { + width: 10px; + top: 8px; + transform: rotate(-45deg); + } +} +@keyframes firework { + 0% { + opacity: 1; + box-shadow: 0 0 0 -2px #4F29F0, 0 0 0 -2px #4F29F0, 0 0 0 -2px #4F29F0, 0 0 0 -2px #4F29F0, 0 0 0 -2px #4F29F0, 0 0 0 -2px #4F29F0; + } + 30% { + opacity: 1; + } + 100% { + opacity: 0; + box-shadow: 0 -15px 0 0px #4F29F0, 14px -8px 0 0px #4F29F0, 14px 8px 0 0px #4F29F0, 0 15px 0 0px #4F29F0, -14px 8px 0 0px #4F29F0, -14px -8px 0 0px #4F29F0; + } +} + + +//--- ## BASIC ############# +body { + background: #E8EBF3; + height: 100vh; + font: 400 16px 'Varela Round', sans-serif; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + .socials { + position: fixed; + display: block; + left: 20px; + bottom: 20px; + > a { + display: block; + width: 30px; + opacity: .2; + transform: scale(var(--scale, .8)); + transition: transform .3s cubic-bezier(0.38,-0.12, 0.24, 1.91); + &:hover { + --scale: 1; + } + } + } +} \ No newline at end of file diff --git a/christmas-cannon/LICENSE.txt b/christmas-cannon/LICENSE.txt new file mode 100644 index 0000000..dcf6f7d --- /dev/null +++ b/christmas-cannon/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2022 by Steve Gardner (https://codepen.io/ste-vg/pen/BazEQbY) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/christmas-cannon/README.md b/christmas-cannon/README.md new file mode 100644 index 0000000..365b33c --- /dev/null +++ b/christmas-cannon/README.md @@ -0,0 +1,12 @@ +# Christmas Cannon + +A Pen created on CodePen.io. Original URL: [https://codepen.io/ste-vg/pen/BazEQbY](https://codepen.io/ste-vg/pen/BazEQbY). + +Make this dull room more festive with the Christmas Cannon! + +Pro tip: Hold down spacebar for faster shooting! + +Sofa model by [Danny Bittman](https://poly.google.com/view/7Q_Ab2HLll1). +Fireplace, table, TV, tree and snowman models by [Google](https://poly.google.com). +Cannon model by [ะกะตะผั‘ะฝ ะฅะฐะทะฐะผ](https://poly.google.com/view/aXKsp4PcwLy) +TV stand by [Chris Hauck](https://poly.google.com/view/8KS3ETLfRrb) \ No newline at end of file diff --git a/christmas-cannon/dist/index.html b/christmas-cannon/dist/index.html new file mode 100644 index 0000000..1822ff8 --- /dev/null +++ b/christmas-cannon/dist/index.html @@ -0,0 +1,34 @@ + + + + + CodePen - Christmas Cannon + + + + + + + +
+
+
+
+
+
+ Oh no! Look at this dull room, not at all Christmassy. + + +
+
+ + Steve + +
+
+
Loading
+ + + + + diff --git a/christmas-cannon/dist/script.js b/christmas-cannon/dist/script.js new file mode 100644 index 0000000..5d416b4 --- /dev/null +++ b/christmas-cannon/dist/script.js @@ -0,0 +1,1855 @@ +let showGuides = false; + +// ๐Ÿ‘† change to true to see the physics objects + +let extraBounce = 0.1; + +// ๐Ÿ‘† change to 1 for bouncey fun! Change to 2 for everything to bounce out of existence! + +let powerMultiplier = 1.2; + +// ๐Ÿ‘† increase for more POWER! + + + + + + + + + + + + + + + +import { +TextureLoader, RepeatWrapping, +Scene, Color, Fog, HemisphereLight, +PointLight, MeshPhongMaterial, Mesh, +PlaneBufferGeometry, WebGLRenderer, +PerspectiveCamera, Vector3, +Group, BoxBufferGeometry, IcosahedronBufferGeometry, +CylinderBufferGeometry, Cache, PCFSoftShadowMap, +LoadingManager, AxisHelper, Clock } from +"https://cdn.skypack.dev/three@0.122.0"; + +import { GLTFLoader } from "https://cdn.skypack.dev/three@0.122.0/examples/jsm/loaders/GLTFLoader"; +import Stats from "https://cdn.skypack.dev/three@0.122.0/examples/jsm/libs/stats.module"; +import CANNON from "https://cdn.skypack.dev/cannon@0.6.2"; +import gsap from "https://cdn.skypack.dev/gsap@3.5.1"; + +class Stage +{ + constructor(scale, stageSize, onReady, showStats) + { + const manager = new LoadingManager(); + + this.showStats = showStats; + this.models = {}; + this.stats = new Stats(); + + manager.onLoad = function () { + + console.log('Loading complete!'); + setTimeout(() => onReady(), 100); + + }; + + this.wrappingImages = [ + 'data:image/png;base64,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', + 'data:image/png;base64,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', + 'data:image/png;base64,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', + 'data:image/png;base64,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', + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAVzUlEQVR4Xu1dC3Bc1Xn+7r61K2ml3dXakqyHsUCWjKHGMhRjUwM1IdBJ0kAwEGiKmZQOwUPDENOGmWBTnAaXMW0NmTIZnEcDkwzMtGUKZJqCHTAmFLmAHcuW8UMPW89dad/v3dv573qlfdzdvXf37kq7umfGI0v3P//5z/m/+z/O6zLe5/exKFMJWczw9fYgaDHPtWj+FKj/t1nu9y+WH8eZ5cdTpFFF1ei5uB4rZi4rk5SFNRMxBODqmIKj6yJi6mgKE78/gOAQg76BW7i/R3sMCDzVnkLDHDsO9pNPwITDhQlQYC2mHABgm5vhX9MDd31dhpgMw6DhuSH8wfgh3DVxICRK18RarJzuhiqqKbB75a8WU0fguHyMFwiG001oPtcL37MrwTapM8fC4wb77kEw4+NlE7ykACDFMxs2gG1pRiwWhc02ndGxmYHPMdV/OOXvxnADVo9dA9Ps8rINhNQNERBmekfg6BpLYa1WNMC45WaojfNWML1tZug88OERwO2RWqxM0EltAViWBb3VWLEC7J/dkdKgy+VAIBDg/hYLBTF+5F24R86n0PRcvAad06tL3vFyNeA1zWLsugEw+lRPW3/V9TCsujKnGMzpQeCT/pICQUILwAIMA4YFqKusRgPm/m9yPxMlFArA4XAgMDON8SPvIThjm3uma2jC+o/Xo95vKpduytoOWYOZnpGUNnUtnTCuuxEKjTY3EMbGwX5+DMzwkOQyFwkAFgwYsAxpnEe2m7eAvaI75cHU1CQuHHwLntH5N9+4qhvLNmxG82+V0L/rlryTi4Eh26SBc1cDHEcPIeKcmRNJqa9D4x9vzekSEsSMxw2cGwIGTwH2eR7F9E8cAOpqAZUKcDjm3vRcjZPvx1e+kuEGRj74LWZOHoNCrYF1w2Y0dMVNviasROuT81ahmI4ttrrBh1sQ2WzkxHId+wjes3+YE1Gh1qLp1m15LUFynxJgYM+fLypozA6AulqwtXVASwsYY/wn/c4FKL/5b+Hje/99cT6XSjDoh9PphG/iAtS19dy/5NLyWhDafp9w/hVAGW3TIvAPqWmsb/g03Mc/Qiwc4npg/dI9IGtQaGHGxgGbDbDbLv0UZiEYz8HfccabaW3l2uZ8dlKezicQ868vC5aTXXslcMMNc/TZsoEEQY1TgeW77YL5VwJh4M/NiN5pzRA17LTDP3waGkszKB6QunBWwnUpk7DZwAaDGU0wHo9X9EQQc/AgMHhakLx8wSDFAfxBA8WRDDq/Kwy9ggRYBESuF1ZC2aRbBJJkilAYAMjcvPmm4A6x69cDG/rm6Gdn7QjnmPFq+iCK2n93Cea/mAkjV9TA/bfLodFUEQA4l/Hqq4LzU86tbH9wTk9utwt+f3Y/X01uwPVtM5jNZigUykWJ04IsANeTT/rBHD0quFPJVsDj8cDnyz7LpYQC7Y9XRxwwvteK+pbss36CB7BEhAUDgAmFgAM/FSxWcizg8/ng8eQ28VWRDRiUGHrWiKamZYLHqVSE3kgYbwyfw/uTY6D/N+lqcHtrO5j/OvMFu2V5S0HtigkGuQzjUixA/p/igFylYZBB48uVHQx6vlyH6a0qWK0Lv6bx87ODeOficGYWsPPIIfYHV20oDACUZvzyNcF1E1YgxDB5AVANcYDtMRMCXSo0Ni68C9h+5D34IhFpAcBx+883Rc1E0bxA+Npr8wKgGmYFJ3dbETZhUQDgnvf5J++YvUc/Zh/pzr0qlesV52agRKSExCu87W7MhDMnJdLbWfl46v4AwaZmkRBe/EcLYloGJpNlwSV65tgnGHBkjidzzmZjrbqaogRkXn9d1OJE7PIuTK9dk7fNSgfAhf1Wbr5jMcQAQx43CATJbkCvUqHgLCBZe9y69XuH8io0mcBx46aUrWF8lZe9Fano1cGhF0yg/RGLAQA0vgSCN4bPwBeNwKKtwV0dq6QBADEXMzFE9KEmM2Y3b8oJmkoGQKxDh+HH4pbVYmmqwomgdNWJnBii6vmsQCUDIHx1LS58K77vj7IAtTpzD6Aok1kiYklcAGcBRE4MCbEClQwA3y11mLxDxalNr69FbW1tiVRYHFvJAMCBQMQqYUJs+803IdKQuicg8axaAKDRaNHQ0FicpkpUW1oAiN0sAsDf3gZX3zW83asWAFDnFksgmD7QkgKAY/7KAVGHG6J6PWy3ba06AIS7dLjwyHx63dDQsCiWhA9NjMEW9KO3oRG9RpN0WUBCg4W4gcmvf7XqAEAdOr9v3uzrdDrU1zeUyJDnZ0sLQM983o9h7/ymWw4APztxjKV8ULIiMhsINi+H4/rreJvv2OOGwp45fy2ZrCVmlAwAamoh08HnT3yKfnvmwRymmMUgvvETs2k0plLB/uVbEeNNkRisfLyyVwNHn7cgopg/J7iQVqB0i0FpKBC6NkDKn71xc9YMoBoWg8b2WBCsST0oSusCKtpaX+aSdTFIahcgBAARYz1n9ikAzFaqZTnY3ZG655YmhBZieTirC5h0OFiDSsJZqg8/BHN8/tBDuoK9qy6D5+q1efGffGw8L/EiJUieDEoWcSEmhmgdgEBgC8bPZlKhTEDyNJB59TXAnXm8i+4GcF91VVaTn67DSg8AE/05v4/OOmbuvF+ItJAyAcoCvOEIDGpVidLAtEMjFOX7L+/Ku/KXDABVTIm2J6rjiBhfHEB9pfMP5AoWIh5IHmvpLcDpQbBONwIaFTwWc5YIP7fNrob9gIkeuh5ohH0df38XAwgkBwCtfzudDoRC+Xf8ZBkWdOxxVXT+n96vkX1mRBHLinqj0QittrhNOYWGQZICgHa/0CUQ0Whq6iNGuGqI/tP7S5tD07OBdBqdrgZ1dfXxyzXKWCQBAL31Ho8752kfoX1a8WM/1GfmI1Wh9RYzXcyswvBTtOKZ+xgmKZ+sQTmPkRUFAFK83++F1+vltj4VW+qGGVj+ubJn/7KNwezDJji6hY0RzRXU0tH5MmwiKQgAdMQ7EPBLpngaNDoOtmKPs6p8fzoY0qeG870wBICaGj20Wl3JXINgAJDSg8EgZ+YjPAcM8nUm3/NKXvvP17fE82CfHmP30SlhYZYgUY9cA4GA1hJoc4mUJSsASMmRSJjb1kwRfTGBXT6Bq9n0p/c9V1qYb5wSzwkEGo0aarWWm0coJnBkZmZmWFI0lVAozN3nV4o3PFvnqjHqz6fIiafN8Buzp4X56qc/JwAQEJRKFVSq+DF0AoeQwpw7d1acPRLCVSDNUlR+YmikBoHAIc8gWzAALGXlLyYQLAgADFMKWH9UHRdAFPrmJeoJmSQqto1c9csMAAbmT9m528FL2bFK4h1fNqYl+fJ747IBgHb4WH/iqbpZPqmARrOFU48aJQ0OhchWcgDQBI/pg3DV3PolZFCLoSFrYLtDk3PxqBj+GRlEqbIAUnzDpzHZ3BeoLZovcF6tTNlUWiCrnNUktwBavxL1/SH5jZdIW2QRXJs0JXMNkgCA/Lv+XAy17/pkHy+R4tPZUIzgub0O7iuVCKV9kqaYJgsCAG3Z0tpY6C7GUPt2ZR/eKGbwFqyuQQnPrQb4utUINzJFASIHABhowgquj9qxGDQzLFRjlX1jx4IprAwNBzbVIbRShZCJQciqAKuCIGAw3v2DKclntX6woQw6WNRN0Epk1Jh5XS3Dfq2//LMPi3qolpZwMgCWlr4zF4NkC7C0ESBbgKWtf8gAkAEgB4FLGQOyBVjK2qczinIQuLQRIANgaesfjOdrh9lhZoobhiYY0cTGv24pl6UxAszd27ZlzAT2xto4IFjZevTFutDJLvw3b5aGOsrXy0OK43hb+X/gBUC6GB0xK7bErsSfRNfAgMX5/bvyDV1lt+RFAM+r/wMDilGuI4IAkOiyntXi6fA22SJUKAZI+bvVv8awIu7yRQOAKsggqEzt8ym/IAAkQPBi6K9kd1BBWHhL2Y9fqA5mSCzKBSTXviuyEd+Izn8VvILGYkmKulPzcySyveQBKBgA5ApkK1AZWBpiJvGk5he8whYMAOL2g/A9WBNrq4xRWMJSfnanH9FePUZGRmCz2TE6OoLBwcF4ENjff5QdHDyFkdFR2Gw2jI7G0wMh5S8iN+GO6Pxn4YXUkWnKPwJH/zqC1Zsyb2clffNeEEFIoX92uw2nBgc5UNAHn9OLHAeUX5lCWzyhGOUm8mhCL+H/u7tXw2Ixo729HW0r2rifzF8++CDb1taO1d3dsFgs8YdtmWadLoIavTDKAWOUTIndjrUnzHIgKFQjZaR7Xfkh3lAd4VqkWM3LBAG6xIuuoGPZlBtFmLvvvptleR4QCJosFhA4ui+BgwCSXCZ+2I9VA4Yydk1uSsgI/Fj1Nn6nPJGXlNYAMoJAbmGAUJJ0WDn5DhoyI+1tbbA0WbDpLQss0/LUcN6RLiMB26SB4yYNDkVPYHTmAmepEwEfnxiCsgDuDsCElbgEDD20+FnosTJ2TW4q1whEewyIbDYiciP/am48A6Agf4QL+OMxnh1M/9GjrG3axv2RezgyAr/fL2i0aZGok7XiW5Gb5FlBQSMmPRG98cFvWhHtqyuIOW8WQEix2W0YPHWKQ00cHNnTQzkdLGjsi64U/pIZoa+bAUPmiR+hzAVfFEkMyTqMj4/h7NkzOHvuPByzs1A6WewKbpM3kggdcSnoDEoEvt1c8FufLIIoACQq0uWRs7PxS56UjALLXvVD2585TyBFX2UeaSNgUML//XbQ18mlKAUBgBoOBv1wOp2cDJQlNL8akEEghUZy8CClk/KLMfnp7AsGADGibwMEAvGr3WUQlFb7FOz5nu2UVPmc3jweb1Gng2dmbHNXyxIIWl+SbwmRHAoSm/2iY4BkBsnxAP1dFVOg7Qn5EkgpQRD4mxWSBHx8MhVtAdJdAf0u3wQqnfrDt5kRut8qHcM0TpIAgG4Yt9lSP0y8FO7/L5lWLjHm/P4LEn7Ym0dgSQDAZwVkV1A8PAJPtYOmeEtZJANAeixAQlfD519LOfi5eJPiCQClLpIBgAS126dTvixCt4W2Py4HhIUosRxvvyRpYHLnPB4PfD5PSn9lKyBe/eV6+yUHQCgUgMPhSOmxJqBA6/dlKyAGBsGHW7il3XIUSV0A7RuYnp7MkLsaPwZZSuV4X75C8hm/bPJKCgBqJHlmMNGo6QQD4yvV+UFIqYFA6/o08VOuIjkAaJWQMoLkQjeItzxVHZ+DL7ViQg9YQev85SqSA8DhmM34cjitEXR+V7YAQpTq37NSsqVeIe0JBgBtBqEt4/kKXyZAddr2eaC6kGoZ8vFais+9v+wR3W3asm8wFDZhlBcAhw8fxq9+/au5gyFb/3Qr7r333qxCZgOAPDWcX69ipn5pq94rBw6ATnUlyjXr1uHBB7eLAkNOAJDyD/z0QIbkN9xwAx7a/hBvj7IBQA4E8wNATP7/3N7neLd7EwgefXRH/sYuUeQEwHce/U7WHcL7/2U/L9KyAWApfR9Y8OinEQoFALnjXbt3ZW3mwCuZL63oNDBfIzt37sTq7tUZfPmyACKSAZAfFkKXfk8NnsLevXuzMsymG74KOS3A9oe2i25EBkB+RWejkAoA2ayzaAA8vetp3vMANTU1eOnFl3j7MTU1wft32QLkB4ZQF0Ccvrfze9zJnvRCZzp379qdvzEhMQC5gf0v7k9piJS/Y8cOXvPPtySckEReFMqvEzEAIDewf//+lBjNbDZjx6M7BKXrCWnypoGJY+E+rw96g547V54t56Q7BDweF29P5TRQWgAQNzG6ER0E5hc3k4JvHSBB1fJaUD43kG9QDUpwC0FlLHktgFBZ+PYFJtdd+fisUFZLms73T11gLfQl8fIUyQDgdrvg9/MfD6Mvi7Y+KS8GCVFp4JEWRDeWZy8AySMJAGgfgM02Be4eAZ4iZwBCVB+n8d5nBm4v3TbwdEkkAUC22b9EY3IAKBwA4S4d3H+3HFptjfBKRVAWDQDy/XSbWLa3X94YKl47Yz+yoL7VknKZk3guwmoUDYBsM3+J5mXzL0wRyVSuBxrh26hHXV29+MoiaxQFgFx5f0IOeT+gSI0QuUGJ839vREODERqNNPcAZJOiYABEIhFu/1+uUuNUYPlueUdwARCA7TETPJ1AY6MZKpWqEBaC6hQEAFI+mf5sfj/eMoOOPS4gEgeAwlm+1EZQzxcrkSqCmMELVm/AyBNWqNRKDgTJV/VJKbpoAAhRvtZmR+2xM1A5UheGVJPLoB7tBBPQStmHquAVNdsQsU4iap63mKxCDd/qVQh1XwGjdXlJQCAKAPmUT4rXnzwJzXQOsx9RQXdyjSCLEDEE4Le4YBgzQREunRlcaARFlk0idHn89m6+ElOr4b22D7qeXsndgWAA0J1ALpeL1+zXjIxCNzycW/HJPYuoUPPZ+pyWIKaOYOi2fsQ0EZhOtsM0kH9D6kIrMqWLyhD3qyqqySkWvfnBngFBooeaLMDGjVA3NwuiF0KUFwDk551OR8ZWb6XPB07xQyOg/4stSrsZ2pNrslZzdUxiqu8L7nmlAcCv8eBw9zuc7NeduQX1flPWfvr7/hesLn7PktASWbUSyt4rgdYWoVWy0uUEAM3tezzuubeeFK0bn4BuaBgqJ/+yrxiJ9L/fCET4Tftk32m4O+Jft6o0AMzUTuLjrnc52VtnVuKqkev5TbvRicDaz8UMWQptrLERit5eoPsKsJrcliZbIxkAoDc+EPDD5/OCDQSgnrZDPT0Nrc0midKTBdEdvzprLHDxxuPwN8WvoWt9fy1qpjOzCHrTZmqnEFaG0DmduT+x4JEtsiLJdaj3TY6LKqrG1uPf4OUYabmI0GVni2wtXp1taQbT2gq2oxOwCD9ZxHgnJljW5UY4HEJ0cgqxgJ9TuNLrL8i0i+lNLgCcufPwHKvO3/RB5Y1PiLhqZjDUdBr0lvk13jmarom1uHwi86sYYuQRSkvxSdgQgNZRm7XKO3/02tyzrcfv4o0Fwu1DCLePCG1WFB0HiLo6oL4eaElyFXW1YGvn7xVmvM/vK+qaOFFSpRFncwHBBg9Gb/mMo1aElWh/az0umM5hqGkwRenJ7Dqnu9FzcX0x4giqmxycUgWyTIYxM2rHTXMgpb9/3PU/nHWiQnGAyZP5+V3K9wPrjgpqt1RECweASCP0v+d/Y5P9v/88i4nwBCLKzGNlupAB9f4GmD3LsGLmsrwRtxSDSG6J3BNfITDUDy9D3bAVx9o/wkXTeY4sKzhpB9CGw2AiC3dkbsEA4N60GU0/UUNhj6SMZeINmw04MetwIByOpjwnn0rKpuAqV3QthbKz8bBdfQ6eFjsi+iAvCbkrZkSHAc0x7nlNyIAtA1/NoKVrYGLKC8B7h0opbk7eCwIAV986+NvbUeNQYvkzqesJo2sGcLb+JPz+1MGlt518PCl/sRSaqPJZnPC22OFtyTz9HA5HYLPPwuP1Z7iB5GPgzMGDwODpBenW/wPfFD7Bk7DQAwAAAABJRU5ErkJggg==', + 'data:image/png;base64,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', + 'data:image/png;base64,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', + 'data:image/png;base64,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']; + + this.presentTextures = []; + this.presentMaterials = []; + + for (var i in this.wrappingImages) + { + var presentTexture = new TextureLoader().load(this.wrappingImages[i]); + presentTexture.wrapS = RepeatWrapping; + presentTexture.wrapT = RepeatWrapping; + presentTexture.repeat.set(3, 3); + + + + this.presentTextures.push(presentTexture); + + this.presentMaterials.push(new MeshPhongMaterial({ shininess: 100, map: presentTexture })); + + } + + this.boxGeometry = new BoxBufferGeometry(1, 1, 1); + this.greyMaterial = new MeshPhongMaterial({ color: 0xeeeeee, shininess: 30 }); + + this.container; + this.scene; + this.plane; + this.renderer; + this.width = 0; + this.height = 0; + this.lookAtHelper; + this.stageSize; + + this.cameraTarget; + this.camera; + + this.scale = scale; + this.stageSize = stageSize; + + Cache.enabled = true; + + // SCENE + + this.scene = new Scene(); + this.scene.background = new Color(0x424874); + this.scene.fog = new Fog(0x424874, 100, 200); + // this.scene.add(new AxisHelper()); + + // LIGHTS + + this.scene.add(new HemisphereLight(0xfefeff, 0xeeeeff, 0.4)); + + const ambientLight = new PointLight(0xffffff, 0.1); + ambientLight.position.set(20, -10, 20); + this.scene.add(ambientLight); + + const shadowLight = new PointLight(0xffffff, 0.6, 100); + shadowLight.position.set(10, 0, 4); + shadowLight.castShadow = true; + shadowLight.shadow.radius = 16; + shadowLight.shadow.mapSize.width = 2048; + shadowLight.shadow.mapSize.height = 2048; + this.scene.add(shadowLight); + + this.cannonLight = new PointLight(0xEDB458, 0, 100, 2); + this.cannonLight.position.set(28, -20, 28); + this.cannonLight.castShadow = true; + this.cannonLight.shadow.radius = 2; + this.cannonLight.shadow.mapSize.width = 256; + this.cannonLight.shadow.mapSize.height = 256; + this.scene.add(this.cannonLight); + + // FLOOR + + this.plane = new Mesh( + new PlaneBufferGeometry(1000 * this.scale, 1000 * this.scale), + new MeshPhongMaterial({ color: 0xDCD6F7 })); + + this.plane.position.set(-10, -30.5, -10); + this.plane.receiveShadow = true; + this.plane.rotation.x = -Math.PI / 2; + this.scene.add(this.plane); + + // RENDERER + + this.renderer = new WebGLRenderer({ antialias: true }); + console.log('pixel ratio:', window.devicePixelRatio); + // this.renderer.setPixelRatio( window.devicePixelRatio ); + this.renderer.setSize(window.innerWidth, window.innerHeight); + this.renderer.shadowMap.enabled = true; + this.renderer.shadowMap.type = PCFSoftShadowMap; + + // CONTAINER + + this.container = document.getElementById('canvas-container'); + this.container.appendChild(this.renderer.domElement); + if (this.showStats) this.container.appendChild(this.stats.dom); + + // CAMERA + + this.camera = new PerspectiveCamera(40, window.innerWidth / window.innerHeight, 5, 400); + this.camera.position.set(55, 15, 55); + this.cameraTarget = new Vector3(0, -22, 0); + // this.camera.position.set(65, -20, 20); + // this.cameraTarget = new Vector3( 30, -25, 30 ); + + let center = new Vector3((this.stageSize.left + this.stageSize.width / 2) * scale, (this.stageSize.top - this.stageSize.height / 2) * scale, 0); + const previewCameraDistance = 70 * scale; + + // this.lookAtHelper = this.createBall(0.5, new Color(0xffffff)); + + // let stageSizeHelper = new Mesh( + // new PlaneBufferGeometry( this.stageSize.width * this.scale, this.stageSize.height * this.scale, Math.floor(this.stageSize.width / 5), Math.floor(this.stageSize.height / 5) ), + // new MeshPhongMaterial ( { color: 0xaaddff, wireframe: false} ) + // ); + // stageSizeHelper.position.set(this.stageSize.left * this.scale, this.stageSize.top * this.scale, 0); + // stageSizeHelper.applyMatrix4( new THREE.Matrix4().makeTranslation( (this.stageSize.width / 2), -this.stageSize.height / 2, 0 ) ); + // this.scene.add( stageSizeHelper ); + + // ROOM + + this.lights = []; + + let colors = [0xff0000, 0x00ff00, 0x0000ff, 0xffff00, 0xff00ff, 0x00ffff]; + + for (let i = 0; i < 3; i++) { + + let group = new Group(); + group.position.x = 1000; + + let color = colors[Math.floor(Math.random() * colors.length)]; + let light = new PointLight(color, 0.5, 50, 1.7); + // gsap.timeline({ repeat: -1}).to(light, {intensity: 0.7, duration: 0.2}).to(light, {intensity: 0.5, duration: 0.2}).to(light, {intensity: 0.8, duration: 0.2}) + group.add(light); + + let geometry = new IcosahedronBufferGeometry(0.5, 4); + let material = new MeshPhongMaterial({ color: color, wireframe: false }); + let mesh = new Mesh(geometry, material); + mesh.castShadow = true; + group.add(mesh); + + this.scene.add(group); + this.lights.push(group); + } + + + ///================= + // SOFA + ///================= + + let sofaGroup = new Group(); + sofaGroup.position.y = 1000; + this.scene.add(sofaGroup); + + var sofaLoader = new GLTFLoader(manager); + sofaLoader.load("https://assets.codepen.io/557388/sofa.glb", object => { + + object.scene.rotation.y = Math.PI * 0.5; + let mat = new MeshPhongMaterial({ color: 0xffffff }); + + sofaGroup.add(object.scene); + + object.scene.traverse(function (child) { + + if (child.isMesh) { + child.position.set(0, 0, 0); + child.castShadow = true; + child.receiveShadow = true; + child.material = mat; + } else + if (child.isLight) + { + child.visible = false; //child.intensity = 0; + } + + }); + + this.models.sofa = sofaGroup; + }); + + ///================= + // TREE + ///================= + + let treeGroup = new Group(); + treeGroup.position.y = 1000; + this.scene.add(treeGroup); + + var treeLoader = new GLTFLoader(manager); + treeLoader.load("https://assets.codepen.io/557388/PineTree.gltf", object => { + + object.scene.position.set(0, 0, -17); + object.scene.scale.set(1.2, 1.2, 1.2); + object.scene.rotation.x = Math.PI * 0.5; + + treeGroup.add(object.scene); + treeGroup.position.y = 1000; + + object.scene.traverse(function (child) { + + let mat = new MeshPhongMaterial({ color: 0x99dd66 }); + if (child.isMesh) { + child.castShadow = true; + child.receiveShadow = true; + child.material = mat; + } else + if (child.isLight) + { + child.visible = false; //child.intensity = 0; + } + + }); + + this.models.tree = treeGroup; + }); + + ///================= + // FIREPLACE + ///================= + + let fireplaceGroup = new Group(); + this.scene.add(fireplaceGroup); + + var fireplaceLoader = new GLTFLoader(manager); + fireplaceLoader.load("https://assets.codepen.io/557388/fireplace.gltf", object => { + + object.scene.position.set(0, -29, -19.5); + object.scene.scale.set(4, 4, 4); + object.scene.rotation.y = -Math.PI * 0.5; + fireplaceGroup.add(object.scene); + + + + object.scene.traverse(function (child) { + + let mat = new MeshPhongMaterial({ color: 0xffffff }); + if (child.isMesh) { + child.castShadow = true; + child.receiveShadow = true; + child.material = mat; + } else + if (child.isLight) + { + child.visible = false; //child.intensity = 0; + } + + }); + + this.models.fireplace = fireplaceGroup; + }); + + ///================= + // TABLE + ///================= + + let tableGroup = new Group(); + tableGroup.position.y = 1000; + this.scene.add(tableGroup); + + var tableLoader = new GLTFLoader(manager); + tableLoader.load("https://assets.codepen.io/557388/table.gltf", object => { + + object.scene.position.set(0, -6.3, 0); + object.scene.scale.set(2, 2, 2); + tableGroup.add(object.scene); + + object.scene.traverse(function (child) { + + let mat = new MeshPhongMaterial({ color: 0xffffff }); + if (child.isMesh) { + child.castShadow = true; + child.receiveShadow = true; + child.material = mat; + } else + if (child.isLight) + { + child.visible = false; + // child.intensity = 0; + } + + }); + + this.models.table = tableGroup; + }); + + ///================= + // TV STAND + ///================= + + let standGroup = new Group(); + standGroup.position.y = 1000; + this.scene.add(standGroup); + + var tableLoader = new GLTFLoader(manager); + tableLoader.load("https://assets.codepen.io/557388/stand.gltf", object => { + + object.scene.rotation.y = Math.PI * 0.5; + standGroup.add(object.scene); + + object.scene.traverse(function (child) { + + let mat = new MeshPhongMaterial({ color: 0xffffff }); + if (child.isMesh) { + child.castShadow = true; + child.receiveShadow = true; + child.material = mat; + } else + if (child.isLight) + { + child.visible = false; //child.intensity = 0; + } + + }); + + this.models.stand = standGroup; + }); + + ///================= + // TV + ///================= + + let tvGroup = new Group(); + tvGroup.position.y = 1000; + this.scene.add(tvGroup); + + var tableLoader = new GLTFLoader(manager); + tableLoader.load("https://assets.codepen.io/557388/tv.gltf", object => { + + object.scene.scale.set(2, 2, 2); + object.scene.rotation.y = Math.PI * 0.5; + tvGroup.add(object.scene); + + object.scene.traverse(function (child) { + + let mat = new MeshPhongMaterial({ color: 0xffffff }); + if (child.isMesh) { + child.castShadow = true; + child.receiveShadow = true; + child.material = mat; + } else + if (child.isLight) + { + child.visible = false; //child.intensity = 0; + } + + }); + + this.models.tv = tvGroup; + }); + + ///================= + // POT + ///================= + + let potGroup = new Group(); + potGroup.position.y = 1000; + this.scene.add(potGroup); + + var tableLoader = new GLTFLoader(manager); + tableLoader.load("https://assets.codepen.io/557388/pot.gltf", object => { + + object.scene.position.set(0, 0, -15); + object.scene.scale.set(6, 6, 6); + object.scene.rotation.x = Math.PI * 0.5; + potGroup.add(object.scene); + + object.scene.traverse(function (child) { + + let mat = new MeshPhongMaterial({ color: 0xB2967D }); + if (child.isMesh) { + child.castShadow = true; + child.receiveShadow = true; + child.material = mat; + } else + if (child.isLight) + { + child.visible = false; //child.intensity = 0; + } + + }); + + this.models.pot = potGroup; + }); + + ///================= + // CANNON + ///================= + + let cannonGroup = new Group(); + this.scene.add(cannonGroup); + + var tableLoader = new GLTFLoader(manager); + tableLoader.load("https://assets.codepen.io/557388/cannon2.gltf", object => { + + object.scene.position.set(30, -30, 30); + object.scene.scale.set(3, 3, 3); + object.scene.rotation.y = Math.PI * 1.25; + cannonGroup.add(object.scene); + + object.scene.traverse(function (child) { + + if (child.isMesh) { + child.castShadow = true; + } + if (child.isLight) + { + child.visible = false; //child.intensity = 0; + } + + }); + + this.models.cannon = cannonGroup; + }); + + + ///================= + // SNOWMAN + ///================= + + let snowmanGroup = new Group(); + snowmanGroup.position.y = 1000; + this.scene.add(snowmanGroup); + + var snowmanLoader = new GLTFLoader(manager); + snowmanLoader.load("https://assets.codepen.io/557388/snowman.gltf", object => { + + //object.scene.position.set(30, -30, 30); + object.scene.scale.set(2.5, 2.5, 2.5); + // object.scene.rotation.y = Math.PI * 1.25; + snowmanGroup.add(object.scene); + + object.scene.traverse(function (child) { + + if (child.isMesh) { + child.castShadow = true; + } + if (child.isLight) + { + child.visible = false; //child.intensity = 0; + } + + }); + + this.models.snowman = snowmanGroup; + }); + + ///================= + // STAR + ///================= + + let starGroup = new Group(); + starGroup.position.y = 1000; + this.scene.add(starGroup); + + var starLoader = new GLTFLoader(manager); + starLoader.load("https://assets.codepen.io/557388/star.gltf", object => { + + object.scene.position.set(-1, 0, 0); + object.scene.scale.set(0.01, 0.01, 0.01); + object.scene.rotation.y = Math.PI * .5; + starGroup.add(object.scene); + + object.scene.traverse(function (child) { + + if (child.isMesh) { + child.castShadow = true; + } + if (child.isLight) + { + child.visible = false; + // child.intensity = 0; + + } + + }); + + this.models.star = starGroup; + }); + + + + this.onResize(); + } + + setPlane(physicsPlane) + { + this.plane.position.copy(physicsPlane.position); + this.plane.quaternion.copy(physicsPlane.quaternion); + } + + render() + { + this.camera.lookAt(this.cameraTarget); + this.renderer.render(this.scene, this.camera); + + if (this.showStats) this.stats.update(); + } + + onResize() + { + this.camera.aspect = window.innerWidth / window.innerHeight; + + this.camera.updateProjectionMatrix(); + this.renderer.setSize(window.innerWidth, window.innerHeight); + + var aspect = window.innerWidth / window.innerHeight; + this.width = window.innerWidth; + this.height = window.innerHeight; + + } + + createBox(width, height, depth, color = 0xffffff, present = false) + { + //let geometry = new BoxBufferGeometry( width * this.scale, height * this.scale, depth * this.scale ); + //let texture = present ? this.presentTextures[Math.floor(Math.random() * this.presentTextures.length)] : null; + //let material = new MeshPhongMaterial( { color: color, shininess: present ? 100 : 30, map: texture } ); + let material = present ? + this.presentMaterials[Math.floor(Math.random() * this.presentMaterials.length)] : + this.greyMaterial; + let mesh = new Mesh(this.boxGeometry, material); + mesh.scale.set(width, height, depth); + mesh.castShadow = true; + mesh.receiveShadow = true; + this.scene.add(mesh); + return mesh; + } + + createSphere(radius, color) + { + let geometry = new IcosahedronBufferGeometry(radius, 3); + let material = new MeshPhongMaterial({ color: color, shininess: 30 }); + let mesh = new Mesh(geometry, material); + mesh.castShadow = true; + mesh.receiveShadow = true; + this.scene.add(mesh); + return mesh; + } + + createBall(size, color, light = false) + { + + if (light && this.lights.length) + { + return this.lights.shift(); + } + + let group = new Group(); + let material = new MeshPhongMaterial({ color: color, wireframe: false }); + let ball = new IcosahedronBufferGeometry(size, 4); + let mesh = new Mesh(ball, material); + mesh.castShadow = true; + group.add(mesh); + + if (!light) + { + let cap = new CylinderBufferGeometry(size / 2, size / 2, size, 5); + let capMat = new MeshPhongMaterial({ color: 0xFFD338, wireframe: false }); + let capMesh = new Mesh(cap, capMat); + capMesh.castShadow = true; + capMesh.position.y = size * 0.75; + group.add(capMesh); + + } + + this.scene.add(group); + return group; + } + + createCylinder(radiusTop, radiusBottom, height, numSegments) + { + const group = new Group(); + const geometry = new CylinderBufferGeometry(radiusTop, radiusBottom, height, numSegments); + const material = new MeshPhongMaterial({ color: 0xff0000 }); + const cylinder = new Mesh(geometry, material); + // cylinder.position.set(x, y, z + cylinder.rotation.x = Math.PI * 0.5; + group.add(cylinder); + this.scene.add(group); + return group; + }} + + + + +const PHYSICS_MATERIAL = { + lowBounce: 'lowbounce', + normalBounce: 'normalbounce', + highBounce: 'highbounce' }; + + +class Physics +{ + constructor(scale = 1, stageSize) + { + this.scale = 1; + this.stageSize; + + this.scale = scale; + this.stageSize = stageSize; + + this.materials = {}; + + let mainMaterial = new CANNON.Material('main'); + mainMaterial.friction = 1; + + this.materials[PHYSICS_MATERIAL.lowBounce] = new CANNON.ContactMaterial(mainMaterial, mainMaterial, { friction: 2, restitution: 0 + extraBounce }); + this.materials[PHYSICS_MATERIAL.normalBounce] = new CANNON.ContactMaterial(mainMaterial, mainMaterial, { friction: 2, restitution: 0 + extraBounce }); + this.materials[PHYSICS_MATERIAL.highBounce] = new CANNON.ContactMaterial(mainMaterial, mainMaterial, { friction: 2, restitution: 1.5 + extraBounce }); + + // WORLD + + this.world = new CANNON.World(); + this.world.gravity.set(0, -60 * this.scale, 0); + this.world.broadphase = new CANNON.SAPBroadphase(this.world); + this.world.solver.iterations = 4; + this.world.allowSleep = true; + + this.world.addContactMaterial(this.materials[PHYSICS_MATERIAL.lowBounce]); + this.world.addContactMaterial(this.materials[PHYSICS_MATERIAL.normalBounce]); + this.world.addContactMaterial(this.materials[PHYSICS_MATERIAL.highBounce]); + + // GROUND + + this.groundBody = new CANNON.Body({ mass: 0, material: mainMaterial }); + let groundShape = new CANNON.Plane(); + this.groundBody.addShape(groundShape); + var rotate = new CANNON.Vec3(1, 0, 0); + this.groundBody.quaternion.setFromAxisAngle(rotate, -(Math.PI / 2)); + this.groundBody.position.set(0, (this.stageSize.top - this.stageSize.height) * scale, 0); + this.world.addBody(this.groundBody); + + } + + createBody(mass, position, rotation, material = PHYSICS_MATERIAL.normalBounce) + { + let body = new CANNON.Body({ + type: mass == 0 ? CANNON.Body.KINEMATIC : CANNON.Body.DYNAMIC, + material: this.materials[material], + mass: mass * this.scale, + position: new CANNON.Vec3(position.x * this.scale, position.y * this.scale, position.z * this.scale) // m + }); + + Object.keys(rotation || {}).forEach((key) => + { + this.setAngle(body, rotation[key], key); + }); + this.world.addBody(body); + + return body; + } + + createBoxShape(width, height, depth) + { + return new CANNON.Box(new CANNON.Vec3(width / 2 * this.scale, height / 2 * this.scale, depth / 2 * this.scale)); + } + + createCylinderShape(radiusTop, radiusBottom, height, segments) + { + return new CANNON.Cylinder(radiusTop, radiusBottom, height, segments); + } + + createSphereShape(radius) + { + return new CANNON.Sphere(radius); + } + + // createCylinder(x, y, z, radiusTop, radiusBottom, height, numSegments) + // { + // let shape = new CANNON.Cylinder(radiusTop, radiusBottom, height, numSegments); + + // let body = new CANNON.Body({ + // material: this.materials[PHYSICS_MATERIAL.normalBounce], + // mass: 15 * this.scale, + // position: new CANNON.Vec3(x * this.scale, y * this.scale, z * this.scale), // m + // }); + // body.addShape(shape); + // this.setAngle(body, -Math.PI * 0.5, 'x'); + + // this.world.addBody(body); + + // return body; + // } + + createBox(width, height, depth, x, y, z, mass = 0, rotation = 0, trigger) + { + let shape = new CANNON.Box(new CANNON.Vec3(width / 2 * this.scale, height / 2 * this.scale, depth / 2 * this.scale)); + let body = new CANNON.Body({ + type: mass == 0 ? CANNON.Body.KINEMATIC : CANNON.Body.DYNAMIC, + material: this.materials[PHYSICS_MATERIAL.normalBounce], + mass: mass * this.scale, + position: new CANNON.Vec3(x * this.scale, y * this.scale, z * this.scale) // m + }); + body.addShape(shape); + body.collisionResponse = trigger ? false : true; + + if (trigger) + { + body.addEventListener('collide', () => trigger()); + } + + this.setAngle(body, rotation); + + this.world.addBody(body); + + return body; + } + + setAngle(body, rotation, direction = 'z') + { + let q = new CANNON.Quaternion(); + let x = direction === 'x' ? 1 : 0; + let y = direction === 'y' ? 1 : 0; + let z = direction === 'z' ? 1 : 0; + q.setFromAxisAngle(new CANNON.Vec3(x, y, z), rotation); + body.quaternion = q.mult(body.quaternion); + } + + createBall(size, x = 0, y = 0, z = 0) + { + let shape = new CANNON.Sphere(size); + let body = new CANNON.Body({ + material: this.materials[PHYSICS_MATERIAL.highBounce], + mass: 1 * this.scale, + position: new CANNON.Vec3(x * this.scale, y * this.scale, z * this.scale) // m + }); + body.addShape(shape); + + this.world.addBody(body); + + return body; + } + + createCylinder(x, y, z, radiusTop, radiusBottom, height, numSegments) + { + let shape = new CANNON.Cylinder(radiusTop, radiusBottom, height, numSegments); + + let body = new CANNON.Body({ + material: this.materials[PHYSICS_MATERIAL.normalBounce], + mass: 15 * this.scale, + position: new CANNON.Vec3(x * this.scale, y * this.scale, z * this.scale) // m + }); + body.addShape(shape); + this.setAngle(body, -Math.PI * 0.5, 'x'); + + this.world.addBody(body); + + return body; + } + + remove(body) + { + this.world.remove(body); + } + + tick(delta) + { + this.world.step(1 / 60, delta, 3); + }} + + + +console.clear(); + +const DIRECTION = { + left: 'LEFT', + right: 'RIGHT' }; + + +const GAME_STATE = { + loading: 'loading', + intro: 'intro', + waiting: 'waiting', + game: 'game' }; + + +let sounds = { + fire: [new Audio('https://assets.codepen.io/557388/fire_01.mp3'), new Audio('https://assets.codepen.io/557388/fire_02.mp3')], + bells: [new Audio('https://assets.codepen.io/557388/bells_01.mp3')], + bing: [new Audio('https://assets.codepen.io/557388/bing_01.mp3'), new Audio('https://assets.codepen.io/557388/bing_02.mp3')] }; + + +let gameState = GAME_STATE.loading; + +let physicsItems = []; +let stage; +let physics; + +let mousePos = { x: 0, y: 0 }; + + + +let count = 0; +let cannonFlash; +let cannonRecoil; +let stars = []; + +const introSteps = [init, prepUI, loadComplete, dropIn, createClickListeners, introRoom, introCannon, introStart, startGame]; + +function next() +{ + if (introSteps.length) + { + introSteps.shift()(); + } +} + +function loadComplete() +{ + const loadingScreen = document.querySelector('#loading'); + loadingScreen.innerHTML = ''; + setState(GAME_STATE.intro); + + gsap.to(loadingScreen, { autoAlpha: 0, duration: 1.5 }); + setTimeout(() => next(), 1000); +} + +function prepUI() +{ + gsap.set('#steve', { y: '50%', scale: 0, rotation: 45 }); + gsap.set('#bubble', { transformOrigin: '100% 50%', autoAlpha: 0, x: '+=50', rotation: 5, scale: 0.9 }); + + next(); +} + +function dropIn() +{ + createSofa(); + createTable(); + createStand(); + createTV(); + + next(); +} + +function setState(newState) +{ + gameState = newState; + document.body.setAttribute('class', gameState); +} + +function onMouseMove(event) +{ + mousePos = { x: event.clientX, y: event.clientY }; +} + +function createClickListeners() +{ + document.addEventListener('keypress', onClick, false); + document.addEventListener('click', onClick, false); + document.addEventListener('mousemove', onMouseMove, false); + + next(); +} + +function introRoom() +{ + setState(GAME_STATE.intro); + let roomTL = gsap.timeline({ onComplete: () => setState(GAME_STATE.waiting) }); + roomTL.to('#steve', { delay: 1, y: 0, rotation: 0, scale: 1, ease: 'power4.out', duration: 0.6, onComplete: () => playSound('bing') }); + roomTL.fromTo('#bubble', { autoAlpha: 0, y: 0, x: '+=50', rotation: 5, scale: 0.9 }, { autoAlpha: 1, rotation: 0, scale: 1, x: 0, ease: 'elastic', duration: 1 }); + +} + +function introCannon() +{ + setState(GAME_STATE.intro); + const steveEl = document.querySelector('#steve'); + const textEl = document.querySelector('#text'); + const textHighlightEl = document.querySelector('#text-highlight'); + + let cannonTL = gsap.timeline({ onComplete: () => setState(GAME_STATE.waiting), defaults: { ease: 'power4.easeInOut', duration: .8 } }); + cannonTL.to(stage.camera.position, { x: 65, y: -20, z: 20 }); + cannonTL.to(stage.cameraTarget, { x: 30, y: -25, z: 30 }, 0); + cannonTL.to('#bubble', { autoAlpha: 0, y: '-=30', scale: 0.5, duration: 0.3, ease: 'power2.in' }, 0); + cannonTL.to(steveEl, { y: '-=20', duration: 0.1, onComplete: () => { + steveEl.setAttribute('src', 'https://assets.codepen.io/557388/happy.svg'); + textEl.textContent = "But wait, we have this "; + textHighlightEl.textContent = "Christmas Cannon!!"; + setTimeout(() => playSound('bing'), 300); + + } }, 0.5); + cannonTL.fromTo('#bubble', { autoAlpha: 0, y: 0, x: '+=50', rotation: 5, scale: 0.9 }, { autoAlpha: 1, rotation: 0, scale: 1, x: 0, ease: 'elastic', duration: 1 }); + cannonTL.to(steveEl, { y: 0, duration: .7, ease: 'bounce' }, 0.6); +} + +function introStart() +{ + setState(GAME_STATE.intro); + const steveEl = document.querySelector('#steve'); + const textEl = document.querySelector('#text'); + const textHighlightEl = document.querySelector('#text-highlight'); + + let cannonTL = gsap.timeline({ onComplete: () => setState(GAME_STATE.game), defaults: { ease: 'power4.easeInOut', duration: .8 } }); + cannonTL.to(stage.camera.position, { x: 55, y: 15, z: 55 }); + cannonTL.to(stage.cameraTarget, { x: 0, y: -22, z: 0, duration: 1.4 }, 0); + cannonTL.to('#bubble', { autoAlpha: 0, y: '-=30', scale: 0.5, duration: 0.3, ease: 'power2.in' }, 0); + cannonTL.to(steveEl, { y: '-=20', duration: 0.1, onComplete: () => { + steveEl.setAttribute('src', 'https://assets.codepen.io/557388/steve.svg'); + textEl.textContent = "Click or tap to fire the Christmas Cannon, letโ€™s make this room more festive!!"; + textHighlightEl.textContent = ""; + setTimeout(() => playSound('bing'), 700); + } }, 0.5); + cannonTL.fromTo('#bubble', { autoAlpha: 0, y: 0, x: '+=50', rotation: 5, scale: 0.9 }, { autoAlpha: 1, rotation: 0, scale: 1, x: 0, ease: 'elastic', duration: 1 }); + cannonTL.to(steveEl, { y: 0, duration: .7, ease: 'bounce' }, 0.6); +} + +function endMessage() +{ + const steveEl = document.querySelector('#steve'); + const textEl = document.querySelector('#text'); + const textHighlightEl = document.querySelector('#text-highlight'); + + let changed = false; + steveEl.addEventListener('click', event => { + event.stopPropagation(); + if (!changed) + { + changed = true; + let steveTL = gsap.timeline(); + steveTL.to(steveEl, { y: '-=40', duration: 0.1, onComplete: () => { + steveEl.setAttribute('src', 'https://assets.codepen.io/557388/snowman.svg'); + } }, 0); + steveTL.to(steveEl, { y: 0, duration: .7, ease: 'bounce' }, 0.1); + } else + window.open('https://ste.vg/pJ96mS5DC', '_blank'); + }); + + textEl.addEventListener('click', event => { + event.stopPropagation(); + startGame(); + // window.open('https://www.twitter.com/steeevg/','_blank'); + }); + + // steveEl.setAttribute('src', 'https://assets.codepen.io/557388/snowman.svg'); + textEl.innerHTML = `Yay! So much better.`; + + + // Be sure to send a screenshot to @steeevg, heโ€™d love to see it!`; + textHighlightEl.textContent = "Merry Christmas!"; + + let roomTL = gsap.timeline(); + setTimeout(() => playSound('bing'), 700); + roomTL.to('#steve', { y: 0, rotation: 0, scale: 1, ease: 'power4.out', duration: 0.6 }); + roomTL.fromTo('#bubble', { autoAlpha: 0, y: 0, x: '+=50', rotation: 5, scale: 0.9 }, { autoAlpha: 1, rotation: 0, scale: 1, x: 0, ease: 'elastic', duration: 1 }); +} + +function hideEndMessage() +{ + +} + +function playSound(name) +{ + let options = sounds[name]; + if (options) + { + let sound = options[Math.floor(Math.random() * options.length)]; + sound.currentTime = 0; + sound.play(); + } +} + +function startGame() +{ + setState(GAME_STATE.game); + + let gameStartTL = gsap.timeline({ defaults: { ease: 'power4.easeInOut', duration: .5 } }); + gameStartTL.to('#bubble', { autoAlpha: 0, y: '-=30', scale: 0.5, duration: 0.3, ease: 'power2.in' }, 0); + gameStartTL.to('#steve', { y: '100%', scale: 0, rotation: 45 }, 0); +} + +function onClick(event) +{ + if (event) event.preventDefault(); + + let coords = { + x: event.clientX || mousePos.x, + y: event.clientY || mousePos.y }; + + + + switch (gameState) { + + case GAME_STATE.waiting: + next(); + break; + case GAME_STATE.game: + fire(coords); + break; + default: + return;} + + +} + +function fire(coords) +{ + if (count === 0) next(); + count++; + let item; + + let randomItems = [addBall, createStar]; + + if (count === 50) item = createSnowman();else + if (count === 10) item = createTree();else + if (stars.length && Math.random() > 0.8) item = createStar(); //randomItems[Math.floor(Math.random() * randomItems.length)](); + else item = addBall(); + + if (count === 100) + { + setTimeout(() => endMessage(), 1000); + } + + playSound('fire'); + // if(Math.random() > 0.8) playSound('bells'); + + let range = stage.height * 0.4; + let x = -60; + // let y = 20; + let z = -60; + + let xStart = stage.width / 2 - range; + let xEnd = stage.width / 2 + range; + if (coords.x > stage.width / 2) + { + if (coords.x > xEnd) x = -20;else + + { + let r = coords.x - stage.width / 2; + x = -20 + (range - r) / range * -40; + } + } + + // let yStart = (stage.width / 2); + if (coords.x < stage.width / 2) + { + if (coords.x < xStart) z = -20;else + + { + let r = coords.x - xStart; + z = -20 + r / range * -40; + } + } + + let hRange = 100; + let y = 60 - coords.y / stage.height * hRange; + + item.physics.velocity.set(x * powerMultiplier, y, z * powerMultiplier); + const angularRandomness = 10; + item.physics.angularVelocity.set( + Math.random() * angularRandomness - angularRandomness / 2, + Math.random() * angularRandomness - angularRandomness / 2, + Math.random() * angularRandomness - angularRandomness / 2); + item.physics.angularDamping = 0.8; + + cannonFlash.restart(); + cannonRecoil.restart(); +} + +function onReady() +{ + // createTree(); + + setState(GAME_STATE.intro); + + cannonFlash = gsap.timeline(); + cannonFlash.fromTo(stage.cannonLight, { intensity: 2 }, { intensity: 0, duration: .3 }); + + cannonRecoil = gsap.timeline(); + cannonRecoil.to(stage.models.cannon.position, { x: '+=3', z: '+=3', duration: 0.1, ease: 'Power2.out' }).to(stage.models.cannon.position, { x: '-=3', z: '-=3', duration: 0.4 }); + // cannonFlash.stop(); + + for (let i = 0; i < 20; i++) { + let star = stage.models.star.clone(); + stars.push(star); + stage.scene.add(star); + + } + + setTimeout(() => { + animate(); + next(); + }, 100); + +} + + + + +function addBall() +{ + // gsap.to(stage.cameraTarget, {x: stageSize.left + (stageSize.width * 0.5), ease: 'Power4.inOut', duration: 1}) + + + + let x = 35; + let y = -15; + let z = 35; + + let width = 1 + Math.random() * 4; + let height = 1 + Math.random() * 4; + let depth = 1 + Math.random() * 4; + + let isBall = Math.random() > 0.5; + + let light = Math.random() > 0.8; + var size = light ? .5 : .8; + + var physicsItem = { + mesh: isBall ? stage.createBall(size, showGuides ? 0xFF0000 : Math.random() * 0xFFFFFF, light) : stage.createBox(width, height, depth, showGuides ? 0xFF0000 : 0xFFFFFF, !showGuides), + physics: isBall ? physics.createBall(size, x, y, z) : physics.createBox(width, height, depth, x, y, z, 2), + previousPosition: new CANNON.Vec3(x, y, z), + rotation: 0, + rotationVelocity: 0 }; + + + // physicsItem.physics.velocity.set(-20 - (Math.random() * 50), 1 + (Math.random() * 10), -20 - (Math.random() * 50)) + + + // -60 => -20 + + // 10 => 30 + + // -20 => -60 + + // physicsItem.physics.velocity.set(-60, 10, -60) + // const angularRandomness = 10; + // physicsItem.physics.angularVelocity.set( + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2))) + // physicsItem.physics.angularDamping = 0.8; + + physicsItems.push(physicsItem); + + return physicsItem; + + // if(pauseTimer) clearTimeout(pauseTimer); + // pauseTimer = setTimeout( _ => doPhysics = false, 7000); +} + +function createStaticBox(settings) +{ + // const z = 1; + var physicsItem = { + mesh: settings.show ? stage.createBox(settings.width, settings.height, settings.depth, settings.color) : null, + physics: physics.createBox(settings.width, settings.height, settings.depth, settings.x, settings.y, settings.z, 0, settings.rotation, settings.trigger), + previousPosition: new CANNON.Vec3(settings.x, settings.y, settings.z), + rotation: settings.rotation, + rotationVelocity: 0 }; + + physicsItems.push(physicsItem); + + return physicsItem; +} + +const clock = new Clock(); +let oldElapsedTime = 0; + +function animate() +{ + const elapsedTime = clock.getElapsedTime(); + const delta = elapsedTime - oldElapsedTime; + oldElapsedTime = elapsedTime; + + physics.tick(delta); + + for (var i in physicsItems) + { + if (physicsItems[i].mesh) + { + physicsItems[i].mesh.position.copy(physicsItems[i].physics.position); + physicsItems[i].mesh.quaternion.copy(physicsItems[i].physics.quaternion); + } + + } + + stage.render(); + + requestAnimationFrame(animate); +} + +function init() +{ + console.log('init()'); + + + + let worldScale = 1; + + let stageSize = { + left: -20, + width: 40, + top: 0, + height: 30 }; + + + stage = new Stage(worldScale, stageSize, onReady, showGuides); + physics = new Physics(worldScale, stageSize); + + window.addEventListener('resize', () => {stage.onResize();}, false); + + + + + let staticItems = [ + { + show: true, + x: stageSize.left, + y: -18.5, + z: 0, + width: 25, + height: 2, + depth: 40, + color: 0xcccccc, + rotation: Math.PI * 0.5 }, + + { + show: true, + x: stageSize.left + stageSize.width / 2 - 0.5, + y: -18.5, + z: -20, + width: 41, + height: 25, + depth: 2, + color: 0xcccccc, + rotation: 0 }, + + { + show: true, + x: stageSize.left + stageSize.width / 2, + y: -30, + z: 0, + width: 40, + height: 2, + depth: 40, + color: 0xcccccc, + rotation: 0 }, + + { + show: showGuides, + x: 5.5, + y: -25, + z: -18, + width: 3, + height: 14, + depth: 3, + color: 0xff0000, + rotation: 0 }, + + { + show: showGuides, + x: -5, + y: -25, + z: -18, + width: 3, + height: 14, + depth: 3, + color: 0xff0000, + rotation: 0 }, + + { + show: showGuides, + x: 0, + y: -19, + z: -18, + width: 10, + height: 2.5, + depth: 3, + color: 0xff0000, + rotation: 0 }, + + { + show: showGuides, + x: 0, + y: -17.7, + z: -18, + width: 15.2, + height: 0.5, + depth: 3.3, + color: 0xff0000, + rotation: 0 }]; + + + + + staticItems.forEach(settings => { + createStaticBox(settings); + }); + + + + + + + // addBall(); +} + +function createSofa() +{ + let body = physics.createBody(5, { x: 12, y: -10, z: 2 }, { y: Math.PI * 1.023, x: Math.PI * 0.01 }, PHYSICS_MATERIAL.lowBounce); + + let shapes = [{ + show: false, + x: 0, + y: -1.5, + z: 0, + width: 9, + height: 2.6, + depth: 23.5, + rotation: 0 }, + + { + show: false, + x: -4, + y: 0, + z: 0, + width: 2.3, + height: 6, + depth: 23, + rotation: 0 }, + + { + show: false, + x: 0, + y: 0, + z: -10.3, + width: 9, + height: 2, + depth: 2.5, + rotation: 0 }, + + { + show: false, + x: 0, + y: 0, + z: 10.3, + width: 9, + height: 2, + depth: 2.5, + rotation: 0 }, + + { + show: false, + x: -2.2, + y: 2.8, + z: 0, + width: 3.5, + height: 1, + depth: 18.5, + rotation: -Math.PI * 0.4 }]; + + + stage.models.sofa.position.y = 0; + + let sofaGroup = new Group(); + sofaGroup.add(stage.models.sofa); + stage.scene.add(sofaGroup); + + shapes.forEach(box => { + let shape = physics.createBoxShape(box.width, box.height, box.depth); + + if (showGuides) + { + let b = stage.createBox(box.width, box.height, box.depth, 0xff0000); + b.position.set(box.x, box.y, box.z); + b.rotation.set(0, 0, box.rotation); + sofaGroup.add(b); + } + + body.addShape(shape, new CANNON.Vec3(box.x, box.y, box.z), new CANNON.Quaternion(0, 0, box.rotation)); + }); + + var physicsItem = { + mesh: sofaGroup, + physics: body }; + + + physicsItem.physics.velocity.set(0, -20, 0); + // const angularRandomness = 10; + // physicsItem.physics.angularVelocity.set( + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2))) + // physicsItem.physics.angularDamping = 0.8; + + physicsItems.push(physicsItem); +} + +function createTable() +{ + let body = physics.createBody(3, { x: 0, y: -13, z: 2 }, { y: -Math.PI * 1.013, x: Math.PI * 0.01 }, PHYSICS_MATERIAL.lowBounce); + + let shapes = [ + { + x: 0.5, + y: -1.2, + z: 0, + width: 7, + height: 0.5, + depth: 16, + rotation: 0 }, + + { + x: 4, + y: -2.5, + z: 7.8, + width: 0.5, + height: 2.5, + depth: 0.5, + rotation: 0 }, + + { + x: 4, + y: -2.5, + z: -7.8, + width: 0.5, + height: 2.5, + depth: 0.5, + rotation: 0 }, + + { + x: -2.8, + y: -2.5, + z: 7.8, + width: 0.5, + height: 2.5, + depth: 0.5, + rotation: 0 }, + + { + x: -2.8, + y: -2.5, + z: -7.8, + width: 0.5, + height: 2.5, + depth: 0.5, + rotation: 0 }]; + + + + stage.models.table.position.y = 0; + + let tableGroup = new Group(); + tableGroup.add(stage.models.table); + stage.scene.add(tableGroup); + + shapes.forEach(box => { + let shape = physics.createBoxShape(box.width, box.height, box.depth); + + if (showGuides) + { + let b = stage.createBox(box.width, box.height, box.depth, 0xff0000); + b.position.set(box.x, box.y, box.z); + b.rotation.set(0, 0, box.rotation); + tableGroup.add(b); + } + + body.addShape(shape, new CANNON.Vec3(box.x, box.y, box.z), new CANNON.Quaternion(0, 0, box.rotation)); + }); + + var physicsItem = { + mesh: tableGroup, + physics: body }; + + + physicsItem.physics.velocity.set(0, -20, 0); + // const angularRandomness = 10; + // physicsItem.physics.angularVelocity.set( + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2))) + // physicsItem.physics.angularDamping = 0.8; + + physicsItems.push(physicsItem); +} + +function createStand() +{ + let body = physics.createBody(6, { x: -16, y: -10, z: 0 }, { y: -Math.PI * 0.001, x: Math.PI * 0.05 }, PHYSICS_MATERIAL.lowBounce); + + let shapes = [ + { + x: 0, + y: 1.5, + z: 0, + width: 4.5, + height: 4.8, + depth: 18, + rotation: 0 }]; + + + + + stage.models.stand.position.y = 0; + + let standGroup = new Group(); + standGroup.add(stage.models.stand); + stage.scene.add(standGroup); + + shapes.forEach(box => { + let shape = physics.createBoxShape(box.width, box.height, box.depth); + + if (showGuides) + { + let b = stage.createBox(box.width, box.height, box.depth, 0xff0000); + b.position.set(box.x, box.y, box.z); + b.rotation.set(0, 0, box.rotation); + standGroup.add(b); + } + + body.addShape(shape, new CANNON.Vec3(box.x, box.y, box.z), new CANNON.Quaternion(0, 0, box.rotation)); + }); + + var physicsItem = { + mesh: standGroup, + physics: body }; + + + physicsItem.physics.velocity.set(0, -20, 0); + // const angularRandomness = 10; + // physicsItem.physics.angularVelocity.set( + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2))) + // physicsItem.physics.angularDamping = 0.8; + + physicsItems.push(physicsItem); +} + +function createTV() +{ + let body = physics.createBody(2, { x: -15.5, y: 0, z: 0 }, { y: -Math.PI * 0.001, x: Math.PI * 0.001 }, PHYSICS_MATERIAL.lowBounce); + + let shapes = [ + { + x: 0, + y: 4.5, + z: 0.5, + width: 1.5, + height: 9.5, + depth: 18, + rotation: 0 }, + + { + x: 0, + y: -1.6, + z: 0.5, + width: 2.5, + height: 0.5, + depth: 6.8, + rotation: 0 }]; + + + + + stage.models.tv.position.y = 0; + + let tvGroup = new Group(); + tvGroup.add(stage.models.tv); + stage.scene.add(tvGroup); + + shapes.forEach(box => { + let shape = physics.createBoxShape(box.width, box.height, box.depth); + + if (showGuides) + { + let b = stage.createBox(box.width, box.height, box.depth, 0xff0000); + b.position.set(box.x, box.y, box.z); + b.rotation.set(0, 0, box.rotation); + tvGroup.add(b); + } + + body.addShape(shape, new CANNON.Vec3(box.x, box.y, box.z), new CANNON.Quaternion(0, 0, box.rotation)); + }); + + var physicsItem = { + mesh: tvGroup, + physics: body }; + + + physicsItem.physics.velocity.set(0, -20, 0); + // const angularRandomness = 10; + // physicsItem.physics.angularVelocity.set( + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2))) + // physicsItem.physics.angularDamping = 0.8; + + physicsItems.push(physicsItem); +} + +function createTree() +{ + let body = physics.createBody(10, { x: 30, y: -10, z: 30 }, { y: -Math.PI * 0.001, x: Math.PI * 0.001 }, PHYSICS_MATERIAL.lowBounce); + physics.setAngle(body, -Math.PI * 0.5, 'x'); + let shapes = [ + { + x: 0, + y: 0, + z: -2.2, + topRadius: 1, + bottomRadius: 6, + height: 16, + segments: 10 }, + + { + x: 0, + y: 0, + z: -13, + topRadius: 0.5, + bottomRadius: 1, + height: 7, + segments: 5 }, + + { + x: 0, + y: 0, + z: -15, + topRadius: 3, + bottomRadius: 2, + height: 5, + segments: 7 }]; + + + + stage.models.tree.position.y = 0; + stage.models.pot.position.y = 0; + + let treeGroup = new Group(); + treeGroup.add(stage.models.tree); + treeGroup.add(stage.models.pot); + stage.scene.add(treeGroup); + + shapes.forEach(cylinder => { + let shape = physics.createCylinderShape(cylinder.topRadius, cylinder.bottomRadius, cylinder.height, cylinder.segments); + + if (showGuides) + { + let b = stage.createCylinder(cylinder.topRadius, cylinder.bottomRadius, cylinder.height, cylinder.segments, 0xff0000); + b.position.set(cylinder.x, cylinder.y, cylinder.z); + b.rotation.set(0, 0, 0); + treeGroup.add(b); + } + + body.addShape(shape, new CANNON.Vec3(cylinder.x, cylinder.y, cylinder.z), new CANNON.Quaternion(0, 0, cylinder.rotation)); + }); + + var physicsItem = { + mesh: treeGroup, + physics: body }; + + + // body.velocity.set(-40, 30, -40) + // const angularRandomness = 5; + // body.angularVelocity.set( + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2))) + // body.angularDamping = 0.8; + + physicsItems.push(physicsItem); + + return physicsItem; +} + +function createSnowman() +{ + // let body = physics.createBody(10, {x: 30, y: -10, z: 30}, {y: -Math.PI * 0.001, x: Math.PI * 0.001}, PHYSICS_MATERIAL.lowBounce); + let body = physics.createBody(10, { x: 30, y: -10, z: 30 }, { y: 0, x: Math.PI * .5 }, PHYSICS_MATERIAL.normalBounce); + physics.setAngle(body, -Math.PI * 0.5, 'x'); + let shapes = [ + { + x: 0, + y: 2.5, + z: 0, + radius: 3 }, + + { + x: 0, + y: 5, + z: 0, + radius: 2.5 }, + + { + x: 0, + y: 9.5, + z: 0, + radius: 1.7 }]; + + + + stage.models.snowman.position.y = 0; + + let snowmanGroup = new Group(); + snowmanGroup.add(stage.models.snowman); + stage.scene.add(snowmanGroup); + + shapes.forEach(sphere => { + let shape = physics.createSphereShape(sphere.radius); + + if (showGuides) + { + let b = stage.createSphere(sphere.radius, 0xff0000); + b.position.set(sphere.x, sphere.y, sphere.z); + b.rotation.set(0, 0, 0); + snowmanGroup.add(b); + } + + body.addShape(shape, new CANNON.Vec3(sphere.x, sphere.y, sphere.z), new CANNON.Quaternion(0, 0, 0)); + }); + + var physicsItem = { + mesh: snowmanGroup, + physics: body }; + + + // body.velocity.set(-40, 30, -40) + // const angularRandomness = 5; + // body.angularVelocity.set( + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2))) + // body.angularDamping = 0.8; + + physicsItems.push(physicsItem); + + return physicsItem; +} + +function createStar() +{ + + + // let body = physics.createBody(10, {x: 30, y: -10, z: 30}, {y: -Math.PI * 0.001, x: Math.PI * 0.001}, PHYSICS_MATERIAL.lowBounce); + let body = physics.createBody(1, { x: 30, y: -10, z: 30 }, { y: 0, x: Math.PI * .5 }, PHYSICS_MATERIAL.normalBounce); + // physics.setAngle(body, -Math.PI * 0.5, 'x'); + let shapes = [ + { + x: 0, + y: 0, + z: 0, + topRadius: 1, + bottomRadius: 1, + height: 0.5, + segments: 5 }]; + + + + let star = stars.shift(); + star.position.y = 0; + + + + + shapes.forEach(cylinder => { + let shape = physics.createCylinderShape(cylinder.topRadius, cylinder.bottomRadius, cylinder.height, cylinder.segments); + + if (showGuides) + { + let b = stage.createCylinder(cylinder.topRadius, cylinder.bottomRadius, cylinder.height, cylinder.segments, 0xff0000); + b.position.set(cylinder.x, cylinder.y, cylinder.z); + b.rotation.set(0, 0, 0); + star.add(b); + } + + body.addShape(shape, new CANNON.Vec3(cylinder.x, cylinder.y, cylinder.z), new CANNON.Quaternion(0, 0, cylinder.rotation)); + }); + + + var physicsItem = { + mesh: star, + physics: body }; + + + // body.velocity.set(-40, 30, -40) + // const angularRandomness = 5; + // body.angularVelocity.set( + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2))) + // body.angularDamping = 0.8; + + physicsItems.push(physicsItem); + + return physicsItem; +} + +next(); \ No newline at end of file diff --git a/christmas-cannon/dist/style.css b/christmas-cannon/dist/style.css new file mode 100644 index 0000000..839f9ed --- /dev/null +++ b/christmas-cannon/dist/style.css @@ -0,0 +1,129 @@ +@import url("https://fonts.googleapis.com/css2?family=Fredoka+One&display=swap"); +* { + font-family: "Fredoka One", sans-serif; +} + +html, body { + width: 100%; + min-height: 100%; + margin: 0; + padding: 0; + font-size: 20px; +} + +body { + background: #eee; + background: linear-gradient(to left, #ddd, #eee); + position: relative; + overflow: hidden; +} + +.page { + z-index: 2; + position: relative; + width: calc(80vw - 80px); + padding: 20px 40px; + margin: 0; +} + +#canvas-container { + position: absolute; + top: 0; + left: 0; + z-index: 1; +} + +.spacer { + display: block; + width: 100%; + height: 40vh; +} + +.status { + font-size: 3rem; +} + +#loading { + position: absolute; + background-color: #3A3F69; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + z-index: 10; + display: flex; + align-items: center; + justify-content: center; + color: white; + font-size: 3rem; + font-family: "Fredoka One", cursive; +} + +#ui { + position: absolute; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + z-index: 5; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +#ui .positioner { + width: 130vh; + max-width: 100vw; + height: 100vh; + margin: 0 auto; + display: grid; + grid-template-columns: 100px 1fr 200px; + align-items: flex-end; +} +#ui .speech-bubble { + display: flex; + justify-content: flex-end; +} +#ui #bubble { + padding: 1.5rem 2rem; + width: calc(100% - 4rem); + max-width: calc(400px - 4rem); + background-color: white; + border-radius: 1.7rem; + margin-bottom: 3rem; + position: relative; + cursor: pointer; +} +#ui #bubble::after { + content: ""; + width: 0; + height: 0; + border-top: 1rem solid transparent; + border-bottom: 1rem solid transparent; + border-left: 1rem solid white; + position: absolute; + left: calc(100% - 0.25rem); + bottom: 1rem; +} + +#text-highlight { + font-size: 1.5rem; + display: inline-block; +} + +#next { + color: #505050; + font-family: "Gill Sans", "Gill Sans MT", Calibri, "Trebuchet MS", sans-serif; + text-align: right; + margin-top: 1rem; + transition: opacity 0.2s ease-in-out; + display: none; +} + +#steve { + width: 100%; +} + +.game { + cursor: url(https://assets.codepen.io/557388/crosshair.svg) 41 41, auto; +} \ No newline at end of file diff --git a/christmas-cannon/src/index.html b/christmas-cannon/src/index.html new file mode 100644 index 0000000..34efcc3 --- /dev/null +++ b/christmas-cannon/src/index.html @@ -0,0 +1,19 @@ + + +
+
+
+
+
+
+ Oh no! Look at this dull room, not at all Christmassy. + + +
+
+ + Steve + +
+
+
Loading
\ No newline at end of file diff --git a/christmas-cannon/src/script.babel b/christmas-cannon/src/script.babel new file mode 100644 index 0000000..2388b07 --- /dev/null +++ b/christmas-cannon/src/script.babel @@ -0,0 +1,1857 @@ + + +let showGuides = false; + +// ๐Ÿ‘† change to true to see the physics objects + +let extraBounce = 0.1; + +// ๐Ÿ‘† change to 1 for bouncey fun! Change to 2 for everything to bounce out of existence! + +let powerMultiplier = 1.2 ; + +// ๐Ÿ‘† increase for more POWER! + + + + + + + + + + + + + + + +import { + TextureLoader, RepeatWrapping, + Scene, Color, Fog, HemisphereLight, + PointLight, MeshPhongMaterial, Mesh, + PlaneBufferGeometry, WebGLRenderer, + PerspectiveCamera, Vector3, + Group, BoxBufferGeometry, IcosahedronBufferGeometry, + CylinderBufferGeometry, Cache, PCFSoftShadowMap, + LoadingManager, AxisHelper, Clock +} from "https://cdn.skypack.dev/three@0.122.0"; + +import { GLTFLoader } from "https://cdn.skypack.dev/three@0.122.0/examples/jsm/loaders/GLTFLoader"; +import Stats from "https://cdn.skypack.dev/three@0.122.0/examples/jsm/libs/stats.module"; +import CANNON from "https://cdn.skypack.dev/cannon@0.6.2"; +import gsap from "https://cdn.skypack.dev/gsap@3.5.1"; + +class Stage +{ + constructor(scale, stageSize, onReady, showStats) + { + const manager = new LoadingManager(); + + this.showStats = showStats; + this.models = {}; + this.stats = new Stats(); + + manager.onLoad = function ( ) { + + console.log( 'Loading complete!'); + setTimeout(() => onReady(), 100); + + }; + + this.wrappingImages = [ + 'data:image/png;base64,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', + 'data:image/png;base64,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', + 'data:image/png;base64,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', + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAecUlEQVR4Xu1dCZRcZZX+3nv1au+urt7SnaSTztYJHbIHAiRAcAmKMnMUdJxhXBgRz4gMMorEM6DOgCMKgoiIB5FNHUFUhlFwSBxJhACBLKQDDdlIOt1J72t1d21vmXNf9at+VfXq1atXS1c3+c/xRLr+92/3++9/7/3vfy8j7H9ZBoALdr5E/yQUhmMhi1L8b66KCgiRMKLjwfjffrdhPeqdzpRvtX+QegcQbTlsWCcfPzJeF+wbVqG7K4o9X81Hi+ba+MiveHMVS7AWowLgM3v24ejYuOEQebcLrI1HeGQkXu+WpU24rK7W8Duh9SjEzr7CTp/jYF+3HCGHEy9+VUR0oLDdaVufEQC47Z1D+FN3b0YACOEw7C4XwqNjSt1La2vwrbOWGn4X2bUfcihcUIrwzYvA1tdg1z0RDO1hCtpXcuMzAgAPnWjDw23thgunHgkOrycOgAbOjSc3rU3/XSiM8K79BSUIW+0Hv2opDr8RxpE72YL2pdf4jADAc109uP2Q8TnN8jZIUUFZAzoOVFlg56aN4Dn9XVfo818599edjf5RGa9ep4gzRS8zAgD7hkbw5QMtaRdPS/xkADzqOwdNqx263wrvtkM8fqowROE4OM5biSDLF/3cn3EyAE3o5jdb4bVxcak+HJWw/eAAeqompX514nQcUCEtYesz6/HhOx26XCCytxXy0KTQmE8k2Ncuh1DuxWs/ihb93J+RANAjzrbro+iNhrHjvFN4a0GikMg5HBDDYfzbgxvQfJuMBQvtKU1EdrdAHjXWLqyAQhX69v42gq6niyv0zUghMB0RWp6Pov3x2K9tswP4zQffQcQRsw2oxwIBwLME2PztVH04/H+vWqGv4TfcgjmwLWyYMqHvPQWA4XEBL31hUrgK2UX84vK34seCQ7Dhaw+vU9Zk1R3A3IZEEOQbAFx9NWzNi9HRHsWBrXnHVtYNes6WsfkbqZwv64am6IO4Icio/92PRNH358Qa285vw+srujDvdBk+/cdm5ceK9TI23pi4GPkEQKkRn+Zc/QFgw9UzwBJoBICBIQGv6KhYQ2VhOMM2OCNc/PPz7mdQVWGL/3e+AFCKxKdJLrlJSqsBTdGmzqpbUxyAWtz1QBhDL2U2siTviHwAgG2oA9/UWDJsX7vC6+8BZtXOcA5AE07HBfTgpuUCkd0HII+mqpFmYapK+6Vy5s8kAZDmYpoDUGWzKpeWC0QPn4DU3mWW3pP16HJn1TIw/jIcfCGKkw9l30Shv6j7mIx1V05fATBrAIxHJLxk8qZNZY3yYACRfW9lRQvVvBtlWLQ8HZ1yPT/d4PW0nqwmWgKVs+IANN7jhyNo/ffMhheyC2y81aZYB01bAzkO/MK5YOfVY2RMwL47ZYwdKYFV0hkCXwlcci8Hns0sF5XmDGKjyhoA9JGeWqg3yYZrgZUX80AojMiBd9LLAhwHrtYPW9MCwMbh8JthHPluaS9sw2eAlZdOX+FPpZclAGRzFKz6kYy5VXZAEBF9tx1y7wDkUASM0w44nbDNrgFbU6kQvn9IwMEflu6u14L8kkc4uO2lDVIznMcSAKjh7p4o9txopgtg+X/KaJyfXlgiCf/Un5FibDLXevFrVV8mY8NV01v4y4kDqB9r7wkykYFkglmXyahsjMkPw6clhLpZdP0RRXXfyjROM7+ffz+DSo2xy8w3pVrHMgegCUUlCa/dK0zpVWyxF3a6m36T1ysnAFBj2cgDxSZWIfrb9DMGPvekqbsQfRSzzZwBkK08UMzJ5buvmSL5a9clLwCgBqfKITPfRE7XHun9m34wMyT/ggCAGjVrKi4W0fLZz3S/9Uu3FnnjAKpQuOs/xJK13lkFhGLV/GaJWv1CYcM3F0xFueG0mfDvn5IZGwemzA1wtti/ORTyINp9szztVDujKRf1ylcQIY+OQY7SvzFfSnFwOD48eTB3B1vGPwkKZuyuu1Oc6RmnA6y/DGyZVwFEJhQlL177yQhavpH5viAHnBXt04KpfROElgYDkINBSKEIjIhLRGMmKMVqCKi3ELIgQDR5A6sLAL1GGa8bttm1ChjMcIlsjERFo6aFjvJl8pUD44p7PO1m5f8bPJXjGurA1VRCtnFgyzwWRg1E9rUaAkpt1DQAEiTHCQ7BNcw2BMNUvNOztFppPspJ8AuFIfUOKgSXiG0LoumhOS5aD/C52RrMvsiyBIAEMPjLwdXXgnz2kst0lgesCH60s4XOHsi9g5YfwxKrt6+NOdnmWsI79wBC7ClfupIzAOKsxOmArWl+7GZPU8z6D+Q62Xx/b9reL4iQOnshnOy0THTt2LmFc2FbMDcv0xEOn8goC+QNAHEg+MvBL2lMOBqm21FQ91Fg3d8b3/WTp5PY2Z33uAf8umawGVQ3s+iQhkYQ3dtaHA6Q0IuNg31lzJ+PysCogFe+ODUvd80ulraekeBHhI8ebzclYFnpOx/nv7bfTF7ZeecA2s5Vj176W8vOKNoftLIkxf0mneBH53v0yImCEV6dpeP95+V1wtHdLZAM3mYWFADk5ePYsBJwOjAcEfDS1aXNBdL5+dHzdnrmXujCet3gab3yWDKpg4UFADkdet2wT0xq16NhDG0vXTeqlN2v+DIeKsjrZj0a51MDUNufcgDQQBwb1yhc4HhnGK1fK00AJO9+YvmKO3sW+nvOG9dmg+Pi9Tk3o22gJACgygL9wShevSav88tbY9rdPyXEn5hJ3oXADLaAgh8BNC9+yXzF15+8fqcqjk8mpFzyKAc3zyou7OHdLcXd+ZrB2ZoXgauvyTRcU7+bsQYWBQAUyoVUwlJ931d9hYQNH4/FOMrEMk2tfA6V8ikImplL4QFAgZw2n6MsSak6jDTfJWFBvSO2+wsc0s4MNvJhDTRjBaSxFBwA6vkfjEj4y9XmL0TMLFS+6mx6mIHPYVNUvYJFNMtysLkcBcLxDojvdpjqsaAAoKtj+7rYxUap7n4amxrnryghbU2RJVaJrfHDRmZ1l34IvuSm6MwnwhsZfpK/KRgA1Be+ZAw6/m4ErbeWroPIlsc58BwLy0/ZsyCqlaoEBNbvm/DamvARiAqQKLYz/ds7qFw5WwnHWxAAaIlfqoKflhDr75Uxq9qu3OpFW49ZodG0/SbvAFDCuSxsUB57TgfiE+Xi/v6CiPBL+wCxNGWVQqAsfwCgt/3LF8X9Ad55OYpj9xdiyIVp832PcHDZWZjRnQszgqlpNXcA0Nv+eXWwzZut7PqRoICDj4qmAkpNzZT1e63YJGHjP8eELelkJ6JH2kppeAUbS04AUEK3Ebt3OhAVZRw/GMGR+xggVLoCn9FKap9+vVfkgawBQIEdKDEDeQgT4anQWX/055gRD0Io8NPKj/FKaBvFB6DlHSWgxUwtpgFASRk4NZoHPQ0XZXSfFmYM4bUEpoinK65lUe6JeeYqRwIZVmagcGgIAIXotZXxEC60GGTRa9sj4uSvp19gh2x38aLrgEUbYoGuFCCQ8yeFuZlBHCEBAKS/M34fOH+5YnggoY6KutunUxiXbImdrj75CTR+XsKCFfY4EFSH0JjxZXofD0zwyf+Skwmu7vT+bhHdu+WSjdOXLyKbbYeExDkbEmMhk5wg9vZDeeJVoMQYZseXbT3llZeaNo4+psBPg0eB/t3yeyrsS7YLR49G6rYAs1cxcTlBbYO4gxwYhahwh1BOYXKzHVe6+sTZYeNj7z1dTjBeT9xtn3nz/p3yGYJbX2o6IugdQWUzUF6ZCghqmbgEuZYRMCRBiL0NnHA1kwNjOQmX2oe7ykNeek9IRKZknuqrb53pUSDOkQEZzDPNO0vbVdc6babkSwKEby3gXyPBXcXCVZZ4ZJgdFHESbVEe5E7IZGbboHpE6GgU6D8hKlHZgqcTw/GdAUA2q5lDXRUYtjIZZYtje04FiNqs280q5uhMhVzrtGWkR0J0PNZm4G0WQggY3mdOSzsDgEyrPcN/PwOAGU7gTNM7A4BMKzTDfz8DgBlO4EzTOwOATCs0w38/A4AZTuBM0zsDgEwrNMN/zwkAlDdwuCyCYW9I+ZdK0wk/ZvXnFmtwhq95SU0vawC0NPXiUOOAkkc4bJ90nlSziTe0e+KZREtqpmcGo7sCpgBAO/2v6zpwuHEwgejUIiWQpiJFY9apcw7WYcsr888s9zRZAUMAqIQ/2NSXMh3e7YIkSkr6eLXYwyyu//XahFSy02Qd3rPD1AXAocZBhc3rEZ5Yvd3lQiQYhCzG0sir5fIdi7DycGq8wPfs6pqcuNRwBHLZMJiAD2z7EpNf5acac+XND8i+gAPDZbGdfLI+8RZK2w3tepZlER4dS+ldm0U8P0N777QiNu8B17oeUt1JyPOOgnvtfUWZ/C8ubwVz7g+/n/Y6mHa7ussd5eUQwmGF5dPfGZaNn/s02n/8YzPmn46FhTtTzK8AEZ0K2zVP+Veq7IZc164AotDlfzYfMwYACXiyJMFbXY1ocByiIEKMRhMIT4Os7XfhC7/Lb3SrQk++lNoX1+wCt39jfEjEEZiB2jgoCjXWlqa+SQBodzt1qKp1zvJyhEZGUs577aAu3DsHF+3NT3jTQk22lNsVz/1LCttPBkUhxm8IAJvLCd7pRHBwKGPf1+xvxqzXz7D/jAuVpoK0+CCYzgYwYxUJXIA9ejaYiNNqsxm/I9U+LgMQu1d1edr9rooKjPcPZGyEKvx41Uosc3vR3yVgsBUYeJWZEa+ETE0+T5WSuYBWNmCcEcih/Gcq/dkVB1NlACK+p6oK0fFxCBPGHVXXV4+FZPWPALA2KcAxeRi375TR/d/T851gnuhquhlF+Jt/VJEFiOCeS/bAsawd5XWx9YsOuDHwh9UYb83uqCXL7ax+T4p5niy5v/yoRgvgHA5Fwi+rr8NYX1+KoGc0k3+a34BrGvWtf5RdtO2AiHcfNuejZnrFZmBFAgG/9CjmbOnBWGQALrcTvD0xavn4W3MQ2NMIKZj4dynMI3LaH1+VkF0EqXk9VeO47terURFIDDNDv5HKHz8CSMe3ORwZBT69dV/s9eDxdWsMSXIGCJkR627uwKzPvpy5YpoawWO16HpwM7TE17PP0Nn/4rpTSitxAHhrazA+OJjVzlfHsdjjxuPr15oaOAHh7W0Cup5lZlRmMVOTN6hEbL/h5mfBuaOWmxIDTgztWIZf2ri4FZduZz+xrSneJkn+f9g8GQZHAYDD61HOe61dP9MoVvt8uLi6EmsrKrDEm31iozMcIXGFveuOo+aTr2dadt3fZYEBY4vZ8/YOlOGBwcSsLSsOV8MfcOLE7OEUSy9z/gP3ysT6wyOZ89ER0T9aNwsXVlehzMIjhXSzo9xC/e0SBihC6wiD/r9ktw70VMvZMPmNb5kM3q0vfPa1SQi9wZacllLxwTfh/4Bxdg+aISuy8Ix64Bp3wibwANGdkRF0h9DvCuKG7hoEpcxvC1S7D/P+Jx6TI6OjCgdgKVTaeDC+kmolYvFfWbw4RdLPjkzZ16bM5KHxxAsnaqWsnAXPZp6kUY/jgoTTRwQcur00tJRMACDCV/dUoWzEOBPofkbG9zkRXRmWm4R+SYiC2XDfXXKyWqf99sOzanDrsqXZU6/EvqCXu1IwAkYQEnIflkqSy8rL98O36YjuqpUNe1HVUwPOxM6mBug670ZOxDFGVvw1VPuOtnES+u0ut/FdQJ3DgcfWr80ruy8qLkLhWPjXzlR/BsqOyq9cqrySnerM5yQAzrlhG/jKWKpYbbGH7Gho05xvJheQQPBNTsQBW4zDJW9yd3XM1mN4Gzhtdz9l+mg9ljm/z0RKm6idx46tIiIxzajoJd3uJ7Y/7935pnd+8sC7JRHX2GUEJ2w86u82jxt2p1Ox9BoCwMjAU/RVMtmh1N6FKOX3MZnpQ4l01rwYUxXX0Ej3r+zzw9+fKNGbXIbYrg8F8YSTxyPlrgTZrmxWLQLdPUodZuOD9yX4A2jdvC6sqsT3zo4Few5MLGg+pf9sJpOxriAi0nIo867Xachx8TnoHpCw58aMveS9QsPWZ2HzJzrYyDLAiQzmHW+0vPuVgUoSpIEBXFVXgX53DARk5o8ExxXfDpvdYcwBqI2vLF6otPVkxyncsbzZks6f91VLajDXFC/8yiaIVRXY9unihohN3v2yxIBhJIBh4Bl1o+5Ufc5LJ7adwJ0LG7CjzI1oOAxffT1CgYACAPqf4RGg7Z0Ewt+fF0v8UEpFCeh4+IRplq83dm7BHCXg5bNXWbfCWVkT1fhDdn3WGVEIr5Zc2b/aDgFge10tfjS3FrzLhUB3d4JAyLT84C75Twywi5UMdcdbljbhsrpaK/Ms2Df5iuapygE7vh0tqoFIMf/+6/PgfJO2F3Wx6jrq4BnL3sKasNjhCMSu0+iorsL1TfMRCYaweTiASyUWdTJQDyYxY8j/MhK+x6UaXsgC+JPVKwpGSCsN54v41Lea2GL3I1H0/dnKaKx/ozUBj0ssXg54cShox9+MerBZzDGF/NAQ5OEhtNXU4OHGObiuZ1AhurakBIpMBoGH4/D4+jWop6BDJVLySXwtAHZ8N4KxN4tvGSQbgH32EJ4Z8GH7UBlCMofPSSw+a9Lwo0sWSYJ4qkMRBAOzZ8PG2+HVqagbKfQxVsKjrAQi/k9WrywpwS/fxKc1UXIcNDUWVAborooZefTeTToX9qD+izvi5DkUdGLPqRp8U7TuBSRN7H7wPLjZc9JuXV0AkBXpBruMb68pMeL3DiDacjjvfKjQQiDdzz90RQscERu+8Dv9o7T+2hfgXNQbn9v3T83C7cMO1HDGaex1F2Pi7KffuLp6wJE+51DaWMHBhjpUNDXmfbGtNpirqmfULyW2DNfNKlhWs23nt+H1FbHrmaYTFfjgK40pHjo2/ygatj6n1CFZ4Oa2Ofh4hMHnBwJgKioAk5df8vgYpP5+hfWTVsHNmQtwsZC/eiUtACh7JaUuK4lCRp7dLZaSIpkZPyW2HGBcBclqmuyAQeNxRDjlGf3SE5WYf7o8/pbS+8nX0HFWD57orUA/XfUC+OlwEIuHA2Ar/WCcrvTTkSTIIyOQhie9uNnKKsiyBLbclz0A2Ipy8BMp38wsYsHqEPH3vlXQDN5kCTz8poAjd+Z2xZy8Bq+t6ML28yczjyS/vTCzZiS4PdE1COfYGGCzgSkrB2O3g7HZIAtRQJKBUBAS/U67fqIwHg8YjxcIBsFUpjcnp+UAjJ2H/cJ1ZsZY0DqFTuVGCTDsG9ei5fko2h/Pz1ToVfX280/gcGPimwozANCrUwfg7v5R1A4PA2QnTi68PRb/125XuCSBg/F6FUCIHe3g5jakPUJ0ASCPBsCfuwpc/dQafoqRwCmfRiAS9uisJ6dLo2IEBNVRQ89H40KOx9c7++AKhUDxX4norL9Kn7jEDSICxJ5OMOU+sCRH6JRUAIQjkAIjcF3xIYXlTFkpUhZvSm0brqrKSQDUI7wRkclJg2G5tD6YyUE3tDSgR7pnDQcUO8Eq2dhmQQKhErE8EABbVQXGm/p6KwEAtPNJf+RXNINfu3zKaE8dK0LfaKqDRL4H5di4Bh29LA5stdYyRU2hV7bacDnxc5iLyRTJL6lZnofNYQfH8yDDHMtOSulUlx7kMiTBkzePKEGaSFVDlzeyLOMy1oYbBlKf6OvNQOrpUfqQyfnDXwm2PNGljBm9/TsyZc2WxkYBQcBYbQ2cH9o8pV5AxUrirGQ43bDKUl5j2vXbLjihG0RDITrHgnc4wDliFlSGoSf1AGuzITwSi8EghEMKgdX66R7ikq+mt6YW0UgI7nAUj45E4NWTBXQQoGxqkh3ooonChrMsGLcLjMsT+/8j1/9LTKpgGHRUVeLLPhfqvB7cv2rllIBA0fdfa1FUUK7Gr8TWlwJjSm5cqW/Q2jZN85VqAdx2fTSrNwrahxfapu1ut0JglpIz2LiJdxaxG0YCBP1dz/Xe6Df61uWviD/YuVJicJ2UXq9PmaogKCZhwV8J28hwSm4CJnDTTTI5C/yq3INnJpIjUSNeG6eAwIrPfy5UItZP2bLJX093Mie7ILR3Kdwq12I/dyV6gnxWjiCqVU8Ni0cu9eyEoYV2NO0qYu3J3tVWiU/Om9q2rpNYXJnlHQFdCff6fLilqhxXjwZxzlgQXCSirKGhP0C904FH1xXPKVRh/e3dcGxcbSyACgIiLYctef/Ez2cL6p9259M5TuFyyLVay8aTz3vqL51nbqbfkolP9e8ROazOIPxpNwa5hUnd3Rjz+fC31ZNC4CKZAf1XRoeQi6orFU+ggpcJqd/W1AiyQpopkX2tlkFA5l92Xj2yYf9PbTmk6PZEfInO06SiR2gjbcCKOni7ZMPG1Bv7tMulXgp1+3y4SgOA+EY47/67ZZI6qai6J90Crq3woTMUwtGxcTy2bk3BjwIiJhX72izAJggI73rD0nGQrfRP0v5TW9JfRJkx8pgBtSovaOkRJxbH4kMyg69HzF9Zi6dPKcLfC/Pn4jsarZ7Aytl4fQ5ww6IF+Lu5sSvEv/b1Y1QQC+oNpBp87BesUc7/bIrQegxi5+QtmplvKSEmv2ppVtI/Xef+ZsshjEyExDXTj9U66Y4MJXaDKOEPgjn7jNTXB5m0O47D51c0Yai8HMHhQciSHI/1pHsE6AV8sDoZM99Fdu0HW+MHsf9sixVrIV3+hDweS8YfNT4yjbO7agxD3jDaZg+jpyrVrSvdXMjD6lNzZ+Oi6iqlCnlcP9nRgYfb2tNOXxucw4wmII0MQx6MaU07a6txW5kTZGUkr+DR3p7JaDB6YeKK6f9nWvBLszTS0AiiezM/qoyz0QnhL9/vAIyiqqp909F667KmOOGTp/TQiTZDEGjrb5VYXEqKUPI1sSBAol0+Ecvx7doafKPMgdGJj+1eN9x+PwI9fbGQf3oAKJr0L4gI79qneORyDXTlkX3JFgBk+hVrq/HCV4SsdH+zI4vcOoif9B3DWFKiaXpjccuypRltKxfsfMlsV3jc7cOc9tOAMJG+NipCJlWUCsdhe00V7q7xJaiRytnP83B4vYiQdXDzL38uhwOj8ZfB8RfBRTAG0U2f3DsI+0bj6CJGKyIc74BImb3NFI6DY9NadLRLOHCLmQ+yq0Op4bbcxyty09a33o5/bPaFFR0BxAUyFXLRpwc7io1GECC8cxzS4CB6+wbRw8h41eXA005e2fV6qiTFg6Bor2RgYi58+KeKJVAvPgCFfvne8rMK4xCq7v4s1D69hYnuboFk8s5Adf0qlPv3kpskNK2OCbH3HH0Xz3V1G7J8dT4kA3xu7z50hiYDb+vNlZ7pf2ru3LQCOfX51KnTCZ/qaSckB4yR15BqB6AbJrI368UEJIsgdfqJObMzsq9MyNX+rtr7+XNXgC2z5v8uB8OIvLzfXLfq7u+ULF/8ZOrokkc4uE0kftRrh0DwYl8/ToeCilB4ZHQsHo+hyetVdnsmz2w9GUJPo9ByhbgM4KmpgRAc1w0ErQ54TYVPGQgNju4iLL8VmNj99ICT9brBk+4/kXcg0yJrf8/GEFTo3V+xXsbGG6178WYz73R1n+vqwe2HEm0VegBIiAmpCoFq/H8bbzMEgdq52XNNb7DJt32Mvzw7AxCg6P5kAzBVirD7tezf1JgKUIk4x6W7Xom3nM44pcsB1DiBdBxwdh4kGBoFjbKsKmp2v3YNFCfUJfNNcQK6HYzue9u0BZAkf7a+BoU6+2ke591vLUl0vnFw85uteDFDhFctMHTVQAKBesmRDgRWjUVGDzvoOLBR1A4Da2C2xFd9/godBeQjv7Lgv59v6gPYNzSCLx9oSdty8pGQEChSe+2YKXScVQBk9PSx2cDNq4Ntbl0CNyCBTySVL0uzL1n9hHJvwfR+WunqDwAbri4NANB4vvTGQbxBTiA6JS0A9IQFiiQxSvbkpNQw1O4dy89Ka9FKBz95MIDIvrdM4544gkzCYTBs6U2A+ugz31a/5Aksug5YdkHpAIBkgY+/+lqKMUpR+zRJQJT/VoVAPQAQF7B7PLogsCIECq1HdQM2mUZElhXpxm9E5PDitWmTomTZon715m/JWNA0tRpA8shIU/vSGy0JICBT9GV1sxR1nm56/9o3AOYffvZjma589QpJi+SI6PZXIjg8pFwgaC2FmeIDJ7SZRvjLCwV0GlHVvmI8+S4VATATCJK5NoGAefvF7fJn9+obU1R1QS9FHHX2/MbzTRuHCvGqNx14VGfPjvZowYw+2r5LFQA0RuIEpBl0hcPQ09wYYf/L8m3vHMKfulPv1LXHgtPnQ4QeHk7kEKDGtX4DmXZy9MChvDt1puuTfP0Et6uggp+271LRANKtB8kEZCUkMCQb7xQAJF9eqA2lZBHx+zHeF7MhUzETJl6pSOx/p7VAyJmAlfy76um797cRdD1t3nMm236mEwCM5vb/su2eP7XanUIAAAAASUVORK5CYII=', + 'data:image/png;base64,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', + 'data:image/png;base64,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', + 'data:image/png;base64,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', + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAATeklEQVR4Xu1deXhUVZb/VRaoSqXIAgQEGoJ0h7AoAQJKsyUKOBAEpyGIqKPNTtAWGMURJCyt/QmhgeZjaWQZpgVkHUUEBlDWkSXFNmwpaAIJ3QQTIFulspAKNd+pUElVqurde1NVSB7v/UPIO/fcs/zuOeeee/M9Vf0TnSyo8ZS+eL7mrxz+X7BNj5DNC51orocMR3poouTYuvpyRvwYXG58xqX4C/zm4g/dh0qqljdzPcIMe7nULw1sjPLRk6Ab0MGJPnejHg2+XYGAh8UO73K7DEf4TLbtvzp/EONKp1WNVbkCwPbQ1Rgc3c2tsMb9l6FbNc/p/aVGk3BbG8elZF0j2tRhJbZ0WOVS7N7GOBzov0RSJfN9EzBxMgIelnCrbgpqhbL23a30KpMJmut6qMvvuhxPoFFvXsbk/b1Bj+H543wDAH2TZOSqnVHLlKoOEPzYeieWdpvtVtJ/Pn8MjYJ0kprkfr4N4We3+07bHVuYvH0KgH2t2AIwJXxCCS5G6PFpXPXKqSkmTxqgKFA2ZS60xZk+0dI4Idll2rCf7N9/Wonl/tWRzGUKON96D6KbNBNKAQ8atcSF2C9QmOGPcv4o5xND+IKpqZ4Ro17r7ZZ1k5JmyIzfw5y67P8y4P/ZHKFUwGT6iIAHAImHZmGXZpd0CmAVga5qgPIB/fDgrTetjO9f8UeuwR8FGf4ozVPxyv/E00kVgiQ8TxQguoKteoRscS6iPTYARwro8MPrSA++6hkAin64jOCVjkVg2Qfvw9y1i5MOpjt+yD4XYAVEXQfDrqgNWBPj3nG8UYCMlL/uMEJ3r/TY5zYGxtB20K2dI8nvXrERLS44RjGnFPCsKQpXXt4qyaho7fcI3vOVA03xX5fDEhQkOY4AkJvmj5zzASi64+c15R8Xo2xtFsYnDJKcblLpBCyOm8QlknHfZWjWpHglHRjHJ0P3inQBvjR1J6Y/dCxknQAwyjQK616eLg2AZZsRfOibKhpzr54oGz+WS2kbkbkEuJ9WGRnup/kLjf0liT8YMAIZodckRWBto+0Hl167i/L5y6HLT6u1Wnmt+iJsURJzfI8DY3FOd9qBzgkAPMIXfzQfQTfOVjFyF/6ZEtkR2OqGXEPAE11EsraDpBKlgjMvbGFuC+3tQylBfWAb1A/ucZvN7KdBYUwCVwMo9WcD+mSMdOLtBABWAUgcSke+V9WQeBjeECVLvFvQPMl1Q6AGePflgcgJuiPpqC7FsTj+0hpuZ9oICQgqvR4hOY4r1Z4ROd74q+7QTEyEOqox1xwD9k/F0QaHpAGQUPQqdvT7oyRDc64JAeNGV9FQ+ze73TBEdDYjpPVDaJs+5BKIl4jAUHDT74mqG77pvRLrn3HdFbTXa3DREGzv59wx5dGdegYlpzNQfvqKA3lgbHtmrq/Jv2bzx/69QwQ41HQzekRGS8pnX70SEo82X45yP23VGHWYBQ3bVSAs2ozQ1t4FAxWRBTcrt5i/ZN0QGG3E8PYDURxQxPSlJyBgMucgoMq/66nXka3JckldBYCYoq442W8tk2XetBUIyzxipWMd/lC4DG9nRnh0hRUU3nyoiLSB4ZeoG44P2YD5ar7U16cwHpt6zROqCbxlK1eFn8sIsD1kNQa3c38AZBtkTvy99STK1epnCd2oPUUGAoMZAWoWtdh7ShO2XcXj6DeE/xp4P2oMzge7PiGsKX2borbY8fxiREe477CKaSxNTSv/zRPJOKJ1zvtOAOA5zaJB9uH/avi/IUOXUGuZg595aK0bwttVQB3qdCJda740kOoGW5rwZb8h+F+z8CpGoDiQnQpILm25DrPrf8g8OvZIeQCGnCwMuzDVoePnjqcq7GhPy7Uue9FIK32SRQyMY+ZCl38FxsBWON5sgadyOtUNBAhvF5G25hO1pb1dN2jCgTPxO/GJv/tTQldG6myMxX92mueTaLA09TvMLUuBKdDI5R/V387+aHm780tMYvv+/4ln5qOwXiRzTG0IfF03UJoozKAI4Z1+Q2RfYH7wAmzSbhJWlwrEz56f6BUgUKX/+T9WOTV6WEKpLBYLV/y1rX5W4ceaUPS9L+sGaj6lfV1fVCQn+m6TgXE3Z2F3cPUpmwhTKhIHh8ZjVMd4oUKR8vymS4ewqnAjV7ivKRNt+7kAYFv9ufXbQd9U+sBBRHFRWuozUAHpzbrhf2dJn1/wyEhRq88s4JXDU/BT6GGeIW5pKD30qBeLSE0ztGlQWTC+0LItTt2qPMHLKzPibP5VnHhwWni120/aMz8OP/7LEjYAqPFjTvoYARVFTnt+jzT1cDAVkQQIT+sGbwCAVGnQHOiWBPzuwCzsj6hdJPDQJNzD6cDv6ItrrXUfMwLQZUbdtcPQN5njs7zPLbkbQmo+hbSuEO435N/0w6V13tuPNu8ORA8F5h7bgJQGfD0CT3UXHV+z2ysJALr9q926/Il2fk0DUDgmMPD0G/7+TT1knw0QtaEkPYGg40jgq3MH8UFRMvcW0atCuGE2w/whknu95fDWLQCKUzNQL2UuDOHv1OmbvlRENoiscKobzKXAmUVBPjl5tIEgvSAL408s8Lgu8BQcFPLXtpnnss3vEgCU94unpeBqUKKsbvlS3UCRgSLEzycDce+K7+4h2EBAztuRqsdUUzJyNNIniJ46uub4oPJgvFPxpuQFFZcAME1LwYUHiU9szve2oXzFz1oTvIaqtvdnpzZgdelGZNf3LRBsjp/Z7S1mg88JAEXpJlxYVQyjme+c2VfGkwtf2h3EjAY0YdUafZ+mx9KsjTiq9WzLWNNGFOpH1h+CpM5DmY63jXUAQOZRIH0ffJIX5eLQ2uhBhWnHN4CIjo6jDdlZ0GcZcDD3NE7hNG5opa+auQrxUaVtMUgTjxG/eUnyKr87ua0AMGYBhm+B3Ou1UU8Zw2uBJs9VAsHdSeg9kxEnbxms7H7Mdn0jKCxAhy4N26KhRse8u8Ejl+ri1xbL7VQeUoXGGxagaNCyD/DrV7zBzTMetPBV/zOV7yzAs6mU0TUtQCeJbV4BmrOvYHjdeDmXAEr3FPEVAHjdvGIMKSLQboGign2hKMaFTU2rnRxOji/JraZXAMC23WOjoB1D444A1Qo6L1wcyk0H7l4Csi86Ot1eIQUAj829YhNRZNA1rzxkUodV/mx76HdUSJKDbQ/dkSy8DRRlVf5rv8qlZlYAIOYX2VErAJCdS8UUUgAgZi/ZUSsAkJ1LxRRSACBmL9lRKwCQnUvFFFIAIGYv2VErAJCdS8UUUgAgZi/ZUSsAkJ1LxRRSACBmL9lRKwCQnUvFFFIAIGYv2VErAJCdS8UUUgAgZi/ZUSsAkJ1LxRRSACBmL9lRKwCQnUvFFFIAIGYv2VErAJCdS8UUUgAgZi/ZUSsAkJ1LxRRSACBmL9lRKwCQnUvFFFIAIGYv2VErAJCdS8UUUgAgZi/ZUSsAkJ1LxRRSACBmL9lRKwCQnUvFFFIAIGYv2VErAJCdS8UUUgAgZi/ZUSsAkJ1LxRRSACBmL9lRKwCQnUvFFFIAIGYv2VErAJCdS8UUUgAgZi/ZUSsAkJ1LxRRSACBmL9lRKwCQnUvFFFIAIGYv2VErAJCdS8UUUgAgZi/ZUSsAkJ1LxRRSACBmL9lRKwCQnUvFFFIAIGYv2VErAJCdS8UUUgAgZi/ZUSsAkJ1LxRRSACBmL9lRKwCQnUvFFFIAIGavX4za9qk4mwD0GTn6tBx9Io4+GWcurfxZ9FEAIGqxx0BPzg5rU/nxSPrZ/puBrOnpe4HG25XfFMxLZ4NCAQDLoo/pPTm6WSwQ8RxA3xX21kPRgT4Ze1sP0DeDaz4KALxl6VryoY9H00ekvel0d6IQGOgzsun7q78sqgCglo7zdNjjdLwrWXMuApnHAFX2BYvFsJP/W7OeKv60jz8S9R2SBsejRQvdE2EKlcVisVBouL6v8tPiyuMbC9wMM2BNp4V4XhuFdS9P98kkxgNXnPhqurZCQLjW7XxWANjeUvV4aTO7cvSJ9DJmuitqI9bEpCCh6FXs6PdHjzQtTs1A2YkrwN27CLiTAU1hBgIeFjN5lgY2Rll4JCp+FYnA2PbQ9W9vHaMq3HfJohvQoYoBRQMCARULyuOZBUz1jFjTKQUHW3/nkfNL/34XJXv00JzYA3X5Xc+EejTa7BcEY8tuUFl+N8JC6CgZkAjda7FV4SJ9X2VaUJ7aWYCcP7PvWNwMu1pr5xv3Xwa2bIcu3zm0104q51FWANh+bUVFr0SEfTDI+qvbqZXRQHnELED5/i+xs2vtfFrx5V+s8KnjbRo5AKCqFghtD/8J7yCoe6QCAjHfg1b+lP6vI0ebhWdNUTj64lo00vJX/Hmf/hfC0vYIzlp7cpcAsLHLjU1E+CfDFRBw2tc+7AeVB+N41FZEN2nGNZpWfcW8FGiLM7novUUkCQCaJC+yL8L+nGTdIhq+9da08uQzM24sLkWctiq3uv4ivN35JS5FKddrVi/kqua5GAoQMQFAvExBrVD/L7Nh2K+1RgPlcbbA6pgF+D5qk/VFb2McDvRfwmWm/HWHEbp7JRetL4i4AGADgf8Xs3Fus7ZWx46+EP5J4Xmq+UH8qec0qzgU+q912cuV92lPHzT/Y6+qYQxpZ+WnMVJ/oITJmxsANhA8+Hg2zn2tRTmbN3NyORBQ3h83aJC1+KNncsUE/LnnJKZq5Px6KXNrHfYpKpe1bI/APt0Q2DoC6qjGLuekvk7J0cswGzLgZ7iCkJzKFGV7hABAg6gmKByapNQDjyxoH/qDzMG40WMvQv2lq35zrgmY8J6w881+GhRGxSHonQS3Dmchz3zfhKKdeqgPbIP6wT2oSkYmWegHkScveiCuN3/Xes78ND8XI/T4NG5clQneV01Aygvs1V+QtBAh2Xpu01kdH5OABhMHIaCh+74+N8NHhFR/qMrvFVkKF21DuGGv0Ph7o5Jx5qfqFrLQYJkQ21f9lPtv/Ja9+vOW7kbYkb9xW4BCvf+sj2q94lkTVR0GGfddhmZNClfhQEypfZz5xjJkHGFNIc/3NVc/z0EP7fUDZkznDv15rfoibFGSTw3ocBpI+aFsylzuZsTPvxmOK/6JT2VBaL/6yUOHmm5Gj8hoSWcVfLQCITf4VszjcD4J6wAA+gWBoGR6CnT5aVzIu95/PtKvRXLRyoWo5uqPKHkGt+KlU6hI4fe4nO8SADYQ8EaCnMZ9cS7It2HqSQPO5z2nILX54SqxRplGMS955H6+DeFntzNVKa3XCAHLFni12JOa1CkC2IhF0sHZrstw957rfShT4zpGkK3NwviEytNS27NavQhvx0i3fc2Jv+fK/cXT5yPohccXUd0CgJQrPpWBegvnMAvD6yHDkR6aWMdcWTtxN3VYiS0dVjkM/udzxyQ7f9Tr162ax5zQG6H/XrERp25dxdn7VxESqEObBs3QJrwZoiNcH0pJAoAk5tm2lPg3xtEWy5gKyoFgXMIg61Gv7WltjEJa/62SquXPXo/QS+xttierf2nqd1hVuBHpwVddytKmqC1GaoZgUuchaBRU3ahiAoC4GcfMYRaF5xt/iOygbnLwsVsd6KLHlP4jHd7HFHXFyX5rJfU2vT2dubOi3K/+ermw/Qw5WRh2Yapbx9dkqC3XYYrfRMzq+ab1FRcASq/dhfqT9ySFy9QNhCH8XWEF6tIAV+F/UukELI5jdP+Gvc5UM7fLcITPFEujJzINGHxrHEyBlecQIk9nYyx29VwM1V1TocU+JLhjkjdtBcIy3e9hjYGtcLzZAhEZ6hwt3fShO372DwsA1PxR/4f04rFG2QnJsL+cyzIO5fq2ZwbVyvk23pQWVO0PjLAc+e0ah7zganKeKLCv1RaW3HX2PZ32jXqtt5P8rB0AbwFo/nKd0NZv2A+zsDt4l8f2VNU/0cnSpzAe+wcsZjJjRQF9k2TkquV5PlCz+WMz1vbQ1Rgc7b724QUAdogtnobHenu0+m3yWwFA/2Eh2Rqm9l2G7kv32xk5bwd3RW3AmpiFTouECYANh6H7huPGjwAAKPy3uOAcjZgr2AVBFQCalDRDZjz7NmrpG5Ot58iuHjkDwP7c3153JgA4ewAiEcCQnYWYm47NKJKJbiG3s7S1ipemuoob2mtMTFQBgCgX+M3FH7oPlRyUN3M9wtwcHcsZADPix+By4zNOtplR8SGSe77l1ma8KcC8ep3k3/DVnEB9MqbqV+T49R3moXtTx8MoAsqqtJ1YqXZsXNnzcgAAVYWX+0nnooJteoRsdg6FxDRHE4tzER8xUVcXCdwBgLULoJZ6wPjRTJXzEyYhdHQck85G0P/AFBzTHcagglfxZa/pkp3IExkGJPxjLIoDi5z4OwCA3p5/do/btiG9l1Iot3476JvO4VaiLhHWFgBWmyW+y2ynFzSJRcgK/sWzNHUnFpr+irPdt3JdQCUQxP/s2MQi2ZwAwAppNMhdZ+tpBABPJ7AgKQUh2Y6XMV2BX6QXQKnlzn8vQYvRM61/wcXzTD280ikdOAGAR6HC91PQIMtZoacRANRavd/7mKT9ee/+2/7+Qurv+W0T2ddivMC5ZzIi6uxAh1TgBAAehdydbd/W9sWlRvK8G+AuBfCmTUyczEwD1uj66I9wpEBQeCwDDZZU/z0B/VEvVi3jKiITD83CLk11A+n/AQydRHzZTK11AAAAAElFTkSuQmCC' + ] + this.presentTextures = []; + this.presentMaterials = []; + + for(var i in this.wrappingImages) + { + var presentTexture = new TextureLoader().load(this.wrappingImages[i]); + presentTexture.wrapS = RepeatWrapping; + presentTexture.wrapT = RepeatWrapping; + presentTexture.repeat.set(3, 3); + + + + this.presentTextures.push(presentTexture); + + this.presentMaterials.push(new MeshPhongMaterial( { shininess: 100, map: presentTexture } )); + + } + + this.boxGeometry = new BoxBufferGeometry(1, 1, 1); + this.greyMaterial = new MeshPhongMaterial( {color: 0xeeeeee, shininess: 30} ) + + this.container; + this.scene; + this.plane; + this.renderer; + this.width = 0; + this.height = 0; + this.lookAtHelper; + this.stageSize; + + this.cameraTarget; + this.camera; + + this.scale = scale; + this.stageSize = stageSize; + + Cache.enabled = true; + + // SCENE + + this.scene = new Scene(); + this.scene.background = new Color( 0x424874 ); + this.scene.fog = new Fog(0x424874, 100, 200); + // this.scene.add(new AxisHelper()); + + // LIGHTS + + this.scene.add( new HemisphereLight(0xfefeff, 0xeeeeff, 0.4 )); + + const ambientLight = new PointLight( 0xffffff, 0.1); + ambientLight.position.set(20, -10, 20) + this.scene.add( ambientLight ); + + const shadowLight = new PointLight( 0xffffff, 0.6, 100 ); + shadowLight.position.set( 10, 0, 4 ); + shadowLight.castShadow = true; + shadowLight.shadow.radius = 16; + shadowLight.shadow.mapSize.width = 2048; + shadowLight.shadow.mapSize.height = 2048; + this.scene.add( shadowLight ); + + this.cannonLight = new PointLight( 0xEDB458, 0, 100, 2); + this.cannonLight.position.set(28, -20, 28) + this.cannonLight.castShadow = true; + this.cannonLight.shadow.radius = 2; + this.cannonLight.shadow.mapSize.width = 256; + this.cannonLight.shadow.mapSize.height = 256; + this.scene.add( this.cannonLight ); + + // FLOOR + + this.plane = new Mesh( + new PlaneBufferGeometry( 1000 * this.scale, 1000 * this.scale ), + new MeshPhongMaterial ( { color: 0xDCD6F7} ) + ); + this.plane.position.set(-10, -30.5, -10); + this.plane.receiveShadow = true; + this.plane.rotation.x = -Math.PI / 2; + this.scene.add( this.plane ); + + // RENDERER + + this.renderer = new WebGLRenderer( { antialias: true } ); + console.log('pixel ratio:', window.devicePixelRatio) + // this.renderer.setPixelRatio( window.devicePixelRatio ); + this.renderer.setSize( window.innerWidth, window.innerHeight ); + this.renderer.shadowMap.enabled = true; + this.renderer.shadowMap.type = PCFSoftShadowMap; + + // CONTAINER + + this.container = document.getElementById( 'canvas-container' ); + this.container.appendChild( this.renderer.domElement ); + if(this.showStats) this.container.appendChild( this.stats.dom ); + + // CAMERA + + this.camera = new PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 5, 400 ); + this.camera.position.set(55, 15, 55); + this.cameraTarget = new Vector3( 0, -22, 0 ); + // this.camera.position.set(65, -20, 20); + // this.cameraTarget = new Vector3( 30, -25, 30 ); + + let center = new Vector3((this.stageSize.left + (this.stageSize.width / 2)) * scale, (this.stageSize.top - (this.stageSize.height / 2)) * scale, 0) + const previewCameraDistance = 70 * scale; + + // this.lookAtHelper = this.createBall(0.5, new Color(0xffffff)); + + // let stageSizeHelper = new Mesh( + // new PlaneBufferGeometry( this.stageSize.width * this.scale, this.stageSize.height * this.scale, Math.floor(this.stageSize.width / 5), Math.floor(this.stageSize.height / 5) ), + // new MeshPhongMaterial ( { color: 0xaaddff, wireframe: false} ) + // ); + // stageSizeHelper.position.set(this.stageSize.left * this.scale, this.stageSize.top * this.scale, 0); + // stageSizeHelper.applyMatrix4( new THREE.Matrix4().makeTranslation( (this.stageSize.width / 2), -this.stageSize.height / 2, 0 ) ); + // this.scene.add( stageSizeHelper ); + + // ROOM + + this.lights = []; + + let colors = [0xff0000, 0x00ff00, 0x0000ff, 0xffff00, 0xff00ff, 0x00ffff]; + + for (let i = 0; i < 3; i++) { + + let group = new Group(); + group.position.x = 1000; + + let color = colors[Math.floor(Math.random() * colors.length)]; + let light = new PointLight(color, 0.5, 50, 1.7 ); + // gsap.timeline({ repeat: -1}).to(light, {intensity: 0.7, duration: 0.2}).to(light, {intensity: 0.5, duration: 0.2}).to(light, {intensity: 0.8, duration: 0.2}) + group.add(light); + + let geometry = new IcosahedronBufferGeometry(0.5, 4); + let material = new MeshPhongMaterial ( { color: color, wireframe: false } ); + let mesh = new Mesh( geometry, material ); + mesh.castShadow = true; + group.add(mesh); + + this.scene.add(group); + this.lights.push(group); + } + + + ///================= + // SOFA + ///================= + + let sofaGroup = new Group(); + sofaGroup.position.y = 1000; + this.scene.add(sofaGroup); + + var sofaLoader = new GLTFLoader(manager); + sofaLoader.load("https://assets.codepen.io/557388/sofa.glb", object => { + + object.scene.rotation.y = Math.PI * 0.5; + let mat = new MeshPhongMaterial ( { color: 0xffffff } ); + + sofaGroup.add( object.scene ); + + object.scene.traverse( function( child ) { + + if ( child.isMesh ) { + child.position.set(0, 0, 0); + child.castShadow = true; + child.receiveShadow = true; + child.material = mat; + } + else if(child.isLight) + { + child.visible = false;//child.intensity = 0; + } + + } ); + + this.models.sofa = sofaGroup; + }); + + ///================= + // TREE + ///================= + + let treeGroup = new Group(); + treeGroup.position.y = 1000; + this.scene.add( treeGroup ); + + var treeLoader = new GLTFLoader(manager); + treeLoader.load("https://assets.codepen.io/557388/PineTree.gltf", object => { + + object.scene.position.set(0, 0, -17); + object.scene.scale.set(1.2, 1.2, 1.2); + object.scene.rotation.x = Math.PI * 0.5; + + treeGroup.add( object.scene ); + treeGroup.position.y = 1000; + + object.scene.traverse( function( child ) { + + let mat = new MeshPhongMaterial ( { color: 0x99dd66 } ); + if ( child.isMesh ) { + child.castShadow = true; + child.receiveShadow = true; + child.material = mat; + } + else if(child.isLight) + { + child.visible = false;//child.intensity = 0; + } + + } ); + + this.models.tree = treeGroup; + }); + + ///================= + // FIREPLACE + ///================= + + let fireplaceGroup = new Group(); + this.scene.add( fireplaceGroup ); + + var fireplaceLoader = new GLTFLoader(manager); + fireplaceLoader.load("https://assets.codepen.io/557388/fireplace.gltf", object => { + + object.scene.position.set(0, -29, -19.5); + object.scene.scale.set(4, 4, 4); + object.scene.rotation.y = -Math.PI * 0.5; + fireplaceGroup.add( object.scene ); + + + + object.scene.traverse( function( child ) { + + let mat = new MeshPhongMaterial ( { color: 0xffffff } ); + if ( child.isMesh ) { + child.castShadow = true; + child.receiveShadow = true; + child.material = mat; + } + else if(child.isLight) + { + child.visible = false;//child.intensity = 0; + } + + } ); + + this.models.fireplace = fireplaceGroup; + }); + + ///================= + // TABLE + ///================= + + let tableGroup = new Group(); + tableGroup.position.y = 1000; + this.scene.add( tableGroup ); + + var tableLoader = new GLTFLoader(manager); + tableLoader.load("https://assets.codepen.io/557388/table.gltf", object => { + + object.scene.position.set(0, -6.3, 0); + object.scene.scale.set(2, 2, 2); + tableGroup.add( object.scene ); + + object.scene.traverse( function( child ) { + + let mat = new MeshPhongMaterial ( { color: 0xffffff } ); + if ( child.isMesh ) { + child.castShadow = true; + child.receiveShadow = true; + child.material = mat; + } + else if(child.isLight) + { + child.visible = false; + // child.intensity = 0; + } + + } ); + + this.models.table = tableGroup; + }); + + ///================= + // TV STAND + ///================= + + let standGroup = new Group(); + standGroup.position.y = 1000; + this.scene.add( standGroup ); + + var tableLoader = new GLTFLoader(manager); + tableLoader.load("https://assets.codepen.io/557388/stand.gltf", object => { + + object.scene.rotation.y = Math.PI * 0.5; + standGroup.add( object.scene ); + + object.scene.traverse( function( child ) { + + let mat = new MeshPhongMaterial ( { color: 0xffffff } ); + if ( child.isMesh ) { + child.castShadow = true; + child.receiveShadow = true; + child.material = mat; + } + else if(child.isLight) + { + child.visible = false;//child.intensity = 0; + } + + } ); + + this.models.stand = standGroup; + }); + + ///================= + // TV + ///================= + + let tvGroup = new Group(); + tvGroup.position.y = 1000; + this.scene.add( tvGroup ); + + var tableLoader = new GLTFLoader(manager); + tableLoader.load("https://assets.codepen.io/557388/tv.gltf", object => { + + object.scene.scale.set(2, 2, 2); + object.scene.rotation.y = Math.PI * 0.5; + tvGroup.add( object.scene ); + + object.scene.traverse( function( child ) { + + let mat = new MeshPhongMaterial ( { color: 0xffffff } ); + if ( child.isMesh ) { + child.castShadow = true; + child.receiveShadow = true; + child.material = mat; + } + else if(child.isLight) + { + child.visible = false;//child.intensity = 0; + } + + } ); + + this.models.tv = tvGroup; + }); + + ///================= + // POT + ///================= + + let potGroup = new Group(); + potGroup.position.y = 1000; + this.scene.add( potGroup ); + + var tableLoader = new GLTFLoader(manager); + tableLoader.load("https://assets.codepen.io/557388/pot.gltf", object => { + + object.scene.position.set(0, 0, -15); + object.scene.scale.set(6, 6, 6); + object.scene.rotation.x = Math.PI * 0.5; + potGroup.add( object.scene ); + + object.scene.traverse( function( child ) { + + let mat = new MeshPhongMaterial ( { color: 0xB2967D } ); + if ( child.isMesh ) { + child.castShadow = true; + child.receiveShadow = true; + child.material = mat; + } + else if(child.isLight) + { + child.visible = false;//child.intensity = 0; + } + + } ); + + this.models.pot = potGroup; + }); + + ///================= + // CANNON + ///================= + + let cannonGroup = new Group(); + this.scene.add( cannonGroup ); + + var tableLoader = new GLTFLoader(manager); + tableLoader.load("https://assets.codepen.io/557388/cannon2.gltf", object => { + + object.scene.position.set(30, -30, 30); + object.scene.scale.set(3, 3, 3); + object.scene.rotation.y = Math.PI * 1.25; + cannonGroup.add( object.scene ); + + object.scene.traverse( function( child ) { + + if ( child.isMesh ) { + child.castShadow = true; + } + if(child.isLight) + { + child.visible = false;//child.intensity = 0; + } + + } ); + + this.models.cannon = cannonGroup; + }); + + + ///================= + // SNOWMAN + ///================= + + let snowmanGroup = new Group(); + snowmanGroup.position.y = 1000; + this.scene.add( snowmanGroup ); + + var snowmanLoader = new GLTFLoader(manager); + snowmanLoader.load("https://assets.codepen.io/557388/snowman.gltf", object => { + + //object.scene.position.set(30, -30, 30); + object.scene.scale.set(2.5, 2.5, 2.5); + // object.scene.rotation.y = Math.PI * 1.25; + snowmanGroup.add( object.scene ); + + object.scene.traverse( function( child ) { + + if ( child.isMesh ) { + child.castShadow = true; + } + if(child.isLight) + { + child.visible = false;//child.intensity = 0; + } + + } ); + + this.models.snowman = snowmanGroup; + }); + + ///================= + // STAR + ///================= + + let starGroup = new Group(); + starGroup.position.y = 1000; + this.scene.add( starGroup ); + + var starLoader = new GLTFLoader(manager); + starLoader.load("https://assets.codepen.io/557388/star.gltf", object => { + + object.scene.position.set(-1, 0, 0); + object.scene.scale.set(0.01, 0.01, 0.01); + object.scene.rotation.y = Math.PI * .5; + starGroup.add( object.scene ); + + object.scene.traverse( function( child ) { + + if ( child.isMesh ) { + child.castShadow = true; + } + if(child.isLight) + { + child.visible = false; + // child.intensity = 0; + + } + + } ); + + this.models.star = starGroup; + }); + + + + this.onResize(); + } + + setPlane(physicsPlane) + { + this.plane.position.copy(physicsPlane.position); + this.plane.quaternion.copy(physicsPlane.quaternion); + } + + render() + { + this.camera.lookAt( this.cameraTarget ); + this.renderer.render( this.scene, this.camera ); + + if(this.showStats) this.stats.update(); + } + + onResize() + { + this.camera.aspect = window.innerWidth / window.innerHeight; + + this.camera.updateProjectionMatrix(); + this.renderer.setSize( window.innerWidth, window.innerHeight ); + + var aspect = window.innerWidth / window.innerHeight; + this.width = window.innerWidth; + this.height = window.innerHeight; + + } + + createBox(width, height, depth, color = 0xffffff, present = false) + { + //let geometry = new BoxBufferGeometry( width * this.scale, height * this.scale, depth * this.scale ); + //let texture = present ? this.presentTextures[Math.floor(Math.random() * this.presentTextures.length)] : null; + //let material = new MeshPhongMaterial( { color: color, shininess: present ? 100 : 30, map: texture } ); + let material = present ? + this.presentMaterials[Math.floor(Math.random() * this.presentMaterials.length)] + : this.greyMaterial + let mesh = new Mesh( this.boxGeometry, material ); + mesh.scale.set(width, height, depth) + mesh.castShadow = true; + mesh.receiveShadow = true; + this.scene.add(mesh); + return mesh; + } + + createSphere(radius, color) + { + let geometry = new IcosahedronBufferGeometry(radius, 3); + let material = new MeshPhongMaterial( { color: color, shininess: 30 } ); + let mesh = new Mesh( geometry, material ); + mesh.castShadow = true; + mesh.receiveShadow = true; + this.scene.add(mesh); + return mesh; + } + + createBall(size, color, light = false) + { + + if(light && this.lights.length) + { + return this.lights.shift(); + } + + let group = new Group(); + let material = new MeshPhongMaterial ( { color: color, wireframe: false } ); + let ball = new IcosahedronBufferGeometry(size, 4); + let mesh = new Mesh( ball, material ); + mesh.castShadow = true; + group.add(mesh); + + if(!light) + { + let cap = new CylinderBufferGeometry( size / 2, size / 2, size, 5 ); + let capMat = new MeshPhongMaterial ( { color: 0xFFD338, wireframe: false } ); + let capMesh = new Mesh( cap, capMat ); + capMesh.castShadow = true; + capMesh.position.y = size * 0.75; + group.add(capMesh); + + } + + this.scene.add(group); + return group; + } + + createCylinder(radiusTop, radiusBottom, height, numSegments) + { + const group = new Group(); + const geometry = new CylinderBufferGeometry( radiusTop, radiusBottom, height, numSegments ); + const material = new MeshPhongMaterial( { color: 0xff0000 } ); + const cylinder = new Mesh( geometry, material ); + // cylinder.position.set(x, y, z + cylinder.rotation.x = Math.PI * 0.5; + group.add(cylinder); + this.scene.add(group); + return group; + } + + +} + +const PHYSICS_MATERIAL = { + lowBounce: 'lowbounce', + normalBounce: 'normalbounce', + highBounce: 'highbounce', +} + +class Physics +{ + constructor(scale = 1, stageSize) + { + this.scale = 1; + this.stageSize; + + this.scale = scale; + this.stageSize = stageSize; + + this.materials = {}; + + let mainMaterial = new CANNON.Material('main'); + mainMaterial.friction = 1; + + this.materials[PHYSICS_MATERIAL.lowBounce] = new CANNON.ContactMaterial(mainMaterial, mainMaterial, {friction: 2, restitution: 0 + extraBounce }); + this.materials[PHYSICS_MATERIAL.normalBounce] = new CANNON.ContactMaterial(mainMaterial, mainMaterial, {friction: 2, restitution: 0 + extraBounce }); + this.materials[PHYSICS_MATERIAL.highBounce] = new CANNON.ContactMaterial(mainMaterial, mainMaterial, {friction: 2, restitution: 1.5 + extraBounce }); + + // WORLD + + this.world = new CANNON.World(); + this.world.gravity.set(0, -60 * this.scale, 0); + this.world.broadphase = new CANNON.SAPBroadphase(this.world); + this.world.solver.iterations = 4; + this.world.allowSleep = true; + + this.world.addContactMaterial(this.materials[PHYSICS_MATERIAL.lowBounce]); + this.world.addContactMaterial(this.materials[PHYSICS_MATERIAL.normalBounce]); + this.world.addContactMaterial(this.materials[PHYSICS_MATERIAL.highBounce]); + + // GROUND + + this.groundBody = new CANNON.Body({mass: 0, material: mainMaterial}); + let groundShape = new CANNON.Plane(); + this.groundBody.addShape(groundShape); + var rotate = new CANNON.Vec3(1,0,0) + this.groundBody.quaternion.setFromAxisAngle(rotate, - (Math.PI/2)) + this.groundBody.position.set(0, (this.stageSize.top - this.stageSize.height) * scale, 0) + this.world.addBody(this.groundBody); + + } + + createBody(mass, position, rotation, material = PHYSICS_MATERIAL.normalBounce) + { + let body = new CANNON.Body({ + type: mass == 0 ? CANNON.Body.KINEMATIC : CANNON.Body.DYNAMIC, + material: this.materials[material], + mass: mass * this.scale, + position: new CANNON.Vec3(position.x * this.scale, position.y * this.scale, position.z * this.scale), // m + }); + + Object.keys(rotation || {}).forEach(key => + { + this.setAngle(body, rotation[key], key); + }) + this.world.addBody(body); + + return body; + } + + createBoxShape(width, height, depth) + { + return new CANNON.Box(new CANNON.Vec3(width / 2 * this.scale, height / 2 * this.scale, depth / 2 * this.scale)); + } + + createCylinderShape(radiusTop, radiusBottom, height, segments) + { + return new CANNON.Cylinder(radiusTop, radiusBottom, height, segments); + } + + createSphereShape(radius) + { + return new CANNON.Sphere(radius); + } + + // createCylinder(x, y, z, radiusTop, radiusBottom, height, numSegments) + // { + // let shape = new CANNON.Cylinder(radiusTop, radiusBottom, height, numSegments); + + // let body = new CANNON.Body({ + // material: this.materials[PHYSICS_MATERIAL.normalBounce], + // mass: 15 * this.scale, + // position: new CANNON.Vec3(x * this.scale, y * this.scale, z * this.scale), // m + // }); + // body.addShape(shape); + // this.setAngle(body, -Math.PI * 0.5, 'x'); + + // this.world.addBody(body); + + // return body; + // } + + createBox(width, height, depth, x, y, z, mass = 0, rotation = 0, trigger) + { + let shape = new CANNON.Box(new CANNON.Vec3(width / 2 * this.scale, height / 2 * this.scale, depth / 2 * this.scale)); + let body = new CANNON.Body({ + type: mass == 0 ? CANNON.Body.KINEMATIC : CANNON.Body.DYNAMIC, + material: this.materials[PHYSICS_MATERIAL.normalBounce], + mass: mass * this.scale, + position: new CANNON.Vec3(x * this.scale, y * this.scale, z * this.scale), // m + }); + body.addShape(shape); + body.collisionResponse = trigger ? false : true; + + if(trigger) + { + body.addEventListener('collide', () => trigger()) + } + + this.setAngle(body, rotation); + + this.world.addBody(body); + + return body; + } + + setAngle(body, rotation, direction = 'z', ) + { + let q = new CANNON.Quaternion(); + let x = direction === 'x' ? 1 : 0 + let y = direction === 'y' ? 1 : 0 + let z = direction === 'z' ? 1 : 0 + q.setFromAxisAngle(new CANNON.Vec3(x,y,z), rotation); + body.quaternion = q.mult(body.quaternion); + } + + createBall(size, x = 0, y = 0, z = 0) + { + let shape = new CANNON.Sphere(size); + let body = new CANNON.Body({ + material: this.materials[PHYSICS_MATERIAL.highBounce], + mass: 1 * this.scale, + position: new CANNON.Vec3(x * this.scale, y * this.scale, z * this.scale), // m + }); + body.addShape(shape); + + this.world.addBody(body); + + return body; + } + + createCylinder(x, y, z, radiusTop, radiusBottom, height, numSegments) + { + let shape = new CANNON.Cylinder(radiusTop, radiusBottom, height, numSegments); + + let body = new CANNON.Body({ + material: this.materials[PHYSICS_MATERIAL.normalBounce], + mass: 15 * this.scale, + position: new CANNON.Vec3(x * this.scale, y * this.scale, z * this.scale), // m + }); + body.addShape(shape); + this.setAngle(body, -Math.PI * 0.5, 'x'); + + this.world.addBody(body); + + return body; + } + + remove(body) + { + this.world.remove(body); + } + + tick(delta) + { + this.world.step(1/60, delta, 3); + } +} + + +console.clear(); + +const DIRECTION = { + left: 'LEFT', + right: 'RIGHT' +} + +const GAME_STATE = { + loading: 'loading', + intro: 'intro', + waiting: 'waiting', + game: 'game' +} + +let sounds = { + fire: [new Audio('https://assets.codepen.io/557388/fire_01.mp3'), new Audio('https://assets.codepen.io/557388/fire_02.mp3')], + bells: [new Audio('https://assets.codepen.io/557388/bells_01.mp3')], + bing: [new Audio('https://assets.codepen.io/557388/bing_01.mp3'), new Audio('https://assets.codepen.io/557388/bing_02.mp3')] +}; + +let gameState = GAME_STATE.loading; + +let physicsItems = []; +let stage; +let physics; + +let mousePos = {x: 0, y: 0}; + + + +let count = 0; +let cannonFlash; +let cannonRecoil; +let stars = []; + +const introSteps = [init, prepUI, loadComplete, dropIn, createClickListeners, introRoom, introCannon, introStart, startGame]; + +function next() +{ + if(introSteps.length) + { + introSteps.shift()(); + } +} + +function loadComplete() +{ + const loadingScreen = document.querySelector('#loading'); + loadingScreen.innerHTML = ''; + setState(GAME_STATE.intro); + + gsap.to(loadingScreen, {autoAlpha: 0, duration: 1.5}); + setTimeout(() => next(), 1000); +} + +function prepUI() +{ + gsap.set('#steve', {y: '50%', scale: 0, rotation: 45}); + gsap.set('#bubble', {transformOrigin: '100% 50%', autoAlpha: 0, x:'+=50', rotation: 5, scale: 0.9}) + + next(); +} + +function dropIn() +{ + createSofa(); + createTable(); + createStand(); + createTV(); + + next(); +} + +function setState(newState) +{ + gameState = newState; + document.body.setAttribute('class', gameState); +} + +function onMouseMove(event) +{ + mousePos = {x: event.clientX, y: event.clientY}; +} + +function createClickListeners() +{ + document.addEventListener( 'keypress', onClick, false ); + document.addEventListener( 'click', onClick, false ); + document.addEventListener( 'mousemove', onMouseMove, false ); + + next(); +} + +function introRoom() +{ + setState(GAME_STATE.intro); + let roomTL = gsap.timeline({onComplete: () => setState(GAME_STATE.waiting)}); + roomTL.to('#steve', {delay:1, y: 0, rotation: 0, scale: 1, ease: 'power4.out', duration: 0.6, onComplete:() => playSound('bing')}) + roomTL.fromTo('#bubble', {autoAlpha: 0, y: 0, x:'+=50', rotation: 5, scale: 0.9}, {autoAlpha: 1, rotation: 0, scale: 1, x:0, ease: 'elastic', duration: 1}) + +} + +function introCannon() +{ + setState(GAME_STATE.intro); + const steveEl = document.querySelector('#steve'); + const textEl = document.querySelector('#text'); + const textHighlightEl = document.querySelector('#text-highlight'); + + let cannonTL = gsap.timeline({onComplete: () => setState(GAME_STATE.waiting), defaults: { ease: 'power4.easeInOut', duration: .8}}); + cannonTL.to(stage.camera.position, {x: 65, y: -20, z: 20}) + cannonTL.to(stage.cameraTarget, {x: 30, y: -25, z: 30}, 0) + cannonTL.to('#bubble', {autoAlpha: 0, y:'-=30', scale: 0.5, duration: 0.3, ease: 'power2.in'}, 0); + cannonTL.to(steveEl, {y: '-=20', duration: 0.1, onComplete: () => { + steveEl.setAttribute('src', 'https://assets.codepen.io/557388/happy.svg'); + textEl.textContent = "But wait, we have this "; + textHighlightEl.textContent = "Christmas Cannon!!"; + setTimeout(() => playSound('bing'),300); + + }}, 0.5) + cannonTL.fromTo('#bubble', {autoAlpha: 0, y: 0, x:'+=50', rotation: 5, scale: 0.9}, {autoAlpha: 1, rotation: 0, scale: 1, x:0, ease: 'elastic', duration: 1}); + cannonTL.to(steveEl, {y: 0, duration: .7, ease: 'bounce'}, 0.6); +} + +function introStart() +{ + setState(GAME_STATE.intro); + const steveEl = document.querySelector('#steve'); + const textEl = document.querySelector('#text'); + const textHighlightEl = document.querySelector('#text-highlight'); + + let cannonTL = gsap.timeline({onComplete: () => setState(GAME_STATE.game), defaults: { ease: 'power4.easeInOut', duration: .8}}); + cannonTL.to(stage.camera.position, {x: 55, y: 15, z: 55}) + cannonTL.to(stage.cameraTarget, {x: 0, y: -22, z: 0, duration: 1.4}, 0) + cannonTL.to('#bubble', {autoAlpha: 0, y:'-=30', scale: 0.5, duration: 0.3, ease: 'power2.in'}, 0); + cannonTL.to(steveEl, {y: '-=20', duration: 0.1, onComplete: () => { + steveEl.setAttribute('src', 'https://assets.codepen.io/557388/steve.svg'); + textEl.textContent = "Click or tap to fire the Christmas Cannon, letโ€™s make this room more festive!!"; + textHighlightEl.textContent = ""; + setTimeout(() => playSound('bing'),700); + }}, 0.5) + cannonTL.fromTo('#bubble', {autoAlpha: 0, y: 0, x:'+=50', rotation: 5, scale: 0.9}, {autoAlpha: 1, rotation: 0, scale: 1, x:0, ease: 'elastic', duration: 1}); + cannonTL.to(steveEl, {y: 0, duration: .7, ease: 'bounce'}, 0.6); +} + +function endMessage() +{ + const steveEl = document.querySelector('#steve'); + const textEl = document.querySelector('#text'); + const textHighlightEl = document.querySelector('#text-highlight'); + + let changed = false; + steveEl.addEventListener('click', (event) => { + event.stopPropagation(); + if(!changed) + { + changed = true; + let steveTL = gsap.timeline(); + steveTL.to(steveEl, {y: '-=40', duration: 0.1, onComplete: () => { + steveEl.setAttribute('src', 'https://assets.codepen.io/557388/snowman.svg'); + }}, 0) + steveTL.to(steveEl, {y: 0, duration: .7, ease: 'bounce'}, 0.1); + } + else window.open('https://ste.vg/pJ96mS5DC','_blank'); + }) + + textEl.addEventListener('click', (event) => { + event.stopPropagation(); + startGame(); + // window.open('https://www.twitter.com/steeevg/','_blank'); + }) + + // steveEl.setAttribute('src', 'https://assets.codepen.io/557388/snowman.svg'); + textEl.innerHTML = `Yay! So much better.` + + +// Be sure to send a screenshot to @steeevg, heโ€™d love to see it!`; + textHighlightEl.textContent = "Merry Christmas!"; + + let roomTL = gsap.timeline(); + setTimeout(() => playSound('bing'),700); + roomTL.to('#steve', {y: 0, rotation: 0, scale: 1, ease: 'power4.out', duration: 0.6}) + roomTL.fromTo('#bubble', {autoAlpha: 0, y: 0, x:'+=50', rotation: 5, scale: 0.9}, {autoAlpha: 1, rotation: 0, scale: 1, x:0, ease: 'elastic', duration: 1}) +} + +function hideEndMessage() +{ + +} + +function playSound(name) +{ + let options = sounds[name]; + if(options) + { + let sound = options[Math.floor(Math.random() * options.length)]; + sound.currentTime = 0; + sound.play(); + } +} + +function startGame() +{ + setState(GAME_STATE.game); + + let gameStartTL = gsap.timeline({defaults: { ease: 'power4.easeInOut', duration: .5}}); + gameStartTL.to('#bubble', {autoAlpha: 0, y:'-=30', scale: 0.5, duration: 0.3, ease: 'power2.in'}, 0); + gameStartTL.to('#steve', {y: '100%', scale: 0, rotation: 45}, 0) +} + +function onClick(event) +{ + if(event) event.preventDefault(); + + let coords = { + x: event.clientX || mousePos.x, + y: event.clientY || mousePos.y + } + + + switch(gameState) + { + case GAME_STATE.waiting: + next(); + break; + case GAME_STATE.game: + fire(coords); + break; + default: + return; + } + +} + +function fire(coords) +{ + if(count === 0) next(); + count++; + let item; + + let randomItems = [addBall, createStar]; + + if(count === 50) item = createSnowman(); + else if(count === 10) item = createTree(); + else if(stars.length && Math.random() > 0.8) item = createStar(); //randomItems[Math.floor(Math.random() * randomItems.length)](); + else item = addBall(); + + if(count === 100) + { + setTimeout(() => endMessage(), 1000); + } + + playSound('fire'); + // if(Math.random() > 0.8) playSound('bells'); + + let range = stage.height * 0.4; + let x = -60; + // let y = 20; + let z = -60; + + let xStart = (stage.width / 2) - range; + let xEnd = (stage.width / 2) + range; + if(coords.x > stage.width / 2) + { + if(coords.x > xEnd) x = -20; + else + { + let r = coords.x - (stage.width / 2) + x = -20 + ((range - r) / range) * -40; + } + } + + // let yStart = (stage.width / 2); + if(coords.x < stage.width / 2) + { + if(coords.x < xStart) z = -20; + else + { + let r = coords.x - xStart; + z = -20 + (r / range) * -40; + } + } + + let hRange = 100; + let y = 60 - (coords.y / stage.height) * hRange; + + item.physics.velocity.set(x * powerMultiplier, y, z * powerMultiplier) + const angularRandomness = 10; + item.physics.angularVelocity.set( + ((Math.random() * angularRandomness) - (angularRandomness/2)), + ((Math.random() * angularRandomness) - (angularRandomness/2)), + ((Math.random() * angularRandomness) - (angularRandomness/2))) + item.physics.angularDamping = 0.8; + + cannonFlash.restart(); + cannonRecoil.restart(); +} + +function onReady() +{ + // createTree(); + + setState(GAME_STATE.intro); + + cannonFlash = gsap.timeline(); + cannonFlash.fromTo(stage.cannonLight, {intensity: 2}, {intensity: 0, duration: .3}); + + cannonRecoil = gsap.timeline(); + cannonRecoil.to(stage.models.cannon.position, {x: '+=3', z: '+=3', duration: 0.1, ease: 'Power2.out'}).to(stage.models.cannon.position, {x: '-=3', z: '-=3', duration: 0.4}) + // cannonFlash.stop(); + + for (let i = 0; i < 20; i++) { + let star = stage.models.star.clone(); + stars.push(star); + stage.scene.add(star); + + } + + setTimeout(() => { + animate(); + next(); + },100) + +} + + + + +function addBall() +{ + // gsap.to(stage.cameraTarget, {x: stageSize.left + (stageSize.width * 0.5), ease: 'Power4.inOut', duration: 1}) + + + + let x = 35; + let y = -15; + let z = 35; + + let width = 1 + Math.random() * 4; + let height = 1 + Math.random() * 4; + let depth = 1 + Math.random() * 4; + + let isBall = Math.random() > 0.5; + + let light = Math.random() > 0.8; + var size = light ? .5 : .8; + + var physicsItem = { + mesh: isBall ? stage.createBall(size, showGuides ? 0xFF0000 : Math.random() * 0xFFFFFF, light) : stage.createBox(width, height, depth, showGuides ? 0xFF0000 : 0xFFFFFF, !showGuides), + physics: isBall ? physics.createBall(size, x, y, z) : physics.createBox(width, height, depth, x, y, z, 2), + previousPosition: new CANNON.Vec3(x, y, z), + rotation: 0, + rotationVelocity: 0 + } + + // physicsItem.physics.velocity.set(-20 - (Math.random() * 50), 1 + (Math.random() * 10), -20 - (Math.random() * 50)) + + + // -60 => -20 + + // 10 => 30 + + // -20 => -60 + + // physicsItem.physics.velocity.set(-60, 10, -60) + // const angularRandomness = 10; + // physicsItem.physics.angularVelocity.set( + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2))) + // physicsItem.physics.angularDamping = 0.8; + + physicsItems.push(physicsItem); + + return physicsItem; + + // if(pauseTimer) clearTimeout(pauseTimer); + // pauseTimer = setTimeout( _ => doPhysics = false, 7000); +} + +function createStaticBox(settings) +{ + // const z = 1; + var physicsItem = { + mesh: settings.show ? stage.createBox(settings.width, settings.height, settings.depth, settings.color) : null, + physics: physics.createBox(settings.width, settings.height, settings.depth, settings.x, settings.y, settings.z, 0, settings.rotation, settings.trigger), + previousPosition: new CANNON.Vec3(settings.x, settings.y, settings.z), + rotation: settings.rotation, + rotationVelocity: 0 + } + physicsItems.push(physicsItem); + + return physicsItem +} + +const clock = new Clock(); +let oldElapsedTime = 0; + +function animate() +{ + const elapsedTime = clock.getElapsedTime(); + const delta = elapsedTime - oldElapsedTime; + oldElapsedTime = elapsedTime; + + physics.tick(delta) + + for(var i in physicsItems) + { + if(physicsItems[i].mesh) + { + physicsItems[i].mesh.position.copy(physicsItems[i].physics.position); + physicsItems[i].mesh.quaternion.copy(physicsItems[i].physics.quaternion); + } + + } + + stage.render(); + + requestAnimationFrame( animate ); +} + +function init() +{ + console.log('init()'); + + + + let worldScale = 1; + + let stageSize = { + left: -20, + width: 40, + top: 0, + height: 30 + } + + stage = new Stage(worldScale, stageSize, onReady, showGuides); + physics = new Physics(worldScale, stageSize); + + window.addEventListener( 'resize', () => { stage.onResize() }, false ); + + + + + let staticItems = [ + { + show: true, + x: stageSize.left, + y: -18.5, + z: 0, + width: 25, + height: 2, + depth: 40, + color: 0xcccccc, + rotation: Math.PI * 0.5, + }, + { + show: true, + x: stageSize.left + (stageSize.width / 2) - 0.5, + y: -18.5, + z: -20, + width: 41, + height: 25, + depth: 2, + color: 0xcccccc, + rotation: 0 + }, + { + show: true, + x: stageSize.left + (stageSize.width / 2), + y: -30, + z: 0, + width: 40, + height: 2, + depth: 40, + color: 0xcccccc, + rotation: 0 + }, + { + show: showGuides, + x: 5.5, + y: -25, + z: -18, + width: 3, + height: 14, + depth: 3, + color: 0xff0000, + rotation: 0 + }, + { + show: showGuides, + x: -5, + y: -25, + z: -18, + width: 3, + height: 14, + depth: 3, + color: 0xff0000, + rotation: 0 + }, + { + show: showGuides, + x: 0, + y: -19, + z: -18, + width: 10, + height: 2.5, + depth: 3, + color: 0xff0000, + rotation: 0 + }, + { + show: showGuides, + x: 0, + y: -17.7, + z: -18, + width: 15.2, + height: 0.5, + depth: 3.3, + color: 0xff0000, + rotation: 0 + } + + ] + + staticItems.forEach(settings => { + createStaticBox(settings); + }) + + + + + + + // addBall(); +} + +function createSofa() + { + let body = physics.createBody(5, {x: 12, y: -10, z: 2}, {y: Math.PI * 1.023, x: Math.PI * 0.01}, PHYSICS_MATERIAL.lowBounce); + + let shapes = [{ + show: false, + x: 0, + y: -1.5, + z: 0, + width: 9, + height: 2.6, + depth: 23.5, + rotation: 0 + }, + { + show: false, + x: -4, + y: 0, + z: 0, + width: 2.3, + height: 6, + depth: 23, + rotation: 0 + }, + { + show: false, + x: 0, + y: 0, + z: -10.3, + width: 9, + height: 2, + depth: 2.5, + rotation: 0 + }, + { + show: false, + x: 0, + y: 0, + z: 10.3, + width: 9, + height: 2, + depth: 2.5, + rotation: 0 + }, + { + show: false, + x: -2.2, + y: 2.8, + z: 0, + width: 3.5, + height: 1, + depth: 18.5, + rotation: -Math.PI * 0.4 + }]; + + stage.models.sofa.position.y = 0; + + let sofaGroup = new Group(); + sofaGroup.add(stage.models.sofa) + stage.scene.add(sofaGroup); + + shapes.forEach(box => { + let shape = physics.createBoxShape(box.width, box.height, box.depth); + + if(showGuides) + { + let b = stage.createBox(box.width, box.height, box.depth, 0xff0000); + b.position.set(box.x, box.y, box.z); + b.rotation.set(0, 0, box.rotation); + sofaGroup.add(b); + } + + body.addShape(shape, new CANNON.Vec3(box.x, box.y, box.z), new CANNON.Quaternion(0, 0, box.rotation)); + }) + + var physicsItem = { + mesh: sofaGroup, + physics: body, + } + + physicsItem.physics.velocity.set(0, -20, 0) + // const angularRandomness = 10; + // physicsItem.physics.angularVelocity.set( + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2))) + // physicsItem.physics.angularDamping = 0.8; + + physicsItems.push(physicsItem); + } + + function createTable() + { + let body = physics.createBody(3, {x: 0, y: -13, z: 2}, {y: -Math.PI * 1.013, x: Math.PI * 0.01}, PHYSICS_MATERIAL.lowBounce); + + let shapes = [ + { + x: 0.5, + y: -1.2, + z: 0, + width: 7, + height: 0.5, + depth: 16, + rotation: 0 + }, + { + x: 4, + y: -2.5, + z: 7.8, + width: 0.5, + height: 2.5, + depth: 0.5, + rotation: 0 + }, + { + x: 4, + y: -2.5, + z: -7.8, + width: 0.5, + height: 2.5, + depth: 0.5, + rotation: 0 + }, + { + x: -2.8, + y: -2.5, + z: 7.8, + width: 0.5, + height: 2.5, + depth: 0.5, + rotation: 0 + }, + { + x: -2.8, + y: -2.5, + z: -7.8, + width: 0.5, + height: 2.5, + depth: 0.5, + rotation: 0 + }, + ]; + + stage.models.table.position.y = 0; + + let tableGroup = new Group(); + tableGroup.add(stage.models.table) + stage.scene.add(tableGroup); + + shapes.forEach(box => { + let shape = physics.createBoxShape(box.width, box.height, box.depth); + + if(showGuides) + { + let b = stage.createBox(box.width, box.height, box.depth, 0xff0000); + b.position.set(box.x, box.y, box.z); + b.rotation.set(0, 0, box.rotation); + tableGroup.add(b); + } + + body.addShape(shape, new CANNON.Vec3(box.x, box.y, box.z), new CANNON.Quaternion(0, 0, box.rotation)); + }) + + var physicsItem = { + mesh: tableGroup, + physics: body, + } + + physicsItem.physics.velocity.set(0, -20, 0) + // const angularRandomness = 10; + // physicsItem.physics.angularVelocity.set( + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2))) + // physicsItem.physics.angularDamping = 0.8; + + physicsItems.push(physicsItem); + } + + function createStand() + { + let body = physics.createBody(6, {x: -16, y: -10, z: 0}, {y: -Math.PI * 0.001, x: Math.PI * 0.05}, PHYSICS_MATERIAL.lowBounce); + + let shapes = [ + { + x: 0, + y: 1.5, + z: 0, + width: 4.5, + height: 4.8, + depth: 18, + rotation: 0 + } + + ]; + + stage.models.stand.position.y = 0; + + let standGroup = new Group(); + standGroup.add(stage.models.stand) + stage.scene.add(standGroup); + + shapes.forEach(box => { + let shape = physics.createBoxShape(box.width, box.height, box.depth); + + if(showGuides) + { + let b = stage.createBox(box.width, box.height, box.depth, 0xff0000); + b.position.set(box.x, box.y, box.z); + b.rotation.set(0, 0, box.rotation); + standGroup.add(b); + } + + body.addShape(shape, new CANNON.Vec3(box.x, box.y, box.z), new CANNON.Quaternion(0, 0, box.rotation)); + }) + + var physicsItem = { + mesh: standGroup, + physics: body, + } + + physicsItem.physics.velocity.set(0, -20, 0) + // const angularRandomness = 10; + // physicsItem.physics.angularVelocity.set( + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2))) + // physicsItem.physics.angularDamping = 0.8; + + physicsItems.push(physicsItem); + } + + function createTV() + { + let body = physics.createBody(2, {x: -15.5, y: 0, z: 0}, {y: -Math.PI * 0.001, x: Math.PI * 0.001}, PHYSICS_MATERIAL.lowBounce); + + let shapes = [ + { + x: 0, + y: 4.5, + z: 0.5, + width: 1.5, + height: 9.5, + depth: 18, + rotation: 0 + }, + { + x: 0, + y: -1.6, + z: 0.5, + width: 2.5, + height: 0.5, + depth: 6.8, + rotation: 0 + } + + ]; + + stage.models.tv.position.y = 0; + + let tvGroup = new Group(); + tvGroup.add(stage.models.tv) + stage.scene.add(tvGroup); + + shapes.forEach(box => { + let shape = physics.createBoxShape(box.width, box.height, box.depth); + + if(showGuides) + { + let b = stage.createBox(box.width, box.height, box.depth, 0xff0000); + b.position.set(box.x, box.y, box.z); + b.rotation.set(0, 0, box.rotation); + tvGroup.add(b); + } + + body.addShape(shape, new CANNON.Vec3(box.x, box.y, box.z), new CANNON.Quaternion(0, 0, box.rotation)); + }) + + var physicsItem = { + mesh: tvGroup, + physics: body, + } + + physicsItem.physics.velocity.set(0, -20, 0) + // const angularRandomness = 10; + // physicsItem.physics.angularVelocity.set( + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2))) + // physicsItem.physics.angularDamping = 0.8; + + physicsItems.push(physicsItem); + } + + function createTree() + { + let body = physics.createBody(10, {x: 30, y: -10, z: 30}, {y: -Math.PI * 0.001, x: Math.PI * 0.001}, PHYSICS_MATERIAL.lowBounce); + physics.setAngle(body, -Math.PI * 0.5, 'x'); + let shapes = [ + { + x: 0, + y: 0, + z: -2.2, + topRadius: 1, + bottomRadius: 6, + height: 16, + segments: 10 + }, + { + x: 0, + y: 0, + z: -13, + topRadius: 0.5, + bottomRadius: 1, + height: 7, + segments: 5 + }, + { + x: 0, + y: 0, + z: -15, + topRadius: 3, + bottomRadius: 2, + height: 5, + segments: 7 + } + ]; + + stage.models.tree.position.y = 0; + stage.models.pot.position.y = 0; + + let treeGroup = new Group(); + treeGroup.add(stage.models.tree); + treeGroup.add(stage.models.pot); + stage.scene.add(treeGroup); + + shapes.forEach(cylinder => { + let shape = physics.createCylinderShape(cylinder.topRadius, cylinder.bottomRadius, cylinder.height, cylinder.segments); + + if(showGuides) + { + let b = stage.createCylinder(cylinder.topRadius, cylinder.bottomRadius, cylinder.height, cylinder.segments, 0xff0000); + b.position.set(cylinder.x, cylinder.y, cylinder.z); + b.rotation.set(0,0,0); + treeGroup.add(b); + } + + body.addShape(shape, new CANNON.Vec3(cylinder.x, cylinder.y, cylinder.z), new CANNON.Quaternion(0, 0, cylinder.rotation)); + }) + + var physicsItem = { + mesh: treeGroup, + physics: body, + } + + // body.velocity.set(-40, 30, -40) + // const angularRandomness = 5; + // body.angularVelocity.set( + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2))) + // body.angularDamping = 0.8; + + physicsItems.push(physicsItem); + + return physicsItem; + } + + function createSnowman() + { + // let body = physics.createBody(10, {x: 30, y: -10, z: 30}, {y: -Math.PI * 0.001, x: Math.PI * 0.001}, PHYSICS_MATERIAL.lowBounce); + let body = physics.createBody(10, {x: 30, y: -10, z: 30}, {y: 0, x: Math.PI * .5}, PHYSICS_MATERIAL.normalBounce); + physics.setAngle(body, -Math.PI * 0.5, 'x'); + let shapes = [ + { + x: 0, + y: 2.5, + z: 0, + radius: 3 + }, + { + x: 0, + y: 5, + z: 0, + radius: 2.5 + }, + { + x: 0, + y: 9.5, + z: 0, + radius: 1.7 + } + ]; + + stage.models.snowman.position.y = 0; + + let snowmanGroup = new Group(); + snowmanGroup.add(stage.models.snowman); + stage.scene.add(snowmanGroup); + + shapes.forEach(sphere => { + let shape = physics.createSphereShape(sphere.radius); + + if(showGuides) + { + let b = stage.createSphere(sphere.radius, 0xff0000); + b.position.set(sphere.x, sphere.y, sphere.z); + b.rotation.set(0,0,0); + snowmanGroup.add(b); + } + + body.addShape(shape, new CANNON.Vec3(sphere.x, sphere.y, sphere.z), new CANNON.Quaternion(0, 0, 0)); + }) + + var physicsItem = { + mesh: snowmanGroup, + physics: body, + } + + // body.velocity.set(-40, 30, -40) + // const angularRandomness = 5; + // body.angularVelocity.set( + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2))) + // body.angularDamping = 0.8; + + physicsItems.push(physicsItem); + + return physicsItem; + } + + function createStar() + { + + + // let body = physics.createBody(10, {x: 30, y: -10, z: 30}, {y: -Math.PI * 0.001, x: Math.PI * 0.001}, PHYSICS_MATERIAL.lowBounce); + let body = physics.createBody(1, {x: 30, y: -10, z: 30}, {y: 0, x: Math.PI * .5}, PHYSICS_MATERIAL.normalBounce); + // physics.setAngle(body, -Math.PI * 0.5, 'x'); + let shapes = [ + { + x: 0, + y: 0, + z: 0, + topRadius: 1, + bottomRadius: 1, + height: 0.5, + segments: 5 + } + ]; + + let star = stars.shift(); + star.position.y = 0; + + + + + shapes.forEach(cylinder => { + let shape = physics.createCylinderShape(cylinder.topRadius, cylinder.bottomRadius, cylinder.height, cylinder.segments); + + if(showGuides) + { + let b = stage.createCylinder(cylinder.topRadius, cylinder.bottomRadius, cylinder.height, cylinder.segments, 0xff0000); + b.position.set(cylinder.x, cylinder.y, cylinder.z); + b.rotation.set(0,0,0); + star.add(b); + } + + body.addShape(shape, new CANNON.Vec3(cylinder.x, cylinder.y, cylinder.z), new CANNON.Quaternion(0, 0, cylinder.rotation)); + }) + + + var physicsItem = { + mesh: star, + physics: body, + } + + // body.velocity.set(-40, 30, -40) + // const angularRandomness = 5; + // body.angularVelocity.set( + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2)), + // ((Math.random() * angularRandomness) - (angularRandomness/2))) + // body.angularDamping = 0.8; + + physicsItems.push(physicsItem); + + return physicsItem; + } + +next(); \ No newline at end of file diff --git a/christmas-cannon/src/style.scss b/christmas-cannon/src/style.scss new file mode 100644 index 0000000..6627d99 --- /dev/null +++ b/christmas-cannon/src/style.scss @@ -0,0 +1,166 @@ +@import url('https://fonts.googleapis.com/css2?family=Fredoka+One&display=swap'); + +* +{ + font-family: 'Fredoka One', sans-serif; +} + +html, body +{ + width: 100%; + min-height: 100%; + margin: 0; + padding: 0; + font-size: 20px; + +} + +body +{ + background: #eee; + background: linear-gradient(to left, #ddd , #eee); + position: relative; + overflow: hidden; +} + +.page +{ + z-index: 2; + position: relative; + width: calc(80vw - 80px); + padding: 20px 40px; + margin: 0; + +} + +#canvas-container +{ + position: absolute; + top: 0; + left: 0; + z-index: 1; + +} + +.spacer +{ + display: block; + width: 100%; + height: 40vh; +} + +.status +{ + font-size: 3rem; +} + +#loading +{ + position: absolute; + background-color: #3A3F69; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + z-index: 10; + + display: flex; + align-items: center; + justify-content: center; + color: white; + font-size: 3rem; + font-family: 'Fredoka One', cursive; +} + +#ui +{ + position: absolute; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + z-index: 5; + + user-select: none; + + .positioner + { + width: 130vh; + max-width: 100vw; + height: 100vh; + margin: 0 auto; + display: grid; + grid-template-columns: 100px 1fr 200px; + align-items: flex-end; + } + + .speech-bubble + { + display: flex; + justify-content: flex-end; + } + + #bubble + { + padding: 1.5rem 2rem; + width: calc(100% - 4rem); + max-width: calc(400px - 4rem); + background-color: white; + border-radius: 1.7rem; + margin-bottom: 3rem; + position: relative; + cursor: pointer; + + &::after + { + content: ''; + width: 0; + height: 0; + border-top: 1rem solid transparent; + border-bottom: 1rem solid transparent; + + border-left:1rem solid white; + position: absolute; + left: calc(100% - 0.25rem); + bottom: 1rem; + } + + + } +} + +#text-highlight +{ + font-size: 1.5rem; + display: inline-block; +} + +#next +{ + // opacity: 0; + color: #505050; + font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif; + text-align: right; + margin-top: 1rem; + transition: opacity 0.2s ease-in-out; + display: none; +} + +#steve +{ + +width: 100%; +} + +.waiting +{ + #next + { + // display: block; + } +} + +.game +{ + cursor: url(https://assets.codepen.io/557388/crosshair.svg) 41 41, auto; +} \ No newline at end of file diff --git a/city/README.markdown b/city/README.markdown new file mode 100644 index 0000000..f6424e7 --- /dev/null +++ b/city/README.markdown @@ -0,0 +1,5 @@ +# City + +A Pen created on CodePen.io. Original URL: [https://codepen.io/b29/pen/yLzJbzy](https://codepen.io/b29/pen/yLzJbzy). + + diff --git a/city/dist/index.html b/city/dist/index.html new file mode 100644 index 0000000..c35bb8f --- /dev/null +++ b/city/dist/index.html @@ -0,0 +1,16 @@ + + + + + CodePen - City + + + + + + + + + + + diff --git a/city/dist/script.js b/city/dist/script.js new file mode 100644 index 0000000..fc171e9 --- /dev/null +++ b/city/dist/script.js @@ -0,0 +1,183 @@ +var renderer = new THREE.WebGLRenderer(); + renderer.setSize( window.innerWidth, window.innerHeight ); + document.body.appendChild( renderer.domElement ); + + + + var updateFcts = []; + var scene = new THREE.Scene(); + var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.01, 3000 ); + camera.position.z = 200; + + + + window.addEventListener("resize", function() { + let width = window.innerWidth; + let height = window.innerHeight; + renderer.setSize(width, height); + camera.aspect = width / height; + camera.updateProjectionMatrix(); + }); + + + ////////////////////////////////////////////////////////////////////////////////// + // comment // + ////////////////////////////////////////////////////////////////////////////////// + // from @mrdoob http://www.mrdoob.com/lab/javascript/webgl/city/01/ + + var THREEx = THREEx || {} + + THREEx.ProceduralCity = function(){ + // build the base geometry for each building + var geometry = new THREE.CubeGeometry( 1, 1, 1 ); + // translate the geometry to place the pivot point at the bottom instead of the center + geometry.applyMatrix( new THREE.Matrix4().makeTranslation( 0, 0.5, 0 ) ); + // get rid of the bottom face - it is never seen + geometry.faces.splice( 3, 1 ); + geometry.faceVertexUvs[0].splice( 3, 1 ); + // change UVs for the top face + // - it is the roof so it wont use the same texture as the side of the building + // - set the UVs to the single coordinate 0,0. so the roof will be the same color + // as a floor row. + geometry.faceVertexUvs[0][2][0].set( 0, 0 ); + geometry.faceVertexUvs[0][2][1].set( 0, 0 ); + geometry.faceVertexUvs[0][2][2].set( 0, 0 ); + geometry.faceVertexUvs[0][2][3].set( 0, 0 ); + // buildMesh + var buildingMesh= new THREE.Mesh( geometry ); + + // base colors for vertexColors. light is for vertices at the top, shaddow is for the ones at the bottom + var light = new THREE.Color( 0xffffff ) + var shadow = new THREE.Color( 0x303050 ) + + var cityGeometry= new THREE.Geometry(); + for( var i = 0; i < 20000; i ++ ){ + // put a random position + buildingMesh.position.x = Math.floor( Math.random() * 200 - 100 ) * 10; + buildingMesh.position.z = Math.floor( Math.random() * 200 - 100 ) * 10; + // put a random rotation + buildingMesh.rotation.y = Math.random()*Math.PI*2; + // put a random scale + buildingMesh.scale.x = Math.random() * Math.random() * Math.random() * Math.random() * 50 + 10; + buildingMesh.scale.y = (Math.random() * Math.random() * Math.random() * buildingMesh.scale.x) * 8 + 8; + buildingMesh.scale.z = buildingMesh.scale.x + + // establish the base color for the buildingMesh + var value = 1 - Math.random() * Math.random(); + var baseColor = new THREE.Color().setRGB( value + Math.random() * 0.1, value, value + Math.random() * 0.1 ); + // set topColor/bottom vertexColors as adjustement of baseColor + var topColor = baseColor.clone().multiply( light ); + var bottomColor = baseColor.clone().multiply( shadow ); + // set .vertexColors for each face + var geometry = buildingMesh.geometry; + for ( var j = 0, jl = geometry.faces.length; j < jl; j ++ ) { + if ( j === 2 ) { + // set face.vertexColors on root face + geometry.faces[ j ].vertexColors = [ baseColor, baseColor, baseColor, baseColor ]; + } else { + // set face.vertexColors on sides faces + geometry.faces[ j ].vertexColors = [ topColor, bottomColor, bottomColor, topColor ]; + } + } + // merge it with cityGeometry - very important for performance + THREE.GeometryUtils.merge( cityGeometry, buildingMesh ); + } + + // generate the texture + var texture = new THREE.Texture( generateTextureCanvas() ); + texture.anisotropy = renderer.getMaxAnisotropy(); + texture.needsUpdate = true; + + // build the mesh + var material = new THREE.MeshLambertMaterial({ + map : texture, + vertexColors : THREE.VertexColors + }); + var mesh = new THREE.Mesh(cityGeometry, material ); + return mesh + + function generateTextureCanvas(){ + // build a small canvas 32x64 and paint it in white + var canvas = document.createElement( 'canvas' ); + canvas.width = 32; + canvas.height = 64; + var context = canvas.getContext( '2d' ); + // plain it in white + context.fillStyle = '#ffffff'; + context.fillRect( 0, 0, 32, 64 ); + // draw the window rows - with a small noise to simulate light variations in each room + for( var y = 2; y < 64; y += 2 ){ + for( var x = 0; x < 32; x += 2 ){ + var value = Math.floor( Math.random() * 64 ); + context.fillStyle = 'rgb(' + [value, value, value].join( ',' ) + ')'; + context.fillRect( x, y, 2, 1 ); + } + } + + // build a bigger canvas and copy the small one in it + // This is a trick to upscale the texture without filtering + var canvas2 = document.createElement( 'canvas' ); + canvas2.width = 512; + canvas2.height = 1024; + var context = canvas2.getContext( '2d' ); + // disable smoothing + context.imageSmoothingEnabled = false; + context.webkitImageSmoothingEnabled = false; + context.mozImageSmoothingEnabled = false; + // then draw the image + context.drawImage( canvas, 0, 0, canvas2.width, canvas2.height ); + // return the just built canvas2 + return canvas2; + } + } + + + var city = new THREEx.ProceduralCity() + scene.add(city) + + ////////////////////////////////////////////////////////////////////////////////// + // add an object and make it move // + ////////////////////////////////////////////////////////////////////////////////// + + var light = new THREE.HemisphereLight( 0xfffff0, 0x101020, 1.25 ); + light.position.set( 0.75, 1, 0.25 ); + scene.add( light ); + + ////////////////////////////////////////////////////////////////////////////////// + // Camera Controls // + ////////////////////////////////////////////////////////////////////////////////// + var mouse = {x : 0, y : 0} + document.addEventListener('mousemove', function(event){ + mouse.x = (event.clientX / window.innerWidth ) - 0.5 + mouse.y = (event.clientY / window.innerHeight) - 0.5 + }, false) + updateFcts.push(function(delta, now){ + camera.position.x += (mouse.x*300 - camera.position.x) * (delta*3) + camera.position.y += (mouse.y*300 - (camera.position.y-200)) * (delta*3) + camera.lookAt( scene.position ) + }) + + + ////////////////////////////////////////////////////////////////////////////////// + // render the scene // + ////////////////////////////////////////////////////////////////////////////////// + updateFcts.push(function(){ + renderer.render( scene, camera ); + }) + + ////////////////////////////////////////////////////////////////////////////////// + // loop runner // + ////////////////////////////////////////////////////////////////////////////////// + var lastTimeMsec= null + requestAnimationFrame(function animate(nowMsec){ + // keep looping + requestAnimationFrame( animate ); + // measure time + lastTimeMsec = lastTimeMsec || nowMsec-1000/60 + var deltaMsec = Math.min(200, nowMsec - lastTimeMsec) + lastTimeMsec = nowMsec + // call each update function + updateFcts.forEach(function(updateFn){ + updateFn(deltaMsec/1000, nowMsec/1000) + }) + }) \ No newline at end of file diff --git a/city/dist/style.css b/city/dist/style.css new file mode 100644 index 0000000..76d6f52 --- /dev/null +++ b/city/dist/style.css @@ -0,0 +1 @@ +body{margin: 0px; background-color: #bbbbbb; overflow: hidden;} \ No newline at end of file diff --git a/city/license.txt b/city/license.txt new file mode 100644 index 0000000..7c6e7f9 --- /dev/null +++ b/city/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Baron (https://codepen.io/b29/pen/yLzJbzy) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/city/src/index.html b/city/src/index.html new file mode 100644 index 0000000..b3f6785 --- /dev/null +++ b/city/src/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/city/src/script.js b/city/src/script.js new file mode 100644 index 0000000..fc171e9 --- /dev/null +++ b/city/src/script.js @@ -0,0 +1,183 @@ +var renderer = new THREE.WebGLRenderer(); + renderer.setSize( window.innerWidth, window.innerHeight ); + document.body.appendChild( renderer.domElement ); + + + + var updateFcts = []; + var scene = new THREE.Scene(); + var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.01, 3000 ); + camera.position.z = 200; + + + + window.addEventListener("resize", function() { + let width = window.innerWidth; + let height = window.innerHeight; + renderer.setSize(width, height); + camera.aspect = width / height; + camera.updateProjectionMatrix(); + }); + + + ////////////////////////////////////////////////////////////////////////////////// + // comment // + ////////////////////////////////////////////////////////////////////////////////// + // from @mrdoob http://www.mrdoob.com/lab/javascript/webgl/city/01/ + + var THREEx = THREEx || {} + + THREEx.ProceduralCity = function(){ + // build the base geometry for each building + var geometry = new THREE.CubeGeometry( 1, 1, 1 ); + // translate the geometry to place the pivot point at the bottom instead of the center + geometry.applyMatrix( new THREE.Matrix4().makeTranslation( 0, 0.5, 0 ) ); + // get rid of the bottom face - it is never seen + geometry.faces.splice( 3, 1 ); + geometry.faceVertexUvs[0].splice( 3, 1 ); + // change UVs for the top face + // - it is the roof so it wont use the same texture as the side of the building + // - set the UVs to the single coordinate 0,0. so the roof will be the same color + // as a floor row. + geometry.faceVertexUvs[0][2][0].set( 0, 0 ); + geometry.faceVertexUvs[0][2][1].set( 0, 0 ); + geometry.faceVertexUvs[0][2][2].set( 0, 0 ); + geometry.faceVertexUvs[0][2][3].set( 0, 0 ); + // buildMesh + var buildingMesh= new THREE.Mesh( geometry ); + + // base colors for vertexColors. light is for vertices at the top, shaddow is for the ones at the bottom + var light = new THREE.Color( 0xffffff ) + var shadow = new THREE.Color( 0x303050 ) + + var cityGeometry= new THREE.Geometry(); + for( var i = 0; i < 20000; i ++ ){ + // put a random position + buildingMesh.position.x = Math.floor( Math.random() * 200 - 100 ) * 10; + buildingMesh.position.z = Math.floor( Math.random() * 200 - 100 ) * 10; + // put a random rotation + buildingMesh.rotation.y = Math.random()*Math.PI*2; + // put a random scale + buildingMesh.scale.x = Math.random() * Math.random() * Math.random() * Math.random() * 50 + 10; + buildingMesh.scale.y = (Math.random() * Math.random() * Math.random() * buildingMesh.scale.x) * 8 + 8; + buildingMesh.scale.z = buildingMesh.scale.x + + // establish the base color for the buildingMesh + var value = 1 - Math.random() * Math.random(); + var baseColor = new THREE.Color().setRGB( value + Math.random() * 0.1, value, value + Math.random() * 0.1 ); + // set topColor/bottom vertexColors as adjustement of baseColor + var topColor = baseColor.clone().multiply( light ); + var bottomColor = baseColor.clone().multiply( shadow ); + // set .vertexColors for each face + var geometry = buildingMesh.geometry; + for ( var j = 0, jl = geometry.faces.length; j < jl; j ++ ) { + if ( j === 2 ) { + // set face.vertexColors on root face + geometry.faces[ j ].vertexColors = [ baseColor, baseColor, baseColor, baseColor ]; + } else { + // set face.vertexColors on sides faces + geometry.faces[ j ].vertexColors = [ topColor, bottomColor, bottomColor, topColor ]; + } + } + // merge it with cityGeometry - very important for performance + THREE.GeometryUtils.merge( cityGeometry, buildingMesh ); + } + + // generate the texture + var texture = new THREE.Texture( generateTextureCanvas() ); + texture.anisotropy = renderer.getMaxAnisotropy(); + texture.needsUpdate = true; + + // build the mesh + var material = new THREE.MeshLambertMaterial({ + map : texture, + vertexColors : THREE.VertexColors + }); + var mesh = new THREE.Mesh(cityGeometry, material ); + return mesh + + function generateTextureCanvas(){ + // build a small canvas 32x64 and paint it in white + var canvas = document.createElement( 'canvas' ); + canvas.width = 32; + canvas.height = 64; + var context = canvas.getContext( '2d' ); + // plain it in white + context.fillStyle = '#ffffff'; + context.fillRect( 0, 0, 32, 64 ); + // draw the window rows - with a small noise to simulate light variations in each room + for( var y = 2; y < 64; y += 2 ){ + for( var x = 0; x < 32; x += 2 ){ + var value = Math.floor( Math.random() * 64 ); + context.fillStyle = 'rgb(' + [value, value, value].join( ',' ) + ')'; + context.fillRect( x, y, 2, 1 ); + } + } + + // build a bigger canvas and copy the small one in it + // This is a trick to upscale the texture without filtering + var canvas2 = document.createElement( 'canvas' ); + canvas2.width = 512; + canvas2.height = 1024; + var context = canvas2.getContext( '2d' ); + // disable smoothing + context.imageSmoothingEnabled = false; + context.webkitImageSmoothingEnabled = false; + context.mozImageSmoothingEnabled = false; + // then draw the image + context.drawImage( canvas, 0, 0, canvas2.width, canvas2.height ); + // return the just built canvas2 + return canvas2; + } + } + + + var city = new THREEx.ProceduralCity() + scene.add(city) + + ////////////////////////////////////////////////////////////////////////////////// + // add an object and make it move // + ////////////////////////////////////////////////////////////////////////////////// + + var light = new THREE.HemisphereLight( 0xfffff0, 0x101020, 1.25 ); + light.position.set( 0.75, 1, 0.25 ); + scene.add( light ); + + ////////////////////////////////////////////////////////////////////////////////// + // Camera Controls // + ////////////////////////////////////////////////////////////////////////////////// + var mouse = {x : 0, y : 0} + document.addEventListener('mousemove', function(event){ + mouse.x = (event.clientX / window.innerWidth ) - 0.5 + mouse.y = (event.clientY / window.innerHeight) - 0.5 + }, false) + updateFcts.push(function(delta, now){ + camera.position.x += (mouse.x*300 - camera.position.x) * (delta*3) + camera.position.y += (mouse.y*300 - (camera.position.y-200)) * (delta*3) + camera.lookAt( scene.position ) + }) + + + ////////////////////////////////////////////////////////////////////////////////// + // render the scene // + ////////////////////////////////////////////////////////////////////////////////// + updateFcts.push(function(){ + renderer.render( scene, camera ); + }) + + ////////////////////////////////////////////////////////////////////////////////// + // loop runner // + ////////////////////////////////////////////////////////////////////////////////// + var lastTimeMsec= null + requestAnimationFrame(function animate(nowMsec){ + // keep looping + requestAnimationFrame( animate ); + // measure time + lastTimeMsec = lastTimeMsec || nowMsec-1000/60 + var deltaMsec = Math.min(200, nowMsec - lastTimeMsec) + lastTimeMsec = nowMsec + // call each update function + updateFcts.forEach(function(updateFn){ + updateFn(deltaMsec/1000, nowMsec/1000) + }) + }) \ No newline at end of file diff --git a/city/src/style.css b/city/src/style.css new file mode 100644 index 0000000..76d6f52 --- /dev/null +++ b/city/src/style.css @@ -0,0 +1 @@ +body{margin: 0px; background-color: #bbbbbb; overflow: hidden;} \ No newline at end of file diff --git a/claymorphism/README.markdown b/claymorphism/README.markdown new file mode 100644 index 0000000..b46142a --- /dev/null +++ b/claymorphism/README.markdown @@ -0,0 +1,5 @@ +# Claymorphism + +A Pen created on CodePen.io. Original URL: [https://codepen.io/antoniasymeonidou/pen/RwLMqxy](https://codepen.io/antoniasymeonidou/pen/RwLMqxy). + + diff --git a/claymorphism/dist/index.html b/claymorphism/dist/index.html new file mode 100644 index 0000000..c35abf2 --- /dev/null +++ b/claymorphism/dist/index.html @@ -0,0 +1,18 @@ + + + + + CodePen - Claymorphism + + + + + +
+

Claymorphism

+

New Trend 2022

+
+ + + + diff --git a/claymorphism/dist/style.css b/claymorphism/dist/style.css new file mode 100644 index 0000000..84f6991 --- /dev/null +++ b/claymorphism/dist/style.css @@ -0,0 +1,34 @@ +@import url('https://fonts.googleapis.com/css2?family=Hind:wght@300&family=Press+Start+2P&family=Prompt&family=Rock+3D&family=Wendy+One&display=swap'); + +* { + box-sizing: border-box; + margin: 0; +} + +body { + background: #b5ead7; + font-family: 'Prompt', sans-serif; +} + +.box { + width: 300px; + height: 300px; + border-radius: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%,-50%); + text-align: center; + padding-top: 100px; + background: white; + box-shadow: 0 35px 65px 0 rgba(86, 184, 149,0.42), inset 0 -10px 15px 0 rgba(113, 235, 191,0.8); +} + +.claymorphism { + font-size: 2em; + line-height: 2; +} + +.trend { + font-size: 1em; +} \ No newline at end of file diff --git a/claymorphism/license.txt b/claymorphism/license.txt new file mode 100644 index 0000000..19d3898 --- /dev/null +++ b/claymorphism/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2022 by NANOUU (https://codepen.io/antoniasymeonidou/pen/RwLMqxy) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/claymorphism/src/index.html b/claymorphism/src/index.html new file mode 100644 index 0000000..5e39523 --- /dev/null +++ b/claymorphism/src/index.html @@ -0,0 +1,4 @@ +
+

Claymorphism

+

New Trend 2022

+
\ No newline at end of file diff --git a/claymorphism/src/style.css b/claymorphism/src/style.css new file mode 100644 index 0000000..84f6991 --- /dev/null +++ b/claymorphism/src/style.css @@ -0,0 +1,34 @@ +@import url('https://fonts.googleapis.com/css2?family=Hind:wght@300&family=Press+Start+2P&family=Prompt&family=Rock+3D&family=Wendy+One&display=swap'); + +* { + box-sizing: border-box; + margin: 0; +} + +body { + background: #b5ead7; + font-family: 'Prompt', sans-serif; +} + +.box { + width: 300px; + height: 300px; + border-radius: 30px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%,-50%); + text-align: center; + padding-top: 100px; + background: white; + box-shadow: 0 35px 65px 0 rgba(86, 184, 149,0.42), inset 0 -10px 15px 0 rgba(113, 235, 191,0.8); +} + +.claymorphism { + font-size: 2em; + line-height: 2; +} + +.trend { + font-size: 1em; +} \ No newline at end of file diff --git a/clip-path-theme-switch-backdrop-filter-version/LICENSE.txt b/clip-path-theme-switch-backdrop-filter-version/LICENSE.txt new file mode 100644 index 0000000..1e8f47b --- /dev/null +++ b/clip-path-theme-switch-backdrop-filter-version/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2022 Chukwuma Okere (https://codepen.io/chukwumaokere/pen/poKWZyL) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/clip-path-theme-switch-backdrop-filter-version/README.md b/clip-path-theme-switch-backdrop-filter-version/README.md new file mode 100644 index 0000000..774c89a --- /dev/null +++ b/clip-path-theme-switch-backdrop-filter-version/README.md @@ -0,0 +1,4 @@ +# Clip-path Theme Switch (Backdrop-Filter version) ๐Ÿค” + +A Pen created on CodePen.io. Original URL: [https://codepen.io/chukwumaokere/pen/poKWZyL](https://codepen.io/chukwumaokere/pen/poKWZyL). + diff --git a/clip-path-theme-switch-backdrop-filter-version/dist/index.html b/clip-path-theme-switch-backdrop-filter-version/dist/index.html new file mode 100644 index 0000000..2e242e2 --- /dev/null +++ b/clip-path-theme-switch-backdrop-filter-version/dist/index.html @@ -0,0 +1,17 @@ + + + + + CodePen - Clip-path Theme Switch (Backdrop-Filter version) ๐Ÿค” + + + + + +
+ + + + + + diff --git a/clip-path-theme-switch-backdrop-filter-version/dist/script.js b/clip-path-theme-switch-backdrop-filter-version/dist/script.js new file mode 100644 index 0000000..945774d --- /dev/null +++ b/clip-path-theme-switch-backdrop-filter-version/dist/script.js @@ -0,0 +1,327 @@ +/* Inspired and modelled after https://twitter.com/emilkowalski_/status/1592997196911501312?s=20&t=_ZLymh8Tb2IcsZqCLiIACg + +Obviously its a bit different. He uses clip-path and im trying to use backdrop-filter to invert. It could use some cleanup with #overlay.active cleaning up some asset colors, but its an idea for now. +*/ + +function ButtonWithIcon({ text }) { + return /*#__PURE__*/( + React.createElement("div", { className: "flex flex-shrink-0" }, /*#__PURE__*/ + React.createElement("button", { className: "cursor-pointer px-3 py-2 bg-black text-white rounded-md flex flex-row items-center gap-10" }, /*#__PURE__*/ + React.createElement("span", null, text), /*#__PURE__*/ + React.createElement("div", { className: "w-5 h-5" }, /*#__PURE__*/ + React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", class: "icon icon-tabler icon-tabler-chevron-down", width: "100%", height: "100%", viewBox: "0 0 24 24", "stroke-width": "1.5", stroke: "currentColor", fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" }, /*#__PURE__*/ + React.createElement("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }), /*#__PURE__*/ + React.createElement("polyline", { points: "6 9 12 15 18 9" })))))); + + + + + +} + +function ButtonGroup() { + return /*#__PURE__*/( + React.createElement("div", { className: "grid grid-cols-2 border-2 border-gray-200 divide-x rounded-md bg-white flex-shrink-0" }, /*#__PURE__*/ + React.createElement("div", { className: "p-2 flex items-center cursor-pointer bg-gray-100" }, /*#__PURE__*/ + React.createElement("div", { className: "w-4 h-4" }, /*#__PURE__*/ + React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", class: "icon icon-tabler icon-tabler-layout-grid", width: "100%", height: "100%", viewBox: "0 0 24 24", "stroke-width": "1.5", stroke: "currentColor", fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" }, /*#__PURE__*/ + React.createElement("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }), /*#__PURE__*/ + React.createElement("rect", { x: "4", y: "4", width: "6", height: "6", rx: "1" }), /*#__PURE__*/ + React.createElement("rect", { x: "14", y: "4", width: "6", height: "6", rx: "1" }), /*#__PURE__*/ + React.createElement("rect", { x: "4", y: "14", width: "6", height: "6", rx: "1" }), /*#__PURE__*/ + React.createElement("rect", { x: "14", y: "14", width: "6", height: "6", rx: "1" })))), /*#__PURE__*/ + + + + React.createElement("div", { className: "p-2 flex items-center cursor-pointer" }, /*#__PURE__*/ + React.createElement("div", { className: "w-4 h-4" }, /*#__PURE__*/ + React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", class: "icon icon-tabler icon-tabler-list", width: "100%", height: "100%", viewBox: "0 0 24 24", "stroke-width": "1.5", stroke: "currentColor", fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" }, /*#__PURE__*/ + React.createElement("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }), /*#__PURE__*/ + React.createElement("line", { x1: "9", y1: "6", x2: "20", y2: "6" }), /*#__PURE__*/ + React.createElement("line", { x1: "9", y1: "12", x2: "20", y2: "12" }), /*#__PURE__*/ + React.createElement("line", { x1: "9", y1: "18", x2: "20", y2: "18" }), /*#__PURE__*/ + React.createElement("line", { x1: "5", y1: "6", x2: "5", y2: "6.01" }), /*#__PURE__*/ + React.createElement("line", { x1: "5", y1: "12", x2: "5", y2: "12.01" }), /*#__PURE__*/ + React.createElement("line", { x1: "5", y1: "18", x2: "5", y2: "18.01" })))))); + + + + + +} + +function SearchBar({ placeholder }) { + return /*#__PURE__*/( + React.createElement("div", { className: "w-full relative block" }, /*#__PURE__*/ + React.createElement("span", { class: "absolute inset-y-0 left-0 flex items-center pl-4 h-full" }, /*#__PURE__*/ + React.createElement("div", { className: "w-5 h-5 text-gray-400" }, /*#__PURE__*/ + React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", class: "icon icon-tabler icon-tabler-search", width: "100%", height: "100%", viewBox: "0 0 24 24", "stroke-width": "1.5", stroke: "currentColor", fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" }, /*#__PURE__*/ + React.createElement("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }), /*#__PURE__*/ + React.createElement("circle", { cx: "10", cy: "10", r: "7" }), /*#__PURE__*/ + React.createElement("line", { x1: "21", y1: "21", x2: "15", y2: "15" })))), /*#__PURE__*/ + + + + React.createElement("input", { className: "pl-12 h-full rounded-md bg-white border-2 border-gray-200 w-full focus:outline-none", placeholder: placeholder, type: "text", name: "search" }))); + + +} + +function Card({ data }) { + return /*#__PURE__*/( + React.createElement("div", { className: "p-6 rounded-md bg-white flex flex-col justify-between gap-5 border-2 border-gray-100 shadow-lg" }, /*#__PURE__*/ + React.createElement("div", { className: "w-full h-full flex justify-between items-center" }, /*#__PURE__*/ + React.createElement("div", { className: "w-full h-full flex flex-row items-center gap-2" }, /*#__PURE__*/ + React.createElement("div", { className: "bg-black rounded-full w-9 h-9 text-white flex items-center justify-center antialiased font-serif" }, "N"), /*#__PURE__*/ + React.createElement("div", { className: "flex flex-col h-full" }, /*#__PURE__*/ + React.createElement("span", { className: "font-bold text-black" }, data.title), /*#__PURE__*/ + React.createElement("span", { className: "text-gray-400 font-semibold text-sm" }, data.subtitle))), /*#__PURE__*/ + + + React.createElement("div", { className: "bg-gray-200 rounded-full w-9 h-9 flex justify-center items-center" }, /*#__PURE__*/ + React.createElement("div", { className: "bg-white rounded-full w-7 h-7" }, /*#__PURE__*/ + React.createElement("div", { className: "flex justify-center items-center w-full h-full text-gray-400" }, /*#__PURE__*/ + React.createElement("div", { className: "w-5 h-5" }, /*#__PURE__*/ + React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", class: "icon icon-tabler icon-tabler-activity", width: "100%", height: "100%", viewBox: "0 0 24 24", "stroke-width": "1.5", stroke: "currentColor", fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" }, /*#__PURE__*/ + React.createElement("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }), /*#__PURE__*/ + React.createElement("path", { d: "M3 12h4l3 8l4 -16l3 8h4" }))))))), /*#__PURE__*/ + + + + + + + React.createElement("div", { className: "w-full h-full" }, /*#__PURE__*/ + React.createElement("span", { className: "font-semibold text-md text-gray-600" }, data.content)), /*#__PURE__*/ + + React.createElement("div", { className: "flex flex-row items-center gap-1 text-gray-500 font-medium" }, /*#__PURE__*/ + React.createElement("div", { className: "w-4 h-4" }, /*#__PURE__*/ + React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", class: "icon icon-tabler icon-tabler-git-branch", width: "100%", height: "100%", viewBox: "0 0 24 24", "stroke-width": "1.5", stroke: "currentColor", fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" }, /*#__PURE__*/ + React.createElement("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }), /*#__PURE__*/ + React.createElement("circle", { cx: "7", cy: "18", r: "2" }), /*#__PURE__*/ + React.createElement("circle", { cx: "7", cy: "6", r: "2" }), /*#__PURE__*/ + React.createElement("circle", { cx: "17", cy: "6", r: "2" }), /*#__PURE__*/ + React.createElement("line", { x1: "7", y1: "8", x2: "7", y2: "16" }), /*#__PURE__*/ + React.createElement("path", { d: "M9 18h6a2 2 0 0 0 2 -2v-5" }), /*#__PURE__*/ + React.createElement("polyline", { points: "14 14 17 11 20 14" }))), /*#__PURE__*/ + + + React.createElement("span", null, "From ", /*#__PURE__*/React.createElement("span", { className: "text-md font-mono bg-gray-100 px-1" }, data.from))), /*#__PURE__*/ + + React.createElement("div", { className: "flex flex-row items-center h-full" }, /*#__PURE__*/ + React.createElement("span", { className: "text-gray-400 font-medium" }, data.date, "d ago via\xA0"), /*#__PURE__*/ + React.createElement("div", { className: "w-5 h-5 flex items-center" }, /*#__PURE__*/ + React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", fill: "currentColor", class: "bi bi-github", viewBox: "0 0 16 16" }, /*#__PURE__*/ + React.createElement("path", { d: "M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z" })))))); + + + + + +} + +function Content() { + const cardsList = [ + { + title: 'test-user-card', + subtitle: 'test-user-app.vercel.app', + content: 'Initial commit from Create Next App', + from: 'main', + date: '10' }, + + { + title: 'test-user-card', + subtitle: 'test-user-app.vercel.app', + content: 'Initial commit from Create Next App', + from: 'main', + date: '10' }, + + { + title: 'test-user-card', + subtitle: 'test-user-app.vercel.app', + content: 'Initial commit from Create Next App', + from: 'main', + date: '10' }, + + { + title: 'test-user-card', + subtitle: 'test-user-app.vercel.app', + content: 'Initial commit from Create Next App', + from: 'main', + date: '10' }, + + { + title: 'test-user-card', + subtitle: 'test-user-app.vercel.app', + content: 'Initial commit from Create Next App', + from: 'main', + date: '10' }, + + { + title: 'test-user-card', + subtitle: 'test-user-app.vercel.app', + content: 'Initial commit from Create Next App', + from: 'main', + date: '10' }, + + { + title: 'test-user-card', + subtitle: 'test-user-app.vercel.app', + content: 'Initial commit from Create Next App', + from: 'main', + date: '10' }, + + { + title: 'test-user-card', + subtitle: 'test-user-app.vercel.app', + content: 'Initial commit from Create Next App', + from: 'main', + date: '10' }, + + { + title: 'test-user-card', + subtitle: 'test-user-app.vercel.app', + content: 'Initial commit from Create Next App', + from: 'main', + date: '10' }]; + + + return /*#__PURE__*/( + React.createElement("div", { className: "w-full mx-auto container" }, /*#__PURE__*/ + React.createElement("div", { className: "w-full flex flex-row gap-2 my-5" }, /*#__PURE__*/ + React.createElement(SearchBar, { placeholder: 'Search...' }), /*#__PURE__*/ + React.createElement(ButtonGroup, null), /*#__PURE__*/ + React.createElement(ButtonWithIcon, { text: 'Add New...' })), /*#__PURE__*/ + + React.createElement("div", { className: "grid grid-cols-3 gap-6 justify-evenly w-full" }, + cardsList.map((card, index) => { + return /*#__PURE__*/( + React.createElement(Card, { key: index, data: card })); + + })))); + + + +} + +function ThemeButton() { + const onClick = React.useCallback(() => { + document.querySelector('#overlay').classList.toggle('active'); + }, []); + return /*#__PURE__*/( + React.createElement("button", { onClick: onClick, className: "cursor-pointer px-3 py-2 bg-black text-white rounded-md" }, "Toggle Theme")); + +} + +function HeaderItem({ active, children }) { + return /*#__PURE__*/( + React.createElement("div", { className: `py-3 font-semibold cursor-pointer text-gray-500/75 hover:text-gray-500 transition-all duration-75 ease-in-out ${active ? 'text-black border-b-2 border-solid border-black hover:text-black' : ''}` }, + children)); + + +} + +function Header() { + const tabs = [ + { + name: 'Overview', + active: true }, + + { + name: 'Integrations', + active: false }, + + { + name: 'Activity', + active: false }, + + { + name: 'Domains', + active: false }, + + { + name: 'Usage', + active: false }, + + { + name: 'Settings', + active: false }]; + + + const supplementalButtons = [ + 'Feedback', 'Changelog', 'Help', 'Docs']; + + return /*#__PURE__*/( + React.createElement("div", { className: "w-full bg-white px-6 pt-6 border-b-2 border-gray-200" }, /*#__PURE__*/ + React.createElement("div", { className: "w-full flex flex-row pb-2" }, /*#__PURE__*/ + React.createElement("div", { className: "w-full flex flex-row" }, /*#__PURE__*/ + React.createElement("div", { className: "flex flex-row" }, /*#__PURE__*/ + React.createElement("svg", { height: "35", width: "60" }, /*#__PURE__*/ + React.createElement("polygon", { points: "25,0 60,60 0,40" })), /*#__PURE__*/ + + React.createElement("div", { className: "flex h-full self-center items-center" }, /*#__PURE__*/ + React.createElement("svg", { height: "30", width: "50" }, /*#__PURE__*/ + React.createElement("polygon", { points: "25,0 0,50", style: { strokeWidth: '1px', stroke: 'gray' } })))), /*#__PURE__*/ + + + + React.createElement("div", { className: "flex flex-row w-full justify-between" }, /*#__PURE__*/ + React.createElement("div", { className: "flex flex-row items-center gap-2" }, /*#__PURE__*/ + React.createElement("div", { className: "bg-blue-300 rounded-full w-9 h-9", style: { filter: 'invert(0)' } }), /*#__PURE__*/ + React.createElement("span", { className: "font-bold text-black" }, "Testing User"), /*#__PURE__*/ + React.createElement("div", { className: "rounded-full bg-gray-400 text-black px-2 py-1 text-xs font-bold" }, "Hobby")), /*#__PURE__*/ + + React.createElement("div", null, /*#__PURE__*/ + React.createElement(ThemeButton, null)), /*#__PURE__*/ + + React.createElement("div", { className: "flex flex-row" }, + supplementalButtons.map((button, index) => { + return /*#__PURE__*/( + React.createElement("div", { key: index, className: `cursor-pointer text-gray-500/75 hover:text-gray-500 transition-all duration-75 ease-in-out font-semibold antialiased flex items-center px-3 ${index === 0 ? 'border-2 hover:border-gray-200 border-gray-100 rounded-md' : ''}` }, button)); + + }), /*#__PURE__*/ + React.createElement("div", { className: "w-6 flex items-center h-full mr-2 cursor-pointer text-gray-500/75 hover:text-gray-500 transition-all duration-75 ease-in-out" }, /*#__PURE__*/ + React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", class: "icon icon-tabler icon-tabler-bell", width: "100%", height: "100%", viewBox: "0 0 24 24", "stroke-width": "1.5", stroke: "currentColor", fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" }, /*#__PURE__*/ + React.createElement("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }), /*#__PURE__*/ + React.createElement("path", { d: "M10 5a2 2 0 0 1 4 0a7 7 0 0 1 4 6v3a4 4 0 0 0 2 3h-16a4 4 0 0 0 2 -3v-3a7 7 0 0 1 4 -6" }), /*#__PURE__*/ + React.createElement("path", { d: "M9 17v1a3 3 0 0 0 6 0v-1" }))), /*#__PURE__*/ + + + React.createElement("div", { className: "bg-blue-300 rounded-full w-9 h-9 cursor-pointer", style: { filter: 'invert(0)' } }))))), /*#__PURE__*/ + + + + + React.createElement("div", { className: "w-full flex flex-row gap-6" }, + tabs.map((tab, index) => { + return /*#__PURE__*/( + React.createElement(HeaderItem, { key: index, active: tab.active }, + tab.name)); + + + })))); + + + +} + +function App() { + return /*#__PURE__*/( + React.createElement("div", { id: "content", className: "w-full h-full flex flex-col bg-blue-50 pb-8 relative" }, /*#__PURE__*/ + React.createElement("div", { id: "overlay" }), /*#__PURE__*/ + React.createElement(Header, null), /*#__PURE__*/ + React.createElement(Content, null))); + + +} + + + + + + + + + + +ReactDOM.render( /*#__PURE__*/React.createElement(App, null), document.getElementById("root")); \ No newline at end of file diff --git a/clip-path-theme-switch-backdrop-filter-version/dist/style.css b/clip-path-theme-switch-backdrop-filter-version/dist/style.css new file mode 100644 index 0000000..e5606b3 --- /dev/null +++ b/clip-path-theme-switch-backdrop-filter-version/dist/style.css @@ -0,0 +1,32 @@ +:root { + --transition-timing: 1s; +} + +body, html{ + margin: 0; + padding: 0; + width: 100%; + height: 100vh; +} + +#overlay { + position: absolute; + height: 0%; + width: 100%; + backdrop-filter: invert(1); + transition: height var(--transition-timing) ease-in-out; + user-select: none; + pointer-events: none; +} + +#overlay.active { + height: 100%; +} + +#overlay ~ div .shadow-lg { + transition: var(--transition-timing) ease-in-out; +} + +#overlay.active ~ div .shadow-lg { + box-shadow: none; +} \ No newline at end of file diff --git a/clip-path-theme-switch-backdrop-filter-version/src/index.html b/clip-path-theme-switch-backdrop-filter-version/src/index.html new file mode 100644 index 0000000..b02261b --- /dev/null +++ b/clip-path-theme-switch-backdrop-filter-version/src/index.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/clip-path-theme-switch-backdrop-filter-version/src/script.js b/clip-path-theme-switch-backdrop-filter-version/src/script.js new file mode 100644 index 0000000..e10bda9 --- /dev/null +++ b/clip-path-theme-switch-backdrop-filter-version/src/script.js @@ -0,0 +1,327 @@ +/* Inspired and modelled after https://twitter.com/emilkowalski_/status/1592997196911501312?s=20&t=_ZLymh8Tb2IcsZqCLiIACg + +Obviously its a bit different. He uses clip-path and im trying to use backdrop-filter to invert. It could use some cleanup with #overlay.active cleaning up some asset colors, but its an idea for now. +*/ + +function ButtonWithIcon ({text}) { + return ( +
+ +
+ ) +} + +function ButtonGroup () { + return ( +
+
+
+ + + + + + + +
+
+
+
+ + + + + + + + + +
+
+
+ ); +} + +function SearchBar({placeholder}) { + return ( +
+ +
+ + + + + +
+
+ +
+ ) +} + +function Card ({data}) { + return ( +
+
+
+
N
+
+ {data.title} + {data.subtitle} +
+
+
+
+
+
+ + + + +
+
+
+
+
+
+ {data.content} +
+
+
+ + + + + + + + + +
+ From {data.from} +
+
+ {data.date}d ago via  +
+ + + +
+
+
+ ) +} + +function Content () { + const cardsList = [ + { + title: 'test-user-card', + subtitle: 'test-user-app.vercel.app', + content: 'Initial commit from Create Next App', + from: 'main', + date: '10' + }, + { + title: 'test-user-card', + subtitle: 'test-user-app.vercel.app', + content: 'Initial commit from Create Next App', + from: 'main', + date: '10' + }, + { + title: 'test-user-card', + subtitle: 'test-user-app.vercel.app', + content: 'Initial commit from Create Next App', + from: 'main', + date: '10' + }, + { + title: 'test-user-card', + subtitle: 'test-user-app.vercel.app', + content: 'Initial commit from Create Next App', + from: 'main', + date: '10' + }, + { + title: 'test-user-card', + subtitle: 'test-user-app.vercel.app', + content: 'Initial commit from Create Next App', + from: 'main', + date: '10' + }, + { + title: 'test-user-card', + subtitle: 'test-user-app.vercel.app', + content: 'Initial commit from Create Next App', + from: 'main', + date: '10' + }, + { + title: 'test-user-card', + subtitle: 'test-user-app.vercel.app', + content: 'Initial commit from Create Next App', + from: 'main', + date: '10' + }, + { + title: 'test-user-card', + subtitle: 'test-user-app.vercel.app', + content: 'Initial commit from Create Next App', + from: 'main', + date: '10' + }, + { + title: 'test-user-card', + subtitle: 'test-user-app.vercel.app', + content: 'Initial commit from Create Next App', + from: 'main', + date: '10' + }, + ] + return ( +
+
+ + + +
+
+ {cardsList.map((card, index) => { + return ( + + ); + })} +
+
+ ) +} + +function ThemeButton () { + const onClick = React.useCallback(() => { + document.querySelector('#overlay').classList.toggle('active'); + }, []); + return ( + + ); +} + +function HeaderItem ({active, children}) { + return ( +
+ {children} +
+ ) +} + +function Header () { + const tabs = [ + { + name: 'Overview', + active: true, + }, + { + name: 'Integrations', + active: false, + }, + { + name: 'Activity', + active: false, + }, + { + name: 'Domains', + active: false, + }, + { + name: 'Usage', + active: false, + }, + { + name: 'Settings', + active: false, + }, + ]; + const supplementalButtons = [ + 'Feedback', 'Changelog', 'Help', 'Docs' + ]; + return ( +
+
+
+
+ + + +
+ + + +
+
+
+
+
+ Testing User +
Hobby
+
+
+ +
+
+ {supplementalButtons.map((button, index) => { + return ( +
{button}
+ ) + })} +
+ + + + + +
+
+
+
+
+
+
+ {tabs.map((tab, index) => { + return ( + + {tab.name} + + ) + })} +
+
+ ) +} + +function App () { + return ( +
+
+
+ +
+ ); +} + + + + + + + + + + +ReactDOM.render(, document.getElementById("root")); \ No newline at end of file diff --git a/clip-path-theme-switch-backdrop-filter-version/src/style.css b/clip-path-theme-switch-backdrop-filter-version/src/style.css new file mode 100644 index 0000000..e5606b3 --- /dev/null +++ b/clip-path-theme-switch-backdrop-filter-version/src/style.css @@ -0,0 +1,32 @@ +:root { + --transition-timing: 1s; +} + +body, html{ + margin: 0; + padding: 0; + width: 100%; + height: 100vh; +} + +#overlay { + position: absolute; + height: 0%; + width: 100%; + backdrop-filter: invert(1); + transition: height var(--transition-timing) ease-in-out; + user-select: none; + pointer-events: none; +} + +#overlay.active { + height: 100%; +} + +#overlay ~ div .shadow-lg { + transition: var(--transition-timing) ease-in-out; +} + +#overlay.active ~ div .shadow-lg { + box-shadow: none; +} \ No newline at end of file diff --git a/clipped-image-reveal-on-hover/README.markdown b/clipped-image-reveal-on-hover/README.markdown new file mode 100644 index 0000000..7f34672 --- /dev/null +++ b/clipped-image-reveal-on-hover/README.markdown @@ -0,0 +1,5 @@ +# Clipped Image Reveal on Hover + +A Pen created on CodePen.io. Original URL: [https://codepen.io/kathykato/pen/pogaOKG](https://codepen.io/kathykato/pen/pogaOKG). + +Hover effect using clip-path that reveals an image while following the cursor. diff --git a/clipped-image-reveal-on-hover/dist/index.html b/clipped-image-reveal-on-hover/dist/index.html new file mode 100644 index 0000000..4c41183 --- /dev/null +++ b/clipped-image-reveal-on-hover/dist/index.html @@ -0,0 +1,26 @@ + + + + + CodePen - Clipped Image Reveal on Hover + + + + + +
+ Tokyo Tower + + + + + Tokyo Tower + + + +
+ + + + + diff --git a/clipped-image-reveal-on-hover/dist/script.js b/clipped-image-reveal-on-hover/dist/script.js new file mode 100644 index 0000000..7b4dc1e --- /dev/null +++ b/clipped-image-reveal-on-hover/dist/script.js @@ -0,0 +1,12 @@ +const linkText = document.querySelector('.link-text'); +const linkImage = document.querySelector('.link-image'); + +function showImgContent(e) { + x = e.clientX; + y = e.clientY; + linkImage.style.transform = `translate3d(${x}px, ${y}px, 0)`; + linkText.style.setProperty('--x',(x)+'px'); + linkText.style.setProperty('--y',(y)+'px'); +} + +document.addEventListener('mousemove', showImgContent); \ No newline at end of file diff --git a/clipped-image-reveal-on-hover/dist/style.css b/clipped-image-reveal-on-hover/dist/style.css new file mode 100644 index 0000000..3bfa203 --- /dev/null +++ b/clipped-image-reveal-on-hover/dist/style.css @@ -0,0 +1,109 @@ +@import url("https://fonts.googleapis.com/css2?family=Work+Sans:wght@900&display=swap"); +* { + box-sizing: border-box; +} +*::before, *::after { + box-sizing: border-box; +} + +body { + font-family: 'Work Sans', sans-serif; + font-size: 1em; + margin: 0; + background: #f2f0ed; + overflow: hidden; +} + +.container { + position: relative; + display: -webkit-box; + display: flex; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + width: 100%; + min-height: 100vh; +} + +a { + text-decoration: none; +} + +.link { + z-index: 1; + position: relative; + display: inline-block; + font-size: 3em; + color: #808080; + text-transform: uppercase; + -webkit-transition: color 275ms ease; + transition: color 275ms ease; +} +.link:hover { + color: #333; +} +.link:hover ~ .hover-container .link-text { + opacity: 1; +} +.link:hover ~ .hover-container .image-container { + opacity: 1; +} + +.link-text { + z-index: 2; + position: absolute; + display: -webkit-box; + display: flex; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + top: 0; + left: 0; + right: 0; + bottom: 0; + font-size: 3em; + color: #fff; + text-transform: uppercase; + pointer-events: none; + -webkit-clip-path: circle(75px at var(--x) var(--y)); + clip-path: circle(75px at var(--x) var(--y)); + opacity: 0; + -webkit-transition: opacity 250ms ease; + transition: opacity 250ms ease; +} + +.image-container { + z-index: -2; + position: absolute; + top: 0; + left: 0; + width: 150px; + height: 150px; + opacity: 0; + -webkit-transition: opacity 250ms ease; + transition: opacity 250ms ease; +} + +.image-inner { + position: absolute; + top: -75px; + left: -75px; + width: 150px; + height: 150px; +} + +.link-image { + display: block; + max-width: 100%; + width: 150px; + height: 150px; + -o-object-fit: cover; + object-fit: cover; + -o-object-position: center; + object-position: center; + border-radius: 50%; + -webkit-filter: brightness(0.9); + filter: brightness(0.9); +} \ No newline at end of file diff --git a/clipped-image-reveal-on-hover/license.txt b/clipped-image-reveal-on-hover/license.txt new file mode 100644 index 0000000..836c6e3 --- /dev/null +++ b/clipped-image-reveal-on-hover/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Katherine Kato (https://codepen.io/kathykato/pen/pogaOKG) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/clipped-image-reveal-on-hover/src/index.html b/clipped-image-reveal-on-hover/src/index.html new file mode 100644 index 0000000..0de1a0c --- /dev/null +++ b/clipped-image-reveal-on-hover/src/index.html @@ -0,0 +1,11 @@ +
+ Tokyo Tower + + + + + Tokyo Tower + + + +
\ No newline at end of file diff --git a/clipped-image-reveal-on-hover/src/script.js b/clipped-image-reveal-on-hover/src/script.js new file mode 100644 index 0000000..7b4dc1e --- /dev/null +++ b/clipped-image-reveal-on-hover/src/script.js @@ -0,0 +1,12 @@ +const linkText = document.querySelector('.link-text'); +const linkImage = document.querySelector('.link-image'); + +function showImgContent(e) { + x = e.clientX; + y = e.clientY; + linkImage.style.transform = `translate3d(${x}px, ${y}px, 0)`; + linkText.style.setProperty('--x',(x)+'px'); + linkText.style.setProperty('--y',(y)+'px'); +} + +document.addEventListener('mousemove', showImgContent); \ No newline at end of file diff --git a/clipped-image-reveal-on-hover/src/style.scss b/clipped-image-reveal-on-hover/src/style.scss new file mode 100644 index 0000000..2563c16 --- /dev/null +++ b/clipped-image-reveal-on-hover/src/style.scss @@ -0,0 +1,104 @@ +@import url('https://fonts.googleapis.com/css2?family=Work+Sans:wght@900&display=swap'); + +$black: #333; +$gray: #808080; +$white: #fff; +$bg: #f2f0ed; + +* { + box-sizing: border-box; + &::before, &::after { + box-sizing: border-box; + } +} + +body { + font-family: 'Work Sans', sans-serif; + font-size: 1em; + margin: 0; + background: $bg; + overflow: hidden; +} + +.container { + position: relative; + display: flex; + justify-content: center; + align-items: center; + width: 100%; + min-height: 100vh; +} + +a { + text-decoration: none; +} + +.link { + z-index: 1; + position: relative; + display: inline-block; + font-size: 3em; + color: $gray; + text-transform: uppercase; + transition: color 275ms ease; + &:hover { + color: $black; + ~ .hover-container { + .link-text { + opacity: 1; + } + .image-container { + opacity: 1; + } + } + } +} + +.link-text { + z-index: 2; + position: absolute; + display: flex; + justify-content: center; + align-items: center; + top: 0; + left: 0; + right: 0; + bottom: 0; + font-size: 3em; + color: $white; + text-transform: uppercase; + pointer-events: none; + clip-path: circle(75px at var(--x) var(--y)); + opacity: 0; + transition: opacity 250ms ease; +} + +.image-container { + z-index: -2; + position: absolute; + top: 0; + left: 0; + width: 150px; + height: 150px; + opacity: 0; + transition: opacity 250ms ease; +} + +.image-inner { + position: absolute; + top: -75px; + left: -75px; + width: 150px; + height: 150px; +} + +.link-image { + display: block; + max-width: 100%; + width: 150px; + height: 150px; + object-fit: cover; + object-position: center; + border-radius: 50%; + filter: brightness(0.9); +} \ No newline at end of file diff --git a/codepen-challenge-knockout-text/README.markdown b/codepen-challenge-knockout-text/README.markdown new file mode 100644 index 0000000..da2b13b --- /dev/null +++ b/codepen-challenge-knockout-text/README.markdown @@ -0,0 +1,5 @@ +# Codepen Challenge: Knockout Text + +A Pen created on CodePen.io. Original URL: [https://codepen.io/Sicontis/pen/NWvopeq](https://codepen.io/Sicontis/pen/NWvopeq). + +A club party poster/flyer. Wanted to try layering elements and using mix-blend-mode to give the image some texture. diff --git a/codepen-challenge-knockout-text/dist/index.html b/codepen-challenge-knockout-text/dist/index.html new file mode 100644 index 0000000..1ac38bb --- /dev/null +++ b/codepen-challenge-knockout-text/dist/index.html @@ -0,0 +1,94 @@ + + + + + CodePen - Codepen Challenge: Knockout Text + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+

Codepen

+

Presents

+
+ +
+ + + + + + Summer + + + + + + + + + Lounge + + +
+ +
+
22
+
Jan
+
2022
+
+ +
+
Featuring
+
    +
  • DJ Coyier
  • +
  • //
  • +
  • DJ Kuhn
  • +
  • //
  • +
  • D-Jhey
  • +
+
+ +
+
+ $25 Pre Sale Tickets / 18+ Ages / $30 at Door +
+
+

Club Sicontis

+

Level 2, 48 Fort Street, AKL

+

www.clubsicontis.com

+
+
+ +
+
+ + + + + diff --git a/codepen-challenge-knockout-text/dist/script.js b/codepen-challenge-knockout-text/dist/script.js new file mode 100644 index 0000000..9dc9635 --- /dev/null +++ b/codepen-challenge-knockout-text/dist/script.js @@ -0,0 +1,2 @@ +// Inspired by this Pin +// https://www.pinterest.nz/pin/117797346494620639/ \ No newline at end of file diff --git a/codepen-challenge-knockout-text/dist/style.css b/codepen-challenge-knockout-text/dist/style.css new file mode 100644 index 0000000..c94eb4d --- /dev/null +++ b/codepen-challenge-knockout-text/dist/style.css @@ -0,0 +1,294 @@ +@import url("https://fonts.googleapis.com/css2?family=Catamaran:wght@900&family=PT+Sans+Narrow&display=swap"); + +*, +::before, +::after { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + min-height: 100vh; + display: grid; + place-items: center; + + --white: #e9e9e9; + + background-color: lavender; + background-image: url("https://www.transparenttextures.com/patterns/black-paper.png"); +} + +ul { + list-style: none; +} + +.poster { + height: 90vh; + max-width: 700px; + width: 100%; + background-image: url("trees-bkg.jpg"); + background-image: url("https://www.sicontis.com/codepen/cpc-knockout-text/trees-bkg.jpg"); + background-size: cover; + background-position-y: -100px; + background-repeat: no-repeat; + position: relative; + font-family: "PT Sans Narrow", sans-serif; + overflow: hidden; + box-shadow: rgb(38, 57, 77) 0px 20px 30px -10px; + border: 10px solid rgb(34, 33, 33); +} + +.lens-flare { + position: absolute; + left: 0; + top: 0; + z-index: 1; + width: 100%; + height: 100%; + background-image: linear-gradient( + 45deg, + rgba(72, 33, 24, 0.2) 0%, + rgba(72, 33, 24, 0.2) 36%, + rgba(107, 68, 41, 0.2) 36%, + rgba(107, 68, 41, 0.2) 51%, + rgba(141, 103, 58, 0.2) 51%, + rgba(141, 103, 58, 0.2) 64%, + rgba(176, 137, 74, 0.2) 64%, + rgba(176, 137, 74, 0.2) 76%, + rgba(210, 172, 91, 0.2) 76%, + rgba(210, 172, 91, 0.2) 100% + ), + linear-gradient( + 135deg, + rgba(16, 29, 192, 0.2) 0%, + rgba(16, 29, 192, 0.2) 40%, + rgba(61, 43, 200, 0.2) 40%, + rgba(61, 43, 200, 0.2) 41%, + rgba(107, 57, 208, 0.2) 41%, + rgba(107, 57, 208, 0.2) 47%, + rgba(152, 70, 215, 0.2) 47%, + rgba(152, 70, 215, 0.2) 88%, + rgba(198, 84, 223, 0.2) 88%, + rgba(198, 84, 223, 0.2) 91%, + rgba(243, 98, 231, 0.2) 91%, + rgba(243, 98, 231, 0.2) 100% + ), + linear-gradient( + 90deg, + rgb(255, 136, 53) 0%, + rgb(255, 136, 53) 10%, + rgb(246, 113, 64) 10%, + rgb(246, 113, 64) 12%, + rgb(236, 89, 75) 12%, + rgb(236, 89, 75) 24%, + rgb(227, 66, 87) 24%, + rgb(227, 66, 87) 29%, + rgb(217, 42, 98) 29%, + rgb(217, 42, 98) 40%, + rgb(208, 19, 109) 40%, + rgb(208, 19, 109) 100% + ); + mix-blend-mode: hard-light; + opacity: 0.7; +} + +.stripes { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + z-index: 2; + position: relative; +} + +.stripe-block { + position: absolute; + height: 700px; + width: 300px; + display: grid; + grid-template-columns: repeat(4, 1fr); + opacity: 0.3; +} +.stripe-block div { + border-right: 1px solid var(--white); + opacity: 0.5; +} + +.str1 { + transform: translate(-200px, -100px) rotateZ(-45deg); +} +.str2 { + bottom: 0; + right: 0; + transform: translate(30%, 60%) rotateZ(-45deg); +} +.str3 { + top: 0; + right: 0; + transform: translate(60%, -40%) rotateZ(45deg); +} + +.info { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 3; + display: grid; + justify-items: center; + color: var(--white); +} + +/* HEADER +---------------------- */ +.info header { + text-align: center; + text-transform: uppercase; + letter-spacing: 4px; + padding: 2em; +} +.info header h3 { + font-size: 2rem; + font-weight: normal; +} + +/* MAIN +---------------------- */ +.info main { + text-align: center; +} + +svg#text-1 { + width: 450px; + height: 100px; +} +svg#text-2 { + width: 300px; + height: 80px; +} +svg rect { + width: 100%; + height: 100%; + fill: var(--white); +} +svg text { + font-size: 6rem; + text-transform: uppercase; + font-family: "Catamaran", sans-serif; + fill: #000; +} + +/* SECTIONS +---------------------- */ +section#date { + display: grid; + grid-template-columns: repeat(3, 80px); + grid-column-gap: 10px; +} +.circle-item { + width: 80px; + height: 80px; + display: grid; + place-items: center; + text-transform: uppercase; + font-size: 1.75rem; + border: 2px solid var(--white); + opacity: 0.8; + border-radius: 50%; + mix-blend-mode: overlay; +} + +section#talent { + padding: 10px; +} +.dj-title { + padding: 2px 5px; + text-transform: uppercase; + background-color: var(--white); + color: #000; + letter-spacing: 2px; + width: min-content; + margin: 0 auto; + mix-blend-mode: screen; +} +.dj-list { + margin-top: 10px; + display: grid; + grid-template-columns: repeat( + min-content, + 20px, + min-content, + 20px, + min-content + ); + grid-auto-flow: column; +} +.dj-list li { + text-transform: uppercase; + font-size: 1.5rem; + padding: 0 5px; + letter-spacing: 2px; +} + +/* FOOTER +---------------------- */ +footer { + padding: 10px; +} +.tickets { + padding: 5px 0; + text-transform: uppercase; + font-weight: bold; + letter-spacing: 1px; + border-top: 1px solid var(--white); + border-bottom: 1px solid var(--white); +} +.venue { + padding: 1em; + text-align: center; + text-transform: uppercase; +} +.venue h3, +.venue p { + letter-spacing: 2px; +} + +@media screen and (max-width: 600px) { + .poster { + height: 100vh; + background-position-y: 0px; + } + + .info header h3 { + font-size: 1.4rem; + } + + svg#text-1 { + width: 360px; + height: 70px; + } + svg#text-2 { + width: 240px; + height: 60px; + } + + section#date { + grid-template-columns: repeat(3, 60px); + } + .circle-item { + width: 60px; + height: 60px; + font-size: 1.3rem; + } + .dj-title, + .tickets, + .venue { + font-size: 0.9rem; + } + .dj-list li { + font-size: 1.2rem; + } +} \ No newline at end of file diff --git a/codepen-challenge-knockout-text/license.txt b/codepen-challenge-knockout-text/license.txt new file mode 100644 index 0000000..e56be45 --- /dev/null +++ b/codepen-challenge-knockout-text/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Sicontis (https://codepen.io/Sicontis/pen/NWvopeq) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/codepen-challenge-knockout-text/src/index.html b/codepen-challenge-knockout-text/src/index.html new file mode 100644 index 0000000..98df224 --- /dev/null +++ b/codepen-challenge-knockout-text/src/index.html @@ -0,0 +1,79 @@ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+

Codepen

+

Presents

+
+ +
+ + + + + + Summer + + + + + + + + + Lounge + + +
+ +
+
22
+
Jan
+
2022
+
+ +
+
Featuring
+
    +
  • DJ Coyier
  • +
  • //
  • +
  • DJ Kuhn
  • +
  • //
  • +
  • D-Jhey
  • +
+
+ +
+
+ $25 Pre Sale Tickets / 18+ Ages / $30 at Door +
+
+

Club Sicontis

+

Level 2, 48 Fort Street, AKL

+

www.clubsicontis.com

+
+
+ +
+
\ No newline at end of file diff --git a/codepen-challenge-knockout-text/src/script.js b/codepen-challenge-knockout-text/src/script.js new file mode 100644 index 0000000..47da1e4 --- /dev/null +++ b/codepen-challenge-knockout-text/src/script.js @@ -0,0 +1,2 @@ +// Inspired by this Pin +// https://www.pinterest.nz/pin/117797346494620639/ diff --git a/codepen-challenge-knockout-text/src/style.css b/codepen-challenge-knockout-text/src/style.css new file mode 100644 index 0000000..93a4de2 --- /dev/null +++ b/codepen-challenge-knockout-text/src/style.css @@ -0,0 +1,294 @@ +@import url("https://fonts.googleapis.com/css2?family=Catamaran:wght@900&family=PT+Sans+Narrow&display=swap"); + +*, +::before, +::after { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + min-height: 100vh; + display: grid; + place-items: center; + + --white: #e9e9e9; + + background-color: lavender; + background-image: url("https://www.transparenttextures.com/patterns/black-paper.png"); +} + +ul { + list-style: none; +} + +.poster { + height: 90vh; + max-width: 700px; + width: 100%; + background-image: url("trees-bkg.jpg"); + background-image: url("https://www.sicontis.com/codepen/cpc-knockout-text/trees-bkg.jpg"); + background-size: cover; + background-position-y: -100px; + background-repeat: no-repeat; + position: relative; + font-family: "PT Sans Narrow", sans-serif; + overflow: hidden; + box-shadow: rgb(38, 57, 77) 0px 20px 30px -10px; + border: 10px solid rgb(34, 33, 33); +} + +.lens-flare { + position: absolute; + left: 0; + top: 0; + z-index: 1; + width: 100%; + height: 100%; + background-image: linear-gradient( + 45deg, + rgba(72, 33, 24, 0.2) 0%, + rgba(72, 33, 24, 0.2) 36%, + rgba(107, 68, 41, 0.2) 36%, + rgba(107, 68, 41, 0.2) 51%, + rgba(141, 103, 58, 0.2) 51%, + rgba(141, 103, 58, 0.2) 64%, + rgba(176, 137, 74, 0.2) 64%, + rgba(176, 137, 74, 0.2) 76%, + rgba(210, 172, 91, 0.2) 76%, + rgba(210, 172, 91, 0.2) 100% + ), + linear-gradient( + 135deg, + rgba(16, 29, 192, 0.2) 0%, + rgba(16, 29, 192, 0.2) 40%, + rgba(61, 43, 200, 0.2) 40%, + rgba(61, 43, 200, 0.2) 41%, + rgba(107, 57, 208, 0.2) 41%, + rgba(107, 57, 208, 0.2) 47%, + rgba(152, 70, 215, 0.2) 47%, + rgba(152, 70, 215, 0.2) 88%, + rgba(198, 84, 223, 0.2) 88%, + rgba(198, 84, 223, 0.2) 91%, + rgba(243, 98, 231, 0.2) 91%, + rgba(243, 98, 231, 0.2) 100% + ), + linear-gradient( + 90deg, + rgb(255, 136, 53) 0%, + rgb(255, 136, 53) 10%, + rgb(246, 113, 64) 10%, + rgb(246, 113, 64) 12%, + rgb(236, 89, 75) 12%, + rgb(236, 89, 75) 24%, + rgb(227, 66, 87) 24%, + rgb(227, 66, 87) 29%, + rgb(217, 42, 98) 29%, + rgb(217, 42, 98) 40%, + rgb(208, 19, 109) 40%, + rgb(208, 19, 109) 100% + ); + mix-blend-mode: hard-light; + opacity: 0.7; +} + +.stripes { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + z-index: 2; + position: relative; +} + +.stripe-block { + position: absolute; + height: 700px; + width: 300px; + display: grid; + grid-template-columns: repeat(4, 1fr); + opacity: 0.3; +} +.stripe-block div { + border-right: 1px solid var(--white); + opacity: 0.5; +} + +.str1 { + transform: translate(-200px, -100px) rotateZ(-45deg); +} +.str2 { + bottom: 0; + right: 0; + transform: translate(30%, 60%) rotateZ(-45deg); +} +.str3 { + top: 0; + right: 0; + transform: translate(60%, -40%) rotateZ(45deg); +} + +.info { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 3; + display: grid; + justify-items: center; + color: var(--white); +} + +/* HEADER +---------------------- */ +.info header { + text-align: center; + text-transform: uppercase; + letter-spacing: 4px; + padding: 2em; +} +.info header h3 { + font-size: 2rem; + font-weight: normal; +} + +/* MAIN +---------------------- */ +.info main { + text-align: center; +} + +svg#text-1 { + width: 450px; + height: 100px; +} +svg#text-2 { + width: 300px; + height: 80px; +} +svg rect { + width: 100%; + height: 100%; + fill: var(--white); +} +svg text { + font-size: 6rem; + text-transform: uppercase; + font-family: "Catamaran", sans-serif; + fill: #000; +} + +/* SECTIONS +---------------------- */ +section#date { + display: grid; + grid-template-columns: repeat(3, 80px); + grid-column-gap: 10px; +} +.circle-item { + width: 80px; + height: 80px; + display: grid; + place-items: center; + text-transform: uppercase; + font-size: 1.75rem; + border: 2px solid var(--white); + opacity: 0.8; + border-radius: 50%; + mix-blend-mode: overlay; +} + +section#talent { + padding: 10px; +} +.dj-title { + padding: 2px 5px; + text-transform: uppercase; + background-color: var(--white); + color: #000; + letter-spacing: 2px; + width: min-content; + margin: 0 auto; + mix-blend-mode: screen; +} +.dj-list { + margin-top: 10px; + display: grid; + grid-template-columns: repeat( + min-content, + 20px, + min-content, + 20px, + min-content + ); + grid-auto-flow: column; +} +.dj-list li { + text-transform: uppercase; + font-size: 1.5rem; + padding: 0 5px; + letter-spacing: 2px; +} + +/* FOOTER +---------------------- */ +footer { + padding: 10px; +} +.tickets { + padding: 5px 0; + text-transform: uppercase; + font-weight: bold; + letter-spacing: 1px; + border-top: 1px solid var(--white); + border-bottom: 1px solid var(--white); +} +.venue { + padding: 1em; + text-align: center; + text-transform: uppercase; +} +.venue h3, +.venue p { + letter-spacing: 2px; +} + +@media screen and (max-width: 600px) { + .poster { + height: 100vh; + background-position-y: 0px; + } + + .info header h3 { + font-size: 1.4rem; + } + + svg#text-1 { + width: 360px; + height: 70px; + } + svg#text-2 { + width: 240px; + height: 60px; + } + + section#date { + grid-template-columns: repeat(3, 60px); + } + .circle-item { + width: 60px; + height: 60px; + font-size: 1.3rem; + } + .dj-title, + .tickets, + .venue { + font-size: 0.9rem; + } + .dj-list li { + font-size: 1.2rem; + } +} diff --git a/codevember-12/README.markdown b/codevember-12/README.markdown new file mode 100644 index 0000000..c53882d --- /dev/null +++ b/codevember-12/README.markdown @@ -0,0 +1,7 @@ +# Codevember #12 + _A Pen created at CodePen.io. Original URL: [https://codepen.io/dpdknl/pen/aVWVrw](https://codepen.io/dpdknl/pen/aVWVrw). + + Follow the magic zebra on it's trip! where is this mystical being going? who knows! +Maybe clicking on it will reveal what kind of trip it's going to be, or maybe it won't, who knows! :D + +Fun fact: It is the mountains that move in this pen. (click and stare at the plane, you'll see that it is actually standing still while the mountains move across it) \ No newline at end of file diff --git a/codevember-12/dist/index.html b/codevember-12/dist/index.html new file mode 100644 index 0000000..14db34a --- /dev/null +++ b/codevember-12/dist/index.html @@ -0,0 +1,20 @@ + + + + + Codevember #12 + + + + + +
+ Made with ๐Ÿ˜˜  by Mo +
+ + + + + + + \ No newline at end of file diff --git a/codevember-12/dist/script.js b/codevember-12/dist/script.js new file mode 100644 index 0000000..555a279 --- /dev/null +++ b/codevember-12/dist/script.js @@ -0,0 +1,525 @@ +let scene; +let camera; +let renderer; +let controls; +let zebra; +let landscape; +let mixer; +let prevTime; + +const horse = 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/51676/horse.json'; +class ShieldMaterial extends THREE.ShaderMaterial { + + constructor(params) { + // Make uniforms unique per instance + const shader = Object.assign({}, ShieldMaterial.shader, { + uniforms: Object.assign({}, ShieldMaterial.shader.uniforms, { + color: { value: params.color }, + offset: { value: params.offset } }) }); + + + + // console.log(scene); + + super(shader); + + this.loop = timestamp => { + window.requestAnimationFrame(this.loop); + this.uniforms.time.value = timestamp; + }; + + window.requestAnimationFrame(this.loop); + }} + + + +ShieldMaterial.shader = { + morphTargets: true, + vertexShader: ` +#define GLSLIFY 1 +varying vec2 vUv; +varying vec3 vPosition; + +#include + +void main() +{ + + #include + #include + + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4( transformed, 1.0 ); + vPosition = position; +} +`, + fragmentShader: ` + +#ifdef GL_ES + precision mediump float; +#define GLSLIFY 1 +#endif + +uniform float time; +uniform float offset; +uniform vec3 color; + +varying vec3 vPosition; +varying vec2 vUv; + +// +// Description : Array and textureless GLSL 2D/3D/4D simplex +// noise functions. +// Author : Ian McEwan, Ashima Arts. +// Maintainer : stegu +// Lastmod : 20110822 (ijm) +// License : Copyright (C) 2011 Ashima Arts. All rights reserved. +// Distributed under the MIT License. See LICENSE file. +// https://github.com/ashima/webgl-noise +// https://github.com/stegu/webgl-noise +// + +vec3 mod289(vec3 x) { + return x - floor(x * (1.0 / 289.0)) * 289.0; +} + +vec4 mod289(vec4 x) { + return x - floor(x * (1.0 / 289.0)) * 289.0; +} + +vec4 permute(vec4 x) { + return mod289(((x*34.0)+1.0)*x); +} + +vec4 taylorInvSqrt(vec4 r) +{ + return 1.79284291400159 - 0.85373472095314 * r; +} + +float snoise(vec3 v) +{ + const vec2 C = vec2(1.0/6.0, 1.0/3.0) ; + const vec4 D = vec4(0.0, 0.5, 1.0, 2.0); + + // First corner + vec3 i = floor(v + dot(v, C.yyy) ); + vec3 x0 = v - i + dot(i, C.xxx) ; + + // Other corners + vec3 g_0 = step(x0.yzx, x0.xyz); + vec3 l = 1.0 - g_0; + vec3 i1 = min( g_0.xyz, l.zxy ); + vec3 i2 = max( g_0.xyz, l.zxy ); + + // x0 = x0 - 0.0 + 0.0 * C.xxx; + // x1 = x0 - i1 + 1.0 * C.xxx; + // x2 = x0 - i2 + 2.0 * C.xxx; + // x3 = x0 - 1.0 + 3.0 * C.xxx; + vec3 x1 = x0 - i1 + C.xxx; + vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y + vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y + + // Permutations + i = mod289(i); + vec4 p = permute( permute( permute( + i.z + vec4(0.0, i1.z, i2.z, 1.0 )) + + i.y + vec4(0.0, i1.y, i2.y, 1.0 )) + + i.x + vec4(0.0, i1.x, i2.x, 1.0 )); + + // Gradients: 7x7 points over a square, mapped onto an octahedron. + // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) + float n_ = 0.142857142857; // 1.0/7.0 + vec3 ns = n_ * D.wyz - D.xzx; + + vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7) + + vec4 x_ = floor(j * ns.z); + vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N) + + vec4 x = x_ *ns.x + ns.yyyy; + vec4 y = y_ *ns.x + ns.yyyy; + vec4 h = 1.0 - abs(x) - abs(y); + + vec4 b0 = vec4( x.xy, y.xy ); + vec4 b1 = vec4( x.zw, y.zw ); + + //vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0; + //vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0; + vec4 s0 = floor(b0)*2.0 + 1.0; + vec4 s1 = floor(b1)*2.0 + 1.0; + vec4 sh = -step(h, vec4(0.0)); + + vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ; + vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ; + + vec3 p0 = vec3(a0.xy,h.x); + vec3 p1 = vec3(a0.zw,h.y); + vec3 p2 = vec3(a1.xy,h.z); + vec3 p3 = vec3(a1.zw,h.w); + + //Normalise gradients + vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3))); + p0 *= norm.x; + p1 *= norm.y; + p2 *= norm.z; + p3 *= norm.w; + + // Mix final noise value + vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0); + m = m * m; + return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1), + dot(p2,x2), dot(p3,x3) ) ); +} + +float perlin3( vec3 coord ) { + + // float n = 0.0; + float n = 10.0 * abs( snoise( coord )); + return n; + +} + +void main( void ) { + vec2 uv = (vPosition.zx / vec2(100.0, 100.0)); + float change = 10.0; + float changeCoord = 14.0; + + if(color.r > 0.1) { + change = time * 0.001; + changeCoord = time * 0.0001; + } + + uv.x = uv.x + change; + vec3 coord = vec3( uv.xy, changeCoord ); + + + float n = perlin3( coord.xyz ); + + vec3 colors = vec3( + (255.0 * sin(n * 6.0)) + ); + + float head = smoothstep(115.0,0.0,vPosition.z) * smoothstep(-100.0,800.0,vPosition.z); + vec4 zebrahead = vec4(color, 1.0); + + if(colors.r < 0.1) colors = color; + + gl_FragColor = mix(zebrahead, vec4( colors.r, colors.g, colors.b, 1.0 ), head); + +} +`, + uniforms: { + time: { value: performance.now() } } }; + + +class LandscapeMaterial extends THREE.ShaderMaterial { + + constructor(params) { + // Make uniforms unique per instance + const shader = Object.assign({}, LandscapeMaterial.shader, { + uniforms: Object.assign({}, LandscapeMaterial.shader.uniforms, { + color: { value: params.color } }) }); + + + + // console.log(scene); + + super(shader); + + this.loop = timestamp => { + window.requestAnimationFrame(this.loop); + this.uniforms.time.value = timestamp; + }; + + window.requestAnimationFrame(this.loop); + }} + + + +LandscapeMaterial.shader = { + blending: THREE.AdditiveBlending, + transparent: true, + // wireframe: true, + vertexShader: ` +#define GLSLIFY 1 +uniform float time; +varying vec3 vPosition; + +// +// GLSL textureless classic 3D noise "cnoise", +// with an RSL-style periodic variant "pnoise". +// Author: Stefan Gustavson (stefan.gustavson@liu.se) +// Version: 2011-10-11 +// +// Many thanks to Ian McEwan of Ashima Arts for the +// ideas for permutation and gradient selection. +// +// Copyright (c) 2011 Stefan Gustavson. All rights reserved. +// Distributed under the MIT license. See LICENSE file. +// https://github.com/ashima/webgl-noise +// +vec3 mod289(vec3 x) +{ + return x - floor(x * (1.0 / 289.0)) * 289.0; +} +vec4 mod289(vec4 x) +{ + return x - floor(x * (1.0 / 289.0)) * 289.0; +} +vec4 permute(vec4 x) +{ + return mod289(((x*34.0)+1.0)*x); +} +vec4 taylorInvSqrt(vec4 r) +{ + return 1.79284291400159 - 0.85373472095314 * r; +} +vec3 fade(vec3 t) { + return t*t*t*(t*(t*6.0-15.0)+10.0); +} +float cnoise(vec3 P) +{ + vec3 Pi0 = floor(P); + // Integer part for indexing + vec3 Pi1 = Pi0 + vec3(1.0); + // Integer part + 1 + Pi0 = mod289(Pi0); + Pi1 = mod289(Pi1); + vec3 Pf0 = fract(P); + // Fractional part for interpolation + vec3 Pf1 = Pf0 - vec3(1.0); + // Fractional part - 1.0 + vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x); + vec4 iy = vec4(Pi0.yy, Pi1.yy); + vec4 iz0 = Pi0.zzzz; + vec4 iz1 = Pi1.zzzz; + vec4 ixy = permute(permute(ix) + iy); + vec4 ixy0 = permute(ixy + iz0); + vec4 ixy1 = permute(ixy + iz1); + vec4 gx0 = ixy0 * (1.0 / 7.0); + vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5; + gx0 = fract(gx0); + vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0); + vec4 sz0 = step(gz0, vec4(0.0)); + gx0 -= sz0 * (step(0.0, gx0) - 0.5); + gy0 -= sz0 * (step(0.0, gy0) - 0.5); + vec4 gx1 = ixy1 * (1.0 / 7.0); + vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5; + gx1 = fract(gx1); + vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1); + vec4 sz1 = step(gz1, vec4(0.0)); + gx1 -= sz1 * (step(0.0, gx1) - 0.5); + gy1 -= sz1 * (step(0.0, gy1) - 0.5); + vec3 g000 = vec3(gx0.x,gy0.x,gz0.x); + vec3 g100 = vec3(gx0.y,gy0.y,gz0.y); + vec3 g010 = vec3(gx0.z,gy0.z,gz0.z); + vec3 g110 = vec3(gx0.w,gy0.w,gz0.w); + vec3 g001 = vec3(gx1.x,gy1.x,gz1.x); + vec3 g101 = vec3(gx1.y,gy1.y,gz1.y); + vec3 g011 = vec3(gx1.z,gy1.z,gz1.z); + vec3 g111 = vec3(gx1.w,gy1.w,gz1.w); + vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); + g000 *= norm0.x; + g010 *= norm0.y; + g100 *= norm0.z; + g110 *= norm0.w; + vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); + g001 *= norm1.x; + g011 *= norm1.y; + g101 *= norm1.z; + g111 *= norm1.w; + float n000 = dot(g000, Pf0); + float n100 = dot(g100, vec3(Pf1.x, Pf0.yz)); + float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z)); + float n110 = dot(g110, vec3(Pf1.xy, Pf0.z)); + float n001 = dot(g001, vec3(Pf0.xy, Pf1.z)); + float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z)); + float n011 = dot(g011, vec3(Pf0.x, Pf1.yz)); + float n111 = dot(g111, Pf1); + vec3 fade_xyz = fade(Pf0); + vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z); + vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y); + float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); + return 2.2 * n_xyz; +} + +mat4 rotateMatrixX(float radian) { + return mat4( + 1.0, 0.0, 0.0, 0.0, + 0.0, cos(radian), -sin(radian), 0.0, + 0.0, sin(radian), cos(radian), 0.0, + 0.0, 0.0, 0.0, 1.0 + ); +} + +mat4 rotateMatrixY(float radian) { + return mat4( + cos(radian), 0.0, sin(radian), 0.0, + 0.0, 1.0, 0.0, 0.0, + -sin(radian), 0.0, cos(radian), 0.0, + 0.0, 0.0, 0.0, 1.0 + ); +} + +mat4 rotateMatrixZ(float radian) { + return mat4( + cos(radian), -sin(radian), 0.0, 0.0, + sin(radian), cos(radian), 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0, + 0.0, 0.0, 0.0, 1.0 + ); +} + +void main(void) { + + float sin1 = sin(radians(position.y / 128.0 * 90.0)); + + //speed + vec3 noisePosition = position + vec3(-time * 0.05, 0.0, 0.0); + float noise1 = cnoise(noisePosition * 0.02); + float noise2 = cnoise(noisePosition * 0.08); + float noise3 = cnoise(noisePosition * 0.4); + vec3 lastPosition = position + vec3(0.0, 0.0, + noise1 * sin1 * 8.0 + + noise2 * sin1 * 8.0 + + noise2 * sin1 * 8.0 + + noise3 * sin1 * 2.0 + + noise3 * sin1 * 1.0 + + pow(sin1, 2.0) * 40.0); + vPosition = lastPosition; + + vec4 mvPosition = modelViewMatrix * vec4( lastPosition, 1.0 ); + // gl_PointSize = floor(20.0 * ( 100.0 / -mvPosition.z )); + // gl_PointSize = 2.0 * (1.0+ 300.0 / length( mvPosition.xyz ) ); + gl_Position = projectionMatrix * mvPosition; +} +`, + fragmentShader: ` +uniform sampler2D texture; + +precision highp float; +#define GLSLIFY 1 +varying vec3 vPosition; + +void main () +{ + + float dist = sqrt(dot (vPosition, vPosition)); + + mediump vec4 final_color; + final_color.rgb = vec3(237.0 / 255.0, 201.0 / 255.0, 175.0 / 255.0); + // final_color.rgb = vec3(194.0 / 255.0, 178.0 / 255.0, 128.0 / 255.0); + final_color.a = (((80.0 - dist) / 70.0) * 1.0); + // gl_FragColor = final_color.a * (vec4(final_color.rgb, 1.0)); + + float grass = smoothstep(10.0,40.0,dist); + vec4 grassfield = vec4(96.0/ 255.0, 128.0/ 255.0, 56.0/ 255.0, 1.0); + + gl_FragColor = mix(grassfield, final_color.a * (vec4(final_color.rgb, 1.0)), grass); + + // if ( gl_FragColor.a > 0.9 ) gl_FragColor.rgb = vec3(96.0/ 255.0, 128.0/ 255.0, 56.0/ 255.0); +} +`, + uniforms: { + time: { value: performance.now() } } }; + + +function init() { + initScene(); + loadModel().then(() => { + requestAnimationFrame(loop); + }); + window.addEventListener('resize', onResize); +} + +function initScene() { + prevTime = Date.now(); + + scene = new THREE.Scene(); + + camera = new THREE.PerspectiveCamera(20, window.innerWidth / window.innerHeight, 1, 10000); + camera.position.set(0, 400, 1200); + var vector = new THREE.Vector3(0, 100, 0); + // vector.applyQuaternion( camera.quaternion ); + camera.target = vector; + // camera.updateMatrix(); + scene.add(camera); + + camera.updateProjectionMatrix(); + + renderer = new THREE.WebGLRenderer({ + alpha: true, + // antialias: true, + pixelRatio: window.devicePixelRatio, + antialias: window.devicePixelRatio === 1 }); + + renderer.setSize(window.innerWidth, window.innerHeight); + + controls = new THREE.OrbitControls(camera, renderer.domElement); + + document.body.appendChild(renderer.domElement); +} + +function loadModel() { + return new Promise((res, rej) => { + new THREE.JSONLoader().load(horse, geometry => { + + const material = new ShieldMaterial({ + color: new THREE.Color(0x000000), + offset: 10, + morphTargets: true }); + + zebra = new THREE.Mesh(geometry, material); + zebra.rotation.y = -Math.PI / 2; + scene.add(zebra); + + let landscapeGeometry = new THREE.PlaneGeometry(128, 128, 128, 128); + const landscapeMaterial = new LandscapeMaterial({ + color: new THREE.Color(0xffffff) }); + + landscape = new THREE.Mesh(landscapeGeometry, landscapeMaterial); + landscape.rotation.x = -Math.PI / 2; + landscape.scale.set(15.0, 15.0, 15.0); + scene.add(landscape); + + mixer = new THREE.AnimationMixer(zebra); + var clip = THREE.AnimationClip.CreateFromMorphTargetSequence('gallop', geometry.morphTargets, 30); + mixer.clipAction(clip).play(); + + res(); + }); + }); +} + +function loop(timestamp) { + requestAnimationFrame(loop); + + if (mixer) { + let time = Date.now(); + mixer.update((time - prevTime) * 0.0005); + prevTime = time; + } + + controls.update(); + + camera.lookAt(camera.target); + renderer.render(scene, camera); +} + +function onResize() { + renderer.setSize(window.innerWidth, window.innerHeight); + camera.aspect = window.innerWidth / window.innerHeight; + camera.updateProjectionMatrix(); +} + +window.addEventListener('click', function () { + zebra.material.uniforms.color.value = new THREE.Color(Math.random() * 0xffffff); + // console.log(landscape.material.wireframe); + if (landscape.material.wireframe == false) { + landscape.material.wireframe = true; + } else { + landscape.material.wireframe = false; + } +}); + +init(); \ No newline at end of file diff --git a/codevember-12/dist/style.css b/codevember-12/dist/style.css new file mode 100644 index 0000000..75c8793 --- /dev/null +++ b/codevember-12/dist/style.css @@ -0,0 +1,52 @@ +@import url("https://fonts.googleapis.com/css?family=Roboto"); +*, *:before, *:after { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +html, body, canvas { + width: 100%; + height: 100%; + overflow: hidden; +} + +body { + background: radial-gradient(#514969, #0e171b); +} + +.footer { + position: fixed; + right: 0; + bottom: 0; + left: 0; + padding: 10px 10px; + text-align: right; + font-family: 'Roboto', sans-serif; + font-size: 12px; +} +.footer.v-dark { + background-color: #343436; + color: #fff; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.footer.v-light { + background-color: #fff; + color: #343436; +} + +.footer-anchor { + display: inline-block; + margin-left: 5px; + padding: 2px 4px; + color: #343436; + text-decoration: none; + background-color: #fcd000; + border-radius: 4px; + opacity: 1; + transition: opacity 0.2s; +} +.footer-anchor:hover { + opacity: 0.6; +} diff --git a/codevember-12/license.txt b/codevember-12/license.txt new file mode 100644 index 0000000..5113f8f --- /dev/null +++ b/codevember-12/license.txt @@ -0,0 +1,13 @@ + + + + diff --git a/codevember-12/src/index.html b/codevember-12/src/index.html new file mode 100644 index 0000000..3818d66 --- /dev/null +++ b/codevember-12/src/index.html @@ -0,0 +1,3 @@ +
+ Made with ๐Ÿ˜˜  by Mo +
\ No newline at end of file diff --git a/codevember-12/src/script.babel b/codevember-12/src/script.babel new file mode 100644 index 0000000..d3b6092 --- /dev/null +++ b/codevember-12/src/script.babel @@ -0,0 +1,525 @@ +let scene; +let camera; +let renderer; +let controls; +let zebra; +let landscape; +let mixer; +let prevTime; + +const horse = 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/51676/horse.json'; +class ShieldMaterial extends THREE.ShaderMaterial { + + constructor(params) { + // Make uniforms unique per instance + const shader = Object.assign({}, ShieldMaterial.shader, { + uniforms: Object.assign({}, ShieldMaterial.shader.uniforms, { + color: { value: params.color }, + offset: { value: params.offset } + }) + }); + + // console.log(scene); + + super(shader); + + this.loop = timestamp => { + window.requestAnimationFrame(this.loop); + this.uniforms.time.value = timestamp; + }; + + window.requestAnimationFrame(this.loop); + } + +} + +ShieldMaterial.shader = { + morphTargets: true, + vertexShader: ` +#define GLSLIFY 1 +varying vec2 vUv; +varying vec3 vPosition; + +#include + +void main() +{ + + #include + #include + + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4( transformed, 1.0 ); + vPosition = position; +} +`, + fragmentShader: ` + +#ifdef GL_ES + precision mediump float; +#define GLSLIFY 1 +#endif + +uniform float time; +uniform float offset; +uniform vec3 color; + +varying vec3 vPosition; +varying vec2 vUv; + +// +// Description : Array and textureless GLSL 2D/3D/4D simplex +// noise functions. +// Author : Ian McEwan, Ashima Arts. +// Maintainer : stegu +// Lastmod : 20110822 (ijm) +// License : Copyright (C) 2011 Ashima Arts. All rights reserved. +// Distributed under the MIT License. See LICENSE file. +// https://github.com/ashima/webgl-noise +// https://github.com/stegu/webgl-noise +// + +vec3 mod289(vec3 x) { + return x - floor(x * (1.0 / 289.0)) * 289.0; +} + +vec4 mod289(vec4 x) { + return x - floor(x * (1.0 / 289.0)) * 289.0; +} + +vec4 permute(vec4 x) { + return mod289(((x*34.0)+1.0)*x); +} + +vec4 taylorInvSqrt(vec4 r) +{ + return 1.79284291400159 - 0.85373472095314 * r; +} + +float snoise(vec3 v) +{ + const vec2 C = vec2(1.0/6.0, 1.0/3.0) ; + const vec4 D = vec4(0.0, 0.5, 1.0, 2.0); + + // First corner + vec3 i = floor(v + dot(v, C.yyy) ); + vec3 x0 = v - i + dot(i, C.xxx) ; + + // Other corners + vec3 g_0 = step(x0.yzx, x0.xyz); + vec3 l = 1.0 - g_0; + vec3 i1 = min( g_0.xyz, l.zxy ); + vec3 i2 = max( g_0.xyz, l.zxy ); + + // x0 = x0 - 0.0 + 0.0 * C.xxx; + // x1 = x0 - i1 + 1.0 * C.xxx; + // x2 = x0 - i2 + 2.0 * C.xxx; + // x3 = x0 - 1.0 + 3.0 * C.xxx; + vec3 x1 = x0 - i1 + C.xxx; + vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y + vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y + + // Permutations + i = mod289(i); + vec4 p = permute( permute( permute( + i.z + vec4(0.0, i1.z, i2.z, 1.0 )) + + i.y + vec4(0.0, i1.y, i2.y, 1.0 )) + + i.x + vec4(0.0, i1.x, i2.x, 1.0 )); + + // Gradients: 7x7 points over a square, mapped onto an octahedron. + // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) + float n_ = 0.142857142857; // 1.0/7.0 + vec3 ns = n_ * D.wyz - D.xzx; + + vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7) + + vec4 x_ = floor(j * ns.z); + vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N) + + vec4 x = x_ *ns.x + ns.yyyy; + vec4 y = y_ *ns.x + ns.yyyy; + vec4 h = 1.0 - abs(x) - abs(y); + + vec4 b0 = vec4( x.xy, y.xy ); + vec4 b1 = vec4( x.zw, y.zw ); + + //vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0; + //vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0; + vec4 s0 = floor(b0)*2.0 + 1.0; + vec4 s1 = floor(b1)*2.0 + 1.0; + vec4 sh = -step(h, vec4(0.0)); + + vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ; + vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ; + + vec3 p0 = vec3(a0.xy,h.x); + vec3 p1 = vec3(a0.zw,h.y); + vec3 p2 = vec3(a1.xy,h.z); + vec3 p3 = vec3(a1.zw,h.w); + + //Normalise gradients + vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3))); + p0 *= norm.x; + p1 *= norm.y; + p2 *= norm.z; + p3 *= norm.w; + + // Mix final noise value + vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0); + m = m * m; + return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1), + dot(p2,x2), dot(p3,x3) ) ); +} + +float perlin3( vec3 coord ) { + + // float n = 0.0; + float n = 10.0 * abs( snoise( coord )); + return n; + +} + +void main( void ) { + vec2 uv = (vPosition.zx / vec2(100.0, 100.0)); + float change = 10.0; + float changeCoord = 14.0; + + if(color.r > 0.1) { + change = time * 0.001; + changeCoord = time * 0.0001; + } + + uv.x = uv.x + change; + vec3 coord = vec3( uv.xy, changeCoord ); + + + float n = perlin3( coord.xyz ); + + vec3 colors = vec3( + (255.0 * sin(n * 6.0)) + ); + + float head = smoothstep(115.0,0.0,vPosition.z) * smoothstep(-100.0,800.0,vPosition.z); + vec4 zebrahead = vec4(color, 1.0); + + if(colors.r < 0.1) colors = color; + + gl_FragColor = mix(zebrahead, vec4( colors.r, colors.g, colors.b, 1.0 ), head); + +} +`, + uniforms: { + time: { value: performance.now() } + } +}; +class LandscapeMaterial extends THREE.ShaderMaterial { + + constructor(params) { + // Make uniforms unique per instance + const shader = Object.assign({}, LandscapeMaterial.shader, { + uniforms: Object.assign({}, LandscapeMaterial.shader.uniforms, { + color: { value: params.color } + }) + }); + + // console.log(scene); + + super(shader); + + this.loop = timestamp => { + window.requestAnimationFrame(this.loop); + this.uniforms.time.value = timestamp; + }; + + window.requestAnimationFrame(this.loop); + } + +} + +LandscapeMaterial.shader = { + blending: THREE.AdditiveBlending, + transparent: true, + // wireframe: true, + vertexShader: ` +#define GLSLIFY 1 +uniform float time; +varying vec3 vPosition; + +// +// GLSL textureless classic 3D noise "cnoise", +// with an RSL-style periodic variant "pnoise". +// Author: Stefan Gustavson (stefan.gustavson@liu.se) +// Version: 2011-10-11 +// +// Many thanks to Ian McEwan of Ashima Arts for the +// ideas for permutation and gradient selection. +// +// Copyright (c) 2011 Stefan Gustavson. All rights reserved. +// Distributed under the MIT license. See LICENSE file. +// https://github.com/ashima/webgl-noise +// +vec3 mod289(vec3 x) +{ + return x - floor(x * (1.0 / 289.0)) * 289.0; +} +vec4 mod289(vec4 x) +{ + return x - floor(x * (1.0 / 289.0)) * 289.0; +} +vec4 permute(vec4 x) +{ + return mod289(((x*34.0)+1.0)*x); +} +vec4 taylorInvSqrt(vec4 r) +{ + return 1.79284291400159 - 0.85373472095314 * r; +} +vec3 fade(vec3 t) { + return t*t*t*(t*(t*6.0-15.0)+10.0); +} +float cnoise(vec3 P) +{ + vec3 Pi0 = floor(P); + // Integer part for indexing + vec3 Pi1 = Pi0 + vec3(1.0); + // Integer part + 1 + Pi0 = mod289(Pi0); + Pi1 = mod289(Pi1); + vec3 Pf0 = fract(P); + // Fractional part for interpolation + vec3 Pf1 = Pf0 - vec3(1.0); + // Fractional part - 1.0 + vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x); + vec4 iy = vec4(Pi0.yy, Pi1.yy); + vec4 iz0 = Pi0.zzzz; + vec4 iz1 = Pi1.zzzz; + vec4 ixy = permute(permute(ix) + iy); + vec4 ixy0 = permute(ixy + iz0); + vec4 ixy1 = permute(ixy + iz1); + vec4 gx0 = ixy0 * (1.0 / 7.0); + vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5; + gx0 = fract(gx0); + vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0); + vec4 sz0 = step(gz0, vec4(0.0)); + gx0 -= sz0 * (step(0.0, gx0) - 0.5); + gy0 -= sz0 * (step(0.0, gy0) - 0.5); + vec4 gx1 = ixy1 * (1.0 / 7.0); + vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5; + gx1 = fract(gx1); + vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1); + vec4 sz1 = step(gz1, vec4(0.0)); + gx1 -= sz1 * (step(0.0, gx1) - 0.5); + gy1 -= sz1 * (step(0.0, gy1) - 0.5); + vec3 g000 = vec3(gx0.x,gy0.x,gz0.x); + vec3 g100 = vec3(gx0.y,gy0.y,gz0.y); + vec3 g010 = vec3(gx0.z,gy0.z,gz0.z); + vec3 g110 = vec3(gx0.w,gy0.w,gz0.w); + vec3 g001 = vec3(gx1.x,gy1.x,gz1.x); + vec3 g101 = vec3(gx1.y,gy1.y,gz1.y); + vec3 g011 = vec3(gx1.z,gy1.z,gz1.z); + vec3 g111 = vec3(gx1.w,gy1.w,gz1.w); + vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); + g000 *= norm0.x; + g010 *= norm0.y; + g100 *= norm0.z; + g110 *= norm0.w; + vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); + g001 *= norm1.x; + g011 *= norm1.y; + g101 *= norm1.z; + g111 *= norm1.w; + float n000 = dot(g000, Pf0); + float n100 = dot(g100, vec3(Pf1.x, Pf0.yz)); + float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z)); + float n110 = dot(g110, vec3(Pf1.xy, Pf0.z)); + float n001 = dot(g001, vec3(Pf0.xy, Pf1.z)); + float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z)); + float n011 = dot(g011, vec3(Pf0.x, Pf1.yz)); + float n111 = dot(g111, Pf1); + vec3 fade_xyz = fade(Pf0); + vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z); + vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y); + float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); + return 2.2 * n_xyz; +} + +mat4 rotateMatrixX(float radian) { + return mat4( + 1.0, 0.0, 0.0, 0.0, + 0.0, cos(radian), -sin(radian), 0.0, + 0.0, sin(radian), cos(radian), 0.0, + 0.0, 0.0, 0.0, 1.0 + ); +} + +mat4 rotateMatrixY(float radian) { + return mat4( + cos(radian), 0.0, sin(radian), 0.0, + 0.0, 1.0, 0.0, 0.0, + -sin(radian), 0.0, cos(radian), 0.0, + 0.0, 0.0, 0.0, 1.0 + ); +} + +mat4 rotateMatrixZ(float radian) { + return mat4( + cos(radian), -sin(radian), 0.0, 0.0, + sin(radian), cos(radian), 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0, + 0.0, 0.0, 0.0, 1.0 + ); +} + +void main(void) { + + float sin1 = sin(radians(position.y / 128.0 * 90.0)); + + //speed + vec3 noisePosition = position + vec3(-time * 0.05, 0.0, 0.0); + float noise1 = cnoise(noisePosition * 0.02); + float noise2 = cnoise(noisePosition * 0.08); + float noise3 = cnoise(noisePosition * 0.4); + vec3 lastPosition = position + vec3(0.0, 0.0, + noise1 * sin1 * 8.0 + + noise2 * sin1 * 8.0 + + noise2 * sin1 * 8.0 + + noise3 * sin1 * 2.0 + + noise3 * sin1 * 1.0 + + pow(sin1, 2.0) * 40.0); + vPosition = lastPosition; + + vec4 mvPosition = modelViewMatrix * vec4( lastPosition, 1.0 ); + // gl_PointSize = floor(20.0 * ( 100.0 / -mvPosition.z )); + // gl_PointSize = 2.0 * (1.0+ 300.0 / length( mvPosition.xyz ) ); + gl_Position = projectionMatrix * mvPosition; +} +`, + fragmentShader: ` +uniform sampler2D texture; + +precision highp float; +#define GLSLIFY 1 +varying vec3 vPosition; + +void main () +{ + + float dist = sqrt(dot (vPosition, vPosition)); + + mediump vec4 final_color; + final_color.rgb = vec3(237.0 / 255.0, 201.0 / 255.0, 175.0 / 255.0); + // final_color.rgb = vec3(194.0 / 255.0, 178.0 / 255.0, 128.0 / 255.0); + final_color.a = (((80.0 - dist) / 70.0) * 1.0); + // gl_FragColor = final_color.a * (vec4(final_color.rgb, 1.0)); + + float grass = smoothstep(10.0,40.0,dist); + vec4 grassfield = vec4(96.0/ 255.0, 128.0/ 255.0, 56.0/ 255.0, 1.0); + + gl_FragColor = mix(grassfield, final_color.a * (vec4(final_color.rgb, 1.0)), grass); + + // if ( gl_FragColor.a > 0.9 ) gl_FragColor.rgb = vec3(96.0/ 255.0, 128.0/ 255.0, 56.0/ 255.0); +} +`, + uniforms: { + time: { value: performance.now() } + } +}; +function init() { + initScene(); + loadModel().then(() => { + requestAnimationFrame(loop); + }); + window.addEventListener('resize', onResize); +} + +function initScene() { + prevTime = Date.now(); + + scene = new THREE.Scene(); + + camera = new THREE.PerspectiveCamera(20, window.innerWidth / window.innerHeight, 1, 10000); + camera.position.set(0, 400, 1200); + var vector = new THREE.Vector3(0, 100, 0); + // vector.applyQuaternion( camera.quaternion ); + camera.target = vector; + // camera.updateMatrix(); + scene.add(camera); + + camera.updateProjectionMatrix(); + + renderer = new THREE.WebGLRenderer({ + alpha: true, + // antialias: true, + pixelRatio: window.devicePixelRatio, + antialias: window.devicePixelRatio === 1, + }); + renderer.setSize(window.innerWidth, window.innerHeight); + + controls = new THREE.OrbitControls(camera, renderer.domElement); + + document.body.appendChild(renderer.domElement); +} + +function loadModel() { + return new Promise((res, rej) => { + new THREE.JSONLoader().load(horse, geometry => { + + const material = new ShieldMaterial({ + color: new THREE.Color(0x000000), + offset: 10, + morphTargets: true + }); + zebra = new THREE.Mesh(geometry, material); + zebra.rotation.y = -Math.PI / 2; + scene.add(zebra); + + let landscapeGeometry = new THREE.PlaneGeometry(128, 128, 128, 128); + const landscapeMaterial = new LandscapeMaterial({ + color: new THREE.Color(0xffffff) + }); + landscape = new THREE.Mesh(landscapeGeometry, landscapeMaterial); + landscape.rotation.x = -Math.PI / 2; + landscape.scale.set(15.0, 15.0, 15.0); + scene.add(landscape); + + mixer = new THREE.AnimationMixer(zebra); + var clip = THREE.AnimationClip.CreateFromMorphTargetSequence('gallop', geometry.morphTargets, 30); + mixer.clipAction(clip).play(); + + res(); + }); + }); +} + +function loop(timestamp) { + requestAnimationFrame(loop); + + if (mixer) { + let time = Date.now(); + mixer.update((time - prevTime) * 0.0005); + prevTime = time; + } + + controls.update(); + + camera.lookAt(camera.target); + renderer.render(scene, camera); +} + +function onResize() { + renderer.setSize(window.innerWidth, window.innerHeight); + camera.aspect = window.innerWidth / window.innerHeight; + camera.updateProjectionMatrix(); +} + +window.addEventListener('click', function () { + zebra.material.uniforms.color.value = new THREE.Color(Math.random() * 0xffffff); + // console.log(landscape.material.wireframe); + if(landscape.material.wireframe == false) { + landscape.material.wireframe = true; + } else { + landscape.material.wireframe = false; + } +}); + +init(); diff --git a/codevember-12/src/style.scss b/codevember-12/src/style.scss new file mode 100644 index 0000000..5044614 --- /dev/null +++ b/codevember-12/src/style.scss @@ -0,0 +1,59 @@ +@import url('https://fonts.googleapis.com/css?family=Roboto'); + +$black: #343436; +$white: #fff; +$yellow: #fcd000; + +*, *:before, *:after { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +html, body, canvas { + width: 100%; + height: 100%; + overflow: hidden; +} + +body { + background: radial-gradient(hsl(255, 18%, 35%), hsl(198, 32%, 8%)); +} + +.footer { + position: fixed; + right: 0; + bottom: 0; + left: 0; + padding: 10px 10px; + text-align: right; + font-family: 'Roboto', sans-serif; + font-size: 12px; + + &.v-dark { + background-color: $black; + color: $white; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + &.v-light { + background-color: $white; + color: $black; + } +} + +.footer-anchor { + display: inline-block; + margin-left: 5px; + padding: 2px 4px; + color: $black; + text-decoration: none; + background-color: $yellow; + border-radius: 4px; + opacity: 1; + transition: opacity 0.2s; + + &:hover { + opacity: 0.6; + } +} \ No newline at end of file diff --git a/codevember-29-hypnotic-neon-lights/README.markdown b/codevember-29-hypnotic-neon-lights/README.markdown new file mode 100644 index 0000000..dc05332 --- /dev/null +++ b/codevember-29-hypnotic-neon-lights/README.markdown @@ -0,0 +1,5 @@ +# #CodeVember 29 | Hypnotic neon lights + +A Pen created on CodePen.io. Original URL: [https://codepen.io/terabaud/pen/xRPxwV](https://codepen.io/terabaud/pen/xRPxwV). + +Roughly based on this simple [DOS experiment](https://twitter.com/terabaud/status/803639860967809024) diff --git a/codevember-29-hypnotic-neon-lights/dist/index.html b/codevember-29-hypnotic-neon-lights/dist/index.html new file mode 100644 index 0000000..c3fdeec --- /dev/null +++ b/codevember-29-hypnotic-neon-lights/dist/index.html @@ -0,0 +1,47 @@ + + + + + CodePen - #CodeVember 29 | Hypnotic neon lights + + + + + + + + + + + + + + diff --git a/codevember-29-hypnotic-neon-lights/dist/script.js b/codevember-29-hypnotic-neon-lights/dist/script.js new file mode 100644 index 0000000..3c0e587 --- /dev/null +++ b/codevember-29-hypnotic-neon-lights/dist/script.js @@ -0,0 +1,36 @@ +import GLea from 'https://terabaud.github.io/hello-webgl/lib/glea/glea.mjs'; + +const frag = document.getElementById('fragmentShader').textContent; +const vert = document.getElementById('vertexShader').textContent; + +let texture = null; + +const glea = new GLea({ + shaders: [ + GLea.fragmentShader(frag), + GLea.vertexShader(vert) + ], + buffers: { + 'pos': GLea.buffer(2, [1, 1, -1, 1, 1,-1, -1,-1]) + } +}).create(); + +function loop(time) { + const { gl } = glea; + glea.clear(); + glea.uni('width', glea.width); + glea.uni('height', glea.height); + glea.uni('time', time * .001); + gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4); + requestAnimationFrame(loop); +} + +function setup() { + const { gl } = glea; + window.addEventListener('resize', () => { + glea.resize(); + }); + loop(0); +} + +setup(); \ No newline at end of file diff --git a/codevember-29-hypnotic-neon-lights/dist/style.css b/codevember-29-hypnotic-neon-lights/dist/style.css new file mode 100644 index 0000000..c1bf066 --- /dev/null +++ b/codevember-29-hypnotic-neon-lights/dist/style.css @@ -0,0 +1,9 @@ +body { + margin: 0; + overflow: hidden; +} + +canvas { + width: 100vw; + height: 100vh; +} \ No newline at end of file diff --git a/codevember-29-hypnotic-neon-lights/license.txt b/codevember-29-hypnotic-neon-lights/license.txt new file mode 100644 index 0000000..f5030bc --- /dev/null +++ b/codevember-29-hypnotic-neon-lights/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Lea Rosema (https://codepen.io/terabaud/pen/xRPxwV) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/codevember-29-hypnotic-neon-lights/src/index.html b/codevember-29-hypnotic-neon-lights/src/index.html new file mode 100644 index 0000000..2745ac3 --- /dev/null +++ b/codevember-29-hypnotic-neon-lights/src/index.html @@ -0,0 +1,32 @@ + + + + \ No newline at end of file diff --git a/codevember-29-hypnotic-neon-lights/src/script.js b/codevember-29-hypnotic-neon-lights/src/script.js new file mode 100644 index 0000000..c802c1a --- /dev/null +++ b/codevember-29-hypnotic-neon-lights/src/script.js @@ -0,0 +1,36 @@ +import GLea from 'https://terabaud.github.io/hello-webgl/lib/glea/glea.mjs'; + +const frag = document.getElementById('fragmentShader').textContent; +const vert = document.getElementById('vertexShader').textContent; + +let texture = null; + +const glea = new GLea({ + shaders: [ + GLea.fragmentShader(frag), + GLea.vertexShader(vert) + ], + buffers: { + 'pos': GLea.buffer(2, [1, 1, -1, 1, 1,-1, -1,-1]) + } +}).create(); + +function loop(time) { + const { gl } = glea; + glea.clear(); + glea.uni('width', glea.width); + glea.uni('height', glea.height); + glea.uni('time', time * .001); + gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4); + requestAnimationFrame(loop); +} + +function setup() { + const { gl } = glea; + window.addEventListener('resize', () => { + glea.resize(); + }); + loop(0); +} + +setup(); diff --git a/codevember-29-hypnotic-neon-lights/src/style.css b/codevember-29-hypnotic-neon-lights/src/style.css new file mode 100644 index 0000000..c1bf066 --- /dev/null +++ b/codevember-29-hypnotic-neon-lights/src/style.css @@ -0,0 +1,9 @@ +body { + margin: 0; + overflow: hidden; +} + +canvas { + width: 100vw; + height: 100vh; +} \ No newline at end of file diff --git a/codevember-30-2021-pure-css-order-vs-chaos/README.markdown b/codevember-30-2021-pure-css-order-vs-chaos/README.markdown new file mode 100644 index 0000000..3c5a256 --- /dev/null +++ b/codevember-30-2021-pure-css-order-vs-chaos/README.markdown @@ -0,0 +1,43 @@ +# #codeVember #30/2021: pure CSS order vs. chaos + +A Pen created on CodePen.io. Original URL: [https://codepen.io/thebabydino/pen/VwMwRGQ](https://codepen.io/thebabydino/pen/VwMwRGQ). + +[See me code this](https://youtu.be/afADEZdsQVA) in 20 minutes. + +--- + +If the work I've been putting out since early 2012 has helped you in any way or you just like it and you wish me to be able to continue putting out stuff, please consider one of the following: + +* being a cool cat ๐Ÿ˜ผ๐ŸŽฉ and becoming a patron on Patreon + +[![become a patron button](https://assets.codepen.io/2017/btn_patreon.png)](https://www.patreon.com/anatudor) + +* making a one time donation via Ko-fi + +[![ko-fi](https://assets.codepen.io/2017/btn_kofi.svg)](https://ko-fi.com/anatudor) + +* getting me something off my Amazon WishList + +[๐ŸŽ ๐Ÿ‡บ๐Ÿ‡ธ](https://www.amazon.com/gp/registry/wishlist/2Y3C4722GXH0I/) / [๐ŸŽ ๐Ÿ‡ฌ๐Ÿ‡ง](https://www.amazon.co.uk/gp/registry/wishlist/2I25W7U0KADSR/) + +* or at least sharing this to show the rest of the world what can be done with CSS these days + +Thank you! + +--- + +Resources: + +* [inspiration](https://dribbble.com/shots/15066435-Order-vs-Chaos) + +* [layout tip](https://twitter.com/ChallengesCss/status/1471128244720181258) + +* [distance between two points in 1D](https://wumbo.net/formula/distance-between-two-points-1d/) + +* [Using Absolute Value, Sign, Rounding and Modulo in CSS Today](https://css-tricks.com/using-absolute-value-sign-rounding-and-modulo-in-css-today/) + +* [circle equation](http://herodgeometry.weebly.com/uploads/3/7/4/1/37417637/_9159574.png) + +--- + +Dedicated to the memory of someone dear who passed away in January 2019. Missing you every day. diff --git a/codevember-30-2021-pure-css-order-vs-chaos/dist/index.html b/codevember-30-2021-pure-css-order-vs-chaos/dist/index.html new file mode 100644 index 0000000..559678c --- /dev/null +++ b/codevember-30-2021-pure-css-order-vs-chaos/dist/index.html @@ -0,0 +1,1075 @@ + + + + + CodePen - #codeVember #30/2021: pure CSS order vs. chaos + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + diff --git a/codevember-30-2021-pure-css-order-vs-chaos/dist/style.css b/codevember-30-2021-pure-css-order-vs-chaos/dist/style.css new file mode 100644 index 0000000..99b4d35 --- /dev/null +++ b/codevember-30-2021-pure-css-order-vs-chaos/dist/style.css @@ -0,0 +1,30 @@ +html, body { + display: grid; +} + +html { + overflow: hidden; + height: 100%; +} + +body { + --tmpl: repeat(var(--n), 1.125em); + grid-template: var(--tmpl)/var(--tmpl); + place-content: center; +} + +.tile { + --m: calc(.5*(var(--n) - 1)); + --abs-i: max(var(--m) - var(--i), var(--i) - var(--m)); + --abs-j: max(var(--m) - var(--j), var(--j) - var(--m)); + --rat: calc((var(--abs-i)*var(--abs-i) + var(--abs-j)*var(--abs-j))/var(--m)/var(--m)); + transform: translate(var(--x), var(--y)); + background: #000; + animation: a 2s cubic-bezier(0.65, 0, 0.35, 1) calc((var(--rat) - 2)*2s) infinite alternate; +} + +@keyframes a { + 0% { + transform: scale(0.3333333333); + } +} \ No newline at end of file diff --git a/codevember-30-2021-pure-css-order-vs-chaos/license.txt b/codevember-30-2021-pure-css-order-vs-chaos/license.txt new file mode 100644 index 0000000..bbf19f0 --- /dev/null +++ b/codevember-30-2021-pure-css-order-vs-chaos/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Ana Tudor (https://codepen.io/thebabydino/pen/VwMwRGQ) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/codevember-30-2021-pure-css-order-vs-chaos/src/index.pug b/codevember-30-2021-pure-css-order-vs-chaos/src/index.pug new file mode 100644 index 0000000..299be1f --- /dev/null +++ b/codevember-30-2021-pure-css-order-vs-chaos/src/index.pug @@ -0,0 +1,18 @@ +- let n = 32; +- let p = n*n; + +- function rand(max = 100, min = 0, prc = 0) + - return +(min + (max - min)*Math.random()).toFixed(prc) + +- function rsgn() + - return Math.pow(-1, Math.round(Math.random())) + +body(style=`--n: ${n}`) + style + - for(let i = 0; i < n; i++) + | .tile:nth-of-type(#{n}n + #{i + 1}) { --i: #{i} } + | .tile:nth-of-type(n + #{n*i + 1}) { --j: #{i} } + while p-- + - let x = rsgn()*rand(150, 50); + - let y = rsgn()*rand(150, 50); + .tile(style=`--x: ${x}%; --y: ${y}%`) \ No newline at end of file diff --git a/codevember-30-2021-pure-css-order-vs-chaos/src/style.scss b/codevember-30-2021-pure-css-order-vs-chaos/src/style.scss new file mode 100644 index 0000000..8be110f --- /dev/null +++ b/codevember-30-2021-pure-css-order-vs-chaos/src/style.scss @@ -0,0 +1,24 @@ +$f: 1/3; +$t: 2s; + +html, body { display: grid } + +html { overflow: hidden; height: 100% } + +body { + --tmpl: repeat(var(--n), 1.125em); + grid-template: var(--tmpl)/var(--tmpl); + place-content: center +} + +.tile { + --m: calc(.5*(var(--n) - 1)); + --abs-i: max(var(--m) - var(--i), var(--i) - var(--m)); + --abs-j: max(var(--m) - var(--j), var(--j) - var(--m)); + --rat: calc((var(--abs-i)*var(--abs-i) + var(--abs-j)*var(--abs-j))/var(--m)/var(--m)); + transform: translate(var(--x), var(--y)); + background: #000; + animation: a $t cubic-bezier(.65, 0, .35, 1) calc((var(--rat) - 2)*#{$t}) infinite alternate +} + +@keyframes a { 0% { transform: scale($f) } } \ No newline at end of file diff --git a/codevember-9-electric-hover-effect/README.markdown b/codevember-9-electric-hover-effect/README.markdown new file mode 100644 index 0000000..a7ae730 --- /dev/null +++ b/codevember-9-electric-hover-effect/README.markdown @@ -0,0 +1,4 @@ +# #codevember #9 Electric hover effect + _A Pen created at CodePen.io. Original URL: [https://codepen.io/robin-dela/pen/vWgRPP](https://codepen.io/robin-dela/pen/vWgRPP). + + \ No newline at end of file diff --git a/codevember-9-electric-hover-effect/dist/index.html b/codevember-9-electric-hover-effect/dist/index.html new file mode 100644 index 0000000..032e0cd --- /dev/null +++ b/codevember-9-electric-hover-effect/dist/index.html @@ -0,0 +1,87 @@ + + + + + #codevember #9 Electric hover effect + + + + + +ENTER + + + + + + + + + + + \ No newline at end of file diff --git a/codevember-9-electric-hover-effect/dist/script.js b/codevember-9-electric-hover-effect/dist/script.js new file mode 100644 index 0000000..745ba8f --- /dev/null +++ b/codevember-9-electric-hover-effect/dist/script.js @@ -0,0 +1,184 @@ +var mobileAndTabletcheck = function() { + var check = false; + (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera); + return check; +}; + +var canvas = document.createElement( 'canvas' ); +var ctx = canvas.getContext( '2d' ); + +var w = 320; +var h = 320; + +var width = window.innerWidth; +var height = window.innerHeight; + +var planeSize = 600; + +var radius = 300; + +if(mobileAndTabletcheck()){ + planeSize = 400; + w = 200; + h = 200; + radius = 150; +} + +canvas.setAttribute('width', w); +canvas.setAttribute('height', h); + +// canvas.style.position = 'absolute'; +// canvas.style.width = '320px'; +// canvas.style.height = '320px'; +// canvas.style.top = '0'; +// canvas.style.left = '0'; +// canvas.style.zIndex = '100'; +// document.body.appendChild(canvas); + +window.addEventListener('resize', onWindowResize); + +var maskImage = new Image(); +// maskImage.src = "https://robindelaporte.fr/codepen/codevember/circle_disp.png"; +//because of tainted canvas +maskImage.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTM4NzkwRjM0QTk3MTFFNzlCMkFFRTA2QTZFNkM4MTgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTM4NzkwRjQ0QTk3MTFFNzlCMkFFRTA2QTZFNkM4MTgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1Mzg3OTBGMTRBOTcxMUU3OUIyQUVFMDZBNkU2QzgxOCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1Mzg3OTBGMjRBOTcxMUU3OUIyQUVFMDZBNkU2QzgxOCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pmzm5t8AABYsSURBVHja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"; +// maskImage.crossOrigin = "Anonymous"; + +var mousePos = [0, 0]; + +var raycaster = new THREE.Raycaster(); +var mouse = new THREE.Vector2(); + +if(mobileAndTabletcheck()){ + window.addEventListener('touchmove', function(e){ + mouse.x = ( e.touches[0].clientX / window.innerWidth ) * 2 - 1; + mouse.y = - ( e.touches[0].clientY / window.innerHeight ) * 2 + 1; + }); + } else { + window.addEventListener('mousemove', function(e){ + mouse.x = ( e.clientX / window.innerWidth ) * 2 - 1; + mouse.y = - ( e.clientY / window.innerHeight ) * 2 + 1; + }); +} + +function renderRay() { + raycaster.setFromCamera( mouse, camera ); + var intersects = raycaster.intersectObjects( scene.children ); + for ( var i = 0; i < intersects.length; i++ ) { + mousePos[0] = (((intersects[i].point.x / planeSize)+ 0.5) * w) - (radius*0.5); + mousePos[1] = ((((intersects[i].point.y * -1) / planeSize)+ 0.5) * h) - (radius*0.5); + } +} + + +function draw(){ + ctx.clearRect(0, 0, w, h); + ctx.drawImage(maskImage, mousePos[0], mousePos[1], radius, radius); + renderRay(); +} + +var frustumSize = 600; +var aspect = window.innerWidth / window.innerHeight; + + +var clock = new THREE.Clock(true); + +var scene = new THREE.Scene(); +camera = new THREE.OrthographicCamera( frustumSize * aspect / - 2, frustumSize * aspect / 2, frustumSize / 2, frustumSize / - 2, 1, 2000 ); + +camera.lookAt(scene.position); +camera.position.z = 1; + + +var renderer = new THREE.WebGLRenderer({ + antialias: true, + alpha: true +}); +renderer.setPixelRatio = 1; +renderer.setClearColor(0x3A405A, 1.0); +renderer.setSize( window.innerWidth, window.innerHeight ); +document.body.appendChild( renderer.domElement ); + +function onWindowResize(){ + +var aspect = window.innerWidth / window.innerHeight; + +camera.left = - frustumSize * aspect / 2; +camera.right = frustumSize * aspect / 2; +camera.top = frustumSize / 2; +camera.bottom = - frustumSize / 2; + +camera.updateProjectionMatrix(); + +renderer.setSize( window.innerWidth, window.innerHeight ); +} + +var gui = new dat.GUI(); +var params = { + dispFactor: 0.238, + speed: 24.0, +}; + +gui.add(params, 'dispFactor', 0, 1).step(0.001).onChange(function( value ) { + object.material.uniforms._dispFactor.value = value; + object.material.uniforms._dispFactor.needsUpdate = true; +}); +gui.add(params, 'speed', 1, 50).step(1).onChange(function( value ) { + object.material.uniforms._speed.value = value; + object.material.uniforms._speed.needsUpdate = true; +}); + +// var controls = new THREE.OrbitControls( camera, renderer.domElement ); + +var loader = new THREE.TextureLoader(); +loader.crossOrigin = ''; +var circle = loader.load('https://robindelaporte.fr/codepen/codevember/circle.png'); +var circle_blur = loader.load('https://robindelaporte.fr/codepen/codevember/circle_blur.png'); +var color = loader.load('https://robindelaporte.fr/codepen/codevember/map_light_disp_color.png'); +var dist = loader.load('https://robindelaporte.fr/codepen/codevember/dist_c.jpg'); + +dist.wrapS = dist.wrapT = THREE.RepeatWrapping; +color.wrapS = color.wrapT = THREE.RepeatWrapping; + +var mask = new THREE.Texture(canvas); +mask.minFilter = THREE.LinearFilter; + +var mat = new THREE.ShaderMaterial({ + uniforms: { + _time: { type: "f", value: 1.0 }, + _mask: { type: 't', value: mask }, + _color: { type: 't', value: color }, + _circle: { type: 't', value: circle }, + _circle_blur: { type: 't', value: circle_blur }, + _dist: { type: 't', value: dist }, + + _dispFactor: { type: "f", value: params.dispFactor }, + _speed: { type: "f", value: params.speed } + }, + + vertexShader: document.getElementById( 'vertexShader' ).textContent, + fragmentShader: document.getElementById( 'fragmentShader' ).textContent, + transparent: true, + opacity: 1.0, + blending: THREE.AdditiveBlending +}); + +var geometry = new THREE.PlaneBufferGeometry( planeSize, planeSize, 1 ); +var object = new THREE.Mesh(geometry, mat); +scene.add(object); + +window.addEventListener('click', function(){ +}); + + +var animate = function () { + requestAnimationFrame( animate ); + renderer.render(scene, camera); + + var d = clock.getDelta(); + mat.uniforms._time.value += d; + + mask.needsUpdate = true; + + draw(); +}; +animate(); \ No newline at end of file diff --git a/codevember-9-electric-hover-effect/dist/style.css b/codevember-9-electric-hover-effect/dist/style.css new file mode 100644 index 0000000..22735ee --- /dev/null +++ b/codevember-9-electric-hover-effect/dist/style.css @@ -0,0 +1,29 @@ +body { + margin: 0; + overflow: hidden; + position: fixed; +} +canvas { + width: 100%; + height: 100%; +} +a { + text-decoration: none; + position: absolute; + color: rgba(255, 255, 255, 0.9); + font-weight: 100; + font-size: 20px; + font-family: "helvetica"; + letter-spacing: 8px; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + transition: color 0.6s ease; + padding: 130px 90px; + border-radius: 50%; +} +a:hover { + color: rgba(255, 255, 255, 0.4); + transition: color 0.6s ease; +} diff --git a/codevember-9-electric-hover-effect/license.txt b/codevember-9-electric-hover-effect/license.txt new file mode 100644 index 0000000..0bbbd86 --- /dev/null +++ b/codevember-9-electric-hover-effect/license.txt @@ -0,0 +1,13 @@ + + + + diff --git a/codevember-9-electric-hover-effect/src/index.html b/codevember-9-electric-hover-effect/src/index.html new file mode 100644 index 0000000..c23defb --- /dev/null +++ b/codevember-9-electric-hover-effect/src/index.html @@ -0,0 +1,70 @@ +ENTER + + + + \ No newline at end of file diff --git a/codevember-9-electric-hover-effect/src/script.js b/codevember-9-electric-hover-effect/src/script.js new file mode 100644 index 0000000..745ba8f --- /dev/null +++ b/codevember-9-electric-hover-effect/src/script.js @@ -0,0 +1,184 @@ +var mobileAndTabletcheck = function() { + var check = false; + (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera); + return check; +}; + +var canvas = document.createElement( 'canvas' ); +var ctx = canvas.getContext( '2d' ); + +var w = 320; +var h = 320; + +var width = window.innerWidth; +var height = window.innerHeight; + +var planeSize = 600; + +var radius = 300; + +if(mobileAndTabletcheck()){ + planeSize = 400; + w = 200; + h = 200; + radius = 150; +} + +canvas.setAttribute('width', w); +canvas.setAttribute('height', h); + +// canvas.style.position = 'absolute'; +// canvas.style.width = '320px'; +// canvas.style.height = '320px'; +// canvas.style.top = '0'; +// canvas.style.left = '0'; +// canvas.style.zIndex = '100'; +// document.body.appendChild(canvas); + +window.addEventListener('resize', onWindowResize); + +var maskImage = new Image(); +// maskImage.src = "https://robindelaporte.fr/codepen/codevember/circle_disp.png"; +//because of tainted canvas +maskImage.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTM4NzkwRjM0QTk3MTFFNzlCMkFFRTA2QTZFNkM4MTgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTM4NzkwRjQ0QTk3MTFFNzlCMkFFRTA2QTZFNkM4MTgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1Mzg3OTBGMTRBOTcxMUU3OUIyQUVFMDZBNkU2QzgxOCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1Mzg3OTBGMjRBOTcxMUU3OUIyQUVFMDZBNkU2QzgxOCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pmzm5t8AABYsSURBVHja7F2LcuM4DgQpZv7/e9cScbdX6z0u0gAalJLMVZ2rXPErsiwAjcaDYFNV+cZb+/ddl8fR56rH/cqbEr+n+r/Vz3yNQL5BAVihS/Ez0TEbuLiNvNDthlD0poCr5/o/owBPKEf7ZhTQL/pf/Ybvp2/jBwX/pGDbN5+/JlbaHhBk+w5FGN984ewFfEKBvosLaKC8SqLcHff0JW5h/IDw5WHBtoIVtQ2l3CGtSlpz+2kkGN8s+PaAX283LmLbEEIrIgQjcP0pgX8FCWwPW3a78f9VRcx8OUPMGOa/Ex08QSR/WxJorXIXMdpmZGFf7zfCvsja9QFE+K2jgPaw8O1Fa8T/q0PMWnCRK8ihRXSpHEM3FaE9hQi7LuApht423mukIBsZbVQTOpkbyKBfi8+r7ubLEeAppl6B97apANn5ZnG8Fq0vUjhNwkIlv1uLv+VRBXiazDVSqG0DHd6+vcotlFSETKky9FEyX/DjiaAnkissxLdA8Iyfl4KyyIbQG3AHjbBABZHHLhdo5Ln9NiQwg+n24Husq2B+B/LlGdNnKoONiCSy47aNsHRLAe6WbDM4Zyy5BZ9rpMtgfosGpK8RRBCRT038fyRsJldxOz08NjT2CYjPBB0JvgXHqZBABkIbEPqfr01ghRpwgZ4w+DvQf0spdl1AI4UvhLU3QuCeElSVLGLdEexHEK3GSpVEhJYYm94QLP3Z8QXEjxGKZ+3R65HwW4E4VvMA6jx/vzYBUjAMH4WP3l8hklpbCjM2rb4Sa2dhW1W4bQnxWMTw/Csj+BZYui6hJhKwyr6PztLMkigVFRmMgvVX+cCO1UfPO6EYLEmsZN1WS5flsZrH1gUoUIJmjiMBCmTk8RG38DQHaITlR4LrBOxnd4ZcskJHRO5PAR4OQszA6hsghMjvt2KOgik6pQiQaVIl3mdZ/e69B4JnlGHH91vIV4AC8pdiTPMaUooICSTgAEpyinIYWCmasCXZzOJ3hd4DHpDxCMb/R6RPHS5gH89FUSwHmcu5zwAFVGp1ggzuXRfANjeyiaEoRt+x7p5YfktcR8QFlEAABX7fwv36fC5IoIY37EYmDC+odBv9/bmxGfY1QvgVy++JwD0l6AVeEF14DVDAg/4GEGEa651O/G9RIPPXLUFqdfIOKR8YG5bP5Od3hI/+WgEfhOJkUYVIXtK1vl2BtU+gEN28t6LFqkDNSRUzKFBtY2uVMHCnrMuSPeS7rQA9JeiEwjAE0csLZOTPErpuFGAaRWjA2ldFsCigZHgokje6MMvYmnUBbKzvJXI8JalafjeW3h3l6BtuIUsJSxDDr0K8jBI0YP2W5TeAJuKQwp16QQP5BmXcyk4mMFMQFvYZ4R5AIZj/i3IKWdg0gfWrseAJHr+fX0YxmiGAE+QQZiFMfXSByNhM8DB5eobUHcC/H0C4niL0xCUwiaII/ifw+9O4gGt5fi3Kd4Frt362G5fBuINKIYkKIcdmseROti7y891RBPt+DxTCcwcSuCt1CGBE+uYi0MsI8QLQP4G1T3MOM0hXNwINWsAZJMsEsrF/lnKN/DES+mEsHQn7IBTE4w5RoUiIpM/lkL1peIBVhitAH3H4Q8ZVUIjH1A1apRjE+v1K2NcD4UePDyD0IzgGUoIIsaIo4C3ssVi7VYTLCNrG/9O8L4EydPm8JmIGWcJqZdFFgCr077qDCLY9S0eKkKGCl0NoRB7AQ4BVQJeB/9XqZ5IV1QBt3xnEy+EHzOLV8kKTUYT+nZw+ImqeoNfnRyD4I1CcnhDPCBpRevcwVv9+fpq4vhs3sF6rc/meVcAdfH8HOYWshlHpCG6VTGAl7hdH8BFbR7A/zN8juCMlQm4AuQQPARDZWyHfkj/r86/luNdSJbTvCagXiMMTxPCEnTZ2kaQfQAnBRjE/k5c/AlZ/BNY/zN/MPfQgQygAWsUp6qjx/9di/Vfy260hnU6lsZvrb+G/G9fC9AxoQgbdTOBOMshr7LACOAJ0QBA/nMfraz1QiJ4oZeb/LxPrv+H/XJT5dCAfQf9gWDlIInmCv5sM+s8xB5H0qXIBL7/fCEg/gNBHQSm8yKATCmDz/SvsHwH0r8p2BqT4NEpwGMWz13B1I03yzqEs7VsKA9lcABMG9iCh4wkdKYFViA/jIhCSNJAiRpZlE0DW7+ti7X1h6/b3Ib+s8t8WMjGPvTJ0C3IEjG+nkaKyMigL97JmjuiOBL8K2irCAGjQHTTwEkPIaqaDANbyr+VYp5Mc08DVHIurRGjg8QGG7JXawweZ/2ebL7OqXXd8vUcGP4DQh4MI67G6eez9hsz/T0D83o9Po+gvIIg37KtTnTsS+Pday9imkJQH3F0b6LkAr5HjCFK+1trfjz8cRHi/lxHDKBLwogBr/ddC+i6CTGZ1+MwNeK50Bt/LhISfUscjsPgMCcTRXMYNHEnSZzgc4MMI/iMJE72cQHPY9zT5/1UBTkP0ENnNfPTaR3CY5zY5lK2BVCe0K0UMbBiY5QCiCICp/mWk7y30D6AMSBFWXuGVisWpxF0JAvQF8iXwz1NwY4ltMe9LlNElXnrWAk4QVQDd1vKxAf9sShgpgw3VRhIBfJj7cP5aJUDZwe4ogBXQAFk/L/HTkzKt11Mw5HOz6WEEjtLF2dL38sTRsSFsD5KkwP49DjAc67f3Xw5B/ABupQEu4CVg1LH+bsK+M4B6G+55CLD+fgV/bTYQVR01KBdTlcOdptBq63fU8IEyeBHrjxABuQKUFRQQCSjw/Ufi+yXpI0CCvwzkq9NbUG11ZxaJqhcF3OkEYkif1xiy+ufh8AEk/F9G+B9BiIhQILLcqOjTyL4C6050cSuHqTJahUBs30sEtU2hp+VgZuzKbgtYB0LxwjiP/B2LGxhBuGhJoVcWVhAFnAsKoBRvcwjkJK1+7SWY5vp4HceID0gQDVDKMUCSQQjIzzKDnXAHR1AG9tLEA8C/hwKHkxr22sKscC5T72+Afdv7ABY+QG4BsX+kEOq4BbbvL1WGQcB9VhFkEOAgogKrBIPICK7C/+WEkej7kSAnCM0yy0etY3M5h8vwiW4aTKIlcFP4oRlsKLg9H6AVhB9xA69Gf5CpYpQHWIXvoUAPwkBbBziWbp+W8AX714aQVimuoEmmAzKYGZgSipCGgUyHD0MGpZAx7EETR5YY+ggSRh9OncC6AETe0AIPyxk0iO/H8r/HYvm2DD4NGlwJek7CBW9PEhkFoWcVwla0+kghvJYviwYfTh5gLOXiEZyHCG7/Qp8RBwmuoKdh5QCn8AtbWWQV0u/PnVQwk/6tRAXZki5Uv0cx/XCiBQ8hjqQegFi7ZfQIJQ7j69fnp5OJPEwpuSfdSyJxY6jX4lYeE6cbbiBTFNlQgmgFUNYdNJzXohYxJNy21ASi9QJRoypqGLEcoDr3iNljQZzKoDtB7IlZwcysnqhJFDWNHiYyaI4/PYJmEhQKepm8lXxdTlfPyvavhMcgQnsKP/kkMyQ61x/cFDWEZJbfSESINLlLfT2BTRxFkUN3kks9cAFeCdVL3lg/76W7K4tWWd8fyaY8O2gkGlKd+s0Me0aani3m8FYC9aTZBL2GoBSlW60SHCZK6EFq21ud1IO+BEbwUZGuukfx3+VgTTRvxyUwEUNmGRE56kk4GcGyRwIFVOMOEMN7iaw7Vt5INGXK9XQSqBoF3FWESuSQjY6JVh/3RFnQeUxTJkYp2E6c6+4Qy0ZA/F2ZQEXoQVkzygRmr7OZxUoC6cmhkrv+uW8KvYKsO0MtM/R1o7xqFLAuZWLHwu5emFaAxB3FqSa1dmGdPS97Davb1bE7l/wjudUJwpFpXuYCqtu+7RahGAtip4cJ4Xvv7I3IxPdSuA4IxYV4v3XhVpXegfZsGmcVgfSGUrLf8eTvl02D2rF89Ho4Eb2TF/juySG27X0nK+RsE0UN+E22IVT02ey+Jpey84h+s95QvMYqWi9oZdZnjgYsVjQ+mrVfEQL6zBTclu21a0/ifDRANE2UUkll1+K1K29PPwrQx0CjBhovpCVMQpBRTR5V9uy8nagfwBsNNwMF8oZKTgIJMoVQUsm8kC8aSdtGAcqz+boVmFPC4tCFRIKyHTfrYKYJ0tAzUAC7KIRRDAZBkIJWXWFlf2IkAzg9dATJByWhHyVRIg2eCaRH8/mscKJ2q7Wws35PVA5e1wPY7uDLvIcU5krOX8SfR8C4zzuRGV0LYIYR2WXMGVQhOJzBxUIWiS44EngG8141UB1hn4JnBtj1gzNADOSyWN5T3cm8pDRjI+xh3IEWXIG3Jn86SrC+fgrur3t34IjJ6yO3YBeGoOXgViHszCAlzhcpuDrooMKTYtYtpLUAJRMQFYKHFjzOwOK99y/nvq7eeQv1Zc7lANYfuYB1BNxrOf4pn2cEXI578JDLi0QEvC6Bcuy6BVgNzBILzHboTHjkkSZk8eciXHtRPatHgrWt3uhzqy9G1m6FH73ucQUFnCJChvW8JLi2bA6FCgMrmTgNIMvze+L4SWvlh3weybau0OlGEMzQh6wlzFsYeoL7C6DBy7gHjzii3y4OGngEkSV+TfI5hGlDCIopV+J0iL/Pjp2sua646QAih4Hgbv7a9fleTcD6dK8jyEOv0yCRJ/z1bq36LFg7Uo4KH2AiLzfJtIsAkoRxdmlTFzyH5wBCt/G8tfa1vw4t1Vb5PJ0rcxW2K9gqwGWE/0qU4krCxDWU1YQgZiGikhwhJIG7kYDdRTM6aZS8mQb2V6RYrX61/ldQuZxAmF7XDlLgCazYQwHPRdhowYaSlxNFMO5TJN7ZrCJ8SAKZGTMoByDBBbUbKVoLX4cvrx08q9W/xK+he4s011U6Ud+95QGI5SMF+OOvxy+jFNndi4YuIkychZCP2Rc5zAMwhQUk6GYyhAqs21p6B69bkpcNeRLBCzemxO3X3oi4y1j66gZeDhJYhTidxFLGC+ZGVZJNyd8uBqFR6gcggM1BgAmI4Cm1vX88RRxAAZpwC0Ps7iAXUALk//9whI44wQwSRl6oLDdgPi2pDyBcJh3scYB1nLndIHE6KGBn7b+t/iSEj0KrYRSgEwggDgm0rmBFgMsR/km4g9MJgxlSODfDw3JXcDRmzJYap+C5u6tlrYhgV8RGoZ0koRtSBG8BCTMgwiOCHiF8JdHACaBfk8whcgds70GlH8MtB2tSGYx2z1ZHKVaLv0ze/pJ4tewJchLrBRhL2HeJPxegBwqABkXZ0bBXkheIfP9MUsYWBZSweiW4QugSdvIAKDHkbbXqrXdHLuCUeBACEvhKZN9Jn2xgdKQA1gefS3LoJHMDa1bwFbgFr6cgaz6RIiGkN4+OQkBvpakdcdadjGBzXEBWwvUIKKrgrYQUrS7OtoyJJoWh+yvJFL4coXsoEDXGVEvFpVoA2+olEs+o9azfm4N3Cd8vL05t35I+FPsfJsrIchfqNIREuYErIYJnIvhL8vazzOIlacqBchxJ00cG9wIiAQHVLLRhUgOcgKk0DgCZdiLHJfHeQd7FijaKOp0MoacMl6kVnOJ3GmXl8Kh8LMI1kcLPDNL6sxBxbQuboA7fQMQwjWJEvhn56g/j+217GFpeLhJPC0d1gQv0CZxBniDLA1zFZhHPHVRrAaVqoMcHkEKIE/tfQAkyRBCnB8G7MIfgFbw2AnhHEV38HcMkSdFaUng5SDCTLCDqH8zCQCXCQbY7iNo3kCkNR00jXicQ056NbgdAADubx07jiPYRjnoHvK5f6wqQb88UgOkemk4WUBJ0YFdgqQ0Dq4sQrf/vAKKb4G3Q7Xd4W6wzC0HQrp52GNPOvoEq/uYRM2D1SPhT4ubSiPR5boH1+VQ2cBTgP9uAQIzQu5MeXrtV7O1ciN4ZCN72ElwS7xzaEw7gZRXR7uFnECZafoCeXxL3Ck7JV0YhEqgbfKANMt5n4Lo5CaFORgT22COwzgNEAZfEW8cyo9ZnUK6d4q8duAjlyIigJ3yPHAopfA2yqBQH8ELAnoRTzckOyiLA1fIPE1aukcQqcLS3zgF6CaJtYtjdwz2YRpFBpBje38wdzM0MHx0RDMfy2fKwCy3ib3bYTM7bHvMw53AEgl/HumZDmkTiOfvoQl/A9ajEq4NmIvRL+LWGUfGLiQBSWWUtYdkmxJ7w1YGcGVijAkVQ8BgpQDNKkJG/FmQXGUKY1fYvhzx6yOKRPhGuP3B7ldAgKoFRWjjyMXZBZl+Y/wEueHd+GBrjbjdUXJWAHbsaQed0CGEUHViEYFO8GqR+J1n02R2aQXUEMUmhSDls3G/9eVTLttBvN1iwu210AgEkKQiJY4GT5AXosQYNIIwbmFLr+KFXErP9AJWegcwt2O1S7DHt1qmHQRbbbt4FL/vq8nk6qeeiJKir25VDmVvIlEST0C/r9mGmrtAoUC0GRVuStSBKQJsgCYgUbPawB0LPBM/M6fOSKdkUkUkIPfqcBskfdgLKLjn/B1JUGkKyjQhUuA0MvV0xhFCKLngBSgc9B8yeh95v88igEkqQKQg7tiYL/WZW6UNx/w4J1OTCNeFby6P6tEWOBnjABL5/EqQvGvemQZobJbaUgHFW4N4ScSYslE0UoDgAWx6OdqiMeIQtEVtksGHeKmT7mJncKQkJzOYXCAHVU/IZRtmwCCkiwW5nUJoJvDM0onoyVhnWRM5KGtf37LaqSlo+s8cOsxBzJq5BSEufTrWvgp535i6WxsWzYWAruAG0/TzaMWsCwTfgfqo7bTAXVot3TyG8pfJMYmd3hmAaGWTl4KxBVJxIISKE1pIREnjCRrH9lNp0bvaCZcKZZOzOsPqZFHYYYVat/9Pi0ArsK0EGlYT9DBG872AHM1esXxK2PYOsoQbZPE+BsmoeO0RyByHo+QB3plZnBaZo/MwUbgp4FfozBYgmnYlwA5wyEpkJbmfgAxt5pYkgSQSeZQC9ZWQMX/DQIBP03QnfSjxnFMBmDoWAeS/nzwj/9q2yday3NoAJD7MNGBsQPHq/A5TZhf0dLoAEmSGFSN6582Wp3uxzI0kZskweKUGmSBUUECdCQC4nK/zsoABrsawCVJSicq7tqxBAipGCEDWD6H88V6CEtSOF2IFQhgtU3mPTt9sx/ZN5AC1Cp2581stZW6av4HmkAOxOJVoUvocKzNj4SjbviQ02viwVXGkWiThAZZ+7SnNKC1xCZVdttp7OIoKQilJl97fJYVMtHaNtvHb3Mbs5Fcv6GdfDhmKZm2BTtzsK8EhB6O7ewRUrZaIKhjAqAfsaKIa3UpZxCUy+gI3vKzX9Hw8DtxhmwVVIQhwZt8HsllmF0eo4tp1NHSqRSJW/fAsCMCeRWSbLJSIE0cTnt5u/oZK1kxuKJjcEXEaKKgdgLmQj38sSNVn2rpLqzRSIEVxLMnORS2jC5+53yN62i9hRACEEo0UhVxRl9zgMGczC4UiwO+FbNRfQ5GF+cEcBdtGg3fz8E8JneUWVP1Rb4OYDlv2jCvCUBT6hIG1DyDtZQpYbVGB/V/Ha764AdxShiiCsAjAkcWfTy7vowQr20ZDwuxSAVRItcgB98Pt3hdqkRty+jeF/Zxj45b7q/7evuf1LgAEAuK8Ulo2EhUQAAAAASUVORK5CYII="; +// maskImage.crossOrigin = "Anonymous"; + +var mousePos = [0, 0]; + +var raycaster = new THREE.Raycaster(); +var mouse = new THREE.Vector2(); + +if(mobileAndTabletcheck()){ + window.addEventListener('touchmove', function(e){ + mouse.x = ( e.touches[0].clientX / window.innerWidth ) * 2 - 1; + mouse.y = - ( e.touches[0].clientY / window.innerHeight ) * 2 + 1; + }); + } else { + window.addEventListener('mousemove', function(e){ + mouse.x = ( e.clientX / window.innerWidth ) * 2 - 1; + mouse.y = - ( e.clientY / window.innerHeight ) * 2 + 1; + }); +} + +function renderRay() { + raycaster.setFromCamera( mouse, camera ); + var intersects = raycaster.intersectObjects( scene.children ); + for ( var i = 0; i < intersects.length; i++ ) { + mousePos[0] = (((intersects[i].point.x / planeSize)+ 0.5) * w) - (radius*0.5); + mousePos[1] = ((((intersects[i].point.y * -1) / planeSize)+ 0.5) * h) - (radius*0.5); + } +} + + +function draw(){ + ctx.clearRect(0, 0, w, h); + ctx.drawImage(maskImage, mousePos[0], mousePos[1], radius, radius); + renderRay(); +} + +var frustumSize = 600; +var aspect = window.innerWidth / window.innerHeight; + + +var clock = new THREE.Clock(true); + +var scene = new THREE.Scene(); +camera = new THREE.OrthographicCamera( frustumSize * aspect / - 2, frustumSize * aspect / 2, frustumSize / 2, frustumSize / - 2, 1, 2000 ); + +camera.lookAt(scene.position); +camera.position.z = 1; + + +var renderer = new THREE.WebGLRenderer({ + antialias: true, + alpha: true +}); +renderer.setPixelRatio = 1; +renderer.setClearColor(0x3A405A, 1.0); +renderer.setSize( window.innerWidth, window.innerHeight ); +document.body.appendChild( renderer.domElement ); + +function onWindowResize(){ + +var aspect = window.innerWidth / window.innerHeight; + +camera.left = - frustumSize * aspect / 2; +camera.right = frustumSize * aspect / 2; +camera.top = frustumSize / 2; +camera.bottom = - frustumSize / 2; + +camera.updateProjectionMatrix(); + +renderer.setSize( window.innerWidth, window.innerHeight ); +} + +var gui = new dat.GUI(); +var params = { + dispFactor: 0.238, + speed: 24.0, +}; + +gui.add(params, 'dispFactor', 0, 1).step(0.001).onChange(function( value ) { + object.material.uniforms._dispFactor.value = value; + object.material.uniforms._dispFactor.needsUpdate = true; +}); +gui.add(params, 'speed', 1, 50).step(1).onChange(function( value ) { + object.material.uniforms._speed.value = value; + object.material.uniforms._speed.needsUpdate = true; +}); + +// var controls = new THREE.OrbitControls( camera, renderer.domElement ); + +var loader = new THREE.TextureLoader(); +loader.crossOrigin = ''; +var circle = loader.load('https://robindelaporte.fr/codepen/codevember/circle.png'); +var circle_blur = loader.load('https://robindelaporte.fr/codepen/codevember/circle_blur.png'); +var color = loader.load('https://robindelaporte.fr/codepen/codevember/map_light_disp_color.png'); +var dist = loader.load('https://robindelaporte.fr/codepen/codevember/dist_c.jpg'); + +dist.wrapS = dist.wrapT = THREE.RepeatWrapping; +color.wrapS = color.wrapT = THREE.RepeatWrapping; + +var mask = new THREE.Texture(canvas); +mask.minFilter = THREE.LinearFilter; + +var mat = new THREE.ShaderMaterial({ + uniforms: { + _time: { type: "f", value: 1.0 }, + _mask: { type: 't', value: mask }, + _color: { type: 't', value: color }, + _circle: { type: 't', value: circle }, + _circle_blur: { type: 't', value: circle_blur }, + _dist: { type: 't', value: dist }, + + _dispFactor: { type: "f", value: params.dispFactor }, + _speed: { type: "f", value: params.speed } + }, + + vertexShader: document.getElementById( 'vertexShader' ).textContent, + fragmentShader: document.getElementById( 'fragmentShader' ).textContent, + transparent: true, + opacity: 1.0, + blending: THREE.AdditiveBlending +}); + +var geometry = new THREE.PlaneBufferGeometry( planeSize, planeSize, 1 ); +var object = new THREE.Mesh(geometry, mat); +scene.add(object); + +window.addEventListener('click', function(){ +}); + + +var animate = function () { + requestAnimationFrame( animate ); + renderer.render(scene, camera); + + var d = clock.getDelta(); + mat.uniforms._time.value += d; + + mask.needsUpdate = true; + + draw(); +}; +animate(); \ No newline at end of file diff --git a/codevember-9-electric-hover-effect/src/style.css b/codevember-9-electric-hover-effect/src/style.css new file mode 100644 index 0000000..e4d383b --- /dev/null +++ b/codevember-9-electric-hover-effect/src/style.css @@ -0,0 +1,28 @@ +body { + margin: 0; + overflow: hidden; + position: fixed; +} +canvas { + width: 100%; + height: 100%; +} +a { + text-decoration: none; + position: absolute; + color: rgba(255, 255, 255, 0.9); + font-weight: 100; + font-size: 20px; + font-family: "helvetica"; + letter-spacing: 8px; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + transition: color 0.6s ease; + padding: 130px 90px; + border-radius: 50%; +} +a:hover { + color: rgba(255, 255, 255, 0.4); + transition: color 0.6s ease; +} diff --git a/codevember-9/README.markdown b/codevember-9/README.markdown new file mode 100644 index 0000000..f8d99b0 --- /dev/null +++ b/codevember-9/README.markdown @@ -0,0 +1,4 @@ +# Codevember(9) + _A Pen created at CodePen.io. Original URL: [https://codepen.io/nikita_ska/pen/JOExqE](https://codepen.io/nikita_ska/pen/JOExqE). + + \ No newline at end of file diff --git a/codevember-9/dist/index.html b/codevember-9/dist/index.html new file mode 100644 index 0000000..183085b --- /dev/null +++ b/codevember-9/dist/index.html @@ -0,0 +1,295 @@ + + + + + Codevember(9) + + + + +@nskargovskii + + + + + + + + + + \ No newline at end of file diff --git a/codevember-9/dist/script.js b/codevember-9/dist/script.js new file mode 100644 index 0000000..e8a3377 --- /dev/null +++ b/codevember-9/dist/script.js @@ -0,0 +1,71 @@ +class Galaxy { + constructor(){ + this.ww = window.innerWidth + this.wh = window.innerHeight + + this.mouseX = 0; + this.mouseY = 0; + + this.time = 0; + this.scene = new THREE.Scene() + this.camera = new THREE.PerspectiveCamera(75,this.ww/this.wh,0.1,1000) + this.camera.position.z = 100; + this.controls = new THREE.OrbitControls(this.camera); + + this.renderer = new THREE.WebGLRenderer({antialias:true, alpha:true}) + this.renderer.setSize (this.ww, this.wh) + + + window.addEventListener('resize', this.resize.bind(this)) + document.body.appendChild(this.renderer.domElement) + + this.planet() + this.animate() + } + + resize() { + this.ww = window.innerWidth + this.wh = window.innerHeight + console.log(this.wh) + this.camera.aspect =this.ww / this.wh; + this.camera.updateProjectionMatrix(); + this.renderer.setSize(this.ww, this.wh) + } + + + planet() { + this.planGeo = new THREE.SphereBufferGeometry(1,128,128); + var uniforms = { + u_time: { type: "f", value: 1.0 }, + } + this.planMat = new THREE.ShaderMaterial( + { + vertexShader: document.getElementById('vert').textContent, + fragmentShader: document.getElementById('frag').textContent, + shading: THREE.SmoothShading, + side: THREE.DoubleSide, + transparent: true, + depthTest: false, + uniforms: uniforms, + } + ) + + this.planet = new THREE.Mesh(this.planGeo, this.planMat) + this.scene.add(this.planet) + } + + onDocumentMouseMove(event) { + this.mouseX = ( event.clientX - window.innerWidth/2 ) ; + this.mouseY = ( event.clientY - window.innerHeight/2 ) ; + } + + animate(){ + requestAnimationFrame(this.animate.bind(this)) + + this.time += 0.01; + this.planMat.uniforms.u_time.value = this.time; + this.renderer.render(this.scene,this.camera) + } +} + +let galaxy = new Galaxy() \ No newline at end of file diff --git a/codevember-9/dist/style.css b/codevember-9/dist/style.css new file mode 100644 index 0000000..653679a --- /dev/null +++ b/codevember-9/dist/style.css @@ -0,0 +1,20 @@ +a { + position: absolute; + color: black; + bottom : 15px; + left:10px; + font-family: arial; + text-decoration: none; + font-size: 18px; +} + +body, html { + margin:0; + overflow:hidden; +} +canvas { + margin:0; + width:100%; + height:100%; + background: #e8e8e8; +} \ No newline at end of file diff --git a/codevember-9/license.txt b/codevember-9/license.txt new file mode 100644 index 0000000..8b10796 --- /dev/null +++ b/codevember-9/license.txt @@ -0,0 +1,17 @@ + + + + diff --git a/codevember-9/src/index.html b/codevember-9/src/index.html new file mode 100644 index 0000000..3edf638 --- /dev/null +++ b/codevember-9/src/index.html @@ -0,0 +1,279 @@ +@nskargovskii + + + diff --git a/codevember-9/src/script.js b/codevember-9/src/script.js new file mode 100644 index 0000000..e8a3377 --- /dev/null +++ b/codevember-9/src/script.js @@ -0,0 +1,71 @@ +class Galaxy { + constructor(){ + this.ww = window.innerWidth + this.wh = window.innerHeight + + this.mouseX = 0; + this.mouseY = 0; + + this.time = 0; + this.scene = new THREE.Scene() + this.camera = new THREE.PerspectiveCamera(75,this.ww/this.wh,0.1,1000) + this.camera.position.z = 100; + this.controls = new THREE.OrbitControls(this.camera); + + this.renderer = new THREE.WebGLRenderer({antialias:true, alpha:true}) + this.renderer.setSize (this.ww, this.wh) + + + window.addEventListener('resize', this.resize.bind(this)) + document.body.appendChild(this.renderer.domElement) + + this.planet() + this.animate() + } + + resize() { + this.ww = window.innerWidth + this.wh = window.innerHeight + console.log(this.wh) + this.camera.aspect =this.ww / this.wh; + this.camera.updateProjectionMatrix(); + this.renderer.setSize(this.ww, this.wh) + } + + + planet() { + this.planGeo = new THREE.SphereBufferGeometry(1,128,128); + var uniforms = { + u_time: { type: "f", value: 1.0 }, + } + this.planMat = new THREE.ShaderMaterial( + { + vertexShader: document.getElementById('vert').textContent, + fragmentShader: document.getElementById('frag').textContent, + shading: THREE.SmoothShading, + side: THREE.DoubleSide, + transparent: true, + depthTest: false, + uniforms: uniforms, + } + ) + + this.planet = new THREE.Mesh(this.planGeo, this.planMat) + this.scene.add(this.planet) + } + + onDocumentMouseMove(event) { + this.mouseX = ( event.clientX - window.innerWidth/2 ) ; + this.mouseY = ( event.clientY - window.innerHeight/2 ) ; + } + + animate(){ + requestAnimationFrame(this.animate.bind(this)) + + this.time += 0.01; + this.planMat.uniforms.u_time.value = this.time; + this.renderer.render(this.scene,this.camera) + } +} + +let galaxy = new Galaxy() \ No newline at end of file diff --git a/codevember-9/src/style.css b/codevember-9/src/style.css new file mode 100644 index 0000000..653679a --- /dev/null +++ b/codevember-9/src/style.css @@ -0,0 +1,20 @@ +a { + position: absolute; + color: black; + bottom : 15px; + left:10px; + font-family: arial; + text-decoration: none; + font-size: 18px; +} + +body, html { + margin:0; + overflow:hidden; +} +canvas { + margin:0; + width:100%; + height:100%; + background: #e8e8e8; +} \ No newline at end of file diff --git a/codevember11ladder-illusion/README.markdown b/codevember11ladder-illusion/README.markdown new file mode 100644 index 0000000..5007265 --- /dev/null +++ b/codevember11ladder-illusion/README.markdown @@ -0,0 +1,6 @@ +# #codevember - 11 - Ladder Illusion + _A Pen created at CodePen.io. Original URL: [https://codepen.io/Milleus/pen/KKKxVbE](https://codepen.io/Milleus/pen/KKKxVbE). + + Codevember Day #11 - Perspective + +When rotating along the 3D plane, things don't look like what it seems. Ladder? square? triangle? what do you see? \ No newline at end of file diff --git a/codevember11ladder-illusion/dist/index.html b/codevember11ladder-illusion/dist/index.html new file mode 100644 index 0000000..0dd084c --- /dev/null +++ b/codevember11ladder-illusion/dist/index.html @@ -0,0 +1,48 @@ + + + + + #codevember - 11 - Ladder Illusion + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/codevember11ladder-illusion/dist/style.css b/codevember11ladder-illusion/dist/style.css new file mode 100644 index 0000000..1342f7a --- /dev/null +++ b/codevember11ladder-illusion/dist/style.css @@ -0,0 +1,74 @@ +* { + box-sizing: border-box; +} + +body { + margin: 0; + min-height: 100vh; + display: grid; + place-items: center; + background: #fff; +} + +.container { + transform-style: preserve-3d; + transform: rotateX(62deg) rotateZ(-60deg); + animation: rotate 9s ease-in-out alternate infinite; +} +.container .shadow { + position: absolute; +} +.container .shadow .step { + height: 2.5rem; + width: 2.5rem; + border: 0.2rem solid #888; + border-top: none; +} +.container .ladder .step { + height: 2.5rem; + width: 2.5rem; + border: 0.2rem solid #363636; + border-top: none; +} +.container .top { + background-color: rgba(54, 54, 54, 0.1); + display: grid; + place-items: center; + position: relative; + width: 10rem; + transform: rotateX(-90deg); + transform-origin: 50% 100%; +} +.container .top .ladder { + transform-origin: 50% 0%; + transform: skewX(40deg); +} +.container .bottom { + background-color: rgba(54, 54, 54, 0.2); + display: grid; + place-items: center; + position: relative; + width: 10rem; +} +.container .bottom .step:last-child { + border-bottom: none; +} +.container .bottom .ladder { + transform-origin: 50% 100%; + transform: skewX(-40deg); +} + +@keyframes rotate { + 0%, + 20% { + transform: rotateX(62deg) rotateZ(-60deg); + } + 40%, + 60% { + transform: rotateX(55deg) rotateZ(-36deg); + } + 80%, + 100% { + transform: rotateX(45deg) rotateZ(0deg); + } +} \ No newline at end of file diff --git a/codevember11ladder-illusion/license.txt b/codevember11ladder-illusion/license.txt new file mode 100644 index 0000000..3c79db8 --- /dev/null +++ b/codevember11ladder-illusion/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2019 by Dave Quah (https://codepen.io/Milleus/pen/KKKxVbE) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/codevember11ladder-illusion/src/index.pug b/codevember11ladder-illusion/src/index.pug new file mode 100644 index 0000000..8389da2 --- /dev/null +++ b/codevember11ladder-illusion/src/index.pug @@ -0,0 +1,15 @@ +.container + .top + .shadow + - for (i=0; i < 5; i++) + .step + .ladder + - for (i=0; i < 5; i++) + .step + .bottom + .shadow + - for (i=0; i < 5; i++) + .step + .ladder + - for (i=0; i < 5; i++) + .step \ No newline at end of file diff --git a/codevember11ladder-illusion/src/style.scss b/codevember11ladder-illusion/src/style.scss new file mode 100644 index 0000000..bac2066 --- /dev/null +++ b/codevember11ladder-illusion/src/style.scss @@ -0,0 +1,89 @@ +$color-background: #fff; +$color-line: #363636; +$color-shadow: #888; + +* { + box-sizing: border-box; +} + +body { + margin: 0; + min-height: 100vh; + display: grid; + place-items: center; + background: $color-background; +} + +@mixin step($c) { + height: 2.5rem; + width: 2.5rem; + border: 0.2rem solid $c; + border-top: none; +} + +.container { + transform-style: preserve-3d; + transform: rotateX(62deg) rotateZ(-60deg); + animation: rotate 9s ease-in-out alternate infinite; + + .shadow { + position: absolute; + + .step { + @include step($color-shadow); + } + } + + .ladder { + .step { + @include step($color-line); + } + } + + .top { + background-color: rgba($color-line, 0.1); + display: grid; + place-items: center; + position: relative; + width: 10rem; + transform: rotateX(-90deg); + transform-origin: 50% 100%; + + .ladder { + transform-origin: 50% 0%; + transform: skewX(40deg); + } + } + + .bottom { + background-color: rgba($color-line, 0.2); + display: grid; + place-items: center; + position: relative; + width: 10rem; + + .step:last-child { + border-bottom: none; + } + + .ladder { + transform-origin: 50% 100%; + transform: skewX(-40deg); + } + } +} + +@keyframes rotate { + 0%, + 20% { + transform: rotateX(62deg) rotateZ(-60deg); + } + 40%, + 60% { + transform: rotateX(55deg) rotateZ(-36deg); + } + 80%, + 100% { + transform: rotateX(45deg) rotateZ(0deg); + } +} diff --git a/cogs-with-variables/README.markdown b/cogs-with-variables/README.markdown new file mode 100644 index 0000000..348fa21 --- /dev/null +++ b/cogs-with-variables/README.markdown @@ -0,0 +1,4 @@ +# Cogs with variables + _A Pen created at CodePen.io. Original URL: [https://codepen.io/KamilDyrek/pen/GzMPoQ](https://codepen.io/KamilDyrek/pen/GzMPoQ). + + Responsive animated svg cogs using css variables. \ No newline at end of file diff --git a/cogs-with-variables/dist/index.html b/cogs-with-variables/dist/index.html new file mode 100644 index 0000000..2839a04 --- /dev/null +++ b/cogs-with-variables/dist/index.html @@ -0,0 +1,28 @@ + + + + + Cogs with variables + + + + +
+ + + + + + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/cogs-with-variables/dist/style.css b/cogs-with-variables/dist/style.css new file mode 100644 index 0000000..0c719c4 --- /dev/null +++ b/cogs-with-variables/dist/style.css @@ -0,0 +1,53 @@ +* { + box-sizing: border-box; +} + +html, body { + width: 100%; + height: 100%; + padding: 0; + margin: 0; + display: flex; + justify-content: center; + align-items: center; +} + +.cogs { + display: flex; + align-items: center; +} + +.static_cog, .dynamic_cog { + display: block; + position: relative; + margin: 0 calc((var(--d, 10) * 1.2 * 1vmin) * -.08); + height: 12vmin; + width: 12vmin; + mix-blend-mode: multiply; + + stroke-width: 15.7; + stroke-dasharray: 0 31.4; + + stroke-linecap: round; + animation: turn 6s infinite linear; +} +.static_cog circle:first-child, .dynamic_cog circle:first-child { + stroke-dashoffset: calc(15.7 * 10 / var(--d, 10)); +} +.dynamic_cog { + width: calc(var(--d, 10) * 1.2 * 1vmin); + height: calc(var(--d, 10) * 1.2 * 1vmin); + stroke-width: calc(15.7 * 10 / var(--d, 10)); + stroke-dasharray: 0 calc(31.4 * 10 / var(--d, 10)); + + animation: turn calc(6s * var(--d, 10) / 10) var(--delay, 0s) infinite linear var(--turn, normal); +} + +@keyframes turn { + from { + transform: rotate(0); + } + to { + transform: rotate(360deg); + } +} \ No newline at end of file diff --git a/cogs-with-variables/license.txt b/cogs-with-variables/license.txt new file mode 100644 index 0000000..10457cc --- /dev/null +++ b/cogs-with-variables/license.txt @@ -0,0 +1,13 @@ + + + + diff --git a/cogs-with-variables/src/index.html b/cogs-with-variables/src/index.html new file mode 100644 index 0000000..e04d75a --- /dev/null +++ b/cogs-with-variables/src/index.html @@ -0,0 +1,15 @@ +
+ + + + + + + + + + + + +
+ \ No newline at end of file diff --git a/cogs-with-variables/src/style.css b/cogs-with-variables/src/style.css new file mode 100644 index 0000000..0c719c4 --- /dev/null +++ b/cogs-with-variables/src/style.css @@ -0,0 +1,53 @@ +* { + box-sizing: border-box; +} + +html, body { + width: 100%; + height: 100%; + padding: 0; + margin: 0; + display: flex; + justify-content: center; + align-items: center; +} + +.cogs { + display: flex; + align-items: center; +} + +.static_cog, .dynamic_cog { + display: block; + position: relative; + margin: 0 calc((var(--d, 10) * 1.2 * 1vmin) * -.08); + height: 12vmin; + width: 12vmin; + mix-blend-mode: multiply; + + stroke-width: 15.7; + stroke-dasharray: 0 31.4; + + stroke-linecap: round; + animation: turn 6s infinite linear; +} +.static_cog circle:first-child, .dynamic_cog circle:first-child { + stroke-dashoffset: calc(15.7 * 10 / var(--d, 10)); +} +.dynamic_cog { + width: calc(var(--d, 10) * 1.2 * 1vmin); + height: calc(var(--d, 10) * 1.2 * 1vmin); + stroke-width: calc(15.7 * 10 / var(--d, 10)); + stroke-dasharray: 0 calc(31.4 * 10 / var(--d, 10)); + + animation: turn calc(6s * var(--d, 10) / 10) var(--delay, 0s) infinite linear var(--turn, normal); +} + +@keyframes turn { + from { + transform: rotate(0); + } + to { + transform: rotate(360deg); + } +} \ No newline at end of file diff --git a/color-palettes/README.markdown b/color-palettes/README.markdown new file mode 100644 index 0000000..a9fddc2 --- /dev/null +++ b/color-palettes/README.markdown @@ -0,0 +1,5 @@ +# Color Palettes ๐ŸŽจ + +A Pen created on CodePen.io. Original URL: [https://codepen.io/Astap/pen/abJXNVj](https://codepen.io/Astap/pen/abJXNVj). + + diff --git a/color-palettes/dist/index.html b/color-palettes/dist/index.html new file mode 100644 index 0000000..fa0a724 --- /dev/null +++ b/color-palettes/dist/index.html @@ -0,0 +1,614 @@ + + + + + CodePen - Color Palettes ๐ŸŽจ + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

#f5f4e8

+
+
+

#c50d66

+
+
+

#f07810

+
+
+

#eec60a

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

#13334c

+
+
+

#005792

+
+
+

#f6f6e9

+
+
+

#fd5f00

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

#57D1C9

+
+
+

#ED5485

+
+
+

#FFFBCB

+
+
+

#FFE869

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

#F8F9FC

+
+
+

#C00000

+
+
+

#DE3C3C

+
+
+

#F7B32D

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

#003246

+
+
+

#E4491C

+
+
+

#0387B1

+
+
+

#F5F5F5

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

#ff5108

+
+
+

#fffdf8

+
+
+

#ff2321

+
+
+

#000000

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

#7abed1

+
+
+

#f05945

+
+
+

#f7f3e9

+
+
+

#f05945

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

#FFFC31

+
+
+

#F6F7EB

+
+
+

#E94F37

+
+
+

#393E41

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

#518f8b

+
+
+

#e3e1c8

+
+
+

#472c33

+
+
+

#e6462d

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

#c12127

+
+
+

#2a333c

+
+
+

#ffffff

+
+
+

#8f9299

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

#EDEDE4

+
+
+

#F74906

+
+
+

#554E44

+
+
+

#FFFFFF

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

#221E1D

+
+
+

#ECEAE0

+
+
+

#63AA9C

+
+
+

#E9633B

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

#a10015

+
+
+

#d52b15

+
+
+

#efeee9

+
+
+

#beb1b4

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

#222831

+
+
+

#393E46

+
+
+

#FD7013

+
+
+

#EEEEEE

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

#FF7260

+
+
+

#9BD7D5

+
+
+

#FFF5C3

+
+
+

#505050

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

#FF3B1D

+
+
+

#7BDFF2

+
+
+

#000000

+
+
+

#FFFFFF

+
+
+
+
+
+ + + + + diff --git a/color-palettes/dist/style.css b/color-palettes/dist/style.css new file mode 100644 index 0000000..bd320ad --- /dev/null +++ b/color-palettes/dist/style.css @@ -0,0 +1,441 @@ +@import 'https://rawcdn.githack.com/Kerthin/links/e23c46b4fa25b5672245c51fca29213232d5e883/css/fontLinks.css'; +* { + padding: 0; + margin: 0; + box-sizing: border-box; +} + +::-webkit-scrollbar { + width: 0; +} + +.clearfix:after { + content: ""; + display: table; + clear: both; +} + +.container { + position: absolute; + width: 100%; + height: auto; + background-image: linear-gradient(135deg, #f06966, #fad6a6); +} + +.paletteWrap { + position: relative; + width: 1230px; + margin: 50px auto; +} + +.paletteItem { + float: left; + padding: 20px; + margin-bottom: 50px; + margin-right: 50px; + background-color: #f7e0b5; + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); +} +.paletteItem:nth-child(4n) { + margin-right: 0; +} + +.paletteItem__schemeBox { + position: relative; + margin-bottom: 15px; + width: 230px; + height: 310px; + background-color: #fff8e7; +} + +.paletteItem__colorScheme { + position: absolute; + border-radius: 5px; + overflow: hidden; + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); +} +.paletteItem__colorScheme_square { + top: 65px; + left: 15px; + width: 100px; + height: 100px; +} +.paletteItem__colorScheme_square .paletteItem__colorItem { + width: 50%; + height: 50%; +} +.paletteItem__colorScheme_vertical { + top: 15px; + right: 15px; + width: 50px; + height: 200px; +} +.paletteItem__colorScheme_vertical .paletteItem__colorItem { + width: 100%; + height: 25%; +} +.paletteItem__colorScheme_horizontal { + bottom: 20px; + left: 15px; + width: 200px; + height: 50px; +} +.paletteItem__colorScheme_horizontal .paletteItem__colorItem { + width: 25%; + height: 100%; +} + +.paletteItem__colorItem { + float: left; +} + +.paletteItem__infoBox { + width: 230px; + height: 50px; +} + +.paletteItem__colorBox { + float: left; + width: 50%; + height: 25px; +} + +.paletteItem__colorName { + text-align: center; + font-family: "Galeria-Medium"; +} + +.paletteItem__colorItem_1 { + background-color: #f5f4e8; +} + +.paletteItem__colorItem_2 { + background-color: #c50d66; +} + +.paletteItem__colorItem_3 { + background-color: #f07810; +} + +.paletteItem__colorItem_4 { + background-color: #eec60a; +} + +.paletteItem__colorItem_5 { + background-color: #13334c; +} + +.paletteItem__colorItem_6 { + background-color: #005792; +} + +.paletteItem__colorItem_7 { + background-color: #f6f6e9; +} + +.paletteItem__colorItem_8 { + background-color: #fd5f00; +} + +.paletteItem__colorItem_9 { + background-color: #57D1C9; +} + +.paletteItem__colorItem_10 { + background-color: #ED5485; +} + +.paletteItem__colorItem_11 { + background-color: #FFFBCB; +} + +.paletteItem__colorItem_12 { + background-color: #FFE869; +} + +.paletteItem__colorItem_13 { + background-color: #F8F9FC; +} + +.paletteItem__colorItem_14 { + background-color: #C00000; +} + +.paletteItem__colorItem_15 { + background-color: #DE3C3C; +} + +.paletteItem__colorItem_16 { + background-color: #F7B32D; +} + +.paletteItem__colorItem_17 { + background-color: #003246; +} + +.paletteItem__colorItem_18 { + background-color: #E4491C; +} + +.paletteItem__colorItem_19 { + background-color: #0387B1; +} + +.paletteItem__colorItem_20 { + background-color: #F5F5F5; +} + +.paletteItem__colorItem_21 { + background-color: #ff5108; +} + +.paletteItem__colorItem_22 { + background-color: #fffdf8; +} + +.paletteItem__colorItem_23 { + background-color: #ff2321; +} + +.paletteItem__colorItem_24 { + background-color: #000000; +} + +.paletteItem__colorItem_25 { + background-color: #7abed1; +} + +.paletteItem__colorItem_26 { + background-color: #f05945; +} + +.paletteItem__colorItem_27 { + background-color: #f7f3e9; +} + +.paletteItem__colorItem_28 { + background-color: #f05945; +} + +.paletteItem__colorItem_29 { + background-color: #FFFC31; +} + +.paletteItem__colorItem_30 { + background-color: #F6F7EB; +} + +.paletteItem__colorItem_31 { + background-color: #E94F37; +} + +.paletteItem__colorItem_32 { + background-color: #393E41; +} + +.paletteItem__colorItem_33 { + background-color: #518f8b; +} + +.paletteItem__colorItem_34 { + background-color: #e3e1c8; +} + +.paletteItem__colorItem_35 { + background-color: #472c33; +} + +.paletteItem__colorItem_36 { + background-color: #e6462d; +} + +.paletteItem__colorItem_37 { + background-color: #c12127; +} + +.paletteItem__colorItem_38 { + background-color: #2a333c; +} + +.paletteItem__colorItem_39 { + background-color: #ffffff; +} + +.paletteItem__colorItem_40 { + background-color: #8f9299; +} + +.paletteItem__colorItem_41 { + background-color: #EDEDE4; +} + +.paletteItem__colorItem_42 { + background-color: #F74906; +} + +.paletteItem__colorItem_43 { + background-color: #554E44; +} + +.paletteItem__colorItem_44 { + background-color: #FFFFFF; +} + +.paletteItem__colorItem_45 { + background-color: #221E1D; +} + +.paletteItem__colorItem_46 { + background-color: #ECEAE0; +} + +.paletteItem__colorItem_47 { + background-color: #63AA9C; +} + +.paletteItem__colorItem_48 { + background-color: #E9633B; +} + +.paletteItem__colorItem_49 { + background-color: #a10015; +} + +.paletteItem__colorItem_50 { + background-color: #d52b15; +} + +.paletteItem__colorItem_51 { + background-color: #efeee9; +} + +.paletteItem__colorItem_52 { + background-color: #beb1b4; +} + +.paletteItem__colorItem_53 { + background-color: #222831; +} + +.paletteItem__colorItem_54 { + background-color: #393E46; +} + +.paletteItem__colorItem_55 { + background-color: #FD7013; +} + +.paletteItem__colorItem_56 { + background-color: #EEEEEE; +} + +.paletteItem__colorItem_57 { + background-color: #FF7260; +} + +.paletteItem__colorItem_58 { + background-color: #9BD7D5; +} + +.paletteItem__colorItem_59 { + background-color: #FFF5C3; +} + +.paletteItem__colorItem_60 { + background-color: #505050; +} + +.paletteItem__colorItem_61 { + background-color: #FF3B1D; +} + +.paletteItem__colorItem_62 { + background-color: #7BDFF2; +} + +.paletteItem__colorItem_63 { + background-color: #000000; +} + +.paletteItem__colorItem_64 { + background-color: #FFFFFF; +} + +@media only screen and (max-width: 1280px) { + .paletteWrap { + width: 910px; + } + + .paletteItem:nth-child(3n) { + margin-right: 0; + } + .paletteItem:nth-child(4n) { + margin-right: 50px; + } + .paletteItem:nth-child(12n) { + margin-right: 0; + } +} +@media only screen and (max-width: 960px) { + .paletteWrap { + width: 590px; + } + + .paletteItem:nth-child(2n) { + margin-right: 0; + } + .paletteItem:nth-child(3n) { + margin-right: 50px; + } + .paletteItem:nth-child(6n) { + margin-right: 0; + } +} +@media only screen and (max-width: 642px) { + .paletteWrap { + width: 270px; + } + + .paletteItem { + margin-bottom: 50px; + margin-right: 0; + } +} +/*____________________________________________________________ +## Developer Links +____________________________________________________________*/ +.social { + position: fixed; + bottom: 0; + left: 30px; +} + +.socialList { + list-style: none; +} +.socialList:after { + content: ""; + display: block; + margin: 0 auto; + width: 1px; + height: 40px; + background: #f7e0b5; +} + +.socialList__item { + margin-bottom: 10px; + width: 20px; + height: 20px; + transition: transform 0.2s; +} +.socialList__item:hover { + transform: translateY(-3px); +} +.socialList__item:hover .socialList__icon { + stroke: #7dcbd8; +} + +.socialList__icon { + fill: none; + stroke: #f7e0b5; +} \ No newline at end of file diff --git a/color-palettes/license.txt b/color-palettes/license.txt new file mode 100644 index 0000000..903c03e --- /dev/null +++ b/color-palettes/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Roden (https://codepen.io/Astap/pen/abJXNVj) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/color-palettes/src/index.pug b/color-palettes/src/index.pug new file mode 100644 index 0000000..3dc5192 --- /dev/null +++ b/color-palettes/src/index.pug @@ -0,0 +1,57 @@ +.container + .paletteWrap.clearfix + + mixin paletteItemMix(firstColorMix, secondColorMix, thirdColorMix, fourthColorMix, firstHexColorMix, seconHexdColorMix, thirdHexColorMix, fourtHexhColorMix) + .paletteItem + .paletteItem__schemeBox + .paletteItem__colorScheme.paletteItem__colorScheme_square + each val in [`${firstColorMix}`, `${secondColorMix}`, `${thirdColorMix}`, `${fourthColorMix}`] + .paletteItem__colorItem(class=`paletteItem__colorItem_${val}`) + .paletteItem__colorScheme.paletteItem__colorScheme_vertical + each val in [`${firstColorMix}`, `${secondColorMix}`, `${thirdColorMix}`, `${fourthColorMix}`] + .paletteItem__colorItem(class=`paletteItem__colorItem_${val}`) + .paletteItem__colorScheme.paletteItem__colorScheme_horizontal + each val in [`${firstColorMix}`, `${secondColorMix}`, `${thirdColorMix}`, `${fourthColorMix}`] + .paletteItem__colorItem(class=`paletteItem__colorItem_${val}`) + .paletteItem__infoBox + each val in [`${firstHexColorMix}`, `${seconHexdColorMix}`, `${thirdHexColorMix}`, `${fourtHexhColorMix}`] + .paletteItem__colorBox + p.paletteItem__colorName ##{val} + + +paletteItemMix('1', '2', '3', '4', 'f5f4e8', 'c50d66', 'f07810', 'eec60a') + +paletteItemMix('5', '6', '7', '8', '13334c', '005792', 'f6f6e9', 'fd5f00') + +paletteItemMix('9', '10', '11', '12', '57D1C9', 'ED5485', 'FFFBCB', 'FFE869') + +paletteItemMix('13', '14', '15', '16', 'F8F9FC', 'C00000', 'DE3C3C', 'F7B32D') + +paletteItemMix('17', '18', '19', '20', '003246', 'E4491C', '0387B1', 'F5F5F5') + +paletteItemMix('21', '22', '23', '24', 'ff5108', 'fffdf8', 'ff2321', '000000') + +paletteItemMix('25', '26', '27', '28', '7abed1', 'f05945', 'f7f3e9', 'f05945') + +paletteItemMix('29', '30', '31', '32', 'FFFC31', 'F6F7EB', 'E94F37', '393E41') + +paletteItemMix('33', '34', '35', '36', '518f8b', 'e3e1c8', '472c33', 'e6462d') + +paletteItemMix('37', '38', '39', '40', 'c12127', '2a333c', 'ffffff', '8f9299') + +paletteItemMix('41', '42', '43', '44', 'EDEDE4', 'F74906', '554E44', 'FFFFFF') + +paletteItemMix('45', '46', '47', '48', '221E1D', 'ECEAE0', '63AA9C', 'E9633B') + +paletteItemMix('49', '50', '51', '52', 'a10015', 'd52b15', 'efeee9', 'beb1b4') + +paletteItemMix('53', '54', '55', '56', '222831', '393E46', 'FD7013', 'EEEEEE') + +paletteItemMix('57', '58', '59', '60', 'FF7260', '9BD7D5', 'FFF5C3', '505050') + +paletteItemMix('61', '62', '63', '64', 'FF3B1D', '7BDFF2', '000000', 'FFFFFF') + + +//--- Social links +.social + ul.socialList + li.socialList__item + a.socialList__link(href="https://github.com/Kerthin?tab=overview&from=2021-05-01&to=2021-05-05" target="_blank") + svg.socialList__icon(viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round") + path(d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22") + li.socialList__item + a.socialList__link(href="https://codepen.io/Astap" target="_blank") + svg.socialList__icon(viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round") + polygon(points="12 2 22 8.5 22 15.5 12 22 2 15.5 2 8.5 12 2") + line(x1="12" y1="22" x2="12" y2="15.5") + polyline(points="22 8.5 12 15.5 2 8.5") + polyline(points="2 15.5 12 8.5 22 15.5") + line(x1="12" y1="2" x2="12" y2="8.5") + li.socialList__item + a.socialList__link(href="https://twitter.com/BelichenkoRoden" target="_blank") + svg.socialList__icon(viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round") + path(d="M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z") \ No newline at end of file diff --git a/color-palettes/src/style.scss b/color-palettes/src/style.scss new file mode 100644 index 0000000..d209e75 --- /dev/null +++ b/color-palettes/src/style.scss @@ -0,0 +1,289 @@ +* { + padding: 0; + margin: 0; + box-sizing: border-box; +} + +::-webkit-scrollbar { + width: 0; +} + +.clearfix:after { + content: ""; + display: table; + clear: both; +} + +@import 'https://rawcdn.githack.com/Kerthin/links/e23c46b4fa25b5672245c51fca29213232d5e883/css/fontLinks.css'; + +.container { + position: absolute; + width: 100%; + height: auto; + background-image: linear-gradient(135deg, rgb(240, 105, 102), rgb(250, 214, 166)); +} + +.paletteWrap { + position: relative; + width: 1230px; + margin: 50px auto; +} + +.paletteItem { + float: left; + padding: 20px; + margin-bottom: 50px; + margin-right: 50px; + background-color: #f7e0b5; + box-shadow: 0 3px 6px rgba(0,0,0,.16), 0 3px 6px rgba(0,0,0,.23); + + &:nth-child(4n) { + margin-right: 0; + } +} +.paletteItem__schemeBox { + position: relative; + margin-bottom: 15px; + width: 230px; + height: 310px; + background-color: #fff8e7; +} + +.paletteItem__colorScheme { + position: absolute; + border-radius: 5px; + overflow: hidden; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); + + &_square { + top: 65px; + left: 15px; + width: 100px; + height: 100px; + + .paletteItem__colorItem { + width: 50%; + height: 50%; + } + } + + &_vertical { + top: 15px; + right: 15px; + width: 50px; + height: 200px; + + .paletteItem__colorItem { + width: 100%; + height: 25%; + } + } + + &_horizontal { + bottom: 20px; + left: 15px; + width: 200px; + height: 50px; + + .paletteItem__colorItem { + width: 25%; + height: 100%; + } + } +} +.paletteItem__colorItem { + float: left; +} + +.paletteItem__infoBox { + width: 230px; + height: 50px; +} +.paletteItem__colorBox { + float: left; + width: 50%; + height: 25px; +} +.paletteItem__colorName { + text-align: center; + font-family: 'Galeria-Medium'; +} + +$colorPalette: ( + 1 : #f5f4e8, + 2 : #c50d66, + 3 : #f07810, + 4 : #eec60a, + + 5 : #13334c, + 6 : #005792, + 7 : #f6f6e9, + 8 : #fd5f00, + + 9 : #57D1C9, + 10 : #ED5485, + 11 : #FFFBCB, + 12 : #FFE869, + + 13 : #F8F9FC, + 14 : #C00000, + 15 : #DE3C3C, + 16 : #F7B32D, + + 17 : #003246, + 18 : #E4491C, + 19 : #0387B1, + 20 : #F5F5F5, + + 21 : #ff5108, + 22 : #fffdf8, + 23 : #ff2321, + 24 : #000000, + + 25 : #7abed1, + 26 : #f05945, + 27 : #f7f3e9, + 28 : #f05945, + + 29 : #FFFC31, + 30 : #F6F7EB, + 31 : #E94F37, + 32 : #393E41, + + 33 : #518f8b, + 34 : #e3e1c8, + 35 : #472c33, + 36 : #e6462d, + + 37 : #c12127, + 38 : #2a333c, + 39 : #ffffff, + 40 : #8f9299, + + 41 : #EDEDE4, + 42 : #F74906, + 43 : #554E44, + 44 : #FFFFFF, + + 45 : #221E1D, + 46 : #ECEAE0, + 47 : #63AA9C, + 48 : #E9633B, + + 49 : #a10015, + 50 : #d52b15, + 51 : #efeee9, + 52 : #beb1b4, + + 53 : #222831, + 54 : #393E46, + 55 : #FD7013, + 56 : #EEEEEE, + + 57 : #FF7260, + 58 : #9BD7D5, + 59 : #FFF5C3, + 60 : #505050, + + 61 : #FF3B1D, + 62 : #7BDFF2, + 63 : #000000, + 64 : #FFFFFF +); + +@each $hex, $color in $colorPalette { + .paletteItem__colorItem_#{$hex} { + background-color: $color; + } +} + + +@media only screen and (max-width: 1280px) { + .paletteWrap { + width: 910px; + } + + .paletteItem { + + &:nth-child(3n) { + margin-right: 0; + } + &:nth-child(4n) { + margin-right: 50px; + } + &:nth-child(12n) { + margin-right: 0; + } + } +} + +@media only screen and (max-width: 960px) { + .paletteWrap { + width: 590px; + } + + .paletteItem { + + &:nth-child(2n) { + margin-right: 0; + } + &:nth-child(3n) { + margin-right: 50px; + } + &:nth-child(6n) { + margin-right: 0; + } + } +} + +@media only screen and (max-width: 642px) { + .paletteWrap { + width: 270px; + } + + .paletteItem { + margin-bottom: 50px; + margin-right: 0; + } +} + + +/*____________________________________________________________ +## Developer Links +____________________________________________________________*/ +.social { + position: fixed; + bottom: 0; + left: 30px; +} +.socialList { + list-style: none; + + &:after { + content: ''; + display: block; + margin: 0 auto; + width: 1px; + height: 40px; + background: #f7e0b5; + } +} +.socialList__item { + margin-bottom: 10px; + width: 20px; + height: 20px; + transition: transform .2s; + + &:hover { + transform: translateY(-3px); + + .socialList__icon { + stroke: #7dcbd8; + } + } +} + +.socialList__icon { + fill: none; + stroke: #f7e0b5; +} \ No newline at end of file diff --git a/color-search-engine-w-react-gsap/README.markdown b/color-search-engine-w-react-gsap/README.markdown new file mode 100644 index 0000000..b140e8d --- /dev/null +++ b/color-search-engine-w-react-gsap/README.markdown @@ -0,0 +1,5 @@ +# Color search engine w/ React && GSAP ๐ŸŽจ + +A Pen created on CodePen.io. Original URL: [https://codepen.io/jh3y/pen/PoNWLKp](https://codepen.io/jh3y/pen/PoNWLKp). + + diff --git a/color-search-engine-w-react-gsap/dist/index.html b/color-search-engine-w-react-gsap/dist/index.html new file mode 100644 index 0000000..a023f9e --- /dev/null +++ b/color-search-engine-w-react-gsap/dist/index.html @@ -0,0 +1,19 @@ + + + + + CodePen - Color search engine w/ React && GSAP ๐ŸŽจ + + + + + + +
+ + + + + + + diff --git a/color-search-engine-w-react-gsap/dist/script.js b/color-search-engine-w-react-gsap/dist/script.js new file mode 100644 index 0000000..d305015 --- /dev/null +++ b/color-search-engine-w-react-gsap/dist/script.js @@ -0,0 +1,291 @@ +const { React, ReactDOM, gsap } = window; +const { useEffect, useState, useRef, useReducer } = React; +const { render } = ReactDOM; +const rootNode = document.getElementById('app'); + +const ANIM_SPEED = 0.25; + +const initialState = { + dataSet: undefined, + searchTime: 0, + searching: false, + keyword: undefined }; + +const ACTIONS = { + SEARCH_NEW: 'SEARCH_NEW', + SEARCH_RESULTS: 'SEARCH_RESULTS', + COPY: 'COPY' }; + + +const colorSearchReducer = (state, action) => { + switch (action.type) { + case ACTIONS.SEARCH_NEW: + return { + searching: true, + searchTime: Date.now(), + dataSet: state.dataSet, + keyword: action.keyword }; + + case ACTIONS.SEARCH_RESULTS: + return { searching: false, searchTime: null, dataSet: action.data }; + case ACTIONS.COPY: + return { + searching: false, + searchTime: null, + dataSet: state.dataSet.map(c => ({ + ...c, + copiedHsl: c.color.hsl === action.color, + copiedHex: c.color.hex === action.color, + copiedRgb: + `rgb(${c.color.rgb.r}, ${c.color.rgb.g}, ${c.color.rgb.b})` === + action.color })) }; + + + default: + return state;} + +}; +const URL = 'https://culr.netlify.app/.netlify/functions/culr'; +const useColorSearch = () => { + const searchResults = useRef(null); + const [{ searchTime, searching, dataSet, keyword }, dispatch] = useReducer( + colorSearchReducer, + initialState); + + const grabImages = async keyword => { + if (!keyword) return; + const data = await (await (await fetch(`${URL}/?search=${keyword}`)).json()). + images; + dispatch({ type: ACTIONS.SEARCH_RESULTS, data }); + }; + useEffect(() => { + grabImages(keyword); + }, [searchTime]); + + const search = async keyword => { + if (!keyword) return; + searchResults.current = []; + dispatch({ type: ACTIONS.SEARCH_NEW, keyword }); + }; + + const copy = color => { + // Copy to clipboard + const input = document.createElement('input'); + input.value = color; + document.body.appendChild(input); + input.select(); + document.execCommand('copy'); + input.remove(); + dispatch({ type: ACTIONS.COPY, color }); + }; + return [dataSet, searching, search, copy]; +}; + +const App = () => { + const [keyword, setKeyword] = useState(''); + const invisiput = useRef(null); + const colorsRef = useRef(null); + const [selected, setSelected] = useState(null); + const selectedRef = useRef(null); + const selectedImageRef = useRef(null); + const colorRef = useRef(null); + const formRef = useRef(null); + const [data, searching, search, copy] = useColorSearch(); + + const unset = () => { + setSelected(null); + search(keyword); + }; + const onSubmit = e => { + e.preventDefault(); + if (selected) { + closeSelected(unset); + } else { + unset(); + } + }; + + const copyToClipboard = color => { + invisiput.current.value = color; + invisiput.current.select(); + document.execCommand('copy'); + copy(color); + }; + + useEffect(() => { + if (selected) { + const colorEl = colorsRef.current.children[selected.index]; + const { top, left, bottom, right } = colorEl.getBoundingClientRect(); + const { + top: containerTop, + left: containerLeft, + right: containerRight, + bottom: containerBottom } = + colorsRef.current.getBoundingClientRect(); + + const colorPos = { + top: top - containerTop, + left: left - containerLeft, + bottom: containerBottom - bottom, + right: containerRight - right }; + + colorRef.current = { + pos: colorPos }; + + const onStart = () => { + gsap.set(selectedRef.current, { + opacity: 1, + '--color': selected.data.color.hex, + '--red': selected.data.color.rgb.r, + '--green': selected.data.color.rgb.g, + '--blue': selected.data.color.rgb.b, + '--t': colorPos.top, + '--r': colorPos.right, + '--b': colorPos.bottom, + '--l': colorPos.left, + zIndex: 2 }); + + }; + gsap. + timeline({ onStart }). + to(selectedRef.current, { + duration: ANIM_SPEED, + '--t': -10, + '--r': -10, + '--b': -10, + '--l': -10 }). + + to(selectedImageRef.current, { + duration: ANIM_SPEED, + opacity: 1 }); + + } + }, [selected]); + + const closeSelected = cb => { + const colorPos = colorRef.current.pos; + const onComplete = () => { + gsap.set(selectedRef.current, { opacity: 0, zIndex: -1 }); + if (cb && typeof cb === 'function') { + cb(); + } + }; + gsap. + timeline({ onComplete }). + to(selectedImageRef.current, { + duration: ANIM_SPEED / 2, + opacity: 0 }). + + to(selectedRef.current, { + duration: ANIM_SPEED / 2, + '--t': colorPos.top, + '--r': colorPos.right, + '--b': colorPos.bottom, + '--l': colorPos.left }); + + }; + + return ( + React.createElement("div", { className: "color-search" }, + React.createElement("input", { ref: invisiput, className: "input-invisible" }), + React.createElement("form", { ref: formRef, onSubmit: onSubmit, className: "input-container" }, + React.createElement("input", { + value: keyword, + disabled: searching, + onChange: e => setKeyword(e.target.value), + placeholder: "Search for a color" }), + + React.createElement("button", { + className: "input-container__button", + role: "button", + disabled: searching, + onClick: onSubmit }, + React.createElement("div", { className: "search" }, + React.createElement("div", { className: "search__glass" }), + React.createElement("div", { className: "search__prongs" }, + new Array(10).fill().map((d, i) => + React.createElement("div", { key: `loader-prong--${i}` })))))), + + + + + + React.createElement("div", { + ref: colorsRef, + className: `colors ${searching ? 'colors--searching' : ''}` }, + data && + data.length !== 0 && + data.map((s, index) => + React.createElement("div", { + key: `color--${index}`, + className: "color", + style: { + '--color': s.color.hex }, + + onClick: () => setSelected({ index, data: data[index] }) })), + + data && data.length !== 0 && selected && + React.createElement("div", { + ref: selectedRef, + className: `color--selected ${ + selected.data.color.dark ? 'color--selected-dark' : '' + }` }, + React.createElement("button", { className: "color__close", onClick: closeSelected }, + React.createElement("svg", { viewBox: "0 0 24 24" }, + React.createElement("path", { d: "M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z" }))), + + + React.createElement("button", { + onClick: () => copyToClipboard(selected.data.color.hsl), + className: "info" }, + data && data[selected.index] && data[selected.index].copiedHsl ? + 'COPIED!' : + selected.data.color.hsl), + + React.createElement("button", { + onClick: () => copyToClipboard(selected.data.color.hex), + className: "info" }, + data && data[selected.index] && data[selected.index].copiedHex ? + 'COPIED!' : + selected.data.color.hex), + + React.createElement("button", { + onClick: () => copyToClipboard(selected.data.color.rgb.label), + className: "info" }, + data && data[selected.index] && data[selected.index].copiedRgb ? + 'COPIED!' : + selected.data.color.rgb.label), + + React.createElement("div", { className: "info" }, "Photo by", + ' ', + React.createElement("a", { + target: "_blank", + rel: "noopener noreferrer", + href: `https://unsplash.com/@${selected.data.user.username}?utm_source=color-image-search&utm_medium=referral` }, + selected.data.user.name), + ' ', "on", + ' ', + React.createElement("a", { + target: "_blank", + rel: "noopener noreferrer", + href: "https://unsplash.com/?utm_source=color-image-search&utm_medium=referral" }, "Unsplash")), + + + + React.createElement("div", { ref: selectedImageRef, className: "img" }, + React.createElement("img", { + className: "image--loading", + key: selected.data.id, + alt: selected.data.alt_description, + src: selected.data.urls.regular }))), + + + + + data && data.length === 0 && React.createElement("h1", null, "No results! \uD83D\uDE2D")))); + + + +}; +const ROOT = document.querySelector('#app'); +render(React.createElement(App, null), ROOT); \ No newline at end of file diff --git a/color-search-engine-w-react-gsap/dist/style.css b/color-search-engine-w-react-gsap/dist/style.css new file mode 100644 index 0000000..aead7ef --- /dev/null +++ b/color-search-engine-w-react-gsap/dist/style.css @@ -0,0 +1,473 @@ +* { + box-sizing: border-box; +} +body { + margin: 0; + padding: 0; + overflow-x: hidden; + font-family: sans-serif; +} +.input-container { + display: inline-grid; + grid-template-columns: auto 60px; + margin: 0; + height: 60px; + margin: 1rem 0; + width: 100%; +} +.input-container:hover [disabled] { + border-color: #ddd; +} +.input-container:hover input { + border-color: #111; +} +.input-container:hover input ~ button { + border-color: #111; +} +.input-container:hover input ~ button .search__glass { + border-color: #111; +} +.input-container:hover input ~ button .search__glass:after { + background: #111; +} +input { + box-sizing: border-box; + cursor: pointer; + padding: 0 24px; + font-size: 18px; + border: 2px solid #aaa; + border-radius: 10px 0 0 10px; + outline: transparent; + -webkit-transition: border-color 0.25s ease, color 0.25s ease; + transition: border-color 0.25s ease, color 0.25s ease; +} +input::-webkit-input-placeholder { + color: #aaa; +} +input::-moz-placeholder { + color: #aaa; +} +input:-ms-input-placeholder { + color: #aaa; +} +input::-ms-input-placeholder { + color: #aaa; +} +input::placeholder { + color: #aaa; +} +input:hover, +input:active, +input:focus { + border-color: #111; +} +input:hover ~ button, +input:active ~ button, +input:focus ~ button { + border-color: #111; +} +input:hover ~ button .search__glass, +input:active ~ button .search__glass, +input:focus ~ button .search__glass { + border-color: #111; + -webkit-transition: border-color 0.25s ease; + transition: border-color 0.25s ease; +} +input:hover ~ button .search__glass:after, +input:active ~ button .search__glass:after, +input:focus ~ button .search__glass:after { + background: #111; + -webkit-transition: background 0.25s ease; + transition: background 0.25s ease; +} +input[disabled], +input:hover[disabled] { + border-color: #ddd; + color: #ddd; +} +input[disabled] ~ button, +input:hover[disabled] ~ button { + border-color: #ddd; +} +input[disabled] ~ button .search__glass, +input:hover[disabled] ~ button .search__glass { + border-color: transparent; +} +.input-container__button { + cursor: pointer; + width: 60px; + outline: transparent; + border-radius: 0 10px 10px 0; + position: relative; + border: 2px solid #aaa; + border-left-width: 0; + -webkit-transition: border-color 0.25s ease; + transition: border-color 0.25s ease; + background: transparent; +} +.input-container__button:hover[disabled] .search__glass { + border-color: transparent; +} +.input-container__button[disabled] .search__prongs { + opacity: 1; + -webkit-transition: opacity 0.25s 0.25s ease; + transition: opacity 0.25s 0.25s ease; +} +.input-container__button[disabled] .search__glass { + -webkit-transform: translate(0, 0); + transform: translate(0, 0); + border-color: transparent; + -webkit-transition: border-color 0.25s ease, -webkit-transform 0.25s ease; + transition: border-color 0.25s ease, -webkit-transform 0.25s ease; + transition: border-color 0.25s ease, transform 0.25s ease; + transition: border-color 0.25s ease, transform 0.25s ease, -webkit-transform 0.25s ease; +} +.input-container__button[disabled] .search__glass:after { + background: transparent; + -webkit-transition: background 0.25s ease, -webkit-transform 0.25s ease; + transition: background 0.25s ease, -webkit-transform 0.25s ease; + transition: background 0.25s ease, transform 0.25s ease; + transition: background 0.25s ease, transform 0.25s ease, -webkit-transform 0.25s ease; + -webkit-transform: translate(-50%, 0) rotate(-45deg) translate(0, 100%) scaleY(0); + transform: translate(-50%, 0) rotate(-45deg) translate(0, 100%) scaleY(0); +} +.search { + height: 24px; + width: 24px; + border-radius: 100%; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.search__glass { + border-radius: 100%; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + border: 4px solid #aaa; + -webkit-transition: border-color 0.25s ease, -webkit-transform 0.25s ease; + transition: border-color 0.25s ease, -webkit-transform 0.25s ease; + transition: border-color 0.25s ease, transform 0.25s ease; + transition: border-color 0.25s ease, transform 0.25s ease, -webkit-transform 0.25s ease; + -webkit-transform: translate(-10%, -10%); + transform: translate(-10%, -10%); +} +.search__glass:after { + content: ''; + position: absolute; + height: 12px; + top: 50%; + left: 50%; + background: #aaa; + -webkit-transition: background 0.25s ease, -webkit-transform 0.25s ease; + transition: background 0.25s ease, -webkit-transform 0.25s ease; + transition: background 0.25s ease, transform 0.25s ease; + transition: background 0.25s ease, transform 0.25s ease, -webkit-transform 0.25s ease; + width: 4px; + -webkit-transform-origin: top center; + transform-origin: top center; + -webkit-transform: translate(-50%, 0) rotate(-45deg) translate(0, 95%) scaleY(1); + transform: translate(-50%, 0) rotate(-45deg) translate(0, 95%) scaleY(1); + border-radius: 0 0 2px 2px; +} +.search__prongs { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + -webkit-animation: rotate 1s infinite linear; + animation: rotate 1s infinite linear; + opacity: 0; + -webkit-transition: opacity 0.25s ease; + transition: opacity 0.25s ease; +} +.search__prongs > div:nth-of-type(1) { + height: 2px; + width: 2px; + background: #222; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%) rotate(36deg) translate(0, 10px); + transform: translate(-50%, -50%) rotate(36deg) translate(0, 10px); +} +.search__prongs > div:nth-of-type(2) { + height: 2px; + width: 2px; + background: #222; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%) rotate(72deg) translate(0, 10px); + transform: translate(-50%, -50%) rotate(72deg) translate(0, 10px); +} +.search__prongs > div:nth-of-type(3) { + height: 2px; + width: 2px; + background: #222; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%) rotate(108deg) translate(0, 10px); + transform: translate(-50%, -50%) rotate(108deg) translate(0, 10px); +} +.search__prongs > div:nth-of-type(4) { + height: 2px; + width: 2px; + background: #222; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%) rotate(144deg) translate(0, 10px); + transform: translate(-50%, -50%) rotate(144deg) translate(0, 10px); +} +.search__prongs > div:nth-of-type(5) { + height: 2px; + width: 2px; + background: #222; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%) rotate(180deg) translate(0, 10px); + transform: translate(-50%, -50%) rotate(180deg) translate(0, 10px); +} +.search__prongs > div:nth-of-type(6) { + height: 2px; + width: 2px; + background: #222; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%) rotate(216deg) translate(0, 10px); + transform: translate(-50%, -50%) rotate(216deg) translate(0, 10px); +} +.search__prongs > div:nth-of-type(7) { + height: 2px; + width: 2px; + background: #222; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%) rotate(252deg) translate(0, 10px); + transform: translate(-50%, -50%) rotate(252deg) translate(0, 10px); +} +.search__prongs > div:nth-of-type(8) { + height: 2px; + width: 2px; + background: #222; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%) rotate(288deg) translate(0, 10px); + transform: translate(-50%, -50%) rotate(288deg) translate(0, 10px); +} +.search__prongs > div:nth-of-type(9) { + height: 2px; + width: 2px; + background: #222; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%) rotate(324deg) translate(0, 10px); + transform: translate(-50%, -50%) rotate(324deg) translate(0, 10px); +} +.search__prongs > div:nth-of-type(10) { + height: 2px; + width: 2px; + background: #222; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%) rotate(360deg) translate(0, 10px); + transform: translate(-50%, -50%) rotate(360deg) translate(0, 10px); +} +#app { + display: -webkit-box; + display: flex; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + min-height: 100vh; +} +.colors { + min-height: 250px; + display: grid; + -webkit-box-align: center; + align-items: center; + -webkit-box-pack: center; + justify-content: center; + grid-template-columns: repeat(3, auto); + grid-gap: 4px; + -webkit-transition: opacity 0.25s ease, -webkit-filter 0.25s ease; + transition: opacity 0.25s ease, -webkit-filter 0.25s ease; + transition: opacity 0.25s ease, filter 0.25s ease; + transition: opacity 0.25s ease, filter 0.25s ease, -webkit-filter 0.25s ease; + position: relative; +} +.colors:empty { + min-height: 0; +} +.colors--searching { + -webkit-filter: grayscale(1); + filter: grayscale(1); +} +.color { + background-color: var(--color); + position: relative; + height: 100px; + width: 100px; + cursor: pointer; + overflow: hidden; + text-transform: uppercase; + -webkit-transition: -webkit-transform 0.1s ease; + transition: -webkit-transform 0.1s ease; + transition: transform 0.1s ease; + transition: transform 0.1s ease, -webkit-transform 0.1s ease; + border-radius: 10px; +} +.color:hover { + -webkit-transform: scale(0.9); + transform: scale(0.9); +} +.color__close { + cursor: pointer; + position: absolute; + top: 5px; + right: 5px; + height: 44px; + border: 0; + background: transparent; + width: 44px; +} +.color__close svg { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + width: 30px; + height: 30px; +} +.color__close svg path { + fill: #fff; +} +.color--selected { + border-radius: 10px; + position: absolute; + color: #fff; + overflow: hidden; + background: var(--color); + opacity: 0; + top: 0; + right: 0; + bottom: 0; + left: 0; + font-weight: bold; + display: -webkit-box; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-pack: end; + justify-content: flex-end; + -webkit-box-align: end; + align-items: flex-end; + padding: 1rem; + z-index: -1; + -webkit-clip-path: inset(calc(var(--t) * 1px) calc(var(--r) * 1px) calc(var(--b) * 1px) calc(var(--l) * 1px)); + clip-path: inset(calc(var(--t) * 1px) calc(var(--r) * 1px) calc(var(--b) * 1px) calc(var(--l) * 1px)); +} +.color--selected a, +.color--selected button { + color: #fff; +} +.color--selected-dark { + color: #111; +} +.color--selected-dark a, +.color--selected-dark button { + color: #111; +} +.color--selected-dark svg path { + fill: #111; +} +.img, +img { + border-radius: 10px; + -o-object-fit: cover; + object-fit: cover; + position: absolute; + top: 0; + width: 100%; + height: 100%; + left: 0; + -webkit-animation: fadeIn 0.25s ease; + animation: fadeIn 0.25s ease; + z-index: -1; +} +.img { + opacity: 0; +} +.info { + cursor: pointer; + padding: 0.5rem 0.5rem 0.5rem; + text-align: right; + font-size: 16px; + font-family: sans-serif; + background: rgba(var(--red), var(--green), var(--blue), var(--alpha, 0)); + -webkit-transition: background 0.25s ease; + transition: background 0.25s ease; + border: 0; + font-weight: bold; + display: inline-block; +} +.info:hover { + --alpha: 1; +} +.info:hover ~ .img { + --alpha: 0; +} +.img:after { + content: ''; + background: rgba(var(--red), var(--green), var(--blue), var(--alpha, 0.75)); + position: absolute; + -webkit-transition: background 0.25s ease; + transition: background 0.25s ease; + top: 0; + right: 0; + bottom: 0; + left: 0; +} +.input-invisible { + position: fixed; + top: 0; + left: 100%; +} +@-webkit-keyframes rotate { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes rotate { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes fadeIn { + from { + opacity: 0; + } +} +@keyframes fadeIn { + from { + opacity: 0; + } +} \ No newline at end of file diff --git a/color-search-engine-w-react-gsap/license.txt b/color-search-engine-w-react-gsap/license.txt new file mode 100644 index 0000000..b3f8f54 --- /dev/null +++ b/color-search-engine-w-react-gsap/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Jhey (https://codepen.io/jh3y/pen/PoNWLKp) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/color-search-engine-w-react-gsap/src/index.pug b/color-search-engine-w-react-gsap/src/index.pug new file mode 100644 index 0000000..4b9f0fe --- /dev/null +++ b/color-search-engine-w-react-gsap/src/index.pug @@ -0,0 +1 @@ +#app \ No newline at end of file diff --git a/color-search-engine-w-react-gsap/src/script.babel b/color-search-engine-w-react-gsap/src/script.babel new file mode 100644 index 0000000..be9128a --- /dev/null +++ b/color-search-engine-w-react-gsap/src/script.babel @@ -0,0 +1,291 @@ +const { React, ReactDOM, gsap } = window +const { useEffect, useState, useRef, useReducer } = React +const { render } = ReactDOM +const rootNode = document.getElementById('app') + +const ANIM_SPEED = 0.25 + +const initialState = { + dataSet: undefined, + searchTime: 0, + searching: false, + keyword: undefined, +} +const ACTIONS = { + SEARCH_NEW: 'SEARCH_NEW', + SEARCH_RESULTS: 'SEARCH_RESULTS', + COPY: 'COPY', +} + +const colorSearchReducer = (state, action) => { + switch (action.type) { + case ACTIONS.SEARCH_NEW: + return { + searching: true, + searchTime: Date.now(), + dataSet: state.dataSet, + keyword: action.keyword, + } + case ACTIONS.SEARCH_RESULTS: + return { searching: false, searchTime: null, dataSet: action.data } + case ACTIONS.COPY: + return { + searching: false, + searchTime: null, + dataSet: state.dataSet.map((c) => ({ + ...c, + copiedHsl: c.color.hsl === action.color, + copiedHex: c.color.hex === action.color, + copiedRgb: + `rgb(${c.color.rgb.r}, ${c.color.rgb.g}, ${c.color.rgb.b})` === + action.color, + })), + } + default: + return state + } +} +const URL = 'https://culr.netlify.app/.netlify/functions/culr' +const useColorSearch = () => { + const searchResults = useRef(null) + const [{ searchTime, searching, dataSet, keyword }, dispatch] = useReducer( + colorSearchReducer, + initialState + ) + const grabImages = async (keyword) => { + if (!keyword) return + const data = await (await (await fetch(`${URL}/?search=${keyword}`)).json()) + .images + dispatch({ type: ACTIONS.SEARCH_RESULTS, data }) + } + useEffect(() => { + grabImages(keyword) + }, [searchTime]) + + const search = async (keyword) => { + if (!keyword) return + searchResults.current = [] + dispatch({ type: ACTIONS.SEARCH_NEW, keyword }) + } + + const copy = (color) => { + // Copy to clipboard + const input = document.createElement('input') + input.value = color + document.body.appendChild(input) + input.select() + document.execCommand('copy') + input.remove() + dispatch({ type: ACTIONS.COPY, color }) + } + return [dataSet, searching, search, copy] +} + +const App = () => { + const [keyword, setKeyword] = useState('') + const invisiput = useRef(null) + const colorsRef = useRef(null) + const [selected, setSelected] = useState(null) + const selectedRef = useRef(null) + const selectedImageRef = useRef(null) + const colorRef = useRef(null) + const formRef = useRef(null) + const [data, searching, search, copy] = useColorSearch() + + const unset = () => { + setSelected(null) + search(keyword) + } + const onSubmit = (e) => { + e.preventDefault() + if (selected) { + closeSelected(unset) + } else { + unset() + } + } + + const copyToClipboard = (color) => { + invisiput.current.value = color + invisiput.current.select() + document.execCommand('copy') + copy(color) + } + + useEffect(() => { + if (selected) { + const colorEl = colorsRef.current.children[selected.index] + const { top, left, bottom, right } = colorEl.getBoundingClientRect() + const { + top: containerTop, + left: containerLeft, + right: containerRight, + bottom: containerBottom, + } = colorsRef.current.getBoundingClientRect() + + const colorPos = { + top: top - containerTop, + left: left - containerLeft, + bottom: containerBottom - bottom, + right: containerRight - right, + } + colorRef.current = { + pos: colorPos, + } + const onStart = () => { + gsap.set(selectedRef.current, { + opacity: 1, + '--color': selected.data.color.hex, + '--red': selected.data.color.rgb.r, + '--green': selected.data.color.rgb.g, + '--blue': selected.data.color.rgb.b, + '--t': colorPos.top, + '--r': colorPos.right, + '--b': colorPos.bottom, + '--l': colorPos.left, + zIndex: 2, + }) + } + gsap + .timeline({ onStart }) + .to(selectedRef.current, { + duration: ANIM_SPEED, + '--t': -10, + '--r': -10, + '--b': -10, + '--l': -10, + }) + .to(selectedImageRef.current, { + duration: ANIM_SPEED, + opacity: 1, + }) + } + }, [selected]) + + const closeSelected = (cb) => { + const colorPos = colorRef.current.pos + const onComplete = () => { + gsap.set(selectedRef.current, { opacity: 0, zIndex: -1 }) + if (cb && typeof cb === 'function') { + cb() + } + } + gsap + .timeline({ onComplete }) + .to(selectedImageRef.current, { + duration: ANIM_SPEED / 2, + opacity: 0, + }) + .to(selectedRef.current, { + duration: ANIM_SPEED / 2, + '--t': colorPos.top, + '--r': colorPos.right, + '--b': colorPos.bottom, + '--l': colorPos.left, + }) + } + + return ( +
+ +
+ setKeyword(e.target.value)} + placeholder="Search for a color" + /> + +
+
+ {data && + data.length !== 0 && + data.map((s, index) => ( +
setSelected({ index, data: data[index] })}>
+ ))} + {data && data.length !== 0 && selected && ( +
+ + + + +
+ Photo by{' '} + + {selected.data.user.name} + {' '} + on{' '} + + Unsplash + +
+
+ {selected.data.alt_description} +
+
+ )} + {data && data.length === 0 &&

No results! ๐Ÿ˜ญ

} +
+
+ ) +} +const ROOT = document.querySelector('#app') +render(, ROOT) diff --git a/color-search-engine-w-react-gsap/src/style.styl b/color-search-engine-w-react-gsap/src/style.styl new file mode 100644 index 0000000..95a918f --- /dev/null +++ b/color-search-engine-w-react-gsap/src/style.styl @@ -0,0 +1,302 @@ +* + box-sizing border-box + +body + margin 0 + padding 0 + overflow-x hidden + font-family sans-serif + +.input-container + display inline-grid + grid-template-columns auto 60px + margin 0 + height 60px + margin 1rem 0 + width 100% + + &:hover + [disabled] + border-color #ddd + + input + border-color #111 + + ~ button + border-color #111 + + .search__glass + border-color #111 + + &:after + background #111 + +input + box-sizing border-box + cursor pointer + padding 0 24px + font-size 18px + border 2px solid #aaa + border-radius 10px 0 0 10px + outline transparent + transition border-color .25s ease, color .25s ease + + &::placeholder + color #aaa + + + &:hover + &:active + &:focus + border-color #111 + + ~ button + border-color #111 + + .search__glass + border-color #111 + transition border-color 0.25s ease + + &:after + background #111 + transition background 0.25s ease + + &[disabled] + &:hover[disabled] + border-color #ddd + color #ddd + + ~ button + border-color #ddd + + .search__glass + border-color transparent + +.input-container__button + cursor pointer + width 60px + outline transparent + border-radius 0 10px 10px 0 + position relative + border 2px solid #aaa + border-left-width 0 + transition border-color 0.25s ease + background transparent + + &:hover[disabled] .search__glass + border-color transparent + + &[disabled] .search__prongs + opacity 1 + transition opacity .25s .25s ease + + &[disabled] .search__glass + transform translate(0, 0) + border-color transparent + transition border-color 0.25s ease, transform 0.25s ease + + &[disabled] .search__glass:after + background transparent + transition background 0.25s ease, transform 0.25s ease + transform translate(-50%, 0) rotate(-45deg) translate(0, 100%) scaleY(0) + +.search + height 24px + width 24px + border-radius 100% + position absolute + top 50% + left 50% + transform translate(-50%, -50%) + + &__glass + border-radius 100% + position absolute + top 0 + right 0 + bottom 0 + left 0 + border 4px solid #aaa + transition border-color 0.25s ease, transform 0.25s ease + transform translate(-10%, -10%) + + &:after + content '' + position absolute + height 12px + top 50% + left 50% + background #aaa + transition background 0.25s ease, transform 0.25s ease + width 4px + transform-origin top center + transform translate(-50%, 0) rotate(-45deg) translate(0, 95%) scaleY(1) + border-radius 0 0 2px 2px + + &__prongs + position absolute + top 0 + right 0 + bottom 0 + left 0 + animation rotate 1s infinite linear + opacity 0 + transition opacity .25s ease + + > div + for $prong in (1..10) + &:nth-of-type({$prong}) + height 2px + width 2px + background #222 + position absolute + top 50% + left 50% + transform translate(-50%, -50%) rotate($prong * 36deg) translate(0, 10px) + +@keyframes rotate + to + transform rotate(360deg) + +#app + display flex + justify-content center + align-items center + min-height 100vh + +.colors + min-height 250px + display grid + align-items center + justify-content center + grid-template-columns repeat(3, auto) + grid-gap 4px + transition opacity .25s ease, filter .25s ease + position relative + + &:empty + min-height 0 + + &--searching + filter grayscale(1) + +.color + background-color var(--color) + position relative + height 100px + width 100px + cursor pointer + overflow hidden + text-transform uppercase + transition transform 0.1s ease + border-radius 10px + + &:hover + transform scale(0.9) + + &__close + cursor pointer + position absolute + top 5px + right 5px + height 44px + border 0 + background transparent + width 44px + svg + position absolute + top 50% + left 50% + transform translate(-50%, -50%) + width 30px + height 30px + path + fill #fff + + &--selected + border-radius 10px + position absolute + color #FFFFFF + overflow hidden + background var(--color) + opacity 0 + top 0 + right 0 + bottom 0 + left 0 + font-weight bold + display flex + flex-direction column + justify-content flex-end + align-items flex-end + padding 1rem + z-index -1 + $clip = inset(calc(var(--t) * 1px) calc(var(--r) * 1px) calc(var(--b) * 1px) calc(var(--l) * 1px)) + -webkit-clip-path $clip + clip-path $clip + + a + button + color #FFF + + + &-dark + color #111 + + a + button + color #111 + + svg path + fill #111 + +.img +img + border-radius 10px + object-fit cover + position absolute + top 0 + width 100% + height 100% + left 0 + animation fadeIn 0.25s ease + z-index -1 + +.img + opacity 0 + +.info + cursor pointer + padding 0.5rem 0.5rem 0.5rem + text-align right + font-size 16px + font-family sans-serif + background 'rgba(%s, %s, %s, %s)' % (var(--red) var(--green) var(--blue) var(--alpha, 0)) + transition background 0.25s ease + border 0 + font-weight bold + display inline-block + + &:hover + --alpha 1 + ~ .img + --alpha 0 + +@keyframes fadeIn + from + opacity 0 + +.img:after + content '' + background 'rgba(%s, %s, %s, %s)' % (var(--red) var(--green) var(--blue) var(--alpha, 0.75)) + position absolute + transition background 0.25s ease + top 0 + right 0 + bottom 0 + left 0 + +.input-invisible + position fixed + top 0 + left 100% diff --git a/color-standards-and-color-nomenclature/LICENSE.txt b/color-standards-and-color-nomenclature/LICENSE.txt new file mode 100644 index 0000000..021960e --- /dev/null +++ b/color-standards-and-color-nomenclature/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2023 David Aerne (https://codepen.io/meodai/pen/abGjoLq) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/color-standards-and-color-nomenclature/README.md b/color-standards-and-color-nomenclature/README.md new file mode 100644 index 0000000..8fccc2e --- /dev/null +++ b/color-standards-and-color-nomenclature/README.md @@ -0,0 +1,4 @@ +# Color Standards and Color Nomenclature + +A Pen created on CodePen.io. Original URL: [https://codepen.io/meodai/pen/abGjoLq](https://codepen.io/meodai/pen/abGjoLq). + diff --git a/color-standards-and-color-nomenclature/dist/index.html b/color-standards-and-color-nomenclature/dist/index.html new file mode 100644 index 0000000..fc13518 --- /dev/null +++ b/color-standards-and-color-nomenclature/dist/index.html @@ -0,0 +1,52 @@ + + + + + CodePen - Color Standards and Color Nomenclature + + + + + + + + +
+

Color Standards and Color Nomenclature

+

Robert Ridgway

+ +

Color Standards and Color Nomenclature, by Robert Ridgway (1850-1929) was published in Washignton, DC in 1912, it's part of the public domain in the USA. In August 31, 2020 was added to the Gutenberg Project. + +The book full title "Color Standards and Color Nomenclature: With fifty-three colored plates and eleven hundred and fifteen named colors" clearly informs about the magnitud and spectrum of pigments, naming conventions and categories embedded in the book.

+
+ + +
  • + +
  • +
  • + +
  • +
    + +
    + +
    +
    +Source +
    + + + + + diff --git a/color-standards-and-color-nomenclature/dist/script.js b/color-standards-and-color-nomenclature/dist/script.js new file mode 100644 index 0000000..8089188 --- /dev/null +++ b/color-standards-and-color-nomenclature/dist/script.js @@ -0,0 +1,100 @@ +// https://github.com/davo/Color-Standards-and-Color-Nomenclature +console.clear(); + +const $a = document.querySelector('#app'); + +const bestContrst = hexColor => { + return chroma.contrast(hexColor, '#fff') > 4.5 ? '#fff' : '#000'; +}; + +const plates = {}; + +fetch( +'https://api.color.pizza/v1/?list=ridgway'). +then( +d => d.json()). +then(dd => { + const d = dd.colors; + + let data = d.sort((a, b) => a.meta.parsed.originalPosition < b.meta.parsed.originalPosition ? -1 : 1); + + data.forEach((c, i) => { + if (!plates.hasOwnProperty(c.meta.plate)) { + plates[c.meta.plate] = []; + } + + plates[c.meta.plate].push(c); + }); + + const keys = Object.keys(plates); + + let j = 0; + let ii = 0; + + const parentRnd = () => { + $a.style = d.map((c, i) => { + return ` + --rnd-${i}-a: ${Math.random()}; + --rnd-${i}-b: ${Math.random()}; + `; + }).join(''); + }; + + parentRnd(); + + document.querySelector('[data-shuffle-size]').addEventListener('click', () => parentRnd()); + + keys.forEach(plate => { + if (j++ % 2) { + //plates[plate].reverse(); + } + + const $plate = Object.assign( + document.createElement('section'), + { + className: 'plate' }); + + + + const $title = Object.assign(document.createElement('h1'), { + innerHTML: plate, + className: 'plate__title' }); + + + $plate.appendChild($title); + + plates[plate].forEach((c, i) => { + const $color = Object.assign( + document.createElement('aside'), + { + style: ` + --cd: ${c.hex}; + --cc: ${bestContrst(c.hex)}; + --rnd: var(--rnd-${ii}-a); + --rnd2: var(--rnd-${ii}-b); + `, + className: 'plate__color color', + innerHTML: ` + + ${c.name} + ` }); + + ii++; + + $plate.appendChild($color); + }); + + $a.appendChild($plate); + }); +}); + + +document.querySelector('[data-tabs]').addEventListener('click', e => { + e.target.toggleAttribute('aria-checked'); + $a.classList.toggle('is-tabbed'); +}); + +document.querySelector('[data-view-grid]').addEventListener('click', e => { + e.target.toggleAttribute('aria-checked'); + $a.classList.toggle('is-stack'); +}); \ No newline at end of file diff --git a/color-standards-and-color-nomenclature/dist/style.css b/color-standards-and-color-nomenclature/dist/style.css new file mode 100644 index 0000000..5d57fa6 --- /dev/null +++ b/color-standards-and-color-nomenclature/dist/style.css @@ -0,0 +1,212 @@ +@import url("https://fonts.googleapis.com/css2?family=Lustria"); +:root { + font-size: clamp(13px, 4vw, 30px); + font-family: serif; + font-family: "Lustria", serif; + --bgc: #f1ede8; + --tc: #2b2b2b; + color: var(--tc); + background: var(--bgc); + padding-bottom: 2em; +} + +body::before { + content: ""; + background-image: url(https://assets.codepen.io/102565/paper-512x512.jpg); + position: fixed; + inset: 0; + opacity: 0.5; + z-index: -1; +} + +.head, +.foot { + max-width: 40rem; + padding: 1rem; + margin: 0 auto; +} + +.foot { + text-align: center; +} + +.title { + font-size: 1.6rem; + max-width: 14rem; + line-height: 1.05; + letter-spacing: -0.05em; + margin: 1em 0 0 0; +} +.title--sub { + font-size: 0.7em; +} + +.lead { + font-size: 0.47rem; + max-width: 22rem; + line-height: 1.6; + margin: 1rem 0 0 auto; + -moz-column-count: 2; + column-count: 2; + -moz-column-gap: 2em; + column-gap: 2em; +} +@media (max-width: 50em) { + .lead { + max-width: 100%; + } +} +@media (max-width: 35em) { + .lead { + -moz-column-count: 1; + column-count: 1; + -moz-column-gap: 0; + column-gap: 0; + font-size: 1rem; + } +} + +.menu { + list-style: none; + padding: 0 1rem; + margin: 2rem 0 0; + display: flex; +} + +button { + border: none; + background: none; + font: inherit; + cursor: pointer; + font-size: 0.47rem; +} +button[aria-checked] { + text-decoration: underline; +} +button span { + pointer-events: none; +} + +.wrap { + padding: 4rem; + display: grid; + grid-template-columns: repeat(4, 1fr); + padding: 1rem; + max-width: 34rem; + margin: 0 auto; +} + +.wrap.is-stack { + display: block; + max-width: 20rem; + margin-top: 3rem; +} +.wrap.is-stack .plate { + padding: 0 2rem; + display: flex; + flex-direction: column; +} +.wrap.is-stack .plate:nth-child(2n) { + flex-direction: column-reverse; +} +.wrap.is-stack .plate__color { + height: calc(3rem + var(--rnd) * 7rem); + transform: scale(1) scaleX(calc(.95 + var(--rnd) * .05)) rotate(calc((-.5 + var(--rnd2)) * -4deg)) translateX(calc((-.5 + var(--rnd2)) * 15%)) translateY(calc((-.5 + var(--rnd)) * 50%)); +} +.wrap.is-stack .plate__color:hover { + z-index: 1; +} + +.plate { + gap: 1px; + position: relative; + padding: 2rem; + /*background: beige; + background: var(--bgc);*/ + height: -webkit-fit-content; + height: -moz-fit-content; + height: fit-content; +} + +.plate__color { + flex: 1 1 auto; + height: calc(0.1rem + var(--rnd) * 1rem); + box-shadow: 0 0 0 1px var(--bgc); + transform: scale(1) scaleX(calc(.9 + var(--rnd) * .1)) skewX(calc((-.5 + var(--rnd)) * 5deg)) rotate(calc((-.5 + var(--rnd2)) * -10deg)) translateX(calc((-.5 + var(--rnd2)) * 25%)) translateY(calc((-.5 + var(--rnd)) * 100%)); + margin-top: 1px; + transition: 300ms height, 400ms transform; + will-change: height, transform; +} +.plate__color:hover { + height: 4rem; + transform: scale(1.1); + z-index: 1; +} + +.wrap.is-tabbed .plate { + padding: 1rem; +} +.wrap.is-tabbed .plate__color { + height: calc(0.75rem + var(--rnd) * 0.25rem); + box-shadow: 0 0 0 1px var(--bgc); + transform: scale(1) scaleX(calc(.9 + var(--rnd) * .1)) rotate(calc((-.5 + var(--rnd2)) * -2deg)) translateX(calc((-.5 + var(--rnd2)) * 5%)); +} + +.wrap.is-stack.is-tabbed .plate__color { + height: calc(3rem + var(--rnd) * 7rem); +} + +.plate__title { + position: absolute; + z-index: 1; + bottom: 2rem; + left: 0; + right: 0; + text-align: center; + font-size: 3vw; + padding: 0.5em; + color: var(--bgc); + pointer-events: none; + letter-spacing: -0.05em; +} + +.plate:hover .plate__title { + opacity: 0; +} + +.color { + position: relative; + width: 100%; + background: var(--cd); + overflow: hidden; +} +.color img { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + -o-object-fit: cover; + object-fit: cover; +} +.color b { + display: block; + position: absolute; + z-index: 2; + font-size: 0.4em; + line-height: 1.1; + padding: 1em; + bottom: 0; + opacity: 0; + transform: translateY(-3em); + color: var(--cc); +} +.color:hover b { + opacity: 1; + transform: translateY(0); + transition: 450ms opacity linear 100ms, 400ms transform cubic-bezier(0.3, 0.7, 0, 1) 100ms; +} + +.color:hover { + height: 4rem; +} \ No newline at end of file diff --git a/color-standards-and-color-nomenclature/src/index.html b/color-standards-and-color-nomenclature/src/index.html new file mode 100644 index 0000000..7533e9d --- /dev/null +++ b/color-standards-and-color-nomenclature/src/index.html @@ -0,0 +1,36 @@ + + +
    +

    Color Standards and Color Nomenclature

    +

    Robert Ridgway

    + +

    Color Standards and Color Nomenclature, by Robert Ridgway (1850-1929) was published in Washignton, DC in 1912, it's part of the public domain in the USA. In August 31, 2020 was added to the Gutenberg Project. + +The book full title "Color Standards and Color Nomenclature: With fifty-three colored plates and eleven hundred and fifteen named colors" clearly informs about the magnitud and spectrum of pigments, naming conventions and categories embedded in the book.

    +
    + + +
  • + +
  • +
  • + +
  • +
    + +
    + +
    +
    +Source +
    \ No newline at end of file diff --git a/color-standards-and-color-nomenclature/src/script.js b/color-standards-and-color-nomenclature/src/script.js new file mode 100644 index 0000000..328b80b --- /dev/null +++ b/color-standards-and-color-nomenclature/src/script.js @@ -0,0 +1,100 @@ +// https://github.com/davo/Color-Standards-and-Color-Nomenclature +console.clear(); + +const $a = document.querySelector('#app'); + +const bestContrst = (hexColor) => { + return chroma.contrast(hexColor, '#fff') > 4.5 ? '#fff' : '#000'; +} + +const plates = {}; + +fetch( + 'https://api.color.pizza/v1/?list=ridgway' +).then( + d => d.json() +).then(dd => { + const d = dd.colors; + + let data = d.sort((a,b) => a.meta.parsed.originalPosition < b.meta.parsed.originalPosition ? -1 : 1); + + data.forEach((c, i) => { + if (!plates.hasOwnProperty(c.meta.plate)) { + plates[c.meta.plate] = []; + } + + plates[c.meta.plate].push(c); + }); + + const keys = Object.keys(plates); + + let j = 0; + let ii = 0; + + const parentRnd = () => { + $a.style = d.map((c,i) => { + return ` + --rnd-${i}-a: ${Math.random()}; + --rnd-${i}-b: ${Math.random()}; + ` + }).join(''); + }; + + parentRnd(); + + document.querySelector('[data-shuffle-size]').addEventListener('click', () => parentRnd()) + + keys.forEach(plate => { + if (j++%2) { + //plates[plate].reverse(); + } + + const $plate = Object.assign( + document.createElement('section'), + { + className: 'plate' + } + ); + + const $title = Object.assign(document.createElement('h1'), { + innerHTML: plate, + className: 'plate__title', + }); + + $plate.appendChild($title); + + plates[plate].forEach((c, i) => { + const $color = Object.assign( + document.createElement('aside'), + { + style: ` + --cd: ${c.hex}; + --cc: ${bestContrst(c.hex)}; + --rnd: var(--rnd-${ii}-a); + --rnd2: var(--rnd-${ii}-b); + `, + className: 'plate__color color', + innerHTML: ` + + ${c.name} + ` + }); + ii++; + + $plate.appendChild($color); + }) + + $a.appendChild($plate); + }) +}); + + +document.querySelector('[data-tabs]').addEventListener('click', e => { + e.target.toggleAttribute('aria-checked'); + $a.classList.toggle('is-tabbed'); +}); + +document.querySelector('[data-view-grid]').addEventListener('click', e => { + e.target.toggleAttribute('aria-checked'); + $a.classList.toggle('is-stack'); +}); diff --git a/color-standards-and-color-nomenclature/src/style.scss b/color-standards-and-color-nomenclature/src/style.scss new file mode 100644 index 0000000..d8d2b49 --- /dev/null +++ b/color-standards-and-color-nomenclature/src/style.scss @@ -0,0 +1,237 @@ +// https://github.com/davo/Color-Standards-and-Color-Nomenclature + +@import url('https://fonts.googleapis.com/css2?family=Lustria'); + +:root { + font-size: clamp(13px, 4vw, 30px); + font-family: serif; + font-family: 'Lustria', serif; + --bgc: #f1ede8; + --tc: #2b2b2b; + + color: var(--tc); + background: var(--bgc); + + + padding-bottom: 2em; +} + +body::before { + content: ''; + background-image: url(https://assets.codepen.io/102565/paper-512x512.jpg); + position: fixed; + inset: 0; + opacity: .5; + z-index: -1; +} + +.head, +.foot { + max-width: 40rem; + padding: 1rem; + margin: 0 auto; +} + +.foot { + text-align: center; +} + +.title { + font-size: 1.6rem; + max-width: 14rem; + line-height: 1.05; + letter-spacing: -0.05em; + margin: 1em 0 0 0; + &--sub { + font-size: .7em; + } +} + +.lead { + font-size: .47rem; + max-width: 22rem; + line-height: 1.6; + margin: 1rem 0 0 auto; + column-count: 2; + column-gap: 2em; + + @media (max-width: 50em) { + max-width: 100%; + } + + + @media (max-width: 35em) { + column-count: 1; + column-gap: 0; + font-size: 1rem; + } +} + +.menu { + list-style: none; + padding: 0 1rem; + margin: 2rem 0 0; + + display: flex; + //flex-direction: row-reverse; + //justify-content: center; +} + +button { + border: none; + background: none; + font: inherit; + cursor: pointer; + font-size: 0.47rem; + + &[aria-checked] { + text-decoration: underline; + } + span { + pointer-events: none; + } +} + +.wrap { + padding: 4rem; + display: grid; + grid-template-columns: repeat(4, 1fr); + //grid-template-rows: masonry; + + //grid-auto-flow: column dense; + //grid-auto-flow: row dense; + //gap: .2rem; + padding: 1rem; + max-width: 34rem; + margin: 0 auto; +} + +.wrap.is-stack { + display: block; + max-width: 20rem; + margin-top: 3rem; + + .plate { + padding: 0 2rem; + display: flex; + flex-direction: column; + &:nth-child(2n) { + flex-direction: column-reverse; + + } + } + + .plate__color { + height: calc(3rem + var(--rnd) * 7rem); + transform: scale(1) scaleX(calc(.95 + var(--rnd) * .05)) rotate(calc((-.5 + var(--rnd2)) * -4deg)) translateX(calc((-.5 + var(--rnd2)) * 15%)) translateY(calc((-.5 + var(--rnd)) * 50%)); + &:hover { + //height: 4rem; + //transform: scale(1.1); + z-index: 1; + } + } +} + +.plate { + //height: 80vh; + //display: flex; + //flex-direction: column; + gap: 1px; + position: relative; + padding: 2rem; + /*background: beige; + background: var(--bgc);*/ + height: fit-content; +} + +.plate__color { + flex: 1 1 auto; + height: calc(0.1rem + var(--rnd) * 1rem); + + box-shadow: 0 0 0 1px var(--bgc); + transform: scale(1) scaleX(calc(.9 + var(--rnd) * .1)) skewX(calc((-.5 + var(--rnd)) * 5deg)) rotate(calc((-.5 + var(--rnd2)) * -10deg)) translateX(calc((-.5 + var(--rnd2)) * 25%)) translateY(calc((-.5 + var(--rnd)) * 100%)); + margin-top: 1px; + transition: 300ms height, 400ms transform; + will-change: height, transform; + &:hover { + height: 4rem; + transform: scale(1.1); + z-index: 1; + } +} + +.wrap.is-tabbed { + .plate { + padding: 1rem; + } + .plate__color { + height: calc(0.75rem + var(--rnd) * 0.25rem); + + box-shadow: 0 0 0 1px var(--bgc); + transform: scale(1) scaleX(calc(.9 + var(--rnd) * .1)) rotate(calc((-.5 + var(--rnd2)) * -2deg)) translateX(calc((-.5 + var(--rnd2)) * 5%)); + } +} + +.wrap.is-stack.is-tabbed .plate__color { + height: calc(3rem + var(--rnd) * 7rem); +} + + +.plate__title { + position: absolute; + z-index: 1; + bottom: 2rem; + left: 0; + right: 0; + text-align: center; + font-size: 3vw; + padding: .5em; + color: var(--bgc); + pointer-events: none; + letter-spacing: -0.05em; +} + +.plate:hover .plate__title { + opacity: 0; +} + + +.color { + position: relative; + width: 100%; + background: var(--cd); + overflow: hidden; + + img { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + object-fit: cover; + } + + b { + display: block; + position: absolute; + z-index: 2; + font-size: 0.4em; + line-height: 1.1; + padding: 1em; + bottom: 0; + opacity: 0; + transform: translateY(-3em); + color: var(--cc); + } + + &:hover b { + opacity: 1; + transform: translateY(0); + + transition: 450ms opacity linear 100ms, 400ms transform cubic-bezier(.3, .7, 0, 1) 100ms; + } +} + +.color:hover { + height: 4rem; +} \ No newline at end of file diff --git a/color-wave/README.markdown b/color-wave/README.markdown new file mode 100644 index 0000000..e6d740a --- /dev/null +++ b/color-wave/README.markdown @@ -0,0 +1,5 @@ +# Color wave + +A Pen created on CodePen.io. Original URL: [https://codepen.io/Mamboleoo/pen/dypZQGo](https://codepen.io/Mamboleoo/pen/dypZQGo). + + diff --git a/color-wave/dist/index.html b/color-wave/dist/index.html new file mode 100644 index 0000000..528edc1 --- /dev/null +++ b/color-wave/dist/index.html @@ -0,0 +1,88 @@ + + + + + CodePen - Color wave + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/color-wave/dist/script.js b/color-wave/dist/script.js new file mode 100644 index 0000000..b1f3dad --- /dev/null +++ b/color-wave/dist/script.js @@ -0,0 +1,33 @@ +console.clear(); + +const paths = document.querySelectorAll('path'); +const defs = document.querySelector('defs'); +const xmlns = "http://www.w3.org/2000/svg"; + +paths.forEach((p, i) => { + const clone = p.cloneNode(); + clone.setAttribute('stroke-dasharray', ''); + const mask = document.createElementNS(xmlns, 'mask'); + mask.setAttribute('id', `id-${i}`); + mask.appendChild(clone); + defs.appendChild(mask); + p.setAttribute('mask', `url(#id-${i})`); + gsap.set(clone, { + strokeDasharray: () => clone.getTotalLength(), + strokeDashoffset: () => clone.getTotalLength() + }); + gsap.to(clone, { + duration: 10, + delay: i * 0.1, + repeat: -1, + strokeDashoffset: clone.getTotalLength() * 3, + ease: 'power1.inOut' + }); + gsap.to(p, { + duration: 10, + repeat: -1, + strokeDashoffset: clone.getTotalLength() * 0.4, + ease: 'none' + }); +}); +document.querySelector('svg').style.opacity = 1; \ No newline at end of file diff --git a/color-wave/dist/style.css b/color-wave/dist/style.css new file mode 100644 index 0000000..05b0ef8 --- /dev/null +++ b/color-wave/dist/style.css @@ -0,0 +1,16 @@ +body { + background: black; + overflow: hidden; + margin: 0; +} + +svg { + width: 100vw; + height: 100vh; + opacity: 0; +} + +defs path { + stroke: white; + stroke-width: 2px; +} \ No newline at end of file diff --git a/color-wave/license.txt b/color-wave/license.txt new file mode 100644 index 0000000..38311ab --- /dev/null +++ b/color-wave/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Louis Hoebregts (https://codepen.io/Mamboleoo/pen/dypZQGo) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/color-wave/src/index.html b/color-wave/src/index.html new file mode 100644 index 0000000..667ee42 --- /dev/null +++ b/color-wave/src/index.html @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/color-wave/src/script.js b/color-wave/src/script.js new file mode 100644 index 0000000..b1f3dad --- /dev/null +++ b/color-wave/src/script.js @@ -0,0 +1,33 @@ +console.clear(); + +const paths = document.querySelectorAll('path'); +const defs = document.querySelector('defs'); +const xmlns = "http://www.w3.org/2000/svg"; + +paths.forEach((p, i) => { + const clone = p.cloneNode(); + clone.setAttribute('stroke-dasharray', ''); + const mask = document.createElementNS(xmlns, 'mask'); + mask.setAttribute('id', `id-${i}`); + mask.appendChild(clone); + defs.appendChild(mask); + p.setAttribute('mask', `url(#id-${i})`); + gsap.set(clone, { + strokeDasharray: () => clone.getTotalLength(), + strokeDashoffset: () => clone.getTotalLength() + }); + gsap.to(clone, { + duration: 10, + delay: i * 0.1, + repeat: -1, + strokeDashoffset: clone.getTotalLength() * 3, + ease: 'power1.inOut' + }); + gsap.to(p, { + duration: 10, + repeat: -1, + strokeDashoffset: clone.getTotalLength() * 0.4, + ease: 'none' + }); +}); +document.querySelector('svg').style.opacity = 1; \ No newline at end of file diff --git a/color-wave/src/style.scss b/color-wave/src/style.scss new file mode 100644 index 0000000..98f2879 --- /dev/null +++ b/color-wave/src/style.scss @@ -0,0 +1,14 @@ +body { + background: black; + overflow: hidden; + margin: 0; +} +svg { + width: 100vw; + height: 100vh; + opacity: 0; +} +defs path { + stroke: white; + stroke-width: 2px; +} \ No newline at end of file diff --git a/colorful-distance-field-shaderanydayshaders-13/README.markdown b/colorful-distance-field-shaderanydayshaders-13/README.markdown new file mode 100644 index 0000000..6153a48 --- /dev/null +++ b/colorful-distance-field-shaderanydayshaders-13/README.markdown @@ -0,0 +1,5 @@ +# Colorful Distance Field Shader - #anydayshaders 13 + +A Pen created on CodePen.io. Original URL: [https://codepen.io/terabaud/pen/bGeBzBL](https://codepen.io/terabaud/pen/bGeBzBL). + + diff --git a/colorful-distance-field-shaderanydayshaders-13/dist/index.html b/colorful-distance-field-shaderanydayshaders-13/dist/index.html new file mode 100644 index 0000000..f79c48d --- /dev/null +++ b/colorful-distance-field-shaderanydayshaders-13/dist/index.html @@ -0,0 +1,137 @@ + + + + + CodePen - Colorful Distance Field Shader - #anydayshaders 13 + + + + + + + + + + + diff --git a/colorful-distance-field-shaderanydayshaders-13/dist/script.js b/colorful-distance-field-shaderanydayshaders-13/dist/script.js new file mode 100644 index 0000000..c609de4 --- /dev/null +++ b/colorful-distance-field-shaderanydayshaders-13/dist/script.js @@ -0,0 +1,152 @@ +console.clear(); + +class DigitalArt extends HTMLElement { + + constructor() { + super(); + this.canvas = null; + this.gl = null; + this.onResize = this.onResize.bind(this); + this.loop = this.loop.bind(this); + } + + static register() { + customElements.define("digital-art", DigitalArt); + } + + connectedCallback() { + if (! this.gl) { + this.setup(); + } + } + + disconnectedCallback() { + this.dispose(); + } + + get devicePixelRatio() { + return parseFloat(this.getAttribute('dpr')) || window.devicePixelRatio; + } + + + onResize() { + const { canvas, gl, program } = this; + const width = this.clientWidth; + const height = this.clientHeight; + const dpr = this.devicePixelRatio; + canvas.width = width * dpr; + canvas.height = height * dpr; + gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + const uResolution = gl.getUniformLocation(program, "resolution"); + gl.uniform2fv(uResolution, [gl.drawingBufferWidth, gl.drawingBufferHeight]); + } + + createShader(type, code) { + const { gl } = this; + const sh = gl.createShader(type, code); + gl.shaderSource(sh, code); + gl.compileShader(sh); + if (!gl.getShaderParameter(sh, gl.COMPILE_STATUS)) { + throw gl.getShaderInfoLog(sh); + } + return sh; + } + + createBuffers() { + const { gl, program } = this; + const bufferScripts = [...this.querySelectorAll('[type=buffer]')]; + this.buffers = {}; + let count = -1; + bufferScripts.forEach(container => { + const name = container.getAttribute('name') || 'position'; + const recordSize = parseInt(container.getAttribute('data-size'), 10) || 1; + const data = new Float32Array(JSON.parse(container.textContent.trim())); + const buffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, buffer); + gl.bufferData( + gl.ARRAY_BUFFER, + data, + gl.STATIC_DRAW + ); + const attribLoc = gl.getAttribLocation(program, name); + this.buffers[name] = { buffer, data, attribLoc, recordSize }; + count = Math.max(count, (data.length / recordSize)|0); + gl.enableVertexAttribArray(attribLoc); + gl.bindBuffer(gl.ARRAY_BUFFER, buffer); + gl.vertexAttribPointer(attribLoc, recordSize, gl.FLOAT, false, 0, 0); + }); + this.count = count; + } + + loop(time = 0) { + const { gl, program } = this; + const uTime = gl.getUniformLocation(program, "time"); + gl.uniform1f(uTime, time); + gl.drawArrays(gl.TRIANGLES, 0, this.count); + this.frame = requestAnimationFrame(this.loop); + } + + createPrograms() { + const { gl } = this; + const fragScript = this.querySelector('[type=frag]'); + const vertScript = this.querySelector('[type=vert]'); + const HEADER = 'precision highp float;'; + const DEFAULT_VERT = HEADER + 'attribute vec4 position;void main(){gl_Position=position;}'; + const DEFAULT_FRAG = HEADER + 'void main(){gl_FragColor=vec4(1.,0,0,1.);}'; + + this.fragCode = fragScript?.textContent || DEFAULT_FRAG; + this.vertCode = vertScript?.textContent || DEFAULT_VERT; + + const program = gl.createProgram(); + this.program = program; + this.gl = gl; + + this.fragShader = this.createShader(gl.FRAGMENT_SHADER, this.fragCode); + this.vertShader = this.createShader(gl.VERTEX_SHADER, this.vertCode); + + gl.attachShader(program, this.fragShader); + gl.attachShader(program, this.vertShader); + gl.linkProgram(program); + if (!gl.getProgramParameter(program, gl.LINK_STATUS)) { + throw gl.getProgramInfoLog(program); + } + } + + setup() { + this.canvas = document.createElement('canvas'); + this.dpr = window.devicePixelRatio; + this.appendChild(this.canvas); + this.gl = this.canvas.getContext('webgl') || this.canvas.getContext('experimental-webgl'); + this.createPrograms(); + + const { program, gl } = this; + + gl.useProgram(program); + this.createBuffers(); + gl.clearColor(0, 0, 0, 1); + gl.clear(gl.COLOR_BUFFER_BIT); + this.onResize(); + window.addEventListener('resize', this.onResize, false); + this.frame = requestAnimationFrame(this.loop); + } + + dispose() { + cancelAnimationFrame(this.loop); + this.frame = -1; + window.removeEventListener('resize', this.onResize, false); + Object.entries(this.buffers).forEach(([name, buf]) => { + this.gl.deleteBuffer(buf.buffer); + }); + this.gl.deleteProgram(this.program); + const loseCtx = this.gl.getExtension('WEBGL_lose_context'); + if (loseCtx && typeof loseCtx.loseContext === 'function') { + loseCtx.loseContext(); + } + this.removeChild(this.canvas); + this.gl = null; + this.canvas = null; + this.buffers = {} + } +} + +DigitalArt.register(); \ No newline at end of file diff --git a/colorful-distance-field-shaderanydayshaders-13/dist/style.css b/colorful-distance-field-shaderanydayshaders-13/dist/style.css new file mode 100644 index 0000000..fa285ff --- /dev/null +++ b/colorful-distance-field-shaderanydayshaders-13/dist/style.css @@ -0,0 +1,15 @@ +body { margin: 0; } + +digital-art { + display: block; + width: 100vw; + height: 100vh; + pointer-events: none; +} + +digital-art canvas { + display: block; + width: 100%; + image-rendering: pixelated; + height: 100%; +} \ No newline at end of file diff --git a/colorful-distance-field-shaderanydayshaders-13/license.txt b/colorful-distance-field-shaderanydayshaders-13/license.txt new file mode 100644 index 0000000..8f63c21 --- /dev/null +++ b/colorful-distance-field-shaderanydayshaders-13/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Lea Rosema (https://codepen.io/terabaud/pen/bGeBzBL) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/colorful-distance-field-shaderanydayshaders-13/src/index.html b/colorful-distance-field-shaderanydayshaders-13/src/index.html new file mode 100644 index 0000000..0eb0443 --- /dev/null +++ b/colorful-distance-field-shaderanydayshaders-13/src/index.html @@ -0,0 +1,122 @@ + \ No newline at end of file diff --git a/colorful-distance-field-shaderanydayshaders-13/src/script.js b/colorful-distance-field-shaderanydayshaders-13/src/script.js new file mode 100644 index 0000000..209db7d --- /dev/null +++ b/colorful-distance-field-shaderanydayshaders-13/src/script.js @@ -0,0 +1,152 @@ +console.clear(); + +class DigitalArt extends HTMLElement { + + constructor() { + super(); + this.canvas = null; + this.gl = null; + this.onResize = this.onResize.bind(this); + this.loop = this.loop.bind(this); + } + + static register() { + customElements.define("digital-art", DigitalArt); + } + + connectedCallback() { + if (! this.gl) { + this.setup(); + } + } + + disconnectedCallback() { + this.dispose(); + } + + get devicePixelRatio() { + return parseFloat(this.getAttribute('dpr')) || window.devicePixelRatio; + } + + + onResize() { + const { canvas, gl, program } = this; + const width = this.clientWidth; + const height = this.clientHeight; + const dpr = this.devicePixelRatio; + canvas.width = width * dpr; + canvas.height = height * dpr; + gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + const uResolution = gl.getUniformLocation(program, "resolution"); + gl.uniform2fv(uResolution, [gl.drawingBufferWidth, gl.drawingBufferHeight]); + } + + createShader(type, code) { + const { gl } = this; + const sh = gl.createShader(type, code); + gl.shaderSource(sh, code); + gl.compileShader(sh); + if (!gl.getShaderParameter(sh, gl.COMPILE_STATUS)) { + throw gl.getShaderInfoLog(sh); + } + return sh; + } + + createBuffers() { + const { gl, program } = this; + const bufferScripts = [...this.querySelectorAll('[type=buffer]')]; + this.buffers = {}; + let count = -1; + bufferScripts.forEach(container => { + const name = container.getAttribute('name') || 'position'; + const recordSize = parseInt(container.getAttribute('data-size'), 10) || 1; + const data = new Float32Array(JSON.parse(container.textContent.trim())); + const buffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, buffer); + gl.bufferData( + gl.ARRAY_BUFFER, + data, + gl.STATIC_DRAW + ); + const attribLoc = gl.getAttribLocation(program, name); + this.buffers[name] = { buffer, data, attribLoc, recordSize }; + count = Math.max(count, (data.length / recordSize)|0); + gl.enableVertexAttribArray(attribLoc); + gl.bindBuffer(gl.ARRAY_BUFFER, buffer); + gl.vertexAttribPointer(attribLoc, recordSize, gl.FLOAT, false, 0, 0); + }); + this.count = count; + } + + loop(time = 0) { + const { gl, program } = this; + const uTime = gl.getUniformLocation(program, "time"); + gl.uniform1f(uTime, time); + gl.drawArrays(gl.TRIANGLES, 0, this.count); + this.frame = requestAnimationFrame(this.loop); + } + + createPrograms() { + const { gl } = this; + const fragScript = this.querySelector('[type=frag]'); + const vertScript = this.querySelector('[type=vert]'); + const HEADER = 'precision highp float;'; + const DEFAULT_VERT = HEADER + 'attribute vec4 position;void main(){gl_Position=position;}'; + const DEFAULT_FRAG = HEADER + 'void main(){gl_FragColor=vec4(1.,0,0,1.);}'; + + this.fragCode = fragScript?.textContent || DEFAULT_FRAG; + this.vertCode = vertScript?.textContent || DEFAULT_VERT; + + const program = gl.createProgram(); + this.program = program; + this.gl = gl; + + this.fragShader = this.createShader(gl.FRAGMENT_SHADER, this.fragCode); + this.vertShader = this.createShader(gl.VERTEX_SHADER, this.vertCode); + + gl.attachShader(program, this.fragShader); + gl.attachShader(program, this.vertShader); + gl.linkProgram(program); + if (!gl.getProgramParameter(program, gl.LINK_STATUS)) { + throw gl.getProgramInfoLog(program); + } + } + + setup() { + this.canvas = document.createElement('canvas'); + this.dpr = window.devicePixelRatio; + this.appendChild(this.canvas); + this.gl = this.canvas.getContext('webgl') || this.canvas.getContext('experimental-webgl'); + this.createPrograms(); + + const { program, gl } = this; + + gl.useProgram(program); + this.createBuffers(); + gl.clearColor(0, 0, 0, 1); + gl.clear(gl.COLOR_BUFFER_BIT); + this.onResize(); + window.addEventListener('resize', this.onResize, false); + this.frame = requestAnimationFrame(this.loop); + } + + dispose() { + cancelAnimationFrame(this.loop); + this.frame = -1; + window.removeEventListener('resize', this.onResize, false); + Object.entries(this.buffers).forEach(([name, buf]) => { + this.gl.deleteBuffer(buf.buffer); + }); + this.gl.deleteProgram(this.program); + const loseCtx = this.gl.getExtension('WEBGL_lose_context'); + if (loseCtx && typeof loseCtx.loseContext === 'function') { + loseCtx.loseContext(); + } + this.removeChild(this.canvas); + this.gl = null; + this.canvas = null; + this.buffers = {} + } +} + +DigitalArt.register(); diff --git a/colorful-distance-field-shaderanydayshaders-13/src/style.css b/colorful-distance-field-shaderanydayshaders-13/src/style.css new file mode 100644 index 0000000..fa285ff --- /dev/null +++ b/colorful-distance-field-shaderanydayshaders-13/src/style.css @@ -0,0 +1,15 @@ +body { margin: 0; } + +digital-art { + display: block; + width: 100vw; + height: 100vh; + pointer-events: none; +} + +digital-art canvas { + display: block; + width: 100%; + image-rendering: pixelated; + height: 100%; +} \ No newline at end of file diff --git a/colorpencilscss-doodle/README.markdown b/colorpencilscss-doodle/README.markdown new file mode 100644 index 0000000..874b02a --- /dev/null +++ b/colorpencilscss-doodle/README.markdown @@ -0,0 +1,4 @@ +# Colorpencils - CSS Doodle + _A Pen created at CodePen.io. Original URL: [https://codepen.io/aragakey/pen/pmWwbx](https://codepen.io/aragakey/pen/pmWwbx). + + \ No newline at end of file diff --git a/colorpencilscss-doodle/dist/index.html b/colorpencilscss-doodle/dist/index.html new file mode 100644 index 0000000..00d2dcf --- /dev/null +++ b/colorpencilscss-doodle/dist/index.html @@ -0,0 +1,266 @@ + + + + + Colorpencils - CSS Doodle + + + + + + +
    Colorpencils
    +
    + + + + + + + + + + + + + + :doodle { + @grid: 70x1 / 10vmin 80vmin; + overflow: hidden; + filter: url(#chalk); + } + :container { + transform: scale(1.1); + } + background-color: #EF524B; + transform-origin: 0 0; + transform: rotate(30deg) scaleX(@r(.6, 1)) scaleY(@r(.8, 1)); + border-radius: @r(100%); + ::after { + content: ""; + position: absolute; + z-index: 100; + top: 0; + left: @r(0, 50)%; + width: 100%; + height: 100%; + transform-origin: 0 0; + transform: translate(@r(-10%, 10%), @r(-10%, 10%)) scale(@r(.5)); + background-color: #f9f5ed; + opacity: @r(.6, .8); + } + + + :doodle { + @grid: 70x1 / 10vmin 80vmin; + overflow: hidden; + filter: url(#chalk); + } + :container { + transform: scale(1.1); + } + background-color: #539cd4; + transform-origin: 0 0; + transform: rotate(30deg) scaleX(@r(.6, 1)) scaleY(@r(.8, 1)); + border-radius: @r(100%); + ::after { + content: ""; + position: absolute; + z-index: 100; + top: 0; + left: @r(0, 50)%; + width: 100%; + height: 100%; + transform-origin: 0 0; + transform: translate(@r(-10%, 10%), @r(-10%, 10%)) scale(@r(.5)); + background-color: #f9f5ed; + opacity: @r(.6, .8); + } + + + :doodle { + @grid: 70x1 / 10vmin 80vmin; + overflow: hidden; + filter: url(#chalk); + } + :container { + transform: scale(1.1); + } + background-color: #f1ca56; + transform-origin: 0 0; + transform: rotate(30deg) scaleX(@r(.6, 1)) scaleY(@r(.8, 1)); + border-radius: @r(100%); + ::after { + content: ""; + position: absolute; + z-index: 100; + top: 0; + left: @r(0, 50)%; + width: 100%; + height: 100%; + transform-origin: 0 0; + transform: translate(@r(-10%, 10%), @r(-10%, 10%)) scale(@r(.5)); + background-color: #f9f5ed; + opacity: @r(.6, .8); + } + + + :doodle { + @grid: 70x1 / 10vmin 80vmin; + overflow: hidden; + filter: url(#chalk); + } + :container { + transform: scale(1.1); + } + background-color: #44ad64; + transform-origin: 0 0; + transform: rotate(30deg) scaleX(@r(.6, 1)) scaleY(@r(.8, 1)); + border-radius: @r(100%); + ::after { + content: ""; + position: absolute; + z-index: 100; + top: 0; + left: @r(0, 50)%; + width: 100%; + height: 100%; + transform-origin: 0 0; + transform: translate(@r(-10%, 10%), @r(-10%, 10%)) scale(@r(.5)); + background-color: #f9f5ed; + opacity: @r(.6, .8); + } + + + :doodle { + @grid: 70x1 / 10vmin 80vmin; + overflow: hidden; + filter: url(#chalk); + } + :container { + transform: scale(1.1); + } + background-color: #f17f84; + transform-origin: 0 0; + transform: rotate(30deg) scaleX(@r(.6, 1)) scaleY(@r(.8, 1)); + border-radius: @r(100%); + ::after { + content: ""; + position: absolute; + z-index: 100; + top: 0; + left: @r(0, 50)%; + width: 100%; + height: 100%; + transform-origin: 0 0; + transform: translate(@r(-10%, 10%), @r(-10%, 10%)) scale(@r(.5)); + background-color: #f9f5ed; + opacity: @r(.6, .8); + } + + + :doodle { + @grid: 160x1 / 10vmin 80vmin; + overflow: hidden; + filter: url(#chalk_2); + } + transform: translate(@r(-60%, 60%), @r(-100%, 100%)) rotate(@r(-100, 100)deg); + width: @r(300, 600)%; + height: @r(4000, 8000)%; + border-left: @r(3)px solid @p(rgba(230, 75, 77, @r(.6, 1)), rgba(212, 150, 53, @r(.6, 1))); + border-bottom: @r(3)px solid @p(rgba(230, 75, 77, @r(.6, 1)), rgba(212, 150, 53, @r(.6, 1))); + border-radius: @r(50, 100)%; + + + :doodle { + @grid: 40x1 / 10vmin 80vmin; + overflow: hidden; + filter: url(#chalk_2); + } + transform: translate(@r(-60%, 60%), @r(-100%, 100%)) rotate(@r(-100, 100)deg); + width: @r(300, 600)%; + height: @r(1000, 2000)%; + border-left: @r(3)px solid @p(rgba(230, 75, 77, @r(.6, 1)), rgba(112, 175, 202, @r(.6, 1))); + border-bottom: @r(3)px solid @p(rgba(230, 75, 77, @r(.6, 1)), rgba(112, 175, 202, @r(.6, 1))); + border-radius: @r(50, 100)%; + + + :doodle { + @grid: 1x1 / 10vmin 80vmin; + overflow: hidden; + filter: url(#chalk); + } + background-image: repeating-linear-gradient( + 45deg, + transparent @r(.45, .55)vmin, + #f7e63d @lr()vmin, + #f7e63d @r(.65, .75)vmin, + transparent @lr()vmin, + transparent 2.5vmin + ), repeating-linear-gradient( + -35deg, + transparent @r(.45, .55)vmin, + #70afca @lr()vmin, + #70afca @r(.65, .75)vmin, + transparent @lr()vmin, + transparent 2.5vmin + ); + + + :doodle { + @grid: 1x1 / 10vmin 80vmin; + overflow: hidden; + filter: url(#chalk); + } + background-image: repeating-linear-gradient( + 30deg, + transparent @r(.45, .55)vmin, + rgba(230, 75, 77, .8) @lr()vmin, + rgba(230, 75, 77, .8) @r(.75, .85)vmin, + transparent @lr()vmin, + transparent 3.5vmin + ), repeating-linear-gradient( + -30deg, + transparent @r(.55, .65)vmin, + #70afca @lr()vmin, + #70afca @r(.95, 1.05)vmin, + transparent @lr()vmin, + transparent 3.8vmin + ); + + + :doodle { + @grid: 90x1 / 10vmin 80vmin; + overflow: hidden; + filter: url(#chalk); + } + :container { + transform: scale(1.1); + } + background-color: hsla( + calc(330 - @i() * 1), 80%, 68%, @r(.99) + ); + transform-origin: 0 0; + transform: rotate(-30deg) scaleY(@r(.95, 1)); + border-radius: @r(100%); + ::after { + content: ""; + position: absolute; + z-index: 100; + top: 0; + left: @r(0, 50)%; + width: 100%; + height: 100%; + transform-origin: 0 0; + transform: translate(@r(-10%, 10%), @r(-10%, 10%)) scale(@r(.5)); + background-color: #f9f5ed; + opacity: @r(.6, .8); + } + +
    + + + + + + \ No newline at end of file diff --git a/colorpencilscss-doodle/dist/script.js b/colorpencilscss-doodle/dist/script.js new file mode 100644 index 0000000..1b354cc --- /dev/null +++ b/colorpencilscss-doodle/dist/script.js @@ -0,0 +1,6 @@ +document.addEventListener('click', function () { + document.querySelectorAll('css-doodle').forEach(function (o) {o.update();}); +}); +document.addEventListener('touchstart', function () { + document.querySelectorAll('css-doodle').forEach(function (o) {o.update();}); +}); \ No newline at end of file diff --git a/colorpencilscss-doodle/dist/style.css b/colorpencilscss-doodle/dist/style.css new file mode 100644 index 0000000..1fc86cf --- /dev/null +++ b/colorpencilscss-doodle/dist/style.css @@ -0,0 +1,33 @@ +html { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + background-color: #f9f5ed; +} + +.wrapper { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + margin: 0; + padding: 1.5vmin; + border: .2vmin solid transparent; + -o-border-image: linear-gradient(to right, #EF524B 0, #817EE6 100%) 1; + border-image: linear-gradient(to right, #EF524B 0, #817EE6 100%) 1; + -webkit-filter: url("#chalk_2"); + filter: url("#chalk_2"); +} + +.wrapper > *:not(:last-of-type) { + margin-right: 2vmin; +} + +.title { + margin-bottom: 1.5vmin; + padding-left: 1.5vmin; + font-family: 'Kaushan Script', cursive; + font-size: 4vmin; + color: rgba(0, 0, 0, 0.7); +} diff --git a/colorpencilscss-doodle/license.txt b/colorpencilscss-doodle/license.txt new file mode 100644 index 0000000..7a5b3c3 --- /dev/null +++ b/colorpencilscss-doodle/license.txt @@ -0,0 +1,13 @@ + + + + diff --git a/colorpencilscss-doodle/src/index.html b/colorpencilscss-doodle/src/index.html new file mode 100644 index 0000000..a9ae5e0 --- /dev/null +++ b/colorpencilscss-doodle/src/index.html @@ -0,0 +1,249 @@ +
    Colorpencils
    +
    + + + + + + + + + + + + + + :doodle { + @grid: 70x1 / 10vmin 80vmin; + overflow: hidden; + filter: url(#chalk); + } + :container { + transform: scale(1.1); + } + background-color: #EF524B; + transform-origin: 0 0; + transform: rotate(30deg) scaleX(@r(.6, 1)) scaleY(@r(.8, 1)); + border-radius: @r(100%); + ::after { + content: ""; + position: absolute; + z-index: 100; + top: 0; + left: @r(0, 50)%; + width: 100%; + height: 100%; + transform-origin: 0 0; + transform: translate(@r(-10%, 10%), @r(-10%, 10%)) scale(@r(.5)); + background-color: #f9f5ed; + opacity: @r(.6, .8); + } + + + :doodle { + @grid: 70x1 / 10vmin 80vmin; + overflow: hidden; + filter: url(#chalk); + } + :container { + transform: scale(1.1); + } + background-color: #539cd4; + transform-origin: 0 0; + transform: rotate(30deg) scaleX(@r(.6, 1)) scaleY(@r(.8, 1)); + border-radius: @r(100%); + ::after { + content: ""; + position: absolute; + z-index: 100; + top: 0; + left: @r(0, 50)%; + width: 100%; + height: 100%; + transform-origin: 0 0; + transform: translate(@r(-10%, 10%), @r(-10%, 10%)) scale(@r(.5)); + background-color: #f9f5ed; + opacity: @r(.6, .8); + } + + + :doodle { + @grid: 70x1 / 10vmin 80vmin; + overflow: hidden; + filter: url(#chalk); + } + :container { + transform: scale(1.1); + } + background-color: #f1ca56; + transform-origin: 0 0; + transform: rotate(30deg) scaleX(@r(.6, 1)) scaleY(@r(.8, 1)); + border-radius: @r(100%); + ::after { + content: ""; + position: absolute; + z-index: 100; + top: 0; + left: @r(0, 50)%; + width: 100%; + height: 100%; + transform-origin: 0 0; + transform: translate(@r(-10%, 10%), @r(-10%, 10%)) scale(@r(.5)); + background-color: #f9f5ed; + opacity: @r(.6, .8); + } + + + :doodle { + @grid: 70x1 / 10vmin 80vmin; + overflow: hidden; + filter: url(#chalk); + } + :container { + transform: scale(1.1); + } + background-color: #44ad64; + transform-origin: 0 0; + transform: rotate(30deg) scaleX(@r(.6, 1)) scaleY(@r(.8, 1)); + border-radius: @r(100%); + ::after { + content: ""; + position: absolute; + z-index: 100; + top: 0; + left: @r(0, 50)%; + width: 100%; + height: 100%; + transform-origin: 0 0; + transform: translate(@r(-10%, 10%), @r(-10%, 10%)) scale(@r(.5)); + background-color: #f9f5ed; + opacity: @r(.6, .8); + } + + + :doodle { + @grid: 70x1 / 10vmin 80vmin; + overflow: hidden; + filter: url(#chalk); + } + :container { + transform: scale(1.1); + } + background-color: #f17f84; + transform-origin: 0 0; + transform: rotate(30deg) scaleX(@r(.6, 1)) scaleY(@r(.8, 1)); + border-radius: @r(100%); + ::after { + content: ""; + position: absolute; + z-index: 100; + top: 0; + left: @r(0, 50)%; + width: 100%; + height: 100%; + transform-origin: 0 0; + transform: translate(@r(-10%, 10%), @r(-10%, 10%)) scale(@r(.5)); + background-color: #f9f5ed; + opacity: @r(.6, .8); + } + + + :doodle { + @grid: 160x1 / 10vmin 80vmin; + overflow: hidden; + filter: url(#chalk_2); + } + transform: translate(@r(-60%, 60%), @r(-100%, 100%)) rotate(@r(-100, 100)deg); + width: @r(300, 600)%; + height: @r(4000, 8000)%; + border-left: @r(3)px solid @p(rgba(230, 75, 77, @r(.6, 1)), rgba(212, 150, 53, @r(.6, 1))); + border-bottom: @r(3)px solid @p(rgba(230, 75, 77, @r(.6, 1)), rgba(212, 150, 53, @r(.6, 1))); + border-radius: @r(50, 100)%; + + + :doodle { + @grid: 40x1 / 10vmin 80vmin; + overflow: hidden; + filter: url(#chalk_2); + } + transform: translate(@r(-60%, 60%), @r(-100%, 100%)) rotate(@r(-100, 100)deg); + width: @r(300, 600)%; + height: @r(1000, 2000)%; + border-left: @r(3)px solid @p(rgba(230, 75, 77, @r(.6, 1)), rgba(112, 175, 202, @r(.6, 1))); + border-bottom: @r(3)px solid @p(rgba(230, 75, 77, @r(.6, 1)), rgba(112, 175, 202, @r(.6, 1))); + border-radius: @r(50, 100)%; + + + :doodle { + @grid: 1x1 / 10vmin 80vmin; + overflow: hidden; + filter: url(#chalk); + } + background-image: repeating-linear-gradient( + 45deg, + transparent @r(.45, .55)vmin, + #f7e63d @lr()vmin, + #f7e63d @r(.65, .75)vmin, + transparent @lr()vmin, + transparent 2.5vmin + ), repeating-linear-gradient( + -35deg, + transparent @r(.45, .55)vmin, + #70afca @lr()vmin, + #70afca @r(.65, .75)vmin, + transparent @lr()vmin, + transparent 2.5vmin + ); + + + :doodle { + @grid: 1x1 / 10vmin 80vmin; + overflow: hidden; + filter: url(#chalk); + } + background-image: repeating-linear-gradient( + 30deg, + transparent @r(.45, .55)vmin, + rgba(230, 75, 77, .8) @lr()vmin, + rgba(230, 75, 77, .8) @r(.75, .85)vmin, + transparent @lr()vmin, + transparent 3.5vmin + ), repeating-linear-gradient( + -30deg, + transparent @r(.55, .65)vmin, + #70afca @lr()vmin, + #70afca @r(.95, 1.05)vmin, + transparent @lr()vmin, + transparent 3.8vmin + ); + + + :doodle { + @grid: 90x1 / 10vmin 80vmin; + overflow: hidden; + filter: url(#chalk); + } + :container { + transform: scale(1.1); + } + background-color: hsla( + calc(330 - @i() * 1), 80%, 68%, @r(.99) + ); + transform-origin: 0 0; + transform: rotate(-30deg) scaleY(@r(.95, 1)); + border-radius: @r(100%); + ::after { + content: ""; + position: absolute; + z-index: 100; + top: 0; + left: @r(0, 50)%; + width: 100%; + height: 100%; + transform-origin: 0 0; + transform: translate(@r(-10%, 10%), @r(-10%, 10%)) scale(@r(.5)); + background-color: #f9f5ed; + opacity: @r(.6, .8); + } + +
    \ No newline at end of file diff --git a/colorpencilscss-doodle/src/script.babel b/colorpencilscss-doodle/src/script.babel new file mode 100644 index 0000000..1252222 --- /dev/null +++ b/colorpencilscss-doodle/src/script.babel @@ -0,0 +1,6 @@ +document.addEventListener('click', function() { + document.querySelectorAll('css-doodle').forEach(function(o){ o.update() }) +}) +document.addEventListener('touchstart', function() { + document.querySelectorAll('css-doodle').forEach(function(o){ o.update() }) +}) \ No newline at end of file diff --git a/colorpencilscss-doodle/src/style.scss b/colorpencilscss-doodle/src/style.scss new file mode 100644 index 0000000..2eb3bfc --- /dev/null +++ b/colorpencilscss-doodle/src/style.scss @@ -0,0 +1,28 @@ +html { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + background-color: #f9f5ed; +} +.wrapper { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + margin: 0; + padding: 1.5vmin; + border: .2vmin solid transparent; + border-image: linear-gradient(to right, #EF524B 0, #817EE6 100%) 1; + filter: url("#chalk_2"); +} +.wrapper > *:not(:last-of-type) { + margin-right: 2vmin; +} +.title { + margin-bottom: 1.5vmin; + padding-left: 1.5vmin; + font-family: 'Kaushan Script', cursive; + font-size: 4vmin; + color: rgba(0, 0, 0, .7); +} \ No newline at end of file diff --git a/commodore-logo-original-design-sketch-reproduction/README.markdown b/commodore-logo-original-design-sketch-reproduction/README.markdown new file mode 100644 index 0000000..e08b67b --- /dev/null +++ b/commodore-logo-original-design-sketch-reproduction/README.markdown @@ -0,0 +1,4 @@ +# Commodore Logo Original design sketch reproduction + _A Pen created at CodePen.io. Original URL: [https://codepen.io/2pxsolidblack/pen/RqBmej](https://codepen.io/2pxsolidblack/pen/RqBmej). + + \ No newline at end of file diff --git a/commodore-logo-original-design-sketch-reproduction/dist/index.html b/commodore-logo-original-design-sketch-reproduction/dist/index.html new file mode 100644 index 0000000..df7a6b8 --- /dev/null +++ b/commodore-logo-original-design-sketch-reproduction/dist/index.html @@ -0,0 +1,63 @@ + + + + + Commodore Logo Original design sketch reproduction + + + + + +
    +
    +

    DESIGNER
    Chris Yaneff

    +

    CONTRACTOR
    Commodore

    +

    DATE
    1965

    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + +
    +

    REFERENCE

    +
    +

    B = 0.034 x A

    +

    C = 0.166 x A

    +

    D = 0.30 x A

    +
    +
    +

    E = 0.364 x A

    +

    F = 0.52 x A

    +

    G = 0.53 x A

    +
    +
    +

    H = 0.636 x A

    +

    I = 0.97 x A

    +

    J = 90 °

    +
    +
    + +
    +
    +
    + + + + + \ No newline at end of file diff --git a/commodore-logo-original-design-sketch-reproduction/dist/style.css b/commodore-logo-original-design-sketch-reproduction/dist/style.css new file mode 100644 index 0000000..a3018ce --- /dev/null +++ b/commodore-logo-original-design-sketch-reproduction/dist/style.css @@ -0,0 +1,834 @@ +@import url("https://fonts.googleapis.com/css?family=Roboto:400,400i,700"); +body, html { + width: 100%; + height: 100%; + background-color: #e7e7e7; + color: #303030; + position: relative; + display: flex; + justify-content: center; + align-items: center; + font-family: "Roboto", sans-serif; + font-weight: 600; +} + +.main { + max-height: 656px; + max-width: 656px; + border: 2px solid #303030; + box-sizing: border-box; + flex: 0 0 80vw; + height: 80vw; + position: relative; + background-color: #e7e7e7; +} + +.logoBigContainer { + width: 55.2%; + height: 54%; + top: 22%; + right: auto; + bottom: auto; + left: 22%; + position: absolute; + border: 2px solid #303030; + overflow: hidden; +} +.logoBigContainer:before, .logoBigContainer:after { + content: ""; + position: absolute; + width: 100%; + height: 16.6%; + top: 30.6%; + right: auto; + bottom: auto; + left: 0; + position: absolute; + border-style: solid; + border-color: #303030; + border-width: 2px 0 2px 0; + z-index: 9; +} +.logoBigContainer:after { + top: 51.5%; + right: auto; + bottom: auto; + left: 0; + position: absolute; +} +.logoBigContainer > .below { + font-size: 5em; +} +.logoBigContainer > .below:before { + content: ""; + position: absolute; + width: 98%; + height: 99.5%; + top: -1px; + right: auto; + bottom: auto; + left: -1px; + position: absolute; + border-radius: 100%; + border: 2px solid #303030; + box-shadow: inset 0 0 0 0.98em #e7e7e7, inset 0 0 0 calc(.98em + 2px) #303030, inset 0 0 0 2px #303030; + background-color: #e7e7e7; +} +.logoBigContainer > .above { + width: 63.5%; + height: 100%; + top: 0; + right: auto; + bottom: auto; + left: 0; + position: absolute; + border-right: 2px solid #303030; + overflow: hidden; + z-index: 5; + font-size: 5em; +} +.logoBigContainer > .above:before { + content: ""; + position: absolute; + width: 154%; + height: 99.5%; + top: -1px; + right: auto; + bottom: auto; + left: -1px; + position: absolute; + border-radius: 100%; + border: 2px solid transparent; + box-shadow: inset 0 0 0 0.98em rgba(231, 231, 231, 0.5), inset 0 0 0 calc(.98em + 2px) #303030, inset 0 0 0 2px #303030; +} +.logoBigContainer > .lips { + width: 36%; + height: 38%; + top: 31%; + right: auto; + bottom: auto; + left: 64%; + position: absolute; + z-index: 0; + overflow: hidden; +} +.logoBigContainer > .lips:before, .logoBigContainer > .lips:after { + content: ""; + position: absolute; + width: 100%; + height: 50%; + top: auto; + right: auto; + bottom: 55%; + left: -20%; + position: absolute; + background-color: rgba(48, 48, 48, 0.45); + -webkit-transform: skewX(-45deg); + transform: skewX(-45deg); +} +.logoBigContainer > .lips:after { + top: auto; + right: auto; + bottom: -5%; + left: -20%; + position: absolute; + -webkit-transform: skewX(45deg); + transform: skewX(45deg); +} +.logoBigContainer > .diagonal { + width: 10%; + height: 10%; + top: 39.5%; + right: auto; + bottom: auto; + left: 81%; + position: absolute; + background-color: transparent; + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + border-style: solid; + border-color: #303030; + border-width: 2px 2px 0 0; + border-top-right-radius: 100%; + z-index: 99; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); +} +.logoBigContainer > .diagonal:before, .logoBigContainer > .diagonal:after { + content: ""; + position: absolute; + top: -800px; + right: auto; + bottom: auto; + left: 0; + position: absolute; + width: 2px; + height: 1600px; + background-color: #303030; +} +.logoBigContainer > .diagonal:after { + top: auto; + right: auto; + bottom: 0; + left: -800px; + position: absolute; + width: 1600px; + height: 2px; +} + +.info { + width: 100%; + height: 58px; + display: table; + font-size: 12px; + letter-spacing: .5px; + border-bottom: 2px solid #303030; +} +.info > * + * { + border-left: 2px solid #636363; +} +.info > * { + display: table-cell; + vertical-align: middle; + padding-left: 22px; + line-height: 1.8; +} +.info > *:first-child { + width: 41%; +} +.info > *:nth-child(2) { + width: 40%; +} +.info > *:last-child { + width: 19%; + padding-left: 8%; +} + +.reference { + top: auto; + right: auto; + bottom: 2%; + left: 5%; + position: absolute; + display: table; + position: absolute; + font-size: 13px; +} +.reference__title { + display: table-row; + letter-spacing: .5px; + font-size: 12px; + height: 22px; +} +.reference__col { + display: table-cell; + line-height: 1.6; + padding-right: 15px; +} + +i { + position: absolute; + background-color: #303030; + border: 0; + margin: 0; + padding: 0; + content: 'C'; +} + +.j { + top: auto; + right: auto; + bottom: 0; + left: 0; + position: absolute; + width: 42%; + height: 43%; + background-color: transparent; + border-style: solid; + border-color: #303030; + border-width: 2px 2px 0 0; +} +.j:before { + top: -40%; + right: auto; + bottom: auto; + left: -80%; + position: absolute; + content: 'J'; + font-size: 12px; + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); +} + +.hlE { + top: 15%; + right: auto; + bottom: auto; + left: 58%; + position: absolute; + width: 20%; + height: 2px; +} +.hlE:before, .hlE:after { + content: ""; + position: absolute; + width: 2px; + height: 8px; + background-color: #303030; +} +.hlE:before { + top: -3px; + right: auto; + bottom: auto; + left: -2px; + position: absolute; +} +.hlE:after { + top: -3px; + right: -2px; + bottom: auto; + left: auto; + position: absolute; +} +.hlE > span:before { + content: "E"; + font-size: 12px; + left: 50%; + position: absolute; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + top: -15px; +} + +.hlG { + top: 18%; + right: auto; + bottom: auto; + left: 35%; + position: absolute; + width: 29%; + height: 2px; +} +.hlG:before, .hlG:after { + content: ""; + position: absolute; + width: 2px; + height: 8px; + background-color: #303030; +} +.hlG:before { + top: -3px; + right: auto; + bottom: auto; + left: -2px; + position: absolute; +} +.hlG:after { + top: -3px; + right: -2px; + bottom: auto; + left: auto; + position: absolute; +} +.hlG > span:before { + content: "G"; + font-size: 12px; + left: 50%; + position: absolute; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + top: -15px; +} + +.hl10 { + top: 79.5%; + right: auto; + bottom: auto; + left: 22.5%; + position: absolute; + width: 56%; + height: 2px; +} +.hl10:before, .hl10:after { + content: ""; + position: absolute; + width: 2px; + height: 8px; + background-color: #303030; +} +.hl10:before { + top: -3px; + right: auto; + bottom: auto; + left: -2px; + position: absolute; +} +.hl10:after { + top: -3px; + right: -2px; + bottom: auto; + left: auto; + position: absolute; +} +.hl10 > span:before { + content: "10"; + font-size: 12px; + left: 50%; + position: absolute; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + top: 5px; +} + +.hlH { + top: 83%; + right: auto; + bottom: auto; + left: 22.5%; + position: absolute; + width: 35%; + height: 2px; +} +.hlH:before, .hlH:after { + content: ""; + position: absolute; + width: 2px; + height: 8px; + background-color: #303030; +} +.hlH:before { + top: -3px; + right: auto; + bottom: auto; + left: -2px; + position: absolute; +} +.hlH:after { + top: -3px; + right: -2px; + bottom: auto; + left: auto; + position: absolute; +} +.hlH > span:before { + content: "H"; + font-size: 12px; + left: 50%; + position: absolute; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + top: 5px; +} + +.vlC1 { + top: 39%; + right: auto; + bottom: auto; + left: 13.5%; + position: absolute; + width: 9%; + height: 2px; + -webkit-transform-origin: left center; + transform-origin: left center; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); +} +.vlC1:before, .vlC1:after { + content: ""; + position: absolute; + width: 2px; + height: 8px; + background-color: #303030; +} +.vlC1:before { + top: -3px; + right: auto; + bottom: auto; + left: -2px; + position: absolute; +} +.vlC1:after { + top: -3px; + right: -2px; + bottom: auto; + left: auto; + position: absolute; +} +.vlC1 > span:before { + content: "C"; + font-size: 12px; + left: 50%; + position: absolute; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + top: 5px; +} +.vlC1 > span:before { + -webkit-transform: rotate(-90deg) translateY(-33%); + transform: rotate(-90deg) translateY(-33%); +} + +.vlC2 { + top: 50.5%; + right: auto; + bottom: auto; + left: 13.5%; + position: absolute; + width: 9%; + height: 2px; + -webkit-transform-origin: left center; + transform-origin: left center; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); +} +.vlC2:before, .vlC2:after { + content: ""; + position: absolute; + width: 2px; + height: 8px; + background-color: #303030; +} +.vlC2:before { + top: -3px; + right: auto; + bottom: auto; + left: -2px; + position: absolute; +} +.vlC2:after { + top: -3px; + right: -2px; + bottom: auto; + left: auto; + position: absolute; +} +.vlC2 > span:before { + content: "C"; + font-size: 12px; + left: 50%; + position: absolute; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + top: 5px; +} +.vlC2 > span:before { + -webkit-transform: rotate(-90deg) translateY(-33%); + transform: rotate(-90deg) translateY(-33%); +} + +.vlD1 { + top: 22.5%; + right: auto; + bottom: auto; + left: 81%; + position: absolute; + width: 16.5%; + height: 2px; + -webkit-transform-origin: left center; + transform-origin: left center; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); +} +.vlD1:before, .vlD1:after { + content: ""; + position: absolute; + width: 2px; + height: 8px; + background-color: #303030; +} +.vlD1:before { + top: -3px; + right: auto; + bottom: auto; + left: -2px; + position: absolute; +} +.vlD1:after { + top: -3px; + right: -2px; + bottom: auto; + left: auto; + position: absolute; +} +.vlD1 > span:before { + content: "D"; + font-size: 12px; + left: 50%; + position: absolute; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + top: -15px; +} +.vlD1 > span:before { + -webkit-transform: rotate(-90deg) translateY(-33%); + transform: rotate(-90deg) translateY(-33%); +} + +.vlD2 { + top: 59.5%; + right: auto; + bottom: auto; + left: 81%; + position: absolute; + width: 16.5%; + height: 2px; + -webkit-transform-origin: left center; + transform-origin: left center; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); +} +.vlD2:before, .vlD2:after { + content: ""; + position: absolute; + width: 2px; + height: 8px; + background-color: #303030; +} +.vlD2:before { + top: -3px; + right: auto; + bottom: auto; + left: -2px; + position: absolute; +} +.vlD2:after { + top: -3px; + right: -2px; + bottom: auto; + left: auto; + position: absolute; +} +.vlD2 > span:before { + content: "D"; + font-size: 12px; + left: 50%; + position: absolute; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + top: -15px; +} +.vlD2 > span:before { + -webkit-transform: rotate(-90deg) translateY(-33%); + transform: rotate(-90deg) translateY(-33%); +} + +.vlB { + top: 48.5%; + right: auto; + bottom: auto; + left: 81%; + position: absolute; + width: 1.5%; + height: 2px; + -webkit-transform-origin: left center; + transform-origin: left center; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); +} +.vlB:before, .vlB:after { + content: ""; + position: absolute; + width: 2px; + height: 8px; + background-color: #303030; +} +.vlB:before { + top: -3px; + right: auto; + bottom: auto; + left: -2px; + position: absolute; +} +.vlB:after { + top: -3px; + right: -2px; + bottom: auto; + left: auto; + position: absolute; +} +.vlB > span:before { + content: "B"; + font-size: 12px; + left: 50%; + position: absolute; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + top: -15px; +} +.vlB > span:before { + -webkit-transform: rotate(-90deg) translateY(-33%); + transform: rotate(-90deg) translateY(-33%); +} + +.vlF { + top: 35%; + right: auto; + bottom: auto; + left: 86.5%; + position: absolute; + width: 28.5%; + height: 2px; + -webkit-transform-origin: left center; + transform-origin: left center; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); +} +.vlF:before, .vlF:after { + content: ""; + position: absolute; + width: 2px; + height: 8px; + background-color: #303030; +} +.vlF:before { + top: -3px; + right: auto; + bottom: auto; + left: -2px; + position: absolute; +} +.vlF:after { + top: -3px; + right: -2px; + bottom: auto; + left: auto; + position: absolute; +} +.vlF > span:before { + content: "F"; + font-size: 12px; + left: 50%; + position: absolute; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + top: -15px; +} +.vlF > span:before { + -webkit-transform: rotate(-90deg) translateY(-33%); + transform: rotate(-90deg) translateY(-33%); +} + +.vlI { + top: 22.5%; + right: auto; + bottom: auto; + left: 18.5%; + position: absolute; + width: 53.5%; + height: 2px; + -webkit-transform-origin: left center; + transform-origin: left center; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); +} +.vlI:before, .vlI:after { + content: ""; + position: absolute; + width: 2px; + height: 8px; + background-color: #303030; +} +.vlI:before { + top: -3px; + right: auto; + bottom: auto; + left: -2px; + position: absolute; +} +.vlI:after { + top: -3px; + right: -2px; + bottom: auto; + left: auto; + position: absolute; +} +.vlI > span:before { + content: "I"; + font-size: 12px; + left: 50%; + position: absolute; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + top: 5px; +} +.vlI > span:before { + -webkit-transform: rotate(-90deg) translateY(-33%); + transform: rotate(-90deg) translateY(-33%); +} + +.logoSmall { + top: auto; + right: 0; + bottom: 0; + left: auto; + position: absolute; + width: 22%; + height: 22%; + border-style: solid; + border-width: 2px 0 0 2px; + border-color: #303030; + background: #e7e7e7; + font-size: 1em; +} +.logoSmall:before { + content: ""; + position: absolute; + width: 61%; + height: 61%; + top: 19%; + right: auto; + bottom: auto; + left: 18%; + position: absolute; + border-radius: 100%; + box-shadow: inset 0 0 0 1.2em #303030; +} +.logoSmall:after { + content: ""; + position: absolute; + width: 42%; + height: 100%; + top: 0; + right: 0; + bottom: auto; + left: auto; + position: absolute; + background-color: #e7e7e7; +} +.logoSmall > .lips { + width: 25%; + height: 24%; + top: 37%; + right: auto; + bottom: auto; + left: 58%; + position: absolute; + z-index: 0; + overflow: hidden; + z-index: 999; +} +.logoSmall > .lips:before, .logoSmall > .lips:after { + content: ""; + position: absolute; + width: 100%; + height: 50%; + top: auto; + right: auto; + bottom: 55%; + left: -20%; + position: absolute; + background-color: #303030; + -webkit-transform: skewX(-45deg); + transform: skewX(-45deg); +} +.logoSmall > .lips:after { + top: auto; + right: auto; + bottom: -5%; + left: -20%; + position: absolute; + -webkit-transform: skewX(45deg); + transform: skewX(45deg); +} diff --git a/commodore-logo-original-design-sketch-reproduction/license.txt b/commodore-logo-original-design-sketch-reproduction/license.txt new file mode 100644 index 0000000..e8b0698 --- /dev/null +++ b/commodore-logo-original-design-sketch-reproduction/license.txt @@ -0,0 +1,13 @@ + + + + diff --git a/commodore-logo-original-design-sketch-reproduction/src/index.html b/commodore-logo-original-design-sketch-reproduction/src/index.html new file mode 100644 index 0000000..c1d451a --- /dev/null +++ b/commodore-logo-original-design-sketch-reproduction/src/index.html @@ -0,0 +1,49 @@ +
    +
    +

    DESIGNER
    Chris Yaneff

    +

    CONTRACTOR
    Commodore

    +

    DATE
    1965

    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + +
    +

    REFERENCE

    +
    +

    B = 0.034 x A

    +

    C = 0.166 x A

    +

    D = 0.30 x A

    +
    +
    +

    E = 0.364 x A

    +

    F = 0.52 x A

    +

    G = 0.53 x A

    +
    +
    +

    H = 0.636 x A

    +

    I = 0.97 x A

    +

    J = 90 °

    +
    +
    + +
    +
    +
    + \ No newline at end of file diff --git a/commodore-logo-original-design-sketch-reproduction/src/style.scss b/commodore-logo-original-design-sketch-reproduction/src/style.scss new file mode 100644 index 0000000..6ebed4d --- /dev/null +++ b/commodore-logo-original-design-sketch-reproduction/src/style.scss @@ -0,0 +1,335 @@ +@import url("https://fonts.googleapis.com/css?family=Roboto:400,400i,700"); + +$sand: #e7e7e7; +$mine: #303030; + +$b: 2px solid $mine; + +@mixin limitTo($value) { + max-height: $value; + max-width: $value; +} + +@mixin colorize($bg: transparent, $fg: transparent) { + background-color: $bg; + color: $fg; +} + +@mixin size($w, $h) { + width: $w; + height: $h; +} + +@mixin pos($t: auto, $r: auto, $b: auto, $l: auto) { + top: $t; + right: $r; + bottom: $b; + left: $l; + position: absolute; +} + +@mixin circle($w, $h, $top, $left) { + @include size($w, $h); + @include pos($t: $top, $l: $left); + border-radius: 100%; +} + +@mixin show-pseudo { + content: ""; + position: absolute; +} + +@mixin line($x, $y, $l, $label, $labelPos, $dir: 'horizontal') { + @include pos($t: $y, $l: $x); + @include size($l, 2px); + + &:before, + &:after { + @include show-pseudo; + @include size(2px, 8px); + background-color: $mine; + } + + &:before { + @include pos($t: -3px, $l: -2px); + } + + &:after { + @include pos($t: -3px, $r: -2px); + } + + > span:before { + content: $label; + font-size: 12px; + left: 50%; + position: absolute; + transform: translateX(-50%); + + @if $labelPos == 'above' { + top: -15px; + } @elseif $labelPos == 'below' { + top: 5px; + } + } + + @if $dir == 'vertical' { + transform-origin: left center; + transform: rotate(90deg); + + > span:before { + transform: rotate(-90deg) translateY(-33%); + } + } +} + +body, html { + @include size(100%, 100%); + @include colorize($sand, $mine); + position: relative; + display: flex; + justify-content: center; + align-items: center; + font-family: "Roboto", sans-serif; + font-weight: 600; +} + +.main { + @include limitTo(656px); + border: $b; + box-sizing: border-box; + flex: 0 0 80vw; + height: 80vw; + position: relative; + background-color: $sand; +} + +.logoBigContainer { + @include size(55.2%, 54%); + @include pos($t: 22%, $l: 22%); + border: $b; + overflow: hidden; + + &:before, + &:after { + @include show-pseudo; + @include size(100%, 16.6%); + @include pos($t: 30.6%, $l: 0); + border-style: solid; + border-color: $mine; + border-width: 2px 0 2px 0; + z-index: 9; + } + + &:after { + @include pos($t: 51.5%, $l: 0); + } + + > .below { + font-size: 5em; + + &:before { + @include show-pseudo; + @include circle(98%, 99.5%, -1px, -1px); + border: $b; + box-shadow: inset 0 0 0 .98em $sand, inset 0 0 0 calc(.98em + 2px) $mine, inset 0 0 0 2px $mine; + background-color: $sand; + } + } + + > .above { + @include size(63.5%, 100%); + @include pos($t: 0, $l: 0); + border-right: 2px solid $mine; + overflow: hidden; + z-index: 5; + font-size: 5em; + + &:before { + @include show-pseudo; + @include circle(56% + 98%, 99.5%, -1px, -1px); + border: 2px solid transparent; + box-shadow: inset 0 0 0 .98em rgba($sand, .5), inset 0 0 0 calc(.98em + 2px) $mine, inset 0 0 0 2px $mine; + } + } + + > .lips { + @include size(36%, 38%); + @include pos($t: 31%, $l: 64%); + z-index: 0; + overflow: hidden; + + &:before, + &:after { + @include show-pseudo; + @include size(100%, 50%); + @include pos($b: 55%, $l: -20%); + background-color: rgba($mine, .45); + transform: skewX(-45deg) + } + + &:after { + @include pos($b: -5%, $l: -20%); + transform: skewX(45deg) + } + } + + > .diagonal { + @include size(10%, 10%); + @include pos($t: 39.5%, $l: 81%); + background-color: transparent; + transform-origin: left bottom; + border-style: solid; + border-color: $mine; + border-width: 2px 2px 0 0; + border-top-right-radius: 100%; + z-index: 99; + transform: rotate(45deg); + + &:before, + &:after { + @include show-pseudo; + @include pos($t: -800px, $l: 0); + @include size(2px, 1600px); + background-color: $mine; + } + + &:after { + @include pos($b: 0, $l: -800px); + @include size(1600px, 2px); + } + } +} + +.info { + @include size(100%, 58px); + display: table; + font-size: 12px; + letter-spacing: .5px; + border-bottom: 2px solid $mine; + + > * + * { + border-left: 2px solid lighten($mine, 20); + } + + > * { + display: table-cell; + vertical-align: middle; + padding-left: 22px; + line-height: 1.8; + } + + > *:first-child { + width: 41%; + } + + > *:nth-child(2) { + width: 40%; + } + + > *:last-child { + width: 19%; + padding-left: 8%; + } +} + +.reference { + @include pos($b: 2%, $l: 5%); + display: table; + position: absolute; + font-size: 13px; + + &__title { + display: table-row; + letter-spacing: .5px; + font-size: 12px; + height: 22px; + } + + &__col { + display: table-cell; + line-height: 1.6; + padding-right: 15px; + } +} + +i { + position: absolute; + background-color: $mine; + border: 0; + margin: 0; + padding: 0; + content: 'C'; +} + +.j { + @include pos($b: 0, $l: 0); + @include size(42%, 43%); + background-color: transparent; + border-style: solid; + border-color: $mine; + border-width: 2px 2px 0 0; + + &:before { + @include pos($t: -40%, $l: -80%); + content: 'J'; + font-size: 12px; + transform-origin: left bottom; + transform: rotate(-45deg); + } +} +.hlE { @include line(58%, 15%, 20%, 'E', 'above'); } +.hlG { @include line(35%, 18%, 29%, 'G', 'above'); } +.hl10 { @include line(22.5%, 79.5%, 56%, '10', 'below'); } +.hlH { @include line(22.5%, 83%, 35%, 'H', 'below'); } +.vlC1 { @include line(13.5%, 39%, 9%, 'C', 'below', 'vertical'); } +.vlC2 { @include line(13.5%, 50.5%, 9%, 'C', 'below', 'vertical'); } +.vlD1 { @include line(81%, 22.5%, 16.5%, 'D', 'above', 'vertical'); } +.vlD2 { @include line(81%, 59.5%, 16.5%, 'D', 'above', 'vertical'); } +.vlB { @include line(81%, 48.5%, 1.5%, 'B', 'above', 'vertical'); } +.vlF { @include line(86.5%, 35%, 28.5%, 'F', 'above', 'vertical'); } +.vlI { @include line(18.5%, 22.5%, 53.5%, 'I', 'below', 'vertical'); } + +.logoSmall { + @include pos($b: 0, $r: 0); + @include size(22%, 22%); + border-style: solid; + border-width: 2px 0 0 2px; + border-color: $mine; + background: $sand; + font-size: 1em; + + &:before { + @include show-pseudo; + @include circle(61%, 61%, 19%, 18%); + box-shadow: inset 0 0 0 1.2em $mine; + } + + &:after { + @include show-pseudo; + @include size(42%, 100%); + @include pos($t: 0, $r: 0); + background-color: $sand; + } + + > .lips { + @include size(25%, 24%); + @include pos($t: 37%, $l: 58%); + z-index: 0; + overflow: hidden; + z-index: 999; + + &:before, + &:after { + @include show-pseudo; + @include size(100%, 50%); + @include pos($b: 55%, $l: -20%); + background-color: $mine; + transform: skewX(-45deg) + } + + &:after { + @include pos($b: -5%, $l: -20%); + transform: skewX(45deg) + } + } +} \ No newline at end of file diff --git a/confetti-button/README.markdown b/confetti-button/README.markdown new file mode 100644 index 0000000..942de94 --- /dev/null +++ b/confetti-button/README.markdown @@ -0,0 +1,5 @@ +# Confetti Button + +A Pen created on CodePen.io. Original URL: [https://codepen.io/marcobiedermann/pen/ExvvyLQ](https://codepen.io/marcobiedermann/pen/ExvvyLQ). + +Like button shooting confetti using React and confetti-canvas diff --git a/confetti-button/dist/index.html b/confetti-button/dist/index.html new file mode 100644 index 0000000..65125cf --- /dev/null +++ b/confetti-button/dist/index.html @@ -0,0 +1,18 @@ + + + + + CodePen - Confetti Button + + + + + + + +
    + + + + + diff --git a/confetti-button/dist/script.js b/confetti-button/dist/script.js new file mode 100644 index 0000000..c3eb7d6 --- /dev/null +++ b/confetti-button/dist/script.js @@ -0,0 +1,23 @@ +import React, { useCallback } from "https://cdn.skypack.dev/react"; +import { render } from "https://cdn.skypack.dev/react-dom"; +import confetti from "https://cdn.skypack.dev/canvas-confetti"; + +function App() { + const onClick = useCallback(() => { + confetti({ + particleCount: 150, + spread: 60 }); + + }, []); + + return /*#__PURE__*/( + React.createElement(React.Fragment, null, /*#__PURE__*/ + React.createElement("button", { className: "button", onClick: onClick }, /*#__PURE__*/ + React.createElement("span", null, "\uD83C\uDF89"), /*#__PURE__*/ + React.createElement("span", null, "Like")))); + + + +} + +render( /*#__PURE__*/React.createElement(App, null), document.getElementById("root")); \ No newline at end of file diff --git a/confetti-button/dist/style.css b/confetti-button/dist/style.css new file mode 100644 index 0000000..4803d54 --- /dev/null +++ b/confetti-button/dist/style.css @@ -0,0 +1,44 @@ +* { + box-sizing: border-box; +} + +body { + background-color: #f5f8ff; + font-family: 'Roboto', sans-serif; + line-height: 1.5; + min-block-size: 100vh; + display: grid; + place-items: center; +} + +button { + cursor: pointer; + font: inherit; + margin: 0; + padding: 0; +} + +.button { + background-color: #404663; + color: #fff; + border: 0; + font-size: 2rem; + font-weight: 400; + padding: 0.5em 1.25em; + border-radius: 0.5em; + z-index: 999; + position: relative; + display: flex; + gap: 0.5em; + box-shadow: + 0px 1.7px 2.2px rgba(0, 0, 0, 0.02), + 0px 4px 5.3px rgba(0, 0, 0, 0.028), + 0px 7.5px 10px rgba(0, 0, 0, 0.035), + 0px 13.4px 17.9px rgba(0, 0, 0, 0.042), + 0px 25.1px 33.4px rgba(0, 0, 0, 0.05), + 0px 60px 80px rgba(0, 0, 0, 0.07); +} + +.button:active { + transform: scale(1.01); +} \ No newline at end of file diff --git a/confetti-button/license.txt b/confetti-button/license.txt new file mode 100644 index 0000000..d7730f5 --- /dev/null +++ b/confetti-button/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Marco Biedermann (https://codepen.io/marcobiedermann/pen/ExvvyLQ) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/confetti-button/src/index.html b/confetti-button/src/index.html new file mode 100644 index 0000000..98499e9 --- /dev/null +++ b/confetti-button/src/index.html @@ -0,0 +1 @@ +
    \ No newline at end of file diff --git a/confetti-button/src/script.babel b/confetti-button/src/script.babel new file mode 100644 index 0000000..2840acb --- /dev/null +++ b/confetti-button/src/script.babel @@ -0,0 +1,23 @@ +import React, { useCallback } from "https://cdn.skypack.dev/react"; +import { render } from "https://cdn.skypack.dev/react-dom"; +import confetti from "https://cdn.skypack.dev/canvas-confetti"; + +function App() { + const onClick = useCallback(() => { + confetti({ + particleCount: 150, + spread: 60 + }); + }, []); + + return ( + <> + + + ); +} + +render(, document.getElementById("root")); diff --git a/confetti-button/src/style.css b/confetti-button/src/style.css new file mode 100644 index 0000000..4803d54 --- /dev/null +++ b/confetti-button/src/style.css @@ -0,0 +1,44 @@ +* { + box-sizing: border-box; +} + +body { + background-color: #f5f8ff; + font-family: 'Roboto', sans-serif; + line-height: 1.5; + min-block-size: 100vh; + display: grid; + place-items: center; +} + +button { + cursor: pointer; + font: inherit; + margin: 0; + padding: 0; +} + +.button { + background-color: #404663; + color: #fff; + border: 0; + font-size: 2rem; + font-weight: 400; + padding: 0.5em 1.25em; + border-radius: 0.5em; + z-index: 999; + position: relative; + display: flex; + gap: 0.5em; + box-shadow: + 0px 1.7px 2.2px rgba(0, 0, 0, 0.02), + 0px 4px 5.3px rgba(0, 0, 0, 0.028), + 0px 7.5px 10px rgba(0, 0, 0, 0.035), + 0px 13.4px 17.9px rgba(0, 0, 0, 0.042), + 0px 25.1px 33.4px rgba(0, 0, 0, 0.05), + 0px 60px 80px rgba(0, 0, 0, 0.07); +} + +.button:active { + transform: scale(1.01); +} \ No newline at end of file diff --git a/confluent-flow/README.markdown b/confluent-flow/README.markdown new file mode 100644 index 0000000..464ea45 --- /dev/null +++ b/confluent-flow/README.markdown @@ -0,0 +1,5 @@ +# Confluent flow + +A Pen created on CodePen.io. Original URL: [https://codepen.io/shubniggurath/pen/oNZLQJW](https://codepen.io/shubniggurath/pen/oNZLQJW). + +Click to regenerate diff --git a/confluent-flow/dist/index.html b/confluent-flow/dist/index.html new file mode 100644 index 0000000..5bdba81 --- /dev/null +++ b/confluent-flow/dist/index.html @@ -0,0 +1,16 @@ + + + + + CodePen - Confluent flow + + + + + +
    + + + + + diff --git a/confluent-flow/dist/script.js b/confluent-flow/dist/script.js new file mode 100644 index 0000000..f343315 --- /dev/null +++ b/confluent-flow/dist/script.js @@ -0,0 +1,1361 @@ +import { SVG } from 'https://cdn.skypack.dev/@svgdotjs/svg.js' +import { Vec2 } from 'https://cdn.skypack.dev/wtc-math'; +import fitCurve from 'https://cdn.skypack.dev/fit-curves'; +console.clear(); + +const config = { + seed: 1337, + drawingType: 1, + dimensions: new Vec2(700, 700), + nscale: .00125, + sscale: 20, + stepSize: 25, + num: 1, + r: 5, + rigidity: 0, + k: 8, + testGridSize: 1, + offset: new Vec2(10,-200), + sneks: 200 +}; +const vars = { + noise: null, + grid: null, + drawing: null +} +const setup = () => { + const container = document.querySelector('#container'); + + config.offset.x = floatRandomBetween(-1000, 1000); + config.offset.y = floatRandomBetween(-1000, 1000); + config.nscale = floatRandomBetween(.000005, .002); + + container.innerHTML = ''; + + vars.drawing = new Drawing(config.drawingType).addTo('#container').size(config.dimensions); + + const t = document.createElement('div') + t.className = 'tracer'; + container.appendChild(t) + + vars.bluenoise = new BlueNoise({ + size: config.dimensions.addNew(new Vec2(config.r*-1, config.r*-1)), + offset: new Vec2(config.r*1, config.r*1), + r: config.r, + k: config.k, + rigidity: config.rigidity + }); + vars.noise = new SimplexNoise(config.seed); + vars.grid = new Grid({ cellSize: new Vec2(config.testGridSize,config.testGridSize), fill: -1 }); + + /// Create the download button + // const dl = document.createElement('button'); + // dl.innerText = 'download'; + // dl.addEventListener('click', () => { + // vars.drawing.download(); + // }); + // container.appendChild(dl); + + document.body.querySelector('#container>:first-child').addEventListener('click', () => { + setup(); + }); + + draw(); drawStep(); +} + +let sneki = 0; +const drawStep = () => { + const sneks = []; + if(vars.bluenoise.news.length > 0) { + requestAnimationFrame(drawStep) + for(let i = 0; i < config.sneks; i++) { + const [p] = vars.bluenoise.news.splice(Math.floor(Math.random() * vars.bluenoise.news.length), 1.); + if(!p) continue; + if(p.subtractNew(config.dimensions.scaleNew(.5)).length > 200) continue; + const pos = p; + + const dir = new Vec2(1,0); + const f = field(pos, 1., sneki+1); + dir.angle = f.noise; + + // vars.drawing.stroke = '#ff0000AA'; + // vars.drawing.circle(pos, 1); + + const distancebreak = 3; + let cont = false; + for(let x = -distancebreak*.5; x <= distancebreak*.5; x++) { + for(let y = -distancebreak*.5; y <= distancebreak*.5; y++) { + const offset = new Vec2(x, y); + const t = vars.grid.getChildAtPosition(pos.addNew(offset)); + if(t !== -1) cont = true; + } + } + if(cont) continue; + + // vars.drawing.circle(pos, .5); + + const s = new Snek(pos, { + direction: dir, + maxLength: 1000, + id: sneki++, + distanceProjection: 5, + distanceBreak: distancebreak, + projectionBreakMultiplier: 0 + }); + sneks.push(s); +// projectionBreakMultiplier: 2 + // + } + } + + // for(let j = 0; j < config.lineLength; j++) { + for(let i = 0; i < sneks.length; i++) { + sneks[i].walkOut(); + } + // } + + // document.querySelector('.tracer').innerHTML = vars.bluenoise.news.length; + for(let i = 0; i < sneks.length; i++) { + vars.drawing.path(sneks[i].bezier); + } +} +let interval; +const draw = () => { + + vars.drawing.stroke = '#AAA'; + vars.drawing.c.fillStyle = "#111122"; + vars.drawing.c.fillRect(0,0, config.dimensions.x, config.dimensions.y); + + vars.drawing.rect(new Vec2(0,0), config.dimensions); + vars.drawing.c.lineWidth = 1.5; + + while(vars.bluenoise.active.length > 0) { + vars.bluenoise.step(); + } +} + +setTimeout(() => { + setup(); +}, 500); + +const ngon = (pos, r, nsides) => { + const a = Math.atan2(pos.y, pos.x) + Math.PI*.5; + const split = (Math.PI*2) / nsides; + return pos.length * Math.cos(split * Math.floor(.5 + a / split) - a) - r; +} + +const field = (pos, id = 1, instanceID = 0)=> { + const normpos = pos.subtractNew(config.dimensions.scaleNew(.5)); + const mask1 = ngon(normpos, 200, 40) < Math.random()*10; + const mask2 = ngon(normpos.addNew(new Vec2(0, 50)), 250, 3) < 0.; + let mask; + if(!id) { + if(mask2) { + id = 2.; + } else if(mask1) { + id = 1.; + } + } + + let n; + + if(id == 1.) { + n = vars.noise.noise2D(pos.addNew(config.offset).scale(config.nscale).array)*Math.PI; + // const a = Math.atan2(normpos.y, normpos.x); + // n = a - .5; + } else if(id == 2.) { + // const a = Math.atan2(normpos.y, normpos.x) + Math.PI * .5; + // n = a + .8; + + const a = Math.atan2(normpos.y, normpos.x); + n = a + .5; + + // n = noise.noise2D(pos.addNew(config.offset).scale(config.nscale).array)*Math.PI; + } + + // let apos = pos.subtractNew(dimensions.scaleNew(.5)); + // let a = Math.atan2(apos.y, apos.x) + Math.PI * .5; + + // const n = noise.noise2D(pos.addNew(config.offset).scale(config.nscale).array)*Math.PI; + + // const n = a + .8; + + // const mask = pos.subtractNew(dimensions.scaleNew(.5)).length < 350; + // const mask = ngon(normpos, 150, 3) < 0.; + return {noise: n, mask: instanceID % 3 == 0 ? true : mask1, id: id}; +} + +class Snek { + static #defaults = { + grid: vars.grid, + head: true, + tail: true, + direction: new Vec2(1,0), + maxLength: 1000, + stepSize: 1, + fieldID: 1, + distanceBreak: 5, + distanceProjection: 5, + minLength: 10, + id: 0, + bailout: 10000, + projectionBreakMultiplier: .5 + }; + #alive = [true, true]; /* Two alive directions per snek */ + #directions = [0,0]; /* The direction of the head and tail */ + #positions = [0,0]; /* The position of the head and tail */ + #maxLength = 1000; /* The maximum length of the whole snake */ + #stepSize = 1; + #fieldID = 1; + #distanceBreak = 5; + #distanceProjection = 5; + #minLength = 5; + #points = []; + #id = 0; + #bailout = 10000; + #projectionBreakMultiplier = .5; + + constructor(pos, settings) { + settings = Object.assign({}, Snek.#defaults, settings); + this.#alive[0] = settings.head === true; + this.#alive[1] = settings.tail === true; + this.directionHead = settings.direction.clone(); + this.directionTail = settings.direction.rotateNew(Math.PI); + this.#positions[0] = pos.clone(); + this.#positions[1] = pos.clone(); + this.#fieldID = settings.fieldID; + this.#distanceBreak = settings.distanceBreak; + this.#distanceProjection = settings.distanceProjection; + this.#maxLength = settings.maxLength; + this.#minLength = settings.minLength; + this.#id = settings.id; + this.#bailout = settings.bailout; + this.#projectionBreakMultiplier = settings.projectionBreakMultiplier; + } + walkOut() { + // console.log(this.length, this.#maxLength) + let i = 0; + while(this.length < this.#maxLength) { + if(i++ > this.#bailout) break; + if(this.dead) break; + this.walk(this.#stepSize); + } + this.dead = true; + } + walk(distance, topTail = 0) { + if(this.#alive[topTail]) { + + const dir = this.#directions[topTail]; + const pos = this.#positions[topTail].addNew(dir.scaleNew(distance)); + const f = field(pos, this.#fieldID, this.#id); + + const t = vars.grid.getChildAtPosition(pos); + + let draw = true; + + let i = -this.#distanceBreak; + let a = dir.clone(); + a.angle -= Math.PI * .5; + while(i <= this.#distanceBreak) { + const p = pos.addNew(a.scaleNew(i)); + const t = vars.grid.getChildAtPosition(p); + if(t === -1 || t === this) { + } else { + draw = false; + break; + } + i += config.testGridSize; + } + + const dp = this.#distanceProjection; + let np = pos.clone(); + const ndir = dir.clone(); + for(let i = 0; i < dp; i++) { + if(draw === false) break; + np.add(ndir.scaleNew(distance)); + const nf = field(np, this.#fieldID, this.#id); + ndir.angle = nf.noise; + let j = -this.#distanceBreak*this.#projectionBreakMultiplier; + let a = ndir.clone(); + a.angle -= Math.PI * .5; + while(j <= this.#distanceBreak*this.#projectionBreakMultiplier) { + const p = np.addNew(a.scaleNew(j)); + const t = vars.grid.getChildAtPosition(p); + if(t === -1 || t === this) { + } else { + draw = false; + break; + } + j += config.testGridSize; + } + } + + if(!f.mask) draw = false; + + if(draw) { + if(topTail === 0) { + this.#points.push(pos.clone()); + } else { + this.#points.splice(0, 0, pos.clone()); + } + vars.grid.addChildAtPosition(this, pos); + this.#positions[topTail] = pos.clone(); + } else { + this.#alive[topTail] = false; + } + + dir.angle = f.noise; + if(topTail === 1) dir.rotate(Math.PI); + + } + if(topTail === 0 && this.#alive[1]) { + this.walk(distance, 1) + } + } + + get length() { + return this.#points.length * this.#stepSize; + } + set dead(v) { + if(v === false) { + this.#alive[0] = false; + this.#alive[1] = false; + } else if(v === true) { + this.#alive[0] = true; + } + } + get dead() { + return !this.#alive[0] && !this.#alive[1]; + } + get points() { + let points = this.#points; + if(points.length * this.#stepSize < this.#minLength) { + points.forEach((p) => { + vars.grid.addChildAtPosition(-1, p); + }); + return null; + } + return points.map(p => p.array); + } + get bezier() { + const points = this.points; + if(!points?.length || points.length <= 1) return; + const bezierCurves = fitCurve(this.points, 1); + let str = ""; + bezierCurves.map(function(bezier, i) { + if (i == 0) { + str += "M " + bezier[0][0] + " " + bezier[0][1]; + } + str += "C " + bezier[1][0] + " " + bezier[1][1] + ", " + + bezier[2][0] + " " + bezier[2][1] + ", " + + bezier[3][0] + " " + bezier[3][1] + " "; + }); + + return str; + } + get id() { + return this.#fieldID; + } + set directionHead(v) { + if(v instanceof Vec2) this.#directions[0] = v; + } + get directionHead() { + return this.#directions[0]; + } + set directionTail(v) { + if(v instanceof Vec2) this.#directions[1] = v; + } + get directionTail() { + return this.#directions[1]; + } +} + + +class Drawing { + static DT_CANVAS = 1; + static DT_SVG = 2; + #drawing; + #ctx; + #mode; + #instructions = []; + + constructor(mode = Drawing.DT_CANVAS) { + this.mode = mode; + if(this.mode & Drawing.DT_CANVAS) { + this.#drawing = document.createElement('canvas'); + } else if(this.mode & Drawing.DT_SVG) { + this.#drawing = SVG(); + } + + this.stroke = '#333'; + } + clear() { + if(this.mode & Drawing.DT_CANVAS) { + this.c.clearRect(0,0,...this.dimensions.array); + } else if(this.mode & Drawing.DT_SVG) { + this.drawing.clear(); + } + } + rect(position, dimensions) { + if(this.saving) { + this.#instructions.push({ + f: 'rect', + args: [position, dimensions] + }); + } + if(this.mode & Drawing.DT_CANVAS) { + this.c.beginPath(); + this.c.rect(...position.array, ...dimensions.array); + this.c.stroke(); + } else if(this.mode & Drawing.DT_SVG) { + this.drawing.rect(dimensions.width, dimensions.height).move(...position.array).fill("none").stroke('#f06'); + } + } + circle(position, radius) { + if(this.saving) { + this.#instructions.push({ + f: 'circle', + args: [position, radius] + }); + } + if(this.mode & Drawing.DT_CANVAS) { + this.c.beginPath(); + this.c.arc(position.x, position.y, radius, 0, 2 * Math.PI); + if(this.stroke) this.c.stroke(); + } else if(this.mode & Drawing.DT_SVG) { + this.drawing.circle(radius*2).fill("none").stroke(this.stroke).move(...position.subtractScalarNew(radius).array); + } + } + line(a, b) { + if(this.saving) { + this.#instructions.push({ + f: 'line', + args: [a, b] + }); + } + if(this.mode & Drawing.DT_CANVAS) { + this.c.beginPath(); + this.c.moveTo(a.x, a.y); + this.c.lineTo(b.x, b.y); + if(this.stroke) this.c.stroke(); + } else if(this.mode & Drawing.DT_SVG) { + this.drawing.line(...a.array, ...b.array).stroke(this.stroke); + } + } + polyline(points) { + if(this.saving) { + this.#instructions.push({ + f: 'polyline', + args: points + }); + } + if(this.mode & Drawing.DT_CANVAS) { + this.c.beginPath(); + points.forEach((p, i) => { + if(i === 0) this.c.moveTo(p.x, p.y); + else this.c.lineTo(p.x, p.y); + }) + if(this.stroke) this.c.stroke(); + } else if(this.mode & Drawing.DT_SVG) { + this.drawing.polyline(points.map(p => p.array)).fill('none').stroke(this.stroke); + } + } + path(path) { + if(this.mode & Drawing.DT_CANVAS) { + this.c.beginPath(); + const p = new Path2D(path); + if(this.stroke) this.c.stroke(p); + } else if(this.mode & Drawing.DT_SVG) { + this.drawing.path(path).fill('none').stroke(this.stroke); + } + } + polygon(points) { + if(this.saving) { + this.#instructions.push({ + f: 'polygon', + args: [points] + }); + } + if(this.mode & Drawing.DT_CANVAS) { + this.c.beginPath(); + points.forEach((p, i) => { + if(i === 0) this.c.moveTo(p.x, p.y); + else this.c.lineTo(p.x, p.y); + }) + if(this.stroke) this.c.stroke(); + } else if(this.mode & Drawing.DT_SVG) { + this.drawing.polygon(points.map(p => p.array)).fill('none').stroke(this.stroke); + } + } + + download() { + let d; + if(this.mode & Drawing.DT_CANVAS) { + d = new Drawing(Drawing.DT_SVG).size(this.dimensions); + this.#instructions.forEach((i) => { + d[i.f](...i.args); + }); + } else if(this.mode & Drawing.DT_SVG) { + d = this; + } + + const fileName = "untitled.svg" + const url = "data:image/svg+xml;utf8," + encodeURIComponent(d.drawing.svg()); + const link = document.createElement("a"); + link.download = fileName; + link.href = url; + link.click(); + } + + addTo(element) { + if(typeof(element) === 'string') { + if(this.mode & Drawing.DT_CANVAS) { + document.body.querySelector(element).appendChild(this.drawing); + } else if(this.mode & Drawing.DT_SVG) { + this.drawing.addTo('#container'); + } + } + return this; + } + + size(d) { + if(this.mode & Drawing.DT_CANVAS) { + this.drawing.width = d.width; + this.drawing.height = d.height; + } else if(this.mode & Drawing.DT_SVG) { + this.drawing.size(...d.array); + } + this.#dimensions = d; + return this; + } + + #dimensions + set dimensions(v) { + if(v instanceof Vec2) { + this.#dimensions = v; + this.size(v); + } + } + get dimensions() { + return this.#dimensions; + } + + get drawing() { + return this.#drawing; + } + get c() { + if(this.mode & Drawing.DT_CANVAS) { + if(this.#ctx) return this.#ctx; + this.#ctx = this.drawing.getContext('2d'); + return this.#ctx; + } + } + #stroke; + set stroke(v) { + this.#stroke = v; + if(this.mode & Drawing.DT_CANVAS) { + this.c.strokeStyle = v; + } + } + get stroke() { + return this.#stroke; + } + set mode(v) { + if(v & (Drawing.DT_CANVAS | Drawing.DT_SVG)) { + this.#mode = v; + } + } + get mode() { + return this.#mode || Drawing.DT_CANVAS; + } + #saving = false + set saving(v) { + this.#saving = v === true; + } + get saving() { + return this.#saving; + } +} + +// vars.drawing = SVG().addTo('#container').size(config.dimensions.x, config.dimensions.y); + + +class Grid { + static #defaults = { + size: config.dimensions.clone(), + cellSize: new Vec2(50,50), + fill: null + }; + #grid = []; + #size; + #cellSize; + + constructor(settings) { + settings = Object.assign({}, Grid.#defaults, settings); + this.#size = Vec2.interpolate(settings.size) || Grid.#defaults.size; + this.#cellSize = Vec2.interpolate(settings.cellSize) || Grid.#defaults.cellSize; + this.#grid.length = this.gridSize.area; + this.#grid.fill(settings.fill || Grid.#defaults.fill); + } + + addChild(child, i) { + this.#grid[i] = child; + } + addChildAtPosition(child, pos) { + this.#grid[this.getArrayPosition(pos)] = child; + } + addChildAtGridPosition(child, gridPos) { + this.#grid[this.getArrayPositionFromGridPos(gridPos)] = child; + } + + getChild(i) { + return this.#grid[i]; + } + getChildAtPosition(pos) { + return this.#grid[this.getArrayPosition(pos)]; + } + getChildAtGridPosition(gridPos) { + return this.#grid[this.getArrayPositionFromGridPos(gridPos)]; + } + + getGridPositionForIndex(i) { + const gsize = this.gridSize; + return new Vec2(i%gsize.x, Math.floor(i/gsize.x)); + } + + getArrayPositionFromGridPos(gpos) { + const gsize = this.gridSize; + if( + gpos.x < 0 || gpos.x >= gsize.x || + gpos.y < 0 || gpos.y >= gsize.y ) + return null; + + gpos.x = gpos.x % gsize.x; + const arraypos = (gpos.x) + (gpos.y*gsize.x); + return arraypos; + } + + getArrayPosition(realPos) { + const gpos = this.getGridPos(realPos); + return this.getArrayPositionFromGridPos(gpos); + } + + getGridPos(realPos) { + if(realPos instanceof Vec2) { + return realPos.divideNew(this.#cellSize).floor(); + } + // Throw an error + } + getSubPos(realPos) { + if(realPos instanceof Vec2) { + return realPos.modNew(this.#cellSize); + } + // Throw an error + } + getRealPos(gridPos) { + if(gridPos instanceof Vec2) { + return gridPos.multiplyNew(this.#cellSize); + } + // Throw an error + } + + get size() { + return this.#size; + } + get gridSize() { + return this.#size.divideNew(this.#cellSize).floor(); + } + get cellSize() { + return this.#cellSize; + } + get length() { + return this.#grid.length; + } +} + + +class BlueNoise { + static #defaults = { + size: config.dimensions.clone(), + offset: new Vec2(0,0), + r: 100, + k: 32, + d: 5, + initialList: [new Vec2(375,250)], + rigidity: 0 + }; + #activeList = []; + #newPositions = []; + #grid; + #r; + #k; + #d; + #size; + #offset; + #rigidity; + + constructor(settings) { + settings = Object.assign({}, BlueNoise.#defaults, settings); + this.#r = settings.r; + this.#k = settings.k; + this.#d = settings.d; + this.#size = settings.size; + this.#offset = settings.offset; + this.#rigidity = settings.rigidity; + this.#grid = new Grid({ + size: this.#size, + cellSize: this.#r / Math.SQRT2, + // cellSize: 1. / Math.SQRT2 / this.#r, + fill: -1 + }); + this.addElementAtPosition(...settings.initialList); + } + addElementAtPosition(...positions) { + positions.forEach((pos) => { + this.#grid.addChildAtPosition(pos, pos); + this.#activeList.push(pos); + this.#newPositions.push(pos); + }); + } + draw(purge = true) { + this.news.forEach((newPos, i) => { + const r = 3; + const pos = newPos.addNew(this.#offset); + vars.drawing.circle(pos, r); + if(purge) this.news[i] = null; + }); + this.#newPositions = this.news.filter(v => v !== null); + // this.news.length = 0; + } + step() { + const loopL = Math.min(this.active.length, this.#d); + for(let l = 0; l < loopL; l++) { + const ri = Math.floor(0, floatRandomBetween(this.active.length)); + const c = this.active[ri]; + let numfound = 0; + for(var i = 0; i < this.#k; i++) { + const a = floatRandomBetween(0, Math.PI*2); + const l = floatRandomBetween(this.#r, this.#r*2); + let pos = new Vec2(Math.cos(a)*l, Math.sin(a)*l).add(c); + // console.log(this.grid.getChildAtPosition(pos)); + if(this.grid.getChildAtPosition(pos) === -1) { + const gridPos = this.grid.getGridPos(pos); + let tooClose = false; + for (var i = -1; i <= 1; i++) { + for (var j = -1; j <= 1; j++) { + if(i == 0 && j == 0) continue; + const p = this.grid.getChildAtGridPosition(gridPos.addNew(new Vec2(i, j))); + if(p !== -1 && p instanceof Vec2) { + const d = pos.distance(p); + if(d < this.#r*.5) tooClose = true; + } + } + } + if(!tooClose) { + const gridPosition = this.grid.getRealPos(this.grid.getGridPos(pos)).addNew(this.grid.cellSize.scaleNew(.5)); + pos = Vec2.lerp(pos, gridPosition, this.#rigidity); + this.grid.addChildAtPosition(pos, pos); + this.active.push(pos); + this.news.push(pos); + numfound++; + break; + } + } + } + if(numfound === 0) { + this.active.splice(ri, 1); + } + } + } + + get active() { + return this.#activeList; + } + get news() { + return this.#newPositions; + } + get grid() { + return this.#grid; + } + get offset() { + return this.#offset; + } +} + + + +const floatRandomBetween = (min, max) => { + return Math.random() * (max - min) + min; +}; +const clamp = function(a, b, v) { + return Math.min(b, Math.max(a, v)); +} +const lerp = function(a, b, progress) { + return a + progress * (b - a); +} +const hash21 = (p) => { + const o = p.dot(new Vec2(27.609, 57.583)); + return fract(Math.sin(o)*config.seed); +} +const precisionRound = (n, p) => { + const ip = Math.pow(10, p); + return Math.round(n*ip)/ip; +} +const fract = (n, p = 6) => { + const ip = Math.pow(10, p); + const _n = Math.abs(Math.floor(n*ip)/ip); + if(_n < 1) return _n; + return Math.floor(_n % Math.floor(_n)*ip)/ip; +} +const pal = ( t, a, b, c, d ) => { + const mp = c.scaleNew(t).add(d).scale(6.28318); + mp.x = Math.cos(mp.x); + mp.y = Math.cos(mp.y); + mp.z = Math.cos(mp.z); + return a.addNew(b.multiplyNew(mp)); +} +const getColour = (d) => { + const col = pal( + d/70+.65, + new Vec3(0.5,0.5,0.5), + new Vec3(0.5,0.5,0.5), + new Vec3(1.0,1.0,1.0), + new Vec3(0.0,0.1,0.2) ); + + const colour = Math.floor(col.x * 255).toString(16) + Math.floor(col.y * 255).toString(16) + Math.floor(col.z * 255).toString(16); + const a = Math.floor((1.-d/30)*255).toString(16); + return colour+a; +} + + + +//////////////////////////////////////////////////////////////// +// Simplex Noise utility code. Created by Reinder Nijhoff 2020 +// https://turtletoy.net/turtle/6e4e06d42e +// Based on: http://webstaff.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf +//////////////////////////////////////////////////////////////// +function SimplexNoise(seed = 1) { + const grad = [ [1, 1, 0], [-1, 1, 0], [1, -1, 0], [-1, -1, 0], + [1, 0, 1], [-1, 0, 1], [1, 0, -1], [-1, 0, -1], + [0, 1, 1], [0, -1, 1], [0, 1, -1], [0, -1, -1] ]; + const perm = new Uint8Array(512); + + const F2 = (Math.sqrt(3) - 1) / 2, F3 = 1/3; + const G2 = (3 - Math.sqrt(3)) / 6, G3 = 1/6; + + const dot2 = (a, b) => a[0] * b[0] + a[1] * b[1]; + const sub2 = (a, b) => [a[0] - b[0], a[1] - b[1]]; + const dot3 = (a, b) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; + const sub3 = (a, b) => [a[0] - b[0], a[1] - b[1], a[2] - b[2]]; + + class SimplexNoise { + constructor(seed = 1) { + for (let i = 0; i < 512; i++) { + perm[i] = i & 255; + } + for (let i = 0; i < 255; i++) { + const r = (seed = this.hash(i+seed)) % (256 - i) + i; + const swp = perm[i]; + perm[i + 256] = perm[i] = perm[r]; + perm[r + 256] = perm[r] = swp; + } + } + noise2D(p) { + const s = dot2(p, [F2, F2]); + const c = [Math.floor(p[0] + s), Math.floor(p[1] + s)]; + const i = c[0] & 255, j = c[1] & 255; + const t = dot2(c, [G2, G2]); + + const p0 = sub2(p, sub2(c, [t, t])); + const o = p0[0] > p0[1] ? [1, 0] : [0, 1]; + const p1 = sub2(sub2(p0, o), [-G2, -G2]); + const p2 = sub2(p0, [1-2*G2, 1-2*G2]); + + let n = Math.max(0, 0.5-dot2(p0, p0))**4 * dot2(grad[perm[i+perm[j]] % 12], p0); + n += Math.max(0, 0.5-dot2(p1, p1))**4 * dot2(grad[perm[i+o[0]+perm[j+o[1]]] % 12], p1); + n += Math.max(0, 0.5-dot2(p2, p2))**4 * dot2(grad[perm[i+1+perm[j+1]] % 12], p2); + + return 70 * n; + } + hash(i) { + i = 1103515245 * ((i >> 1) ^ i); + const h32 = 1103515245 * (i ^ (i>>3)); + return h32 ^ (h32 >> 16); + } + } + return new SimplexNoise(seed); +} + + + + + + + +// https://github.com/mapbox/delaunator +// +// ISC License +// +// Copyright (c) 2017, Mapbox +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +// OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +// TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +// THIS SOFTWARE. +// + +const EPSILON = Math.pow(2, -52); +const EDGE_STACK = new Uint32Array(512); + +class Delaunator { + static from(points) { + const n = points.length; + const coords = new Float64Array(n * 2); + + for (let i = 0; i < n; i++) { + const p = points[i]; + coords[2 * i] = p[0]; + coords[2 * i + 1] = p[1]; + } + + return new Delaunator(coords); + } + + constructor(coords) { + const n = coords.length >> 1; + if (n > 0 && typeof coords[0] !== 'number') throw new Error('Expected coords to contain numbers.'); + + this.coords = coords; + + // arrays that will store the triangulation graph + const maxTriangles = 2 * n - 5; + const triangles = this.triangles = new Uint32Array(maxTriangles * 3); + const halfedges = this.halfedges = new Int32Array(maxTriangles * 3); + + // temporary arrays for tracking the edges of the advancing convex hull + this._hashSize = Math.ceil(Math.sqrt(n)); + const hullPrev = this.hullPrev = new Uint32Array(n); // edge to prev edge + const hullNext = this.hullNext = new Uint32Array(n); // edge to next edge + const hullTri = this.hullTri = new Uint32Array(n); // edge to adjacent triangle + const hullHash = new Int32Array(this._hashSize).fill(-1); // angular edge hash + + // populate an array of point indices; calculate input data bbox + const ids = new Uint32Array(n); + let minX = Infinity; + let minY = Infinity; + let maxX = -Infinity; + let maxY = -Infinity; + + for (let i = 0; i < n; i++) { + const x = coords[2 * i]; + const y = coords[2 * i + 1]; + if (x < minX) minX = x; + if (y < minY) minY = y; + if (x > maxX) maxX = x; + if (y > maxY) maxY = y; + ids[i] = i; + } + const cx = (minX + maxX) / 2; + const cy = (minY + maxY) / 2; + + let minDist = Infinity; + let i0, i1, i2; + + // pick a seed point close to the center + for (let i = 0; i < n; i++) { + const d = dist(cx, cy, coords[2 * i], coords[2 * i + 1]); + if (d < minDist) { + i0 = i; + minDist = d; + } + } + const i0x = coords[2 * i0]; + const i0y = coords[2 * i0 + 1]; + + minDist = Infinity; + + // find the point closest to the seed + for (let i = 0; i < n; i++) { + if (i === i0) continue; + const d = dist(i0x, i0y, coords[2 * i], coords[2 * i + 1]); + if (d < minDist && d > 0) { + i1 = i; + minDist = d; + } + } + let i1x = coords[2 * i1]; + let i1y = coords[2 * i1 + 1]; + + let minRadius = Infinity; + + // find the third point which forms the smallest circumcircle with the first two + for (let i = 0; i < n; i++) { + if (i === i0 || i === i1) continue; + const r = circumradius(i0x, i0y, i1x, i1y, coords[2 * i], coords[2 * i + 1]); + if (r < minRadius) { + i2 = i; + minRadius = r; + } + } + let i2x = coords[2 * i2]; + let i2y = coords[2 * i2 + 1]; + + if (minRadius === Infinity) { + throw new Error('No Delaunay triangulation exists for this input.'); + } + + // swap the order of the seed points for counter-clockwise orientation + if (orient(i0x, i0y, i1x, i1y, i2x, i2y)) { + const i = i1; + const x = i1x; + const y = i1y; + i1 = i2; + i1x = i2x; + i1y = i2y; + i2 = i; + i2x = x; + i2y = y; + } + + const center = circumcenter(i0x, i0y, i1x, i1y, i2x, i2y); + this._cx = center.x; + this._cy = center.y; + + const dists = new Float64Array(n); + for (let i = 0; i < n; i++) { + dists[i] = dist(coords[2 * i], coords[2 * i + 1], center.x, center.y); + } + + // sort the points by distance from the seed triangle circumcenter + quicksort(ids, dists, 0, n - 1); + + // set up the seed triangle as the starting hull + this.hullStart = i0; + let hullSize = 3; + + hullNext[i0] = hullPrev[i2] = i1; + hullNext[i1] = hullPrev[i0] = i2; + hullNext[i2] = hullPrev[i1] = i0; + + hullTri[i0] = 0; + hullTri[i1] = 1; + hullTri[i2] = 2; + + hullHash[this._hashKey(i0x, i0y)] = i0; + hullHash[this._hashKey(i1x, i1y)] = i1; + hullHash[this._hashKey(i2x, i2y)] = i2; + + this.trianglesLen = 0; + this._addTriangle(i0, i1, i2, -1, -1, -1); + + for (let k = 0, xp, yp; k < ids.length; k++) { + const i = ids[k]; + const x = coords[2 * i]; + const y = coords[2 * i + 1]; + + // skip near-duplicate points + if (k > 0 && Math.abs(x - xp) <= EPSILON && Math.abs(y - yp) <= EPSILON) continue; + xp = x; + yp = y; + + // skip seed triangle points + if (i === i0 || i === i1 || i === i2) continue; + + // find a visible edge on the convex hull using edge hash + let start = 0; + for (let j = 0, key = this._hashKey(x, y); j < this._hashSize; j++) { + start = hullHash[(key + j) % this._hashSize]; + if (start !== -1 && start !== hullNext[start]) break; + } + + start = hullPrev[start]; + let e = start, q; + while (q = hullNext[e], !orient(x, y, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1])) { + e = q; + if (e === start) { + e = -1; + break; + } + } + if (e === -1) continue; // likely a near-duplicate point; skip it + + // add the first triangle from the point + let t = this._addTriangle(e, i, hullNext[e], -1, -1, hullTri[e]); + + // recursively flip triangles from the point until they satisfy the Delaunay condition + hullTri[i] = this._legalize(t + 2); + hullTri[e] = t; // keep track of boundary triangles on the hull + hullSize++; + + // walk forward through the hull, adding more triangles and flipping recursively + let n = hullNext[e]; + while (q = hullNext[n], orient(x, y, coords[2 * n], coords[2 * n + 1], coords[2 * q], coords[2 * q + 1])) { + t = this._addTriangle(n, i, q, hullTri[i], -1, hullTri[n]); + hullTri[i] = this._legalize(t + 2); + hullNext[n] = n; // mark as removed + hullSize--; + n = q; + } + + // walk backward from the other side, adding more triangles and flipping + if (e === start) { + while (q = hullPrev[e], orient(x, y, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1])) { + t = this._addTriangle(q, i, e, -1, hullTri[e], hullTri[q]); + this._legalize(t + 2); + hullTri[q] = t; + hullNext[e] = e; // mark as removed + hullSize--; + e = q; + } + } + + // update the hull indices + this.hullStart = hullPrev[i] = e; + hullNext[e] = hullPrev[n] = i; + hullNext[i] = n; + + // save the two new edges in the hash table + hullHash[this._hashKey(x, y)] = i; + hullHash[this._hashKey(coords[2 * e], coords[2 * e + 1])] = e; + } + + this.hull = new Uint32Array(hullSize); + for (let i = 0, e = this.hullStart; i < hullSize; i++) { + this.hull[i] = e; + e = hullNext[e]; + } + this.hullPrev = this.hullNext = this.hullTri = null; // get rid of temporary arrays + + // trim typed triangle mesh arrays + this.triangles = triangles.subarray(0, this.trianglesLen); + this.halfedges = halfedges.subarray(0, this.trianglesLen); + } + + _hashKey(x, y) { + return Math.floor(pseudoAngle(x - this._cx, y - this._cy) * this._hashSize) % this._hashSize; + } + + _legalize(a) { + const {triangles, coords, halfedges} = this; + + let i = 0; + let ar = 0; + + // recursion eliminated with a fixed-size stack + while (true) { + const b = halfedges[a]; + + /* if the pair of triangles doesn't satisfy the Delaunay condition + * (p1 is inside the circumcircle of [p0, pl, pr]), flip them, + * then do the same check/flip recursively for the new pair of triangles + * + * pl pl + * /||\ / \ + * al/ || \bl al/ \a + * / || \ / \ + * / a||b \ flip /___ar___\ + * p0\ || /p1 => p0\---bl---/p1 + * \ || / \ / + * ar\ || /br b\ /br + * \||/ \ / + * pr pr + */ + const a0 = a - a % 3; + ar = a0 + (a + 2) % 3; + + if (b === -1) { // convex hull edge + if (i === 0) break; + a = EDGE_STACK[--i]; + continue; + } + + const b0 = b - b % 3; + const al = a0 + (a + 1) % 3; + const bl = b0 + (b + 2) % 3; + + const p0 = triangles[ar]; + const pr = triangles[a]; + const pl = triangles[al]; + const p1 = triangles[bl]; + + const illegal = inCircle( + coords[2 * p0], coords[2 * p0 + 1], + coords[2 * pr], coords[2 * pr + 1], + coords[2 * pl], coords[2 * pl + 1], + coords[2 * p1], coords[2 * p1 + 1]); + + if (illegal) { + triangles[a] = p1; + triangles[b] = p0; + + const hbl = halfedges[bl]; + + // edge swapped on the other side of the hull (rare); fix the halfedge reference + if (hbl === -1) { + let e = this.hullStart; + do { + if (this.hullTri[e] === bl) { + this.hullTri[e] = a; + break; + } + e = this.hullNext[e]; + } while (e !== this.hullStart); + } + this._link(a, hbl); + this._link(b, halfedges[ar]); + this._link(ar, bl); + + const br = b0 + (b + 1) % 3; + + // don't worry about hitting the cap: it can only happen on extremely degenerate input + if (i < EDGE_STACK.length) { + EDGE_STACK[i++] = br; + } + } else { + if (i === 0) break; + a = EDGE_STACK[--i]; + } + } + + return ar; + } + + _link(a, b) { + this.halfedges[a] = b; + if (b !== -1) this.halfedges[b] = a; + } + + // add a new triangle given vertex indices and adjacent half-edge ids + _addTriangle(i0, i1, i2, a, b, c) { + const t = this.trianglesLen; + + this.triangles[t] = i0; + this.triangles[t + 1] = i1; + this.triangles[t + 2] = i2; + + this._link(t, a); + this._link(t + 1, b); + this._link(t + 2, c); + + this.trianglesLen += 3; + + return t; + } +} + +// monotonically increases with real angle, but doesn't need expensive trigonometry +function pseudoAngle(dx, dy) { + const p = dx / (Math.abs(dx) + Math.abs(dy)); + return (dy > 0 ? 3 - p : 1 + p) / 4; // [0..1] +} + +function dist(ax, ay, bx, by) { + const dx = ax - bx; + const dy = ay - by; + return dx * dx + dy * dy; +} + +function orient(px, py, qx, qy, rx, ry) { + return (qy - py) * (rx - qx) - (qx - px) * (ry - qy) < 0; +} + +function inCircle(ax, ay, bx, by, cx, cy, px, py) { + const dx = ax - px; + const dy = ay - py; + const ex = bx - px; + const ey = by - py; + const fx = cx - px; + const fy = cy - py; + + const ap = dx * dx + dy * dy; + const bp = ex * ex + ey * ey; + const cp = fx * fx + fy * fy; + + return dx * (ey * cp - bp * fy) - + dy * (ex * cp - bp * fx) + + ap * (ex * fy - ey * fx) < 0; +} + +function circumradius(ax, ay, bx, by, cx, cy) { + const dx = bx - ax; + const dy = by - ay; + const ex = cx - ax; + const ey = cy - ay; + + const bl = dx * dx + dy * dy; + const cl = ex * ex + ey * ey; + const d = 0.5 / (dx * ey - dy * ex); + + const x = (ey * bl - dy * cl) * d; + const y = (dx * cl - ex * bl) * d; + + return x * x + y * y; +} + +function circumcenter(ax, ay, bx, by, cx, cy) { + const dx = bx - ax; + const dy = by - ay; + const ex = cx - ax; + const ey = cy - ay; + + const bl = dx * dx + dy * dy; + const cl = ex * ex + ey * ey; + const d = 0.5 / (dx * ey - dy * ex); + + const x = ax + (ey * bl - dy * cl) * d; + const y = ay + (dx * cl - ex * bl) * d; + + return {x, y}; +} + +function quicksort(ids, dists, left, right) { + if (right - left <= 20) { + for (let i = left + 1; i <= right; i++) { + const temp = ids[i]; + const tempDist = dists[temp]; + let j = i - 1; + while (j >= left && dists[ids[j]] > tempDist) ids[j + 1] = ids[j--]; + ids[j + 1] = temp; + } + } else { + const median = (left + right) >> 1; + let i = left + 1; + let j = right; + swap(ids, median, i); + if (dists[ids[left]] > dists[ids[right]]) swap(ids, left, right); + if (dists[ids[i]] > dists[ids[right]]) swap(ids, i, right); + if (dists[ids[left]] > dists[ids[i]]) swap(ids, left, i); + + const temp = ids[i]; + const tempDist = dists[temp]; + while (true) { + do i++; while (dists[ids[i]] < tempDist); + do j--; while (dists[ids[j]] > tempDist); + if (j < i) break; + swap(ids, i, j); + } + ids[left + 1] = ids[j]; + ids[j] = temp; + + if (right - i + 1 >= j - left) { + quicksort(ids, dists, i, right); + quicksort(ids, dists, left, j - 1); + } else { + quicksort(ids, dists, left, j - 1); + quicksort(ids, dists, i, right); + } + } +} + +function swap(arr, i, j) { + const tmp = arr[i]; + arr[i] = arr[j]; + arr[j] = tmp; +} \ No newline at end of file diff --git a/confluent-flow/dist/style.css b/confluent-flow/dist/style.css new file mode 100644 index 0000000..619f82c --- /dev/null +++ b/confluent-flow/dist/style.css @@ -0,0 +1,30 @@ +document, body { + background: #111122; + margin: 0; + min-height: 100vh; +} + +body { + align-items: center; + display: flex; + justify-content: center; +} + +#container { + align-items: center; + display: flex; + flex-direction: column; +} + +#container > :first-child { + cursor: pointer; +} + +button { + max-width: 200px; + margin-top: 10px; +} + +.tracer { + color: #fff; +} \ No newline at end of file diff --git a/confluent-flow/license.txt b/confluent-flow/license.txt new file mode 100644 index 0000000..ba1479b --- /dev/null +++ b/confluent-flow/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Liam Egan (https://codepen.io/shubniggurath/pen/oNZLQJW) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/confluent-flow/src/index.pug b/confluent-flow/src/index.pug new file mode 100644 index 0000000..dce8f5f --- /dev/null +++ b/confluent-flow/src/index.pug @@ -0,0 +1 @@ +#container \ No newline at end of file diff --git a/confluent-flow/src/script.js b/confluent-flow/src/script.js new file mode 100644 index 0000000..f343315 --- /dev/null +++ b/confluent-flow/src/script.js @@ -0,0 +1,1361 @@ +import { SVG } from 'https://cdn.skypack.dev/@svgdotjs/svg.js' +import { Vec2 } from 'https://cdn.skypack.dev/wtc-math'; +import fitCurve from 'https://cdn.skypack.dev/fit-curves'; +console.clear(); + +const config = { + seed: 1337, + drawingType: 1, + dimensions: new Vec2(700, 700), + nscale: .00125, + sscale: 20, + stepSize: 25, + num: 1, + r: 5, + rigidity: 0, + k: 8, + testGridSize: 1, + offset: new Vec2(10,-200), + sneks: 200 +}; +const vars = { + noise: null, + grid: null, + drawing: null +} +const setup = () => { + const container = document.querySelector('#container'); + + config.offset.x = floatRandomBetween(-1000, 1000); + config.offset.y = floatRandomBetween(-1000, 1000); + config.nscale = floatRandomBetween(.000005, .002); + + container.innerHTML = ''; + + vars.drawing = new Drawing(config.drawingType).addTo('#container').size(config.dimensions); + + const t = document.createElement('div') + t.className = 'tracer'; + container.appendChild(t) + + vars.bluenoise = new BlueNoise({ + size: config.dimensions.addNew(new Vec2(config.r*-1, config.r*-1)), + offset: new Vec2(config.r*1, config.r*1), + r: config.r, + k: config.k, + rigidity: config.rigidity + }); + vars.noise = new SimplexNoise(config.seed); + vars.grid = new Grid({ cellSize: new Vec2(config.testGridSize,config.testGridSize), fill: -1 }); + + /// Create the download button + // const dl = document.createElement('button'); + // dl.innerText = 'download'; + // dl.addEventListener('click', () => { + // vars.drawing.download(); + // }); + // container.appendChild(dl); + + document.body.querySelector('#container>:first-child').addEventListener('click', () => { + setup(); + }); + + draw(); drawStep(); +} + +let sneki = 0; +const drawStep = () => { + const sneks = []; + if(vars.bluenoise.news.length > 0) { + requestAnimationFrame(drawStep) + for(let i = 0; i < config.sneks; i++) { + const [p] = vars.bluenoise.news.splice(Math.floor(Math.random() * vars.bluenoise.news.length), 1.); + if(!p) continue; + if(p.subtractNew(config.dimensions.scaleNew(.5)).length > 200) continue; + const pos = p; + + const dir = new Vec2(1,0); + const f = field(pos, 1., sneki+1); + dir.angle = f.noise; + + // vars.drawing.stroke = '#ff0000AA'; + // vars.drawing.circle(pos, 1); + + const distancebreak = 3; + let cont = false; + for(let x = -distancebreak*.5; x <= distancebreak*.5; x++) { + for(let y = -distancebreak*.5; y <= distancebreak*.5; y++) { + const offset = new Vec2(x, y); + const t = vars.grid.getChildAtPosition(pos.addNew(offset)); + if(t !== -1) cont = true; + } + } + if(cont) continue; + + // vars.drawing.circle(pos, .5); + + const s = new Snek(pos, { + direction: dir, + maxLength: 1000, + id: sneki++, + distanceProjection: 5, + distanceBreak: distancebreak, + projectionBreakMultiplier: 0 + }); + sneks.push(s); +// projectionBreakMultiplier: 2 + // + } + } + + // for(let j = 0; j < config.lineLength; j++) { + for(let i = 0; i < sneks.length; i++) { + sneks[i].walkOut(); + } + // } + + // document.querySelector('.tracer').innerHTML = vars.bluenoise.news.length; + for(let i = 0; i < sneks.length; i++) { + vars.drawing.path(sneks[i].bezier); + } +} +let interval; +const draw = () => { + + vars.drawing.stroke = '#AAA'; + vars.drawing.c.fillStyle = "#111122"; + vars.drawing.c.fillRect(0,0, config.dimensions.x, config.dimensions.y); + + vars.drawing.rect(new Vec2(0,0), config.dimensions); + vars.drawing.c.lineWidth = 1.5; + + while(vars.bluenoise.active.length > 0) { + vars.bluenoise.step(); + } +} + +setTimeout(() => { + setup(); +}, 500); + +const ngon = (pos, r, nsides) => { + const a = Math.atan2(pos.y, pos.x) + Math.PI*.5; + const split = (Math.PI*2) / nsides; + return pos.length * Math.cos(split * Math.floor(.5 + a / split) - a) - r; +} + +const field = (pos, id = 1, instanceID = 0)=> { + const normpos = pos.subtractNew(config.dimensions.scaleNew(.5)); + const mask1 = ngon(normpos, 200, 40) < Math.random()*10; + const mask2 = ngon(normpos.addNew(new Vec2(0, 50)), 250, 3) < 0.; + let mask; + if(!id) { + if(mask2) { + id = 2.; + } else if(mask1) { + id = 1.; + } + } + + let n; + + if(id == 1.) { + n = vars.noise.noise2D(pos.addNew(config.offset).scale(config.nscale).array)*Math.PI; + // const a = Math.atan2(normpos.y, normpos.x); + // n = a - .5; + } else if(id == 2.) { + // const a = Math.atan2(normpos.y, normpos.x) + Math.PI * .5; + // n = a + .8; + + const a = Math.atan2(normpos.y, normpos.x); + n = a + .5; + + // n = noise.noise2D(pos.addNew(config.offset).scale(config.nscale).array)*Math.PI; + } + + // let apos = pos.subtractNew(dimensions.scaleNew(.5)); + // let a = Math.atan2(apos.y, apos.x) + Math.PI * .5; + + // const n = noise.noise2D(pos.addNew(config.offset).scale(config.nscale).array)*Math.PI; + + // const n = a + .8; + + // const mask = pos.subtractNew(dimensions.scaleNew(.5)).length < 350; + // const mask = ngon(normpos, 150, 3) < 0.; + return {noise: n, mask: instanceID % 3 == 0 ? true : mask1, id: id}; +} + +class Snek { + static #defaults = { + grid: vars.grid, + head: true, + tail: true, + direction: new Vec2(1,0), + maxLength: 1000, + stepSize: 1, + fieldID: 1, + distanceBreak: 5, + distanceProjection: 5, + minLength: 10, + id: 0, + bailout: 10000, + projectionBreakMultiplier: .5 + }; + #alive = [true, true]; /* Two alive directions per snek */ + #directions = [0,0]; /* The direction of the head and tail */ + #positions = [0,0]; /* The position of the head and tail */ + #maxLength = 1000; /* The maximum length of the whole snake */ + #stepSize = 1; + #fieldID = 1; + #distanceBreak = 5; + #distanceProjection = 5; + #minLength = 5; + #points = []; + #id = 0; + #bailout = 10000; + #projectionBreakMultiplier = .5; + + constructor(pos, settings) { + settings = Object.assign({}, Snek.#defaults, settings); + this.#alive[0] = settings.head === true; + this.#alive[1] = settings.tail === true; + this.directionHead = settings.direction.clone(); + this.directionTail = settings.direction.rotateNew(Math.PI); + this.#positions[0] = pos.clone(); + this.#positions[1] = pos.clone(); + this.#fieldID = settings.fieldID; + this.#distanceBreak = settings.distanceBreak; + this.#distanceProjection = settings.distanceProjection; + this.#maxLength = settings.maxLength; + this.#minLength = settings.minLength; + this.#id = settings.id; + this.#bailout = settings.bailout; + this.#projectionBreakMultiplier = settings.projectionBreakMultiplier; + } + walkOut() { + // console.log(this.length, this.#maxLength) + let i = 0; + while(this.length < this.#maxLength) { + if(i++ > this.#bailout) break; + if(this.dead) break; + this.walk(this.#stepSize); + } + this.dead = true; + } + walk(distance, topTail = 0) { + if(this.#alive[topTail]) { + + const dir = this.#directions[topTail]; + const pos = this.#positions[topTail].addNew(dir.scaleNew(distance)); + const f = field(pos, this.#fieldID, this.#id); + + const t = vars.grid.getChildAtPosition(pos); + + let draw = true; + + let i = -this.#distanceBreak; + let a = dir.clone(); + a.angle -= Math.PI * .5; + while(i <= this.#distanceBreak) { + const p = pos.addNew(a.scaleNew(i)); + const t = vars.grid.getChildAtPosition(p); + if(t === -1 || t === this) { + } else { + draw = false; + break; + } + i += config.testGridSize; + } + + const dp = this.#distanceProjection; + let np = pos.clone(); + const ndir = dir.clone(); + for(let i = 0; i < dp; i++) { + if(draw === false) break; + np.add(ndir.scaleNew(distance)); + const nf = field(np, this.#fieldID, this.#id); + ndir.angle = nf.noise; + let j = -this.#distanceBreak*this.#projectionBreakMultiplier; + let a = ndir.clone(); + a.angle -= Math.PI * .5; + while(j <= this.#distanceBreak*this.#projectionBreakMultiplier) { + const p = np.addNew(a.scaleNew(j)); + const t = vars.grid.getChildAtPosition(p); + if(t === -1 || t === this) { + } else { + draw = false; + break; + } + j += config.testGridSize; + } + } + + if(!f.mask) draw = false; + + if(draw) { + if(topTail === 0) { + this.#points.push(pos.clone()); + } else { + this.#points.splice(0, 0, pos.clone()); + } + vars.grid.addChildAtPosition(this, pos); + this.#positions[topTail] = pos.clone(); + } else { + this.#alive[topTail] = false; + } + + dir.angle = f.noise; + if(topTail === 1) dir.rotate(Math.PI); + + } + if(topTail === 0 && this.#alive[1]) { + this.walk(distance, 1) + } + } + + get length() { + return this.#points.length * this.#stepSize; + } + set dead(v) { + if(v === false) { + this.#alive[0] = false; + this.#alive[1] = false; + } else if(v === true) { + this.#alive[0] = true; + } + } + get dead() { + return !this.#alive[0] && !this.#alive[1]; + } + get points() { + let points = this.#points; + if(points.length * this.#stepSize < this.#minLength) { + points.forEach((p) => { + vars.grid.addChildAtPosition(-1, p); + }); + return null; + } + return points.map(p => p.array); + } + get bezier() { + const points = this.points; + if(!points?.length || points.length <= 1) return; + const bezierCurves = fitCurve(this.points, 1); + let str = ""; + bezierCurves.map(function(bezier, i) { + if (i == 0) { + str += "M " + bezier[0][0] + " " + bezier[0][1]; + } + str += "C " + bezier[1][0] + " " + bezier[1][1] + ", " + + bezier[2][0] + " " + bezier[2][1] + ", " + + bezier[3][0] + " " + bezier[3][1] + " "; + }); + + return str; + } + get id() { + return this.#fieldID; + } + set directionHead(v) { + if(v instanceof Vec2) this.#directions[0] = v; + } + get directionHead() { + return this.#directions[0]; + } + set directionTail(v) { + if(v instanceof Vec2) this.#directions[1] = v; + } + get directionTail() { + return this.#directions[1]; + } +} + + +class Drawing { + static DT_CANVAS = 1; + static DT_SVG = 2; + #drawing; + #ctx; + #mode; + #instructions = []; + + constructor(mode = Drawing.DT_CANVAS) { + this.mode = mode; + if(this.mode & Drawing.DT_CANVAS) { + this.#drawing = document.createElement('canvas'); + } else if(this.mode & Drawing.DT_SVG) { + this.#drawing = SVG(); + } + + this.stroke = '#333'; + } + clear() { + if(this.mode & Drawing.DT_CANVAS) { + this.c.clearRect(0,0,...this.dimensions.array); + } else if(this.mode & Drawing.DT_SVG) { + this.drawing.clear(); + } + } + rect(position, dimensions) { + if(this.saving) { + this.#instructions.push({ + f: 'rect', + args: [position, dimensions] + }); + } + if(this.mode & Drawing.DT_CANVAS) { + this.c.beginPath(); + this.c.rect(...position.array, ...dimensions.array); + this.c.stroke(); + } else if(this.mode & Drawing.DT_SVG) { + this.drawing.rect(dimensions.width, dimensions.height).move(...position.array).fill("none").stroke('#f06'); + } + } + circle(position, radius) { + if(this.saving) { + this.#instructions.push({ + f: 'circle', + args: [position, radius] + }); + } + if(this.mode & Drawing.DT_CANVAS) { + this.c.beginPath(); + this.c.arc(position.x, position.y, radius, 0, 2 * Math.PI); + if(this.stroke) this.c.stroke(); + } else if(this.mode & Drawing.DT_SVG) { + this.drawing.circle(radius*2).fill("none").stroke(this.stroke).move(...position.subtractScalarNew(radius).array); + } + } + line(a, b) { + if(this.saving) { + this.#instructions.push({ + f: 'line', + args: [a, b] + }); + } + if(this.mode & Drawing.DT_CANVAS) { + this.c.beginPath(); + this.c.moveTo(a.x, a.y); + this.c.lineTo(b.x, b.y); + if(this.stroke) this.c.stroke(); + } else if(this.mode & Drawing.DT_SVG) { + this.drawing.line(...a.array, ...b.array).stroke(this.stroke); + } + } + polyline(points) { + if(this.saving) { + this.#instructions.push({ + f: 'polyline', + args: points + }); + } + if(this.mode & Drawing.DT_CANVAS) { + this.c.beginPath(); + points.forEach((p, i) => { + if(i === 0) this.c.moveTo(p.x, p.y); + else this.c.lineTo(p.x, p.y); + }) + if(this.stroke) this.c.stroke(); + } else if(this.mode & Drawing.DT_SVG) { + this.drawing.polyline(points.map(p => p.array)).fill('none').stroke(this.stroke); + } + } + path(path) { + if(this.mode & Drawing.DT_CANVAS) { + this.c.beginPath(); + const p = new Path2D(path); + if(this.stroke) this.c.stroke(p); + } else if(this.mode & Drawing.DT_SVG) { + this.drawing.path(path).fill('none').stroke(this.stroke); + } + } + polygon(points) { + if(this.saving) { + this.#instructions.push({ + f: 'polygon', + args: [points] + }); + } + if(this.mode & Drawing.DT_CANVAS) { + this.c.beginPath(); + points.forEach((p, i) => { + if(i === 0) this.c.moveTo(p.x, p.y); + else this.c.lineTo(p.x, p.y); + }) + if(this.stroke) this.c.stroke(); + } else if(this.mode & Drawing.DT_SVG) { + this.drawing.polygon(points.map(p => p.array)).fill('none').stroke(this.stroke); + } + } + + download() { + let d; + if(this.mode & Drawing.DT_CANVAS) { + d = new Drawing(Drawing.DT_SVG).size(this.dimensions); + this.#instructions.forEach((i) => { + d[i.f](...i.args); + }); + } else if(this.mode & Drawing.DT_SVG) { + d = this; + } + + const fileName = "untitled.svg" + const url = "data:image/svg+xml;utf8," + encodeURIComponent(d.drawing.svg()); + const link = document.createElement("a"); + link.download = fileName; + link.href = url; + link.click(); + } + + addTo(element) { + if(typeof(element) === 'string') { + if(this.mode & Drawing.DT_CANVAS) { + document.body.querySelector(element).appendChild(this.drawing); + } else if(this.mode & Drawing.DT_SVG) { + this.drawing.addTo('#container'); + } + } + return this; + } + + size(d) { + if(this.mode & Drawing.DT_CANVAS) { + this.drawing.width = d.width; + this.drawing.height = d.height; + } else if(this.mode & Drawing.DT_SVG) { + this.drawing.size(...d.array); + } + this.#dimensions = d; + return this; + } + + #dimensions + set dimensions(v) { + if(v instanceof Vec2) { + this.#dimensions = v; + this.size(v); + } + } + get dimensions() { + return this.#dimensions; + } + + get drawing() { + return this.#drawing; + } + get c() { + if(this.mode & Drawing.DT_CANVAS) { + if(this.#ctx) return this.#ctx; + this.#ctx = this.drawing.getContext('2d'); + return this.#ctx; + } + } + #stroke; + set stroke(v) { + this.#stroke = v; + if(this.mode & Drawing.DT_CANVAS) { + this.c.strokeStyle = v; + } + } + get stroke() { + return this.#stroke; + } + set mode(v) { + if(v & (Drawing.DT_CANVAS | Drawing.DT_SVG)) { + this.#mode = v; + } + } + get mode() { + return this.#mode || Drawing.DT_CANVAS; + } + #saving = false + set saving(v) { + this.#saving = v === true; + } + get saving() { + return this.#saving; + } +} + +// vars.drawing = SVG().addTo('#container').size(config.dimensions.x, config.dimensions.y); + + +class Grid { + static #defaults = { + size: config.dimensions.clone(), + cellSize: new Vec2(50,50), + fill: null + }; + #grid = []; + #size; + #cellSize; + + constructor(settings) { + settings = Object.assign({}, Grid.#defaults, settings); + this.#size = Vec2.interpolate(settings.size) || Grid.#defaults.size; + this.#cellSize = Vec2.interpolate(settings.cellSize) || Grid.#defaults.cellSize; + this.#grid.length = this.gridSize.area; + this.#grid.fill(settings.fill || Grid.#defaults.fill); + } + + addChild(child, i) { + this.#grid[i] = child; + } + addChildAtPosition(child, pos) { + this.#grid[this.getArrayPosition(pos)] = child; + } + addChildAtGridPosition(child, gridPos) { + this.#grid[this.getArrayPositionFromGridPos(gridPos)] = child; + } + + getChild(i) { + return this.#grid[i]; + } + getChildAtPosition(pos) { + return this.#grid[this.getArrayPosition(pos)]; + } + getChildAtGridPosition(gridPos) { + return this.#grid[this.getArrayPositionFromGridPos(gridPos)]; + } + + getGridPositionForIndex(i) { + const gsize = this.gridSize; + return new Vec2(i%gsize.x, Math.floor(i/gsize.x)); + } + + getArrayPositionFromGridPos(gpos) { + const gsize = this.gridSize; + if( + gpos.x < 0 || gpos.x >= gsize.x || + gpos.y < 0 || gpos.y >= gsize.y ) + return null; + + gpos.x = gpos.x % gsize.x; + const arraypos = (gpos.x) + (gpos.y*gsize.x); + return arraypos; + } + + getArrayPosition(realPos) { + const gpos = this.getGridPos(realPos); + return this.getArrayPositionFromGridPos(gpos); + } + + getGridPos(realPos) { + if(realPos instanceof Vec2) { + return realPos.divideNew(this.#cellSize).floor(); + } + // Throw an error + } + getSubPos(realPos) { + if(realPos instanceof Vec2) { + return realPos.modNew(this.#cellSize); + } + // Throw an error + } + getRealPos(gridPos) { + if(gridPos instanceof Vec2) { + return gridPos.multiplyNew(this.#cellSize); + } + // Throw an error + } + + get size() { + return this.#size; + } + get gridSize() { + return this.#size.divideNew(this.#cellSize).floor(); + } + get cellSize() { + return this.#cellSize; + } + get length() { + return this.#grid.length; + } +} + + +class BlueNoise { + static #defaults = { + size: config.dimensions.clone(), + offset: new Vec2(0,0), + r: 100, + k: 32, + d: 5, + initialList: [new Vec2(375,250)], + rigidity: 0 + }; + #activeList = []; + #newPositions = []; + #grid; + #r; + #k; + #d; + #size; + #offset; + #rigidity; + + constructor(settings) { + settings = Object.assign({}, BlueNoise.#defaults, settings); + this.#r = settings.r; + this.#k = settings.k; + this.#d = settings.d; + this.#size = settings.size; + this.#offset = settings.offset; + this.#rigidity = settings.rigidity; + this.#grid = new Grid({ + size: this.#size, + cellSize: this.#r / Math.SQRT2, + // cellSize: 1. / Math.SQRT2 / this.#r, + fill: -1 + }); + this.addElementAtPosition(...settings.initialList); + } + addElementAtPosition(...positions) { + positions.forEach((pos) => { + this.#grid.addChildAtPosition(pos, pos); + this.#activeList.push(pos); + this.#newPositions.push(pos); + }); + } + draw(purge = true) { + this.news.forEach((newPos, i) => { + const r = 3; + const pos = newPos.addNew(this.#offset); + vars.drawing.circle(pos, r); + if(purge) this.news[i] = null; + }); + this.#newPositions = this.news.filter(v => v !== null); + // this.news.length = 0; + } + step() { + const loopL = Math.min(this.active.length, this.#d); + for(let l = 0; l < loopL; l++) { + const ri = Math.floor(0, floatRandomBetween(this.active.length)); + const c = this.active[ri]; + let numfound = 0; + for(var i = 0; i < this.#k; i++) { + const a = floatRandomBetween(0, Math.PI*2); + const l = floatRandomBetween(this.#r, this.#r*2); + let pos = new Vec2(Math.cos(a)*l, Math.sin(a)*l).add(c); + // console.log(this.grid.getChildAtPosition(pos)); + if(this.grid.getChildAtPosition(pos) === -1) { + const gridPos = this.grid.getGridPos(pos); + let tooClose = false; + for (var i = -1; i <= 1; i++) { + for (var j = -1; j <= 1; j++) { + if(i == 0 && j == 0) continue; + const p = this.grid.getChildAtGridPosition(gridPos.addNew(new Vec2(i, j))); + if(p !== -1 && p instanceof Vec2) { + const d = pos.distance(p); + if(d < this.#r*.5) tooClose = true; + } + } + } + if(!tooClose) { + const gridPosition = this.grid.getRealPos(this.grid.getGridPos(pos)).addNew(this.grid.cellSize.scaleNew(.5)); + pos = Vec2.lerp(pos, gridPosition, this.#rigidity); + this.grid.addChildAtPosition(pos, pos); + this.active.push(pos); + this.news.push(pos); + numfound++; + break; + } + } + } + if(numfound === 0) { + this.active.splice(ri, 1); + } + } + } + + get active() { + return this.#activeList; + } + get news() { + return this.#newPositions; + } + get grid() { + return this.#grid; + } + get offset() { + return this.#offset; + } +} + + + +const floatRandomBetween = (min, max) => { + return Math.random() * (max - min) + min; +}; +const clamp = function(a, b, v) { + return Math.min(b, Math.max(a, v)); +} +const lerp = function(a, b, progress) { + return a + progress * (b - a); +} +const hash21 = (p) => { + const o = p.dot(new Vec2(27.609, 57.583)); + return fract(Math.sin(o)*config.seed); +} +const precisionRound = (n, p) => { + const ip = Math.pow(10, p); + return Math.round(n*ip)/ip; +} +const fract = (n, p = 6) => { + const ip = Math.pow(10, p); + const _n = Math.abs(Math.floor(n*ip)/ip); + if(_n < 1) return _n; + return Math.floor(_n % Math.floor(_n)*ip)/ip; +} +const pal = ( t, a, b, c, d ) => { + const mp = c.scaleNew(t).add(d).scale(6.28318); + mp.x = Math.cos(mp.x); + mp.y = Math.cos(mp.y); + mp.z = Math.cos(mp.z); + return a.addNew(b.multiplyNew(mp)); +} +const getColour = (d) => { + const col = pal( + d/70+.65, + new Vec3(0.5,0.5,0.5), + new Vec3(0.5,0.5,0.5), + new Vec3(1.0,1.0,1.0), + new Vec3(0.0,0.1,0.2) ); + + const colour = Math.floor(col.x * 255).toString(16) + Math.floor(col.y * 255).toString(16) + Math.floor(col.z * 255).toString(16); + const a = Math.floor((1.-d/30)*255).toString(16); + return colour+a; +} + + + +//////////////////////////////////////////////////////////////// +// Simplex Noise utility code. Created by Reinder Nijhoff 2020 +// https://turtletoy.net/turtle/6e4e06d42e +// Based on: http://webstaff.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf +//////////////////////////////////////////////////////////////// +function SimplexNoise(seed = 1) { + const grad = [ [1, 1, 0], [-1, 1, 0], [1, -1, 0], [-1, -1, 0], + [1, 0, 1], [-1, 0, 1], [1, 0, -1], [-1, 0, -1], + [0, 1, 1], [0, -1, 1], [0, 1, -1], [0, -1, -1] ]; + const perm = new Uint8Array(512); + + const F2 = (Math.sqrt(3) - 1) / 2, F3 = 1/3; + const G2 = (3 - Math.sqrt(3)) / 6, G3 = 1/6; + + const dot2 = (a, b) => a[0] * b[0] + a[1] * b[1]; + const sub2 = (a, b) => [a[0] - b[0], a[1] - b[1]]; + const dot3 = (a, b) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; + const sub3 = (a, b) => [a[0] - b[0], a[1] - b[1], a[2] - b[2]]; + + class SimplexNoise { + constructor(seed = 1) { + for (let i = 0; i < 512; i++) { + perm[i] = i & 255; + } + for (let i = 0; i < 255; i++) { + const r = (seed = this.hash(i+seed)) % (256 - i) + i; + const swp = perm[i]; + perm[i + 256] = perm[i] = perm[r]; + perm[r + 256] = perm[r] = swp; + } + } + noise2D(p) { + const s = dot2(p, [F2, F2]); + const c = [Math.floor(p[0] + s), Math.floor(p[1] + s)]; + const i = c[0] & 255, j = c[1] & 255; + const t = dot2(c, [G2, G2]); + + const p0 = sub2(p, sub2(c, [t, t])); + const o = p0[0] > p0[1] ? [1, 0] : [0, 1]; + const p1 = sub2(sub2(p0, o), [-G2, -G2]); + const p2 = sub2(p0, [1-2*G2, 1-2*G2]); + + let n = Math.max(0, 0.5-dot2(p0, p0))**4 * dot2(grad[perm[i+perm[j]] % 12], p0); + n += Math.max(0, 0.5-dot2(p1, p1))**4 * dot2(grad[perm[i+o[0]+perm[j+o[1]]] % 12], p1); + n += Math.max(0, 0.5-dot2(p2, p2))**4 * dot2(grad[perm[i+1+perm[j+1]] % 12], p2); + + return 70 * n; + } + hash(i) { + i = 1103515245 * ((i >> 1) ^ i); + const h32 = 1103515245 * (i ^ (i>>3)); + return h32 ^ (h32 >> 16); + } + } + return new SimplexNoise(seed); +} + + + + + + + +// https://github.com/mapbox/delaunator +// +// ISC License +// +// Copyright (c) 2017, Mapbox +// +// Permission to use, copy, modify, and/or distribute this software for any purpose +// with or without fee is hereby granted, provided that the above copyright notice +// and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +// OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +// TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +// THIS SOFTWARE. +// + +const EPSILON = Math.pow(2, -52); +const EDGE_STACK = new Uint32Array(512); + +class Delaunator { + static from(points) { + const n = points.length; + const coords = new Float64Array(n * 2); + + for (let i = 0; i < n; i++) { + const p = points[i]; + coords[2 * i] = p[0]; + coords[2 * i + 1] = p[1]; + } + + return new Delaunator(coords); + } + + constructor(coords) { + const n = coords.length >> 1; + if (n > 0 && typeof coords[0] !== 'number') throw new Error('Expected coords to contain numbers.'); + + this.coords = coords; + + // arrays that will store the triangulation graph + const maxTriangles = 2 * n - 5; + const triangles = this.triangles = new Uint32Array(maxTriangles * 3); + const halfedges = this.halfedges = new Int32Array(maxTriangles * 3); + + // temporary arrays for tracking the edges of the advancing convex hull + this._hashSize = Math.ceil(Math.sqrt(n)); + const hullPrev = this.hullPrev = new Uint32Array(n); // edge to prev edge + const hullNext = this.hullNext = new Uint32Array(n); // edge to next edge + const hullTri = this.hullTri = new Uint32Array(n); // edge to adjacent triangle + const hullHash = new Int32Array(this._hashSize).fill(-1); // angular edge hash + + // populate an array of point indices; calculate input data bbox + const ids = new Uint32Array(n); + let minX = Infinity; + let minY = Infinity; + let maxX = -Infinity; + let maxY = -Infinity; + + for (let i = 0; i < n; i++) { + const x = coords[2 * i]; + const y = coords[2 * i + 1]; + if (x < minX) minX = x; + if (y < minY) minY = y; + if (x > maxX) maxX = x; + if (y > maxY) maxY = y; + ids[i] = i; + } + const cx = (minX + maxX) / 2; + const cy = (minY + maxY) / 2; + + let minDist = Infinity; + let i0, i1, i2; + + // pick a seed point close to the center + for (let i = 0; i < n; i++) { + const d = dist(cx, cy, coords[2 * i], coords[2 * i + 1]); + if (d < minDist) { + i0 = i; + minDist = d; + } + } + const i0x = coords[2 * i0]; + const i0y = coords[2 * i0 + 1]; + + minDist = Infinity; + + // find the point closest to the seed + for (let i = 0; i < n; i++) { + if (i === i0) continue; + const d = dist(i0x, i0y, coords[2 * i], coords[2 * i + 1]); + if (d < minDist && d > 0) { + i1 = i; + minDist = d; + } + } + let i1x = coords[2 * i1]; + let i1y = coords[2 * i1 + 1]; + + let minRadius = Infinity; + + // find the third point which forms the smallest circumcircle with the first two + for (let i = 0; i < n; i++) { + if (i === i0 || i === i1) continue; + const r = circumradius(i0x, i0y, i1x, i1y, coords[2 * i], coords[2 * i + 1]); + if (r < minRadius) { + i2 = i; + minRadius = r; + } + } + let i2x = coords[2 * i2]; + let i2y = coords[2 * i2 + 1]; + + if (minRadius === Infinity) { + throw new Error('No Delaunay triangulation exists for this input.'); + } + + // swap the order of the seed points for counter-clockwise orientation + if (orient(i0x, i0y, i1x, i1y, i2x, i2y)) { + const i = i1; + const x = i1x; + const y = i1y; + i1 = i2; + i1x = i2x; + i1y = i2y; + i2 = i; + i2x = x; + i2y = y; + } + + const center = circumcenter(i0x, i0y, i1x, i1y, i2x, i2y); + this._cx = center.x; + this._cy = center.y; + + const dists = new Float64Array(n); + for (let i = 0; i < n; i++) { + dists[i] = dist(coords[2 * i], coords[2 * i + 1], center.x, center.y); + } + + // sort the points by distance from the seed triangle circumcenter + quicksort(ids, dists, 0, n - 1); + + // set up the seed triangle as the starting hull + this.hullStart = i0; + let hullSize = 3; + + hullNext[i0] = hullPrev[i2] = i1; + hullNext[i1] = hullPrev[i0] = i2; + hullNext[i2] = hullPrev[i1] = i0; + + hullTri[i0] = 0; + hullTri[i1] = 1; + hullTri[i2] = 2; + + hullHash[this._hashKey(i0x, i0y)] = i0; + hullHash[this._hashKey(i1x, i1y)] = i1; + hullHash[this._hashKey(i2x, i2y)] = i2; + + this.trianglesLen = 0; + this._addTriangle(i0, i1, i2, -1, -1, -1); + + for (let k = 0, xp, yp; k < ids.length; k++) { + const i = ids[k]; + const x = coords[2 * i]; + const y = coords[2 * i + 1]; + + // skip near-duplicate points + if (k > 0 && Math.abs(x - xp) <= EPSILON && Math.abs(y - yp) <= EPSILON) continue; + xp = x; + yp = y; + + // skip seed triangle points + if (i === i0 || i === i1 || i === i2) continue; + + // find a visible edge on the convex hull using edge hash + let start = 0; + for (let j = 0, key = this._hashKey(x, y); j < this._hashSize; j++) { + start = hullHash[(key + j) % this._hashSize]; + if (start !== -1 && start !== hullNext[start]) break; + } + + start = hullPrev[start]; + let e = start, q; + while (q = hullNext[e], !orient(x, y, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1])) { + e = q; + if (e === start) { + e = -1; + break; + } + } + if (e === -1) continue; // likely a near-duplicate point; skip it + + // add the first triangle from the point + let t = this._addTriangle(e, i, hullNext[e], -1, -1, hullTri[e]); + + // recursively flip triangles from the point until they satisfy the Delaunay condition + hullTri[i] = this._legalize(t + 2); + hullTri[e] = t; // keep track of boundary triangles on the hull + hullSize++; + + // walk forward through the hull, adding more triangles and flipping recursively + let n = hullNext[e]; + while (q = hullNext[n], orient(x, y, coords[2 * n], coords[2 * n + 1], coords[2 * q], coords[2 * q + 1])) { + t = this._addTriangle(n, i, q, hullTri[i], -1, hullTri[n]); + hullTri[i] = this._legalize(t + 2); + hullNext[n] = n; // mark as removed + hullSize--; + n = q; + } + + // walk backward from the other side, adding more triangles and flipping + if (e === start) { + while (q = hullPrev[e], orient(x, y, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1])) { + t = this._addTriangle(q, i, e, -1, hullTri[e], hullTri[q]); + this._legalize(t + 2); + hullTri[q] = t; + hullNext[e] = e; // mark as removed + hullSize--; + e = q; + } + } + + // update the hull indices + this.hullStart = hullPrev[i] = e; + hullNext[e] = hullPrev[n] = i; + hullNext[i] = n; + + // save the two new edges in the hash table + hullHash[this._hashKey(x, y)] = i; + hullHash[this._hashKey(coords[2 * e], coords[2 * e + 1])] = e; + } + + this.hull = new Uint32Array(hullSize); + for (let i = 0, e = this.hullStart; i < hullSize; i++) { + this.hull[i] = e; + e = hullNext[e]; + } + this.hullPrev = this.hullNext = this.hullTri = null; // get rid of temporary arrays + + // trim typed triangle mesh arrays + this.triangles = triangles.subarray(0, this.trianglesLen); + this.halfedges = halfedges.subarray(0, this.trianglesLen); + } + + _hashKey(x, y) { + return Math.floor(pseudoAngle(x - this._cx, y - this._cy) * this._hashSize) % this._hashSize; + } + + _legalize(a) { + const {triangles, coords, halfedges} = this; + + let i = 0; + let ar = 0; + + // recursion eliminated with a fixed-size stack + while (true) { + const b = halfedges[a]; + + /* if the pair of triangles doesn't satisfy the Delaunay condition + * (p1 is inside the circumcircle of [p0, pl, pr]), flip them, + * then do the same check/flip recursively for the new pair of triangles + * + * pl pl + * /||\ / \ + * al/ || \bl al/ \a + * / || \ / \ + * / a||b \ flip /___ar___\ + * p0\ || /p1 => p0\---bl---/p1 + * \ || / \ / + * ar\ || /br b\ /br + * \||/ \ / + * pr pr + */ + const a0 = a - a % 3; + ar = a0 + (a + 2) % 3; + + if (b === -1) { // convex hull edge + if (i === 0) break; + a = EDGE_STACK[--i]; + continue; + } + + const b0 = b - b % 3; + const al = a0 + (a + 1) % 3; + const bl = b0 + (b + 2) % 3; + + const p0 = triangles[ar]; + const pr = triangles[a]; + const pl = triangles[al]; + const p1 = triangles[bl]; + + const illegal = inCircle( + coords[2 * p0], coords[2 * p0 + 1], + coords[2 * pr], coords[2 * pr + 1], + coords[2 * pl], coords[2 * pl + 1], + coords[2 * p1], coords[2 * p1 + 1]); + + if (illegal) { + triangles[a] = p1; + triangles[b] = p0; + + const hbl = halfedges[bl]; + + // edge swapped on the other side of the hull (rare); fix the halfedge reference + if (hbl === -1) { + let e = this.hullStart; + do { + if (this.hullTri[e] === bl) { + this.hullTri[e] = a; + break; + } + e = this.hullNext[e]; + } while (e !== this.hullStart); + } + this._link(a, hbl); + this._link(b, halfedges[ar]); + this._link(ar, bl); + + const br = b0 + (b + 1) % 3; + + // don't worry about hitting the cap: it can only happen on extremely degenerate input + if (i < EDGE_STACK.length) { + EDGE_STACK[i++] = br; + } + } else { + if (i === 0) break; + a = EDGE_STACK[--i]; + } + } + + return ar; + } + + _link(a, b) { + this.halfedges[a] = b; + if (b !== -1) this.halfedges[b] = a; + } + + // add a new triangle given vertex indices and adjacent half-edge ids + _addTriangle(i0, i1, i2, a, b, c) { + const t = this.trianglesLen; + + this.triangles[t] = i0; + this.triangles[t + 1] = i1; + this.triangles[t + 2] = i2; + + this._link(t, a); + this._link(t + 1, b); + this._link(t + 2, c); + + this.trianglesLen += 3; + + return t; + } +} + +// monotonically increases with real angle, but doesn't need expensive trigonometry +function pseudoAngle(dx, dy) { + const p = dx / (Math.abs(dx) + Math.abs(dy)); + return (dy > 0 ? 3 - p : 1 + p) / 4; // [0..1] +} + +function dist(ax, ay, bx, by) { + const dx = ax - bx; + const dy = ay - by; + return dx * dx + dy * dy; +} + +function orient(px, py, qx, qy, rx, ry) { + return (qy - py) * (rx - qx) - (qx - px) * (ry - qy) < 0; +} + +function inCircle(ax, ay, bx, by, cx, cy, px, py) { + const dx = ax - px; + const dy = ay - py; + const ex = bx - px; + const ey = by - py; + const fx = cx - px; + const fy = cy - py; + + const ap = dx * dx + dy * dy; + const bp = ex * ex + ey * ey; + const cp = fx * fx + fy * fy; + + return dx * (ey * cp - bp * fy) - + dy * (ex * cp - bp * fx) + + ap * (ex * fy - ey * fx) < 0; +} + +function circumradius(ax, ay, bx, by, cx, cy) { + const dx = bx - ax; + const dy = by - ay; + const ex = cx - ax; + const ey = cy - ay; + + const bl = dx * dx + dy * dy; + const cl = ex * ex + ey * ey; + const d = 0.5 / (dx * ey - dy * ex); + + const x = (ey * bl - dy * cl) * d; + const y = (dx * cl - ex * bl) * d; + + return x * x + y * y; +} + +function circumcenter(ax, ay, bx, by, cx, cy) { + const dx = bx - ax; + const dy = by - ay; + const ex = cx - ax; + const ey = cy - ay; + + const bl = dx * dx + dy * dy; + const cl = ex * ex + ey * ey; + const d = 0.5 / (dx * ey - dy * ex); + + const x = ax + (ey * bl - dy * cl) * d; + const y = ay + (dx * cl - ex * bl) * d; + + return {x, y}; +} + +function quicksort(ids, dists, left, right) { + if (right - left <= 20) { + for (let i = left + 1; i <= right; i++) { + const temp = ids[i]; + const tempDist = dists[temp]; + let j = i - 1; + while (j >= left && dists[ids[j]] > tempDist) ids[j + 1] = ids[j--]; + ids[j + 1] = temp; + } + } else { + const median = (left + right) >> 1; + let i = left + 1; + let j = right; + swap(ids, median, i); + if (dists[ids[left]] > dists[ids[right]]) swap(ids, left, right); + if (dists[ids[i]] > dists[ids[right]]) swap(ids, i, right); + if (dists[ids[left]] > dists[ids[i]]) swap(ids, left, i); + + const temp = ids[i]; + const tempDist = dists[temp]; + while (true) { + do i++; while (dists[ids[i]] < tempDist); + do j--; while (dists[ids[j]] > tempDist); + if (j < i) break; + swap(ids, i, j); + } + ids[left + 1] = ids[j]; + ids[j] = temp; + + if (right - i + 1 >= j - left) { + quicksort(ids, dists, i, right); + quicksort(ids, dists, left, j - 1); + } else { + quicksort(ids, dists, left, j - 1); + quicksort(ids, dists, i, right); + } + } +} + +function swap(arr, i, j) { + const tmp = arr[i]; + arr[i] = arr[j]; + arr[j] = tmp; +} \ No newline at end of file diff --git a/confluent-flow/src/style.scss b/confluent-flow/src/style.scss new file mode 100644 index 0000000..9476006 --- /dev/null +++ b/confluent-flow/src/style.scss @@ -0,0 +1,27 @@ +document, body { + background: #111122; + margin: 0; + min-height: 100vh; +} +body { + align-items: center; + display: flex; + justify-content: center; +} + +#container { + align-items: center; + display: flex; + flex-direction: column; +} +#container>:first-child { + cursor: pointer; +} + +button { + max-width: 200px; + margin-top: 10px; +} +.tracer { + color: #fff; +} \ No newline at end of file diff --git a/conic-gradient-in-svg/LICENSE.txt b/conic-gradient-in-svg/LICENSE.txt new file mode 100644 index 0000000..67b5683 --- /dev/null +++ b/conic-gradient-in-svg/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2022 by Eastonium (https://codepen.io/eastonium/pen/abOpdEm) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/conic-gradient-in-svg/README.md b/conic-gradient-in-svg/README.md new file mode 100644 index 0000000..6703406 --- /dev/null +++ b/conic-gradient-in-svg/README.md @@ -0,0 +1,4 @@ +# Conic Gradient in SVG + +A Pen created on CodePen.io. Original URL: [https://codepen.io/eastonium/pen/abOpdEm](https://codepen.io/eastonium/pen/abOpdEm). + diff --git a/conic-gradient-in-svg/dist/index.html b/conic-gradient-in-svg/dist/index.html new file mode 100644 index 0000000..0c59626 --- /dev/null +++ b/conic-gradient-in-svg/dist/index.html @@ -0,0 +1,22 @@ + + + + + CodePen - Conic Gradient in SVG + + + + + + + + + + +
    + + + + + + diff --git a/conic-gradient-in-svg/dist/style.css b/conic-gradient-in-svg/dist/style.css new file mode 100644 index 0000000..6b9a28a --- /dev/null +++ b/conic-gradient-in-svg/dist/style.css @@ -0,0 +1,5 @@ +div { + width: 100%; + height: 100%; + background: conic-gradient(darkorange, hotpink, mediumaquamarine); +} \ No newline at end of file diff --git a/conic-gradient-in-svg/src/index.html b/conic-gradient-in-svg/src/index.html new file mode 100644 index 0000000..64a6bec --- /dev/null +++ b/conic-gradient-in-svg/src/index.html @@ -0,0 +1,8 @@ + + + + + +
    + + \ No newline at end of file diff --git a/conic-gradient-in-svg/src/style.css b/conic-gradient-in-svg/src/style.css new file mode 100644 index 0000000..6b9a28a --- /dev/null +++ b/conic-gradient-in-svg/src/style.css @@ -0,0 +1,5 @@ +div { + width: 100%; + height: 100%; + background: conic-gradient(darkorange, hotpink, mediumaquamarine); +} \ No newline at end of file diff --git a/conic-gradients-css-masks-no-ff/README.markdown b/conic-gradients-css-masks-no-ff/README.markdown new file mode 100644 index 0000000..c6ea6cd --- /dev/null +++ b/conic-gradients-css-masks-no-ff/README.markdown @@ -0,0 +1,4 @@ +# Conic gradients + CSS masks (no FF) + _A Pen created at CodePen.io. Original URL: [https://codepen.io/yoksel/pen/xxGJOPj](https://codepen.io/yoksel/pen/xxGJOPj). + + Demo doesn't work in FF because FF hasn't conic gradients support \ No newline at end of file diff --git a/conic-gradients-css-masks-no-ff/dist/index.html b/conic-gradients-css-masks-no-ff/dist/index.html new file mode 100644 index 0000000..127f28e --- /dev/null +++ b/conic-gradients-css-masks-no-ff/dist/index.html @@ -0,0 +1,23 @@ + + + + + CodePen - Conic gradients + CSS masks (no FF) + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/conic-gradients-css-masks-no-ff/dist/style.css b/conic-gradients-css-masks-no-ff/dist/style.css new file mode 100644 index 0000000..9f4295b --- /dev/null +++ b/conic-gradients-css-masks-no-ff/dist/style.css @@ -0,0 +1,97 @@ +:root { + --step: calc(100% / 7.5); + --side: 30vmin; + --offset: 15vmin; + --offset-neg: -15vmin; + font-size: 16px; +} + +body { + min-height: 100vh; + display: -webkit-box; + display: flex; + -webkit-box-pack: center; + justify-content: center; + -webkit-box-align: center; + align-items: center; + -webkit-perspective: 300px; + perspective: 300px; + -webkit-perspective-origin: center center; + perspective-origin: center center; + overflow: hidden; + background: #000; +} + +.side, +.container { + width: var(--side); + height: var(--side); +} + +.container { + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + -webkit-animation: rotate 10s infinite linear; + animation: rotate 10s infinite linear; +} +.container:hover { + -webkit-animation-play-state: paused; + animation-play-state: paused; +} + +.side { + position: absolute; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + background: conic-gradient(teal, purple, crimson, tomato, gold, yellowgreen, mediumaquamarine, teal); + -webkit-mask-image: repeating-radial-gradient(rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) calc(var(--step) * 1), black 0, black calc(var(--step) * 1.5), rgba(0, 0, 0, 0) 0); + mask-image: repeating-radial-gradient(rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) calc(var(--step) * 1), black 0, black calc(var(--step) * 1.5), rgba(0, 0, 0, 0) 0); + -webkit-mask-size: 50% 50%; + mask-size: 50% 50%; + -webkit-mask-position: center center; + mask-position: center center; +} + +.back { + -webkit-transform: translateZ(var(--offset-neg)) rotateY(180deg); + transform: translateZ(var(--offset-neg)) rotateY(180deg); +} + +.left { + -webkit-transform: translateX(var(--offset-neg)) rotateY(90deg); + transform: translateX(var(--offset-neg)) rotateY(90deg); +} + +.right { + -webkit-transform: translateX(var(--offset)) rotateY(-90deg) rotateZ(90deg); + transform: translateX(var(--offset)) rotateY(-90deg) rotateZ(90deg); +} + +.top { + -webkit-transform: translateY(var(--offset-neg)) rotateX(90deg) rotateZ(-90deg); + transform: translateY(var(--offset-neg)) rotateX(90deg) rotateZ(-90deg); +} + +.bottom { + -webkit-transform: translateY(var(--offset)) rotateX(90deg) rotateZ(90deg); + transform: translateY(var(--offset)) rotateX(90deg) rotateZ(90deg); +} + +.front { + -webkit-transform: translateZ(var(--offset)) rotateZ(90deg); + transform: translateZ(var(--offset)) rotateZ(90deg); +} + +@-webkit-keyframes rotate { + 100% { + -webkit-transform: rotateX(360deg) rotateY(-360deg) rotateZ(360deg); + transform: rotateX(360deg) rotateY(-360deg) rotateZ(360deg); + } +} + +@keyframes rotate { + 100% { + -webkit-transform: rotateX(360deg) rotateY(-360deg) rotateZ(360deg); + transform: rotateX(360deg) rotateY(-360deg) rotateZ(360deg); + } +} \ No newline at end of file diff --git a/conic-gradients-css-masks-no-ff/license.txt b/conic-gradients-css-masks-no-ff/license.txt new file mode 100644 index 0000000..1cfe27a --- /dev/null +++ b/conic-gradients-css-masks-no-ff/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by yoksel (https://codepen.io/yoksel/pen/xxGJOPj) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/conic-gradients-css-masks-no-ff/src/index.html b/conic-gradients-css-masks-no-ff/src/index.html new file mode 100644 index 0000000..5a89dc8 --- /dev/null +++ b/conic-gradients-css-masks-no-ff/src/index.html @@ -0,0 +1,8 @@ +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/conic-gradients-css-masks-no-ff/src/style.scss b/conic-gradients-css-masks-no-ff/src/style.scss new file mode 100644 index 0000000..2275d61 --- /dev/null +++ b/conic-gradients-css-masks-no-ff/src/style.scss @@ -0,0 +1,88 @@ +:root { + --step: calc(100% / 7.5); + --side: 30vmin; + --offset: 15vmin; + --offset-neg: -15vmin; + font-size: 16px; +} + +body { + min-height: 100vh; + display: flex; + justify-content: center; + align-items: center; + perspective: 300px; + perspective-origin: center center; + overflow: hidden; + background: #000; +} + +.side, +.container { + width: var(--side); + height: var(--side); +} + +.container { + transform-style: preserve-3d; + animation: rotate 10s infinite linear; + + &:hover { + animation-play-state: paused; + } +} + +.side { + position: absolute; + transform-style: preserve-3d; + background: conic-gradient( + teal, + purple, + crimson, + tomato, + gold, + yellowgreen, + mediumaquamarine, + teal + ); + + mask-image: repeating-radial-gradient( + rgba(0, 0, 0, 0) 0, + rgba(0, 0, 0, 0) calc(var(--step) * 1), + black 0, + black calc(var(--step) * 1.5), + rgba(0, 0, 0, 0) 0 + ); + mask-size: 50% 50%; + mask-position: center center; +} + +.back { + transform: translateZ(var(--offset-neg)) rotateY(180deg); +} + +.left { + transform: translateX(var(--offset-neg)) rotateY(90deg); +} + +.right { + transform: translateX(var(--offset)) rotateY(-90deg) rotateZ(90deg); +} + +.top { + transform: translateY(var(--offset-neg)) rotateX(90deg) rotateZ(-90deg); +} + +.bottom { + transform: translateY(var(--offset)) rotateX(90deg) rotateZ(90deg); +} + +.front { + transform: translateZ(var(--offset)) rotateZ(90deg); +} + +@keyframes rotate { + 100% { + transform: rotateX(360deg) rotateY(-360deg) rotateZ(360deg); + } +} diff --git a/container-query-bookstore/README.markdown b/container-query-bookstore/README.markdown new file mode 100644 index 0000000..85c1479 --- /dev/null +++ b/container-query-bookstore/README.markdown @@ -0,0 +1,5 @@ +# Container Query Bookstore + +A Pen created on CodePen.io. Original URL: [https://codepen.io/mxbck/pen/XWMrMOp](https://codepen.io/mxbck/pen/XWMrMOp). + +A Container Query Drag-and-Drop Interface. Demo works only in Chrome Canary with Container Queries enabled in chrome://flags diff --git a/container-query-bookstore/dist/index.html b/container-query-bookstore/dist/index.html new file mode 100644 index 0000000..ceb071d --- /dev/null +++ b/container-query-bookstore/dist/index.html @@ -0,0 +1,218 @@ + + + + + CodePen - Container Query Bookstore + + + + + + + + + + + + + +
    + +
    +

    CQ Bookstore

    +

    by MXB

    +
    + + +
    +

    Featured

    + + + + The Wizard of Oz + L. Frank Baum + + +
    + + +
    +

    Bestsellers

    + +
    + โš ๏ธ Your browser does not support Container Queries - Enable them in Chrome Canary at chrome://flags to see this demo. +
    + +
    + + + + 1984 + George Orwell + + + + + Little Women + Louisa May Alcott + + + + + Fahrenheit 451 + Ray Bradbury + + + + + Moby Dick + Herman Melville + + + + + Pride and Prejudice + Jane Austen + + + + + Sputnik Sweetheart + Haruki Murakami + + +
    +
    + + + +
    +

    Cart

    + + + + Don Quixote + Miguel de Cervantes + + +
    +
    + + + + + + + + diff --git a/container-query-bookstore/dist/script.js b/container-query-bookstore/dist/script.js new file mode 100644 index 0000000..62ea4e9 --- /dev/null +++ b/container-query-bookstore/dist/script.js @@ -0,0 +1,51 @@ +// Init Dragula +if (dragula) { + const drg = dragula(Array.from(document.querySelectorAll('.js-drag-container'))) + drg.on('drop', (el, target, source, sibling) => { + if (target.classList.contains('stage')) { + const color = el.getAttribute('color') + target.style.setProperty('--bg-color', color) + + if (sibling && sibling.tagName.toLowerCase() === 'book-element') { + source.appendChild(sibling) + } + } + }) +} + +// Custom Element Definition +class BookElement extends HTMLElement { + constructor() { + super() + this.template = document.getElementById('book-template') + + if (this.template) { + this.attachShadow({ mode: "open" }).appendChild(this.template.content.cloneNode(true)) + } + } + + static get observedAttributes() { + return ['color']; + } + + attributeChangedCallback(attrName, oldValue, newValue) { + if (newValue !== oldValue) { + this[attrName] = this.getAttribute(attrName); + this.update(); + } + } + + connectedCallback() { + this.update(); + } + + update() { + if (this.color) { + this.style.setProperty('--cover-color', this.color) + } + } +} + +if ('customElements' in window) { + customElements.define('book-element', BookElement) +} \ No newline at end of file diff --git a/container-query-bookstore/dist/style.css b/container-query-bookstore/dist/style.css new file mode 100644 index 0000000..107ff76 --- /dev/null +++ b/container-query-bookstore/dist/style.css @@ -0,0 +1,119 @@ +:root { + --spacing: 1rem; + --highlight-color: #52947c; +} + +body { + font-family: sans-serif; +} + +/* Basic Layout Sections */ + +.layout { + min-height: 100vh; +} + +.header { + display:flex; + align-items: center; + justify-content: space-between; + height: 3.5rem; + padding: 0 var(--spacing); + box-shadow:0 2px 16px rgba(0,0,0,0.1); + position:relative; + z-index: 1; +} + +.stage, +.content, +.cart { + padding: var(--spacing); + overflow-y: auto; +} + +.stage { + position:relative; +} +.stage::after { + content: ""; + position:absolute; + z-index:-1; + top:0; + left:0; + right:0; + bottom:0; + background-color: var(--bg-color, var(--highlight-color)); + filter: brightness(1.5); + transition: background-color .5s linear; + opacity:0.25; +} + +.booklist { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(201px, 1fr)); + gap: var(--spacing); +} + +.cart { + background-color: #f5f3f3; +} +.cart > * + * { + margin-top: 1rem; +} + +/* Desktop Layout */ + +@media (min-width: 1260px) { + .layout { + --spacing: 2rem; + + display:grid; + height: 100vh; + grid-template-rows: 3.5rem auto; + grid-template-columns: 480px 1fr 130px; + overflow-y: hidden; + } + .header { + grid-column: 1 / -1; + } +} + +/* No-CQ Support Notice */ + +.support-notice { + padding: 1rem; + border-radius: .25rem; + margin-bottom: var(--spacing); + border: 2px solid salmon; + background-color: rgba(salmon, .1); + line-height: 1.4; +} + +@supports (contain: layout inline-size) { + .support-notice { + display: none; + } +} + +/* Misc Helper Classes */ + +.gu-mirror { + width: 180px !important; +} + +.capitals { + font-size: .75rem; + font-weight: bold; + letter-spacing:.25em; + text-transform: uppercase; + margin-bottom: var(--spacing); +} + +.logo { + font-family: "Merriweather", serif; +} + +.by a { + color: inherit; + text-decoration:underline; +} \ No newline at end of file diff --git a/container-query-bookstore/license.txt b/container-query-bookstore/license.txt new file mode 100644 index 0000000..8f18a1c --- /dev/null +++ b/container-query-bookstore/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Max Bรถck (https://codepen.io/mxbck/pen/XWMrMOp) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/container-query-bookstore/src/index.html b/container-query-bookstore/src/index.html new file mode 100644 index 0000000..aa76867 --- /dev/null +++ b/container-query-bookstore/src/index.html @@ -0,0 +1,201 @@ + + + + + + +
    + +
    +

    CQ Bookstore

    +

    by MXB

    +
    + + +
    +

    Featured

    + + + + The Wizard of Oz + L. Frank Baum + + +
    + + +
    +

    Bestsellers

    + +
    + โš ๏ธ Your browser does not support Container Queries - Enable them in Chrome Canary at chrome://flags to see this demo. +
    + +
    + + + + 1984 + George Orwell + + + + + Little Women + Louisa May Alcott + + + + + Fahrenheit 451 + Ray Bradbury + + + + + Moby Dick + Herman Melville + + + + + Pride and Prejudice + Jane Austen + + + + + Sputnik Sweetheart + Haruki Murakami + + +
    +
    + + + +
    +

    Cart

    + + + + Don Quixote + Miguel de Cervantes + + +
    +
    + + + \ No newline at end of file diff --git a/container-query-bookstore/src/script.js b/container-query-bookstore/src/script.js new file mode 100644 index 0000000..62ea4e9 --- /dev/null +++ b/container-query-bookstore/src/script.js @@ -0,0 +1,51 @@ +// Init Dragula +if (dragula) { + const drg = dragula(Array.from(document.querySelectorAll('.js-drag-container'))) + drg.on('drop', (el, target, source, sibling) => { + if (target.classList.contains('stage')) { + const color = el.getAttribute('color') + target.style.setProperty('--bg-color', color) + + if (sibling && sibling.tagName.toLowerCase() === 'book-element') { + source.appendChild(sibling) + } + } + }) +} + +// Custom Element Definition +class BookElement extends HTMLElement { + constructor() { + super() + this.template = document.getElementById('book-template') + + if (this.template) { + this.attachShadow({ mode: "open" }).appendChild(this.template.content.cloneNode(true)) + } + } + + static get observedAttributes() { + return ['color']; + } + + attributeChangedCallback(attrName, oldValue, newValue) { + if (newValue !== oldValue) { + this[attrName] = this.getAttribute(attrName); + this.update(); + } + } + + connectedCallback() { + this.update(); + } + + update() { + if (this.color) { + this.style.setProperty('--cover-color', this.color) + } + } +} + +if ('customElements' in window) { + customElements.define('book-element', BookElement) +} \ No newline at end of file diff --git a/container-query-bookstore/src/style.css b/container-query-bookstore/src/style.css new file mode 100644 index 0000000..107ff76 --- /dev/null +++ b/container-query-bookstore/src/style.css @@ -0,0 +1,119 @@ +:root { + --spacing: 1rem; + --highlight-color: #52947c; +} + +body { + font-family: sans-serif; +} + +/* Basic Layout Sections */ + +.layout { + min-height: 100vh; +} + +.header { + display:flex; + align-items: center; + justify-content: space-between; + height: 3.5rem; + padding: 0 var(--spacing); + box-shadow:0 2px 16px rgba(0,0,0,0.1); + position:relative; + z-index: 1; +} + +.stage, +.content, +.cart { + padding: var(--spacing); + overflow-y: auto; +} + +.stage { + position:relative; +} +.stage::after { + content: ""; + position:absolute; + z-index:-1; + top:0; + left:0; + right:0; + bottom:0; + background-color: var(--bg-color, var(--highlight-color)); + filter: brightness(1.5); + transition: background-color .5s linear; + opacity:0.25; +} + +.booklist { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(201px, 1fr)); + gap: var(--spacing); +} + +.cart { + background-color: #f5f3f3; +} +.cart > * + * { + margin-top: 1rem; +} + +/* Desktop Layout */ + +@media (min-width: 1260px) { + .layout { + --spacing: 2rem; + + display:grid; + height: 100vh; + grid-template-rows: 3.5rem auto; + grid-template-columns: 480px 1fr 130px; + overflow-y: hidden; + } + .header { + grid-column: 1 / -1; + } +} + +/* No-CQ Support Notice */ + +.support-notice { + padding: 1rem; + border-radius: .25rem; + margin-bottom: var(--spacing); + border: 2px solid salmon; + background-color: rgba(salmon, .1); + line-height: 1.4; +} + +@supports (contain: layout inline-size) { + .support-notice { + display: none; + } +} + +/* Misc Helper Classes */ + +.gu-mirror { + width: 180px !important; +} + +.capitals { + font-size: .75rem; + font-weight: bold; + letter-spacing:.25em; + text-transform: uppercase; + margin-bottom: var(--spacing); +} + +.logo { + font-family: "Merriweather", serif; +} + +.by a { + color: inherit; + text-decoration:underline; +} \ No newline at end of file diff --git a/context-menu-with-feather-icons/README.markdown b/context-menu-with-feather-icons/README.markdown new file mode 100644 index 0000000..a435693 --- /dev/null +++ b/context-menu-with-feather-icons/README.markdown @@ -0,0 +1,7 @@ +# Context menu with Feather icons + +A Pen created on CodePen.io. Original URL: [https://codepen.io/havardob/pen/YzwzQgm](https://codepen.io/havardob/pen/YzwzQgm). + +Inspired by https://dribbble.com/shots/11117547-Popover-components + +Icons from https://feathericons.com/ diff --git a/context-menu-with-feather-icons/dist/index.html b/context-menu-with-feather-icons/dist/index.html new file mode 100644 index 0000000..d054e75 --- /dev/null +++ b/context-menu-with-feather-icons/dist/index.html @@ -0,0 +1,43 @@ + + + + + CodePen - Context menu with Feather icons + + + + + + +
    + + +
    + + + + + diff --git a/context-menu-with-feather-icons/dist/script.js b/context-menu-with-feather-icons/dist/script.js new file mode 100644 index 0000000..3974f01 --- /dev/null +++ b/context-menu-with-feather-icons/dist/script.js @@ -0,0 +1 @@ +feather.replace() \ No newline at end of file diff --git a/context-menu-with-feather-icons/dist/style.css b/context-menu-with-feather-icons/dist/style.css new file mode 100644 index 0000000..a69ed39 --- /dev/null +++ b/context-menu-with-feather-icons/dist/style.css @@ -0,0 +1,142 @@ +*, +*:after, +*:before { + box-sizing: border-box; +} + +:root { + --color-bg-primary: #d0d6df; + --color-bg-primary-offset: #f1f3f7; + --color-bg-secondary: #fff; + --color-text-primary: #3a3c42; + --color-text-primary-offset: #898c94; + --color-orange: #dc9960; + --color-green: #1eb8b1; + --color-purple: #657cc4; + --color-black: var(--color-text-primary); + --color-red: #d92027; +} + +body { + font-family: "Inter", sans-serif; + background-color: var(--color-bg-primary); + color: var(--color-text-primary); +} + +.menu { + display: -webkit-box; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + background-color: var(--color-bg-secondary); + border-radius: 10px; + box-shadow: 0 10px 20px rgba(64, 64, 64, 0.15); +} + +.menu-list { + margin: 0; + display: block; + width: 100%; + padding: 8px; +} +.menu-list + .menu-list { + border-top: 1px solid #ddd; +} + +.menu-sub-list { + display: none; + padding: 8px; + background-color: var(--color-bg-secondary); + border-radius: 10px; + box-shadow: 0 10px 20px rgba(64, 64, 64, 0.15); + position: absolute; + left: 100%; + right: 0; + z-index: 100; + width: 100%; + top: 0; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; +} +.menu-sub-list:hover { + display: -webkit-box; + display: flex; +} + +.menu-item { + position: relative; +} + +.menu-button { + font: inherit; + border: 0; + padding: 8px 8px; + padding-right: 36px; + width: 100%; + border-radius: 8px; + display: -webkit-box; + display: flex; + -webkit-box-align: center; + align-items: center; + position: relative; + background-color: var(--color-bg-secondary); +} +.menu-button:hover { + background-color: var(--color-bg-primary-offset); +} +.menu-button:hover + .menu-sub-list { + display: -webkit-box; + display: flex; +} +.menu-button:hover svg { + stroke: var(--color-text-primary); +} +.menu-button svg { + width: 20px; + height: 20px; + margin-right: 10px; + stroke: var(--color-text-primary-offset); +} +.menu-button svg:nth-of-type(2) { + margin-right: 0; + position: absolute; + right: 8px; +} +.menu-button--delete:hover { + color: var(--color-red); +} +.menu-button--delete:hover svg:first-of-type { + stroke: var(--color-red); +} +.menu-button--orange svg:first-of-type { + stroke: var(--color-orange); +} +.menu-button--green svg:first-of-type { + stroke: var(--color-green); +} +.menu-button--purple svg:first-of-type { + stroke: var(--color-purple); +} +.menu-button--black svg:first-of-type { + stroke: var(--color-black); +} +.menu-button--checked svg:nth-of-type(2) { + stroke: var(--color-purple); +} + +.container { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + width: 100%; + display: -webkit-box; + display: flex; + -webkit-box-align: center; + align-items: center; + -webkit-box-pack: center; + justify-content: center; +} \ No newline at end of file diff --git a/context-menu-with-feather-icons/license.txt b/context-menu-with-feather-icons/license.txt new file mode 100644 index 0000000..01a8173 --- /dev/null +++ b/context-menu-with-feather-icons/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Hรฅvard Brynjulfsen (https://codepen.io/havardob/pen/YzwzQgm) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/context-menu-with-feather-icons/src/index.html b/context-menu-with-feather-icons/src/index.html new file mode 100644 index 0000000..203416b --- /dev/null +++ b/context-menu-with-feather-icons/src/index.html @@ -0,0 +1,27 @@ +
    + + +
    \ No newline at end of file diff --git a/context-menu-with-feather-icons/src/script.js b/context-menu-with-feather-icons/src/script.js new file mode 100644 index 0000000..3974f01 --- /dev/null +++ b/context-menu-with-feather-icons/src/script.js @@ -0,0 +1 @@ +feather.replace() \ No newline at end of file diff --git a/context-menu-with-feather-icons/src/style.scss b/context-menu-with-feather-icons/src/style.scss new file mode 100644 index 0000000..c1200a2 --- /dev/null +++ b/context-menu-with-feather-icons/src/style.scss @@ -0,0 +1,157 @@ +*, +*:after, +*:before { + box-sizing: border-box; +} + +:root { + --color-bg-primary: #d0d6df; + --color-bg-primary-offset: #f1f3f7; + --color-bg-secondary: #fff; + --color-text-primary: #3a3c42; + --color-text-primary-offset: #898c94; + --color-orange: #dc9960; + --color-green: #1eb8b1; + --color-purple: #657cc4; + --color-black: var(--color-text-primary); + --color-red: #d92027; +} + +body { + font-family: "Inter", sans-serif; + background-color: var(--color-bg-primary); + color: var(--color-text-primary); +} + +.menu { + display: flex; + flex-direction: column; + background-color: var(--color-bg-secondary); + border-radius: 10px; + box-shadow: 0 10px 20px rgba(#404040, 0.15); +} + +.menu-list { + margin: 0; + display: block; + width: 100%; + padding: 8px; + & + .menu-list { + border-top: 1px solid #ddd; + } +} +.menu-sub-list { + display: none; + padding: 8px; + background-color: var(--color-bg-secondary); + border-radius: 10px; + box-shadow: 0 10px 20px rgba(#404040, 0.15); + position: absolute; + left: 100%; + right: 0; + z-index: 100; + width: 100%; + top: 0; + flex-direction: column; + // &:after { + // content: ""; + // position: absolute; + // left: -12px; + // top: 0; + // right: 0; + // bottom: 0; + // display: block; + // outline: 2px solid hotpink; + // } + &:hover { + display: flex; + } +} + +.menu-item { + position: relative; +} + +.menu-button { + font: inherit; + border: 0; + padding: 8px 8px; + padding-right: 36px; + width: 100%; + border-radius: 8px; + display: flex; + align-items: center; + position: relative; + background-color: var(--color-bg-secondary); + &:hover { + background-color: var(--color-bg-primary-offset); + & + .menu-sub-list { + display: flex; + } + svg { + stroke: var(--color-text-primary); + } + } + svg { + width: 20px; + height: 20px; + margin-right: 10px; + stroke: var(--color-text-primary-offset); + &:nth-of-type(2) { + margin-right: 0; + position: absolute; + right: 8px; + } + } + + &--delete { + &:hover { + color: var(--color-red); + svg:first-of-type { + stroke: var(--color-red); + } + } + } + + &--orange { + svg:first-of-type { + stroke: var(--color-orange); + } + } + + &--green { + svg:first-of-type { + stroke: var(--color-green); + } + } + &--purple { + svg:first-of-type { + stroke: var(--color-purple); + } + } + &--black { + svg:first-of-type { + stroke: var(--color-black); + } + } + + &--checked { + svg:nth-of-type(2) { + stroke: var(--color-purple); + } + } +} + +// Codepen spesific styling - only to center the elements in the pen preview and viewport +.container { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + width: 100%; + display: flex; + align-items: center; + justify-content: center; +} +// End Codepen spesific styling diff --git a/copy-table-as-csv-web-component/README.markdown b/copy-table-as-csv-web-component/README.markdown new file mode 100644 index 0000000..188a3ad --- /dev/null +++ b/copy-table-as-csv-web-component/README.markdown @@ -0,0 +1,5 @@ +# as CSV web component + +A Pen created on CodePen.io. Original URL: [https://codepen.io/davatron5000/pen/YzEYKwR](https://codepen.io/davatron5000/pen/YzEYKwR). + + diff --git a/copy-table-as-csv-web-component/dist/index.html b/copy-table-as-csv-web-component/dist/index.html new file mode 100644 index 0000000..6a2e896 --- /dev/null +++ b/copy-table-as-csv-web-component/dist/index.html @@ -0,0 +1,72 @@ + + + + + CodePen - <copy-table> as CSV web component + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    itemitemitemitemitem
    itemitemitemitemitem
    itemitemitemitemitem
    itemitemitemitemitem
    itemitemitemitemitem
    +
    + +
    + + + + + + + + + + + + + +
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Iure similique quisquam incidunt dignissimos minus magni sunt et autem rem omnis quos exercitationem saepe aut excepturi quas, aperiam deserunt ullam non?Lorem ipsum dolor sit amet consectetur adipisicing elit. Iure similique quisquam incidunt dignissimos minus magni sunt et autem rem omnis quos exercitationem saepe aut excepturi quas, aperiam deserunt ullam non?Lorem ipsum dolor sit amet consectetur adipisicing elit. Iure similique quisquam incidunt dignissimos minus magni sunt et autem rem omnis quos exercitationem saepe aut excepturi quas, aperiam deserunt ullam non?
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Iure similique quisquam incidunt dignissimos minus magni sunt et autem rem omnis quos exercitationem saepe aut excepturi quas, aperiam deserunt ullam non?Lorem ipsum dolor sit amet consectetur adipisicing elit. Iure similique quisquam incidunt dignissimos minus magni sunt et autem rem omnis quos exercitationem saepe aut excepturi quas, aperiam deserunt ullam non?Lorem ipsum dolor sit amet consectetur adipisicing elit. Iure similique quisquam incidunt dignissimos minus magni sunt et autem rem omnis quos exercitationem saepe aut excepturi quas, aperiam deserunt ullam non?
    +
    + + + + + diff --git a/copy-table-as-csv-web-component/dist/script.js b/copy-table-as-csv-web-component/dist/script.js new file mode 100644 index 0000000..62c4529 --- /dev/null +++ b/copy-table-as-csv-web-component/dist/script.js @@ -0,0 +1,142 @@ +import { + LitElement, + html, + css +} from "https://unpkg.com/lit@2.1.4/index.js?module"; + +class CopyTable extends LitElement { + static styles = css` + :host { + display: grid; + grid-template-columns: minmax(auto, max-content) max-content; + gap: 0.5rem; + width: 100%; + overflow: hidden; + } + .actions { + display: flex; + flex-direction: column; + justify-content: start; + align-items: start; + gap: 0.5rem; + } + button { + appearance: none; + border: none; + background: transparent; + padding: 0; + } + a { + color: currentColor; + } + .overflow { + max-width: 100%; + overflow-x: auto; + } + `; + + static properties = { + _success: { state: false } + }; + + constructor() { + super(); + const trs = this.querySelectorAll("tr"); + + this.CSV = (function () { + let returnString = []; + trs.forEach((tr) => { + let tds = tr.querySelectorAll("td,th"); + let tdContent = [...tds].map((td) => + td.textContent.match(",") ? `"${td.textContent}"` : td.textContent + ); + returnString.push(tdContent.join(",")); + }); + return returnString.join("\n"); + })(); + } + + copyToClipboard(event) { + var type = "text/plain"; + var blob = new Blob([this.CSV], { type }); + var data = [new ClipboardItem({ [type]: blob })]; + + navigator.clipboard.write(data).then(() => { + this._success = true; + setTimeout(() => { + this._success = false; + }, 1000); + }); + } + + render() { + return html` +
    + +
    + +
    + + + + + + +
    + `; + } +} + +customElements.define("copy-table", CopyTable); \ No newline at end of file diff --git a/copy-table-as-csv-web-component/dist/style.css b/copy-table-as-csv-web-component/dist/style.css new file mode 100644 index 0000000..f566253 --- /dev/null +++ b/copy-table-as-csv-web-component/dist/style.css @@ -0,0 +1,12 @@ +body { + padding: 2rem; +} + +table { + border-collapse: collapse; +} +table td, +table th { + outline: 1px solid graytext; + padding: 0.5rem; +} \ No newline at end of file diff --git a/copy-table-as-csv-web-component/license.txt b/copy-table-as-csv-web-component/license.txt new file mode 100644 index 0000000..d303548 --- /dev/null +++ b/copy-table-as-csv-web-component/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2022 by Dave Rupert (https://codepen.io/davatron5000/pen/YzEYKwR) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/copy-table-as-csv-web-component/src/index.html b/copy-table-as-csv-web-component/src/index.html new file mode 100644 index 0000000..f1d1cd9 --- /dev/null +++ b/copy-table-as-csv-web-component/src/index.html @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    itemitemitemitemitem
    itemitemitemitemitem
    itemitemitemitemitem
    itemitemitemitemitem
    itemitemitemitemitem
    +
    + +
    + + + + + + + + + + + + + +
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Iure similique quisquam incidunt dignissimos minus magni sunt et autem rem omnis quos exercitationem saepe aut excepturi quas, aperiam deserunt ullam non?Lorem ipsum dolor sit amet consectetur adipisicing elit. Iure similique quisquam incidunt dignissimos minus magni sunt et autem rem omnis quos exercitationem saepe aut excepturi quas, aperiam deserunt ullam non?Lorem ipsum dolor sit amet consectetur adipisicing elit. Iure similique quisquam incidunt dignissimos minus magni sunt et autem rem omnis quos exercitationem saepe aut excepturi quas, aperiam deserunt ullam non?
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Iure similique quisquam incidunt dignissimos minus magni sunt et autem rem omnis quos exercitationem saepe aut excepturi quas, aperiam deserunt ullam non?Lorem ipsum dolor sit amet consectetur adipisicing elit. Iure similique quisquam incidunt dignissimos minus magni sunt et autem rem omnis quos exercitationem saepe aut excepturi quas, aperiam deserunt ullam non?Lorem ipsum dolor sit amet consectetur adipisicing elit. Iure similique quisquam incidunt dignissimos minus magni sunt et autem rem omnis quos exercitationem saepe aut excepturi quas, aperiam deserunt ullam non?
    +
    \ No newline at end of file diff --git a/copy-table-as-csv-web-component/src/script.js b/copy-table-as-csv-web-component/src/script.js new file mode 100644 index 0000000..fb9804e --- /dev/null +++ b/copy-table-as-csv-web-component/src/script.js @@ -0,0 +1,142 @@ +import { + LitElement, + html, + css +} from "https://unpkg.com/lit@2.1.4/index.js?module"; + +class CopyTable extends LitElement { + static styles = css` + :host { + display: grid; + grid-template-columns: minmax(auto, max-content) max-content; + gap: 0.5rem; + width: 100%; + overflow: hidden; + } + .actions { + display: flex; + flex-direction: column; + justify-content: start; + align-items: start; + gap: 0.5rem; + } + button { + appearance: none; + border: none; + background: transparent; + padding: 0; + } + a { + color: currentColor; + } + .overflow { + max-width: 100%; + overflow-x: auto; + } + `; + + static properties = { + _success: { state: false } + }; + + constructor() { + super(); + const trs = this.querySelectorAll("tr"); + + this.CSV = (function () { + let returnString = []; + trs.forEach((tr) => { + let tds = tr.querySelectorAll("td,th"); + let tdContent = [...tds].map((td) => + td.textContent.match(",") ? `"${td.textContent}"` : td.textContent + ); + returnString.push(tdContent.join(",")); + }); + return returnString.join("\n"); + })(); + } + + copyToClipboard(event) { + var type = "text/plain"; + var blob = new Blob([this.CSV], { type }); + var data = [new ClipboardItem({ [type]: blob })]; + + navigator.clipboard.write(data).then(() => { + this._success = true; + setTimeout(() => { + this._success = false; + }, 1000); + }); + } + + render() { + return html` +
    + +
    + +
    + + + + + + +
    + `; + } +} + +customElements.define("copy-table", CopyTable); diff --git a/copy-table-as-csv-web-component/src/style.scss b/copy-table-as-csv-web-component/src/style.scss new file mode 100644 index 0000000..0b4a931 --- /dev/null +++ b/copy-table-as-csv-web-component/src/style.scss @@ -0,0 +1,13 @@ +body { + padding: 2rem; +} + +table { + border-collapse: collapse; + + td, + th { + outline: 1px solid graytext; + padding: 0.5rem; + } +} diff --git a/countdown-to-new-year/README.markdown b/countdown-to-new-year/README.markdown new file mode 100644 index 0000000..6817c6e --- /dev/null +++ b/countdown-to-new-year/README.markdown @@ -0,0 +1,5 @@ +# Countdown to New Year + +A Pen created on CodePen.io. Original URL: [https://codepen.io/josetxu/pen/MWjJjBd](https://codepen.io/josetxu/pen/MWjJjBd). + + diff --git a/countdown-to-new-year/dist/index.html b/countdown-to-new-year/dist/index.html new file mode 100644 index 0000000..cc77e3f --- /dev/null +++ b/countdown-to-new-year/dist/index.html @@ -0,0 +1,47 @@ + + + + + CodePen - Countdown to New Year + + + + + + +
    +
    +
    +
    +mercury +
    +
    +
    +
    +venus +
    +
    +
    +
    +earth +
    +
    +
    +
    +mars +
    +
    +
    +
    +asteroids +
    +
    +
    NEW YEAR
    +
    WINTER SOLSTICE
    +
    +

    it seems that the earth has gone out of its orbit...

    + + + + + diff --git a/countdown-to-new-year/dist/script.js b/countdown-to-new-year/dist/script.js new file mode 100644 index 0000000..29ecf99 --- /dev/null +++ b/countdown-to-new-year/dist/script.js @@ -0,0 +1,56 @@ +//prevent loading error + document.getElementById('warning').remove(); + + //short getElementById + elem = function (id){ return document.getElementById(id); } + + //count until date + var newYearDate = new Date("Jan 1, 2021 00:00:00").getTime(); + + //title angles + var todayDate = new Date().getTime(); + var todaySecondsLeft = (newYearDate - todayDate) / 1000; + var todayDays = parseInt(todaySecondsLeft / 86400); + var randMer = Math.floor(Math.random() * (4 - 1 + 1)) + 1; + var randVen = Math.floor(Math.random() * (10 - 4 + 1)) + 4; + var randMar = Math.floor(Math.random() * (16 - 8 + 1)) + 8; + var style = document.createElement('style'); style.innerHTML = '.orbit-mercury {transform: translate(-50%, -50%) rotate('+randMer+'deg)} .orbit-venus {transform: translate(-50%, -50%) rotate('+randVen+'deg)} .orbit-mars {transform: translate(-50%, -50%) rotate('+randMar+'deg)} .planet-mercury {transform:rotate(-'+randMer+'deg)} .planet-venus {transform:rotate(-'+randVen+'deg)} .planet-mars {transform:rotate(-'+randMar+'deg)} .planet-earth {transform:rotate('+todayDays+'deg)} .planet-venus {transform:rotate(-'+randVen+'deg)} '; document.head.appendChild(style); + + //countdown vars + var days, hours, minutes, seconds; + + //countdown + var countDown = setInterval(function() { + + var rightNow = new Date().getTime(); + var timeTo = newYearDate - rightNow; + + days = Math.floor(timeTo / (1000 * 60 * 60 * 24)); + hours = Math.floor((timeTo % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); + minutes = Math.floor((timeTo % (1000 * 60 * 60)) / (1000 * 60)); + seconds = Math.floor((timeTo % (1000 * 60)) / 1000); + + if(hours<10)hours="0"+hours; +ย ย ย  ย ย ย  if(minutes<10)minutes="0"+minutes; +ย ย ย  ย ย ย  if(seconds<10)seconds="0"+seconds; + + elem("cronoNewYear").innerHTML = days + " DAYS  " + hours + ":" + minutes + ":" + seconds + " LEFT"; + var newDays; + if (days<0){ elem("cronoNewYear").style.display='none'; newDays = days.toString().substr(1); } else { newDays="-"+days; } + elem("position-earth").style.transform = 'translate(-50%, -50%) rotate('+newDays+'deg'; + + var solsDays; + var cDays=days-11; + if (cDays<0){ elem("cronoWinterSolstice").style.display='none'; } else { solsDays=cDays } + elem("cronoWinterSolstice").innerHTML = solsDays + " DAYS  " + hours + ":" + minutes + ":" + seconds + " LEFT"; + + var opacityList = document.querySelectorAll('.planet'); + for(i=0;i + +
    + +
    +
    + mercury +
    +
    + +
    +
    + venus +
    +
    + +
    +
    + earth +
    +
    + +
    +
    + mars +
    +
    + +
    +
    + asteroids +
    +
    + +
    NEW YEAR
    +
    WINTER SOLSTICE
    + +
    + +

    it seems that the earth has gone out of its orbit...

    \ No newline at end of file diff --git a/countdown-to-new-year/src/script.js b/countdown-to-new-year/src/script.js new file mode 100644 index 0000000..29ecf99 --- /dev/null +++ b/countdown-to-new-year/src/script.js @@ -0,0 +1,56 @@ +//prevent loading error + document.getElementById('warning').remove(); + + //short getElementById + elem = function (id){ return document.getElementById(id); } + + //count until date + var newYearDate = new Date("Jan 1, 2021 00:00:00").getTime(); + + //title angles + var todayDate = new Date().getTime(); + var todaySecondsLeft = (newYearDate - todayDate) / 1000; + var todayDays = parseInt(todaySecondsLeft / 86400); + var randMer = Math.floor(Math.random() * (4 - 1 + 1)) + 1; + var randVen = Math.floor(Math.random() * (10 - 4 + 1)) + 4; + var randMar = Math.floor(Math.random() * (16 - 8 + 1)) + 8; + var style = document.createElement('style'); style.innerHTML = '.orbit-mercury {transform: translate(-50%, -50%) rotate('+randMer+'deg)} .orbit-venus {transform: translate(-50%, -50%) rotate('+randVen+'deg)} .orbit-mars {transform: translate(-50%, -50%) rotate('+randMar+'deg)} .planet-mercury {transform:rotate(-'+randMer+'deg)} .planet-venus {transform:rotate(-'+randVen+'deg)} .planet-mars {transform:rotate(-'+randMar+'deg)} .planet-earth {transform:rotate('+todayDays+'deg)} .planet-venus {transform:rotate(-'+randVen+'deg)} '; document.head.appendChild(style); + + //countdown vars + var days, hours, minutes, seconds; + + //countdown + var countDown = setInterval(function() { + + var rightNow = new Date().getTime(); + var timeTo = newYearDate - rightNow; + + days = Math.floor(timeTo / (1000 * 60 * 60 * 24)); + hours = Math.floor((timeTo % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); + minutes = Math.floor((timeTo % (1000 * 60 * 60)) / (1000 * 60)); + seconds = Math.floor((timeTo % (1000 * 60)) / 1000); + + if(hours<10)hours="0"+hours; +ย ย ย  ย ย ย  if(minutes<10)minutes="0"+minutes; +ย ย ย  ย ย ย  if(seconds<10)seconds="0"+seconds; + + elem("cronoNewYear").innerHTML = days + " DAYS  " + hours + ":" + minutes + ":" + seconds + " LEFT"; + var newDays; + if (days<0){ elem("cronoNewYear").style.display='none'; newDays = days.toString().substr(1); } else { newDays="-"+days; } + elem("position-earth").style.transform = 'translate(-50%, -50%) rotate('+newDays+'deg'; + + var solsDays; + var cDays=days-11; + if (cDays<0){ elem("cronoWinterSolstice").style.display='none'; } else { solsDays=cDays } + elem("cronoWinterSolstice").innerHTML = solsDays + " DAYS  " + hours + ":" + minutes + ":" + seconds + " LEFT"; + + var opacityList = document.querySelectorAll('.planet'); + for(i=0;i + + + + CodePen - [CPC] Dropdown Slots + + + + + + + +
    +

    Pick a Monster

    + +
    + + + + + diff --git a/cpc-dropdown-slots/dist/script.js b/cpc-dropdown-slots/dist/script.js new file mode 100644 index 0000000..df2f0fe --- /dev/null +++ b/cpc-dropdown-slots/dist/script.js @@ -0,0 +1,64 @@ +"use strict"; +//1 in 81 chance to get any valid option, 1 in 729 to get a particular option +//16 in 81 chance to get only 2 in a row, 17 in 81 to get at least 2 in a row, 8 in 27 to get just 2 matching +//56 in 81 all different +//The tweet video was definitely faked, but can be seen winning here +//https://twitter.com/Osorpenke/status/1445191696715821058 +let enabled = true; +const items = 9; +const wheels = [1, 2, 3].map((x) => document.querySelector(`#dropdown .dropdown .wheel${x}`)); +const tag = document.querySelector(`#dropdown .tag`); +const dropdown = document.querySelector(`#dropdown .dropdown`); +const dropdown_wrapper = document.getElementById(`dropdown`); +const all_equal = ([head, ...tail] = []) => tail.every((x) => x == head); +const round_and_modulus_numbers = (numbers, mod) => numbers.map((x) => Math.round(x) % items); +const minimum_spins = 3; +const state_increment = (current, index) => (minimum_spins + Math.random()) * items //minimum spins with 0-1 extra + * ((index + 2) / 3) + //Increases spins for wheels that also take longer spinning + + current; +const row_height = 60; //Each row is 48 pixels with 12 pixel transition +const background_position_value = (position) => Math.round(position) * row_height; +const background_position = (position) => `${background_position_value(position)}px`; +const before_every_spin = () => { + dropdown.classList.add(`show-gap`); + dropdown_wrapper.classList.remove(`valid`); + tag.classList.add(`disabled`); +}; +const after_every_spin = (fn = () => { }) => { + fn(); + tag.classList.remove(`disabled`); + enabled = true; +}; +const run_after_spinning = (fn) => setTimeout(() => after_every_spin(fn), 5000); +const run_after_shaking = (fn) => setTimeout(fn, 500); +const spin = (state) => { + before_every_spin(); + const next_state = state.map(state_increment); + wheels.forEach((el, i) => { + el.style.backgroundPositionY = + background_position(next_state[i]); + }); + if (all_equal(round_and_modulus_numbers(next_state, items))) { + run_after_spinning(() => { + dropdown.classList.remove(`show-gap`); + dropdown_wrapper.classList.add(`valid`); + }); + } + else { + run_after_spinning(() => { + dropdown_wrapper.classList.add(`shake`); + run_after_shaking(() => { + dropdown_wrapper.classList.remove(`shake`); + }); + }); + } + return next_state; +}; +let state = [0, 0, 0]; +tag.addEventListener(`click`, () => { + if (!enabled) + return; + enabled = false; + state = spin(state); +}); \ No newline at end of file diff --git a/cpc-dropdown-slots/dist/style.css b/cpc-dropdown-slots/dist/style.css new file mode 100644 index 0000000..bdec236 --- /dev/null +++ b/cpc-dropdown-slots/dist/style.css @@ -0,0 +1,164 @@ +body { + display: grid; + place-items: center; + height: 100vh; + font-family: "Poppins", sans-serif; +} +body h1 { + text-align: center; +} +body #dropdown { + display: flex; + --border-radius: 0.35rem; + --frame: #8e9094; + --border-thickness: 2px; + background: var(--frame); + border-radius: var(--border-radius); + overflow: hidden; + transition: 0.25s -0.1s; +} +body #dropdown.shake { + --frame: #d8334a; + -webkit-animation: shake 0.5s; + animation: shake 0.5s; +} +@-webkit-keyframes shake { + 10% { + transform: translateX(0.5rem); + } + 25% { + transform: translateX(-0.4rem); + } + 40% { + transform: translateX(0.3rem); + } + 65% { + transform: translateX(-0.2rem); + } + 80% { + transform: translateX(0.1rem); + } + 100% { + transform: translateX(0rem); + } +} +@keyframes shake { + 10% { + transform: translateX(0.5rem); + } + 25% { + transform: translateX(-0.4rem); + } + 40% { + transform: translateX(0.3rem); + } + 65% { + transform: translateX(-0.2rem); + } + 80% { + transform: translateX(0.1rem); + } + 100% { + transform: translateX(0rem); + } +} +body #dropdown:hover { + --frame: #717272; +} +body #dropdown.valid { + --frame: #a0d468; +} +body #dropdown.valid:hover { + --frame: #8cc152; +} +body #dropdown .tag { + display: grid; + place-items: center; + cursor: pointer; + position: relative; + width: 32px; + background: var(--frame); + transition: background 0.25s -0.1s; +} +body #dropdown .tag .arrow { + border: 0.5rem solid transparent; + border-top-color: white; + border-width: 0.8rem 0.4rem 0 0.4rem; + transform: translateY(0.1rem); +} +body #dropdown .tag.disabled { + cursor: wait; +} +body #dropdown .tag.disabled .arrow { + opacity: 0.25; +} +body #dropdown .dropdown { + display: flex; + width: 224px; + height: 48px; + border: 2px solid var(--frame); + transition: border-color 0.25s -0.1s; + border-radius: calc(var(--border-radius) - var(--border-thickness)); + overflow: hidden; + pointer-events: none; +} +body #dropdown .dropdown .gap { + position: relative; + width: 0px; + transition: 0.05s; +} +body #dropdown .dropdown .wheel { + flex-grow: 20; + flex-basis: 0; + overflow: hidden; + border-radius: 0; + transition: 0.25s; + background: url(https://i.koya.io/codepen-dropdown.svg) white; +} +body #dropdown .dropdown .wheel .container { + position: relative; + width: 224px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +body #dropdown .dropdown .wheel .container > div { + display: grid; + place-items: center; + height: 48px; + width: 100%; + font-size: 2rem; + letter-spacing: 0.2rem; +} +body #dropdown .dropdown .wheel.wheel1 { + border-radius: calc(var(--border-radius) - var(--border-thickness)) 0 0 calc(var(--border-radius) - var(--border-thickness)); + transition: background-position 3s cubic-bezier(0.3, 0, 0.1, 1), 0.25s border-radius; +} +body #dropdown .dropdown .wheel.wheel2 { + background-position-x: -74.6666666667px; + transition: background-position 4s cubic-bezier(0.3, 0, 0.1, 1), 0.25s border-radius, 0.25s box-shadow; +} +body #dropdown .dropdown .wheel.wheel3 { + background-position-x: -149.3333333333px; + border-radius: 0 calc(var(--border-radius) - var(--border-thickness)) calc(var(--border-radius) - var(--border-thickness)) 0; + transition: background-position 5s cubic-bezier(0.3, 0, 0.1, 1), 0.25s border-radius; +} +body #dropdown .dropdown.show-gap .wheel { + border-radius: calc(var(--border-radius) - var(--border-thickness)); +} +body #dropdown .dropdown.show-gap .wheel.wheel1 { + box-shadow: inset -1px 0 var(--frame); +} +body #dropdown .dropdown.show-gap .wheel.wheel2 { + box-shadow: inset 1px 0 var(--frame), inset -1px 0 var(--frame); +} +body #dropdown .dropdown.show-gap .wheel.wheel2 .container { + left: -74.9966666667px; +} +body #dropdown .dropdown.show-gap .wheel.wheel3 { + box-shadow: inset 1px 0 var(--frame); +} +body #dropdown .dropdown.show-gap .wheel.wheel3 .container { + left: -149.9933333333px; +} \ No newline at end of file diff --git a/cpc-dropdown-slots/license.txt b/cpc-dropdown-slots/license.txt new file mode 100644 index 0000000..ad4e3bd --- /dev/null +++ b/cpc-dropdown-slots/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Zed Dash (https://codepen.io/z-/pen/ZEydQPx) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/cpc-dropdown-slots/src/index.pug b/cpc-dropdown-slots/src/index.pug new file mode 100644 index 0000000..ecd4ac4 --- /dev/null +++ b/cpc-dropdown-slots/src/index.pug @@ -0,0 +1,9 @@ +div + h1 Pick a Monster + #dropdown + .dropdown + .wheel.wheel1 + .wheel.wheel2 + .wheel.wheel3 + .tag + .arrow diff --git a/cpc-dropdown-slots/src/script.ts b/cpc-dropdown-slots/src/script.ts new file mode 100644 index 0000000..f2874ea --- /dev/null +++ b/cpc-dropdown-slots/src/script.ts @@ -0,0 +1,86 @@ +//1 in 81 chance to get any valid option, 1 in 729 to get a particular option +//16 in 81 chance to get only 2 in a row, 17 in 81 to get at least 2 in a row, 8 in 27 to get just 2 matching +//56 in 81 all different + +//The tweet video was definitely faked, but can be seen winning here +//https://twitter.com/Osorpenke/status/1445191696715821058 + +let enabled = true; + +const items = 9; +const wheels: Element[] = [1, 2, 3].map((x) => + document.querySelector(`#dropdown .dropdown .wheel${x}`) +); +const tag = document.querySelector(`#dropdown .tag`); +const dropdown = document.querySelector(`#dropdown .dropdown`); +const dropdown_wrapper = document.getElementById(`dropdown`); + +const all_equal = ([head, ...tail]: number[] = []) => + tail.every((x) => x == head); +const round_and_modulus_numbers = + (numbers: number[], mod:number) => + numbers.map((x) => Math.round(x) % items); + +const minimum_spins = 3; +const state_increment = + (current: number, index: number) => + (minimum_spins + Math.random()) * items //minimum spins with 0-1 extra + * ((index + 2) / 3) + //Increases spins for wheels that also take longer spinning + + current; + +const row_height = 60; //Each row is 48 pixels with 12 pixel transition +const background_position_value = (position: number) => + Math.round(position) * row_height; +const background_position = (position: number) => + `${background_position_value(position)}px`; + +const before_every_spin = () => { + dropdown.classList.add(`show-gap`); + dropdown_wrapper.classList.remove(`valid`); + tag.classList.add(`disabled`); +}; +const after_every_spin = (fn: function=()=>{}) => { + fn(); + tag.classList.remove(`disabled`); + enabled = true; +}; +const run_after_spinning = (fn: function) => + setTimeout(() => after_every_spin(fn), 5000); +const run_after_shaking = (fn: function) => + setTimeout(fn, 500); + +const spin = (state: number[]) => { + before_every_spin(); + + const next_state = + state.map(state_increment); + + wheels.forEach((el, i) => { + el.style.backgroundPositionY = + background_position(next_state[i]); + }); + + if (all_equal(round_and_modulus_numbers(next_state, items))) { + run_after_spinning(() => { + dropdown.classList.remove(`show-gap`); + dropdown_wrapper.classList.add(`valid`); + }); + } else { + run_after_spinning(() => { + dropdown_wrapper.classList.add(`shake`); + run_after_shaking(() => { + dropdown_wrapper.classList.remove(`shake`); + }); + }); + } + + return next_state; +}; + +let state = [0, 0, 0]; +tag.addEventListener(`click`, () => { + if (!enabled) return; + enabled = false; + state = spin(state); +}); diff --git a/cpc-dropdown-slots/src/style.scss b/cpc-dropdown-slots/src/style.scss new file mode 100644 index 0000000..3087040 --- /dev/null +++ b/cpc-dropdown-slots/src/style.scss @@ -0,0 +1,163 @@ +body { + display: grid; + place-items: center; + height: 100vh; + font-family: "Poppins", sans-serif; + h1 { + text-align: center; + } + #dropdown { + display: flex; + $width: 224px; //These aren't CSS variables because the wheel images require this size + $height: 48px; + --border-radius: 0.35rem; + --frame: #8e9094; + --border-thickness: 2px; + background: var(--frame); + border-radius: var(--border-radius); + overflow: hidden; + transition:.25s -.1s; + &.shake { + --frame: #d8334a; + animation: shake 0.5s; + } + @keyframes shake { + 10% { + transform: translateX(0.5rem); + } + 25% { + transform: translateX(-0.4rem); + } + 40% { + transform: translateX(0.3rem); + } + 65% { + transform: translateX(-0.2rem); + } + 80% { + transform: translateX(0.1rem); + } + 100% { + transform: translateX(0rem); + } + } + &:hover { + --frame: #717272; + } + &.valid { + --frame: #a0d468; + &:hover { + --frame: #8cc152; + } + } + .tag { + display: grid; + place-items: center; + cursor: pointer; + position: relative; + width: $height / 1.5; + background: var(--frame); + transition: background 0.25s -.1s; + .arrow { + //position: absolute; + border: 0.5rem solid transparent; + border-top-color: white; + border-width: 0.8rem 0.4rem 0 0.4rem; + transform: translateY(0.1rem); + } + &.disabled { + cursor: wait; + .arrow { + opacity: 0.25; + } + } + } + .dropdown { + display: flex; + width: $width; + height: $height; + border: 2px solid var(--frame); + transition: border-color 0.25s -.1s; + border-radius: calc(var(--border-radius) - var(--border-thickness)); + overflow: hidden; + pointer-events: none; + .gap { + position: relative; + width: 0px; + transition: 0.05s; + } + .wheel { + flex-grow: 20; + flex-basis: 0; + overflow: hidden; + border-radius: 0; + transition: 0.25s; + background: url(https://i.koya.io/codepen-dropdown.svg) white; + //I disagree about this being cheating. The wheels spinning just move the background image which wraps. + //You can zoom into the page and it's still crisp due to it being an SVG + .container { + position: relative; + width: $width; + user-select: none; + > div { + display: grid; + place-items: center; + height: $height; + width: 100%; + font-size: 2rem; + letter-spacing: 0.2rem; + } + } + $spin-easing: cubic-bezier(0.3, 0, 0.1, 1); + &.wheel1 { + border-radius: + calc(var(--border-radius) - var(--border-thickness)) + 0 + 0 + calc(var(--border-radius) - var(--border-thickness)); + transition: + background-position 3s $spin-easing, + 0.25s border-radius; + } + &.wheel2 { + background-position-x: $width / -3; + transition: + background-position 4s $spin-easing, + 0.25s border-radius, + 0.25s box-shadow; + } + &.wheel3 { + background-position-x: $width / -1.5; + border-radius: + 0 + calc(var(--border-radius) - var(--border-thickness)) + calc(var(--border-radius) - var(--border-thickness)) + 0; + transition: + background-position 5s $spin-easing, + 0.25s border-radius; + } + } + &.show-gap { + .wheel { + border-radius: calc(var(--border-radius) - var(--border-thickness)); + &.wheel1 { + box-shadow: inset -1px 0 var(--frame); + } + &.wheel2 { + box-shadow: inset 1px 0 var(--frame), inset -1px 0 var(--frame); + .container { + left: ($width / -3) - 0.33px; + } + } + &.wheel3 { + box-shadow: inset 1px 0 var(--frame); + .container { + left: ($width / -1.5) - 0.66px; + } + } + } + } + } + } +} diff --git a/cqw-font-sizes/LICENSE.txt b/cqw-font-sizes/LICENSE.txt new file mode 100644 index 0000000..53a7152 --- /dev/null +++ b/cqw-font-sizes/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2023 Jake Archibald (https://codepen.io/jaffathecake/pen/BaGLPGv) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/cqw-font-sizes/README.md b/cqw-font-sizes/README.md new file mode 100644 index 0000000..9b5e94f --- /dev/null +++ b/cqw-font-sizes/README.md @@ -0,0 +1,4 @@ +# CQW font sizes + +A Pen created on CodePen.io. Original URL: [https://codepen.io/jaffathecake/pen/BaGLPGv](https://codepen.io/jaffathecake/pen/BaGLPGv). + diff --git a/cqw-font-sizes/dist/index.html b/cqw-font-sizes/dist/index.html new file mode 100644 index 0000000..f474464 --- /dev/null +++ b/cqw-font-sizes/dist/index.html @@ -0,0 +1,17 @@ + + + + + CodePen - CQW font sizes + + + + + +
    +
    Hello!
    +
    + + + + diff --git a/cqw-font-sizes/dist/style.css b/cqw-font-sizes/dist/style.css new file mode 100644 index 0000000..87838af --- /dev/null +++ b/cqw-font-sizes/dist/style.css @@ -0,0 +1,19 @@ +.demo { + container-type: inline-size; +} + +.text { + font-size: 35cqw; +} + +html { + background: #ccc; +} + +.demo { + background: #fff; + padding: 10px; + resize: both; + overflow: hidden; + width: 200px; +} \ No newline at end of file diff --git a/cqw-font-sizes/src/index.html b/cqw-font-sizes/src/index.html new file mode 100644 index 0000000..8fb5ef5 --- /dev/null +++ b/cqw-font-sizes/src/index.html @@ -0,0 +1,3 @@ +
    +
    Hello!
    +
    \ No newline at end of file diff --git a/cqw-font-sizes/src/style.css b/cqw-font-sizes/src/style.css new file mode 100644 index 0000000..87838af --- /dev/null +++ b/cqw-font-sizes/src/style.css @@ -0,0 +1,19 @@ +.demo { + container-type: inline-size; +} + +.text { + font-size: 35cqw; +} + +html { + background: #ccc; +} + +.demo { + background: #fff; + padding: 10px; + resize: both; + overflow: hidden; + width: 200px; +} \ No newline at end of file diff --git a/crazy-4/README.markdown b/crazy-4/README.markdown new file mode 100644 index 0000000..c1e6bbb --- /dev/null +++ b/crazy-4/README.markdown @@ -0,0 +1,4 @@ +# Crazy 4 + _A Pen created at CodePen.io. Original URL: [https://codepen.io/Mamboleoo/pen/BWMyZr](https://codepen.io/Mamboleoo/pen/BWMyZr). + + \ No newline at end of file diff --git a/crazy-4/dist/index.html b/crazy-4/dist/index.html new file mode 100644 index 0000000..af7a7c4 --- /dev/null +++ b/crazy-4/dist/index.html @@ -0,0 +1,16 @@ + + + + + CodePen - Crazy 4 + + + + + + + + + + + diff --git a/crazy-4/dist/script.js b/crazy-4/dist/script.js new file mode 100644 index 0000000..dd27ce1 --- /dev/null +++ b/crazy-4/dist/script.js @@ -0,0 +1,125 @@ +//Get window size +var ww = window.innerWidth, + wh = window.innerHeight; + +//Create a WebGL renderer +var renderer = new THREE.WebGLRenderer({ + canvas: document.querySelector("canvas") +}); +renderer.setSize(ww, wh); + +//Create an empty scene +var scene = new THREE.Scene(); +scene.fog = new THREE.Fog(0x000000, 30, 150); + +//Create a perpsective camera +var camera = new THREE.PerspectiveCamera(45, ww / wh, 0.1, 150); +camera.position.y = 400; +camera.position.z = 400; + +//Array of points +var points = [ + [68.5, 185.5], + [1, 262.5], + [270.9, 281.9], + [345.5, 212.8], + [178, 155.7], + [240.3, 72.3], + [153.4, 0.6], + [52.6, 53.3], + [68.5, 185.5] +]; + +//Convert the array of points into vertices +for (var i = 0; i < points.length; i++) { + var x = points[i][0]; + var y = Math.random() * 100; + var z = points[i][1]; + points[i] = new THREE.Vector3(x, y, z); +} +//Create a path from the points +var path = new THREE.CatmullRomCurve3(points); +path.closed = true; + +// Define the precision of the finale tube, the amount of divisions +var tubeDetail = 1600; +// Define the precision of the circles +var circlesDetail = 40; + +// Define the radius of the finale tube +var radius = 4; +// Get all the circles that will compose the tube +var frames = path.computeFrenetFrames(tubeDetail, true); + +// Create an empty Geometry where we will put the particles +var geometry = new THREE.Geometry(); + +// Define a basic color +var color = new THREE.Color(0x000000); + +// First loop through all the circles +for (var i = 0; i < tubeDetail; i++) { + // Get the normal values for each circle + var normal = frames.normals[i]; + // Get the binormal values + var binormal = frames.binormals[i]; + + // Calculate the index of the circle (from 0 to 1) + var index = i / tubeDetail; + // Get the coordinates of the point in the center of the circle + var p = path.getPointAt(index); + + // Loop for the amount of particles we want along each circle + for (var j = 0; j < circlesDetail; j++) { + // Clone the position of the point in the center + var position = p.clone(); + + // Calculate the angle for each particle along the circle (from 0 to Pi*2) + var angle = (j / circlesDetail) * Math.PI * 2 + (index * Math.PI * 5); + // Calculate the sine of the angle + var sin = Math.sin(angle); + // Calculate the cosine from the angle + var cos = -Math.cos(angle); + + // Calculate the normal of each point based on its angle + var normalPoint = new THREE.Vector3(0, 0, 0); + normalPoint.x = (cos * normal.x + sin * binormal.x); + normalPoint.y = (cos * normal.y + sin * binormal.y); + normalPoint.z = (cos * normal.z + sin * binormal.z); + // Multiple the normal by the radius + normalPoint.multiplyScalar(radius); + + // We add the normal values for each point + position.add(normalPoint); + var color = new THREE.Color("hsl(" + (index * 360 * 4) + ", 100%, 50%)"); + geometry.colors.push(color); + geometry.vertices.push(position); + } +} + +// Material for the points +var material = new THREE.PointsMaterial({ + size: 0.2, + vertexColors: THREE.VertexColors +}); + +var tube = new THREE.Points(geometry, material); +//Add tube into the scene +scene.add(tube); + +var percentage = 0; + +function render() { + + percentage += 0.0005; + var p1 = path.getPointAt(percentage % 1); + var p2 = path.getPointAt((percentage + 0.01) % 1); + camera.position.set(p1.x, p1.y, p1.z); + camera.lookAt(p2); + + //Render the scene + renderer.render(scene, camera); + + requestAnimationFrame(render); +} +requestAnimationFrame(render); \ No newline at end of file diff --git a/crazy-4/dist/style.css b/crazy-4/dist/style.css new file mode 100644 index 0000000..413c2ed --- /dev/null +++ b/crazy-4/dist/style.css @@ -0,0 +1,11 @@ +body{ + overflow: hidden; + margin:0; +} +canvas{ + position: absolute; + top: 0; + left: 0; + width: 100%; + height:100%; +} \ No newline at end of file diff --git a/crazy-4/license.txt b/crazy-4/license.txt new file mode 100644 index 0000000..f2f2368 --- /dev/null +++ b/crazy-4/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Louis Hoebregts (https://codepen.io/Mamboleoo/pen/BWMyZr) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/crazy-4/src/index.html b/crazy-4/src/index.html new file mode 100644 index 0000000..c733673 --- /dev/null +++ b/crazy-4/src/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crazy-4/src/script.js b/crazy-4/src/script.js new file mode 100644 index 0000000..dd27ce1 --- /dev/null +++ b/crazy-4/src/script.js @@ -0,0 +1,125 @@ +//Get window size +var ww = window.innerWidth, + wh = window.innerHeight; + +//Create a WebGL renderer +var renderer = new THREE.WebGLRenderer({ + canvas: document.querySelector("canvas") +}); +renderer.setSize(ww, wh); + +//Create an empty scene +var scene = new THREE.Scene(); +scene.fog = new THREE.Fog(0x000000, 30, 150); + +//Create a perpsective camera +var camera = new THREE.PerspectiveCamera(45, ww / wh, 0.1, 150); +camera.position.y = 400; +camera.position.z = 400; + +//Array of points +var points = [ + [68.5, 185.5], + [1, 262.5], + [270.9, 281.9], + [345.5, 212.8], + [178, 155.7], + [240.3, 72.3], + [153.4, 0.6], + [52.6, 53.3], + [68.5, 185.5] +]; + +//Convert the array of points into vertices +for (var i = 0; i < points.length; i++) { + var x = points[i][0]; + var y = Math.random() * 100; + var z = points[i][1]; + points[i] = new THREE.Vector3(x, y, z); +} +//Create a path from the points +var path = new THREE.CatmullRomCurve3(points); +path.closed = true; + +// Define the precision of the finale tube, the amount of divisions +var tubeDetail = 1600; +// Define the precision of the circles +var circlesDetail = 40; + +// Define the radius of the finale tube +var radius = 4; +// Get all the circles that will compose the tube +var frames = path.computeFrenetFrames(tubeDetail, true); + +// Create an empty Geometry where we will put the particles +var geometry = new THREE.Geometry(); + +// Define a basic color +var color = new THREE.Color(0x000000); + +// First loop through all the circles +for (var i = 0; i < tubeDetail; i++) { + // Get the normal values for each circle + var normal = frames.normals[i]; + // Get the binormal values + var binormal = frames.binormals[i]; + + // Calculate the index of the circle (from 0 to 1) + var index = i / tubeDetail; + // Get the coordinates of the point in the center of the circle + var p = path.getPointAt(index); + + // Loop for the amount of particles we want along each circle + for (var j = 0; j < circlesDetail; j++) { + // Clone the position of the point in the center + var position = p.clone(); + + // Calculate the angle for each particle along the circle (from 0 to Pi*2) + var angle = (j / circlesDetail) * Math.PI * 2 + (index * Math.PI * 5); + // Calculate the sine of the angle + var sin = Math.sin(angle); + // Calculate the cosine from the angle + var cos = -Math.cos(angle); + + // Calculate the normal of each point based on its angle + var normalPoint = new THREE.Vector3(0, 0, 0); + normalPoint.x = (cos * normal.x + sin * binormal.x); + normalPoint.y = (cos * normal.y + sin * binormal.y); + normalPoint.z = (cos * normal.z + sin * binormal.z); + // Multiple the normal by the radius + normalPoint.multiplyScalar(radius); + + // We add the normal values for each point + position.add(normalPoint); + var color = new THREE.Color("hsl(" + (index * 360 * 4) + ", 100%, 50%)"); + geometry.colors.push(color); + geometry.vertices.push(position); + } +} + +// Material for the points +var material = new THREE.PointsMaterial({ + size: 0.2, + vertexColors: THREE.VertexColors +}); + +var tube = new THREE.Points(geometry, material); +//Add tube into the scene +scene.add(tube); + +var percentage = 0; + +function render() { + + percentage += 0.0005; + var p1 = path.getPointAt(percentage % 1); + var p2 = path.getPointAt((percentage + 0.01) % 1); + camera.position.set(p1.x, p1.y, p1.z); + camera.lookAt(p2); + + //Render the scene + renderer.render(scene, camera); + + requestAnimationFrame(render); +} +requestAnimationFrame(render); \ No newline at end of file diff --git a/crazy-4/src/style.css b/crazy-4/src/style.css new file mode 100644 index 0000000..413c2ed --- /dev/null +++ b/crazy-4/src/style.css @@ -0,0 +1,11 @@ +body{ + overflow: hidden; + margin:0; +} +canvas{ + position: absolute; + top: 0; + left: 0; + width: 100%; + height:100%; +} \ No newline at end of file diff --git a/crossing-walls/README.markdown b/crossing-walls/README.markdown new file mode 100644 index 0000000..3ddeed8 --- /dev/null +++ b/crossing-walls/README.markdown @@ -0,0 +1,7 @@ +# Crossing walls + +A Pen created on CodePen.io. Original URL: [https://codepen.io/Dillo/pen/abvxwGN](https://codepen.io/Dillo/pen/abvxwGN). + +Maybe my most pointless pen. +The idea seemed funny and rather easy to do, so I did it. + diff --git a/crossing-walls/dist/index.html b/crossing-walls/dist/index.html new file mode 100644 index 0000000..14ffce9 --- /dev/null +++ b/crossing-walls/dist/index.html @@ -0,0 +1,16 @@ + + + + + CodePen - Crossing walls + + + + + + + + + + + diff --git a/crossing-walls/dist/script.js b/crossing-walls/dist/script.js new file mode 100644 index 0000000..cc5fef4 --- /dev/null +++ b/crossing-walls/dist/script.js @@ -0,0 +1,519 @@ +"use strict"; + +window.addEventListener("load",function() { + + const nbCells = 5 ; // min number of cells in height or width + const bgColor = '#004'; + const rayBallMin = 0.3; // relative to apoHex + const rayBallMax = 0.8; // relative to apoHex (< 1) + const speed = 0.03; + + let canv, ctx; // canvas and context : global variables (I know :( ) + let ctxGrid, canvGrid; + let maxx, maxy; // canvas sizes (in pixels) + let nbx, nby; // number of columns / rows + let grid; + let rayHex; // Hexagon side + let apoHex; // apothem + let nbBalls; + let balls; + +// for animation + let events = []; + let mouse = {x:0, y:0}; + let explorers; // array of alive Explorers + +// shortcuts for Math. + + const mrandom = Math.random; + const mfloor = Math.floor; + const mround = Math.round; + const mceil = Math.ceil; + const mabs = Math.abs; + const mmin = Math.min; + const mmax = Math.max; + + const mPI = Math.PI; + const mPIS2 = Math.PI / 2; + const m2PI = Math.PI * 2; + const msin = Math.sin; + const mcos = Math.cos; + const matan2 = Math.atan2; + const mtan = Math.tan; + + const mhypot = Math.hypot; + const msqrt = Math.sqrt; + + const rac3 = msqrt(3); + const rac3s2 = rac3 / 2; + const mPIS3 = Math.PI / 3; + +//----------------------------------------------------------------------------- + function alea (min, max) { +// random number [min..max[ . If no max is provided, [0..min[ + + if (typeof max == 'undefined') return min * mrandom(); + return min + (max - min) * mrandom(); + } + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + function intAlea (min, max) { +// random integer number [min..max[ . If no max is provided, [0..min[ + + if (typeof max == 'undefined') { + max = min; min = 0; + } + return mfloor(min + (max - min) * mrandom()); + } // intAlea + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function Noise1DOneShot (period, min = 0, max = 1, random) { +/* returns a 1D single-shot noise generator. + the (optional) random function must return a value between 0 and 1 + the returned function has no parameter, and will return a new number every tiime it is called. + If the random function provides reproductible values (and is not used elsewhere), this + one will return reproductible values too. + period should be > 1. The bigger period is, the smoother output noise is +*/ + random = random || Math.random; + let currx = random(); // start with random offset + let y0 = min + (max - min) * random(); // 'previous' value + let y1 = min + (max - min) * random(); // 'next' value + let dx = 1 / period; + + return function() { + currx += dx; + if (currx > 1) { + currx -= 1; + y0 = y1; + y1 = min + (max - min) * random(); + } + let z = (3 - 2 * currx) * currx * currx; + return z * y1 + (1 - z) * y0; + } +} // Noise1DOneShot + +//------------------------------------------------------------------------ +// class Hexagon +let Hexagon; +{ // scope for Hexagon + +let vertices; +let orgx, orgy; + +Hexagon = function (kx, ky) { + + this.kx = kx; + this.ky = ky; + this.neighbours = []; + +} // function Hexagon + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +/* static method */ + +Hexagon.dimensions = function () { +// coordinates of center of hexagon [0][0] + orgx = (maxx - rayHex * (1.5 * nbx + 0.5)) / 2 + rayHex; // obvious, no ? + orgy = (maxy - (rayHex * rac3 * (nby + 0.5))) / 2 + rayHex * rac3; // yet more obvious + +/* position of hexagon vertices, relative to its center */ + vertices = [[],[],[],[],[],[]] ; +// x coordinates, from left to right + vertices[3][0] = - (rayHex + 0.5); + vertices[2][0] = vertices[4][0] = - (rayHex + 0.5) / 2; + vertices[1][0] = vertices[5][0] = + (rayHex + 0.5) / 2; + vertices[0][0] = (rayHex + 0.5); +// y coordinates, from top to bottom + vertices[4][1] = vertices[5][1] = - (rayHex + 0.5) * rac3s2; + vertices[0][1] = vertices[3][1] = 0; + vertices[1][1] = vertices[2][1] = (rayHex + 0.5) * rac3s2; + + Hexagon.dirx = [rac3s2, 0, - rac3s2, - rac3s2, 0, rac3s2]; + Hexagon.diry = [0.5, 1, 0.5, - 0.5, -1, - 0.5]; +} // Hexagon.dimensions + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +Hexagon.prototype.size = function() { +/* computes screen sizes / positions +*/ +// centre + this.xc = orgx + this.kx * 1.5 * rayHex; + this.yc = orgy + this.ky * rayHex * rac3; + if (this.kx & 1) this.yc -= rayHex * rac3s2; // odd columns + + this.vertices = [[],[],[],[],[],[]] ; + this.middles = [[],[],[],[],[],[]]; + +// x coordinates of this hexagon vertices + this.vertices[3][0] = this.xc + vertices[3][0]; + this.vertices[2][0] = this.vertices[4][0] = this.xc + vertices[2][0]; + this.vertices[1][0] = this.vertices[5][0] = this.xc + vertices[1][0];; + this.vertices[0][0] = this.xc + vertices[0][0];; +// y coordinates of this hexagon vertices + this.vertices[4][1] = this.vertices[5][1] = this.yc + vertices[4][1]; + this.vertices[0][1] = this.vertices[3][1] = this.yc + vertices[0][1]; + this.vertices[1][1] = this.vertices[2][1] = this.yc + vertices[1][1]; + + for (let k = 0; k < 6; ++k) { + this.middles[k] = [(this.vertices[k][0] + this.vertices[(k + 1) % 6][0]) / 2, + (this.vertices[k][1] + this.vertices[(k + 1) % 6][1]) / 2]; + } // for k + +} // Hexagon.prototype.size + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +Hexagon.prototype.drawHexagon = function(fill, stroke, width = 1) { + + if (! this.vertices) this.size(); + + ctxGrid.globalCompositeOperation = 'source-over'; // normal + ctxGrid.beginPath(); + ctxGrid.moveTo (this.vertices[0][0], this.vertices[0][1]); + ctxGrid.lineTo (this.vertices[1][0], this.vertices[1][1]); + ctxGrid.lineTo (this.vertices[2][0], this.vertices[2][1]); + ctxGrid.lineTo (this.vertices[3][0], this.vertices[3][1]); + ctxGrid.lineTo (this.vertices[4][0], this.vertices[4][1]); + ctxGrid.lineTo (this.vertices[5][0], this.vertices[5][1]); + ctxGrid.lineTo (this.vertices[0][0], this.vertices[0][1]); + if (fill) { + ctxGrid.fillStyle = fill; + ctxGrid.fill(); + } + if (stroke) { + ctxGrid.strokeStyle = stroke; + ctxGrid.lineWidth = 2; + ctxGrid.stroke(); + } + ctxGrid.globalCompositeOperation = 'destination-out'; + for (let side = 0; side < 6 ; ++side) { + if (this.neighbour(side)) { + ctxGrid.beginPath(); + ctxGrid.fillStyle = 'rgba(0,0,0,1)'; // seems to not matter + ctxGrid.arc(this.middles[side][0], this.middles[side][1], 3,0, m2PI); + ctxGrid.fill(); + } + } +} // Hexagon.prototype.drawHexagon + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +Hexagon.prototype.drawSide = function(side, hue) { + +let s2 = (side + 1) % 6; + + if (! this.vertices) this.size(); + + let ctxGrid = ctx; + ctxGrid.beginPath(); + + ctxGrid.moveTo (this.vertices[side][0], this.vertices[side][1]); + ctxGrid.lineTo (this.vertices[s2][0], this.vertices[s2][1]); + ctxGrid.strokeStyle = `hsl(${hue},100%,60%)`; + ctxGrid.lineWidth = 1; +// ctxGrid.fillStyle = `hsl(${hue},100%,60%)`; + ctxGrid.stroke(); +} // Hexagon.prototype.drawHexagon + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +/* returns a cell's neighbour + keep track of it for future request + defines itself as its neighbour's neighbour to reduce calculations + + returns false if no neighbour +*/ + +Hexagon.prototype.neighbour = function(side) { + + let neigh = this.neighbours[side]; + if (neigh instanceof(Hexagon)) return neigh; // known neighbour + if (neigh === false) return false; // known for no neighbour +// do not know yet + + if (this.kx & 1) { + neigh = {kx: this.kx + [1, 0, -1, -1, 0, 1][side], + ky: this.ky + [0, 1, 0, -1, -1, -1][side]}; + } else { + neigh = {kx: this.kx + [1, 0, -1, -1, 0, 1][side], + ky: this.ky + [1, 1, 1, 0, -1, 0][side]}; + } + if (neigh.kx < 0 || neigh.ky <0 || neigh.kx >= nbx || neigh.ky >= nby) { + this.neighbours[side] = false; + return false; + } + neigh = grid[neigh.ky][neigh.kx]; + this.neighbours[side] = neigh; + neigh.neighbours[(side + 3) % 6] = this; + return neigh; + +} // Hexagon.prototype.neighbour + +} // scope for Hexagon + +//------------------------------------------------------------------------ +//------------------------------------------------------------------------ + +function Ball() { +/* creates a random ball */ + this.radius = apoHex * alea(rayBallMin, rayBallMax); + do { + this.kx = intAlea(nbx); + this.ky = intAlea(nby); + this.cell = grid[this.ky][this.kx]; + this.comesFrom = intAlea(6); // takes a random 'comesFrom' side + } while (this.cell.neighbour(this.comesFrom) === false || this.cell.occupied); + this.state = 0; // initial state : center of cell, not chosen direction yet + this.retries = 0; + this.cell.occupied = true; + this.hue = intAlea(360); + this.hueNoise = Noise1DOneShot(1000, -1, 1); +} // + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +Ball.prototype.move = function() { + + let dir, neigh, nTries; + let xc, yc; + let r1, r2; + + this.hue += this.hueNoise(); + this.hue = (this.hue + 360) % 360; + + ctx.fillStyle = `hsl(${this.hue},100%,50%)`; + + switch (this.state) { + case 0: + + ctx.beginPath(); + ctx.arc(this.cell.xc, this.cell.yc, this.radius, 0, m2PI); + ctx.fill(); + + nTries = 0; + do { + dir = (this.comesFrom + 3 + [-2, -1, -1, 0, 0, 0, 1, 1, 2][intAlea(9)]) % 6; + neigh = this.cell.neighbour(dir); + if (neigh.occupied) neigh = false; // not acceptable + ++ nTries; + } while (neigh === false && nTries < 30); + if (neigh === false) { + dir = this.comesFrom; + neigh = this.cell.neighbour(dir); + if (neigh.occupied) break; + } + this.state++; + this.dC = 0; // distance to center of hexagon + this.dir = dir; + neigh.occupied = true; + break; + + case 1: + this.dC += rayHex * speed; // movement + if (this.dC + this.radius >= apoHex) { + this.dC = (apoHex - this.radius); + this.state = 2; + this.alphaCross = 0; + } + xc = this.cell.xc + Hexagon.dirx[this.dir] * this.dC; + yc = this.cell.yc + Hexagon.diry[this.dir] * this.dC; + ctx.beginPath(); + ctx.arc(xc, yc, this.radius, 0, m2PI); + ctx.fill(); + break; + + case 2: // crossing side + this.alphaCross += speed / 2; // more slowly ! + if (this.alphaCross >= 1) { + this.state = 3; + this.alphaCross = 1; + this.dC = apoHex + this.radius; + } + r1 = this.radius * msqrt(1 - this.alphaCross * this.alphaCross); + r2 = this.radius * this.alphaCross; + ctx.beginPath(); + if (r1 > 0.5) { + xc = this.cell.middles[this.dir][0] - r1 * Hexagon.dirx[this.dir]; + yc = this.cell.middles[this.dir][1] - r1 * Hexagon.diry[this.dir]; + ctx.arc(xc, yc, r1, 0, m2PI); + } + if (r2 > 0.5) { + xc = this.cell.middles[this.dir][0] + r2 * Hexagon.dirx[this.dir]; + yc = this.cell.middles[this.dir][1] + r2 * Hexagon.diry[this.dir]; + ctx.arc(xc, yc, r2, 0, m2PI); + } + ctx.fill(); + break; + case 3: // move towards center of next cell + this.dC += rayHex * speed; // movement + if (this.dC >= 2 * apoHex) { + this.dC = (2 * apoHex); + } + xc = this.cell.xc + Hexagon.dirx[this.dir] * this.dC; + yc = this.cell.yc + Hexagon.diry[this.dir] * this.dC; + ctx.beginPath(); + ctx.arc(xc, yc, this.radius, 0, m2PI); + ctx.fill(); + if (this.dC >= 2 * apoHex) { + this.cell.occupied = false; + this.cell = this.cell.neighbour(this.dir); + this.kx = this.cell.kx; + this.ky = this.cell.ky; + this.comesFrom = (this.dir + 3) % 6; + this.state = 0; + } + break; + + } // switch (this.state) +} // move + +//------------------------------------------------------------------------ +//------------------------------------------------------------------------ + +function createGrid() { +/* create the grid of Hexagons + and defines the number of dots on each side of the hexagons + but does NOT define the crossings between dots inside an hexagon +*/ + let hexa; + grid = []; + + for (let ky = 0; ky < nby; ++ky) { + grid[ky] = [] + for (let kx = 0; kx < nbx; ++kx) { + hexa = new Hexagon(kx, ky); + grid[ky][kx] = hexa; + } // for kx + } // for ky +} // createGrid + +//------------------------------------------------------------------------ +//----------------------------------------------------------------------------- +// returns false if nothing can be done, true if preparation done + +function startOver() { + + let rayHexX, rayHexY; + + maxx = window.innerWidth; + maxy = window.innerHeight; + + let orgLeft = mmax (((window.innerWidth ) - maxx) / 2, 0); + let orgTop = mmax (((window.innerHeight ) - maxy) / 2, 0); + canvGrid.style.left = canv.style.left = orgLeft + 'px'; + canvGrid.style.top = canv.style.top = orgTop + 'px'; + + canvGrid.width = canv.width = maxx; + canvGrid.height = canv.height = maxy; + ctxGrid.lineCap = ctx.lineCap = 'round'; // placed here because reset when canvas resized + +// number of columns / rows +// computed to have (0,0) in top leftmost corner +// and for all hexagons to be fully contained in canvas + + rayHexX = mfloor((maxx - 6) / (nbCells + mfloor((nbCells + 1) / 2))); + rayHexY = mfloor((maxy - 6) / rac3s2 / (nbCells * 2 + 1)); + + rayHex = mmin(rayHexX, rayHexY); + apoHex = rayHex * rac3s2; // apothem + + nbx = mfloor(((maxx / rayHex) - 0.5) / 1.5); + nby = mfloor(maxy / rayHex / rac3 - 0.5); // + + if (nbx <= 2 || nby <= 2) return false; // nothing to do + + nbBalls = mfloor(nbx * nby / 3); + + if (nbBalls < 1 ) return false; + + Hexagon.dimensions(); + + createGrid(); + + ctxGrid.clearRect(0, 0, maxx, maxy); + grid.forEach(line => { + line.forEach(cell => { + cell.drawHexagon(false, '#fff',5); + }); // line.forEach + }) // grid.forEach + + balls = []; + for (let k = 0; k < nbBalls; ++k) { + balls[k] = new Ball(); + } + + return true; // ok + +} // startOver + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function clickCanvas(event) { + if (event.target.tagName == 'CANVAS') { + events.push({event: 'click'}); + mouse.x = event.clientX; + mouse.y = event.clientY; + } +} +//------------------------------------------------------------------------ +let animate; +{ + let animState = 0; + let ball; + + animate = function(tStamp) { + + const event = events.shift(); + + window.requestAnimationFrame(animate); + + switch (animState) { + case 0 : + if (startOver()) { + ++animState; + mouse.x = maxx/2; mouse.y = maxy / 2; + } + + break; + + case 1 : + ctx.clearRect(0, 0, maxx, maxy); + balls.forEach ( ball => { + ball.move(); + }); + if (!event || event.event !== 'click') break; // waiting for click + animState = 0; + break; + } // switch animState + } // animate +} // scope for animate + +//------------------------------------------------------------------------ +// beginning of execution + + { + canv = document.createElement('canvas'); + canv.style.position = "absolute"; + document.body.appendChild(canv); + ctx = canv.getContext('2d'); + canv.setAttribute('title','click me'); + } // canvas creation + { + canvGrid = document.createElement('canvas'); + canvGrid.style.position = "absolute"; + document.body.appendChild(canvGrid); + ctxGrid = canvGrid.getContext('2d'); + canvGrid.style.zIndex = 1; + } // canvas creation + + window.addEventListener('click',clickCanvas); + +// launch animation + + window.requestAnimationFrame(animate); +}); // window load listener \ No newline at end of file diff --git a/crossing-walls/dist/style.css b/crossing-walls/dist/style.css new file mode 100644 index 0000000..7600a9d --- /dev/null +++ b/crossing-walls/dist/style.css @@ -0,0 +1,8 @@ +body { + font-family: Arial, Helvetica, "Liberation Sans", FreeSans, sans-serif; + background-color: #044; + margin:0; + padding:0; + border-width:0; + cursor: pointer; +} \ No newline at end of file diff --git a/crossing-walls/license.txt b/crossing-walls/license.txt new file mode 100644 index 0000000..fb00134 --- /dev/null +++ b/crossing-walls/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Dillon (https://codepen.io/Dillo/pen/abvxwGN) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/crossing-walls/src/index.html b/crossing-walls/src/index.html new file mode 100644 index 0000000..8f76a07 --- /dev/null +++ b/crossing-walls/src/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/crossing-walls/src/script.js b/crossing-walls/src/script.js new file mode 100644 index 0000000..4298bf4 --- /dev/null +++ b/crossing-walls/src/script.js @@ -0,0 +1,519 @@ +"use strict"; + +window.addEventListener("load",function() { + + const nbCells = 5 ; // min number of cells in height or width + const bgColor = '#004'; + const rayBallMin = 0.3; // relative to apoHex + const rayBallMax = 0.8; // relative to apoHex (< 1) + const speed = 0.03; + + let canv, ctx; // canvas and context : global variables (I know :( ) + let ctxGrid, canvGrid; + let maxx, maxy; // canvas sizes (in pixels) + let nbx, nby; // number of columns / rows + let grid; + let rayHex; // Hexagon side + let apoHex; // apothem + let nbBalls; + let balls; + +// for animation + let events = []; + let mouse = {x:0, y:0}; + let explorers; // array of alive Explorers + +// shortcuts for Math. + + const mrandom = Math.random; + const mfloor = Math.floor; + const mround = Math.round; + const mceil = Math.ceil; + const mabs = Math.abs; + const mmin = Math.min; + const mmax = Math.max; + + const mPI = Math.PI; + const mPIS2 = Math.PI / 2; + const m2PI = Math.PI * 2; + const msin = Math.sin; + const mcos = Math.cos; + const matan2 = Math.atan2; + const mtan = Math.tan; + + const mhypot = Math.hypot; + const msqrt = Math.sqrt; + + const rac3 = msqrt(3); + const rac3s2 = rac3 / 2; + const mPIS3 = Math.PI / 3; + +//----------------------------------------------------------------------------- + function alea (min, max) { +// random number [min..max[ . If no max is provided, [0..min[ + + if (typeof max == 'undefined') return min * mrandom(); + return min + (max - min) * mrandom(); + } + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + function intAlea (min, max) { +// random integer number [min..max[ . If no max is provided, [0..min[ + + if (typeof max == 'undefined') { + max = min; min = 0; + } + return mfloor(min + (max - min) * mrandom()); + } // intAlea + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function Noise1DOneShot (period, min = 0, max = 1, random) { +/* returns a 1D single-shot noise generator. + the (optional) random function must return a value between 0 and 1 + the returned function has no parameter, and will return a new number every tiime it is called. + If the random function provides reproductible values (and is not used elsewhere), this + one will return reproductible values too. + period should be > 1. The bigger period is, the smoother output noise is +*/ + random = random || Math.random; + let currx = random(); // start with random offset + let y0 = min + (max - min) * random(); // 'previous' value + let y1 = min + (max - min) * random(); // 'next' value + let dx = 1 / period; + + return function() { + currx += dx; + if (currx > 1) { + currx -= 1; + y0 = y1; + y1 = min + (max - min) * random(); + } + let z = (3 - 2 * currx) * currx * currx; + return z * y1 + (1 - z) * y0; + } +} // Noise1DOneShot + +//------------------------------------------------------------------------ +// class Hexagon +let Hexagon; +{ // scope for Hexagon + +let vertices; +let orgx, orgy; + +Hexagon = function (kx, ky) { + + this.kx = kx; + this.ky = ky; + this.neighbours = []; + +} // function Hexagon + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +/* static method */ + +Hexagon.dimensions = function () { +// coordinates of center of hexagon [0][0] + orgx = (maxx - rayHex * (1.5 * nbx + 0.5)) / 2 + rayHex; // obvious, no ? + orgy = (maxy - (rayHex * rac3 * (nby + 0.5))) / 2 + rayHex * rac3; // yet more obvious + +/* position of hexagon vertices, relative to its center */ + vertices = [[],[],[],[],[],[]] ; +// x coordinates, from left to right + vertices[3][0] = - (rayHex + 0.5); + vertices[2][0] = vertices[4][0] = - (rayHex + 0.5) / 2; + vertices[1][0] = vertices[5][0] = + (rayHex + 0.5) / 2; + vertices[0][0] = (rayHex + 0.5); +// y coordinates, from top to bottom + vertices[4][1] = vertices[5][1] = - (rayHex + 0.5) * rac3s2; + vertices[0][1] = vertices[3][1] = 0; + vertices[1][1] = vertices[2][1] = (rayHex + 0.5) * rac3s2; + + Hexagon.dirx = [rac3s2, 0, - rac3s2, - rac3s2, 0, rac3s2]; + Hexagon.diry = [0.5, 1, 0.5, - 0.5, -1, - 0.5]; +} // Hexagon.dimensions + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +Hexagon.prototype.size = function() { +/* computes screen sizes / positions +*/ +// centre + this.xc = orgx + this.kx * 1.5 * rayHex; + this.yc = orgy + this.ky * rayHex * rac3; + if (this.kx & 1) this.yc -= rayHex * rac3s2; // odd columns + + this.vertices = [[],[],[],[],[],[]] ; + this.middles = [[],[],[],[],[],[]]; + +// x coordinates of this hexagon vertices + this.vertices[3][0] = this.xc + vertices[3][0]; + this.vertices[2][0] = this.vertices[4][0] = this.xc + vertices[2][0]; + this.vertices[1][0] = this.vertices[5][0] = this.xc + vertices[1][0];; + this.vertices[0][0] = this.xc + vertices[0][0];; +// y coordinates of this hexagon vertices + this.vertices[4][1] = this.vertices[5][1] = this.yc + vertices[4][1]; + this.vertices[0][1] = this.vertices[3][1] = this.yc + vertices[0][1]; + this.vertices[1][1] = this.vertices[2][1] = this.yc + vertices[1][1]; + + for (let k = 0; k < 6; ++k) { + this.middles[k] = [(this.vertices[k][0] + this.vertices[(k + 1) % 6][0]) / 2, + (this.vertices[k][1] + this.vertices[(k + 1) % 6][1]) / 2]; + } // for k + +} // Hexagon.prototype.size + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +Hexagon.prototype.drawHexagon = function(fill, stroke, width = 1) { + + if (! this.vertices) this.size(); + + ctxGrid.globalCompositeOperation = 'source-over'; // normal + ctxGrid.beginPath(); + ctxGrid.moveTo (this.vertices[0][0], this.vertices[0][1]); + ctxGrid.lineTo (this.vertices[1][0], this.vertices[1][1]); + ctxGrid.lineTo (this.vertices[2][0], this.vertices[2][1]); + ctxGrid.lineTo (this.vertices[3][0], this.vertices[3][1]); + ctxGrid.lineTo (this.vertices[4][0], this.vertices[4][1]); + ctxGrid.lineTo (this.vertices[5][0], this.vertices[5][1]); + ctxGrid.lineTo (this.vertices[0][0], this.vertices[0][1]); + if (fill) { + ctxGrid.fillStyle = fill; + ctxGrid.fill(); + } + if (stroke) { + ctxGrid.strokeStyle = stroke; + ctxGrid.lineWidth = 2; + ctxGrid.stroke(); + } + ctxGrid.globalCompositeOperation = 'destination-out'; + for (let side = 0; side < 6 ; ++side) { + if (this.neighbour(side)) { + ctxGrid.beginPath(); + ctxGrid.fillStyle = 'rgba(0,0,0,1)'; // seems to not matter + ctxGrid.arc(this.middles[side][0], this.middles[side][1], 3,0, m2PI); + ctxGrid.fill(); + } + } +} // Hexagon.prototype.drawHexagon + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +Hexagon.prototype.drawSide = function(side, hue) { + +let s2 = (side + 1) % 6; + + if (! this.vertices) this.size(); + + let ctxGrid = ctx; + ctxGrid.beginPath(); + + ctxGrid.moveTo (this.vertices[side][0], this.vertices[side][1]); + ctxGrid.lineTo (this.vertices[s2][0], this.vertices[s2][1]); + ctxGrid.strokeStyle = `hsl(${hue},100%,60%)`; + ctxGrid.lineWidth = 1; +// ctxGrid.fillStyle = `hsl(${hue},100%,60%)`; + ctxGrid.stroke(); +} // Hexagon.prototype.drawHexagon + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +/* returns a cell's neighbour + keep track of it for future request + defines itself as its neighbour's neighbour to reduce calculations + + returns false if no neighbour +*/ + +Hexagon.prototype.neighbour = function(side) { + + let neigh = this.neighbours[side]; + if (neigh instanceof(Hexagon)) return neigh; // known neighbour + if (neigh === false) return false; // known for no neighbour +// do not know yet + + if (this.kx & 1) { + neigh = {kx: this.kx + [1, 0, -1, -1, 0, 1][side], + ky: this.ky + [0, 1, 0, -1, -1, -1][side]}; + } else { + neigh = {kx: this.kx + [1, 0, -1, -1, 0, 1][side], + ky: this.ky + [1, 1, 1, 0, -1, 0][side]}; + } + if (neigh.kx < 0 || neigh.ky <0 || neigh.kx >= nbx || neigh.ky >= nby) { + this.neighbours[side] = false; + return false; + } + neigh = grid[neigh.ky][neigh.kx]; + this.neighbours[side] = neigh; + neigh.neighbours[(side + 3) % 6] = this; + return neigh; + +} // Hexagon.prototype.neighbour + +} // scope for Hexagon + +//------------------------------------------------------------------------ +//------------------------------------------------------------------------ + +function Ball() { +/* creates a random ball */ + this.radius = apoHex * alea(rayBallMin, rayBallMax); + do { + this.kx = intAlea(nbx); + this.ky = intAlea(nby); + this.cell = grid[this.ky][this.kx]; + this.comesFrom = intAlea(6); // takes a random 'comesFrom' side + } while (this.cell.neighbour(this.comesFrom) === false || this.cell.occupied); + this.state = 0; // initial state : center of cell, not chosen direction yet + this.retries = 0; + this.cell.occupied = true; + this.hue = intAlea(360); + this.hueNoise = Noise1DOneShot(1000, -1, 1); +} // + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +Ball.prototype.move = function() { + + let dir, neigh, nTries; + let xc, yc; + let r1, r2; + + this.hue += this.hueNoise(); + this.hue = (this.hue + 360) % 360; + + ctx.fillStyle = `hsl(${this.hue},100%,50%)`; + + switch (this.state) { + case 0: + + ctx.beginPath(); + ctx.arc(this.cell.xc, this.cell.yc, this.radius, 0, m2PI); + ctx.fill(); + + nTries = 0; + do { + dir = (this.comesFrom + 3 + [-2, -1, -1, 0, 0, 0, 1, 1, 2][intAlea(9)]) % 6; + neigh = this.cell.neighbour(dir); + if (neigh.occupied) neigh = false; // not acceptable + ++ nTries; + } while (neigh === false && nTries < 30); + if (neigh === false) { + dir = this.comesFrom; + neigh = this.cell.neighbour(dir); + if (neigh.occupied) break; + } + this.state++; + this.dC = 0; // distance to center of hexagon + this.dir = dir; + neigh.occupied = true; + break; + + case 1: + this.dC += rayHex * speed; // movement + if (this.dC + this.radius >= apoHex) { + this.dC = (apoHex - this.radius); + this.state = 2; + this.alphaCross = 0; + } + xc = this.cell.xc + Hexagon.dirx[this.dir] * this.dC; + yc = this.cell.yc + Hexagon.diry[this.dir] * this.dC; + ctx.beginPath(); + ctx.arc(xc, yc, this.radius, 0, m2PI); + ctx.fill(); + break; + + case 2: // crossing side + this.alphaCross += speed / 2; // more slowly ! + if (this.alphaCross >= 1) { + this.state = 3; + this.alphaCross = 1; + this.dC = apoHex + this.radius; + } + r1 = this.radius * msqrt(1 - this.alphaCross * this.alphaCross); + r2 = this.radius * this.alphaCross; + ctx.beginPath(); + if (r1 > 0.5) { + xc = this.cell.middles[this.dir][0] - r1 * Hexagon.dirx[this.dir]; + yc = this.cell.middles[this.dir][1] - r1 * Hexagon.diry[this.dir]; + ctx.arc(xc, yc, r1, 0, m2PI); + } + if (r2 > 0.5) { + xc = this.cell.middles[this.dir][0] + r2 * Hexagon.dirx[this.dir]; + yc = this.cell.middles[this.dir][1] + r2 * Hexagon.diry[this.dir]; + ctx.arc(xc, yc, r2, 0, m2PI); + } + ctx.fill(); + break; + case 3: // move towards center of next cell + this.dC += rayHex * speed; // movement + if (this.dC >= 2 * apoHex) { + this.dC = (2 * apoHex); + } + xc = this.cell.xc + Hexagon.dirx[this.dir] * this.dC; + yc = this.cell.yc + Hexagon.diry[this.dir] * this.dC; + ctx.beginPath(); + ctx.arc(xc, yc, this.radius, 0, m2PI); + ctx.fill(); + if (this.dC >= 2 * apoHex) { + this.cell.occupied = false; + this.cell = this.cell.neighbour(this.dir); + this.kx = this.cell.kx; + this.ky = this.cell.ky; + this.comesFrom = (this.dir + 3) % 6; + this.state = 0; + } + break; + + } // switch (this.state) +} // move + +//------------------------------------------------------------------------ +//------------------------------------------------------------------------ + +function createGrid() { +/* create the grid of Hexagons + and defines the number of dots on each side of the hexagons + but does NOT define the crossings between dots inside an hexagon +*/ + let hexa; + grid = []; + + for (let ky = 0; ky < nby; ++ky) { + grid[ky] = [] + for (let kx = 0; kx < nbx; ++kx) { + hexa = new Hexagon(kx, ky); + grid[ky][kx] = hexa; + } // for kx + } // for ky +} // createGrid + +//------------------------------------------------------------------------ +//----------------------------------------------------------------------------- +// returns false if nothing can be done, true if preparation done + +function startOver() { + + let rayHexX, rayHexY; + + maxx = window.innerWidth; + maxy = window.innerHeight; + + let orgLeft = mmax (((window.innerWidth ) - maxx) / 2, 0); + let orgTop = mmax (((window.innerHeight ) - maxy) / 2, 0); + canvGrid.style.left = canv.style.left = orgLeft + 'px'; + canvGrid.style.top = canv.style.top = orgTop + 'px'; + + canvGrid.width = canv.width = maxx; + canvGrid.height = canv.height = maxy; + ctxGrid.lineCap = ctx.lineCap = 'round'; // placed here because reset when canvas resized + +// number of columns / rows +// computed to have (0,0) in top leftmost corner +// and for all hexagons to be fully contained in canvas + + rayHexX = mfloor((maxx - 6) / (nbCells + mfloor((nbCells + 1) / 2))); + rayHexY = mfloor((maxy - 6) / rac3s2 / (nbCells * 2 + 1)); + + rayHex = mmin(rayHexX, rayHexY); + apoHex = rayHex * rac3s2; // apothem + + nbx = mfloor(((maxx / rayHex) - 0.5) / 1.5); + nby = mfloor(maxy / rayHex / rac3 - 0.5); // + + if (nbx <= 2 || nby <= 2) return false; // nothing to do + + nbBalls = mfloor(nbx * nby / 3); + + if (nbBalls < 1 ) return false; + + Hexagon.dimensions(); + + createGrid(); + + ctxGrid.clearRect(0, 0, maxx, maxy); + grid.forEach(line => { + line.forEach(cell => { + cell.drawHexagon(false, '#fff',5); + }); // line.forEach + }) // grid.forEach + + balls = []; + for (let k = 0; k < nbBalls; ++k) { + balls[k] = new Ball(); + } + + return true; // ok + +} // startOver + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +function clickCanvas(event) { + if (event.target.tagName == 'CANVAS') { + events.push({event: 'click'}); + mouse.x = event.clientX; + mouse.y = event.clientY; + } +} +//------------------------------------------------------------------------ +let animate; +{ + let animState = 0; + let ball; + + animate = function(tStamp) { + + const event = events.shift(); + + window.requestAnimationFrame(animate); + + switch (animState) { + case 0 : + if (startOver()) { + ++animState; + mouse.x = maxx/2; mouse.y = maxy / 2; + } + + break; + + case 1 : + ctx.clearRect(0, 0, maxx, maxy); + balls.forEach ( ball => { + ball.move(); + }); + if (!event || event.event !== 'click') break; // waiting for click + animState = 0; + break; + } // switch animState + } // animate +} // scope for animate + +//------------------------------------------------------------------------ +// beginning of execution + + { + canv = document.createElement('canvas'); + canv.style.position = "absolute"; + document.body.appendChild(canv); + ctx = canv.getContext('2d'); + canv.setAttribute('title','click me'); + } // canvas creation + { + canvGrid = document.createElement('canvas'); + canvGrid.style.position = "absolute"; + document.body.appendChild(canvGrid); + ctxGrid = canvGrid.getContext('2d'); + canvGrid.style.zIndex = 1; + } // canvas creation + + window.addEventListener('click',clickCanvas); + +// launch animation + + window.requestAnimationFrame(animate); +}); // window load listener diff --git a/crossing-walls/src/style.css b/crossing-walls/src/style.css new file mode 100644 index 0000000..7600a9d --- /dev/null +++ b/crossing-walls/src/style.css @@ -0,0 +1,8 @@ +body { + font-family: Arial, Helvetica, "Liberation Sans", FreeSans, sans-serif; + background-color: #044; + margin:0; + padding:0; + border-width:0; + cursor: pointer; +} \ No newline at end of file diff --git a/crystal-mountains/README.markdown b/crystal-mountains/README.markdown new file mode 100644 index 0000000..edaafb3 --- /dev/null +++ b/crystal-mountains/README.markdown @@ -0,0 +1,5 @@ +# Crystal Mountains + +A Pen created on CodePen.io. Original URL: [https://codepen.io/MananTank/pen/VweNZZm](https://codepen.io/MananTank/pen/VweNZZm). + + diff --git a/crystal-mountains/dist/index.html b/crystal-mountains/dist/index.html new file mode 100644 index 0000000..4e27126 --- /dev/null +++ b/crystal-mountains/dist/index.html @@ -0,0 +1,17 @@ + + + + + CodePen - Crystal Mountains + + + + + +Download Image +
    Generate New Mountain
    + + + + + diff --git a/crystal-mountains/dist/script.js b/crystal-mountains/dist/script.js new file mode 100644 index 0000000..3abc840 --- /dev/null +++ b/crystal-mountains/dist/script.js @@ -0,0 +1,97 @@ +let limit; +let count; +let space; +let min; +let anchorHue; +let hueRange; +let smoothness; +let mappingDirection; + +function setup() { + createCanvas(innerWidth, innerHeight, WEBGL); + noLoop(); + noStroke(); + angleMode(DEGREES); + reset(); + colorMode(HSB, 360, 100, 100); +} + +function reset() { + min = innerWidth < innerHeight ? innerWidth : innerHeight; + limit = min / random(1.3, 2); + count = random(100, 150); // resolution + space = innerWidth / count; + hueRange = random(160, 300); + anchorHue = random(360); + smoothness = random(10, 15); + mappingDirection = random([true, false]); +} + +const getNoise = (i, j) => { + const value = noise(i / smoothness, j / smoothness); + return map(value, 0, 1, -limit / 3, limit); +}; + +function mountainMaker() { + for (let i = 0; i < count; i += 1) { + for (let j = 0; j < count; j += 1) { + let from, to; + if (mappingDirection) { + from = -limit / 3; + to = limit; + } else { + from = limit; + to = -limit / 3; + } + const hue = map( + getNoise(i, j), + from, + to, + anchorHue - hueRange, + anchorHue + hueRange + ); + + fill(hue, 100, 100); + beginShape(); + vertex((i + 1) * space, (j + 1) * space, getNoise(i + 1, j + 1)); + vertex((i + 1) * space, (j - 1) * space, getNoise(i + 1, j - 1)); + vertex((i - 1) * space, (j - 1) * space, getNoise(i - 1, j - 1)); + vertex((i - 1) * space, (j + 1) * space, getNoise(i - 1, j + 1)); + endShape(); + } + } +} + +function draw() { + background(0); + push(); + translate(-innerWidth / 2, min / 10); + rotateX(random(50, 65)); + mountainMaker(); + + pop(); +} + +function windowResized() { + resizeCanvas(innerWidth, innerHeight); + reset(); +} + +document.querySelector(".download").addEventListener("click", function () { + this.download = "crystal-mountain.png"; + this.href = document.querySelector("canvas").toDataURL(); +}); + +document.querySelector(".instruction").addEventListener("click", (e) => { + if (e.target.classList.contains("generating")) return; + const original = e.target.textContent; + e.target.classList.add("generating"); + e.target.textContent = "Generating ..."; + setTimeout(() => { + reset(); + clear(); + draw(); + e.target.textContent = original; + e.target.classList.remove("generating"); + }, 0); +}); \ No newline at end of file diff --git a/crystal-mountains/dist/style.css b/crystal-mountains/dist/style.css new file mode 100644 index 0000000..86944a7 --- /dev/null +++ b/crystal-mountains/dist/style.css @@ -0,0 +1,42 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} +body { + overflow: hidden; + height: 100%; + font-family: Arial; + background: #000; + letter-spacing: 0.15em; + text-transform: uppercase; +} +.download, +.instruction { + position: absolute; + top: 0; + background: #222; + padding: 1vw; + border-radius: 3px; + margin: 1vw; + cursor: pointer; + opacity: 0.5; + color: #fff; + font-size: 1vw; + text-decoration: none; +} +.download:hover, +.instruction:hover { + opacity: 1; +} +.instruction { + left: 0; +} +.instruction.generating { + background: #fff; + color: #000; + pointer-events: none; +} +.download { + right: 0; +} \ No newline at end of file diff --git a/crystal-mountains/license.txt b/crystal-mountains/license.txt new file mode 100644 index 0000000..3ebb03c --- /dev/null +++ b/crystal-mountains/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Manan Tank โšก๏ธ (https://codepen.io/MananTank/pen/VweNZZm) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/crystal-mountains/src/index.pug b/crystal-mountains/src/index.pug new file mode 100644 index 0000000..ec04de7 --- /dev/null +++ b/crystal-mountains/src/index.pug @@ -0,0 +1,2 @@ +a.download Download Image +.instruction Generate New Mountain \ No newline at end of file diff --git a/crystal-mountains/src/script.js b/crystal-mountains/src/script.js new file mode 100644 index 0000000..d66c0af --- /dev/null +++ b/crystal-mountains/src/script.js @@ -0,0 +1,97 @@ +let limit; +let count; +let space; +let min; +let anchorHue; +let hueRange; +let smoothness; +let mappingDirection; + +function setup() { + createCanvas(innerWidth, innerHeight, WEBGL); + noLoop(); + noStroke(); + angleMode(DEGREES); + reset(); + colorMode(HSB, 360, 100, 100); +} + +function reset() { + min = innerWidth < innerHeight ? innerWidth : innerHeight; + limit = min / random(1.3, 2); + count = random(100, 150); // resolution + space = innerWidth / count; + hueRange = random(160, 300); + anchorHue = random(360); + smoothness = random(10, 15); + mappingDirection = random([true, false]); +} + +const getNoise = (i, j) => { + const value = noise(i / smoothness, j / smoothness); + return map(value, 0, 1, -limit / 3, limit); +}; + +function mountainMaker() { + for (let i = 0; i < count; i += 1) { + for (let j = 0; j < count; j += 1) { + let from, to; + if (mappingDirection) { + from = -limit / 3; + to = limit; + } else { + from = limit; + to = -limit / 3; + } + const hue = map( + getNoise(i, j), + from, + to, + anchorHue - hueRange, + anchorHue + hueRange + ); + + fill(hue, 100, 100); + beginShape(); + vertex((i + 1) * space, (j + 1) * space, getNoise(i + 1, j + 1)); + vertex((i + 1) * space, (j - 1) * space, getNoise(i + 1, j - 1)); + vertex((i - 1) * space, (j - 1) * space, getNoise(i - 1, j - 1)); + vertex((i - 1) * space, (j + 1) * space, getNoise(i - 1, j + 1)); + endShape(); + } + } +} + +function draw() { + background(0); + push(); + translate(-innerWidth / 2, min / 10); + rotateX(random(50, 65)); + mountainMaker(); + + pop(); +} + +function windowResized() { + resizeCanvas(innerWidth, innerHeight); + reset(); +} + +document.querySelector(".download").addEventListener("click", function () { + this.download = "crystal-mountain.png"; + this.href = document.querySelector("canvas").toDataURL(); +}); + +document.querySelector(".instruction").addEventListener("click", (e) => { + if (e.target.classList.contains("generating")) return; + const original = e.target.textContent; + e.target.classList.add("generating"); + e.target.textContent = "Generating ..."; + setTimeout(() => { + reset(); + clear(); + draw(); + e.target.textContent = original; + e.target.classList.remove("generating"); + }, 0); +}); diff --git a/crystal-mountains/src/style.styl b/crystal-mountains/src/style.styl new file mode 100644 index 0000000..716e873 --- /dev/null +++ b/crystal-mountains/src/style.styl @@ -0,0 +1,38 @@ +* + margin 0 + padding 0 + box-sizing border-box + +body + overflow hidden + height 100% + font-family Arial + background black + letter-spacing 0.15em + text-transform uppercase + +.download, .instruction + position absolute + top 0 + background #222 + padding 1vw + border-radius 3px + margin 1vw + cursor pointer + opacity 0.5 + color white + font-size 1vw + text-decoration none + &:hover + opacity 1 + + +.instruction + left 0 + &.generating + background white + color black + pointer-events none + +.download + right 0 \ No newline at end of file diff --git a/css-artsphere/README.markdown b/css-artsphere/README.markdown new file mode 100644 index 0000000..d6926df --- /dev/null +++ b/css-artsphere/README.markdown @@ -0,0 +1,5 @@ +# CSS Art - Sphere - + +A Pen created on CodePen.io. Original URL: [https://codepen.io/shunyadezain/pen/mdEJjJR](https://codepen.io/shunyadezain/pen/mdEJjJR). + + diff --git a/css-artsphere/dist/index.html b/css-artsphere/dist/index.html new file mode 100644 index 0000000..923f37d --- /dev/null +++ b/css-artsphere/dist/index.html @@ -0,0 +1,24 @@ + + + + + CodePen - CSS Art - Sphere - + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/css-artsphere/dist/style.css b/css-artsphere/dist/style.css new file mode 100644 index 0000000..2cd2911 --- /dev/null +++ b/css-artsphere/dist/style.css @@ -0,0 +1,171 @@ +body { + margin: 0; + padding: 0; + width: 100%; + height: 100vh; + display: flex; + justify-content: center; + align-items: center; + background: linear-gradient(#e18c7e 54%, #b27175 54% 54.2%, #cbcbcb 54.2%); +} + +.box { + position: relative; +} + +.sphere { + position: absolute; + top: -80%; + left: 50%; + transform: translate(-50%, -80%); + width: 300px; + height: 300px; + background: radial-gradient(circle at 10px 10px, #eabdb7, #f1c0bb, #efbebd, #e4a79f, #d2928a, #e0a098); + border-radius: 50%; + animation: up-and-down 5s ease-in-out infinite alternate; +} +.sphere:before { + content: ""; + position: absolute; + background: radial-gradient(circle at 50% 120%, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 70%); + border-radius: 50%; + bottom: 2.5%; + left: 5%; + opacity: 0.6; + height: 100%; + width: 90%; + filter: blur(5px); + z-index: 2; +} +.sphere:after { + content: ""; + width: 100%; + height: 100%; + position: absolute; + top: 5%; + left: 10%; + border-radius: 50%; + background: radial-gradient(circle at 50% 50%, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.8) 14%, rgba(255, 255, 255, 0) 24%); + transform: translateX(-80px) translateY(-90px) skewX(-20deg); + filter: blur(15px); +} + +.cy { + width: 300px; + position: relative; + top: 200%; + left: 50%; + transform: translate(-50%, 200%); +} +.cy__cy { + width: 100%; + height: 40px; + border-radius: 100%; +} +.cy .top { + background: linear-gradient(to right, #efd8d9 0 50%, #cf9697); + position: relative; + overflow: hidden; +} +.cy .top::before { + position: absolute; + top: -80%; + left: 50%; + content: ""; + width: 200%; + height: 150%; + border-radius: 100%; + background: rgba(30, 30, 30, 0.1); + filter: blur(5px); + z-index: 2; + animation: small-shadow 5s ease-in-out infinite alternate; +} +.cy .top::after { + position: absolute; + top: 0%; + left: 50%; + transform: translate(-50%, 0%); + content: ""; + width: 99%; + height: 95%; + border-radius: 100%; + background: linear-gradient(to right, #f2d0cd, #f3caca, #eecdc5); +} +.cy .btm { + background: linear-gradient(to right, #eabdb7, #f1c0bb, #efbebd, #e4a79f, #d2928a, #e0a098); + position: relative; +} +.cy .btm::before { + position: absolute; + top: 5%; + left: 50%; + transform: translate(-50%, 5%); + content: ""; + width: 99%; + height: 95%; + border-radius: 100%; + background: rgba(0, 0, 0, 0.5); + z-index: -2; +} +.cy .btm::after { + position: absolute; + top: -20%; + left: 50%; + transform: translate(-50%, -20%); + content: ""; + width: 80%; + height: 160%; + border-radius: 100%; + box-shadow: 60px -10px 10px rgba(0, 0, 0, 0.2); + z-index: -2; +} +.cy__lec { + position: absolute; + transform: translateY(-50%); + width: 100%; + height: 40px; + background: linear-gradient(to right, #eabdb7, #f1c0bb, #efbebd, #e4a79f, #d2928a, #e0a098); + z-index: -1; +} +.cy .sphare-shadow { + position: absolute; + top: -20%; + left: 30%; + width: 320px; + height: 90px; + border-radius: 50%; + background: rgba(0, 0, 0, 0.05); + transform: skewX(10deg); + filter: blur(5px); + z-index: -2; + animation: big-shadow 5s ease-in-out infinite alternate; +} + +@keyframes up-and-down { + 0% { + transform: translate(-50%, -80%); + } + 100% { + transform: translate(-50%, -40%); + } +} +@keyframes big-shadow { + 0% { + top: -20%; + left: 30%; + } + 100% { + top: 0%; + left: 0%; + } +} +@keyframes small-shadow { + 0% { + top: -80%; + left: 50%; + } + 100% { + top: -30%; + left: 20%; + } +} \ No newline at end of file diff --git a/css-artsphere/license.txt b/css-artsphere/license.txt new file mode 100644 index 0000000..175af09 --- /dev/null +++ b/css-artsphere/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Shunya Koide (https://codepen.io/shunyadezain/pen/mdEJjJR) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/css-artsphere/src/index.html b/css-artsphere/src/index.html new file mode 100644 index 0000000..33ec539 --- /dev/null +++ b/css-artsphere/src/index.html @@ -0,0 +1,10 @@ +
    +
    + +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/css-artsphere/src/style.scss b/css-artsphere/src/style.scss new file mode 100644 index 0000000..a46b7e0 --- /dev/null +++ b/css-artsphere/src/style.scss @@ -0,0 +1,215 @@ +$gradation: linear-gradient( + to right, + #eabdb7, + #f1c0bb, + #efbebd, + #e4a79f, + #d2928a, + #e0a098 +); + +$gradation-sphere: radial-gradient( + circle at 10px 10px, + #eabdb7, + #f1c0bb, + #efbebd, + #e4a79f, + #d2928a, + #e0a098 +); + +$gradation-top: linear-gradient(to right, #f2d0cd, #f3caca, #eecdc5); + +$height: 40px; + +body { + margin: 0; + padding: 0; + width: 100%; + height: 100vh; + display: flex; + justify-content: center; + align-items: center; + background: linear-gradient(#e18c7e 54%, #b27175 54% 54.2%, #cbcbcb 54.2%); +} + +.box { + position: relative; +} +.sphere { + position: absolute; + top: -80%; + left: 50%; + transform: translate(-50%, -80%); + width: 300px; + height: 300px; + background: $gradation-sphere; + border-radius: 50%; + animation: up-and-down 5s ease-in-out infinite alternate; + + &:before { + content: ""; + position: absolute; + background: radial-gradient( + circle at 50% 120%, + rgba(255, 255, 255, 0.2), + rgba(255, 255, 255, 0) 70% + ); + border-radius: 50%; + bottom: 2.5%; + left: 5%; + opacity: 0.6; + height: 100%; + width: 90%; + filter: blur(5px); + z-index: 2; + } + &:after { + content: ""; + width: 100%; + height: 100%; + position: absolute; + top: 5%; + left: 10%; + border-radius: 50%; + background: radial-gradient( + circle at 50% 50%, + rgba(255, 255, 255, 0.1), + rgba(255, 255, 255, 0.8) 14%, + rgba(255, 255, 255, 0) 24% + ); + transform: translateX(-80px) translateY(-90px) skewX(-20deg); + filter: blur(15px); + } +} + +.cy { + width: 300px; + position: relative; + top: 200%; + left: 50%; + transform: translate(-50%, 200%); + + &__cy { + width: 100%; + height: $height; + + border-radius: 100%; + } + + .top { + background: linear-gradient(to right, #efd8d9 0 50%, #cf9697); + position: relative; + overflow: hidden; + + &::before { + position: absolute; + top: -80%; + left: 50%; + content: ""; + width: 200%; + height: 150%; + border-radius: 100%; + background: rgba(30, 30, 30, 0.1); + filter: blur(5px); + z-index: 2; + animation: small-shadow 5s ease-in-out infinite alternate; + } + &::after { + position: absolute; + top: 0%; + left: 50%; + transform: translate(-50%, 0%); + content: ""; + width: 99%; + height: 95%; + border-radius: 100%; + background: $gradation-top; + } + } + + .btm { + background: $gradation; + position: relative; + + &::before { + position: absolute; + top: 5%; + left: 50%; + transform: translate(-50%, 5%); + content: ""; + width: 99%; + height: 95%; + border-radius: 100%; + background: rgba(0, 0, 0, 0.5); + z-index: -2; + } + + &::after { + position: absolute; + top: -20%; + left: 50%; + transform: translate(-50%, -20%); + content: ""; + width: 80%; + height: 160%; + border-radius: 100%; + box-shadow: 60px -10px 10px rgba(0, 0, 0, 0.2); + z-index: -2; + } + } + + &__lec { + position: absolute; + transform: translateY(-50%); + width: 100%; + height: $height; + background: $gradation; + z-index: -1; + } + + .sphare-shadow { + position: absolute; + top: -20%; + left: 30%; + width: 320px; + height: 90px; + border-radius: 50%; + background: rgba(0, 0, 0, 0.05); + transform: skewX(10deg); + filter: blur(5px); + z-index: -2; + animation: big-shadow 5s ease-in-out infinite alternate; + } +} + +@keyframes up-and-down { + 0% { + transform: translate(-50%, -80%); + } + 100% { + transform: translate(-50%, -40%); + } +} + +@keyframes big-shadow { + 0% { + top: -20%; + left: 30%; + } + 100% { + top: 0%; + left: 0%; + } +} + +@keyframes small-shadow { + 0% { + top: -80%; + left: 50%; + } + 100% { + top: -30%; + left: 20%; + } +} diff --git a/css-clip-path-editor/README.markdown b/css-clip-path-editor/README.markdown new file mode 100644 index 0000000..c942417 --- /dev/null +++ b/css-clip-path-editor/README.markdown @@ -0,0 +1,5 @@ +# CSS clip-path Editor + +A Pen created on CodePen.io. Original URL: [https://codepen.io/stoumann/pen/abZxoOM](https://codepen.io/stoumann/pen/abZxoOM). + + diff --git a/css-clip-path-editor/dist/index.html b/css-clip-path-editor/dist/index.html new file mode 100644 index 0000000..508572d --- /dev/null +++ b/css-clip-path-editor/dist/index.html @@ -0,0 +1,20 @@ + + + + + CodePen - CSS clip-path Editor + + + + + +
    +
    + + + + + diff --git a/css-clip-path-editor/dist/script.js b/css-clip-path-editor/dist/script.js new file mode 100644 index 0000000..fc32077 --- /dev/null +++ b/css-clip-path-editor/dist/script.js @@ -0,0 +1,418 @@ +/* The main module for this is external. The editor is work-in-progress and has some issues when resizing the browser. The arrow-keys works best, if you want to "fine-tune" a point. The final version will work with an API, see how the JSON is under "Preset Code". For this version, localStorage is used, when saving a preset. +NOTE: url()-presets can NOT be edited! +*/ +const elements = document.querySelectorAll('[data-js="clippath"]'); +if (elements.length) { + import('https://elements.stoumann.dk/assets/js/css-clippath.mjs') + .then(module => { + const jsClass = module.default; + elements.forEach(element => { + new jsClass(element, element.dataset, presets); + }); + }) +} + +/* Default presets for localhost demo / or when REST API fails */ +const presets = [ + { + "name": "triangle", + "description": "", + "value": "polygon(50% 0%, 0% 100%, 100% 100%)", + "values": [ + { + "coords": [[50, 0], [0, 100], [100, 100]], + "type": "polygon" + } + ] + }, + { + "name": "trapezoid", + "description": "", + "value": "polygon(20% 0%, 80% 0%, 100% 100%, 0% 100%)", + "values": [ + { + "coords": [[20, 0], [80, 0], [100, 100], [0, 100]], + "type": "polygon" + } + ] + }, + { + "name": "parallel", + "description": "", + "value": "polygon(25% 0%, 100% 0%, 75% 100%, 0% 100%)", + "values": [ + { + "coords": [[25, 0], [100, 0], [75, 100], [0, 100]], + "type": "polygon" + } + ] + }, + { + "name": "rhombus", + "description": "", + "value": "polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)", + "values": [ + { + "coords": [[50, 0], [100, 50], [50, 100], [0, 50]], + "type": "polygon" + } + ] + }, + { + "name": "inset", + "description": "", + "value": "polygon(10% 10%,90% 10%,90% 90%,10% 90%)", + "values": [ + { + "coords": [[10,10],[90,10],[90,90],[10,90]], + "type": "polygon" + } + ] + }, + { + "name": "pentagon", + "description": "", + "value": "polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%)", + "values": [ + { + "coords": [[50, 0], [100, 38], [82, 100], [18, 100], [0, 38]], + "type": "polygon" + } + ] + }, + { + "name": "hexagon", + "description": "", + "value": "polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%)", + "values": [ + { + "coords": [[50, 0], [100, 25], [100, 75], [50, 100], [0, 75], [0, 25]], + "type": "polygon" + } + ] + }, + { + "name": "heptagon", + "description": "", + "value": "polygon(50% 0%, 90% 20%, 100% 60%, 75% 100%, 25% 100%, 0% 60%, 10% 20%)", + "values": [ + { + "coords": [[50, 0], [90, 20], [100, 60], [75, 100], [25, 100], [0, 60], [10, 20]], + "type": "polygon" + } + ] + }, + { + "name": "octagon", + "description": "", + "value": "polygon(30% 0%, 70% 0%, 100% 30%, 100% 70%, 70% 100%, 30% 100%, 0% 70%, 0% 30%)", + "values": [ + { + "coords":[[30, 0],[70, 0], [100, 30], [100, 70], [70, 100], [30, 100], [0, 70], [0, 30]], + "type": "polygon" + } + ] + }, + { + "name": "nonagon", + "description": "", + "value": "polygon(50% 0%, 83% 12%, 100% 43%, 94% 78%, 68% 100%, 32% 100%, 6% 78%, 0% 43%, 17% 12%)", + "values": [ + { + "coords": [[50, 0], [83, 12], [100, 43], [94, 78], [68, 100], [32, 100], [6, 78], [0, 43], [17, 12]], + "type": "polygon" + } + ] + }, + { + "name": "decagon", + "description": "", + "value": "polygon(50% 0%, 80% 10%, 100% 35%, 100% 70%, 80% 90%, 50% 100%, 20% 90%, 0% 70%, 0% 35%, 20% 10%)", + "values": [ + { + "coords": [[50, 0], [80, 10], [100, 35], [100, 70], [80, 90], [50, 100], [20, 90], [0, 70], [0, 35], [20, 10]], + "type": "polygon" + } + ] + }, + { + "name": "bevel", + "description": "", + "value": "polygon(20% 0%, 80% 0%, 100% 20%, 100% 80%, 80% 100%, 20% 100%, 0% 80%, 0% 20%)", + "values": [ + { + "coords": [[20, 0], [80, 0], [100, 20], [100, 80], [80, 100], [20, 100], [0, 80], [0, 20]], + "type": "polygon" + } + ] + }, + { + "name": "rabbet", + "description": "", + "value": "polygon(0% 15%, 15% 15%, 15% 0%, 85% 0%, 85% 15%, 100% 15%, 100% 85%, 85% 85%, 85% 100%, 15% 100%, 15% 85%, 0% 85%)", + "values": [ + { + "coords": [[0, 15], [15, 15], [15, 0], [85, 0], [85, 15], [100, 15], [100, 85], [85, 85], [85, 100], [15, 100], [15, 85], [0, 85]], + "type": "polygon" + } + ] + }, + { + "name": "left arrow", + "description": "", + "value": "polygon(40% 0%, 40% 20%, 100% 20%, 100% 80%, 40% 80%, 40% 100%, 0% 50%)", + "values": [ + { + "coords": [[40, 0], [40, 20], [100, 20], [100, 80], [40, 80], [40, 100], [0, 50]], + "type": "polygon" + } + ] + }, + { + "name": "right arrow", + "description": "", + "value": "polygon(0% 20%, 60% 20%, 60% 0%, 100% 50%, 60% 100%, 60% 80%, 0% 80%)", + "values": [ + { + "coords": [[0, 20], [60, 20], [60, 0], [100, 50], [60, 100], [60, 80], [0, 80]], + "type": "polygon" + } + ] + }, + { + "name": "left point", + "description": "", + "value": "polygon(25% 0%, 100% 1%, 100% 100%, 25% 100%, 0% 50%)", + "values": [ + { + "coords": [[25, 0], [100, 1], [100, 100], [25, 100], [0, 50]], + "type": "polygon" + } + ] + }, + { + "name": "right point", + "description": "", + "value": "polygon(0% 0%, 75% 0%, 100% 50%, 75% 100%, 0% 100%)", + "values": [ + { + "coords": [[0, 0], [75, 0], [100, 50], [75, 100], [0, 100]], + "type": "polygon" + } + ] + }, + { + "name": "left chev", + "description": "", + "value": "polygon(100% 0%, 75% 50%, 100% 100%, 25% 100%, 0% 50%, 25% 0%)", + "values": [ + { + "coords": [[100, 0], [75, 50], [100, 100], [25, 100], [0, 50], [25, 0]], + "type": "polygon" + } + ] + }, + { + "name": "right chev", + "description": "", + "value": "polygon(75% 0%, 100% 50%, 75% 100%, 0% 100%, 25% 50%, 0% 0%)", + "values": [ + { + "coords": [[75, 0], [100, 50], [75, 100], [0, 100], [25, 50], [0, 0]], + "type": "polygon" + } + ] + }, + { + "name": "star", + "description": "", + "value": "polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%)", + "values": [ + { + "coords": [[50, 0], [61, 35], [98, 35], [68, 57], [79, 91], [50, 70], [21, 91], [32, 57], [2, 35], [39, 35]], + "type": "polygon" + } + ] + }, + { + "name": "plus", + "description": "", + "value": "polygon(35% 0%,65% 0%,65% 35%,100% 35%,100% 60%,65% 60%,65% 100%,35% 100%,35% 60%,0% 60%,0% 35%,35% 35%)", + "values": [ + { + "coords": [[35,0],[65,0],[65,35],[100,35],[100,60],[65,60],[65,100],[35,100],[35,60],[0,60],[0,35],[35,35]], + "type": "polygon" + } + ] + }, + { + "name": "minus", + "description": "", + "value": "polygon(100% 35%,100% 60%,0% 60%,0% 35%)", + "values": [ + { + "coords": [[100,35],[100,60],[0,60],[0,35]], + "type": "polygon" + } + ] + }, + { + "name": "message", + "description": "", + "value": "polygon(0% 0%, 100% 0%, 100% 75%, 75% 75%, 75% 100%, 50% 75%, 0% 75%)", + "values": [ + { + "coords": [[0, 0], [100, 0], [100, 75], [75, 75], [75, 100], [50, 75], [0, 75]], + "type": "polygon" + } + ] + }, + { + "name": "close", + "description": "", + "value": "polygon(20% 0%, 0% 20%, 30% 50%, 0% 80%, 20% 100%, 50% 70%, 80% 100%, 100% 80%, 70% 50%, 100% 20%, 80% 0%, 50% 30%)", + "values": [ + { + "coords": [[20, 0], [0, 20], [30, 50], [0, 80], [20, 100], [50, 70], [80, 100], [100, 80], [70, 50], [100, 20], [80, 0], [50, 30] ], + "type": "polygon" + } + ] + }, + { + "name": "frame", + "description": "", + "value": "polygon(0% 0%, 0% 100%, 25% 100%, 25% 25%, 75% 25%, 75% 75%, 25% 75%, 25% 100%, 100% 100%, 100% 0%)", + "values": [ + { + "coords": [[0, 0], [0, 100], [25, 100], [25, 25], [75, 25], [75, 75], [25, 75], [25, 100], [100, 100], [100, 0]], + "type": "polygon" + } + ] + }, + { + "name": "lightning", + "description": "", + "value": "polygon(25% 0%,70% 0%,40% 35%,95% 35%,20% 100%,40% 55%,0% 55%)", + "values": [ + { + "coords": [[25,0],[70,0],[40,35],[95,35],[20,100],[40,55],[0,55]], + "type": "polygon" + } + ] + }, + {"name":"blinds","deletable":false,"value":"polygon(0% 5%,100% 5%,100% 25%,0% 25%,0% 40%,100% 40%,100% 60%,0% 60%,0% 75%,100% 75%,100% 95%,0% 95%)","values":[{"coords":[[0,5],[100,5],[100,25],[0,25],[0,40],[100,40],[100,60],[0,60],[0,75],[100,75],[100,95],[0,95]],"type":"polygon"}]}, + {"name":"house","deletable":false,"value":"polygon(50% 0%,70% 15%,70% 2%,90% 2%,90% 30%,100% 40%,100% 100%,65% 100%,65% 65%,35% 65%,35% 100%,0% 100%,0% 40%)","values":[{"coords":[[50,0],[70,15],[70,2],[90,2],[90,30],[100,40],[100,100],[65,100],[65,65],[35,65],[35,100],[0,100],[0,40]],"type":"polygon"}]}, + { + "name": "circle", + "description": "", + "value": "ellipse(45% 45% at 50% 50%)", + "values": [ + { + "coords": [[50, 50], [50, 5], [95, 50]], + "type": "ellipse" + } + ] + }, + { + "name": "ellipse", + "description": "", + "value": "ellipse(25% 45% at 50% 50%)", + "values": [ + { + "coords": [[50, 50], [50, 5], [75, 50]], + "type": "ellipse" + } + ] + }, + { + "name": "heart", + "description": "", + "value": "url(#heart)", + "values": [ + { + "data": "", + "height": 100, + "type": "url", + "width": 100 + } + ] + }, + { + "name": "leave", + "description": "", + "value": "url(#leave)", + "values": [ + { + "data": "", + "height": 1, + "type": "url", + "width": 1 + } + ] + }, + { + "name": "baloon", + "description": "", + "value": "url(#baloon)", + "values": [ + { + "data": "", + "height": 1, + "type": "url", + "width": 1 + } + ] + }, + { + "name": "marker", + "description": "", + "value": "url(#marker)", + "values": [ + { + "data": "", + "height": 16, + "type": "url", + "width": 16 + } + ] + }, + { + "name": "checkmark", + "description": "", + "value": "url(#checkmark)", + "values": [ + { + "data": "", + "height": 46, + "type": "url", + "width": 46 + } + ] + }, + { + "name": "cog", + "description": "", + "value": "url(#cog)", + "values": [ + { + "data": "", + "height": 46, + "type": "url", + "width": 46 + } + ] + }, + { + "name": "user", + "description": "", + "value": "url(#user)", + "values": [ + { + "data": "", + "height": 46, + "type": "url", + "width": 46 + } + ] + } +]; \ No newline at end of file diff --git a/css-clip-path-editor/dist/style.css b/css-clip-path-editor/dist/style.css new file mode 100644 index 0000000..82b0036 --- /dev/null +++ b/css-clip-path-editor/dist/style.css @@ -0,0 +1,3 @@ +/* +The CSS for this is external. +*/ \ No newline at end of file diff --git a/css-clip-path-editor/license.txt b/css-clip-path-editor/license.txt new file mode 100644 index 0000000..1b14a5d --- /dev/null +++ b/css-clip-path-editor/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Mads Stoumann (https://codepen.io/stoumann/pen/abZxoOM) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/css-clip-path-editor/src/index.html b/css-clip-path-editor/src/index.html new file mode 100644 index 0000000..28e1b4d --- /dev/null +++ b/css-clip-path-editor/src/index.html @@ -0,0 +1,5 @@ +
    +
    \ No newline at end of file diff --git a/css-clip-path-editor/src/script.js b/css-clip-path-editor/src/script.js new file mode 100644 index 0000000..fc32077 --- /dev/null +++ b/css-clip-path-editor/src/script.js @@ -0,0 +1,418 @@ +/* The main module for this is external. The editor is work-in-progress and has some issues when resizing the browser. The arrow-keys works best, if you want to "fine-tune" a point. The final version will work with an API, see how the JSON is under "Preset Code". For this version, localStorage is used, when saving a preset. +NOTE: url()-presets can NOT be edited! +*/ +const elements = document.querySelectorAll('[data-js="clippath"]'); +if (elements.length) { + import('https://elements.stoumann.dk/assets/js/css-clippath.mjs') + .then(module => { + const jsClass = module.default; + elements.forEach(element => { + new jsClass(element, element.dataset, presets); + }); + }) +} + +/* Default presets for localhost demo / or when REST API fails */ +const presets = [ + { + "name": "triangle", + "description": "", + "value": "polygon(50% 0%, 0% 100%, 100% 100%)", + "values": [ + { + "coords": [[50, 0], [0, 100], [100, 100]], + "type": "polygon" + } + ] + }, + { + "name": "trapezoid", + "description": "", + "value": "polygon(20% 0%, 80% 0%, 100% 100%, 0% 100%)", + "values": [ + { + "coords": [[20, 0], [80, 0], [100, 100], [0, 100]], + "type": "polygon" + } + ] + }, + { + "name": "parallel", + "description": "", + "value": "polygon(25% 0%, 100% 0%, 75% 100%, 0% 100%)", + "values": [ + { + "coords": [[25, 0], [100, 0], [75, 100], [0, 100]], + "type": "polygon" + } + ] + }, + { + "name": "rhombus", + "description": "", + "value": "polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)", + "values": [ + { + "coords": [[50, 0], [100, 50], [50, 100], [0, 50]], + "type": "polygon" + } + ] + }, + { + "name": "inset", + "description": "", + "value": "polygon(10% 10%,90% 10%,90% 90%,10% 90%)", + "values": [ + { + "coords": [[10,10],[90,10],[90,90],[10,90]], + "type": "polygon" + } + ] + }, + { + "name": "pentagon", + "description": "", + "value": "polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%)", + "values": [ + { + "coords": [[50, 0], [100, 38], [82, 100], [18, 100], [0, 38]], + "type": "polygon" + } + ] + }, + { + "name": "hexagon", + "description": "", + "value": "polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%)", + "values": [ + { + "coords": [[50, 0], [100, 25], [100, 75], [50, 100], [0, 75], [0, 25]], + "type": "polygon" + } + ] + }, + { + "name": "heptagon", + "description": "", + "value": "polygon(50% 0%, 90% 20%, 100% 60%, 75% 100%, 25% 100%, 0% 60%, 10% 20%)", + "values": [ + { + "coords": [[50, 0], [90, 20], [100, 60], [75, 100], [25, 100], [0, 60], [10, 20]], + "type": "polygon" + } + ] + }, + { + "name": "octagon", + "description": "", + "value": "polygon(30% 0%, 70% 0%, 100% 30%, 100% 70%, 70% 100%, 30% 100%, 0% 70%, 0% 30%)", + "values": [ + { + "coords":[[30, 0],[70, 0], [100, 30], [100, 70], [70, 100], [30, 100], [0, 70], [0, 30]], + "type": "polygon" + } + ] + }, + { + "name": "nonagon", + "description": "", + "value": "polygon(50% 0%, 83% 12%, 100% 43%, 94% 78%, 68% 100%, 32% 100%, 6% 78%, 0% 43%, 17% 12%)", + "values": [ + { + "coords": [[50, 0], [83, 12], [100, 43], [94, 78], [68, 100], [32, 100], [6, 78], [0, 43], [17, 12]], + "type": "polygon" + } + ] + }, + { + "name": "decagon", + "description": "", + "value": "polygon(50% 0%, 80% 10%, 100% 35%, 100% 70%, 80% 90%, 50% 100%, 20% 90%, 0% 70%, 0% 35%, 20% 10%)", + "values": [ + { + "coords": [[50, 0], [80, 10], [100, 35], [100, 70], [80, 90], [50, 100], [20, 90], [0, 70], [0, 35], [20, 10]], + "type": "polygon" + } + ] + }, + { + "name": "bevel", + "description": "", + "value": "polygon(20% 0%, 80% 0%, 100% 20%, 100% 80%, 80% 100%, 20% 100%, 0% 80%, 0% 20%)", + "values": [ + { + "coords": [[20, 0], [80, 0], [100, 20], [100, 80], [80, 100], [20, 100], [0, 80], [0, 20]], + "type": "polygon" + } + ] + }, + { + "name": "rabbet", + "description": "", + "value": "polygon(0% 15%, 15% 15%, 15% 0%, 85% 0%, 85% 15%, 100% 15%, 100% 85%, 85% 85%, 85% 100%, 15% 100%, 15% 85%, 0% 85%)", + "values": [ + { + "coords": [[0, 15], [15, 15], [15, 0], [85, 0], [85, 15], [100, 15], [100, 85], [85, 85], [85, 100], [15, 100], [15, 85], [0, 85]], + "type": "polygon" + } + ] + }, + { + "name": "left arrow", + "description": "", + "value": "polygon(40% 0%, 40% 20%, 100% 20%, 100% 80%, 40% 80%, 40% 100%, 0% 50%)", + "values": [ + { + "coords": [[40, 0], [40, 20], [100, 20], [100, 80], [40, 80], [40, 100], [0, 50]], + "type": "polygon" + } + ] + }, + { + "name": "right arrow", + "description": "", + "value": "polygon(0% 20%, 60% 20%, 60% 0%, 100% 50%, 60% 100%, 60% 80%, 0% 80%)", + "values": [ + { + "coords": [[0, 20], [60, 20], [60, 0], [100, 50], [60, 100], [60, 80], [0, 80]], + "type": "polygon" + } + ] + }, + { + "name": "left point", + "description": "", + "value": "polygon(25% 0%, 100% 1%, 100% 100%, 25% 100%, 0% 50%)", + "values": [ + { + "coords": [[25, 0], [100, 1], [100, 100], [25, 100], [0, 50]], + "type": "polygon" + } + ] + }, + { + "name": "right point", + "description": "", + "value": "polygon(0% 0%, 75% 0%, 100% 50%, 75% 100%, 0% 100%)", + "values": [ + { + "coords": [[0, 0], [75, 0], [100, 50], [75, 100], [0, 100]], + "type": "polygon" + } + ] + }, + { + "name": "left chev", + "description": "", + "value": "polygon(100% 0%, 75% 50%, 100% 100%, 25% 100%, 0% 50%, 25% 0%)", + "values": [ + { + "coords": [[100, 0], [75, 50], [100, 100], [25, 100], [0, 50], [25, 0]], + "type": "polygon" + } + ] + }, + { + "name": "right chev", + "description": "", + "value": "polygon(75% 0%, 100% 50%, 75% 100%, 0% 100%, 25% 50%, 0% 0%)", + "values": [ + { + "coords": [[75, 0], [100, 50], [75, 100], [0, 100], [25, 50], [0, 0]], + "type": "polygon" + } + ] + }, + { + "name": "star", + "description": "", + "value": "polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%)", + "values": [ + { + "coords": [[50, 0], [61, 35], [98, 35], [68, 57], [79, 91], [50, 70], [21, 91], [32, 57], [2, 35], [39, 35]], + "type": "polygon" + } + ] + }, + { + "name": "plus", + "description": "", + "value": "polygon(35% 0%,65% 0%,65% 35%,100% 35%,100% 60%,65% 60%,65% 100%,35% 100%,35% 60%,0% 60%,0% 35%,35% 35%)", + "values": [ + { + "coords": [[35,0],[65,0],[65,35],[100,35],[100,60],[65,60],[65,100],[35,100],[35,60],[0,60],[0,35],[35,35]], + "type": "polygon" + } + ] + }, + { + "name": "minus", + "description": "", + "value": "polygon(100% 35%,100% 60%,0% 60%,0% 35%)", + "values": [ + { + "coords": [[100,35],[100,60],[0,60],[0,35]], + "type": "polygon" + } + ] + }, + { + "name": "message", + "description": "", + "value": "polygon(0% 0%, 100% 0%, 100% 75%, 75% 75%, 75% 100%, 50% 75%, 0% 75%)", + "values": [ + { + "coords": [[0, 0], [100, 0], [100, 75], [75, 75], [75, 100], [50, 75], [0, 75]], + "type": "polygon" + } + ] + }, + { + "name": "close", + "description": "", + "value": "polygon(20% 0%, 0% 20%, 30% 50%, 0% 80%, 20% 100%, 50% 70%, 80% 100%, 100% 80%, 70% 50%, 100% 20%, 80% 0%, 50% 30%)", + "values": [ + { + "coords": [[20, 0], [0, 20], [30, 50], [0, 80], [20, 100], [50, 70], [80, 100], [100, 80], [70, 50], [100, 20], [80, 0], [50, 30] ], + "type": "polygon" + } + ] + }, + { + "name": "frame", + "description": "", + "value": "polygon(0% 0%, 0% 100%, 25% 100%, 25% 25%, 75% 25%, 75% 75%, 25% 75%, 25% 100%, 100% 100%, 100% 0%)", + "values": [ + { + "coords": [[0, 0], [0, 100], [25, 100], [25, 25], [75, 25], [75, 75], [25, 75], [25, 100], [100, 100], [100, 0]], + "type": "polygon" + } + ] + }, + { + "name": "lightning", + "description": "", + "value": "polygon(25% 0%,70% 0%,40% 35%,95% 35%,20% 100%,40% 55%,0% 55%)", + "values": [ + { + "coords": [[25,0],[70,0],[40,35],[95,35],[20,100],[40,55],[0,55]], + "type": "polygon" + } + ] + }, + {"name":"blinds","deletable":false,"value":"polygon(0% 5%,100% 5%,100% 25%,0% 25%,0% 40%,100% 40%,100% 60%,0% 60%,0% 75%,100% 75%,100% 95%,0% 95%)","values":[{"coords":[[0,5],[100,5],[100,25],[0,25],[0,40],[100,40],[100,60],[0,60],[0,75],[100,75],[100,95],[0,95]],"type":"polygon"}]}, + {"name":"house","deletable":false,"value":"polygon(50% 0%,70% 15%,70% 2%,90% 2%,90% 30%,100% 40%,100% 100%,65% 100%,65% 65%,35% 65%,35% 100%,0% 100%,0% 40%)","values":[{"coords":[[50,0],[70,15],[70,2],[90,2],[90,30],[100,40],[100,100],[65,100],[65,65],[35,65],[35,100],[0,100],[0,40]],"type":"polygon"}]}, + { + "name": "circle", + "description": "", + "value": "ellipse(45% 45% at 50% 50%)", + "values": [ + { + "coords": [[50, 50], [50, 5], [95, 50]], + "type": "ellipse" + } + ] + }, + { + "name": "ellipse", + "description": "", + "value": "ellipse(25% 45% at 50% 50%)", + "values": [ + { + "coords": [[50, 50], [50, 5], [75, 50]], + "type": "ellipse" + } + ] + }, + { + "name": "heart", + "description": "", + "value": "url(#heart)", + "values": [ + { + "data": "", + "height": 100, + "type": "url", + "width": 100 + } + ] + }, + { + "name": "leave", + "description": "", + "value": "url(#leave)", + "values": [ + { + "data": "", + "height": 1, + "type": "url", + "width": 1 + } + ] + }, + { + "name": "baloon", + "description": "", + "value": "url(#baloon)", + "values": [ + { + "data": "", + "height": 1, + "type": "url", + "width": 1 + } + ] + }, + { + "name": "marker", + "description": "", + "value": "url(#marker)", + "values": [ + { + "data": "", + "height": 16, + "type": "url", + "width": 16 + } + ] + }, + { + "name": "checkmark", + "description": "", + "value": "url(#checkmark)", + "values": [ + { + "data": "", + "height": 46, + "type": "url", + "width": 46 + } + ] + }, + { + "name": "cog", + "description": "", + "value": "url(#cog)", + "values": [ + { + "data": "", + "height": 46, + "type": "url", + "width": 46 + } + ] + }, + { + "name": "user", + "description": "", + "value": "url(#user)", + "values": [ + { + "data": "", + "height": 46, + "type": "url", + "width": 46 + } + ] + } +]; \ No newline at end of file diff --git a/css-clip-path-editor/src/style.css b/css-clip-path-editor/src/style.css new file mode 100644 index 0000000..82b0036 --- /dev/null +++ b/css-clip-path-editor/src/style.css @@ -0,0 +1,3 @@ +/* +The CSS for this is external. +*/ \ No newline at end of file diff --git a/css-color-rings/README.markdown b/css-color-rings/README.markdown new file mode 100644 index 0000000..deeb487 --- /dev/null +++ b/css-color-rings/README.markdown @@ -0,0 +1,5 @@ +# CSS Color Rings (๐Ÿ๐Ÿ’ฃ) + +A Pen created on CodePen.io. Original URL: [https://codepen.io/jh3y/pen/GRrPPJq](https://codepen.io/jh3y/pen/GRrPPJq). + + diff --git a/css-color-rings/dist/index.html b/css-color-rings/dist/index.html new file mode 100644 index 0000000..4adf14c --- /dev/null +++ b/css-color-rings/dist/index.html @@ -0,0 +1,127 @@ + + + + + CodePen - CSS Color Rings (๐Ÿ๐Ÿ’ฃ) + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/css-color-rings/dist/style.css b/css-color-rings/dist/style.css new file mode 100644 index 0000000..7a6d06e --- /dev/null +++ b/css-color-rings/dist/style.css @@ -0,0 +1,54 @@ +* { + box-sizing: border-box; +} +:root { + --delay-bump: 0.2; + --stagger: 0.15; + --transition: 2.5; + --size: 6vmin; + --coefficient: 8; + --border: 0.5vmin; + --width: calc(var(--coefficient) * var(--size)); + --lower-bound: 0; + --upper-bound: 200; + --margin: 1rem; +} +body { + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + background: #091116; +} +body > .row + .row { + margin-top: var(--margin); +} +.row { + display: flex; + width: var(--width); + position: relative; + height: var(--size); +} +.circle { + --color: hsl(calc((var(--lower-bound, 0) + ((var(--upper-bound, 200) - var(--lower-bound, 0)) / var(--count, 0)) * (var(--count) - var(--index, 0)))), 75%, 45%); + height: var(--size); + width: var(--size); + border-radius: 50%; + opacity: 0.7; + filter: brightness(1.3) drop-shadow(0 0 1vmin var(--color)); + border: var(--border) solid var(--color); + position: absolute; + -webkit-animation: traverse calc(var(--transition) * 1s) calc(((var(--delay) * var(--delay-bump)) + (var(--index, 0) * var(--stagger))) * -1s) infinite alternate ease-in-out; + animation: traverse calc(var(--transition) * 1s) calc(((var(--delay) * var(--delay-bump)) + (var(--index, 0) * var(--stagger))) * -1s) infinite alternate ease-in-out; +} +@-webkit-keyframes traverse { + to { + transform: translate(calc((var(--coefficient) - 1) * 100%), 0); + } +} +@keyframes traverse { + to { + transform: translate(calc((var(--coefficient) - 1) * 100%), 0); + } +} \ No newline at end of file diff --git a/css-color-rings/license.txt b/css-color-rings/license.txt new file mode 100644 index 0000000..2ee146a --- /dev/null +++ b/css-color-rings/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Jhey (https://codepen.io/jh3y/pen/GRrPPJq) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/css-color-rings/src/index.pug b/css-color-rings/src/index.pug new file mode 100644 index 0000000..1edf133 --- /dev/null +++ b/css-color-rings/src/index.pug @@ -0,0 +1,10 @@ +- const ROWS = 7 +- const CIRCLES = 14 +- let r = 0 +while r < ROWS + .row(style=`--count: ${CIRCLES}; --delay: ${r};`) + - let c = 0 + while c < CIRCLES + .row__circle.circle(style=`--index: ${c};`) + - c++ + - r++ \ No newline at end of file diff --git a/css-color-rings/src/style.styl b/css-color-rings/src/style.styl new file mode 100644 index 0000000..7e13115 --- /dev/null +++ b/css-color-rings/src/style.styl @@ -0,0 +1,46 @@ +* + box-sizing border-box + +:root + --delay-bump 0.2 + --stagger 0.15 + --transition 2.5 + --size 6vmin + --coefficient 8 + --border 0.5vmin + --width calc(var(--coefficient) * var(--size)) + --lower-bound 0 + --upper-bound 200 + --margin 1rem + +body + min-height 100vh + display flex + align-items center + justify-content center + flex-direction column + background hsl(202, 44%, 6%) + +body > .row + .row + margin-top var(--margin) + +.row + display flex + width var(--width) + position relative + height var(--size) + +.circle + --color 'hsl(%s, 75%, 45%)' % calc((var(--lower-bound, 0) + ((var(--upper-bound, 200) - var(--lower-bound, 0)) / var(--count, 0)) * (var(--count) - var(--index, 0)))) + height var(--size) + width var(--size) + border-radius 50% + opacity 0.7 + filter brightness(1.3) drop-shadow(0 0 1vmin var(--color)) + border var(--border) solid var(--color) + position absolute + animation traverse calc(var(--transition) * 1s) calc(((var(--delay) * var(--delay-bump)) + (var(--index, 0) * var(--stagger))) * -1s) infinite alternate ease-in-out + +@keyframes traverse + to + transform translate(calc((var(--coefficient) - 1) * 100%), 0) \ No newline at end of file diff --git a/css-dna/README.markdown b/css-dna/README.markdown new file mode 100644 index 0000000..06397f7 --- /dev/null +++ b/css-dna/README.markdown @@ -0,0 +1,11 @@ +# CSS DNA ๐Ÿงฌ + +A Pen created on CodePen.io. Original URL: [https://codepen.io/shadow-scientist/pen/eYgPjxX](https://codepen.io/shadow-scientist/pen/eYgPjxX). + +I already did a similar concept last year. Found that the code was horrible! ๐Ÿ˜… + +The infinite double-helix loop is created by adding a slight delay on every div element in the DNA container. The deoxyribose sugar is painted in white as two circles. Also, nitrogenous bases are shown as colored lines that join the sugar circles. + +It is not a standard replication of actual DNA. It's a minimal illustration of an animated DNA made with HTML (pug) and CSS. Plus, it's responsive! + +Today I recreate the project because 22nd April is my Biology exam ๐Ÿ˜„ diff --git a/css-dna/dist/index.html b/css-dna/dist/index.html new file mode 100644 index 0000000..fce8e88 --- /dev/null +++ b/css-dna/dist/index.html @@ -0,0 +1,43 @@ + + + + + CodePen - CSS DNA ๐Ÿงฌ + + + + + +
    +
    +
    0
    +
    1
    +
    2
    +
    3
    +
    4
    +
    5
    +
    6
    +
    7
    +
    8
    +
    9
    +
    10
    +
    11
    +
    12
    +
    13
    +
    14
    +
    15
    +
    16
    +
    17
    +
    18
    +
    19
    +
    20
    +
    21
    +
    22
    +
    23
    +
    +
    + + + + + diff --git a/css-dna/dist/script.js b/css-dna/dist/script.js new file mode 100644 index 0000000..0060895 --- /dev/null +++ b/css-dna/dist/script.js @@ -0,0 +1 @@ +// CSS is a programming language \ No newline at end of file diff --git a/css-dna/dist/style.css b/css-dna/dist/style.css new file mode 100644 index 0000000..456f12d --- /dev/null +++ b/css-dna/dist/style.css @@ -0,0 +1,125 @@ +:root{ + --rotate: -26deg; + + /* to make it responsive */ + --unit: 1vmin; + --zoom: 160; + --workspace-min: 768; /* device screen height = 768px */ + --upx: calc(var(--zoom) * (var(--unit) / var(--workspace-min))); /* upx = units per pixel */ + + /* DNA Helix loop */ + --animation-speed: 1; + --helix-duration: 0.5s; + --helix-iteration-factor: 0.05s; + + /* DNA model */ + --dna-max-height: calc(140 * var(--upx)); + --dna-nitrogenous-base-width: calc(6 * var(--upx)); + --dna-nitrogenous-base-margin: calc(8 * var(--upx)); + --dna-sugar-diameter: calc(15 * var(--upx)); + --dna-sugar-border-size: calc(6 * var(--upx)); + + /* colors */ + --color-background: #151515; + --color-sugar: #f2f1d5; + --color-A: #ffba36; + --color-T: #26f826; + --color-C: #439AD9; + --color-G: #E96451; +} + +/* rotate the dna container for smart mobile devices */ +@media (orientation: portrait){ + :root{ + --rotate: -58deg; + } +} + +/* to make things look pretty */ +html, body{ + padding: 0; + margin: 0; + width: 100%; + height: 100%; + display: block; +} + +body{ + background: var(--color-background); + overflow: auto; +} + +html{ + scrollbar-width: thin; + scrollbar-color: rgba(255,255,255,0.4) rgba(0,0,0,0); +} + +/* align the DNA to middle */ +.wrapper{ + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%) rotate(var(--rotate)); + transform-origin: 50% 50%; +} + +/* DNA is a flex container with n-double helix */ +.dna{ + display: flex; + align-items: center; + position: relative; + height: var(--dna-max-height); +} + +/* helix (nitrogenous base) */ +.dna > div{ + font-size: 0; + position: relative; + width: var(--dna-nitrogenous-base-width); + height: 0; + background: linear-gradient(0deg, var(--color-G) 50%, var(--color-C) 50%); + display: inline-block; + margin: 0 var(--dna-nitrogenous-base-margin); + animation: + double-helix + ease + calc(var(--helix-duration) / var(--animation-speed)) + calc((var(--i) * var(--helix-iteration-factor)) / var(--animation-speed)) + alternate + infinite; +} + +.dna > div:nth-child(2n){ + background: linear-gradient(0deg, var(--color-A) 50%, var(--color-T) 50%); +} + +@keyframes double-helix{ + to{ + height: var(--dna-max-height); + } +} + +/* sugar */ +.dna > div::before, +.dna > div::after{ + content: ""; + position: absolute; + left: 50%; + width: var(--dna-sugar-diameter); + height: var(--dna-sugar-diameter); + display: block; + border-radius: 50%; + background: var(--color-sugar); + border: var(--dna-sugar-border-size) solid var(--color-background); + box-sizing: content-box; +} + +.dna > div::before{ + top: 0; + transform: translate(-50%, -50%); +} + +.dna > div::after{ + bottom: 0; + transform: translate(-50%, 50%); +} \ No newline at end of file diff --git a/css-dna/license.txt b/css-dna/license.txt new file mode 100644 index 0000000..a0a8240 --- /dev/null +++ b/css-dna/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Shadow Scientist (https://codepen.io/shadow-scientist/pen/eYgPjxX) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/css-dna/src/index.pug b/css-dna/src/index.pug new file mode 100644 index 0000000..32f1fc0 --- /dev/null +++ b/css-dna/src/index.pug @@ -0,0 +1,6 @@ +- var n = 0; +- var iteration = 24; +.wrapper + .dna + while n < iteration + div(style="--i: "+n)= n++ \ No newline at end of file diff --git a/css-dna/src/script.js b/css-dna/src/script.js new file mode 100644 index 0000000..0060895 --- /dev/null +++ b/css-dna/src/script.js @@ -0,0 +1 @@ +// CSS is a programming language \ No newline at end of file diff --git a/css-dna/src/style.css b/css-dna/src/style.css new file mode 100644 index 0000000..456f12d --- /dev/null +++ b/css-dna/src/style.css @@ -0,0 +1,125 @@ +:root{ + --rotate: -26deg; + + /* to make it responsive */ + --unit: 1vmin; + --zoom: 160; + --workspace-min: 768; /* device screen height = 768px */ + --upx: calc(var(--zoom) * (var(--unit) / var(--workspace-min))); /* upx = units per pixel */ + + /* DNA Helix loop */ + --animation-speed: 1; + --helix-duration: 0.5s; + --helix-iteration-factor: 0.05s; + + /* DNA model */ + --dna-max-height: calc(140 * var(--upx)); + --dna-nitrogenous-base-width: calc(6 * var(--upx)); + --dna-nitrogenous-base-margin: calc(8 * var(--upx)); + --dna-sugar-diameter: calc(15 * var(--upx)); + --dna-sugar-border-size: calc(6 * var(--upx)); + + /* colors */ + --color-background: #151515; + --color-sugar: #f2f1d5; + --color-A: #ffba36; + --color-T: #26f826; + --color-C: #439AD9; + --color-G: #E96451; +} + +/* rotate the dna container for smart mobile devices */ +@media (orientation: portrait){ + :root{ + --rotate: -58deg; + } +} + +/* to make things look pretty */ +html, body{ + padding: 0; + margin: 0; + width: 100%; + height: 100%; + display: block; +} + +body{ + background: var(--color-background); + overflow: auto; +} + +html{ + scrollbar-width: thin; + scrollbar-color: rgba(255,255,255,0.4) rgba(0,0,0,0); +} + +/* align the DNA to middle */ +.wrapper{ + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%) rotate(var(--rotate)); + transform-origin: 50% 50%; +} + +/* DNA is a flex container with n-double helix */ +.dna{ + display: flex; + align-items: center; + position: relative; + height: var(--dna-max-height); +} + +/* helix (nitrogenous base) */ +.dna > div{ + font-size: 0; + position: relative; + width: var(--dna-nitrogenous-base-width); + height: 0; + background: linear-gradient(0deg, var(--color-G) 50%, var(--color-C) 50%); + display: inline-block; + margin: 0 var(--dna-nitrogenous-base-margin); + animation: + double-helix + ease + calc(var(--helix-duration) / var(--animation-speed)) + calc((var(--i) * var(--helix-iteration-factor)) / var(--animation-speed)) + alternate + infinite; +} + +.dna > div:nth-child(2n){ + background: linear-gradient(0deg, var(--color-A) 50%, var(--color-T) 50%); +} + +@keyframes double-helix{ + to{ + height: var(--dna-max-height); + } +} + +/* sugar */ +.dna > div::before, +.dna > div::after{ + content: ""; + position: absolute; + left: 50%; + width: var(--dna-sugar-diameter); + height: var(--dna-sugar-diameter); + display: block; + border-radius: 50%; + background: var(--color-sugar); + border: var(--dna-sugar-border-size) solid var(--color-background); + box-sizing: content-box; +} + +.dna > div::before{ + top: 0; + transform: translate(-50%, -50%); +} + +.dna > div::after{ + bottom: 0; + transform: translate(-50%, 50%); +} \ No newline at end of file diff --git a/css-dominoes/README.markdown b/css-dominoes/README.markdown new file mode 100644 index 0000000..96bb3dd --- /dev/null +++ b/css-dominoes/README.markdown @@ -0,0 +1,5 @@ +# CSS Dominoes + +A Pen created on CodePen.io. Original URL: [https://codepen.io/amit_sheen/pen/qBaJpPo](https://codepen.io/amit_sheen/pen/qBaJpPo). + + diff --git a/css-dominoes/dist/index.html b/css-dominoes/dist/index.html new file mode 100644 index 0000000..233f35b --- /dev/null +++ b/css-dominoes/dist/index.html @@ -0,0 +1,68 @@ + + + + + CodePen - CSS Dominoes + + + + + +
    + +

    CSS Dominoes

    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + + + diff --git a/css-dominoes/dist/style.css b/css-dominoes/dist/style.css new file mode 100644 index 0000000..93bc6de --- /dev/null +++ b/css-dominoes/dist/style.css @@ -0,0 +1,458 @@ +@import url("https://fonts.googleapis.com/css2?family=Indie+Flower&display=swap"); +*, *::before, *::after { + padding: 0; + margin: 0 auto; + box-sizing: border-box; +} + +body { + font-family: "Indie Flower", cursive; + background-color: #333; + color: #fff; + min-height: 100vh; + display: flex; + justify-content: center; + align-items: center; +} + +.container { + position: relative; + width: 900px; + height: 600px; + border: 2px solid #fff; + background-image: linear-gradient(#456, #333 75%, #444 75%, #222); + perspective: 400px; + overflow: hidden; +} +.container h1 { + font-size: 60px; + font-weight: normal; + text-align: center; + padding: 2em 0.5em; + line-height: 0.75; +} + +.floor { + position: absolute; + bottom: 0px; + width: 200px; + height: 400px; + background-color: #0003; + transform: rotateX(90deg); + transform-origin: bottom; + -webkit-animation: floors 16s infinite linear; + animation: floors 16s infinite linear; +} +.floor:nth-child(1) { + -webkit-animation-delay: -2.31s; + animation-delay: -2.31s; +} +.floor:nth-child(2) { + -webkit-animation-delay: -4.31s; + animation-delay: -4.31s; +} +.floor:nth-child(3) { + -webkit-animation-delay: -6.31s; + animation-delay: -6.31s; +} +.floor:nth-child(4) { + -webkit-animation-delay: -8.31s; + animation-delay: -8.31s; +} +.floor:nth-child(5) { + -webkit-animation-delay: -10.31s; + animation-delay: -10.31s; +} +.floor:nth-child(6) { + -webkit-animation-delay: -12.31s; + animation-delay: -12.31s; +} +.floor:nth-child(7) { + -webkit-animation-delay: -14.31s; + animation-delay: -14.31s; +} +.floor:nth-child(8) { + -webkit-animation-delay: -16.31s; + animation-delay: -16.31s; +} +@-webkit-keyframes floors { + from { + left: calc(50% - 1500px); + } + to { + left: calc(50% + 1700px); + } +} +@keyframes floors { + from { + left: calc(50% - 1500px); + } + to { + left: calc(50% + 1700px); + } +} + +.shadow { + position: absolute; + bottom: 0px; + width: 60px; + height: 400px; + background-image: radial-gradient(#222, transparent 60%); + transform: rotateX(90deg) translateX(40px) scaleX(-1); + transform-origin: bottom left; + -webkit-animation: shadows 8s infinite linear; + animation: shadows 8s infinite linear; +} +.shadow:nth-child(1) { + -webkit-animation-delay: -0.5s; + animation-delay: -0.5s; +} +.shadow:nth-child(2) { + -webkit-animation-delay: -1s; + animation-delay: -1s; +} +.shadow:nth-child(3) { + -webkit-animation-delay: -1.5s; + animation-delay: -1.5s; +} +.shadow:nth-child(4) { + -webkit-animation-delay: -2s; + animation-delay: -2s; +} +.shadow:nth-child(5) { + -webkit-animation-delay: -2.5s; + animation-delay: -2.5s; +} +.shadow:nth-child(6) { + -webkit-animation-delay: -3s; + animation-delay: -3s; +} +.shadow:nth-child(7) { + -webkit-animation-delay: -3.5s; + animation-delay: -3.5s; +} +.shadow:nth-child(8) { + -webkit-animation-delay: -4s; + animation-delay: -4s; +} +.shadow:nth-child(9) { + -webkit-animation-delay: -4.5s; + animation-delay: -4.5s; +} +.shadow:nth-child(10) { + -webkit-animation-delay: -5s; + animation-delay: -5s; +} +.shadow:nth-child(11) { + -webkit-animation-delay: -5.5s; + animation-delay: -5.5s; +} +.shadow:nth-child(12) { + -webkit-animation-delay: -6s; + animation-delay: -6s; +} +.shadow:nth-child(13) { + -webkit-animation-delay: -6.5s; + animation-delay: -6.5s; +} +.shadow:nth-child(14) { + -webkit-animation-delay: -7s; + animation-delay: -7s; +} +.shadow:nth-child(15) { + -webkit-animation-delay: -7.5s; + animation-delay: -7.5s; +} +.shadow:nth-child(16) { + -webkit-animation-delay: -8s; + animation-delay: -8s; +} +@-webkit-keyframes shadows { + from { + left: calc(50% - 700px); + } + to { + left: calc(50% + 900px); + } + 0%, 43.75% { + transform: rotateX(90deg) translateX(40px) scaleX(-1); + } + 100% { + transform: rotateX(90deg) translateX(40px) scaleX(-7); + } +} +@keyframes shadows { + from { + left: calc(50% - 700px); + } + to { + left: calc(50% + 900px); + } + 0%, 43.75% { + transform: rotateX(90deg) translateX(40px) scaleX(-1); + } + 100% { + transform: rotateX(90deg) translateX(40px) scaleX(-7); + } +} + +.domino { + position: absolute; + bottom: 0px; + width: 20px; + height: 400px; + transform: rotateX(90deg); + transform-origin: bottom left; + transform-style: preserve-3d; + -webkit-animation: domino 8s infinite linear; + animation: domino 8s infinite linear; +} +.domino:nth-child(1) { + -webkit-animation-delay: -0.5s; + animation-delay: -0.5s; +} +.domino:nth-child(1) * { + position: absolute; + background-color: #E57373; +} +.domino:nth-child(2) { + -webkit-animation-delay: -1s; + animation-delay: -1s; +} +.domino:nth-child(2) * { + position: absolute; + background-color: #F06292; +} +.domino:nth-child(3) { + -webkit-animation-delay: -1.5s; + animation-delay: -1.5s; +} +.domino:nth-child(3) * { + position: absolute; + background-color: #BA68C8; +} +.domino:nth-child(4) { + -webkit-animation-delay: -2s; + animation-delay: -2s; +} +.domino:nth-child(4) * { + position: absolute; + background-color: #9575CD; +} +.domino:nth-child(5) { + -webkit-animation-delay: -2.5s; + animation-delay: -2.5s; +} +.domino:nth-child(5) * { + position: absolute; + background-color: #7986CB; +} +.domino:nth-child(6) { + -webkit-animation-delay: -3s; + animation-delay: -3s; +} +.domino:nth-child(6) * { + position: absolute; + background-color: #64B5F6; +} +.domino:nth-child(7) { + -webkit-animation-delay: -3.5s; + animation-delay: -3.5s; +} +.domino:nth-child(7) * { + position: absolute; + background-color: #4FC3F7; +} +.domino:nth-child(8) { + -webkit-animation-delay: -4s; + animation-delay: -4s; +} +.domino:nth-child(8) * { + position: absolute; + background-color: #4DD0E1; +} +.domino:nth-child(9) { + -webkit-animation-delay: -4.5s; + animation-delay: -4.5s; +} +.domino:nth-child(9) * { + position: absolute; + background-color: #4DB6AC; +} +.domino:nth-child(10) { + -webkit-animation-delay: -5s; + animation-delay: -5s; +} +.domino:nth-child(10) * { + position: absolute; + background-color: #81C784; +} +.domino:nth-child(11) { + -webkit-animation-delay: -5.5s; + animation-delay: -5.5s; +} +.domino:nth-child(11) * { + position: absolute; + background-color: #AED581; +} +.domino:nth-child(12) { + -webkit-animation-delay: -6s; + animation-delay: -6s; +} +.domino:nth-child(12) * { + position: absolute; + background-color: #DCE775; +} +.domino:nth-child(13) { + -webkit-animation-delay: -6.5s; + animation-delay: -6.5s; +} +.domino:nth-child(13) * { + position: absolute; + background-color: #FFF176; +} +.domino:nth-child(14) { + -webkit-animation-delay: -7s; + animation-delay: -7s; +} +.domino:nth-child(14) * { + position: absolute; + background-color: #FFB74D; +} +.domino:nth-child(15) { + -webkit-animation-delay: -7.5s; + animation-delay: -7.5s; +} +.domino:nth-child(15) * { + position: absolute; + background-color: #FFB74D; +} +.domino:nth-child(16) { + -webkit-animation-delay: -8s; + animation-delay: -8s; +} +.domino:nth-child(16) * { + position: absolute; + background-color: #FF8A65; +} +.domino .side { + bottom: 100px; + left: 0; + width: 20px; + height: 200px; + background-image: linear-gradient(45deg, #0005, #fff5); + transform: rotateX(-90deg); + transform-origin: bottom; +} +.domino .front { + bottom: 100px; + right: 0; + width: 200px; + height: 100px; + background-image: linear-gradient(45deg, #fff5, #0005); + transform: rotateY(90deg); + transform-origin: right; +} +.domino .top { + bottom: 100px; + left: 0; + width: 20px; + height: 100px; + background-image: linear-gradient(45deg, #fff5, #0005); + transform: translateZ(200px); + transform-origin: right; +} +@-webkit-keyframes domino { + from { + left: calc(50% - 700px); + } + to { + left: calc(50% + 900px); + } + 0% { + z-index: 0; + } + 43.75% { + z-index: 32; + } + 50% { + z-index: 0; + } + 100% { + z-index: 32; + } + 0%, 43.75% { + transform: rotateX(90deg) rotateY(0deg); + } + 50% { + transform: rotateX(90deg) rotateY(-24deg); + } + 56.25% { + transform: rotateX(90deg) rotateY(-45deg); + } + 62.5% { + transform: rotateX(90deg) rotateY(-60deg); + } + 68.75% { + transform: rotateX(90deg) rotateY(-68.5deg); + } + 75% { + transform: rotateX(90deg) rotateY(-73deg); + } + 81.25% { + transform: rotateX(90deg) rotateY(-75.5deg); + } + 87.5% { + transform: rotateX(90deg) rotateY(-77deg); + } + 100% { + transform: rotateX(90deg) rotateY(-78deg); + } +} +@keyframes domino { + from { + left: calc(50% - 700px); + } + to { + left: calc(50% + 900px); + } + 0% { + z-index: 0; + } + 43.75% { + z-index: 32; + } + 50% { + z-index: 0; + } + 100% { + z-index: 32; + } + 0%, 43.75% { + transform: rotateX(90deg) rotateY(0deg); + } + 50% { + transform: rotateX(90deg) rotateY(-24deg); + } + 56.25% { + transform: rotateX(90deg) rotateY(-45deg); + } + 62.5% { + transform: rotateX(90deg) rotateY(-60deg); + } + 68.75% { + transform: rotateX(90deg) rotateY(-68.5deg); + } + 75% { + transform: rotateX(90deg) rotateY(-73deg); + } + 81.25% { + transform: rotateX(90deg) rotateY(-75.5deg); + } + 87.5% { + transform: rotateX(90deg) rotateY(-77deg); + } + 100% { + transform: rotateX(90deg) rotateY(-78deg); + } +} \ No newline at end of file diff --git a/css-dominoes/license.txt b/css-dominoes/license.txt new file mode 100644 index 0000000..0a0daf1 --- /dev/null +++ b/css-dominoes/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Amit Sheen (https://codepen.io/amit_sheen/pen/qBaJpPo) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/css-dominoes/src/index.html b/css-dominoes/src/index.html new file mode 100644 index 0000000..27b3955 --- /dev/null +++ b/css-dominoes/src/index.html @@ -0,0 +1,54 @@ +
    + +

    CSS Dominoes

    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    \ No newline at end of file diff --git a/css-dominoes/src/style.scss b/css-dominoes/src/style.scss new file mode 100644 index 0000000..afd7e69 --- /dev/null +++ b/css-dominoes/src/style.scss @@ -0,0 +1,174 @@ +@import url('https://fonts.googleapis.com/css2?family=Indie+Flower&display=swap'); + +*, *::before, *::after { + padding: 0; + margin: 0 auto; + box-sizing: border-box; +} + +body { + font-family: 'Indie Flower', cursive; + background-color: #333; + color: #fff; + min-height: 100vh; + display: flex; + justify-content: center; + align-items: center; +} + +.container { + position: relative; + width: 900px; + height: 600px; + border: 2px solid #fff; + background-image: linear-gradient(#456, #333 75%, #444 75%, #222); + perspective: 400px; + overflow: hidden; + + h1 { + font-size: 60px; + font-weight: normal; + text-align: center; + padding: 2em 0.5em; + line-height: 0.75; + } +} + +$speed: 8s; +$colors: [#E57373, #F06292, #BA68C8, #9575CD, #7986CB, #64B5F6, #4FC3F7, #4DD0E1, #4DB6AC, #81C784, #AED581, #DCE775, #FFF176, #FFB74D, #FFB74D, #FF8A65]; + +.floor { + position: absolute; + bottom: 0px; + width: 200px; + height: 400px; + background-color: #0003; + transform: rotateX(90deg); + transform-origin: bottom; + animation: floors $speed*2 infinite linear; + + @for $i from 1 to 9 { + &:nth-child(#{$i}) { + animation-delay: ($speed / -4) * ($i + 0.155); + } + } + + @keyframes floors { + from { left: calc(50% - 1500px); } + to { left: calc(50% + 1700px); } + } +} + +.shadow { + position: absolute; + bottom: 0px; + width: 60px; + height: 400px; + background-image: radial-gradient(#222, transparent 60%); + transform: rotateX(90deg) translateX(40px) scaleX(-1); + transform-origin: bottom left; + animation: shadows $speed infinite linear; + + @for $i from 1 to 17 { + &:nth-child(#{$i}) { + animation-delay: ($speed / -16) * $i; + } + } + + @keyframes shadows { + + from { left: calc(50% - 700px); } + to { left: calc(50% + 900px); } + + 0%, 43.75% { transform: rotateX(90deg) translateX(40px) scaleX(-1); } + 100% { transform: rotateX(90deg) translateX(40px) scaleX(-7); } + } +} + +.domino { + position: absolute; + bottom: 0px; + width: 20px; + height: 400px; + transform: rotateX(90deg); + transform-origin: bottom left; + transform-style: preserve-3d; + animation: domino $speed infinite linear; + + @for $i from 1 to 17 { + &:nth-child(#{$i}) { + animation-delay: ($speed / -16) * $i; + + & * { + position: absolute; + background-color: nth($colors, $i); + } + } + } + + & .side { + bottom: 100px; left: 0; + width: 20px; + height: 200px; + background-image: linear-gradient(45deg, #0005, #fff5); + transform: rotateX(-90deg); + transform-origin: bottom; + } + + & .front { + bottom: 100px; right: 0; + width: 200px; + height: 100px; + background-image: linear-gradient(45deg, #fff5, #0005); + transform: rotateY(90deg); + transform-origin: right; + } + + & .top { + bottom: 100px; left: 0; + width: 20px; + height: 100px; + background-image: linear-gradient(45deg, #fff5, #0005); + transform: translateZ(200px); + transform-origin: right; + } + + @keyframes domino { + + from { left: calc(50% - 700px); } + to { left: calc(50% + 900px); } + + 0% { z-index: 0; } + 43.75% { z-index: 32; } + 50% { z-index: 0; } + 100% { z-index: 32; } + + 0%, 43.75% { + transform: rotateX(90deg) rotateY(0deg); + } + 50% { + transform: rotateX(90deg) rotateY(-24deg); + } + 56.25% { + transform: rotateX(90deg) rotateY(-45deg); + } + 62.5% { + transform: rotateX(90deg) rotateY(-60deg); + } + 68.75% { + transform: rotateX(90deg) rotateY(-68.5deg); + } + 75% { + transform: rotateX(90deg) rotateY(-73deg); + } + 81.25% { + transform: rotateX(90deg) rotateY(-75.5deg); + } + 87.5% { + transform: rotateX(90deg) rotateY(-77deg); + } + 100% { + transform: rotateX(90deg) rotateY(-78deg); + } + } +} \ No newline at end of file diff --git a/css-filter-cards/README.markdown b/css-filter-cards/README.markdown new file mode 100644 index 0000000..7cdb322 --- /dev/null +++ b/css-filter-cards/README.markdown @@ -0,0 +1,5 @@ +# CSS Filter Cards + +A Pen created on CodePen.io. Original URL: [https://codepen.io/steveeeie/pen/NVWMEM](https://codepen.io/steveeeie/pen/NVWMEM). + + diff --git a/css-filter-cards/dist/index.html b/css-filter-cards/dist/index.html new file mode 100644 index 0000000..9d9a711 --- /dev/null +++ b/css-filter-cards/dist/index.html @@ -0,0 +1,48 @@ + + + + + CodePen - CSS Filter Cards + + + + + + + +
    +
    + + + + diff --git a/css-filter-cards/dist/style.css b/css-filter-cards/dist/style.css new file mode 100644 index 0000000..7ba66f5 --- /dev/null +++ b/css-filter-cards/dist/style.css @@ -0,0 +1,117 @@ +:root{ + --background-dark: #2d3548; + --text-light: rgba(255,255,255,0.6); + --text-lighter: rgba(255,255,255,0.9); + --spacing-s: 8px; + --spacing-m: 16px; + --spacing-l: 24px; + --spacing-xl: 32px; + --spacing-xxl: 64px; + --width-container: 1200px; +} + +*{ + border: 0; + margin: 0; + padding: 0; + box-sizing: border-box; +} + +html{ + height: 100%; + font-family: 'Montserrat', sans-serif; + font-size: 14px; +} + +body{ + height: 100%; +} + +.hero-section{ + align-items: flex-start; + background-image: linear-gradient(15deg, #0f4667 0%, #2a6973 150%); + display: flex; + min-height: 100%; + justify-content: center; + padding: var(--spacing-xxl) var(--spacing-l); +} + +.card-grid{ + display: grid; + grid-template-columns: repeat(1, 1fr); + grid-column-gap: var(--spacing-l); + grid-row-gap: var(--spacing-l); + max-width: var(--width-container); + width: 100%; +} + +@media(min-width: 540px){ + .card-grid{ + grid-template-columns: repeat(2, 1fr); + } +} + +@media(min-width: 960px){ + .card-grid{ + grid-template-columns: repeat(4, 1fr); + } +} + +.card{ + list-style: none; + position: relative; +} + +.card:before{ + content: ''; + display: block; + padding-bottom: 150%; + width: 100%; +} + +.card__background{ + background-size: cover; + background-position: center; + border-radius: var(--spacing-l); + bottom: 0; + filter: brightness(0.75) saturate(1.2) contrast(0.85); + left: 0; + position: absolute; + right: 0; + top: 0; + transform-origin: center; + trsnsform: scale(1) translateZ(0); + transition: + filter 200ms linear, + transform 200ms linear; +} + +.card:hover .card__background{ + transform: scale(1.05) translateZ(0); +} + +.card-grid:hover > .card:not(:hover) .card__background{ + filter: brightness(0.5) saturate(0) contrast(1.2) blur(20px); +} + +.card__content{ + left: 0; + padding: var(--spacing-l); + position: absolute; + top: 0; +} + +.card__category{ + color: var(--text-light); + font-size: 0.9rem; + margin-bottom: var(--spacing-s); + text-transform: uppercase; +} + +.card__heading{ + color: var(--text-lighter); + font-size: 1.9rem; + text-shadow: 2px 2px 20px rgba(0,0,0,0.2); + line-height: 1.4; + word-spacing: 100vw; +} \ No newline at end of file diff --git a/css-filter-cards/license.txt b/css-filter-cards/license.txt new file mode 100644 index 0000000..82fd732 --- /dev/null +++ b/css-filter-cards/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Steve Meredith (https://codepen.io/steveeeie/pen/NVWMEM) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/css-filter-cards/src/index.html b/css-filter-cards/src/index.html new file mode 100644 index 0000000..c1ab7ed --- /dev/null +++ b/css-filter-cards/src/index.html @@ -0,0 +1,34 @@ + + +
    +
    \ No newline at end of file diff --git a/css-filter-cards/src/style.css b/css-filter-cards/src/style.css new file mode 100644 index 0000000..7ba66f5 --- /dev/null +++ b/css-filter-cards/src/style.css @@ -0,0 +1,117 @@ +:root{ + --background-dark: #2d3548; + --text-light: rgba(255,255,255,0.6); + --text-lighter: rgba(255,255,255,0.9); + --spacing-s: 8px; + --spacing-m: 16px; + --spacing-l: 24px; + --spacing-xl: 32px; + --spacing-xxl: 64px; + --width-container: 1200px; +} + +*{ + border: 0; + margin: 0; + padding: 0; + box-sizing: border-box; +} + +html{ + height: 100%; + font-family: 'Montserrat', sans-serif; + font-size: 14px; +} + +body{ + height: 100%; +} + +.hero-section{ + align-items: flex-start; + background-image: linear-gradient(15deg, #0f4667 0%, #2a6973 150%); + display: flex; + min-height: 100%; + justify-content: center; + padding: var(--spacing-xxl) var(--spacing-l); +} + +.card-grid{ + display: grid; + grid-template-columns: repeat(1, 1fr); + grid-column-gap: var(--spacing-l); + grid-row-gap: var(--spacing-l); + max-width: var(--width-container); + width: 100%; +} + +@media(min-width: 540px){ + .card-grid{ + grid-template-columns: repeat(2, 1fr); + } +} + +@media(min-width: 960px){ + .card-grid{ + grid-template-columns: repeat(4, 1fr); + } +} + +.card{ + list-style: none; + position: relative; +} + +.card:before{ + content: ''; + display: block; + padding-bottom: 150%; + width: 100%; +} + +.card__background{ + background-size: cover; + background-position: center; + border-radius: var(--spacing-l); + bottom: 0; + filter: brightness(0.75) saturate(1.2) contrast(0.85); + left: 0; + position: absolute; + right: 0; + top: 0; + transform-origin: center; + trsnsform: scale(1) translateZ(0); + transition: + filter 200ms linear, + transform 200ms linear; +} + +.card:hover .card__background{ + transform: scale(1.05) translateZ(0); +} + +.card-grid:hover > .card:not(:hover) .card__background{ + filter: brightness(0.5) saturate(0) contrast(1.2) blur(20px); +} + +.card__content{ + left: 0; + padding: var(--spacing-l); + position: absolute; + top: 0; +} + +.card__category{ + color: var(--text-light); + font-size: 0.9rem; + margin-bottom: var(--spacing-s); + text-transform: uppercase; +} + +.card__heading{ + color: var(--text-lighter); + font-size: 1.9rem; + text-shadow: 2px 2px 20px rgba(0,0,0,0.2); + line-height: 1.4; + word-spacing: 100vw; +} \ No newline at end of file diff --git a/css-filter-glitch/README.markdown b/css-filter-glitch/README.markdown new file mode 100644 index 0000000..734eb23 --- /dev/null +++ b/css-filter-glitch/README.markdown @@ -0,0 +1,5 @@ +# css filter glitch + +A Pen created on CodePen.io. Original URL: [https://codepen.io/bldng/pen/xVxrEy](https://codepen.io/bldng/pen/xVxrEy). + + diff --git a/css-filter-glitch/dist/index.html b/css-filter-glitch/dist/index.html new file mode 100644 index 0000000..4a1c6a8 --- /dev/null +++ b/css-filter-glitch/dist/index.html @@ -0,0 +1,18 @@ + + + + + CodePen - css filter glitch + + + + + + +
    +
    +
    + + + + diff --git a/css-filter-glitch/dist/style.css b/css-filter-glitch/dist/style.css new file mode 100644 index 0000000..bb36ee9 --- /dev/null +++ b/css-filter-glitch/dist/style.css @@ -0,0 +1,80 @@ +@charset "UTF-8"; +body { + margin: 0; + font-size: 35vw; + font-family: Arial; + background: tomato; + color: purple; +} + +.block:after { + -webkit-animation: block-scroll 5s linear infinite alternate; + animation: block-scroll 5s linear infinite alternate; + content: 'โ–‘โ–’โ–“โ–ˆ'; +} + +@-webkit-keyframes block-scroll { + 0% { + content: 'โ–‘โ–’โ–“โ–ˆ'; + -webkit-filter: blur(15px) contrast(90); + filter: blur(15px) contrast(90); + } + 24.99% { + content: 'โ–‘โ–’โ–“โ–ˆ'; + -webkit-filter: blur(20px) contrast(90); + filter: blur(20px) contrast(90); + } + 25% { + content: 'โ–ˆโ–‘โ–’โ–“'; + -webkit-filter: blur(25px) contrast(90); + filter: blur(25px) contrast(90); + } + 49.99% { + content: 'โ–ˆโ–‘โ–’โ–“'; + -webkit-filter: blur(30px) contrast(90); + filter: blur(30px) contrast(90); + } + 50% { + content: 'โ–“โ–ˆโ–‘โ–’'; + -webkit-filter: blur(35px) contrast(90); + filter: blur(35px) contrast(90); + } + 100% { + content: 'โ–’โ–“โ–ˆโ–‘'; + -webkit-filter: blur(40px) contrast(90); + filter: blur(40px) contrast(90); + } +} + +@keyframes block-scroll { + 0% { + content: 'โ–‘โ–’โ–“โ–ˆ'; + -webkit-filter: blur(15px) contrast(90); + filter: blur(15px) contrast(90); + } + 24.99% { + content: 'โ–‘โ–’โ–“โ–ˆ'; + -webkit-filter: blur(20px) contrast(90); + filter: blur(20px) contrast(90); + } + 25% { + content: 'โ–ˆโ–‘โ–’โ–“'; + -webkit-filter: blur(25px) contrast(90); + filter: blur(25px) contrast(90); + } + 49.99% { + content: 'โ–ˆโ–‘โ–’โ–“'; + -webkit-filter: blur(30px) contrast(90); + filter: blur(30px) contrast(90); + } + 50% { + content: 'โ–“โ–ˆโ–‘โ–’'; + -webkit-filter: blur(35px) contrast(90); + filter: blur(35px) contrast(90); + } + 100% { + content: 'โ–’โ–“โ–ˆโ–‘'; + -webkit-filter: blur(40px) contrast(90); + filter: blur(40px) contrast(90); + } +} \ No newline at end of file diff --git a/css-filter-glitch/license.txt b/css-filter-glitch/license.txt new file mode 100644 index 0000000..4c493a8 --- /dev/null +++ b/css-filter-glitch/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Gerhard Bliedung (https://codepen.io/bldng/pen/xVxrEy) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/css-filter-glitch/src/index.html b/css-filter-glitch/src/index.html new file mode 100644 index 0000000..0af5884 --- /dev/null +++ b/css-filter-glitch/src/index.html @@ -0,0 +1,3 @@ +
    +
    +
    diff --git a/css-filter-glitch/src/style.scss b/css-filter-glitch/src/style.scss new file mode 100644 index 0000000..2d04bba --- /dev/null +++ b/css-filter-glitch/src/style.scss @@ -0,0 +1,24 @@ +body { + margin: 0; + font-size: 35vw; + font-family: Arial; + background: tomato; + color: purple; +} + +.block:after { + animation: block-scroll 5s linear infinite alternate; + content: 'โ–‘โ–’โ–“โ–ˆ'; +} + + +// the content animation is chrome only + +@keyframes block-scroll { + 0% {content: 'โ–‘โ–’โ–“โ–ˆ'; filter: blur(15px) contrast(90)} + 24.99% {content: 'โ–‘โ–’โ–“โ–ˆ'; filter: blur(20px) contrast(90)} + 25% {content: 'โ–ˆโ–‘โ–’โ–“'; filter: blur(25px) contrast(90)} + 49.99% {content: 'โ–ˆโ–‘โ–’โ–“'; filter: blur(30px) contrast(90)} + 50% {content: 'โ–“โ–ˆโ–‘โ–’'; filter: blur(35px) contrast(90)} + 100% {content: 'โ–’โ–“โ–ˆโ–‘'; filter: blur(40px) contrast(90)} +} \ No newline at end of file diff --git a/css-filter-text-animation/README.markdown b/css-filter-text-animation/README.markdown new file mode 100644 index 0000000..6644d18 --- /dev/null +++ b/css-filter-text-animation/README.markdown @@ -0,0 +1,5 @@ +# CSS filter text animation + +A Pen created on CodePen.io. Original URL: [https://codepen.io/elwinvdhazel/pen/EWBdPr](https://codepen.io/elwinvdhazel/pen/EWBdPr). + +Experiment with css filters and text animation diff --git a/css-filter-text-animation/dist/index.html b/css-filter-text-animation/dist/index.html new file mode 100644 index 0000000..30a516b --- /dev/null +++ b/css-filter-text-animation/dist/index.html @@ -0,0 +1,18 @@ + + + + + CodePen - CSS filter text animation + + + + + + +
    +

    Awesome!

    +
    + + + + diff --git a/css-filter-text-animation/dist/style.css b/css-filter-text-animation/dist/style.css new file mode 100644 index 0000000..47d25d9 --- /dev/null +++ b/css-filter-text-animation/dist/style.css @@ -0,0 +1,80 @@ +@font-face { + font-family: hkgrotesk; + src: url(data:application/font-woff2;charset=utf-8;base64,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) format("woff2"), url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAGYQABMAAAAAvlgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABqAAAABwAAAAce53BSUdERUYAAAHEAAAALgAAADIB6QLER1BPUwAAAfQAAAEFAAABoKE4mP5HU1VCAAAC/AAAANAAAAF8Z6hguE9TLzIAAAPMAAAATgAAAGBjrIMbY21hcAAABBwAAAGXAAAB8iepzJRjdnQgAAAFtAAAAEAAAABAEOUVG2ZwZ20AAAX0AAABsQAAAmVTtC+nZ2FzcAAAB6gAAAAIAAAACAAAABBnbHlmAAAHsAAATGUAAIQEeBgx+2hlYWQAAFQYAAAANQAAADYOxXLRaGhlYQAAVFAAAAAgAAAAJA9hBxlobXR4AABUcAAAAjoAAAN0k288+WxvY2EAAFasAAABsQAAAbxUEnXEbWF4cAAAWGAAAAAgAAAAIAH6AdduYW1lAABYgAAACuIAACbaBkKlNnBvc3QAAGNkAAAB0gAAAqoh8owGcHJlcAAAZTgAAADQAAABa1JyA8R3ZWJmAABmCAAAAAYAAAAGhY1YqAAAAAEAAAAA1CSYugAAAADSqvKCAAAAANTONgx42mNgZGBg4AFiJQYtBiYGZgZGhhtAfJPhFpB3m+EOkM0ClGUCYkYIBgB4gwSuAAB42l2QsU5CMRSGv9sjxDAQBxKRMDK4KWqCl+CCaGIgRoPEwckQJw0hauITMBomRzfiK6gzb+NL1L/legf7pee057Tn/C0JUOKAC1zvdHBF+eH2eUKdNcXxHieX/Nu58fRpSvn+7nFCJUbCcCGDsc4G1RhL5Fc3Opn/0SxR0KwoUqDBkeIvvFJjzhtNPsUh3yLViY/YeZeuvFZ+Rjb8zO//rTK/VO0Wxdg56IhKpaUhnDIt7VMR1HRkj4Vxwplsn4HsuTAuhTEUxkgY18K4EcZYGO/C+BKmSkV12FH9lHZ8aS+q3mZP2aB6kate5qu57m3pbPi1hE3VcPlPhpqmbI36L2jPLkkAAAB42nVPwQqCUBAcnyYR4cE8hER0EE8ewlOnLkUERhBEdzGIxCzEr+hj+o5+oX7GxuejDuFhd2dnh9ldaAB6mCGFWK42e1hZXOYYwSCPqoJg0b9dXTVyZOI4K+EmyeWGSXY+xfCvxTFHIBVQujprMuvooA+Hzj6miguU3xwmq8ABhUJ3PJTmyc6iLkUpQyP2EGKBHbHL6FJh0vvNusWLOZJb19xZO9iMoXQzJB9J3Mwcql2M/6aNovG3VW/IjzxuFkQDftKmCXnbT9N6/wc3QR4PeNpjYGbRYdrDwMrAwmrMcpaBgWEWhGY6yxDEFAbkM3AwwAE7AxLwcHHOZ1BgUPjNwjrr7yygpBuThgIDw2SQHPNz1lYgpcDADABE3wyjAAB42mNgYGBmgGAZBkYGEHgD5DGC+SwMF4C0AYMCkCXAEM9Qx7CcYR3DRobtDLsZ/jMGM1YocCmIKEgpyCkoKagp6CtYKcQrrFFUUv3zm+X/f6BOBYZEhgUMKxk2MGxl2MWwnzEIqINBQUBBQkEGqsMSroPx////j/8/+n/w/4H/+//v+b/r//b/qf8dH+x6sPXBpgcbH6x7sPrB4gezHpQ90Lq/9dYd1htQ15IEGNkY4NoYmYAEE7oCYFCwsLKxc3BycfPw8vELCAoJi4iKiUtISknLyMrJKygqKauoqqlraGpp6+jq6RsYGhmbmJqZW1haWdvY2tk7ODoxOLu4url7eHp5+/j6+QcEBgWHhIaFR0RGRcfExsUnMFTX1DV09E6eMX3m7Flz5i2Yv3DRksVLl61YtXL12jUbN2zazJCfnJJxoWhaXuZ1oINq+xkKGBjSCsGuyyphmLu+LCkHxM4uvZhYXtWzfceJk2fPnTq9jmHbToZrl6/cvMVQfOY8Q2VjRVN9S2tbc1c3Q+fESROQvAgAMfSLyAAAAAPnBYMA4wCwALkAwQDJAM8A0wDZAN0A6QDwAPUA/gC/AMkAzwDpAPMA+AD+AQQBCAEMALsAvQDlAKkARAUReNpdUbtOW0EQ3Q0PA4HE2CA52hSzmZDGe6EFCcTVjWJkO4XlCGk3cpGLcQEfQIFEDdqvGaChpEibBiEXSHxCPiESM2uIojQ7O7NzzpkzS8qRqnfpa89T5ySQwt0GzTb9Tki1swD3pOvrjYy0gwdabGb0ynX7/gsGm9GUO2oA5T1vKQ8ZTTuBWrSn/tH8Cob7/B/zOxi0NNP01DoJ6SEE5ptxS4PvGc26yw/6gtXhYjAwpJim4i4/plL+tzTnasuwtZHRvIMzEfnJNEBTa20Emv7UIdXzcRRLkMumsTaYmLL+JBPBhcl0VVO1zPjawV2ys+hggyrNgQfYw1Z5DB4ODyYU0rckyiwNEfZiq8QIEZMcCjnl3Mn+pED5SBLGvElKO+OGtQbGkdfAoDZPs/88m01tbx3C+FkcwXe/GUs6+MiG2hgRYjtiKYAJREJGVfmGGs+9LAbkUvvPQJSA5fGPf50ItO7YRDyXtXUOMVYIen7b3PLLirtWuc6LQndvqmqo0inN+17OvscDnh4Lw0FjwZvP+/5Kgfo8LK40aA4EQ3o3ev+iteqIq7wXPrIn07+xWgAAAAABAAH//wAPeNrFvQl4FFXWN163qnpf0tVr9nSns9JJmnRnIYSERYSwIyICsoOAyCIim4iCGlkEEXFF3JBRhpfRqk6jgIoIOm6DjqLM66jj6zgj9sg46jiImBTfOfdWdxoIyvt9/+f5i91dvaTqnnPPPfd31uJ4rj/H8TN0V3ACZ+CqFMKFe8UMYv4/I4pe90mvmMDDIacI+LEOP44Z9AXtvWIEP49KAak4IAX68361iDyoztZdcfq/+otHODglt5HjyIO6bfS8/bkYfBZSiD0RE3kuRGRjWOaOyWJEEbIS+JB1kTa9wBlDisGRkA1hRe9IKCYS4hSRSE5Z39C9Gq8mRIXgRmJRv8vdR4zqKd22dgdea7gwjV+qa6XX6sXB4LiQrIvGOTtnFENwFfqJ9la7tiI4E7LggNPDJZ3sWt2rXVKU/ht+ZNMROGew41N8UHpu4Thdi24rl8MVkMlcLBvoiXm8WdFoNGaAs8eMFise6wjQqbdFo4ooJtoER35BkS8ii464SeTKYTDmSJwj2TpbqI2XcvOKfFGFExOKOycSiWeyX/giRPaH5exjShawIsuhGGCIRkciZjCaQ219DKIp1OY1GoBVHvjQ48UPPU5TSDY6FAv81AqcC5CQXJe9v/nZf3s4T8i8v/mJ79/DAznb0cZnG1yhNoE+6/EZrtFmyjLCgdfRZvZa4MDjaLN5rPADB32W6LMbn/E3Pvob+KtM+ldwzpzkeXKT58nD37TlJ39ZgJ8LfRy8oDeZbQ7J7cvMyc3LL6g65z+5TzZOQ23AFYRHVIjiwxOgj6ArCI/6qCt4C7HXfU+8kw9OOT3h4KR/qN/Vfq8mJhyYcHr8y+P/drr2NHl0N9HHyf3qELJHnbZbPR1X55C4OpR+zhGu4IxZDOhXcGFuMxfrBjMpV8J8CYlYNxG52a0CuOmDKQjHXXbOjDLTPSzbjyl5GQk5z6FUAHeliBKSErIrIoccih7YXpqRUKrhNc8O8koalFCF5IyZxeyGhgZZLym+QngtdcreBk7xiZITpMCeV1rka5CzJfhQdjkVyd0AYu6qzyfRSG1Nla62pq6+Nurx+gxVJFio97jzDR633uAJ1laRgv/YHlt+YsiyzZuXDdm38Y0v5x4pWtoydHZ4+MyFC2cODx9/9o0nvySraxfccLBudGNDy/i7J9z9WsFXXxQfXn5J/9F9y/p1r6isGXjlzUOf/dLz5T/yjnA6ruXMCV1c9wzn5gq4INeD68c9xMWiyBt/VOklJmJ6kHIlX0zE+5VH9baQ0g8OMx30MFNMEPmSsEyOKV6QWa9DyQFOWODQ4lCK4LAnHPZ0KL3hsArEsz+85niBPw69H/ljkeRgg9KzCDgXaJB7S7HyKLALONWvl+RUqooaGpT8TPg54SwNyCNnTbMQjeTzHredDxZW8XVubzRSV1tTEiwUSNREapr5tK+F1NeFLY6yXjOaB17XrzDQd/6lvWc2lz9eX13R0FDVvULwHW1PkGdyGxcNG7iwbyDQh37fzSE3REL1PSaIRaOvmDCgsmn6Db0ar5/eq3LAhFfXT5x8Sf8Jp1XdodPNZELd/Ln9m2csbup1w4zmqoETxyy8a/L0SwdMAt0hcLVn4rpq3f1cKVfNNXFLuVgQtWE3YyJmQaY2moB9zWHZcEyJuBJtZRFc3JwrIXNhpQxeIg6lB3DM7kpQDkbKgE+6BrmHFLcEu1W6UYjszjZPVqACDjmlWxCYVhAAvjZKeziDPb+yFj4HyQK21JfU1jSDfHmBN4LB10x6E5/bTgw+Q6k+AJysd0cj9cQuuNxe+JJyVF/bcsNV4acWKbMe+nNZ/fD6/NdtLkH4xhkNfB0//Lz60/jHbh164rPfXa/+KzhkWOTxkd0uuWF0z4ETyPhBd82/JPe/Hp716LBXNldfPWRIyP2xf2JBfqZhunKJevdHO0Jj7hm7bQFpyuw1dCT/TuVtVeGVNbWDL4X12SLcQty67cC5AAdMiBNNc4tMc0sJ+tClVHbLH4RbmKIm3AS1li/Xc5yNc3FEttO/gD1FyWC/djjro3pecjh9wRJ+wuqFH6+7bdX6Dxes4XNILu/e85Gaqf5ZfU8t+/QhfiiH5xsO58tJP5/lmCJ2ni/qdUoO3hCsw5fhH8+/fe38D9fe2qrnnu34t/qR+lPHnvs/Jl+SIPHxPD1fudCPPwJ7lZ2r5GB7hX3JyrYpM+j9DBxu3JDFGcSQ4sDtT7DCZFuoXvCVRg31PpwqQ2l9edN7uYdy/9jrb48+On/BI4+IM3eOevPNUTvzH5/5xz/OfByus5CbI+4Xl3IWbhTyUDZEFaLDfTbGEVRynNkUggWFh0QwAXOtYdl8TOYjigkWK+yZJjN+ZzLAz8wmPDRzppBiY2TXBoDtAU9ACkoLyRv7yBtqj328ex/ZpY7Zp44huzhKa9OZArKfGGEe/cl5NKXmMc5ncRYgk02jzxUQmq4mmR9/ThKqD/52K+/mP+ePwN8W4t/i4PGBf6xwJBQXGJN0yfF4tvIDYQT78Lqj4WkwvW55GvJIHqTkyJOgD3YK3PZHn0RUQcd+5jN1lPCu7gScgwOdQgKC7Yv2H9RRhq2nZlI8UH7mhLgF8E0WV4X4xo0nL7AlYkZc0eV4lTC9SrYnATsk1YJ2X0LpDq9F2bBA3UZUcOUFcMjZG9jy1IHWEnBlotaqd+eDFmvmYSsALWYXyqXSnldd99C4hS/fNjHU7apV++ff/NYtowtPF7XcMmrYskuDRQNuGtHnmoHdPfzhS9bes3rxFdVX3PXSu3OvfeeFjaMn3/fagSnjnto8dvw9T1857qm7xvScfMsaNkf1QMwckEczV8PFTIhqUNGDkCCz9ECGJSybjoHcKEZPImaiGMSEkmDVOA+qtYlEQRDqdw+87F8/ifpXhg8qPb1C1LPzF3CcOFz3IMzidG0u/LDRZiKXbAKcPhiWXccUJ3DJyfBLTkYilmPBy+QUguxZcvDQgldEHlqcwLBMP/LOz9GdVrZJbRanK4fquGhtpFlXD7oeOMYbSulGIHrcvEFvCHgKSEnTyClTr6n4/EjTxPpc/lT/G/fPe5OIz21cexO/8c3M0rpLh4yv+HTXR9Fxs5sc0/dtHnviwCb1oztuHfJ3Rosb5rwSMGAF9zAXK0daRCsMFmlxWRNxq6U8B3ZDK5JVSSefuBMycche/zFAAHDsCyte+hEFdUVwWOSQC/BbBxw7wkqBOxFzFCDFDgtQXAW/csBG2SbmlJUDgUqBAWguBOItIgoOASVvleADwA8xr6+ggSGI5H4XIrXJfVGPzADFn08QQ3hB6fOg7t3fP75i2fZ7lmzaNHb6kqsmLSHf3vz2TcveXt2350HDFfe88MGL91xBDmQsal004+q5n185YviEeROk1Yemjmtbetk9Ndf+a+7uOT0ar9tD14MZ5nkRlSMbN0WTJJ7CbouJtwEKB6RrTcj6CFWiIFFWKlGyEIkZqXox6mG20+QrA2GvCcjlkVxtrnlJtiGJtSBxUU8QpA4MEDMf+/Cvf/1J3UtayNAtwlPtzxxX42TocXIE5mwkzNloGFchN5yL+XHO9CB/Es6ZG+bMZ/VLMGc+TRRNx5RcWKUoablwbcXpQkmz6ilgy3Dk4l7rk2QPA2pCGnddoA2FOg12AF4rGvm1paz39Obr7t2wbMDtJX9fJzg7no9ee93U2OphG/515wvq38jWvjXjRlQ9fe28Bwb26skfT6g/9hh++57ptx9f/yNHeToDxo5r08nlcpdzsQwcvRd0DN02dDkZAoxcZ4aR51FpcwM73Q4lCwZvBr2WD69ZboBNQoYOUZZZkkUgBoGXwpmZyqknAU0oKFQiDCohSTOGkp0kqL6bv+HrO4evOTRvwz/XnXp0/rxHH503nxxdfx2/Vw0v//MdU/esvezW//nPB/c/8P4D2hoBOXDAmPXA8ZgOpQCNL5x7gnadETc1grMpNDC9DSNwC+0dd6nH+bHio8dXn24XHwWtC3hUnABrLQ9QU5S7nYtlIfUBmDsznq8a5i5UkmUGDoSQAzWUAwXAAR0upzI4KGBa1w2gvQo/s7sTSi18UKCjV1eqAEe1ZQVKzLiw7Ag+JWBPSQCVMwf8CkmKJMBrtVOx6xi76ih+4pPLKMU3vpNvQicW1bfMndI65ObtY5e+tXpA7xnXXHnvvtmz9m4Z8+MjNyzZ+sDyG4ctmDR+0aIJVywhW69/vuG63427b3LN2LYll99X27jn+jk7Z9XWzdr5P+/ccMM715ONl0+fOOyyieOYXAAsFxuANy7gDsiFHbmsQ67k2hJxh88O5qXiQK7kU654gBkeh5KtyUUBvHpwBuxofMRsugyKtXN9QLiZ07YiDUAbYHbOlosoCsM1B9ZfNkQdq35KqgtAPk49Mm/+Y4/NnyfsAnkYNey2+IwN8ztayHvL//z9B/ff/8H9OOYWEI5Rwn5qo1d27sq4netwt+z0CGSilsAXzShHw5/Ao4WY1ZPEjFs0H9M2ap5hDO28RVz66UQAfuwkigG1JYHJZEjDgqejaONSYqaAQ9jCTki4Bu5Bcbm4GywizkV8JmJoED6a1TGUj8/it/PmmLpT3RnD67aS1cJh4QC9bjZDKEZGjZFePulRQAmHR6vQ3H5IaCar332XLHjnHbZWxsO1tmrXMpF6ExnPxzuGzhI+ai8F/DKWjI11nOw4yeYc+Ce8AnPuByrnc7EA8q/QznSBkmdIxPIEVJ15HGK5YjrvfmdC9jvQGaAUZSbapKIA2BUOJ246VBjQ71GCO4wEwpDXIBdJMtqjTtkK4pBXCCwzOJJyz3SELo8EYQHomHh7XDgrJ9646a1bShoHDWosebe4ceDAxuKV1y6dP4OYhc/+mODH7bt5yJJBPUqCFbmbNl8yo2dlSWhA9ylTly9tDySxFug5dYfhFsAIA7kxpJpjolyvS8SKAITIxdGYH8HIKH1C7h9WesOLN6wM0SfaKoZ4gSDJAPy+khqfjYBcGxltLXDY4lBGgqk+IhIvd3A2gNhlEbncoUSYbaqM1ZwkN38fQd+IKJdV6eTig3ZleM5POrno4P7mOd8dg28sbcHhRS74a0dbSVmxK9RWis+iPNzRNgK/iMHX/vX+9UE9mP4NMfgWXuSSBm5PsKS0bPgI5tkge4JFxSWlw1N+DqKMbJGcz7t0Xn9dfe/+uLOUS0rffqBxIkwV9e4P89KvQZYkuW+DMqQCJqTcDV+Pkp7jSLYl0rORYh6nw1lXBDAnnzgZdiwp1eOaraVWstcHBo8ZJg8WcLNQW8OXFPlFPe9wekUw9Xzwy6ISQr/kGWqacfcP5LJ99xHvZzuvCgye9+SMhZuNN/927sMDS0ddv2PSsPXFrledo6urQ72m9Q65Fr2inlT/op58ZdGiV4h58/VL+2/etk995t/k75dfMXT1iIqd+ESuJbPJoH9tvOrpT9V/3nPlzseXDbp99uJFz84a/bsnVw1r6T1movqsenpBt4qa0fMXNtxF9C8tXPCiqqpfqh0vXFf6XO1d/yIbr7r6stUPDj0wcvUDDGuAPd0KK88MWIzqElmIMi+f3sgRUH96M4WuFKXCygRGmhEeUiQfEMDYMPO1L/NR9Zt5HR/Pf5Usf1HXenoFiapHeCsaagK3FXTsRriGC/beohR2dcPui6hGKRIS8bxcDpCNkoeXYisO95q8CG7CmYj3Qe/6cecxuthCM2ZSYw50rZup3zwJ3spFTtnIHJwU/qf2leIA20gCtYEIRXNbSeKSm5eOrZ3Yd8ptQ1f95ir1T6RyxpxlU9W/EPHQssn/0rVm9Rxz+6ir7g2WvHnt5Edn1n8/bdrweR/vHjlW0zdnTugWgs0SQKyfl0QT1LFjtQERhXQVSRkJJYhsswJS2MMRkzkrmwkaFSjRZ+ADICceap/UgQiJuAOOr5n32F/XfkD6jvlmsPr2vKevjkZn7lyw4YUeJ0arL32w9ovH5vPDTny4b+2w916bRPght//26rnK2iEr7pzy2vvD1uxlegB4rnMCz42cxPXgYkYcocmqcVxCBOGkbDYBm00OtEUVHQzWhYOVTNQrQtkIloGDC5RGI0XAtkBwK3mIzCTL1VvVRx5afZLoPlfbH9C1qhvUp9W4em/i0472Txl/cM4HwPUtoInYfJuAPxS/ANCPG3VUtIw4EGtqIGgqUzPaBIgd7GdmM2uGMjOS2WOrsLtjFL+lYx7/jK41oT6cULd/23nd2+C6Jq4Pu27X1zR3cU0w3bULWs654FYh0eHBy7GLdcQ6ZWANyEAJdyMXK8BrFSKhAICZINgsiXhObiG69XJwJyulMuHMoPYZQod8KREryMeLF+TAZcsQUYFR1mbWZxeiEsuXZBM6OcGylf0NSm4Owk1nA9ppMZClNAeeyDybnaIEgi4FmSNqfHT+o1+sPUr6jPlr9yMb5u5Ecfrt/K0fe9WX+fo3vY+oP58tUhvWX7bh2avn7rlrxMHHj3SIr3/MhIryVsfROe2taQpDNBUhMAuUu+bOGbUAoXwE/ZaAVBGOGEDAbCkPAbo9gvC8VeXnqGrH/brWjhg//PQKfniSv1tp3KOV+q465zLlc4Cz4aPT57BVRc3D/tZ85oTwGvytG1GdlLQvKd414RA9zKj0pCxIK9jKBisNC5hgLrzwEcXW7gbZINE9xJS0E5Oe5bpaCdms4X3zaeN11946qeNrwVW74MWbNxy7nuzNW7hx4/389kT78htevGfkLe+k6NLJlI/dz+GjGD2beZRddByKYGpoYGSSgAn/R8a9SkZ3vMQXqe+p49VPgIEF/Ocde9sP81vUT9TNyWsJP8C1dEntrgjaOiSyPsnHmEBXgKADwg2dE+SBK0zQtf58befa0kfhXFaunzZufdq4bfRsVjC+rYyjejAS7IiNrDB8XkRgzCgxMkqQDJAAEgRSyBiyhCwlY35Qt/9HfULX2u4S/nl6hVjQPkHY8fPn2rr+mK7rrq6tLWc31WWCdm30gAhoefKG864dJSh9cOF2/rIf1A6Yjfag8OnpFcKn7UGqP8HW1e2gdkEpN5iLOZBzWcmFHUQTt4yuZncWNRTzEAhlJZRyDFvAjtSmz3DoqAs5mAXviNnCpfS+P18AbOGv4l2wVplXSii0CyNxmRLHF4/Oj+KR+i0cfVQ5eccnOyZX5vSedJd816TeOfzwf3y4b82wYWv2fZg8IINnP3vXZZfd9ezsUZtXTairm7BqM9P/Ygv1ITiTHGO63wl2jclCd1sTblQuyjoziJslIpsd1FeAO4EbJc9p6dwJ0PkjhkgWFfwa3EH3/4V41a8/O3Bg1bJTB3Stfzn0yn93xIWGMWPaOI2H63RfAA99XAjwecyFPMxL7pLlePEKysOsDBqcoz4puHIlgmzkml4nuVANWsDgdOAU5rlgCjOkBoR3bYSzW9J5irs9+t5xB3VSLVhfWu+rQ59foZ2kcbflkrd2vLXts7Vw/HZkxs75i0a/suPFAXD0yc4ZGn+Hr9n/4eK1P008uPXt2chi5Z3da4eVy/c/c/NvZ+1eO3ToWrbHnlHFV3S3cXag8CouZkGp5KKMzbAJxDNsFmRzBur+TMpmO1CaEZHtDtxoFT0Qix4GF4BdxWqi0S2KaTJswHYTdY9guNaHaIZayWhCSq4oDSfgDLxxxydrH7qJrFc/U3fs5j+7+vpVc9/ida1TXr7l1sOhjnX8pI7tQqU4beSVs6m//My3YjXMRxV3NYvVUZ3oxuHmCIm2zG5uY4j6WqVjSr4vIeezdVyi+VrzJeY4Mkh7RKs7s7Abzk2JU0Ypz2RxOCm/BD/MQeunU0vWVBlqa+oQP6fCbzrm2aniy9utjy1ZuCwZbVPjG/864GjR8ktbZrOIXOtf1k6O3TubbOqzaPWMyaV9u1dW1QwYvazlt++vWLm6ZcRVfSpb6noMmfzA5FWvXV0zYzvT/SD7Kymm7cnF9J1+EwFdZNSe1R9DGY/p9Kj2dLDxx/Q6PNSjt6zT2kT1ZBYXqQNUcfsXX/w8SWTnX3rmhChTPFuv7S16O9OpshWUkTupVjEojkoIZl3xoHALzDHCIi2aoQBHALD83FL1pu2jF/bJVtUf1RPqP9Uf+VJhUvvLz/2uatLN44S+7bvVr9U/kkqNPorZ9bgvUvo4nsL2TrcQp6fePrgSalkSNMO6XUlWEG/HkZdB14F00o2Snsuwm+r0VVzMihJsjNLTxYjeEI2m9DrJpDslhmfRE2BnBt+hO76ppcFwziFbD9rRQcsf3N90I/vULusdsu6gTjY4ZONBgVN4HRhvbbzOaE0GqBUONweBudBgqFE6WhMO2EgqSc9XSU94MapjT6pH1CMnYTP6Vriv/VrRAap6ebvmd0d+ZNH9tETbG4xsFQIuwf2U7aI86n+RXilq0vZQ+N9MPlLLSRg2oDGku1pG/qz+UX1K3cUf5g91fMYHOpo7mvisjuPJ67RSTA37tuEsvptoyBEXtBkXtkHztXKGs6YBxYmEyL1kMwl1HAa00tHKr2jf3vERX6rFD8RddI+r0vZqg8CyPBSBgVaKTBUD8+AqopDM56glAer+89QLno5McUD7t4JDFk4k9rZnav72XepQfjzIioGrpR4WnUg9LERM+oswVGYWEXUrOimRfCdEUukcAU9Qinp2Efnrr9Whhvj2n+7ZcU5sJ0qCgb8J1i90JzCwA+sErllKr9nMoWRycE0hjNkc9JqGY3D6uJ5dSO9QiAQiBmvTkby4IeX5gb0agFZg6ddfE1kdqX6rn7/9FIspPiUUC+26jzS/T9BCniK7yO7v9+8VitEBRCrVo/R3LWdahK00gpydxEE6FseiYTANRMKSbxFGtT+zl+r3oYAhjwqnuExYZ7ewlR7z4J/mGhMxKzpSdKZEnPd7rKDleZFZfZ1xKkD4yL8MF+h8hyI5ErIURmtQyUZJNKK+L5BiOqsHPcowk060ZiV6IPslmWtQdLz2Q4y2lpMa6h1nMWcA9/Y0d2J9sHAomGbiOwNX+PePeHv9m8dfzm5++Jopv5l1etyA2Q8J/xkJclf+7siGNdfO/Z/9Hds3jR809N7NM3pvmET3sRPiJJA7CezzaRpWQEeo4hGYWmOpONmWlHsc7VreGYnIEjPPkz7yTBh+m87uyabQh3pGHegZVcxIrY55qhFbUu8+Bc6lHubmdaAbbGv7jP3Td1zTs+c1O6a/OM22fPGSFSuWLF4OC0VdfsXdL/zxhbuvWDaD/HD7k08S49NPsXk9IXwEcxTgokk7HFEaScbE2Iw4PZodbgM7PA72nmaGuzS/TqfxRKgdzvamluLhCx6fvOWLnsfdc4Y0TajLqZh32eBr3Z9GPr1vyUuLmsj3I+9rndZz25rxLSPCo67uOfLmyy8bMHrDtiu3PK/5GYGvRo2vsxk+6OSr8Ty+kvTYnWyIpLiKgbokV2WzpPgyEQx5EJtZKXdp8Aq4a2BoCKCPD+FtLfVduTrZ28L4eurU9BeAyy+tWLwE/lu8gmxAxi7n+dMrZiy74m4SvP3JJ4j1NzsZDT+IYEFwBVwxWn051HOT5HDQmIj7pRw0cP0o/iVhpRS57AZDVc6k3jYYsR+sJmtDitsUqWWQwFmsLg7Q8VGGz3lqdv8ckec7RlmXzxlzXc3OK95etfzQ8t6EJ7/PemfKAvIN5XvjlLWbRrlLTKbJ80trt1x12eUb4384ej3KRBYM/DXAOR5Ene5kHFaxWBKxDHSDkigA24TMARbwhmU3jdS7YLu2R2IuN8IAlwSIwO3CQzciAh8SZclgoAwwmpHGW6IU1PgMOPI8wkJoWXv3rZ1w5chAZag6kWgXzB+v3fBE+ZvuqpLVn7afFMwc1UD91FoxT1zAdePquL7c+xwdldIb9JGTemnDSpUhIdeElQIYZVZY6Ymx435h2XpMqQcTx+g/JmEMMM8FUpRH430wSLneoTSBsHhdmDUkF6KzrNqZkKvDSqEzoVyChokV86h0IdQ39ZKSUwevTc49WQXFVRk1KFvVkuJHdO11Kk43ylhNFfwFF8IMItBVig7/IgtUUh689pTknAa5N5zRa8XvM6SY5HJTn4SvBhBqPbpNMciDTKr3Gbww7bDcAf3pKJilgXkNIAILS12puIi+n9m8tLF5Ttk/fjfuqt1339/rH7sXTygmWcff/fz7fqvWzuz7lnnX4jUrFt68qZ9z3IjhY8cNGzFugb8+j1SGbo5cO3/QxCd+X/z4vplXzf/N6+Gy/BECf/fTv3nMVT105ZA+I+oaa8NWftfQKVMenHm1ZlcWUD+B5qeSLdE0neewpXwFGBLkqUPSimsS1ib6CKxuaiFxis4hnaPeQEdLLKIpbf1p5hOzHh4bOjVw3Nh1LlBnp1YPvuX+Kzqe45tmzJs9tOMpqi/uBOG9E+wJjIOAtS6mI1c6HC0WA5KrGNzUP9CJVQW47J2EO/W9uP3zz3+eJBxvx2VwRlYH03M6gMJeXMxJ3X+AVg0oabawIgiMQP0xzMMzeTAPDwnjFAGNEI56PwiQJdTTYBwCV1yyJaV40ZHN9ZVB78nGtTOKr8g8TDh1zlF7UUSc9rMy5Z4JDqM+dPKkxuN5FJ9FzvZ3xERKlObxcHd6PMQuPB4E2Phvspw0q+vI42DwfLwVgOxh8pi6smMbeXeX+jHzUZw5wQfotbQcDIzqav4Odh3BnfJ3aM5FReDo0gZO1iN90XoPSGfJ1n+PaZ45eObC18UDP7deoj/inqz5QKYJp7ki1OgUR0hZUaCGoJYhVHwwK0P2RJKO7CJKVzJQlOWhtq4TDiUPc2VnF1EYJ2ehYpGdzK1N/OneCg9u+j6adMDECq0ofMV8Fjja+p/wbQOen90gT510z5iKU09Mvv5URmHfqsnXC8dn92ncOnj4gGWbL+vYyTf85c5ZHR/zTd2HNAfwqNNnGoQ91JNaA1aNIroGJBQRbyr8CbR4mMPYCgSAalRsHm0NEKlzDXjqqKpPrgEY44/z4kNXju6ZDYtgxv3C8RtawyOuXdoHRzXrhnsma7nBTbBnjoL9xgKjGczFzMjhDFOCSoriNrGRwE5pzaR+JkmzR3AYkhWzO0xmgYIPdwb6XfQGze/iaCb+fOKwE38JKBo/6hy/vum270jVd7fe+p36/nd3rCLiqlVq+yoynWR/vWHD1+qX8EyW3bF79x2tu3dTe18dLI4X2mE/z8O8jE6IlGJVjhkzDZPBYpzgc1FSQRpKymEoyc5QUo6GkogWz9dYqKEkKT0YvvXHGS8kYdJL06zLliy+8cbFS5apg3WPzEjhpI4vhV2t25+8vXXn08hXdbDQTseew81MG7uRpMEQ2QJjz70AEslLQyJZZyMR+9lIxHgWEqlFN+9ZSKRQ38RGfvLk9BeBjgMARBYv+UcSh8w4PZ3PPhuHMD/mYOEkZ+cakr7g1MipzzmDOVhcVInQfD8zrmpYUURSBENDp1SyHRsE8p9TN626fEHpwKtvE47fcle/Nwr3rlGrqZ/khDAKrhXiXtRykwRDIubCS2XpmdfKfkzJhUvlMosYl7g3go4rNIq/CR66k5m/ZrR7lfzcn2T/QXjTZjJjSne+o60g3+8KxeA5LdgJX8ILt8doMucX+JORzvR3NNKZy5KiAYa0Ca4szGTCoBcKUpZAY0x2r6+IgVumsWn6M86EVyOceV9AqErKDzc/MPzy+nHXzhlX3zzr5ktvfbnumUtvbRzQY/zcueN79F+4ZtBDfyfimB2DqgqrcnLKel4zcOiyluIVUyYvryjKD+XlVfW5bsjltw8ve1zLTwPd+4xuI+flJsJOg3yzmJn9SicLrHGFAyEzgGr0hWUPy5B0sRCMJ5khKWdEYh6axeRB6JVJoZeTLRFOkjM06FVPAzNuILA3odq6Vip4Cgarts8rGuJ2j5yx5SnB/OmpZ9Txn6q2UZLR9Gn+Y+vISTrO1WcSolU4zvSdDWWJOXGsbCnL5mhS3wke6sQBZSebIp36TvPjKHobjT12+nPo/hisZZh2NSi6q+8/dar2gdGT77kyRLbxQzpemblw0yS+vD1r8aUDB698MOW/EHkYT5o/h1zYn5PD/Dnm738gRnX2G8LxjtH8btjsMebRrovBeazcJrb3IZbBU8UEUZ/uy/F1+nJ8KV9O06X/XE19OUKVXeYPKmbDTzrZcnD/oX3/XE8/N1XBfBpl80G7osPvxIMCF+N1ZpTT53hB1JnMls7aAzg9Gq9WmiiCo47SgVtw7OKul957cTdM1tsfv/bqJ0DBXfz1HXfz17Vn8Zs65iV5Avrq+Dk+HfLLPp0cChQsxEzGqLvA3H2XhNSdZKz6IRydIv9SnyeDVEk1kpGqTK+hjhIL4BoGwEadLO/MNwm4YMQBl5nYfiYcsXW8qp7cC4MdzD93+lryZionU9gE50jz2Ri13UqwXJzPpoAv7vhRGN3xNz53Oz/702c67n+XnbtV5fhWkIdyQG5yQVjJFhMwg3GDyPXB1N9uYbmIpvn4AOY7IkoI5tNXRENWYOhiYqyuiJpdtYDGJUcjifg8TPNh2qKHCiwgnRApLIXVA1Ci9dLmk9H8uqbyUN7gSzZW1udV1vlblvQv9lYGyYpnsocO4M0kID5lz8zruH/s4soRq9RLho0yPyUuaryTvJwd8jupn4kjk3QqYFgfl4rUORL00Zllviuucgb1FH82nWXoJwIbkgc6M8Jxt0ZneVjWHZMtESXgpGq2G9AZ0FHdzikZPFgodm+ApWuyJViDpgfAjkJDbR1QnUXcXp/HDljEbaDUtlbm1VfedcmQvNFNdfnRk82X5gUrvcX9l7T469Rd5lHDyEurRlQuHsvPycu0PyWqn3WcHDA0+xmr0x/KVvve2bhIRL8DWSEs5u8EXTeYk12Ao0UMoMRcNHPIBZqrzSi4jCHFjnaxjzrYvA5utIgVPanaIgQFFswhFOxsmdTQHR+JiDpQheBstSydO2hZU5/Mbpmx032u69M/u9RN7r9peUFRQUmdetJf4i+ogP0dAAp5TqsR63uW7WBPsx1SaWE0NcyQLBTTORKyrrNQjHr7JMEVde0mZjVvb564hZjUH3+eJ3zb7gDaB5+JCh+KMlfITeVkfzjus2P2OYqmSI9o+idiCBfFEH7mByvAi0RolKcAwa3Nh9jBh4f5ARrT3kM4kzkbUZEsAk/0DSwjByt38sm5AW6fnWD9Tsngw3vjK3/T86OcWeP6TOmRm9Njap/xM3PeDu9YEd9HupPbSWHh3r2eu1eNnjyubuLCvv0WTqy7auLI1Zu9+/YVAi21NF/gKVi967T1W2EE7RhBYyEYVWzwJhBhFUyKy8hS0Q3HlBIpESsx4FyXVGHaQEkQnvNKsNrEIdH04zz4hYNa5w7cxzCAYgATUbHAVGOySgWNnQSQBbCLKA40qWn9EqqGZhGAXpgEa6Ml50ROvAWgMQJYc8JnwFGtOXBF31qzTveX3UV/e2vzh+EDBde1zF3isVjIX9TLbNklxTabYH9XdNT1HF+V3dflOjKpVf6HvGbA5ROvmV2/IDfvSGO/Xlf3LDMajlCf1ZnjXFR8UHwKUGKQW8wxRRY0M0+p7AwrBZihUxSWs46h/wFLuDAnzuJKKMXoYcgCCMK7icdHZzEgKU4Ri5Kce/QGky3DQQEvTXGwO9xe/ElQajPZfNqcU8eKUO/r9BhoET0s0wBO1HvdXnQRFGa9vmPWzTfNjb3+Va/mr16Pzbrl5qu3vPlmc/OTNxy44YYDQuKl5/pesvPljVNvWDJ910uv9+/3+ku7ZixdMvW6d1aufOcmWpPw9zPf6txgJ3q5G7SsT82XH3dIds4G+31UcehwTcfdHvoBoBe3LoVe7MdkJxiroJGMkZjNjvNsw6QVfSRmt+E7uwPeuSN0jdvsyXiAR9vGBdiuoiTqCdB/wdoA/RfNOU0eJY/+pJZ+qH4Ie9eH77GXD3WtHdP4RzuCex/du2vX3kf3azk+6hEyTXeYrvk8Ln2BSzTv0yClF2Oig2DrG2+8oR7h/9RRLtr5rzoy2XnsZ74Rpui2cnXcEHITF6uhkUGDVlmQb0i05dZkYmRwaFh2HEOa6p10VdTT+KDcL6JUwQfdIsowhiS+N72iAeDBDnnAQSWY95NccnD/t+++8gEFElaHbDqoNIo/yb0Pwps2s9XkCrVZ8FkOOtqKgiXwthif5UZHW6/G3vC2iT434zOctW3g4AHwtoU+D8LnGPxVJ5iWixti8BM8ammQBzXE4CRp3zY1yM0NMbggvjE3cH2cvQcDeLFiWmFjr6bmAQNbBlWd9x+5uJ9RlF6PS51gqo5BahMzc6l7rcqp5FTQ/GARVgBHnFUsySfmztH2r1TAVM9cZ9TXn4Lt8DB4tbxEF6B4WlZWpSvV2w/nLJ8xaW509Nzr5o6Ojhm9aNeUu/9U/lr5jmHTtc9Gjuw+4tqFvbZ//Y6rsmhI0ZWWylJXt/L+VcOlUaS4cfzwHgPzy1xed2Xv+YOuGzdk4bR7+j+4rvbOfr1ziySPOwww/4bLB1/f79qB3T2P8sM8wTy3x+wSpJ4RX2mex2VxiKUczTN/V79A9xzYmAVcIzePQ/+SF5ZMj7BSrU+A2aQUw0teWBGx+KgXxQYu2BVcTImE4TDMvCQm2InQmZkdlpzP27xiXnFZbQ+qPCqqJWcfm9HkdGVl+wNlXHlNsiLPiYmbXqeDxyS6ohIedg4xGimCD4qChaIzaQJRPcpiJsz3TFqOkjl/epwEj65ceVT99PEn1E/eX3lgO3E//hhxP/mkeuKxx9UTvSOTHph88381PFN4Wd+rZ06/esAIv9zzv1ZOenASf/gdctVbS99Sv1L/oH711rJlb5FMUq2+r55++GGiJ1VEv3Wraow9smLgjTcOHtCw/i/rGvsPXrm8ZYUWI+Bf42WaIxHgVoI1gnmXAPDsIpiHoHvjAjsmqH494XgOfauFNeKZDtDWITmTphPAwo9LNDmXBpkyERpjjpjsktoMNk8+ZV8OKCBFclF3LkaYDIL2Kwo+GglyJy3EhIZVfTLApG95aOVhYdDI2YOX9t4wbf0jreLYu2dufqwlNPR6075elwqPL5g7dMickWOGblutjhk9bfm0QPXVl1QBjSu4bcJmYRqnAzTPuYjH4PMI9HkF2R2P98MnopIZRzdvOkqmsVeKCxeQoBgU8uDvurOscNyHWMWdaGL5SyKgSxfgbQq7RC6Vv4RVdUFpgRD/B9//I1VPArSGjrQLbj5Osem5dXCdxW9N/J9I+969nAjy/B7I816Q5yBXzfXktnKxEtwPe1IcrvjgpXtYiYiJWPcIXr97Eaj8yghAIhbjbGSxJwdFQYh7quEwEpGrHUodvCuHd+UOJVeT917wWgfSHbf5/GJYy2GuqIKpynXKlTB33X0sABGR2py5FejXknuChVXe0KX4d9a8UfnniRTAUlW9AUu/JSFZ1dSV8Men7vj8xuWfPzl1h/rV9ifV4zvIaNJ33b0jmn9/dPcU85be3av6buFfO1/sty768OGJEx/+cNFWYtq2Tf2x45DQcMeyKxflgDHWqL5GEiUVlUGQhwnCSB7zggxcBnclq9xUMoCLFmSuQWRggxa8EEBSgCTjJgfXDILOElXjOvqO+v5soMLbBL2Bp9KdYUGtK7K0yDq/16338xpimHCAWF96Sf0he9LtEyfeLrR/v3v397vJVXOHDJk7BNfhwjMtWo1nBqBamgmhZOgSF1Xu6bhguadsi6RVfGKdlnRe0SfiuVThp9pTvPTnF9LLPztO7EXZXaGeFL4HO9PFTWKjYylpOhOgTF0SZTL3hYnloBC6NBQXa85gBQVhjFCghqkogovFma2S7MDgBWZh2JwNSVfGWZ6MUmHFF7uueeRvf4veffnYAU71pPhdxwtfPjiTr2zPmlZ3SYH6DeZ6aXEUM2cHK45mR6D3QUwmxWQgbI7rmQmkd8QJrTll8X6WJANLwEGZA6qaNGKuRGEJZumNvPXtpbt2LX2bf2K3cOu3e686vYJfcFVHHU31BL7wd5IdQhzs7zLMMYgLds4jhrSXZGKgLitBHyyvFxRdxIvxp5IVV9w09srezVcIgaYxcDiW6uPXBSfIJvqfh2tVxW6qdGVTOJ6hqV/qHYrbHNwgtHuoOx9pg3fUQeRERG/CGhnqhlb0WilQHa0Wxyt3FgG1vPnIw2++se2RN3dOnDplwoQpU8XqB95//4EH33//9KtLl7669Fz9WV9bX1pLBPq8AhTn7n579pDd245u2nxU3aY+yl7PrnMp5Eq4ZVwsn0bHAdd5acqxNxsEpoimM4KJaKImYinbk510T8ZdpCQz0WYpCYJZY0SoG1Ys8FLCCuOynQmashx0sSJ6I8oSYH3amMHkpdEjVovbBEjXbdd52E4StfMGsG1pHRIrdnmnuOfAlp7FK+bMuoX8N1n26rIJ21cOAnxsJpuSFS9335OqeJkyb8bKA1NIzbStwlS0S2lMleZEGQKgUywggedVMlg7Kxkywsw9TKya866zkgFU49nVDGYifh5bnlbSYAiob7f7af15+jXNXV3T2MU1z6+esBBXgJxbQbH8cyKqR9LrKMj3JKB+xqVddwBc18Y5zr+uvfO6UhhFE67LYgxp1zWRYKnhHGr7kl6k6cXVt/RMI1j3dzJVfWzr1vZSVsvBru2EaxeAXK0899r+5LUB5sUtrAuLK9ImWfKMobhP5GpFVEPUQWA8Fi9g6qCApUO6HaxatMCI5VJ6ilz28Bbi8wdwr3M7ATc2aKExubCTGAuhbhPY0mqjLKwcLPScU5aSteqGyOjaquqs0bFbl9RcXlsVyRkdTSfzh3X35ZV3y1sDL6FueevaM+kci4xe/eeaXDm5WReULDS/MqKKSY/OOJpXazxGl4uFJdU6nTSpVrEAeTE90WLmWLridMZ0vI1WDp4vlLVRj/aSTs/MIwtg9ANTIqIvOHTo53/yPC8dOtQpI/r3ALu4OX8yVinbouiacMJg88MazCRyAGFU3MPqujy04QhuuAgkC7G+UUyaMjlSTG/ACL9scipWWs6bD7b8HtFkJe5MVjROMOpfx5BGSsLTQldmXqqqX3NgbW0l7+iU91kN3Sp61FVV1OtCgZk9J9/ROqVxeuD00ZTw/09FY8/KbnV1zEdxguP0MHOwU7sw79bK8m4BxmoFJi4TJnrG7Q4rTo1dj6Uf9NCI8UPYGm0s2K2FHqi5buJN2DdCKwDx0I0iSDorTuABpEhBNx8Wn2DFIPzX7SF10fwDpCmsa/1QXfmhetvHOGJyimf1EuNVK60RqgMN3lkjFEklpFhtCbkoHA9p81CfTK3CeGEVTEKATQI2LKmSABjmF5VWR5hfpc2q9+ZRzBNCj28pupRigbJqmBxaa3RejlMXpUYZRMvDKClN2p1hUl8lXLj86DL1rbeHj5p06xUD5vpa9cVZ2d0G333Nmg9u788fXtJVPdLL7+uvcY/vNWbpyF6N3oLCnDJvedzbeuiElp8+AHQn4q0Rv1Yh5Pi1CiGEgiaORiHPqRQioNTTqoXa7yPiX9tSNUOozlP1UqnxDPz/YjznjgO0fNo4OrZoGl4biJ6j6j05jgEwDunX+eL8tXG4LsgXEw/6P50xf9CUf2pISc3P9hw6LtCDFrrqrvnlkaHz1BFVbKAKpUgyIfrCw2yzmtALneGk5RsOzIiXEtoaPIuHoASj8Egf9ndH7v9DJxdBC1L9x5/ZgbVDMJ/oGyvX/OE6PpVCQ2uRkuXMMSLwDdQBLyAEAMw5Aff9JhXF47RbKyqic8Ov6TxnWkWSMVWRZNLSSWKizsDOiQksAs6+ejK1q2vTDeP8GJ5Gw3zrAMGWa9E/Az2nmaapA9coPDbpsfuASLRx0u0boXqxNm28mpyv0zlswAIV7DDMmUB3r0vTuIBmjTGKTUlkU4QmxjCWtAkGERsmOWnDJMGZaDPSD2Ab0yq3JNyPkCJ4PRJV6+jO89PnlKgCxnugg9UeWrlcrDSgORw2LRKsZJoTcTCeRFtIzmGGVVaEpj9aqAllA6WcGYnZaNcSWw52LbElu5Yg0sYd1OCieZFcskCLRoRpqSJcm0guVp1bEgii3JQvJJvI1eR2oi5TH1UXJe6csv2OiTU/qz9tJ0+p4/l5e/kptHxxj7qFn6fODw5Z+OTMH79Xl3fWUYofA94xcQFu43mVR3JBOG5jKMcTaXPZCgDlZDGUgz2ICtPKkuSA/5gUNzPEYw6jch/NTFqtXkn2YMqe10EzVZUAa9cheyTFlgU7roA5FRcoYhK6wD/JwqY5XQCf9GKnc4EPyg2tfQI5x9qnEDe0y+qniq6qnyq16qc9WP1U1u1/V/+E8PuiaqDKcXFeXCGUaGX6/f8vmlDrXxRNpJTqhoujiv+60xZgdA2gdFVegK6qrugK/z/NFdU/F0XZlKSCujjS/pjadJK0OSltvbk1XdAmN1H4hOsvGmmrDjXB+qtn668M1l+fdMLBVI33Zouut0OJAvk1joRc08mRvvAa7S05+5iRJVmZhcFQ/f+SLV0sxItikr5zla6GVVqHq/QiGfbZuetXZHwDvc9kPYzVyedzriwsV0SVctgBKiO0KeNZnFJCsAWEaH9GJSxRv3ySTdiZMYT9XhyZQSxxVMIV8CYjq1D/v2SWtptfFINaYZu/OIYIZg0DEO49brc4XqylXmfaEwR7kJjIe6SvevQ2MFQuWa2+TCpvU4+qL5JK0p8ekr6r1Zfw60r1QEoGaa/SEq47dysXy8Q9lLYoKwd2mvgkmA8ICcWod/gPhsGAhUVXTXV/bhZNEsPmU3bgHfbLyEUVnok6vUraY3L79AWlrO2gYjHTPmaZ8L03i7ro4/ZcLr87MtkYSDavo3DeVx81eLUeFaWGYH0JX+z2kRJsbka0BhSllLFr71to/aFl8VJ6vOEm278HLV5CrJPI0f4jxlLFYxw4Yj5wejJ/eDEyNeRdPV09qrBj3+pppLv8yW1CsxdZ2/GOF1n9ye2wL9IaOKpPfVhfen4VXGZXVXBZyWRbN1Z1tkkerw+FpsuCONwPziuK20F1f5eVcXpjEsv/348NK/TaJLfHR2cEo/Fdjw31+nljI9uZDu9ydOLxpM5Ojg91dhbX0tX4srsaX865vPNlMbm54CiZlj5vnB+TRtL8Emjkrgf6B00DC2ycVI/4QP4nnD9SRPaZUcWjZyAuN33YbkuIJib5WO5rDhzmdBKDyiQTuyRJ+oYL8VjTD+fzmTty3wW4rNOzxc/6mrSCDBgBhdaeW61nS1Xr2bVqvTbeZLZS/XV+yR7mraWX7Rk1GN9ZvCd8pE0uz4HdITZR7OtC/3HKRmDpo4I+QSF+3GLjsOOYxZxImkdWALW8LRLBrGaHBnLRBFJcmGRo0NJXo51V2P7amkBwx/E3PyZ29fuP33yT8Kr6pq710KevHPxvdRE/8+33aAztzDe0z14tt14bDS3h8VsSrDdQBHVVHR1BLWDQWgcFBhZ3ok2yhAH5dwM83i2sSC7cA+QgQtRMT0Kphx91qwWTJD8vgg6hsBTX+UtyqlFVBTELPIO2onUnewvmYdgqZsnMb2DQlTXQow0aPe58kZWGJPNVxRqK3zFTbcHy369oXrHgymj3S/t3Dw+4bED4vx9b9/jU2VPqB1f0Hda3orJ3n8oJr14jtK96eXJBn3ErBvSaUFNW7nWHK/oNvr7flgNDjjT2ixQPrL+k7+Q5o6q7RQoGXrFgUrvIsBOt74O5ygQ7pZi7N73Cz29MxLJw2pJlfpRtcb4oWevXlqvLwpyIEsq6fA+tlg52VfFXiqXTaBEaTVnIqqC0R2f1ZOfQBnha2Z9fK/sruuiyP9SO/K+U/o1FZbn5wvV/4j717Q4bLQI8hx8B4MeD51Y8Bs/iRyHlR6r2sa1QF+zkxy9VQJaeUwGJ3CgMFqe4gU7Rov+3Ukg0t3+lHJKni/hCRZH8QbagkzzZBTzJBzT1QDpPCtOqQGlLPU1GSpI8kbPCtE0E9g/z0P5hxV0xBHtG+NMEpJgJSG7+WSzJAZYUaiwpuXgxoVvArwnKJg2jj7qwrAg3kynq4w891OE6V16WAm+6cw3cq+m8qUnnTRlGJbOi8UKKzNuqCssApucy2F4UiffgPbnAsB4YMu9JuRXxJNq6Rzg0phlgzwrLpmi8O3sTcaD60fjYVpRRD2qq2JHO0UZs7dydZf/XS88BN3MLy6q0VHlcbzUaI3tcPCO7gPbOX2FrbRe2d84vsHjDuvvzunXLWwsvCOU7dJTVosbnAZqeKuf2n6upOmuRi9JkTy6JKtmwNZdGaK5wFqBRZ6ItPzcLPTwe6uFBvZWbrrfayjMw2FeCUT6QTGc6VzG/OItVSmFnIiNNTPCgNMasOmw+rsBm+X+tz2CnT4kpvrkAT+NH1mgcPNDV6hWeP3y4/c90CX92+HCKd6eBd4VgC9WDTZDGu5J0KQ1guk2Y+uLj3XhPGPjYDfhYG0ZRpQ76HqyeC4QzuwiFs4KFTIocuISTDMzPKIevIuyrSDiez4462dig6T9kYxGyUYmAAfWc1ZOTqyvBSJeSX66xsURjY7ez2ajUhkFbZGexzfSCLHVqcZhgYSdj0yIxF2Dw39ccWHvH1CkLNS47kpGZrpidOLDmjilT7+jojgwXFnUGaQSs49JPE06B9dkAtvtyrY6mEEymSjyIGhIxB6oFT1QxGcGOj8R19ZUOW0jOj9LeBD2Z+Q787u5ipnl33DOsNjSRosAgpSQEnKgvxALV4u6oN3WSnM1CU/Aj2SHJrmT/zYDWWJal02mdZc+pQU7PdQoU6llBclPTdRuuJPaZiwatLP7d0LfXLfivmlveXLFnRpVO4DtG2W+cM3phZNeVb6z613XbO7b88cuxQ+c8YjvDXTGdX0dez/3DtAWkeNSyS/3zZw2qW3nN7DHDH7/ygWdnYcnylHmltVsmjNy+63d3NfTcMnHAyaPXY065aqW17DVoZ6Zq2Vm8SCtoT48X1SZL2zG9KC1ehLlFTmRWaTU1Mtvyi8pY2MjZZvPqLxQ2uujS+K7jRiUXLJcPH71rWHrQqHzQ3fOebuu6ev6ObedFjPZXkCy239BadMAneFeFcoyOpKrR/XySR6VGDZoUsbr0IoAmwVK/kdZLoAo7tzq96CKq01lmwK9XqE9DwLXl16rUhQ71bVXEUvWzaCo+h6bSFE1BoKkEaeqstW8rCZZemKaLr7hH2+biqu6HM8D0S7X35NlOvySjaxeli/pbz+4cUA4k+ZMd8+IljK4SWPf+MPph0et6LlElFzNRWlrDr0/VQxrkGf1rs8UfYsBHNcOMiRpdAzQZrMTI7tmUgQCmyR7efqZbVAnANhyKUE+s/5gShG016KB1LJVO5okNYhmEVNSAur7NnaOnLqFKp+IrpklE/3uJpWkDyAY0o3+ZFQeOrNOYYP+F+eV/Pny44z2Y5HdgX+XPbAbjMnmfoJ5aZIlLls3HBHjbJug4Y2e8zZWsVz+rg3Ay4LaA6D6PhT/Xtapv/yxrtevcJnhafM41yNnX4HTEeFZZvOv8LsUo43iNTX9FCd79uTgDxfTnbewyQMub8NQPZBVjcDXJGBxegk/mIcpCOBWQc3UG5BSMx50VjqvXfCvS5+JgJjc/P6ddRzjzDVwnD2TnnHgcuVA8zpWKx0ksHiedH48T0uJxzj8UfV56RLzt8OGfV+JF8Qj5OP7Mt+JgvQ8QUAVWZtLO7SV6VhakhOAAI3RAHm21TwDhsL7GZcxtQ52XRYRVYJZJfUw6i0HyWAv8XraRlNC7yeQkm1FiyW8J1mtUEdgVvFjHkc+jp5JHSOJgpdfBwvH9bzq0ZNaV4RW9t/XIHeT1Tbu6tuWh3qNWz2uEL04cuum++4j7vgfXrCdbP3j53rHdrx0/ae5we4HJuCOUtWDBpIZNr6vf/GbOgfuuvPI+skf98vDhjXcfTMXrgmCTeGBtrrpANXusGFnujcYLmEESKihmcTs0SAJsmaaK3du8HsR6lcz2YJXv8CNaDFroYKsXC+DjuqyC4hBlyS+WwXcZrDurNP7DNLNhsRYM6KJcXhyrmQvrk55/DXeJo2j/gwwuC3vt0uirC/CtNdlwQcmEd1jy0paRacXVk01n3ZGZkB0Omh2KFfXobnQQVtjtkZ7Dunpbhp3Sl+m6YGk9Lucuy+tduDUe7LLGXmdT3+54PFVnn06DJ40G7ALgS9HghndepMHr9nXScE5XgBytKwAdvZf5Sw0SaNKLaw+AiqPLFgF3sr2wy0YB5F/aJpikYxfN5aBV95QOT7KbQTZOSrInEKz5VOl9JkV0Po0IdJU6tYnwsYnIkGyUFEwV45RszwVJYdthlxMyWNsAV3c5J8L7mrn/1HnzgjnSQVhd92j0lCbpqUAvGaHrLe5hKyvgyYG1k9F5NzYWiizKpHfrQG9i3MoWljUcD7IjZk4h6bKPuhu1ReYLYmiOkp9TUhpiN2iqKL0Q7V2ts6454ejCTHd3zZX/OcdCfzDFHYy7Mf4M0NZeHvYMS62+5MJD3Z7NUmNyIrRRBFt6bVYH0XJgOhdhW57BY6SJtlh+mOdk7SMyHNgiWHBixp3iyYY3Jpfo+7WViftEinwEBeksWHDkuRTBQ84WbNEC+/48jU7ejjsKysJCbpO4Xxys7WXdOZpArBhTdyHQ6iu0vQxTzw1ZCdkc6bzrkYdoNyNYKA7qGEMs6n+Ihc/au1ddgkm9fFuyp72Q6gniA9RVivV67lT+e6HGWkzSzzMlku62TBCeTOpuQ5VA5YnWw7g9zL9mcLjEHD+uIasT7E/EWIVuvEeJhxZntlm57FKtDFVv0qAWYVE32lCcsKhbFdGibnpWeVxTCkx9YMpY8+7otHm3fvfAjKv0u8OT5xBTLcksKb511TNVJbeu6km+3fj1hgL3+IEf3QIHfuvogf+98uYR5AfzbnW0Zfcdq0fhPkZ7FIAORA047dwuBd5USwVzlAYk27KIV9OCXXYtSMWOvPQeP5IvM4vKyy83MEBtfk4TA+pS7qqTgdiE0bdfGbcvfdxMexPfr43bRmNymva2Mu39y+PG6Ny5zRfGMJXdxciFXC0XSxv7Lhh7DuYtddkZgg6b8lz2hlMhr/MGnncuw7NymLRdxPCZ1j6HgKSLtksKeKasca0wGgZQ/udhBW+XVGABA2ghX6cWYlS0eWk9eJbzHHra8qw2VEQSU0QSU0RZrA8Gli3rf50qLZx3Dl3xI/f/oUuaGg8fZrqGZ30aaD9XC1fEsZi71q6BNrZvM3ImYyjVFSLVuSGHx8BdWvMGGxWCzhYO4qDOuJ06mN7bKIPJrTWptztbgaHyxt4+TFYztEYzzEOK+hoNA5RXDyILnZWqZ05xsYRuOVNi8Q5dqrsPbRKGylnr7sNuq6jfcXzub9e/OXXqm+ufnu9YfXI1/K8ONjSq0szNX6l//WrzzI5Twq71u3evX7drF+Z5U94MoLzJ4Iak+ligSWRl2ei2CM1Y7cxGx/5lsNFQmITZ6Aox0JtfKToec9JxhGntLwRt4s7i5H1H7kvn42xtsmjPQ+Mami8R4rZp93KTbLD06S2HbCxjQrFaO7tAxx02H1rLDmsqBUu7OSiqb6M7EqE50dZITCrGTEDJpWVqSxmmEE3PKs7DGhvaTiCA7dg8Dew+LBxde7l5RcXa2iMNiqlcYmXmtG++31ebluJdS9vlO1mWCmsb3ULzJoj7weQdAPiv231b1W+SzaM/2Tkjclbn6J1btFzULU+nGkcPW7v7HdY1WsDeQvoE7GVFgKCi3LWan89nY14rpUxrHoLl59iIoDoSr3IXisCeKpHdmgnYU5xF777EKWVIeI6/oUFx+9APml3eQD1+SkYxvFY4lW7YjkmUWDsmR6f782yXgV67zwmDvg7ABzrqOii//d8PXf9yv9v/MufpOf1zqefAfuvsy5bVy20/3/j7po3/ePDf61YQfvUKVV3Nq+SF3N9PnEtmkMyvN04Yvqtx6tq7RvrKTMax10R7bHtx/NBnNpLFG5/eRTKf/m3J2wuSNQqt+s9pjN7BjT07So8tdW1RxazHvoxYyaKF7NuseuyyYMJk4bBidSbabPQDWIm0q5rNesHeu52S3BnM3wqCfFYo/5SWPnTWfRO5s+6K+P/yXTlpF8p/tQa1XOBoDSo58yfSrpv5i78X8Pe6TdrvXxfGkhnUZ1LI7t6MpXDGs+4UaU7d6xG9Lw3Eve4J4MBRNr5a+PujZ/09d+G/BwNJqF1HPO3CWL4Sz0C4fmcKyGsXe5/KqNCvFbOi8TaVMO0OYaxg1vw9+RyrHeSicZ7d1FMfObs3TxAfDuJZt30qkLAdSaCD4JEGIdx5nvPuYZ12HqQg6tKo2L+euDVSGDlwLqCHP0XpMXC59O6fYlQjStaln8mn3WIZKXoqSRWjjPUv+4FfzL+LdwZP1imaWJ2iSbuRNjkW12XRD9mLdl4nq1Ys3Hrnqxs2vEpuwec7GS4eDUZHqzY26k+iOfmiMRrF24EpOlMkknanTms6VKH36nYnZAO9OQftZtl5Z47kv9End/5nJ72PZ/LBaFnIbePzaD2in9PuIhEXmVxgv3javFHzvbFq74Vk9549yRJvdo4VcI5Seo5A8hxYs6PrPI2OYwu5e3V9Z7Hjts76RsKFwS4Yq9vGlWFuaDENhpoTtIQeS5zi+TnFNhvt9povJuSySNztox8YWCMPU6TNUWwzsgZD4jElC8BNGRqc+aBa3KzNUFYZrdfDcCfG3/3F8DaIbxWuELSuD/2yYoNic9KMF2zgQBu21Abro3gfKdq5wRAwBPQetw9enNptorjS8PAoz68ePryWkD/8eO+2UY98NoZ3DldzRJGPDld7jfr7/Zffe2/ij+rP1eS1eE44o9G6//0fj6yY981zdW5/JK6evm7zfiIc0+5hJ8yj/hLsY7WZybtiskajWAoIEg9WWSSSqg00iiFtXbOqVuyIT/t/Ylm1Db7ssim+rKOCEnezaKaZ9kHNIFjSHLezsBN2Q81wa3dlwn5lisXVoN2YEFvjEimaQ29uagiWSlHywj0PkFvuW3T9vQ82Teknnr7zTnUR2agu4jPV10hjx1fEvO8l9Xs2zyjsXwlfgZyXpvX+S+oUdvfas29iW439i+BP2jPx70X4+720DnYJu9ubnBtl2U8+iwaJs1lruvwIc4zZOZ2RtTEK0KoEPyyV7Egs4Ed+BJAffpYQm+tiNYt56L/X+bBYX4qZM1gxnw4L9tk9NqPUG6HzGaoM6AUM0DvfBCVx2/t/Dg1pruju6kZW89nmHJc/v8wz4wq+9Gv11e8E86evnzC6M/zWIHmB9xrdpgyD7to57VmCWWsmDLTBGqgH2oLo7UQIIWdEGbTKMmu05THaCiK0cU8hJSgABOUCQYWUoAKY68IAHhYibQEHnUyz1tTHG2D9Sc3sNjgc3s3OZgfxz0KvlI92RDaldUT2+hD90x6qVXytlN4eWdz2t+ev+mB4ZTB8de+Svr2Co4deeuXbbyOhEx88MHZAuz1QqD/idlWN7yO8FRnca0yyaTLN59NPAjqLuBruSe2u39n50SgtlsGmq9UWXLWxatqUqdquFcMrmcVRSr6S649EaMw0SBlQCAwojsSClAFBpLqQ5SuVRGhWhC+CCV2I57OBDRhSLaB38Qs10OVvKsd6SKfittC2TYqDxqUN1Vj3bWtIMoP6DGjHSep/AjYkJx4f9YHamvoqPcqDeceSA9fv2HXj83ufXy14iyNDyifM4Pt+re46qa744QeyRm+osBW5An7XpBnAq5YFO0fPmrXiBWd2tnNU7/5JecDHpy32OjHb4NKZhFG9MbahAt48Snv7DITdK1ZL88C7A99o1MoHMpJkYH8LKknGtYp6jWtVEeRaS1iupVyrAc7UR2K1Nci1WuRajQMTwuUeEaW7G2Ncse7VtBVGFXzXnfb+UtzAwEHY/aIGGdgEDOsODGxswDgl3rPNLSnOHGRff8LUqwG+pr0IhHQmwuo5S66qdGmCxfgJ7DQiO/kdS15a+OhvbvqgbvzAqogzJFT462f0L+vbFBRyzHm+oHv0vI8++o+68uRJ0soTm16yezMLijwz5mjMnT7dlCmVZ1QLZwkkceisOvGS/sM/TXF7YjX8td1oNRiE4cDu/wOgCEm+AAAAeNpjYGRgYADi5rUBcvH8Nl8Z5DkYQODSqk9NIPrKOTOe/xP/MXC0s7sB1XEwMIFEAUJUC7AAAAB42mNgZGBgd/t7g4GB49z/if+ncrQzAEVQwF0Ap1IHi3jabZJfSFNRHMe/95zfvRuXGD2EYA9biITDB5GxRsQIJPIWIUo+jT1ECPUgiSIKLQgfxh5CRoSINyTGVoGE+LQH6TGsYEjuRaQH2UMUZEn0EL10+56ryUgHH77nnJ3fn/O9P7WHK+BPrZAe0o159QZD9gYeyjUk7F/wZBNpKw9PzSBPhrSLpN2LSauBrL4P31rGqF4NdmUNSR1DRmaQkCmckRJceYBheYIx6ea+ylwlpKwleNZXZKWJizKIIjUnUXiRJsbsS4xZh29XkLPvwpdlMg/fEe6X4Kt+7jNw7RIVPG/w7jT5yTo3qT+oFf53C0lT345j1uSM1LnuImXmbyGjPmDF9EydlWd4oVvsrQ832KsfriskxTe/Qyd7H2DvvurAI9URrPHcV4OsvcE6L0mZb1mkLtCPc4wvIql26MFTzMkp1nzNmg7pgatXkaB/RRVlfapeZ40Ufb+NV3of12UXabkXfJbfwSelmGscMacOj3k9USjIc0zoEWTDs8vIm+8gczzfxrCKo6Bzh/fop3n3SURiwZ7xN/S2DdUf1Iy/1I9U2FP8zofeHqMXW6Eaf9sx/uZRkzgmQj9PwKnSp9aBv+0oN3isXJSp78l3zlPuyN//CN9t1sbjdugxY2pGo5ucqbN8A3vSVSByFfinahywtsiFA/CFOk29wzuc6SNGGJ8Ntq2F4C3nNk0G9HmcVvtIqwbXMfa3g1ETqxYxSQomr9TRx7lNaeaVLgjnUZwmXOdb8OcvkMrBewAAeNpjYGDQgcIkhimMVUwsTJuYvZgzmCcw72B+w6LH4sOSxdLDMoeVgdWAdRqbClsB2zl2DXYf9lscJhwJHB0cczj2cVzhdOKK4urh+sbtxt3GfYj7B08BzwqeY7wivF68BbzreJ/xufF18P3gD+A/wv9FwEQgSmCPwAdBBUE/wSrBDsFdgucEXwjFCO0S5hDOEj4iIiJyS1RB1Eu0R/SQ6CexGLFFYh/E/cTXiT+RaJC4Iikj6SC5TPKG5C8pDakmqTlS36TtgLBE+pZMksw1WQvZGLkGeSn5HvkV8hfkXyhMUbinqKdYp7hL8ZGSjpKH0j6lH8omykXKr1TcVLaocqhOU72npqSWp3ZM7YO6lLqHeov6K40UjXOaVportFy0Tmi90i7TPqIjopOhc0yXSddL94Zegt4r/QoDHYNThm1GCkYbjKWM24w/mZSZrDC5Yypg6mN6yMzJbIk5h3mBBYNFmcUaSzXLJssHVk5Wa6zuWVtZN9kI2cyweYEDfrNlsRWy1bJ1sk2ybbJdYHvE9pUdn52FXQkQTrPbYbfD3sZ+jf0ZByuHdY5eTkwAUSeQHwAAAAABAAAA3QBXAAUAAAAAAAIAAQACABYAAAEAAXwAAAAAeNrFWt1uG8cVHslpkWzboCiCXhRFsRCqwgZoRlbsJLCDIIxEy4JpURGluMlFAYpciluTXGZ3KVtFLvoUve4D9DmK/tz2pje96DP0AXrmO+fszpDLHxstAkLk7OzMmfPznZ+ZkTHmJ+Zf5pbZeusdY7Z+bIy0t8x79MTtbfP21i+lfcvsb9Wk/Zb5xdZvpP0982rrW2l/3/x86z/SftvsbCudd8zt7X1p/8CE219L+4dmf/t30v7Rzh+3/yTtd8393Za0/2J+uvt7af/V7O3+Qdp/M+/u/lnaf6f2P7j9z1vmZ7v/NgcmMVNzY1ITmyszNLkJzW3TM3fMvtkz98wDU6OeJ+YpfR/RqIRGRCYzL+i5j5adN6FWn3ouiVJoGmZkBjTW9iX0/Mx06amH9im1utQf0xi7UteM6TN1ej8jemN6su06Zo2Jm/pSLmL6DWl8SH1MJcL8FG8T4mRzjuqVa3xO7RGNuEfv9/B5ROMOobtHmOGPv1vMqOZY335JPSk0mJAGQ4/+qelQzx5sUPYOQaeH8dfFjLr5mD6PIPULomnHDKh3RJQvyY51smLdfGjum4/o82ANx12ibalYjg4dC4eQt76xLi2WcrLsQ/M+fYYOXbaq//6S3vCYHrXqQFRO/S4ylmM19ND6Ovj75A34CM23QNwmyP2UuKuZwLyk3pwoh+YMOrWWvxaveQx7WmlOQDVagvU60QnMOVFhzJfzOsB5Tqt0Ibd6hUVADzrPZK0ZtftYPQQ/EWYfmxb9tkkatntJueVRsNqtQu098FZy5q+r3PRgv7iIFRGNS4jnGrQ5Qa9684h+E7SuRaNdmjECtVKXXfDaMF+gnZMNgzl7ZrSqxcuU+jLiMhPrJNR7Re/bNL8FvQbkBd/FJ3D0f2qahAErU5t+z6H/Y8K97e3Q9zLth0TH+sCHmBuRplKytMXCjfjGHnn+dydhQJKdEf8N8sXPSaamoMVa84okYXtrtFZcrsej9WC24B0ggLGfAzkZ/cbkTTNgJxfkWLvbOGcxZP0gwPe1YHEK7+OVmJce4iKjL4GvW6rXoDYouJrCT39LvT3grOZwMaO3U8zNHdnKuT1wzXRtX0BPA7xPQUs56dJIzW5WB6XPWG+bkB5n8J5c3nL8GcPjY/RGwpnOYw6Z92vRB/sUR8+oGBtAN2yLAbRg9cTa5Bw8gXaHWHvoyGf5tzHxRjzeamQolup7fj8uOImkZwLuutDDRHA/hC+78TQRnabw78BBFiODowlHmsyxwGJsdHlm3TDHMxlRE1TNEO+1Z0wj7fOgiGyqM5aRbZIiF8+Aw76j4RE005WomcCO+syc3jjInkDaELFx5FRcPHIMPkfQYIaKiTUROJLVRLM9Gsdy6IoTUOLcECPqlkhXS/P8Hkardi4lp4wKjVhOLvHUL/pWa4M19j5WcaVzIz3zly1kOh+/fdFGF3rSWelczg2onzGcVWh3ViDiciOdlJr2MaTYrpqfoSoYApUcf1JHt8oJaziFVSOgYjGLq4ylH1gN3MBfNXb4WHeRYWl/g8iRwm4a/QZii0WfSKW+Zv+cryeq87+tw1jXKlkXUdGiPxC6JQITmjtzeCkjpEqfFbjNK/SeONVNjHa1BThaHFI2ekxZ9oT+zumvjVwbmJ0V9dWO6GEgcUd1o9xkqBpV+wPUHCz/oi1dDw4ratyAakH2B7vWbZp3Z2O9KwJ7smYq8Ub3R+p9mWQqG7sVHbETuwMvZkTihzNU1ZEnYU0iQiwe7Ndfrk/4Vi7zH1tlZ6M6eZkdFEuul2fwiN5cpHYlt88DoKzETyBVq7/ryITj0mPYLsp7W0bH4GC0ULetw49WHVxPaK3HaFpV9XPOn2JE5MShDHVOdexdh7+wAn8q57OF3LeZnKuzzVjqHOWti0xSenwClPXFk3J5U0OVkoo9L6USyiGpzr2LOtmvLDRelDVMIvsMHl3G18GchRY17Y4J1qKgVkjYkz3nVcEpx98x9FLGNB6t1eR8DFyFDNV7AH5fIktPkDVTzFIcq2Ub0NsQK21ixfIcKJUaQKWJij7O1FdSP46L/hw4H6JO7UFTtr5LYT32xUS+yww3FV4Sx2qhnIwsYtz3ruV6qstepUnR5xnlgg72Zm3syX4F77Dtw7lMcQpexvCvcmfG8ZP5jcRyLPtE+Kp5lbbuN7g6vpLdtq9pX+qEqOaSiRkLAap3jVjzmF0ud7nSrNjna6V7I3UJ0+SKN3I4LKs9vxq+gUcuq/rcfQhXraMVtTTnu8W35YlCtlTaoFJajhG6Y5tHyEDib4IKlL2MsdWXvVSCHPsQeLmHjHyCasOtwdZ75USQ7ceYWHw+lvW4tp1JDKmKPDXJ0GFFzOEV1kXqTKzn79T8XQbzFeF0jT1lH5K/+ZqbI3Set/ldx/9rf1Fbs8OIsC8fOh4SFFGIPdPdc/IpwnWRQeYzLVfHsVRV5T69ur4r6/hMKJb7svmKrQ9eXXxq7ZPLOndhO0YVx+RXshNwa7shajY7465U5X3nZG4oPZonrL4VmaUOpqLRKWTXs5mxaJJzRhX1MbI99+VyThEDj32sptbU9VQC5uJS8MlnYm5Nvnz3nYhm/XX8/S/X8rFU1tcY+bKytppJPcu+84FEjWQDT3kTP5kJ7zpneT0dFPW0u7tg7WSQ8BX2ajGq5xya5uycy5nQdEUG9HPevE56sA7vz6dFhOVctq4W9XcqTIN936+aJ8Upy1TkiCpqbkbj2EGI6nhSnMpzJT0tzhMmSyoMtbTuMe9Dq3pGMJnTtm/bzSpwf5cbevVaNd3l+VDP5DgH+2cP5VmIe1o4llsJrfT6WDeTOiaVmp1PNXLYJypibLAW7TXBnI10Uyc72/jwAvy9lLh/5SF8sfpjelX6CDbWsxuFl2s69bKJe/awznuCSu9h3DzwcLO6flusjpirqsqptvEuyGbWMVBQYmJZlmV/iOWM42bDUwq3EixXclG4fO+67hxsWb4MX/vcK/ifn3uFr3nuFVSee63by5wXe5kTQq7uWlbd1V2iJk6Kc5MJblBGjpWu6W0sZ/SDpTvk+VpnvnbWc9eg0A3ndz2Vs7uvA9Miro+JfyuF5foJbsHK+7EOTvnPzXMad4Z3x7g5t/dNbYorxzjfO6Qeu6ftyPsdoO459nFPaNwFaDGNM/q2tL+SG4QQz/bpKbR4CJ9oml/LnVYHVNvUDsHpKe7smhgXYoaV4gISnZgj3P/zeic0S+/4noEX5vSc+stVfa6OsSJzFoheDkgGftsg2segZ/mvQVO2fVLw+Vg4bUBHlvI5bhgvoOkz9F7Q7ymN4xvHBmRmbk8gw2N6z7I0wYFdORBdHeAW8yuMOCK+zsHFKbDHI2uQ0MpziPl21afoZc7aYuUz1CxKpS66ZD5Cev+l0LMYsPK3cNfDc4MKPkJYuoVVz2CFpui+IXeSrnZY9yX+avhviAb4PSpsMM+vUnNtEFRiQFc4ghRN6KOFVTo4fzgApVaBITvzDP3nDq4Y3Wz5lqPDAzmbaJovaNWmIKeBm25fCvYDy38pBeu5Id8HRdQIHRufiA0PCou2gaVFrTyHxzXlPzPO8MRaCICktmhXvZDXUE+/EBS2C858/aq36LhNIgTT0rUDz4KHuKVuCYedQhvr6dbf6D8PnuNsqKw1+T96OrK75Lt82/sxvveJ9gdUTT6kMfeL/3r5CJloQHNspM6LU6IIGcPNEJrxkKH/C0DxfAIAAHjabc7HT1RxFMXx74VhBobemw3sBXnvzQzFPghPsfcKKgrMjFQHR8WGxq4sNCS60oi6UWOv0agLNVYsUdm5t2H8B0wE3m/p2Xxyz+LmEEZ//naxkP/lK0iYhBOOjQjsOIgkCifRxBBLHPEkkEgSyaSQShrpZJBJFtkMYCCDGMwQcshlKMMYzghGMorRjGEs48hjPPlo6Bi4cOOhgEKKKGYCE5nEZKYwlWl4KaGUMkxmMJNyZjGbOcxlHvNZ0Lt7EYtZwlKWsZwVrGQVq6mgkjWsZR1VYuM8+znAI07yjYMc4zQXuSARHGUfHZziME85wyXOcYVXvOAq69nAcap5Qw0vec173tLFO75Tyyc+8JFr+PjDCbr5zBf8/KSHI2wkQB0N1NPIWZrYRDNBWgixmS1s5Qfb2E4rO9jFTu7TSRu72cNefvGbB1znBg/FLg6JlChxSrTESKzESbwkSKIkSTI3ucVd7vGM29zhOYe4LCk85omkShrtki4ZkilZkm331bc2+3ULwxFqDGiaV1OW9mlomqbUlYbSpXQrPcoCZaGySFms9Frq6q+uO2sDvlCwprqqxW9VhmnpMW1loWBT/+Exp/dpllg7ejWULqX7HycKjyoAAHjaRc6/DsFQFMfxXqXqTxVtlUFSo9zNKiZqsYgY2kRsHsBiZWDkWU5NIuElPFD9ynFt53PyTc65ifRE4qzNyJxHiRCXOJkaMupRPZ6Ru8BwiLtkyFWkkR6EpMsJVYLwqlNOflAGKltGCShPGCZQGjKKgDlgGECxzygARsDIAwWfUc3uvBgWUF0zaoA1/kKQzX952NrPnEz06Q50QW+j6IDuSLEJOl3FRhDetaZwNLWpI2h4iq0ssPfpP/ARtB6KbdA/KnbA9vLHmFz5Bl2XZ0EAAViohYwAAA==) format("woff"); + font-weight: 700; + font-style: normal; +} +* { + box-sizing: border-box; +} + +html, +body { + height: 100%; + width: 100%; + font-family: hkgrotesk; + background-color: black; +} + +.container { + width: 100%; + height: 100%; + position: relative; + padding: 4em; + -webkit-filter: contrast(20); + filter: contrast(20); + background-color: black; + overflow: hidden; +} + +h1 { + color: white; + font-size: 8rem; + font-weight: 700; + text-transform: uppercase; + line-height: 1; + -webkit-filter: blur(0.5rem); + filter: blur(0.5rem); + -webkit-animation: letterspacing 10s infinite alternate cubic-bezier(0.2, 0, 0, 1); + animation: letterspacing 10s infinite alternate cubic-bezier(0.2, 0, 0, 1); + display: block; + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate3d(-50%, -50%, 0); + transform: translate3d(-50%, -50%, 0); +} + +@-webkit-keyframes letterspacing { + 0% { + letter-spacing: -5rem; + -webkit-filter: blur(0.5rem); + filter: blur(0.5rem); + } + 50% { + -webkit-filter: blur(0.5rem); + filter: blur(0.5rem); + } + 100% { + letter-spacing: 1rem; + -webkit-filter: blur(1.5rem); + filter: blur(1.5rem); + } +} + +@keyframes letterspacing { + 0% { + letter-spacing: -5rem; + -webkit-filter: blur(0.5rem); + filter: blur(0.5rem); + } + 50% { + -webkit-filter: blur(0.5rem); + filter: blur(0.5rem); + } + 100% { + letter-spacing: 1rem; + -webkit-filter: blur(1.5rem); + filter: blur(1.5rem); + } +} \ No newline at end of file diff --git a/css-filter-text-animation/license.txt b/css-filter-text-animation/license.txt new file mode 100644 index 0000000..86b4674 --- /dev/null +++ b/css-filter-text-animation/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Elwin van den Hazel (https://codepen.io/elwinvdhazel/pen/EWBdPr) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/css-filter-text-animation/src/index.html b/css-filter-text-animation/src/index.html new file mode 100644 index 0000000..cae6f46 --- /dev/null +++ b/css-filter-text-animation/src/index.html @@ -0,0 +1,3 @@ +
    +

    Awesome!

    +
    \ No newline at end of file diff --git a/css-filter-text-animation/src/style.scss b/css-filter-text-animation/src/style.scss new file mode 100644 index 0000000..a7ad082 --- /dev/null +++ b/css-filter-text-animation/src/style.scss @@ -0,0 +1,59 @@ +@font-face { + font-family: hkgrotesk; + src: url(data:application/font-woff2;charset=utf-8;base64,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) format("woff2"), url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAGYQABMAAAAAvlgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABqAAAABwAAAAce53BSUdERUYAAAHEAAAALgAAADIB6QLER1BPUwAAAfQAAAEFAAABoKE4mP5HU1VCAAAC/AAAANAAAAF8Z6hguE9TLzIAAAPMAAAATgAAAGBjrIMbY21hcAAABBwAAAGXAAAB8iepzJRjdnQgAAAFtAAAAEAAAABAEOUVG2ZwZ20AAAX0AAABsQAAAmVTtC+nZ2FzcAAAB6gAAAAIAAAACAAAABBnbHlmAAAHsAAATGUAAIQEeBgx+2hlYWQAAFQYAAAANQAAADYOxXLRaGhlYQAAVFAAAAAgAAAAJA9hBxlobXR4AABUcAAAAjoAAAN0k288+WxvY2EAAFasAAABsQAAAbxUEnXEbWF4cAAAWGAAAAAgAAAAIAH6AdduYW1lAABYgAAACuIAACbaBkKlNnBvc3QAAGNkAAAB0gAAAqoh8owGcHJlcAAAZTgAAADQAAABa1JyA8R3ZWJmAABmCAAAAAYAAAAGhY1YqAAAAAEAAAAA1CSYugAAAADSqvKCAAAAANTONgx42mNgZGBg4AFiJQYtBiYGZgZGhhtAfJPhFpB3m+EOkM0ClGUCYkYIBgB4gwSuAAB42l2QsU5CMRSGv9sjxDAQBxKRMDK4KWqCl+CCaGIgRoPEwckQJw0hauITMBomRzfiK6gzb+NL1L/legf7pee057Tn/C0JUOKAC1zvdHBF+eH2eUKdNcXxHieX/Nu58fRpSvn+7nFCJUbCcCGDsc4G1RhL5Fc3Opn/0SxR0KwoUqDBkeIvvFJjzhtNPsUh3yLViY/YeZeuvFZ+Rjb8zO//rTK/VO0Wxdg56IhKpaUhnDIt7VMR1HRkj4Vxwplsn4HsuTAuhTEUxkgY18K4EcZYGO/C+BKmSkV12FH9lHZ8aS+q3mZP2aB6kate5qu57m3pbPi1hE3VcPlPhpqmbI36L2jPLkkAAAB42nVPwQqCUBAcnyYR4cE8hER0EE8ewlOnLkUERhBEdzGIxCzEr+hj+o5+oX7GxuejDuFhd2dnh9ldaAB6mCGFWK42e1hZXOYYwSCPqoJg0b9dXTVyZOI4K+EmyeWGSXY+xfCvxTFHIBVQujprMuvooA+Hzj6miguU3xwmq8ABhUJ3PJTmyc6iLkUpQyP2EGKBHbHL6FJh0vvNusWLOZJb19xZO9iMoXQzJB9J3Mwcql2M/6aNovG3VW/IjzxuFkQDftKmCXnbT9N6/wc3QR4PeNpjYGbRYdrDwMrAwmrMcpaBgWEWhGY6yxDEFAbkM3AwwAE7AxLwcHHOZ1BgUPjNwjrr7yygpBuThgIDw2SQHPNz1lYgpcDADABE3wyjAAB42mNgYGBmgGAZBkYGEHgD5DGC+SwMF4C0AYMCkCXAEM9Qx7CcYR3DRobtDLsZ/jMGM1YocCmIKEgpyCkoKagp6CtYKcQrrFFUUv3zm+X/f6BOBYZEhgUMKxk2MGxl2MWwnzEIqINBQUBBQkEGqsMSroPx////j/8/+n/w/4H/+//v+b/r//b/qf8dH+x6sPXBpgcbH6x7sPrB4gezHpQ90Lq/9dYd1htQ15IEGNkY4NoYmYAEE7oCYFCwsLKxc3BycfPw8vELCAoJi4iKiUtISknLyMrJKygqKauoqqlraGpp6+jq6RsYGhmbmJqZW1haWdvY2tk7ODoxOLu4url7eHp5+/j6+QcEBgWHhIaFR0RGRcfExsUnMFTX1DV09E6eMX3m7Flz5i2Yv3DRksVLl61YtXL12jUbN2zazJCfnJJxoWhaXuZ1oINq+xkKGBjSCsGuyyphmLu+LCkHxM4uvZhYXtWzfceJk2fPnTq9jmHbToZrl6/cvMVQfOY8Q2VjRVN9S2tbc1c3Q+fESROQvAgAMfSLyAAAAAPnBYMA4wCwALkAwQDJAM8A0wDZAN0A6QDwAPUA/gC/AMkAzwDpAPMA+AD+AQQBCAEMALsAvQDlAKkARAUReNpdUbtOW0EQ3Q0PA4HE2CA52hSzmZDGe6EFCcTVjWJkO4XlCGk3cpGLcQEfQIFEDdqvGaChpEibBiEXSHxCPiESM2uIojQ7O7NzzpkzS8qRqnfpa89T5ySQwt0GzTb9Tki1swD3pOvrjYy0gwdabGb0ynX7/gsGm9GUO2oA5T1vKQ8ZTTuBWrSn/tH8Cob7/B/zOxi0NNP01DoJ6SEE5ptxS4PvGc26yw/6gtXhYjAwpJim4i4/plL+tzTnasuwtZHRvIMzEfnJNEBTa20Emv7UIdXzcRRLkMumsTaYmLL+JBPBhcl0VVO1zPjawV2ys+hggyrNgQfYw1Z5DB4ODyYU0rckyiwNEfZiq8QIEZMcCjnl3Mn+pED5SBLGvElKO+OGtQbGkdfAoDZPs/88m01tbx3C+FkcwXe/GUs6+MiG2hgRYjtiKYAJREJGVfmGGs+9LAbkUvvPQJSA5fGPf50ItO7YRDyXtXUOMVYIen7b3PLLirtWuc6LQndvqmqo0inN+17OvscDnh4Lw0FjwZvP+/5Kgfo8LK40aA4EQ3o3ev+iteqIq7wXPrIn07+xWgAAAAABAAH//wAPeNrFvQl4FFXWN163qnpf0tVr9nSns9JJmnRnIYSERYSwIyICsoOAyCIim4iCGlkEEXFF3JBRhpfRqk6jgIoIOm6DjqLM66jj6zgj9sg46jiImBTfOfdWdxoIyvt9/+f5i91dvaTqnnPPPfd31uJ4rj/H8TN0V3ACZ+CqFMKFe8UMYv4/I4pe90mvmMDDIacI+LEOP44Z9AXtvWIEP49KAak4IAX68361iDyoztZdcfq/+otHODglt5HjyIO6bfS8/bkYfBZSiD0RE3kuRGRjWOaOyWJEEbIS+JB1kTa9wBlDisGRkA1hRe9IKCYS4hSRSE5Z39C9Gq8mRIXgRmJRv8vdR4zqKd22dgdea7gwjV+qa6XX6sXB4LiQrIvGOTtnFENwFfqJ9la7tiI4E7LggNPDJZ3sWt2rXVKU/ht+ZNMROGew41N8UHpu4Thdi24rl8MVkMlcLBvoiXm8WdFoNGaAs8eMFise6wjQqbdFo4ooJtoER35BkS8ii464SeTKYTDmSJwj2TpbqI2XcvOKfFGFExOKOycSiWeyX/giRPaH5exjShawIsuhGGCIRkciZjCaQ219DKIp1OY1GoBVHvjQ48UPPU5TSDY6FAv81AqcC5CQXJe9v/nZf3s4T8i8v/mJ79/DAznb0cZnG1yhNoE+6/EZrtFmyjLCgdfRZvZa4MDjaLN5rPADB32W6LMbn/E3Pvob+KtM+ldwzpzkeXKT58nD37TlJ39ZgJ8LfRy8oDeZbQ7J7cvMyc3LL6g65z+5TzZOQ23AFYRHVIjiwxOgj6ArCI/6qCt4C7HXfU+8kw9OOT3h4KR/qN/Vfq8mJhyYcHr8y+P/drr2NHl0N9HHyf3qELJHnbZbPR1X55C4OpR+zhGu4IxZDOhXcGFuMxfrBjMpV8J8CYlYNxG52a0CuOmDKQjHXXbOjDLTPSzbjyl5GQk5z6FUAHeliBKSErIrIoccih7YXpqRUKrhNc8O8koalFCF5IyZxeyGhgZZLym+QngtdcreBk7xiZITpMCeV1rka5CzJfhQdjkVyd0AYu6qzyfRSG1Nla62pq6+Nurx+gxVJFio97jzDR633uAJ1laRgv/YHlt+YsiyzZuXDdm38Y0v5x4pWtoydHZ4+MyFC2cODx9/9o0nvySraxfccLBudGNDy/i7J9z9WsFXXxQfXn5J/9F9y/p1r6isGXjlzUOf/dLz5T/yjnA6ruXMCV1c9wzn5gq4INeD68c9xMWiyBt/VOklJmJ6kHIlX0zE+5VH9baQ0g8OMx30MFNMEPmSsEyOKV6QWa9DyQFOWODQ4lCK4LAnHPZ0KL3hsArEsz+85niBPw69H/ljkeRgg9KzCDgXaJB7S7HyKLALONWvl+RUqooaGpT8TPg54SwNyCNnTbMQjeTzHredDxZW8XVubzRSV1tTEiwUSNREapr5tK+F1NeFLY6yXjOaB17XrzDQd/6lvWc2lz9eX13R0FDVvULwHW1PkGdyGxcNG7iwbyDQh37fzSE3REL1PSaIRaOvmDCgsmn6Db0ar5/eq3LAhFfXT5x8Sf8Jp1XdodPNZELd/Ln9m2csbup1w4zmqoETxyy8a/L0SwdMAt0hcLVn4rpq3f1cKVfNNXFLuVgQtWE3YyJmQaY2moB9zWHZcEyJuBJtZRFc3JwrIXNhpQxeIg6lB3DM7kpQDkbKgE+6BrmHFLcEu1W6UYjszjZPVqACDjmlWxCYVhAAvjZKeziDPb+yFj4HyQK21JfU1jSDfHmBN4LB10x6E5/bTgw+Q6k+AJysd0cj9cQuuNxe+JJyVF/bcsNV4acWKbMe+nNZ/fD6/NdtLkH4xhkNfB0//Lz60/jHbh164rPfXa/+KzhkWOTxkd0uuWF0z4ETyPhBd82/JPe/Hp716LBXNldfPWRIyP2xf2JBfqZhunKJevdHO0Jj7hm7bQFpyuw1dCT/TuVtVeGVNbWDL4X12SLcQty67cC5AAdMiBNNc4tMc0sJ+tClVHbLH4RbmKIm3AS1li/Xc5yNc3FEttO/gD1FyWC/djjro3pecjh9wRJ+wuqFH6+7bdX6Dxes4XNILu/e85Gaqf5ZfU8t+/QhfiiH5xsO58tJP5/lmCJ2ni/qdUoO3hCsw5fhH8+/fe38D9fe2qrnnu34t/qR+lPHnvs/Jl+SIPHxPD1fudCPPwJ7lZ2r5GB7hX3JyrYpM+j9DBxu3JDFGcSQ4sDtT7DCZFuoXvCVRg31PpwqQ2l9edN7uYdy/9jrb48+On/BI4+IM3eOevPNUTvzH5/5xz/OfByus5CbI+4Xl3IWbhTyUDZEFaLDfTbGEVRynNkUggWFh0QwAXOtYdl8TOYjigkWK+yZJjN+ZzLAz8wmPDRzppBiY2TXBoDtAU9ACkoLyRv7yBtqj328ex/ZpY7Zp44huzhKa9OZArKfGGEe/cl5NKXmMc5ncRYgk02jzxUQmq4mmR9/ThKqD/52K+/mP+ePwN8W4t/i4PGBf6xwJBQXGJN0yfF4tvIDYQT78Lqj4WkwvW55GvJIHqTkyJOgD3YK3PZHn0RUQcd+5jN1lPCu7gScgwOdQgKC7Yv2H9RRhq2nZlI8UH7mhLgF8E0WV4X4xo0nL7AlYkZc0eV4lTC9SrYnATsk1YJ2X0LpDq9F2bBA3UZUcOUFcMjZG9jy1IHWEnBlotaqd+eDFmvmYSsALWYXyqXSnldd99C4hS/fNjHU7apV++ff/NYtowtPF7XcMmrYskuDRQNuGtHnmoHdPfzhS9bes3rxFdVX3PXSu3OvfeeFjaMn3/fagSnjnto8dvw9T1857qm7xvScfMsaNkf1QMwckEczV8PFTIhqUNGDkCCz9ECGJSybjoHcKEZPImaiGMSEkmDVOA+qtYlEQRDqdw+87F8/ifpXhg8qPb1C1LPzF3CcOFz3IMzidG0u/LDRZiKXbAKcPhiWXccUJ3DJyfBLTkYilmPBy+QUguxZcvDQgldEHlqcwLBMP/LOz9GdVrZJbRanK4fquGhtpFlXD7oeOMYbSulGIHrcvEFvCHgKSEnTyClTr6n4/EjTxPpc/lT/G/fPe5OIz21cexO/8c3M0rpLh4yv+HTXR9Fxs5sc0/dtHnviwCb1oztuHfJ3Rosb5rwSMGAF9zAXK0daRCsMFmlxWRNxq6U8B3ZDK5JVSSefuBMycche/zFAAHDsCyte+hEFdUVwWOSQC/BbBxw7wkqBOxFzFCDFDgtQXAW/csBG2SbmlJUDgUqBAWguBOItIgoOASVvleADwA8xr6+ggSGI5H4XIrXJfVGPzADFn08QQ3hB6fOg7t3fP75i2fZ7lmzaNHb6kqsmLSHf3vz2TcveXt2350HDFfe88MGL91xBDmQsal004+q5n185YviEeROk1Yemjmtbetk9Ndf+a+7uOT0ar9tD14MZ5nkRlSMbN0WTJJ7CbouJtwEKB6RrTcj6CFWiIFFWKlGyEIkZqXox6mG20+QrA2GvCcjlkVxtrnlJtiGJtSBxUU8QpA4MEDMf+/Cvf/1J3UtayNAtwlPtzxxX42TocXIE5mwkzNloGFchN5yL+XHO9CB/Es6ZG+bMZ/VLMGc+TRRNx5RcWKUoablwbcXpQkmz6ilgy3Dk4l7rk2QPA2pCGnddoA2FOg12AF4rGvm1paz39Obr7t2wbMDtJX9fJzg7no9ee93U2OphG/515wvq38jWvjXjRlQ9fe28Bwb26skfT6g/9hh++57ptx9f/yNHeToDxo5r08nlcpdzsQwcvRd0DN02dDkZAoxcZ4aR51FpcwM73Q4lCwZvBr2WD69ZboBNQoYOUZZZkkUgBoGXwpmZyqknAU0oKFQiDCohSTOGkp0kqL6bv+HrO4evOTRvwz/XnXp0/rxHH503nxxdfx2/Vw0v//MdU/esvezW//nPB/c/8P4D2hoBOXDAmPXA8ZgOpQCNL5x7gnadETc1grMpNDC9DSNwC+0dd6nH+bHio8dXn24XHwWtC3hUnABrLQ9QU5S7nYtlIfUBmDsznq8a5i5UkmUGDoSQAzWUAwXAAR0upzI4KGBa1w2gvQo/s7sTSi18UKCjV1eqAEe1ZQVKzLiw7Ag+JWBPSQCVMwf8CkmKJMBrtVOx6xi76ih+4pPLKMU3vpNvQicW1bfMndI65ObtY5e+tXpA7xnXXHnvvtmz9m4Z8+MjNyzZ+sDyG4ctmDR+0aIJVywhW69/vuG63427b3LN2LYll99X27jn+jk7Z9XWzdr5P+/ccMM715ONl0+fOOyyieOYXAAsFxuANy7gDsiFHbmsQ67k2hJxh88O5qXiQK7kU654gBkeh5KtyUUBvHpwBuxofMRsugyKtXN9QLiZ07YiDUAbYHbOlosoCsM1B9ZfNkQdq35KqgtAPk49Mm/+Y4/NnyfsAnkYNey2+IwN8ztayHvL//z9B/ff/8H9OOYWEI5Rwn5qo1d27sq4netwt+z0CGSilsAXzShHw5/Ao4WY1ZPEjFs0H9M2ap5hDO28RVz66UQAfuwkigG1JYHJZEjDgqejaONSYqaAQ9jCTki4Bu5Bcbm4GywizkV8JmJoED6a1TGUj8/it/PmmLpT3RnD67aS1cJh4QC9bjZDKEZGjZFePulRQAmHR6vQ3H5IaCar332XLHjnHbZWxsO1tmrXMpF6ExnPxzuGzhI+ai8F/DKWjI11nOw4yeYc+Ce8AnPuByrnc7EA8q/QznSBkmdIxPIEVJ15HGK5YjrvfmdC9jvQGaAUZSbapKIA2BUOJ246VBjQ71GCO4wEwpDXIBdJMtqjTtkK4pBXCCwzOJJyz3SELo8EYQHomHh7XDgrJ9646a1bShoHDWosebe4ceDAxuKV1y6dP4OYhc/+mODH7bt5yJJBPUqCFbmbNl8yo2dlSWhA9ylTly9tDySxFug5dYfhFsAIA7kxpJpjolyvS8SKAITIxdGYH8HIKH1C7h9WesOLN6wM0SfaKoZ4gSDJAPy+khqfjYBcGxltLXDY4lBGgqk+IhIvd3A2gNhlEbncoUSYbaqM1ZwkN38fQd+IKJdV6eTig3ZleM5POrno4P7mOd8dg28sbcHhRS74a0dbSVmxK9RWis+iPNzRNgK/iMHX/vX+9UE9mP4NMfgWXuSSBm5PsKS0bPgI5tkge4JFxSWlw1N+DqKMbJGcz7t0Xn9dfe/+uLOUS0rffqBxIkwV9e4P89KvQZYkuW+DMqQCJqTcDV+Pkp7jSLYl0rORYh6nw1lXBDAnnzgZdiwp1eOaraVWstcHBo8ZJg8WcLNQW8OXFPlFPe9wekUw9Xzwy6ISQr/kGWqacfcP5LJ99xHvZzuvCgye9+SMhZuNN/927sMDS0ddv2PSsPXFrledo6urQ72m9Q65Fr2inlT/op58ZdGiV4h58/VL+2/etk995t/k75dfMXT1iIqd+ESuJbPJoH9tvOrpT9V/3nPlzseXDbp99uJFz84a/bsnVw1r6T1movqsenpBt4qa0fMXNtxF9C8tXPCiqqpfqh0vXFf6XO1d/yIbr7r6stUPDj0wcvUDDGuAPd0KK88MWIzqElmIMi+f3sgRUH96M4WuFKXCygRGmhEeUiQfEMDYMPO1L/NR9Zt5HR/Pf5Usf1HXenoFiapHeCsaagK3FXTsRriGC/beohR2dcPui6hGKRIS8bxcDpCNkoeXYisO95q8CG7CmYj3Qe/6cecxuthCM2ZSYw50rZup3zwJ3spFTtnIHJwU/qf2leIA20gCtYEIRXNbSeKSm5eOrZ3Yd8ptQ1f95ir1T6RyxpxlU9W/EPHQssn/0rVm9Rxz+6ir7g2WvHnt5Edn1n8/bdrweR/vHjlW0zdnTugWgs0SQKyfl0QT1LFjtQERhXQVSRkJJYhsswJS2MMRkzkrmwkaFSjRZ+ADICceap/UgQiJuAOOr5n32F/XfkD6jvlmsPr2vKevjkZn7lyw4YUeJ0arL32w9ovH5vPDTny4b+2w916bRPght//26rnK2iEr7pzy2vvD1uxlegB4rnMCz42cxPXgYkYcocmqcVxCBOGkbDYBm00OtEUVHQzWhYOVTNQrQtkIloGDC5RGI0XAtkBwK3mIzCTL1VvVRx5afZLoPlfbH9C1qhvUp9W4em/i0472Txl/cM4HwPUtoInYfJuAPxS/ANCPG3VUtIw4EGtqIGgqUzPaBIgd7GdmM2uGMjOS2WOrsLtjFL+lYx7/jK41oT6cULd/23nd2+C6Jq4Pu27X1zR3cU0w3bULWs654FYh0eHBy7GLdcQ6ZWANyEAJdyMXK8BrFSKhAICZINgsiXhObiG69XJwJyulMuHMoPYZQod8KREryMeLF+TAZcsQUYFR1mbWZxeiEsuXZBM6OcGylf0NSm4Owk1nA9ppMZClNAeeyDybnaIEgi4FmSNqfHT+o1+sPUr6jPlr9yMb5u5Ecfrt/K0fe9WX+fo3vY+oP58tUhvWX7bh2avn7rlrxMHHj3SIr3/MhIryVsfROe2taQpDNBUhMAuUu+bOGbUAoXwE/ZaAVBGOGEDAbCkPAbo9gvC8VeXnqGrH/brWjhg//PQKfniSv1tp3KOV+q465zLlc4Cz4aPT57BVRc3D/tZ85oTwGvytG1GdlLQvKd414RA9zKj0pCxIK9jKBisNC5hgLrzwEcXW7gbZINE9xJS0E5Oe5bpaCdms4X3zaeN11946qeNrwVW74MWbNxy7nuzNW7hx4/389kT78htevGfkLe+k6NLJlI/dz+GjGD2beZRddByKYGpoYGSSgAn/R8a9SkZ3vMQXqe+p49VPgIEF/Ocde9sP81vUT9TNyWsJP8C1dEntrgjaOiSyPsnHmEBXgKADwg2dE+SBK0zQtf58befa0kfhXFaunzZufdq4bfRsVjC+rYyjejAS7IiNrDB8XkRgzCgxMkqQDJAAEgRSyBiyhCwlY35Qt/9HfULX2u4S/nl6hVjQPkHY8fPn2rr+mK7rrq6tLWc31WWCdm30gAhoefKG864dJSh9cOF2/rIf1A6Yjfag8OnpFcKn7UGqP8HW1e2gdkEpN5iLOZBzWcmFHUQTt4yuZncWNRTzEAhlJZRyDFvAjtSmz3DoqAs5mAXviNnCpfS+P18AbOGv4l2wVplXSii0CyNxmRLHF4/Oj+KR+i0cfVQ5eccnOyZX5vSedJd816TeOfzwf3y4b82wYWv2fZg8IINnP3vXZZfd9ezsUZtXTairm7BqM9P/Ygv1ITiTHGO63wl2jclCd1sTblQuyjoziJslIpsd1FeAO4EbJc9p6dwJ0PkjhkgWFfwa3EH3/4V41a8/O3Bg1bJTB3Stfzn0yn93xIWGMWPaOI2H63RfAA99XAjwecyFPMxL7pLlePEKysOsDBqcoz4puHIlgmzkml4nuVANWsDgdOAU5rlgCjOkBoR3bYSzW9J5irs9+t5xB3VSLVhfWu+rQ59foZ2kcbflkrd2vLXts7Vw/HZkxs75i0a/suPFAXD0yc4ZGn+Hr9n/4eK1P008uPXt2chi5Z3da4eVy/c/c/NvZ+1eO3ToWrbHnlHFV3S3cXag8CouZkGp5KKMzbAJxDNsFmRzBur+TMpmO1CaEZHtDtxoFT0Qix4GF4BdxWqi0S2KaTJswHYTdY9guNaHaIZayWhCSq4oDSfgDLxxxydrH7qJrFc/U3fs5j+7+vpVc9/ida1TXr7l1sOhjnX8pI7tQqU4beSVs6m//My3YjXMRxV3NYvVUZ3oxuHmCIm2zG5uY4j6WqVjSr4vIeezdVyi+VrzJeY4Mkh7RKs7s7Abzk2JU0Ypz2RxOCm/BD/MQeunU0vWVBlqa+oQP6fCbzrm2aniy9utjy1ZuCwZbVPjG/864GjR8ktbZrOIXOtf1k6O3TubbOqzaPWMyaV9u1dW1QwYvazlt++vWLm6ZcRVfSpb6noMmfzA5FWvXV0zYzvT/SD7Kymm7cnF9J1+EwFdZNSe1R9DGY/p9Kj2dLDxx/Q6PNSjt6zT2kT1ZBYXqQNUcfsXX/w8SWTnX3rmhChTPFuv7S16O9OpshWUkTupVjEojkoIZl3xoHALzDHCIi2aoQBHALD83FL1pu2jF/bJVtUf1RPqP9Uf+VJhUvvLz/2uatLN44S+7bvVr9U/kkqNPorZ9bgvUvo4nsL2TrcQp6fePrgSalkSNMO6XUlWEG/HkZdB14F00o2Snsuwm+r0VVzMihJsjNLTxYjeEI2m9DrJpDslhmfRE2BnBt+hO76ppcFwziFbD9rRQcsf3N90I/vULusdsu6gTjY4ZONBgVN4HRhvbbzOaE0GqBUONweBudBgqFE6WhMO2EgqSc9XSU94MapjT6pH1CMnYTP6Vriv/VrRAap6ebvmd0d+ZNH9tETbG4xsFQIuwf2U7aI86n+RXilq0vZQ+N9MPlLLSRg2oDGku1pG/qz+UX1K3cUf5g91fMYHOpo7mvisjuPJ67RSTA37tuEsvptoyBEXtBkXtkHztXKGs6YBxYmEyL1kMwl1HAa00tHKr2jf3vERX6rFD8RddI+r0vZqg8CyPBSBgVaKTBUD8+AqopDM56glAer+89QLno5McUD7t4JDFk4k9rZnav72XepQfjzIioGrpR4WnUg9LERM+oswVGYWEXUrOimRfCdEUukcAU9Qinp2Efnrr9Whhvj2n+7ZcU5sJ0qCgb8J1i90JzCwA+sErllKr9nMoWRycE0hjNkc9JqGY3D6uJ5dSO9QiAQiBmvTkby4IeX5gb0agFZg6ddfE1kdqX6rn7/9FIspPiUUC+26jzS/T9BCniK7yO7v9+8VitEBRCrVo/R3LWdahK00gpydxEE6FseiYTANRMKSbxFGtT+zl+r3oYAhjwqnuExYZ7ewlR7z4J/mGhMxKzpSdKZEnPd7rKDleZFZfZ1xKkD4yL8MF+h8hyI5ErIURmtQyUZJNKK+L5BiOqsHPcowk060ZiV6IPslmWtQdLz2Q4y2lpMa6h1nMWcA9/Y0d2J9sHAomGbiOwNX+PePeHv9m8dfzm5++Jopv5l1etyA2Q8J/xkJclf+7siGNdfO/Z/9Hds3jR809N7NM3pvmET3sRPiJJA7CezzaRpWQEeo4hGYWmOpONmWlHsc7VreGYnIEjPPkz7yTBh+m87uyabQh3pGHegZVcxIrY55qhFbUu8+Bc6lHubmdaAbbGv7jP3Td1zTs+c1O6a/OM22fPGSFSuWLF4OC0VdfsXdL/zxhbuvWDaD/HD7k08S49NPsXk9IXwEcxTgokk7HFEaScbE2Iw4PZodbgM7PA72nmaGuzS/TqfxRKgdzvamluLhCx6fvOWLnsfdc4Y0TajLqZh32eBr3Z9GPr1vyUuLmsj3I+9rndZz25rxLSPCo67uOfLmyy8bMHrDtiu3PK/5GYGvRo2vsxk+6OSr8Ty+kvTYnWyIpLiKgbokV2WzpPgyEQx5EJtZKXdp8Aq4a2BoCKCPD+FtLfVduTrZ28L4eurU9BeAyy+tWLwE/lu8gmxAxi7n+dMrZiy74m4SvP3JJ4j1NzsZDT+IYEFwBVwxWn051HOT5HDQmIj7pRw0cP0o/iVhpRS57AZDVc6k3jYYsR+sJmtDitsUqWWQwFmsLg7Q8VGGz3lqdv8ckec7RlmXzxlzXc3OK95etfzQ8t6EJ7/PemfKAvIN5XvjlLWbRrlLTKbJ80trt1x12eUb4384ej3KRBYM/DXAOR5Ene5kHFaxWBKxDHSDkigA24TMARbwhmU3jdS7YLu2R2IuN8IAlwSIwO3CQzciAh8SZclgoAwwmpHGW6IU1PgMOPI8wkJoWXv3rZ1w5chAZag6kWgXzB+v3fBE+ZvuqpLVn7afFMwc1UD91FoxT1zAdePquL7c+xwdldIb9JGTemnDSpUhIdeElQIYZVZY6Ymx435h2XpMqQcTx+g/JmEMMM8FUpRH430wSLneoTSBsHhdmDUkF6KzrNqZkKvDSqEzoVyChokV86h0IdQ39ZKSUwevTc49WQXFVRk1KFvVkuJHdO11Kk43ylhNFfwFF8IMItBVig7/IgtUUh689pTknAa5N5zRa8XvM6SY5HJTn4SvBhBqPbpNMciDTKr3Gbww7bDcAf3pKJilgXkNIAILS12puIi+n9m8tLF5Ttk/fjfuqt1339/rH7sXTygmWcff/fz7fqvWzuz7lnnX4jUrFt68qZ9z3IjhY8cNGzFugb8+j1SGbo5cO3/QxCd+X/z4vplXzf/N6+Gy/BECf/fTv3nMVT105ZA+I+oaa8NWftfQKVMenHm1ZlcWUD+B5qeSLdE0neewpXwFGBLkqUPSimsS1ib6CKxuaiFxis4hnaPeQEdLLKIpbf1p5hOzHh4bOjVw3Nh1LlBnp1YPvuX+Kzqe45tmzJs9tOMpqi/uBOG9E+wJjIOAtS6mI1c6HC0WA5KrGNzUP9CJVQW47J2EO/W9uP3zz3+eJBxvx2VwRlYH03M6gMJeXMxJ3X+AVg0oabawIgiMQP0xzMMzeTAPDwnjFAGNEI56PwiQJdTTYBwCV1yyJaV40ZHN9ZVB78nGtTOKr8g8TDh1zlF7UUSc9rMy5Z4JDqM+dPKkxuN5FJ9FzvZ3xERKlObxcHd6PMQuPB4E2Phvspw0q+vI42DwfLwVgOxh8pi6smMbeXeX+jHzUZw5wQfotbQcDIzqav4Odh3BnfJ3aM5FReDo0gZO1iN90XoPSGfJ1n+PaZ45eObC18UDP7deoj/inqz5QKYJp7ki1OgUR0hZUaCGoJYhVHwwK0P2RJKO7CJKVzJQlOWhtq4TDiUPc2VnF1EYJ2ehYpGdzK1N/OneCg9u+j6adMDECq0ofMV8Fjja+p/wbQOen90gT510z5iKU09Mvv5URmHfqsnXC8dn92ncOnj4gGWbL+vYyTf85c5ZHR/zTd2HNAfwqNNnGoQ91JNaA1aNIroGJBQRbyr8CbR4mMPYCgSAalRsHm0NEKlzDXjqqKpPrgEY44/z4kNXju6ZDYtgxv3C8RtawyOuXdoHRzXrhnsma7nBTbBnjoL9xgKjGczFzMjhDFOCSoriNrGRwE5pzaR+JkmzR3AYkhWzO0xmgYIPdwb6XfQGze/iaCb+fOKwE38JKBo/6hy/vum270jVd7fe+p36/nd3rCLiqlVq+yoynWR/vWHD1+qX8EyW3bF79x2tu3dTe18dLI4X2mE/z8O8jE6IlGJVjhkzDZPBYpzgc1FSQRpKymEoyc5QUo6GkogWz9dYqKEkKT0YvvXHGS8kYdJL06zLliy+8cbFS5apg3WPzEjhpI4vhV2t25+8vXXn08hXdbDQTseew81MG7uRpMEQ2QJjz70AEslLQyJZZyMR+9lIxHgWEqlFN+9ZSKRQ38RGfvLk9BeBjgMARBYv+UcSh8w4PZ3PPhuHMD/mYOEkZ+cakr7g1MipzzmDOVhcVInQfD8zrmpYUURSBENDp1SyHRsE8p9TN626fEHpwKtvE47fcle/Nwr3rlGrqZ/khDAKrhXiXtRykwRDIubCS2XpmdfKfkzJhUvlMosYl7g3go4rNIq/CR66k5m/ZrR7lfzcn2T/QXjTZjJjSne+o60g3+8KxeA5LdgJX8ILt8doMucX+JORzvR3NNKZy5KiAYa0Ca4szGTCoBcKUpZAY0x2r6+IgVumsWn6M86EVyOceV9AqErKDzc/MPzy+nHXzhlX3zzr5ktvfbnumUtvbRzQY/zcueN79F+4ZtBDfyfimB2DqgqrcnLKel4zcOiyluIVUyYvryjKD+XlVfW5bsjltw8ve1zLTwPd+4xuI+flJsJOg3yzmJn9SicLrHGFAyEzgGr0hWUPy5B0sRCMJ5khKWdEYh6axeRB6JVJoZeTLRFOkjM06FVPAzNuILA3odq6Vip4Cgarts8rGuJ2j5yx5SnB/OmpZ9Txn6q2UZLR9Gn+Y+vISTrO1WcSolU4zvSdDWWJOXGsbCnL5mhS3wke6sQBZSebIp36TvPjKHobjT12+nPo/hisZZh2NSi6q+8/dar2gdGT77kyRLbxQzpemblw0yS+vD1r8aUDB698MOW/EHkYT5o/h1zYn5PD/Dnm738gRnX2G8LxjtH8btjsMebRrovBeazcJrb3IZbBU8UEUZ/uy/F1+nJ8KV9O06X/XE19OUKVXeYPKmbDTzrZcnD/oX3/XE8/N1XBfBpl80G7osPvxIMCF+N1ZpTT53hB1JnMls7aAzg9Gq9WmiiCo47SgVtw7OKul957cTdM1tsfv/bqJ0DBXfz1HXfz17Vn8Zs65iV5Avrq+Dk+HfLLPp0cChQsxEzGqLvA3H2XhNSdZKz6IRydIv9SnyeDVEk1kpGqTK+hjhIL4BoGwEadLO/MNwm4YMQBl5nYfiYcsXW8qp7cC4MdzD93+lryZionU9gE50jz2Ri13UqwXJzPpoAv7vhRGN3xNz53Oz/702c67n+XnbtV5fhWkIdyQG5yQVjJFhMwg3GDyPXB1N9uYbmIpvn4AOY7IkoI5tNXRENWYOhiYqyuiJpdtYDGJUcjifg8TPNh2qKHCiwgnRApLIXVA1Ci9dLmk9H8uqbyUN7gSzZW1udV1vlblvQv9lYGyYpnsocO4M0kID5lz8zruH/s4soRq9RLho0yPyUuaryTvJwd8jupn4kjk3QqYFgfl4rUORL00Zllviuucgb1FH82nWXoJwIbkgc6M8Jxt0ZneVjWHZMtESXgpGq2G9AZ0FHdzikZPFgodm+ApWuyJViDpgfAjkJDbR1QnUXcXp/HDljEbaDUtlbm1VfedcmQvNFNdfnRk82X5gUrvcX9l7T469Rd5lHDyEurRlQuHsvPycu0PyWqn3WcHDA0+xmr0x/KVvve2bhIRL8DWSEs5u8EXTeYk12Ao0UMoMRcNHPIBZqrzSi4jCHFjnaxjzrYvA5utIgVPanaIgQFFswhFOxsmdTQHR+JiDpQheBstSydO2hZU5/Mbpmx032u69M/u9RN7r9peUFRQUmdetJf4i+ogP0dAAp5TqsR63uW7WBPsx1SaWE0NcyQLBTTORKyrrNQjHr7JMEVde0mZjVvb564hZjUH3+eJ3zb7gDaB5+JCh+KMlfITeVkfzjus2P2OYqmSI9o+idiCBfFEH7mByvAi0RolKcAwa3Nh9jBh4f5ARrT3kM4kzkbUZEsAk/0DSwjByt38sm5AW6fnWD9Tsngw3vjK3/T86OcWeP6TOmRm9Njap/xM3PeDu9YEd9HupPbSWHh3r2eu1eNnjyubuLCvv0WTqy7auLI1Zu9+/YVAi21NF/gKVi967T1W2EE7RhBYyEYVWzwJhBhFUyKy8hS0Q3HlBIpESsx4FyXVGHaQEkQnvNKsNrEIdH04zz4hYNa5w7cxzCAYgATUbHAVGOySgWNnQSQBbCLKA40qWn9EqqGZhGAXpgEa6Ml50ROvAWgMQJYc8JnwFGtOXBF31qzTveX3UV/e2vzh+EDBde1zF3isVjIX9TLbNklxTabYH9XdNT1HF+V3dflOjKpVf6HvGbA5ROvmV2/IDfvSGO/Xlf3LDMajlCf1ZnjXFR8UHwKUGKQW8wxRRY0M0+p7AwrBZihUxSWs46h/wFLuDAnzuJKKMXoYcgCCMK7icdHZzEgKU4Ri5Kce/QGky3DQQEvTXGwO9xe/ElQajPZfNqcU8eKUO/r9BhoET0s0wBO1HvdXnQRFGa9vmPWzTfNjb3+Va/mr16Pzbrl5qu3vPlmc/OTNxy44YYDQuKl5/pesvPljVNvWDJ910uv9+/3+ku7ZixdMvW6d1aufOcmWpPw9zPf6txgJ3q5G7SsT82XH3dIds4G+31UcehwTcfdHvoBoBe3LoVe7MdkJxiroJGMkZjNjvNsw6QVfSRmt+E7uwPeuSN0jdvsyXiAR9vGBdiuoiTqCdB/wdoA/RfNOU0eJY/+pJZ+qH4Ie9eH77GXD3WtHdP4RzuCex/du2vX3kf3azk+6hEyTXeYrvk8Ln2BSzTv0yClF2Oig2DrG2+8oR7h/9RRLtr5rzoy2XnsZ74Rpui2cnXcEHITF6uhkUGDVlmQb0i05dZkYmRwaFh2HEOa6p10VdTT+KDcL6JUwQfdIsowhiS+N72iAeDBDnnAQSWY95NccnD/t+++8gEFElaHbDqoNIo/yb0Pwps2s9XkCrVZ8FkOOtqKgiXwthif5UZHW6/G3vC2iT434zOctW3g4AHwtoU+D8LnGPxVJ5iWixti8BM8ammQBzXE4CRp3zY1yM0NMbggvjE3cH2cvQcDeLFiWmFjr6bmAQNbBlWd9x+5uJ9RlF6PS51gqo5BahMzc6l7rcqp5FTQ/GARVgBHnFUsySfmztH2r1TAVM9cZ9TXn4Lt8DB4tbxEF6B4WlZWpSvV2w/nLJ8xaW509Nzr5o6Ojhm9aNeUu/9U/lr5jmHTtc9Gjuw+4tqFvbZ//Y6rsmhI0ZWWylJXt/L+VcOlUaS4cfzwHgPzy1xed2Xv+YOuGzdk4bR7+j+4rvbOfr1ziySPOwww/4bLB1/f79qB3T2P8sM8wTy3x+wSpJ4RX2mex2VxiKUczTN/V79A9xzYmAVcIzePQ/+SF5ZMj7BSrU+A2aQUw0teWBGx+KgXxQYu2BVcTImE4TDMvCQm2InQmZkdlpzP27xiXnFZbQ+qPCqqJWcfm9HkdGVl+wNlXHlNsiLPiYmbXqeDxyS6ohIedg4xGimCD4qChaIzaQJRPcpiJsz3TFqOkjl/epwEj65ceVT99PEn1E/eX3lgO3E//hhxP/mkeuKxx9UTvSOTHph88381PFN4Wd+rZ06/esAIv9zzv1ZOenASf/gdctVbS99Sv1L/oH711rJlb5FMUq2+r55++GGiJ1VEv3Wraow9smLgjTcOHtCw/i/rGvsPXrm8ZYUWI+Bf42WaIxHgVoI1gnmXAPDsIpiHoHvjAjsmqH494XgOfauFNeKZDtDWITmTphPAwo9LNDmXBpkyERpjjpjsktoMNk8+ZV8OKCBFclF3LkaYDIL2Kwo+GglyJy3EhIZVfTLApG95aOVhYdDI2YOX9t4wbf0jreLYu2dufqwlNPR6075elwqPL5g7dMickWOGblutjhk9bfm0QPXVl1QBjSu4bcJmYRqnAzTPuYjH4PMI9HkF2R2P98MnopIZRzdvOkqmsVeKCxeQoBgU8uDvurOscNyHWMWdaGL5SyKgSxfgbQq7RC6Vv4RVdUFpgRD/B9//I1VPArSGjrQLbj5Osem5dXCdxW9N/J9I+969nAjy/B7I816Q5yBXzfXktnKxEtwPe1IcrvjgpXtYiYiJWPcIXr97Eaj8yghAIhbjbGSxJwdFQYh7quEwEpGrHUodvCuHd+UOJVeT917wWgfSHbf5/GJYy2GuqIKpynXKlTB33X0sABGR2py5FejXknuChVXe0KX4d9a8UfnniRTAUlW9AUu/JSFZ1dSV8Men7vj8xuWfPzl1h/rV9ifV4zvIaNJ33b0jmn9/dPcU85be3av6buFfO1/sty768OGJEx/+cNFWYtq2Tf2x45DQcMeyKxflgDHWqL5GEiUVlUGQhwnCSB7zggxcBnclq9xUMoCLFmSuQWRggxa8EEBSgCTjJgfXDILOElXjOvqO+v5soMLbBL2Bp9KdYUGtK7K0yDq/16338xpimHCAWF96Sf0he9LtEyfeLrR/v3v397vJVXOHDJk7BNfhwjMtWo1nBqBamgmhZOgSF1Xu6bhguadsi6RVfGKdlnRe0SfiuVThp9pTvPTnF9LLPztO7EXZXaGeFL4HO9PFTWKjYylpOhOgTF0SZTL3hYnloBC6NBQXa85gBQVhjFCghqkogovFma2S7MDgBWZh2JwNSVfGWZ6MUmHFF7uueeRvf4veffnYAU71pPhdxwtfPjiTr2zPmlZ3SYH6DeZ6aXEUM2cHK45mR6D3QUwmxWQgbI7rmQmkd8QJrTll8X6WJANLwEGZA6qaNGKuRGEJZumNvPXtpbt2LX2bf2K3cOu3e686vYJfcFVHHU31BL7wd5IdQhzs7zLMMYgLds4jhrSXZGKgLitBHyyvFxRdxIvxp5IVV9w09srezVcIgaYxcDiW6uPXBSfIJvqfh2tVxW6qdGVTOJ6hqV/qHYrbHNwgtHuoOx9pg3fUQeRERG/CGhnqhlb0WilQHa0Wxyt3FgG1vPnIw2++se2RN3dOnDplwoQpU8XqB95//4EH33//9KtLl7669Fz9WV9bX1pLBPq8AhTn7n579pDd245u2nxU3aY+yl7PrnMp5Eq4ZVwsn0bHAdd5acqxNxsEpoimM4KJaKImYinbk510T8ZdpCQz0WYpCYJZY0SoG1Ys8FLCCuOynQmashx0sSJ6I8oSYH3amMHkpdEjVovbBEjXbdd52E4StfMGsG1pHRIrdnmnuOfAlp7FK+bMuoX8N1n26rIJ21cOAnxsJpuSFS9335OqeJkyb8bKA1NIzbStwlS0S2lMleZEGQKgUywggedVMlg7Kxkywsw9TKya866zkgFU49nVDGYifh5bnlbSYAiob7f7af15+jXNXV3T2MU1z6+esBBXgJxbQbH8cyKqR9LrKMj3JKB+xqVddwBc18Y5zr+uvfO6UhhFE67LYgxp1zWRYKnhHGr7kl6k6cXVt/RMI1j3dzJVfWzr1vZSVsvBru2EaxeAXK0899r+5LUB5sUtrAuLK9ImWfKMobhP5GpFVEPUQWA8Fi9g6qCApUO6HaxatMCI5VJ6ilz28Bbi8wdwr3M7ATc2aKExubCTGAuhbhPY0mqjLKwcLPScU5aSteqGyOjaquqs0bFbl9RcXlsVyRkdTSfzh3X35ZV3y1sDL6FueevaM+kci4xe/eeaXDm5WReULDS/MqKKSY/OOJpXazxGl4uFJdU6nTSpVrEAeTE90WLmWLridMZ0vI1WDp4vlLVRj/aSTs/MIwtg9ANTIqIvOHTo53/yPC8dOtQpI/r3ALu4OX8yVinbouiacMJg88MazCRyAGFU3MPqujy04QhuuAgkC7G+UUyaMjlSTG/ACL9scipWWs6bD7b8HtFkJe5MVjROMOpfx5BGSsLTQldmXqqqX3NgbW0l7+iU91kN3Sp61FVV1OtCgZk9J9/ROqVxeuD00ZTw/09FY8/KbnV1zEdxguP0MHOwU7sw79bK8m4BxmoFJi4TJnrG7Q4rTo1dj6Uf9NCI8UPYGm0s2K2FHqi5buJN2DdCKwDx0I0iSDorTuABpEhBNx8Wn2DFIPzX7SF10fwDpCmsa/1QXfmhetvHOGJyimf1EuNVK60RqgMN3lkjFEklpFhtCbkoHA9p81CfTK3CeGEVTEKATQI2LKmSABjmF5VWR5hfpc2q9+ZRzBNCj28pupRigbJqmBxaa3RejlMXpUYZRMvDKClN2p1hUl8lXLj86DL1rbeHj5p06xUD5vpa9cVZ2d0G333Nmg9u788fXtJVPdLL7+uvcY/vNWbpyF6N3oLCnDJvedzbeuiElp8+AHQn4q0Rv1Yh5Pi1CiGEgiaORiHPqRQioNTTqoXa7yPiX9tSNUOozlP1UqnxDPz/YjznjgO0fNo4OrZoGl4biJ6j6j05jgEwDunX+eL8tXG4LsgXEw/6P50xf9CUf2pISc3P9hw6LtCDFrrqrvnlkaHz1BFVbKAKpUgyIfrCw2yzmtALneGk5RsOzIiXEtoaPIuHoASj8Egf9ndH7v9DJxdBC1L9x5/ZgbVDMJ/oGyvX/OE6PpVCQ2uRkuXMMSLwDdQBLyAEAMw5Aff9JhXF47RbKyqic8Ov6TxnWkWSMVWRZNLSSWKizsDOiQksAs6+ejK1q2vTDeP8GJ5Gw3zrAMGWa9E/Az2nmaapA9coPDbpsfuASLRx0u0boXqxNm28mpyv0zlswAIV7DDMmUB3r0vTuIBmjTGKTUlkU4QmxjCWtAkGERsmOWnDJMGZaDPSD2Ab0yq3JNyPkCJ4PRJV6+jO89PnlKgCxnugg9UeWrlcrDSgORw2LRKsZJoTcTCeRFtIzmGGVVaEpj9aqAllA6WcGYnZaNcSWw52LbElu5Yg0sYd1OCieZFcskCLRoRpqSJcm0guVp1bEgii3JQvJJvI1eR2oi5TH1UXJe6csv2OiTU/qz9tJ0+p4/l5e/kptHxxj7qFn6fODw5Z+OTMH79Xl3fWUYofA94xcQFu43mVR3JBOG5jKMcTaXPZCgDlZDGUgz2ICtPKkuSA/5gUNzPEYw6jch/NTFqtXkn2YMqe10EzVZUAa9cheyTFlgU7roA5FRcoYhK6wD/JwqY5XQCf9GKnc4EPyg2tfQI5x9qnEDe0y+qniq6qnyq16qc9WP1U1u1/V/+E8PuiaqDKcXFeXCGUaGX6/f8vmlDrXxRNpJTqhoujiv+60xZgdA2gdFVegK6qrugK/z/NFdU/F0XZlKSCujjS/pjadJK0OSltvbk1XdAmN1H4hOsvGmmrDjXB+qtn668M1l+fdMLBVI33Zouut0OJAvk1joRc08mRvvAa7S05+5iRJVmZhcFQ/f+SLV0sxItikr5zla6GVVqHq/QiGfbZuetXZHwDvc9kPYzVyedzriwsV0SVctgBKiO0KeNZnFJCsAWEaH9GJSxRv3ySTdiZMYT9XhyZQSxxVMIV8CYjq1D/v2SWtptfFINaYZu/OIYIZg0DEO49brc4XqylXmfaEwR7kJjIe6SvevQ2MFQuWa2+TCpvU4+qL5JK0p8ekr6r1Zfw60r1QEoGaa/SEq47dysXy8Q9lLYoKwd2mvgkmA8ICcWod/gPhsGAhUVXTXV/bhZNEsPmU3bgHfbLyEUVnok6vUraY3L79AWlrO2gYjHTPmaZ8L03i7ro4/ZcLr87MtkYSDavo3DeVx81eLUeFaWGYH0JX+z2kRJsbka0BhSllLFr71to/aFl8VJ6vOEm278HLV5CrJPI0f4jxlLFYxw4Yj5wejJ/eDEyNeRdPV09qrBj3+pppLv8yW1CsxdZ2/GOF1n9ye2wL9IaOKpPfVhfen4VXGZXVXBZyWRbN1Z1tkkerw+FpsuCONwPziuK20F1f5eVcXpjEsv/348NK/TaJLfHR2cEo/Fdjw31+nljI9uZDu9ydOLxpM5Ojg91dhbX0tX4srsaX865vPNlMbm54CiZlj5vnB+TRtL8Emjkrgf6B00DC2ycVI/4QP4nnD9SRPaZUcWjZyAuN33YbkuIJib5WO5rDhzmdBKDyiQTuyRJ+oYL8VjTD+fzmTty3wW4rNOzxc/6mrSCDBgBhdaeW61nS1Xr2bVqvTbeZLZS/XV+yR7mraWX7Rk1GN9ZvCd8pE0uz4HdITZR7OtC/3HKRmDpo4I+QSF+3GLjsOOYxZxImkdWALW8LRLBrGaHBnLRBFJcmGRo0NJXo51V2P7amkBwx/E3PyZ29fuP33yT8Kr6pq710KevHPxvdRE/8+33aAztzDe0z14tt14bDS3h8VsSrDdQBHVVHR1BLWDQWgcFBhZ3ok2yhAH5dwM83i2sSC7cA+QgQtRMT0Kphx91qwWTJD8vgg6hsBTX+UtyqlFVBTELPIO2onUnewvmYdgqZsnMb2DQlTXQow0aPe58kZWGJPNVxRqK3zFTbcHy369oXrHgymj3S/t3Dw+4bED4vx9b9/jU2VPqB1f0Hda3orJ3n8oJr14jtK96eXJBn3ErBvSaUFNW7nWHK/oNvr7flgNDjjT2ixQPrL+k7+Q5o6q7RQoGXrFgUrvIsBOt74O5ygQ7pZi7N73Cz29MxLJw2pJlfpRtcb4oWevXlqvLwpyIEsq6fA+tlg52VfFXiqXTaBEaTVnIqqC0R2f1ZOfQBnha2Z9fK/sruuiyP9SO/K+U/o1FZbn5wvV/4j717Q4bLQI8hx8B4MeD51Y8Bs/iRyHlR6r2sa1QF+zkxy9VQJaeUwGJ3CgMFqe4gU7Rov+3Ukg0t3+lHJKni/hCRZH8QbagkzzZBTzJBzT1QDpPCtOqQGlLPU1GSpI8kbPCtE0E9g/z0P5hxV0xBHtG+NMEpJgJSG7+WSzJAZYUaiwpuXgxoVvArwnKJg2jj7qwrAg3kynq4w891OE6V16WAm+6cw3cq+m8qUnnTRlGJbOi8UKKzNuqCssApucy2F4UiffgPbnAsB4YMu9JuRXxJNq6Rzg0phlgzwrLpmi8O3sTcaD60fjYVpRRD2qq2JHO0UZs7dydZf/XS88BN3MLy6q0VHlcbzUaI3tcPCO7gPbOX2FrbRe2d84vsHjDuvvzunXLWwsvCOU7dJTVosbnAZqeKuf2n6upOmuRi9JkTy6JKtmwNZdGaK5wFqBRZ6ItPzcLPTwe6uFBvZWbrrfayjMw2FeCUT6QTGc6VzG/OItVSmFnIiNNTPCgNMasOmw+rsBm+X+tz2CnT4kpvrkAT+NH1mgcPNDV6hWeP3y4/c90CX92+HCKd6eBd4VgC9WDTZDGu5J0KQ1guk2Y+uLj3XhPGPjYDfhYG0ZRpQ76HqyeC4QzuwiFs4KFTIocuISTDMzPKIevIuyrSDiez4462dig6T9kYxGyUYmAAfWc1ZOTqyvBSJeSX66xsURjY7ez2ajUhkFbZGexzfSCLHVqcZhgYSdj0yIxF2Dw39ccWHvH1CkLNS47kpGZrpidOLDmjilT7+jojgwXFnUGaQSs49JPE06B9dkAtvtyrY6mEEymSjyIGhIxB6oFT1QxGcGOj8R19ZUOW0jOj9LeBD2Z+Q787u5ipnl33DOsNjSRosAgpSQEnKgvxALV4u6oN3WSnM1CU/Aj2SHJrmT/zYDWWJal02mdZc+pQU7PdQoU6llBclPTdRuuJPaZiwatLP7d0LfXLfivmlveXLFnRpVO4DtG2W+cM3phZNeVb6z613XbO7b88cuxQ+c8YjvDXTGdX0dez/3DtAWkeNSyS/3zZw2qW3nN7DHDH7/ygWdnYcnylHmltVsmjNy+63d3NfTcMnHAyaPXY065aqW17DVoZ6Zq2Vm8SCtoT48X1SZL2zG9KC1ehLlFTmRWaTU1Mtvyi8pY2MjZZvPqLxQ2uujS+K7jRiUXLJcPH71rWHrQqHzQ3fOebuu6ev6ObedFjPZXkCy239BadMAneFeFcoyOpKrR/XySR6VGDZoUsbr0IoAmwVK/kdZLoAo7tzq96CKq01lmwK9XqE9DwLXl16rUhQ71bVXEUvWzaCo+h6bSFE1BoKkEaeqstW8rCZZemKaLr7hH2+biqu6HM8D0S7X35NlOvySjaxeli/pbz+4cUA4k+ZMd8+IljK4SWPf+MPph0et6LlElFzNRWlrDr0/VQxrkGf1rs8UfYsBHNcOMiRpdAzQZrMTI7tmUgQCmyR7efqZbVAnANhyKUE+s/5gShG016KB1LJVO5okNYhmEVNSAur7NnaOnLqFKp+IrpklE/3uJpWkDyAY0o3+ZFQeOrNOYYP+F+eV/Pny44z2Y5HdgX+XPbAbjMnmfoJ5aZIlLls3HBHjbJug4Y2e8zZWsVz+rg3Ay4LaA6D6PhT/Xtapv/yxrtevcJnhafM41yNnX4HTEeFZZvOv8LsUo43iNTX9FCd79uTgDxfTnbewyQMub8NQPZBVjcDXJGBxegk/mIcpCOBWQc3UG5BSMx50VjqvXfCvS5+JgJjc/P6ddRzjzDVwnD2TnnHgcuVA8zpWKx0ksHiedH48T0uJxzj8UfV56RLzt8OGfV+JF8Qj5OP7Mt+JgvQ8QUAVWZtLO7SV6VhakhOAAI3RAHm21TwDhsL7GZcxtQ52XRYRVYJZJfUw6i0HyWAv8XraRlNC7yeQkm1FiyW8J1mtUEdgVvFjHkc+jp5JHSOJgpdfBwvH9bzq0ZNaV4RW9t/XIHeT1Tbu6tuWh3qNWz2uEL04cuum++4j7vgfXrCdbP3j53rHdrx0/ae5we4HJuCOUtWDBpIZNr6vf/GbOgfuuvPI+skf98vDhjXcfTMXrgmCTeGBtrrpANXusGFnujcYLmEESKihmcTs0SAJsmaaK3du8HsR6lcz2YJXv8CNaDFroYKsXC+DjuqyC4hBlyS+WwXcZrDurNP7DNLNhsRYM6KJcXhyrmQvrk55/DXeJo2j/gwwuC3vt0uirC/CtNdlwQcmEd1jy0paRacXVk01n3ZGZkB0Omh2KFfXobnQQVtjtkZ7Dunpbhp3Sl+m6YGk9Lucuy+tduDUe7LLGXmdT3+54PFVnn06DJ40G7ALgS9HghndepMHr9nXScE5XgBytKwAdvZf5Sw0SaNKLaw+AiqPLFgF3sr2wy0YB5F/aJpikYxfN5aBV95QOT7KbQTZOSrInEKz5VOl9JkV0Po0IdJU6tYnwsYnIkGyUFEwV45RszwVJYdthlxMyWNsAV3c5J8L7mrn/1HnzgjnSQVhd92j0lCbpqUAvGaHrLe5hKyvgyYG1k9F5NzYWiizKpHfrQG9i3MoWljUcD7IjZk4h6bKPuhu1ReYLYmiOkp9TUhpiN2iqKL0Q7V2ts6454ejCTHd3zZX/OcdCfzDFHYy7Mf4M0NZeHvYMS62+5MJD3Z7NUmNyIrRRBFt6bVYH0XJgOhdhW57BY6SJtlh+mOdk7SMyHNgiWHBixp3iyYY3Jpfo+7WViftEinwEBeksWHDkuRTBQ84WbNEC+/48jU7ejjsKysJCbpO4Xxys7WXdOZpArBhTdyHQ6iu0vQxTzw1ZCdkc6bzrkYdoNyNYKA7qGEMs6n+Ihc/au1ddgkm9fFuyp72Q6gniA9RVivV67lT+e6HGWkzSzzMlku62TBCeTOpuQ5VA5YnWw7g9zL9mcLjEHD+uIasT7E/EWIVuvEeJhxZntlm57FKtDFVv0qAWYVE32lCcsKhbFdGibnpWeVxTCkx9YMpY8+7otHm3fvfAjKv0u8OT5xBTLcksKb511TNVJbeu6km+3fj1hgL3+IEf3QIHfuvogf+98uYR5AfzbnW0Zfcdq0fhPkZ7FIAORA047dwuBd5USwVzlAYk27KIV9OCXXYtSMWOvPQeP5IvM4vKyy83MEBtfk4TA+pS7qqTgdiE0bdfGbcvfdxMexPfr43bRmNymva2Mu39y+PG6Ny5zRfGMJXdxciFXC0XSxv7Lhh7DuYtddkZgg6b8lz2hlMhr/MGnncuw7NymLRdxPCZ1j6HgKSLtksKeKasca0wGgZQ/udhBW+XVGABA2ghX6cWYlS0eWk9eJbzHHra8qw2VEQSU0QSU0RZrA8Gli3rf50qLZx3Dl3xI/f/oUuaGg8fZrqGZ30aaD9XC1fEsZi71q6BNrZvM3ImYyjVFSLVuSGHx8BdWvMGGxWCzhYO4qDOuJ06mN7bKIPJrTWptztbgaHyxt4+TFYztEYzzEOK+hoNA5RXDyILnZWqZ05xsYRuOVNi8Q5dqrsPbRKGylnr7sNuq6jfcXzub9e/OXXqm+ufnu9YfXI1/K8ONjSq0szNX6l//WrzzI5Twq71u3evX7drF+Z5U94MoLzJ4Iak+ligSWRl2ei2CM1Y7cxGx/5lsNFQmITZ6Aox0JtfKToec9JxhGntLwRt4s7i5H1H7kvn42xtsmjPQ+Mami8R4rZp93KTbLD06S2HbCxjQrFaO7tAxx02H1rLDmsqBUu7OSiqb6M7EqE50dZITCrGTEDJpWVqSxmmEE3PKs7DGhvaTiCA7dg8Dew+LBxde7l5RcXa2iMNiqlcYmXmtG++31ebluJdS9vlO1mWCmsb3ULzJoj7weQdAPiv231b1W+SzaM/2Tkjclbn6J1btFzULU+nGkcPW7v7HdY1WsDeQvoE7GVFgKCi3LWan89nY14rpUxrHoLl59iIoDoSr3IXisCeKpHdmgnYU5xF777EKWVIeI6/oUFx+9APml3eQD1+SkYxvFY4lW7YjkmUWDsmR6f782yXgV67zwmDvg7ABzrqOii//d8PXf9yv9v/MufpOf1zqefAfuvsy5bVy20/3/j7po3/ePDf61YQfvUKVV3Nq+SF3N9PnEtmkMyvN04Yvqtx6tq7RvrKTMax10R7bHtx/NBnNpLFG5/eRTKf/m3J2wuSNQqt+s9pjN7BjT07So8tdW1RxazHvoxYyaKF7NuseuyyYMJk4bBidSbabPQDWIm0q5rNesHeu52S3BnM3wqCfFYo/5SWPnTWfRO5s+6K+P/yXTlpF8p/tQa1XOBoDSo58yfSrpv5i78X8Pe6TdrvXxfGkhnUZ1LI7t6MpXDGs+4UaU7d6xG9Lw3Eve4J4MBRNr5a+PujZ/09d+G/BwNJqF1HPO3CWL4Sz0C4fmcKyGsXe5/KqNCvFbOi8TaVMO0OYaxg1vw9+RyrHeSicZ7d1FMfObs3TxAfDuJZt30qkLAdSaCD4JEGIdx5nvPuYZ12HqQg6tKo2L+euDVSGDlwLqCHP0XpMXC59O6fYlQjStaln8mn3WIZKXoqSRWjjPUv+4FfzL+LdwZP1imaWJ2iSbuRNjkW12XRD9mLdl4nq1Ys3Hrnqxs2vEpuwec7GS4eDUZHqzY26k+iOfmiMRrF24EpOlMkknanTms6VKH36nYnZAO9OQftZtl5Z47kv9End/5nJ72PZ/LBaFnIbePzaD2in9PuIhEXmVxgv3javFHzvbFq74Vk9549yRJvdo4VcI5Seo5A8hxYs6PrPI2OYwu5e3V9Z7Hjts76RsKFwS4Yq9vGlWFuaDENhpoTtIQeS5zi+TnFNhvt9povJuSySNztox8YWCMPU6TNUWwzsgZD4jElC8BNGRqc+aBa3KzNUFYZrdfDcCfG3/3F8DaIbxWuELSuD/2yYoNic9KMF2zgQBu21Abro3gfKdq5wRAwBPQetw9enNptorjS8PAoz68ePryWkD/8eO+2UY98NoZ3DldzRJGPDld7jfr7/Zffe2/ij+rP1eS1eE44o9G6//0fj6yY981zdW5/JK6evm7zfiIc0+5hJ8yj/hLsY7WZybtiskajWAoIEg9WWSSSqg00iiFtXbOqVuyIT/t/Ylm1Db7ssim+rKOCEnezaKaZ9kHNIFjSHLezsBN2Q81wa3dlwn5lisXVoN2YEFvjEimaQ29uagiWSlHywj0PkFvuW3T9vQ82Teknnr7zTnUR2agu4jPV10hjx1fEvO8l9Xs2zyjsXwlfgZyXpvX+S+oUdvfas29iW439i+BP2jPx70X4+720DnYJu9ubnBtl2U8+iwaJs1lruvwIc4zZOZ2RtTEK0KoEPyyV7Egs4Ed+BJAffpYQm+tiNYt56L/X+bBYX4qZM1gxnw4L9tk9NqPUG6HzGaoM6AUM0DvfBCVx2/t/Dg1pruju6kZW89nmHJc/v8wz4wq+9Gv11e8E86evnzC6M/zWIHmB9xrdpgyD7to57VmCWWsmDLTBGqgH2oLo7UQIIWdEGbTKMmu05THaCiK0cU8hJSgABOUCQYWUoAKY68IAHhYibQEHnUyz1tTHG2D9Sc3sNjgc3s3OZgfxz0KvlI92RDaldUT2+hD90x6qVXytlN4eWdz2t+ev+mB4ZTB8de+Svr2Co4deeuXbbyOhEx88MHZAuz1QqD/idlWN7yO8FRnca0yyaTLN59NPAjqLuBruSe2u39n50SgtlsGmq9UWXLWxatqUqdquFcMrmcVRSr6S649EaMw0SBlQCAwojsSClAFBpLqQ5SuVRGhWhC+CCV2I57OBDRhSLaB38Qs10OVvKsd6SKfittC2TYqDxqUN1Vj3bWtIMoP6DGjHSep/AjYkJx4f9YHamvoqPcqDeceSA9fv2HXj83ufXy14iyNDyifM4Pt+re46qa744QeyRm+osBW5An7XpBnAq5YFO0fPmrXiBWd2tnNU7/5JecDHpy32OjHb4NKZhFG9MbahAt48Snv7DITdK1ZL88C7A99o1MoHMpJkYH8LKknGtYp6jWtVEeRaS1iupVyrAc7UR2K1Nci1WuRajQMTwuUeEaW7G2Ncse7VtBVGFXzXnfb+UtzAwEHY/aIGGdgEDOsODGxswDgl3rPNLSnOHGRff8LUqwG+pr0IhHQmwuo5S66qdGmCxfgJ7DQiO/kdS15a+OhvbvqgbvzAqogzJFT462f0L+vbFBRyzHm+oHv0vI8++o+68uRJ0soTm16yezMLijwz5mjMnT7dlCmVZ1QLZwkkceisOvGS/sM/TXF7YjX8td1oNRiE4cDu/wOgCEm+AAAAeNpjYGRgYADi5rUBcvH8Nl8Z5DkYQODSqk9NIPrKOTOe/xP/MXC0s7sB1XEwMIFEAUJUC7AAAAB42mNgZGBgd/t7g4GB49z/if+ncrQzAEVQwF0Ap1IHi3jabZJfSFNRHMe/95zfvRuXGD2EYA9biITDB5GxRsQIJPIWIUo+jT1ECPUgiSIKLQgfxh5CRoSINyTGVoGE+LQH6TGsYEjuRaQH2UMUZEn0EL10+56ryUgHH77nnJ3fn/O9P7WHK+BPrZAe0o159QZD9gYeyjUk7F/wZBNpKw9PzSBPhrSLpN2LSauBrL4P31rGqF4NdmUNSR1DRmaQkCmckRJceYBheYIx6ea+ylwlpKwleNZXZKWJizKIIjUnUXiRJsbsS4xZh29XkLPvwpdlMg/fEe6X4Kt+7jNw7RIVPG/w7jT5yTo3qT+oFf53C0lT345j1uSM1LnuImXmbyGjPmDF9EydlWd4oVvsrQ832KsfriskxTe/Qyd7H2DvvurAI9URrPHcV4OsvcE6L0mZb1mkLtCPc4wvIql26MFTzMkp1nzNmg7pgatXkaB/RRVlfapeZ40Ufb+NV3of12UXabkXfJbfwSelmGscMacOj3k9USjIc0zoEWTDs8vIm+8gczzfxrCKo6Bzh/fop3n3SURiwZ7xN/S2DdUf1Iy/1I9U2FP8zofeHqMXW6Eaf9sx/uZRkzgmQj9PwKnSp9aBv+0oN3isXJSp78l3zlPuyN//CN9t1sbjdugxY2pGo5ucqbN8A3vSVSByFfinahywtsiFA/CFOk29wzuc6SNGGJ8Ntq2F4C3nNk0G9HmcVvtIqwbXMfa3g1ETqxYxSQomr9TRx7lNaeaVLgjnUZwmXOdb8OcvkMrBewAAeNpjYGDQgcIkhimMVUwsTJuYvZgzmCcw72B+w6LH4sOSxdLDMoeVgdWAdRqbClsB2zl2DXYf9lscJhwJHB0cczj2cVzhdOKK4urh+sbtxt3GfYj7B08BzwqeY7wivF68BbzreJ/xufF18P3gD+A/wv9FwEQgSmCPwAdBBUE/wSrBDsFdgucEXwjFCO0S5hDOEj4iIiJyS1RB1Eu0R/SQ6CexGLFFYh/E/cTXiT+RaJC4Iikj6SC5TPKG5C8pDakmqTlS36TtgLBE+pZMksw1WQvZGLkGeSn5HvkV8hfkXyhMUbinqKdYp7hL8ZGSjpKH0j6lH8omykXKr1TcVLaocqhOU72npqSWp3ZM7YO6lLqHeov6K40UjXOaVportFy0Tmi90i7TPqIjopOhc0yXSddL94Zegt4r/QoDHYNThm1GCkYbjKWM24w/mZSZrDC5Yypg6mN6yMzJbIk5h3mBBYNFmcUaSzXLJssHVk5Wa6zuWVtZN9kI2cyweYEDfrNlsRWy1bJ1sk2ybbJdYHvE9pUdn52FXQkQTrPbYbfD3sZ+jf0ZByuHdY5eTkwAUSeQHwAAAAABAAAA3QBXAAUAAAAAAAIAAQACABYAAAEAAXwAAAAAeNrFWt1uG8cVHslpkWzboCiCXhRFsRCqwgZoRlbsJLCDIIxEy4JpURGluMlFAYpciluTXGZ3KVtFLvoUve4D9DmK/tz2pje96DP0AXrmO+fszpDLHxstAkLk7OzMmfPznZ+ZkTHmJ+Zf5pbZeusdY7Z+bIy0t8x79MTtbfP21i+lfcvsb9Wk/Zb5xdZvpP0982rrW2l/3/x86z/SftvsbCudd8zt7X1p/8CE219L+4dmf/t30v7Rzh+3/yTtd8393Za0/2J+uvt7af/V7O3+Qdp/M+/u/lnaf6f2P7j9z1vmZ7v/NgcmMVNzY1ITmyszNLkJzW3TM3fMvtkz98wDU6OeJ+YpfR/RqIRGRCYzL+i5j5adN6FWn3ouiVJoGmZkBjTW9iX0/Mx06amH9im1utQf0xi7UteM6TN1ej8jemN6su06Zo2Jm/pSLmL6DWl8SH1MJcL8FG8T4mRzjuqVa3xO7RGNuEfv9/B5ROMOobtHmOGPv1vMqOZY335JPSk0mJAGQ4/+qelQzx5sUPYOQaeH8dfFjLr5mD6PIPULomnHDKh3RJQvyY51smLdfGjum4/o82ANx12ibalYjg4dC4eQt76xLi2WcrLsQ/M+fYYOXbaq//6S3vCYHrXqQFRO/S4ylmM19ND6Ovj75A34CM23QNwmyP2UuKuZwLyk3pwoh+YMOrWWvxaveQx7WmlOQDVagvU60QnMOVFhzJfzOsB5Tqt0Ibd6hUVADzrPZK0ZtftYPQQ/EWYfmxb9tkkatntJueVRsNqtQu098FZy5q+r3PRgv7iIFRGNS4jnGrQ5Qa9684h+E7SuRaNdmjECtVKXXfDaMF+gnZMNgzl7ZrSqxcuU+jLiMhPrJNR7Re/bNL8FvQbkBd/FJ3D0f2qahAErU5t+z6H/Y8K97e3Q9zLth0TH+sCHmBuRplKytMXCjfjGHnn+dydhQJKdEf8N8sXPSaamoMVa84okYXtrtFZcrsej9WC24B0ggLGfAzkZ/cbkTTNgJxfkWLvbOGcxZP0gwPe1YHEK7+OVmJce4iKjL4GvW6rXoDYouJrCT39LvT3grOZwMaO3U8zNHdnKuT1wzXRtX0BPA7xPQUs56dJIzW5WB6XPWG+bkB5n8J5c3nL8GcPjY/RGwpnOYw6Z92vRB/sUR8+oGBtAN2yLAbRg9cTa5Bw8gXaHWHvoyGf5tzHxRjzeamQolup7fj8uOImkZwLuutDDRHA/hC+78TQRnabw78BBFiODowlHmsyxwGJsdHlm3TDHMxlRE1TNEO+1Z0wj7fOgiGyqM5aRbZIiF8+Aw76j4RE005WomcCO+syc3jjInkDaELFx5FRcPHIMPkfQYIaKiTUROJLVRLM9Gsdy6IoTUOLcECPqlkhXS/P8Hkardi4lp4wKjVhOLvHUL/pWa4M19j5WcaVzIz3zly1kOh+/fdFGF3rSWelczg2onzGcVWh3ViDiciOdlJr2MaTYrpqfoSoYApUcf1JHt8oJaziFVSOgYjGLq4ylH1gN3MBfNXb4WHeRYWl/g8iRwm4a/QZii0WfSKW+Zv+cryeq87+tw1jXKlkXUdGiPxC6JQITmjtzeCkjpEqfFbjNK/SeONVNjHa1BThaHFI2ekxZ9oT+zumvjVwbmJ0V9dWO6GEgcUd1o9xkqBpV+wPUHCz/oi1dDw4ratyAakH2B7vWbZp3Z2O9KwJ7smYq8Ub3R+p9mWQqG7sVHbETuwMvZkTihzNU1ZEnYU0iQiwe7Ndfrk/4Vi7zH1tlZ6M6eZkdFEuul2fwiN5cpHYlt88DoKzETyBVq7/ryITj0mPYLsp7W0bH4GC0ULetw49WHVxPaK3HaFpV9XPOn2JE5MShDHVOdexdh7+wAn8q57OF3LeZnKuzzVjqHOWti0xSenwClPXFk3J5U0OVkoo9L6USyiGpzr2LOtmvLDRelDVMIvsMHl3G18GchRY17Y4J1qKgVkjYkz3nVcEpx98x9FLGNB6t1eR8DFyFDNV7AH5fIktPkDVTzFIcq2Ub0NsQK21ixfIcKJUaQKWJij7O1FdSP46L/hw4H6JO7UFTtr5LYT32xUS+yww3FV4Sx2qhnIwsYtz3ruV6qstepUnR5xnlgg72Zm3syX4F77Dtw7lMcQpexvCvcmfG8ZP5jcRyLPtE+Kp5lbbuN7g6vpLdtq9pX+qEqOaSiRkLAap3jVjzmF0ud7nSrNjna6V7I3UJ0+SKN3I4LKs9vxq+gUcuq/rcfQhXraMVtTTnu8W35YlCtlTaoFJajhG6Y5tHyEDib4IKlL2MsdWXvVSCHPsQeLmHjHyCasOtwdZ75USQ7ceYWHw+lvW4tp1JDKmKPDXJ0GFFzOEV1kXqTKzn79T8XQbzFeF0jT1lH5K/+ZqbI3Set/ldx/9rf1Fbs8OIsC8fOh4SFFGIPdPdc/IpwnWRQeYzLVfHsVRV5T69ur4r6/hMKJb7svmKrQ9eXXxq7ZPLOndhO0YVx+RXshNwa7shajY7465U5X3nZG4oPZonrL4VmaUOpqLRKWTXs5mxaJJzRhX1MbI99+VyThEDj32sptbU9VQC5uJS8MlnYm5Nvnz3nYhm/XX8/S/X8rFU1tcY+bKytppJPcu+84FEjWQDT3kTP5kJ7zpneT0dFPW0u7tg7WSQ8BX2ajGq5xya5uycy5nQdEUG9HPevE56sA7vz6dFhOVctq4W9XcqTIN936+aJ8Upy1TkiCpqbkbj2EGI6nhSnMpzJT0tzhMmSyoMtbTuMe9Dq3pGMJnTtm/bzSpwf5cbevVaNd3l+VDP5DgH+2cP5VmIe1o4llsJrfT6WDeTOiaVmp1PNXLYJypibLAW7TXBnI10Uyc72/jwAvy9lLh/5SF8sfpjelX6CDbWsxuFl2s69bKJe/awznuCSu9h3DzwcLO6flusjpirqsqptvEuyGbWMVBQYmJZlmV/iOWM42bDUwq3EixXclG4fO+67hxsWb4MX/vcK/ifn3uFr3nuFVSee63by5wXe5kTQq7uWlbd1V2iJk6Kc5MJblBGjpWu6W0sZ/SDpTvk+VpnvnbWc9eg0A3ndz2Vs7uvA9Miro+JfyuF5foJbsHK+7EOTvnPzXMad4Z3x7g5t/dNbYorxzjfO6Qeu6ftyPsdoO459nFPaNwFaDGNM/q2tL+SG4QQz/bpKbR4CJ9oml/LnVYHVNvUDsHpKe7smhgXYoaV4gISnZgj3P/zeic0S+/4noEX5vSc+stVfa6OsSJzFoheDkgGftsg2segZ/mvQVO2fVLw+Vg4bUBHlvI5bhgvoOkz9F7Q7ymN4xvHBmRmbk8gw2N6z7I0wYFdORBdHeAW8yuMOCK+zsHFKbDHI2uQ0MpziPl21afoZc7aYuUz1CxKpS66ZD5Cev+l0LMYsPK3cNfDc4MKPkJYuoVVz2CFpui+IXeSrnZY9yX+avhviAb4PSpsMM+vUnNtEFRiQFc4ghRN6KOFVTo4fzgApVaBITvzDP3nDq4Y3Wz5lqPDAzmbaJovaNWmIKeBm25fCvYDy38pBeu5Id8HRdQIHRufiA0PCou2gaVFrTyHxzXlPzPO8MRaCICktmhXvZDXUE+/EBS2C858/aq36LhNIgTT0rUDz4KHuKVuCYedQhvr6dbf6D8PnuNsqKw1+T96OrK75Lt82/sxvveJ9gdUTT6kMfeL/3r5CJloQHNspM6LU6IIGcPNEJrxkKH/C0DxfAIAAHjabc7HT1RxFMXx74VhBobemw3sBXnvzQzFPghPsfcKKgrMjFQHR8WGxq4sNCS60oi6UWOv0agLNVYsUdm5t2H8B0wE3m/p2Xxyz+LmEEZ//naxkP/lK0iYhBOOjQjsOIgkCifRxBBLHPEkkEgSyaSQShrpZJBJFtkMYCCDGMwQcshlKMMYzghGMorRjGEs48hjPPlo6Bi4cOOhgEKKKGYCE5nEZKYwlWl4KaGUMkxmMJNyZjGbOcxlHvNZ0Lt7EYtZwlKWsZwVrGQVq6mgkjWsZR1VYuM8+znAI07yjYMc4zQXuSARHGUfHZziME85wyXOcYVXvOAq69nAcap5Qw0vec173tLFO75Tyyc+8JFr+PjDCbr5zBf8/KSHI2wkQB0N1NPIWZrYRDNBWgixmS1s5Qfb2E4rO9jFTu7TSRu72cNefvGbB1znBg/FLg6JlChxSrTESKzESbwkSKIkSTI3ucVd7vGM29zhOYe4LCk85omkShrtki4ZkilZkm331bc2+3ULwxFqDGiaV1OW9mlomqbUlYbSpXQrPcoCZaGySFms9Frq6q+uO2sDvlCwprqqxW9VhmnpMW1loWBT/+Exp/dpllg7ejWULqX7HycKjyoAAHjaRc6/DsFQFMfxXqXqTxVtlUFSo9zNKiZqsYgY2kRsHsBiZWDkWU5NIuElPFD9ynFt53PyTc65ifRE4qzNyJxHiRCXOJkaMupRPZ6Ru8BwiLtkyFWkkR6EpMsJVYLwqlNOflAGKltGCShPGCZQGjKKgDlgGECxzygARsDIAwWfUc3uvBgWUF0zaoA1/kKQzX952NrPnEz06Q50QW+j6IDuSLEJOl3FRhDetaZwNLWpI2h4iq0ssPfpP/ARtB6KbdA/KnbA9vLHmFz5Bl2XZ0EAAViohYwAAA==) format("woff"); + font-weight: 700; + font-style: normal +} + +* { + box-sizing: border-box; +} + +html, +body { + height: 100%; + width: 100%; + font-family: hkgrotesk; + background-color: black; +} + +.container { + width: 100%; + height: 100%; + position: relative; + padding: 4em; + filter: contrast(20); + background-color: black; + overflow: hidden; +} + +h1 { + color: white; + font-size: 8rem; + font-weight: 700; + text-transform: uppercase; + line-height: 1; + filter: blur(0.5rem); + animation: letterspacing 10s infinite alternate cubic-bezier(.2, 0, 0, 1); + display: block; + position: absolute; + left: 50%; + top: 50%; + transform: translate3d(-50%, -50%, 0); +} + +@keyframes letterspacing { + 0% { + letter-spacing: -5rem; + filter: blur(0.5rem); + } + + 50% { + filter: blur(0.5rem); + } + + 100% { + letter-spacing: 1rem; + filter: blur(1.5rem); + } +} \ No newline at end of file diff --git a/css-grid-card-variations/README.markdown b/css-grid-card-variations/README.markdown new file mode 100644 index 0000000..e3452ce --- /dev/null +++ b/css-grid-card-variations/README.markdown @@ -0,0 +1,6 @@ +# CSS Grid: Card Variations + _A Pen created at CodePen.io. Original URL: [https://codepen.io/oliviale/pen/WqwOzv](https://codepen.io/oliviale/pen/WqwOzv). + + Cards have the same HTML structure, altered with CSS Grid. + +Image from pexels.com \ No newline at end of file diff --git a/css-grid-card-variations/dist/index.html b/css-grid-card-variations/dist/index.html new file mode 100644 index 0000000..1e5ff17 --- /dev/null +++ b/css-grid-card-variations/dist/index.html @@ -0,0 +1,187 @@ + + + + + CSS Grid: Card Variations + + + + + + + + + + + + + + + + + +
    +
    +
    +
    Doggo
    +
    +

    Doggo Dogg

    +

    A very good boi that loves playing fetch and ice-cream! Gentle with everyone. Scared of the rain.

    +
    +
    +

    Type

    +
    Puppy
    +
    +
    +

    Size

    +
    Medium
    +
    +
    +

    Weight

    +
    45.85 lbs
    +
    + +
    +
    +
    +
    +
    Doggo
    +
    +

    Doggo Dogg

    +

    A very good boi that loves playing fetch and ice-cream! Gentle with everyone. Scared of the rain.

    +
    +
    +

    Type

    +
    Puppy
    +
    +
    +

    Size

    +
    Medium
    +
    +
    +

    Weight

    +
    45.85 lbs
    +
    + +
    +
    +
    +
    +
    Doggo
    +
    +

    Doggo Dogg

    +

    A very good boi that loves playing fetch and ice-cream! Gentle with everyone. Scared of the rain.

    +
    +
    +

    Type

    +
    Puppy
    +
    +
    +

    Size

    +
    Medium
    +
    +
    +

    Weight

    +
    45.85 lbs
    +
    + +
    +
    +
    +
    +
    Doggo
    +
    +

    Doggo Dogg

    +

    A very good boi that loves playing fetch and ice-cream! Gentle with everyone. Scared of the rain.

    +
    +
    +

    Type

    +
    Puppy
    +
    +
    +

    Size

    +
    Medium
    +
    +
    +

    Weight

    +
    45.85 lbs
    +
    + +
    +
    +
    +
    +
    Doggo
    +
    +

    Doggo Dogg

    +

    A very good boi that loves playing fetch and ice-cream! Gentle with everyone. Scared of the rain.

    +
    +
    +

    Type

    +
    Puppy
    +
    +
    +

    Size

    +
    Medium
    +
    +
    +

    Weight

    +
    45.85 lbs
    +
    + +
    +
    +
    +
    +
    Doggo
    +
    +

    Doggo Dogg

    +

    A very good boi that loves playing fetch and ice-cream! Gentle with everyone. Scared of the rain.

    +
    +
    +

    Type

    +
    Puppy
    +
    +
    +

    Size

    +
    Medium
    +
    +
    +

    Weight

    +
    45.85 lbs
    +
    + +
    +
    +
    +
    +
    Doggo
    +
    +

    Doggo Dogg

    +

    A very good boi that loves playing fetch and ice-cream! Gentle with everyone. Scared of the rain.

    +
    +
    +

    Type

    +
    Puppy
    +
    +
    +

    Size

    +
    Medium
    +
    +
    +

    Weight

    +
    45.85 lbs
    +
    + +
    +
    +
    + + + + + + \ No newline at end of file diff --git a/css-grid-card-variations/dist/style.css b/css-grid-card-variations/dist/style.css new file mode 100644 index 0000000..b0ab76d --- /dev/null +++ b/css-grid-card-variations/dist/style.css @@ -0,0 +1,865 @@ +:root { + --canvasColor: #f9f9f9; +} + +body { + background: var(--canvasColor); + font-family: "Poppins", sans-serif; + font-weight: 300; + line-height: 1.5; + font-size: 16px; + text-align: center; + transition: all .3s ease; +} + +* { + box-sizing: border-box; +} + +main { + --neutralShade1: #f2f2f2; + --neutralShade2: #e8e9e9; + --neutralShade3: #d1d3d4; + --neutralShade4: #babdbf; + --neutralShade5: #808488; + --neutralShade6: #666a6d; + --neutralShade7: #4d5052; + --neutralShade8: #212122; + --grayColor: #999; + --lightGrayColor: #ddd; + --borderRadius: 6px; + --boxShadow: 0 2px 5px rgba(#333, 0.2); +} + +/*overall layout*/ +main { + margin: 3em auto 8em; + color: var(--foregroundColor); + text-align: left; +} + +/*colors*/ +.palette { + display: grid; + grid: 80px 45px min-content/repeat(5, minmax(50px, 1fr)); + margin-bottom: 1em; +} +.palette__main { + grid-column: span 5; +} +.palette h5 { + grid-column: span 5; + text-align: left; + padding: 10px 0; +} +.palette.main div:nth-child(1) { + background: var(--primaryColor); +} +.palette.main div:nth-child(2) { + background: var(--primaryShade1); +} +.palette.main div:nth-child(3) { + background: var(--primaryShade2); +} +.palette.main div:nth-child(4) { + background: var(--primaryShade3); +} +.palette.main div:nth-child(5) { + background: var(--primaryShade4); +} +.palette.main div:nth-child(6) { + background: var(--primaryShade5); +} +.palette.secondary div:nth-child(1) { + background: var(--secondaryColor); +} +.palette.secondary div:nth-child(2) { + background: var(--secondaryShade1); +} +.palette.secondary div:nth-child(3) { + background: var(--secondaryShade2); +} +.palette.secondary div:nth-child(4) { + background: var(--secondaryShade3); +} +.palette.secondary div:nth-child(5) { + background: var(--secondaryShade4); +} +.palette.secondary div:nth-child(6) { + background: var(--secondaryShade5); +} +.palette.accent1 div:nth-child(1) { + background: var(--accentColor); +} +.palette.accent1 div:nth-child(2) { + background: var(--accentShade1); +} +.palette.accent1 div:nth-child(3) { + background: var(--accentShade2); +} +.palette.accent1 div:nth-child(4) { + background: var(--accentShade3); +} +.palette.accent1 div:nth-child(5) { + background: var(--accentShade4); +} +.palette.accent1 div:nth-child(6) { + background: var(--accentShade5); +} +.palette.accent2 div:nth-child(1) { + background: var(--accent2Color); +} +.palette.accent2 div:nth-child(2) { + background: var(--accent2Shade1); +} +.palette.accent2 div:nth-child(3) { + background: var(--accent2Shade2); +} +.palette.accent2 div:nth-child(4) { + background: var(--accent2Shade3); +} +.palette.accent2 div:nth-child(5) { + background: var(--accent2Shade4); +} +.palette.accent2 div:nth-child(6) { + background: var(--accent2Shade5); +} +.palette.accent3 div:nth-child(1) { + background: var(--accent3Color); +} +.palette.accent3 div:nth-child(2) { + background: var(--accent3Shade1); +} +.palette.accent3 div:nth-child(3) { + background: var(--accent3Shade2); +} +.palette.accent3 div:nth-child(4) { + background: var(--accent3Shade3); +} +.palette.accent3 div:nth-child(5) { + background: var(--accent3Shade4); +} +.palette.accent3 div:nth-child(6) { + background: var(--accent3Shade5); +} +.palette.neutrals { + grid-template-rows: repeat(2, 50px) min-content; + grid-template-columns: repeat(4, 1fr); +} +.palette.neutrals div:nth-child(1) { + background: var(--neutralShade1); +} +.palette.neutrals div:nth-child(2) { + background: var(--neutralShade2); +} +.palette.neutrals div:nth-child(3) { + background: var(--neutralShade3); +} +.palette.neutrals div:nth-child(4) { + background: var(--neutralShade4); +} +.palette.neutrals div:nth-child(5) { + background: var(--neutralShade5); + grid-row: 2; +} +.palette.neutrals div:nth-child(6) { + background: var(--neutralShade6); + grid-row: 2; +} +.palette.neutrals div:nth-child(7) { + background: var(--neutralShade7); + grid-row: 2; +} +.palette.neutrals div:nth-child(8) { + background: var(--neutralShade8); + grid-row: 2; +} + +/*typography*/ +strong { + font-weight: 500; +} + +em { + font-style: italic; +} + +h1 { + font: 700 48px/1.2 "Poppins", sans-serif; + margin-bottom: 10px; +} + +h2 { + font: 700 32px/1.2 "Poppins", sans-serif; + margin-bottom: 10px; +} + +h3 { + font: 700 24px/1.2 "Poppins", sans-serif; + margin-bottom: 10px; +} + +h4 { + font: 700 20px/1.2 "Poppins", sans-serif; + margin-bottom: 10px; +} + +h5 { + font: 500 18px/1.2 "Poppins", sans-serif; + margin-bottom: 10px; +} + +h6 { + font: 500 16px/1.2 "Poppins", sans-serif; + text-transform: uppercase; +} + +/*buttons & links*/ +a.button { + outline: none; + width: 100%; + text-align: center; + display: inline-block; + border: none; + font: 500 16px/1 "Poppins", sans-serif; + padding: 20px; + cursor: pointer; + border-radius: var(--borderRadius); + background: var(--primaryColor); + color: var(--backgroundColor); + position: relative; + top: 0; + transition: 0.2s ease; +} +a.button:hover, a.button.hover { + top: -3px; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15); +} +a.button:active, a.button.active { + background: var(--primaryShade4); + outline: none; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + top: 0; +} +a.button.disabled { + opacity: 0.4; + user-select: none; + pointer-events: none; +} +a.button.medium { + padding: 15px 18px; + width: auto; + margin-right: 20px; + margin-bottom: 20px; +} +a.button.small { + padding: 10px 12px; + width: auto; + font-size: 14px; + font-weight: 500; +} +a.button.secondary { + background: var(--secondaryColor); +} +a.button.secondary:active, a.button.secondary:focus, a.button.secondary.active { + background: var(--secondaryShade4); + outline: none; +} +a.button.accent { + background: var(--accentColor); +} +a.button.accent:active, a.button.accent:focus, a.button.accent.active { + background: var(--accentShade4); +} +a.button.accent2 { + background: var(--accent2Color); +} +a.button.accent2:active, a.button.accent2:focus, a.button.accent2.active { + background: var(--accent2Shade4); +} +a.button.accent3 { + background: var(--accent3Color); +} +a.button.accent3:active, a.button.accent3:focus, a.button.accent3.active { + background: var(--accent3Shade4); +} + +/*variations*/ +input.variation { + display: none; +} +input.variation + label { + display: inline-block; + width: 50px; + height: 50px; + margin: 70px 20px 20px; + border-radius: 50%; + cursor: pointer; + border: 6px solid #fff; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.2); +} + +#bluepurple + label { + background: linear-gradient(to left, #673ab7 50%, #03a9f4 50%); +} +#bluepurple:checked ~ main { + --backgroundColor: #fff; + --foregroundColor: #111; + --primaryColor: #03a9f4; + --primaryShade1: #e1f5fe; + --primaryShade2: #b3e5fc; + --primaryShade3: #4fc3f7; + --primaryShade4: #0288d1; + --primaryShade5: #0277bd; + --secondaryColor: #673ab7; + --secondaryShade1: #ede7f6; + --secondaryShade2: #d1c4e9; + --secondaryShade3: #9575cd; + --secondaryShade4: #512da8; + --secondaryShade5: #311b92; + --accentColor: #009688; + --accentShade1: #e0f2f1; + --accentShade2: #b2dfdb; + --accentShade3: #4db6ac; + --accentShade4: #00796b; + --accentShade5: #004d40; + --accent2Color: #8bc34a; + --accent2Shade1: #e7f6d5; + --accent2Shade2: #c5e1a5; + --accent2Shade3: #aed581; + --accent2Shade4: #689f38; + --accent2Shade5: #558b2f; + --accent3Color: #f44336; + --accent3Shade1: #ffdde0; + --accent3Shade2: #ffcdd2; + --accent3Shade3: #ef9a9a; + --accent3Shade4: #d32f2f; + --accent3Shade5: #b71c1c; +} + +#sunset + label { + background: linear-gradient(to right, #ff9557 50%, #ffcc67 50%); +} +#sunset:checked ~ main { + --canvasColor: #f9f9f9; + --backgroundColor: #fff; + --foregroundColor: #111; + --primaryColor: #ff9557; + --primaryShade1: #ffe2d1; + --primaryShade2: #ffceb2; + --primaryShade3: #ffb184; + --primaryShade4: #e88850; + --primaryShade5: #d17a48; + --secondaryColor: #ffcc67; + --secondaryShade1: #fff1d5; + --secondaryShade2: #ffde9e; + --secondaryShade3: #ffd074; + --secondaryShade4: #e8ba5e; + --secondaryShade5: #ba954b; + --accentColor: #4e5166; + --accentShade1: #cecfd5; + --accentShade2: #aeafb9; + --accentShade3: #8e909d; + --accentShade4: #6e7081; + --accentShade5: #404354; + --accent2Color: #588b8b; + --accent2Shade1: #c2d4d4; + --accent2Shade2: #a3bfbf; + --accent2Shade3: #85aaaa; + --accent2Shade4: #507f7f; + --accent2Shade5: #497272; + --accent3Color: #fe5f55; + --accent3Shade1: #fec4c1; + --accent3Shade2: #fea7a2; + --accent3Shade3: #fe7c73; + --accent3Shade4: #e7574e; + --accent3Shade5: #b9463e; +} + +#godiva + label { + background: linear-gradient(to right, #a05793 50%, #a3d858 50%); +} +#godiva:checked ~ main { + --canvasColor: #f9f9f9; + --backgroundColor: #fff; + --foregroundColor: #111; + --primaryColor: #a05793; + --primaryShade1: #e5d1e1; + --primaryShade2: #d3b2cd; + --primaryShade3: #b984b0; + --primaryShade4: #925086; + --primaryShade5: #834879; + --secondaryColor: #a3d858; + --secondaryShade1: #e5f4d1; + --secondaryShade2: #cce9a3; + --secondaryShade3: #bce285; + --secondaryShade4: #95c550; + --secondaryShade5: #779e41; + --accentColor: #245e71; + --accentShade1: #d7e1e5; + --accentShade2: #afc4cb; + --accentShade3: #7398a4; + --accentShade4: #4b7b8a; + --accentShade5: #1e4d5d; + --accent2Color: #2aa5a1; + --accent2Shade1: #d8eeed; + --accent2Shade2: #9ed6d4; + --accent2Shade3: #64bdba; + --accent2Shade4: #279693; + --accent2Shade5: #1f7976; + --accent3Color: #92374d; + --accent3Shade1: #ebdad3; + --accent3Shade2: #cda4ae; + --accent3Shade3: #af6d7d; + --accent3Shade4: #853246; + --accent3Shade5: #6b2939; +} + +#dark + label { + background: linear-gradient(to right, #367bc3 50%, #38bfa7 50%); +} +#dark:checked ~ main { + --canvasColor: #2a313b; + --backgroundColor: #2a313b; + --foregroundColor: #ebe8d8; + --primaryColor: #367bc3; + --primaryShade5: #b5cfe9; + --primaryShade4: #91b7de; + --primaryShade3: #5a93cd; + --primaryShade2: #3270b2; + --primaryShade1: #285a8e; + --secondaryColor: #38bfa7; + --secondaryShade5: #c8ede7; + --secondaryShade4: #92dccf; + --secondaryShade3: #6ed0be; + --secondaryShade2: #33ae98; + --secondaryShade1: #2e9d89; + --accentColor: #586994; + --accentShade5: #d1d6e1; + --accentShade4: #a3adc4; + --accentShade3: #7684a7; + --accentShade2: #49567a; + --accentShade1: #39435f; + --accent2Color: #8fe1a2; + --accent2Shade5: #d6f4dd; + --accent2Shade4: #c1eecc; + --accent2Shade3: #a3e6b2; + --accent2Shade2: #82cd94; + --accent2Shade1: #76b985; + --accent3Color: #fe938c; + --accent3Shade5: #fee1df; + --accent3Shade4: #fec4c0; + --accent3Shade3: #fea6a0; + --accent3Shade2: #e78680; + --accent3Shade1: #b96b66; + color: #f1f2eb; + border-color: #f1f2eb; +} +#dark:checked ~ main > section { + border-color: #f1f2eb; +} +#dark:checked ~ main > section > h6 { + color: #f1f2eb; +} + +#pinkaru + label { + background: linear-gradient(to right, #f95794 50%, #323da5 50%); +} +#pinkaru:checked ~ main { + border-color: #fff; + --canvasColor: #2a313b; + --backgroundColor: #2a313b; + --foregroundColor: #e3f2fd; + --primaryColor: #f95794; + --primaryShade5: #fdd1e1; + --primaryShade4: #fba3c4; + --primaryShade3: #fa75a7; + --primaryShade2: #e35087; + --primaryShade1: #b6406c; + --secondaryColor: #323da5; + --secondaryShade5: #c7cae6; + --secondaryShade4: #8f95cd; + --secondaryShade3: #6971bd; + --secondaryShade2: #2e3896; + --secondaryShade1: #293288; + --accentColor: #FFC729; + --accentShade5: #ffefc4; + --accentShade4: #ffe08a; + --accentShade3: #ffd14f; + --accentShade2: #e8b526; + --accentShade1: #d1a322; + --accent2Color: #53dd6c; + --accent2Shade5: #d0f5d6; + --accent2Shade4: #a1ecae; + --accent2Shade3: #72e386; + --accent2Shade2: #4cc963; + --accent2Shade1: #3da14f; + --accent3Color: #f52f57; + --accent3Shade5: #fcc6d1; + --accent3Shade4: #f98da3; + --accent3Shade3: #f65475; + --accent3Shade2: #df2b50; + --accent3Shade1: #b32340; +} +#pinkaru:checked ~ main > section { + border-color: #fff; +} +#pinkaru:checked ~ main > section > h6 { + color: #fff; +} + +footer { + display: grid; + text-align: center; + width: 90%; + margin: 1em auto 4em; + max-width: 800px; + align-items: center; +} +footer a { + text-decoration: none; + color: #333; + padding: 3px 0; + border-bottom: 1px dashed; +} +footer a:hover { + border-bottom: 1px solid; +} +footer .social a { + text-decoration: none !important; + margin-top: 20px; + margin-left: 10px; + border-bottom: 0; + display: inline-block; +} +footer .social a:hover { + color: #666; +} +footer .social a .icons { + display: inline-block; + font-size: 20px; +} +footer.dark, footer.dark a { + color: #f9f9f9; +} + +.profile { + position: relative; + background: var(--backgroundColor); + color: var(--foregroundColor); + box-shadow: 0 3px 15px rgba(51, 51, 51, 0.2); + border-radius: 10px; + transition: .2s ease; +} +.profile__image img { + width: 100%; + height: 100%; + object-fit: cover; +} +.profile__stats__title { + color: var(--grayColor); + text-transform: uppercase; + font-size: 16px; +} +.profile a:hover { + top: 0; + box-shadow: none; + background: var(--primaryShade4); +} +.profile a:active, .profile a:focus { + top: 0; + box-shadow: none; + background: var(--primaryShade5); +} + +.profile-default { + min-width: 400px; + max-width: 450px; + margin: auto; + overflow: hidden; + display: grid; + grid: 340px auto auto/repeat(3, minmax(80px, 1fr)); + grid-gap: 10px; +} +.profile-default .profile__image { + grid-column: span 3; +} +.profile-default .profile__image img { + border-bottom: 7px solid var(--secondaryColor); +} +.profile-default .profile__info { + grid-column: span 3; + margin: 20px 25px 0; +} +.profile-default .profile__stats { + margin: 5px 25px; +} +.profile-default .profile__cta { + grid-column: span 3; + margin: 0 25px 25px; +} + +.profile-smallimg { + width: 300px; + border-radius: 10px; + text-align: center; + display: grid; + grid-template-columns: 1fr; + grid-gap: 10px; + text-align: center; +} +.profile-smallimg .profile__image { + margin-top: -40px; +} +.profile-smallimg .profile__image img { + width: 120px; + height: 120px; + border-radius: 50%; + border: 5px solid var(--backgroundColor); + box-shadow: 0 0 0 7px var(--secondaryColor); +} +.profile-smallimg .profile__info { + margin: 10px 30px 15px; +} +.profile-smallimg .profile__stats { + margin: 0 30px 10px; +} +.profile-smallimg .profile__stats:nth-of-type(n+4) { + display: none; +} +.profile-smallimg .profile__cta a { + border-radius: 0 0 10px 10px; +} + +.profile-long { + display: grid; + grid-template-columns: repeat(4, 1fr) 100px; + padding: 20px 20px 15px; + min-width: 570px; +} +.profile-long .profile__image { + grid-column: 5 / 6; + margin-bottom: 10px; +} +.profile-long .profile__image img { + border-radius: 50%; + width: 100px; + height: 100px; +} +.profile-long .profile__info { + grid-column: 1 / 5; + grid-row: 1; + padding: 5px 20px 20px 0; +} +.profile-long .profile__stats { + min-width: 100px; + padding-top: 20px; + border-top: 0.5px solid var(--grayColor); +} +.profile-long .profile__cta { + grid-column: span 2; + border-top: 0.5px solid var(--grayColor); + padding-top: 15px; +} + +.profile-table { + display: grid; + max-width: 780px; + grid-template-columns: 100px 1fr auto; + grid-auto-flow: dense; + overflow: hidden; +} +.profile-table .profile__image { + grid-column: 1; +} +.profile-table .profile__stats { + display: none; +} +.profile-table .profile__info { + grid-column: 2 / 5; + padding: 20px 15px 20px 20px; +} +.profile-table .profile__cta { + grid-column: 5 / 6; + align-self: center; + padding-right: 25px; +} + +.profile-wide { + display: grid; + grid-template-columns: auto repeat(3, 1fr); + grid-auto-flow: dense; + min-width: 500px; + max-width: 590px; +} +.profile-wide .profile__image { + padding: 30px 20px 20px; + grid-row: 1 / 3; +} +.profile-wide .profile__image img { + width: 120px; + height: 120px; + border-radius: 50%; + border: 3px solid var(--backgroundColor); + box-shadow: 0 0 0 4px var(--secondaryColor); +} +.profile-wide .profile__stats { + margin-bottom: 12px; +} +.profile-wide .profile__info { + grid-column: span 3; + padding: 25px 25px 15px 0; +} +.profile-wide .profile__cta { + grid-column: span 4; +} +.profile-wide .profile__cta a { + border-radius: 0 0 10px 10px; +} + +.profile-imgonly { + border-radius: 10px; + overflow: hidden; + width: 300px; + display: grid; + grid: 390px 0px / 100%; +} +.profile-imgonly:hover { + grid: 334px 56px / 100%; +} +.profile-imgonly .profile__image, .profile-imgonly .profile__info { + grid-row: 1 / 2; + grid-column: 1 / 2; +} +.profile-imgonly .profile__image { + position: relative; +} +.profile-imgonly .profile__image:after { + content: ''; + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 30%; + background: linear-gradient(to top, rgba(0, 0, 0, 0.65), rgba(0, 0, 0, 0)); +} +.profile-imgonly .profile__stats { + display: none; +} +.profile-imgonly .profile__info { + z-index: 5; + grid-row: 1 / 2; + align-self: end; + margin: 10px 20px; + color: #fff; + text-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); +} +.profile-imgonly .profile__info p { + display: none; +} +.profile-imgonly .profile__cta a { + border-radius: 0; +} + +.profile-bigimg { + display: grid; + grid-template-columns: repeat(3, 1fr); + grid-template-rows: 400px auto 0px; + border-radius: 10px; + width: 650px; + overflow: hidden; + margin: auto; +} +.profile-bigimg .profile__image { + grid-column: span 3; +} +.profile-bigimg .profile__info { + grid-column: span 2; + align-self: center; + padding: 20px 10px 20px 25px; +} +.profile-bigimg .profile__info h3 { + margin-bottom: 0; +} +.profile-bigimg .profile__info__extra { + max-height: 0; + overflow: hidden; + opacity: 0; + transition: max-height .3s ease, opacity .3s ease .3s, margin .3s ease; +} +.profile-bigimg .profile__stats { + display: none; +} +.profile-bigimg .profile__cta { + padding: 20px 20px 20px 0; + align-self: center; +} +.profile-bigimg:hover .profile__info__extra { + display: block; + max-height: 200px; + margin: 10px 0 0; + opacity: 1; +} + +main { + display: grid; + grid-gap: 30px; + grid-template-columns: repeat(6, auto); + grid-template-rows: repeat(4, auto); + width: 550px; + justify-content: center; +} + +section:nth-child(1) { + grid-column: 1 / 3; + justify-self: end; + align-self: end; +} +section:nth-child(2) { + grid-column: 3 / 5; +} +section:nth-child(3) { + grid-column: 5 / 7; + align-self: end; +} +section:nth-child(4) { + grid-column: 1 / 7; + justify-self: center; +} +section:nth-child(5) { + grid-column: 1 / 4; + justify-self: end; +} +section:nth-child(6) { + grid-column: 4 / 7; + align-self: center; +} +section:nth-child(7) { + grid-column: 1 / 7; +} + +#dark:checked ~ main a.button, +#pinkaru:checked ~ main a.button { + color: var(--foregroundColor); + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); +} +#dark:checked ~ main .button:hover, +#pinkaru:checked ~ main .button:hover { + background: var(--primaryShade2); +} +#dark:checked ~ main .button:active, +#pinkaru:checked ~ main .button:active { + background: var(--primaryShade1); +} +#dark:checked ~ main .profile-default img, +#pinkaru:checked ~ main .profile-default img { + border-bottom: 7px solid var(--secondaryShade5); +} +#dark:checked ~ main .profile-smallimg img, +#pinkaru:checked ~ main .profile-smallimg img { + box-shadow: 0 0 0 7px var(--secondaryShade5); +} +#dark:checked ~ main .profile-wide img, +#pinkaru:checked ~ main .profile-wide img { + box-shadow: 0 0 0 4px var(--secondaryShade5); +} diff --git a/css-grid-card-variations/license.txt b/css-grid-card-variations/license.txt new file mode 100644 index 0000000..c24af30 --- /dev/null +++ b/css-grid-card-variations/license.txt @@ -0,0 +1,13 @@ + + + + diff --git a/css-grid-card-variations/src/index.pug b/css-grid-card-variations/src/index.pug new file mode 100644 index 0000000..d9af485 --- /dev/null +++ b/css-grid-card-variations/src/index.pug @@ -0,0 +1,53 @@ +input#bluepurple.variation(type="radio" value="1" name="color" checked) +label(for="bluepurple") + +input#sunset.variation(type="radio" value="2" name="color") +label(for="sunset") + +input#godiva.variation(type="radio" value="3" name="color") +label(for="godiva") + +input#dark.variation(type="radio" value="4" name="color") +label(for="dark") + +input#pinkaru.variation(type="radio" value="5" name="color") +label(for="pinkaru") + + +main + each val in ['profile-imgonly','profile-default','profile-smallimg','profile-table','profile-wide','profile-long', 'profile-bigimg'] + section + .profile(class= val) + .profile__image + img(src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/567707/dog.png" alt="Doggo") + .profile__info + h3 Doggo Dogg + p.profile__info__extra A very good boi that loves playing fetch and ice-cream! Gentle with everyone. Scared of the rain. + .profile__stats + p.profile__stats__title Type + h5.profile__stats__info Puppy + .profile__stats + p.profile__stats__title Size + h5 Medium + .profile__stats + p.profile__stats__title Weight + h5.profile__stats__info 45.85 lbs + .profile__cta + a.button Adopt Doggo! + + + +footer + .explanation + | A continuation of + a(href="https://codepen.io/oliviale/full/mgWjpq" target="_blank") this style guide + | . Also part of the + a(href="https://codepen.io/collection/DQvYpQ" target="_blank") CSS Grid collection + | . + .social + a(href="https://twitter.com/meowlivia_" target="_blank") + i.icon-social-twitter.icons + a(href="https://github.com/oliviale" target="_blank") + i.icon-social-github.icons + a(href="https://dribbble.com/oliviale" target="_blank") + i.icon-social-dribbble.icons \ No newline at end of file diff --git a/css-grid-card-variations/src/style.scss b/css-grid-card-variations/src/style.scss new file mode 100644 index 0000000..4c2f848 --- /dev/null +++ b/css-grid-card-variations/src/style.scss @@ -0,0 +1,930 @@ +:root { + --canvasColor: #f9f9f9; +} + +body { + background: var(--canvasColor); + font-family: "Poppins", sans-serif; + font-weight: 300; + line-height: 1.5; + font-size: 16px; + text-align: center; + transition: all .3s ease; +} + +* { + box-sizing: border-box; +} + +main { + --neutralShade1: #f2f2f2; + --neutralShade2: #e8e9e9; + --neutralShade3: #d1d3d4; + --neutralShade4: #babdbf; + --neutralShade5: #808488; + --neutralShade6: #666a6d; + --neutralShade7: #4d5052; + --neutralShade8: #212122; + + --grayColor: #999; + --lightGrayColor: #ddd; + + --borderRadius: 6px; + --boxShadow: 0 2px 5px rgba(#333, 0.2); +} + +/*overall layout*/ + +main { + margin: 3em auto 8em; + color: var(--foregroundColor); + text-align: left; +} + +/*colors*/ +.palette { + display: grid; + grid: 80px 45px min-content / repeat(5, minmax(50px, 1fr)); + margin-bottom: 1em; + &__main { + grid-column: span 5; + } + h5 { + grid-column: span 5; + text-align: left; + padding: 10px 0; + } + &.main { + div:nth-child(1) { + background: var(--primaryColor); + } + div:nth-child(2) { + background: var(--primaryShade1); + } + div:nth-child(3) { + background: var(--primaryShade2); + } + div:nth-child(4) { + background: var(--primaryShade3); + } + div:nth-child(5) { + background: var(--primaryShade4); + } + div:nth-child(6) { + background: var(--primaryShade5); + } + } + &.secondary { + div:nth-child(1) { + background: var(--secondaryColor); + } + div:nth-child(2) { + background: var(--secondaryShade1); + } + div:nth-child(3) { + background: var(--secondaryShade2); + } + div:nth-child(4) { + background: var(--secondaryShade3); + } + div:nth-child(5) { + background: var(--secondaryShade4); + } + div:nth-child(6) { + background: var(--secondaryShade5); + } + } + &.accent1 { + div:nth-child(1) { + background: var(--accentColor); + } + div:nth-child(2) { + background: var(--accentShade1); + } + div:nth-child(3) { + background: var(--accentShade2); + } + div:nth-child(4) { + background: var(--accentShade3); + } + div:nth-child(5) { + background: var(--accentShade4); + } + div:nth-child(6) { + background: var(--accentShade5); + } + } + &.accent2 { + div:nth-child(1) { + background: var(--accent2Color); + } + div:nth-child(2) { + background: var(--accent2Shade1); + } + div:nth-child(3) { + background: var(--accent2Shade2); + } + div:nth-child(4) { + background: var(--accent2Shade3); + } + div:nth-child(5) { + background: var(--accent2Shade4); + } + div:nth-child(6) { + background: var(--accent2Shade5); + } + } + &.accent3 { + div:nth-child(1) { + background: var(--accent3Color); + } + div:nth-child(2) { + background: var(--accent3Shade1); + } + div:nth-child(3) { + background: var(--accent3Shade2); + } + div:nth-child(4) { + background: var(--accent3Shade3); + } + div:nth-child(5) { + background: var(--accent3Shade4); + } + div:nth-child(6) { + background: var(--accent3Shade5); + } + } + &.neutrals { + grid-template-rows: repeat(2, 50px) min-content; + grid-template-columns: repeat(4, 1fr); + div:nth-child(1) { + background: var(--neutralShade1); + } + div:nth-child(2) { + background: var(--neutralShade2); + } + div:nth-child(3) { + background: var(--neutralShade3); + } + div:nth-child(4) { + background: var(--neutralShade4); + } + div:nth-child(5) { + background: var(--neutralShade5); + grid-row: 2; + } + div:nth-child(6) { + background: var(--neutralShade6); + grid-row: 2; + } + div:nth-child(7) { + background: var(--neutralShade7); + grid-row: 2; + } + div:nth-child(8) { + background: var(--neutralShade8); + grid-row: 2; + } + } +} + +/*typography*/ +strong { + font-weight: 500; +} + +em { + font-style: italic; +} + +h1 { + font: 700 48px/1.2 "Poppins", sans-serif; + margin-bottom: 10px; +} + +h2 { + font: 700 32px/1.2 "Poppins", sans-serif; + margin-bottom: 10px; +} + +h3 { + font: 700 24px/1.2 "Poppins", sans-serif; + margin-bottom: 10px; +} + +h4 { + font: 700 20px/1.2 "Poppins", sans-serif; + margin-bottom: 10px; +} + +h5 { + font: 500 18px/1.2 "Poppins", sans-serif; + margin-bottom: 10px; +} + +h6 { + font: 500 16px/1.2 "Poppins", sans-serif; + text-transform: uppercase; +} + +/*buttons & links*/ + +a.button { + outline: none; + width: 100%; + text-align: center; + display: inline-block; + border: none; + font: 500 16px/1 "Poppins", sans-serif; + padding: 20px; + cursor: pointer; + border-radius: var(--borderRadius); + background: var(--primaryColor); + color: var(--backgroundColor); + position: relative; + top: 0; + transition: 0.2s ease; + &:hover, + &.hover { + top: -3px; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15); + } + &:active, + &.active { + background: var(--primaryShade4); + outline: none; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + top: 0; + } + &.disabled { + opacity: 0.4; + user-select: none; + pointer-events: none; + } + &.medium { + padding: 15px 18px; + width: auto; + margin-right: 20px; + margin-bottom: 20px; + } + &.small { + padding: 10px 12px; + width: auto; + font-size: 14px; + font-weight: 500; + } + &.secondary { + background: var(--secondaryColor); + &:active, + &:focus, + &.active { + background: var(--secondaryShade4); + outline: none; + } + } + &.accent { + background: var(--accentColor); + &:active, + &:focus, + &.active { + background: var(--accentShade4); + } + } + &.accent2 { + background: var(--accent2Color); + &:active, + &:focus, + &.active { + background: var(--accent2Shade4); + } + } + &.accent3 { + background: var(--accent3Color); + &:active, + &:focus, + &.active { + background: var(--accent3Shade4); + } + } +} + +/*variations*/ +input.variation { + display: none; + + label { + display: inline-block; + width: 50px; + height: 50px; + margin: 70px 20px 20px; + border-radius: 50%; + cursor: pointer; + border: 6px solid #fff; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.2); + } +} + +#bluepurple { + + label { + background: linear-gradient(to left, #673ab7 50%, #03a9f4 50%); + } + &:checked ~ main { + --backgroundColor: #fff; + --foregroundColor: #111; + --primaryColor: #03a9f4; + --primaryShade1: #e1f5fe; + --primaryShade2: #b3e5fc; + --primaryShade3: #4fc3f7; + --primaryShade4: #0288d1; + --primaryShade5: #0277bd; + --secondaryColor: #673ab7; + --secondaryShade1: #ede7f6; + --secondaryShade2: #d1c4e9; + --secondaryShade3: #9575cd; + --secondaryShade4: #512da8; + --secondaryShade5: #311b92; + --accentColor: #009688; + --accentShade1: #e0f2f1; + --accentShade2: #b2dfdb; + --accentShade3: #4db6ac; + --accentShade4: #00796b; + --accentShade5: #004d40; + --accent2Color: #8bc34a; + --accent2Shade1: #e7f6d5; + --accent2Shade2: #c5e1a5; + --accent2Shade3: #aed581; + --accent2Shade4: #689f38; + --accent2Shade5: #558b2f; + --accent3Color: #f44336; + --accent3Shade1: #ffdde0; + --accent3Shade2: #ffcdd2; + --accent3Shade3: #ef9a9a; + --accent3Shade4: #d32f2f; + --accent3Shade5: #b71c1c; + } +} + +#sunset { + + label { + background: linear-gradient(to right, #ff9557 50%, #ffcc67 50%); + } + &:checked ~ main { + --canvasColor: #f9f9f9; + --backgroundColor: #fff; + --foregroundColor: #111; + --primaryColor: #ff9557; + --primaryShade1: #ffe2d1; + --primaryShade2: #ffceb2; + --primaryShade3: #ffb184; + --primaryShade4: #e88850; + --primaryShade5: #d17a48; + --secondaryColor: #ffcc67; + --secondaryShade1: #fff1d5; + --secondaryShade2: #ffde9e; + --secondaryShade3: #ffd074; + --secondaryShade4: #e8ba5e; + --secondaryShade5: #ba954b; + --accentColor: #4e5166; + --accentShade1: #cecfd5; + --accentShade2: #aeafb9; + --accentShade3: #8e909d; + --accentShade4: #6e7081; + --accentShade5: #404354; + --accent2Color: #588b8b; + --accent2Shade1: #c2d4d4; + --accent2Shade2: #a3bfbf; + --accent2Shade3: #85aaaa; + --accent2Shade4: #507f7f; + --accent2Shade5: #497272; + --accent3Color: #fe5f55; + --accent3Shade1: #fec4c1; + --accent3Shade2: #fea7a2; + --accent3Shade3: #fe7c73; + --accent3Shade4: #e7574e; + --accent3Shade5: #b9463e; + } +} + +#godiva { + + label { + background: linear-gradient(to right, #a05793 50%, #a3d858 50%); + } + &:checked ~ main { + --canvasColor: #f9f9f9; + --backgroundColor: #fff; + --foregroundColor: #111; + + --primaryColor: #a05793; + --primaryShade1: #e5d1e1; + --primaryShade2: #d3b2cd; + --primaryShade3: #b984b0; + --primaryShade4: #925086; + --primaryShade5: #834879; + + --secondaryColor: #a3d858; + --secondaryShade1: #e5f4d1; + --secondaryShade2: #cce9a3; + --secondaryShade3: #bce285; + --secondaryShade4: #95c550; + --secondaryShade5: #779e41; + + --accentColor: #245e71; + --accentShade1: #d7e1e5; + --accentShade2: #afc4cb; + --accentShade3: #7398a4; + --accentShade4: #4b7b8a; + --accentShade5: #1e4d5d; + + --accent2Color: #2aa5a1; + --accent2Shade1: #d8eeed; + --accent2Shade2: #9ed6d4; + --accent2Shade3: #64bdba; + --accent2Shade4: #279693; + --accent2Shade5: #1f7976; + + --accent3Color: #92374d; + --accent3Shade1: #ebdad3; + --accent3Shade2: #cda4ae; + --accent3Shade3: #af6d7d; + --accent3Shade4: #853246; + --accent3Shade5: #6b2939; + } +} + +#dark { + + label { + background: linear-gradient(to right, #367bc3 50%, #38bfa7 50%); + } + &:checked ~ main { + --canvasColor: #2a313b; + --backgroundColor: #2a313b; + --foregroundColor: #ebe8d8; + + --primaryColor: #367bc3; + --primaryShade5: #b5cfe9; + --primaryShade4: #91b7de; + --primaryShade3: #5a93cd; + --primaryShade2: #3270b2; + --primaryShade1: #285a8e; + + --secondaryColor: #38bfa7; + --secondaryShade5: #c8ede7; + --secondaryShade4: #92dccf; + --secondaryShade3: #6ed0be; + --secondaryShade2: #33ae98; + --secondaryShade1: #2e9d89; + + --accentColor: #586994; + --accentShade5: #d1d6e1; + --accentShade4: #a3adc4; + --accentShade3: #7684a7; + --accentShade2: #49567a; + --accentShade1: #39435f; + + --accent2Color: #8fe1a2; + --accent2Shade5: #d6f4dd; + --accent2Shade4: #c1eecc; + --accent2Shade3: #a3e6b2; + --accent2Shade2: #82cd94; + --accent2Shade1: #76b985; + + --accent3Color: #fe938c; + --accent3Shade5: #fee1df; + --accent3Shade4: #fec4c0; + --accent3Shade3: #fea6a0; + --accent3Shade2: #e78680; + --accent3Shade1: #b96b66; + color: #f1f2eb; + border-color: #f1f2eb; + > section { + border-color: #f1f2eb; + > h6 { + color: #f1f2eb; + } + } + } +} + +#pinkaru { + + label { + background: linear-gradient(to right, #f95794 50%, #323da5 50%); + } + &:checked ~ main { + border-color: #fff; + > section { + border-color: #fff; + > h6 { + color: #fff; + } + } + --canvasColor: #2a313b; + --backgroundColor: #2a313b; + --foregroundColor: #e3f2fd; + + --primaryColor: #f95794; + --primaryShade5: #fdd1e1; + --primaryShade4: #fba3c4; + --primaryShade3: #fa75a7; + --primaryShade2: #e35087; + --primaryShade1: #b6406c; + + --secondaryColor: #323da5; + --secondaryShade5: #c7cae6; + --secondaryShade4: #8f95cd; + --secondaryShade3: #6971bd; + --secondaryShade2: #2e3896; + --secondaryShade1: #293288; + + --accentColor: #FFC729; + --accentShade5: #ffefc4; + --accentShade4: #ffe08a; + --accentShade3: #ffd14f; + --accentShade2: #e8b526; + --accentShade1: #d1a322; + + --accent2Color: #53dd6c; + --accent2Shade5: #d0f5d6; + --accent2Shade4: #a1ecae; + --accent2Shade3: #72e386; + --accent2Shade2: #4cc963; + --accent2Shade1: #3da14f; + + --accent3Color: #f52f57; + --accent3Shade5: #fcc6d1; + --accent3Shade4: #f98da3; + --accent3Shade3: #f65475; + --accent3Shade2: #df2b50; + --accent3Shade1: #b32340; + } +} + + +footer { + display: grid; + text-align: center; + width: 90%; + margin: 1em auto 4em; + max-width: 800px; + align-items: center; + a { + text-decoration: none; + color: #333; + padding: 3px 0; + border-bottom: 1px dashed; + &:hover { + border-bottom: 1px solid; + } + } + .social a { + text-decoration: none !important; + margin-top: 20px; + margin-left: 10px; + border-bottom: 0; + display: inline-block; + &:hover { + color: #666; + } + .icons { + display: inline-block; + font-size: 20px; + } + } + &.dark, &.dark a { + color: #f9f9f9; + } +} + + + + +.profile { + position: relative; + background: var(--backgroundColor); + color: var(--foregroundColor); + box-shadow: 0 3px 15px rgba(#333,0.2); + border-radius: 10px; + transition: .2s ease; + &__image { + img { + width: 100%; + height: 100%; + object-fit: cover; + } + } + &__stats { + &__title { + color: var(--grayColor); + text-transform: uppercase; + font-size: 16px; + } + } + a { + &:hover { + top: 0; + box-shadow: none; + background: var(--primaryShade4); + } + &:active, &:focus { + top: 0; + box-shadow: none; + background: var(--primaryShade5); + } + } +} + +.profile-default { + min-width: 400px; + max-width: 450px; + margin: auto; + overflow: hidden; + display: grid; + grid: 340px auto auto / repeat(3,minmax(80px,1fr)); + grid-gap: 10px; + .profile__image { + grid-column: span 3; + img { + border-bottom: 7px solid var(--secondaryColor); + } + } + .profile__info { + grid-column: span 3; + margin: 20px 25px 0; + } + .profile__stats { + margin: 5px 25px; + } + .profile__cta { + grid-column: span 3; + margin: 0 25px 25px; + } +} + +.profile-smallimg { + width: 300px; + border-radius: 10px; + text-align: center; + display: grid; + grid-template-columns: 1fr; + grid-gap: 10px; + text-align: center; + .profile__image { + margin-top: -40px; + img { + width: 120px; + height: 120px; + border-radius: 50%; + border: 5px solid var(--backgroundColor); + box-shadow: 0 0 0 7px var(--secondaryColor); + } + } + .profile__info { + margin: 10px 30px 15px; + } + .profile__stats { + margin: 0 30px 10px; + &:nth-of-type(n+4) { + display: none; + } + } + .profile__cta { + a { + border-radius: 0 0 10px 10px; + } + } +} + +.profile-long { + display: grid; + grid-template-columns: repeat(4,1fr) 100px; + padding: 20px 20px 15px; + min-width: 570px; + .profile__image { + grid-column: 5 / 6; + margin-bottom: 10px; + img { + border-radius: 50%; + width: 100px; + height: 100px; + } + } + .profile__info { + grid-column: 1 / 5; + grid-row: 1; + padding: 5px 20px 20px 0; + } + .profile__stats { + min-width: 100px; + padding-top: 20px; + border-top: .5px solid var(--grayColor); + } + .profile__cta { + grid-column: span 2; + border-top: .5px solid var(--grayColor); + padding-top: 15px; + } +} + +.profile-table { + display: grid; + max-width: 780px; + grid-template-columns: 100px 1fr auto; + grid-auto-flow: dense; + overflow: hidden; + .profile__image { + grid-column: 1; + } + .profile__stats { + display: none; + } + .profile__info { + grid-column: 2 / 5; + padding: 20px 15px 20px 20px; + } + .profile__cta { + grid-column: 5 / 6; + align-self: center; + padding-right: 25px; + } +} + +.profile-wide { + display: grid; + grid-template-columns: auto repeat(3,1fr); + grid-auto-flow: dense; + min-width: 500px; + max-width: 590px; + .profile__image { + padding: 30px 20px 20px; + grid-row: 1 / 3; + img { + width: 120px; + height: 120px; + border-radius: 50%; + border: 3px solid var(--backgroundColor); + box-shadow: 0 0 0 4px var(--secondaryColor); + } + } + .profile__stats { + margin-bottom: 12px; + } + .profile__info { + grid-column: span 3; + padding: 25px 25px 15px 0; + } + .profile__cta { + grid-column: span 4; + a { + border-radius: 0 0 10px 10px; + } + } +} + +.profile-imgonly { + border-radius: 10px; + overflow: hidden; + width: 300px; + display: grid; + grid: 390px 0px / 100%; + &:hover { + grid: 334px 56px / 100%; + } + .profile__image, .profile__info { + grid-row: 1 / 2; + grid-column: 1 / 2; + } + .profile__image { + position: relative; + &:after { + content: ''; + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 30%; + background: linear-gradient(to top, rgba(0,0,0,0.65),rgba(0,0,0,0)); + } + } + .profile__stats { + display: none; + } + .profile__info { + z-index: 5; + grid-row: 1 / 2; + align-self: end; + margin: 10px 20px; + color: #fff; + text-shadow: 0 1px 4px rgba(0,0,0,0.2); + p { + display: none; + } + } + .profile__cta a { + border-radius: 0; + } +} + +.profile-bigimg { + display: grid; + grid-template-columns: repeat(3,1fr); + grid-template-rows: 400px auto 0px; + border-radius: 10px; + width: 650px; + overflow: hidden; + margin: auto; + .profile__image { + grid-column: span 3; + } + .profile__info { + grid-column: span 2; + align-self: center; + padding: 20px 10px 20px 25px; + h3 { + margin-bottom: 0; + } + &__extra { + max-height: 0; + overflow: hidden; + opacity: 0; + transition: max-height .3s ease, opacity .3s ease .3s, margin .3s ease; + } + } + .profile__stats { + display: none; + } + .profile__cta { + padding: 20px 20px 20px 0; + align-self: center; + } + &:hover { + .profile__info__extra { + display: block; + max-height: 200px; + margin: 10px 0 0; + opacity: 1; + } + } +} + +main { + display: grid; + grid-gap: 30px; + grid-template-columns: repeat(6,auto); + grid-template-rows: repeat(4,auto); + width: 550px; + justify-content: center; +} + +section { + &:nth-child(1) { + grid-column: 1 / 3; + justify-self: end; + align-self: end; + } + &:nth-child(2) { + grid-column: 3 / 5; + } + &:nth-child(3) { + grid-column: 5 / 7; + align-self: end; + } + &:nth-child(4) { + grid-column: 1 / 7; + justify-self: center; + } + &:nth-child(5) { + grid-column: 1 / 4; + justify-self: end; + } + &:nth-child(6) { + grid-column: 4 / 7; + align-self: center; + } + &:nth-child(7) { + grid-column: 1 / 7; + } + +} + +#dark, +#pinkaru { + &:checked ~ main { + a.button { + color: var(--foregroundColor); + text-shadow: 0 1px 2px rgba(0,0,0,0.1); + } + .button:hover { + background: var(--primaryShade2); + } + .button:active { + background: var(--primaryShade1); + } + .profile-default img { + border-bottom: 7px solid var(--secondaryShade5); + } + .profile-smallimg img { + box-shadow: 0 0 0 7px var(--secondaryShade5); + } + .profile-wide img { + box-shadow: 0 0 0 4px var(--secondaryShade5); + } + } +} \ No newline at end of file diff --git a/css-grid-newspaper-layout/README.markdown b/css-grid-newspaper-layout/README.markdown new file mode 100644 index 0000000..d575c03 --- /dev/null +++ b/css-grid-newspaper-layout/README.markdown @@ -0,0 +1,7 @@ +# CSS Grid: Newspaper Layout + +A Pen created on CodePen.io. Original URL: [https://codepen.io/oliviale/pen/BaoXOOP](https://codepen.io/oliviale/pen/BaoXOOP). + +"Young" front-end designer lmao. + +Background from [Subtle Patterns](https://www.toptal.com/designers/subtlepatterns/) diff --git a/css-grid-newspaper-layout/dist/index.html b/css-grid-newspaper-layout/dist/index.html new file mode 100644 index 0000000..121b748 --- /dev/null +++ b/css-grid-newspaper-layout/dist/index.html @@ -0,0 +1,80 @@ + + + + + CodePen - CSS Grid: Newspaper Layout + + + + + + + +
    +
    +

    The Codepen Times

    + +

    Woman spends too much time on Codepens despite advice; no plans to stop

    +
    +

    Sometimes, Internet users land themselves in an uncommon situation where an app or website can be used for both work and personal situations. Well, a young front-end designer was spending up to 13 hours on the site, Codepen for work and her hobby, which unfortunately, is also coding.

    +

    The designer, whose work includes a To-Do Terrarium, clarified, "Well, I didn't have to use it for work but it was already part of my workflow. It just made sense as it was more efficient." The biggest issue, she said, is that she would hop on Codepen for work, but would get distracted by pens made by others in the community for unexpectedly long periods of time, which then causes her to spend even more time on the site.

    +

    "I mean, that's terrible right?" she asked. Codepen, which brands itself as the best place to build, test, and discover front-end code, has declined to comment at this time.

    +
    +
    +
    A to-do list that grows succulents when you've completed a task
    +
    +

    Can you get inspired to make your own floor plans?

    +
    +

    Making a floor Plan with CSS Grid? Talk about using the wrong tool for the job. But I guess this is what happens when someone isn't happy with any of the floor plans found on Pinterest; she'll start making her own for the eventual home that she will never own. Nevertheless, there's a home office with a large window to look out of pensively during rainy days and a ton of "white space" for the cats to run around.

    +
    +
    50% Off Hogwarts Express tickets
    +
    Limited time offer
    +

    A pasta menu

    +

    Everybody loves pasta. It's impossible to not love them, so here are 15 recipes, served with GSAP. Note the easter egg โ€” the menu icon changes according to the pasta that you choose.

    +

    Marvel at a magazine

    +

    A tribute of sorts to an era of cool superhero movies, this is a Marvel-themed magazine! Recommended, because it took 45 hours, so you know some serious dedication has been poured into this.

    +

    Let's adopt, don't shop.

    +

    Explore a style guide and various page layouts for a pet adoption site in the Style Guide collection. Inspired by the Atomic Design principle, this 8-pen collection includes a 404 page concept, an admin dashboard and what a Twitter user calls a 'media card zen garden'. Each pen comes with five (yes, five) color themes, including the precious dark mode.

    +

    Toggles

    +

    Eight playful toggles to toggle on and off for your amusement. Is it possible to use these on your site and still adhere to assessibility rules? No. But there's a really cute dog one you have to see.

    +
    +
    See the new and improved menu for Toasty!
    +
    +
    +
    +

    More CSS Grid things like this one. Shelves, coupons and more!

    +
    +

    Get your fill of more CSS Grid items in this collection. There are a total of 32 pens to date... well, 33, if you count this one too. What can you expect in this collection? The hidden gems, in my totally unbiased opinion, are the recreation of the Pac-Man layout and coupons inspired by junk mail. A lot of joke items of things that shouldn't be done in CSS Grid, such as a shelf? Bathroom tiles wtf? and makeup palettes . If you are a cultured person, you will have a chance to enjoy a couple of pens inspired by Harry Potter and Pokemon. On the rare occasion that you are looking at this profile for something you can use in production, you really shouldn't. But, there are some real-world applications, such as the recipe layout, the product catalog, and color palettes for a style guide.

    +
    +
    +
    + +
    +
    + + + + + diff --git a/css-grid-newspaper-layout/dist/script.js b/css-grid-newspaper-layout/dist/script.js new file mode 100644 index 0000000..5824fe5 --- /dev/null +++ b/css-grid-newspaper-layout/dist/script.js @@ -0,0 +1 @@ +// ๐Ÿฆ trash panda ๐Ÿฆ \ No newline at end of file diff --git a/css-grid-newspaper-layout/dist/style.css b/css-grid-newspaper-layout/dist/style.css new file mode 100644 index 0000000..f10f6bf --- /dev/null +++ b/css-grid-newspaper-layout/dist/style.css @@ -0,0 +1,599 @@ +:root { + --font: "EB Garamond", serif; + --font-title: "Playfair Display", serif; + --font-sans-serif: "Manrope", sans-serif; + --black: #1c1f33; + --gray: #eee; + --gray-1: #ededed; +} + +* { + box-sizing: border-box; +} + +body { + font-size: 1.1rem; + background: var(--preview-bg); + font-family: var(--font); + color: var(--black); + background: url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/567707/paper_fibers.png) repeat; + padding: 4rem 2rem; + line-height: 1.3; + text-align: justify; + column-break-inside: avoid; +} + +a { + text-decoration: none; + display: block; + color: var(--black); +} +a:hover, a:focus, a:active, a:visited { + color: var(--black); +} + +.main__wrapper { + max-width: 1135px; + margin: auto; +} + +h1 { + font: 50px/1 "Playfair Display SC"; + text-align: center; +} +@media (min-width: 700px) { + h1 { + font: 70px/1 "Playfair Display SC"; + } +} + +h3 { + font: italic 20px var(--font-title); + margin-bottom: 1rem; +} + +h4 { + font: 20px/1.2 var(--font-title); +} + +h5 { + font: 700 20px/1 var(--font); + transition: 0.3s ease; +} + +p { + line-height: 1.3; +} +p a { + display: inline; +} + +em { + font-style: italic; +} + +.title--large { + font-family: var(--font-title); + font-size: 32px; + font-style: italic; + text-align: left; + margin-bottom: 0.8rem; +} +@media (min-width: 700px) { + .title--large { + font-size: 42px; + margin: 0; + } +} + +@media (min-width: 700px) { + main { + display: grid; + grid-template-columns: repeat(4, 1fr) 23%; + grid-template-rows: repeat(5, auto); + grid-gap: 1.2rem; + } +} +main h1, +main aside { + grid-column: 1 / -1; +} +@media (min-width: 700px) { + main .main-title { + grid-column: 1 / -1; + } +} +@media (min-width: 1024px) { + main .main-title { + grid-column: 1 / -2; + } +} +@media (min-width: 700px) { + main .terrarium { + grid-column: 1 / -1; + } +} +@media (min-width: 1024px) { + main .terrarium { + grid-column: 3 / span 2; + } +} +@media (min-width: 700px) { + main .main-text { + grid-column: span 5; + } +} +@media (min-width: 1024px) { + main .main-text { + grid-column: span 2; + } +} +@media (min-width: 700px) { + main .sidebar { + grid-column: 1 / -1; + } +} +@media (min-width: 1024px) { + main .sidebar { + grid-row: 3 / 9; + grid-column: 5 / 6; + } +} +main .social { + grid-column: 1 / -2; + grid-row: 8 / 9; +} +main .article-bar-1 { + grid-row: span 4; +} +@media (min-width: 700px) { + main .hogwarts { + grid-row: span 3; + } +} +@media (min-width: 1024px) { + main .hogwarts { + grid-column: 3; + grid-row: span 2; + } +} +@media (min-width: 700px) { + main .menu { + grid-column: 1 / -1; + grid-row: 13; + } +} +@media (min-width: 1024px) { + main .menu { + grid-row: 7 / 8; + grid-column: 2 / 4; + } +} +@media (min-width: 700px) and (max-width: 1024px) { + main .toggles { + grid-column: 3 / 6; + grid-row: 10 / 13; + } +} +@media (min-width: 700px) and (max-width: 1024px) { + main .plan { + grid-column: span 4; + } +} +@media (min-width: 700px) and (max-width: 1024px) { + main .style, + main .magazine, + main .pasta { + grid-column: 1 / 3; + } +} +main .cssgrid-collection { + grid-column: 1 / -1; + grid-row: 9; +} + +.span--2 { + grid-column: span 2; +} + +.long--2 { + grid-row: span 2; +} + +.long--4 { + grid-row: span 4; +} + +.with-border { + border-top: 1px solid; + padding-top: 0.6rem; +} + +img { + width: 100%; + filter: grayscale(95%); + margin-bottom: 0.5rem; + border: 1px solid var(--black); + transition: 0.3s ease; +} + +figcaption { + font-style: italic; + font-size: 90%; +} + +aside { + text-align: center; + padding: 3px 0; + border: solid var(--black); + border-width: 2px 0; + text-transform: uppercase; + letter-spacing: 1px; + margin: 1.5rem 0; +} +@media (min-width: 700px) { + aside { + margin: 0; + } +} +aside > div { + display: flex; + align-items: center; + border: solid var(--black); + border-width: 1px 0; +} +aside > div > div { + flex: 1; + padding: 8px; +} + +@media (min-width: 700px) { + .multi-column { + column-count: 2; + column-gap: 1.3rem; + margin-top: 0.75rem; + } + .multi-column-3 { + column-count: 3; + } +} +.sidebar { + margin-top: 3rem; +} +@media (min-width: 700px) and (max-width: 1024px) { + .sidebar { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: flex-start; + margin: 0; + } + .sidebar h3 { + width: 100%; + text-align: center; + } + .sidebar > a { + flex: 0 1 48%; + margin: 1.5rem 0; + padding: 0; + } + .sidebar .slack-ui { + border-top: 0; + } + .sidebar .pie { + order: 3; + } +} +@media (min-width: 1024px) { + .sidebar { + display: block; + border-left: 1px solid; + padding-left: 1.2rem; + margin: 0; + } +} + +.main-text.multi-column { + margin: 0; +} +.main-text.multi-column p { + margin-bottom: 0.8rem; +} + +.hogwarts { + text-align: center; + height: 100%; + border: 2px solid transparent; + outline: 3px solid var(--black); + box-shadow: inset 0 0 0 1px var(--black); + width: calc(100% - 4px); + margin: 1.5rem auto; + overflow: hidden; +} +@media (min-width: 700px) { + .hogwarts { + margin: 0; + } +} +.hogwarts__title { + font: 800 24px/1 var(--font-sans-serif); + text-transform: uppercase; + background: var(--black); + color: var(--gray); + padding: 0.8rem 0.8rem 0.9rem; + transition: 0.2s ease; +} +@media (min-width: 700px) and (max-width: 1024px) { + .hogwarts__title { + font: 800 21px/1.2 var(--font-sans-serif); + padding: 1.5rem 0.5rem; + } +} +.hogwarts__image { + height: 100%; + position: relative; +} +.hogwarts__image img { + transform: rotate(60deg); + height: 150%; + position: absolute; + border: 0; + width: 250%; + left: -70%; + bottom: -35%; +} +@media (min-width: 700px) and (max-width: 1024px) { + .hogwarts__image img { + bottom: -20%; + } +} +.hogwarts__image span { + font-style: italic; + max-width: 110px; + position: absolute; + top: 7%; + left: 18%; + font-size: 22px; + line-height: 0.9; + transform: rotate(-5deg); +} + +.terrarium { + margin: 1.5rem 0; +} +@media (min-width: 700px) { + .terrarium { + margin: 0 0 1.5rem; + } +} +.terrarium figure { + height: 100%; +} +.terrarium img { + height: 96%; + object-fit: cover; + object-position: right; +} + +.pie { + line-height: 0; + color: var(--gray); + text-align: left; +} +.pie__image { + margin: 0; + border: 0; + max-height: 15rem; + object-fit: cover; +} +.pie__subtitle { + background: #999; + text-transform: uppercase; + line-height: 1; + padding: 0.4rem 1rem; + font: 14px var(--font-sans-serif); + color: var(--gray); +} +.pie__content { + background: #666; + padding: 1rem 1rem 1.2rem; + color: var(--gray); +} +.pie__content p { + margin-top: 0.5rem; +} + +.sidebar-item { + margin: 2rem 0; + padding: 2rem 0 0; +} +.sidebar-item h5 { + text-align: center; + width: 100%; + padding: .5rem; + margin: auto; +} +.sidebar-item p { + margin-top: 1rem; +} +.sidebar-item:hover h5 { + transition: 0.3s ease; + background: var(--black); + color: #fff; +} + +.item-with-image { + margin-top: 1.5rem; +} +.item-with-image h4 { + font-size: 24px; + text-align: left; + margin-bottom: 0.5rem; + transition: 0.2s ease; +} +@media (min-width: 700px) { + .item-with-image { + margin: 0; + } +} +.item-with-image:not(.cssgrid-collection):hover h4 { + color: white !important; + background: var(--black); +} + +.magazine { + border: 1px solid; + border-width: 1px 0; + padding-bottom: 1rem; +} + +.menu { + margin: 1.5rem 0; +} +@media (min-width: 1024px) { + .menu { + margin: 0; + } +} +.menu figure { + height: 100%; +} +.menu img { + height: 90%; + object-fit: cover; + object-position: left; +} + +.cssgrid-collection { + display: flex; + align-content: stretch; + border-top: 1px solid; + padding-top: 1rem; +} +.cssgrid-collection h4 { + margin: 0 0 0.8rem; +} +.cssgrid-collection__image { + flex: 0 0 32%; + margin-right: 1.5rem; +} +.cssgrid-collection img { + height: 100%; + object-fit: cover; + object-position: left; +} +.cssgrid-collection p a { + border-bottom: 1px dashed; +} +.cssgrid-collection p a:hover { + border-bottom: 1px solid; +} + +@media (min-width: 1024px) { + .captcha { + margin-top: 0; + } +} + +.workout { + border: 2px solid transparent; + outline: 3px solid var(--black); + box-shadow: inset 0 0 0 1px var(--black); + width: calc(100% - 4px); + margin: 3rem auto 0.2rem; +} +.workout__image { + padding: 2px; +} +.workout__image img { + height: 16rem; + object-fit: cover; + object-position: left; + border: none; +} +@media (min-width: 1024px) { + .workout__image img { + height: 25rem; + } +} +.workout__blurb { + font: 22px/1.1 var(--font-sans-serif); + text-align: center; + padding: 0.5rem; + color: var(--black); + margin: -1rem 0.5rem 0.3rem; +} +.workout__title { + font: 18px/1.1 var(--font-sans-serif); + text-transform: uppercase; + text-align: center; + padding: 1rem; + background: var(--black); + color: var(--gray); + transition: 0.2s ease; +} + +.social { + display: grid; + grid-template-columns: 1fr 3fr; + grid-template-rows: max-content auto; + color: var(--gray); + text-align: left; +} +.social__image { + margin: 0; + border: 0; + grid-row: span 2; + height: 100%; + object-fit: cover; +} +.social__subtitle { + background: #999; + text-transform: uppercase; + line-height: 1; + padding: 0.4rem 1rem; + color: var(--gray); + font: 14px var(--font-sans-serif); +} +.social__content { + background: #666; + padding: 1rem; + color: var(--gray); + grid-column: 2; +} + +.plan { + padding-bottom: 1rem; +} +@media (min-width: 700px) and (max-width: 1024px) { + .plan { + grid-column: span 3; + margin: 0 0 1.5rem; + } +} +@media (min-width: 1024px) { + .plan { + border-bottom: 1px solid; + } +} + +.pie:hover img, +.social:hover img, +.menu:hover img, +.terrarium:hover img, +.plan:hover img, +.toggles:hover img, +.workout:hover img, +.cssgrid-collection__image:hover img { + filter: grayscale(0); +} + +.workout:hover .workout__title { + background: transparent; + color: var(--black); +} + +.hogwarts:hover .hogwarts__title { + background: transparent; + color: var(--black); +} \ No newline at end of file diff --git a/css-grid-newspaper-layout/license.txt b/css-grid-newspaper-layout/license.txt new file mode 100644 index 0000000..659b397 --- /dev/null +++ b/css-grid-newspaper-layout/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Olivia Ng (https://codepen.io/oliviale/pen/BaoXOOP) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/css-grid-newspaper-layout/src/index.pug b/css-grid-newspaper-layout/src/index.pug new file mode 100644 index 0000000..e1978c9 --- /dev/null +++ b/css-grid-newspaper-layout/src/index.pug @@ -0,0 +1,134 @@ +.main__wrapper + main + h1 The Codepen Times + aside + div + .issue Issue #1 + .date Tuesday, 26 May, 2020 + .edition Two memes Edition + + h2.title--large.main-title Woman spends too much time on Codepens despite advice; no plans to stop + .main-text.multi-column + p Sometimes, Internet users land themselves in an uncommon situation where an app or website can be used for both work and personal situations. Well, a young front-end designer was spending up to 13 hours on the site, Codepen for work and her hobby, which unfortunately, is also coding. + p The designer, whose work includes a + em To-Do Terrarium + | , clarified, "Well, I didn't + em have + | to use it for work but it was already part of my workflow. It just made sense as it was more efficient." The biggest issue, she said, is that she would hop on Codepen for work, but would get distracted by pens made by others in the community for unexpectedly long periods of time, which then causes her to spend even more time on the site. + p "I mean, that's terrible right?" she asked. Codepen, which brands itself as the best place to build, test, and discover front-end code, has declined to comment at this time. + + a(href="https://codepen.io/oliviale/full/oNXJgEM" target="_blank").terrarium + figure + img(src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/567707/showcase-terrarium.jpg") + figcaption A to-do list that grows succulents when you've completed a task + + a(href="https://codepen.io/oliviale/full/moLrBq" target="_blank").item-with-image.plan.span--2.long--2 + img(src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/567707/showcase-floorplan.jpg") + h4 Can you get inspired to make your own floor plans? + div.multi-column + p Making a floor Plan with CSS Grid? Talk about using the wrong tool for the job. But I guess this is what happens when someone isn't happy with any of the floor plans found on Pinterest; she'll start making her own for the eventual home that she will never own. Nevertheless, there's a home office with a large window to look out of pensively during rainy days and a ton of "white space" for the cats to run around. + + a(href="https://codepen.io/oliviale/full/MZZYyO" target="_blank").hogwarts + .hogwarts__title 50% Off Hogwarts Express tickets + .hogwarts__image + span Limited time offer + img(src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/567707/showcase-hogwarts.svg") + + a(href="https://codepen.io/oliviale/full/zYvxXWw" target="_blank").item-with-image.pasta.with-border + h4 A pasta menu + p Everybody loves pasta. It's impossible to not love them, so here are 15 recipes, served with GSAP. Note the easter egg โ€” the menu icon changes according to the pasta that you choose. + + + a(href="https://codepen.io/oliviale/full/GRKQoKM" target="_blank").item-with-image.magazine.with-border + h4 Marvel at a magazine + p A tribute of sorts to an era of cool superhero movies, this is a Marvel-themed magazine! Recommended, because it took 45 hours, so you know some serious dedication has been poured into this. + + + a(href="https://codepen.io/collection/XJyNPm" target="_blank").item-with-image.style + h4 Let's adopt, don't shop. + p Explore a style guide and various page layouts for a pet adoption site in the + em Style Guide + | collection. Inspired by the + em Atomic Design + | principle, this 8-pen collection includes a 404 page concept, an admin dashboard and what a Twitter user calls a 'media card zen garden'. Each pen comes with five (yes, five) color themes, including the precious dark mode. + + a(href="https://codepen.io/oliviale/full/xxboXzo" target="_blank").item-with-image.toggles + img(src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/567707/showcase-toggle.gif") + h4 Toggles + p Eight playful toggles to toggle on and off for your amusement. Is it possible to use these on your site and still adhere to assessibility rules? No. But there's a really cute dog one you + em have + | to see. + + + + a(href="https://codepen.io/oliviale/full/LYYrKMV" target="_blank").menu + figure + img(src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/567707/showcase-menu.jpg") + figcaption See the new and improved menu for Toasty! + + + a(href="https://codepen.io/oliviale/full/QWjjrZX" tagrget="_blank").social + img.social__image(src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/567707/showcase-social.gif") + .social__subtitle World News + .social__content Looks like Covid-19 is gonna be around for a while so here is another friendly reminder to practice social distancing. Oh, and wear a mask! + + .item-with-image.cssgrid-collection + a(href="https://codepen.io/collection/DQvYpQ" target="_blank").cssgrid-collection__image + img(src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/567707/showcase-co-grid.jpg") + .cssgrid-collection__content + h4 + a(href="https://codepen.io/collection/DQvYpQ" target="_blank") More CSS Grid things like this one. Shelves, coupons and more! + div.multi-column-3 + p Get your fill of more CSS Grid items in this collection. There are a total of 32 pens to date... well, 33, if you count this one too. What can you expect in this collection? The hidden gems, in my totally unbiased opinion, are + a(href="https://codepen.io/oliviale/full/wbyVWr" target="_blank") the recreation of the Pac-Man layout + | and + a(href="https://codepen.io/oliviale/pen/wbyVWr" target="_blank") coupons inspired by junk mail + |. A lot of joke items of things that shouldn't be done in CSS Grid, such as + a(href="https://codepen.io/oliviale/full/PXGgMG" target="_blank") a shelf + | ? + a(href="https://codepen.io/oliviale/full/qggOog" target="_blank") Bathroom tiles wtf + | ? and + a(href="https://codepen.io/oliviale/full/bOWqbj" target="_blank") makeup palettes + | . If you are a cultured person, you will have a chance to enjoy a couple of pens inspired by + a(href="https://codepen.io/oliviale/full/JxVZpX" target="_blank") Harry Potter + | and + a(href="https://codepen.io/oliviale/full/RwNdeeQ" target="_blank") Pokemon. + | On the rare occasion that you are looking at this profile for something you can use in production, you really shouldn't. But, there are + em some + | real-world applications, such as + a(href="https://codepen.io/oliviale/full/GPXozx" target="_blank") the recipe layout + | , + a(href="https://codepen.io/oliviale/full/pqoEoJ" target="_blank") the product catalog + |, and + a(href="https://codepen.io/oliviale/full/XyqQYL" target="_blank") color palettes for a style guide + | . + + + + + .sidebar + h3.title--big Hot this month + + a(href="https://codepen.io/oliviale/full/BaovGmg" target="_blank").codepen-item.pie + img.pie__image(src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/567707/showcase-pie.jpg") + .pie__subtitle Food + .pie__content + h4 Pies for everyone! + p No man is left behind. There's infinite pie with this one div and a repeating background. + + a(href="https://codepen.io/oliviale/full/RwWdNRd" target="_blank").sidebar-item.captcha + h5 Frustrated designer runs amok with Captcha ideas + p From Tic Tac Toe to solving meme-based questions, this is a different take on how web captchas should be. "I have not successfully picked out all photos of a truck on the first try. Something's gotta change," says the designer, who has requested to remain anonymous. + + a(href="https://codepen.io/oliviale/full/GRpvNBa" target="_blank").sidebar-item.slack-ui.with-border + h5 Slack UI gets reverse engineered + p Another valiant effort to reverse engineer a web app. However, the UI is repurposed to showcase Codepens instead of mock conversations. This is a codepen showcase inception situation. + + + + a(href="https://codepen.io/oliviale/full/RwWKybY" target="_blank").workout + .workout__image + img(src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/567707/showcase-workout.jpg" alt="Workout") + .workout__blurb Always failing to keep track of your workouts? + .workout__title Use this tool! + diff --git a/css-grid-newspaper-layout/src/script.js b/css-grid-newspaper-layout/src/script.js new file mode 100644 index 0000000..5824fe5 --- /dev/null +++ b/css-grid-newspaper-layout/src/script.js @@ -0,0 +1 @@ +// ๐Ÿฆ trash panda ๐Ÿฆ \ No newline at end of file diff --git a/css-grid-newspaper-layout/src/style.scss b/css-grid-newspaper-layout/src/style.scss new file mode 100644 index 0000000..7bbda36 --- /dev/null +++ b/css-grid-newspaper-layout/src/style.scss @@ -0,0 +1,581 @@ +:root { + --font: "EB Garamond", serif; + --font-title: "Playfair Display", serif; + --font-sans-serif: "Manrope", sans-serif; + --black: #1c1f33; + --gray: #eee; + --gray-1: #ededed; +} + +* { + box-sizing: border-box; +} + +@mixin double-border { + border: 2px solid transparent; + outline: 3px solid var(--black); + box-shadow: inset 0 0 0 1px var(--black); +} + +body { + font-size: 1.1rem; + background: var(--preview-bg); + font-family: var(--font); + color: var(--black); + background: url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/567707/paper_fibers.png) + repeat; + padding: 4rem 2rem; + line-height: 1.3; + text-align: justify; + column-break-inside: avoid; +} + +a { + text-decoration: none; + display: block; + color: var(--black); + &:hover, + &:focus, + &:active, + &:visited { + color: var(--black); + } +} + +.main__wrapper { + max-width: 1135px; + margin: auto; +} + +h1 { + font: 50px/1 "Playfair Display SC"; + text-align: center; + @media (min-width: 700px) { + font: 70px/1 "Playfair Display SC"; + } +} + +h3 { + font: italic 20px var(--font-title); + margin-bottom: 1rem; +} + +h4 { + font: 20px/1.2 var(--font-title); +} + +h5 { + font: 700 20px/1 var(--font); + transition: 0.3s ease; +} + +p { + line-height: 1.3; + a { + display: inline; + } +} + +em { + font-style: italic; +} + +.title--large { + font-family: var(--font-title); + font-size: 32px; + font-style: italic; + text-align: left; + margin-bottom: 0.8rem; + @media (min-width: 700px) { + font-size: 42px; + margin: 0; + } +} + +main { + @media (min-width: 700px) { + display: grid; + grid-template-columns: repeat(4, 1fr) 23%; + grid-template-rows: repeat(5, auto); + grid-gap: 1.2rem; + } + + h1, + aside { + grid-column: 1 / -1; + } + .main-title { + @media (min-width: 700px) { + grid-column: 1 / -1; + } + @media (min-width: 1024px) { + grid-column: 1 / -2; + } + } + .terrarium { + @media (min-width: 700px) { + grid-column: 1 / -1; + } + @media (min-width: 1024px) { + grid-column: 3 / span 2; + } + } + .main-text { + @media (min-width: 700px) { + grid-column: span 5; + } + @media (min-width: 1024px) { + grid-column: span 2; + } + } + .sidebar { + @media (min-width: 700px) { + grid-column: 1 / -1; + } + @media (min-width: 1024px) { + grid-row: 3 / 9; + grid-column: 5 / 6; + } + } + .social { + grid-column: 1 / -2; + grid-row: 8 / 9; + } + .article-bar-1 { + grid-row: span 4; + } + .hogwarts { + @media (min-width: 700px) { + grid-row: span 3; + } + @media (min-width: 1024px) { + grid-column: 3; + grid-row: span 2; + } + } + .menu { + @media (min-width: 700px) { + grid-column: 1 / -1; + grid-row: 13; + } + @media (min-width: 1024px) { + grid-row: 7 / 8; + grid-column: 2 / 4; + } + } + .toggles { + @media (min-width: 700px) and (max-width: 1024px) { + grid-column: 3 / 6; + grid-row: 10 / 13; + } + } + .plan { + @media (min-width: 700px) and (max-width: 1024px) { + grid-column: span 4; + } + } + .style, + .magazine, + .pasta { + @media (min-width: 700px) and (max-width: 1024px) { + grid-column: 1 / 3; + } + } + .cssgrid-collection { + grid-column: 1 / -1; + grid-row: 9; + } +} + +.span--2 { + grid-column: span 2; +} + +.long--2 { + grid-row: span 2; +} + +.long--4 { + grid-row: span 4; +} + +.with-border { + border-top: 1px solid; + padding-top: 0.6rem; +} + +img { + width: 100%; + filter: grayscale(95%); + margin-bottom: 0.5rem; + border: 1px solid var(--black); + transition: 0.3s ease; +} + +figcaption { + font-style: italic; + font-size: 90%; +} + +aside { + text-align: center; + padding: 3px 0; + border: solid var(--black); + border-width: 2px 0; + text-transform: uppercase; + letter-spacing: 1px; + margin: 1.5rem 0; + @media (min-width: 700px) { + margin: 0; + } + > div { + display: flex; + align-items: center; + border: solid var(--black); + border-width: 1px 0; + > div { + flex: 1; + padding: 8px; + } + } +} + +@media (min-width: 700px) { + .multi-column { + column-count: 2; + column-gap: 1.3rem; + margin-top: 0.75rem; + &-3 { + column-count: 3; + } + } +} +.sidebar { + margin-top: 3rem; + @media (min-width: 700px) and (max-width: 1024px) { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: flex-start; + margin: 0; + h3 { + width: 100%; + text-align: center; + } + > a { + flex: 0 1 48%; + margin: 1.5rem 0; + padding: 0; + } + .slack-ui { + border-top: 0; + } + .pie { + order: 3; + } + } + @media (min-width: 1024px) { + display: block; + border-left: 1px solid; + padding-left: 1.2rem; + margin: 0; + } +} + +.main-text.multi-column { + margin: 0; + p { + margin-bottom: 0.8rem; + } +} + +.hogwarts { + text-align: center; + height: 100%; + @include double-border; + width: calc(100% - 4px); + margin: 1.5rem auto; + overflow: hidden; + @media (min-width: 700px) { + margin: 0; + } + &__title { + font: 800 24px/1 var(--font-sans-serif); + text-transform: uppercase; + background: var(--black); + color: var(--gray); + padding: 0.8rem 0.8rem 0.9rem; + transition: 0.2s ease; + @media (min-width: 700px) and (max-width: 1024px) { + font: 800 21px/1.2 var(--font-sans-serif); + padding: 1.5rem 0.5rem; + } + } + &__image { + height: 100%; + position: relative; + + img { + transform: rotate(60deg); + height: 150%; + position: absolute; + border: 0; + width: 250%; + left: -70%; + bottom: -35%; + @media (min-width: 700px) and (max-width: 1024px) { + bottom: -20%; + } + } + span { + font-style: italic; + max-width: 110px; + position: absolute; + top: 7%; + left: 18%; + font-size: 22px; + line-height: 0.9; + transform: rotate(-5deg); + } + } +} + +.terrarium { + margin: 1.5rem 0; + @media (min-width: 700px) { + margin: 0 0 1.5rem; + } + figure { + height: 100%; + } + img { + height: 96%; + object-fit: cover; + object-position: right; + } +} + +.pie { + line-height: 0; + color: var(--gray); + text-align: left; + &__image { + margin: 0; + border: 0; + max-height: 15rem; + object-fit: cover; + } + &__subtitle { + background: #999; + text-transform: uppercase; + line-height: 1; + padding: 0.4rem 1rem; + font: 14px var(--font-sans-serif); + color: var(--gray); + } + &__content { + background: #666; + padding: 1rem 1rem 1.2rem; + color: var(--gray); + p { + margin-top: 0.5rem; + } + } +} + +.sidebar-item { + margin: 2rem 0; + padding: 2rem 0 0; + h5 { + text-align: center; + width: 100%; +padding: .5rem; + margin: auto; + } + p { + margin-top: 1rem; + } + &:hover { + h5 { + transition: 0.3s ease; + background: var(--black); + color: #fff; + } + } +} + +.item-with-image { + margin-top: 1.5rem; + h4 { + font-size: 24px; + text-align: left; + margin-bottom: 0.5rem; + transition: 0.2s ease; + } + @media (min-width: 700px) { + margin: 0; + } + &:not(.cssgrid-collection):hover { + h4 { + color: white !important; + background: var(--black); + } + } + p { + } + img { + } +} + +.magazine { + border: 1px solid; + border-width: 1px 0; + padding-bottom: 1rem; +} + +.menu { + margin: 1.5rem 0; + @media (min-width: 1024px) { + margin: 0; + } + figure { + height: 100%; + } + img { + height: 90%; + object-fit: cover; + object-position: left; + } +} + +.cssgrid-collection { + display: flex; + align-content: stretch; + border-top: 1px solid; + padding-top: 1rem; + h4 { + margin: 0 0 0.8rem; + } + &__image { + flex: 0 0 32%; + margin-right: 1.5rem; + } + img { + height: 100%; + object-fit: cover; + object-position: left; + } + p a { + border-bottom: 1px dashed; + &:hover { + border-bottom: 1px solid; + } + } +} + +.captcha { + @media (min-width: 1024px) { + margin-top: 0; + } +} + +.workout { + @include double-border; + width: calc(100% - 4px); + margin: 3rem auto 0.2rem; + &__image { + padding: 2px; + img { + height: 16rem; + object-fit: cover; + object-position: left; + border: none; + @media (min-width: 1024px) { + height: 25rem; + } + } + } + &__blurb { + font: 22px/1.1 var(--font-sans-serif); + text-align: center; + padding: 0.5rem; + color: var(--black); + margin: -1rem 0.5rem 0.3rem; + } + &__title { + font: 18px/1.1 var(--font-sans-serif); + text-transform: uppercase; + text-align: center; + padding: 1rem; + background: var(--black); + color: var(--gray); + transition: 0.2s ease; + } +} + +.social { + display: grid; + grid-template-columns: 1fr 3fr; + grid-template-rows: max-content auto; + color: var(--gray); + text-align: left; + &__image { + margin: 0; + border: 0; + grid-row: span 2; + height: 100%; + object-fit: cover; + } + &__subtitle { + background: #999; + text-transform: uppercase; + line-height: 1; + padding: 0.4rem 1rem; + color: var(--gray); + font: 14px var(--font-sans-serif); + } + &__content { + background: #666; + padding: 1rem; + color: var(--gray); + grid-column: 2; + } +} + +.plan { + padding-bottom: 1rem; + @media (min-width: 700px) and (max-width: 1024px) { + grid-column: span 3; + margin: 0 0 1.5rem; + } + @media (min-width: 1024px) { + border-bottom: 1px solid; + } +} + +.pie, +.social, +.menu, +.terrarium, +.plan, +.toggles, +.workout, +.cssgrid-collection__image { + &:hover img { + filter: grayscale(0); + } +} + +.workout { + &:hover .workout__title { + background: transparent; + color: var(--black); + } +} + +.hogwarts { + &:hover .hogwarts__title { + background: transparent; + color: var(--black); + } +} diff --git a/css-grid-swiss-style-typography-poster-07/README.markdown b/css-grid-swiss-style-typography-poster-07/README.markdown new file mode 100644 index 0000000..70e834b --- /dev/null +++ b/css-grid-swiss-style-typography-poster-07/README.markdown @@ -0,0 +1,4 @@ +# [CSS Grid] Swiss-Style Typography Poster 07 + _A Pen created at CodePen.io. Original URL: [https://codepen.io/xdesro/pen/gOOeVzE](https://codepen.io/xdesro/pen/gOOeVzE). + + \ No newline at end of file diff --git a/css-grid-swiss-style-typography-poster-07/dist/index.html b/css-grid-swiss-style-typography-poster-07/dist/index.html new file mode 100644 index 0000000..01e2287 --- /dev/null +++ b/css-grid-swiss-style-typography-poster-07/dist/index.html @@ -0,0 +1,180 @@ + + + + + CodePen - [CSS Grid] Swiss-Style Typography Poster 07 + + + + + + +
    +
    +
    +

    Juni-Festwochen Zรผrich 1959

    +
    +
    +

    Stadttheater

    +
    +
    +
    +

    Schweizerische Erstauffรผhrung

    +

    + Mittwoch, 3.Juni
    20.00 Uhr +

    +
    +

    Der Sturm

    +
      +
    • Oper von Frank Martin Leitung:
    • +
    • Christian Vรถchting
    • +
    • Hans Zimmermann
    • +
    • Max Rรถthlisberger
    • +
    +
      +
    • In den Hauptrollen:
    • +
    • Ingeborg Friedrich
    • +
    • Heinz Borst
    • +
    • Jean-Pierre Genet
    • +
    • Hermann Winkler
    • +
    +
    +
    +
    +

    + Gastspiel
    Stรคdtische Oper Berlin +

    +

    + Freitag, 5.Juni
    Sonntag, 7.Juni
    20.00 Uhr +

    +
    +

    Cosi fan tutte

    +
      +
    • Komische Oper von W.A.Mozart Leitung:
    • +
    • Artur Rother
    • +
    • Carl Ebert
    • +
    • Jean Pierre Ponnelle
    • +
    +
      +
    • Elisabeth Grรผmmer
    • +
    • Lisa Otto
    • +
    • Sieglinde Wagner
    • +
    • Herbert Brauer
    • +
    • Josef Greindl
    • +
    • Ernst Hรคfliger
    • +
    +
    +
    +
    +

    + Samstag 6.Juni
    Mittwoch, 17.Juni
    20.00 Uhr +

    +
    +

    + Lucia
    di Lammermoor +

    +
      +
    • Oper von G. Donizetti Leitung:
    • +
    • Nello Santi
    • +
    • Ettore Celia
    • +
    • Max Rรถthlisberger
    • +
    +
      +
    • In den Hauptrollen:
    • +
    • Amelia Benvenuti
    • +
    • Lorenzo Sabatucci
    • +
    • Lorenzo Gaetani
    • +
    • Mario Zanasi
    • +
    +
    +
    +
    +

    + I. Programm
    11.Juni, 20.00 Uhr
    14.Juni, 20.00 Uhr +

    +

    + II. Programm
    12.Juni, 20.00 Uhr
    14.Juni, 15.00 Uhr +

    +

    + III. Programm
    13.Juni, 20.00 Uhr +

    +
    +

    Londonโ€™s Festival Ballet

    +
      +
    • + I. Programm
      Vision de Chopin
      Petruschka Etudes +
    • +
    • + II. Programm
      Concerti +
      Giselle +
    • +
    • + III. Programm
      Schwanensee II.Akt
      Le Pas de Quatre
      Variations for Four
      Don Quixote
      Polowetzer Tรคnze +
    • +
    +
      +
    • Leitung:
    • +
    • Julian Braunsweg
    • +
    • Anton Dolin
    • +
    • Geoffrey Corbett
    • +
    • mit
    • +
    • Tamara Toumanova
    • +
    • Natalie Krassovska
    • +
    • Toni Lander
    • +
    • Marilyn Burr
    • +
    • Anton Dolin
    • +
    • John Gilpin
    • +
    • +   +
      Corps de Ballet +
    • +
    +
    +
    +
    +

    + 21.Juni, 20.00 Uhr
    Das Rheingold +

    +

    + 23.Juni, 19.00 Uhr
    Die Walkรผre +

    +

    + 24.Juni, 18.00 Uhr
    Siegfried +

    +

    + 28.Juni, 18.00 Uhr
    Gรถtterdรคmmerung +

    +
    +

    + Der Ring
    des Nibelungen +

    +
      +
    • Bรผhnenfestspiel von Richard Vagner
      Leitung:
    • +
    • Robert F. Denzler
    • +
    • Karl Heinz Krahl
    • +
    • Philipp Blessing
    • +
    •  
      In den Hauptrollen:
    • +
    • Elsa Cavelti
    • +
    • Birgit Nilsson
    • +
    • Astrid Varnay
    • +
    +
      +
    • Mary Davenport
    • +
    • Hilde Koch
    • +
    • Bernd Aldenhoff
    • +
    • Kurt Bรถhme
    • +
    • Tomislav Neralic
    • +
    • Alois Pernerstorfer
    • +
    • Heinz BorstErwin Deblitz
    • +
    • Hans-Bert Dick
    • +
    • Charles Gillig
    • +
    • Franz Lechleitner
    • +
    +
    +
    +
    + + + + + diff --git a/css-grid-swiss-style-typography-poster-07/dist/script.js b/css-grid-swiss-style-typography-poster-07/dist/script.js new file mode 100644 index 0000000..39c7515 --- /dev/null +++ b/css-grid-swiss-style-typography-poster-07/dist/script.js @@ -0,0 +1 @@ +// ๐Ÿ’ซ http://i.ncredibly.online \ No newline at end of file diff --git a/css-grid-swiss-style-typography-poster-07/dist/style.css b/css-grid-swiss-style-typography-poster-07/dist/style.css new file mode 100644 index 0000000..ac9da48 --- /dev/null +++ b/css-grid-swiss-style-typography-poster-07/dist/style.css @@ -0,0 +1,66 @@ +@import url("https://rsms.me/inter/inter.css"); +*, +*:before, +*:after { + box-sizing: border-box; +} + +html { + --poster-size: 95vmin; + --ratio: 1 / 1.41; + --color--background: hsl(358, 72%, 43%); + --color--neutral: hsl(340, 43%, 1%); + --color--contrast: hsl(46, 86%, 94%); + font-family: "Inter var", sans-serif; + font-size: calc(var(--poster-size) / 100); +} + +body { + display: grid; + min-height: 100vh; + background: #030303; + place-items: center; +} + +p { + line-height: 1.2; +} +p:not(:last-child) { + margin-bottom: 1rem; +} + +.poster { + display: grid; + width: calc(var(--poster-size) * var(--ratio)); + height: var(--poster-size); + color: var(--color--neutral); + background-color: var(--color--background); +} +.poster__inner { + padding-left: 5rem; + padding-top: 3rem; + padding-right: 3rem; + max-width: 100%; +} +.poster__row { + display: grid; + grid-template-columns: 1fr 1.7fr 1fr 1fr; + grid-column-gap: 1rem; + border-top: 0.2rem solid var(--color--neutral); + padding: 1.5rem 0; + align-items: end; +} +.poster__row:last-child { + border-bottom: 0.2rem solid var(--color--neutral); +} +.poster__header { + color: var(--color--contrast); + font-size: 10rem; + margin: 2rem 0 0; + font-weight: 550; +} +.poster__subheader { + grid-column: 2; + font-weight: 500; + font-size: 3rem; +} \ No newline at end of file diff --git a/css-grid-swiss-style-typography-poster-07/license.txt b/css-grid-swiss-style-typography-poster-07/license.txt new file mode 100644 index 0000000..62fb088 --- /dev/null +++ b/css-grid-swiss-style-typography-poster-07/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2020 by Henry Desroches (https://codepen.io/xdesro/pen/gOOeVzE) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/css-grid-swiss-style-typography-poster-07/src/index.html b/css-grid-swiss-style-typography-poster-07/src/index.html new file mode 100644 index 0000000..26ad7cb --- /dev/null +++ b/css-grid-swiss-style-typography-poster-07/src/index.html @@ -0,0 +1,164 @@ +
    +
    +
    +

    Juni-Festwochen Zรผrich 1959

    +
    +
    +

    Stadttheater

    +
    +
    +
    +

    Schweizerische Erstauffรผhrung

    +

    + Mittwoch, 3.Juni
    20.00 Uhr +

    +
    +

    Der Sturm

    +
      +
    • Oper von Frank Martin Leitung:
    • +
    • Christian Vรถchting
    • +
    • Hans Zimmermann
    • +
    • Max Rรถthlisberger
    • +
    +
      +
    • In den Hauptrollen:
    • +
    • Ingeborg Friedrich
    • +
    • Heinz Borst
    • +
    • Jean-Pierre Genet
    • +
    • Hermann Winkler
    • +
    +
    +
    +
    +

    + Gastspiel
    Stรคdtische Oper Berlin +

    +

    + Freitag, 5.Juni
    Sonntag, 7.Juni
    20.00 Uhr +

    +
    +

    Cosi fan tutte

    +
      +
    • Komische Oper von W.A.Mozart Leitung:
    • +
    • Artur Rother
    • +
    • Carl Ebert
    • +
    • Jean Pierre Ponnelle
    • +
    +
      +
    • Elisabeth Grรผmmer
    • +
    • Lisa Otto
    • +
    • Sieglinde Wagner
    • +
    • Herbert Brauer
    • +
    • Josef Greindl
    • +
    • Ernst Hรคfliger
    • +
    +
    +
    +
    +

    + Samstag 6.Juni
    Mittwoch, 17.Juni
    20.00 Uhr +

    +
    +

    + Lucia
    di Lammermoor +

    +
      +
    • Oper von G. Donizetti Leitung:
    • +
    • Nello Santi
    • +
    • Ettore Celia
    • +
    • Max Rรถthlisberger
    • +
    +
      +
    • In den Hauptrollen:
    • +
    • Amelia Benvenuti
    • +
    • Lorenzo Sabatucci
    • +
    • Lorenzo Gaetani
    • +
    • Mario Zanasi
    • +
    +
    +
    +
    +

    + I. Programm
    11.Juni, 20.00 Uhr
    14.Juni, 20.00 Uhr +

    +

    + II. Programm
    12.Juni, 20.00 Uhr
    14.Juni, 15.00 Uhr +

    +

    + III. Programm
    13.Juni, 20.00 Uhr +

    +
    +

    Londonโ€™s Festival Ballet

    +
      +
    • + I. Programm
      Vision de Chopin
      Petruschka Etudes +
    • +
    • + II. Programm
      Concerti +
      Giselle +
    • +
    • + III. Programm
      Schwanensee II.Akt
      Le Pas de Quatre
      Variations for Four
      Don Quixote
      Polowetzer Tรคnze +
    • +
    +
      +
    • Leitung:
    • +
    • Julian Braunsweg
    • +
    • Anton Dolin
    • +
    • Geoffrey Corbett
    • +
    • mit
    • +
    • Tamara Toumanova
    • +
    • Natalie Krassovska
    • +
    • Toni Lander
    • +
    • Marilyn Burr
    • +
    • Anton Dolin
    • +
    • John Gilpin
    • +
    • +   +
      Corps de Ballet +
    • +
    +
    +
    +
    +

    + 21.Juni, 20.00 Uhr
    Das Rheingold +

    +

    + 23.Juni, 19.00 Uhr
    Die Walkรผre +

    +

    + 24.Juni, 18.00 Uhr
    Siegfried +

    +

    + 28.Juni, 18.00 Uhr
    Gรถtterdรคmmerung +

    +
    +

    + Der Ring
    des Nibelungen +

    +
      +
    • Bรผhnenfestspiel von Richard Vagner
      Leitung:
    • +
    • Robert F. Denzler
    • +
    • Karl Heinz Krahl
    • +
    • Philipp Blessing
    • +
    •  
      In den Hauptrollen:
    • +
    • Elsa Cavelti
    • +
    • Birgit Nilsson
    • +
    • Astrid Varnay
    • +
    +
      +
    • Mary Davenport
    • +
    • Hilde Koch
    • +
    • Bernd Aldenhoff
    • +
    • Kurt Bรถhme
    • +
    • Tomislav Neralic
    • +
    • Alois Pernerstorfer
    • +
    • Heinz BorstErwin Deblitz
    • +
    • Hans-Bert Dick
    • +
    • Charles Gillig
    • +
    • Franz Lechleitner
    • +
    +
    +
    +
    \ No newline at end of file diff --git a/css-grid-swiss-style-typography-poster-07/src/script.js b/css-grid-swiss-style-typography-poster-07/src/script.js new file mode 100644 index 0000000..39c7515 --- /dev/null +++ b/css-grid-swiss-style-typography-poster-07/src/script.js @@ -0,0 +1 @@ +// ๐Ÿ’ซ http://i.ncredibly.online \ No newline at end of file diff --git a/css-grid-swiss-style-typography-poster-07/src/style.scss b/css-grid-swiss-style-typography-poster-07/src/style.scss new file mode 100644 index 0000000..75c7b4e --- /dev/null +++ b/css-grid-swiss-style-typography-poster-07/src/style.scss @@ -0,0 +1,65 @@ +@import url("https://rsms.me/inter/inter.css"); + +*, +*:before, +*:after { + box-sizing: border-box; +} +html { + --poster-size: 95vmin; + --ratio: 1 / 1.41; // A3 + --color--background: hsl(358, 72%, 43%); + --color--neutral: hsl(340, 43%, 1%); + --color--contrast: hsl(46, 86%, 94%); + font-family: "Inter var", sans-serif; + font-size: calc(var(--poster-size) / 100); +} +body { + display: grid; + min-height: 100vh; + background: hsl(0, 0%, 1%); + place-items: center; +} +p { + line-height: 1.2; + &:not(:last-child) { + margin-bottom: 1rem; + } +} +.poster { + display: grid; + width: calc(var(--poster-size) * var(--ratio)); + height: var(--poster-size); + color: var(--color--neutral); + background-color: var(--color--background); + + &__inner { + padding-left: 5rem; + padding-top: 3rem; + padding-right: 3rem; + max-width: 100%; + } + &__row { + $border: 0.2rem solid var(--color--neutral); + display: grid; + grid-template-columns: 1fr 1.7fr 1fr 1fr; + grid-column-gap: 1rem; + border-top: $border; + padding: 1.5rem 0; + align-items: end; + &:last-child { + border-bottom: $border; + } + } + &__header { + color: var(--color--contrast); + font-size: 10rem; + margin: 2rem 0 0; + font-weight: 550; + } + &__subheader { + grid-column: 2; + font-weight: 500; + font-size: 3rem; + } +} diff --git a/css-grid-template-builder/README.markdown b/css-grid-template-builder/README.markdown new file mode 100644 index 0000000..fc757bc --- /dev/null +++ b/css-grid-template-builder/README.markdown @@ -0,0 +1,7 @@ +# CSS Grid Template Builder + +A Pen created on CodePen.io. Original URL: [https://codepen.io/anthonydugois/pen/RpYBmy](https://codepen.io/anthonydugois/pen/RpYBmy). + +A simple tool to build complex CSS Grid templates. + +CSS Grid support: [http://caniuse.com/#feat=css-grid](http://caniuse.com/#feat=css-grid) diff --git a/css-grid-template-builder/dist/index.html b/css-grid-template-builder/dist/index.html new file mode 100644 index 0000000..a676c59 --- /dev/null +++ b/css-grid-template-builder/dist/index.html @@ -0,0 +1,21 @@ + + + + + CodePen - CSS Grid Template Builder + + + + + + +
    + + + + + + + + + diff --git a/css-grid-template-builder/dist/script.js b/css-grid-template-builder/dist/script.js new file mode 100644 index 0000000..2a4d383 --- /dev/null +++ b/css-grid-template-builder/dist/script.js @@ -0,0 +1,813 @@ +function _defineProperty(obj, key, value) {if (key in obj) {Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });} else {obj[key] = value;}return obj;}const { render } = ReactDOM; +const { Component, PropTypes } = React; +const { h1, h2, div, input, textarea, a, svg, g, line, text } = styled.default; +const { darken, lighten, transparentize } = polished; +const { grid, template } = GridTemplateParser; + +// helpers +const clamp = (value, min, max) => Math.min(Math.max(value, min), max); + +// styles +const colors = { + primary: '#263238', + secondary: '#1DE9B6' }; + + +const StyledApp = div` + display: grid; + grid-template-columns: 25rem auto; + grid-template-rows: auto; + grid-template-areas: "sidebar main"; + width: 100%; + height: 100vh; +`; + +const StyledSidebar = div` + display: flex; + flex-direction: column; + grid-area: sidebar; + background: ${darken(.1, colors.primary)}; + overflow: hidden; +`; + +const StyledMain = div` + display: flex; + flex-direction: column; + grid-area: main; + padding: 2rem; + background: ${darken(.05, colors.primary)}; +`; + +const StyledMainInner = div` + flex: 1; + position: relative; +`; + +const StyledGrid = svg` + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; +`; + +const StyledGridText = text` + font-family: 'Roboto Mono', monospace; + font-weight: 500; + font-size: 1rem; + text-anchor: middle; + alignment-baseline: middle; + fill: ${transparentize(.75, colors.secondary)}; +`; + +const StyledGridLine = line` + stroke: ${darken(.01, colors.primary)}; + stroke-width: 1px; +`; + +const StyledPreview = div` + z-index: 5; + position: relative; + display: grid; + grid-template-columns: repeat(${props => props.width}, 1fr); + grid-template-rows: repeat(${props => props.height}, 1fr); + grid-template-areas: ${props => props.tpl}; + width: 100%; + height: 100%; +`; + +const StyledTrack = div` + position: relative; + grid-area: ${props => props.area}; + cursor: ${(props) => +props.grabbing ? 'grabbing' : 'grab'}; + background: ${transparentize(.97, colors.secondary)}; +`; + +const StyledHandler = div` + position: absolute; + top: ${({ position }) => +position === 'bottom' ? 'auto' : 0}; + right: ${({ position }) => +position === 'left' ? 'auto' : 0}; + bottom: ${({ position }) => +position === 'top' ? 'auto' : 0}; + left: ${({ position }) => +position === 'right' ? 'auto' : 0}; + width: ${({ position, size }) => +position === 'left' || position === 'right' ? size : '100%'}; + height: ${({ position, size }) => +position === 'top' || position === 'bottom' ? size : '100%'}; + cursor: ${({ position }) => +position === 'left' || position === 'right' ? 'col-resize' : 'row-resize'}; + background: ${colors.secondary}; +`; + +const StyledHint = div` + padding: 2rem; +`; + +const StyledHintTitle = h1` + padding-bottom: 1rem; + font-weight: 500; + font-size: 1.5rem; + color: ${colors.secondary}; +`; + +const StyledHintDescription = div` + line-height: 1.6; + font-size: 1rem; + color: ${lighten(.6, colors.primary)}; +`; + +const StyledTemplate = div` + flex: 1; + display: flex; + flex-direction: column; + padding: 2rem; +`; + +const StyledTemplateTitle = h2` + padding-bottom: 1.5rem; + text-transform: uppercase; + font-size: .85rem; + font-weight: 500; + color: ${colors.secondary}; + letter-spacing: .1rem; +`; + +const StyledTemplateControl = div` + flex: 1; +`; + +const StyledTemplateInput = textarea` + width: 100%; + height: 100%; + padding: 2rem; + background: ${darken(.125, colors.primary)}; + border-radius: 2px; + border: none; + resize: none; + line-height: 1.5; + font-family: 'Roboto Mono', monospace; + font-size: .85rem; + color: #fff; + transition: background .2s; + + &:focus { + outline: 0; + background: ${darken(.15, colors.primary)}; + } +`; + +const StyledSettings = div` + display: flex; + align-items: center; + justify-content: center; + padding-bottom: 2rem; + + &::before, + &::after { + content: ''; + flex: 1; + display: block; + height: 1px; + background: ${colors.primary}; + } +`; + +const StyledSettingDivider = div` + text-align: center; + font-family: 'Roboto Mono'; + font-weight: 500; + font-size: 1.05rem; + color: ${lighten(.05, colors.primary)}; +`; + +const StyledSettingInput = input` + width: 4rem; + padding: .4rem .6rem; + margin: 0 .75rem; + background: ${darken(.1, colors.primary)}; + border: none; + border-radius: 2px; + text-align: center; + font-family: 'Roboto Mono'; + font-size: .8rem; + color: #fff; + transition: background .2s; + + &:focus { + outline: 0; + background: ${darken(.125, colors.primary)}; + } +`; + +const StyledFoot = div` + padding: 0 2rem 2rem; +`; + +const StyledLink = a` + display: flex; + align-items: center; + justify-content: center; + text-decoration: none; + font-weight: 500; + font-size: .8rem; + color: ${colors.secondary}; + transition: color .2s; + + &:hover { + color: #fff; + } + &::before, + &::after { + content: ''; + flex: 1; + display: block; + height: 1px; + background: ${colors.primary}; + } + &::before { + margin-right: .75rem; + } + &::after { + margin-left: .75rem; + } +`; + +function Sidebar(props) { + return /*#__PURE__*/( + React.createElement(StyledSidebar, null, /*#__PURE__*/ + React.createElement(Hint, null), /*#__PURE__*/ + React.createElement(Template, props), /*#__PURE__*/ + React.createElement(Foot, null))); + + +} + +function Hint() { + return /*#__PURE__*/( + React.createElement(StyledHint, null, /*#__PURE__*/ + React.createElement(StyledHintTitle, null, "CSS Grid Template Builder"), /*#__PURE__*/ + + + React.createElement(StyledHintDescription, null, "A simple tool to build complex CSS Grid templates. Edit the template string below or drag the areas in the preview. The changes will reflect in both sides."))); + + + + + + +} + +function Foot() { + return /*#__PURE__*/( + React.createElement(StyledFoot, null, /*#__PURE__*/ + React.createElement(StyledLink, { href: "https://twitter.com/a_dugois", target: "_blank" }, "Follow me on Twitter!"))); + + + + +} + +function Template({ tpl, setTracks }) { + return /*#__PURE__*/( + React.createElement(StyledTemplate, null, /*#__PURE__*/ + React.createElement(StyledTemplateTitle, null, "Template areas"), /*#__PURE__*/ + + + React.createElement(StyledTemplateControl, null, /*#__PURE__*/ + React.createElement(Text, { value: tpl, onBlur: setTracks }, + props => /*#__PURE__*/React.createElement(StyledTemplateInput, props))))); + + + + +} + +function Main({ tpl, width, height, areas, setArea, setWidth, setHeight }) { + return /*#__PURE__*/( + React.createElement(StyledMain, null, /*#__PURE__*/ + React.createElement(Settings, { + width: width, + height: height, + setWidth: setWidth, + setHeight: setHeight }), /*#__PURE__*/ + React.createElement(StyledMainInner, null, /*#__PURE__*/ + React.createElement(Grid, { + width: width, + height: height, + areas: areas }), /*#__PURE__*/ + React.createElement(Preview, { + tpl: tpl, + width: width, + height: height, + areas: areas, + setArea: setArea })))); + + + +} + +function Settings({ width, height, setWidth, setHeight }) { + return /*#__PURE__*/( + React.createElement(StyledSettings, null, /*#__PURE__*/ + React.createElement(Text, { value: width, onBlur: setWidth }, + props => /*#__PURE__*/React.createElement(StyledSettingInput, props)), /*#__PURE__*/ + + React.createElement(StyledSettingDivider, null, "x"), /*#__PURE__*/ + React.createElement(Text, { value: height, onBlur: setHeight }, + props => /*#__PURE__*/React.createElement(StyledSettingInput, props)))); + + + +} + +function Track({ area, column, row, grabbing, onMouseDown, onHandlerMouseDown }) { + return /*#__PURE__*/( + React.createElement(StyledTrack, { + area: area, + grabbing: grabbing, + onMouseDown: onMouseDown }, /*#__PURE__*/ + React.createElement(Handler, { position: "top", onMouseDown: onHandlerMouseDown('top') }), /*#__PURE__*/ + React.createElement(Handler, { position: "right", onMouseDown: onHandlerMouseDown('right') }), /*#__PURE__*/ + React.createElement(Handler, { position: "bottom", onMouseDown: onHandlerMouseDown('bottom') }), /*#__PURE__*/ + React.createElement(Handler, { position: "left", onMouseDown: onHandlerMouseDown('left') }))); + + +} + +function Handler({ position, onMouseDown }) { + return /*#__PURE__*/( + React.createElement(StyledHandler, { + size: "6px", + position: position, + onMouseDown: onMouseDown })); + +} + +class App extends Component {constructor(...args) {super(...args);_defineProperty(this, "state", + { + tracks: { + width: 4, + height: 6, + areas: { + head: { + column: { start: 1, end: 5, span: 4 }, + row: { start: 1, end: 2, span: 1 } }, + + aside: { + column: { start: 1, end: 2, span: 1 }, + row: { start: 2, end: 4, span: 2 } }, + + main: { + column: { start: 2, end: 5, span: 3 }, + row: { start: 2, end: 6, span: 4 } }, + + foot: { + column: { start: 1, end: 5, span: 4 }, + row: { start: 6, end: 7, span: 1 } } } } });_defineProperty(this, "setTracks", + + + + + + evt => { + this.setState(() => ({ tracks: grid(evt.target.value) })); + });_defineProperty(this, "integer", + + (value, previous, min, max) => { + const int = parseInt(value); + const safe = isNaN(int) ? previous : clamp(int, min, max); + + return safe; + });_defineProperty(this, "setWidth", + + evt => { + this.setState(({ tracks }) => ({ + tracks: { + ...tracks, + width: this.integer(evt.target.value, tracks.width, 1, 100) } })); + + + });_defineProperty(this, "setHeight", + + evt => { + this.setState(({ tracks }) => ({ + tracks: { + ...tracks, + height: this.integer(evt.target.value, tracks.height, 1, 100) } })); + + + });_defineProperty(this, "setArea", + + (key, value) => { + this.setState(({ tracks }) => ({ + tracks: { + ...tracks, + areas: { + ...tracks.areas, + [key]: value } } })); + + + + });} + + render() { + const { tracks } = this.state; + const { width, height, areas } = tracks; + const tpl = template(tracks); + + return /*#__PURE__*/( + React.createElement(StyledApp, null, /*#__PURE__*/ + React.createElement(Sidebar, { + tpl: tpl, + setTracks: this.setTracks }), /*#__PURE__*/ + React.createElement(Main, { + tpl: tpl, + width: width, + height: height, + areas: areas, + setArea: this.setArea, + setWidth: this.setWidth, + setHeight: this.setHeight }))); + + + }} + + +class Text extends Component {constructor(...args) {super(...args);_defineProperty(this, "state", + + + + + + + + { + isFocused: false, + value: this.props.value });_defineProperty(this, "handleFocus", + + + + + + + evt => { + evt.persist(); + + this.props.onFocus(evt); + this.setState(() => ({ isFocused: true })); + });_defineProperty(this, "handleBlur", + + evt => { + evt.persist(); + + this.props.onBlur(evt); + this.setState(() => ({ isFocused: false })); + });_defineProperty(this, "handleChange", + + evt => { + evt.persist(); + + const { value } = evt.target; + + this.props.onChange(evt); + this.setState(() => ({ value })); + });}componentWillReceiveProps({ value }) {this.setState(() => ({ value }));} + + render() { + const { isFocused } = this.state; + const value = isFocused ? this.state.value : this.props.value; + + return this.props.children({ + value, + onFocus: this.handleFocus, + onBlur: this.handleBlur, + onChange: this.handleChange }); + + }}_defineProperty(Text, "defaultProps", { value: '', onFocus: () => {}, onBlur: () => {}, onChange: () => {} }); + + +class Preview extends Component { + constructor() { + super();_defineProperty(this, "state", + + + + + + { + isDragging: false, + draggedArea: null, + draggedPosition: null });_defineProperty(this, "handleMouseUp", + + + + + + + + + + + + + evt => { + if (this.state.isDragging) { + this.setState(() => ({ + isDragging: false, + draggedArea: null, + draggedPosition: null })); + + } + });_defineProperty(this, "handleMouseMove", + + evt => { + const { width, height } = this.props; + const { isDragging, draggedArea, draggedPosition } = this.state; + + if (isDragging) { + const rect = this.node.getBoundingClientRect(); + const x = Math.round((evt.clientX - rect.left) / rect.width * width); + const y = Math.round((evt.clientY - rect.top) / rect.height * height); + + switch (true) { + case typeof draggedPosition === 'string': + return this.moveHandler(x, y); + case typeof draggedArea === 'string': + return this.moveTrack(x, y);} + + } + });_defineProperty(this, "makeTrackMouseDown", + + draggedArea => evt => { + evt.preventDefault(); + + const { width, height, areas } = this.props; + const area = areas[draggedArea]; + const rect = this.node.getBoundingClientRect(); + + const x = Math.round((evt.clientX - rect.left) / rect.width * width); + const y = Math.round((evt.clientY - rect.top) / rect.height * height); + + this.dx = x - area.column.start + 1; + this.dy = y - area.row.start + 1; + + this.setState(() => ({ isDragging: true, draggedArea })); + });_defineProperty(this, "makeHandlerMouseDown", + + draggedArea => draggedPosition => evt => { + evt.preventDefault(); + this.setState(() => ({ isDragging: true, draggedArea, draggedPosition })); + });_defineProperty(this, "moveTrack", + + (x, y) => { + const { width, height, areas, setArea } = this.props; + const { draggedArea } = this.state; + const area = areas[draggedArea]; + + const top = this.findAdjacentArea('top', draggedArea); + const right = this.findAdjacentArea('right', draggedArea); + const bottom = this.findAdjacentArea('bottom', draggedArea); + const left = this.findAdjacentArea('left', draggedArea); + + const columnStart = clamp( + x - this.dx + 1, + typeof left === 'string' ? areas[left].column.end : 1, + (typeof right === 'string' ? areas[right].column.start : width + 1) - area.column.span); + + + const rowStart = clamp( + y - this.dy + 1, + typeof top === 'string' ? areas[top].row.end : 1, + (typeof bottom === 'string' ? areas[bottom].row.start : height + 1) - area.row.span); + + + if (columnStart !== area.column.start || rowStart !== area.row.start) { + const columnEnd = columnStart + area.column.span; + const rowEnd = rowStart + area.row.span; + + return setArea(draggedArea, { + column: { + ...area.column, + start: columnStart, + end: columnEnd }, + + row: { + ...area.row, + start: rowStart, + end: rowEnd } }); + + + } + });_defineProperty(this, "moveHandler", + + (x, y) => { + const { width, height, areas, setArea } = this.props; + const { draggedPosition, draggedArea } = this.state; + const area = areas[draggedArea]; + const adj = this.findAdjacentArea(draggedPosition, draggedArea); + + if (draggedPosition === 'top') { + const start = clamp( + y + 1, + typeof adj === 'string' ? areas[adj].row.end : 1, + area.row.end - 1); + + + return setArea(draggedArea, { + ...area, + row: { + ...area.row, + span: area.row.end - start, + start } }); + + + } + + if (draggedPosition === 'right') { + const end = clamp( + x + 1, + area.column.start + 1, + typeof adj === 'string' ? areas[adj].column.start : width + 1); + + + return setArea(draggedArea, { + ...area, + column: { + ...area.column, + span: end - area.column.start, + end } }); + + + } + + if (draggedPosition === 'bottom') { + const end = clamp( + y + 1, + area.row.start + 1, + typeof adj === 'string' ? areas[adj].row.start : height + 1); + + + return setArea(draggedArea, { + ...area, + row: { + ...area.row, + span: end - area.row.start, + end } }); + + + } + + if (draggedPosition === 'left') { + const start = clamp( + x + 1, + typeof adj === 'string' ? areas[adj].column.end : 1, + area.column.end - 1); + + + return setArea(draggedArea, { + ...area, + column: { + ...area.column, + span: area.column.end - start, + start } }); + + + } + });_defineProperty(this, "findAdjacentArea", + + (direction, area) => { + const { areas } = this.props; + const { column, row } = areas[area]; + const keys = Object.keys(areas); + + if (direction === 'top') { + return keys.find((key) => + areas[key].row.end === row.start && + areas[key].column.start < column.end && + areas[key].column.end > column.start); + + } + + if (direction === 'right') { + return keys.find((key) => + areas[key].column.start === column.end && + areas[key].row.start < row.end && + areas[key].row.end > row.start); + + } + + if (direction === 'bottom') { + return keys.find((key) => + areas[key].row.start === row.end && + areas[key].column.start < column.end && + areas[key].column.end > column.start); + + } + + if (direction === 'left') { + return keys.find((key) => + areas[key].column.end === column.start && + areas[key].row.start < row.end && + areas[key].row.end > row.start); + + } + });this.dx = 0;this.dy = 0;}componentDidMount() {document.addEventListener('mouseup', this.handleMouseUp);document.addEventListener('mousemove', this.handleMouseMove);}componentWillUnmount() {document.removeEventListener('mouseup', this.handleMouseUp);document.removeEventListener('mousemove', this.handleMouseMove);} + + render() { + const { tpl, width, height, areas } = this.props; + const { isDragging, draggedArea, draggedPosition } = this.state; + + return /*#__PURE__*/( + React.createElement(StyledPreview, { + innerRef: node => this.node = node, + tpl: tpl, + width: width, + height: height }, + Object.keys(areas).map((area) => /*#__PURE__*/ + React.createElement(Track, { + key: area, + area: area, + column: areas[area].column, + row: areas[area].row, + grabbing: isDragging && draggedArea === area && typeof draggedPosition !== 'string', + onMouseDown: this.makeTrackMouseDown(area), + onHandlerMouseDown: this.makeHandlerMouseDown(area) })))); + + + + }} + + +class Grid extends Component {constructor(...args) {super(...args);_defineProperty(this, "renderArea", + area => { + const { width, height, areas } = this.props; + const { row, column } = areas[area]; + + return Array.from( + { length: row.span }, + (_, r) => Array.from( + { length: column.span }, + (_, c) => /*#__PURE__*/ + React.createElement(StyledGridText, { + key: `area${r}${c}`, + x: `${(column.start + c - .5) / width * 100}%`, + y: `${(row.start + r - .5) / height * 100}%` }, + area))); + + + + + });_defineProperty(this, "renderCols", + + (_, index) => { + const { width } = this.props; + + return /*#__PURE__*/( + React.createElement(StyledGridLine, { + key: index, + x1: `${(index + 1) / width * 100}%`, + y1: "0%", + x2: `${(index + 1) / width * 100}%`, + y2: "100%" })); + + });_defineProperty(this, "renderRows", + + (_, index) => { + const { height } = this.props; + + return /*#__PURE__*/( + React.createElement(StyledGridLine, { + key: index, + x1: "0%", + y1: `${(index + 1) / height * 100}%`, + x2: "100%", + y2: `${(index + 1) / height * 100}%` })); + + });} + + render() { + const { + width, + height, + areas } = + this.props; + + return /*#__PURE__*/( + React.createElement(StyledGrid, null, /*#__PURE__*/ + React.createElement("g", null, Object.keys(areas).map(this.renderArea)), /*#__PURE__*/ + React.createElement("g", null, Array.from({ length: width - 1 }, this.renderCols)), /*#__PURE__*/ + React.createElement("g", null, Array.from({ length: height - 1 }, this.renderRows)))); + + + }} + + +render( /*#__PURE__*/ +React.createElement(App, null), +document.querySelector('#root')); \ No newline at end of file diff --git a/css-grid-template-builder/dist/style.css b/css-grid-template-builder/dist/style.css new file mode 100644 index 0000000..0b52eb6 --- /dev/null +++ b/css-grid-template-builder/dist/style.css @@ -0,0 +1,23 @@ +@import url('https://fonts.googleapis.com/css?family=Roboto:400,500|Roboto+Mono:400,500'); + +*, +*::after, +*::before { + box-sizing: inherit; +} + +html { + box-sizing: border-box; + font-size: 16px; +} + +body { + margin: 0; + padding: 0; + background: #fff; + line-height: 1; + font-family: 'Roboto', sans-serif; + font-weight: 400; + font-size: 1rem; + color: #000; +} \ No newline at end of file diff --git a/css-grid-template-builder/license.txt b/css-grid-template-builder/license.txt new file mode 100644 index 0000000..8ee26f2 --- /dev/null +++ b/css-grid-template-builder/license.txt @@ -0,0 +1,8 @@ +Copyright (c) 2021 by Anthony Dugois (https://codepen.io/anthonydugois/pen/RpYBmy) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/css-grid-template-builder/src/index.html b/css-grid-template-builder/src/index.html new file mode 100644 index 0000000..98499e9 --- /dev/null +++ b/css-grid-template-builder/src/index.html @@ -0,0 +1 @@ +
    \ No newline at end of file diff --git a/css-grid-template-builder/src/script.babel b/css-grid-template-builder/src/script.babel new file mode 100644 index 0000000..d893088 --- /dev/null +++ b/css-grid-template-builder/src/script.babel @@ -0,0 +1,814 @@ +const {render} = ReactDOM; +const {Component, PropTypes} = React; +const {h1, h2, div, input, textarea, a, svg, g, line, text} = styled.default; +const {darken, lighten, transparentize} = polished; +const {grid, template} = GridTemplateParser; + +// helpers +const clamp = (value, min, max) => Math.min(Math.max(value, min), max); + +// styles +const colors = { + primary: '#263238', + secondary: '#1DE9B6', +}; + +const StyledApp = div` + display: grid; + grid-template-columns: 25rem auto; + grid-template-rows: auto; + grid-template-areas: "sidebar main"; + width: 100%; + height: 100vh; +`; + +const StyledSidebar = div` + display: flex; + flex-direction: column; + grid-area: sidebar; + background: ${darken(.1, colors.primary)}; + overflow: hidden; +`; + +const StyledMain = div` + display: flex; + flex-direction: column; + grid-area: main; + padding: 2rem; + background: ${darken(.05, colors.primary)}; +`; + +const StyledMainInner = div` + flex: 1; + position: relative; +`; + +const StyledGrid = svg` + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; +`; + +const StyledGridText = text` + font-family: 'Roboto Mono', monospace; + font-weight: 500; + font-size: 1rem; + text-anchor: middle; + alignment-baseline: middle; + fill: ${transparentize(.75, colors.secondary)}; +`; + +const StyledGridLine = line` + stroke: ${darken(.01, colors.primary)}; + stroke-width: 1px; +`; + +const StyledPreview = div` + z-index: 5; + position: relative; + display: grid; + grid-template-columns: repeat(${props => props.width}, 1fr); + grid-template-rows: repeat(${props => props.height}, 1fr); + grid-template-areas: ${props => props.tpl}; + width: 100%; + height: 100%; +`; + +const StyledTrack = div` + position: relative; + grid-area: ${props => props.area}; + cursor: ${props => + props.grabbing ? 'grabbing' : 'grab'}; + background: ${transparentize(.97, colors.secondary)}; +`; + +const StyledHandler = div` + position: absolute; + top: ${({position}) => + position === 'bottom' ? 'auto' : 0}; + right: ${({position}) => + position === 'left' ? 'auto' : 0}; + bottom: ${({position}) => + position === 'top' ? 'auto' : 0}; + left: ${({position}) => + position === 'right' ? 'auto' : 0}; + width: ${({position, size}) => + position === 'left' || position === 'right' ? size : '100%'}; + height: ${({position, size}) => + position === 'top' || position === 'bottom' ? size : '100%'}; + cursor: ${({position}) => + position === 'left' || position === 'right' ? 'col-resize' : 'row-resize'}; + background: ${colors.secondary}; +`; + +const StyledHint = div` + padding: 2rem; +`; + +const StyledHintTitle = h1` + padding-bottom: 1rem; + font-weight: 500; + font-size: 1.5rem; + color: ${colors.secondary}; +`; + +const StyledHintDescription = div` + line-height: 1.6; + font-size: 1rem; + color: ${lighten(.6, colors.primary)}; +`; + +const StyledTemplate = div` + flex: 1; + display: flex; + flex-direction: column; + padding: 2rem; +`; + +const StyledTemplateTitle = h2` + padding-bottom: 1.5rem; + text-transform: uppercase; + font-size: .85rem; + font-weight: 500; + color: ${colors.secondary}; + letter-spacing: .1rem; +`; + +const StyledTemplateControl = div` + flex: 1; +`; + +const StyledTemplateInput = textarea` + width: 100%; + height: 100%; + padding: 2rem; + background: ${darken(.125, colors.primary)}; + border-radius: 2px; + border: none; + resize: none; + line-height: 1.5; + font-family: 'Roboto Mono', monospace; + font-size: .85rem; + color: #fff; + transition: background .2s; + + &:focus { + outline: 0; + background: ${darken(.15, colors.primary)}; + } +`; + +const StyledSettings = div` + display: flex; + align-items: center; + justify-content: center; + padding-bottom: 2rem; + + &::before, + &::after { + content: ''; + flex: 1; + display: block; + height: 1px; + background: ${colors.primary}; + } +`; + +const StyledSettingDivider = div` + text-align: center; + font-family: 'Roboto Mono'; + font-weight: 500; + font-size: 1.05rem; + color: ${lighten(.05, colors.primary)}; +`; + +const StyledSettingInput = input` + width: 4rem; + padding: .4rem .6rem; + margin: 0 .75rem; + background: ${darken(.1, colors.primary)}; + border: none; + border-radius: 2px; + text-align: center; + font-family: 'Roboto Mono'; + font-size: .8rem; + color: #fff; + transition: background .2s; + + &:focus { + outline: 0; + background: ${darken(.125, colors.primary)}; + } +`; + +const StyledFoot = div` + padding: 0 2rem 2rem; +`; + +const StyledLink = a` + display: flex; + align-items: center; + justify-content: center; + text-decoration: none; + font-weight: 500; + font-size: .8rem; + color: ${colors.secondary}; + transition: color .2s; + + &:hover { + color: #fff; + } + &::before, + &::after { + content: ''; + flex: 1; + display: block; + height: 1px; + background: ${colors.primary}; + } + &::before { + margin-right: .75rem; + } + &::after { + margin-left: .75rem; + } +`; + +function Sidebar(props) { + return ( + + +