// This fixes a browser bug in Chrome (current as of 40.0.2214.111).
// When using the buffered renderer plugin, the view rows are positioned by using CSS transforms.
// However, b/c of the browser bug, the scrollbar will be covered by the itemcontainer when scrolled
// to a point where the view is refreshed so we need to bump up its z-index. See EXTJS-15608.
.#{$prefix}grid-view,
.#{$prefix}tree-view {
    z-index: 1;
}

// So that we can easily ascertain the default theme grid row height once per app run.
.#{$prefix}theme-row-height-el {
    height: $grid-row-height;
}

.#{$prefix}grid-body {
    background: $grid-body-background-color;
    border-width: $grid-body-border-width;
    border-style: $grid-body-border-style;
    border-color: $grid-body-border-color;
}

.#{$prefix}grid-empty {
    padding: $grid-empty-padding;
    color: $grid-empty-color;
    background-color: $grid-empty-background-color;
    font: $grid-empty-font-weight $grid-empty-font-size $grid-empty-font-family;
}

// Default background color applied at table level - each row is its own separate table
.#{$prefix}grid-item {
    color: $grid-row-cell-color;
    font: $grid-row-cell-font;
    background-color: $grid-row-cell-background-color;
}

.#{$prefix}grid-item-alt {
    background-color: $grid-row-cell-alt-background-color;
}

.#{$prefix}grid-item-over {
    color: $grid-row-cell-over-color;
    background-color: $grid-row-cell-over-background-color;
}

// IE does not support outline-offset property, so we have to
// use pseudo element to show the focused cell border
.#{$prefix}grid-item-focused {
    // This is to remove the default outline in FF and IE
    outline: 0;

    .#{$prefix}grid-cell-inner {
        // Inner grid cell element has position: relative,
        // so setting z-index: 2 will elevate it just above default position with z-index 1
        z-index: 2;
    }

    .#{$prefix}keyboard-mode & {
        // Pseudo-el is positioned *below* the inner grid cell content
        // but its border will shine through
        .#{$prefix}grid-cell-inner:before {
            content: "";
            position: absolute;
            z-index: -1;
            top: $grid-row-cell-focus-border-inset;
            right: $grid-row-cell-focus-border-inset;
            bottom: $grid-row-cell-focus-border-inset;
            left: $grid-row-cell-focus-border-inset;
            pointer-events: none;

            border: $grid-row-cell-focus-border-width $grid-row-cell-focus-border-style $grid-row-cell-focus-border-color;
        }

        @if not is-null($grid-row-cell-focus-color) {
            color: $grid-row-cell-focus-color;
        }

        @if not is-null($grid-row-cell-focus-background-color) {
            background-color: $grid-row-cell-focus-background-color;
        }
    }
}

.#{$prefix}grid-item-selected {
    color: $grid-row-cell-selected-color;
    background-color: $grid-row-cell-selected-background-color;
}

.#{$prefix}grid-with-row-lines {
    .#{$prefix}grid-item {
        border-style: $grid-row-cell-border-style;
        border-width: $grid-row-cell-border-width 0 0;
        border-color: $grid-row-border-color;
    }

    .#{$prefix}grid-item:first-child {
        border-top-color: $grid-row-cell-background-color;
    }

    // the following rules have .x-grid-item added to increase specificity over the
    // :first-child rule above
    .#{$prefix}grid-item.#{$prefix}grid-item-over {
        border-style: $grid-row-cell-over-border-style;
        border-color: $grid-row-cell-over-border-color;
    }

    .#{$prefix}grid-item-over + .#{$prefix}grid-item {
        border-top-style: $grid-row-cell-over-border-style;
        border-top-color: $grid-row-cell-over-border-color;
    }

    .#{$prefix}grid-item.#{$prefix}grid-item-selected {
        border-style: $grid-row-cell-selected-border-style;
        border-color: $grid-row-cell-selected-border-color;
    }

    .#{$prefix}grid-item-selected + .#{$prefix}grid-item {
        border-top-style: $grid-row-cell-selected-border-style;
        border-top-color: $grid-row-cell-selected-border-color;
    }

    .#{$prefix}grid-item:last-child {
        border-bottom-width: $grid-row-cell-border-width;
    }

    // IE8 doesn't have last-child, so we end up with no border on the bottom row.
    // To work around this issue we give all the rows a bottom border and negative
    // margin so that they overlap.  This approach doesn't work everywhere though...
    // in newer IE, using the browser's zoom feature can result in rounding errors on 
    // the negative margin, resulting in the appearance of some borders being double.
    .#{$prefix}ie8 & {
        .#{$prefix}grid-item {
            border-width: $grid-row-cell-border-width 0;
            margin-top: (-$grid-row-cell-border-width);
        }

        .#{$prefix}grid-item:first-child {
            margin-top: 0;
        }
    }
}

