/**
 * Hybrid Grid Sytem
 *
 * Blend of the Semantic Grid System and Zurb Foundation with a little Twitter Bootstrap
 */

/* Settings */

@import 'variables.less';

/*
@fixed-column-width: 40px;
@fixed-gutter-width: 20px;
@fixed-columns: 12;

@fluid-column-width: 4.3%;
@fluid-gutter-width: 4.4%;
@fluid-columns: 12;

@mobile-break-width: 480px;
@mobile-column-width: 8.6%;
@mobile-gutter-width: 8.8%;
@mobile-columns: 6;
*/

/* Grid */

#grid {

    .cols(@cols,@width,@gutter){
        .border-box();
        width: ((@cols * @width) + ((@cols - 1) * @gutter));
        margin-left: @gutter;
        position: relative;
        display: inline;
        float: left;
        min-height: 1px;
        &:first-child {
            margin-left: 0;
        }
        &:last-child {
            float: right;
        }
    }

}

.grid-fixed,.grid-fluid {
    .clearfix;
    .row {
        .border-box();
        display: block;
        width: 100%;
        margin: 0 auto;
        .clearfix;

        .center,.center:last-child {
            float: none;
            display: block;
            margin: 0 auto;
        }
    }
}

.grid-fixed {
    @total-width: (@fixed-column-width*@fixed-columns) + (@fixed-gutter-width*(@fixed-columns - 1));
    @column-width: @fixed-column-width;
    @gutter-width: @fixed-gutter-width;
    @columns: @fixed-columns;
    width: @total-width;

    /* This is duplicated in both classes. Unavoidable. */
    .colX (@index) when (@index > 0) {
        (~".col@{index}") {
            #grid > .cols(@index,@column-width,@gutter-width);
        }
        .colX(@index - 1);
    }
    .colX (0) {}
    .colX(@columns);

    .offsetX (@index) when (@index > 0) {
        (~".offset@{index}") {
            margin-left: (@index * @column-width) + ((@index + 1) * @gutter-width);
        }
        .offsetX(@index - 1);
    }
    .offsetX (0) {}
    .offsetX(@columns - 1);

    .pushX (@index) when (@index > 0) {
        (~".push@{index}") {
            left: @index * (@column-width + @gutter-width);
        }
        .pushX(@index - 1);
    }
    .pushX (0) {}
    .pushX(@columns - 1);

    .pullX (@index) when (@index > 0) {
        (~".pull@{index}") {
            right: @index * (@column-width + @gutter-width);
        }
        .pullX(@index - 1);
    }
    .pullX (0) {}
    .pullX(@columns - 1);
}


.grid-fluid {
    @total-width: 100%;
    @column-width: @fluid-column-width;
    @gutter-width: @fluid-gutter-width;
    @columns: @fluid-columns;
    width: @total-width;

    /* This is duplicated in both classes. Unavoidable. */
    .colX (@index) when (@index > 0) {
        (~".col@{index}") {
            #grid > .cols(@index,@column-width,@gutter-width);
        }
        .colX(@index - 1);
    }
    .colX (0) {}
    .colX(@columns);

    .offsetX (@index) when (@index > 0) {
        (~".offset@{index}") {
            margin-left: (@index * @column-width) + ((@index + 1) * @gutter-width);
        }
        .offsetX(@index - 1);
    }
    .offsetX (0) {}
    .offsetX(@columns - 1);

    .pushX (@index) when (@index > 0) {
        (~".push@{index}") {
            left: @index * (@column-width + @gutter-width);
        }
        .pushX(@index - 1);
    }
    .pushX (0) {}
    .pushX(@columns - 1);

    .pullX (@index) when (@index > 0) {
        (~".pull@{index}") {
            right: @index * (@column-width + @gutter-width);
        }
        .pullX(@index - 1);
    }
    .pullX (0) {}
    .pullX(@columns - 1);
}


@media all and (max-width: @mobile-break-width) {

    // Reset all columns to full width
    .grid-fixed {
        .colX (@index) when (@index > 0) {
            (~".col@{index}") {
                width: 100%;
                margin: 0;
                left: 0;
                right: 0;
            }
            .colX(@index - 1);
        }
        .colX (0) {}
        .colX(@fixed-columns);
    }
    .grid-fluid {
        .colX (@index) when (@index > 0) {
            (~".col@{index}") {
                width: 100%;
                margin: 0;
                left: 0;
                right: 0;
            }
            .colX(@index - 1);
        }
        .colX (0) {}
        .colX(@fluid-columns);
    }

    .grid-fixed, .grid-fluid {
        @total-width: 100%;
        @column-width: @mobile-column-width;
        @gutter-width: @mobile-gutter-width;
        @columns: @mobile-columns;
        width: @total-width;

        .m-colX (@index) when (@index > 0) {
            (~".m-col@{index}") {
                #grid > .cols(@index,@column-width,@gutter-width);
            }
            .m-colX(@index - 1);
        }
        .m-colX (0) {}
        .m-colX(@mobile-columns);

        .m-offsetX (@index) when (@index > 0) {
            (~".m-offset@{index}") {
                margin-left: (@index * @column-width) + ((@index + 1) * @gutter-width);
            }
            .m-offsetX(@index - 1);
        }
        .m-offsetX (0) {}
        .m-offsetX(@columns - 1);

        .m-pushX (@index) when (@index > 0) {
            (~".m-push@{index}") {
                left: @index * (@column-width + @gutter-width);
            }
            .m-pushX(@index - 1);
        }
        .m-pushX (0) {}
        .m-pushX(@columns - 1);

        .m-pullX (@index) when (@index > 0) {
            (~".m-pull@{index}") {
                right: @index * (@column-width + @gutter-width);
            }
            .m-pullX(@index - 1);
        }
        .m-pullX (0) {}
        .m-pullX(@columns - 1);
    }

}
