Browse Source

initial commit

Kyle P Davis 10 years ago
commit
c57673d4fc
8 changed files with 862 additions and 0 deletions
  1. 2 0
      .gitignore
  2. 21 0
      LICENSE.md
  3. 9 0
      README.md
  4. 108 0
      gulpfile.js
  5. 25 0
      package.json
  6. 251 0
      src/resume.md
  7. 22 0
      src/template/index.html
  8. 424 0
      src/template/normalize.css

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+node_modules/
+dist/

+ 21 - 0
LICENSE.md

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Kyle P Davis
+
+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.

+ 9 - 0
README.md

@@ -0,0 +1,9 @@
+# resume
+
+A markdown version of my resume.
+
+An attempt to reduce the overhead involved in updating my resume.
+
+Builds to HTML and PDF.
+
+Deploys to the `gh-pages` branch for the https://KylePDavis.github.io/resume/ site (also my http://KylePDavis.com site)

+ 108 - 0
gulpfile.js

@@ -0,0 +1,108 @@
+"use strict";
+
+var gulp = require("gulp"),
+	gulpLoadPlugins = require("gulp-load-plugins"),
+	del = require("del"),
+	fs = require("fs"),
+	path = require("path"),
+	through = require("through2"),
+	roaster = require("roaster"),
+	pdf = require("html-pdf");
+
+
+var $ = gulpLoadPlugins(),
+	opts = {
+		isDebug: Boolean($.util.env.debug),
+		md: {},
+		pdf: {
+			type: "pdf",
+			width: "8.5in",
+			height: "11in",
+			border: "0in", // handled via CSS
+		},
+	},
+	errLogger = function(err) {
+		$.util.log($.util.colors.red("Error: "), String(opts.isDebug ? err.stack : err));
+		throw err;
+	},
+	md2html = function(opts) {
+		if (!opts) opts = {};
+		var tmplPath = opts.template ? fs.realpathSync(opts.template) : path.join(__dirname, "/src/template/index.html"),
+			tmpl = fs.readFileSync(tmplPath, "utf8");
+		return through.obj(function(file, encoding, done) {
+			var md = file.contents.toString();
+			file.path = file.path.replace(/\.md$/, ".html");
+			roaster(md, opts, function(err, contents) {
+				if (err) return done(err);
+				var html = tmpl.replace("{{content}}", contents);
+				file.contents = new Buffer(html);
+				done(null, file);
+			});
+		});
+	},
+	html2pdf = function(opts) {
+		if (!opts) opts = {};
+		return through.obj(function(file, encoding, done) {
+			var baseUri = "file://" + path.dirname(file.path) + "/",
+				html = file.contents.toString()
+					.replace("<head>", "<head>\n<base href=" + JSON.stringify(baseUri) + ">\n");
+			file.path = file.path.replace(/\.html$/, ".pdf");
+			pdf.create(html, opts)
+				.toBuffer(function(err, buf) {
+					if (err) return done(err);
+					file.contents = buf;
+					done(null, file);
+				});
+		});
+	};
+
+
+gulp
+
+.task("default", ["build"], function() {})
+
+.task("deploy", ["build"], function() {
+	return gulp
+		.src(gulp.src("dist/**/*"))
+		.pipe($.deploy({
+			push: !$.util.env.nopush,
+		}));
+})
+
+.task("clean", function() {
+	del.sync(["dist"]);
+})
+
+.task("watch", ["build"], function() {
+	gulp.watch([
+		"src/template/**/*",
+		"src/resume.md",
+	], ["build"]);
+})
+
+.task("build", ["clean", "build:pdf"], function() {})
+
+.task("build:pdf", ["build:html"], function() {
+	return gulp
+		.src("dist/index.html")
+		.pipe($.plumber(errLogger))
+		.pipe(html2pdf(opts.pdf))
+		.pipe($.rename("resume.pdf"))
+		.pipe(gulp.dest("dist"))
+		.pipe($.if(opts.isDebug, $.debug()));
+})
+
+.task("build:html", function() {
+	return gulp
+		.src([
+			"src/template/**/*",
+			"src/resume.md",
+		])
+		.pipe($.plumber(errLogger))
+		.pipe($.if("**/resume.md", md2html(opts.md)))
+		.pipe($.if("**/resume.html", $.rename("index.html")))
+		.pipe(gulp.dest("dist"))
+		.pipe($.if(opts.isDebug, $.debug()));
+})
+
+;

