/* 
    Created on : 05.08.2016, 17:11:56
    Author     : Chris
*/

$default-color: #fff;
$primary-color: #4181c1;
$secondary-color: #ebebeb;
$alternative-color: #272727;

$symbolic-color-php: #6c7eb7; // PHP
$symbolic-color-html5: #e44d26; // HTML5
$symbolic-color-css3: #016fba; // CSS3
$symbolic-color-less: #2b4e85; // LESS
$symbolic-color-sass: #cf649a; // SASS
$symbolic-color-markdown: #000; // MarkDown
$symbolic-color-ftl: #444; // FTL
$symbolic-color-json: #1984a4; // JSON
$symbolic-color-jsx: #333; // JSX
$symbolic-color-ini: #ff6600; // Ini
$symbolic-color-js: #d6ba33; // JS
$symbolic-color-java: #e00024; // JAVA
$symbolic-color-sql: #444; // SQL
$symbolic-color-cpp: #348ab9; // CPP
$symbolic-color-xml: #666; // XML
$symbolic-color-jade: #47c17b; // JADE
$symbolic-color-twig: #899914; // Twig
$symbolic-color-groovy: #6398aa; // Groovy
$symbolic-color-yaml: #888; // Yaml

$symbolic-color-fb: #3b5998; // fb
$symbolic-color-twitter: #1da1f2; // twitter
$symbolic-color-plus: #db4437; // plus
$symbolic-color-slack: #766fba; // slack
$symbolic-color-youtube: #e62117; // youtube


// Sizes
$small: 768px;
$medium: 1024px;
$large: 1260px;

$headerHeight: 50px;

@mixin margin-bottom-reset() {
    margin: 0;
    padding: 0;
}

@mixin fullWidth() {
    width: 100%;
    margin: 0 auto;
    box-sizing: border-box; 
}

@mixin box-shadow($rotated: 1) {
    box-shadow: 0 3px * $rotated 4px 0 rgba(0, 0, 0, .12), 0 1px * $rotated 2px 0 rgba(0, 0, 0, .24);
}

@mixin box-shadow-active($rotated: 1) {
    box-shadow: 0 6px * $rotated 7px 0 rgba(0, 0, 0, .2), 0 1px 10px * $rotated 0 rgba(0, 0, 0, .12), 0 2px 4px -1px rgba(0, 0, 0, .2);
}

@mixin text-shadow($rotated: 1) {
    text-shadow: 0 3px 4px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24);
}

@mixin inner-fullwidth() {
    @include fullWidth();
    padding: 35px 15px;
    max-width: 1200px;
}

@font-face {
    font-family: 'PulsIcons';
    src: url('../fonts/puls.ttf') format('truetype'),
        url('../fonts/puls.woff') format('woff'),
        url('../fonts/puls.svg') format('svg');
}

@keyframes show-hide-ripple {
    from {
        transform: scale(0);
        opacity: .5;
    }
    to {
        transform: scale(30);
        opacity: 0;
    }
}

