You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2017/04/25 23:06:19 UTC

[19/20] groovy-user-site git commit: move content to asf-site branch

http://git-wip-us.apache.org/repos/asf/groovy-user-site/blob/de805f31/site/build.gradle
----------------------------------------------------------------------
diff --git a/site/build.gradle b/site/build.gradle
deleted file mode 100644
index d63bb9a..0000000
--- a/site/build.gradle
+++ /dev/null
@@ -1,230 +0,0 @@
-import org.apache.http.client.config.RequestConfig
-import org.apache.http.client.methods.CloseableHttpResponse
-import org.apache.http.client.methods.HttpGet
-import org.apache.http.impl.client.CloseableHttpClient
-import org.apache.http.impl.client.HttpClients
-import groovy.text.markup.MarkupTemplateEngine
-import groovy.text.markup.TemplateConfiguration
-import org.gradle.internal.logging.ConsoleRenderer
-import com.yahoo.platform.yui.compressor.CssCompressor
-import com.yahoo.platform.yui.compressor.JavaScriptCompressor
-import org.apache.tools.ant.filters.BaseFilterReader
-
-buildscript {
-    repositories {
-        jcenter()
-    }
-    dependencies {
-        classpath 'org.apache.httpcomponents:httpclient:4.5.1'
-    }
-}
-
-ext.watchmode = project.hasProperty('watchmode')?project.getProperty('watchmode'):'false'
-
-apply plugin: 'base'
-
-task copyAssets(type:Copy) {
-    from file('src/site/assets')
-    into file("$buildDir/site")
-    filesMatching('**/*.css') { f->
-        if (!f.name.contains('.min.')) {
-            filter(CssFilter)
-        }
-    }
-    filesMatching('**/*.js') { f->
-        if (!f.name.contains('.min.')) {
-            filter(JsFilter)
-        }
-    }
-}
-
-task generateSite(type:JavaExec) {
-
-    description = 'Generates the Groovy Website'
-    dependsOn copyAssets
-
-    ext.sources = file('src/site')
-    ext.outputDir = file("$buildDir/site")
-
-    inputs.files fileTree(sources)
-    outputs.files fileTree(outputDir)
-
-    classpath = project(':generator').sourceSets.main.runtimeClasspath
-    main = 'generator.SiteGenerator'
-    args = [sources, outputDir, project.watchmode]
-    systemProperties.docs_baseurl = System.getProperty('docs_baseurl')
-}
-
-task checkDeadLinks(dependsOn: generateSite) {
-    description = "Checks for dead links in the generated Groovy website"
-
-    ext.outputDir = file("$buildDir/reports")
-    ext.reportFile = file("$outputDir/deadlinks.html")
-
-    inputs.files fileTree(generateSite.outputDir)
-    outputs.file reportFile
-
-    // a collection of links which have either been validated
-    // or are dummy links
-    def excludeFromChecks = [
-            'http://issues.apache.org/jira',
-            'https://issues.apache.org/jira',
-            'target.html',
-            'foo.html',
-            'http://www.acme.com/cars',
-            'http://localhost:8080/groovy/hello.groovy'
-    ]
-
-    doLast {
-        def deadLinks = [:]
-
-        def currentPath
-        def isDead = [:].withDefault { String link ->
-            if (excludeFromChecks.any { link.startsWith(it) }) {
-                // skip checking those links because they dramatically increase build time
-                // while being most likely ok because generated through changelog parsing
-                return false
-            }
-
-            try {
-                URL url
-                try {
-                    url = URI.create(link).toURL()
-                } catch (e) {
-                    if (e.message.contains('URI is not absolute')) {
-                        url = URI.create("file://${file("${generateSite.outputDir}/$currentPath/$link").absoluteFile}").toURL()
-                    }
-                }
-                logger.debug("Checking URL: $url")
-                def cx = url.openConnection()
-                if (cx instanceof HttpURLConnection) {
-                    CloseableHttpClient httpclient = HttpClients.createDefault()
-                    RequestConfig requestConfig = RequestConfig.custom()
-                            .setSocketTimeout(5_000)
-                            .setConnectTimeout(5_000)
-                            .setConnectionRequestTimeout(5_000)
-                            .build()
-                    HttpGet httpget = new HttpGet(link)
-                    httpget.config = requestConfig
-                    CloseableHttpResponse response
-                    try {
-                        response = httpclient.execute(httpget)
-                        if (response.statusLine.statusCode == 404) {
-                            return true
-                        }
-                    } finally {
-                        response.close()
-                    }
-                }
-            } catch (e) {
-                return true
-            }
-            return false
-        }
-
-        def checkLink = { List dead, int line, String link ->
-            if (isDead[link]) {
-                dead << [line:line, link:link]
-            }
-        }
-
-        def checkPage = { File f ->
-            currentPath = GFileUtils.relativePath(generateSite.outputDir, f.parentFile)
-            f.eachLine('utf-8') { String line, int nb ->
-                def dead = []
-                [/\shref=['"](.+?)['"]/, /src=['"](.+?)['"]/].each { regex ->
-                    def matcher = line =~ regex
-                    if (matcher) {
-                        matcher.each {
-                            def path = it[1]
-                            checkLink(dead, nb, path)
-                        }
-                    }
-                }
-                if (dead) {
-                    deadLinks[f] = dead
-                }
-            }
-        }
-
-        file(generateSite.outputDir).eachFileRecurse {
-            if (it.name.endsWith('.html')) {
-                checkPage(it)
-            }
-        }
-
-        outputDir.mkdirs()
-        def tplConf = new TemplateConfiguration()
-        tplConf.with {
-            autoIndent = true
-            autoNewLine = true
-        }
-        def tplEngine = new MarkupTemplateEngine(this.class.classLoader, file('gradle/templates'), tplConf)
-
-        def report = tplEngine.createTemplateByPath("deadlinks.groovy").make(deadLinks: deadLinks).toString()
-
-        reportFile.write(report, 'utf-8')
-        def reportURL = new ConsoleRenderer().asClickableFileUrl(reportFile)
-        logger.lifecycle "Dead links report written at $reportURL"
-    }
-}
-
-task webzip(type:Zip, dependsOn: checkDeadLinks) {
-    description = "Creates a zip with the generated website and the deadlink report"
-    destinationDir = file("$buildDir/distributions")
-
-    baseName = 'groovy'
-    appendix = 'website'
-    from(generateSite.outputDir) {
-        into 'site'
-    }
-    from (checkDeadLinks.outputDir) {
-        into 'reports'
-    }
-}
-
-// Resource filtering classes
-
-class JsFilter extends BaseFilterReader {
-    Writer writer
-    Thread worker
-
-    JsFilter(Reader reader) {
-        super(new PipedReader())
-        writer = new PipedWriter(this.@in)
-        def compressor = new JavaScriptCompressor(reader, null)
-        reader.close()
-        worker = Thread.start {
-            compressor.compress(writer, -1, true, false, false, false)
-            writer.close()
-        }
-    }
-
-    void close() {
-        worker.join()
-        super.close()
-    }
-
-}
-
-class CssFilter extends BaseFilterReader {
-    Writer writer
-    Thread worker
-
-    CssFilter(Reader reader) {
-        super(new PipedReader())
-        writer = new PipedWriter(this.@in)
-        def compressor = new CssCompressor(reader)
-        reader.close()
-        worker = Thread.start {
-            compressor.compress(writer, -1)
-            writer.close()
-        }
-    }
-
-    void close() {
-        worker.join()
-        super.close()
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/groovy-user-site/blob/de805f31/site/gradle/templates/deadlinks.groovy
----------------------------------------------------------------------
diff --git a/site/gradle/templates/deadlinks.groovy b/site/gradle/templates/deadlinks.groovy
deleted file mode 100644
index 726a11f..0000000
--- a/site/gradle/templates/deadlinks.groovy
+++ /dev/null
@@ -1,25 +0,0 @@
-html {
-    head {
-        title 'Dead links report'
-    }
-    body {
-        h1('Dead links report')
-        if (!deadLinks) {
-            p("No dead link found. All green!")
-        } else {
-            p "Found a total of ${deadLinks.values().sum { it.size()}} dead links."
-            p """Not that not all dead links can be fixed directly in the Groovy website project: some of them
-are generated in the Groovy documentation instead."""
-            p "The following files contain dead links:"
-        }
-        deadLinks.each { entry ->
-            def (page, links) = [entry.key, entry.value]
-            h3 { a(href:page,page) }
-            ul {
-                links.each { link ->
-                    asciidoc("At line ${link.line}, dead link to ${link.link}")
-                }
-            }
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/groovy-user-site/blob/de805f31/site/src/site/assets/css/book.css
----------------------------------------------------------------------
diff --git a/site/src/site/assets/css/book.css b/site/src/site/assets/css/book.css
deleted file mode 100644
index 517dd54..0000000
--- a/site/src/site/assets/css/book.css
+++ /dev/null
@@ -1,680 +0,0 @@
-.book-btn {
-    display: inline-block;
-    text-transform: uppercase;
-    text-decoration: none;
-    border: 2px solid black;
-    margin-top: 100px;
-    font-size: 0.7em;
-    font-weight: 700;
-    padding: 0.1em 0.4em;
-    margin-left: 40px;
-    text-align: center;
-    -webkit-transition: color 0.3s, border-color 0.3s;
-    -moz-transition: color 0.3s, border-color 0.3s;
-    transition: color 0.3s, border-color 0.3s;
-}
-
-.book-btn:hover {
-    border-color: #db4800;
-    color: #db4800;
-}
-
-/* ///////////////////////////////////////////////////
-
-HARDCOVER
-Table of Contents
-
-1. container
-2. background & color
-3. opening cover, back cover and pages
-4. position, transform y transition
-5. events
-6. Bonus
-    - Cover design
-    - Ribbon
-    - Figcaption
-7. mini-reset
-
-/////////////////////////////////////////////////////*/
-
-/*
-    1. container
-*/
-
-.book {
-    position: relative;
-    width: 160px;
-    height: 220px;
-    -webkit-perspective: 1000px;
-    -moz-perspective: 1000px;
-    perspective: 1000px;
-    -webkit-transform-style: preserve-3d;
-    -moz-transform-style: preserve-3d;
-    transform-style: preserve-3d;
-    margin: 20px;
-    margin-bottom: 40px;
-    margin-left: 60px;
-}
-
-.book ul {
-    list-style: none;
-}
-
-/*
-    2. background & color
-*/
-
-/* HARDCOVER FRONT */
-.hardcover_front li:first-child {
-    background-color: #eee;
-    -webkit-backface-visibility: hidden;
-    -moz-backface-visibility: hidden;
-    backface-visibility: hidden;
-}
-
-/* reverse */
-.hardcover_front li:last-child {
-    background: #fffbec;
-}
-
-/* HARDCOVER BACK */
-.hardcover_back li:first-child {
-    background: #fffbec;
-}
-
-/* reverse */
-.hardcover_back li:last-child {
-    background: #fffbec;
-}
-
-.book_spine li:first-child {
-    background: #eee;
-}
-
-.book_spine li:last-child {
-    background: #333;
-}
-
-/* thickness of cover */
-
-.hardcover_front li:first-child:after,
-.hardcover_front li:first-child:before,
-.hardcover_front li:last-child:after,
-.hardcover_front li:last-child:before,
-.hardcover_back li:first-child:after,
-.hardcover_back li:first-child:before,
-.hardcover_back li:last-child:after,
-.hardcover_back li:last-child:before,
-.book_spine li:first-child:after,
-.book_spine li:first-child:before,
-.book_spine li:last-child:after,
-.book_spine li:last-child:before {
-    background: #999;
-}
-
-/* page */
-
-.page > li {
-    background: -webkit-linear-gradient(left, #e1ddd8 0%, #fffbf6 100%);
-    background: -moz-linear-gradient(left, #e1ddd8 0%, #fffbf6 100%);
-    background: -ms-linear-gradient(left, #e1ddd8 0%, #fffbf6 100%);
-    background: linear-gradient(left, #e1ddd8 0%, #fffbf6 100%);
-    box-shadow: inset 0px -1px 2px rgba(50, 50, 50, 0.1), inset -1px 0px 1px rgba(150, 150, 150, 0.2);
-    border-radius: 0px 5px 5px 0px;
-}
-
-/*
-    3. opening cover, back cover and pages
-*/
-
-.hardcover_front {
-    -webkit-transform: rotateY(-34deg) translateZ(8px);
-    -moz-transform: rotateY(-34deg) translateZ(8px);
-    transform: rotateY(-34deg) translateZ(8px);
-    z-index: 100;
-}
-
-.hardcover_back {
-    -webkit-transform: rotateY(-15deg) translateZ(-8px);
-    -moz-transform: rotateY(-15deg) translateZ(-8px);
-    transform: rotateY(-15deg) translateZ(-8px);
-}
-
-.page li:nth-child(1) {
-    -webkit-transform: rotateY(-28deg);
-    -moz-transform: rotateY(-28deg);
-    transform: rotateY(-28deg);
-}
-
-.page li:nth-child(2) {
-    -webkit-transform: rotateY(-30deg);
-    -moz-transform: rotateY(-30deg);
-    transform: rotateY(-30deg);
-}
-
-.page li:nth-child(3) {
-    -webkit-transform: rotateY(-32deg);
-    -moz-transform: rotateY(-32deg);
-    transform: rotateY(-32deg);
-}
-
-.page li:nth-child(4) {
-    -webkit-transform: rotateY(-34deg);
-    -moz-transform: rotateY(-34deg);
-    transform: rotateY(-34deg);
-}
-
-.page li:nth-child(5) {
-    -webkit-transform: rotateY(-36deg);
-    -moz-transform: rotateY(-36deg);
-    transform: rotateY(-36deg);
-}
-
-/*
-    4. position, transform & transition
-*/
-
-.hardcover_front,
-.hardcover_back,
-.book_spine,
-.hardcover_front li,
-.hardcover_back li,
-.book_spine li {
-    position: absolute;
-    top: 0;
-    left: 0;
-    width: 100%;
-    height: 100%;
-    -webkit-transform-style: preserve-3d;
-    -moz-transform-style: preserve-3d;
-    transform-style: preserve-3d;
-}
-
-.hardcover_front,
-.hardcover_back {
-    -webkit-transform-origin: 0% 100%;
-    -moz-transform-origin: 0% 100%;
-    transform-origin: 0% 100%;
-}
-
-.hardcover_front {
-    -webkit-transition: all 0.8s ease, z-index 0.6s;
-    -moz-transition: all 0.8s ease, z-index 0.6s;
-    transition: all 0.8s ease, z-index 0.6s;
-}
-
-/* HARDCOVER front */
-.hardcover_front li:first-child {
-    cursor: default;
-    -webkit-user-select: none;
-    -moz-user-select: none;
-    user-select: none;
-    -webkit-transform: translateZ(2px);
-    -moz-transform: translateZ(2px);
-    transform: translateZ(2px);
-}
-
-.hardcover_front li:last-child {
-    -webkit-transform: rotateY(180deg) translateZ(2px);
-    -moz-transform: rotateY(180deg) translateZ(2px);
-    transform: rotateY(180deg) translateZ(2px);
-}
-
-/* HARDCOVER back */
-.hardcover_back li:first-child {
-    -webkit-transform: translateZ(2px);
-    -moz-transform: translateZ(2px);
-    transform: translateZ(2px);
-}
-
-.hardcover_back li:last-child {
-    -webkit-transform: translateZ(-2px);
-    -moz-transform: translateZ(-2px);
-    transform: translateZ(-2px);
-}
-
-/* thickness of cover */
-.hardcover_front li:first-child:after,
-.hardcover_front li:first-child:before,
-.hardcover_front li:last-child:after,
-.hardcover_front li:last-child:before,
-.hardcover_back li:first-child:after,
-.hardcover_back li:first-child:before,
-.hardcover_back li:last-child:after,
-.hardcover_back li:last-child:before,
-.book_spine li:first-child:after,
-.book_spine li:first-child:before,
-.book_spine li:last-child:after,
-.book_spine li:last-child:before {
-    position: absolute;
-    top: 0;
-    left: 0;
-}
-
-/* HARDCOVER front */
-.hardcover_front li:first-child:after,
-.hardcover_front li:first-child:before {
-    width: 4px;
-    height: 100%;
-}
-
-.hardcover_front li:first-child:after {
-    -webkit-transform: rotateY(90deg) translateZ(-2px) translateX(2px);
-    -moz-transform: rotateY(90deg) translateZ(-2px) translateX(2px);
-    transform: rotateY(90deg) translateZ(-2px) translateX(2px);
-}
-
-.hardcover_front li:first-child:before {
-    -webkit-transform: rotateY(90deg) translateZ(158px) translateX(2px);
-    -moz-transform: rotateY(90deg) translateZ(158px) translateX(2px);
-    transform: rotateY(90deg) translateZ(158px) translateX(2px);
-}
-
-.hardcover_front li:last-child:after,
-.hardcover_front li:last-child:before {
-    width: 4px;
-    height: 160px;
-}
-
-.hardcover_front li:last-child:after {
-    -webkit-transform: rotateX(90deg) rotateZ(90deg) translateZ(80px) translateX(-2px) translateY(-78px);
-    -moz-transform: rotateX(90deg) rotateZ(90deg) translateZ(80px) translateX(-2px) translateY(-78px);
-    transform: rotateX(90deg) rotateZ(90deg) translateZ(80px) translateX(-2px) translateY(-78px);
-}
-
-.hardcover_front li:last-child:before {
-    box-shadow: 0px 0px 30px 5px #333;
-    -webkit-transform: rotateX(90deg) rotateZ(90deg) translateZ(-140px) translateX(-2px) translateY(-78px);
-    -moz-transform: rotateX(90deg) rotateZ(90deg) translateZ(-140px) translateX(-2px) translateY(-78px);
-    transform: rotateX(90deg) rotateZ(90deg) translateZ(-140px) translateX(-2px) translateY(-78px);
-}
-
-/* thickness of cover */
-
-.hardcover_back li:first-child:after,
-.hardcover_back li:first-child:before {
-    width: 4px;
-    height: 100%;
-}
-
-.hardcover_back li:first-child:after {
-    -webkit-transform: rotateY(90deg) translateZ(-2px) translateX(2px);
-    -moz-transform: rotateY(90deg) translateZ(-2px) translateX(2px);
-    transform: rotateY(90deg) translateZ(-2px) translateX(2px);
-}
-
-.hardcover_back li:first-child:before {
-    -webkit-transform: rotateY(90deg) translateZ(158px) translateX(2px);
-    -moz-transform: rotateY(90deg) translateZ(158px) translateX(2px);
-    transform: rotateY(90deg) translateZ(158px) translateX(2px);
-}
-
-.hardcover_back li:last-child:after,
-.hardcover_back li:last-child:before {
-    width: 4px;
-    height: 160px;
-}
-
-.hardcover_back li:last-child:after {
-    -webkit-transform: rotateX(90deg) rotateZ(90deg) translateZ(80px) translateX(2px) translateY(-78px);
-    -moz-transform: rotateX(90deg) rotateZ(90deg) translateZ(80px) translateX(2px) translateY(-78px);
-    transform: rotateX(90deg) rotateZ(90deg) translateZ(80px) translateX(2px) translateY(-78px);
-}
-
-.hardcover_back li:last-child:before {
-    box-shadow: 10px -1px 80px 20px #666;
-    -webkit-transform: rotateX(90deg) rotateZ(90deg) translateZ(-140px) translateX(2px) translateY(-78px);
-    -moz-transform: rotateX(90deg) rotateZ(90deg) translateZ(-140px) translateX(2px) translateY(-78px);
-    transform: rotateX(90deg) rotateZ(90deg) translateZ(-140px) translateX(2px) translateY(-78px);
-}
-
-/* BOOK SPINE */
-.book_spine {
-    -webkit-transform: rotateY(60deg) translateX(-5px) translateZ(-12px);
-    -moz-transform: rotateY(60deg) translateX(-5px) translateZ(-12px);
-    transform: rotateY(60deg) translateX(-5px) translateZ(-12px);
-    width: 16px;
-    z-index: 0;
-}
-
-.book_spine li:first-child {
-    -webkit-transform: translateZ(2px);
-    -moz-transform: translateZ(2px);
-    transform: translateZ(2px);
-}
-
-.book_spine li:last-child {
-    -webkit-transform: translateZ(-2px);
-    -moz-transform: translateZ(-2px);
-    transform: translateZ(-2px);
-}
-
-/* thickness of book spine */
-.book_spine li:first-child:after,
-.book_spine li:first-child:before {
-    width: 4px;
-    height: 100%;
-}
-
-.book_spine li:first-child:after {
-    -webkit-transform: rotateY(90deg) translateZ(-2px) translateX(2px);
-    -moz-transform: rotateY(90deg) translateZ(-2px) translateX(2px);
-    transform: rotateY(90deg) translateZ(-2px) translateX(2px);
-}
-
-.book_spine li:first-child:before {
-    -webkit-transform: rotateY(-90deg) translateZ(-12px);
-    -moz-transform: rotateY(-90deg) translateZ(-12px);
-    transform: rotateY(-90deg) translateZ(-12px);
-}
-
-.book_spine li:last-child:after,
-.book_spine li:last-child:before {
-    width: 4px;
-    height: 16px;
-}
-
-.book_spine li:last-child:after {
-    -webkit-transform: rotateX(90deg) rotateZ(90deg) translateZ(8px) translateX(2px) translateY(-6px);
-    -moz-transform: rotateX(90deg) rotateZ(90deg) translateZ(8px) translateX(2px) translateY(-6px);
-    transform: rotateX(90deg) rotateZ(90deg) translateZ(8px) translateX(2px) translateY(-6px);
-}
-
-.book_spine li:last-child:before {
-    box-shadow: 5px -1px 100px 40px rgba(0, 0, 0, 0.2);
-    -webkit-transform: rotateX(90deg) rotateZ(90deg) translateZ(-210px) translateX(2px) translateY(-6px);
-    -moz-transform: rotateX(90deg) rotateZ(90deg) translateZ(-210px) translateX(2px) translateY(-6px);
-    transform: rotateX(90deg) rotateZ(90deg) translateZ(-210px) translateX(2px) translateY(-6px);
-}
-
-.page,
-.page > li {
-    position: absolute;
-    top: 0;
-    left: 0;
-    -webkit-transform-style: preserve-3d;
-    -moz-transform-style: preserve-3d;
-    transform-style: preserve-3d;
-}
-
-.page {
-    width: 100%;
-    height: 98%;
-    top: 1%;
-    left: 3%;
-    z-index: 10;
-}
-
-.page > li {
-    width: 100%;
-    height: 100%;
-    -webkit-transform-origin: left center;
-    -moz-transform-origin: left center;
-    transform-origin: left center;
-    -webkit-transition-property: transform;
-    -moz-transition-property: transform;
-    transition-property: transform;
-    -webkit-transition-timing-function: ease;
-    -moz-transition-timing-function: ease;
-    transition-timing-function: ease;
-}
-
-.page > li:nth-child(1) {
-    -webkit-transition-duration: 0.6s;
-    -moz-transition-duration: 0.6s;
-    transition-duration: 0.6s;
-}
-
-.page > li:nth-child(2) {
-    -webkit-transition-duration: 0.6s;
-    -moz-transition-duration: 0.6s;
-    transition-duration: 0.6s;
-}
-
-.page > li:nth-child(3) {
-    -webkit-transition-duration: 0.4s;
-    -moz-transition-duration: 0.4s;
-    transition-duration: 0.4s;
-}
-
-.page > li:nth-child(4) {
-    -webkit-transition-duration: 0.5s;
-    -moz-transition-duration: 0.5s;
-    transition-duration: 0.5s;
-}
-
-.page > li:nth-child(5) {
-    -webkit-transition-duration: 0.6s;
-    -moz-transition-duration: 0.6s;
-    transition-duration: 0.6s;
-}
-
-/*
-    5. events
-*/
-
-@media screen and (min-width: 768px) {
-    .book:hover > .hardcover_front {
-        -webkit-transform: rotateY(-145deg) translateZ(0);
-        -moz-transform: rotateY(-145deg) translateZ(0);
-        transform: rotateY(-145deg) translateZ(0);
-        z-index: 0;
-    }
-
-    .book:hover > .page li:nth-child(1) {
-        -webkit-transform: rotateY(-30deg);
-        -moz-transform: rotateY(-30deg);
-        transform: rotateY(-30deg);
-        -webkit-transition-duration: 1.5s;
-        -moz-transition-duration: 1.5s;
-        transition-duration: 1.5s;
-    }
-
-    .book:hover > .page li:nth-child(2) {
-        -webkit-transform: rotateY(-35deg);
-        -moz-transform: rotateY(-35deg);
-        transform: rotateY(-35deg);
-        -webkit-transition-duration: 1.8s;
-        -moz-transition-duration: 1.8s;
-        transition-duration: 1.8s;
-    }
-
-    .book:hover > .page li:nth-child(3) {
-        -webkit-transform: rotateY(-118deg);
-        -moz-transform: rotateY(-118deg);
-        transform: rotateY(-118deg);
-        -webkit-transition-duration: 1.6s;
-        -moz-transition-duration: 1.6s;
-        transition-duration: 1.6s;
-    }
-
-    .book:hover > .page li:nth-child(4) {
-        -webkit-transform: rotateY(-130deg);
-        -moz-transform: rotateY(-130deg);
-        transform: rotateY(-130deg);
-        -webkit-transition-duration: 1.4s;
-        -moz-transition-duration: 1.4s;
-        transition-duration: 1.4s;
-    }
-
-    .book:hover > .page li:nth-child(5) {
-        -webkit-transform: rotateY(-140deg);
-        -moz-transform: rotateY(-140deg);
-        transform: rotateY(-140deg);
-        -webkit-transition-duration: 1.2s;
-        -moz-transition-duration: 1.2s;
-        transition-duration: 1.2s;
-    }
-}
-
-/*
-    6. Bonus
-*/
-
-/* cover CSS */
-
-.coverDesign {
-    position: absolute;
-    top: 0;
-    left: 0;
-    bottom: 0;
-    right: 0;
-    overflow: hidden;
-    -webkit-backface-visibility: hidden;
-    -moz-backface-visibility: hidden;
-    backface-visibility: hidden;
-}
-
-.coverDesign::after {
-    background-image: -webkit-linear-gradient(-135deg, rgba(255, 255, 255, 0.45) 0%, transparent 100%);
-    background-image: -moz-linear-gradient(-135deg, rgba(255, 255, 255, 0.45) 0%, transparent 100%);
-    background-image: linear-gradient(-135deg, rgba(255, 255, 255, 0.45) 0%, transparent 100%);
-    position: absolute;
-    top: 0;
-    left: 0;
-    bottom: 0;
-    right: 0;
-}
-
-.coverDesign h1 {
-    color: #fff;
-    font-size: 2.2em;
-    letter-spacing: 0.05em;
-    text-align: center;
-    margin: 54% 0 0 0;
-    text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.1);
-}
-
-.coverDesign p {
-    color: #f8f8f8;
-    font-size: 1em;
-    text-align: center;
-    text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.1);
-}
-
-.yellow {
-    background-color: #f1c40f;
-    background-image: -webkit-linear-gradient(top, #f1c40f 58%, #e7ba07 0%);
-    background-image: -moz-linear-gradient(top, #f1c40f 58%, #e7ba07 0%);
-    background-image: linear-gradient(top, #f1c40f 58%, #e7ba07 0%);
-}
-
-.blue {
-    background-color: #3498db;
-    background-image: -webkit-linear-gradient(top, #3498db 58%, #2a90d4 0%);
-    background-image: -moz-linear-gradient(top, #3498db 58%, #2a90d4 0%);
-    background-image: linear-gradient(top, #3498db 58%, #2a90d4 0%);
-}
-
-.grey {
-    background-color: #f8e9d1;
-    background-image: -webkit-linear-gradient(top, #f8e9d1 58%, #e7d5b7 0%);
-    background-image: -moz-linear-gradient(top, #f8e9d1 58%, #e7d5b7 0%);
-    background-image: linear-gradient(top, #f8e9d1 58%, #e7d5b7 0%);
-}
-
-/* Basic ribbon */
-
-.ribbon {
-    background: #c0392b;
-    color: #fff;
-    display: block;
-    font-size: 0.7em;
-    position: absolute;
-    top: 11px;
-    right: 1px;
-    width: 40px;
-    height: 20px;
-    line-height: 20px;
-    letter-spacing: 0.15em;
-    text-align: center;
-    -webkit-transform: rotateZ(45deg) translateZ(1px);
-    -moz-transform: rotateZ(45deg) translateZ(1px);
-    transform: rotateZ(45deg) translateZ(1px);
-    -webkit-backface-visibility: hidden;
-    -moz-backface-visibility: hidden;
-    backface-visibility: hidden;
-    z-index: 10;
-}
-
-.ribbon::before,
-.ribbon::after {
-    position: absolute;
-    top: -20px;
-    width: 0;
-    height: 0;
-    border-bottom: 20px solid #c0392b;
-    border-top: 20px solid transparent;
-}
-
-.ribbon::before {
-    left: -20px;
-    border-left: 20px solid transparent;
-}
-
-.ribbon::after {
-    right: -20px;
-    border-right: 20px solid transparent;
-}
-
-/* figcaption */
-
-.book figcaption {
-    padding-left: 40px;
-    padding-top: 40px;
-    text-align: left;
-    position: absolute;
-    top: 0%;
-    left: 160px;
-    width: 500px;
-}
-
-.book figcaption h1 {
-    margin: 0;
-}
-
-.book figcaption span {
-    color: #245f78;
-    padding: 0.6em 0 0.2em 0;
-    display: block;
-}
-
-.book figcaption p {
-    color: black;
-    line-height: 1.3;
-}
-
-/* Media Queries */
-@media screen and (max-width: 767px) {
-    .align > li {
-        width: 100%;
-        min-height: 440px;
-        height: auto;
-        padding: 0;
-        margin: 0 0 30px 0;
-    }
-
-    .book {
-        margin-left: 60px;
-        display: block;
-        margin-bottom: 280px;
-    }
-
-    .book figcaption {
-        min-width: 320px;
-        top: 250px;
-        padding-left: 0;
-        left: -60px;
-        display: block;
-    }
-}
-
-@media screen and (max-width: 550px) {
-    .book {
-        height: 250px;
-    }
-
-    .book figcaption {
-        width: 320px;
-    }
-}