+ 25 - 0
package.json

@@ -0,0 +1,25 @@
+{
+  "name": "resume",
+  "version": "1.0.0",
+  "description": "Resume for Kyle P Davis",
+  "main": "index.js",
+  "scripts": {
+    "postinstall": "gulp"
+  },
+  "author": "Kyle P Davis <me@KylePDavis.com>",
+  "license": "MIT",
+  "devDependencies": {
+    "del": "^1.2.0",
+    "gulp": "^3.9.0",
+    "gulp-debug": "^2.0.1",
+    "gulp-gh-pages": "^0.5.2",
+    "gulp-if": "^1.2.5",
+    "gulp-load-plugins": "^1.0.0-rc.1",
+    "gulp-plumber": "^1.0.1",
+    "gulp-rename": "^1.2.2",
+    "gulp-util": "^3.0.6",
+    "html-pdf": "^1.2.1",
+    "roaster": "^1.1.3"
+  },
+  "private": true
+}

+ 251 - 0
src/resume.md

@@ -0,0 +1,251 @@
+<!--
+My resume in "pure" markdown.
+Apologies to anyone reading the source for the inline HTML required to make it work.
+-->
+
+
+| [<b class="my-name">Kyle P Davis<small>.com</small></b>](http://KylePDavis.com/) | <b class="my-number"></b> | [<b class="my-email">resume@KylePDavis.com</b>](mailto:resume@KylePDavis.com)
+|:----|:---:|----:
+| * * | * * | * *
+
+---
+
+
+
+## Overview
+
+* Software developer with considerable experience
+* Known for solving difficult problems
+* Able to master new technologies with ease
+* Passionate about creating software to make life better
+* Lover of technology, computers, programming, algorithms, databases, visualization, automation, and open source
+
+
+
+## Skills
+
+| __I Do ...__      | _With ..._
+|:----------------|:----------------------------------------------------------
+| _Scripting_     | JavaScript / ES6, NodeJS, CoffeeScript, TypeScript, Python, Perl, PHP, Ruby, Bash, PowerShell
+| _Coding_        | C# / .NET / WCF / WPF / EF / LINQ, Objective-C / iOS, C++ / C, Java, Go, Swift
+| _Web_           | AngularJS, jQuery, Bootstrap, d3, SVG, three.js, ASP.NET, HTML, CSS
+| _Data_          | Lexers & Parsers, RegExp, JSON, CSV, CSON, YAML, TOML, XML, XSLT
+| _Databases_     | MongoDB, Redis, ElasticSearch, PostgreSQL, MySQL, LDAP, ArangoDB
+| _Architecture_  | Micro-services, REST, ESB, SOA, n-tier, MVC
+| _Misc_          | BabelJS, jshint, eslint, jscs, gulp, grunt, pep8, flake, shellcheck
+| _Testing_       | Web Driver / Selenium, PhantomJS, mocha, karma, protractor, istanbul, jscoverage
+| _Performance_   | Chrome Dev Tools, DTrace, strace, iostat, vmstat, perf-tools
+| _Management_    | Agile, SCRUM, Kanban, GitHub, Stash, JIRA, Bamboo, Trac, Jenkins
+| _Systems_       | Mac OS X, Linux, SmartOS, FreeBSD, Windows
+
+
+
+## Experience
+
+| <b class="xp-what">Senior Applications Architect</b> | <b class="xp-where">Rivera Group</b>    | <b class="xp-when">11/2011 - 6/2015</b>
+|:----|:---:|----:
+|                                                      | <b class="xp-where">Sellersburg, IN</b> | <b class="xp-when">3.6yr</b>
+
+
+Spearheaded software projects to solve tough problems in the R&D department with a small group of talented developers.
+
+* Built a distributed micro-services platform to extract actionable information from large and diverse data sets with real-time data collection and analysis using NodeJS and MongoDB
+* Developed advanced web UI using AngularJS to allow for custom data modeling and visualization
+* Led the effort to port the MongoDB Aggregation Framework to JavaScript / NodeJS
+
+
+| <b class="xp-what">Applications Consultant</b> | <b class="xp-where">Humana</b>         | <b class="xp-when">1/2008 - 11/2011</b>
+|:----|:---:|----:
+|                                                | <b class="xp-where">Louisville, KY</b> | <b class="xp-when">4.0yr</b>
+
+Team leader on an Agile development team responsible for the customer-facing websites and mobile applications.
+
+* Created cross-platform hybrid native/HTML5 single page web app architecture for mobile projects
+* Developed patterns and code generation techniques to greatly simplify interaction with services
+* Improved source code management scheme to aid the development cycle and reduce risk
+* Automated builds and deployments using CCNet and NAnt scripts
+* Served as a technical consultant to other teams on different projects within the department
+* Promoted standards, learning, and gave talks and training sessions on new tools and technologies
+* Helped build a new application for tracking attendance and participation at wellness centers
+* Redesigned and drastically reduced development effort for a tool to admin the augmentation of health records
+* Helped rewrite policy admin sites and introduced them to jQuery, AJAX, and better interactivity via JavaScript
+
+
+<div class="page-break"></div>
+
+
+| <b class="xp-what">Engineer</b> | <b class="xp-where">Win.Net Internet</b> | <b class="xp-when">2/2004 - 1/2008</b>
+|:----|:---:|----:
+|                                 | <b class="xp-where">Louisville, KY</b>   | <b class="xp-when">3.9yr</b>
+
+Primary engineer responsible for designing, implementing, and maintaining all  software, hardware, and networking.
+
+* Responsible for designing, troubleshooting, maintaining, securing, and optimizing the web servers, email, DNS, LDAP, MySQL, switches, Cisco routers, NetApp storage devices, internal software, audits, and reports
+* Extended billing system to automatically send email, fax, and postal statements using Perl and a single HTML template
+* Built servers and wrote tools to integrate and automate a third-party spam filtering solution
+* Seamless migrations of customer services and data from newly acquired external systems to our platform
+* Planned and executed plan to combine and coalesce disparate IP blocks to reduce cost with minimal customer impact
+* Developed tool to automate the configuration and testing of a wide variety of DSL routers which dramatically reduced the time and knowledge required to prepare them for customers
+* Built a tool to track customers who had not
+* Wrote tool to automatically verify availability of DSL for potential customers and still work within the restrictive services provided to us by the telephone companies
+* Started as a technician but soon moved to engineer
+
+
+
+## Education
+
+| <b class="xp-what">M.S. in Computer Science</b> | <b class="xp-where">Georgia Tech</b> | <b class="xp-when">Fall 2015</b>
+|:----|----:|----:
+|                                                 | <b class="xp-where">Online / GA</b>  | <b class="xp-when">0.0yr</b>
+
+* Enrolled for Fall 2015
+
+
+| <b class="xp-what">B.S. in Computer Science</b> | <b class="xp-where">Indiana University</b>         | <b class="xp-when">6/2002 - 5/2012</b>
+|:----|----:|----:
+|                                                 | <b class="xp-where">Southeast / New Albany, IN</b> | <b class="xp-when">10.0yr</b>
+
+* Minor in Mathematics
+* Placed in top 10 at regional ACM International Collegiate Programming Contest for 4 years
+
+
+
+<style scoped>
+/* NOTE:
+ * .preview - primary; preview via Cloud9 IDE, print via build.js
+ * .markdown-preview - secondary; preview via Atom IDE
+ */
+
+/* highlight hovered for testing */
+html:hover, body:hover, div#preview, div.markdown-preview { background:#FFF; }
+div#preview *:hover, div.markdown-preview *:hover { background:rgba(128,160,192,0.5); }
+
+div#preview, div.markdown-preview {
+	position: inherit;
+	min-width: 8in;
+	font-size: 10pt;
+	line-height: 1.4;
+	color: #000;
+	background: #FFF;
+    font-family: "Avenir Next", "Helvetica Neue", "Segoe UI", Helvetica, Arial, sans-serif;
+}
+div#preview {
+	padding: 2em;
+}
+div.markdown-preview *, div.markdown-preview th {
+	background: #FFF;
+}
+@media print {
+	a[href] {
+		color: #000;
+	}
+	@page {
+		size: 8.5in 11in;
+		margin: 0.50in;
+	}
+	div#preview {
+		padding-left: 0.48in;
+        padding-right: 0.52in;
+        padding-top: 0.50in;
+        padding-bottom: 0.50in;
+        font-size: 10pt;
+	}
+	.page-break {
+		page-break-before: always;
+	}
+	.page-break:after {
+		display: block;
+		height: 0.50in;
+		content: " ";
+	}
+}
+
+div#preview hr, div.markdown-preview hr {
+	height: 0;
+	margin: 1px;
+	border: 0;
+	border-bottom: 2px solid;
+	border-color: #777;
+}
+
+div#preview ul, div.markdown-preview ul {
+	margin-top: 0;
+}
+
+div#preview table, div.markdown-preview table {
+    display: table;
+	width: 100%;
+	margin: 0;
+	padding: 0;
+	border: 0;
+	border-collapse: collapse;
+}
+div#preview table, div.markdown-preview table,
+div#preview th,    div.markdown-preview th,
+div#preview td,    div.markdown-preview td,
+div#preview tr,    div.markdown-preview tr {
+	margin: 0;
+	padding: 0;
+	border: 0;
+}
+div#preview th + th, div.markdown-preview th + th,
+div#preview td + td, div.markdown-preview td + td {
+	padding: 2px;
+	padding-left: 8px;
+}
+
+code.lang-js {
+	width: 100%;
+	margin: 0;
+	padding-right: 0;
+}
+
+.my-name {
+	display: inline-block;
+	width: 40%;
+	min-width: 2in;
+	font-size: 1.5em;
+}
+.my-name small {
+	color: #777;
+}
+.my-number {
+	display: inline-block;
+	min-width: 20%;
+}
+.my-email {
+	display: inline-block;
+	width: 40%;
+	min-width: 2in;
+	text-align: right;
+}
+
+table .xp-what {
+    display: block;
+    width: 100%;
+	min-width: 2in;
+}
+table .xp-where {
+	display: block;
+    width: 100%;
+	min-width: 1in;
+	text-align: center;
+}
+table tbody .xp-where {
+	color: #777;
+    font-weight: normal;
+    font-size: 0.8em;
+}
+table .xp-when {
+	display: block;
+    width: 100%;
+	min-width: 2in;
+	text-align: right;
+}
+table tbody .xp-when {
+	color: #777;
+    font-weight: normal;
+    font-size: 0.8em;
+}
+
+</style>

