Index: .scss-lint.yml
===================================================================
--- .scss-lint.yml	(revision 11136)
+++ .scss-lint.yml	(nonexistent)
@@ -1,193 +0,0 @@
-# Default application configuration that all configurations inherit from.
-
-scss_files: "**/*.scss"
-
-linters:
-  BangFormat:
-    enabled: true
-    space_before_bang: true
-    space_after_bang: false
-
-  BorderZero:
-    enabled: true
-    convention: zero # or `none`
-
-  ColorKeyword:
-    enabled: true
-
-  ColorVariable:
-    enabled: false
-
-  Comment:
-    enabled: false
-
-  DebugStatement:
-    enabled: true
-
-  DeclarationOrder:
-    enabled: false
-
-  DuplicateProperty:
-    enabled: false
-
-  ElsePlacement:
-    enabled: true
-    style: same_line # or 'new_line'
-
-  EmptyLineBetweenBlocks:
-    enabled: true
-    ignore_single_line_blocks: true
-
-  EmptyRule:
-    enabled: true
-
-  FinalNewline:
-    enabled: true
-    present: true
-
-  HexLength:
-    enabled: true
-    style: short # or 'long'
-
-  HexNotation:
-    enabled: true
-    style: lowercase # or 'uppercase'
-
-  HexValidation:
-    enabled: true
-
-  IdSelector:
-    enabled: false
-
-  ImportantRule:
-    enabled: false
-
-  ImportPath:
-    enabled: true
-    leading_underscore: false
-    filename_extension: false
-
-  Indentation:
-    enabled: true
-    allow_non_nested_indentation: false
-    character: tab # or 'space'
-    width: 1
-
-  LeadingZero:
-    enabled: true
-    style: include_zero # or 'include_zero'
-
-  MergeableSelector:
-    enabled: false
-    force_nesting: true
-
-  NameFormat:
-    enabled: true
-    allow_leading_underscore: true
-    convention: hyphenated_lowercase # or 'BEM', or a regex pattern
-
-  NestingDepth:
-    enabled: true
-    max_depth: 7
-
-  PlaceholderInExtend:
-    enabled: true
-
-  PropertyCount:
-    enabled: false
-    include_nested: false
-    max_properties: 10
-
-  PropertySortOrder:
-    enabled: true
-    ignore_unspecified: false
-    separate_groups: false
-
-  PropertySpelling:
-    enabled: true
-    extra_properties: []
-
-  PseudoElement:
-    enabled: false
-
-  QualifyingElement:
-    enabled: false
-    allow_element_with_attribute: false
-    allow_element_with_class: false
-    allow_element_with_id: false
-
-  SelectorDepth:
-    enabled: true
-    max_depth: 6
-
-  SelectorFormat:
-    enabled: true
-    convention: hyphenated_lowercase # or 'BEM', or 'hyphenated_BEM', or 'snake_case', or 'camel_case', or a regex pattern
-    ignored_names: ['signup_form', 'send_message_form', 'ac_results']
-
-  Shorthand:
-    enabled: false
-
-  SingleLinePerProperty:
-    enabled: true
-    allow_single_line_rule_sets: true
-
-  SingleLinePerSelector:
-    enabled: true
-
-  SpaceAfterComma:
-    enabled: true
-
-  SpaceAfterPropertyColon:
-    enabled: true
-    style: one_space # or 'no_space', or 'at_least_one_space', or 'aligned'
-
-  SpaceAfterPropertyName:
-    enabled: true
-
-  SpaceBeforeBrace:
-    enabled: true
-    style: space # or 'new_line'
-    allow_single_line_padding: false
-
-  SpaceBetweenParens:
-    enabled: true
-    spaces: 0
-
-  StringQuotes:
-    enabled: true
-    style: double_quotes
-
-  TrailingSemicolon:
-    enabled: true
-
-  TrailingZero:
-    enabled: false
-
-  UnnecessaryMantissa:
-    enabled: true
-
-  UnnecessaryParentReference:
-    enabled: true
-
-  UrlFormat:
-    enabled: true
-
-  UrlQuotes:
-    enabled: true
-
-  VariableForProperty:
-    enabled: false
-    properties: []
-
-  VendorPrefix:
-    enabled: true
-    identifier_list: base
-    additional_identifiers: []
-    excluded_identifiers: []
-
-  ZeroUnit:
-    enabled: true
-
-  Compass::*:
-    enabled: false
Index: .stylelintrc
===================================================================
--- .stylelintrc	(nonexistent)
+++ .stylelintrc	(working copy)
@@ -0,0 +1,113 @@
+{
+"rules": {
+  "at-rule-empty-line-before": [ "always", {
+    except: ["blockless-group"],
+    ignore: ["after-comment"],
+  } ],
+  "at-rule-name-case": "lower",
+  "at-rule-name-space-after": "always-single-line",
+  "at-rule-no-unknown": true,
+  "at-rule-semicolon-newline-after": "always",
+  "block-closing-brace-newline-after": "always",
+  "block-closing-brace-newline-before": "always",
+  "block-opening-brace-newline-after": "always",
+  "block-opening-brace-space-before": "always",
+  "color-hex-case": "lower",
+  "color-hex-length": "short",
+  "color-named": "never",
+  "color-no-invalid-hex": true,
+  "comment-empty-line-before": [ "always", {
+    ignore: ["stylelint-commands"],
+  } ],
+  "declaration-bang-space-after": "never",
+  "declaration-bang-space-before": "always",
+  "declaration-block-no-duplicate-properties": [ true, {
+    ignore: ["consecutive-duplicates"],
+  } ],
+  "declaration-block-no-shorthand-property-overrides": true,
+  "declaration-block-semicolon-newline-after": "always",
+  "declaration-block-semicolon-space-before": "never",
+  "declaration-block-trailing-semicolon": "always",
+  "declaration-colon-newline-after": "always-multi-line",
+  "declaration-colon-space-after": "always-single-line",
+  "declaration-colon-space-before": "never",
+  "font-family-name-quotes": "always-where-recommended",
+  "font-weight-notation": "numeric",
+  "function-calc-no-unspaced-operator": true,
+  "function-comma-space-after": "always",
+  "function-comma-space-before": "never",
+  "function-linear-gradient-no-nonstandard-direction": true,
+  "function-max-empty-lines": 1,
+  "function-name-case": "lower",
+  "function-parentheses-space-inside": "never",
+  "function-url-quotes": "never",
+  "function-whitespace-after": "always",
+  "indentation": "tab",
+  "keyframe-declaration-no-important": true,
+  "length-zero-no-unit": true,
+  "max-empty-lines": 2,
+  "max-line-length": [ 80, {
+    "ignore": "non-comments",
+  } ],
+  "media-feature-colon-space-after": "always",
+  "media-feature-colon-space-before": "never",
+  "media-feature-no-missing-punctuation": true,
+  "media-feature-range-operator-space-after": "always",
+  "media-feature-range-operator-space-before": "always",
+  "media-query-list-comma-newline-after": "always-multi-line",
+  "media-query-list-comma-space-after": "always-single-line",
+  "media-query-list-comma-space-before": "never",
+  "no-eol-whitespace": true,
+  "no-extra-semicolons": true,
+  "no-invalid-double-slash-comments": true,
+  "no-missing-end-of-source-newline": true,
+  "number-leading-zero": "always",
+  "number-no-trailing-zeros": true,
+  "property-case": "lower",
+  "property-no-unknown": true,
+  "rule-nested-empty-line-before": [ "always", {
+    ignore: ["after-comment"],
+  } ],
+  "rule-non-nested-empty-line-before": [ "always", {
+    ignore: ["after-comment"],
+  } ],
+  "selector-attribute-brackets-space-inside": "never",
+  "selector-attribute-operator-space-after": "never",
+  "selector-attribute-operator-space-before": "never",
+  "selector-attribute-quotes": "always",
+  "selector-class-pattern": [
+    "^[a-z]+(-[a-z]+)*",
+    {
+    "message": "Selector should use lowercase and separate words with hyphens (selector-class-pattern)",
+    },
+  ],
+  "selector-id-pattern": [
+    "^[a-z]+(-[a-z]+)*",
+    {
+    "message": "Selector should use lowercase and separate words with hyphens (selector-id-pattern)",
+    },
+  ],
+  "selector-combinator-space-after": "always",
+  "selector-combinator-space-before": "always",
+  "selector-list-comma-newline-after": "always",
+  "selector-list-comma-space-before": "never",
+  "selector-max-empty-lines": 0,
+  "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": "single",
+  "selector-pseudo-element-no-unknown": true,
+  "selector-type-case": "lower",
+  "selector-type-no-unknown": true,
+  "shorthand-property-no-redundant-values": true,
+  "string-no-newline": true,
+  "string-quotes": "double",
+  "unit-case": "lower",
+  "unit-no-unknown": true,
+  "value-keyword-case": "lower",
+  "value-list-comma-newline-after": "always-multi-line",
+  "value-list-comma-space-after": "always-single-line",
+  "value-list-comma-space-before": "never"
+  }
+}
Index: .travis.yml
===================================================================
--- .travis.yml	(revision 11136)
+++ .travis.yml	(working copy)
@@ -9,8 +9,7 @@
 cache:
   apt: true
   directories:
