Page MenuHomeDevCentral

D2430.diff
No OneTemporary

D2430.diff

diff --git a/.arcconfig b/.arcconfig
new file mode 100644
--- /dev/null
+++ b/.arcconfig
@@ -0,0 +1,4 @@
+{
+ "phabricator.uri": "https://devcentral.nasqueron.org",
+ "repository.callsign": "UPSECTION"
+}
diff --git a/.arclint b/.arclint
new file mode 100644
--- /dev/null
+++ b/.arclint
@@ -0,0 +1,27 @@
+{
+ "linters": {
+ "chmod": {
+ "type": "chmod"
+ },
+ "filename": {
+ "type": "filename"
+ },
+ "json": {
+ "type": "json",
+ "include": [
+ "(^\\.arcconfig$)",
+ "(^\\.arclint$)",
+ "(\\.json$)"
+ ]
+ },
+ "python": {
+ "type": "flake8",
+ "severity": {
+ "F821": "advice"
+ },
+ "include": [
+ "(\\.py$)"
+ ]
+ }
+ }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+tests/site/*
+!tests/site/.gitkeep
diff --git a/Makefile b/Makefile
new file mode 100644
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,31 @@
+COMPONENTS_DIR=/usr/local/share/upsection
+BIN_DIR=/usr/local/bin
+
+MKDIR=mkdir -p
+INSTALL_BIN=install -m 755
+INSTALL_SHARE=install -m 644
+
+# -------------------------------------------------------------
+# Main targets
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+all:
+ # Nothing to build
+
+install:
+ ${MKDIR} ${COMPONENTS_DIR} ${BIN_DIR}
+ ${INSTALL_BIN} src/upsection.py ${BIN_DIR}/upsection
+ ${INSTALL_SHARE} components/* ${COMPONENTS_DIR}
+
+# -------------------------------------------------------------
+# Development and maintenance targets
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+test:
+ cd tests/site
+ cp ../../config.yml .
+ cp -Rp ../../template/* .
+ make
+
+publish:
+ upsection package.json
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,94 @@
+Upsection. Generate static sites.
+=================================
+
+Several Nasqueron static sites use the ZURB Template for Foundation for Sites.
+
+This command allows to maintain in sites repository an unified configuration
+stored in config.yml, and generate Node package, browserslists or Gulp files.
+
+The main expected benefit is to maintain the Node dependencies in a central
+repository and so avoid to upgrade package.json everywhere.
+
+Installation
+------------
+
+To install the `upsection` command and needed resources,
+use `make install`.
+
+How to use on an existing site
+------------------------------
+
+Go to the site repository directory and run `make`.
+
+That will take care to call upsection to generate files and then
+to call npm to install Node dependencies and run the gulp script.
+
+If successful, you've a full build of the site in the dist/ directory.
+
+To use in development mode, use `make dev`.
+
+How to convert a site?
+----------------------
+
+ 1. Update the keys of config.yml to adhere to Upsection conventions
+ 2. Move package.json metadata unique to your project in config.yml
+ 3. Run `upsection package.json` and compare with legacy package.json
+ 4. Remove from your repo package.json, gulpfile.babel.js and .browsers
+ 5. Add to your repo `template/Makefile`
+
+How to start a new project?
+---------------------------
+
+ 1. Copy the template directory for your site
+ 2. Generate a configuration file from the .in provided
+
+If we would automate the tasks, that would give
+for https://awesome.nasqueron.org:
+
+```
+cp -R template /path/to/your-awesome-site
+cd /path/to/your-awesome-site
+git init .
+sed -i s/%%SUBDOMAIN%%/awesome/g config.yml.in > config.yml
+rm config.yml.in
+# Edit config.yml
+make
+```
+
+The config.yml.in file offers %%SUBDOMAIN%% for any automation need.
+
+How to regenerate the files on an existing site?
+------------------------------------------------
+
+Use `make clean all` if you want a fresh node_modules folder.
+
+To keep node_modules folder, simply run `upsection` again.
+If you updated dependencies, `npm install` works (or yarn).
+
+To regenerate only one file, you can use `upsection .browserslistrc`.
+
+What this script doesn't do?
+----------------------------
+
+Upsection takes care of the installation and maintenance of the build mechanism
+but not of the maintenance of the content and assets.
+
+As such, upsection doesn't propagate changes in template folder, so for e.g.
+it won't upgrade the SCSS for a Foundation 6.3 site into a 6.7 version.
+
+How to upgrade dependencies in upsection repository?
+----------------------------------------------------
+
+For the Node dependencies, edit `components/package-template.json`.
+
+When a new Foundation version is released, changes to templates/assets/
+are expected.
+
+The following files can be normally copied as is
+from the Foundation for sites repository:
+
+ - scss/settings/_settings.scss -> assets/scss/_settings.scss
+ - js/entries/foundation.js -> assets/js/lib/foundation-explicit-pieces.js
+
+Check also `assets/scss/app.css` if a component is added or removed
+(e.g. foundation-slider).
diff --git a/components/gulpfile.js b/components/gulpfile.js
new file mode 100644
--- /dev/null
+++ b/components/gulpfile.js
@@ -0,0 +1,160 @@
+'use strict';
+
+import plugins from 'gulp-load-plugins';
+import yargs from 'yargs';
+import browser from 'browser-sync';
+import gulp from 'gulp';
+import panini from 'panini';
+import rimraf from 'rimraf';
+import yaml from 'js-yaml';
+import fs from 'fs';
+import webpackStream from 'webpack-stream';
+import webpack2 from 'webpack';
+import named from 'vinyl-named';
+import uncss from 'uncss';
+import autoprefixer from 'autoprefixer';
+
+// Load all Gulp plugins into one variable
+const $ = plugins();
+
+// Check for --production flag
+const PRODUCTION = !!(yargs.argv.production);
+
+// Load settings from config.yml
+const config = loadConfig();
+
+function loadConfig() {
+ let ymlFile = fs.readFileSync('config.yml', 'utf8');
+ return yaml.load(ymlFile);
+}
+
+// Build the "dist" folder by running all of the below tasks
+// Sass must be run later so UnCSS can search for used classes in the others assets.
+gulp.task('build',
+ gulp.series(clean, gulp.parallel(pages, javascript, images, copy), sass));
+
+// Build the site, run the server, and watch for file changes
+gulp.task('default',
+ gulp.series('build', server, watch));
+
+// Delete the "dist" folder
+// This happens every time a build starts
+function clean(done) {
+ rimraf(config.paths.dist, done);
+}
+
+// Copy files out of the assets folder
+// This task skips over the "img", "js", and "scss" folders, which are parsed separately
+function copy() {
+ return gulp.src(build_paths.assets)
+ .pipe(gulp.dest(config.paths.dist + '/assets'));
+}
+
+// Copy page templates into finished HTML files
+function pages() {
+ return gulp.src('src/pages/**/*.{html,hbs,handlebars}')
+ .pipe(panini({
+ root: 'src/pages/',
+ layouts: 'src/layouts/',
+ partials: 'src/partials/',
+ data: 'src/data/',
+ helpers: 'src/helpers/'
+ }))
+ .pipe(gulp.dest(config.paths.dist));
+}
+
+// Load updated HTML templates and partials into Panini
+function resetPages(done) {
+ panini.refresh();
+ done();
+}
+
+// Compile Sass into CSS
+// In production, the CSS is compressed
+function sass() {
+
+ const postCssPlugins = [
+ autoprefixer(),
+ PRODUCTION && uncss.postcssPlugin(config.tasks.uncss),
+ ].filter(Boolean);
+
+ return gulp.src('src/assets/scss/app.scss')
+ .pipe($.sourcemaps.init())
+ .pipe($.sass({
+ includePaths: config.paths.sass
+ })
+ .on('error', $.sass.logError))
+ .pipe($.postcss(postCssPlugins))
+ .pipe($.if(PRODUCTION, $.cleanCss({ compatibility: 'ie9' })))
+ .pipe($.if(!PRODUCTION, $.sourcemaps.write()))
+ .pipe(gulp.dest(config.paths.dist + '/assets/css'))
+ .pipe(browser.reload({ stream: true }));
+}
+
+let webpackConfig = {
+ mode: (PRODUCTION ? 'production' : 'development'),
+ module: {
+ rules: [
+ {
+ test: /\.js$/,
+ use: {
+ loader: 'babel-loader',
+ options: {
+ presets: [ "@babel/preset-env" ],
+ compact: false
+ }
+ }
+ }
+ ]
+ },
+ devtool: !PRODUCTION && 'source-map'
+}
+
+// Combine JavaScript into one file
+// In production, the file is minified
+function javascript() {
+ return gulp.src(config.paths.entries)
+ .pipe(named())
+ .pipe($.sourcemaps.init())
+ .pipe(webpackStream(webpackConfig, webpack2))
+ .pipe($.if(PRODUCTION, $.uglify()
+ .on('error', e => { console.log(e); })
+ ))
+ .pipe($.if(!PRODUCTION, $.sourcemaps.write()))
+ .pipe(gulp.dest(config.paths.dist + '/assets/js'));
+}
+
+// Copy images to the "dist" folder
+// In production, the images are compressed
+function images() {
+ return gulp.src('src/assets/img/**/*')
+ .pipe($.if(PRODUCTION, $.imagemin([
+ $.imagemin.jpegtran({ progressive: true }),
+ ])))
+ .pipe(gulp.dest(config.paths.dist + '/assets/img'));
+}
+
+// Start a server with BrowserSync to preview the site in
+function server(done) {
+ browser.init({
+ server: config.paths.dist, port: config.dev.port
+ }, done);
+}
+
+// Reload the browser with BrowserSync
+function reload(done) {
+ browser.reload();
+ done();
+}
+
+// Watch for changes to static assets, pages, Sass, and JavaScript
+function watch() {
+ gulp.watch(config.paths.assets, copy);
+ gulp.watch('src/pages/**/*.html').on('all', gulp.series(pages, browser.reload));
+ gulp.watch('src/{layouts,partials}/**/*.html').on('all', gulp.series(resetPages, pages, browser.reload));
+ gulp.watch('src/data/**/*.{js,json,yml}').on('all', gulp.series(resetPages, pages, browser.reload));
+ gulp.watch('src/helpers/**/*.js').on('all', gulp.series(resetPages, pages, browser.reload));
+ gulp.watch('src/assets/scss/**/*.scss').on('all', sass);
+ gulp.watch('src/assets/js/**/*.js').on('all', gulp.series(javascript, browser.reload));
+ gulp.watch('src/assets/img/**/*').on('all', gulp.series(images, browser.reload));
+}
diff --git a/components/package-template.json b/components/package-template.json
new file mode 100644
--- /dev/null
+++ b/components/package-template.json
@@ -0,0 +1,47 @@
+{
+ "main": "gulpfile.babel.js",
+ "scripts": {
+ "start": "gulp",
+ "build": "gulp build --production"
+ },
+ "dependencies": {
+ "foundation-sites": "~6.4.1",
+ "jquery": ">=3.0.0",
+ "what-input": "^4.1.3",
+ "motion-ui": "^2.0.3"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.1.2",
+ "@babel/preset-env": "^7.1.0",
+ "@babel/register": "^7.0.0",
+ "autoprefixer": "^9.1.5",
+ "babel-loader": "^8.0.4",
+ "browser-sync": "^2.10.0",
+ "gulp": "^4.0.0",
+ "gulp-babel": "^8.0.0",
+ "gulp-clean-css": "^3.3.1",
+ "gulp-cli": "^2.0.1",
+ "gulp-concat": "^2.5.2",
+ "gulp-extname": "^0.2.0",
+ "gulp-if": "^2.0.0",
+ "gulp-imagemin": "^4.1.0",
+ "gulp-load-plugins": "^1.1.0",
+ "gulp-postcss": "^8.0.0",
+ "gulp-sass": "^4.0.1",
+ "gulp-sourcemaps": "^2.6.4",
+ "gulp-uglify": "^3.0.1",
+ "js-yaml": "^3.4.6",
+ "panini": "^1.3.0",
+ "rimraf": "^2.4.3",
+ "style-sherpa": "^1.0.0",
+ "uncss": "^0.16.2",
+ "vinyl-named": "^1.1.0",
+ "webpack": "^4.20.2",
+ "webpack-stream": "^5.1.1",
+ "yargs": "^12.0.2"
+ },
+ "bugs": {
+ "url": "https://devcentral.nasqueron.org/"
+ },
+ "private": true
+}
diff --git a/config.yml b/config.yml
new file mode 100644
--- /dev/null
+++ b/config.yml
@@ -0,0 +1,63 @@
+# -------------------------------------------------------------
+# Static website configuration
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# Project: Nasqueron
+# Site: Upsection testing site
+# -------------------------------------------------------------
+
+# -------------------------------------------------------------
+# Metadata to generate package.json
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+package:
+ name: nasqueron-upsection-test
+ version: 0.1.0
+ description: Allow to test if we can build a static site
+
+ repository_name: upsection
+
+# -------------------------------------------------------------
+# Configuration for Gulp build tasks
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+paths:
+ dist: "dist"
+
+ # Paths to static assets that aren't images, CSS, or JavaScript
+ assets:
+ - "src/assets/**/*"
+ - "!src/assets/{img,js,scss}{,/**/*}"
+
+ # Paths to Sass libraries, which can then be loaded with @import
+ sass:
+ - "node_modules/foundation-sites/scss"
+ - "node_modules/motion-ui/src"
+
+ # Paths to JavaScript entry points for webpack to bundle modules
+ entries:
+ - "src/assets/js/app.js"
+
+tasks:
+
+ # Make sure CSS is compatible with browsers guards prefixes like -moz-
+ autoprefixer:
+ browsers:
+ - last 2 versions
+ - ie >= 9
+ - ios >= 12
+ - android >= 7.0
+
+ # Remove unused CSS declarations
+ uncss:
+ html:
+ - "src/**/*.html"
+ ignore:
+ - "!!js/regexp .foundation-mq"
+ - '!!js/regexp ^\.is-.*'
+
+# -------------------------------------------------------------
+# Configuration for development server
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+dev:
+ port: 8000
diff --git a/src/upsection.py b/src/upsection.py
new file mode 100755
--- /dev/null
+++ b/src/upsection.py
@@ -0,0 +1,119 @@
+#!/usr/bin/env python3
+
+import json
+import sys
+import yaml
+
+
+# -------------------------------------------------------------
+# Available builders configuration
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+PACKAGE_TEMPLATE = "/usr/local/share/upsection/package-template.json"
+
+
+def get_builders():
+ return {
+ ".browserslistrc": build_browserslistrc,
+ "package.json": build_package,
+ }
+
+
+# -------------------------------------------------------------
+# Build package.json
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+def build_package():
+ with open(PACKAGE_TEMPLATE) as fd:
+ package_template = json.load(fd)
+
+ package = {
+ **package_template,
+ **get_package_config()
+ }
+
+ return json.dumps(package)
+
+
+def get_package_config():
+ package_metadata = app['config']['package']
+
+ repository = get_repository(package_metadata['repository_name'])
+ del package_metadata['repository_name']
+
+ return {
+ **package_metadata,
+ "repository": repository,
+ }
+
+
+# -------------------------------------------------------------
+# Build .browserslistrc
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+def build_browserslistrc():
+ return "# Browsers that we support\n" + get_browsers_list() + "\n"
+
+
+def get_browsers_list():
+ return "\n".join(app['config']['tasks']['autoprefixer']['browsers'])
+
+
+def get_repository(name):
+ return {
+ "type": "git",
+ "url": "https://devcentral.nasqueron.org/source/" + name + ".git"
+ }
+
+
+# -------------------------------------------------------------
+# Application entry point
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+def initialize_app():
+ with open('config.yml') as fd:
+ config = yaml.safe_load(fd)
+
+ return {
+ 'config': config,
+ 'builders': get_builders(),
+ }
+
+
+def run(args):
+ if len(args) == 1:
+ build_all()
+ return
+
+ build_some(args[1:])
+
+
+def build_all():
+ for file_to_build, builder in app['builders'].items():
+ with open(file_to_build, 'w') as fd:
+ fd.write(builder())
+
+
+def build_some(files_to_build):
+ for file_to_build in files_to_build:
+ build(file_to_build)
+
+
+def build(file_to_build):
+ try:
+ content = app['builders'][file_to_build]()
+ except KeyError:
+ print("Don't know how to generate", file_to_build, file=sys.stderr)
+ return
+
+ with open(file_to_build, 'w') as fd:
+ fd.write(content)
+
+
+if __name__ == "__main__":
+ app = initialize_app()
+ run(sys.argv)
diff --git a/template/.gitignore b/template/.gitignore
new file mode 100644
--- /dev/null
+++ b/template/.gitignore
@@ -0,0 +1,8 @@
+# Node
+node_modules/
+package-lock.json
+
+# Autogenerated by upsection
+package.json
+.browserslistrc
+gulpfile.babel.js
diff --git a/template/Makefile b/template/Makefile
new file mode 100644
--- /dev/null
+++ b/template/Makefile
@@ -0,0 +1,35 @@
+CP=cp
+RM=rm -rf
+SOURCE=/usr/local/share/upsection
+
+# -------------------------------------------------------------
+# Main targets
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ALL_TARGETS=package.json .browserslistrc gulpfile.babel.js node_modules
+CLEAN_TARGETS=dist/ ${ALL_TARGETS}
+
+all: ${ALL_TARGETS}
+ npm run build
+
+dev: ${ALL_TARGETS}
+ npm start
+
+clean:
+ ${RM} ${CLEAN_TARGETS}
+
+# -------------------------------------------------------------
+# Individual targets
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+package.json:
+ upsection package.json
+
+.browserslistrc:
+ upsection .browserslistrc
+
+node_modules: package.json
+ npm install
+
+gulpfile.babel.js:
+ ${CP} ${SOURCE}/gulpfile.js gulpfile.babel.js
diff --git a/template/config.yml.in b/template/config.yml.in
new file mode 100644
--- /dev/null
+++ b/template/config.yml.in
@@ -0,0 +1,63 @@
+# -------------------------------------------------------------
+# Static website configuration
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# Project: Nasqueron
+# Site: https://%%SUBDOMAIN%%.nasqueron.org
+# -------------------------------------------------------------
+
+# -------------------------------------------------------------
+# Metadata to generate package.json
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+package:
+ name: nasqueron-%%SUBDOMAIN%%-www
+ version: 0.1.0
+ description: Build %%SUBDOMAIN%% site
+
+ repository_name: %%SUBDOMAIN%%-www
+
+# -------------------------------------------------------------
+# Configuration for Gulp build tasks
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+paths:
+ dist: "dist"
+
+ # Paths to static assets that aren't images, CSS, or JavaScript
+ assets:
+ - "src/assets/**/*"
+ - "!src/assets/{img,js,scss}{,/**/*}"
+
+ # Paths to Sass libraries, which can then be loaded with @import
+ sass:
+ - "node_modules/foundation-sites/scss"
+ - "node_modules/motion-ui/src"
+
+ # Paths to JavaScript entry points for webpack to bundle modules
+ entries:
+ - "src/assets/js/app.js"
+
+tasks:
+
+ # Make sure CSS is compatible with browsers guards prefixes like -moz-
+ autoprefixer:
+ browsers:
+ - last 2 versions
+ - ie >= 9
+ - ios >= 12
+ - android >= 7.0
+
+ # Remove unused CSS declarations
+ uncss:
+ html:
+ - "src/**/*.html"
+ ignore:
+ - "!!js/regexp .foundation-mq"
+ - '!!js/regexp ^\.is-.*'
+
+# -------------------------------------------------------------
+# Configuration for development server
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+dev:
+ port: 8000
diff --git a/template/src/assets/img/.gitkeep b/template/src/assets/img/.gitkeep
new file mode 100644
diff --git a/template/src/assets/js/app.js b/template/src/assets/js/app.js
new file mode 100644
--- /dev/null
+++ b/template/src/assets/js/app.js
@@ -0,0 +1,17 @@
+import $ from 'jquery';
+import 'what-input';
+
+// Foundation JS relies on a global variable. In ES6, all imports are hoisted
+// to the top of the file so if we used `import` to import Foundation,
+// it would execute earlier than we have assigned the global variable.
+// This is why we have to use CommonJS require() here since it doesn't
+// have the hoisting behavior.
+window.jQuery = $;
+require('foundation-sites');
+
+// If you want to pick and choose which modules to include, comment out the above and uncomment
+// the line below
+//import './lib/foundation-explicit-pieces';
+
+
+$(document).foundation();
diff --git a/template/src/assets/js/lib/foundation-explicit-pieces.js b/template/src/assets/js/lib/foundation-explicit-pieces.js
new file mode 100644
--- /dev/null
+++ b/template/src/assets/js/lib/foundation-explicit-pieces.js
@@ -0,0 +1,83 @@
+import $ from 'jquery';
+
+import { Foundation } from 'foundation-sites/js/foundation.core';
+import * as CoreUtils from 'foundation-sites/js/foundation.core.utils';
+import { Box } from 'foundation-sites/js/foundation.util.box'
+import { onImagesLoaded } from 'foundation-sites/js/foundation.util.imageLoader';
+import { Keyboard } from 'foundation-sites/js/foundation.util.keyboard';
+import { MediaQuery } from 'foundation-sites/js/foundation.util.mediaQuery';
+import { Motion, Move } from 'foundation-sites/js/foundation.util.motion';
+import { Nest } from 'foundation-sites/js/foundation.util.nest';
+import { Timer } from 'foundation-sites/js/foundation.util.timer';
+import { Touch } from 'foundation-sites/js/foundation.util.touch';
+import { Triggers } from 'foundation-sites/js/foundation.util.triggers';
+import { Abide } from 'foundation-sites/js/foundation.abide';
+import { Accordion } from 'foundation-sites/js/foundation.accordion';
+import { AccordionMenu } from 'foundation-sites/js/foundation.accordionMenu';
+import { Drilldown } from 'foundation-sites/js/foundation.drilldown';
+import { Dropdown } from 'foundation-sites/js/foundation.dropdown';
+import { DropdownMenu } from 'foundation-sites/js/foundation.dropdownMenu';
+import { Equalizer } from 'foundation-sites/js/foundation.equalizer';
+import { Interchange } from 'foundation-sites/js/foundation.interchange';
+import { Magellan } from 'foundation-sites/js/foundation.magellan';
+import { OffCanvas } from 'foundation-sites/js/foundation.offcanvas';
+import { Orbit } from 'foundation-sites/js/foundation.orbit';
+import { ResponsiveMenu } from 'foundation-sites/js/foundation.responsiveMenu';
+import { ResponsiveToggle } from 'foundation-sites/js/foundation.responsiveToggle';
+import { Reveal } from 'foundation-sites/js/foundation.reveal';
+import { Slider } from 'foundation-sites/js/foundation.slider';
+import { SmoothScroll } from 'foundation-sites/js/foundation.smoothScroll';
+import { Sticky } from 'foundation-sites/js/foundation.sticky';
+import { Tabs } from 'foundation-sites/js/foundation.tabs';
+import { Toggler } from 'foundation-sites/js/foundation.toggler';
+import { Tooltip } from 'foundation-sites/js/foundation.tooltip';
+import { ResponsiveAccordionTabs } from 'foundation-sites/js/foundation.responsiveAccordionTabs';
+
+Foundation.addToJquery($);
+
+// Add Foundation Utils to Foundation global namespace for backwards
+// compatibility.
+Foundation.rtl = CoreUtils.rtl;
+Foundation.GetYoDigits = CoreUtils.GetYoDigits;
+Foundation.transitionend = CoreUtils.transitionend;
+Foundation.RegExpEscape = CoreUtils.RegExpEscape;
+Foundation.onLoad = CoreUtils.onLoad;
+
+Foundation.Box = Box;
+Foundation.onImagesLoaded = onImagesLoaded;
+Foundation.Keyboard = Keyboard;
+Foundation.MediaQuery = MediaQuery;
+Foundation.Motion = Motion;
+Foundation.Move = Move;
+Foundation.Nest = Nest;
+Foundation.Timer = Timer;
+
+// Touch and Triggers previously were almost purely sede effect driven,
+// so no need to add it to Foundation, just init them.
+Touch.init($);
+Triggers.init($, Foundation);
+MediaQuery._init();
+
+Foundation.plugin(Abide, 'Abide');
+Foundation.plugin(Accordion, 'Accordion');
+Foundation.plugin(AccordionMenu, 'AccordionMenu');
+Foundation.plugin(Drilldown, 'Drilldown');
+Foundation.plugin(Dropdown, 'Dropdown');
+Foundation.plugin(DropdownMenu, 'DropdownMenu');
+Foundation.plugin(Equalizer, 'Equalizer');
+Foundation.plugin(Interchange, 'Interchange');
+Foundation.plugin(Magellan, 'Magellan');
+Foundation.plugin(OffCanvas, 'OffCanvas');
+Foundation.plugin(Orbit, 'Orbit');
+Foundation.plugin(ResponsiveMenu, 'ResponsiveMenu');
+Foundation.plugin(ResponsiveToggle, 'ResponsiveToggle');
+Foundation.plugin(Reveal, 'Reveal');
+Foundation.plugin(Slider, 'Slider');
+Foundation.plugin(SmoothScroll, 'SmoothScroll');
+Foundation.plugin(Sticky, 'Sticky');
+Foundation.plugin(Tabs, 'Tabs');
+Foundation.plugin(Toggler, 'Toggler');
+Foundation.plugin(Tooltip, 'Tooltip');
+Foundation.plugin(ResponsiveAccordionTabs, 'ResponsiveAccordionTabs');
+
+export { Foundation };
diff --git a/template/src/assets/scss/_settings.scss b/template/src/assets/scss/_settings.scss
new file mode 100644
--- /dev/null
+++ b/template/src/assets/scss/_settings.scss
@@ -0,0 +1,895 @@
+// Foundation for Sites Settings
+// -----------------------------
+//
+// Table of Contents:
+//
+// 1. Global
+// 2. Breakpoints
+// 3. The Grid
+// 4. Base Typography
+// 5. Typography Helpers
+// 6. Abide
+// 7. Accordion
+// 8. Accordion Menu
+// 9. Badge
+// 10. Breadcrumbs
+// 11. Button
+// 12. Button Group
+// 13. Callout
+// 14. Card
+// 15. Close Button
+// 16. Drilldown
+// 17. Dropdown
+// 18. Dropdown Menu
+// 19. Flexbox Utilities
+// 20. Forms
+// 21. Label
+// 22. Media Object
+// 23. Menu
+// 24. Meter
+// 25. Off-canvas
+// 26. Orbit
+// 27. Pagination
+// 28. Progress Bar
+// 29. Prototype Arrow
+// 30. Prototype Border-Box
+// 31. Prototype Border-None
+// 32. Prototype Bordered
+// 33. Prototype Display
+// 34. Prototype Font-Styling
+// 35. Prototype List-Style-Type
+// 36. Prototype Overflow
+// 37. Prototype Position
+// 38. Prototype Rounded
+// 39. Prototype Separator
+// 40. Prototype Shadow
+// 41. Prototype Sizing
+// 42. Prototype Spacing
+// 43. Prototype Text-Decoration
+// 44. Prototype Text-Transformation
+// 45. Prototype Text-Utilities
+// 46. Responsive Embed
+// 47. Reveal
+// 48. Slider
+// 49. Switch
+// 50. Table
+// 51. Tabs
+// 52. Thumbnail
+// 53. Title Bar
+// 54. Tooltip
+// 55. Top Bar
+// 56. Xy Grid
+
+@import 'util/util';
+
+// 1. Global
+// ---------
+
+$global-font-size: 100%;
+$global-width: rem-calc(1200);
+$global-lineheight: 1.5;
+$foundation-palette: (
+ primary: #1779ba,
+ secondary: #767676,
+ success: #3adb76,
+ warning: #ffae00,
+ alert: #cc4b37,
+);
+$light-gray: #e6e6e6;
+$medium-gray: #cacaca;
+$dark-gray: #8a8a8a;
+$black: #0a0a0a;
+$white: #fefefe;
+$body-background: $white;
+$body-font-color: $black;
+$body-font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;
+$body-antialiased: true;
+$global-margin: 1rem;
+$global-padding: 1rem;
+$global-position: 1rem;
+$global-weight-normal: normal;
+$global-weight-bold: bold;
+$global-radius: 0;
+$global-menu-padding: 0.7rem 1rem;
+$global-menu-nested-margin: 1rem;
+$global-text-direction: ltr;
+$global-flexbox: true;
+$global-prototype-breakpoints: false;
+$global-button-cursor: auto;
+$global-color-pick-contrast-tolerance: 0;
+$print-transparent-backgrounds: true;
+$print-hrefs: true;
+
+@include add-foundation-colors;
+
+// 2. Breakpoints
+// --------------
+
+$breakpoints: (
+ small: 0,
+ medium: 640px,
+ large: 1024px,
+ xlarge: 1200px,
+ xxlarge: 1440px,
+);
+$breakpoints-hidpi: (
+ hidpi-1: 1,
+ hidpi-1-5: 1.5,
+ hidpi-2: 2,
+ retina: 2,
+ hidpi-3: 3
+);
+$print-breakpoint: large;
+$breakpoint-classes: (small medium large);
+
+// 3. The Grid
+// -----------
+
+$grid-row-width: $global-width;
+$grid-column-count: 12;
+$grid-column-gutter: (
+ small: 20px,
+ medium: 30px,
+);
+$grid-column-align-edge: true;
+$grid-column-alias: 'columns';
+$block-grid-max: 8;
+
+// 4. Base Typography
+// ------------------
+
+$header-font-family: $body-font-family;
+$header-font-weight: $global-weight-normal;
+$header-font-style: normal;
+$font-family-monospace: Consolas, 'Liberation Mono', Courier, monospace;
+$header-color: inherit;
+$header-lineheight: 1.4;
+$header-margin-bottom: 0.5rem;
+$header-styles: (
+ small: (
+ 'h1': ('font-size': 24),
+ 'h2': ('font-size': 20),
+ 'h3': ('font-size': 19),
+ 'h4': ('font-size': 18),
+ 'h5': ('font-size': 17),
+ 'h6': ('font-size': 16),
+ ),
+ medium: (
+ 'h1': ('font-size': 48),
+ 'h2': ('font-size': 40),
+ 'h3': ('font-size': 31),
+ 'h4': ('font-size': 25),
+ 'h5': ('font-size': 20),
+ 'h6': ('font-size': 16),
+ ),
+);
+$header-text-rendering: optimizeLegibility;
+$small-font-size: 80%;
+$header-small-font-color: $medium-gray;
+$paragraph-lineheight: 1.6;
+$paragraph-margin-bottom: 1rem;
+$paragraph-text-rendering: optimizeLegibility;
+$enable-code-inline: true;
+$anchor-color: $primary-color;
+$anchor-color-hover: scale-color($anchor-color, $lightness: -14%);
+$anchor-text-decoration: none;
+$anchor-text-decoration-hover: none;
+$hr-width: $global-width;
+$hr-border: 1px solid $medium-gray;
+$hr-margin: rem-calc(20) auto;
+$list-lineheight: $paragraph-lineheight;
+$list-margin-bottom: $paragraph-margin-bottom;
+$list-style-type: disc;
+$list-style-position: outside;
+$list-side-margin: 1.25rem;
+$list-nested-side-margin: 1.25rem;
+$defnlist-margin-bottom: 1rem;
+$defnlist-term-weight: $global-weight-bold;
+$defnlist-term-margin-bottom: 0.3rem;
+$blockquote-color: $dark-gray;
+$blockquote-padding: rem-calc(9 20 0 19);
+$blockquote-border: 1px solid $medium-gray;
+$enable-cite-block: true;
+$keystroke-font: $font-family-monospace;
+$keystroke-color: $black;
+$keystroke-background: $light-gray;
+$keystroke-padding: rem-calc(2 4 0);
+$keystroke-radius: $global-radius;
+$abbr-underline: 1px dotted $black;
+
+// 5. Typography Helpers
+// ---------------------
+
+$lead-font-size: $global-font-size * 1.25;
+$lead-lineheight: 1.6;
+$subheader-lineheight: 1.4;
+$subheader-color: $dark-gray;
+$subheader-font-weight: $global-weight-normal;
+$subheader-margin-top: 0.2rem;
+$subheader-margin-bottom: 0.5rem;
+$stat-font-size: 2.5rem;
+$cite-color: $dark-gray;
+$cite-font-size: rem-calc(13);
+$cite-pseudo-content: '\2014 \0020';
+$code-color: $black;
+$code-font-family: $font-family-monospace;
+$code-font-weight: $global-weight-normal;
+$code-background: $light-gray;
+$code-border: 1px solid $medium-gray;
+$code-padding: rem-calc(2 5 1);
+$code-block-padding: 1rem;
+$code-block-margin-bottom: 1.5rem;
+
+// 6. Abide
+// --------
+
+$abide-inputs: true;
+$abide-labels: true;
+$input-background-invalid: get-color(alert);
+$form-label-color-invalid: get-color(alert);
+$input-error-color: get-color(alert);
+$input-error-font-size: rem-calc(12);
+$input-error-font-weight: $global-weight-bold;
+
+// 7. Accordion
+// ------------
+
+$accordion-background: $white;
+$accordion-plusminus: true;
+$accordion-plus-content: '\002B';
+$accordion-minus-content: '\2013';
+$accordion-title-font-size: rem-calc(12);
+$accordion-item-color: $primary-color;
+$accordion-item-background-hover: $light-gray;
+$accordion-item-padding: 1.25rem 1rem;
+$accordion-content-background: $white;
+$accordion-content-border: 1px solid $light-gray;
+$accordion-content-color: $body-font-color;
+$accordion-content-padding: 1rem;
+
+// 8. Accordion Menu
+// -----------------
+
+$accordionmenu-padding: $global-menu-padding;
+$accordionmenu-nested-margin: $global-menu-nested-margin;
+$accordionmenu-submenu-padding: $accordionmenu-padding;
+$accordionmenu-arrows: true;
+$accordionmenu-arrow-color: $primary-color;
+$accordionmenu-item-background: null;
+$accordionmenu-border: null;
+$accordionmenu-submenu-toggle-background: null;
+$accordion-submenu-toggle-border: $accordionmenu-border;
+$accordionmenu-submenu-toggle-width: 40px;
+$accordionmenu-submenu-toggle-height: $accordionmenu-submenu-toggle-width;
+$accordionmenu-arrow-size: 6px;
+
+// 9. Badge
+// --------
+
+$badge-background: $primary-color;
+$badge-color: $white;
+$badge-color-alt: $black;
+$badge-palette: $foundation-palette;
+$badge-padding: 0.3em;
+$badge-minwidth: 2.1em;
+$badge-font-size: 0.6rem;
+
+// 10. Breadcrumbs
+// ---------------
+
+$breadcrumbs-margin: 0 0 $global-margin 0;
+$breadcrumbs-item-font-size: rem-calc(11);
+$breadcrumbs-item-color: $primary-color;
+$breadcrumbs-item-color-current: $black;
+$breadcrumbs-item-color-disabled: $medium-gray;
+$breadcrumbs-item-margin: 0.75rem;
+$breadcrumbs-item-uppercase: true;
+$breadcrumbs-item-separator: true;
+$breadcrumbs-item-separator-item: '/';
+$breadcrumbs-item-separator-item-rtl: '\\';
+$breadcrumbs-item-separator-color: $medium-gray;
+
+// 11. Button
+// ----------
+
+$button-font-family: inherit;
+$button-font-weight: null;
+$button-padding: 0.85em 1em;
+$button-margin: 0 0 $global-margin 0;
+$button-fill: solid;
+$button-background: $primary-color;
+$button-background-hover: scale-color($button-background, $lightness: -15%);
+$button-color: $white;
+$button-color-alt: $black;
+$button-radius: $global-radius;
+$button-border: 1px solid transparent;
+$button-hollow-border-width: 1px;
+$button-sizes: (
+ tiny: 0.6rem,
+ small: 0.75rem,
+ default: 0.9rem,
+ large: 1.25rem,
+);
+$button-palette: $foundation-palette;
+$button-opacity-disabled: 0.25;
+$button-background-hover-lightness: -20%;
+$button-hollow-hover-lightness: -50%;
+$button-transition: background-color 0.25s ease-out, color 0.25s ease-out;
+$button-responsive-expanded: false;
+
+// 12. Button Group
+// ----------------
+
+$buttongroup-margin: 1rem;
+$buttongroup-spacing: 1px;
+$buttongroup-child-selector: '.button';
+$buttongroup-expand-max: 6;
+$buttongroup-radius-on-each: true;
+
+// 13. Callout
+// -----------
+
+$callout-background: $white;
+$callout-background-fade: 85%;
+$callout-border: 1px solid rgba($black, 0.25);
+$callout-margin: 0 0 1rem 0;
+$callout-sizes: (
+ small: 0.5rem,
+ default: 1rem,
+ large: 3rem,
+);
+$callout-font-color: $body-font-color;
+$callout-font-color-alt: $body-background;
+$callout-radius: $global-radius;
+$callout-link-tint: 30%;
+
+// 14. Card
+// --------
+
+$card-background: $white;
+$card-font-color: $body-font-color;
+$card-divider-background: $light-gray;
+$card-border: 1px solid $light-gray;
+$card-shadow: none;
+$card-border-radius: $global-radius;
+$card-padding: $global-padding;
+$card-margin-bottom: $global-margin;
+
+// 15. Close Button
+// ----------------
+
+$closebutton-position: right top;
+$closebutton-z-index: 10;
+$closebutton-default-size: medium;
+$closebutton-offset-horizontal: (
+ small: 0.66rem,
+ medium: 1rem,
+);
+$closebutton-offset-vertical: (
+ small: 0.33em,
+ medium: 0.5rem,
+);
+$closebutton-size: (
+ small: 1.5em,
+ medium: 2em,
+);
+$closebutton-lineheight: 1;
+$closebutton-color: $dark-gray;
+$closebutton-color-hover: $black;
+
+// 16. Drilldown
+// -------------
+
+$drilldown-transition: transform 0.15s linear;
+$drilldown-arrows: true;
+$drilldown-padding: $global-menu-padding;
+$drilldown-nested-margin: 0;
+$drilldown-background: $white;
+$drilldown-submenu-padding: $drilldown-padding;
+$drilldown-submenu-background: $white;
+$drilldown-arrow-color: $primary-color;
+$drilldown-arrow-size: 6px;
+
+// 17. Dropdown
+// ------------
+
+$dropdown-padding: 1rem;
+$dropdown-background: $body-background;
+$dropdown-border: 1px solid $medium-gray;
+$dropdown-font-size: 1rem;
+$dropdown-width: 300px;
+$dropdown-radius: $global-radius;
+$dropdown-sizes: (
+ tiny: 100px,
+ small: 200px,
+ large: 400px,
+);
+
+// 18. Dropdown Menu
+// -----------------
+
+$dropdownmenu-arrows: true;
+$dropdownmenu-arrow-color: $anchor-color;
+$dropdownmenu-arrow-size: 6px;
+$dropdownmenu-arrow-padding: 1.5rem;
+$dropdownmenu-min-width: 200px;
+$dropdownmenu-background: null;
+$dropdownmenu-submenu-background: $white;
+$dropdownmenu-padding: $global-menu-padding;
+$dropdownmenu-nested-margin: 0;
+$dropdownmenu-submenu-padding: $dropdownmenu-padding;
+$dropdownmenu-border: 1px solid $medium-gray;
+$dropdown-menu-item-color-active: get-color(primary);
+$dropdown-menu-item-background-active: transparent;
+
+// 19. Flexbox Utilities
+// ---------------------
+
+$flex-source-ordering-count: 6;
+$flexbox-responsive-breakpoints: true;
+
+// 20. Forms
+// ---------
+
+$fieldset-border: 1px solid $medium-gray;
+$fieldset-padding: rem-calc(20);
+$fieldset-margin: rem-calc(18 0);
+$legend-padding: rem-calc(0 3);
+$form-spacing: rem-calc(16);
+$helptext-color: $black;
+$helptext-font-size: rem-calc(13);
+$helptext-font-style: italic;
+$input-prefix-color: $black;
+$input-prefix-background: $light-gray;
+$input-prefix-border: 1px solid $medium-gray;
+$input-prefix-padding: 1rem;
+$form-label-color: $black;
+$form-label-font-size: rem-calc(14);
+$form-label-font-weight: $global-weight-normal;
+$form-label-line-height: 1.8;
+$select-background: $white;
+$select-triangle-color: $dark-gray;
+$select-radius: $global-radius;
+$input-color: $black;
+$input-placeholder-color: $medium-gray;
+$input-font-family: inherit;
+$input-font-size: rem-calc(16);
+$input-font-weight: $global-weight-normal;
+$input-line-height: $global-lineheight;
+$input-background: $white;
+$input-background-focus: $white;
+$input-background-disabled: $light-gray;
+$input-border: 1px solid $medium-gray;
+$input-border-focus: 1px solid $dark-gray;
+$input-padding: $form-spacing / 2;
+$input-shadow: inset 0 1px 2px rgba($black, 0.1);
+$input-shadow-focus: 0 0 5px $medium-gray;
+$input-cursor-disabled: not-allowed;
+$input-transition: box-shadow 0.5s, border-color 0.25s ease-in-out;
+$input-number-spinners: true;
+$input-radius: $global-radius;
+$form-button-radius: $global-radius;
+
+// 21. Label
+// ---------
+
+$label-background: $primary-color;
+$label-color: $white;
+$label-color-alt: $black;
+$label-palette: $foundation-palette;
+$label-font-size: 0.8rem;
+$label-padding: 0.33333rem 0.5rem;
+$label-radius: $global-radius;
+
+// 22. Media Object
+// ----------------
+
+$mediaobject-margin-bottom: $global-margin;
+$mediaobject-section-padding: $global-padding;
+$mediaobject-image-width-stacked: 100%;
+
+// 23. Menu
+// --------
+
+$menu-margin: 0;
+$menu-nested-margin: $global-menu-nested-margin;
+$menu-items-padding: $global-menu-padding;
+$menu-simple-margin: 1rem;
+$menu-item-color-active: $white;
+$menu-item-color-alt-active: $black;
+$menu-item-background-active: get-color(primary);
+$menu-icon-spacing: 0.25rem;
+$menu-state-back-compat: true;
+$menu-centered-back-compat: true;
+$menu-icons-back-compat: true;
+
+// 24. Meter
+// ---------
+
+$meter-height: 1rem;
+$meter-radius: $global-radius;
+$meter-background: $medium-gray;
+$meter-fill-good: $success-color;
+$meter-fill-medium: $warning-color;
+$meter-fill-bad: $alert-color;
+
+// 25. Off-canvas
+// --------------
+
+$offcanvas-sizes: (
+ small: 250px,
+);
+$offcanvas-vertical-sizes: (
+ small: 250px,
+);
+$offcanvas-background: $light-gray;
+$offcanvas-shadow: 0 0 10px rgba($black, 0.7);
+$offcanvas-inner-shadow-size: 20px;
+$offcanvas-inner-shadow-color: rgba($black, 0.25);
+$offcanvas-overlay-zindex: 11;
+$offcanvas-push-zindex: 12;
+$offcanvas-overlap-zindex: 13;
+$offcanvas-reveal-zindex: 12;
+$offcanvas-transition-length: 0.5s;
+$offcanvas-transition-timing: ease;
+$offcanvas-fixed-reveal: true;
+$offcanvas-exit-background: rgba($white, 0.25);
+$maincontent-class: 'off-canvas-content';
+
+// 26. Orbit
+// ---------
+
+$orbit-bullet-background: $medium-gray;
+$orbit-bullet-background-active: $dark-gray;
+$orbit-bullet-diameter: 1.2rem;
+$orbit-bullet-margin: 0.1rem;
+$orbit-bullet-margin-top: 0.8rem;
+$orbit-bullet-margin-bottom: 0.8rem;
+$orbit-caption-background: rgba($black, 0.5);
+$orbit-caption-padding: 1rem;
+$orbit-control-background-hover: rgba($black, 0.5);
+$orbit-control-padding: 1rem;
+$orbit-control-zindex: 10;
+
+// 27. Pagination
+// --------------
+
+$pagination-font-size: rem-calc(14);
+$pagination-margin-bottom: $global-margin;
+$pagination-item-color: $black;
+$pagination-item-padding: rem-calc(3 10);
+$pagination-item-spacing: rem-calc(1);
+$pagination-radius: $global-radius;
+$pagination-item-background-hover: $light-gray;
+$pagination-item-background-current: $primary-color;
+$pagination-item-color-current: $white;
+$pagination-item-color-disabled: $medium-gray;
+$pagination-ellipsis-color: $black;
+$pagination-mobile-items: false;
+$pagination-mobile-current-item: false;
+$pagination-arrows: true;
+$pagination-arrow-previous: '\00AB';
+$pagination-arrow-next: '\00BB';
+
+// 28. Progress Bar
+// ----------------
+
+$progress-height: 1rem;
+$progress-background: $medium-gray;
+$progress-margin-bottom: $global-margin;
+$progress-meter-background: $primary-color;
+$progress-radius: $global-radius;
+
+// 29. Prototype Arrow
+// -------------------
+
+$prototype-arrow-directions: (
+ down,
+ up,
+ right,
+ left
+);
+$prototype-arrow-size: 0.4375rem;
+$prototype-arrow-color: $black;
+
+// 30. Prototype Border-Box
+// ------------------------
+
+$prototype-border-box-breakpoints: $global-prototype-breakpoints;
+
+// 31. Prototype Border-None
+// -------------------------
+
+$prototype-border-none-breakpoints: $global-prototype-breakpoints;
+
+// 32. Prototype Bordered
+// ----------------------
+
+$prototype-bordered-breakpoints: $global-prototype-breakpoints;
+$prototype-border-width: rem-calc(1);
+$prototype-border-type: solid;
+$prototype-border-color: $medium-gray;
+
+// 33. Prototype Display
+// ---------------------
+
+$prototype-display-breakpoints: $global-prototype-breakpoints;
+$prototype-display: (
+ inline,
+ inline-block,
+ block,
+ table,
+ table-cell
+);
+
+// 34. Prototype Font-Styling
+// --------------------------
+
+$prototype-font-breakpoints: $global-prototype-breakpoints;
+$prototype-wide-letter-spacing: rem-calc(4);
+$prototype-font-normal: $global-weight-normal;
+$prototype-font-bold: $global-weight-bold;
+
+// 35. Prototype List-Style-Type
+// -----------------------------
+
+$prototype-list-breakpoints: $global-prototype-breakpoints;
+$prototype-style-type-unordered: (
+ disc,
+ circle,
+ square
+);
+$prototype-style-type-ordered: (
+ decimal,
+ lower-alpha,
+ lower-latin,
+ lower-roman,
+ upper-alpha,
+ upper-latin,
+ upper-roman
+);
+
+// 36. Prototype Overflow
+// ----------------------
+
+$prototype-overflow-breakpoints: $global-prototype-breakpoints;
+$prototype-overflow: (
+ visible,
+ hidden,
+ scroll
+);
+
+// 37. Prototype Position
+// ----------------------
+
+$prototype-position-breakpoints: $global-prototype-breakpoints;
+$prototype-position: (
+ static,
+ relative,
+ absolute,
+ fixed
+);
+$prototype-position-z-index: 975;
+
+// 38. Prototype Rounded
+// ---------------------
+
+$prototype-rounded-breakpoints: $global-prototype-breakpoints;
+$prototype-border-radius: rem-calc(3);
+
+// 39. Prototype Separator
+// -----------------------
+
+$prototype-separator-breakpoints: $global-prototype-breakpoints;
+$prototype-separator-align: center;
+$prototype-separator-height: rem-calc(2);
+$prototype-separator-width: 3rem;
+$prototype-separator-background: $primary-color;
+$prototype-separator-margin-top: $global-margin;
+
+// 40. Prototype Shadow
+// --------------------
+
+$prototype-shadow-breakpoints: $global-prototype-breakpoints;
+$prototype-box-shadow: 0 2px 5px 0 rgba(0,0,0,.16),
+ 0 2px 10px 0 rgba(0,0,0,.12);
+
+// 41. Prototype Sizing
+// --------------------
+
+$prototype-sizing-breakpoints: $global-prototype-breakpoints;
+$prototype-sizing: (
+ width,
+ height
+);
+$prototype-sizes: (
+ 25: 25%,
+ 50: 50%,
+ 75: 75%,
+ 100: 100%
+);
+
+// 42. Prototype Spacing
+// ---------------------
+
+$prototype-spacing-breakpoints: $global-prototype-breakpoints;
+$prototype-spacers-count: 3;
+
+// 43. Prototype Text-Decoration
+// -----------------------------
+
+$prototype-decoration-breakpoints: $global-prototype-breakpoints;
+$prototype-text-decoration: (
+ overline,
+ underline,
+ line-through,
+);
+
+// 44. Prototype Text-Transformation
+// ---------------------------------
+
+$prototype-transformation-breakpoints: $global-prototype-breakpoints;
+$prototype-text-transformation: (
+ lowercase,
+ uppercase,
+ capitalize
+);
+
+// 45. Prototype Text-Utilities
+// ----------------------------
+
+$prototype-utilities-breakpoints: $global-prototype-breakpoints;
+$prototype-text-overflow: ellipsis;
+
+// 46. Responsive Embed
+// --------------------
+
+$responsive-embed-margin-bottom: rem-calc(16);
+$responsive-embed-ratios: (
+ default: 4 by 3,
+ widescreen: 16 by 9,
+);
+
+// 47. Reveal
+// ----------
+
+$reveal-background: $white;
+$reveal-width: 600px;
+$reveal-max-width: $global-width;
+$reveal-padding: $global-padding;
+$reveal-border: 1px solid $medium-gray;
+$reveal-radius: $global-radius;
+$reveal-zindex: 1005;
+$reveal-overlay-background: rgba($black, 0.45);
+
+// 48. Slider
+// ----------
+
+$slider-width-vertical: 0.5rem;
+$slider-transition: all 0.2s ease-in-out;
+$slider-height: 0.5rem;
+$slider-background: $light-gray;
+$slider-fill-background: $medium-gray;
+$slider-handle-height: 1.4rem;
+$slider-handle-width: 1.4rem;
+$slider-handle-background: $primary-color;
+$slider-opacity-disabled: 0.25;
+$slider-radius: $global-radius;
+
+// 49. Switch
+// ----------
+
+$switch-background: $medium-gray;
+$switch-background-active: $primary-color;
+$switch-height: 2rem;
+$switch-height-tiny: 1.5rem;
+$switch-height-small: 1.75rem;
+$switch-height-large: 2.5rem;
+$switch-radius: $global-radius;
+$switch-margin: $global-margin;
+$switch-paddle-background: $white;
+$switch-paddle-offset: 0.25rem;
+$switch-paddle-radius: $global-radius;
+$switch-paddle-transition: all 0.25s ease-out;
+$switch-opacity-disabled: .5;
+$switch-cursor-disabled: not-allowed;
+
+// 50. Table
+// ---------
+
+$table-background: $white;
+$table-color-scale: 5%;
+$table-border: 1px solid smart-scale($table-background, $table-color-scale);
+$table-padding: rem-calc(8 10 10);
+$table-hover-scale: 2%;
+$table-row-hover: darken($table-background, $table-hover-scale);
+$table-row-stripe-hover: darken($table-background, $table-color-scale + $table-hover-scale);
+$table-is-striped: true;
+$table-striped-background: smart-scale($table-background, $table-color-scale);
+$table-stripe: even;
+$table-head-background: smart-scale($table-background, $table-color-scale / 2);
+$table-head-row-hover: darken($table-head-background, $table-hover-scale);
+$table-foot-background: smart-scale($table-background, $table-color-scale);
+$table-foot-row-hover: darken($table-foot-background, $table-hover-scale);
+$table-head-font-color: $body-font-color;
+$table-foot-font-color: $body-font-color;
+$show-header-for-stacked: false;
+$table-stack-breakpoint: medium;
+
+// 51. Tabs
+// --------
+
+$tab-margin: 0;
+$tab-background: $white;
+$tab-color: $primary-color;
+$tab-background-active: $light-gray;
+$tab-active-color: $primary-color;
+$tab-item-font-size: rem-calc(12);
+$tab-item-background-hover: $white;
+$tab-item-padding: 1.25rem 1.5rem;
+$tab-content-background: $white;
+$tab-content-border: $light-gray;
+$tab-content-color: $body-font-color;
+$tab-content-padding: 1rem;
+
+// 52. Thumbnail
+// -------------
+
+$thumbnail-border: 4px solid $white;
+$thumbnail-margin-bottom: $global-margin;
+$thumbnail-shadow: 0 0 0 1px rgba($black, 0.2);
+$thumbnail-shadow-hover: 0 0 6px 1px rgba($primary-color, 0.5);
+$thumbnail-transition: box-shadow 200ms ease-out;
+$thumbnail-radius: $global-radius;
+
+// 53. Title Bar
+// -------------
+
+$titlebar-background: $black;
+$titlebar-color: $white;
+$titlebar-padding: 0.5rem;
+$titlebar-text-font-weight: bold;
+$titlebar-icon-color: $white;
+$titlebar-icon-color-hover: $medium-gray;
+$titlebar-icon-spacing: 0.25rem;
+
+// 54. Tooltip
+// -----------
+
+$has-tip-cursor: help;
+$has-tip-font-weight: $global-weight-bold;
+$has-tip-border-bottom: dotted 1px $dark-gray;
+$tooltip-background-color: $black;
+$tooltip-color: $white;
+$tooltip-padding: 0.75rem;
+$tooltip-max-width: 10rem;
+$tooltip-font-size: $small-font-size;
+$tooltip-pip-width: 0.75rem;
+$tooltip-pip-height: $tooltip-pip-width * 0.866;
+$tooltip-radius: $global-radius;
+
+// 55. Top Bar
+// -----------
+
+$topbar-padding: 0.5rem;
+$topbar-background: $light-gray;
+$topbar-submenu-background: $topbar-background;
+$topbar-title-spacing: 0.5rem 1rem 0.5rem 0;
+$topbar-input-width: 200px;
+$topbar-unstack-breakpoint: medium;
+
+// 56. Xy Grid
+// -----------
+
+$xy-grid: true;
+$grid-container: $global-width;
+$grid-columns: 12;
+$grid-margin-gutters: (
+ small: 20px,
+ medium: 30px
+);
+$grid-padding-gutters: $grid-margin-gutters;
+$grid-container-padding: $grid-padding-gutters;
+$grid-container-max: $global-width;
+$xy-block-grid-max: 8;
+
diff --git a/template/src/assets/scss/app.scss b/template/src/assets/scss/app.scss
new file mode 100644
--- /dev/null
+++ b/template/src/assets/scss/app.scss
@@ -0,0 +1,64 @@
+@charset 'utf-8';
+
+@import 'settings';
+@import 'foundation';
+@import 'motion-ui';
+
+// Global styles
+@include foundation-global-styles;
+@include foundation-forms;
+@include foundation-typography;
+
+// Grids (choose one)
+@include foundation-xy-grid-classes;
+// @include foundation-grid;
+// @include foundation-flex-grid;
+
+// Generic components
+@include foundation-button;
+@include foundation-button-group;
+@include foundation-close-button;
+@include foundation-label;
+@include foundation-progress-bar;
+@include foundation-slider;
+@include foundation-switch;
+@include foundation-table;
+// Basic components
+@include foundation-badge;
+@include foundation-breadcrumbs;
+@include foundation-callout;
+@include foundation-card;
+@include foundation-dropdown;
+@include foundation-pagination;
+@include foundation-tooltip;
+
+// Containers
+@include foundation-accordion;
+@include foundation-media-object;
+@include foundation-orbit;
+@include foundation-responsive-embed;
+@include foundation-tabs;
+@include foundation-thumbnail;
+// Menu-based containers
+@include foundation-menu;
+@include foundation-menu-icon;
+@include foundation-accordion-menu;
+@include foundation-drilldown-menu;
+@include foundation-dropdown-menu;
+
+// Layout components
+@include foundation-off-canvas;
+@include foundation-reveal;
+@include foundation-sticky;
+@include foundation-title-bar;
+@include foundation-top-bar;
+
+// Helpers
+@include foundation-float-classes;
+@include foundation-flex-classes;
+@include foundation-visibility-classes;
+// @include foundation-prototype-classes;
+
+// Motion UI
+@include motion-ui-transitions;
+@include motion-ui-animations;
diff --git a/template/src/assets/scss/components/.gitkeep b/template/src/assets/scss/components/.gitkeep
new file mode 100644
diff --git a/template/src/assets/scss/global/_typography.scss b/template/src/assets/scss/global/_typography.scss
new file mode 100644
diff --git a/template/src/data/.gitkeep b/template/src/data/.gitkeep
new file mode 100644
diff --git a/template/src/layouts/default.html b/template/src/layouts/default.html
new file mode 100644
--- /dev/null
+++ b/template/src/layouts/default.html
@@ -0,0 +1,19 @@
+{{!-- This is the base layout for your project, and will be used on every page unless specified. --}}
+
+<!doctype html>
+<html class="no-js" lang="en">
+ <head>
+ <meta charset="utf-8" />
+ <meta http-equiv="x-ua-compatible" content="ie=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>Foundation for Sites</title>
+ <link rel="stylesheet" href="{{root}}assets/css/app.css">
+ </head>
+<body>
+
+{{!-- Pages you create in the src/pages/ folder are inserted here when the flattened page is created. --}}
+{{> body}}
+
+<script src="{{root}}assets/js/app.js"></script>
+</body>
+</html>
diff --git a/template/src/pages/index.html b/template/src/pages/index.html
new file mode 100644
--- /dev/null
+++ b/template/src/pages/index.html
@@ -0,0 +1,153 @@
+ <div class="grid-container">
+ <div class="grid-x grid-padding-x">
+ <div class="large-12 cell">
+ <h1>Welcome to Foundation</h1>
+ </div>
+ </div>
+
+ <div class="grid-x grid-padding-x">
+ <div class="large-12 cell">
+ <div class="callout">
+ <h3>We&rsquo;re stoked you want to try Foundation! </h3>
+ <p>To get going, this file (index.html) includes some basic styles you can modify, play around with, or totally destroy to get going.</p>
+ <p>Once you've exhausted the fun in this document, you should check out:</p>
+ <div class="grid-x grid-padding-x">
+ <div class="large-4 medium-4 cell">
+ <p><a href="http://foundation.zurb.com/docs">Foundation Documentation</a><br />Everything you need to know about using the framework.</p>
+ </div>
+ <div class="large-4 medium-4 cell">
+ <p><a href="http://zurb.com/university/code-skills">Foundation Code Skills</a><br />These online courses offer you a chance to better understand how Foundation works and how you can master it to create awesome projects.</p>
+ </div>
+ <div class="large-4 medium-4 cell">
+ <p><a href="http://foundation.zurb.com/forum">Foundation Forum</a><br />Join the Foundation community to ask a question or show off your knowlege.</p>
+ </div>
+ </div>
+ <div class="grid-x grid-padding-x">
+ <div class="large-4 medium-4 medium-push-2 cell">
+ <p><a href="http://github.com/zurb/foundation">Foundation on Github</a><br />Latest code, issue reports, feature requests and more.</p>
+ </div>
+ <div class="large-4 medium-4 medium-pull-2 cell">
+ <p><a href="https://twitter.com/ZURBfoundation">@zurbfoundation</a><br />Ping us on Twitter if you have questions. When you build something with this we'd love to see it (and send you a totally boss sticker).</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="grid-x grid-padding-x">
+ <div class="large-8 medium-8 cell">
+ <h5>Here&rsquo;s your basic grid:</h5>
+ <!-- Grid Example -->
+
+ <div class="grid-x grid-padding-x">
+ <div class="large-12 cell">
+ <div class="primary callout">
+ <p><strong>This is a twelve cell section in a grid-x.</strong> Each of these includes a div.callout element so you can see where the cell are - it's not required at all for the grid.</p>
+ </div>
+ </div>
+ </div>
+ <div class="grid-x grid-padding-x">
+ <div class="large-6 medium-6 cell">
+ <div class="primary callout">
+ <p>Six cell</p>
+ </div>
+ </div>
+ <div class="large-6 medium-6 cell">
+ <div class="primary callout">
+ <p>Six cell</p>
+ </div>
+ </div>
+ </div>
+ <div class="grid-x grid-padding-x">
+ <div class="large-4 medium-4 small-4 cell">
+ <div class="primary callout">
+ <p>Four cell</p>
+ </div>
+ </div>
+ <div class="large-4 medium-4 small-4 cell">
+ <div class="primary callout">
+ <p>Four cell</p>
+ </div>
+ </div>
+ <div class="large-4 medium-4 small-4 cell">
+ <div class="primary callout">
+ <p>Four cell</p>
+ </div>
+ </div>
+ </div>
+
+ <hr />
+
+ <h5>We bet you&rsquo;ll need a form somewhere:</h5>
+ <form>
+ <div class="grid-x grid-padding-x">
+ <div class="large-12 cell">
+ <label>Input Label</label>
+ <input type="text" placeholder="large-12.cell" />
+ </div>
+ </div>
+ <div class="grid-x grid-padding-x">
+ <div class="large-4 medium-4 cell">
+ <label>Input Label</label>
+ <input type="text" placeholder="large-4.cell" />
+ </div>
+ <div class="large-4 medium-4 cell">
+ <label>Input Label</label>
+ <input type="text" placeholder="large-4.cell" />
+ </div>
+ <div class="large-4 medium-4 cell">
+ <div class="grid-x">
+ <label>Input Label</label>
+ <div class="input-group">
+ <input type="text" placeholder="small-9.cell" class="input-group-field" />
+ <span class="input-group-label">.com</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="grid-x grid-padding-x">
+ <div class="large-12 cell">
+ <label>Select Box</label>
+ <select>
+ <option value="husker">Husker</option>
+ <option value="starbuck">Starbuck</option>
+ <option value="hotdog">Hot Dog</option>
+ <option value="apollo">Apollo</option>
+ </select>
+ </div>
+ </div>
+ <div class="grid-x grid-padding-x">
+ <div class="large-6 medium-6 cell">
+ <label>Choose Your Favorite</label>
+ <input type="radio" name="pokemon" value="Red" id="pokemonRed"><label for="pokemonRed">Radio 1</label>
+ <input type="radio" name="pokemon" value="Blue" id="pokemonBlue"><label for="pokemonBlue">Radio 2</label>
+ </div>
+ <div class="large-6 medium-6 cell">
+ <label>Check these out</label>
+ <input id="checkbox1" type="checkbox"><label for="checkbox1">Checkbox 1</label>
+ <input id="checkbox2" type="checkbox"><label for="checkbox2">Checkbox 2</label>
+ </div>
+ </div>
+ <div class="grid-x grid-padding-x">
+ <div class="large-12 cell">
+ <label>Textarea Label</label>
+ <textarea placeholder="small-12.cell"></textarea>
+ </div>
+ </div>
+ </form>
+ </div>
+
+ <div class="large-4 medium-4 cell">
+ <h5>Try one of these buttons:</h5>
+ <p><a href="#" class="button">Simple Button</a><br/>
+ <a href="#" class="success button">Success Btn</a><br/>
+ <a href="#" class="alert button">Alert Btn</a><br/>
+ <a href="#" class="secondary button">Secondary Btn</a></p>
+ <div class="callout">
+ <h5>So many components, girl!</h5>
+ <p>A whole kitchen sink of goodies comes with Foundation. Check out the docs to see them all, along with details on making them your own.</p>
+ <a href="https://foundation.zurb.com/sites/docs/" class="small button">Go to Foundation Docs</a>
+ </div>
+ </div>
+ </div>
+ </div>
diff --git a/template/src/partials/.gitkeep b/template/src/partials/.gitkeep
new file mode 100644
diff --git a/template/src/styleguide/index.md b/template/src/styleguide/index.md
new file mode 100644
--- /dev/null
+++ b/template/src/styleguide/index.md
@@ -0,0 +1,355 @@
+# The Grid
+
+<p class="lead">Problem: You've got tons of content, each needing different sized cells, and don't know how to quick and easily get it all done. Solution: The awesome XY grid!</p>
+
+---
+
+## Overview
+
+The grid is built around two key elements: grid-x and cells. grid-container create a max-width and contain the grid, and cells create the final structure. Everything on your page that you don't give a specific structural style to should be within a grid-x or cell.
+
+---
+
+## Nesting
+
+In the Grid you can nest cells down as far as you'd like. Just embed grid-x inside cells and go from there. Each embedded grid-x can contain up to 12 cells.
+
+---
+
+## How to Use
+
+Using this framework is easy. Here's how your code will look when you use a series of `<div>` tags to create cells.
+
+```html
+<div class="grid-x">
+ <div class="small-6 medium-4 large-3 cell">...</div>
+ <div class="small-6 medium-8 large-9 cell">...</div>
+</div>
+```
+
+<div class="grid-x display">
+ <div class="small-12 large-4 cell">4</div>
+ <div class="small-12 large-4 cell">4</div>
+ <div class="small-12 large-4 cell">4</div>
+</div>
+<div class="grid-x display">
+ <div class="small-12 large-3 cell">3</div>
+ <div class="small-12 large-6 cell">6</div>
+ <div class="small-12 large-3 cell">3</div>
+</div>
+<div class="grid-x display">
+ <div class="small-12 large-2 cell">2</div>
+ <div class="small-12 large-8 cell">8</div>
+ <div class="small-12 large-2 cell">2</div>
+</div>
+<div class="grid-x display">
+ <div class="small-12 large-3 cell">3</div>
+ <div class="small-12 large-9 cell">9</div>
+</div>
+<div class="grid-x display">
+ <div class="small-12 large-4 cell">4</div>
+ <div class="small-12 large-8 cell">8</div>
+</div>
+<div class="grid-x display">
+ <div class="small-12 large-5 cell">5</div>
+ <div class="small-12 large-7 cell">7</div>
+</div>
+<div class="grid-x display">
+ <div class="small-12 large-6 cell">6</div>
+ <div class="small-12 large-6 cell">6</div>
+</div>
+
+---
+
+## Nesting grid-x
+
+In the Grid you can nest cells down as far as you'd like. Just embed grid-x inside cells and go from there. Each embedded grid-x can contain up to 12 cells.
+
+```html
+<div class="grid-x">
+ <div class="small-8 cell">8
+ <div class="grid-x">
+ <div class="small-8 cell">8 Nested
+ <div class="grid-x">
+ <div class="small-8 cell">8 Nested Again</div>
+ <div class="small-4 cell">4</div>
+ </div>
+ </div>
+ <div class="small-4 cell">4</div>
+ </div>
+ </div>
+ <div class="small-4 cell">4</div>
+</div>
+```
+
+<div class="grid-x display">
+ <div class="small-8 cell">8
+ <div class="grid-x">
+ <div class="small-8 cell">8 Nested
+ <div class="grid-x">
+ <div class="small-8 cell">8 Nested Again</div>
+ <div class="small-4 cell">4</div>
+ </div>
+ </div>
+ <div class="small-4 cell">4</div>
+ </div>
+ </div>
+ <div class="small-4 cellgi">4</div>
+</div>
+
+---
+
+## Small Grid
+
+As you've probably noticed in the examples above, you have access to a small, medium, and large grid. If you know that your grid structure will be the same for small devices as it will be on large devices, just use the small grid. You can override your small grid classes by adding medium or large grid classes.
+
+```html
+<div class="grid-x">
+ <div class="small-2 cell">2</div>
+ <div class="small-10 cell">10, last</div>
+</div>
+<div class="grid-x">
+ <div class="small-3 cell">3</div>
+ <div class="small-9 cell">9, last</div>
+</div>
+```
+
+<div class="grid-x display">
+ <div class="small-2 cell">2</div>
+ <div class="small-10 cell">10, last</div>
+</div>
+<div class="grid-x display">
+ <div class="small-3 cell">3</div>
+ <div class="small-9 cell">9, last</div>
+</div>
+
+
+
+# Colors
+
+<p class="lead">Below you can find the different values we created that support the primary color variable you can change at any time in <code>\_settings.scss</code></p>
+
+---
+
+<div class="row up-1 medium-up-3 large-up-5">
+ <div class="column">
+ <div class="color-block">
+ <span style="background: #2199e8"></span>
+ #2199e8
+ </div>
+ </div>
+ <div class="column">
+ <div class="color-block">
+ <span style="background: #3adb76"></span>
+ #3adb76
+ </div>
+ </div>
+ <div class="column">
+ <div class="color-block">
+ <span style="background: #ffae00"></span>
+ #ffae00
+ </div>
+ </div>
+ <div class="column">
+ <div class="color-block">
+ <span style="background: #ec5840"></span>
+ #ec5840
+ </div>
+ </div>
+ <div class="column">
+ <div class="color-block">
+ <span style="background: #0a0a0a"></span>
+ #0a0a0a
+ </div>
+ </div>
+</div>
+
+
+
+# Typography
+
+<p class="lead">This design uses Helvetica Neue for headings and paragraph text.</p>
+
+---
+
+## Headings
+
+Headings are used to denote different sections of content, usually consisting of related paragraphs and other HTML elements. They range from h1 to h6 and should be styled in a clear hierarchy (i.e., largest to smallest)
+
+---
+
+## Paragraphs
+
+Paragraphs are groups of sentences, each with a lead (first sentence) and transition (last sentence). They are block level elements, meaning they stack vertically when repeated. Use them as such.
+
+---
+
+<h1>Heading Level 1</h1>
+
+Lorem ipsum dolor sit amet, consectetur adipisicing elit. Hic quibusdam ratione sunt dolorum, qui illo maxime doloremque accusantium cum libero eum, a optio odio placeat debitis ullam aut non distinctio.
+
+<h2>Heading Level 2</h2>
+
+Lorem ipsum dolor sit amet, consectetur adipisicing elit. Hic quibusdam ratione sunt dolorum, qui illo maxime doloremque accusantium cum libero eum, a optio odio placeat debitis ullam aut non distinctio.
+
+<h3>Heading Level 3</h3>
+
+Lorem ipsum dolor sit amet, consectetur adipisicing elit. Hic quibusdam ratione sunt dolorum, qui illo maxime doloremque accusantium cum libero eum, a optio odio placeat debitis ullam aut non distinctio.
+
+<h4>Heading Level 4</h4>
+
+Lorem ipsum dolor sit amet, consectetur adipisicing elit. Hic quibusdam ratione sunt dolorum, qui illo maxime doloremque accusantium cum libero eum, a optio odio placeat debitis ullam aut non distinctio.
+
+<h5>Heading Level 5</h5>
+
+Lorem ipsum dolor sit amet, consectetur adipisicing elit. Hic quibusdam ratione sunt dolorum, qui illo maxime doloremque accusantium cum libero eum, a optio odio placeat debitis ullam aut non distinctio.
+
+<h6>Heading Level 6</h6>
+
+Lorem ipsum dolor sit amet, consectetur adipisicing elit. Hic quibusdam ratione sunt dolorum, qui illo maxime doloremque accusantium cum libero eum, a optio odio placeat debitis ullam aut non distinctio.
+
+
+
+# Buttons
+
+<p class="lead">Buttons are tied to an action of some kind, whether that button is on a cheese dispenser or launches the rocket that you're strapped to. On the web, we follow similar conventions.</p>
+
+---
+
+## Primary Buttons
+
+These buttons are primary calls to action and should be used sparingly. Their size can be adjusted with the `.tiny`, `.small`, and `.large` classes.
+
+```html_example
+<a href="#" class="primary large button">Large button</a>
+<a href="#" class="primary button">Regular button</a>
+<a href="#" class="primary small button">Small button</a>
+<a href="#" class="primary tiny button">Tiny button</a>
+```
+
+---
+
+## Secondary Buttons
+
+These buttons are used for less important, secondary actions on a page.
+
+```html_example
+<a href="#" class="secondary large button">Large button</a>
+<a href="#" class="secondary button">Regular button</a>
+<a href="#" class="secondary small button">Small button</a>
+<a href="#" class="secondary tiny button">Tiny button</a>
+```
+
+
+
+# Forms
+
+<p class="lead">Use forms to allow users to interact with the site and provide information to the company.</p>
+
+---
+
+## Elements of a Form
+
+A form should be marked up using its default HTML properties. The ones we make use of include (in hierarchical order):
+
+- Form
+- Label
+- Input
+- Select
+- Text area
+- Button
+
+---
+
+## How to Use
+
+Make forms great and easy to use with the following rules:
+
+- Wrap checkboxes and radio buttons within labels for larger hit areas, and be sure to set the for, name, and id attributes for all applicable elements.
+- Series of checkboxes and radio buttons below within a `<ul class="inline-list">`.
+- Before selecting any set of fields to use for a required input, explore other options (e.g., radio buttons over select lists).
+
+---
+
+## Learn All About Forms
+
+Check out the [Foundation Docs](http://foundation.zurb.com/sites/docs) to learn about how flexible our forms are for creating different layouts. It works perfectly with the grid to meet all your form needs.
+
+---
+
+## Form Layouts
+
+Form elements in Foundation are styled based on their type attribute rather than a class. Inputs in Foundation have another major advantage — they are full width by default. That means that inputs will run as wide as the column that contains them. However, you have two options which make these forms extremely versatile:
+
+- You can size inputs using column sizes, like `.medium-6`, `.small-6`.
+- You can create row elements inside your form and use columns for the form, including inputs, labels and more. Rows inside a form inherit some special padding to even up input spacing.
+
+---
+
+## Form Example
+
+```html_example
+<form>
+ <div class="row">
+ <div class="large-12 columns">
+ <label>Label</label>
+ <input type="text" placeholder="placeholder">
+ </div>
+ </div>
+ <div class="row">
+ <div class="large-6 columns">
+ <label>Label</label>
+ <input type="text" placeholder="placeholder">
+ </div>
+ <div class="large-6 columns">
+ <div class="row collapse">
+ <label>Label</label>
+ <div class="input-group">
+ <input class="input-group-field" type="text" placeholder="placeholder">
+ <span class="input-group-label">.com</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="row">
+ <div class="large-12 columns">
+ <label>Select Box</label>
+ <select>
+ <option value="good">Good</option>
+ <option value="better">Better</option>
+ <option value="best">Best</option>
+ </select>
+ </div>
+ </div>
+ <div class="row">
+ <div class="large-6 columns">
+ <label>Choose Your Favorite</label>
+ <input type="radio" name="radio1" value="radio1" id="radio1"><label for="radio1">Red</label>
+ <input type="radio" name="radio2" value="radio2" id="radio2"><label for="radio2">Blue</label>
+ </div>
+ <div class="large-6 columns">
+ <label>Check these out</label>
+ <input id="checkbox1" type="checkbox"><label for="checkbox1">Checkbox 1</label>
+ <input id="checkbox2" type="checkbox"><label for="checkbox2">Checkbox 2</label>
+ </div>
+ </div>
+ <div class="row">
+ <div class="large-12 columns">
+ <label>Textarea Label</label>
+ <textarea placeholder="placeholder"></textarea>
+ </div>
+ </div>
+</form>
+```
+
+
+
+# New Section
+
+Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempora omnis suscipit id ut laborum recusandae molestias hic aliquid **expedita!** [Non dicta](zurb.com), autem obcaecati error, id ab voluptate unde culpa nulla.
+
+```html_example
+<a href="#" class="button">Button</a>
+<a href="#" class="button">Button</a>
+<a href="#" class="button">Button</a>
+```
diff --git a/template/src/styleguide/template.html b/template/src/styleguide/template.html
new file mode 100644
--- /dev/null
+++ b/template/src/styleguide/template.html
@@ -0,0 +1,135 @@
+<!doctype html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>Style Guide</title>
+ <link rel="stylesheet" href="assets/css/app.css">
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.9.1/styles/github.min.css">
+
+ <!-- Style guide-specific CSS goes here. -->
+ <style>
+ /* This styles individual sections of the style guide */
+ .ss-section:not(:last-child) {
+ padding-bottom: 4rem;
+ border-bottom: 2px solid #ccc;
+ margin-bottom: 4rem;
+ }
+
+ /* This styles code blocks used for examples. */
+ .ss-code code {
+ display: block;
+ padding: 1rem;
+ overflow-x: scroll;
+ margin-bottom: 1.5rem;
+ }
+
+ /* This styles the example rows used in the grid documentation. */
+ .grid-x.display {
+ background: #eee;
+ font-size: 11px;
+ margin-bottom: 10px;
+ line-height: 2rem;
+ border: solid 1px #c6c6c6;
+ margin-left: 0 !important;
+ margin-right: 0 !important; }
+ .grid-x.display .cell:nth-child(2), .grid-x.display .cell.small-centered, .grid-x.display .cell.large-centered {
+ background: #e1e1e1; }
+ .grid-x.display .cell.color-end {
+ background: #d4d4d4; }
+
+ /* This styles the color blocks used in the color documentation. */
+ .color-block {
+ border-radius: 2px;
+ display: block;
+ padding: 8px 8px 6px;
+ color: #333;
+ text-transform: uppercase;
+ border: 1px solid #ddd;
+ box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);
+ }
+ .color-block span {
+ display: block;
+ width: 100%;
+ height: 100px;
+ margin-bottom: 0.42857rem;
+ }
+
+ .sg-header {
+ background: #eee;
+ padding: 2rem;
+ }
+
+ .grid-container {
+ max-width: 1400px;
+ }
+
+ .sg-side-menu {
+ margin-left: 1rem;
+ }
+
+ .grid-container.padded {
+ padding-top: 2rem;
+ }
+
+ .sg-side-menu a {
+ transition: all 0.15s ease-in;
+ }
+
+ .sg-side-menu a:hover {
+ background: #eee;
+ }
+
+ .sg-side-menu a:focus {
+ background: #1468a0;
+ color: #fff;
+ }
+
+ .sg-side-menu.menu {
+ overflow: auto;
+ height: 100vh;
+ padding-bottom: 5rem;
+ }
+ </style>
+ </head>
+ <body>
+
+ <header class="sg-header" id="sg-header">
+ <div class="grid-container">
+ <h1>Style Guide</h1>
+ <p class="lead">This style guide was built with Foundation for Sites. For more information on how to use this responsive front-end framework, check out the documentation, get help from the Foundation community, or request immediate technical support.</p>
+ <a href="https://foundation.zurb.com/sites/docs/" class="button">Visit the Docs</a>
+ <a href="https://foundation.zurb.com/forum" class="secondary button">Foundation Forum</a>
+ <a href="https://foundation.zurb.com/get-involved/support.html" class="secondary button">Technical Support</a>
+ </div>
+ </header>
+
+ <div class="grid-container padded">
+ <div class="grid-x grid-margin-x" data-sticky-container>
+
+ <div class="large-3 medium-4 cell">
+ <div class="sticky" data-sticky data-top-anchor="sg-header:bottom">
+ <ul class="vertical menu sg-side-menu" data-smooth-scroll data-animation-easing="swing">
+
+ {{#each pages}}
+ <li><a href="#{{ anchor }}">{{ title }}</a></li>
+ {{/each}}
+
+ </ul>
+ </div>
+ </div>
+
+ <div class="large-9 medium-8 cell">
+ {{#each pages}}
+ <section class="ss-section" id="{{ anchor }}">
+ {{ body }}
+ </section>
+ {{/each}}
+ </div>
+
+ </div>
+ </div>
+
+ <script src="assets/js/app.js"></script>
+ </body>
+</html>
diff --git a/tests/site/.gitkeep b/tests/site/.gitkeep
new file mode 100644

File Metadata

Mime Type
text/plain
Expires
Mon, Nov 18, 06:52 (20 h, 10 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2250405
Default Alt Text
D2430.diff (73 KB)

Event Timeline