/* 
    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 {
        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;
                            }
                        }
                    }
                }
            }
        }
    }
}