Only an emperor can enter this 403 Forbidden page. I made this almost entirely in pure CSS except for one SVG element. I can't handle those curves. :P
A Pen by Arturo Wibawa on CodePen.
Only an emperor can enter this 403 Forbidden page. I made this almost entirely in pure CSS except for one SVG element. I can't handle those curves. :P
A Pen by Arturo Wibawa on CodePen.
| <div class="wrapper"> | |
| <section class="pedastal"> | |
| <div class="pedastal-block1"></div> | |
| <div class="pedastal-block2"></div> | |
| <div class="trapezium"> | |
| <div></div> | |
| <div></div> | |
| </div> | |
| </section> | |
| <section class="hall"> | |
| <div class="hall-pillar"></div> | |
| <div class="hall-support"></div> | |
| <div class="hall-pillar"></div> | |
| <div class="hall-support"></div> | |
| <div class="hall-pillar"></div> | |
| <div class="hall-support"></div> | |
| <div class="hall-pillar"></div> | |
| <div class="hall-support"></div> | |
| <div class="hall-pillar"></div> | |
| <div class="hall-support"></div> | |
| <div class="hall-pillar"></div> | |
| <div class="hall-support"></div> | |
| <div class="hall-pillar"></div> | |
| <div class="hall-support"></div> | |
| <div class="hall-pillar"></div> | |
| <div class="hall-support"></div> | |
| <div class="hall-pillar"></div> | |
| <div class="hall-support"></div> | |
| <div class="hall-pillar"></div> | |
| </section> | |
| <section class="lower-support"> | |
| <div class="lower-support-pillar"></div> | |
| <div class="ornaments"> | |
| <div></div> | |
| <div></div> | |
| </div> | |
| <div class="lower-support-pillar"></div> | |
| <div class="ornaments"> | |
| <div></div> | |
| <div></div> | |
| </div> | |
| <div class="lower-support-pillar"></div> | |
| <div class="ornaments"> | |
| <div></div> | |
| <div></div> | |
| </div> | |
| <div class="lower-support-pillar"></div> | |
| <div class="ornaments"> | |
| <div></div> | |
| <div></div> | |
| </div> | |
| <div class="lower-support-pillar"></div> | |
| <div class="ornaments"> | |
| <div></div> | |
| <div></div> | |
| </div> | |
| <div class="lower-support-pillar"></div> | |
| <div class="ornaments"> | |
| <div></div> | |
| <div></div> | |
| </div> | |
| <div class="lower-support-pillar"></div> | |
| <div class="ornaments"> | |
| <div></div> | |
| <div></div> | |
| </div> | |
| <div class="lower-support-pillar"></div> | |
| <div class="ornaments"> | |
| <div></div> | |
| <div></div> | |
| </div> | |
| <div class="lower-support-pillar"></div> | |
| <div class="ornaments"> | |
| <div></div> | |
| <div></div> | |
| </div> | |
| <div class="lower-support-pillar"></div> | |
| </section> | |
| <section class="lower-roof"> | |
| <div></div> | |
| <div></div> | |
| </section> | |
| <section class="upper-support"> | |
| <div class="container"> | |
| <div class="lower-support-pillar"></div> | |
| <div class="lower-support-pillar"></div> | |
| <div class="lower-support-pillar"></div> | |
| <div class="lower-support-pillar"></div> | |
| <div class="lower-support-pillar"></div> | |
| <div class="lower-support-pillar"></div> | |
| </div> | |
| <div class="ornaments"><div></div><div></div></div> | |
| <div class="ornaments"><div></div><div></div></div> | |
| <div class="ornaments"><div></div><div></div></div> | |
| <div class="ornaments"><div></div><div></div></div> | |
| <div class="ornaments"><div></div><div></div></div> | |
| <div class="ornaments"><div></div><div></div></div> | |
| <div class="ornaments"><div></div><div></div></div> | |
| <section class="sign"></section> | |
| </section> | |
| <section class="upper-roof"> | |
| <div></div> | |
| <svg width="520px" height="90px"> | |
| <path d="M495.689265,72.9065145 L520,90 L0,90 L24.3069308,72.9091893 L45.9698498,74.0444947 C88.9890231,76.2990341 125.690619,43.2527689 127.945158,0.233595624 L127.687016,0.220066965 L128,0 L392,0 L392.30918,0.217392187 L392,0.233595624 C394.254539,43.2527689 430.956135,76.2990341 473.975308,74.0444947 L495.689265,72.9065145 Z" id="Combined-Shape" fill="#FDBB3B"></path> | |
| </svg> | |
| <div></div> | |
| </section> | |
| <section class="roof-top"> | |
| <div></div> | |
| <div></div> | |
| </section> | |
| <div class="cloud cloud-01"></div> | |
| <div class="cloud cloud-02"></div> | |
| <div class="cloud cloud-03"><div></div></div> | |
| <div class="sun"><div class="copy">403</div></div> | |
| </div> | |
| <div class="wall"> | |
| <div class="wall-roofing-bottom"></div> | |
| <div class="wall-roofing-top"></div> | |
| </div> | |
| <div class="headline"> | |
| <h1>Forbidden City</h1> | |
| <h2>β You don't have permission to access π§ this area β</h2> | |
| </div> | |
| $bg-color: #F3E2CB; | |
| $dark-red: #44291E; | |
| $red: #9C4E46; | |
| $wall-red: #A24D4C; | |
| $dark-green: #678B80; | |
| $green: #7BA598; | |
| $yellow: #EEDB44; | |
| $roof-yellow: #FDBB3B; | |
| $roof-yellow-darker: #D0982E; | |
| $blue: #490CED; | |
| $sun: #CA502E; | |
| $beige: #F8DAB2; | |
| @import url('https://fonts.googleapis.com/css?family=Permanent+Marker'); | |
| @import url('https://fonts.googleapis.com/css?family=Roboto+Mono'); | |
| @mixin align-x { | |
| left: 50%; | |
| transform: translateX(-50%); | |
| } | |
| @mixin align-y { | |
| top: 50%; | |
| transform: translateY(-50%); | |
| } | |
| html, body { | |
| width: 100%; | |
| height: 100%; | |
| margin: 0; | |
| padding: 0; | |
| } | |
| body { | |
| background: $bg-color; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| align-content: center; | |
| } | |
| .wrapper { | |
| height: 100%; | |
| width: 100%; | |
| display: flex; | |
| flex-direction: column-reverse; | |
| align-items: center; | |
| align-content: center; | |
| position: absolute; | |
| bottom: 0; | |
| overflow: hidden; | |
| &:hover { | |
| .sun { | |
| transform: translateY(-200px); | |
| } | |
| } | |
| } | |
| .pedastal { | |
| width: 1000px; | |
| height: 90px; | |
| background: white; | |
| position: relative; | |
| &-block1 { | |
| width: 125px; | |
| height: 30px; | |
| background: $wall-red; | |
| box-sizing: border-box; | |
| &::before { | |
| content: ''; | |
| @extend .pedastal-block1; | |
| position: absolute; | |
| right: 0; | |
| } | |
| } | |
| &-block2 { | |
| width: 63px; | |
| height: 30px; | |
| background: $wall-red; | |
| box-sizing: border-box; | |
| &::before { | |
| content: ''; | |
| @extend .pedastal-block2; | |
| position: absolute; | |
| right: 0; | |
| } | |
| } | |
| } | |
| .hall { | |
| width: 520px; | |
| height: 60px; | |
| background: $dark-red; | |
| display: flex; | |
| flex-direction: row; | |
| justify-content: space-between; | |
| position: relative; | |
| z-index: 3; | |
| &-pillar { | |
| height: 100%; | |
| width: 16px; | |
| background: linear-gradient(90deg, #DA5447, $red); | |
| } | |
| &-support { | |
| width: 40px; | |
| height: 12px; | |
| position: relative; | |
| &::before { | |
| content: ''; | |
| width: 16px; | |
| height: 12px; | |
| background: linear-gradient(135deg, $dark-green 50%, transparent 51%) no-repeat; | |
| background-position: -2px 0; | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| } | |
| &::after { | |
| content: ''; | |
| width: 16px; | |
| height: 12px; | |
| background: linear-gradient(-135deg, $dark-green 50%, transparent 51%) no-repeat; | |
| background-position: 2px 0; | |
| position: absolute; | |
| top: 0; | |
| right: 0; | |
| } | |
| } | |
| } | |
| .lower-support { | |
| width: 520px; | |
| height: 30px; | |
| background: $green; | |
| display: flex; | |
| flex-direction: row; | |
| justify-content: space-between; | |
| position: relative; | |
| border-left: 4px solid $green; | |
| border-right: 4px solid $green; | |
| z-index: 3; | |
| &-pillar { | |
| height: 100%; | |
| width: 16px; | |
| background: linear-gradient(90deg, #87C9B6, $dark-green); | |
| } | |
| } | |
| .ornaments { | |
| width: 40px; | |
| height: 30px; | |
| display: flex; | |
| div { | |
| width: 20px; | |
| height: 30px; | |
| position: relative; | |
| &:first-child { | |
| &::before, &::after { | |
| content: ''; | |
| width: 8px; | |
| height: 8px; | |
| border-radius: 4px; | |
| background: $yellow; | |
| position: absolute; | |
| } | |
| &::before { | |
| top: 6px; | |
| left: 11px; | |
| } | |
| &::after { | |
| bottom: 6px; | |
| left: 11px; | |
| } | |
| } | |
| &:last-child { | |
| &::before, &::after { | |
| content: ''; | |
| width: 8px; | |
| height: 8px; | |
| border-radius: 4px; | |
| background: $yellow; | |
| position: absolute; | |
| } | |
| &::before { | |
| top: 6px; | |
| right: 11px; | |
| } | |
| &::after { | |
| bottom: 6px; | |
| right: 11px; | |
| } | |
| } | |
| } | |
| } | |
| .lower-roof { | |
| width: 376px; | |
| height: 40px; | |
| background: $roof-yellow; | |
| position: relative; | |
| z-index: 3; | |
| &::before { | |
| content: ''; | |
| border-left: 112px solid transparent; | |
| border-bottom: 40px solid $roof-yellow; | |
| position: absolute; | |
| bottom: 0; | |
| left: -112px; | |
| } | |
| &::after { | |
| content: ''; | |
| border-right: 112px solid transparent; | |
| border-bottom: 40px solid $roof-yellow; | |
| position: absolute; | |
| bottom: 0; | |
| right: -112px; | |
| } | |
| div:first-child { | |
| display: inline-block; | |
| border-left: 36px solid transparent; | |
| border-top: 15px solid $roof-yellow-darker; | |
| position: absolute; | |
| left: -112px; | |
| bottom: -15px; | |
| } | |
| div:last-child { | |
| display: inline-block; | |
| border-right: 36px solid transparent; | |
| border-top: 15px solid $roof-yellow-darker; | |
| position: absolute; | |
| right: -112px; | |
| bottom: -15px; | |
| } | |
| } | |
| .upper-support { | |
| width: 376px; | |
| height: 20px; | |
| background: $green; | |
| display: flex; | |
| flex-direction: row; | |
| justify-content: space-between; | |
| position: relative; | |
| z-index: 3; | |
| .container { | |
| width: 296px; | |
| height: 20px; | |
| display: flex; | |
| align-self: center; | |
| flex-direction: row; | |
| justify-content: space-between; | |
| position: absolute; | |
| left: 50%; | |
| transform: translateX(-50%); | |
| } | |
| .ornaments { | |
| div:first-child, div:last-child { | |
| &::after { | |
| display: none; | |
| } | |
| &::before { | |
| width: 6px; | |
| height: 6px; | |
| } | |
| } | |
| div:first-child { | |
| &::before { | |
| top: 7px; | |
| left: 8px; | |
| } | |
| } | |
| div:last-child { | |
| &::before { | |
| top: 7px; | |
| right: 8px; | |
| } | |
| } | |
| } | |
| } | |
| .upper-roof { | |
| width: 520px; | |
| height: 90px; | |
| position: relative; | |
| z-index: 3; | |
| div:first-child { | |
| display: inline-block; | |
| border-left: 72px solid transparent; | |
| border-top: 20px solid $roof-yellow-darker; | |
| position: absolute; | |
| left: 0px; | |
| bottom: -20px; | |
| } | |
| div:last-child { | |
| display: inline-block; | |
| border-right: 72px solid transparent; | |
| border-top: 20px solid $roof-yellow-darker; | |
| position: absolute; | |
| right: 0px; | |
| bottom: -20px; | |
| } | |
| &-curved { | |
| width: 100px; | |
| height: 78px; | |
| background: $bg-color; | |
| position: absolute; | |
| z-index: 1000; | |
| &:nth-child(2) { | |
| left: -102px; | |
| top: -2px; | |
| transform: rotate(3deg); | |
| border-radius: 0 0 100px 0 ; | |
| } | |
| &:nth-child(3) { | |
| right: -102px; | |
| top: -2px; | |
| transform: rotate(-3deg); | |
| border-radius: 0 0 0 100px ; | |
| } | |
| } | |
| } | |
| %shared-boxes { | |
| width: 8px; | |
| height: 8px; | |
| background: $roof-yellow; | |
| position: absolute; | |
| } | |
| .roof-top { | |
| width: 264px; | |
| position: relative; | |
| z-index: 3; | |
| div { | |
| @extend %shared-boxes; | |
| top: -8px; | |
| &:first-child { | |
| left: 0px; | |
| &::before, &::after { | |
| content: ''; | |
| @extend %shared-boxes; | |
| left: 8px; | |
| } | |
| &::after { | |
| bottom: 8px; | |
| } | |
| } | |
| &:last-child { | |
| right: 0px; | |
| &::before, &::after { | |
| content: ''; | |
| @extend %shared-boxes; | |
| right: 8px; | |
| } | |
| &::after { | |
| bottom: 8px; | |
| } | |
| } | |
| } | |
| } | |
| .sign { | |
| width: 12px; | |
| height: 16px; | |
| background: $blue; | |
| border: 4px solid #9C4E46; | |
| position: absolute; | |
| left: 50%; | |
| transform: translateX(-50%); | |
| } | |
| .trapezium { | |
| border-bottom: 90px solid $beige; | |
| border-right: 50px solid transparent; | |
| border-left: 50px solid transparent; | |
| width: 288px; | |
| position: absolute; | |
| bottom: 0; | |
| @include align-x; | |
| div { | |
| position: absolute; | |
| bottom: -90px; | |
| width: 20px; | |
| &::before { | |
| content: ''; | |
| position: absolute; | |
| width: 20px; | |
| } | |
| &:first-child { | |
| left: 24px; | |
| border-bottom: 90px solid white; | |
| border-left: 40px solid transparent; | |
| &::before { | |
| border-top: 90px solid white; | |
| border-right: 40px solid transparent; | |
| } | |
| } | |
| &:last-child { | |
| right: 24px; | |
| border-bottom: 90px solid white; | |
| border-right: 40px solid transparent; | |
| &::before { | |
| border-top: 90px solid white; | |
| border-left: 40px solid transparent; | |
| right: 0; | |
| } | |
| } | |
| } | |
| } | |
| .wall { | |
| width: 100%; | |
| height: 90px; | |
| background: $wall-red; | |
| position: fixed; | |
| bottom: 0; | |
| z-index: -1; | |
| display: flex; | |
| justify-content: center; | |
| &::before { | |
| content: ''; | |
| width: 100%; | |
| max-width: 1240px; | |
| height: 140px; | |
| background: $wall-red; | |
| position: absolute; | |
| bottom: 0; | |
| @include align-x; | |
| } | |
| &-roofing-bottom { | |
| width: 100%; | |
| height: 24px; | |
| background: $roof-yellow; | |
| } | |
| &-roofing-top { | |
| width: 1240px; | |
| height: 24px; | |
| background: $roof-yellow; | |
| position: absolute; | |
| top: -50px; | |
| &::before { | |
| content: ''; | |
| border-bottom: 24px solid $roof-yellow; | |
| border-left: 10px solid transparent; | |
| position: absolute; | |
| left: -10px; | |
| } | |
| &::after { | |
| content: ''; | |
| border-bottom: 24px solid $roof-yellow; | |
| border-right: 10px solid transparent; | |
| position: absolute; | |
| right: -10px; | |
| } | |
| } | |
| } | |
| .sun { | |
| width: 400px; | |
| height: 400px; | |
| background: $sun; | |
| border-radius: 200px; | |
| z-index: 1; | |
| position: absolute; | |
| transform: translateY(-100px); | |
| display: flex; | |
| justify-content: center; | |
| align-items: center; | |
| transition: transform 1s; | |
| } | |
| .cloud { | |
| background: white; | |
| position: relative; | |
| z-index: 2; | |
| &::before, &::after { | |
| background: white; | |
| display: block; | |
| } | |
| &-01 { | |
| width: 88px; | |
| height: 32px; | |
| border-radius: 16px; | |
| transform: translate(-200px, -50px); | |
| animation: cloud-1 50s ease-in-out infinite alternate; | |
| &::before { | |
| content: ''; | |
| width: 50px; | |
| height: 50px; | |
| border-radius: 25px; | |
| display: block; | |
| transform: translate(22px, -25px); | |
| } | |
| } | |
| &-02 { | |
| width: 100px; | |
| height: 40px; | |
| border-radius: 20px; | |
| transform: translate(60px, -120px); | |
| animation: cloud-2 40s ease-in-out infinite alternate; | |
| &::before { | |
| content: ''; | |
| width: 46px; | |
| height: 46px; | |
| border-radius: 23px; | |
| transform: translate(38px, -23px); | |
| } | |
| &::after { | |
| content: ''; | |
| width: 30px; | |
| height: 30px; | |
| border-radius: 15px; | |
| transform: translate(16px, -60px); | |
| } | |
| } | |
| &-03 { | |
| width: 70px; | |
| height: 24px; | |
| border-radius: 12px; | |
| transform: translate(210px, 0px); | |
| animation: cloud-3 30s ease-in-out infinite alternate; | |
| &::before { | |
| content: ''; | |
| width: 14px; | |
| height: 14px; | |
| border-radius: 7px; | |
| transform: translate(46px, -7px); | |
| } | |
| &::after { | |
| content: ''; | |
| width: 16px; | |
| height: 16px; | |
| border-radius: 8px; | |
| top: 0; | |
| transform: translate(12px, -50px); | |
| } | |
| div { | |
| width: 30px; | |
| height: 30px; | |
| background: white; | |
| border-radius: 15px; | |
| display: block; | |
| transform: translate(24px, -30px); | |
| } | |
| } | |
| } | |
| .copy { | |
| font-family: 'Permanent Marker', cursive; | |
| font-size: 8em; | |
| color: $bg-color; | |
| padding-bottom: 60px; | |
| } | |
| .headline { | |
| text-align: center; | |
| position: relative; | |
| padding-top: 40px; | |
| z-index: 3; | |
| h1 { | |
| font-family: 'Permanent Marker', cursive; | |
| color: #2b2b2b; | |
| font-size: 8em; | |
| margin: 0; | |
| } | |
| h2 { | |
| font-family: 'Roboto Mono', monospace; | |
| font-size: 1.25em; | |
| color: #2b2b2b; | |
| } | |
| } | |
| @keyframes cloud-1 { | |
| 0% { transform: translate(-200px, -50px); } | |
| 100% { transform: translate(-280px, -50px); } | |
| } | |
| @keyframes cloud-2 { | |
| 0% { transform: translate(60px, -120px); } | |
| 100% { transform: translate(300px, -120px); } | |
| } | |
| @keyframes cloud-3 { | |
| 0% { transform: translate(210px, 0px); } | |
| 100% { transform: translate(100px, 0px); } | |
| } | |
| @media only screen and (max-width: 1440px) { | |
| .headline { | |
| h1 { | |
| font-size: 4em; | |
| } | |
| h2 { | |
| font-size: 1em; | |
| } | |
| } | |
| } |