diff --git a/plugins/wporg-5ftf/assets/css/front-end.css b/plugins/wporg-5ftf/assets/css/front-end.css
deleted file mode 100755
index 9e8cc01..0000000
--- a/plugins/wporg-5ftf/assets/css/front-end.css
+++ /dev/null
@@ -1,21 +0,0 @@
-/* copy homepage styles except those trendy fixed bg images */
-
-.fftf-sorting-indicator {
- visibility: hidden;
-}
-
-.fftf-sorted-ascending .fftf-sorting-indicator,
-.fftf-sorted-descending .fftf-sorting-indicator,
-.fftf-companies th:hover .fftf-sorting-indicator {
- visibility: visible;
- font: normal 20px/1 dashicons;
-}
-
-.fftf-sorting-indicator::before,
-.fftf-sorted-ascending .fftf-sorting-indicator::before {
- content: "\f142";
-}
-
-.fftf-sorted-descending .fftf-sorting-indicator::before {
- content: "\f140";
-}
diff --git a/plugins/wporg-5ftf/assets/js/blocks.js b/plugins/wporg-5ftf/assets/js/blocks.js
deleted file mode 100755
index 70b786d..0000000
--- a/plugins/wporg-5ftf/assets/js/blocks.js
+++ /dev/null
@@ -1 +0,0 @@
-// TODO
diff --git a/plugins/wporg-5ftf/assets/js/front-end.js b/plugins/wporg-5ftf/assets/js/front-end.js
deleted file mode 100755
index dbe58c1..0000000
--- a/plugins/wporg-5ftf/assets/js/front-end.js
+++ /dev/null
@@ -1,65 +0,0 @@
-window.wp = window.wp || {};
-
-jQuery( function( $ ) {
- 'use strict';
-
- var allCompanies = window.fiveFutureCompanies || {},
- sortOrder = 'ascending';
-
- var app = window.wp.FiveForTheFuture = {
- // jsdoc
- init: function() {
- app.renderTemplate( allCompanies );
-
- $( '#5ftf-search' ).keyup( app.searchCompanies );
- // works on keyup but not change. isn't change better?
- $( '.fftf-sorting-indicator' ).click( app.orderCompanies );
- },
-
- //
- renderTemplate: function( companies ) {
- var $container = $( '#5ftf-companies-body' ),
- template = wp.template( '5ftf-companies' );
-
- $container.html( template( companies ) );
- },
-
- //
- searchCompanies: function( event ) {
- var matches = $.extend( true, [], allCompanies ),
- query = $( event.target ).val().toLowerCase();
-
- matches = _.filter( matches, function( company ) {
- return -1 !== company.name.toLowerCase().indexOf( query );
- } );
-
- app.renderTemplate( matches );
- },
-
- //
- orderCompanies: function( event ) {
- var $activeSortButton = $( event.target ),
- $activeSortColumn = $activeSortButton.parent( 'th' ),
- $sortColumns = $( '.fftf-sorting-indicator' );
-
- allCompanies = _.sortBy( allCompanies, $activeSortButton.data( 'field' ) );
-
- $sortColumns.removeClass( 'fftf-sorted-ascending' );
- $sortColumns.removeClass( 'fftf-sorted-descending' );
-
- if ( 'ascending' === sortOrder ) {
- sortOrder = 'descending';
- allCompanies = allCompanies.reverse();
-
- $activeSortColumn.addClass( 'fftf-sorted-descending' );
- } else {
- sortOrder = 'ascending';
- $activeSortColumn.addClass( 'fftf-sorted-ascending' );
- }
-
- app.renderTemplate( allCompanies );
- }
- };
-
- app.init();
-} );
diff --git a/plugins/wporg-5ftf/includes/directory.php b/plugins/wporg-5ftf/includes/directory.php
deleted file mode 100755
index d35ee70..0000000
--- a/plugins/wporg-5ftf/includes/directory.php
+++ /dev/null
@@ -1,107 +0,0 @@
-post_content, 'five_for_the_future_companies' ) ) {
- return;
- }
-
- $params = array(
- /*
- * todo explain 100 is just sanity limit to keep page size performant. might need to lazy-load more in the
- * future.
- * maybe order by donated_employees, or rand, to ensure the top companies are always displayed first, or
- * to make sure treat everyone equal.
- */
- 'post_type' => Pledge\CPT_ID,
- 'post_status' => 'publish',
- 'posts_per_page' => 100,
- 'orderby' => 'title',
- 'order' => 'ASC',
- );
-
- $companies = get_posts( $params );
-
- foreach ( $companies as $key => $company ) {
- $teams = get_post_meta( $company->ID, '_5ftf_teams', false );
-
- $companies[ $key ] = array(
- 'name' => $company->post_title,
- 'url' => $company->_5ftf_url,
- 'total_employees' => $company->_5ftf_total_employees,
- 'sponsored_employees' => $company->_5ftf_sponsored_employees,
- 'hours_per_week' => $company->_5ftf_hours_per_week,
- 'teams_contributing_to' => implode( ', ', $teams ),
- );
- }
-
- $inline_script = sprintf(
- 'var fiveFutureCompanies = JSON.parse( decodeURIComponent( \'%s\' ) );',
- rawurlencode( wp_json_encode( $companies ) )
- );
-
- wp_enqueue_style( '5ftf-front-end' );
- wp_enqueue_script( '5ftf-list' );
- wp_add_inline_script( '5ftf-list', $inline_script );
-}
-add_action( 'wp_enqueue_scripts', __NAMESPACE__ . '\enqueue_scripts' );
-
-/**
- * Todo.
- *
- * @return string
- */
-function render_shortcode() {
- // The limit is just a sanity check, but ideally all should be displayed.
- // If this is reached, then refactor the page to lazy-load, etc.
-
- ob_start();
- require_once dirname( __DIR__ ) . '/views/front-end.php';
- return ob_get_clean();
-}
-
-add_shortcode( 'five_for_the_future_companies', __NAMESPACE__ . '\render_shortcode' );
-
-// todo shortcode for pledge form.
-// todo form handler for pledge form.
-
-/**
- * Todo.
- */
-function register() {
- //register_block_type();
-}
-
-add_action( 'init', __NAMESPACE__ . '\register' );
diff --git a/plugins/wporg-5ftf/index.php b/plugins/wporg-5ftf/index.php
index be8c836..ec9ace2 100755
--- a/plugins/wporg-5ftf/index.php
+++ b/plugins/wporg-5ftf/index.php
@@ -28,7 +28,6 @@ function load() {
require_once get_includes_path() . 'pledge.php';
require_once get_includes_path() . 'pledge-meta.php';
require_once get_includes_path() . 'pledge-form.php';
- require_once get_includes_path() . 'directory.php';
require_once get_includes_path() . 'xprofile.php';
require_once get_includes_path() . 'pledge-log.php';
}
diff --git a/themes/pub/__MACOSX/._wporg b/themes/pub/__MACOSX/._wporg
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/._wporg differ
diff --git a/themes/pub/__MACOSX/wporg/._.jshintignore b/themes/pub/__MACOSX/wporg/._.jshintignore
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._.jshintignore differ
diff --git a/themes/pub/__MACOSX/wporg/._.jshintrc b/themes/pub/__MACOSX/wporg/._.jshintrc
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._.jshintrc differ
diff --git a/themes/pub/__MACOSX/wporg/._404.php b/themes/pub/__MACOSX/wporg/._404.php
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._404.php differ
diff --git a/themes/pub/__MACOSX/wporg/._Gruntfile.js b/themes/pub/__MACOSX/wporg/._Gruntfile.js
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._Gruntfile.js differ
diff --git a/themes/pub/__MACOSX/wporg/._README.md b/themes/pub/__MACOSX/wporg/._README.md
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._README.md differ
diff --git a/themes/pub/__MACOSX/wporg/._archive.php b/themes/pub/__MACOSX/wporg/._archive.php
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._archive.php differ
diff --git a/themes/pub/__MACOSX/wporg/._bin b/themes/pub/__MACOSX/wporg/._bin
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._bin differ
diff --git a/themes/pub/__MACOSX/wporg/._comments.php b/themes/pub/__MACOSX/wporg/._comments.php
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._comments.php differ
diff --git a/themes/pub/__MACOSX/wporg/._css b/themes/pub/__MACOSX/wporg/._css
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._css differ
diff --git a/themes/pub/__MACOSX/wporg/._footer-wporg.php b/themes/pub/__MACOSX/wporg/._footer-wporg.php
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._footer-wporg.php differ
diff --git a/themes/pub/__MACOSX/wporg/._footer.php b/themes/pub/__MACOSX/wporg/._footer.php
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._footer.php differ
diff --git a/themes/pub/__MACOSX/wporg/._functions.php b/themes/pub/__MACOSX/wporg/._functions.php
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._functions.php differ
diff --git a/themes/pub/__MACOSX/wporg/._header-page.php b/themes/pub/__MACOSX/wporg/._header-page.php
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._header-page.php differ
diff --git a/themes/pub/__MACOSX/wporg/._header-wporg.php b/themes/pub/__MACOSX/wporg/._header-wporg.php
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._header-wporg.php differ
diff --git a/themes/pub/__MACOSX/wporg/._header.php b/themes/pub/__MACOSX/wporg/._header.php
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._header.php differ
diff --git a/themes/pub/__MACOSX/wporg/._images b/themes/pub/__MACOSX/wporg/._images
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._images differ
diff --git a/themes/pub/__MACOSX/wporg/._inc b/themes/pub/__MACOSX/wporg/._inc
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._inc differ
diff --git a/themes/pub/__MACOSX/wporg/._index.php b/themes/pub/__MACOSX/wporg/._index.php
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._index.php differ
diff --git a/themes/pub/__MACOSX/wporg/._js b/themes/pub/__MACOSX/wporg/._js
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._js differ
diff --git a/themes/pub/__MACOSX/wporg/._package.json b/themes/pub/__MACOSX/wporg/._package.json
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._package.json differ
diff --git a/themes/pub/__MACOSX/wporg/._page.php b/themes/pub/__MACOSX/wporg/._page.php
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._page.php differ
diff --git a/themes/pub/__MACOSX/wporg/._search.php b/themes/pub/__MACOSX/wporg/._search.php
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._search.php differ
diff --git a/themes/pub/__MACOSX/wporg/._sidebar.php b/themes/pub/__MACOSX/wporg/._sidebar.php
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._sidebar.php differ
diff --git a/themes/pub/__MACOSX/wporg/._single.php b/themes/pub/__MACOSX/wporg/._single.php
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._single.php differ
diff --git a/themes/pub/__MACOSX/wporg/._style.css b/themes/pub/__MACOSX/wporg/._style.css
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._style.css differ
diff --git a/themes/pub/__MACOSX/wporg/._template-parts b/themes/pub/__MACOSX/wporg/._template-parts
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/._template-parts differ
diff --git a/themes/pub/__MACOSX/wporg/bin/._build.php b/themes/pub/__MACOSX/wporg/bin/._build.php
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/bin/._build.php differ
diff --git a/themes/pub/__MACOSX/wporg/css/._base b/themes/pub/__MACOSX/wporg/css/._base
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/._base differ
diff --git a/themes/pub/__MACOSX/wporg/css/._components b/themes/pub/__MACOSX/wporg/css/._components
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/._components differ
diff --git a/themes/pub/__MACOSX/wporg/css/._generic b/themes/pub/__MACOSX/wporg/css/._generic
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/._generic differ
diff --git a/themes/pub/__MACOSX/wporg/css/._objects b/themes/pub/__MACOSX/wporg/css/._objects
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/._objects differ
diff --git a/themes/pub/__MACOSX/wporg/css/._settings b/themes/pub/__MACOSX/wporg/css/._settings
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/._settings differ
diff --git a/themes/pub/__MACOSX/wporg/css/._style.scss b/themes/pub/__MACOSX/wporg/css/._style.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/._style.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/._tools b/themes/pub/__MACOSX/wporg/css/._tools
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/._tools differ
diff --git a/themes/pub/__MACOSX/wporg/css/._trumps b/themes/pub/__MACOSX/wporg/css/._trumps
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/._trumps differ
diff --git a/themes/pub/__MACOSX/wporg/css/base/.__base.scss b/themes/pub/__MACOSX/wporg/css/base/.__base.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/base/.__base.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/base/.__copy.scss b/themes/pub/__MACOSX/wporg/css/base/.__copy.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/base/.__copy.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/base/.__elements.scss b/themes/pub/__MACOSX/wporg/css/base/.__elements.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/base/.__elements.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/base/.__headings.scss b/themes/pub/__MACOSX/wporg/css/base/.__headings.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/base/.__headings.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/base/.__links.scss b/themes/pub/__MACOSX/wporg/css/base/.__links.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/base/.__links.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/base/.__lists.scss b/themes/pub/__MACOSX/wporg/css/base/.__lists.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/base/.__lists.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/base/.__tables.scss b/themes/pub/__MACOSX/wporg/css/base/.__tables.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/base/.__tables.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/base/.__typography.scss b/themes/pub/__MACOSX/wporg/css/base/.__typography.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/base/.__typography.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__404.scss b/themes/pub/__MACOSX/wporg/css/components/.__404.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__404.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__comments.scss b/themes/pub/__MACOSX/wporg/css/components/.__comments.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__comments.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__components.scss b/themes/pub/__MACOSX/wporg/css/components/.__components.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__components.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__entry-content.scss b/themes/pub/__MACOSX/wporg/css/components/.__entry-content.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__entry-content.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__entry-header.scss b/themes/pub/__MACOSX/wporg/css/components/.__entry-header.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__entry-header.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__entry-meta.scss b/themes/pub/__MACOSX/wporg/css/components/.__entry-meta.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__entry-meta.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__entry-summary.scss b/themes/pub/__MACOSX/wporg/css/components/.__entry-summary.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__entry-summary.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__entry.scss b/themes/pub/__MACOSX/wporg/css/components/.__entry.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__entry.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__gallery.scss b/themes/pub/__MACOSX/wporg/css/components/.__gallery.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__gallery.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__main-navigation.scss b/themes/pub/__MACOSX/wporg/css/components/.__main-navigation.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__main-navigation.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__page.scss b/themes/pub/__MACOSX/wporg/css/components/.__page.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__page.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__post-navigation.scss b/themes/pub/__MACOSX/wporg/css/components/.__post-navigation.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__post-navigation.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__posts-navigation.scss b/themes/pub/__MACOSX/wporg/css/components/.__posts-navigation.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__posts-navigation.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__search-form.scss b/themes/pub/__MACOSX/wporg/css/components/.__search-form.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__search-form.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__search.scss b/themes/pub/__MACOSX/wporg/css/components/.__search.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__search.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__site-content.scss b/themes/pub/__MACOSX/wporg/css/components/.__site-content.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__site-content.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__site-description.scss b/themes/pub/__MACOSX/wporg/css/components/.__site-description.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__site-description.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__site-header.scss b/themes/pub/__MACOSX/wporg/css/components/.__site-header.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__site-header.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__site-title.scss b/themes/pub/__MACOSX/wporg/css/components/.__site-title.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__site-title.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__widget-area.scss b/themes/pub/__MACOSX/wporg/css/components/.__widget-area.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__widget-area.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__wporg-footer.scss b/themes/pub/__MACOSX/wporg/css/components/.__wporg-footer.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__wporg-footer.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/components/.__wporg-header.scss b/themes/pub/__MACOSX/wporg/css/components/.__wporg-header.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/components/.__wporg-header.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/generic/.__generic.scss b/themes/pub/__MACOSX/wporg/css/generic/.__generic.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/generic/.__generic.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/generic/.__kube.scss b/themes/pub/__MACOSX/wporg/css/generic/.__kube.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/generic/.__kube.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/generic/.__normalize.scss b/themes/pub/__MACOSX/wporg/css/generic/.__normalize.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/generic/.__normalize.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/objects/.__accessibility.scss b/themes/pub/__MACOSX/wporg/css/objects/.__accessibility.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/objects/.__accessibility.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/objects/.__alignments.scss b/themes/pub/__MACOSX/wporg/css/objects/.__alignments.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/objects/.__alignments.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/objects/.__buttons.scss b/themes/pub/__MACOSX/wporg/css/objects/.__buttons.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/objects/.__buttons.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/objects/.__clearings.scss b/themes/pub/__MACOSX/wporg/css/objects/.__clearings.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/objects/.__clearings.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/objects/.__copy.scss b/themes/pub/__MACOSX/wporg/css/objects/.__copy.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/objects/.__copy.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/objects/.__inputs.scss b/themes/pub/__MACOSX/wporg/css/objects/.__inputs.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/objects/.__inputs.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/objects/.__links.scss b/themes/pub/__MACOSX/wporg/css/objects/.__links.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/objects/.__links.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/objects/.__notices.scss b/themes/pub/__MACOSX/wporg/css/objects/.__notices.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/objects/.__notices.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/objects/.__objects.scss b/themes/pub/__MACOSX/wporg/css/objects/.__objects.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/objects/.__objects.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/settings/.__colors.scss b/themes/pub/__MACOSX/wporg/css/settings/.__colors.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/settings/.__colors.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/settings/.__modular-scale.scss b/themes/pub/__MACOSX/wporg/css/settings/.__modular-scale.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/settings/.__modular-scale.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/settings/.__settings.scss b/themes/pub/__MACOSX/wporg/css/settings/.__settings.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/settings/.__settings.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/settings/.__structure.scss b/themes/pub/__MACOSX/wporg/css/settings/.__structure.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/settings/.__structure.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/settings/.__typography.scss b/themes/pub/__MACOSX/wporg/css/settings/.__typography.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/settings/.__typography.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/tools/.__breakpoint.scss b/themes/pub/__MACOSX/wporg/css/tools/.__breakpoint.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/tools/.__breakpoint.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/tools/.__kube.scss b/themes/pub/__MACOSX/wporg/css/tools/.__kube.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/tools/.__kube.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/tools/.__modular-scale.scss b/themes/pub/__MACOSX/wporg/css/tools/.__modular-scale.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/tools/.__modular-scale.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/tools/.__tools.scss b/themes/pub/__MACOSX/wporg/css/tools/.__tools.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/tools/.__tools.scss differ
diff --git a/themes/pub/__MACOSX/wporg/css/trumps/.__trumps.scss b/themes/pub/__MACOSX/wporg/css/trumps/.__trumps.scss
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/css/trumps/.__trumps.scss differ
diff --git a/themes/pub/__MACOSX/wporg/images/._wp-logo-blue-trans-blur.png b/themes/pub/__MACOSX/wporg/images/._wp-logo-blue-trans-blur.png
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/images/._wp-logo-blue-trans-blur.png differ
diff --git a/themes/pub/__MACOSX/wporg/images/._wp-logo-blue.png b/themes/pub/__MACOSX/wporg/images/._wp-logo-blue.png
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/images/._wp-logo-blue.png differ
diff --git a/themes/pub/__MACOSX/wporg/inc/._footer.php b/themes/pub/__MACOSX/wporg/inc/._footer.php
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/inc/._footer.php differ
diff --git a/themes/pub/__MACOSX/wporg/inc/._header.php b/themes/pub/__MACOSX/wporg/inc/._header.php
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/inc/._header.php differ
diff --git a/themes/pub/__MACOSX/wporg/inc/._template-tags.php b/themes/pub/__MACOSX/wporg/inc/._template-tags.php
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/inc/._template-tags.php differ
diff --git a/themes/pub/__MACOSX/wporg/js/._customizer.js b/themes/pub/__MACOSX/wporg/js/._customizer.js
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/js/._customizer.js differ
diff --git a/themes/pub/__MACOSX/wporg/js/._navigation.js b/themes/pub/__MACOSX/wporg/js/._navigation.js
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/js/._navigation.js differ
diff --git a/themes/pub/__MACOSX/wporg/js/._navigation.min.js b/themes/pub/__MACOSX/wporg/js/._navigation.min.js
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/js/._navigation.min.js differ
diff --git a/themes/pub/__MACOSX/wporg/js/._skip-link-focus-fix.js b/themes/pub/__MACOSX/wporg/js/._skip-link-focus-fix.js
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/js/._skip-link-focus-fix.js differ
diff --git a/themes/pub/__MACOSX/wporg/js/._skip-link-focus-fix.min.js b/themes/pub/__MACOSX/wporg/js/._skip-link-focus-fix.min.js
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/js/._skip-link-focus-fix.min.js differ
diff --git a/themes/pub/__MACOSX/wporg/template-parts/._content-none.php b/themes/pub/__MACOSX/wporg/template-parts/._content-none.php
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/template-parts/._content-none.php differ
diff --git a/themes/pub/__MACOSX/wporg/template-parts/._content-page.php b/themes/pub/__MACOSX/wporg/template-parts/._content-page.php
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/template-parts/._content-page.php differ
diff --git a/themes/pub/__MACOSX/wporg/template-parts/._content.php b/themes/pub/__MACOSX/wporg/template-parts/._content.php
new file mode 100644
index 0000000..1f000d3
Binary files /dev/null and b/themes/pub/__MACOSX/wporg/template-parts/._content.php differ
diff --git a/themes/pub/wporg.zip b/themes/pub/wporg.zip
new file mode 100644
index 0000000..8fe4b2f
Binary files /dev/null and b/themes/pub/wporg.zip differ
diff --git a/themes/pub/wporg/.jshintignore b/themes/pub/wporg/.jshintignore
new file mode 100644
index 0000000..54162f6
--- /dev/null
+++ b/themes/pub/wporg/.jshintignore
@@ -0,0 +1 @@
+js/**.min.js
\ No newline at end of file
diff --git a/themes/pub/wporg/.jshintrc b/themes/pub/wporg/.jshintrc
new file mode 100644
index 0000000..95af6dc
--- /dev/null
+++ b/themes/pub/wporg/.jshintrc
@@ -0,0 +1,25 @@
+{
+ "boss": true,
+ "curly": true,
+ "eqeqeq": true,
+ "eqnull": true,
+ "esversion": 6,
+ "expr": true,
+ "immed": true,
+ "noarg": true,
+ "nonbsp": true,
+ "onevar": true,
+ "quotmark": "single",
+ "trailing": true,
+ "undef": true,
+ "unused": true,
+ "browser": true,
+ "globals": {
+ "_": false,
+ "Backbone": false,
+ "jQuery": false,
+ "JSON": false,
+ "pagenow": false,
+ "wp": false
+ }
+}
diff --git a/themes/pub/wporg/404.php b/themes/pub/wporg/404.php
new file mode 100644
index 0000000..b9a528a
--- /dev/null
+++ b/themes/pub/wporg/404.php
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+ home page.', 'wporg' ), // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
+ esc_url( get_home_url() )
+ );
+ ?>
+
+
+
+
 ); ?>)
+
 ); ?>)
+
+
+
+
+
+
+
+
+= 2.1',
+ 'Chrome >= 21',
+ 'Edge >= 12',
+ 'Explorer >= 7',
+ 'Firefox >= 17',
+ 'Opera >= 12.1',
+ 'Safari >= 6.0'
+ ],
+ cascade: false
+ } ),
+ require( 'pixrem' ),
+ require('cssnano')({
+ mergeRules: false
+ })
+ ]
+ },
+ dist: {
+ src: 'css/style.css'
+ }
+ },
+ jshint: {
+ files: [ 'Gruntfile.js', 'js/**/*.js' ],
+ options: grunt.file.readJSON( '.jshintrc' )
+ },
+ uglify: {
+ options: {
+ ASCIIOnly: true,
+ screwIE8: false
+ },
+ js: {
+ expand: true,
+ cwd: 'js/',
+ dest: 'js/',
+ ext: '.min.js',
+ src: '**/*.js',
+ }
+ },
+ sass: {
+ options: {
+ implementation: require( 'node-sass' ),
+ sourceMap: true,
+ // Don't add source map URL in built version.
+ omitSourceMapUrl: 'build' === process.argv[2],
+ outputStyle: 'expanded'
+ },
+ dist: {
+ files: {
+ 'css/style.css': 'css/style.scss'
+ }
+ }
+ },
+ sass_globbing: {
+ itcss: {
+ files: (function() {
+ var files = {};
+
+ ['settings', 'tools', 'generic', 'base', 'objects', 'components', 'trumps'].forEach( function( component ) {
+ var paths = [ '../wporg/css/' + component + '/**/*.scss', '!../wporg/css/' + component + '/_' + component + '.scss' ];
+
+ if ( isChild ) {
+ paths.push( 'css/' + component + '/**/*.scss' );
+ paths.push( '!css/' + component + '/_' + component + '.scss' );
+ }
+
+ files[ 'css/' + component + '/_' + component + '.scss' ] = paths;
+ } );
+
+ return files;
+ })()
+ },
+ options: { signature: false }
+ },
+ rtlcss: {
+ options: {
+ // rtlcss options.
+ opts: {
+ clean: false,
+ processUrls: { atrule: true, decl: false },
+ stringMap: [
+ {
+ name: 'import-rtl-stylesheet',
+ priority: 10,
+ exclusive: true,
+ search: [ '.css' ],
+ replace: [ '-rtl.css' ],
+ options: {
+ scope: 'url',
+ ignoreCase: false
+ }
+ } // phpcs:ignore Generic.WhiteSpace.ScopeIndent.IncorrectExact
+ ]
+ },
+ saveUnmodified: false,
+ plugins: [
+ {
+ name: 'swap-dashicons-left-right-arrows',
+ priority: 10,
+ directives: {
+ control: {},
+ value: []
+ },
+ processors: [
+ {
+ expr: /content/im,
+ action: function( prop, value ) {
+ if ( value === '"\\f141"' ) { // dashicons-arrow-left.
+ value = '"\\f139"';
+ } else if ( value === '"\\f340"' ) { // dashicons-arrow-left-alt.
+ value = '"\\f344"';
+ } else if ( value === '"\\f341"' ) { // dashicons-arrow-left-alt2.
+ value = '"\\f345"';
+ } else if ( value === '"\\f139"' ) { // dashicons-arrow-right.
+ value = '"\\f141"';
+ } else if ( value === '"\\f344"' ) { // dashicons-arrow-right-alt.
+ value = '"\\f340"';
+ } else if ( value === '"\\f345"' ) { // dashicons-arrow-right-alt2.
+ value = '"\\f341"';
+ }
+ return { prop: prop, value: value };
+ }
+ } // phpcs:ignore Generic.WhiteSpace.ScopeIndent.IncorrectExact
+ ]
+ } // phpcs:ignore Generic.WhiteSpace.ScopeIndent.IncorrectExact
+ ]
+ },
+ dynamic: {
+ expand: true,
+ cwd: 'css/',
+ dest: 'css/',
+ ext: '-rtl.css',
+ src: ['**/style.css']
+ }
+ },
+ watch: {
+ jshint: {
+ files: ['<%= jshint.files %>'],
+ tasks: ['jshint']
+ },
+ css: {
+ files: ['**/*.scss'],
+ tasks: ['css']
+ }
+ }
+ });
+
+ if ( 'build' === process.argv[2] ) {
+ grunt.config.merge( { postcss: { options : { processors: [ require( 'cssnano' ) ] } } } );
+ }
+
+ grunt.loadNpmTasks( 'grunt-sass' );
+ grunt.loadNpmTasks( 'grunt-rtlcss' );
+ grunt.loadNpmTasks( 'grunt-postcss' );
+ grunt.loadNpmTasks( 'grunt-sass-globbing' );
+ grunt.loadNpmTasks( 'grunt-contrib-watch' );
+ grunt.loadNpmTasks( 'grunt-contrib-jshint' );
+ grunt.loadNpmTasks( 'grunt-contrib-uglify' );
+
+ grunt.registerTask( 'css', ['sass_globbing', 'sass', 'postcss', 'rtlcss:dynamic'] );
+ grunt.registerTask( 'default', ['jshint', 'css'] );
+ grunt.registerTask( 'build', ['css', 'uglify:js'] );
+};
diff --git a/themes/pub/wporg/README.md b/themes/pub/wporg/README.md
new file mode 100644
index 0000000..8c6db85
--- /dev/null
+++ b/themes/pub/wporg/README.md
@@ -0,0 +1,31 @@
+### WordPress.org
+
+This Theme serves as a parent theme for all themes used on WordPress.org.
+The idea is to collect commonly used styles and components here, for all child themes to use.
+
+#### Getting Started
+
+1. Create a child theme and specify `wporg` as the template for it.
+1. Copy `package.json`, `Gruntfile.js`, `.jshinignore`, and `.jshintrc` into your child theme.
+1. Replace project-specific information in `package.json`.
+1. Run `npm install` (this can take a little while).
+1. Run `grunt css` to create the CSS folder structure.
+1. Copy `css/style.scss` into your child theme.
+
+Running `grunt watch` or `grunt css` now will pull in all Sass files from parent and child theme.
+
+#### Developing
+
+```
+grunt watch
+```
+Watches JavaScript and Sass files for changes to run linters and builds Sass, etc.
+
+#### Committing
+
+Before committing changes, please create a build version to keep the file size down.
+
+```
+grunt build
+svn ci
+```
diff --git a/themes/pub/wporg/archive.php b/themes/pub/wporg/archive.php
new file mode 100644
index 0000000..599a745
--- /dev/null
+++ b/themes/pub/wporg/archive.php
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/themes/pub/wporg/css/base/_base.scss b/themes/pub/wporg/css/base/_base.scss
new file mode 100644
index 0000000..3001373
--- /dev/null
+++ b/themes/pub/wporg/css/base/_base.scss
@@ -0,0 +1,7 @@
+@import "copy";
+@import "elements";
+@import "headings";
+@import "links";
+@import "lists";
+@import "tables";
+@import "typography";
diff --git a/themes/pub/wporg/css/base/_copy.scss b/themes/pub/wporg/css/base/_copy.scss
new file mode 100644
index 0000000..1dbe04a
--- /dev/null
+++ b/themes/pub/wporg/css/base/_copy.scss
@@ -0,0 +1,45 @@
+p {
+ margin: 1rem 0;
+}
+
+dfn, cite, em, i {
+ font-style: italic;
+}
+
+blockquote {
+ margin: 0 1.5rem;
+}
+
+address {
+ margin: 0 0 1.5rem;
+}
+
+pre {
+ background: #eee;
+ font-family: "Courier 10 Pitch", Courier, monospace;
+ font-size: 0.9375rem;
+ line-height: 1.6;
+ margin-bottom: 1.6rem;
+ max-width: 100%;
+ overflow: auto;
+ padding: 1.6rem;
+}
+
+code, kbd, tt, var {
+ font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace;
+ font-size: 0.9375rem;
+}
+
+abbr, acronym {
+ border-bottom: 1px dotted #666;
+ cursor: help;
+}
+
+mark, ins {
+ background: #fff9c0;
+ text-decoration: none;
+}
+
+big {
+ font-size: 125%;
+}
diff --git a/themes/pub/wporg/css/base/_elements.scss b/themes/pub/wporg/css/base/_elements.scss
new file mode 100644
index 0000000..63733c1
--- /dev/null
+++ b/themes/pub/wporg/css/base/_elements.scss
@@ -0,0 +1,50 @@
+html {
+ box-sizing: border-box;
+}
+
+*,
+*:before,
+*:after { /* Inherit box-sizing to make it easier to change the property for components that leverage other behavior; see http://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/ */
+ box-sizing: inherit;
+}
+
+body {
+ background: #fff; /* Fallback for when there is no custom background color defined. */
+}
+
+blockquote, q {
+ quotes: "" "";
+
+ &:before,
+ &:after {
+ content: "";
+ }
+}
+
+blockquote {
+ border-left: 2px solid #eee;
+ color: #82878c;
+ font-style: italic;
+ margin: 1rem 0;
+ padding-left: 1rem;
+
+ cite {
+ font-size: ms( -2 );
+ }
+}
+
+figure {
+ margin: 0;
+}
+
+hr {
+ background-color: #eee;
+ border: 0;
+ height: 2px;
+ margin: 5rem auto;
+}
+
+img {
+ height: auto; /* Make sure images are scaled correctly. */
+ max-width: 100%; /* Adhere to container width. */
+}
diff --git a/themes/pub/wporg/css/base/_headings.scss b/themes/pub/wporg/css/base/_headings.scss
new file mode 100644
index 0000000..cd43b2b
--- /dev/null
+++ b/themes/pub/wporg/css/base/_headings.scss
@@ -0,0 +1,41 @@
+h1, h2, h3, h4, h5, h6 {
+ clear: both;
+ line-height: $type__lineheight;
+ margin: 2rem 0 1rem;
+}
+
+h1 {
+ font-size: ms( 12 );
+ font-weight: 300;
+}
+
+h2 {
+ font-size: ms( 8 );
+ font-weight: 300;
+}
+
+h3 {
+ font-size: ms( 4 );
+ font-weight: 400;
+}
+
+h4 {
+ font-size: ms( 2 );
+ color: $color__base-gray;
+ font-weight: 600;
+ padding: 0;
+}
+
+h5 {
+ font-size: ms( 0 );
+ font-weight: 600;
+ letter-spacing: 0.01rem;
+ text-transform: uppercase;
+}
+
+h6 {
+ font-size: ms( -2 );
+ font-weight: 600;
+ letter-spacing: 0.8px;
+ text-transform: uppercase;
+}
diff --git a/themes/pub/wporg/css/base/_links.scss b/themes/pub/wporg/css/base/_links.scss
new file mode 100644
index 0000000..e29bf71
--- /dev/null
+++ b/themes/pub/wporg/css/base/_links.scss
@@ -0,0 +1,28 @@
+a {
+ color: $color__wp-blue;
+ text-decoration: none;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: underline;
+ }
+
+ &:focus {
+ outline: thin dotted;
+ }
+
+ &:hover,
+ &:active {
+ outline: 0;
+ }
+
+ p &,
+ li > & {
+ text-decoration: underline;
+
+ &:hover {
+ color: #d54e21;
+ }
+ }
+}
diff --git a/themes/pub/wporg/css/base/_lists.scss b/themes/pub/wporg/css/base/_lists.scss
new file mode 100644
index 0000000..9f4be58
--- /dev/null
+++ b/themes/pub/wporg/css/base/_lists.scss
@@ -0,0 +1,25 @@
+ul, ol {
+ margin: 0 0 1.5em 1.5em;
+ padding: 0;
+}
+
+ul {
+ list-style: square;
+}
+
+ol {
+ list-style: decimal;
+}
+
+li > ul,
+li > ol {
+ margin-bottom: 0;
+}
+
+dt {
+ font-weight: bold;
+}
+
+dd {
+ margin: 0 1.5em 1.5em;
+}
diff --git a/themes/pub/wporg/css/base/_tables.scss b/themes/pub/wporg/css/base/_tables.scss
new file mode 100644
index 0000000..8790832
--- /dev/null
+++ b/themes/pub/wporg/css/base/_tables.scss
@@ -0,0 +1,29 @@
+table {
+ border: 1px solid #eee;
+ //border-spacing: .1rem;
+ border-collapse: collapse;
+ font-size: ms( -2 );
+ margin: 0 0 ms( 0 );
+ padding: 0;
+ width: 100%;
+
+ thead {
+ background: $color__base-gray;
+ color: #fff;
+ }
+
+ th, td {
+ border: 1px solid #eee;
+ font-weight: normal;
+ margin: 0;
+ padding: 0.4rem;
+ text-align: left;
+ vertical-align: top;
+ }
+
+ tbody {
+ tr:nth-child( even ) {
+ background: #f7f7f7;
+ }
+ }
+}
diff --git a/themes/pub/wporg/css/base/_typography.scss b/themes/pub/wporg/css/base/_typography.scss
new file mode 100644
index 0000000..758280c
--- /dev/null
+++ b/themes/pub/wporg/css/base/_typography.scss
@@ -0,0 +1,20 @@
+html {
+ font-size: 100%;
+}
+
+body,
+button,
+input,
+select,
+textarea {
+ color: $color__base-gray;
+ font-family: "Open Sans", sans-serif;
+ font-size: 100%;
+ line-height: $type__lineheight;
+}
+
+@include breakpoint( $ms-breakpoint ) {
+ html {
+ font-size: 1.125rem;
+ }
+}
diff --git a/themes/pub/wporg/css/components/_404.scss b/themes/pub/wporg/css/components/_404.scss
new file mode 100644
index 0000000..a1ec495
--- /dev/null
+++ b/themes/pub/wporg/css/components/_404.scss
@@ -0,0 +1,68 @@
+
+.error-404 {
+ .page-title {
+ text-align: center;
+ }
+
+ .page-content {
+ text-align: center;
+
+ .logo-swing {
+ height: 10rem;
+ margin: 6rem auto;
+ position: relative;
+ text-align: center;
+ width: 10rem;
+
+ .wp-logo {
+ left: 0;
+ max-width: none;
+ position: absolute;
+ top: 0;
+ width: 10rem;
+ }
+ }
+ }
+}
+
+@keyframes hinge {
+ 10% {
+ width: 180px;
+ height: 180px;
+ transform: rotate3d(0, 0, 1, 0deg);
+ }
+ 15% {
+ width: 185px;
+ height: 185px;
+ transform: rotate3d(0, 0, 1, 0deg);
+ }
+ 20% {
+ width: 180px;
+ height: 180px;
+ transform: rotate3d(0, 0, 1, 5deg);
+ }
+ 40% {
+ transform-origin: top left;
+ animation-timing-function: ease-in-out;
+ }
+ 60% {
+ transform: rotate3d(0, 0, 1, 40deg);
+ transform-origin: top left;
+ animation-timing-function: ease-in-out;
+ }
+ 40%, 80% {
+ transform: rotate3d(0, 0, 1, 60deg);
+ transform-origin: top left;
+ animation-timing-function: ease-in-out;
+ opacity: 1;
+ }
+ to {
+ transform: translate3d(0, 700px, 0);
+ opacity: 0;
+ }
+}
+
+.hinge {
+ animation-duration: 2s;
+ animation-name: hinge;
+}
diff --git a/themes/pub/wporg/css/components/_comments.scss b/themes/pub/wporg/css/components/_comments.scss
new file mode 100644
index 0000000..6cb8524
--- /dev/null
+++ b/themes/pub/wporg/css/components/_comments.scss
@@ -0,0 +1,185 @@
+
+.comments-area {
+ margin-top: 5em;
+
+ > :last-child {
+ margin-bottom: 0;
+ }
+
+ .comment-list + .comment-respond {
+ border-top: 1px solid #eaeaea;
+ }
+
+ .comment-list + .comment-respond,
+ .comment-navigation + .comment-respond {
+ padding-top: 1.6em;
+ }
+
+ .comments-title {
+ margin-bottom: 1.3333em;
+ }
+
+ .comment-list {
+ list-style: none;
+ margin: 0;
+
+ article,
+ .pingback,
+ .trackback {
+ border-top: 1px solid #eaeaea;
+ padding: 1.6em 0;
+ }
+
+ article:not(:only-child) {
+ padding-bottom: 0;
+ }
+
+ article + .comment-respond {
+ padding-bottom: 1.6em;
+ }
+
+ .children {
+ list-style: none;
+ margin: 0;
+
+ & > li {
+ padding-left: 0.8em;
+ }
+ }
+ }
+
+ .comment-list .alt {
+ background: none;
+ }
+
+ .comment-author {
+ color: #999;
+ margin-bottom: 0.4em;
+
+ .avatar {
+ float: left;
+ height: 24px;
+ margin-right: 0.8em;
+ width: 24px;
+ }
+ }
+
+ .comment-metadata,
+ .pingback .edit-link {
+ color: #999;
+ line-height: 1.5;
+
+ a {
+ color: #777;
+ }
+ }
+
+ .comment-metadata {
+ font-size: ms( -2 );
+ margin-bottom: 1.6em;
+
+ .edit-link {
+ margin-left: 1em;
+ }
+
+ }
+
+ .pingback .edit-link {
+ margin-left: 1em;
+
+ &:before {
+ top: 5px;
+ }
+ }
+
+ .comment-content {
+ ul,
+ ol {
+ margin: 0 0 1.6em 1.3333em;
+ }
+
+ li > ul,
+ li > ol {
+ margin-bottom: 0;
+ }
+
+ > :last-child {
+ margin-bottom: 0;
+ }
+
+ .reply {
+ font-size: 12px;
+
+ a {
+ border: 1px solid #eaeaea;
+ color: #707070;
+ display: inline-block;
+ font-weight: 700;
+ line-height: 1;
+ margin-top: 2em;
+ padding: 0.4167em 0.8333em;
+ text-transform: uppercase;
+
+ &:hover,
+ &:focus {
+ border-color: #333;
+ color: #333;
+ outline: 0;
+ }
+ }
+ }
+ }
+
+ .comment-reply-title a {
+ font-weight: inherit;
+ }
+
+ .comment-form {
+ label {
+ font-size: ms( -2 );
+ font-weight: 700;
+ display: block;
+ letter-spacing: 0.04em;
+ line-height: 1.5;
+ }
+
+ input[type="text"],
+ input[type="email"],
+ input[type="url"],
+ textarea {
+ width: 100%;
+ }
+ }
+
+ .comment-notes,
+ .comment-awaiting-moderation,
+ .logged-in-as,
+ .form-allowed-tags {
+ font-size: ms( 0 );
+ line-height: 1.5;
+ margin-bottom: 2em;
+ }
+
+ .no-comments {
+ border-top: 1px solid #eaeaea;
+ color: #999;
+ font-weight: 700;
+ padding-top: 1.6em;
+ }
+
+ .comment-navigation + .no-comments {
+ border-top: 0;
+ }
+
+ .form-allowed-tags code {
+ font-family: Inconsolata, monospace;
+ }
+
+ .form-submit {
+ margin-bottom: 0;
+ }
+
+ .required {
+ color: #c0392b;
+ }
+}
diff --git a/themes/pub/wporg/css/components/_components.scss b/themes/pub/wporg/css/components/_components.scss
new file mode 100644
index 0000000..b610b56
--- /dev/null
+++ b/themes/pub/wporg/css/components/_components.scss
@@ -0,0 +1,21 @@
+@import "404";
+@import "comments";
+@import "entry-content";
+@import "entry-header";
+@import "entry-meta";
+@import "entry-summary";
+@import "entry";
+@import "gallery";
+@import "main-navigation";
+@import "page";
+@import "post-navigation";
+@import "posts-navigation";
+@import "search-form";
+@import "search";
+@import "site-content";
+@import "site-description";
+@import "site-header";
+@import "site-title";
+@import "widget-area";
+@import "wporg-footer";
+@import "wporg-header";
diff --git a/themes/pub/wporg/css/components/_entry-content.scss b/themes/pub/wporg/css/components/_entry-content.scss
new file mode 100644
index 0000000..ea1764e
--- /dev/null
+++ b/themes/pub/wporg/css/components/_entry-content.scss
@@ -0,0 +1,19 @@
+.entry-content {
+ hyphens: auto;
+ word-wrap: break-word;
+
+ > p:first-child {
+ margin-top: 0;
+ }
+
+ [class*="col-"] {
+ & ~ h1,
+ & ~ h2,
+ & ~ h3,
+ & ~ h4,
+ & ~ h5,
+ & ~ h6 {
+ clear: none;
+ }
+ }
+}
diff --git a/themes/pub/wporg/css/components/_entry-header.scss b/themes/pub/wporg/css/components/_entry-header.scss
new file mode 100644
index 0000000..73b3ef8
--- /dev/null
+++ b/themes/pub/wporg/css/components/_entry-header.scss
@@ -0,0 +1,11 @@
+.entry-header {
+ position: relative;
+
+ .sticky-post {
+ color: #999999;
+ font-size: ms( -2 );
+ font-style: italic;
+ position: absolute;
+ top: -.8rem;
+ }
+}
diff --git a/themes/pub/wporg/css/components/_entry-meta.scss b/themes/pub/wporg/css/components/_entry-meta.scss
new file mode 100644
index 0000000..cd431a6
--- /dev/null
+++ b/themes/pub/wporg/css/components/_entry-meta.scss
@@ -0,0 +1,31 @@
+.entry-meta {
+ color: #999999;
+ font-size: ms( -2 );
+ margin-bottom: 1rem;
+
+ a {
+ color: #777777;
+ }
+
+ > span {
+ margin-right: 1rem;
+
+ :last-of-type {
+ margin: 0;
+ }
+ }
+
+ .updated:not(.published) {
+ display: none;
+ }
+
+ .sticky & .posted-on,
+ .byline {
+ display: none;
+ }
+
+ .single & .byline,
+ .group-blog & .byline {
+ display: inline;
+ }
+}
diff --git a/themes/pub/wporg/css/components/_entry-summary.scss b/themes/pub/wporg/css/components/_entry-summary.scss
new file mode 100644
index 0000000..dd319b5
--- /dev/null
+++ b/themes/pub/wporg/css/components/_entry-summary.scss
@@ -0,0 +1,4 @@
+.entry-summary {
+ hyphens: auto;
+ word-wrap: break-word;
+}
diff --git a/themes/pub/wporg/css/components/_entry.scss b/themes/pub/wporg/css/components/_entry.scss
new file mode 100644
index 0000000..1495b03
--- /dev/null
+++ b/themes/pub/wporg/css/components/_entry.scss
@@ -0,0 +1,4 @@
+body:not(.single):not(.search) .site-main .post {
+ margin-bottom: ms( 10 );
+ max-width: 40em;
+}
diff --git a/themes/pub/wporg/css/components/_gallery.scss b/themes/pub/wporg/css/components/_gallery.scss
new file mode 100644
index 0000000..a876930
--- /dev/null
+++ b/themes/pub/wporg/css/components/_gallery.scss
@@ -0,0 +1,47 @@
+.gallery {
+ margin-bottom: 1.5rem;
+
+ .gallery-item {
+ display: inline-block;
+ margin: 0;
+ text-align: center;
+ vertical-align: top;
+ width: 100%;
+ }
+
+ &.gallery-columns-2 .gallery-item {
+ max-width: 50%;
+ }
+
+ &.gallery-columns-3 .gallery-item {
+ max-width: 33.33%;
+ }
+
+ &.gallery-columns-4 .gallery-item {
+ max-width: 25%;
+ }
+
+ &.gallery-columns-5 .gallery-item {
+ max-width: 20%;
+ }
+
+ &.gallery-columns-6 .gallery-item {
+ max-width: 16.66%;
+ }
+
+ &.gallery-columns-7 .gallery-item {
+ max-width: 14.28%;
+ }
+
+ &.gallery-columns-8 .gallery-item {
+ max-width: 12.5%;
+ }
+
+ &.gallery-columns-9 .gallery-item {
+ max-width: 11.11%;
+ }
+
+ .gallery-caption {
+ display: block;
+ }
+}
\ No newline at end of file
diff --git a/themes/pub/wporg/css/components/_main-navigation.scss b/themes/pub/wporg/css/components/_main-navigation.scss
new file mode 100644
index 0000000..784007f
--- /dev/null
+++ b/themes/pub/wporg/css/components/_main-navigation.scss
@@ -0,0 +1,139 @@
+.main-navigation {
+ background: $color__wp-blue;
+ clear: both;
+ left: 0;
+ position: absolute;
+ top: 60px;
+ width: 100%;
+
+ ul {
+ display: none;
+ list-style: none;
+ margin: 0;
+ padding-left: 0;
+
+ ul {
+ box-shadow: 0 3px 3px rgba(0, 0, 0, 0.2);
+ float: left;
+ left: -999em;
+ position: absolute;
+ top: 1.5em;
+ z-index: 99999;
+
+ ul {
+ left: -999em;
+ top: 0;
+ }
+
+ li {
+ &:hover > ul,
+ &.focus > ul {
+ left: 100%;
+ }
+ }
+
+ a {
+ width: 200px;
+ }
+
+ :hover > a,
+ .focus > a {
+ }
+
+ a:hover,
+ a.focus {
+ }
+ }
+
+ li:hover > ul,
+ li.focus > ul {
+ left: auto;
+ }
+ }
+
+ li {
+ border-top: 1px solid rgba( 255, 255, 255, 0.2 );
+ padding: 1rem;
+
+ &:hover > a,
+ &.focus > a {
+ }
+ }
+
+ a {
+ color: rgba( 255, 255, 255, 0.8 );
+ display: block;
+ font-size: ms( -2 );
+ text-decoration: none;
+
+ &:hover,
+ &.active {
+ color: #fff;
+ }
+
+ @include breakpoint( $ms-breakpoint ) {
+ &.active {
+ border-bottom: 1px solid;
+ }
+ }
+ }
+}
+
+/* Small menu. */
+.main-navigation.toggled {
+ z-index: 1;
+
+ ul {
+ display: block;
+ }
+}
+
+.menu-toggle {
+ background: transparent;
+ border: none;
+ color: #fff;
+ font-size: ms( 4 );
+ height: 3.5rem;
+ overflow: hidden;
+ position: absolute;
+ right: 1rem;
+ top: -58px;
+ width: 3.5rem;
+ -webkit-appearance: none;
+
+ .toggled &:before {
+ content: "\f343";
+ }
+}
+
+@include breakpoint( $ms-breakpoint ) {
+ .menu-toggle {
+ display: none;
+ }
+ .main-navigation {
+ float: right;
+ position: initial;
+ width: initial;
+
+ &.toggled {
+ padding: 1px 0;
+ }
+
+ ul {
+ display: inline-block;
+ font-size: 0;
+
+ li {
+ border: 0;
+ display: inline-block;
+ font-size: ms( 0 );
+ margin-right: 1rem;
+ padding: 0;
+
+ &:last-of-type {
+ margin-right: 0;
+ }
+ }
+ }
+ }
+}
diff --git a/themes/pub/wporg/css/components/_page.scss b/themes/pub/wporg/css/components/_page.scss
new file mode 100644
index 0000000..0a07cd4
--- /dev/null
+++ b/themes/pub/wporg/css/components/_page.scss
@@ -0,0 +1,42 @@
+body.page {
+ .gutters .col-12 {
+ width: 100%;
+ }
+
+ .entry-header {
+ background: $color__wp-blue;
+ padding: 1rem 0;
+
+ .entry-title {
+ color: #fff;
+ font-size: ms( 4 );
+ font-weight: 300;
+ line-height: 1;
+ margin: 0 auto;
+ max-width: 960px;
+ padding: 0 ms( 4 );
+
+ @include breakpoint( $ms-breakpoint ) {
+ padding: 0 10px;
+ }
+ }
+
+ &.home {
+ padding: ms( 4 ) ms( 1 );
+ text-align: center;
+ }
+ }
+
+ @include breakpoint( $ms-breakpoint ) {
+ .site-header + .site-main .entry-title {
+ padding: initial;
+ }
+ }
+
+ .entry-content,
+ .entry-footer {
+ margin: 0 auto;
+ max-width: 960px;
+ padding: ms( 10 ) ms( 4 );
+ }
+}
\ No newline at end of file
diff --git a/themes/pub/wporg/css/components/_post-navigation.scss b/themes/pub/wporg/css/components/_post-navigation.scss
new file mode 100644
index 0000000..4e90b1e
--- /dev/null
+++ b/themes/pub/wporg/css/components/_post-navigation.scss
@@ -0,0 +1,36 @@
+.post-navigation {
+ margin: 5em auto;
+ padding: 0;
+
+ a {
+ border-bottom: 1px solid #eaeaea;
+ color: #444;
+ display: block;
+ font-weight: 600;
+ padding: 11px 0 12px;
+ text-transform: none;
+ width: 100%;
+
+ &:hover {
+ color: #21759b;
+ }
+ }
+
+ .nav-links {
+ border-top: 1px solid #eaeaea;
+ hyphens: auto;
+ word-wrap: break-word;
+ }
+
+ .meta-nav {
+ color: #777;
+ display: block;
+ font-size: 13px;
+ line-height: 2;
+ text-transform: uppercase;
+ }
+
+ .nav-next {
+ text-align: right;
+ }
+}
diff --git a/themes/pub/wporg/css/components/_posts-navigation.scss b/themes/pub/wporg/css/components/_posts-navigation.scss
new file mode 100644
index 0000000..3ce339d
--- /dev/null
+++ b/themes/pub/wporg/css/components/_posts-navigation.scss
@@ -0,0 +1,53 @@
+.pagination .nav-links {
+ text-align: center;
+
+ .page-numbers {
+ background-color: #f9f9f9;
+ cursor: hand;
+ display: inline-block;
+ min-width: 2em;
+ padding: 8px;
+
+ &.next,
+ &.prev,
+ &.dots {
+ background: none;
+ font-size: 0.9em;
+ width: auto;
+ }
+ &.dots {
+ cursor: inherit;
+ }
+
+ @include breakpoint( 0, $ms-breakpoint ) {
+ &.prev,
+ &.next {
+ font-size: 0;
+ min-width: initial;
+ padding: 0;
+ }
+
+ &.prev:before,
+ &.next:after {
+ background-color: #f9f9f9;
+ display: inline-block;
+ font-size: ms( 0 );
+ line-height: 1.5;
+ min-width: 2em;
+ padding: 8px;
+ }
+
+ &.prev:before {
+ content: '\2039'; /* ‹ */
+ }
+
+ &.next:after {
+ content: '\203A'; /* › */
+ }
+ }
+ }
+ span.page-numbers {
+ background-color: #f7f7f7;
+ font-weight: bold;
+ }
+}
\ No newline at end of file
diff --git a/themes/pub/wporg/css/components/_search-form.scss b/themes/pub/wporg/css/components/_search-form.scss
new file mode 100644
index 0000000..ecd905c
--- /dev/null
+++ b/themes/pub/wporg/css/components/_search-form.scss
@@ -0,0 +1,8 @@
+.search-form {
+ .search-field {
+ line-height: normal;
+ margin: 0;
+ padding: 4px 5px;
+ vertical-align: text-bottom;
+ }
+}
\ No newline at end of file
diff --git a/themes/pub/wporg/css/components/_search.scss b/themes/pub/wporg/css/components/_search.scss
new file mode 100644
index 0000000..9da0a45
--- /dev/null
+++ b/themes/pub/wporg/css/components/_search.scss
@@ -0,0 +1,11 @@
+body.search {
+ .gutters .col-12 {
+ width: 100%;
+ }
+
+ .site-main {
+ margin: 0 auto;
+ max-width: 960px;
+ padding: 0 ms( 4 ) ms( 10 );
+ }
+}
diff --git a/themes/pub/wporg/css/components/_site-content.scss b/themes/pub/wporg/css/components/_site-content.scss
new file mode 100644
index 0000000..6e8d1b5
--- /dev/null
+++ b/themes/pub/wporg/css/components/_site-content.scss
@@ -0,0 +1,36 @@
+.site-content {
+ margin: 0 auto;
+ max-width: $size__site-main;
+ padding: 0 ms( 4 );
+
+ @include breakpoint( $ms-breakpoint) {
+ padding: 0 10px ms( 10 );
+ }
+
+ @include breakpoint( 0, $ms-breakpoint) {
+ .site-main {
+ float: none;
+ margin: 0;
+ width: auto;
+ }
+ }
+
+ .home &,
+ .page &,
+ &.page {
+ margin: auto;
+ max-width: none;
+ padding: 0;
+ }
+
+ .page-title {
+ font-size: ms( 2 );
+ font-weight: 400;
+ }
+
+ .no-results {
+ margin: 0 auto ms( 10 );
+ max-width: 40em;
+ padding: 0 2rem;
+ }
+}
diff --git a/themes/pub/wporg/css/components/_site-description.scss b/themes/pub/wporg/css/components/_site-description.scss
new file mode 100644
index 0000000..2e61770
--- /dev/null
+++ b/themes/pub/wporg/css/components/_site-description.scss
@@ -0,0 +1,7 @@
+.site-description {
+ color: rgba( 255, 255, 255, 0.8);
+ font-size: ms( 2 );
+ font-weight: 300;
+ margin: -0.4rem auto 2rem;
+ text-align: center;
+}
diff --git a/themes/pub/wporg/css/components/_site-header.scss b/themes/pub/wporg/css/components/_site-header.scss
new file mode 100644
index 0000000..ec9a2ad
--- /dev/null
+++ b/themes/pub/wporg/css/components/_site-header.scss
@@ -0,0 +1,20 @@
+.site-header {
+ background: $color__wp-blue;
+ padding: 1rem 0;
+ position: relative;
+
+ .site-branding {
+ margin: 0 auto;
+ max-width: 960px;
+ padding: 0 ms( 4 );
+
+ @include breakpoint( $ms-breakpoint ) {
+ padding: 0 10px;
+ }
+ }
+
+ &.home {
+ padding: ms( 4 ) ms( 1 );
+ text-align: center;
+ }
+}
diff --git a/themes/pub/wporg/css/components/_site-title.scss b/themes/pub/wporg/css/components/_site-title.scss
new file mode 100644
index 0000000..72d69a5
--- /dev/null
+++ b/themes/pub/wporg/css/components/_site-title.scss
@@ -0,0 +1,25 @@
+.site-title {
+ display: inline-block;
+ font-size: ms( 4 );
+ font-weight: 300;
+ line-height: 1;
+ margin: 0 2rem 0 0;
+ max-width: none;
+
+ a {
+ color: #fff;
+ font-weight: 300;
+
+ &:hover,
+ &:focus,
+ &:active {
+ text-decoration: none;
+ }
+ }
+
+ .site-header.home & {
+ display: inherit;
+ font-size: ms( 12 );
+ margin: 2rem 0 1rem;
+ }
+}
diff --git a/themes/pub/wporg/css/components/_widget-area.scss b/themes/pub/wporg/css/components/_widget-area.scss
new file mode 100644
index 0000000..3d3f1ae
--- /dev/null
+++ b/themes/pub/wporg/css/components/_widget-area.scss
@@ -0,0 +1,11 @@
+.widget-area {
+ font-size: ms( -2 );
+
+ @include breakpoint( 480px, $sm ) {
+ @include flex;
+
+ .widget {
+ width: calc( 50% - #{$grid-gutter} );
+ }
+ }
+}
diff --git a/themes/pub/wporg/css/components/_wporg-footer.scss b/themes/pub/wporg/css/components/_wporg-footer.scss
new file mode 100644
index 0000000..b06097c
--- /dev/null
+++ b/themes/pub/wporg/css/components/_wporg-footer.scss
@@ -0,0 +1,112 @@
+#wporg-footer {
+ background-color: #f7f7f7;
+ border-top: 1px solid #dfdfdf;
+ clear: both;
+ margin: 0 auto;
+ overflow: auto;
+ padding: 22px 14px 65px 14px;
+
+ .wrapper {
+ clear: both;
+ margin: 0 auto;
+ max-width: 930px;
+ overflow: auto;
+ }
+
+ ul {
+ float: left;
+ margin-bottom: 20px; /* for narrow screens */
+ margin-left: 24px;
+ overflow: auto;
+ padding-left: 0; /* override other generic styles */
+ width: 135px;
+
+ @include breakpoint( 960px ) {
+ &:first-child {
+ margin-left: 0;
+ }
+ }
+
+ li {
+ color: #bbb;
+ font-size: 14px;
+ list-style-type: none;
+ margin-bottom: 1px;
+
+ a {
+ text-decoration: none;
+ text-decoration-skip-ink: none;
+
+ &:hover {
+ color: $color__wp-blue;
+ text-decoration: underline;
+ }
+ }
+ }
+ }
+
+ .cip {
+ clear: both;
+ color: #cccccc;
+ float: none;
+ font-size: ms( -2 );
+ letter-spacing: 0.3em;
+ margin: 35px auto 0 auto;
+ text-align: center;
+ text-transform: uppercase;
+
+ &.cip-image {
+ background: url(//s.w.org/style/images/codeispoetry.png?1) center center no-repeat;
+ background-size: 190px 15px;
+ height: 15px;
+ text-indent: -9999px;
+ width: 190px;
+
+ @media only screen and (-webkit-min-device-pixel-ratio: 1.5),
+ only screen and (min-resolution: 1.5dppx),
+ only screen and (min-resolution: 144dpi) {
+ background-image: url(//s.w.org/style/images/codeispoetry-2x.png?1);
+ }
+ }
+ }
+
+
+ @include breakpoint( 561px, 959px ) {
+ .wrapper {
+ max-width: 600px;
+ }
+
+ ul {
+ margin-left: 2%;
+ width: 32%;
+
+ &:nth-child(3n+1) {
+ margin-left: 0;
+ }
+
+ &:nth-child(4n) {
+ clear: both;
+ }
+ }
+ }
+
+ @include breakpoint( 0, 560px ) {
+ .wrapper {
+ max-width: 360px;
+ }
+
+ ul {
+ margin-left: 4%;
+ width: 48%;
+
+ &:nth-child(2n+1) {
+ margin-left: 0;
+ }
+
+ &:nth-child(odd) {
+ clear: both;
+ }
+ }
+ }
+
+}
diff --git a/themes/pub/wporg/css/components/_wporg-header.scss b/themes/pub/wporg/css/components/_wporg-header.scss
new file mode 100644
index 0000000..4c8d62f
--- /dev/null
+++ b/themes/pub/wporg/css/components/_wporg-header.scss
@@ -0,0 +1,393 @@
+#wporg-header {
+ background: #23282d;
+ height: 140px;
+ position: relative;
+ text-align: center;
+ width: 100%;
+
+ .wrapper {
+ margin: 0 auto;
+ max-width: 960px;
+ }
+
+ h1 {
+ display: inline-block;
+ margin: auto;
+ width: 303px;
+
+ a {
+ background: url( //s.w.org/style/images/wporg-logo.svg?3 ) center left no-repeat;
+ background-size: 290px 46px;
+ display: block;
+ height: 88px;
+ text-indent: -9999px;
+ }
+ }
+
+ h2.rosetta {
+ clear: none;
+ color: #dfdfdf;
+ font-family: Georgia, "Times New Roman", serif;
+ font-size: 30px;
+ margin: 0;
+
+ a {
+ border-bottom: none;
+ color: #dfdfdf;
+ display: block;
+ height: 52px; /* 88 header height - 36 top padding */
+ line-height: 22px;
+ padding: 0;
+
+ &:hover {
+ text-decoration: none;
+ }
+ }
+ }
+
+ #wporg-header-menu {
+ background: #23282d;
+ left: -75%;
+ list-style: none;
+ margin: 0;
+ max-width: 75%;
+ min-width: 200px;
+ position: absolute;
+ text-align: left;
+ top: 100%;
+ transition: left 0.3s;
+ z-index: 100000;
+
+ &.toggled {
+ left: 0;
+ }
+ }
+
+ ul li {
+ list-style-type:none;
+ position:relative;
+
+ a {
+ color: #eee;
+ display: block;
+ font-family: "Open Sans", Helvetica, Arial, "Liberation Sans", sans-serif;
+ font-size: 13px;
+ font-weight: 600;
+ height: 34px;
+ line-height: 34px;
+ margin: 0 4px;
+ padding: 10px 30px;
+ text-decoration: none;
+
+ &.subcurrent {
+ font-weight: bold;
+ }
+
+ @include breakpoint( sm ) {
+ height: auto;
+ }
+ }
+
+ a:hover,
+ a.current,
+ &.current-menu-item a,
+ &.current_page_parent a {
+ color: #00a0d2;
+ }
+
+ download,
+ &.download {
+ float: right;
+ height: 34px;
+ margin-right: 14px;
+ overflow: hidden;
+ padding: 0 0 34px;
+
+ @media screen and (max-width:820px) {
+ display: none;
+ }
+
+ @media screen and (max-width:768px) {
+ display: block;
+ float: none;
+ margin: 10px 20px 20px;
+ padding-bottom: 0;
+ height: auto;
+
+ a {
+ padding: 4px 10px;
+ }
+ }
+
+ a {
+ margin: 0;
+ padding: 0 16px;
+
+ &:hover {
+ color: #eee;
+ }
+ }
+
+ &.current,
+ &.current-menu-item,
+ .uparrow {
+ display: none;
+ }
+ }
+
+ .nav-submenu {
+ clip: rect(1px, 1px, 1px, 1px);
+ height: 1px;
+ left: -2px;
+ margin: 0;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+ z-index: 99999;
+
+ li a {
+ height: 24px;
+ line-height: 24px;
+ margin: 0;
+ }
+ }
+ }
+
+ #head-search {
+ @include breakpoint( $sm ) {
+ float: right;
+ margin-right: 14px;
+ padding-top: 30px;
+ }
+
+ form {
+ border-bottom: 1px solid #3f3f3f;
+ display: inline-block;
+ margin-left: 60px;
+ width: 288px;
+
+ input.text {
+ background: #191e23;
+ border: 0;
+ border-radius: 0;
+ box-sizing: content-box;
+ color: #b4b9be;
+ float: left;
+ font-family: "Open Sans", sans-serif;
+ font-size: 12px;
+ height: 24px;
+ margin: 0;
+ outline: none;
+ padding: 3px;
+ vertical-align: top;
+ width: 256px;
+
+ &::-moz-placeholder {
+ color: #eee;
+ }
+
+ @media screen and (max-width:480px) {
+ width: 216px;
+ }
+ }
+
+ .button {
+ background: #191e23 url( //s.w.org/wp-includes/images/admin-bar-sprite.png?d=20120831 ) no-repeat 2px 5px;
+ border: none;
+ border-radius: 0;
+ box-shadow: none;
+ float: left;
+ height: 30px;
+ margin: 0;
+ padding: 0;
+ text-shadow: none !important;
+ width: 26px;
+ }
+
+ @include breakpoint( 0, 480px ) {
+ width: 248px;
+ }
+
+ @include breakpoint( 480px ) {
+ margin-left: 0;
+ }
+ }
+ }
+
+ @include breakpoint( $sm ) {
+ height: 120px;
+ text-align: inherit;
+
+ h1 {
+ float: left;
+ padding-left: 10px;
+ }
+
+ h2.rosetta {
+ float: left;
+ padding: 36px 27px 0;
+ }
+
+ #headline h2 {
+ text-rendering: optimizeLegibility;
+ }
+
+ #wporg-header-menu {
+ float:left;
+ height: 46px;
+ list-style: none;
+ margin: -15px 0 0;
+ max-width: inherit;
+ min-width: 0;
+ padding: 0;
+ position: static;
+ width: 100%;
+ }
+
+ ul li {
+ float: left;
+ position:relative;
+
+ a {
+ height: 46px;
+ padding: 0 6px;
+
+ &.current ~ .uparrow {
+ border-bottom: 9px solid #f7f7f7;
+ border-left: 9px solid transparent;
+ border-right: 9px solid transparent;
+ height: 0;
+ margin: -8px auto 0 auto;
+ width: 0;
+ }
+ }
+
+ &.current-menu-item:after,
+ &.current_page_parent:after {
+ border-bottom: 9px solid #f7f7f7;
+ border-left: 9px solid transparent;
+ border-right: 9px solid transparent;
+ content: '';
+ height: 0;
+ left: 50%;
+ margin: -8px 0 0 -9px;
+ position: absolute;
+ width: 0;
+ }
+
+ &:hover .nav-submenu ~ .uparrow,
+ .nav-submenu:hover ~ .uparrow {
+ border-bottom: 9px solid #32373c;
+ border-left: 9px solid transparent;
+ border-right: 9px solid transparent;
+ height: 0;
+ margin: -10px auto 0 auto;
+ width: 0;
+ }
+
+ .nav-submenu {
+ background: #32373c;
+ border: #32373c solid 1px;
+ border-top: 0;
+ margin-top: -1px;
+ min-width: 0;
+
+ li {
+ float: none;
+
+ a {
+ height: 34px;
+ line-height: 34px;
+ }
+ }
+ }
+ }
+
+ ul.nav-menu li:hover > ul,
+ .nav-menu ul li:hover > ul,
+ ul.nav-menu .focus > ul,
+ .nav-menu .focus > ul {
+ clip: inherit;
+ height: inherit;
+ overflow: inherit;
+ width: inherit;
+ }
+
+ ul li.current-menu-item:after,
+ ul li.current_page_parent:after,
+ ul li a.current ~ .uparrow {
+ border-bottom-color: $color__wp-blue;
+ }
+ }
+}
+
+.page-download #wporg-header #download,
+.page-parent-download #wporg-header #download {
+ display: none;
+}
+
+#mobile-menu-button {
+ background: none;
+ border: none;
+ box-shadow: none;
+ display: block;
+ float: left;
+ font-family: 'dashicons';
+ font-size: 16px;
+ font-style: normal;
+ font-weight: normal;
+ left: 10px;
+ line-height: 1;
+ padding: 1px;
+ position: absolute;
+ text-align: center;
+ text-decoration: inherit;
+ text-shadow: none;
+ top: 75px;
+ transition: color .1s ease-in;
+ vertical-align: top;
+ &:before {
+ border: none;
+ box-sizing: border-box;
+ color: #888;
+ content: '\f228';
+ display: inline-block;
+ float: left;
+ font: normal 50px/1 'Dashicons';
+ margin: 0;
+ outline: none;
+ padding: 3px;
+ text-decoration: none;
+ vertical-align: middle;
+ -webkit-font-smoothing: antialiased;
+ }
+
+ @include breakpoint( $sm ) {
+ display: none;
+ }
+
+ -webkit-font-smoothing: antialiased;
+}
+
+#download-mobile {
+ background: #f7f7f7;
+ border-bottom: 1px solid #dddddd;
+
+ .wrapper {
+ padding: 20px 0;
+ text-align: center;
+ }
+
+ span.download-ready {
+ font-size: 1.6em;
+ margin: 0 0.25em;
+ }
+
+ a.download-button {
+ font-size: 1.6em;
+ height: inherit;
+ margin: 10px 0.25em;
+ padding: 10px 15px;
+ }
+}
diff --git a/themes/pub/wporg/css/generic/_generic.scss b/themes/pub/wporg/css/generic/_generic.scss
new file mode 100644
index 0000000..122159b
--- /dev/null
+++ b/themes/pub/wporg/css/generic/_generic.scss
@@ -0,0 +1,2 @@
+@import "kube";
+@import "normalize";
diff --git a/themes/pub/wporg/css/generic/_kube.scss b/themes/pub/wporg/css/generic/_kube.scss
new file mode 100644
index 0000000..fc2c5e1
--- /dev/null
+++ b/themes/pub/wporg/css/generic/_kube.scss
@@ -0,0 +1,135 @@
+// Kube. CSS & JS Framework
+// Copyright (c) 2009-2017, Imperavi LLC.
+// License: MIT
+
+[class*="col-"] {
+ margin: inherit;
+}
+
+// Grid Row
+.row {
+ @include grid-row;
+
+ // Gutters
+ &.gutters > .row {
+ margin-left: -$grid-gutter;
+
+ @include breakpoint(sm) {
+ margin-left: 0;
+ }
+
+ & > [class*='col-'] {
+ margin-left: $grid-gutter;
+
+ @include breakpoint(sm) {
+ margin-left: 0;
+ }
+ }
+ }
+ &.around {
+ @include flex-items-space-around;
+ }
+ &.between {
+ @include flex-items-space-between;
+ }
+ &.auto {
+ & .col {
+ @include flex-item-grow(1);
+ }
+ }
+}
+
+// Grid Columns
+@include generate-grid-columns;
+
+// Offset
+[class^='offset-'],
+[class*=' offset-'] {
+ @include breakpoint(sm) {
+ margin-left: 0;
+ }
+}
+
+// Ordering
+.first { order: -1; }
+.last { order: 1; }
+
+@include breakpoint(sm) {
+ .row {
+ & [class*='col-'] {
+ margin-left: 0;
+ width: 100%;
+ }
+ &.gutters {
+ & [class*='col-'] {
+ margin-bottom: $text-margin-bottom;
+ }
+ }
+ }
+ .first-sm { order: -1; }
+ .last-sm { order: 1; }
+}
+
+// Push
+.gutters .column.push-left,
+.push-left { margin-right: auto; }
+
+.gutters .column.push-right,
+.push-right { margin-left: auto; }
+
+.gutters .column.push-center,
+.push-center { margin-left: auto; margin-right: auto; }
+
+.gutters .column.push-middle,
+.push-middle { margin-top: auto; margin-bottom: auto; }
+
+.push-bottom { margin-top: auto; }
+
+@include breakpoint(sm) {
+
+ .gutters .column.push-left-sm,
+ .push-left-sm { margin-left: 0; }
+
+ .gutters .column.push-center-sm,
+ .push-center-sm { margin-left: auto; margin-right: auto;}
+
+ .push-top-sm { margin-top: 0; }
+
+}
+
+// Flex Alignment
+.align-middle {
+ @include flex-items-middle;
+}
+.align-right {
+ @include flex-items-right;
+}
+.align-center {
+ @include flex-items-center;
+}
+
+@include breakpoint(sm) {
+ .align-left-sm { @include flex-items-left; }
+}
+
+// Float
+.float-right {
+ float: right;
+}
+.float-left {
+ float: left;
+}
+
+@include breakpoint(sm) {
+ .float-right { float: none; }
+ .float-left { float: none; }
+}
+
+// Fixed
+.fixed {
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: $z-over-content;
+ width: 100%;
+}
diff --git a/themes/pub/wporg/css/generic/_normalize.scss b/themes/pub/wporg/css/generic/_normalize.scss
new file mode 100644
index 0000000..3046beb
--- /dev/null
+++ b/themes/pub/wporg/css/generic/_normalize.scss
@@ -0,0 +1,210 @@
+html {
+ font-family: sans-serif;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+
+body {
+ margin: 0;
+}
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block;
+ vertical-align: baseline;
+}
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+[hidden],
+template {
+ display: none;
+}
+
+a {
+ background-color: transparent;
+}
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+b,
+strong {
+ font-weight: bold;
+}
+
+dfn {
+ font-style: italic;
+}
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+mark {
+ background: #ff0;
+ color: #000;
+}
+
+small {
+ font-size: 80%;
+}
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+img {
+ border: 0;
+}
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+figure {
+ margin: 1em 40px;
+}
+
+hr {
+ box-sizing: content-box;
+ height: 0;
+}
+
+pre {
+ overflow: auto;
+}
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ color: inherit;
+ font: inherit;
+ margin: 0;
+}
+
+button {
+ overflow: visible;
+}
+
+button,
+select {
+ text-transform: none;
+}
+
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button;
+ cursor: pointer;
+}
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+input {
+ line-height: normal;
+}
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box;
+ padding: 0;
+}
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+
+legend {
+ border: 0;
+ padding: 0;
+}
+
+textarea {
+ overflow: auto;
+}
+
+optgroup {
+ font-weight: bold;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+td,
+th {
+ padding: 0;
+}
diff --git a/themes/pub/wporg/css/objects/_accessibility.scss b/themes/pub/wporg/css/objects/_accessibility.scss
new file mode 100644
index 0000000..75f6425
--- /dev/null
+++ b/themes/pub/wporg/css/objects/_accessibility.scss
@@ -0,0 +1,37 @@
+/* Text meant only for screen readers. */
+.screen-reader-text {
+ clip: rect(1px, 1px, 1px, 1px);
+ height: 1px;
+ overflow: hidden;
+ position: absolute !important;
+ width: 1px;
+
+ &:focus {
+ background-color: #f1f1f1;
+ border-radius: 3px;
+ box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6);
+ clip: auto !important;
+ color: #21759b;
+ display: block;
+ font-size: 0.875rem;
+ font-weight: bold;
+ height: auto;
+ left: 5px;
+ line-height: normal;
+ padding: 15px 23px 14px;
+ text-decoration: none;
+ top: 5px;
+ width: auto;
+ z-index: 100000; /* Above WP toolbar. */
+ }
+}
+
+/* Do not show the outline on the skip link target. */
+.site-content[tabindex="-1"]:focus {
+ outline: 0;
+}
+
+/* hide elements if JS isn't available. */
+.no-js .hide-if-no-js {
+ display: none;
+}
diff --git a/themes/pub/wporg/css/objects/_alignments.scss b/themes/pub/wporg/css/objects/_alignments.scss
new file mode 100644
index 0000000..0d79a55
--- /dev/null
+++ b/themes/pub/wporg/css/objects/_alignments.scss
@@ -0,0 +1,28 @@
+.alignleft {
+ display: inline;
+ float: left;
+ margin-right: 1.5em;
+}
+
+.alignright {
+ display: inline;
+ float: right;
+ margin-left: 1.5em;
+}
+
+.aligncenter {
+ clear: both;
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+@include breakpoint( 0, 480px ) {
+ .alignleft,
+ .alignright {
+ display: block;
+ float: none;
+ margin-left: auto;
+ margin-right: auto;
+ }
+}
diff --git a/themes/pub/wporg/css/objects/_buttons.scss b/themes/pub/wporg/css/objects/_buttons.scss
new file mode 100644
index 0000000..f4e840f
--- /dev/null
+++ b/themes/pub/wporg/css/objects/_buttons.scss
@@ -0,0 +1,357 @@
+// /* ----------------------------------------------------------------------------
+//
+// NOTE: If you edit this file, you should make sure that the CSS rules for
+// buttons in the following files are updated.
+//
+// * jquery-ui-dialog.css
+// * editor.css
+//
+// WordPress-style Buttons
+// =======================
+// Create a button by adding the `.button` class to an element. For backwards
+// compatibility, we support several other classes (such as `.button-secondary`),
+// but these will *not* work with the stackable classes described below.
+//
+// Button Styles
+// -------------
+// To display a primary button style, add the `.button-primary` class to a button.
+//
+// Button Sizes
+// ------------
+// Adjust a button's size by adding the `.button-large` or `.button-small` class.
+//
+// Button States
+// -------------
+// Lock the state of a button by adding the name of the pseudoclass as
+// an actual class (e.g. `.hover` for `:hover`).
+//
+//
+// TABLE OF CONTENTS:
+// ------------------
+// 1.0 - Button Layouts
+// 2.0 - Default Button Style
+// 3.0 - Primary Button Style
+// 4.0 - Button Groups
+// 5.0 - Responsive Button Styles
+//
+//---------------------------------------------------------------------------- */
+
+/* ----------------------------------------------------------------------------
+ 1.0 - Button Layouts
+---------------------------------------------------------------------------- */
+
+.button,
+.button-primary,
+.button-secondary,
+.plugin-upload-form .button-primary {
+ border: 1px solid;
+ border-radius: 3px;
+ box-sizing: border-box;
+ cursor: pointer;
+ display: inline-block;
+ font-size: ms( -2 );
+ height: ms( 4 );
+ line-height: 1;
+ margin: 0;
+ padding: 0 0.8rem;
+ text-decoration: none;
+ white-space: nowrap;
+ -webkit-appearance: none;
+}
+
+/* Remove the dotted border on :focus and the extra padding in Firefox */
+button::-moz-focus-inner,
+input[type="reset"]::-moz-focus-inner,
+input[type="button"]::-moz-focus-inner,
+input[type="submit"]::-moz-focus-inner {
+ border: 0 none;
+ padding: 0;
+}
+
+.button.button-xl,
+.button-group.button-xl .button {
+ font-size: ms( 0 );
+ height: ms( 8 );
+ line-height: 1;
+ padding: 0 1.5rem;
+}
+
+.button.button-large,
+.button-group.button-large .button {
+ height: ms( 6 );
+ line-height: 1;
+ padding: 0 1rem;
+}
+
+.button.button-small,
+.button-group.button-small .button {
+ font-size: ms( -4 );
+ height: ms( 2 );
+ line-height: 1;
+ padding: 0 0.5rem;
+}
+
+a.button,
+a.button-primary,
+a.button-secondary {
+ line-height: ms( 4 );
+}
+
+a.button.button-large,
+.button-group.button-large a.button {
+ line-height: ms( 6 );
+}
+
+a.button.button-xl,
+.button-group.button-xl a.button {
+ line-height: ms( 8 );
+}
+
+a.button.button-small,
+.button-group.button-small a.button {
+ line-height: ms( 2 );
+}
+
+.button:active,
+.button:focus {
+ outline: none;
+}
+
+.button.hidden {
+ display: none;
+}
+
+/* Style Reset buttons as simple text links */
+
+input[type="reset"],
+input[type="reset"]:hover,
+input[type="reset"]:active,
+input[type="reset"]:focus {
+ background: none;
+ border: none;
+ box-shadow: none;
+ padding: 0 2px 1px;
+ width: auto;
+}
+
+/* ----------------------------------------------------------------------------
+ 2.0 - Default Button Style
+---------------------------------------------------------------------------- */
+
+.button,
+.button:visited,
+.button-secondary {
+ background: #f7f7f7;
+ border-color: #cccccc;
+ box-shadow: 0 1px 0 #cccccc;
+ color: #555;
+ vertical-align: top;
+}
+
+p .button {
+ vertical-align: baseline;
+}
+
+.button.hover,
+.button:hover,
+.button-secondary:hover,
+.button.focus,
+.button:focus,
+.button-secondary:focus {
+ background: #fafafa;
+ border-color: #999;
+ color: #23282d;
+}
+
+.button.focus,
+.button:focus,
+.button-secondary:focus,
+.button-link:focus {
+ border-color: #5b9dd9;
+ box-shadow: 0 0 3px rgba( 0, 115, 170, 0.8 );
+}
+
+.button.active,
+.button.active:hover,
+.button:active,
+.button-secondary:active {
+ background: #eee;
+ border-color: #999;
+ box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 );
+ transform: translateY(1px);
+}
+
+.button.active:focus {
+ border-color: #5b9dd9;
+ box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ), 0 0 3px rgba( 0, 115, 170, 0.8 );
+}
+
+.button[disabled],
+.button:disabled,
+.button.disabled,
+.button-secondary[disabled],
+.button-secondary:disabled,
+.button-secondary.disabled,
+.button-disabled {
+ background: #f7f7f7 !important;
+ border-color: #ddd !important;
+ box-shadow: none !important;
+ color: #a0a5aa !important;
+ cursor: default;
+ text-shadow: 0 1px 0 #fff !important;
+ transform: none !important;
+}
+
+/* Buttons that look like links, for a cross of good semantics with the visual */
+.button-link {
+ background: none;
+ border: 0;
+ border-radius: 0;
+ box-shadow: none;
+ cursor: pointer;
+ margin: 0;
+ outline: none;
+ padding: 0;
+}
+
+.button-link:focus {
+ outline: #5b9dd9 solid 1px;
+}
+
+/* ----------------------------------------------------------------------------
+ 3.0 - Primary Button Style
+---------------------------------------------------------------------------- */
+
+.button-primary,
+.download-button,
+.plugin-upload-form .button-primary {
+ background: #0085ba;
+ border-color: #0073aa #006799 #006799;
+ box-shadow: 0 1px 0 #006799;
+ color: #fff;
+ text-decoration: none;
+ text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;
+
+ &:visited {
+ background: #0085ba;
+ border-color: #0073aa #006799 #006799;
+ box-shadow: 0 1px 0 #006799;
+ color: #fff;
+ }
+
+ &.hover,
+ &:hover,
+ &.focus,
+ &:focus {
+ background: #008ec2;
+ border-color: #006799;
+ box-shadow: 0 1px 0 #006799;
+ color: #fff;
+ }
+
+ &.focus,
+ &:focus {
+ box-shadow: 0 1px 0 #0073aa, 0 0 2px 1px #33b3db;
+ }
+
+ &.active,
+ &.active:hover,
+ &.active:focus,
+ &:active {
+ background: $color__wp-blue;
+ border-color: #006799;
+ box-shadow: inset 0 2px 0 #006799;
+ vertical-align: top;
+ }
+
+ &[disabled],
+ &:disabled,
+ &.disabled {
+ background: #008ec2 !important;
+ border-color: #007cb2 !important;
+ box-shadow: none !important;
+ color: #66c6e4 !important;
+ cursor: default;
+ text-shadow: 0 -1px 0 rgba( 0, 0, 0, 0.1 ) !important;
+ }
+
+ &.button.button-hero {
+ box-shadow: 0 2px 0 #006799;
+
+ &.active,
+ &.active:hover,
+ &.active:focus,
+ &:active {
+ box-shadow: inset 0 3px 0 #006799;
+ }
+ }
+}
+
+.button-primary-disabled {
+ background: #008ec2 !important;
+ border-color: #007cb2 !important;
+ box-shadow: none !important;
+ color: #66c6e4 !important;
+ cursor: default;
+ text-shadow: 0 -1px 0 rgba( 0, 0, 0, 0.1 ) !important;
+}
+
+
+
+/* ----------------------------------------------------------------------------
+ 4.0 - Button Groups
+---------------------------------------------------------------------------- */
+
+.button-group {
+ display: inline-block;
+ font-size: 0;
+ position: relative;
+ vertical-align: middle;
+ white-space: nowrap;
+}
+
+.button-group > .button {
+ border-radius: 0;
+ display: inline-block;
+ margin-right: -1px;
+ z-index: 10;
+}
+
+.button-group > .button-primary {
+ z-index: 100;
+}
+
+.button-group > .button:hover {
+ z-index: 20;
+}
+
+.button-group > .button:first-child {
+ border-radius: 3px 0 0 3px;
+}
+
+.button-group > .button:last-child {
+ border-radius: 0 3px 3px 0;
+}
+
+.button-group > .button:focus {
+ position: relative;
+ z-index: 1;
+}
+
+/* ----------------------------------------------------------------------------
+ 5.0 - Responsive Button Styles
+---------------------------------------------------------------------------- */
+
+@media screen and ( max-width: $ms-breakpoint ) {
+ .button,
+ .button.button-large,
+ .button.button-small,
+ .plugin-upload-form .button-primary {
+ font-size: 14px;
+ height: auto;
+ line-height: normal;
+ margin-bottom: 4px;
+ padding: 6px 14px;
+ vertical-align: middle;
+ }
+}
diff --git a/themes/pub/wporg/css/objects/_clearings.scss b/themes/pub/wporg/css/objects/_clearings.scss
new file mode 100644
index 0000000..478435c
--- /dev/null
+++ b/themes/pub/wporg/css/objects/_clearings.scss
@@ -0,0 +1,18 @@
+.clear,
+.entry-content,
+.comment-content,
+.site-header,
+.site-content,
+.site-footer,
+.home-below {
+ &:before,
+ &:after {
+ content: "";
+ display: table;
+ table-layout: fixed;
+ }
+
+ &:after {
+ clear: both;
+ }
+}
diff --git a/themes/pub/wporg/css/objects/_copy.scss b/themes/pub/wporg/css/objects/_copy.scss
new file mode 100644
index 0000000..b815900
--- /dev/null
+++ b/themes/pub/wporg/css/objects/_copy.scss
@@ -0,0 +1,23 @@
+p {
+ &.subheading {
+ color: #82878c;
+ font-size: ms( 2 );
+ font-weight: 300;
+ margin: -0.4rem auto 2rem;
+ text-align: center;
+ }
+
+ &.intro {
+ font-size: ms( 2 );
+ }
+
+ &.aside {
+ font-size: ms( -2 );
+ }
+
+ &.note {
+ font-size: ms( -4 );
+ letter-spacing: 0.01rem;
+ max-width: ms(26);
+ }
+}
\ No newline at end of file
diff --git a/themes/pub/wporg/css/objects/_inputs.scss b/themes/pub/wporg/css/objects/_inputs.scss
new file mode 100644
index 0000000..269b44a
--- /dev/null
+++ b/themes/pub/wporg/css/objects/_inputs.scss
@@ -0,0 +1,326 @@
+/* ----------------------------------------------------------------------------
+
+WordPress-style Form Elements
+=============================
+These are the current form element styles for wp-admin. Many of them include the .wp-admin class to be appended which I appended to the html tag on this pen.
+
+Form Styles
+-------------
+All form element styles are minimal and require additional styling for layout.
+
+---------------------------------------------------------------------------- */
+
+/* Include margin and padding in the width calculation of input and textarea. */
+input,
+textarea {
+ box-sizing: border-box;
+}
+
+input[type="checkbox"],
+input[type="color"],
+input[type="date"],
+input[type="datetime"],
+input[type="datetime-local"],
+input[type="email"],
+input[type="month"],
+input[type="number"],
+input[type="password"],
+input[type="radio"],
+input[type="search"],
+input[type="tel"],
+input[type="text"],
+input[type="time"],
+input[type="url"],
+input[type="week"],
+select,
+textarea {
+ background-color: #fff;
+ border: 1px solid #ddd;
+ box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.07 );
+ color: #32373c;
+ outline: none;
+ transition: 0.05s border-color ease-in-out;
+
+ &:focus {
+ border-color: #5b9dd9;
+ box-shadow: 0 0 2px rgba( 30, 140, 190, 0.8 );
+ }
+}
+
+/* rtl:ignore */
+input[type="email"],
+input[type="url"] {
+ direction: ltr;
+}
+
+/* Vertically align the number selector with the input. */
+input[type="number"] {
+ height: 28px;
+ line-height: inherit;
+}
+
+input[type="checkbox"],
+input[type="radio"] {
+ background: #fff;
+ border: 1px solid #b4b9be;
+ box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.1 );
+ clear: none;
+ color: #555;
+ cursor: pointer;
+ display: inline-block;
+ height: 16px;
+ line-height: 0;
+ margin: -4px 4px 0 0;
+ min-width: 16px;
+ outline: 0;
+ padding: 0 !important;
+ text-align: center;
+ transition: 0.05s border-color ease-in-out;
+ vertical-align: middle;
+ width: 16px;
+ -webkit-appearance: none;
+
+ &:checked:before {
+ display: inline-block;
+ float: left;
+ font: normal 21px/1 dashicons;
+ vertical-align: middle;
+ width: 16px;
+ speak: none;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ }
+
+ &.disabled,
+ &:disabled,
+ &:disabled:checked:before,
+ &.disabled:checked:before {
+ opacity: 0.7;
+ }
+}
+
+input[type="checkbox"]:checked:before {
+ color: #1e8cbe;
+ content: "\f147";
+ margin: -3px 0 0 -4px;
+}
+
+input[type="radio"] {
+ border-radius: 50%;
+ line-height: 10px;
+ margin-right: 4px;
+
+ &:checked + label:before {
+ color: #82878c;
+ }
+
+ &:checked:before {
+ background-color: #1e8cbe;
+ border-radius: 50px;
+ content: "\2022";
+ font-size: 24px;
+ height: 6px;
+ line-height: 16px;
+ margin: 4px;
+ text-indent: -9999px;
+ width: 6px;
+ }
+}
+
+input[type="reset"]:hover,
+input[type="reset"]:active {
+ color: #00a0d2;
+}
+
+/* Search */
+input[type="search"] {
+ -webkit-appearance: textfield;
+
+ &::-webkit-search-decoration {
+ display: none;
+ }
+}
+
+textarea,
+input,
+select,
+button {
+ font-family: inherit;
+ font-size: inherit;
+ font-weight: inherit;
+}
+
+textarea,
+input,
+select {
+ border-radius: 0;
+ font-size: 14px;
+ padding: 3px 5px; /* Reset mobile webkit's default element styling */
+}
+
+textarea {
+ line-height: 1.4;
+ overflow: auto;
+ padding: 2px 6px;
+ resize: vertical;
+
+ &.code {
+ line-height: 1.4;
+ padding: 4px 6px 1px 6px;
+ }
+}
+
+label {
+ cursor: pointer;
+ vertical-align: middle;
+}
+
+input,
+select {
+ margin: 1px;
+ padding: 3px 5px;
+}
+
+input.code {
+ padding-top: 6px;
+}
+
+input.readonly,
+input[readonly],
+textarea.readonly,
+textarea[readonly] {
+ background-color: #eee;
+}
+
+:-moz-placeholder,
+.wp-core-ui :-moz-placeholder {
+ color: #a9a9a9;
+}
+
+input:disabled,
+input.disabled,
+select:disabled,
+select.disabled,
+textarea:disabled,
+textarea.disabled {
+ background: rgba( 255, 255, 255, 0.5 );
+ border-color: rgba( 222, 222, 222, 0.75 );
+ box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.04 );
+ color: rgba( 51, 51, 51, 0.5 );
+}
+
+input[type="file"]:disabled,
+input[type="file"].disabled,
+input[type="range"]:disabled,
+input[type="range"].disabled {
+ background: none;
+ box-shadow: none;
+}
+
+input.large-text,
+textarea.large-text {
+ width: 99%;
+}
+
+input.regular-text {
+ width: 25em;
+}
+
+input.small-text {
+ padding: 1px 6px;
+ width: 50px;
+}
+
+input[type="number"].small-text {
+ width: 65px;
+}
+
+input.tiny-text {
+ width: 35px;
+}
+
+input[type="number"].tiny-text {
+ width: 45px;
+}
+
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+@include breakpoint( 0, 782px ) {
+ /* Input Elements */
+ textarea {
+ -webkit-appearance: none;
+ }
+
+ input[type="text"],
+ input[type="email"],
+ input[type="search"],
+ input[type="password"],
+ input[type="number"] {
+ -webkit-appearance: none;
+ padding: 6px 10px;
+ }
+
+ input[type="number"] {
+ height: 40px;
+ }
+
+ input.code {
+ padding-bottom: 5px;
+ padding-top: 10px;
+ }
+
+ input[type="checkbox"] {
+ -webkit-appearance: none;
+ padding: 10px;
+ }
+
+ input[type="checkbox"]:checked:before {
+ font: normal 30px/1 dashicons;
+ margin: -3px -5px;
+ }
+
+ input[type="radio"],
+ input[type="checkbox"] {
+ height: 25px;
+ width: 25px;
+ }
+
+ input[type="radio"]:checked:before {
+ vertical-align: middle;
+ width: 9px;
+ height: 9px;
+ margin: 7px;
+ line-height: 16px;
+ }
+
+ textarea,
+ input {
+ font-size: 16px;
+ }
+
+ input[type="text"].small-text,
+ input[type="search"].small-text,
+ input[type="password"].small-text,
+ input[type="number"].small-text,
+ input[type="number"].small-text {
+ width: auto;
+ max-width: 55px;
+ display: inline;
+ padding: 3px 6px;
+ margin: 0 3px;
+ }
+
+ input.regular-text {
+ width: 100%;
+ }
+
+ label {
+ font-size: 14px;
+ }
+
+ fieldset label {
+ display: block;
+ }
+}
diff --git a/themes/pub/wporg/css/objects/_links.scss b/themes/pub/wporg/css/objects/_links.scss
new file mode 100644
index 0000000..56d59e2
--- /dev/null
+++ b/themes/pub/wporg/css/objects/_links.scss
@@ -0,0 +1,7 @@
+a {
+ &.button:hover,
+ &.button:focus,
+ &.button:active {
+ text-decoration: none;
+ }
+}
diff --git a/themes/pub/wporg/css/objects/_notices.scss b/themes/pub/wporg/css/objects/_notices.scss
new file mode 100644
index 0000000..968ba4c
--- /dev/null
+++ b/themes/pub/wporg/css/objects/_notices.scss
@@ -0,0 +1,53 @@
+.notice {
+ background: #fff;
+ border-left: 4px solid #fff;
+ box-shadow: 0 1px 1px 0 rgba( 0, 0, 0, 0.1 );
+ margin: 1em 0;
+ padding: 1px 12px;
+
+ p {
+ font-size: ms( -2 );
+ margin: 0.5em 0;
+ padding: 2px;
+ }
+
+ &.notice-alt {
+ box-shadow: none;
+ }
+
+ &.notice-large {
+ padding: 10px 20px;
+ }
+
+ &.notice-success {
+ border-left-color: #46b450;
+ }
+
+ &.notice-success.notice-alt {
+ background-color: #ecf7ed;
+ }
+
+ &.notice-warning {
+ border-left-color: #ffb900;
+ }
+
+ &.notice-warning.notice-alt {
+ background-color: #fff8e5;
+ }
+
+ &.notice-error {
+ border-left-color: #dc3232;
+ }
+
+ &.notice-error.notice-alt {
+ background-color: #fbeaea;
+ }
+
+ &.notice-info {
+ border-left-color: #00a0d2;
+ }
+
+ &.notice-info.notice-alt {
+ background-color: #e5f5fa;
+ }
+}
diff --git a/themes/pub/wporg/css/objects/_objects.scss b/themes/pub/wporg/css/objects/_objects.scss
new file mode 100644
index 0000000..0d7cd62
--- /dev/null
+++ b/themes/pub/wporg/css/objects/_objects.scss
@@ -0,0 +1,8 @@
+@import "accessibility";
+@import "alignments";
+@import "buttons";
+@import "clearings";
+@import "copy";
+@import "inputs";
+@import "links";
+@import "notices";
diff --git a/themes/pub/wporg/css/settings/_colors.scss b/themes/pub/wporg/css/settings/_colors.scss
new file mode 100644
index 0000000..eed256f
--- /dev/null
+++ b/themes/pub/wporg/css/settings/_colors.scss
@@ -0,0 +1,25 @@
+$color__background-body: #fff;
+$color__background-screen: #f1f1f1;
+$color__background-hr: #eee;
+$color__background-button: #eee;
+$color__background-pre: #eee;
+$color__background-ins: #fff9c0;
+
+$color__text-screen: #21759b;
+$color__text-input: #32373c;
+$color__text-input-focus: #111;
+$color__link: #0073aa;
+$color__link-visited: #4ca6cf;
+$color__link-hover: #d54e21;
+$color__text-main: #32373c;
+
+$color__border: #eee;
+$color__border-button: #ccc #ccc #bbb;
+$color__border-button-hover: #ccc #bbb #aaa;
+$color__border-button-focus: #aaa #bbb #bbb;
+$color__border-input: #ddd;
+$color__border-abbr: #666;
+
+$color__wp-blue: #0073aa;
+$color__base-gray: $color__text-main;
+$color__green: #C7E8CA;
diff --git a/themes/pub/wporg/css/settings/_modular-scale.scss b/themes/pub/wporg/css/settings/_modular-scale.scss
new file mode 100644
index 0000000..f4ba5f6
--- /dev/null
+++ b/themes/pub/wporg/css/settings/_modular-scale.scss
@@ -0,0 +1,3 @@
+$ms-base: 1rem 1.143rem;
+$ms-ratio: 1.25;
+$ms-breakpoint: 737px;
diff --git a/themes/pub/wporg/css/settings/_settings.scss b/themes/pub/wporg/css/settings/_settings.scss
new file mode 100644
index 0000000..0319148
--- /dev/null
+++ b/themes/pub/wporg/css/settings/_settings.scss
@@ -0,0 +1,4 @@
+@import "colors";
+@import "modular-scale";
+@import "structure";
+@import "typography";
diff --git a/themes/pub/wporg/css/settings/_structure.scss b/themes/pub/wporg/css/settings/_structure.scss
new file mode 100644
index 0000000..526d416
--- /dev/null
+++ b/themes/pub/wporg/css/settings/_structure.scss
@@ -0,0 +1,6 @@
+$sm: 768px !default;
+$md: 1024px !default;
+$lg: 1200px !default;
+
+$size__site-main: 960px;
+$size__site-sidebar: 25%;
diff --git a/themes/pub/wporg/css/settings/_typography.scss b/themes/pub/wporg/css/settings/_typography.scss
new file mode 100644
index 0000000..3ed6c03
--- /dev/null
+++ b/themes/pub/wporg/css/settings/_typography.scss
@@ -0,0 +1,3 @@
+$type__base: 18px;
+$type__base-mobile: 16px;
+$type__lineheight: 1.5;
diff --git a/themes/pub/wporg/css/style.scss b/themes/pub/wporg/css/style.scss
new file mode 100644
index 0000000..13780b9
--- /dev/null
+++ b/themes/pub/wporg/css/style.scss
@@ -0,0 +1,29 @@
+//--------------------------------------------------------------
+// 01 Settings
+//------------------------------------------------------------*/
+@import "settings/settings";
+
+//--------------------------------------------------------------
+// 02 Tools
+//------------------------------------------------------------*/
+@import "tools/tools";
+
+//--------------------------------------------------------------
+// 03 Generic
+//------------------------------------------------------------*/
+@import "generic/generic";
+
+//--------------------------------------------------------------
+// 04 Base
+//------------------------------------------------------------*/
+@import "base/base";
+
+//--------------------------------------------------------------
+// 05 Objects
+//------------------------------------------------------------*/
+@import "objects/objects";
+
+//--------------------------------------------------------------
+// 06 Components
+//------------------------------------------------------------*/
+@import "components/components";
diff --git a/themes/pub/wporg/css/tools/_breakpoint.scss b/themes/pub/wporg/css/tools/_breakpoint.scss
new file mode 100644
index 0000000..4125614
--- /dev/null
+++ b/themes/pub/wporg/css/tools/_breakpoint.scss
@@ -0,0 +1,32 @@
+// Kube. CSS & JS Framework
+// Copyright (c) 2009-2017, Imperavi LLC.
+// License: MIT
+
+@mixin breakpoint($min: 0, $max: 0) {
+
+ $type: type-of($min);
+
+ @if $type == string
+ {
+ @if $min == sm
+ {
+ @media (max-width: $sm) { @content; }
+ }
+ @else if $min == md
+ {
+ @media (min-width: $sm) and (max-width: $md) { @content; }
+ }
+ @else if $min == lg
+ {
+ @media (min-width: $lg) { @content; }
+ }
+ }
+ @else if $type == number
+ {
+ $query: "all" !default;
+ @if $min != 0 and $max != 0 { $query: "(min-width: #{$min}) and (max-width: #{$max})"; }
+ @else if $min != 0 and $max == 0 { $query: "(min-width: #{$min})"; }
+ @else if $min == 0 and $max != 0 { $query: "(max-width: #{$max})"; }
+ @media screen and #{$query} { @content; }
+ }
+}
diff --git a/themes/pub/wporg/css/tools/_kube.scss b/themes/pub/wporg/css/tools/_kube.scss
new file mode 100644
index 0000000..afc004b
--- /dev/null
+++ b/themes/pub/wporg/css/tools/_kube.scss
@@ -0,0 +1,155 @@
+// Kube. CSS & JS Framework
+// Copyright (c) 2009-2017, Imperavi LLC.
+// License: MIT
+
+$grid-columns: 12 !default;
+$grid-gutter: 2% !default;
+$text-margin-bottom: 16px !default;
+$z-over-content: 100 !default;
+
+// display
+@mixin flex {
+ display: flex;
+}
+
+// basis
+@mixin flex-basis($width) {
+ flex-basis: $width;
+}
+
+// items wrap
+@mixin flex-items-wrap {
+ flex-wrap: wrap;
+}
+
+// items nowrap
+@mixin flex-items-nowrap {
+ flex-wrap: nowrap;
+}
+
+// items row
+@mixin flex-items-row {
+ flex-direction: row;
+}
+
+// items columns
+@mixin flex-items-column {
+ flex-direction: column;
+}
+
+// items left
+@mixin flex-items-left {
+ justify-content: flex-start;
+}
+
+// items right
+@mixin flex-items-right {
+ justify-content: flex-end;
+}
+
+// items center
+@mixin flex-items-center {
+ justify-content: center;
+}
+
+// items between
+@mixin flex-items-space-between {
+ justify-content: space-between;
+}
+
+// items around
+@mixin flex-items-space-around {
+ justify-content: space-around;
+}
+
+// items vertical top
+@mixin flex-items-top {
+ align-items: flex-start;
+}
+
+// items vertical middle
+@mixin flex-items-middle {
+ align-items: center;
+}
+
+// items vertical bottom
+@mixin flex-items-bottom {
+ align-items: flex-end;
+}
+
+// item grow
+@mixin flex-item-grow($grow: 0) {
+ flex-grow: $grow;
+}
+
+
+// item auto
+@mixin flex-item-auto {
+ flex: auto;
+}
+
+// item one
+@mixin flex-item-one {
+ flex: 1;
+}
+
+// item shrink
+@mixin flex-item-shrink($num: 0) {
+ flex-shrink: $num;
+}
+
+// item width
+@mixin flex-item-width($width) {
+ flex: 0 0 $width;
+
+ @include breakpoint(sm) {
+ flex: 0 0 100% !important;
+ }
+}
+// Make Row
+@mixin grid-row {
+ @include flex;
+ @include flex-items-row;
+ @include flex-items-wrap;
+
+ @include breakpoint(sm) {
+ @include flex-items-column;
+ @include flex-items-nowrap;
+ }
+}
+
+// Generate Columns
+@mixin generate-grid-columns {
+
+ @for $i from 1 through $grid-columns
+ {
+ .col-#{$i} {
+ width: 100% / $grid-columns * $i;
+ }
+ .offset-#{$i} {
+ $width: 100% / $grid-columns * $i;
+ margin-left: $width;
+ }
+
+ }
+
+ .gutters {
+ @for $i from 1 through $grid-columns
+ {
+ & > .col-#{$i} {
+ $width: 100% / $grid-columns * $i;
+ width: calc(#{$width} - #{$grid-gutter});
+ }
+ $n: $grid-columns / $i + 1;
+ @if $n == floor( $n ) and ($grid-columns / $i) > 1 {
+ & > .col-#{$i}:nth-child(n+#{$n}) {
+ margin-top: #{$grid-gutter};
+ }
+ }
+ & > .offset-#{$i} {
+ $width: 100% / $grid-columns * $i;
+ margin-left: calc(#{$width} + #{$grid-gutter}) !important;
+ }
+ }
+ }
+}
diff --git a/themes/pub/wporg/css/tools/_modular-scale.scss b/themes/pub/wporg/css/tools/_modular-scale.scss
new file mode 100644
index 0000000..dbab33e
--- /dev/null
+++ b/themes/pub/wporg/css/tools/_modular-scale.scss
@@ -0,0 +1,1486 @@
+// Golden ratio
+$phi : 1.618034 ;
+$golden : $phi ;
+
+$double-octave : 4 ;
+$major-twelfth : 3 ;
+$major-eleventh : 2.666666667 ;
+$major-tenth : 2.5 ;
+$octave : 2 ;
+$major-seventh : 1.875 ;
+$minor-seventh : 1.777777778 ;
+$major-sixth : 1.666666667 ;
+$minor-sixth : 1.6 ;
+$fifth : 1.5 ;
+$augmented-fourth : 1.41421 ;
+$fourth : 1.333333333 ;
+$major-third : 1.25 ;
+$minor-third : 1.2 ;
+$major-second : 1.125 ;
+$minor-second : 1.066666667 ;
+
+
+$ms-base: 1em !default;
+$ms-ratio: $golden !default;
+$ms-range: null !default;
+$ms-fluid: true !default;
+
+
+// Feature testing
+
+
+// Test if the pow() function exists
+@function ms-pow-exists() {
+ @if pow(4, 2) == 16 {
+ @return true;
+ }
+ @return false;
+}
+
+$MS-pow-exists: ms-pow-exists();
+
+// Test if MS was installed via the gem
+@function ms-gem-exists() {
+ @if ms-gem-installed() == true {
+ @return true;
+ }
+ @return false;
+}
+
+$MS-gem-exists: ms-gem-exists();
+
+// If a native exponent function doesnt exist
+// this one is needed.
+@function ms-pow($Base, $Exponent) {
+
+ // Find and remove unit.
+ // Avoids messyness with unit calculations
+ $Unit: $Base * 0 + 1;
+ $Base: $Base/$Unit;
+
+ // This function doesnt support non-interger exponents.
+ // Warn the user about why this is breaking.
+ @if round($Exponent) != $Exponent {
+ @warn "Unfortunately, you need Compass to use non-integer exponents";
+ }
+
+ // Set up the loop, priming the return with the base.
+ $Return: $Base;
+
+ // If the number is positive, multiply it.
+ @if $Exponent > 0 {
+ // Basic feedback loop as exponents
+ // are recursivley multiplied numbers.
+ @for $i from 1 to $Exponent {
+ $Return: $Return * $Base;
+ }
+ }
+
+ // If the number is 0 or negitive
+ // divide instead of multiply.
+ @else {
+ // Libsass doesnt allow negitive values in loops
+ @for $i from (-1 + 1) to (abs($Exponent) + 1) {
+ $Return: $Return / $Base;
+ }
+ }
+
+ // Return is now compounded redy to be returned.
+ // Add the unit back onto the number.
+ @return $Return * $Unit;
+}
+
+
+@function ms-calc($Value, $Base: $ms-base, $Ratio: $ms-ratio) {
+
+ // If pow exists use it.
+ // It supports non-interger values!
+ @if $MS-pow-exists {
+
+ // The formula for figuring out modular scales is:
+ // (r^v)*b
+ @return pow($Ratio, $Value) * $Base;
+ }
+
+ // If not, use ms-pow().
+ // Not as fast or capable of non-integer exponents.
+ @else {
+ @return ms-pow($Ratio, $Value) * $Base;
+ }
+}
+
+
+@function ms-reverse-list($list) {
+ @if length($list) > 1 {
+ @if nth($list, 1) > nth($list, length($list)) {
+ $MS-reversed-list: ();
+ @each $Value in $list {
+ $MS-reversed-list: join($Value, $MS-reversed-list);
+ }
+ @return $MS-reversed-list;
+ }
+ }
+ @return $list;
+}
+
+
+@function ms-generate-list($Value: 0, $Bases: $ms-base, $Ratios: $ms-ratio) {
+
+ // Create blank lists
+ $MS-list: ();
+ $MS-base-list: ();
+
+ // Loop through each ratio AND each base
+ // to generate all possibilities.
+ @each $Ratio in $Ratios {
+ @each $Base in $Bases {
+
+ // Set base variables
+ $MS-base-list: ();
+ $Base-counter: 0;
+
+ // Seed list with an initial value
+ $MS-base-list: $Base;
+
+ // Find values on a positive scale
+ @if $Value >= 0 {
+
+ // Find lower values on the scale
+ $Base-counter: -1;
+ @while ms-calc($Base-counter, $Base, $Ratio) >= nth($Bases, 1) {
+ $MS-base-list: join($MS-base-list, ms-calc($Base-counter, $Base, $Ratio));
+ $Base-counter: $Base-counter - 1;
+ }
+
+ // Ensure the list is smallest to largest
+ $MS-base-list: ms-reverse-list($MS-base-list);
+
+ // Find higher possible values on the scale
+ $Base-counter: 1;
+ @while ms-calc($Base-counter, $Base, $Ratio) <= ms-calc($Value, nth($Bases, 1), $Ratio) {
+ $MS-base-list: join($MS-base-list, ms-calc($Base-counter, $Base, $Ratio));
+ $Base-counter: $Base-counter + 1;
+ }
+ }
+
+ // Find values on a negitive scale
+ @else {
+
+ // Find lower values on the scale
+ $Base-counter: 1;
+ @while ms-calc($Base-counter, $Base, $Ratio) <= nth($Bases, 1) {
+ $MS-base-list: join($MS-base-list, ms-calc($Base-counter, $Base, $Ratio));
+ $Base-counter: $Base-counter + 1;
+ }
+
+ // Ensure the list is smallest to largest
+ $MS-base-list: ms-reverse-list($MS-base-list);
+
+ // Find higher possible values on the scale
+ $Base-counter: -1;
+ @while ms-calc($Base-counter, $Base, $Ratio) >= ms-calc($Value, nth($Bases, 1), $Ratio) {
+ $MS-calc: ms-calc($Base-counter, $Base, $Ratio);
+ // detect if the value excedes the main base value
+ @if $MS-calc < nth($Bases, 1) {
+ $MS-base-list: join($MS-base-list, $MS-calc);
+ }
+ $Base-counter: $Base-counter - 1;
+ }
+
+ // Trim outlier base.
+ @if length($Bases) > 1 {
+ @for $i from 2 through length($Bases) {
+ @if nth($MS-base-list, 1) > nth($Bases, 1) {
+ $MS-new-list: ();
+ @for $i from 2 through length($MS-base-list) {
+ $MS-new-list: join($MS-new-list, nth($MS-base-list, $i));
+ }
+ $MS-base-list: $MS-new-list;
+ }
+ }
+ }
+ }
+
+ // reverse list if its largest to smallest
+ $MS-base-list: ms-reverse-list($MS-base-list);
+
+ // Add new possibilities to the master list
+ $MS-list: append($MS-list, $MS-base-list, comma);
+
+ }
+ }
+
+ // After all the possibilities are found, output a master list
+ @return $MS-list;
+}
+
+
+// List sorting via a modified merge-sort algorythmn
+// http://en.wikipedia.org/wiki/Merge_sort
+
+@function ms-merge($A, $B) {
+
+ $Return: ();
+
+ // Some empty lists get passed through
+ // so just pass the other list throguh
+ @if length($A) == 0 {
+ @return $B;
+ }
+
+ // If lists fit next to each other, just merge them
+ // This helps performance skipping the need to check each value
+ @if nth($A, length($A)) < nth($B, 1) {
+ @return join($A, $B);
+ }
+ @if nth($B, length($B)) < nth($A, 1) {
+ @return join($B, $A);
+ }
+
+ // Counters start at 1
+ $A-counter: 1;
+ $B-counter: 1;
+
+ // Start looping through all numbers in array
+ @while $A-counter <= length($A) and $B-counter <= length($B) {
+
+ // Check if the A value is smaller
+ // Uses or equal to avoid duplicate numbers
+ @if nth($A, $A-counter) <= nth($B, $B-counter) {
+ $Return: join($Return, nth($A, $A-counter));
+ $A-counter: $A-counter + 1;
+ }
+
+ // Check if the B value is smaller
+ @else if nth($A, $A-counter) > nth($B, $B-counter) {
+ $Return: join($Return, nth($B, $B-counter));
+ $B-counter: $B-counter + 1;
+ }
+ }
+
+ // Run through remainder values in the list
+ @while $A-counter <= length($A) {
+ $Current: nth($A, $A-counter);
+ @if $Current != nth($Return, length($Return)) {
+ $Return: join($Return, $Current);
+ }
+ $A-counter: $A-counter + 1;
+ }
+ @while $B-counter <= length($B) {
+ $Current: nth($B, $B-counter);
+ @if $Current != nth($Return, length($Return)) {
+ $Return: join($Return, $Current);
+ }
+ $B-counter: $B-counter + 1;
+ }
+
+ // Done! return is now sorted and complete
+ @return $Return;
+}
+
+
+
+// Pull it all together
+@function ms-sort-list($Lists) {
+
+ $Return: ();
+
+ @each $List in $Lists {
+ @if $Return == () {
+ $Return: $List;
+ }
+ @else {
+ $Return: ms-merge($List, $Return);
+ }
+ }
+
+ // final cleanup of repeated items
+ $Last: null;
+ $New-list: ();
+ @each $Item in $Return {
+ @if $Item != $Last {
+ $New-list: join($New-list, $Item);
+ }
+ $Last: $Item;
+ }
+ $Return: $New-list;
+
+
+ @return $Return;
+}
+
+
+@function ms-round-px($Result) {
+ @if unit($Result) == 'px' {
+ @return round($Result);
+ }
+ @return $Result;
+}
+
+
+// The main function that brings it all together
+@function ms($Value: 0, $Bases: $ms-base, $Ratios: $ms-ratio) {
+
+ // If no multi-base or multi-ratio stuff is going on
+ // then just retrn the basic calculaiton
+ @if length($Bases) == 1 and length($Ratios) == 1 {
+ @return ms-round-px(ms-calc($Value, $Bases, $Ratios));
+ }
+
+ // Do calculations directly in Ruby when avalible
+ @if $MS-gem-exists {
+
+ // Remove units from bases
+ $Unit: nth($Bases, 1) * 0 + 1; // Extracts the unit from the base
+ $Unitless-Bases: ();
+ @each $Base in $Bases {
+ $Base: $Base/$Unit;
+ $Unitless-Bases: join($Unitless-Bases, $Base);
+ }
+
+ // Calculate natively in Ruby
+ @return ms-round-px(ms-gem-func($Value, $Unitless-Bases, $Ratios) * $Unit);
+ }
+
+ // Generate a list of all possible values
+ $Return: ms-generate-list($Value, $Bases, $Ratios);
+
+ // Sort the generated lists
+ $Return: ms-sort-list($Return);
+
+ // Reverse list if its negitive.
+ @if $Value < 0 {
+ $MS-new-return: ();
+ @each $i in $Return {
+ $MS-new-return: join($i, $MS-new-return);
+ }
+ $Return: $MS-new-return;
+ }
+
+ // Normalize value for counting from 1
+ // Because CSS counts things from 1
+ // So Sass does as well
+ // So I get to write fun stuff like this
+ $Value: abs($Value) + 1;
+
+ // Find the correct value in the list
+ $Return: nth($Return, $Value);
+
+ @return ms-round-px($Return);
+}
+
+// Same function, different name, for good measure.
+@function modular-scale($Value: 0, $Bases: $ms-base, $Ratios: $ms-ratio) {
+ @return ms($Value, $Bases, $Ratios);
+}
+
+
+// Outputs a list of values instead of a single value
+@function ms-list($Start: 0, $End: 0, $Bases: $ms-base, $Ratios: $ms-ratio) {
+
+ // Seed results
+ $Positive-return: ();
+ $Negitive-return: ();
+ $Return: ();
+
+ @if $End >= 0 {
+ // Generate a list of all possible values
+ $Positive-return: ms-generate-list($End, $Bases, $Ratios);
+
+ // Sort the generated lists
+ $Positive-return: ms-sort-list($Positive-return);
+
+ // Trim list
+ $Trim-list: ();
+ // If the starting value is a positive number
+ // trim the positive return from that
+ @if $Start >= 0 {
+ @for $i from ($Start + 1) through $End + 1 {
+ $Trim-list: join($Trim-list, nth($Positive-return, $i));
+ }
+ }
+ // If not, then include everything up to the end.
+ @else {
+ @for $i from 1 through $End + 1 {
+ $Trim-list: join($Trim-list, nth($Positive-return, $i));
+ }
+ }
+ $Positive-return: $Trim-list;
+ }
+
+ // Generate a negitive list
+ @if $Start < 0 {
+ // Generate a list of all possible values
+ $Negitive-return: ms-generate-list($Start, $Bases, $Ratios);
+
+ // Sort the generated lists
+ $Negitive-return: ms-sort-list($Negitive-return);
+
+ // Reverse negitive list results.
+ $MS-new-return: ();
+ @each $i in $Negitive-return {
+ $MS-new-return: join($i, $MS-new-return);
+ }
+ $Negitive-return: $MS-new-return;
+
+ // Trim list
+ $Trim-list: ();
+ @if $End < 0 {
+ @for $i from abs($End) through (abs($Start) + 2) {
+ $Trim-list: join(nth($Negitive-return, $i), $Trim-list);
+ }
+ }
+ @else {
+ @for $i from 2 through (abs($Start) + 1) {
+ $Trim-list: join(nth($Negitive-return, $i), $Trim-list);
+ }
+ }
+ $Negitive-return: $Trim-list;
+ }
+
+ // Join both positive and negitive possibilities.
+ $Return: join($Negitive-return, $Positive-return);
+
+ @return $Return;
+}
+
+
+// Stripping units is rarely a best practice and this function
+// should not be used elsewhere
+@function ms-unitless($val) {
+ $val: $val / ($val - $val + 1);
+ @return $val;
+}
+
+// Search config for values
+@function ms-range($x,$y,$range:$ms-range) {
+ @return nth(nth($range,$x),$y);
+}
+
+// Generate calc() function
+@function ms-respond-calc($value, $n, $range: $ms-range, $base: $ms-base) {
+ $val1: ms($value,$base,ms-range($n,1,$range));
+ $val2: ms($value,$base,ms-range($n+1,1,$range));
+ $break1: ms-range($n,2,$range);
+ $break2: ms-range($n+1,2,$range);
+ $diff: ms-unitless($val2) - ms-unitless($val1);
+ @if $ms-fluid {
+ @return calc( #{$val1} + #{$diff} * ( ( 100vw - #{$break1}) / #{ms-unitless($break2) - ms-unitless($break1)} ) );
+ } @else {
+ @return ms($value,$base,ms-range($n,1,$range));
+ }
+}
+
+// Main responsive mixin
+@mixin ms-respond($property, $value, $range: $ms-range, $base: $ms-base) {
+ // If there is no responsive config, just output the property and value
+ @if $ms-range == null {
+ #{$property}: ms($value,$base,$ms-ratio);
+ } @else {
+
+ // Initial value
+ #{$property}: ms($value,$base,ms-range(1,1,$range));
+
+ // Loop through breakpoints
+ @for $i from 1 through (length($range) - 1) {
+ @media (min-width: ms-range($i,2,$range)) and (max-width: ms-range($i+1,2,$range)) {
+ #{$property}: ms-respond-calc($value, $i, $range, $base);
+ }
+ }
+
+ // Final breakpoint is just an override value
+ @media (min-width: ms-range(length($range),2,$range)) {
+ #{$property}: ms($value,$base,ms-range(length($range),1,$range));
+ }
+ }
+}// Golden ratio
+$phi : 1.618034 ;
+$golden : $phi ;
+
+$double-octave : 4 ;
+$major-twelfth : 3 ;
+$major-eleventh : 2.666666667 ;
+$major-tenth : 2.5 ;
+$octave : 2 ;
+$major-seventh : 1.875 ;
+$minor-seventh : 1.777777778 ;
+$major-sixth : 1.666666667 ;
+$minor-sixth : 1.6 ;
+$fifth : 1.5 ;
+$augmented-fourth : 1.41421 ;
+$fourth : 1.333333333 ;
+$major-third : 1.25 ;
+$minor-third : 1.2 ;
+$major-second : 1.125 ;
+$minor-second : 1.066666667 ;
+
+
+$ms-base: 1em !default;
+$ms-ratio: $golden !default;
+$ms-range: null !default;
+$ms-fluid: true !default;
+
+
+// Feature testing
+
+
+// Test if the pow() function exists
+@function ms-pow-exists() {
+ @if pow(4, 2) == 16 {
+ @return true;
+ }
+ @return false;
+}
+
+$MS-pow-exists: ms-pow-exists();
+
+// Test if MS was installed via the gem
+@function ms-gem-exists() {
+ @if ms-gem-installed() == true {
+ @return true;
+ }
+ @return false;
+}
+
+$MS-gem-exists: ms-gem-exists();
+
+// If a native exponent function doesnt exist
+// this one is needed.
+@function ms-pow($Base, $Exponent) {
+
+ // Find and remove unit.
+ // Avoids messyness with unit calculations
+ $Unit: $Base * 0 + 1;
+ $Base: $Base/$Unit;
+
+ // This function doesnt support non-interger exponents.
+ // Warn the user about why this is breaking.
+ @if round($Exponent) != $Exponent {
+ @warn "Unfortunately, you need Compass to use non-integer exponents";
+ }
+
+ // Set up the loop, priming the return with the base.
+ $Return: $Base;
+
+ // If the number is positive, multiply it.
+ @if $Exponent > 0 {
+ // Basic feedback loop as exponents
+ // are recursivley multiplied numbers.
+ @for $i from 1 to $Exponent {
+ $Return: $Return * $Base;
+ }
+ }
+
+ // If the number is 0 or negitive
+ // divide instead of multiply.
+ @else {
+ // Libsass doesnt allow negitive values in loops
+ @for $i from (-1 + 1) to (abs($Exponent) + 1) {
+ $Return: $Return / $Base;
+ }
+ }
+
+ // Return is now compounded redy to be returned.
+ // Add the unit back onto the number.
+ @return $Return * $Unit;
+}
+
+
+@function ms-calc($Value, $Base: $ms-base, $Ratio: $ms-ratio) {
+
+ // If pow exists use it.
+ // It supports non-interger values!
+ @if $MS-pow-exists {
+
+ // The formula for figuring out modular scales is:
+ // (r^v)*b
+ @return pow($Ratio, $Value) * $Base;
+ }
+
+ // If not, use ms-pow().
+ // Not as fast or capable of non-integer exponents.
+ @else {
+ @return ms-pow($Ratio, $Value) * $Base;
+ }
+}
+
+
+@function ms-reverse-list($list) {
+ @if length($list) > 1 {
+ @if nth($list, 1) > nth($list, length($list)) {
+ $MS-reversed-list: ();
+ @each $Value in $list {
+ $MS-reversed-list: join($Value, $MS-reversed-list);
+ }
+ @return $MS-reversed-list;
+ }
+ }
+ @return $list;
+}
+
+
+@function ms-generate-list($Value: 0, $Bases: $ms-base, $Ratios: $ms-ratio) {
+
+ // Create blank lists
+ $MS-list: ();
+ $MS-base-list: ();
+
+ // Loop through each ratio AND each base
+ // to generate all possibilities.
+ @each $Ratio in $Ratios {
+ @each $Base in $Bases {
+
+ // Set base variables
+ $MS-base-list: ();
+ $Base-counter: 0;
+
+ // Seed list with an initial value
+ $MS-base-list: $Base;
+
+ // Find values on a positive scale
+ @if $Value >= 0 {
+
+ // Find lower values on the scale
+ $Base-counter: -1;
+ @while ms-calc($Base-counter, $Base, $Ratio) >= nth($Bases, 1) {
+ $MS-base-list: join($MS-base-list, ms-calc($Base-counter, $Base, $Ratio));
+ $Base-counter: $Base-counter - 1;
+ }
+
+ // Ensure the list is smallest to largest
+ $MS-base-list: ms-reverse-list($MS-base-list);
+
+ // Find higher possible values on the scale
+ $Base-counter: 1;
+ @while ms-calc($Base-counter, $Base, $Ratio) <= ms-calc($Value, nth($Bases, 1), $Ratio) {
+ $MS-base-list: join($MS-base-list, ms-calc($Base-counter, $Base, $Ratio));
+ $Base-counter: $Base-counter + 1;
+ }
+ }
+
+ // Find values on a negitive scale
+ @else {
+
+ // Find lower values on the scale
+ $Base-counter: 1;
+ @while ms-calc($Base-counter, $Base, $Ratio) <= nth($Bases, 1) {
+ $MS-base-list: join($MS-base-list, ms-calc($Base-counter, $Base, $Ratio));
+ $Base-counter: $Base-counter + 1;
+ }
+
+ // Ensure the list is smallest to largest
+ $MS-base-list: ms-reverse-list($MS-base-list);
+
+ // Find higher possible values on the scale
+ $Base-counter: -1;
+ @while ms-calc($Base-counter, $Base, $Ratio) >= ms-calc($Value, nth($Bases, 1), $Ratio) {
+ $MS-calc: ms-calc($Base-counter, $Base, $Ratio);
+ // detect if the value excedes the main base value
+ @if $MS-calc < nth($Bases, 1) {
+ $MS-base-list: join($MS-base-list, $MS-calc);
+ }
+ $Base-counter: $Base-counter - 1;
+ }
+
+ // Trim outlier base.
+ @if length($Bases) > 1 {
+ @for $i from 2 through length($Bases) {
+ @if nth($MS-base-list, 1) > nth($Bases, 1) {
+ $MS-new-list: ();
+ @for $i from 2 through length($MS-base-list) {
+ $MS-new-list: join($MS-new-list, nth($MS-base-list, $i));
+ }
+ $MS-base-list: $MS-new-list;
+ }
+ }
+ }
+ }
+
+ // reverse list if its largest to smallest
+ $MS-base-list: ms-reverse-list($MS-base-list);
+
+ // Add new possibilities to the master list
+ $MS-list: append($MS-list, $MS-base-list, comma);
+
+ }
+ }
+
+ // After all the possibilities are found, output a master list
+ @return $MS-list;
+}
+
+
+// List sorting via a modified merge-sort algorythmn
+// http://en.wikipedia.org/wiki/Merge_sort
+
+@function ms-merge($A, $B) {
+
+ $Return: ();
+
+ // Some empty lists get passed through
+ // so just pass the other list throguh
+ @if length($A) == 0 {
+ @return $B;
+ }
+
+ // If lists fit next to each other, just merge them
+ // This helps performance skipping the need to check each value
+ @if nth($A, length($A)) < nth($B, 1) {
+ @return join($A, $B);
+ }
+ @if nth($B, length($B)) < nth($A, 1) {
+ @return join($B, $A);
+ }
+
+ // Counters start at 1
+ $A-counter: 1;
+ $B-counter: 1;
+
+ // Start looping through all numbers in array
+ @while $A-counter <= length($A) and $B-counter <= length($B) {
+
+ // Check if the A value is smaller
+ // Uses or equal to avoid duplicate numbers
+ @if nth($A, $A-counter) <= nth($B, $B-counter) {
+ $Return: join($Return, nth($A, $A-counter));
+ $A-counter: $A-counter + 1;
+ }
+
+ // Check if the B value is smaller
+ @else if nth($A, $A-counter) > nth($B, $B-counter) {
+ $Return: join($Return, nth($B, $B-counter));
+ $B-counter: $B-counter + 1;
+ }
+ }
+
+ // Run through remainder values in the list
+ @while $A-counter <= length($A) {
+ $Current: nth($A, $A-counter);
+ @if $Current != nth($Return, length($Return)) {
+ $Return: join($Return, $Current);
+ }
+ $A-counter: $A-counter + 1;
+ }
+ @while $B-counter <= length($B) {
+ $Current: nth($B, $B-counter);
+ @if $Current != nth($Return, length($Return)) {
+ $Return: join($Return, $Current);
+ }
+ $B-counter: $B-counter + 1;
+ }
+
+ // Done! return is now sorted and complete
+ @return $Return;
+}
+
+
+
+// Pull it all together
+@function ms-sort-list($Lists) {
+
+ $Return: ();
+
+ @each $List in $Lists {
+ @if $Return == () {
+ $Return: $List;
+ }
+ @else {
+ $Return: ms-merge($List, $Return);
+ }
+ }
+
+ // final cleanup of repeated items
+ $Last: null;
+ $New-list: ();
+ @each $Item in $Return {
+ @if $Item != $Last {
+ $New-list: join($New-list, $Item);
+ }
+ $Last: $Item;
+ }
+ $Return: $New-list;
+
+
+ @return $Return;
+}
+
+
+@function ms-round-px($Result) {
+ @if unit($Result) == 'px' {
+ @return round($Result);
+ }
+ @return $Result;
+}
+
+
+// The main function that brings it all together
+@function ms($Value: 0, $Bases: $ms-base, $Ratios: $ms-ratio) {
+
+ // If no multi-base or multi-ratio stuff is going on
+ // then just retrn the basic calculaiton
+ @if length($Bases) == 1 and length($Ratios) == 1 {
+ @return ms-round-px(ms-calc($Value, $Bases, $Ratios));
+ }
+
+ // Do calculations directly in Ruby when avalible
+ @if $MS-gem-exists {
+
+ // Remove units from bases
+ $Unit: nth($Bases, 1) * 0 + 1; // Extracts the unit from the base
+ $Unitless-Bases: ();
+ @each $Base in $Bases {
+ $Base: $Base/$Unit;
+ $Unitless-Bases: join($Unitless-Bases, $Base);
+ }
+
+ // Calculate natively in Ruby
+ @return ms-round-px(ms-gem-func($Value, $Unitless-Bases, $Ratios) * $Unit);
+ }
+
+ // Generate a list of all possible values
+ $Return: ms-generate-list($Value, $Bases, $Ratios);
+
+ // Sort the generated lists
+ $Return: ms-sort-list($Return);
+
+ // Reverse list if its negitive.
+ @if $Value < 0 {
+ $MS-new-return: ();
+ @each $i in $Return {
+ $MS-new-return: join($i, $MS-new-return);
+ }
+ $Return: $MS-new-return;
+ }
+
+ // Normalize value for counting from 1
+ // Because CSS counts things from 1
+ // So Sass does as well
+ // So I get to write fun stuff like this
+ $Value: abs($Value) + 1;
+
+ // Find the correct value in the list
+ $Return: nth($Return, $Value);
+
+ @return ms-round-px($Return);
+}
+
+// Same function, different name, for good measure.
+@function modular-scale($Value: 0, $Bases: $ms-base, $Ratios: $ms-ratio) {
+ @return ms($Value, $Bases, $Ratios);
+}
+
+
+// Outputs a list of values instead of a single value
+@function ms-list($Start: 0, $End: 0, $Bases: $ms-base, $Ratios: $ms-ratio) {
+
+ // Seed results
+ $Positive-return: ();
+ $Negitive-return: ();
+ $Return: ();
+
+ @if $End >= 0 {
+ // Generate a list of all possible values
+ $Positive-return: ms-generate-list($End, $Bases, $Ratios);
+
+ // Sort the generated lists
+ $Positive-return: ms-sort-list($Positive-return);
+
+ // Trim list
+ $Trim-list: ();
+ // If the starting value is a positive number
+ // trim the positive return from that
+ @if $Start >= 0 {
+ @for $i from ($Start + 1) through $End + 1 {
+ $Trim-list: join($Trim-list, nth($Positive-return, $i));
+ }
+ }
+ // If not, then include everything up to the end.
+ @else {
+ @for $i from 1 through $End + 1 {
+ $Trim-list: join($Trim-list, nth($Positive-return, $i));
+ }
+ }
+ $Positive-return: $Trim-list;
+ }
+
+ // Generate a negitive list
+ @if $Start < 0 {
+ // Generate a list of all possible values
+ $Negitive-return: ms-generate-list($Start, $Bases, $Ratios);
+
+ // Sort the generated lists
+ $Negitive-return: ms-sort-list($Negitive-return);
+
+ // Reverse negitive list results.
+ $MS-new-return: ();
+ @each $i in $Negitive-return {
+ $MS-new-return: join($i, $MS-new-return);
+ }
+ $Negitive-return: $MS-new-return;
+
+ // Trim list
+ $Trim-list: ();
+ @if $End < 0 {
+ @for $i from abs($End) through (abs($Start) + 2) {
+ $Trim-list: join(nth($Negitive-return, $i), $Trim-list);
+ }
+ }
+ @else {
+ @for $i from 2 through (abs($Start) + 1) {
+ $Trim-list: join(nth($Negitive-return, $i), $Trim-list);
+ }
+ }
+ $Negitive-return: $Trim-list;
+ }
+
+ // Join both positive and negitive possibilities.
+ $Return: join($Negitive-return, $Positive-return);
+
+ @return $Return;
+}
+
+
+// Stripping units is rarely a best practice and this function
+// should not be used elsewhere
+@function ms-unitless($val) {
+ $val: $val / ($val - $val + 1);
+ @return $val;
+}
+
+// Search config for values
+@function ms-range($x,$y,$range:$ms-range) {
+ @return nth(nth($range,$x),$y);
+}
+
+// Generate calc() function
+@function ms-respond-calc($value, $n, $range: $ms-range, $base: $ms-base) {
+ $val1: ms($value,$base,ms-range($n,1,$range));
+ $val2: ms($value,$base,ms-range($n+1,1,$range));
+ $break1: ms-range($n,2,$range);
+ $break2: ms-range($n+1,2,$range);
+ $diff: ms-unitless($val2) - ms-unitless($val1);
+ @if $ms-fluid {
+ @return calc( #{$val1} + #{$diff} * ( ( 100vw - #{$break1}) / #{ms-unitless($break2) - ms-unitless($break1)} ) );
+ } @else {
+ @return ms($value,$base,ms-range($n,1,$range));
+ }
+}
+
+// Main responsive mixin
+@mixin ms-respond($property, $value, $range: $ms-range, $base: $ms-base) {
+ // If there is no responsive config, just output the property and value
+ @if $ms-range == null {
+ #{$property}: ms($value,$base,$ms-ratio);
+ } @else {
+
+ // Initial value
+ #{$property}: ms($value,$base,ms-range(1,1,$range));
+
+ // Loop through breakpoints
+ @for $i from 1 through (length($range) - 1) {
+ @media (min-width: ms-range($i,2,$range)) and (max-width: ms-range($i+1,2,$range)) {
+ #{$property}: ms-respond-calc($value, $i, $range, $base);
+ }
+ }
+
+ // Final breakpoint is just an override value
+ @media (min-width: ms-range(length($range),2,$range)) {
+ #{$property}: ms($value,$base,ms-range(length($range),1,$range));
+ }
+ }
+}// Golden ratio
+$phi : 1.618034 ;
+$golden : $phi ;
+
+$double-octave : 4 ;
+$major-twelfth : 3 ;
+$major-eleventh : 2.666666667 ;
+$major-tenth : 2.5 ;
+$octave : 2 ;
+$major-seventh : 1.875 ;
+$minor-seventh : 1.777777778 ;
+$major-sixth : 1.666666667 ;
+$minor-sixth : 1.6 ;
+$fifth : 1.5 ;
+$augmented-fourth : 1.41421 ;
+$fourth : 1.333333333 ;
+$major-third : 1.25 ;
+$minor-third : 1.2 ;
+$major-second : 1.125 ;
+$minor-second : 1.066666667 ;
+
+
+$ms-base: 1em !default;
+$ms-ratio: $golden !default;
+$ms-range: null !default;
+$ms-fluid: true !default;
+
+
+// Feature testing
+
+
+// Test if the pow() function exists
+@function ms-pow-exists() {
+ @if pow(4, 2) == 16 {
+ @return true;
+ }
+ @return false;
+}
+
+$MS-pow-exists: ms-pow-exists();
+
+// Test if MS was installed via the gem
+@function ms-gem-exists() {
+ @if ms-gem-installed() == true {
+ @return true;
+ }
+ @return false;
+}
+
+$MS-gem-exists: ms-gem-exists();
+
+// If a native exponent function doesnt exist
+// this one is needed.
+@function ms-pow($Base, $Exponent) {
+
+ // Find and remove unit.
+ // Avoids messyness with unit calculations
+ $Unit: $Base * 0 + 1;
+ $Base: $Base/$Unit;
+
+ // This function doesnt support non-interger exponents.
+ // Warn the user about why this is breaking.
+ @if round($Exponent) != $Exponent {
+ @warn "Unfortunately, you need Compass to use non-integer exponents";
+ }
+
+ // Set up the loop, priming the return with the base.
+ $Return: $Base;
+
+ // If the number is positive, multiply it.
+ @if $Exponent > 0 {
+ // Basic feedback loop as exponents
+ // are recursivley multiplied numbers.
+ @for $i from 1 to $Exponent {
+ $Return: $Return * $Base;
+ }
+ }
+
+ // If the number is 0 or negitive
+ // divide instead of multiply.
+ @else {
+ // Libsass doesnt allow negitive values in loops
+ @for $i from (-1 + 1) to (abs($Exponent) + 1) {
+ $Return: $Return / $Base;
+ }
+ }
+
+ // Return is now compounded redy to be returned.
+ // Add the unit back onto the number.
+ @return $Return * $Unit;
+}
+
+
+@function ms-calc($Value, $Base: $ms-base, $Ratio: $ms-ratio) {
+
+ // If pow exists use it.
+ // It supports non-interger values!
+ @if $MS-pow-exists {
+
+ // The formula for figuring out modular scales is:
+ // (r^v)*b
+ @return pow($Ratio, $Value) * $Base;
+ }
+
+ // If not, use ms-pow().
+ // Not as fast or capable of non-integer exponents.
+ @else {
+ @return ms-pow($Ratio, $Value) * $Base;
+ }
+}
+
+
+@function ms-reverse-list($list) {
+ @if length($list) > 1 {
+ @if nth($list, 1) > nth($list, length($list)) {
+ $MS-reversed-list: ();
+ @each $Value in $list {
+ $MS-reversed-list: join($Value, $MS-reversed-list);
+ }
+ @return $MS-reversed-list;
+ }
+ }
+ @return $list;
+}
+
+
+@function ms-generate-list($Value: 0, $Bases: $ms-base, $Ratios: $ms-ratio) {
+
+ // Create blank lists
+ $MS-list: ();
+ $MS-base-list: ();
+
+ // Loop through each ratio AND each base
+ // to generate all possibilities.
+ @each $Ratio in $Ratios {
+ @each $Base in $Bases {
+
+ // Set base variables
+ $MS-base-list: ();
+ $Base-counter: 0;
+
+ // Seed list with an initial value
+ $MS-base-list: $Base;
+
+ // Find values on a positive scale
+ @if $Value >= 0 {
+
+ // Find lower values on the scale
+ $Base-counter: -1;
+ @while ms-calc($Base-counter, $Base, $Ratio) >= nth($Bases, 1) {
+ $MS-base-list: join($MS-base-list, ms-calc($Base-counter, $Base, $Ratio));
+ $Base-counter: $Base-counter - 1;
+ }
+
+ // Ensure the list is smallest to largest
+ $MS-base-list: ms-reverse-list($MS-base-list);
+
+ // Find higher possible values on the scale
+ $Base-counter: 1;
+ @while ms-calc($Base-counter, $Base, $Ratio) <= ms-calc($Value, nth($Bases, 1), $Ratio) {
+ $MS-base-list: join($MS-base-list, ms-calc($Base-counter, $Base, $Ratio));
+ $Base-counter: $Base-counter + 1;
+ }
+ }
+
+ // Find values on a negitive scale
+ @else {
+
+ // Find lower values on the scale
+ $Base-counter: 1;
+ @while ms-calc($Base-counter, $Base, $Ratio) <= nth($Bases, 1) {
+ $MS-base-list: join($MS-base-list, ms-calc($Base-counter, $Base, $Ratio));
+ $Base-counter: $Base-counter + 1;
+ }
+
+ // Ensure the list is smallest to largest
+ $MS-base-list: ms-reverse-list($MS-base-list);
+
+ // Find higher possible values on the scale
+ $Base-counter: -1;
+ @while ms-calc($Base-counter, $Base, $Ratio) >= ms-calc($Value, nth($Bases, 1), $Ratio) {
+ $MS-calc: ms-calc($Base-counter, $Base, $Ratio);
+ // detect if the value excedes the main base value
+ @if $MS-calc < nth($Bases, 1) {
+ $MS-base-list: join($MS-base-list, $MS-calc);
+ }
+ $Base-counter: $Base-counter - 1;
+ }
+
+ // Trim outlier base.
+ @if length($Bases) > 1 {
+ @for $i from 2 through length($Bases) {
+ @if nth($MS-base-list, 1) > nth($Bases, 1) {
+ $MS-new-list: ();
+ @for $i from 2 through length($MS-base-list) {
+ $MS-new-list: join($MS-new-list, nth($MS-base-list, $i));
+ }
+ $MS-base-list: $MS-new-list;
+ }
+ }
+ }
+ }
+
+ // reverse list if its largest to smallest
+ $MS-base-list: ms-reverse-list($MS-base-list);
+
+ // Add new possibilities to the master list
+ $MS-list: append($MS-list, $MS-base-list, comma);
+
+ }
+ }
+
+ // After all the possibilities are found, output a master list
+ @return $MS-list;
+}
+
+
+// List sorting via a modified merge-sort algorythmn
+// http://en.wikipedia.org/wiki/Merge_sort
+
+@function ms-merge($A, $B) {
+
+ $Return: ();
+
+ // Some empty lists get passed through
+ // so just pass the other list throguh
+ @if length($A) == 0 {
+ @return $B;
+ }
+
+ // If lists fit next to each other, just merge them
+ // This helps performance skipping the need to check each value
+ @if nth($A, length($A)) < nth($B, 1) {
+ @return join($A, $B);
+ }
+ @if nth($B, length($B)) < nth($A, 1) {
+ @return join($B, $A);
+ }
+
+ // Counters start at 1
+ $A-counter: 1;
+ $B-counter: 1;
+
+ // Start looping through all numbers in array
+ @while $A-counter <= length($A) and $B-counter <= length($B) {
+
+ // Check if the A value is smaller
+ // Uses or equal to avoid duplicate numbers
+ @if nth($A, $A-counter) <= nth($B, $B-counter) {
+ $Return: join($Return, nth($A, $A-counter));
+ $A-counter: $A-counter + 1;
+ }
+
+ // Check if the B value is smaller
+ @else if nth($A, $A-counter) > nth($B, $B-counter) {
+ $Return: join($Return, nth($B, $B-counter));
+ $B-counter: $B-counter + 1;
+ }
+ }
+
+ // Run through remainder values in the list
+ @while $A-counter <= length($A) {
+ $Current: nth($A, $A-counter);
+ @if $Current != nth($Return, length($Return)) {
+ $Return: join($Return, $Current);
+ }
+ $A-counter: $A-counter + 1;
+ }
+ @while $B-counter <= length($B) {
+ $Current: nth($B, $B-counter);
+ @if $Current != nth($Return, length($Return)) {
+ $Return: join($Return, $Current);
+ }
+ $B-counter: $B-counter + 1;
+ }
+
+ // Done! return is now sorted and complete
+ @return $Return;
+}
+
+
+
+// Pull it all together
+@function ms-sort-list($Lists) {
+
+ $Return: ();
+
+ @each $List in $Lists {
+ @if $Return == () {
+ $Return: $List;
+ }
+ @else {
+ $Return: ms-merge($List, $Return);
+ }
+ }
+
+ // final cleanup of repeated items
+ $Last: null;
+ $New-list: ();
+ @each $Item in $Return {
+ @if $Item != $Last {
+ $New-list: join($New-list, $Item);
+ }
+ $Last: $Item;
+ }
+ $Return: $New-list;
+
+
+ @return $Return;
+}
+
+
+@function ms-round-px($Result) {
+ @if unit($Result) == 'px' {
+ @return round($Result);
+ }
+ @return $Result;
+}
+
+
+// The main function that brings it all together
+@function ms($Value: 0, $Bases: $ms-base, $Ratios: $ms-ratio) {
+
+ // If no multi-base or multi-ratio stuff is going on
+ // then just retrn the basic calculaiton
+ @if length($Bases) == 1 and length($Ratios) == 1 {
+ @return ms-round-px(ms-calc($Value, $Bases, $Ratios));
+ }
+
+ // Do calculations directly in Ruby when avalible
+ @if $MS-gem-exists {
+
+ // Remove units from bases
+ $Unit: nth($Bases, 1) * 0 + 1; // Extracts the unit from the base
+ $Unitless-Bases: ();
+ @each $Base in $Bases {
+ $Base: $Base/$Unit;
+ $Unitless-Bases: join($Unitless-Bases, $Base);
+ }
+
+ // Calculate natively in Ruby
+ @return ms-round-px(ms-gem-func($Value, $Unitless-Bases, $Ratios) * $Unit);
+ }
+
+ // Generate a list of all possible values
+ $Return: ms-generate-list($Value, $Bases, $Ratios);
+
+ // Sort the generated lists
+ $Return: ms-sort-list($Return);
+
+ // Reverse list if its negitive.
+ @if $Value < 0 {
+ $MS-new-return: ();
+ @each $i in $Return {
+ $MS-new-return: join($i, $MS-new-return);
+ }
+ $Return: $MS-new-return;
+ }
+
+ // Normalize value for counting from 1
+ // Because CSS counts things from 1
+ // So Sass does as well
+ // So I get to write fun stuff like this
+ $Value: abs($Value) + 1;
+
+ // Find the correct value in the list
+ $Return: nth($Return, $Value);
+
+ @return ms-round-px($Return);
+}
+
+// Same function, different name, for good measure.
+@function modular-scale($Value: 0, $Bases: $ms-base, $Ratios: $ms-ratio) {
+ @return ms($Value, $Bases, $Ratios);
+}
+
+
+// Outputs a list of values instead of a single value
+@function ms-list($Start: 0, $End: 0, $Bases: $ms-base, $Ratios: $ms-ratio) {
+
+ // Seed results
+ $Positive-return: ();
+ $Negitive-return: ();
+ $Return: ();
+
+ @if $End >= 0 {
+ // Generate a list of all possible values
+ $Positive-return: ms-generate-list($End, $Bases, $Ratios);
+
+ // Sort the generated lists
+ $Positive-return: ms-sort-list($Positive-return);
+
+ // Trim list
+ $Trim-list: ();
+ // If the starting value is a positive number
+ // trim the positive return from that
+ @if $Start >= 0 {
+ @for $i from ($Start + 1) through $End + 1 {
+ $Trim-list: join($Trim-list, nth($Positive-return, $i));
+ }
+ }
+ // If not, then include everything up to the end.
+ @else {
+ @for $i from 1 through $End + 1 {
+ $Trim-list: join($Trim-list, nth($Positive-return, $i));
+ }
+ }
+ $Positive-return: $Trim-list;
+ }
+
+ // Generate a negitive list
+ @if $Start < 0 {
+ // Generate a list of all possible values
+ $Negitive-return: ms-generate-list($Start, $Bases, $Ratios);
+
+ // Sort the generated lists
+ $Negitive-return: ms-sort-list($Negitive-return);
+
+ // Reverse negitive list results.
+ $MS-new-return: ();
+ @each $i in $Negitive-return {
+ $MS-new-return: join($i, $MS-new-return);
+ }
+ $Negitive-return: $MS-new-return;
+
+ // Trim list
+ $Trim-list: ();
+ @if $End < 0 {
+ @for $i from abs($End) through (abs($Start) + 2) {
+ $Trim-list: join(nth($Negitive-return, $i), $Trim-list);
+ }
+ }
+ @else {
+ @for $i from 2 through (abs($Start) + 1) {
+ $Trim-list: join(nth($Negitive-return, $i), $Trim-list);
+ }
+ }
+ $Negitive-return: $Trim-list;
+ }
+
+ // Join both positive and negitive possibilities.
+ $Return: join($Negitive-return, $Positive-return);
+
+ @return $Return;
+}
+
+
+// Stripping units is rarely a best practice and this function
+// should not be used elsewhere
+@function ms-unitless($val) {
+ $val: $val / ($val - $val + 1);
+ @return $val;
+}
+
+// Search config for values
+@function ms-range($x,$y,$range:$ms-range) {
+ @return nth(nth($range,$x),$y);
+}
+
+// Generate calc() function
+@function ms-respond-calc($value, $n, $range: $ms-range, $base: $ms-base) {
+ $val1: ms($value,$base,ms-range($n,1,$range));
+ $val2: ms($value,$base,ms-range($n+1,1,$range));
+ $break1: ms-range($n,2,$range);
+ $break2: ms-range($n+1,2,$range);
+ $diff: ms-unitless($val2) - ms-unitless($val1);
+ @if $ms-fluid {
+ @return calc( #{$val1} + #{$diff} * ( ( 100vw - #{$break1}) / #{ms-unitless($break2) - ms-unitless($break1)} ) );
+ } @else {
+ @return ms($value,$base,ms-range($n,1,$range));
+ }
+}
+
+// Main responsive mixin
+@mixin ms-respond($property, $value, $range: $ms-range, $base: $ms-base) {
+ // If there is no responsive config, just output the property and value
+ @if $ms-range == null {
+ #{$property}: ms($value,$base,$ms-ratio);
+ } @else {
+
+ // Initial value
+ #{$property}: ms($value,$base,ms-range(1,1,$range));
+
+ // Loop through breakpoints
+ @for $i from 1 through (length($range) - 1) {
+ @media (min-width: ms-range($i,2,$range)) and (max-width: ms-range($i+1,2,$range)) {
+ #{$property}: ms-respond-calc($value, $i, $range, $base);
+ }
+ }
+
+ // Final breakpoint is just an override value
+ @media (min-width: ms-range(length($range),2,$range)) {
+ #{$property}: ms($value,$base,ms-range(length($range),1,$range));
+ }
+ }
+}
diff --git a/themes/pub/wporg/css/tools/_tools.scss b/themes/pub/wporg/css/tools/_tools.scss
new file mode 100644
index 0000000..46bd9ca
--- /dev/null
+++ b/themes/pub/wporg/css/tools/_tools.scss
@@ -0,0 +1,3 @@
+@import "breakpoint";
+@import "kube";
+@import "modular-scale";
diff --git a/themes/pub/wporg/css/trumps/_trumps.scss b/themes/pub/wporg/css/trumps/_trumps.scss
new file mode 100644
index 0000000..e69de29
diff --git a/themes/pub/wporg/footer-wporg.php b/themes/pub/wporg/footer-wporg.php
new file mode 100644
index 0000000..5c5c46b
--- /dev/null
+++ b/themes/pub/wporg/footer-wporg.php
@@ -0,0 +1,14 @@
+
+
+
+ esc_html__( 'Primary', 'wporg' ),
+ ) );
+
+ /*
+ * Switch default core markup for search form, comment form, and comments
+ * to output valid HTML5.
+ */
+ add_theme_support( 'html5', array(
+ 'search-form',
+ 'comment-form',
+ 'comment-list',
+ 'gallery',
+ 'caption',
+ ) );
+
+ // Set up the WordPress core custom background feature.
+ add_theme_support( 'custom-background', apply_filters( 'wporg_custom_background_args', array(
+ 'default-color' => 'ffffff',
+ 'default-image' => '',
+ ) ) );
+
+ add_theme_support( 'wp4-styles' );
+}
+add_action( 'after_setup_theme', __NAMESPACE__ . '\setup' );
+
+/**
+ * Sets the document title.
+ *
+ * The global $pagetitle is used by the global w.org header.
+ *
+ * @global string $pagetitle
+ */
+function set_document_title() {
+ $GLOBALS['pagetitle'] = wp_get_document_title();
+}
+add_action( 'template_redirect', __NAMESPACE__ . '\set_document_title' );
+
+/**
+ * Set the separator for the document title.
+ *
+ * @return string Document title separator.
+ */
+function document_title_separator() {
+ return '|';
+}
+add_filter( 'document_title_separator', __NAMESPACE__ . '\document_title_separator' );
+
+/**
+ * Set the content width in pixels, based on the theme's design and stylesheet.
+ *
+ * Priority 0 to make it available to lower priority callbacks.
+ *
+ * @global int $content_width
+ */
+function content_width() {
+ $GLOBALS['content_width'] = apply_filters( 'wporg_content_width', 612 );
+}
+add_action( 'after_setup_theme', __NAMESPACE__ . '\content_width', 0 );
+
+/**
+ * Enqueue scripts and styles.
+ */
+function scripts() {
+ $script_debug = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG;
+ $suffix = $script_debug ? '' : '.min';
+
+ // Concatenates core scripts when possible.
+ if ( ! $script_debug ) {
+ $GLOBALS['concatenate_scripts'] = true;
+ }
+
+ wp_enqueue_style( 'wporg-style', get_theme_file_uri( '/css/style.css' ), [ 'dashicons', 'open-sans' ], '20180702' );
+ wp_style_add_data( 'wporg-style', 'rtl', 'replace' );
+
+ // phpcs:ignore Squiz.PHP.CommentedOutCode.Found, Squiz.Commenting.InlineComment.InvalidEndChar
+ // wp_enqueue_script( 'wporg-navigation', get_template_directory_uri() . "/js/navigation$suffix.js", array(), '20151215', true );
+ wp_enqueue_script( 'wporg-plugins-skip-link-focus-fix', get_template_directory_uri() . "/js/skip-link-focus-fix$suffix.js", array(), '20151215', true );
+
+ if ( ! is_front_page() && is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
+ wp_enqueue_script( 'comment-reply' );
+ }
+
+ // No Jetpack scripts needed.
+ add_filter( 'jetpack_implode_frontend_css', '__return_false' );
+ wp_dequeue_script( 'devicepx' );
+
+ /*
+ * No Grofiles needed.
+ *
+ * Enqueued so that it's overridden in the global footer.
+ */
+ wp_register_script( 'grofiles-cards', false );
+ wp_enqueue_script( 'grofiles-cards' );
+}
+add_action( 'wp_enqueue_scripts', __NAMESPACE__ . '\scripts' );
+
+/**
+ * Filters an enqueued style's fully-qualified URL.
+ *
+ * @param string $src The source URL of the enqueued style.
+ * @param string $handle The style's registered handle.
+ * @return string
+ */
+function style_src( $src, $handle ) {
+ $cdn_handles = [
+ 'wporg-style',
+ 'dashicons',
+ ];
+
+ if ( defined( 'WPORG_SANDBOXED' ) && WPORG_SANDBOXED ) {
+ return $src;
+ }
+
+ // Use CDN url.
+ if ( in_array( $handle, $cdn_handles, true ) ) {
+ $src = str_replace( get_home_url(), 'https://s.w.org', $src );
+ }
+
+ // Remove version argument.
+ if ( in_array( $handle, [ 'open-sans' ], true ) ) {
+ $src = remove_query_arg( 'ver', $src );
+ }
+
+ return $src;
+}
+add_filter( 'style_loader_src', __NAMESPACE__ . '\style_src', 10, 2 );
+
+/**
+ * Add postMessage support for site title and description for the Theme Customizer.
+ *
+ * @param \WP_Customize_Manager $wp_customize Theme Customizer object.
+ */
+function customize_register( $wp_customize ) {
+ $wp_customize->get_setting( 'blogname' )->transport = 'postMessage';
+ $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage';
+}
+add_action( 'customize_register', __NAMESPACE__ . '\customize_register' );
+
+/**
+ * Binds JS handlers to make Theme Customizer preview reload changes asynchronously.
+ */
+function customize_preview_js() {
+ wp_enqueue_script( 'wporg_plugins_customizer', get_template_directory_uri() . '/js/customizer.js', array( 'customize-preview' ), '20151215', true );
+}
+add_action( 'customize_preview_init', __NAMESPACE__ . '\customize_preview_js' );
+
+
+/**
+ * Adds hreflang link attributes to WordPress.org pages.
+ *
+ * @link https://support.google.com/webmasters/answer/189077?hl=en Use hreflang for language and regional URLs.
+ * @link https://sites.google.com/site/webmasterhelpforum/en/faq-internationalisation FAQ: Internationalisation.
+ */
+function hreflang_link_attributes() {
+ // No hreflangs on 404 pages.
+ if ( is_404() ) {
+ return;
+ }
+
+ wp_cache_add_global_groups( array( 'locale-associations' ) );
+
+ // Google doesn't have support for a whole lot of languages and throws errors about it,
+ // so we exclude them, as we're otherwise outputting data that isn't used at all.
+ $unsupported_languages = array(
+ 'arq',
+ 'art',
+ 'art-xemoji',
+ 'ary',
+ 'ast',
+ 'az-ir',
+ 'azb',
+ 'bcc',
+ 'ff-sn',
+ 'frp',
+ 'fuc',
+ 'fur',
+ 'haz',
+ 'ido',
+ 'io',
+ 'kab',
+ 'li',
+ 'li-nl',
+ 'lmo',
+ 'me',
+ 'me-me',
+ 'rhg',
+ 'rup',
+ 'sah',
+ 'sc-it',
+ 'scn',
+ 'skr',
+ 'srd',
+ 'szl',
+ 'tah',
+ 'twd',
+ 'ty-tj',
+ 'tzm',
+ );
+
+ $sites = wp_cache_get( 'local-sites', 'locale-associations' );
+
+ if ( false === $sites ) {
+ global $wpdb;
+
+ // phpcs:ignore WordPress.VIP.DirectDatabaseQuery.DirectQuery
+ $sites = $wpdb->get_results( 'SELECT locale, subdomain FROM locales', OBJECT_K );
+ if ( ! $sites ) {
+ return;
+ }
+
+ require_once GLOTPRESS_LOCALES_PATH;
+
+ foreach ( $sites as $site ) {
+ $gp_locale = \GP_Locales::by_field( 'wp_locale', $site->locale );
+ if ( ! $gp_locale ) {
+ unset( $sites[ $site->locale ] );
+ continue;
+ }
+
+ // Skip non-existing subdomains, e.g. 'de_CH_informal'.
+ if ( false !== strpos( $site->subdomain, '_' ) ) {
+ unset( $sites[ $site->locale ] );
+ continue;
+ }
+
+ if ( isset( $gp_locale->slug ) && ! in_array( $gp_locale->slug, $unsupported_languages ) ) {
+ $sites[ $site->locale ]->hreflang = $gp_locale->slug;
+ } else {
+ unset( $sites[ $site->locale ] );
+ }
+ }
+
+ // Add en_US to the list of sites.
+ $sites['en_US'] = (object) array(
+ 'locale' => 'en_US',
+ 'hreflang' => 'en',
+ 'subdomain' => '',
+ );
+
+ // Add x-default to the list of sites.
+ $sites['x-default'] = (object) array(
+ 'locale' => 'x-default',
+ 'hreflang' => 'x-default',
+ 'subdomain' => '',
+ );
+
+ uasort( $sites, function( $a, $b ) {
+ return strcasecmp( $a->hreflang, $b->hreflang );
+ } );
+
+ wp_cache_set( 'local-sites', $sites, 'locale-associations' );
+ }
+
+ if ( is_singular() ) {
+ $path = parse_url( get_permalink(), PHP_URL_PATH );
+ } else {
+ // WordPress doesn't have a good way to get the canonical version of non-singular urls.
+ $path = $_SERVER['REQUEST_URI']; // phpcs:ignore
+ }
+
+ foreach ( $sites as $site ) {
+ $url = sprintf(
+ 'https://%swordpress.org%s',
+ $site->subdomain ? "{$site->subdomain}." : '',
+ $path
+ );
+
+ printf(
+ '' . "\n",
+ esc_url( $url ),
+ esc_attr( $site->hreflang )
+ );
+ }
+}
+add_action( 'wp_head', __NAMESPACE__ . '\hreflang_link_attributes' );
+
+/**
+ * Custom template tags.
+ */
+require_once get_template_directory() . '/inc/template-tags.php';
diff --git a/themes/pub/wporg/header-page.php b/themes/pub/wporg/header-page.php
new file mode 100644
index 0000000..2b8e016
--- /dev/null
+++ b/themes/pub/wporg/header-page.php
@@ -0,0 +1,19 @@
+ section and everything up till
+ *
+ * @link https://codex.wordpress.org/Template_Hierarchy
+ *
+ * @package WordPressdotorg\Theme
+ */
+
+namespace WordPressdotorg\Theme;
+
+get_template_part( 'header', 'wporg' );
+?>
+
+
+
+
diff --git a/themes/pub/wporg/header-wporg.php b/themes/pub/wporg/header-wporg.php
new file mode 100644
index 0000000..b5c0593
--- /dev/null
+++ b/themes/pub/wporg/header-wporg.php
@@ -0,0 +1,14 @@
+ section and the wp.org header.
+ *
+ * @link https://codex.wordpress.org/Template_Hierarchy
+ *
+ * @package WordPressdotorg\Theme
+ */
+
+namespace WordPressdotorg\Theme;
+
+require WPORGPATH . 'header.php';
diff --git a/themes/pub/wporg/header.php b/themes/pub/wporg/header.php
new file mode 100644
index 0000000..38ec122
--- /dev/null
+++ b/themes/pub/wporg/header.php
@@ -0,0 +1,22 @@
+ section and everything up till
+ *
+ * @link https://codex.wordpress.org/Template_Hierarchy
+ *
+ * @package WordPressdotorg\Theme
+ */
+
+namespace WordPressdotorg\Theme;
+
+global $wporg_global_header_options;
+if ( !isset( $wporg_global_header_options['in_wrapper'] ) )
+ $wporg_global_header_options['in_wrapper'] = '';
+$wporg_global_header_options['in_wrapper'] .= '
' . esc_html__( 'Skip to content', 'wporg' ) . '';
+
+get_template_part( 'header', 'wporg' );
+?>
+
+
diff --git a/themes/pub/wporg/images/wp-logo-blue-trans-blur.png b/themes/pub/wporg/images/wp-logo-blue-trans-blur.png
new file mode 100644
index 0000000..28d3e0b
Binary files /dev/null and b/themes/pub/wporg/images/wp-logo-blue-trans-blur.png differ
diff --git a/themes/pub/wporg/images/wp-logo-blue.png b/themes/pub/wporg/images/wp-logo-blue.png
new file mode 100644
index 0000000..74eba26
Binary files /dev/null and b/themes/pub/wporg/images/wp-logo-blue.png differ
diff --git a/themes/pub/wporg/inc/footer.php b/themes/pub/wporg/inc/footer.php
new file mode 100644
index 0000000..a24903b
--- /dev/null
+++ b/themes/pub/wporg/inc/footer.php
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+ ' . get_the_title() . '' + ); + } else { + printf( // WPCS: XSS OK. + /* translators: 1: comment count number, 2: title. */ + esc_html( _nx( '%1$s thought on “%2$s”', '%1$s thoughts on “%2$s”', $comment_count, 'comments title', 'wporg' ) ), + number_format_i18n( $comment_count ), + '' . get_the_title() . '' + ); + } + ?> +
+ + + ++ 'ol', + 'short_ping' => true, + ) ); + ?> +
+ + + + 'button button-secondary button-large', + ) ); + ?> + +