plugins:
  - stylelint-scss
customSyntax: postcss-scss
rules:
  color-no-invalid-hex: true
  string-no-newline: true
  unit-no-unknown: true
  property-no-unknown:
    - true
    # Used in css modules
    - ignoreProperties:
      - composes
  block-no-empty: true
  selector-pseudo-class-no-unknown:
    - true
    # Used in css modules
    - ignorePseudoClasses:
      - local
      - global
  selector-pseudo-element-no-unknown: true
  media-feature-name-no-unknown: true
  at-rule-no-unknown:
    - true
    # Sass related mixins
    - ignoreAtRules:
      - include
      - mixin
      - if
      - else
      - each
      - extend
      - function
      - return
      - for
      - at-root
      - warn
  comment-no-empty: true
  no-duplicate-at-import-rules: true
  no-duplicate-selectors: true
  no-extra-semicolons: true
  alpha-value-notation: number
  color-named: never
  length-zero-no-unit: true
  no-eol-whitespace: true
  max-empty-lines: 1
  # no-descending-specificity: true
  number-leading-zero: never
  color-hex-case: upper
  string-quotes: single
  indentation: 2
  declaration-block-no-duplicate-properties:
    - true
    # We use some rare duplicate property values for browser variance
    - ignoreProperties:
      - font-size
      - word-break
      - composes
      - filter
      - background
      - width
      - transition
      - display

  # ($var / 2) rather than ($var/2)
  function-calc-no-unspaced-operator: true

  # something { not something{
  block-opening-brace-space-before: always

  # TODO: # Allows input[type=search]
  selector-no-qualifying-type:
    - true
    - ignore:
      - attribute

  # Put a line-break between sections of CSS, but allow quicky one-liners for legibility
  block-closing-brace-newline-after:
    - always-multi-line
    - ignoreAtRules:
        - if
        - else

  # camelCase mixin, function, and variable names
  scss/at-mixin-pattern: "^[a-z][a-zA-Z0-9]+$"
  scss/at-function-pattern: "^[a-z][a-zA-Z0-9]+$"
  scss/dollar-variable-pattern: "^[a-z][a-zA-Z0-9]+$"