body {
    @include margin-bottom-reset();

    font-family: 'Open Sans', sans-serif;
    line-height: 24px;
    size: 16px;
    color: #333;
    font-weight: 300;
    width: 100%;

    ul, ol, li, h1, h2, h3, p, div, img {
        @include margin-bottom-reset();
    }

    h1, h2, h3 {
        margin-bottom: 10px;
    }

    a {
        color: $alternative-color;
        text-decoration: none;

        &.external {
            text-decoration: underline;
            font-weight: bold;
        }

        &.no-deco {
            color: white;
        }
    }

    .alternative-color {
        a:not(.next-section) {
            color: lighten($primary-color, 15%);
        }
    }

    .with-icon {
        &:after {
            font-family: 'PulsIcons';
        }
    }

    img {
        max-width: 100%;
        width: 100%;
        display: block;
    }

    ul {
        list-style: none;
        margin-left: 0;
    }

    header, footer {
        @include margin-bottom-reset();
        @include fullWidth();
    }

    header {
        position: fixed;
        height: $headerHeight;
        color: $secondary-color;
        background-color: transparent;
        transition: background-color 500ms ease;
        z-index: 1;
        user-select: none;
        -webkit-user-select: none;

        .inner {
            padding-top: 0;
            padding-bottom: 0;
            height: 100%;

            nav {
                align-items: flex-start;
                display: flex;
                flex: 1;

                #burger-menu {
                    min-width: 30px;
                    max-width: 30px;
                    height: 25px;
                    position: relative;
                    z-index: 1;
                    align-self: center;

                    > div {
                        border: 2px solid $alternative-color;
                        transition: all 300ms ease-out;
                        position: absolute;
                        left: 0;
                        right: 0;
                        top: 10px;

                        &:first-child {
                            top: 0px;
                        }

                        &:last-child {
                            top: 20px;
                        }
                    }
                }

                ul {
                    background-color: rgba(0, 0, 0, .9);
                    display: block;
                    height: 10000%;
                    left: 0;
                    min-width: 150px;
                    padding-top: $headerHeight + 25;
                    width: 60%;
                    position: absolute;
                    transform: translate3d(-700px, 0, 0);
                    transition: transform 300ms ease-out;

                    li {
                        display: block;
                        margin-bottom: 5px;

                        .nav-link {
                            color: inherit;
                            display: block;
                            padding: 5px 20px;
                            transition: color 200ms ease-in;

                            &.active {
                                color: $primary-color;
                            }
                        }
                    }
                }
            }

            #logo {
                align-self: center;
                color: $primary-color;
                display: flex;
                align-items: center;
                justify-content: flex-end;

                img {
                    width: 75px;
                    margin-right: -1em;
                }

                div {
                    align-content: center;
                    align-items: center;
                }
            }
        }

        .search {
            color: $alternative-color;
            align-self: center;
            font-size: 125%;
            margin: 0 .25em;

            &:after {
                content: '\f002';
            }

            &:hover {
                cursor: pointer;
            }
        }

        .search-field {
            @include inner-fullwidth();
            @include box-shadow();

            display: flex;
            padding: 0;
            height: 0;
            overflow: hidden;
            transition: height 200ms ease-out;
            position: absolute;
            right: 0;

            input[type="text"] {
                outline: 0;
                padding: .25em;
                font-size: 120%;
                flex: 1 0 80%;
            }

            button {
                margin: 0;
                flex: 1 0 5%;
                align-self: auto;
                background-color: $alternative-color;
                color: $secondary-color;
                border: 0;
            }

            &.active {
                height: 40px;
            }

            @media (min-width: 600px) {
                max-width: 600px;
                margin: 0;
            }

            @media (min-width: $small) {
                right: 8em;
            }
        }

        &.active {
            background-color: lighten($alternative-color, 75%);
            box-shadow: 0 3px 4px 0 rgba(0, 0, 0, .12),
                0 1px 2px 0 rgba(0, 0, 0, .24);
        }
    }

    main {
        
        article {
            text-align: center;
            position: relative;
            padding-top: $headerHeight;
            max-width: 80%;
        }
        
        section {
            position: relative;
            padding-top: $headerHeight;
            height: 100vh;

            .next-section {
                @include box-shadow(-1);

                position: absolute;
                bottom: .75em;
                left: 50%;
                margin-left: -25px;
                line-height: 1;
                color: $secondary-color;
                font-size: 175%;
                padding: .5em .7em;
                line-height: 1;
                border-radius: 50%;
                background-color: rgba(0, 0, 0, .3);
                border: 1px solid $secondary-color;
                transform: rotate3d(1, 0, 0, 180deg);
                text-shadow: 0 0 4px rgba(0, 0, 0, 1);
                transition: text-shadow 500ms ease-out, box-shadow 250ms ease-out;

                &:after {
                    font-family: 'PulsIcons';
                    content: '\f102';
                }

                &:hover {
                    cursor: pointer;
                }

                &:active {
                    text-shadow: 0 -1px 6px rgba(0, 0, 0, 1);
                    box-shadow: 0 -6px 7px 0 rgba(0, 0, 0, .2), 0 -1px 10px 0 rgba(0, 0, 0, .12), 0 -2px 4px -1px rgba(0, 0, 0, .2);
                }
            }

            .languages, .technologies {
                display: flex;
                flex-direction: row;
                max-width: 640px;
                margin: 2em auto;
                overflow-x: scroll;

                > li {
                    display: flex;
                }

                @media(min-width: $small) {
                    flex-wrap: wrap;
                    justify-content: space-between;
                    overflow-x: hidden;
                }
            }

            .languages {
                align-content: center;

                > li {
                    .php {
                        background-color: $symbolic-color-php;
                    }

                    .js {
                        background-color: $symbolic-color-js;
                    }

                    .java {
                        background-color: $symbolic-color-java;
                    }

                    .groovy {
                        background-color: $symbolic-color-groovy;
                    }

                    .html5 {
                        background-color: $symbolic-color-html5;
                    }

                    .css3 {
                        background-color: $symbolic-color-css3;
                    }

                    .less {
                        background-color: $symbolic-color-less;
                    }

                    .sass {
                        background-color: $symbolic-color-sass;
                    }

                    .ftl {
                        background-color: $symbolic-color-ftl;
                    }

                    .json {
                        background-color: $symbolic-color-json;
                    }

                    .jsx {
                        background-color: $symbolic-color-jsx;
                    }

                    .ini {
                        background-color: $symbolic-color-ini;
                    }

                    .markdown {
                        background-color: $symbolic-color-markdown;
                    }

                    .jade {
                        background-color: $symbolic-color-jade;
                    }

                    .twig {
                        background-color: $symbolic-color-twig;
                    }

                    .sql {
                        background-color: $symbolic-color-sql;
                    }

                    .yaml {
                        background-color: $symbolic-color-yaml;
                    }

                    .cpp {
                        background-color: $symbolic-color-cpp;
                    }

                    .xml {
                        background-color: $symbolic-color-xml;
                    }
                }
            }

            .technologies {
                max-width: 795px;

                > li {
                    max-width: 85px;
                    text-align: center;
                    margin: .5em;
                    font-weight: bold;
                    font-size: 70%;
                    display: inline-table;

                    .name {
                        display: none;
                    }

                    @media(min-width: $small) {
                        .name {
                            display: block;
                        }
                    }
                }
            }

            &:not(.banner) {
                height: auto;

                p {
                    text-align: center;
                }

                @media(min-width: $small) {
                    height: auto;
                }
            }

            &#languages {
                height: auto;

                .inner {
                    height: 100%;
                    padding-bottom: 6em;
                }
            }

            &#plugins {
                .inner {
                    padding-bottom: 6em;
                }
            }
        }
    }

    footer {
        background: #fff;
        box-sizing: border-box;

        .back-to-top {
            @include box-shadow();

            position: fixed;
            padding: .5em .7em;
            line-height: 1;
            bottom: .75em;
            right: .75em;
            background-color: $primary-color;
            border-radius: 50%;
            transition: box-shadow 250ms ease-out, opacity 250ms ease-out, visibility 250ms ease-out;
            color: $secondary-color;
            opacity: 0;
            visibility: hidden;
            font-size: 150%;

            &:after {
                content: '\f102';
            }

            &:hover {
                cursor: pointer;
            }

            &:active {
                @include box-shadow-active();
            }
        }

        .social-links {
            display: flex;

            > li {
                display: flex;

                a {
                    width: 50px;
                    height: 50px;
                    line-height: 50px;
                    color: white;
                    font-size: 130%;
                    margin: .25em;
                    transition: box-shadow 250ms ease-out, opacity 250ms ease-out, visibility 250ms ease-out;

                    &:active {
                        @include box-shadow-active();
                    }
                }                

                .fb {
                    background-color: $symbolic-color-fb;

                    &:after {
                        content: '\f09a';
                    }
                }
                .twitter {
                    background-color: $symbolic-color-twitter;

                    &:after {
                        content: '\f099';
                    }
                }
                .plus {
                    background-color: $symbolic-color-plus;

                    &:after {
                        content: '\ea8b';
                    }
                }
                .slack {
                    background-color: $symbolic-color-slack;

                    &:after {
                        content: '\f198';
                    }
                }
                .youtube {
                    background-color: $symbolic-color-youtube;

                    &:after {
                        content: '\ea9d';
                    }
                }
            }
        }
        
        .disc {
            margin: 1em;
        }
    }

    .circle {
        @include box-shadow();
        @include text-shadow();

        border-radius: 50%;
        font-weight: bold;
        font-size: 100%;
        background-color: black;
        width: 75px;
        height: 75px;
        line-height: 75px;
        margin: .5em;
        text-align: center;
        flex: 1 0 50%;

        &.small {
            font-size: 80%;
            line-height: 3;
        }

        &.tech {
            max-width: 100%;
            max-height: 100%;
            margin: 0;
            background-color: transparent;
            box-shadow: none;
        }
    }

    .download-links {
        margin-top: .5em;
        font-weight: bold;
        font-size: 90%;
        display: flex;
        justify-content: center;

        a {
            @include box-shadow();

            padding: 1em;
            white-space: nowrap;
            color: white;
            background-color: orangered;
            cursor: pointer;
            border-radius: 2px;
            transition: box-shadow 250ms ease-out;
            margin: 0;

            &:active {
                @include box-shadow-active();
            }
        }
    }

    &.scrolled {
        footer {
            .back-to-top {
                visibility: visible;
                opacity: 1;
            }
        }
    }

    &.active {
        .clickable-background {
            bottom: 0;
            display: block;
            left: 0;
            opacity: .5;
            position: absolute;
            right: 0;
            top: $headerHeight;
            background-color: rgba(0, 0, 0, 1);
            z-index: 1;
        }

        header {
            nav {
                #burger-menu {
                    > div {
                        border: 2px solid #ccc;

                        &:first-child {
                            transform: rotate3d(0, 0, 1, 45deg);
                            top: 10px;
                        }

                        &:nth-child(2n) {
                            opacity: 0;
                        }

                        &:last-child {
                            transform: rotate3d(0, 0, 1, -45deg);
                            top: 10px;
                        }
                    }
                }

                ul {
                    transform: translate3d(0, 0, 0);
                }
            }
        }
    }

    .primary-color {
        background-color: $primary-color;
        color: #fff;
    }

    .secondary-color {
        background-color: $secondary-color;
    }

    .default-color {
        background-color: $default-color;
    }

    .alternative-color {
        background-color: $alternative-color;
        color: #ddd;
    }

    .ripple-btn {
    }

    .inner {
        @include inner-fullwidth();
        padding-bottom: 80px;

        @media(min-width: $small) {
            padding-bottom: 50px;
        }
    }

    .flex-container {
        display: flex;
        flex-direction: column;
        align-items: center;

        @media(min-width: $medium) {
            flex-wrap: wrap;

            > * {
                flex: 1;
            }
        }
    }

    .flex-container-small {
        display: flex;
        justify-content: space-between;

        > * {
        }
    }

    .font-light {
        color: lighten($alternative-color, 2%);
    }

    .left {
        text-align: left;        
    }

    .center {
        text-align: center;
    }

    .right {
        text-align: right;
    }

    .title-img {
        width: 100%;
        height: 107%;
        position: absolute;
        z-index: -2;
        background-color: #eee;

        .img-wrapper {
            position: absolute;
            left: 1em;
            right: 1em;
            bottom: 0;

            img {
                position: absolute;
                bottom: -3em;
                left: 0;
                right: 0;
                margin: 0 auto;
                box-sizing: border-box;
                display: none;
                box-shadow: 0px -2px 12px 3px lighten($alternative-color, 60%);

                @media(min-device-width: 600px) and (max-device-width: 800px) {
                    @media (min-height: 400px) and (orientation: portrait) {
                        max-width: 768px;
                        display: block;
                        bottom: 20em;
                    }
                }

                @media(min-width: 650px) {
                    @media (min-height: 425px) {
                        max-width: 768px;
                        display: block;
                    }
                }

                @media(min-width: 810px) {
                    @media (min-height: 500px) {
                        max-width: 760px;
                        bottom: -3em;
                    }

                    @media (min-height: 700px) {
                        max-width: 850px;
                    }

                    @media (min-height: 850px) {
                        max-width: 1200px;
                    }
                }
            }
        }
    }

    .banner {
        text-align: center;
        box-sizing: border-box;

        .inner {
            height: auto;
            padding: 3vh 15px;
            color: $alternative-color;
            justify-content: flex-start;

            &.flex-container-small {
                flex-direction: column;
                align-items: center;

                .desc {
                    max-width: 500px;
                    margin-top: 2em;
                }

                .headline-with-downloads {
                    .download-links a {
                        &:last-child {
                            display: none;
                        }
                    }
                }

                /* Phone Landscape */
                @media screen and (min-width: 500px) 
                    and (min-height: 320px)
                    and (orientation: landscape) {
                    flex-direction: row-reverse;
                    align-items: flex-start;
                    justify-content: center;

                    .desc {
                        margin-right: 1em;
                        margin-top: 0;
                    }
                }
            }

            .slogan {
                color: inherit;
                display: inline-block;
                padding: 25px;
                margin-bottom: 1em;
                background: rgba(255, 255, 255, .7);

                h1 {
                    font-weight: 800;
                    box-sizing: border-box;
                    color: $primary-color;
                    text-shadow: 1px 1px 2px lighten($primary-color, 25%);
                    white-space: nowrap;
                }
            }

            p {
                text-align: justify;

                &:not(:last-child) {
                    margin-bottom: 1em;
                }
            }


            @media(min-width: $small) {
                padding: 10vh 15px;

                &.flex-container-small {
                    flex-direction: row-reverse;
                    justify-content: center;
                    align-items: stretch;

                    .headline-with-downloads {
                        display: flex;
                        flex-direction: column;

                        .download-links a {
                            &:first-child {
                                margin-right: .5em;
                            }

                            &:last-child {
                                display: block;
                            }
                        }
                    }

                    .slogan {
                        max-width: 300px;
                        display: flex;
                        flex-direction: column;
                        justify-content: center;
                    }

                    .desc {
                        margin-right: 1em;
                        margin-top: 0;
                    }
                }
            }
        }

        /* Portrait Nexus 7 */
        @media only screen 
        and (min-device-width: 600px) 
            and (max-device-width: 960px)
            and (orientation: portrait) 
            and (-webkit-min-device-pixel-ratio: 1) {
            height: 70vh;
        }
    }

    @media(min-width: $medium) {
        header {
            .inner {
                nav {
                    flex: 2;

                    #burger-menu {
                        display: none;
                    }

                    ul {
                        @include margin-bottom-reset();

                        display: flex;
                        background: none;
                        transform: translate3d(0, 0, 0);
                        height: auto;
                        position: static;
                        margin-top: 0;
                        width: auto;

                        li {
                            margin: 0 2.5em 0 0;
                            padding: 0;
                            cursor: pointer;
                            white-space: nowrap;
                            color: $alternative-color;

                            .nav-link {
                                padding: 1em 0;

                                &:hover {
                                    color: $primary-color;
                                }
                            }

                            &:last-child {
                                margin-right: 0;
                            }
                        }
                    }
                }
            }
        }
    }
}