.#{$prefix}grid-cell-inner {
    position: relative;
    // Inner grid cell element is set to position: relative,
    // This causes a bug in IE where on scrolling cells disappear from view (see ExtJS-26552) 
    // so z-index: 1 will elevate it just above default position so that they may be visible
    z-index: 1;
    text-overflow: $grid-cell-inner-text-overflow;
    padding: $grid-cell-inner-padding;
}

@if $include-rtl and (left($grid-cell-inner-padding) != right($grid-cell-inner-padding)) {
    .#{$prefix}rtl.#{$prefix}grid-cell-inner {
        padding: rtl($grid-cell-inner-padding);
    }
}

@if $include-ext-grid-column-rownumberer
    or $include-ext-selection-checkboxmodel
    or $include-ext-grid-plugin-rowexpander {
    // .x-grid-cell-special is used by RowNumberer, CheckboxModel, and RowExpander
    .#{$prefix}grid-cell-special {
        @if $grid-cell-special-border-width != 0 {
            border-color: $grid-cell-special-border-color;
            border-style: $grid-cell-special-border-style;
            border-right-width: $grid-cell-special-border-width;
        }
        @if not is-null($grid-cell-special-background-color) {
            @if is-null($grid-cell-special-background-gradient) {
                background-color: $grid-cell-special-background-color;
            } @else {
                @include background-gradient($grid-cell-special-background-color, $grid-cell-special-background-gradient);
            }

            .#{$prefix}grid-item-selected & {
                @if not is-null($grid-cell-special-selected-border-color) {
                    border-right-color: $grid-cell-special-selected-border-color;
                }

                @if not is-null($grid-row-cell-selected-background-color) {
                    @if is-null($grid-cell-special-background-gradient) {
                        background-color: $grid-row-cell-selected-background-color;
                    } @else {
                        @include background-gradient($grid-row-cell-selected-background-color, $grid-cell-special-background-gradient, left);
                    }
                }
            }

            @if $include-slicer-gradient {
                .#{$prefix}nlg & {
                    background-repeat: repeat-y;
                    background-image: slicer-background-image(grid-cell-special, 'grid/cell-special-bg');
                }

                .#{$prefix}nlg .#{$prefix}grid-item-selected & {
                    background-image: slicer-background-image(grid-cell-special-selected, 'grid/cell-special-selected-bg');
                }
                @include x-slicer(grid-cell-special);
                @include x-slicer(grid-cell-special-selected);
            }
        }
    }

    @if $include-rtl and $grid-cell-special-border-width != 0 {
        .#{$prefix}rtl.#{$prefix}grid-cell-special {
            border-right-width: 0;
            border-left-width: $grid-cell-special-border-width;
        }
    }
}

.#{$prefix}grid-dirty-cell {
    @if $enable-font-icons and ($grid-cell-dirty-glyph != null) {
        > .#{$prefix}grid-cell-inner:after {
            @include font-icon($grid-cell-dirty-glyph, $pseudo: false);
            color: $grid-cell-dirty-glyph-color;
            position: absolute;
            top: 0;
            left: 0;
        }
    } @else {
        background: theme-background-image('grid/dirty') no-repeat 0 0;
    }
}

@if $include-rtl {
    .#{$prefix}rtl.#{$prefix}grid-dirty-cell {
        @if $enable-font-icons and ($grid-cell-dirty-glyph-rtl != null) {
            > .#{$prefix}grid-cell-inner:after {
                @include font-icon($grid-cell-dirty-glyph-rtl, $pseudo: false);
                right: 0;
            }
        } @else {
            background-image: theme-background-image('grid/dirty-rtl');
            background-position: right 0;
        }
    }
}

// add grid-row class to increase specificity over the state rules that set background-color
// e.g. .x-grid-item-over .x-grid-td, .x-grid-row-focused .x-grid-td
.#{$prefix}grid-row .#{$prefix}grid-cell-selected {
    color: $grid-cell-selected-color;
    background-color: $grid-cell-selected-background-color;
}

// Column lines on leading edge where there may be whitespace following
.#{$prefix}grid-with-col-lines {
    .#{$prefix}grid-cell {
        border-style: $grid-row-cell-border-style;
        border-color: $grid-col-border-color;
        border-width: 0 $grid-row-cell-border-width 0 0;
    }

    .#{$prefix}grid-item-over .#{$prefix}grid-cell {
        border-color: $grid-row-cell-over-border-color;
        border-style: $grid-row-cell-over-border-style;
    }

    .#{$prefix}grid-item-selected .#{$prefix}grid-cell {
        border-color: $grid-row-cell-selected-border-color;
        border-style: $grid-row-cell-selected-border-style;
    }
}

// Column lines in RTL mode - leading edge is left.
@if $include-rtl {
    .#{$prefix}rtl.#{$prefix}grid-with-col-lines .#{$prefix}grid-cell {
        border-width: 0 0 0 $grid-row-cell-border-width;
    }
}

.#{$prefix}grid-resize-marker {
    width: $grid-row-cell-border-width;
    background-color: $grid-resize-marker-background-color;
}