+ 22 - 0
src/template/index.html

@@ -0,0 +1,22 @@
+<!doctype html>
+<html class="no-js" lang="">
+	<head>
+		<meta charset="utf-8">
+		<meta http-equiv="x-ua-compatible" content="ie=edge">
+		<title>Resume - Kyle P Davis</title>
+		<meta name="description" content="Resume: Kyle P Davis">
+		<meta name="viewport" content="width=device-width, initial-scale=1">
+
+		<link rel="apple-touch-icon" href="apple-touch-icon.png">
+
+		<link rel="stylesheet" href="normalize.css">
+	</head>
+	<body>
+		<!--[if lt IE 8]>
+			<p class="browserupgrade">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
+		<![endif]-->
+		<div id="preview">
+			{{content}}
+		</div>
+	</body>
+</html>

+ 424 - 0
src/template/normalize.css

@@ -0,0 +1,424 @@
+/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
+
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS and IE text size adjust after device orientation change,
+ *    without disabling user zoom.
+ */
+
+html {
+  font-family: sans-serif; /* 1 */
+  -ms-text-size-adjust: 100%; /* 2 */
+  -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+
+body {
+  margin: 0;
+}
+
+/* HTML5 display definitions
+   ========================================================================== */
+
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11
+ * and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+  display: block;
+}
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 8/9.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+
+audio,
+canvas,
+progress,
+video {
+  display: inline-block; /* 1 */
+  vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+  display: none;
+  height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.
+ */
+
+[hidden],
+template {
+  display: none;
+}
+
+/* Links
+   ========================================================================== */
+
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+
+a {
+  background-color: transparent;
+}
+
+/**
+ * Improve readability of focused elements when they are also in an
+ * active/hover state.
+ */
+
+a:active,
+a:hover {
+  outline: 0;
+}
+
+/* Text-level semantics
+   ========================================================================== */
+
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+
+abbr[title] {
+  border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+
+b,
+strong {
+  font-weight: bold;
+}
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+
+dfn {
+  font-style: italic;
+}
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+
+h1 {
+  font-size: 2em;
+  margin: 0.67em 0;
+}
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+
+mark {
+  background: #ff0;
+  color: #000;
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+  font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+
+sup {
+  top: -0.5em;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+/* Embedded content
+   ========================================================================== */
+
+/**
+ * Remove border when inside `a` element in IE 8/9/10.
+ */
+
+img {
+  border: 0;
+}
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+
+svg:not(:root) {
+  overflow: hidden;
+}
+
+/* Grouping content
+   ========================================================================== */
+
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+
+figure {
+  margin: 1em 40px;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+
+hr {
+  box-sizing: content-box;
+  height: 0;
+}
+
+/**
+ * Contain overflow in all browsers.
+ */
+
+pre {
+  overflow: auto;
+}
+
+/**
+ * Address odd `em`-unit font size rendering in all browsers.
+ */
+
+code,
+kbd,
+pre,
+samp {
+  font-family: monospace, monospace;
+  font-size: 1em;
+}
+
+/* Forms
+   ========================================================================== */
+
+/**
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
+ * styling of `select`, unless a `border` property is set.
+ */
+
+/**
+ * 1. Correct color not being inherited.
+ *    Known issue: affects color of disabled elements.
+ * 2. Correct font properties not being inherited.
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+  color: inherit; /* 1 */
+  font: inherit; /* 2 */
+  margin: 0; /* 3 */
+}
+
+/**
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ */
+
+button {
+  overflow: visible;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+ * Correct `select` style inheritance in Firefox.
+ */
+
+button,
+select {
+  text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ *    and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ *    `input` and others.
+ */
+
+button,
+html input[type="button"], /* 1 */
+input[type="reset"],
+input[type="submit"] {
+  -webkit-appearance: button; /* 2 */
+  cursor: pointer; /* 3 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+html input[disabled] {
+  cursor: default;
+}
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+  border: 0;
+  padding: 0;
+}
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+input {
+  line-height: normal;
+}
+
+/**
+ * It's recommended that you don't attempt to style these elements.
+ * Firefox's implementation doesn't respect box-sizing, padding, or width.
+ *
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+  box-sizing: border-box; /* 1 */
+  padding: 0; /* 2 */
+}
+
+/**
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
+ * `font-size` values of the `input`, it causes the cursor style of the
+ * decrement button to change from `default` to `text`.
+ */
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome.
+ */
+
+input[type="search"] {
+  -webkit-appearance: textfield; /* 1 */
+  box-sizing: content-box; /* 2 */
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+  border: 1px solid #c0c0c0;
+  margin: 0 2px;
+  padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+  border: 0; /* 1 */
+  padding: 0; /* 2 */
+}
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+
+textarea {
+  overflow: auto;
+}
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+
+optgroup {
+  font-weight: bold;
+}
+
+/* Tables
+   ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+
+td,
+th {
+  padding: 0;
+}