-    - $HOME/.composer/cache
-    - $HOME/.rvm/gems
+    - $HOME/.composer/cache]
 #    - /tmp/wordpress/src/wp-content/plugins/buddypress/node_modules
 
 php:
@@ -59,8 +58,6 @@
 
 # before_install: Failures in this section will result in build status 'errored'
 before_install:
-  # scss-lint requires Ruby >= 2.2
-  - source ~/.rvm/scripts/rvm && rvm install 2.2.0 && rvm use 2.2.0
   # set up WP install
   - export WP_DEVELOP_DIR=/tmp/wordpress/
   - mkdir -p $WP_DEVELOP_DIR
@@ -82,7 +79,6 @@
   - mysql -e 'CREATE DATABASE wordpress_test;' -uroot
   # prepare for running the tests
   - cd $plugin_dir
-  - gem install scss_lint
   # setup NodeJS version using NVM
   - node --version
   - nvm install 4
@@ -91,7 +87,6 @@
   - npm --version
   - mysql --version
   - phpenv versions
-  - ruby --version
 
 # before_script: Failures in this section will result in build status 'errored'
 before_script:
Index: Gruntfile.js
===================================================================
--- Gruntfile.js	(revision 11136)
+++ Gruntfile.js	(working copy)
@@ -75,6 +75,26 @@
 				}
 			}
 		},
