plugins:
    - stylelint-selector-bem-pattern
    - stylelint-scss
rules:
    plugin/selector-bem-pattern:
        componentName: '[A-Z]+'
        componentSelectors:
            initial: '^\\.{componentName}(?:-[a-z]+)?$'
        utilitySelectors: '^\\.u-[a-z]+$'

    # Color (http://stylelint.io/user-guide/rules/#color)
    color-hex-case: lower
    color-hex-length: long
    color-named: never
    color-no-invalid-hex: true

    # Font family (http://stylelint.io/user-guide/rules/#font-family)
    font-family-name-quotes: always-where-required

    # Font weight (http://stylelint.io/user-guide/rules/#font-weight)
    font-weight-notation: numeric

    # Function (http://stylelint.io/user-guide/rules/#function)
    function-calc-no-unspaced-operator: true
    function-comma-newline-after: never-multi-line
    function-comma-newline-before: never-multi-line
    function-linear-gradient-no-nonstandard-direction: true
    function-max-empty-lines: 0
    function-name-case: lower
    function-parentheses-newline-inside: never-multi-line
    function-parentheses-space-inside: never
    function-url-quotes: always
    function-whitespace-after: always

    # Number (http://stylelint.io/user-guide/rules/#number)
    number-leading-zero: never
    number-max-precision: 3
    number-no-trailing-zeros: true

    # String (http://stylelint.io/user-guide/rules/#string)
    string-no-newline: true
    string-quotes: double

    # Length (http://stylelint.io/user-guide/rules/#length)
    length-zero-no-unit: true

    # Time (http://stylelint.io/user-guide/rules/#time)
    time-no-imperceptible: true

    # Unit (http://stylelint.io/user-guide/rules/#unit)
    unit-case: lower
    unit-no-unknown: true

    # Value (http://stylelint.io/user-guide/rules/#value)
    value-keyword-case: lower
    value-no-vendor-prefix: true

    # Value list (http://stylelint.io/user-guide/rules/#value-list)
    value-list-comma-newline-after: always-multi-line
    value-list-comma-newline-before: never-multi-line
    value-list-comma-space-after: always
    value-list-comma-space-before: never
    value-list-max-empty-lines: 0

    # Custom property (http://stylelint.io/user-guide/rules/#custom-property)
    # We don't currently use custom properties.

    # Shorthand property (http://stylelint.io/user-guide/rules/#shorthand-property)
    shorthand-property-no-redundant-values: true

    # Property (http://stylelint.io/user-guide/rules/#property)
    property-case: lower
    property-no-unknown: true
    property-no-vendor-prefix: true

    # Keyframe declaration (http://stylelint.io/user-guide/rules/#keyframe-declaration
    keyframe-declaration-no-important: true

    # Declaration (http://stylelint.io/user-guide/rules/#declaration)
    declaration-bang-space-after: never
    declaration-bang-space-before: always
    declaration-colon-newline-after: always-multi-line
    declaration-colon-space-after: always
    declaration-colon-space-before: never
    declaration-empty-line-before: never

    # Declaration block (http://stylelint.io/user-guide/rules/#declaration-block)
    declaration-block-no-duplicate-properties:
        - true
        - ignore:
            - consecutive-duplicates-with-different-values
    declaration-block-no-ignored-properties: true
    declaration-block-no-redundant-longhand-properties: true
    declaration-block-no-shorthand-property-overrides: true
    declaration-block-properties-order:
        - display
        - position
        - top
        - right
        - bottom
        - left
        - flex
        - flex-basis
        - flex-direction
        - flex-flow
        - flex-grow
        - flex-shrink
        - flex-wrap
        - align-content
        - align-items
        - align-self
        - justify-content
        - order
        - width
        - min-width
        - max-width
        - height
        - min-height
        - max-height
        - margin
        - margin-top
        - margin-right
        - margin-bottom
        - margin-left
        - padding
        - padding-top
        - padding-right
        - padding-bottom
        - padding-left
        - float
        - clear
        - clip
        - columns
        - column-gap
        - column-fill
        - column-rule
        - column-span
        - column-count
        - column-width
        - transform
        - transform-box
        - transform-origin
        - transform-style
        - transition
        - transition-delay
        - transition-duration
        - transition-property
        - transition-timing-function
        - border
        - border-top
        - border-right
        - border-bottom
        - border-left
        - border-width
        - border-top-width
        - border-right-width
        - border-bottom-width
        - border-left-width
        - border-style
        - border-top-style
        - border-right-style
        - border-bottom-style
        - border-left-style
        - border-radius
        - border-top-left-radius
        - border-top-right-radius
        - border-bottom-left-radius
        - border-bottom-right-radius
        - border-color
        - border-top-color
        - border-right-color
        - border-bottom-color
        - border-left-color
        - outline
        - outline-color
        - outline-offset
        - outline-style
        - outline-width
        - background
        - background-attachment
        - background-clip
        - background-color
        - background-image
        - background-repeat
        - background-position
        - background-size
        - color
        - font
        - font-family
        - font-size
        - font-smoothing
        - font-style
        - font-variant
        - font-weight
        - letter-spacing
        - line-height
        - list-style
        - text-align
        - text-decoration
        - text-indent
        - text-overflow
        - text-rendering
        - text-shadow
        - text-transform
        - text-wrap
        - white-space
        - word-spacing
        - border-collapse
        - border-spacing
        - box-shadow
        - caption-side
        - content
        - cursor
        - empty-cells
        - opacity
        - overflow
        - quotes
        - speak
        - table-layout
        - vertical-align
        - visibility
        - z-index
    declaration-block-semicolon-newline-after: always
    declaration-block-semicolon-newline-before: never-multi-line
    declaration-block-semicolon-space-after: always-single-line
    declaration-block-semicolon-space-before: never
    declaration-block-single-line-max-declarations: 1
    declaration-block-trailing-semicolon: always

    # Block (http://stylelint.io/user-guide/rules/#block)
    block-closing-brace-empty-line-before: never
    block-closing-brace-newline-after:
        - always
        - ignoreAtRules:
            - if
            - else
    block-closing-brace-newline-before: always-multi-line
    block-closing-brace-space-after: always-single-line
    block-closing-brace-space-before: always-single-line
    block-no-empty: true
    block-no-single-line: true
    block-opening-brace-newline-after: always
    block-opening-brace-newline-before: never-single-line
    block-opening-brace-space-after: always-single-line
    block-opening-brace-space-before: always

    # Selector (http://stylelint.io/user-guide/rules/#selector)
    selector-attribute-brackets-space-inside: never
    selector-attribute-operator-space-after: never
    selector-attribute-operator-space-before: never
    selector-attribute-quotes: always
    selector-combinator-space-after: always
    selector-combinator-space-before: always
    selector-descendant-combinator-no-non-space: true
    selector-max-compound-selectors: 3
    selector-max-specificity: 0,3,0
    selector-no-id: true
    #selector-no-qualifying-type: true
    selector-no-vendor-prefix: true
    selector-pseudo-class-case: lower
    selector-pseudo-class-no-unknown: true
    selector-pseudo-class-parentheses-space-inside: never
    selector-pseudo-element-case: lower
    selector-pseudo-element-colon-notation: double
    selector-pseudo-element-no-unknown: true
    selector-root-no-composition: true
    selector-type-case: lower
    selector-type-no-unknown: true
    selector-max-empty-lines: 0

    # Selector list (http://stylelint.io/user-guide/rules/#selector-list)
    selector-list-comma-newline-after: always
    selector-list-comma-newline-before: never-multi-line
    selector-list-comma-space-after: always-single-line
    selector-list-comma-space-before: never

    # Rule (http://stylelint.io/user-guide/rules/#rule)
    rule-nested-empty-line-before:
        - always-multi-line
        - except:
            - first-nested
        - ignore:
            - after-comment
    rule-non-nested-empty-line-before:
        - always
        - ignore:
            - after-comment

    # Media feature (http://stylelint.io/user-guide/rules/#media-feature)
    media-feature-colon-space-after: always
    media-feature-colon-space-before: never
    media-feature-name-case: lower
    media-feature-name-no-unknown: true
    media-feature-name-no-vendor-prefix: true
    media-feature-no-missing-punctuation: true
    media-feature-parentheses-space-inside: never
    media-feature-range-operator-space-after: always
    media-feature-range-operator-space-before: always

    # Media query list (http://stylelint.io/user-guide/rules/#media-query-list)
    media-query-list-comma-newline-after: always-multi-line
    media-query-list-comma-newline-before: never-multi-line
    media-query-list-comma-space-after: always
    media-query-list-comma-space-before: never

    # At-rule (http://stylelint.io/user-guide/rules/#at-rule)
    # at-rule-empty-line-before:
    #     - always
    #     - ignore:
    #         - after-comment
    #     - except:
    #         - blockless-group
    #         - blockless-after-same-name-blockless
    #     - ignoreAtRules:
    #         - if
    #         - else
    at-rule-name-case: lower
    at-rule-name-space-after: always
    at-rule-no-vendor-prefix: true
    at-rule-semicolon-newline-after: always

    # stylelint-disable comment (http://stylelint.io/user-guide/rules/#stylelint-disable-comment)
    stylelint-disable-reason: always-after

    # Comment (http://stylelint.io/user-guide/rules/#comment)
    # comment-empty-line-before:
    #     - always
    #     - except:
    #         - first-nested
    #     - ignore:
    #         - between-comments
    #         - stylelint-commands
    comment-no-empty: true
    comment-whitespace-inside: always

    # General / Sheet (http://stylelint.io/user-guide/rules/#general--sheet)
    indentation: 4
    max-empty-lines: 5
    max-line-length: 160
    max-nesting-depth: 4
    no-duplicate-selectors: true
    no-eol-whitespace:
        - true
        - ignore:
            - empty-lines
    no-extra-semicolons: true
    no-invalid-double-slash-comments: true
    no-missing-end-of-source-newline: true

    # stylelint-scss (https://www.npmjs.com/package/stylelint-scss)
    scss/at-extend-no-missing-placeholder: true
    scss/at-import-no-partial-leading-underscore: true
    scss/at-mixin-argumentless-call-parentheses: never
    scss/dollar-variable-colon-space-after: always
    scss/dollar-variable-colon-space-before: never
    scss/operator-no-newline-after: true
    scss/operator-no-newline-before: true
    scss/operator-no-unspaced: true
    scss/selector-no-redundant-nesting-selector: true
