diff --git a/node_modules/grunt-sass/license b/node_modules/grunt-sass/license
new file mode 100644
index 0000000..e7af2f7
--- /dev/null
+++ b/node_modules/grunt-sass/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/grunt-sass/package.json b/node_modules/grunt-sass/package.json
new file mode 100644
index 0000000..2194c16
--- /dev/null
+++ b/node_modules/grunt-sass/package.json
@@ -0,0 +1,74 @@
+{
+  "_from": "grunt-sass@^3.1.0",
+  "_id": "grunt-sass@3.1.0",
+  "_inBundle": false,
+  "_integrity": "sha512-90s27H7FoCDcA8C8+R0GwC+ntYD3lG6S/jqcavWm3bn9RiJTmSfOvfbFa1PXx4NbBWuiGQMLfQTj/JvvqT5w6A==",
+  "_location": "/grunt-sass",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "grunt-sass@^3.1.0",
+    "name": "grunt-sass",
+    "escapedName": "grunt-sass",
+    "rawSpec": "^3.1.0",
+    "saveSpec": null,
+    "fetchSpec": "^3.1.0"
+  },
+  "_requiredBy": [
+    "#DEV:/"
+  ],
+  "_resolved": "https://registry.npmjs.org/grunt-sass/-/grunt-sass-3.1.0.tgz",
+  "_shasum": "a5936cc2a80ec08092d9f31c101dc307d1e4f71c",
+  "_spec": "grunt-sass@^3.1.0",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/grunt-sass/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Compile Sass to CSS using node-sass",
+  "devDependencies": {
+    "grunt": "^1.0.3",
+    "grunt-cli": "^1.3.1",
+    "grunt-contrib-clean": "^2.0.0",
+    "grunt-contrib-nodeunit": "^2.0.0",
+    "node-sass": "^4.9.3",
+    "xo": "^0.23.0"
+  },
+  "engines": {
+    "node": ">=8"
+  },
+  "files": [
+    "tasks"
+  ],
+  "homepage": "https://github.com/sindresorhus/grunt-sass#readme",
+  "keywords": [
+    "gruntplugin",
+    "css",
+    "sass",
+    "scss",
+    "style",
+    "compile",
+    "preprocess",
+    "libsass"
+  ],
+  "license": "MIT",
+  "name": "grunt-sass",
+  "peerDependencies": {
+    "grunt": ">=1"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/grunt-sass.git"
+  },
+  "scripts": {
+    "test": "xo && grunt"
+  },
+  "version": "3.1.0"
+}
diff --git a/node_modules/grunt-sass/readme.md b/node_modules/grunt-sass/readme.md
new file mode 100644
index 0000000..eca1df7
--- /dev/null
+++ b/node_modules/grunt-sass/readme.md
@@ -0,0 +1,90 @@
+# grunt-sass [![Build Status](https://travis-ci.org/sindresorhus/grunt-sass.svg?branch=master)](https://travis-ci.org/sindresorhus/grunt-sass)
+
+[<img src="https://github.com/sass/sass-site/blob/master/source/assets/img/logos/logo-seal.png" width="150" align="right">](https://sass-lang.com)
+
+> Compile Sass to CSS using [Dart Sass][] or [Node Sass][].
+
+[Dart Sass]: http://sass-lang.com/dart-sass
+[Node Sass]: https://github.com/sass/node-sass
+
+Before filing an issue with this repository, please consider:
+
+* Asking support questions on Use [Stack Overflow][].
+
+* Reporting issues with the output on the [Dart Sass][Dart Sass issues] or [LibSass][LibSass issues] issue trackers, depending which implementation you're using.
+
+* Reporting installation issues on the [Dart Sass][Dart Sass issues] or [Node Sass][Node Sass issues] issue trackers, depending on which implementation you're using.
+
+[Stack Overflow]: https://stackoverflow.com/questions/tagged/node-sass
+[Dart Sass issues]: https://github.com/sass/dart-sass/issues/new
+[LibSass issues]: https://github.com/sass/libsass/issues/new
+[Node Sass issues]: https://github.com/sass/node-sass/issues/new
+
+
+## Install
+
+```
+$ npm install --save-dev node-sass grunt-sass
+```
+
+
+## Usage
+
+```js
+const sass = require('node-sass');
+
+require('load-grunt-tasks')(grunt);
+
+grunt.initConfig({
+	sass: {
+		options: {
+			implementation: sass,
+			sourceMap: true
+		},
+		dist: {
+			files: {
+				'main.css': 'main.scss'
+			}
+		}
+	}
+});
+
+grunt.registerTask('default', ['sass']);
+```
+
+You can choose whether to use [Dart Sass][] or [Node Sass][] by passing the module to the `implementation` option. One implementation or the other *must* be passed.
+
+Note that when using Dart Sass, **synchronous compilation is twice as fast as asynchronous compilation** by default, due to the overhead of asynchronous callbacks. To avoid this overhead, you can use the [`fibers`](https://www.npmjs.com/package/fibers) package to call asynchronous importers from the synchronous code path. To enable this, pass the `Fiber` class to the `fiber` option:
+
+```js
+const Fiber = require('fibers');
+const sass = require('node-sass');
+
+require('load-grunt-tasks')(grunt);
+
+grunt.initConfig({
+	sass: {
+		options: {
+			implementation: sass,
+			fiber: Fiber,
+			sourceMap: true
+		},
+		dist: {
+			files: {
+				'main.css': 'main.scss'
+			}
+		}
+	}
+});
+
+grunt.registerTask('default', ['sass']);
+```
+
+Files starting with `_` are ignored to match the expected [Sass partial behaviour](http://sass-lang.com/documentation/file.SASS_REFERENCE.html#partials).
+
+
+## Options
+
+See the Node Sass [options](https://github.com/sass/node-sass#options), except for `file`, `outFile`, `success`, `error`.
+
+The default value for the `precision` option is `10`, so you don't have to change it when using Bootstrap.
diff --git a/node_modules/grunt-sass/tasks/sass.js b/node_modules/grunt-sass/tasks/sass.js
new file mode 100644
index 0000000..a883803
--- /dev/null
+++ b/node_modules/grunt-sass/tasks/sass.js
@@ -0,0 +1,43 @@
+/* eslint-disable prefer-object-spread, promise/prefer-await-to-then */
+'use strict';
+const util = require('util');
+const path = require('path');
+
+module.exports = grunt => {
+	grunt.registerMultiTask('sass', 'Compile Sass to CSS', function () {
+		const done = this.async();
+
+		const options = this.options({
+			precision: 10
+		});
+
+		if (!options.implementation) {
+			grunt.fatal('The implementation option must be passed to the Sass task');
+		}
+		grunt.verbose.writeln(`\n${options.implementation.info}\n`);
+
+		(async () => {
+			await Promise.all(this.files.map(async item => {
+				const [src] = item.src;
+
+				if (!src || path.basename(src)[0] === '_') {
+					return;
+				}
+
+				const result = await util.promisify(options.implementation.render)(Object.assign({}, options, {
+					file: src,
+					outFile: item.dest
+				}));
+
+				grunt.file.write(item.dest, result.css);
+
+				if (options.sourceMap) {
+					const filePath = options.sourceMap === true ? `${item.dest}.map` : options.sourceMap;
+					grunt.file.write(filePath, result.map);
+				}
+			}));
+		})().catch(error => {
+			grunt.fatal(error.formatted || error);
+		}).then(done);
+	});
+};