+		stylelint: {
+			css: {
+				options: {
+					configFile: '.stylelintrc',
+					format: 'css'
+				},
+				expand: true,
+				cwd: SOURCE_DIR,
+				src: BP_CSS.concat( BP_EXCLUDED_CSS, BP_EXCLUDED_MISC )
+			},
+			scss: {
+				options: {
+					configFile: '.stylelintrc',
+					format: 'scss'
+				},
+				expand: true,
+				cwd: SOURCE_DIR,
+				src: [ 'bp-templates/bp-legacy/css/*.scss' ]
+			}
+		},
 		sass: {
 			styles: {
 				cwd: SOURCE_DIR,
@@ -193,14 +213,6 @@
 				src: BP_JS
 			}
 		},
-		scsslint: {
-			options: {
-				bundleExec: false,
-				colorizeOutput: true,
-				config: '.scss-lint.yml'
-			},
-			core: [ SOURCE_DIR + 'bp-templates/bp-legacy/css/*.scss' ]
-		},
 		cssmin: {
 			minify: {
 				cwd: BUILD_DIR,
@@ -270,7 +282,7 @@
 	/**
 	 * Register tasks.
 	 */
-	grunt.registerTask( 'src',     ['checkDependencies', 'jsvalidate:src', 'jshint', 'scsslint', 'sass', 'rtlcss'] );
+	grunt.registerTask( 'src',     ['checkDependencies', 'jsvalidate:src', 'jshint', 'stylelint', 'sass', 'rtlcss'] );
 	grunt.registerTask( 'commit',  ['src', 'checktextdomain', 'imagemin'] );
 	grunt.registerTask( 'build',   ['commit', 'clean:all', 'copy:files', 'uglify', 'jsvalidate:build', 'cssmin', 'makepot', 'exec:bpdefault'] );
 	grunt.registerTask( 'release', ['build', 'exec:bbpress'] );
Index: package.json
===================================================================
--- package.json	(revision 11136)
+++ package.json	(working copy)
@@ -6,6 +6,7 @@
   "description": "BuddyPress helps site builders and WordPress developers add community features to their websites, with user profile fields, activity streams, messaging, and notifications.",
   "devDependencies": {
     "grunt": "~1.0.1",
+    "grunt-check-dependencies": "~0.12.0",
     "grunt-checktextdomain": "~1.0.0",
     "grunt-contrib-clean": "~1.0.0",
     "grunt-contrib-copy": "~1.0.0",
@@ -15,15 +16,17 @@
     "grunt-contrib-uglify": "~2.0.0",
     "grunt-contrib-watch": "~1.0.0",
     "grunt-exec": "~1.0.0",
-    "grunt-check-dependencies": "~0.12.0",
     "grunt-jsvalidate": "~0.2.2",
     "grunt-legacy-util": "^1.0.0",
     "grunt-patch-wordpress": "~0.4.0",
     "grunt-rtlcss": "~2.0.1",
     "grunt-sass": "~1.2.0",
     "grunt-scss-lint": "~0.3.8",
+    "grunt-stylelint": "^0.6.0",
     "grunt-wp-i18n": "~0.5.3",
-    "matchdep": "~1.0.0"
+    "matchdep": "~1.0.0",
+    "postcss-scss": "^0.3.0",
+    "stylelint": "^7.3.1"
   },
   "engines": {
     "node": ">=4.2.1"
