diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 889a7f2..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-node_modules
-
-.zedstate
\ No newline at end of file
diff --git a/.jshintrc b/.jshintrc
deleted file mode 100644
index 11bb6fa..0000000
--- a/.jshintrc
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "curly": true,
- "eqeqeq": true,
- "newcap": true,
- "noarg": true,
- "noempty": true,
- "nonew": true,
- "sub": true,
- "undef": true,
- "unused": true,
- "trailing": true,
- "boss": true,
- "eqnull": true,
- "strict": true,
- "immed": true,
- "expr": true,
- "latedef": "true",
- "quotmark": "single",
- "indent": 4,
- "node": true,
- "globals": {
- "describe": false,
- "it": false
- }
-}
\ No newline at end of file
diff --git a/.npmignore b/.npmignore
deleted file mode 100644
index 6260465..0000000
--- a/.npmignore
+++ /dev/null
@@ -1,4 +0,0 @@
-.travis.yml
-.jshintrc
-specs
-gulpfile.js
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 73d1c7d..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-language: node_js
-node_js:
- - '0.12'
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 66033ed..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2014 - 2015 André König, Germany
-
-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/bin/imacss b/bin/imacss
deleted file mode 100755
index 7cd9c0d..0000000
--- a/bin/imacss
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/env node
-
-/*
- * imacss
- *
- * Copyright(c) 2014 - 2015 André König
- * MIT Licensed
- *
- */
-
-/**
- * @author André König
- *
- */
-
-'use strict';
-
-var path = require('path');
-var imacss = require('../');
-
-var pkg = require('../package.json');
-var args = {
- glob: process.argv[2],
- cssclass: process.argv[4]
-};
-
-/**
- * Prints an error message to the console and exits
- * the "imacss" application.
- *
- * @param {string} message The message that should be printed.
- *
- */
-function error (message) {
- console.error('\u001b[31m' + message + '\u001b[39m');
-
- return process.exit(1);
-}
-
-/**
- * Normalizes the given path. If there is a tilde
- * in the path, it will be resolved.
- *
- * @param {string} normalizable The "normalizable" path.
- * @return {string} The normalized path.
- *
- */
-function normalizePath (normalizable) {
- if ('~' === normalizable.substr(0, 1)) {
- normalizable = process.env.HOME + normalizable.substr(1)
- }
-
- return path.resolve(normalizable)
-}
-
-/**
- * Simple function to determine if a given string
- * is a path.
- *
- * @param {string} str The path that should be checked.
- *
- * @return {Boolean}
- *
- */
-function isPath (str) {
- return (~str.indexOf(path.sep) || ~str.indexOf('.css'));
-}
-
-if (!args.glob) {
- return error('Please define the glob to your images.');
-}
-
-if ('version' === args.glob) {
- return console.log(pkg.version);
-}
-
-args.glob = normalizePath(args.glob);
-
-imacss
- .transform(args.glob, args.cssclass)
- .on('error', function (err) {
- error('Converting images failed: ' + err);
- })
- .pipe(process.stdout);
\ No newline at end of file
diff --git a/changelog.md b/changelog.md
deleted file mode 100644
index 87d4ef5..0000000
--- a/changelog.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# 1.0.0 (2015-06-15)
-
- * ea1d1ea refactoring: `mocha` migration.
- * d90808a breaking change: the CLI does not provide the possibility for piping into a file. Just use `imacss *.svg > images.css`
- * c87cef4 feature: embedding SVG images as raw text strings instead of base64
- * 34639f4 deps: upgrade
-
-# 0.3.0 (2014-08-13)
-
- * Possibility to define a function which will generate an own CSS class structure (by [@juice49](https://github.com/juice49)).
-
-# Version 0.2.2 (2014-02-21)
-
- * Added more files to .npmignore.
-
-# Version 0.2.1 (2014-02-17)
-
- * Added `preferGlobal` flag to the `package.json`.
-
-# Version 0.2.0 (2014-02-17)
-
- * Implemented support for passing a vinyl file object to the transform method.
-
-# Version 0.1.1 (2014-02-11)
-
- * Fixed typos in the README.
-
-# Version 0.1.0 (2014-02-11)
-
- * Initial Release. Implemented the core functionality (CLI and API).
\ No newline at end of file
diff --git a/images/bkg.png b/images/bkg.png
new file mode 100644
index 0000000..fcebb5b
Binary files /dev/null and b/images/bkg.png differ
diff --git a/images/blacktocat.png b/images/blacktocat.png
new file mode 100644
index 0000000..273d571
Binary files /dev/null and b/images/blacktocat.png differ
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..5e59ce2
--- /dev/null
+++ b/index.html
@@ -0,0 +1,184 @@
+
+
+
+
+
+
+
+
+
+
+ imacss by akoenig
+
+
+
+
+
+
+
imacss
+
An application and library that transforms image files to data URIs and embeds them into a single CSS file.
An application and library that transforms image files to data URIs (rfc2397) and embeds them into a single CSS file as background images.
+
+
Let's say you have a web-based frontend which embeds a lot of images (e.g. icons). This referencing produces HTTP requests for every single image. What if you would like to minimize it to just one request? That is something imacss can do for you.
+
+
+What?
+
+
Okay, enough words. Let's dive straight into a transformation example. If we assume that you have two SVGs, like github.svg and quitter.svg, imacss will generate this CSS code for you.
+
+
+
+
\ No newline at end of file
diff --git a/index.js b/index.js
deleted file mode 100644
index 4447574..0000000
--- a/index.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * imacss
- *
- * Copyright(c) 2014 - 2015 André König
- * MIT Licensed
- *
- */
-
-/**
- * @author André König
- *
- */
-
-'use strict';
-
-var domain = require('domain');
-
-var pipeline = require('./lib');
-var pkg = require('./package.json');
-
-/**
- * Transforms image files to base64 encoded data URIs and embeds them into CSS files.
- *
- * @param {string} glob A globbing expression for matching particular image files.
- * @param {string | function} css The CSS class which will be used as a prefix, or a function to generate the CSS rule set.
- *
- */
-exports.transform = function transform (glob, css) {
-
- var execution = domain.create();
- var transformation;
-
- css = css || pkg.name;
-
- execution.on('error', function (err) {
- transformation.emit('error', err);
- });
-
- execution.run(function () {
-
- transformation = pipeline.createFileStream(glob)
- .pipe(pipeline.purify())
- .pipe(pipeline.slugify())
- .pipe(pipeline.mimeify())
- .pipe(pipeline.urify())
- .pipe(pipeline.cssify(css));
- });
-
- return transformation;
-};
\ No newline at end of file
diff --git a/javascripts/main.js b/javascripts/main.js
new file mode 100644
index 0000000..d8135d3
--- /dev/null
+++ b/javascripts/main.js
@@ -0,0 +1 @@
+console.log('This would be the main JS file.');
diff --git a/lib/cssify.js b/lib/cssify.js
deleted file mode 100644
index d192832..0000000
--- a/lib/cssify.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * imacss
- *
- * Copyright(c) 2014 - 2015 André König
- * MIT Licensed
- *
- */
-
-/**
- * @author André König
- *
- */
-
-'use strict';
-
-var stream = require('stream');
-var util = require('util');
-
-var Utilities = require('./utilities');
-
-/**
- * The stream which will transform the internal image
- * data structure into a CSS selector with the embedded file.
- *
- * @param {string | function} css The CSS class which will be used as a prefix, or a function to generate the CSS rule set.
- * @param {object} options Stream options.
- *
- */
-function Cssify (css, options) {
-
- this.css = css;
-
- options = options || {};
-
- options.objectMode = true;
-
- stream.Transform.call(this, options);
-}
-
-util.inherits(Cssify, stream.Transform);
-
-/**
- * The transformation process.
- *
- */
-Cssify.prototype._transform = function _transform (image, enc, cb) {
-
- var selector = {
- 'background-image': 'url(\'' + image.datauri + '\')'
- };
-
- switch (typeof this.css) {
- case 'string':
- this.push(Utilities.getCSSSelector(this.css, image.slug, selector) + '\n');
- break;
-
- case 'function':
- this.push(this.css(image) + '\n');
- break;
- }
-
- cb();
-};
-
-module.exports = function (css) {
- return new Cssify(css);
-};
\ No newline at end of file
diff --git a/lib/index.js b/lib/index.js
deleted file mode 100644
index ad74781..0000000
--- a/lib/index.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * imacss
- *
- * Copyright(c) 2014 - 2015 André König
- * MIT Licensed
- *
- */
-
-/**
- * @author André König
- *
- */
-
-'use strict';
-
-var through = require('through2');
-var vfs = require('vinyl-fs');
-var purify = require('./purify');
-var slugify = require('./slugify');
-var mimeify = require('./mimeify');
-var urify = require('./urify');
-var cssify = require('./cssify');
-
-exports.purify = purify;
-exports.slugify = slugify;
-exports.mimeify = mimeify;
-exports.urify = urify;
-exports.cssify = cssify;
-
-/**
- * Creates a filestream which can be piped through the 'imacss' pipeline
- *
- * @param {object||string} glob A glob string or a Vinyl file object.
- *
- * @return {Stream}
- *
- */
-exports.createFileStream = function createFileStream (glob) {
- var strom;
-
- function convert (file, enc, callback) {
- /*jshint validthis:true */
- this.push(glob);
-
- callback();
- }
-
- if (glob.pipe) {
- strom = glob.pipe(through.obj(convert));
- } else {
- strom = vfs.src(glob);
- }
-
- return strom;
-};
\ No newline at end of file
diff --git a/lib/mimeify.js b/lib/mimeify.js
deleted file mode 100644
index 90a7212..0000000
--- a/lib/mimeify.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * imacss
- *
- * Copyright(c) 2014 - 2015 André König
- * MIT Licensed
- *
- */
-
-/**
- * @author André König
- *
- */
-
-'use strict';
-
-var stream = require('stream');
-var util = require('util');
-var Utilities = require('./utilities');
-
-/**
- * The stream which will determine the respective image MIME type
- * and appends it to the internal image data structure.
- *
- * @param {object} options Stream options.
- *
- */
-function Mimeify (options) {
-
- options = options || {};
-
- options.objectMode = true;
-
- stream.Transform.call(this, options);
-}
-
-util.inherits(Mimeify, stream.Transform);
-
-/**
- * The transformation process.
- *
- */
-Mimeify.prototype._transform = function _transform (image, enc, cb) {
- var self = this;
-
- function done (err, mime) {
- image.mime = mime;
-
- self.push(image);
-
- return cb();
- }
-
- Utilities.getMimeType(image.contents, done);
-};
-
-module.exports = function () {
- return new Mimeify();
-};
\ No newline at end of file
diff --git a/lib/purify.js b/lib/purify.js
deleted file mode 100644
index 4e6f1d4..0000000
--- a/lib/purify.js
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * imacss
- *
- * Copyright(c) 2014 - 2015 André König
- * MIT Licensed
- *
- */
-
-/**
- * @author André König
- *
- */
-
-'use strict';
-
-var stream = require('stream');
-var util = require('util');
-var path = require('path');
-
-/**
- * The stream which will convert the vinyl file to
- * an internal image data structure.
- *
- * @param {object} options Stream options.
- *
- */
-function Purify (options) {
-
- options = options || {};
-
- options.objectMode = true;
-
- stream.Transform.call(this, options);
-}
-
-util.inherits(Purify, stream.Transform);
-
-/**
- * The transformation process.
- *
- */
-Purify.prototype._transform = function _transform (vfile, enc, cb) {
-
- var image = {};
-
- if (!vfile.contents) {
- return cb(new Error('Please define a valid glob, which will find some image files.'));
- }
-
- //
- // Converting the vinyl file into an own data model.
- //
- image.name = path.basename(vfile.path);
- image.contents = vfile.contents;
- image.base64 = vfile.contents.toString('base64');
-
- this.push(image);
-
- cb();
-};
-
-module.exports = function () {
- return new Purify();
-};
\ No newline at end of file
diff --git a/lib/slugify.js b/lib/slugify.js
deleted file mode 100644
index 9bdb0fa..0000000
--- a/lib/slugify.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * imacss
- *
- * Copyright(c) 2014 - 2015 André König
- * MIT Licensed
- *
- */
-
-/**
- * @author André König
- *
- */
-
-'use strict';
-
-var stream = require('stream');
-var path = require('path');
-var util = require('util');
-var slug = require('slug');
-
-/**
- * The stream which will create a slug based on the
- * image name. A slug is a short, normalized name.
- *
- * @param {object} options Stream options.
- *
- */
-function Slugify (options) {
-
- options = options || {};
-
- options.objectMode = true;
-
- stream.Transform.call(this, options);
-}
-
-util.inherits(Slugify, stream.Transform);
-
-/**
- * The transformation process.
- *
- */
-Slugify.prototype._transform = function _transform (image, enc, cb) {
-
- image.slug = slug(path.basename(image.name, path.extname(image.name)));
-
- this.push(image);
-
- cb();
-};
-
-module.exports = function () {
- return new Slugify();
-};
\ No newline at end of file
diff --git a/lib/urify.js b/lib/urify.js
deleted file mode 100644
index 292bdfe..0000000
--- a/lib/urify.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * imacss
- *
- * Copyright(c) 2014 - 2015 André König
- * MIT Licensed
- *
- */
-
-/**
- * @author André König
- *
- */
-
-'use strict';
-
-var stream = require('stream');
-var util = require('util');
-
-var Utilities = require('./utilities');
-
-/**
- * The stream which generate the data URI of the image.
- *
- * @param {object} options Stream options.
- *
- */
-function Urify (options) {
-
- options = options || {};
-
- options.objectMode = true;
-
- stream.Transform.call(this, options);
-}
-
-util.inherits(Urify, stream.Transform);
-
-/**
- * The transformation process.
- *
- */
-Urify.prototype._transform = function _transform (image, enc, cb) {
-
- image.datauri = Utilities.getDataURI(image);
-
- this.push(image);
-
- cb();
-};
-
-module.exports = function () {
- return new Urify();
-};
\ No newline at end of file
diff --git a/lib/utilities/css.js b/lib/utilities/css.js
deleted file mode 100644
index 0c574e9..0000000
--- a/lib/utilities/css.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * imacss
- *
- * Copyright(c) 2014 - 2015 André König
- * MIT Licensed
- *
- */
-
-/**
- * @author André König
- *
- */
-
-'use strict';
-
-/**
- * Creates a CSS selector.
- *
- * @param {[type]} prefix The class prefix.
- * @param {string} name The class name.
- * @param {object} properties A map with all the properties.
- *
- * @return {string} The CSS selector.
- *
- */
-exports.constructSelector = function constructSelector (prefix, name, properties) {
- var selector = '';
- var prop;
-
- // Creating cascade: e.g. .imacss.imacss-foobar {...}
- selector = '.' + prefix + '.' + prefix + '-' + name + '{';
-
- for (prop in properties) {
- if (properties.hasOwnProperty(prop)) {
- selector = selector + prop + ':' + properties[prop] + ';';
- }
- }
-
- selector = selector + '}';
-
- return selector;
-};
\ No newline at end of file
diff --git a/lib/utilities/index.js b/lib/utilities/index.js
deleted file mode 100644
index 722f02e..0000000
--- a/lib/utilities/index.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * imacss
- *
- * Copyright(c) 2014 - 2015 André König
- * MIT Licensed
- *
- */
-
-/**
- * @author André König
- *
- */
-
-'use strict';
-
-var mime = require('./mime');
-var uri = require('./uri');
-var css = require('./css');
-
-exports.getMimeType = mime.detect;
-exports.getDataURI = uri.constructDataURI;
-exports.getCSSSelector = css.constructSelector;
\ No newline at end of file
diff --git a/lib/utilities/mime.js b/lib/utilities/mime.js
deleted file mode 100644
index 3991e4b..0000000
--- a/lib/utilities/mime.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * imacss
- *
- * Copyright(c) 2014 - 2015 André König
- * MIT Licensed
- *
- */
-
-/**
- * @author André König
- *
- */
-
-'use strict';
-
-var filetypes = [
- {mime: 'image/jpeg', magicnumber: 'FFD8', extensions: ['jpg', 'jpeg']},
- {mime: 'image/png', magicnumber: '89504E470D0A1A0A', extensions: ['png']}
-];
-
-/**
- * Determines the MIME type of the given image.
- *
- * @param {buffer} image The image as a buffer.
- * @param {function} callback -> err, mime{string}
- *
- */
-module.exports.detect = function detect (image, callback) {
- var buffer = image.toString('hex').toUpperCase();
- var i = filetypes.length - 1;
- var filetype;
- var magic;
- var mime;
-
- //
- // Helper function for checking if a file is a SVG.
- // (Thanks to grunticon: https://github.com/filamentgroup/grunticon)
- //
- function isSVG (data) {
-
- var i = 0;
- var len = data.length;
- var snippet;
-
- for (i; i < len; i = i + 1) {
- snippet = data.slice(i, i + 2).toString('hex');
-
- if ('73' === snippet) {
- i = i + 2;
- snippet = data.slice(i, i + 2).toString('hex');
-
- if ('76' === snippet) {
- i = i + 2;
- snippet = data.slice(i, i + 2).toString('hex');
-
- if ('67' === snippet) {
- return true;
- }
- }
- }
- }
-
- return false;
- }
-
- search: for (i; i >= 0; i = i - 1) {
- filetype = filetypes[i];
-
- magic = buffer.substring(0, filetype.magicnumber.length);
-
- if (magic === filetype.magicnumber) {
- mime = filetype.mime;
-
- break search;
- }
- }
-
- if (!mime && isSVG(buffer)) {
- mime = 'image/svg+xml';
- }
-
- return callback(null, mime || 'Unknown');
-};
diff --git a/lib/utilities/uri.js b/lib/utilities/uri.js
deleted file mode 100644
index a96db5c..0000000
--- a/lib/utilities/uri.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * imacss
- *
- * Copyright(c) 2014 - 2015 André König
- * MIT Licensed
- *
- */
-
-/**
- * @author André König
- *
- */
-
-'use strict';
-
-/**
- * Constructs a RFC 2397 conform data URI.
- *
- * @param {object} image The vinyl file object
- *
- * @return {string} The created data URI
- *
- */
-module.exports.constructDataURI = function constructDataURI (image) {
- var data = image.base64;
- var type = 'base64';
-
- if ('image/svg+xml' === image.mime) {
- type = 'utf-8';
- data = image.contents
- .toString(type)
- .replace(/\r?\n|\r/g, '')
- .replace('#', '%23');
- }
-
- return 'data:' + image.mime + ';' + type + ',' + data;
-};
diff --git a/package.json b/package.json
deleted file mode 100644
index 01e5034..0000000
--- a/package.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "name": "imacss",
- "version": "1.0.0",
- "description": "An application and library that transforms image files to data URIs and embeds these into a single CSS file.",
- "author": {
- "name": "André König",
- "email": "andre.koenig@posteo.de"
- },
- "license": "MIT",
- "main": "index.js",
- "scripts": {
- "lint": "jshint -c ./.jshintrc ./*.js ./lib/**/*.js ./specs/*.js",
- "mocha": "mocha ./specs/*.spec.js",
- "test": "npm run lint && npm run mocha"
- },
- "bin": {
- "imacss": "./bin/imacss"
- },
- "repository": {
- "type": "git",
- "url": "git@github.com:akoenig/imacss.git"
- },
- "engines": {
- "node": ">=0.10.0"
- },
- "keywords": [
- "css",
- "images",
- "data uri",
- "base64"
- ],
- "bugs": {
- "url": "https://github.com/akoenig/imacss/issues"
- },
- "homepage": "https://github.com/akoenig/imacss",
- "dependencies": {
- "slug": "^0.9.1",
- "through2": "^2.0.0",
- "vinyl-fs": "^1.0.0"
- },
- "devDependencies": {
- "expect.js": "^0.3.1",
- "jshint": "^2.8.0",
- "mocha": "^2.2.5",
- "gulp-util": "^3.0.5"
- }
-}
\ No newline at end of file
diff --git a/params.json b/params.json
new file mode 100644
index 0000000..8d9ca77
--- /dev/null
+++ b/params.json
@@ -0,0 +1 @@
+{"name":"imacss","tagline":"An application and library that transforms image files to data URIs and embeds them into a single CSS file.","body":"# imacss [](https://travis-ci.org/akoenig/imacss)\r\n\r\n_pronunciation: imax_\r\n\r\nAn application and library that transforms image files to [data URIs (rfc2397)](https://www.ietf.org/rfc/rfc2397.txt) and embeds them into a single CSS file as background images.\r\n\r\nLet's say you have a web-based frontend which embeds a lot of images (e.g. icons). This referencing produces HTTP requests for every single image. What if you would like to minimize it to just one request? That is something `imacss` can do for you.\r\n\r\n## What?\r\n\r\nOkay, enough words. Let's dive straight into a transformation example. If we assume that you have two SVGs, like `github.svg` and `quitter.svg`, `imacss` will generate this CSS code for you.\r\n\r\n```css\r\n.imacss.imacss-github {\r\n background:url(data:image/svg+xml;base64,iVBORw0KGgoAAAANSUhEBg...);\r\n}\r\n\r\n.imacss.imacss-quitter {\r\n background:url(data:image/svg+xml;base64,iVBORw0KGgoAAAANSUhADA...);\r\n}\r\n```\r\n\r\nYou can refer to this images by using the respective CSS classes:\r\n\r\n```html\r\n
...
\r\n```\r\n\r\n## CLI\r\n\r\n`imacss` comes with a command-line interface which pipes the output to stdout by default (yeah, plain old text streams FTW!).\r\n\r\n### Installation\r\n\r\nInstall with [npm](https://npmjs.org/package/imacss) globally.\r\n\r\n npm install -g imacss\r\n\r\n### Usage examples\r\n\r\nEmbed all SVGs in a particular directory and all its subdirectories (will pipe the output to stdout).\r\n\r\n $ imacss \"~/projects/webapp/images/**/*.svg\"\r\n\r\nEmbed all SVGs in a particular directory and transfer them to a CSS file which will be saved in the CWD.\r\n\r\n $ imacss \"~/projects/webapp/images/*.svg\" images.svg.css\r\n\r\nEmbed all SVGs _and_ PNGs in a particular directory and transfer them to a CSS file which will be saved in the CWD.\r\n\r\n $ imacss \"~/projects/webapp/images/*.{svg,png}\" images.css\r\n\r\nIf you don't like the `imacss` selector namespace you are able to modify it as well.\r\n\r\n $ imacss \"~/projects/webapp/images/*.{svg,png}\" images.css foobar\r\n\r\nwill produce this selector structure in the CSS file:\r\n\r\n```css\r\n.foobar.foobar-github {...}\r\n```\r\n\r\n## API\r\n\r\nIf you would like to use the `imacss` functionality within your application, there is an API for that.\r\n\r\n### Install\r\n\r\nInstall with [npm](https://npmjs.org/package/imacss)\r\n\r\n npm install --save imacss\r\n\r\n### Methods\r\n\r\n#### transform(glob[, namespace]);\r\n\r\nTransforms the image files from the specified glob and returns a stream with the CSS selectors that can be piped to somewhere else.\r\n\r\n**Arguments**\r\n\r\n`glob`\r\n\r\nString || [Vinyl](https://github.com/wearefractal/vinyl) file object\r\n\r\nThe path to the images which should be transformed. You can use any glob pattern you want or you're also able pass single [Vinyl](https://github.com/wearefractal/vinyl) file objects.\r\n\r\n`namespace` (optional; default=imacss)\r\n\r\nThe CSS selector namespace.\r\n\r\n### Usage example\r\n\r\n```javascript\r\nvar imacss = require('imacss');\r\n\r\nimacss\r\n .transform('/path/to/your/images/*.png')\r\n .on('error', function (err) {\r\n error('Transforming images failed: ' + err);\r\n })\r\n .pipe(process.stdout);\r\n```\r\n\r\n\r\n## Changelog\r\n\r\n### Version 0.2.2 (20140221)\r\n\r\n- Added more files to .npmignore.\r\n\r\n### Version 0.2.1 (20140217)\r\n\r\n- Added `preferGlobal` flag to the `package.json`.\r\n\r\n### Version 0.2.0 (20140217)\r\n\r\n- Implemented support for passing a vinyl file object to the transform method.\r\n\r\n### Version 0.1.1 (20140211)\r\n\r\n- Fixed typos in the README.\r\n\r\n### Version 0.1.0 (20140211)\r\n\r\n- Initial Release. Implemented the core functionality (CLI and API).\r\n\r\n## Author\r\n\r\nCopyright 2014, [André König](http://iam.andrekoenig.info) (andre.koenig@posteo.de)\r\n","google":"","note":"Don't delete this file! It's used internally to help with page regeneration."}
\ No newline at end of file
diff --git a/readme.md b/readme.md
deleted file mode 100644
index 42e75b5..0000000
--- a/readme.md
+++ /dev/null
@@ -1,129 +0,0 @@
-# imacss [](https://travis-ci.org/akoenig/imacss)
-
-_pronunciation: imax_
-
-An application and library that transforms image files to [data URIs (rfc2397)](https://www.ietf.org/rfc/rfc2397.txt) and embeds them into a single CSS file as background images.
-
-Let's say you have a web-based frontend which embeds a lot of images (e.g. icons). This referencing produces HTTP requests for every single image. What if you would like to minimize it to just one request? That is something `imacss` can do for you.
-
-## What?
-
-Okay, enough words. Let's dive straight into a transformation example. If we assume that you have two SVGs, like `github.svg` and `quitter.svg`, `imacss` will generate this CSS code for you.
-
-```css
-.imacss.imacss-github {
- background:url(data:image/svg+xml;base64,iVBORw0KGgoAAAANSUhEBg...);
-}
-
-.imacss.imacss-quitter {
- background:url(data:image/svg+xml;base64,iVBORw0KGgoAAAANSUhADA...);
-}
-```
-
-You can refer to this images by using the respective CSS classes:
-
-```html
-
...
-```
-
-## CLI
-
-`imacss` comes with a command-line interface which pipes the output to stdout by default (yeah, plain old text streams FTW!).
-
-### Installation
-
-Install with [npm](https://npmjs.org/package/imacss) globally.
-
- npm install -g imacss
-
-### Usage examples
-
-Embed all SVGs in a particular directory and all its subdirectories (will pipe the output to stdout).
-
- $ imacss "~/projects/webapp/images/**/*.svg"
-
-Embed all SVGs in a particular directory and transfer them to a CSS file which will be saved in the CWD.
-
- $ imacss "~/projects/webapp/images/*.svg" > images.svg.css
-
-Embed all SVGs _and_ PNGs in a particular directory and transfer them to a CSS file which will be saved in the CWD.
-
- $ imacss "~/projects/webapp/images/*.{svg,png}" > images.css
-
-If you don't like the `imacss` selector namespace you are able to modify it as well.
-
- $ imacss "~/projects/webapp/images/*.{svg,png}" foobar > images.css
-
-will produce this selector structure in the CSS file:
-
-```css
-.foobar.foobar-github {...}
-```
-
-**Important:** Please note that `imacss` does not embed `image/svg+xml` as `base64` strings. Instead it will use the raw `utf-8` representation.
-
-## API
-
-If you would like to use the `imacss` functionality within your application, there is an API for that.
-
-### Install
-
-Install with [npm](https://npmjs.org/package/imacss)
-
- npm install --save imacss
-
-### Methods
-
-#### transform(glob[, namespace]);
-
-Transforms the image files from the specified glob and returns a stream with the CSS selectors that can be piped to somewhere else.
-
-**Arguments**
-
-`glob`
-
-String || [Vinyl](https://github.com/wearefractal/vinyl) file object
-
-The path to the images which should be transformed. You can use any glob pattern you want or you're also able pass single [Vinyl](https://github.com/wearefractal/vinyl) file objects.
-
-`namespace` (optional; default=imacss)
-
-String || Function
-
-A string containing the css class namespace prefix, or a function to generate the entire CSS ruleset.
-
-The CSS selector namespace.
-
-### Usage example
-
-```javascript
-var imacss = require('imacss');
-
-imacss
- .transform('/path/to/your/images/*.png')
- .on('error', function onError (err) {
- console.error('Transforming images failed: ' + err);
- })
- .pipe(process.stdout);
-```
-
-#### Passing a function to customize the resulting CSS rule set
-
-```javascript
-var imacss = require('imacss');
-
-function generateCss(image) {
- return '.image-' + image.slug + ' { ' + 'background-image:' + 'url(\'' + image.datauri + '\'); }';
-}
-
-imacss
- .transform('/path/to/your/images/*.png', generateCss)
- .on('error', function (err) {
- console.error('Transforming images failed: ' + err);
- })
- .pipe(process.stdout);
-```
-
-## Author
-
-Copyright 2014 - 2015, [André König](http://andrekoenig.info) (andre.koenig@posteo.de)
diff --git a/specs/assets/arrow-right.svg b/specs/assets/arrow-right.svg
deleted file mode 100644
index a363497..0000000
--- a/specs/assets/arrow-right.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
diff --git a/specs/assets/twitter.svg b/specs/assets/twitter.svg
deleted file mode 100644
index 0f14656..0000000
--- a/specs/assets/twitter.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
diff --git a/specs/cssify.spec.js b/specs/cssify.spec.js
deleted file mode 100644
index f58c41b..0000000
--- a/specs/cssify.spec.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * imacss
- *
- * Copyright(c) 2014 André König
- * MIT Licensed
- *
- */
-
-/**
- * @author André König
- *
- */
-
-'use strict';
-
-var helper = require('./helper');
-var cssify = require('../lib/cssify');
-
-var expect = require('expect.js');
-
-describe('The "cssification" stream', function suite () {
-
- it('should generate a CSS selector based on the image data', function test (done) {
- var image = helper.createImage();
- var prefix = 'imacss';
- var stream = cssify(prefix);
-
- stream.on('data', function (selector) {
- expect(selector).not.to.be(undefined);
-
- expect(selector.substring(1, prefix.length + 1)).to.be(prefix);
-
- done();
- });
-
- stream.write(image);
- stream.end();
- });
-
- it('should generate a custom CSS rule set if a function is passed instead of a prefix string', function test (done) {
-
- var image = helper.createImage();
- var generateCss = function generateCss(image) { return image.name; };
- var stream = cssify(generateCss);
-
- stream.on('data', function(ruleset) {
- expect(ruleset).not.to.be(undefined);
- expect(ruleset).to.be(image.name + '\n');
-
- done();
- });
-
- stream.write(image);
- stream.end();
- });
-});
diff --git a/specs/helper.js b/specs/helper.js
deleted file mode 100644
index 168661c..0000000
--- a/specs/helper.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * imacss
- *
- * Copyright(c) 2014 André König
- * MIT Licensed
- *
- */
-
-/**
- * @author André König
- *
- */
-
-'use strict';
-
-var fs = require('fs');
-var path = require('path');
-var gutil = require('gulp-util');
-
-/**
- * Creates a vinyl based file description.
- *
- * @return {object} A vinyl file description based on a SVG in the assets directory.
- *
- */
-exports.createImageFile = function createImageFile () {
- var svg = './specs/assets/twitter.svg';
-
- return new gutil.File({
- path: svg,
- cwd: './specs/assets/',
- base: './specs/assets/',
- contents: fs.readFileSync(svg)
- });
-};
-
-/**
- * Creates an example of the internal image data structure.
- *
- * @return {object} The internal image data structure based on a SVG in the assets directory.
- *
- */
-exports.createImage = function createImage () {
- var file = this.createImageFile();
- var image = {};
-
- image.name = path.basename(file.path);
- image.contents = file.contents;
- image.base64 = file.contents.toString('base64');
-
- return image;
-};
\ No newline at end of file
diff --git a/specs/mimeify.spec.js b/specs/mimeify.spec.js
deleted file mode 100644
index 8dd13ce..0000000
--- a/specs/mimeify.spec.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * imacss
- *
- * Copyright(c) 2014 André König
- * MIT Licensed
- *
- */
-
-/**
- * @author André König
- *
- */
-
-'use strict';
-
-var helper = require('./helper');
-var mimeify = require('../lib/mimeify');
-
-var expect = require('expect.js');
-
-describe('The "mimeification" stream', function suite () {
-
- it('should determine the MIME type of the image', function test (done) {
- var image = helper.createImage();
- var stream = mimeify();
-
- stream.on('data', function (image) {
- expect(image.mime).not.to.be(undefined);
- expect(image.mime).to.be('image/svg+xml');
-
- done();
- });
-
- stream.write(image);
- stream.end();
- });
-});
diff --git a/specs/plugin.spec.js b/specs/plugin.spec.js
deleted file mode 100644
index 885fc8c..0000000
--- a/specs/plugin.spec.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * imacss
- *
- * Copyright(c) 2014 André König
- * MIT Licensed
- *
- */
-
-/**
- * @author André König
- *
- */
-
-'use strict';
-
-var streams = require('stream');
-var helper = require('./helper');
-var imacss = require('../');
-
-var expect = require('expect.js');
-
-describe('The imacss', function suite () {
- var selector = '.imacss';
-
- it('"transform" method should be able to handle globs', function test (done) {
- var stream = new streams.Writable();
-
- imacss.transform('./specs/**/*.svg').pipe(stream);
-
- stream._write = function (css) {
- css = css.toString('utf-8');
-
- expect(css.substring(0, selector.length)).to.be(selector);
-
- done();
- };
- });
-
- it('"transform" method should be able to handle a Vinyl file object', function (done) {
- var stream = new streams.Writable();
-
- imacss.transform(helper.createImageFile()).pipe(stream);
-
- stream._write = function (css) {
- css = css.toString('utf-8');
-
- expect(css.substring(0, selector.length)).to.be(selector);
-
- done();
- };
- });
-});
diff --git a/specs/purify.spec.js b/specs/purify.spec.js
deleted file mode 100644
index 4042083..0000000
--- a/specs/purify.spec.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * imacss
- *
- * Copyright(c) 2014 André König
- * MIT Licensed
- *
- */
-
-/**
- * @author André König
- *
- */
-
-'use strict';
-
-var helper = require('./helper');
-var purify = require('../lib/purify');
-
-var expect = require('expect.js');
-
-describe('The "purification" stream', function suite () {
-
- it('should transform a vinyl file to an internal data structure', function test (done) {
- var imageFile = helper.createImageFile();
- var stream = purify();
-
- stream.on('data', function (image) {
- expect(image.name).not.to.be(undefined);
- expect(image.contents).not.to.be(undefined);
- expect(image.base64).not.to.be(undefined);
-
- done();
- });
-
- stream.write(imageFile);
- stream.end();
- });
-});
diff --git a/specs/slugify.spec.js b/specs/slugify.spec.js
deleted file mode 100644
index b678bc0..0000000
--- a/specs/slugify.spec.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * imacss
- *
- * Copyright(c) 2014 André König
- * MIT Licensed
- *
- */
-
-/**
- * @author André König
- *
- */
-
-'use strict';
-
-var helper = require('./helper');
-var slugify = require('../lib/slugify');
-
-var expect = require('expect.js');
-
-describe('The "slugification" stream', function suite () {
-
- it('should create a slug', function test (done) {
- var image = helper.createImage();
- var stream = slugify();
-
- stream.on('data', function (image) {
- expect(image.slug).not.to.be(undefined);
-
- done();
- });
-
- stream.write(image);
- stream.end();
- });
-});
diff --git a/specs/urify.spec.js b/specs/urify.spec.js
deleted file mode 100644
index 11a17fa..0000000
--- a/specs/urify.spec.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * imacss
- *
- * Copyright(c) 2014 André König
- * MIT Licensed
- *
- */
-
-/**
- * @author André König
- *
- */
-
-'use strict';
-
-var helper = require('./helper');
-var urify = require('../lib/urify');
-
-var expect = require('expect.js');
-
-describe('The "urification" stream', function suite () {
-
- it('should create a data-uri', function test (done) {
- var image = helper.createImage();
- var stream = urify();
-
- stream.on('data', function (image) {
- expect(image.datauri).not.to.be(undefined);
-
- done();
- });
-
- stream.write(image);
- stream.end();
- });
-});
diff --git a/stylesheets/pygment_trac.css b/stylesheets/pygment_trac.css
new file mode 100644
index 0000000..d1df6a2
--- /dev/null
+++ b/stylesheets/pygment_trac.css
@@ -0,0 +1,68 @@
+.highlight .c { color: #999988; font-style: italic } /* Comment */
+.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
+.highlight .k { font-weight: bold } /* Keyword */
+.highlight .o { font-weight: bold } /* Operator */
+.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
+.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
+.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #aa0000 } /* Generic.Error */
+.highlight .gh { color: #999999 } /* Generic.Heading */
+.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
+.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
+.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .gp { color: #555555 } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold; } /* Generic.Subheading */
+.highlight .gt { color: #aa0000 } /* Generic.Traceback */
+.highlight .kc { font-weight: bold } /* Keyword.Constant */
+.highlight .kd { font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
+.highlight .kr { font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
+.highlight .m { color: #009999 } /* Literal.Number */
+.highlight .s { color: #d14 } /* Literal.String */
+.highlight .na { color: #008080 } /* Name.Attribute */
+.highlight .nb { color: #0086B3 } /* Name.Builtin */
+.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
+.highlight .no { color: #008080 } /* Name.Constant */
+.highlight .ni { color: #800080 } /* Name.Entity */
+.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
+.highlight .nn { color: #555555 } /* Name.Namespace */
+.highlight .nt { color: #CBDFFF } /* Name.Tag */
+.highlight .nv { color: #008080 } /* Name.Variable */
+.highlight .ow { font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mf { color: #009999 } /* Literal.Number.Float */
+.highlight .mh { color: #009999 } /* Literal.Number.Hex */
+.highlight .mi { color: #009999 } /* Literal.Number.Integer */
+.highlight .mo { color: #009999 } /* Literal.Number.Oct */
+.highlight .sb { color: #d14 } /* Literal.String.Backtick */
+.highlight .sc { color: #d14 } /* Literal.String.Char */
+.highlight .sd { color: #d14 } /* Literal.String.Doc */
+.highlight .s2 { color: #d14 } /* Literal.String.Double */
+.highlight .se { color: #d14 } /* Literal.String.Escape */
+.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
+.highlight .si { color: #d14 } /* Literal.String.Interpol */
+.highlight .sx { color: #d14 } /* Literal.String.Other */
+.highlight .sr { color: #009926 } /* Literal.String.Regex */
+.highlight .s1 { color: #d14 } /* Literal.String.Single */
+.highlight .ss { color: #990073 } /* Literal.String.Symbol */
+.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
+.highlight .vc { color: #008080 } /* Name.Variable.Class */
+.highlight .vg { color: #008080 } /* Name.Variable.Global */
+.highlight .vi { color: #008080 } /* Name.Variable.Instance */
+.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */
+
+.type-csharp .highlight .k { color: #0000FF }
+.type-csharp .highlight .kt { color: #0000FF }
+.type-csharp .highlight .nf { color: #000000; font-weight: normal }
+.type-csharp .highlight .nc { color: #2B91AF }
+.type-csharp .highlight .nn { color: #000000 }
+.type-csharp .highlight .s { color: #A31515 }
+.type-csharp .highlight .sc { color: #A31515 }
diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css
new file mode 100644
index 0000000..a54a639
--- /dev/null
+++ b/stylesheets/stylesheet.css
@@ -0,0 +1,247 @@
+body {
+ margin: 0;
+ padding: 0;
+ background: #151515 url("../images/bkg.png") 0 0;
+ color: #eaeaea;
+ font: 16px;
+ line-height: 1.5;
+ font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace;
+}
+
+/* General & 'Reset' Stuff */
+
+.container {
+ width: 90%;
+ max-width: 600px;
+ margin: 0 auto;
+}
+
+section {
+ display: block;
+ margin: 0 0 20px 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ margin: 0 0 20px;
+}
+
+li {
+ line-height: 1.4 ;
+}
+
+/* Header,
+ header - container
+ h1 - project name
+ h2 - project description
+*/
+
+header {
+ background: rgba(0, 0, 0, 0.1);
+ width: 100%;
+ border-bottom: 1px dashed #b5e853;
+ padding: 20px 0;
+ margin: 0 0 40px 0;
+}
+
+header h1 {
+ font-size: 30px;
+ line-height: 1.5;
+ margin: 0 0 0 -40px;
+ font-weight: bold;
+ font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace;
+ color: #b5e853;
+ text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1),
+ 0 0 5px rgba(181, 232, 83, 0.1),
+ 0 0 10px rgba(181, 232, 83, 0.1);
+ letter-spacing: -1px;
+ -webkit-font-smoothing: antialiased;
+}
+
+header h1:before {
+ content: "./ ";
+ font-size: 24px;
+}
+
+header h2 {
+ font-size: 18px;
+ font-weight: 300;
+ color: #666;
+}
+
+#downloads .btn {
+ display: inline-block;
+ text-align: center;
+ margin: 0;
+}
+
+/* Main Content
+*/
+
+#main_content {
+ width: 100%;
+ -webkit-font-smoothing: antialiased;
+}
+section img {
+ max-width: 100%
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-weight: normal;
+ font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace;
+ color: #b5e853;
+ letter-spacing: -0.03em;
+ text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1),
+ 0 0 5px rgba(181, 232, 83, 0.1),
+ 0 0 10px rgba(181, 232, 83, 0.1);
+}
+
+#main_content h1 {
+ font-size: 30px;
+}
+
+#main_content h2 {
+ font-size: 24px;
+}
+
+#main_content h3 {
+ font-size: 18px;
+}
+
+#main_content h4 {
+ font-size: 14px;
+}
+
+#main_content h5 {
+ font-size: 12px;
+ text-transform: uppercase;
+ margin: 0 0 5px 0;
+}
+
+#main_content h6 {
+ font-size: 12px;
+ text-transform: uppercase;
+ color: #999;
+ margin: 0 0 5px 0;
+}
+
+dt {
+ font-style: italic;
+ font-weight: bold;
+}
+
+ul li {
+ list-style: none;
+}
+
+ul li:before {
+ content: ">>";
+ font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace;
+ font-size: 13px;
+ color: #b5e853;
+ margin-left: -37px;
+ margin-right: 21px;
+ line-height: 16px;
+}
+
+blockquote {
+ color: #aaa;
+ padding-left: 10px;
+ border-left: 1px dotted #666;
+}
+
+pre {
+ background: rgba(0, 0, 0, 0.9);
+ border: 1px solid rgba(255, 255, 255, 0.15);
+ padding: 10px;
+ font-size: 14px;
+ color: #b5e853;
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ text-wrap: normal;
+ overflow: auto;
+ overflow-y: hidden;
+}
+
+table {
+ width: 100%;
+ margin: 0 0 20px 0;
+}
+
+th {
+ text-align: left;
+ border-bottom: 1px dashed #b5e853;
+ padding: 5px 10px;
+}
+
+td {
+ padding: 5px 10px;
+}
+
+hr {
+ height: 0;
+ border: 0;
+ border-bottom: 1px dashed #b5e853;
+ color: #b5e853;
+}
+
+/* Buttons
+*/
+
+.btn {
+ display: inline-block;
+ background: -webkit-linear-gradient(top, rgba(40, 40, 40, 0.3), rgba(35, 35, 35, 0.3) 50%, rgba(10, 10, 10, 0.3) 50%, rgba(0, 0, 0, 0.3));
+ padding: 8px 18px;
+ border-radius: 50px;
+ border: 2px solid rgba(0, 0, 0, 0.7);
+ border-bottom: 2px solid rgba(0, 0, 0, 0.7);
+ border-top: 2px solid rgba(0, 0, 0, 1);
+ color: rgba(255, 255, 255, 0.8);
+ font-family: Helvetica, Arial, sans-serif;
+ font-weight: bold;
+ font-size: 13px;
+ text-decoration: none;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.75);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05);
+}
+
+.btn:hover {
+ background: -webkit-linear-gradient(top, rgba(40, 40, 40, 0.6), rgba(35, 35, 35, 0.6) 50%, rgba(10, 10, 10, 0.8) 50%, rgba(0, 0, 0, 0.8));
+}
+
+.btn .icon {
+ display: inline-block;
+ width: 16px;
+ height: 16px;
+ margin: 1px 8px 0 0;
+ float: left;
+}
+
+.btn-github .icon {
+ opacity: 0.6;
+ background: url("../images/blacktocat.png") 0 0 no-repeat;
+}
+
+/* Links
+ a, a:hover, a:visited
+*/
+
+a {
+ color: #63c0f5;
+ text-shadow: 0 0 5px rgba(104, 182, 255, 0.5);
+}
+
+/* Clearfix */
+
+.cf:before, .cf:after {
+ content:"";
+ display:table;
+}
+
+.cf:after {
+ clear:both;
+}
+
+.cf {
+ zoom:1;
+}
\ No newline at end of file