diff --git a/404.html b/404.html new file mode 100644 index 0000000000000..20c6a08ff47fe --- /dev/null +++ b/404.html @@ -0,0 +1,600 @@ + + + + + +Page Not Found - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + +
+ + +
+ + + + + +
+ +
+

Page Not Found +

+ + + +
+ + +
+

Sorry, but the page you were trying to view does not exist.

+ + +
+ + + + + + +
+ + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 50f45274a3307..0000000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,1622 +0,0 @@ -## Unreleased - -### Bug Fixes - -- Fix unlisted YouTube video embeds in documentation/test sites. [#3649](https://github.com/mmistakes/minimal-mistakes/issues/3649) -- Fix error in Algolia search script when returning a hit that without `html` and `hightlight.html`. [#3101](https://github.com/mmistakes/minimal-mistakes/issues/3101) [#3102](https://github.com/mmistakes/minimal-mistakes/pull/3102) -- Fix links to Font Awesome gallery. [#3599](https://github.com/mmistakes/minimal-mistakes/pull/3599) -- Fix GreedyNav.js attribution link. [#3553](https://github.com/mmistakes/minimal-mistakes/pull/3553) -- Fix typo about loading JavaScript in layout documentation. [#3350](https://github.com/mmistakes/minimal-mistakes/pull/3350) -- Fix inline code style not applied to stylized text. [#3253](https://github.com/mmistakes/minimal-mistakes/pull/3253) -- Fix documentation typos. [#3232](https://github.com/mmistakes/minimal-mistakes/pull/3232) [#3318](https://github.com/mmistakes/minimal-mistakes/pull/3318) -- Fix Keybase icon in author sidebar. [#3221](https://github.com/mmistakes/minimal-mistakes/pull/3221) -- Fix sort order of Staticman comments when data files aren't named alphabetically. [#3184](https://github.com/mmistakes/minimal-mistakes/pull/3184) -- Fix `layout: compress` issue with HTML comment in video include. [#3117](https://github.com/mmistakes/minimal-mistakes/pull/3117) -- Add Magnific Popup class to anchors that only contain an `img` element. [#3111](https://github.com/mmistakes/minimal-mistakes/issues/3111) [#3114](https://github.com/mmistakes/minimal-mistakes/pull/3114) -- Enable Magnific Popups on anchors only when they wrap an `` element. [#3114](https://github.com/mmistakes/minimal-mistakes/pull/3114) -- Fix heading level of related posts section from `h4` to `h2` to improve accessibility and SEO. [#3064](https://github.com/mmistakes/minimal-mistakes/pull/3064) -- Fix grammar error in German localized UI text string. [#3063](https://github.com/mmistakes/minimal-mistakes/pull/3063) -- Remove site.url from first breadcrumb link. [#3051](https://github.com/mmistakes/minimal-mistakes/pull/3051) - -### Enhancements - -- Update breadcrumbs conditional to enable/disable them via Front Matter on pages using `layout: single`. [#3096](https://github.com/mmistakes/minimal-mistakes/pull/3096) [#3669](https://github.com/mmistakes/minimal-mistakes/pull/3669) -- Remove Internet Explorer 9 upgrade notice. [#3666](https://github.com/mmistakes/minimal-mistakes/pull/3666) -- Add Kiswahili localized UI text strings. [#3489](https://github.com/mmistakes/minimal-mistakes/pull/3489) -- Exclude `main.scss` from Lunr search index. -- Allow `site.pages` to be indexed and searched via Lunr. [#3352](https://github.com/mmistakes/minimal-mistakes/pull/3352) -- Update jQuery to v3.6.0. [#3254](https://github.com/mmistakes/minimal-mistakes/pull/3254) -- Use notice `` colors for blockquotes that have `notice--` classes applied. [#3140](https://github.com/mmistakes/minimal-mistakes/pull/3140) [#3068](https://github.com/mmistakes/minimal-mistakes/issues/3068) -- Add sameAs itemprop to author link. [#3087](https://github.com/mmistakes/minimal-mistakes/pull/3087) -- Automatically close invalid PRs using GitHub Actions. [#3313](https://github.com/mmistakes/minimal-mistakes/pull/3313) -- Update and add missing Brazilian Portuguese translations. [#3204](https://github.com/mmistakes/minimal-mistakes/pull/3204) -- Add link to documentation clarifying how to add plugins. [#3181](https://github.com/mmistakes/minimal-mistakes/pull/3181) -- Add optional label attribute for utterances comments. [#3128](https://github.com/mmistakes/minimal-mistakes/pull/3128) -- Bump path-parse from 1.0.6 to 1.0.7. [#3116](https://github.com/mmistakes/minimal-mistakes/pull/3116) -- Add missing Danish translations. [#3095](https://github.com/mmistakes/minimal-mistakes/pull/3095) -- Add ARIA role to search forms. [#3086](https://github.com/mmistakes/minimal-mistakes/pull/3086) -- Add overflow scroll bar to sticky table of contents that are taller than the viewport's height. [#2874](https://github.com/mmistakes/minimal-mistakes/pull/2874) -- Add Microformats markup. [#3052](https://github.com/mmistakes/minimal-mistakes/pull/3052) -- Add instructions on how to unminify `main.js` for easier browser debugging. [#3055](https://github.com/mmistakes/minimal-mistakes/pull/3055) - -## [4.24.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.24.0) - -### Bug Fixes - -- Fix README text for Gumshoejs license. [#3024](https://github.com/mmistakes/minimal-mistakes/pull/3024) -- Remove `tabindex="-1"` from `input` elements in `search.html` layout to allow them to be accessible by keyboard. [#2982](https://github.com/mmistakes/minimal-mistakes/issues/2982) -- Fix broken sidebar image in sample post. [#3013](https://github.com/mmistakes/minimal-mistakes/issues/3013) -- Fix broken links in Upgrading documentation. [#3004](https://github.com/mmistakes/minimal-mistakes/issues/3004) - -### Enhancements - -- Remove IE9 flexbox fallback. [#3042](https://github.com/mmistakes/minimal-mistakes/pull/3042) -- Remove `h2` from skip links navigation as it is not important for site structure. [#3012](https://github.com/mmistakes/minimal-mistakes/pull/3012) -- Loads Font Awesome asynchronously. [#2967](https://github.com/mmistakes/minimal-mistakes/pull/2967) -- Replace custom search icon SVG with Font Awesome icon. [#2774](https://github.com/mmistakes/minimal-mistakes/pull/2774) -- Adds support for giscus comments. [#3022](https://github.com/mmistakes/minimal-mistakes/pull/3022) - -## [4.23.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.23.0) - -### Enhancements - -- Add Arabic (عربي) localized UI text strings. [#2936](https://github.com/mmistakes/minimal-mistakes/pull/2936) -- Update onchange and uglify-js dependencies. -- Document head and footer `custom.html` includes. [#2815](https://github.com/mmistakes/minimal-mistakes/pull/2815) -- Color notices based on skin colors instead of fixed values. [#2887](https://github.com/mmistakes/minimal-mistakes/pull/2887) -- Add configurable datetime format. [#2844](https://github.com/mmistakes/minimal-mistakes/pull/2844) -- Add Baidu site verification [#2830](https://github.com/mmistakes/minimal-mistakes/pull/2830) -- Add `alt` attribute to site logo. [#2529](https://github.com/mmistakes/minimal-mistakes/issues/2529) [#2824](https://github.com/mmistakes/minimal-mistakes/issues/2824) - -### Bug Fixes - -- Fix menu toggle to properly show close icon when open. -- Fix Jekyll environment note in configuration documentation. [#2912](https://github.com/mmistakes/minimal-mistakes/issues/2912) -- Fix typo in Helpers documentation. [#2940](https://github.com/mmistakes/minimal-mistakes/pull/2940) -- Remove all references to official public Staticman API instance. [#2818](https://github.com/mmistakes/minimal-mistakes/issues/2818) [#2831](https://github.com/mmistakes/minimal-mistakes/pull/2831) -- Remove Google Search CSS. [#2852](https://github.com/mmistakes/minimal-mistakes/issues/2852) [#2855](https://github.com/mmistakes/minimal-mistakes/pull/2855) - -## [4.22.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.22.0) - -### Bug Fixes - -- Remove Google Search script from `404.md`. [#2597](https://github.com/mmistakes/minimal-mistakes/issues/2597) [#2737](https://github.com/mmistakes/minimal-mistakes/pull/2737) [#2789](https://github.com/mmistakes/minimal-mistakes/pull/2789) -- Fix Font Awesome icon color in `contrast`, `dark`, `mint`, `neon`, `plum`, and `sunrise` skins. [#2724](https://github.com/mmistakes/minimal-mistakes/issues/2724) - -### Enhancements - -- Allow custom sorting for collections. [#2723](https://github.com/mmistakes/minimal-mistakes/pull/2723) -- Use `sort_natural` instead of custom Liquid logic to sort tags and categories. [#2756](https://github.com/mmistakes/minimal-mistakes/pull/2756) -- Add configuration option to toggle off RSS feed link in `` and site footer. [#2787](https://github.com/mmistakes/minimal-mistakes/pull/2787) -- Upgrade Lunrjs to 2.3.9 and switch to `relative_url`. [#2805](https://github.com/mmistakes/minimal-mistakes/pull/2805) -- Adds `.webp` to list of supported image extensions for the image popup lightbox. [#2788](https://github.com/mmistakes/minimal-mistakes/pull/2788) -- Add Hebrew localized UI text strings. [#2760](https://github.com/mmistakes/minimal-mistakes/pull/2760) -- Update documentation to include `toc_sticky` parameter's description. [#2741](https://github.com/mmistakes/minimal-mistakes/pull/2741) -- Update Indonesian localized UI text strings. [#2731](https://github.com/mmistakes/minimal-mistakes/pull/2731) -- Update remote theme documentation. [#2734](https://github.com/mmistakes/minimal-mistakes/pull/2734) -- Update allejo/jekyll-toc to v1.1.0, skip headings without an ID. [#2752](https://github.com/mmistakes/minimal-mistakes/pull/2752) -- Allow custom gradient for page header overlay. [#2806](https://github.com/mmistakes/minimal-mistakes/pull/2806) - -## [4.21.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.21.0) - -### Bug Fixes - -- Fix greedy navigation by improving reliability of remaining space for visible links. [#2664](https://github.com/mmistakes/minimal-mistakes/issues/2664) -- Collapse white-space in `figure` helper to fix issues when used in Markdown ordered and unordered lists. [#2697](https://github.com/mmistakes/minimal-mistakes/pull/2697) -- Fix dead link to CI services in documentation. [#2635](https://github.com/mmistakes/minimal-mistakes/issues/2635) [#2692](https://github.com/mmistakes/minimal-mistakes/pull/2692) -- Fix a small typo in documentation. [#2718](https://github.com/mmistakes/minimal-mistakes/pull/2718) - -### Enhancements - -- Update jQuery to 3.5.1. [#2713](https://github.com/mmistakes/minimal-mistakes/pull/2713) -- Add Indonesian localized UI text strings. [#2725](https://github.com/mmistakes/minimal-mistakes/pull/2725) -- Update Vietnamese localized UI text strings. [#2722](https://github.com/mmistakes/minimal-mistakes/pull/2722) -- Add Norwegian (Norsk) localized UI text strings. [#2702](https://github.com/mmistakes/minimal-mistakes/pull/2702) -- Update allejo/jekyll-toc to v1.0.14 [#2700](https://github.com/mmistakes/minimal-mistakes/pull/2700) - -## [4.20.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.20.2) - -### Bug Fixes - -- Fix broken link in documentation. [#2677](https://github.com/mmistakes/minimal-mistakes/issues/2677) -- Fix typo in documentation. [#2678](https://github.com/mmistakes/minimal-mistakes/issues/2678) -- Remove duplicate CSS definitions. [#2666](https://github.com/mmistakes/minimal-mistakes/pull/2666) -- Fix `entries_layout: grid` in various layouts. [#2639](https://github.com/mmistakes/minimal-mistakes/issues/2639) -- Change `fa` to `fas` for Font Awesome 5. [#2649](https://github.com/mmistakes/minimal-mistakes/pull/2649) - -### Enhancements - -- Refactor page meta include. [#2641](https://github.com/mmistakes/minimal-mistakes/pull/2641) -- Add `article:author` Open Graph markup. [#2670](https://github.com/mmistakes/minimal-mistakes/pull/2670) - -## [4.20.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.20.1) - -### Bug Fixes - -- Fix `entries_layout: grid` in `home.html` layout. [#2616](https://github.com/mmistakes/minimal-mistakes/pull/2616) - -## [4.20.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.20.0) - -### Bug Fixes - -- Add `relative_url` filter to author home link [#2575](https://github.com/mmistakes/minimal-mistakes/pull/2575) -- Fix `analytics.provider` config comment to list all analytics providers. [#2607](https://github.com/mmistakes/minimal-mistakes/pull/2607) -- Fix typo in installation documentation. [#2570](https://github.com/mmistakes/minimal-mistakes/pull/2570) -- Fix broken Lunr search with Jekyll v4.1.0. [#2617](https://github.com/mmistakes/minimal-mistakes/pull/2617) - -### Enhancements - -- Add an optional date alongside the reading time. To enable set `show_date: true` similar to how reading time is. [#2526](https://github.com/mmistakes/minimal-mistakes/pull/2526) -- Remove hidden posts from posts.html layout. [#2625](https://github.com/mmistakes/minimal-mistakes/pull/2625) -- Add entry layout configuration for `list` (default) or `grid` views on `layout: home`. [#2616](https://github.com/mmistakes/minimal-mistakes/pull/2616) -- Add missing Chinese translations. [#2576](https://github.com/mmistakes/minimal-mistakes/pull/2576) -- Improve Chinese translations. [#2626](https://github.com/mmistakes/minimal-mistakes/pull/2626) -- Add `line-height` to `h4` element in notice helper. [#2602](https://github.com/mmistakes/minimal-mistakes/pull/2602) -- Improve Algolia search. [#2572](https://github.com/mmistakes/minimal-mistakes/pull/2572) -- Update link to wtfpl license in README. [#2571](https://github.com/mmistakes/minimal-mistakes/pull/2571) -- Ignore teaser headline in table of contents when including posts list in another page. [#2558](https://github.com/mmistakes/minimal-mistakes/pull/2558) -- Replace Font Awesome Kits with CSS from jsDelivr CDN. [#2583](https://github.com/mmistakes/minimal-mistakes/pull/2583) -- Add `danmaku` option to Bilibili video provider and add corresponding documentation/ [#2599](https://github.com/mmistakes/minimal-mistakes/pull/2599) -- Update documentation about loading l10n data file from the theme-gem. [#2621](https://github.com/mmistakes/minimal-mistakes/issues/2621) [#2624](https://github.com/mmistakes/minimal-mistakes/pull/2624) - -## [4.19.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.19.3) - -### Enhancements - -- Update GreedyNav.js to reduce masthead link overflow/shifting on mobile devices. [#2551](https://github.com/mmistakes/minimal-mistakes/issues/2551) -- Replace `
` in `comments.html` include and add `custom_scripts.html` include for loading custom comment provider JavaScript in the footer. [#2549](https://github.com/mmistakes/minimal-mistakes/issues/2549) -- Move page date Liquid to include. [#2544](https://github.com/mmistakes/minimal-mistakes/pull/2544) -- Strip trailing whitespace in seo_description. [#2542](https://github.com/mmistakes/minimal-mistakes/pull/2542) -- Improve sticky sidebar's appearance with short content. [#2514](https://github.com/mmistakes/minimal-mistakes/pull/2514) - -## [4.19.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.19.2) - -### Enhancements - -- Add support for bilibili videos in [responsive video helper](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#responsive-video-embed). [#2512](https://github.com/mmistakes/minimal-mistakes/pull/2512) -- Add Myanmar (Burmese) localized UI text strings. [#2500](https://github.com/mmistakes/minimal-mistakes/pull/2500) -- Improve author links underline on hover. [#2472](https://github.com/mmistakes/minimal-mistakes/pull/2472) -- Add documentation for applying Front Matter defaults to jekyll-archives pages. [#2466](https://github.com/mmistakes/minimal-mistakes/pull/2466) -- Add missing Vietnamese translations. [#2459](https://github.com/mmistakes/minimal-mistakes/pull/2459) [#2486](https://github.com/mmistakes/minimal-mistakes/pull/2486) -- Fix Finnish localized UI text strings. [#2455](https://github.com/mmistakes/minimal-mistakes/pull/2455) -- Clarify documentation that Lunr only searches documents in collections. [#2450](https://github.com/mmistakes/minimal-mistakes/pull/2450) -- Add guide on applying Front Matter defaults to jekyll-archives pages [#2466](https://github.com/mmistakes/minimal-mistakes/pull/2466) - -### Bug Fixes - -- Fix typo in configuration documentation. [#2497](https://github.com/mmistakes/minimal-mistakes/pull/2497) -- Fix "Follow menu falls under post links" on small screens. [#2479](https://github.com/mmistakes/minimal-mistakes/issues/2479) -- Hide index page from page-archive. [#2482](https://github.com/mmistakes/minimal-mistakes/pull/2482) - -## [4.19.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.19.1) - -### Enhancements - -- Add [Dracula](https://draculatheme.com/) Base16 syntax highlighting theme Sass variables to [stylesheets documentation](https://mmistakes.github.io/minimal-mistakes/docs/stylesheets/#syntax-highlighting). [#2438](https://github.com/mmistakes/minimal-mistakes/pull/2438) -- Update links to `HTTPS` and remove Google+ from configuration documentation. [#2432](https://github.com/mmistakes/minimal-mistakes/pull/2432) -- Use `first_page_path` from jekyll-paginate-v2 if available. [#2431](https://github.com/mmistakes/minimal-mistakes/pull/2431) -- Update onchange and uglify-js dependencies. -- Update smooth-scroll.js to `v16.1.2`. [#2430](https://github.com/mmistakes/minimal-mistakes/issues/2430) - -### Bug Fixes - -- Fix author profile links `z-index` order on small screens. [#2440](https://github.com/mmistakes/minimal-mistakes/issues/2440) - -## [4.19.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.19.0) - -### Enhancements - -- Add "click" overlay to close masthead and follow button menus when open. [#1168](https://github.com/mmistakes/minimal-mistakes/issues/1168) -- Remove deprecated Staticman v1 configurations from `_config.yml`. [#2386](https://github.com/mmistakes/minimal-mistakes/issues/2386) -- Use `relative_url` and `absolute_url` filters where possible. [#2387](https://github.com/mmistakes/minimal-mistakes/pull/2387) -- Improve headline hierarchy and add Sass specific variables `$h-size-x`. [#2423](https://github.com/mmistakes/minimal-mistakes/issues/2423) -- Improve accessibility of `default` skin by increasing color contrast of text and links. -- Hide posts with `hidden: true` YAML front matter from appearing in listings. [#2345](https://github.com/mmistakes/minimal-mistakes/pull/2345) -- Add Irish (Gaeilge) localized UI text strings. [#2422](https://github.com/mmistakes/minimal-mistakes/pull/2422) -- Remove `box-shadow` on radio and checkbox inputs. [#2398](https://github.com/mmistakes/minimal-mistakes/pull/2398) -- Bump Jekyll gem dependency to `v3.7`. - -### Bug Fixes - -- Fix documentation around using `bundle info` command. [#2425](https://github.com/mmistakes/minimal-mistakes/pull/2425) -- Fix rake vulnerability in `.gemspec` file. -- Fix Staticman v2 comment submission. [#2402](https://github.com/mmistakes/minimal-mistakes/pull/2402) -- Fix repeated site base path for masthead logo. [#2385](https://github.com/mmistakes/minimal-mistakes/pull/2385) - -## [4.18.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.18.1) - -### Bug Fixes - -- Fix compatibility issue with jekyll-paginate-v2. [#2381](https://github.com/mmistakes/minimal-mistakes/pull/2381) - -## [4.18.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.18.0) - -### Enhancements - -- Allow `home` layout to display posts without pagination. [#2378](https://github.com/mmistakes/minimal-mistakes/pull/2378) -- Add links to high resolution skin screenshots in README. [#2363](https://github.com/mmistakes/minimal-mistakes/issues/2363) -- Update README and LICENSE. [#2367](https://github.com/mmistakes/minimal-mistakes/pull/2367) -- Update `.gitignore` file. [#2366](https://github.com/mmistakes/minimal-mistakes/pull/2366) -- Allow override of page excerpt in hero header via `tagline` YAML front matter. [#2307](https://github.com/mmistakes/minimal-mistakes/pull/2307) -- Exclude `package-lock.json` from Jekyll build. [#2364](https://github.com/mmistakes/minimal-mistakes/pull/2364) -- Use `%-d` instead of `%d` so displayed dates aren't padded with zero. [#2359](https://github.com/mmistakes/minimal-mistakes/pull/2359) -- Update table of contents helper (`toc.html`) to [v1.0.8](https://github.com/allejo/jekyll-toc/releases). [#2355](https://github.com/mmistakes/minimal-mistakes/pull/2355) -- Add missing Dutch localized UI text strings. [#2321](https://github.com/mmistakes/minimal-mistakes/pull/2321) -- Support page header (hero) in `archive-taxonomy` layout. [#2320](https://github.com/mmistakes/minimal-mistakes/pull/2320) -- Add social icon color for Keybase. [#2302](https://github.com/mmistakes/minimal-mistakes/pull/2302) - -### Bug Fixes - -- Fix JavaScript comments in Disqus include to be compatible with `compress` layout. [#2373](https://github.com/mmistakes/minimal-mistakes/pull/2373) -- Fix wrong newline concatenation in SEO description [#2368](https://github.com/mmistakes/minimal-mistakes/pull/2368) [#2354](https://github.com/mmistakes/minimal-mistakes/issues/2354) -- Fix Staticman v2/v3 conditional for showing comments. [#2351](https://github.com/mmistakes/minimal-mistakes/pull/2351) -- Fix masthead logo path. [#2332](https://github.com/mmistakes/minimal-mistakes/pull/2332) -- Fix schema.org dates to ISO-8601. [#2339](https://github.com/mmistakes/minimal-mistakes/pull/2339) -- Fix background color of code blocks in notices. [#2328](https://github.com/mmistakes/minimal-mistakes/pull/2328) -- Fix alignment of feature rows when placed next to a sticky sidebar. [#2327](https://github.com/mmistakes/minimal-mistakes/issues/2327) -- Fix `seo_description` in `_includes/seo.html`. [#2326](https://github.com/mmistakes/minimal-mistakes/pull/2326) -- Fix typo in `_config.yml`. [#2319](https://github.com/mmistakes/minimal-mistakes/pull/2319) - -## [4.17.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.17.2) - -### Enhancements - -- Add collection step to documentation about creating a portfolio page. [#2294](https://github.com/mmistakes/minimal-mistakes/pull/2294) -- Replace sticky footer JavaScript with flexbox styles. [#2289](https://github.com/mmistakes/minimal-mistakes/pull/2289) - -### Bug Fixes - -- Fix sticky footer when using MozBar extension. [#2281](https://github.com/mmistakes/minimal-mistakes/issues/2281) - -## [4.17.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.17.1) - -### Enhancements - -- Update Chinese (Simplified) localized UI text strings. [#2286](https://github.com/mmistakes/minimal-mistakes/pull/2286) -- Update list of 3rd party JavaScript used and licenses. [#2276](https://github.com/mmistakes/minimal-mistakes/pull/2276) - -### Bug Fixes - -- Fix indention of nested GFM task lists. [#2283](https://github.com/mmistakes/minimal-mistakes/issues/2283) - -## [4.17.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.17.0) - -### Enhancements - -- Show a permalink anchor when hovering over headings in main content area. [#2251](https://github.com/mmistakes/minimal-mistakes/pull/2251) -- Allow per-page override of `words_per_minute`. [#2250](https://github.com/mmistakes/minimal-mistakes/pull/2250) -- Update [onchange](https://www.npmjs.com/package/onchange) development dependency in `package.json`. [#2241](https://github.com/mmistakes/minimal-mistakes/issues/2241) -- Add Catalan localized UI text strings. [#2237](https://github.com/mmistakes/minimal-mistakes/pull/2237) - -### Bug Fixes - -- Remove extraneous space from Internet Explorer conditional statement. [#2273](https://github.com/mmistakes/minimal-mistakes/pull/2273) -- Fix typo in `_config.yml`. [#2243](https://github.com/mmistakes/minimal-mistakes/pull/2243) -- Replace `http` URLs with `https` where applicable in `_config.yml`. [#2244](https://github.com/mmistakes/minimal-mistakes/pull/2244) - -## [4.16.6](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.16.6) - -### Enhancements - -- Relax Jekyll dependency to allow for version 4.0. -- Add missing Spanish localized UI text strings. [#2229](https://github.com/mmistakes/minimal-mistakes/pull/2229) -- Allow Markdown in author bio. [#2215](https://github.com/mmistakes/minimal-mistakes/pull/2215) - -### Bug Fixes - -- Fix `site.url` in Organization/Person JSON-LD schema. [#1906](https://github.com/mmistakes/minimal-mistakes/issues/1906) -- Remove full stop in some `comment_form_info` UI text strings. [#2220](https://github.com/mmistakes/minimal-mistakes/pull/2220) -- Fix default `site.author` in seo.html [#2230](https://github.com/mmistakes/minimal-mistakes/pull/2230) -- Fix overlapping links (linked to and post's permalink) in post link type. [#2222](https://github.com/mmistakes/minimal-mistakes/issues/2222) - -## [4.16.5](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.16.5) - -### Enhancements - -- Add optional site subtitle to masthead. [#2173](https://github.com/mmistakes/minimal-mistakes/issues/2173) -- Add missing Punjabi and Hindi localized UI text strings. [#2212](https://github.com/mmistakes/minimal-mistakes/pull/2212) -- Add missing Korean localized UI text strings. [#2209](https://github.com/mmistakes/minimal-mistakes/pull/2209) -- Use [Font Awesome Kits](https://blog.fontawesome.com/introducing-font-awesome-kits-7134d1d59959) to use the latest version of icons. [#2184](https://github.com/mmistakes/minimal-mistakes/issues/2184) -- Remove unnecessary console.log in `lunr-en.js` and `lunr-gr.js` JavaScript. [#2193](https://github.com/mmistakes/minimal-mistakes/issues/2193) -- Remove unnecessary `type="text/javascript"` from Google Analytics JavaScript. [#2190](https://github.com/mmistakes/minimal-mistakes/pull/2190) -- Update links and fix typos in documentation. [#2186](https://github.com/mmistakes/minimal-mistakes/pull/2186) -- Add skip links. [#2182](https://github.com/mmistakes/minimal-mistakes/issues/2182) - -### Bug Fixes - -- Fix aria issues with Lunr search form. [#2211](https://github.com/mmistakes/minimal-mistakes/pull/2211) -- Fix missing fallback title for table of contents. - -## [4.16.4](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.16.4) - -### Enhancements - -- Update Brazilian Portuguese localized UI text strings. [#2162](https://github.com/mmistakes/minimal-mistakes/pull/2162) -- Update Font Awesome to v5.8.2. [#2150](https://github.com/mmistakes/minimal-mistakes/pull/2150) -- Add missing Spanish localized UI text strings. [#2149](https://github.com/mmistakes/minimal-mistakes/pull/2149) - -### Bug Fixes - -- Fix arithmetic in `_form.scss` partial. [#2169](https://github.com/mmistakes/minimal-mistakes/pull/2169) -- Fix pound symbol not displaying properly for post categories and tags. [#2156](https://github.com/mmistakes/minimal-mistakes/issues/2156) -- Fix permalink stacking order and click-able area in archives. - -## [4.16.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.16.3) - -### Enhancements - -- Update jQuery to v3.4.1. [#2137](https://github.com/mmistakes/minimal-mistakes/issues/2137) -- Update Gumshoe to v5.1.1. [#2140](https://github.com/mmistakes/minimal-mistakes/issues/2140) - -### Bug Fixes - -- Fix JavaScript error when resizing pages with table of contents. [#2140](https://github.com/mmistakes/minimal-mistakes/issues/2140) - -## [4.16.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.16.2) - -### Bug Fixes - -- Revert jQuery back to version v3.3.1, v.3.4.0 causes issues with other plugins that haven't been updated. [#2137](https://github.com/mmistakes/minimal-mistakes/issues/2137) - -## [4.16.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.16.1) - -### Enhancements - -- Update [`compress` layout](https://mmistakes.github.io/minimal-mistakes/docs/layouts/#compress-layout) to v3.1.0. [#2128](https://github.com/mmistakes/minimal-mistakes/pull/2128) -- Update jQuery to v3.4.0. [#2129](https://github.com/mmistakes/minimal-mistakes/pull/2129) - -### Bug Fixes - -- Fix Gumshoe related JavaScript error on pages without a table of contents. [#2124](https://github.com/mmistakes/minimal-mistakes/pull/2124) - -## [4.16.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.16.0) - -### Enhancements - -- Improve search `input` semantics for Lunr and Google search providers. [#2123](https://github.com/mmistakes/minimal-mistakes/pull/2123) -- Allow adding JavaScript files after those bundled in the theme. [#2110](https://github.com/mmistakes/minimal-mistakes/issues/2110) [#2116](https://github.com/mmistakes/minimal-mistakes/pull/2116) -- Add `$max-width` Sass variable for adjusting page content's maximum width. [#2093](https://github.com/mmistakes/minimal-mistakes/pull/2093) -- Add Thai localized UI text strings. [#2111](https://github.com/mmistakes/minimal-mistakes/pull/2111) -- Update Font Awesome to [v5.8.1](https://github.com/FortAwesome/Font-Awesome/releases/tag/5.8.1). [#2102](https://github.com/mmistakes/minimal-mistakes/pull/2102) -- Add missing Vietnamese localized UI text strings. [#2097](https://github.com/mmistakes/minimal-mistakes/pull/2097) -- Replace jQuery Smooth Scroll with Smooth Scroll + Gumshoe. [#2082](https://github.com/mmistakes/minimal-mistakes/pull/2082) -- Add styling for [GFM task lists](https://help.github.com/en/articles/about-task-lists#creating-task-lists). [#2092](https://github.com/mmistakes/minimal-mistakes/issues/2092) -- Update Google Universal Analytics to load async. [#2079](https://github.com/mmistakes/minimal-mistakes/pull/2079) -- Remove Google+ social sharing button, comment provider, and author link configs from theme. -- Add missing Chinese text strings. [#2072](https://github.com/mmistakes/minimal-mistakes/pull/2072) - -### Bug Fixes - -- Fix table of contents active link styling. -- Add missing Hindi localized UI text strings. [#2105](https://github.com/mmistakes/minimal-mistakes/pull/2105) [#2106](https://github.com/mmistakes/minimal-mistakes/pull/2106) -- Fix Brazilian Portuguese text strings. [#2098](https://github.com/mmistakes/minimal-mistakes/pull/2098) -- Fix typo in French `results_found` text string. [#2096](https://github.com/mmistakes/minimal-mistakes/pull/2096) -- Fix figures inside of list elements. [#2094](https://github.com/mmistakes/minimal-mistakes/pull/2094) -- Remove Font Awesome `data-search-pseudo-elements` attribute as it degrades smooth scroll performance. [#2075](https://github.com/mmistakes/minimal-mistakes/issues/2075#issuecomment-472437014) -- Fix footnote links incompatibility with smooth scroll plugin. [#2075](https://github.com/mmistakes/minimal-mistakes/issues/2075) -- Loosen Bundler dependency in ruby gem. - -## [4.15.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.15.2) - -### Enhancements - -- Close search overlay with Esc. [#2055](https://github.com/mmistakes/minimal-mistakes/pull/2055) -- Update Swedish localized UI text strings. [#2056](https://github.com/mmistakes/minimal-mistakes/pull/2056) -- Update Font Awesome to 5.7.1 and add `data-search-pseudo-elements` attribute. [#2053](https://github.com/mmistakes/minimal-mistakes/pull/2053) -- Add Malayalam localized UI text strings. [#2037](https://github.com/mmistakes/minimal-mistakes/pull/2037) - -### Bug Fixes - -- Fix table of contents errors with non-English characters in the headings. [#2042](https://github.com/mmistakes/minimal-mistakes/pull/2042) -- Fix `site.logo` false positives. [#2026](https://github.com/mmistakes/minimal-mistakes/pull/2026#issuecomment-455770730) -- Add empty `alt` attribute to `site.logo` image. [#2035](https://github.com/mmistakes/minimal-mistakes/pull/2035) - -## [4.15.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.15.1) - -### Bug Fixes - -- Fix empty `` when `site_logo` is not assigned. [#2026](https://github.com/mmistakes/minimal-mistakes/pull/2026#issuecomment-454809876) - -## [4.15.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.15.0) - -### Enhancements - -- Add logo and title customization to the masthead. [#2026](https://github.com/mmistakes/minimal-mistakes/pull/2026) -- Add support to customize `issue-term` for utterances comment provider. [#2022](https://github.com/mmistakes/minimal-mistakes/pull/2022) -- Allow custom canonical url on a page-by-page basis. [#2021](https://github.com/mmistakes/minimal-mistakes/pull/2021) -- Update table of contents navigation based on scroll position to indicate which link is currently active in the viewport. [#2020](https://github.com/mmistakes/minimal-mistakes/pull/2020) -- Clicking table of contents links changes URL has fragment. [#2019](https://github.com/mmistakes/minimal-mistakes/pull/2019) [#2023](https://github.com/mmistakes/minimal-mistakes/pull/2023) - -## [4.14.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.14.2) - -### Enhancements - -- Improve accessibility by adding label text to search button toggle. [#2014](https://github.com/mmistakes/minimal-mistakes/pull/2014) -- Update Lunr to 2.3.5. [#2010](https://github.com/mmistakes/minimal-mistakes/pull/2010) -- Shorten Internet Explorer conditional statement in `_includes/head.html`. [#2006](https://github.com/mmistakes/minimal-mistakes/pull/2006) -- Add Persian localized UI text strings. [#2004](https://github.com/mmistakes/minimal-mistakes/pull/2004) -- Remove unused JavaScript variables from Staticman comment script. [#1996](https://github.com/mmistakes/minimal-mistakes/pull/1996) -- Update Font Awesome to 5.6.0. [#1995](https://github.com/mmistakes/minimal-mistakes/pull/1995) -- Change remaining schema.org markup to `https`. [#1978](https://github.com/mmistakes/minimal-mistakes/pull/1978) -- Update NPM dependencies. - -### Bug Fixes - -- Fix wide tables that overflow parent container. [#2008](https://github.com/mmistakes/minimal-mistakes/issues/2008) -- Fix Spanish `comments_label` and `comments_title` UI text strings. [#1997](https://github.com/mmistakes/minimal-mistakes/pull/1997) -- Allow sidebar navigation with custom sidebar content. [#1986](https://github.com/mmistakes/minimal-mistakes/issues/1986) -- Fix Google Custom Search JavaScript error when not using Instant Search. [#1983](https://github.com/mmistakes/minimal-mistakes/pull/1983) - -## [4.14.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.14.1) - -### Bug Fixes - -- Fix closed navicon on hover. - -## [4.14.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.14.0) - -### Enhancements - -- Change schema.org markup to `https`. [#1969](https://github.com/mmistakes/minimal-mistakes/pull/1969) -- Add Google Drive as video provider. [#1967](https://github.com/mmistakes/minimal-mistakes/pull/1967) -- Match `:focus` color to skin. -- Add support for [utterances](https://utteranc.es/) comments. [#1909](https://github.com/mmistakes/minimal-mistakes/issues/1909) -- Use privacy aware embed options for YouTube and Vimeo in [responsive video helper](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#responsive-video-embed). [#1964](https://github.com/mmistakes/minimal-mistakes/pull/1964) -- Add `rel="nofollow noopener noreferrer"` to author profile links. [#1924](https://github.com/mmistakes/minimal-mistakes/pull/1924) -- Improve color contrast of primary buttons and links. -- Add Punjabi localized UI text strings. [#1962](https://github.com/mmistakes/minimal-mistakes/pull/1962) -- Add Hindi localized UI text strings. [#1888](https://github.com/mmistakes/minimal-mistakes/pull/1888) -- Update Lunr to `2.3.3`. [#1885](https://github.com/mmistakes/minimal-mistakes/pull/1885) -- Cache "static" includes to improve build performance. **Note:** The theme uses the [jekyll-include-cache](https://github.com/benbalter/jekyll-include-cache) plugin which will need to be installed in your `Gemfile` and added to the `plugins` array of `_config.yml`. Otherwise you'll throw `Unknown tag 'include_cached'` errors at build. [#1874](https://github.com/mmistakes/minimal-mistakes/pull/1874) -- Make entire feature and archive items "clickable". [#1864](https://github.com/mmistakes/minimal-mistakes/pull/1864) -- Allow custom Staticman endpoints. [#1842](https://github.com/mmistakes/minimal-mistakes/issues/1842) -- Remove `type="text/css"` from Algolia script includes. [#1836](https://github.com/mmistakes/minimal-mistakes/pull/1836) -- Remove unneeded `HandheldFriendly` and `MobileOptimized` meta tags. [#1837](https://github.com/mmistakes/minimal-mistakes/pull/1837) -- Update Font Awesome to version `5.5.0` and add `integrity` hash. [#1922](https://github.com/mmistakes/minimal-mistakes/pull/1922) -- Always load Google 404 Linkhelp script over HTTPS. [#1829](https://github.com/mmistakes/minimal-mistakes/pull/1829) -- Remove deprecated `base_path` include helper. - -### Bug Fixes - -- Prevent current post from showing in the related posts section. [#1976](https://github.com/mmistakes/minimal-mistakes/pull/1976) -- Fix dark skins syntax highlighting colors. [#1973](https://github.com/mmistakes/minimal-mistakes/issues/1973) -- Remove unnecessary closing bracket in analytics documentation. [#1915](https://github.com/mmistakes/minimal-mistakes/pull/1915) -- Fix breadcrumb navigation alignment. [#1917](https://github.com/mmistakes/minimal-mistakes/issues/1917) -- Fix Algolia search link positioning. [#1904](https://github.com/mmistakes/minimal-mistakes/pull/1904) -- Fix Lunr search index merging words. [#1883](https://github.com/mmistakes/minimal-mistakes/issues/1883) -- Properly apply `relative_url` filter to internal links in header overlay `actions` array. -- Revert cached includes (`include_cached`) for comment and analytics providers. [#1905](https://github.com/mmistakes/minimal-mistakes/issues/1905) - -## [4.13.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.13.0) - -### Enhancements - -- Add Romanian localized UI text strings. [#1814](https://github.com/mmistakes/minimal-mistakes/pull/1814) -- Improve author link flexibility. [#1581](https://github.com/mmistakes/minimal-mistakes/issues/1581) -- Improve footer link flexibility. -- Deprecate `cta_label` and `cta_url` in header overlay in favor of new `actions` array that allows for multiple "call to action" button links. [#1461](https://github.com/mmistakes/minimal-mistakes/issues/1461) -- Add support to [gallery helper](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#gallery) for defining column layout (`half`, `third`, or single `''`). [#1821](https://github.com/mmistakes/minimal-mistakes/issues/1821) - -### Bug Fixes - -- Fix sidebar navigation list toggle. [#1819](https://github.com/mmistakes/minimal-mistakes/issues/1819) -- Fix hover animation for links with `:visited` state. [#1820](https://github.com/mmistakes/minimal-mistakes/issues/1820) - -## [4.12.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.12.2) - -### Enhancements - -- Add missing Italian localized UI text strings. [#1793](https://github.com/mmistakes/minimal-mistakes/pull/1793) -- Update [jekyll-toc](https://github.com/allejo/jekyll-toc) to `v1.0.5`. -- Support heading levels 1-6 in table of contents with proper indentation styling. [#1782](https://github.com/mmistakes/minimal-mistakes/issues/1782) -- Use relative links for masthead navigation menu items when possible. [#1784](https://github.com/mmistakes/minimal-mistakes/pull/1784) -- Add `.emoji` class to author sidebar to normalize image sizes. [#1780](https://github.com/mmistakes/minimal-mistakes/pull/1780) -- Update Staticman commit message to include comment author's name. -- Improve side navigation spacing in relation to masthead. -- Style archive links with appropriate link color. -- Adjust feature row spacing and font-sizes. -- Use sentence case and increase font-sizes for improved readability in table of contents. -- Add `{{ content }}` to `home` layout. [#1775](https://github.com/mmistakes/minimal-mistakes/pull/1775) - -## [4.12.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.12.1) - -### Enhancements - -- Add missing French localized UI text strings. [#1769](https://github.com/mmistakes/minimal-mistakes/pull/1769) [#1741](https://github.com/mmistakes/minimal-mistakes/pull/1741) -- Update Font Awesome to version [`5.2.0`](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md). [#1754](https://github.com/mmistakes/minimal-mistakes/pull/1754) -- Add documentation note to update root `Gemfile` when forking theme. - -### Bug Fixes - -- Remove slash at the beginning of `path` in staticman.yml example. [#1772](https://github.com/mmistakes/minimal-mistakes/pull/1772) -- Fix `read_time` logic in header image overlay. [#1756](https://github.com/mmistakes/minimal-mistakes/pull/1756) - -## [4.12.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.12.0) - -### Enhancements - -- Add Hungarian localized UI text strings. [#1682](https://github.com/mmistakes/minimal-mistakes/pull/1682) -- DRY `tags_max` calculation in tags.html layout. [#1696](https://github.com/mmistakes/minimal-mistakes/pull/1696) -- DRY `categories_max` calculation in categories.html layout. -- Add support for ["sticking" table of contents](https://mmistakes.github.io/minimal-mistakes/layout-table-of-contents-sticky/) to top of page via `toc_sticky: true` YAML Front Matter. -- Add support for captioning images in feature row helper via `image_caption` YAML Front Matter. [#1440](https://github.com/mmistakes/minimal-mistakes/issues/1440) -- Add [Google Custom Search Engine](https://cse.google.com/cse) support. [#1652](https://github.com/mmistakes/minimal-mistakes/issues/1652) -- Update Font Awesome to version [`5.1.13`](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md) -- Add "Pets" sample archive page to documentation site. [#1664](https://github.com/mmistakes/minimal-mistakes/pull/1664) -- Add GitLab social icon brand color. [#1653](https://github.com/mmistakes/minimal-mistakes/issues/1653) -- Prevent line breaks between FontAwesome icon and text in footer social links. [#1659](https://github.com/mmistakes/minimal-mistakes/issues/1659) - -### Bug Fixes - -- Set default `title_separator`. [#1701](https://github.com/mmistakes/minimal-mistakes/pull/1701) -- Fix `naver_site_verification` typo in /_includes/seo.html. [#1687](https://github.com/mmistakes/minimal-mistakes/pull/1687) -- Fix table of contents missing borders. [#1675](https://github.com/mmistakes/minimal-mistakes/issues/1675) -- Fix link to "Recipes" sample archive on documentation site. [#1664](https://github.com/mmistakes/minimal-mistakes/pull/1664) -- Update example Reddit social share interpolation syntax in documentation. [#1656](https://github.com/mmistakes/minimal-mistakes/issues/1656) -- Fix "Back to Top" links on pages that use [header overlays](https://mmistakes.github.io/minimal-mistakes/docs/layouts/#header-overlay). - -## [4.11.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.11.2) - -### Enhancements - -* Update Font Awesome to version [`5.0.12`](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md). -* Add Slovak localized UI text strings. [#1613](https://github.com/mmistakes/minimal-mistakes/pull/1613) -* Add option to anonymize IP addresses of hits sent to Google Analytics. [#1636](https://github.com/mmistakes/minimal-mistakes/pull/1636) - -### Bug Fixes - -* Use correct text string for "Back to Top" link. [#1595](https://github.com/mmistakes/minimal-mistakes/issues/1595) -* Add conditionals for showing `reCaptcha.siteKey` and `reCaptcha.secret` in Staticman comments form. - -## [4.11.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.11.1) - -### Enhancements - -* Add default `theme` and `remote_theme` values to `_config.yml`. -* Add new layouts (`posts`, `categories`, `tags`, `collection`, `category`, and `tag`) for easier archive page creation. - -### Bug Fixes - -* Replace `absolute_url` filter with `relative_url` where it makes sense (asset/navigation related paths). [#1588](https://github.com/mmistakes/minimal-mistakes/issues/1588) -* Fix search excerpts that run together because of implied spaces. - -## [4.10.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.10.1) - -### Enhancements - -* Update jQuery to version `3.3.1`. [#1491](https://github.com/mmistakes/minimal-mistakes/issues/1491) -* Add link to jekyll-algolia's `files_to_exclude` documentation. -* Update Font Awesome to version [`5.0.8`](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md). [#1561](https://github.com/mmistakes/minimal-mistakes/pull/1561) -* Activate Algolia search for documentation site. [#1570](https://github.com/mmistakes/minimal-mistakes/issues/1570) -* Add missing German translations. [#1577](https://github.com/mmistakes/minimal-mistakes/pull/1577) -* Add support for Google Analytics with global site tag (gtag.js) [#1563](https://github.com/mmistakes/minimal-mistakes/pull/1563) - -### Bug Fixes - -* Focus Algolia search input after clicking on search toggle. - -## [4.10.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.10.0) - -### Enhancements - -* Add support for [Algolia](https://www.algolia.com/) search provider ([see demo](https://mmistakes.github.io/minimal-mistakes-algolia-search/)). [#1416](https://github.com/mmistakes/minimal-mistakes/issues/1416) - -## [4.9.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.9.1) - -### Enhancements - -* Simplify year archive Liquid. -* Add documentation on how to downgrade theme. -* Improve greedy navigation's layout when JavaScript is disabled. -* Improve SEO include by grouping similar tags, reducing white-space, and adding `article:modified_time`. [#1456](https://github.com/mmistakes/minimal-mistakes/pull/1456) -* Minify `assets/js/lunr/lunr.js`. -* Improve calculation of Greedy navigation's `availableSpace`. -* Add Danish and Russian translations for new search strings. [#1472](https://github.com/mmistakes/minimal-mistakes/pull/1472) [#1477](https://github.com/mmistakes/minimal-mistakes/pull/1477) -* Indicate that archive titles are links with an underline. -* Remove `base_path` include from `/test` pages. -* Reduce font-size of page meta in list/grid items. -* Improve feature row styling when used with `archive` layout. [#1484](https://github.com/mmistakes/minimal-mistakes/issues/1484) -* Improve German translations. [#1511](https://github.com/mmistakes/minimal-mistakes/pull/1511) -* Update Font Awesome to `5.0.6`. [#1513](https://github.com/mmistakes/minimal-mistakes/pull/1513) -* Add `wide` variant to single layout. [#1516](https://github.com/mmistakes/minimal-mistakes/pull/1516) - -### Bug Fixes - -* Allow `author` to accept an object or string. [#289](https://github.com/mmistakes/minimal-mistakes/issues/289) -* Fix syntax highlighting line number styling inconsistency. [#1467](https://github.com/mmistakes/minimal-mistakes/issues/1467) -* Fix author sidebar icon colors for dark skins. [#1482](https://github.com/mmistakes/minimal-mistakes/issues/1482) -* Remove misleading underline hover state on feature row items. -* Properly escape quotes in `site.social.name` and `site.name`. [#1485](https://github.com/mmistakes/minimal-mistakes/pull/1485) -* Fix typo in upgrading documentation. [#1487](https://github.com/mmistakes/minimal-mistakes/pull/1487) -* Fix `border-bottom` for Gist line numbers. -* Replace `|` with HTML entity when used as title separator. [#760](https://github.com/mmistakes/minimal-mistakes/issues/760) - -## [4.9.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.9.0) - -### Enhancements - -* Add `show_overlay_excerpt` for disabling overlay image excerpt text. [#1436](https://github.com/mmistakes/minimal-mistakes/pull/1436) -* Update remote theme installation instructions in Quick Start Guide. [#1439](https://github.com/mmistakes/minimal-mistakes/pull/1439) -* Reduce visual weight of code blocks. -* Add Lunr.js Greek stemmer. [#1445](https://github.com/mmistakes/minimal-mistakes/pull/1445) -* Update Font Awesome 5 [SVG with JavaScript version](https://fontawesome.com/how-to-use/svg-with-js). [#1446](https://github.com/mmistakes/minimal-mistakes/pull/1446) - * Note: if Font Awesome icons were used in the content of posts/pages or custom table of contents, find and replace any icons that have different names between version 4 and 5. Make sure to read the [complete list](https://fontawesome.com/how-to-use/upgrading-from-4#icon-name-changes-full) on Font Awesome's site. -* Reduce size of Lunr.js search JSON data and introduce `site.search_full_content` flag for limiting size of JSON file. [#1449](https://github.com/mmistakes/minimal-mistakes/pull/1449) -* Improve syntax highlighting styles. [#1450](https://github.com/mmistakes/minimal-mistakes/pull/1450) - -### Bug Fixes - -* Fix code block extra white-space when using [Jekyll's highlight tag](https://jekyllrb.com/docs/templates/#code-snippet-highlighting) with `linenos`. [#1437](https://github.com/mmistakes/minimal-mistakes/issues/1437) -* Round top-right corner of code block icon. -* Remove Lunr.js trimmer and bring back colons. [#1445](https://github.com/mmistakes/minimal-mistakes/pull/1445) -* Fix sticky `.sidebar` that overlaps main content when resizing viewport. [#1447](https://github.com/mmistakes/minimal-mistakes/issues/1447) - -## [4.8.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.8.1) - -### Enhancements - -* Add linkback functionality to author avatar and name in sidebar via `author.home`. [#1386](https://github.com/mmistakes/minimal-mistakes/pull/1386) -* Add Japanese localized UI text strings. [#1411](https://github.com/mmistakes/minimal-mistakes/pull/1411) -* Update Lunr.js to 2.1.5 [#1419](https://github.com/mmistakes/minimal-mistakes/pull/1419) - -### Bug Fixes - -* Fixed broken link to Staticman's page [#1422](https://github.com/mmistakes/minimal-mistakes/pull/1422) -* Fix Lunr search to work with number tags. [#1409](https://github.com/mmistakes/minimal-mistakes/issues/1409) [#1419](https://github.com/mmistakes/minimal-mistakes/pull/1419) - -## [4.8.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.8.0) - -### Enhancements - -* Open social share links in a new window. [#1357](https://github.com/mmistakes/minimal-mistakes/pull/1357) -* Remove Alexa.com verification due to retiring of "[Claim Your Site](https://support.alexa.com/hc/en-us/articles/219135887)" feature. [#1350](https://github.com/mmistakes/minimal-mistakes/issues/1350) -* Disable analytics in `development` environment. [#1362](https://github.com/mmistakes/minimal-mistakes/pull/1362) -* Disable comments in `development` environment. [#1363](https://github.com/mmistakes/minimal-mistakes/pull/1363) -* Exclude specific pages/posts from search index by adding `search: false` to the YAML Front Matter. [#1369](https://github.com/mmistakes/minimal-mistakes/pull/1369) -* Add optional `description` key to masthead links for clarifying their purpose with the `title` attribute. [#1380](https://github.com/mmistakes/minimal-mistakes/pull/1380) -* Incorporate site search into masthead. [#1383](https://github.com/mmistakes/minimal-mistakes/pull/1383) -* Update gem dependencies. [#1388](https://github.com/mmistakes/minimal-mistakes/pull/1388) - -### Bug Fixes - -* Fix `post.content` typo in `assets/js/lunr-en.js`. [#1354](https://github.com/mmistakes/minimal-mistakes/pull/1354) -* Fix "lunr-en.js:1 Uncaught SyntaxError: Unexpected token <" in `assets/js/lunr-en.js`. [#1356](https://github.com/mmistakes/minimal-mistakes/pull/1356) -* Rename Naver verification `naver_site_verification` to be consistent with other site variables. -* Fix button class in "Post with Table Of Contents" demo content. [#1368](https://github.com/mmistakes/minimal-mistakes/pull/1368) -* Fix capitalization of WordPress in documentation. [#1381](https://github.com/mmistakes/minimal-mistakes/pull/1381) -* Fix zh-HK UI text to point to Traditional Chinese. [#1374](https://github.com/mmistakes/minimal-mistakes/issues/1374) [#1389](https://github.com/mmistakes/minimal-mistakes/pull/1389) - -## [4.7.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.7.1) - -### Enhancements - -* Add search layout powered by [Lunr](https://lunrjs.com/). [#1353](https://github.com/mmistakes/minimal-mistakes/pull/1353) -* Use [jekyll-remote-theme](https://github.com/benbalter/jekyll-remote-theme) for demo site. [#1339](https://github.com/mmistakes/minimal-mistakes/issues/1339) -* Add note about WordPress to Staticman comment migration tool in documentation. [#1346](https://github.com/mmistakes/minimal-mistakes/issues/1346) - -### Bug Fixes - -* Change `http` to `https` for Jekyll and Browserhappy links. [#1342](https://github.com/mmistakes/minimal-mistakes/pull/1342) [#1343](https://github.com/mmistakes/minimal-mistakes/pull/1343) -* Change `http` author profile links to `https` when supported. [#1349](https://github.com/mmistakes/minimal-mistakes/pull/1349) -* Fix broken SCSS partial links in layouts documentation. [#1351](https://github.com/mmistakes/minimal-mistakes/issues/1351) - -## [4.7.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.7.0) - -### Enhancements - -* Add `alt` description to avatar image. [#1226](https://github.com/mmistakes/minimal-mistakes/pull/1226) -* Clarify documentation about which `assets` folders and files to remove when migrating to the gem version of the theme. [#1268](https://github.com/mmistakes/minimal-mistakes/issues/1268) -* Add note about Staticman GitHub compatibility. [#1273](https://github.com/mmistakes/minimal-mistakes/issues/1273) -* Add missing Brazilian Portuguese translations to `ui-text.yml`. [#1278](https://github.com/mmistakes/minimal-mistakes/pull/1278) -* Update font stack documentation. [#1292](https://github.com/mmistakes/minimal-mistakes/pull/1292) -* Improve accessibility of navigation menu button. [#1099](https://github.com/mmistakes/minimal-mistakes/issues/1099) -* Add Naver Webmaster Tools verification. [#1286](https://github.com/mmistakes/minimal-mistakes/pull/1286) -* Add support for Staticman v2 endpoint and reCAPTCHA. -* Add Polish localized UI text strings. [#1304](https://github.com/mmistakes/minimal-mistakes/pull/1304) -* Add toggleable table of contents via YAML Front Matter. Note: `toc` helper include will be deprecated in next major version. [#1222](https://github.com/mmistakes/minimal-mistakes/issues/1222) -* Refactor seo.html include to DRY-up page image handling. -* Add support for setting what image is used by OpenGraph and Twitter via `page.header.og_image`. [#1316](https://github.com/mmistakes/minimal-mistakes/issues/1316) -* Fix the spelling of some product names in the author profile. [#1328](https://github.com/mmistakes/minimal-mistakes/pull/1328) -* Add `aqua`, `neon`, and `plum` skins. [#1336](https://github.com/mmistakes/minimal-mistakes/pull/1336) -* Update **jekyll-toc** with heading classes fix. [#1337](https://github.com/mmistakes/minimal-mistakes/pull/1337) -* Remove `+` from Google+ author link to allow non-vanity URLs. [#1319](https://github.com/mmistakes/minimal-mistakes/pull/1319) - -### Bug Fixes - -* Fix system font rendering in Chrome on macOS/OS X. [#1290](https://github.com/mmistakes/minimal-mistakes/pull/1290) -* Fix extra padding in syntax highlighted code blocks due to Rouge 2 adding `
` to markup. - -## [4.6.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.6.0) - -### Enhancements - -* Test strict Front Matter in `/test` site. [#1236](https://github.com/mmistakes/minimal-mistakes/pull/1236) -* Rename `gems` key to `plugins`. [#1239](https://github.com/mmistakes/minimal-mistakes/pull/1239) -* Add [YIQ Color Contrast](https://github.com/easy-designs/yiq-color-contrast) mixin for determining lightness of a color. -* DRY up button CSS using Sass lists and YIQ Color Contrast mixin. -* Add `btn--primary` button class. **Note:** elements that were previously using only a `.btn` class will now also need `.btn--primary` (eg. `
my link`). -* Add `air`, `contrast`, `dark`, `dirt`, `mint`, and `sunrise` skin color options. [#1208](https://github.com/mmistakes/minimal-mistakes/issues/1208) -* Allow scripts in `` and before `` to be added/overridden with `head_scripts` and `footer_scripts` arrays in `_config.yml`. [#1241](https://github.com/mmistakes/minimal-mistakes/pull/1241) -* Update JavaScript dependencies: jQuery `v3.2.1`, jQuery Smooth Scroll `v2.2.0`, and Magnific Popup `v1.1.0`. [#328690652](https://github.com/mmistakes/minimal-mistakes/pull/1241#issuecomment-328690652) - -## [4.5.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.5.2) - -### Enhancements - -* Add `.page__comments-form` to "non-printing" selectors in print styles. [#1195](https://github.com/mmistakes/minimal-mistakes/pull/1195) -* Add LinkedIn and Steam author sidebar examples to `_config.yml`. [#1203](https://github.com/mmistakes/minimal-mistakes/pull/1203) [#1204](https://github.com/mmistakes/minimal-mistakes/pull/1204) -* Remove the http-equiv="cleartype" meta tag. [#1087](https://github.com/mmistakes/minimal-mistakes/pull/1087) -* Clarify documentation for `jekyll-archives` plugin and how to install. [#1206](https://github.com/mmistakes/minimal-mistakes/pull/1206) -* Clarify documentation around taxonomy page and index generation. [#1207](https://github.com/mmistakes/minimal-mistakes/pull/1207) -* Fix "Posts by tag" grammar in documentation. [#1209](https://github.com/mmistakes/minimal-mistakes/pull/1209) -* Improve Chinese `date_label` and `minute_read` translations in `ui-text.yml`. [#1205](https://github.com/mmistakes/minimal-mistakes/pull/1205) [#1211](https://github.com/mmistakes/minimal-mistakes/pull/1211) -* Add note to Quick-Start Guide about GitHub Pages hosting alternatives that allow 3rd party gem themes and Jekyll plugins. -* Add note to configuration documentation about Cloudflare minification as an alternative to `layout: compress`. [#1217](https://github.com/mmistakes/minimal-mistakes/pull/1217) -* Show 4 latest posts in "You May Also Enjoy" module when `related: true` and no related posts are found due to `lsi` ([latent semantic indexing](https://en.wikipedia.org/wiki/Latent_semantic_analysis#Latent_semantic_indexing)) being disabled on GitHub Pages. [#554](https://github.com/mmistakes/minimal-mistakes/issues/554) -* Truncate archive item titles' that overflow with an ellipsis. [#1213](https://github.com/mmistakes/minimal-mistakes/issues/1213) - -### Bug Fixes - -* Fix license URL in README file. [#1189](https://github.com/mmistakes/minimal-mistakes/pull/1189) -* Reduce amount of blank pages when printing in Chrome. [#1196](https://github.com/mmistakes/minimal-mistakes/issues/1196) -* Remove `#disqus_thread` duplicate from `comments-providers/disqus.html` as it is already in `comments.html` include. [#1199](https://github.com/mmistakes/minimal-mistakes/issues/1199) -* Fix Liquid syntax errors in `tag-list.html` and `category-list.html` includes by removing parenthesis in `assign`s. [#1223](https://github.com/mmistakes/minimal-mistakes/issues/1223) -* Fix Liquid syntax error: "Expected id but found open_square in `"{{ page.[include.id] }}"`" in `gallery` and `feature_row` includes. -* Fix Liquid syntax error: "Expected end_of_string but found pipe in `"name in __names | sort"`" in `group-by-array` include. - -## [4.5.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.5.1) - -### Enhancements - -* Add Greek and Danish localized UI text strings. [#1159](https://github.com/mmistakes/minimal-mistakes/pull/1159) [#1188](https://github.com/mmistakes/minimal-mistakes/pull/1188) -* Remove blank YAML Front Matter from JavaScript banner. [#1158](https://github.com/mmistakes/minimal-mistakes/issues/1158) -* Improve `page` and `archive` layouts to visually center main content and harmonize sidebar widths and placement. [#1166](https://github.com/mmistakes/minimal-mistakes/pull/1166) -* Increase font-size of code blocks. -* Reduce indent of nested "table of contents" links. -* Extend [archive grid view](https://mmistakes.github.io/minimal-mistakes/docs/layouts/) to the right to better fill the page. -* URL encode title and page URL in social share links. [#1177](https://github.com/mmistakes/minimal-mistakes/pull/1177) -* Replace old Disqus script with new Universal Embed Code. [#1179](https://github.com/mmistakes/minimal-mistakes/pull/1179) - -### Bug Fixes - -* Fix positioning of sidebar table of contents when using `layout: splash`. [#1169](https://github.com/mmistakes/minimal-mistakes/issues/1169) -* Fix "follow" links `z-index` order to avoid overlapping issues. [#1167](https://github.com/mmistakes/minimal-mistakes/issues/1167) - -### Maintenance - -* Fix typo `words_per_minute` typo in documentation. [#1164](https://github.com/mmistakes/minimal-mistakes/pull/1164) -* Remove outside and right borders in `table`s. -* Adjust width of `.sidebar` to match `.sidebar__right`. -* Add sample documents to ["portfolio" collection](https://mmistakes.github.io/minimal-mistakes/portfolio/) for testing grid view. -* Fix typo in stylesheets documentation. [#1170](https://github.com/mmistakes/minimal-mistakes/pull/1170) -* Add note about setting Discourse `server` as a scheme-less URL (eg. `meta.discourse.com` and not `http://meta.discourse.com`) in `_config.yml`. [#1182](https://github.com/mmistakes/minimal-mistakes/issues/1182) - -## [4.5.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.5.0) - -### Enhancements - -* Add scrollbar to sidebars with overflowing content that extends outside the viewport's height. [#706](https://github.com/mmistakes/minimal-mistakes/issues/706) -* Add missing Spanish UI text strings. [#1118](https://github.com/mmistakes/minimal-mistakes/pull/1118) -* Update Susy to version 3 and rewrite grid CSS to be more readable. -* Refactor intro animations into a separate Sass variable `$intro-transition` to allow for customizing. [#1147](https://github.com/mmistakes/minimal-mistakes/pull/1147) -* Add [**jekyll-data**](https://github.com/ashmaroli/jekyll-data) as a dependency to read data files from theme-gem. [#1131](https://github.com/mmistakes/minimal-mistakes/pull/1131) -* Add support for customizing header image alternative text through YAML Front Matter. [#1138](https://github.com/mmistakes/minimal-mistakes/pull/1138) - -### Bug Fixes - -* Fix Sass `DEPRECATION WARNING: Passing a string to call()` by [upgrading Susy to version 3](https://github.com/mmistakes/minimal-mistakes/commit/387f8149d6270b876f224a57a07062ffb0647938). [#1114](https://github.com/mmistakes/minimal-mistakes/issues/1114) -* Fix disappearing author profile links due to tapping the "Follow" button and changing a browser's viewport width to > `$lg`. [#1136](https://github.com/mmistakes/minimal-mistakes/issues/1136) - -### Maintenance - -* Replace reference to "Basically Basic theme" with **Minimal Mistakes**. [#1149](https://github.com/mmistakes/minimal-mistakes/pull/1149) -* Add documentation for disabling CSS3 animations. [#1150](https://github.com/mmistakes/minimal-mistakes/pull/1150) -* Update quickstart, installation, and overriding defaults documentation. [#1151](https://github.com/mmistakes/minimal-mistakes/pull/1151) - -## [4.4.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.4.2) - -### Enhancements - -* Add Swedish, Dutch, and Indonesian localized UI text strings. [#996](https://github.com/mmistakes/minimal-mistakes/pull/996) [#1081](https://github.com/mmistakes/minimal-mistakes/pull/1081) [#1101](https://github.com/mmistakes/minimal-mistakes/pull/1101) -* Add Bitbucket social icon color. [#1009](https://github.com/mmistakes/minimal-mistakes/pull/1009) -* Add GitLab to author sidebar. [#1050](https://github.com/mmistakes/minimal-mistakes/pull/1050) -* Add Sass variable for navicon link hover color. [#1089](https://github.com/mmistakes/minimal-mistakes/pull/1089) [#1088](https://github.com/mmistakes/minimal-mistakes/pull/1088) - -### Bug Fixes - -* Toggle close button on `mouseleave`. [#975](https://github.com/mmistakes/minimal-mistakes/issues/975) -* Remove extraneous `` and `` tags from `paginator.html` include. [#1038](https://github.com/mmistakes/minimal-mistakes/pull/1038) -* Fix Google+ comments provider includes. [#1092](https://github.com/mmistakes/minimal-mistakes/issues/1092) -* Replace category variable used in `_includes/breadcrumbs.html` to `site.category_archive` to avoid conflicts with `site.categories`. [#1063](https://github.com/mmistakes/minimal-mistakes/pull/1063) [#329](https://github.com/mmistakes/minimal-mistakes/issues/329) - -### Maintenance - -* Add mention of Greek localized UI text strings to theme documentation. [#972](https://github.com/mmistakes/minimal-mistakes/pull/972) -* Update Greek localized UI text strings. [#1054](https://github.com/mmistakes/minimal-mistakes/pull/1054) -* Add documentation for adding teaser images in grid view using `header.teaser`. - -## [4.4.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.4.1) - -### Enhancements - -* Add Greek localized UI text strings. [#958](https://github.com/mmistakes/minimal-mistakes/pull/958) - -### Bug Fixes - -* Fix `video` helper to load Vimeo videos over https. [#945](https://github.com/mmistakes/minimal-mistakes/pull/945) -* Fix close menu button that was removed when updating Greedy navigation script. [#969](https://github.com/mmistakes/minimal-mistakes/issues/969) - -## [4.4.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.4.0) - -### Enhancements - -* Move SCSS partials to `/_sass/minimal-mistakes` for easier CSS customization. -* Replace `modified` with `last_modified_at` to leverage various Jekyll plugins that utilize this variable. [#930](https://github.com/mmistakes/minimal-mistakes/pull/930) -* Add Lithuanian localized UI text. [#924](https://github.com/mmistakes/minimal-mistakes/pull/924) -* Improve print stylesheet by increasing text contrast, removing elements that don't need to be printed, expanding URLs, and reducing amount of blank pages. [#909](https://github.com/mmistakes/minimal-mistakes/issues/909) - -### Maintenance - -* Remove extra word in comment. [#911](https://github.com/mmistakes/minimal-mistakes/pull/911) -* Fix typo in Utility Class docs. [#915](https://github.com/mmistakes/minimal-mistakes/pull/915) - -## [4.3.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.3.1) - -### Bug Fixes - -* Fix `.masthead` and `.page__footer` overlapping full screen video elements. [#933](https://github.com/mmistakes/minimal-mistakes/issues/933) -* Correctly show Related Posts heading when UI Text data file is omitted and `related: true` in YAML Front Matter. [#901](https://github.com/mmistakes/minimal-mistakes/pull/901) - -## [4.3.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.3.0) - -### Enhancements - -* Add workaround to allow theme gem's `/assets/js/main.min.js` file to be overridden by a local version. Simply add the following YAML Front Matter to the file: - - ``` - --- - layout: - --- - ``` - - Any local customizations you make to `/assets/js/main.min.js` should now replace the theme gem's version. - -## [4.2.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.2.2) - -### Enhancements - -* Update [Greedy Navigation](https://github.com/lukejacksonn/GreedyNav) to flexbox version to make it more flexible when dealing with long site titles (`site.title`). [#836](https://github.com/mmistakes/minimal-mistakes/issues/836) -* Adjust `box-shadow` in navigation and author sidebar. [#576](https://github.com/mmistakes/minimal-mistakes/pull/576) -* Add Russian, Korean, and zh-TW localized UI text. [#815](https://github.com/mmistakes/minimal-mistakes/issues/815) [#834](https://github.com/mmistakes/minimal-mistakes/pull/834) [#838](https://github.com/mmistakes/minimal-mistakes/pull/838) - -### Bug Fixes - -* Fix Discourse embedded comments bug. [#823](https://github.com/mmistakes/minimal-mistakes/issues/823) -* Fix `seo_author` default value in `seo.html` and add `author` meta. [#858](https://github.com/mmistakes/minimal-mistakes/pull/858) - -### Maintenance - -* Add theme meta info to `_layouts/default.html` and `main.css`. -* Update README. -* Improve the pagination and taxonomy archive documentation. [#826](https://github.com/mmistakes/minimal-mistakes/pull/826) -* Add comments to `/docs/_config.yml` to clarify use of YAML references. [#847](https://github.com/mmistakes/minimal-mistakes/pull/847) - -## [4.2.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.2.1) - -### Enhancements - -* Improve `paginator.html` to support paginated pages that live inside of a subfolder. See [documentation](https://mmistakes.github.io/minimal-mistakes/docs/layouts/#home-page) for more details. [#764](https://github.com/mmistakes/minimal-mistakes/pull/764/) - -### Maintenance - -* Add `https` protocol to Google Universal Analytics embed. [#772](https://github.com/mmistakes/minimal-mistakes/pull/772) - -## [4.2.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.2.0) - -### Enhancements - -* Add `video` helper (for YouTube/Vimeo) and video headers to `single`, `archive`, and `splash` layouts. [#788](https://github.com/mmistakes/minimal-mistakes/pull/788) -* Add missing simplified Chinese localized UI text strings. [#747](https://github.com/mmistakes/minimal-mistakes/pull/747) -* Add Nepali (Nepalese) localized UI text strings. [#785](https://github.com/mmistakes/minimal-mistakes/pull/785) -* Remove borders from table elements found in Google Custom Search Engine widget. [#759](https://github.com/mmistakes/minimal-mistakes/issues/759) - -### Bug Fixes - -* Remove `position: sticky` JavaScript polyfill and fallback to default positioning for browsers that don't support it. [#752](https://github.com/mmistakes/minimal-mistakes/issues/752) - -### Maintenance - -* Fix invalid Google Universal Analytics example in documentation. [#783](https://github.com/mmistakes/minimal-mistakes/pull/783) -* Bump `jekyll-sitemap` gem dependency to (1.0). - -## [4.1.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.1.1) - -### Enhancements - -* Remove hardcoded `words_per_minute` "less than" and "minute read" values and make dynamic. [#703](https://github.com/mmistakes/minimal-mistakes/issues/703) -* Update Font Awesome to `v4.7.0`. [#723](https://github.com/mmistakes/minimal-mistakes/issues/723), [#722](https://github.com/mmistakes/minimal-mistakes/issues/722) -* Add support for YouTube channel URLs in author profile. [#716](https://github.com/mmistakes/minimal-mistakes/issues/716) - -### Bug Fixes - -* Add Jekyll as `spec.add_runtime_dependency` in `.gemspec`. - -## [4.1.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.1.0) - -### Enhancements - -* Add Jekyll include for adding [custom author profile links](https://github.com/mmistakes/minimal-mistakes/blob/master/_includes/author-profile-custom-links.html) to sidebar - -### Bug Fixes - -* Fix link to Discourse.org homepage in `noscript` section [#699](https://github.com/mmistakes/minimal-mistakes/pull/699) -* Fix padding issue with pagination buttons [#694](https://github.com/mmistakes/minimal-mistakes/issues/694) - -## [4.0.10](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.0.10) - -### Bug Fixes - -* Add Staticman default `path`. [#683](https://github.com/mmistakes/minimal-mistakes/issues/683) - -### Maintenance - -* Slight correction/improvements to French UI text. [#685](https://github.com/mmistakes/minimal-mistakes/pull/685) - -## [4.0.9](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.0.9) - -### Bug Fixes - -* Fix overlapping sidebar navigation lists due to `max-height: 100vh`. [#668](https://github.com/mmistakes/minimal-mistakes/issues/668) - -## [4.0.8](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.0.8) - -### Bug Fixes - -* Set default value for `words_per_minute`. [#657](https://github.com/mmistakes/minimal-mistakes/issues/657) -* Adjust sidebar navigation list CSS so it collapses at the correct width. - -### Maintenance - -* Add Google AdSense banner to `/docs/_layouts/default.html` for demo site. - -## [4.0.7](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.0.7) - -### Enhancements - -* Add `!default` values to **\_sass/\_variables.scss**. -* Collapse sidebar navigation lists on smaller screens. [#607](https://github.com/mmistakes/minimal-mistakes/issues/607) - -### Bug Fixes - -* Rename `#comments` to something more unique to avoid clashes with Kramdown generated headline IDs. [#582](https://github.com/mmistakes/minimal-mistakes/issues/582) - -### Maintenance - -* Reorganize SCSS partials in **assets/css/main.scss** - -## [4.0.6](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.0.6) - -### Enhancements - -* Add [`figure` helper](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#figure) to make generating a `
` element with a single image and caption easier. [#572](https://github.com/mmistakes/minimal-mistakes/pull/572) -* Add structured data markup for `itemprop="person"` in author profile sidebar. [#647](https://github.com/mmistakes/minimal-mistakes/pull/647) - -### Bug Fixes - -* Fix improper YAML formatting of some locales. [#651](https://github.com/mmistakes/minimal-mistakes/pull/651) - -### Maintenance - -* Clarify "migrating to gem-theme" instructions in **Quick Start Guide**. -* Add `rake preview` task for testing `/test` during theme development. - -## [4.0.5](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.0.5) - -### Enhancements - -* Update gems: `jekyll-sitemap` (0.12), `jekyll-feed` (0.8). -* Improve next/previous pager links visibility by changing gray color to blue (`$link-color`). - -### Bug Fixes - -* Fix `.sidebar` flicker/jump when hovered. [#583](https://github.com/mmistakes/minimal-mistakes/issues/583) - -### Maintenance - -* Move contents of `gh-pages` branch to `master` inside of the `/docs` folder. - -## [4.0.4](https://github.com/mmistakes/minimal-mistakes/releases/tag/4.0.4) - -### Enhancements - -* "Gemify" theme ~> `gem "minimal-mistakes-jekyll"` -* Replace `base_path` include with `absolute_url` filter where possible. -* Allow images to be placed in other folders. Remove `/images/` only restriction and encourage placement in `/assets/images/` instead. **Full paths are now required. If upgrading from MM 3.4 add `/images/` before filenames in Front Matter and `_config.yml` variables.** -* Add [home `layout`](https://github.com/mmistakes/minimal-mistakes/blob/master/_layouts/home.html) -* Added missing Turkish translations for UI text. [#621](https://github.com/mmistakes/minimal-mistakes/pull/621) -* Make author avatar optional in sidebar. -* Update **/\_includes/seo.html** for meta description. [#558](https://github.com/mmistakes/minimal-mistakes/pull/558) - -### Bug Fixes - -* Fix navigation bar animation "flicker" in Safari [#568](https://github.com/mmistakes/minimal-mistakes/issues/568) -* Fix `author.avatar` paths for externally hosted images. - -### Maintenance - -* Add documentation around `gem "minimal-mistakes-jekyll"` installation and use. -* Add note about using full image paths for eg. `assets/images/filename.jpg` (header images, overlays, galleries, feature rows, etc.) instead of assuming they will always be in `/images/`. -* Add "[Overriding Theme Defaults](https://mmistakes.github.io/minimal-mistakes/docs/overriding-theme-defaults/)" page to documentation. - -## [3.4.8](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.8) - -### Enhancements - -* Improve type readability for larger viewports by bumping up base `font-size`. [#533](https://github.com/mmistakes/minimal-mistakes/issues/533) -* Update Portuguese localized UI text. [#541](https://github.com/mmistakes/minimal-mistakes/pull/541) -* Add `page.title` and via parameter to Twitter share link. [#538](https://github.com/mmistakes/minimal-mistakes/pull/538) - -### Bug Fixes - -* Fix Last.fm author profile URL. [#540](https://github.com/mmistakes/minimal-mistakes/pull/540) - -### Maintenance - -* Move Brazilian Portuguese localized text under `pt-BR` key. - -## [3.4.7](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.7) - -### Enhancements - -* Add `layout` based and user-defined class names to `` element for added CSS hooks. [#526](https://github.com/mmistakes/minimal-mistakes/pull/526) -* Add simplified Chinese localized UI text. [#532](https://github.com/mmistakes/minimal-mistakes/pull/532) - -### Bug Fixes - -* Remove duplicate include of `base_path` in category-list.html [#522](https://github.com/mmistakes/minimal-mistakes/pull/522) - -## [3.4.6](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.6) - -### Enhancements - -* Add Italian "comments" related localized UI text. [#514](https://github.com/mmistakes/minimal-mistakes/pull/514) - -### Bug Fixes - -* Disable `compress` HTML layout by default. To enable add `layout: compress` to `_layouts/default.html`. - -## [3.4.5](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.5) - -### Enhancements - -* Improve line numbered code block styling when using `{% highlight linenos %}` tag. [#513](https://github.com/mmistakes/minimal-mistakes/issues/513) -* Add English fallback to "Follow" button label. [#496](https://github.com/mmistakes/minimal-mistakes/pull/496) - -### Bug Fixes - -* Fix Firefox alignment issues with code blocks generated with the `{% highlight %}` tag. [#512](https://github.com/mmistakes/minimal-mistakes/issues/512) - -### Maintenance - -- Clarified comment for `author.stackoverflow` value used in author sidebar links. [#487](https://github.com/mmistakes/minimal-mistakes/pull/487) -- Add list of localized text strings. [#488](https://github.com/mmistakes/minimal-mistakes/pull/488) -- Add `{% highlight %}` code block examples to demo site. -- Add documentation for using custom sidebar navigation menus. [#476](https://github.com/mmistakes/minimal-mistakes/issues/476) - -## [3.4.4](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.4) - -### Enhancements - -- Add French "comments" related localized UI text. [#472](https://github.com/mmistakes/minimal-mistakes/pull/472) - -### Bug Fixes - -- Exclude `vendor` in Jekyll config file. -- Fix Liquid syntax error for offending parenthesis. [#479](https://github.com/mmistakes/minimal-mistakes/issues/479) - -### Maintenance - -- Update gems: `colorator` (1.1.0), `forwardable-extended` (2.6.0), `github-pages` (93), `jekyll` (= 3.2.1), `minima` (= 1.0.1). - -## [3.4.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.3) - -### Enhancements - -- Make ["honeypot" `input`](https://github.com/mmistakes/minimal-mistakes/commit/06a8249a69a37dddda7e2a5bfbe32056c1a9a607) in Staticman comment form less obvious to spam bots -- Add padding to `.highlight` code blocks to better [align `overflow` scrollbar](https://github.com/mmistakes/minimal-mistakes/commit/e4abec0a6f7f8cff72505ca0754615df294fd5b3) to the bottom. -- Add additional image options for Twitter card social sharing meta tags. [#466](https://github.com/mmistakes/minimal-mistakes/pull/466) -- Add structured data markup for Staticman comments. [#458](https://github.com/mmistakes/minimal-mistakes/issues/458) - -### Bug Fixes - -- Format `og:locale` tag with `_` instead of `-`. [#462](https://github.com/mmistakes/minimal-mistakes/issues/462) - -### Maintenance - -- Add note to docs about using `url: http://localhost:4000` when working locally. - -## [3.4.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.2) - -### Enhancements - -- Improve UX of static comment forms. [#448](https://github.com/mmistakes/minimal-mistakes/issues/448) - -## [3.4.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.1) - -### Enhancements - -- Add `staticman.filename` configuration with UNIX timestamp for sorting data files. example ~> `comment-1470943149`. - -### Bug Fixes - -- Don't add `` to author name if URL is blank. - -## [3.4.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.4.0) - -### Enhancements - -- Support static-based commenting via [Staticman](https://staticman.net/) for sites hosted with GitHub Pages. [#424](https://github.com/mmistakes/minimal-mistakes/issues/424) - -## [3.3.7](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.7) - -### Bug Fixes - -- Re-enabled Jekyll plugins in `_config.yml` in case they aren't autoloaded in `Gemfile`. [#417](https://github.com/mmistakes/minimal-mistakes/issues/417) - -### Enhancements - -- Fallback to `site.github.url` for use in `{{ base_path }}` when `site.url` is `nil`. -- Replace Sass and Autoprefixer `npm` build scripts with [Jekyll's built-in asset support](https://jekyllrb.com/docs/assets/). [#333](https://github.com/mmistakes/minimal-mistakes/issues/333) - -### Maintenance - -- Document `site.repository` and its role with [`github-metadata`](https://github.com/jekyll/github-metadata) gem. -- Add sample [archive page with content](https://mmistakes.github.io/minimal-mistakes/archive-layout-with-content/) for testing styles on demo site. - -## [3.3.6](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.6) - -### Bug Fixes - -- Fix blank `site.teaser` bug. [#412](https://github.com/mmistakes/minimal-mistakes/issues/412) - -## [3.3.5](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.5) - -### Enhancements - -- Add English default text `site.locale` strings. [#407](https://github.com/mmistakes/minimal-mistakes/issues/407) -- Add Portuguese localized UI text. [#411](https://github.com/mmistakes/minimal-mistakes/pull/411) -- Add Italian localized UI text. [#409](https://github.com/mmistakes/minimal-mistakes/pull/409) - -### Maintenance - -- Remove unused Google AdSense variables in `_config.yml`. [#404](https://github.com/mmistakes/minimal-mistakes/issues/404) -- Update `Gemfile` instructions for using `github-pages` vs. native `jekyll` gems. -- Disable `gems:` in `_config.yml` and enable plugins with Bundler instead. -- Add `repository` to `_config.yml` to suppress GitHub Pages error `Liquid Exception: No repo name found.` - -## [3.3.4](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.4) - -### Enhancements - -- Add support for configurable feed URL to use a service like FeedBurner instead of linking directly to `feed.xml` in `` and the site footer. [#378](https://github.com/mmistakes/minimal-mistakes/issues/378), [#379](https://github.com/mmistakes/minimal-mistakes/pull/379), [#406](https://github.com/mmistakes/minimal-mistakes/pull/406) -- Add Turkish localized UI text. [#403](https://github.com/mmistakes/minimal-mistakes/pull/403) - -### Maintenance - -- Update gems: `activesupport` (4.2.7), `ffi` (1.9.14), `github-pages` (88), `jekyll-redirect-from` (0.11.0), `jekyll-watch` (1.5.0). - -## [3.3.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.3) - -### Enhancements - -- Make footer stick to the bottom of the page. - -### Bug Fixes - -- Fix `gallery` size bug [#402](https://github.com/mmistakes/minimal-mistakes/issues/402) - -### Maintenance - -- Set default `lang` to `en`. - -## [3.3.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.2) - -### Bug Fixes - -- Fix JavaScript that triggers "sticky" sidebar to avoid layout issues on screen sizes < `1024px`. [#396](https://github.com/mmistakes/minimal-mistakes/issues/396) - -## [3.3.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.3.1) - -### Enhancements - -- Enable image popup on < 500px wide screens. [#385](https://github.com/mmistakes/minimal-mistakes/issues/385) -- Indicate the relationship between component URLs in a paginated series by applying `rel="prev"` and `rel="next"` to pages that use `site.paginator`. [#253](https://github.com/mmistakes/minimal-mistakes/issues/253) -- Improve link posts in archive listings. [#276](https://github.com/mmistakes/minimal-mistakes/issues/276) - -### Maintenance - -- Update gems: `github-pages` (86), `ffi` 1.9.13, `jekyll-mentions` 1.1.3, and `rouge` 1.11.1 -- Fix note about custom sidebar content appearing below author profile. [#388](https://github.com/mmistakes/minimal-mistakes/issues/388) - -## [3.2.13](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.13) - -### Enhancements - -- Add English default UI text for Canada, Great Britain, and Australia. [#377](https://github.com/mmistakes/minimal-mistakes/issues/377) -- Switch default locale from `en-US` to `en`. - -## [3.2.12](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.12) - -### Enhancements - -- Remove window width "magic number" from sticky sidebar check in `main.js` for improved flexibility. [#375](https://github.com/mmistakes/minimal-mistakes/pull/375) - -### Bug Fixes - -- Fix author override conditional where a missing `authors.yml` would show broken sidebar content. Defaults to `site.author`. [#376](https://github.com/mmistakes/minimal-mistakes/pull/376) - -## [3.2.11](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.11) - -### Bug Fixes - -- Fix disappearing author sidebar links [#372](https://github.com/mmistakes/minimal-mistakes/issues/372) - -### Maintenance - -- Update gems: `github-pages` (84), `jekyll-github-metadata` 2.0.2, and `kramdown` 1.11.1 -- Update vendor JavaScript: jQuery 1.12.4, Stickyfill.js 1.1.4 -- Update Font Awesome 4.6.3 - -## [3.2.10](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.10) - -### Maintenance - -- Add `CONTRIBUTING.md` - -## [3.2.9](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.9) - -### Enhancements - -- Add support for [header overlay images](https://mmistakes.github.io/minimal-mistakes/docs/layouts/#header-overlay) for Open Graph images. [#358](https://github.com/mmistakes/minimal-mistakes/pull/358) - -### Bug Fixes - -- Fix `Person` typo Schema.org type [#358](https://github.com/mmistakes/minimal-mistakes/pull/358) - -### Maintenance - -- Update `github-pages` gem and dependencies. -- Remove `minutes_read` to avoid awkward reading time wording [#356](https://github.com/mmistakes/minimal-mistakes/issues/356) - -## [3.2.8](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.8) - -### Bug Fixes - -- Remove `cursor: pointer` that appears on white-space surrounding author side list items and links. [#354](https://github.com/mmistakes/minimal-mistakes/pull/354) - -### Maintenance - -- Add contributing information to `README.md`. [#357](https://github.com/mmistakes/minimal-mistakes/issues/357) - -## [3.2.7](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.7) - -### Enhancements - -- Add French localized UI text. [#346](https://github.com/mmistakes/minimal-mistakes/pull/346) - -### Bug Fixes - -- Fix branch logic for Yandex and Alexa in `seo.html`. [#348](https://github.com/mmistakes/minimal-mistakes/pull/348) - -## [3.2.6](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.6) - -### Bug Fixes - -- Fix error `Liquid Exception: divided by 0 in _includes/archive-single.html, included in _layouts/single.html` caused by null `words_per_minute` in `_config.yml`. [#345](https://github.com/mmistakes/minimal-mistakes/pull/345) - -## [3.2.5](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.5) - -### Bug Fixes - -- Fix link color in hero overlay to be white. -- Remove underlines from archive item titles. - -## [3.2.4](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.4) - -### Enhancements - -- Improve text alignment of masthead, hero overlay, page footer to be flush left and remove awkward white-space gaps. [#342](https://github.com/mmistakes/minimal-mistakes/issues/342) -- Add Spanish localized UI text. [#338](https://github.com/mmistakes/minimal-mistakes/pull/338) - -### Bug Fixes - -- Fix alignment of icons in author sidebar [#341](https://github.com/mmistakes/minimal-mistakes/issues/341) - -### Maintenance - -- Add background color to page footer to set it apart from main content. [#342](https://github.com/mmistakes/minimal-mistakes/issues/342) -- Add terms and privacy policy to theme's demo site. [#343](https://github.com/mmistakes/minimal-mistakes/issues/343) -- Update screenshots found in theme documentation. - -## [3.2.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.3) - -### Enhancements - -- Add [Discourse](https://www.discourse.org/) as a commenting provider. [#335](https://github.com/mmistakes/minimal-mistakes/pull/335) - -## [3.2.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.2) - -### Enhancements - -- Add support for image captions in Magnific Popup overlays via the [`gallery`](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#gallery) helper. [#334](https://github.com/mmistakes/minimal-mistakes/issues/334) - -## [3.2.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.1) - -### Bug Fixes - -- Remove need for "double tapping" masthead menu links on iOS devices. [#315](https://github.com/mmistakes/minimal-mistakes/issues/315) - -### Maintenance - -- Add `ISSUE_TEMPLATE.md` for improve issue submission process. - -## [3.2.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.2.0) - -### Bug Fixes - -- Fix missing category/tag links in post footer due to possible conflict with `site.tags` and `site.categories`. [#329](https://github.com/mmistakes/minimal-mistakes/issues/329#issuecomment-222375568) - -## [3.1.8](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.8) - -### Bug Fixes - -- Fix `Liquid Exception: undefined method 'gsub' for nil:NilClass in _layouts/single.html` error when `page.title` is null. `

` element is now conditional if `title:` is not set for a `page` or collection item. [#312](https://github.com/mmistakes/minimal-mistakes/issues/312) - -### Maintenance - -- Remove duplicate `fa-twitter` and `fa-twitter-square` classes from `_utilities.scss`. [#302](https://github.com/mmistakes/minimal-mistakes/issues/302) - -- Document installing additional Jekyll gem dependencies when using `gem "jekyll"` instead of `gem "github-pages"` to avoid any errors on run. [#305](https://github.com/mmistakes/minimal-mistakes/issues/305) - -## [3.1.7](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.7) - -### Enhancements - -- Add translation key for "Recent Posts" used in home page `index.html`. [#316](https://github.com/mmistakes/minimal-mistakes/pull/316) - -### Maintenance - -- Small fix to avoid underlying the whitespace between icons and related text when hovering. [#303](https://github.com/mmistakes/minimal-mistakes/pull/303) - -## [3.1.6](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.6) - -### Maintenance - -- Update gem dependencies. Run `bundle` to update `Gemfile.lock`. - -## [3.1.5](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.5) - -### Maintenance - -- Fix `www` and `https` links in author profile include [#293](https://github.com/mmistakes/minimal-mistakes/pull/293) - -## [3.1.4](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.4) - -### Enhancements - -- Add overlay_filter param to hero headers [#298](https://github.com/mmistakes/minimal-mistakes/pull/298) - -## [3.1.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.3) - -### Enhancements - -- Improve `site.locale` documentation [#284](https://github.com/mmistakes/minimal-mistakes/issues/284) -- Remove ProTip note about protocol-less `site.url` as it is an anti-pattern [#288](https://github.com/mmistakes/minimal-mistakes/issues/288) - -### Bug Fixes - -- Fix `og_image` URL in seo.html [#277](https://github.com/mmistakes/minimal-mistakes/issues/277) -- Fix `author_profile` toggle when assigned in a `_layout` [#285](https://github.com/mmistakes/minimal-mistakes/issues/285) -- Fix typo in `build:all` npm script [#283](https://github.com/mmistakes/minimal-mistakes/pull/283) -- Fix URL typo documentation [#287](https://github.com/mmistakes/minimal-mistakes/issues/287) -- SEO author bug. If `twitter.username` is set and `author.twitter` is `nil` bad things happen. [#289](https://github.com/mmistakes/minimal-mistakes/issues/289) - -## [3.1.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.2) - -### Enhancements - -- Explain how to use `nav_list` helper in [documentation](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#navigation-list). -- Reduce left/right padding on smaller screens to increase width of main content column. - -### Bug Fixes - -- Fix alignment issues with related posts [#273](https://github.com/mmistakes/minimal-mistakes/issues/273) and "Follow" button in author profile [#274](https://github.com/mmistakes/minimal-mistakes/issues/274). - -## [3.1.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.1) - -### Bug Fix - -- Fixed reading time bug when `words_per_minute` wasn't set in `_config.yml` [#271](https://github.com/mmistakes/minimal-mistakes/issues/271) - -## [3.1.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.1.0) - -### Enhancements - -- Updated [Font Awesome](https://fortawesome.github.io/Font-Awesome/whats-new/) to version 4.6.1 -- Added optional GitHub and Bitbucket links to footer if set on `site.author` in `_config.yml`. - -### Bug Fixes - -- Fixed Bitbucket URL typo in author sidebar. - -## [3.0.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/3.0.3) - -### Enhancements - -- Rebuilt the entire theme: layouts, includes, stylesheets, scripts, you name it. -- Refreshed the look and feel while staying true to the original design of the theme (author sidebar/main content). -- Replaced grid system with [Susy](http://susy.oddbird.net/). -- Replaced Grunt tasks with `npm` scripts. -- Removed Google Fonts and replaced with system fonts to improve performance (they can be [added back](https://mmistakes.github.io/minimal-mistakes/docs/stylesheets/) if desired) -- Greatly improved [theme documentation](https://mmistakes.github.io/minimal-mistakes/docs/quick-start-guide/). -- Increased the amount of sample posts, sample pages, and sample collections to throughly test the theme and edge-cases. -- Moved all sample content and assets out of `master` to keep it as clean as possible for forking. -- Added new layouts for `splash` pages, archives for [`jekyll-archives`](https://github.com/jekyll/jekyll-archives) if enabled, and [`compress.html`](https://github.com/penibelst/jekyll-compress-html) to improve performance. -- Added taxonomy links to posts (tags and categories). -- Added optional "reading time" meta data. -- Improved Liquid used for Twitter Cards and Open Graph data in ``. -- Improved `gallery` include helper and added `feature_row` for use with splash page layout. -- Added Keybase.io, author web URI, and Bitbucket optional links to sidebar. -- Add `feed.xml` link to footer. -- Added a [UI text data file](https://mmistakes.github.io/minimal-mistakes/docs/ui-text/) to easily change all text found in the theme. -- Added LinkedIn to optional social share buttons. -- Added Facebook, Google+, and custom commenting options in addition to Disqus. -- Added optional breadcrumb links. - -## [2.2.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/2.2.1) - -## [2.2.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/2.2.0) - -### Enhancements - -- Add support for Jekyll 3.0 -- Minor updates to syntax highlighting CSS and theme documentation - -## [2.1.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/2.1.3) - -### Enhancements - -- Cleaner print styles that remove the top navigation, social sharing buttons, and other elements not needed when printed. - -## [2.1.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/2.1.2) - -### Enhancements - -- Add optional CodePen icon/url to author side bar [#156](https://github.com/mmistakes/minimal-mistakes/pull/156) -- Documented Stackoverflow username explanation in `_config.yml` [#157](https://github.com/mmistakes/minimal-mistakes/pull/157) -- Simplified Liquid in `post-index.html` to better handle year listings [#166](https://github.com/mmistakes/minimal-mistakes/pull/166) - -### Bug Fixes - -- Cleanup Facebook related Open Graph meta tags [#149](https://github.com/mmistakes/minimal-mistakes/issues/149) -- Corrected minor typos [#158](https://github.com/mmistakes/minimal-mistakes/pull/158) [#175](https://github.com/mmistakes/minimal-mistakes/issues/175) - -## [2.1.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/2.1.1) - -### Enhancements - -- Add optional XING profile link to author sidebar -- Include open graph meta tags for feature image (if assigned) [#149](https://github.com/mmistakes/minimal-mistakes/issues/149) -- Create an include for feed footer - -### Bug Fixes - -- Remove http protocol from Google search form on sample 404 page -- Only show related posts if there are one or more available -- Fix alignment of email address link in author sidebar - -## [2.1.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/2.1.0) - -### Enhancements - -- Add optional social sharing buttons ([#42](https://github.com/mmistakes/minimal-mistakes/issues/42)) - -![social sharing buttons](https://cloud.githubusercontent.com/assets/1376749/5860522/d9f28a96-a22f-11e4-9b83-940a3a9a766a.png) - -- Add Soundcloud, YouTube ([#95](https://github.com/mmistakes/minimal-mistakes/pull/95)), Flickr ([#119](https://github.com/mmistakes/minimal-mistakes/pull/119)), and Weibo ([#116](https://github.com/mmistakes/minimal-mistakes/pull/116)) icons for use in author sidebar. -- Fix typos in posts and documentation and remove references to Less -- Include note about Octopress gem being optional -- Post author override support extended to the Atom feed ([#71](https://github.com/mmistakes/minimal-mistakes/pull/71)) -- Only include email address in feed if specified in `_config.yml` or author `_data` -- Wrap all page content in `#main` to harmonize article and post index styles ([#86](https://github.com/mmistakes/minimal-mistakes/issues/86)) -- Include new sample feature images for posts and pages -- Table of contents improvements: fix collapse toggle, indent nested elements, show on small screens, and create an `_include` for reusing in posts and pages. -- Include note about running Jekyll with `bundle exec` when using Bundler -- Fix home page path in top navigation -- Remove Google Authorship ([#120](https://github.com/mmistakes/minimal-mistakes/issues/120)) -- Remove duplicate author content that displayed in `div.article-author-bottom` -- Removed unused `_sass/print.scss` styles -- Improve comments in `.scss` files - -## [2.0.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/v2.0) - -## [1.3.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/1.3.3) - -### Enhancements - -- Added new icons and profile links for Stackoverflow, Dribbble, Pinterest, Foursquare, and Steam to the author bio sidebar. -- Cleaned up the Kramdown auto table of contents styling to be more readable -- Removed page width specific .less stylesheets and created mixins for easier updating -- Removed Modernizr since it wasn't being used -- Added pages to sitemap.xml -- Added category: to rake new_post task -- Minor typographic changes - -### Bug Fixes - -- Corrected various broken links in README and Theme Setup. - -## [1.3.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/1.3.1) - -### Enhancements - -- Cleaned up table of contents styling -- Reworked top navigation to be a better experience on small screens. Nav items now display vertically when the menu button is tapped, revealing links with larger touch targets. - -![menu animation](https://camo.githubusercontent.com/3fbd8c1326485f4b1ab32c0005c0fca7660b5d31/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313337363734392f323136343037352f31653366303663322d393465372d313165332d383961612d6436623636376562306564662e676966) - -## [1.2.0](https://github.com/mmistakes/minimal-mistakes/releases/tag/1.2.0) - -### Bug Fixes - -- Table weren't filling the entire width of the content container. They now scale at 100%. Thanks [@dhruvbhatia](https://github.com/dhruvbhatia) - -### Enhancements - -- Decreased spacing between Markdown footnotes -- Removed dark background on footer -- Removed UPPERCASE styling on post titles in the index listing - -## [1.1.4](https://github.com/mmistakes/minimal-mistakes/releases/tag/1.1.4) - -### Bug Fixes - -- Fix top navigation bug issue ([#10](https://github.com/mmistakes/minimal-mistakes/issues/10)) for real this time. Remember to clear your floats kids. - -## [1.1.3](https://github.com/mmistakes/minimal-mistakes/releases/tag/1.1.3) - -### Bug Fixes - -- Fix top navigation links that weren't click able on small viewports (Issue [#10](https://github.com/mmistakes/minimal-mistakes/issues/10)). -- Remove line wrap from top navigation links that may span multiple lines. - -## [1.1.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/1.1.2) - -### Enhancements - -- Added Grunt build script for compiling Less/JavaScript and optimizing image assets. -- Added support for large image summary Twitter card. -- Stylesheet adjustments - -## [1.1.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/1.1.1) - -### Bug Fixes - -- Removed [Typeplate](http://typeplate.com/) styles. Was [causing issues with newer versions of Less](https://github.com/typeplate/typeplate.github.io/issues/108) and is no longer maintained. - -### Enhancements - -- Added [image attribution](http://mmistakes.github.io/minimal-mistakes/theme-setup/#feature-images) for post and page feature images. -- Added [404 page](http://mmistakes.github.io/minimal-mistakes/404.html). -- Cleaned up various Less variables to better align with naming conventions used in other MM Jekyll themes. -- Removed Chrome Frame references. -- Added global CSS3 transitions to text and block elements. -- Improved typography in a few places. - -## [1.0.2](https://github.com/mmistakes/minimal-mistakes/releases/tag/v1.0.2) - -### Enhancements - -- Google Analytics, Google Authorship, webmaster verifies, and Twitter card meta are now optional. - -## [1.0.1](https://github.com/mmistakes/minimal-mistakes/releases/tag/v1.0.1) diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 1291498971d7a..0000000000000 --- a/Gemfile +++ /dev/null @@ -1,2 +0,0 @@ -source "https://rubygems.org" -gemspec \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index 599a209c27fc8..0000000000000 --- a/Gemfile.lock +++ /dev/null @@ -1,103 +0,0 @@ -PATH - remote: . - specs: - minimal-mistakes-jekyll (4.24.0) - jekyll (>= 3.7, < 5.0) - jekyll-feed (~> 0.1) - jekyll-gist (~> 1.5) - jekyll-include-cache (~> 0.1) - jekyll-paginate (~> 1.1) - jekyll-sitemap (~> 1.3) - -GEM - remote: https://rubygems.org/ - specs: - addressable (2.8.1) - public_suffix (>= 2.0.2, < 6.0) - colorator (1.1.0) - concurrent-ruby (1.1.10) - em-websocket (0.5.3) - eventmachine (>= 0.12.9) - http_parser.rb (~> 0) - eventmachine (1.2.7) - faraday (2.6.0) - faraday-net_http (>= 2.0, < 3.1) - ruby2_keywords (>= 0.0.4) - faraday-net_http (3.0.1) - ffi (1.15.5) - forwardable-extended (2.6.0) - http_parser.rb (0.8.0) - i18n (1.12.0) - concurrent-ruby (~> 1.0) - jekyll (4.3.0) - addressable (~> 2.4) - colorator (~> 1.0) - em-websocket (~> 0.5) - i18n (~> 1.0) - jekyll-sass-converter (>= 2.0, < 4.0) - jekyll-watch (~> 2.0) - kramdown (~> 2.3, >= 2.3.1) - kramdown-parser-gfm (~> 1.0) - liquid (~> 4.0) - mercenary (>= 0.3.6, < 0.5) - pathutil (~> 0.9) - rouge (>= 3.0, < 5.0) - safe_yaml (~> 1.0) - terminal-table (>= 1.8, < 4.0) - webrick (~> 1.7) - jekyll-feed (0.17.0) - jekyll (>= 3.7, < 5.0) - jekyll-gist (1.5.0) - octokit (~> 4.2) - jekyll-include-cache (0.2.1) - jekyll (>= 3.7, < 5.0) - jekyll-paginate (1.1.0) - jekyll-sass-converter (2.2.0) - sassc (> 2.0.1, < 3.0) - jekyll-sitemap (1.4.0) - jekyll (>= 3.7, < 5.0) - jekyll-watch (2.2.1) - listen (~> 3.0) - kramdown (2.4.0) - rexml - kramdown-parser-gfm (1.1.0) - kramdown (~> 2.0) - liquid (4.0.3) - listen (3.7.1) - rb-fsevent (~> 0.10, >= 0.10.3) - rb-inotify (~> 0.9, >= 0.9.10) - mercenary (0.4.0) - octokit (4.25.1) - faraday (>= 1, < 3) - sawyer (~> 0.9) - pathutil (0.16.2) - forwardable-extended (~> 2.6) - public_suffix (5.0.0) - rake (13.0.6) - rb-fsevent (0.11.2) - rb-inotify (0.10.1) - ffi (~> 1.0) - rexml (3.2.5) - rouge (4.0.0) - ruby2_keywords (0.0.5) - safe_yaml (1.0.5) - sassc (2.4.0) - ffi (~> 1.9) - sawyer (0.9.2) - addressable (>= 2.3.5) - faraday (>= 0.17.3, < 3) - terminal-table (3.0.2) - unicode-display_width (>= 1.1.1, < 3) - unicode-display_width (2.3.0) - webrick (1.7.0) - -PLATFORMS - arm64-darwin-21 - -DEPENDENCIES - bundler - minimal-mistakes-jekyll! - rake (>= 12.3.3) - -BUNDLED WITH - 2.3.23 diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 3e733ff32a69f..0000000000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013-2020 Michael Rose and contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md deleted file mode 100644 index aa582756bb0f4..0000000000000 --- a/README.md +++ /dev/null @@ -1,130 +0,0 @@ -# This is for Angadh's information (mostly) -1. To publish a post, create a new `yyyy-mm-dd-post_name.md` file in the post directory and push changes to github. -Then run `rake publish` at the command line. - -2. Navigation buttons can be added and removed by editing contents of `_data/navigation.yml`. - -3. While ChatGPT helped with some things, the theme solutiuon was best solved for [here](https://github.com/mmistakes/minimal-mistakes/discussions/2033#discussioncomment-257421). - -This website makes use of the [Minimal Mistakes Jekyll theme](https://mmistakes.github.io/minimal-mistakes/) -alongside the [Tufte CSS implementation]() - - -[![LICENSE](https://img.shields.io/badge/license-MIT-lightgrey.svg)](https://raw.githubusercontent.com/mmistakes/minimal-mistakes/master/LICENSE) - - -## Notable features - -- Bundled as a "theme gem" for easier installation/upgrading. -- Compatible with GitHub Pages. -- Support for Jekyll's built-in Sass/SCSS preprocessor. -- Nine different skins (color variations). -- Several responsive layout options (single, archive index, search, splash, and paginated home page). -- Optimized for search engines with support for [Twitter Cards](https://dev.twitter.com/cards/overview) and [Open Graph](http://ogp.me/) data. -- Optional [header images](https://mmistakes.github.io/minimal-mistakes/docs/layouts/#headers), [custom sidebars](https://mmistakes.github.io/minimal-mistakes/docs/layouts/#sidebars), [table of contents](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#table-of-contents), [galleries](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#gallery), related posts, [breadcrumb links](https://mmistakes.github.io/minimal-mistakes/docs/configuration/#breadcrumb-navigation-beta), [navigation lists](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#navigation-list), and more. -- Commenting support (powered by [Disqus](https://disqus.com/), [Facebook](https://developers.facebook.com/docs/plugins/comments), Google+, [Discourse](https://www.discourse.org/), static-based via [Staticman](https://staticman.net/), [utterances](https://utteranc.es/), and [giscus](https://giscus.app/)). -- [Google Analytics](https://www.google.com/analytics/) support. -- UI localized text in English (default), Arabic (عربي), Brazilian Portuguese (Português brasileiro), Catalan, Chinese, Danish, Dutch, Finnish, French (Français), German (Deutsch), Greek, Hebrew, Hindi (हिंदी), Hungarian, Indonesian, Irish (Gaeilge), Italian (Italiano), Japanese, Kiswahili, Korean, Malayalam, Myanmar (Burmese), Nepali (Nepalese), Norwegian (Norsk), Persian (فارسی), Polish, Punjabi (ਪੰਜਾਬੀ), Romanian, Russian, Slovak, Spanish (Español), Swedish, Thai, Turkish (Türkçe), and Vietnamese. - -## Demo pages - -| Name | Description | -| ------------------------------------------- | ----------------------------------------------------- | -| [Post with Header Image][header-image-post] | A post with a large header image. | -| [HTML Tags and Formatting Post][html-tags-post] | A variety of common markup showing how the theme styles them. | -| [Syntax Highlighting Post][syntax-post] | Post displaying highlighted code. | -| [Post with a Gallery][gallery-post] | A post showing several images wrapped in `
` elements. | -| [Sample Collection Page][sample-collection] | Single page from a collection. | -| [Categories Archive][categories-archive] | Posts grouped by category. | -| [Tags Archive][tags-archive] | Posts grouped by tag. | - -Additional sample posts are available under [posts archive][year-archive] on the demo site. Source files for these (and the entire demo site) can be found in [`/docs`](docs). - -[header-image-post]: https://mmistakes.github.io/minimal-mistakes/layout-header-image-text-readability/ -[gallery-post]: https://mmistakes.github.io/minimal-mistakes/post%20formats/post-gallery/ -[html-tags-post]: https://mmistakes.github.io/minimal-mistakes/markup/markup-html-tags-and-formatting/ -[syntax-post]: https://mmistakes.github.io/minimal-mistakes/markup-syntax-highlighting/ -[sample-collection]: https://mmistakes.github.io/minimal-mistakes/recipes/chocolate-chip-cookies/ -[categories-archive]: https://mmistakes.github.io/minimal-mistakes/categories/ -[tags-archive]: https://mmistakes.github.io/minimal-mistakes/tags/ -[year-archive]: https://mmistakes.github.io/minimal-mistakes/year-archive/ - ---- - -## License - -The MIT License (MIT) - -Copyright (c) 2013-2020 Michael Rose and contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -Minimal Mistakes incorporates icons from [The Noun Project](https://thenounproject.com/) -creators Garrett Knoll, Arthur Shlain, and tracy tam. -Icons are distributed under Creative Commons Attribution 3.0 United States (CC BY 3.0 US). - -Minimal Mistakes incorporates [Font Awesome](http://fontawesome.io/), -Copyright (c) 2017 Dave Gandy. -Font Awesome is distributed under the terms of the [SIL OFL 1.1](http://scripts.sil.org/OFL) -and [MIT License](http://opensource.org/licenses/MIT). - -Minimal Mistakes incorporates photographs from [Unsplash](https://unsplash.com). - -Minimal Mistakes incorporates [Susy](http://susy.oddbird.net/), -Copyright (c) 2017, Miriam Eric Suzanne. -Susy is distributed under the terms of the [BSD 3-clause "New" or "Revised" License](https://opensource.org/licenses/BSD-3-Clause). - -Minimal Mistakes incorporates [Breakpoint](http://breakpoint-sass.com/). -Breakpoint is distributed under the terms of the [MIT/GPL Licenses](http://opensource.org/licenses/MIT). - -Minimal Mistakes incorporates [FitVids.js](https://github.com/davatron5000/FitVids.js/), -Copyright (c) 2013 Dave Rubert and Chris Coyier. -FitVids is distributed under the terms of the [WTFPL License](http://www.wtfpl.net/). - -Minimal Mistakes incorporates [Magnific Popup](http://dimsemenov.com/plugins/magnific-popup/), -Copyright (c) 2014-2016 Dmitry Semenov, http://dimsemenov.com. -Magnific Popup is distributed under the terms of the MIT License. - -Minimal Mistakes incorporates [Smooth Scroll](http://github.com/cferdinandi/smooth-scroll), -Copyright (c) 2019 Chris Ferdinandi. -Smooth Scroll is distributed under the terms of the [MIT License](http://opensource.org/licenses/MIT). - -Minimal Mistakes incorporates [Gumshoejs](http://github.com/cferdinandi/gumshoe), -Copyright (c) 2019 Chris Ferdinandi. -Gumshoejs is distributed under the terms of the [MIT License](http://opensource.org/licenses/MIT). - -Minimal Mistakes incorporates [jQuery throttle / debounce](http://benalman.com/projects/jquery-throttle-debounce-plugin/), -Copyright (c) 2010 "Cowboy" Ben Alman. -jQuery throttle / debounce is distributed under the terms of the [MIT License](http://opensource.org/licenses/MIT). - -Minimal Mistakes incorporates [GreedyNav.js](https://github.com/lukejacksonn/GreedyNav), -Copyright (c) 2015 Luke Jackson. -GreedyNav.js is distributed under the terms of the [MIT License](http://opensource.org/licenses/MIT). - -Minimal Mistakes incorporates [Jekyll Group-By-Array](https://github.com/mushishi78/jekyll-group-by-array), -Copyright (c) 2015 Max White . -Jekyll Group-By-Array is distributed under the terms of the [MIT License](http://opensource.org/licenses/MIT). - -Minimal Mistakes incorporates [@allejo's Pure Liquid Jekyll Table of Contents](https://allejo.io/blog/a-jekyll-toc-in-liquid-only/), -Copyright (c) 2017 Vladimir Jimenez. -Pure Liquid Jekyll Table of Contents is distributed under the terms of the [MIT License](http://opensource.org/licenses/MIT). - -Minimal Mistakes incorporates [Lunr](http://lunrjs.com), -Copyright (c) 2018 Oliver Nightingale. -Lunr is distributed under the terms of the [MIT License](http://opensource.org/licenses/MIT). diff --git a/Rakefile b/Rakefile deleted file mode 100755 index 6fd57bd066c63..0000000000000 --- a/Rakefile +++ /dev/null @@ -1,34 +0,0 @@ -require 'rubygems' -require 'rake' -require 'rdoc' -require 'date' -require 'yaml' -require 'tmpdir' -require 'jekyll' - -desc "Generate blog files" -task :generate do - Jekyll::Site.new(Jekyll.configuration({ - "source" => ".", - "destination" => "_site" - })).process -end - - -desc "Generate and publish blog to gh-pages" -task :publish => [:generate] do - Dir.mktmpdir do |tmp| - system "mv _site/* #{tmp}" - system "git checkout -B gh-pages" - system "rm -rf *" - system "mv #{tmp}/* ." - message = "Site updated at #{Time.now.utc}" - system "git add ." - system "git commit -am #{message.shellescape}" - system "git push origin gh-pages --force" - system "git checkout master" - system "echo yolo" - end -end - -task :default => :publish \ No newline at end of file diff --git a/_code/AssemblyOfRim.png b/_code/AssemblyOfRim.png deleted file mode 100644 index fc4fbc609ac92..0000000000000 Binary files a/_code/AssemblyOfRim.png and /dev/null differ diff --git a/_code/CondenserPipesInstallation.png b/_code/CondenserPipesInstallation.png deleted file mode 100644 index e985eedd78d6a..0000000000000 Binary files a/_code/CondenserPipesInstallation.png and /dev/null differ diff --git a/_code/spacestations_1.ipynb b/_code/spacestations_1.ipynb deleted file mode 100644 index 321a5afd9fcef..0000000000000 --- a/_code/spacestations_1.ipynb +++ /dev/null @@ -1,759 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "6308166f", - "metadata": {}, - "source": [ - "# Capacity Comparison: 100-Person Space Station vs. ISS\n", - "## Known aspects of the ISS (or Data)\n", - "The volume of the ISS is:\n", - "- Total Pressurized Volume, $(V_{tot})_{ISS}$: $916 \\,m^3$\n", - "- Habitable Volume, $(V_{hab})_{ISS}$: $388 \\,m^3$\n", - "\n", - "This means about $42\\%$ of the ISS's total volume is habitable. It typically hosts a:\n", - "- Standard crew, $n_{avg} = 7$ astronauts.\n", - "- Maximum crew of,$n_{max} = 13$ astronauts (short-term).\n", - "\n", - "Not sure when this will matter in my analysis but the ISS mass is $420,000 \\, kg$." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "8b5963b4", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "max volume per crew 64.66666666666667\n", - "min volume per crew 29.846153846153847\n", - "ideal volume per crew 152.66666666666666\n", - "habitable percentage 42.35807860262009\n" - ] - } - ], - "source": [ - "ISS_Pressurized_Volume = 916 #m^3\n", - "ISS_Habitable_Volume = 388 #m^3\n", - "ISS_min_crew = 6 #astronauts\n", - "ISS_max_crew = 13 #astronauts\n", - "max_volume_per_crew_ISS = ISS_Habitable_Volume/ISS_min_crew\n", - "min_volume_per_crew_ISS = ISS_Habitable_Volume/ISS_max_crew\n", - "ideal_volume_per_crew_ISS = ISS_Pressurized_Volume/ISS_min_crew\n", - "print(\"max volume per crew\", max_volume_per_crew_ISS)\n", - "print(\"min volume per crew\", min_volume_per_crew_ISS)\n", - "print(\"ideal volume per crew\", ideal_volume_per_crew_ISS)\n", - "print(\"habitable percentage\", 100*ISS_Habitable_Volume/ISS_Pressurized_Volume)" - ] - }, - { - "cell_type": "markdown", - "id": "6ae7e2b0", - "metadata": {}, - "source": [ - "## Known aspects of Von Braun's Rotating Wheel Space Station\n", - "Wernher von Braun's [video](https://www.youtube.com/watch?v=5JJL8CUfF-o) says that a rotating wheel space station would have 9 sections for:\n", - "1. Headquarter and Communications\n", - "2. Earth Weather Observation/Prediction\n", - "3. Military Reconnaisance using Optical and Radar Telescopes\n", - "4. Emergency Hospital Section\n", - "5. Astronomy\n", - "6. Calculation Machines and a lower/outer deck with maintenance facilities\n", - "7. A/C equipment\n", - "8. Living quarters\n", - "9. Botanical and Zoological Laboratory\n", - "The video shows two decks throughout the space station, which I assume is 6 $m$ height in total. Wikipedia says 3 decks, but I will stick to two 6 $m$ decks for now.\n", - "\n", - "The system is powered by an atomic reactor attached on one side of its central hub; its heat will drive a turbogenerator to power the station.\n", - "Radio and radar antennas sit atop the reactor. The other side of the hub has an airlock for astronauts to access/exit the space station via smaller spacecraft. Like a bicycle wheel, the system had thin spokes are condensers for the turbogenerator and air-conditioning plant. Three larger tubes are elevator shafts that connect the hub to the main habitable sections of the wheel station. The station would:\n", - "- host 50 astronauts though [Wikipedia](https://en.wikipedia.org/wiki/Rotating_wheel_space_station#History) states 80 people.\n", - "- rotate at roughly 3 rpm to produce artificial gravity on the rim; and\n", - "- be a torus of 250 $ft$ (76 $m$) diameter. The distance from the center of the tube to the center of the torus is $R = 70/2 = 35 \\, m$ and the minor radius of the tube is $r = 6/2 = 3 \\, m$. The volume of this torus is then the station's total pressurized volume, which is given by:\n", - "$(V_{tot})_{vB} = 2 \\pi^2 R r^2$\n", - "\n", - "So, we can estimate the volume of the the von Braun space station as:\n", - "- Total Pressurized Volume: 6217.85 $m^3$\n", - "- Habitable Volume: 3730.71 $m^3$" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "cfaf4fe9", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "vb_wheel_Pressurized_Volume 6217.850772686295\n", - "vb_wheel_Habitable_Volume 3730.710463611777\n", - "max volume per crew 74.61420927223554\n", - "min volume per crew 37.30710463611777\n", - "ideal volume per crew 124.35701545372591\n" - ] - } - ], - "source": [ - "from math import pi\n", - "vb_wheel_dia = 70 #m\n", - "vb_wheel_height = 6 #m\n", - "\n", - "vb_wheel_Pressurized_Volume = 2 * pi**2 * (vb_wheel_dia/2) * (vb_wheel_height/2)**2 #m^3\n", - "habitable_factor_ISS = ISS_Habitable_Volume/ISS_Pressurized_Volume\n", - "habitable_factor_targeted = 0.6\n", - "vb_wheel_Habitable_Volume = vb_wheel_Pressurized_Volume * habitable_factor_targeted #m^3\n", - "\n", - "vb_wheel_std_crew = 50 #astronauts\n", - "vb_wheel_max_crew = 100 #astronauts\n", - "max_volume_per_crew_vb = vb_wheel_Habitable_Volume/vb_wheel_std_crew\n", - "min_volume_per_crew_vb = vb_wheel_Habitable_Volume/vb_wheel_max_crew\n", - "ideal_volume_per_crew_vb = vb_wheel_Pressurized_Volume/vb_wheel_std_crew\n", - "print(\"vb_wheel_Pressurized_Volume\", vb_wheel_Pressurized_Volume)\n", - "print(\"vb_wheel_Habitable_Volume\", vb_wheel_Habitable_Volume)\n", - "print(\"max volume per crew\", max_volume_per_crew_vb)\n", - "print(\"min volume per crew\", min_volume_per_crew_vb)\n", - "print(\"ideal volume per crew\", ideal_volume_per_crew_vb)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "174e18e8", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "habitable_ratios of von Braun's wheel vs ISS 9.6152331536386\n", - "Pressurized_ratios of von Braun's wheel vs ISS 6.788046695072375\n" - ] - } - ], - "source": [ - "habitable_ratios = vb_wheel_Habitable_Volume/ISS_Habitable_Volume\n", - "Pressurized_ratios = vb_wheel_Pressurized_Volume/ISS_Pressurized_Volume\n", - "print(\"habitable_ratios of von Braun's wheel vs ISS\", habitable_ratios)\n", - "print(\"Pressurized_ratios of von Braun's wheel vs ISS\", Pressurized_ratios)" - ] - }, - { - "cell_type": "markdown", - "id": "07edd60a", - "metadata": {}, - "source": [ - "### How did von Braun imagine its realisation?\n", - "Pre-fabricated and tested on the ground after which it is dismantled and assembled robotically in-orbit.\n", - "\n", - "First, the hub is inflated using compressed air from built-in tanks. Protection from meteors is ensured by putting thin metal plates; this is unnecessary today as we have developed high-strength textiles that are used on inflatable space stations.\n", - "\n", - "A second launch brings with it an airlock, which is again attached by robots; this allows the pressurized hub to be used as a temporary quarters as the station assembly continues with astronaut-robot teams.\n", - "\n", - "A number successive launches (he says) ensure the \"parts of the station are assembled in the correct order\". Nylon tethers prevent parts from drifting away.\n", - "\n", - "The reactor appears to be the next big piece that is installed so I assume this is the third launch. This is followed by the elevator shafts and the rim sections being brought together. We can assume a single launch for each module: $3$ elevator tubes and 9 rim modules (assuming one per section).\n", - "\n", - "
\n", - "\n", - "
\n", - "\n", - "Assuming condenser pipes are installed from one launch (but the strucutre itself needs to be unwound robotically, which seems unreasonable/unreal at the moment as a robotic task.\n", - "\n", - "
\n", - "\n", - "
\n", - "\n", - "Lastly, the installation of instruments/equipment (a simple catch-all term for imaging antennas and the lab facilities compute for astornomical/EO data analysis, I think) and two small rocket motors on the rim. These rocket motors \"blast for a few seconds\" to revolve the station at about $3 \\, RPM$. \n", - "\n", - "\n", - "\n", - "### Some Percieved Gaps in Design:\n", - "1. Assumes a launch every 24 hours- not close to it then and not really close to that kind of cadence today. What could we do today?\n", - "2. Doesn't really say how many launches are needed to realize assembly in the video. This can probably be found elsewhere but my estimate from watching the video is 15-18 launches.\n", - "3. The process involves a number of assembly robots but we barely have one of these today. And whatever is there not autonomous.\n", - "\n", - "### Question: How can we double the total volume of the von Braun wheel?\n", - "To double the wheel's pressurized volume to 12435.7 $m^3$, one option is to increase the tube's height to 8.48 $m$. " - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "17b60e39", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "doubled vb_wheel_Pressurized_Volume 12435.701545372594 when tube dia is 8.485281374238571\n" - ] - } - ], - "source": [ - "from math import sqrt\n", - "vb_wheel_height_for_doubled_volume = 6 * sqrt(2) #m\n", - "vb_wheel_Pressurized_Volume_doubled = 2 * pi**2 * (vb_wheel_dia/2) * (vb_wheel_height_for_doubled_volume/2)**2 #m^3\n", - "print(\"doubled vb_wheel_Pressurized_Volume\", vb_wheel_Pressurized_Volume_doubled, \"when tube dia is\", vb_wheel_height_for_doubled_volume)" - ] - }, - { - "cell_type": "markdown", - "id": "b58a36f7", - "metadata": {}, - "source": [ - "The other option is to increase the torus's diameter altogether, which we discuss later." - ] - }, - { - "cell_type": "markdown", - "id": "4b1425c0", - "metadata": {}, - "source": [ - "### Question: Are there reasons to increase the radius of the wheel as opposed to the height of the tube?\n", - "One benefit might be that you need to rotate the tube slower to generate artificial gravity." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "955f8888", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "rot speed of von Braun wheel to generate a third of Earth g is 0.30566087650952556 rad/s or 2.918839538861016 RPM\n" - ] - } - ], - "source": [ - "vb_wheel_radius = vb_wheel_dia / 2\n", - "earth_g = 9.81 #m/s^2\n", - "rot_speed_vb = sqrt(1/3*earth_g/vb_wheel_radius)\n", - "print(\"rot speed of von Braun wheel to generate a third of Earth g is\", rot_speed_vb, \"rad/s or\", rot_speed_vb/0.10472, \"RPM\")" - ] - }, - { - "cell_type": "markdown", - "id": "dce9bcf5", - "metadata": {}, - "source": [ - "Comparing my calculations to [2001: A Space Odyssey's Space Staiton V](https://youtu.be/im-JM0f_J7s?t=136)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "9a89acaf", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2001's wheel generates Moon's gravity by rotating at 0.10503967504392488 rad/s or 1.003052664666968 RPM\n", - "2001's wheel generates third of Earth's gravity by rotating at 0.147648230602334 rad/s or 1.4099334473102942 RPM\n", - "2001's wheel generates third of Earth's gravity by rotating at 0.25573423705088844 rad/s or 2.442076366032166 RPM\n" - ] - } - ], - "source": [ - "SSV_wheel_radius = 150 #m\n", - "moon_g = 1.655 #m/s^2\n", - "rot_speed_SSV_for_moon_g = sqrt(moon_g/SSV_wheel_radius)\n", - "print(\"2001's wheel generates Moon's gravity by rotating at\", rot_speed_SSV_for_moon_g, \"rad/s or\", rot_speed_SSV_for_moon_g/0.10472, \"RPM\")\n", - "rot_speed_SSV_for_earth_g = sqrt(1/3*earth_g/SSV_wheel_radius)\n", - "print(\"2001's wheel generates third of Earth's gravity by rotating at\", rot_speed_SSV_for_earth_g, \"rad/s or\", rot_speed_SSV_for_earth_g/0.10472, \"RPM\")\n", - "rot_speed_SSV_for_earth_g = sqrt(earth_g/SSV_wheel_radius)\n", - "print(\"2001's wheel generates third of Earth's gravity by rotating at\", rot_speed_SSV_for_earth_g, \"rad/s or\", rot_speed_SSV_for_earth_g/0.10472, \"RPM\")" - ] - }, - { - "cell_type": "markdown", - "id": "bfc94662", - "metadata": {}, - "source": [ - "This shows that lower spin rates (needed to prevent motion sickness and acceleration differentials between that push blood to the feet) result in accelerations closer to Earth's but are achievable only with structures larger in diameter than the von Braun wheel. But building larger structures carries the benefit of more pressurized volumes; Space Station V is a little over 4 times the volume of the von Braun wheel and 29 times the ISS." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "bc7c012c", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "SSV Pressurized volume is 26647.931882941266\n", - "SSV pressurized volume is 4.285714285714286 time the von Braun wheel's and 29.09162869316732 times that of ISS.\n" - ] - } - ], - "source": [ - "SSV_Pressurized_Volume = 2 * pi**2 * (SSV_wheel_radius) * (vb_wheel_height/2)**2 #m^3\n", - "print(\"SSV Pressurized volume is\", SSV_Pressurized_Volume)\n", - "print(\"SSV pressurized volume is\", SSV_Pressurized_Volume/vb_wheel_Pressurized_Volume, \"time the von Braun wheel's and\", SSV_Pressurized_Volume/ISS_Pressurized_Volume, \"times that of ISS.\")" - ] - }, - { - "cell_type": "markdown", - "id": "2a356106", - "metadata": {}, - "source": [ - "SSV volume is 4.285714285714286 time the von Braun wheel's and 29.09162869316732 times that of ISS.\n", - "\n", - "## So how can we get to this in one launch- that's the question!\n", - "Are inflatables the answer....?" - ] - }, - { - "cell_type": "markdown", - "id": "e9120d38", - "metadata": {}, - "source": [] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "0d72bb34", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "For a torus with an internal volume of 100000 m^3 and an inner tube diameter of 10 m:\n", - "The large radius (R) is approximately 202.64 m\n", - "The overall diameter of the torus is approximately 415.28 m\n", - "\n", - "Comparison to ISS:\n", - "But it has a volume of 109.17 times that of ISS\n", - "\n", - "Comparison to von Braun's wheel:\n", - "But it has a volume of 16.08 times that of von Braun's wheel\n", - "\n", - "Comparison to von Braun's wheel:\n", - "But it has a volume of 16.08 times that of von Braun's wheel\n", - "\n", - "Volume per crew of this space station assuming 100 crew:\n", - "This is 1000.00 cubic meters per crew\n", - "This is 6.55 times that of ISS\n" - ] - } - ], - "source": [ - "# Calculate the diameter of a torus with an internal volume of 100,000 m^3 and inner tube diameter of 10 m\n", - "from math import pi\n", - "# Given values\n", - "V_hph = 100000 # m^3, internal volume\n", - "d_hph = 10 # m, inner tube diameter (small diameter)\n", - "\n", - "# Calculate the radius of the inner tube\n", - "r_hph = d_hph / 2\n", - "\n", - "# The volume of a torus is given by the formula: V = 2π^2 * R * r^2\n", - "# Where R is the distance from the center of the torus to the center of the tube (large radius)\n", - "\n", - "# Rearrange the formula to solve for R\n", - "R_hph = V_hph / (2 * pi**2 * r_hph**2)\n", - "\n", - "# Calculate the overall diameter of the torus\n", - "D_hph = 2 * (R_hph + r_hph)\n", - "\n", - "print(f\"For a torus with an internal volume of {V_hph} m^3 and an inner tube diameter of {d_hph} m:\")\n", - "print(f\"The large radius (R) is approximately {R_hph:.2f} m\")\n", - "print(f\"The overall diameter of the torus is approximately {D_hph:.2f} m\")\n", - "\n", - "# Compare to Space Station V\n", - "print(f\"\\nComparison to ISS:\")\n", - "print(f\"But it has a volume of {V_hph/ISS_Pressurized_Volume:.2f} times that of ISS\")\n", - "\n", - "print(f\"\\nComparison to von Braun's wheel:\")\n", - "print(f\"But it has a volume of {V_hph/vb_wheel_Pressurized_Volume:.2f} times that of von Braun's wheel\")\n", - "\n", - "print(f\"\\nComparison to von Braun's wheel:\")\n", - "print(f\"But it has a volume of {V_hph/vb_wheel_Pressurized_Volume:.2f} times that of von Braun's wheel\")\n", - "\n", - "print(f\"\\nVolume per crew of this space station assuming 100 crew:\")\n", - "print(f\"This is {V_hph/100:.2f} cubic meters per crew\")\n", - "print(f\"This is {(V_hph/100)/(ISS_Pressurized_Volume/ISS_min_crew):.2f} times that of ISS\")" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "8b05a266", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "For a torus with an internal volume of 49348.02200544679 m^3 and an inner tube diameter of 10 m:\n", - "The large radius (R) is approximately 100.00 m\n", - "The overall diameter of the torus is approximately 210.00 m\n", - "\n", - "Comparison to ISS:\n", - "But it has a volume of 53.87 times that of ISS\n", - "\n", - "Comparison to von Braun's wheel:\n", - "But it has a volume of 7.94 times that of von Braun's wheel\n", - "\n", - "Volume per crew of this space station assuming 100 crew:\n", - "This is 493.48 cubic meters per crew\n", - "This is 3.23 times that of ISS\n" - ] - } - ], - "source": [ - "R_hph = 100 # m^3, internal volume\n", - "d_hph = 10 # m, inner tube diameter (small diameter)\n", - "\n", - "# Rearrange the formula to solve for R\n", - "V_hph = 2 * pi**2 * R_hph * r_hph**2\n", - "# Calculate the overall diameter of the torus\n", - "D_hph = 2 * (R_hph + r_hph)\n", - "\n", - "print(f\"For a torus with an internal volume of {V_hph} m^3 and an inner tube diameter of {d_hph} m:\")\n", - "print(f\"The large radius (R) is approximately {R_hph:.2f} m\")\n", - "print(f\"The overall diameter of the torus is approximately {D_hph:.2f} m\")\n", - "\n", - "# Compare to Space Station V\n", - "print(f\"\\nComparison to ISS:\")\n", - "print(f\"But it has a volume of {V_hph/ISS_Pressurized_Volume:.2f} times that of ISS\")\n", - "\n", - "print(f\"\\nComparison to von Braun's wheel:\")\n", - "print(f\"But it has a volume of {V_hph/vb_wheel_Pressurized_Volume:.2f} times that of von Braun's wheel\")\n", - "\n", - "print(f\"\\nVolume per crew of this space station assuming 100 crew:\")\n", - "print(f\"This is {V_hph/100:.2f} cubic meters per crew\")\n", - "print(f\"This is {(V_hph/100)/(ISS_Pressurized_Volume/ISS_min_crew):.2f} times that of ISS\")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "a49b0a2c", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "V_hph 18320\n", - "For a torus with an internal volume of 18320 m^3 and an inner tube diameter of 10 m:\n", - "The large radius (R) is approximately 37.12 m\n", - "The overall diameter of the torus is approximately 84.25 m\n", - "\n", - "Comparison to ISS:\n", - "It has a volume of 20.00 times that of ISS\n", - "\n", - "Comparison to von Braun's wheel:\n", - "and a 2.95 times that of von Braun's wheel\n", - "\n", - "Volume per crew of this space station assuming 100 crew:\n", - "This is 183.20 cubic meters per crew\n", - "This is 1.20 times that of ISS\n" - ] - } - ], - "source": [ - "# Calculate the diameter of a torus with an internal volume of 100,000 m^3 and inner tube diameter of 10 m\n", - "from math import pi\n", - "# Given values\n", - "V_hph = 20*ISS_Pressurized_Volume # m^3, internal volume\n", - "d_hph = 10 # m, inner tube diameter (small diameter)\n", - "print(\"V_hph\", V_hph)\n", - "# Calculate the radius of the inner tube\n", - "r_hph = d_hph / 2\n", - "\n", - "# The volume of a torus is given by the formula: V = 2π^2 * R * r^2\n", - "# Where R is the distance from the center of the torus to the center of the tube (large radius)\n", - "\n", - "# Rearrange the formula to solve for R\n", - "R_hph = V_hph / (2 * pi**2 * r_hph**2)\n", - "\n", - "# Calculate the overall diameter of the torus\n", - "D_hph = 2 * (R_hph + r_hph)\n", - "\n", - "print(f\"For a torus with an internal volume of {V_hph} m^3 and an inner tube diameter of {d_hph} m:\")\n", - "print(f\"The large radius (R) is approximately {R_hph:.2f} m\")\n", - "print(f\"The overall diameter of the torus is approximately {D_hph:.2f} m\")\n", - "\n", - "# Compare to Space Station V\n", - "print(f\"\\nComparison to ISS:\")\n", - "print(f\"It has a volume of {V_hph/ISS_Pressurized_Volume:.2f} times that of ISS\")\n", - "\n", - "print(f\"\\nComparison to von Braun's wheel:\")\n", - "print(f\"and a {V_hph/vb_wheel_Pressurized_Volume:.2f} times that of von Braun's wheel\")\n", - "\n", - "print(f\"\\nVolume per crew of this space station assuming 100 crew:\")\n", - "print(f\"This is {V_hph/100:.2f} cubic meters per crew\")\n", - "print(f\"This is {(V_hph/100)/(ISS_Pressurized_Volume/ISS_min_crew):.2f} times that of ISS\")" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "20ebb6fa", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Testing ModularStation (ISS):\n", - "ISS volume per crew: 152.67 m^3\n", - "Expected: 152.67 m^3\n", - "Crew capacity matches: True\n", - "Pressurized volume matches: True\n", - "\n", - "Testing WheelSpaceStation (Von Braun Wheel):\n", - "Von Braun Wheel volume per crew: 77.72 m^3\n", - "Expected: 77.72 m^3\n", - "Rotation speed: 3 RPM\n", - "Gravity: 3.701 m/s^2\n", - "Expected gravity: 1.655 m/s^2\n", - "Pressurized volume matches: False\n", - "\n", - "Testing WheelSpaceStation (Space Station V):\n", - "Space Station V volume per crew: 1000.00 m^3\n", - "Expected: 183.20 m^3\n", - "Rotation speed: 2.44 RPM\n", - "Gravity: 9.793 m/s^2\n", - "Expected gravity: 9.810 m/s^2\n", - "Pressurized volume matches: False\n", - "Diameter matches: 0.00\n", - "\n", - "Testing WheelSpaceStation (Custom):\n", - "Custom Station volume per crew: 1000.00 m^3\n", - "Expected: 1000.00 m^3\n", - "Rotation speed: 2 RPM\n", - "Gravity: 8.773 m/s^2\n", - "Expected gravity: 8.773 m/s^2\n", - "Calculated gravity matches expected: True\n", - "\n", - "Testing rotation change:\n", - "New rotation speed: 2.5 RPM\n", - "New gravity: 13.708 m/s^2\n", - "Expected gravity: 13.708 m/s^2\n", - "Calculated new gravity matches expected: True\n", - "\n", - "Testing error handling for custom design:\n", - "Caught expected error: Missing required parameters for custom design: diameter, rotation_speed, pressurized_volume\n", - "Caught expected error: Missing required parameters for custom design: pressurized_volume\n", - "Caught expected error: Missing required parameters for custom design: rotation_speed\n", - "\n", - "Additional checks:\n", - "Space Station V volume: 18320.00 m^3\n", - "Space Station V volume compared to ISS: 20.00 times\n", - "Space Station V volume compared to von Braun's wheel: 2.95 times\n", - "Space Station V volume per crew (100 crew): 183.20 m^3\n", - "Space Station V volume per crew compared to ISS: 1.20 times\n", - "\n", - "Space Station V large radius: 37.12 m\n", - "Space Station V overall diameter: 84.25 m\n" - ] - } - ], - "source": [ - "import math\n", - "\n", - "class SpaceStation:\n", - " def __init__(self, name, crew_capacity):\n", - " self.name = name\n", - " self.crew_capacity = crew_capacity\n", - " self.pressurized_volume = None\n", - " self.habitable_volume = None\n", - " self.habitable_percentage = None\n", - "\n", - " def volume_per_crew(self):\n", - " if self.pressurized_volume is None:\n", - " raise ValueError(\"Pressurized volume is not set. Please initialize the station properly.\")\n", - " return self.pressurized_volume / self.crew_capacity\n", - "\n", - " def habitable_volume_per_crew(self):\n", - " if self.habitable_volume is None:\n", - " raise ValueError(\"Habitable volume is not set. Please initialize the station properly.\")\n", - " return self.habitable_volume / self.crew_capacity\n", - "\n", - "class ModularStation(SpaceStation):\n", - " def __init__(self, name, design_type, **kwargs):\n", - " self.design_type = design_type\n", - " if design_type == \"ISS\":\n", - " super().__init__(name, crew_capacity=ISS_min_crew)\n", - " self.pressurized_volume = ISS_Pressurized_Volume\n", - " self.habitable_percentage = 42.35\n", - " self.habitable_volume = self.pressurized_volume * (self.habitable_percentage / 100)\n", - " elif design_type == \"custom\":\n", - " super().__init__(name, kwargs.get('crew_capacity'))\n", - " self.pressurized_volume = kwargs.get('pressurized_volume')\n", - " self.habitable_percentage = kwargs.get('habitable_percentage')\n", - " self.habitable_volume = self.pressurized_volume * (self.habitable_percentage / 100)\n", - " \n", - " # Check if all necessary parameters are provided\n", - " required_params = ['crew_capacity', 'pressurized_volume', 'habitable_percentage']\n", - " missing_params = [param for param in required_params if kwargs.get(param) is None]\n", - " if missing_params:\n", - " raise ValueError(f\"Missing required parameters for custom design: {', '.join(missing_params)}\")\n", - " else:\n", - " raise ValueError(\"Invalid design type. Choose 'ISS' or 'custom'.\")\n", - "\n", - "class WheelSpaceStation(SpaceStation):\n", - " def __init__(self, name, design_type, **kwargs):\n", - " self.design_type = design_type\n", - " if design_type == \"von_braun\":\n", - " super().__init__(name, crew_capacity=80)\n", - " self.diameter = 75 # m\n", - " self.rotation_speed = 3 # RPM\n", - " self.gravity = 1.655 # m/s^2\n", - " self.pressurized_volume = 6217.85 # m^3\n", - " elif design_type == \"space_station_v\":\n", - " super().__init__(name, crew_capacity=100)\n", - " self.diameter = 300 # m\n", - " self.rotation_speed = 2.44 # RPM\n", - " self.gravity = 9.81 # m/s^2\n", - " self.pressurized_volume = 100000 # m^3\n", - " elif design_type == \"custom\":\n", - " super().__init__(name, kwargs.get('crew_capacity'))\n", - " self.diameter = kwargs.get('diameter')\n", - " self.rotation_speed = kwargs.get('rotation_speed')\n", - " self.gravity = kwargs.get('gravity')\n", - " self.pressurized_volume = kwargs.get('pressurized_volume')\n", - " \n", - " # Check if all necessary parameters are provided\n", - " required_params = ['crew_capacity', 'diameter', 'rotation_speed', 'pressurized_volume']\n", - " missing_params = [param for param in required_params if kwargs.get(param) is None]\n", - " if missing_params:\n", - " raise ValueError(f\"Missing required parameters for custom design: {', '.join(missing_params)}\")\n", - " else:\n", - " raise ValueError(\"Invalid design type. Choose 'von_braun', 'space_station_v', or 'custom'.\")\n", - "\n", - " self.set_rotation(self.rotation_speed)\n", - "\n", - " def set_rotation(self, rpm):\n", - " if rpm is None:\n", - " raise ValueError(\"Rotation speed (RPM) is not set. Please provide a valid rotation speed.\")\n", - " self.rotation_speed = rpm\n", - " self.gravity = self.calculate_gravity()\n", - "\n", - " def calculate_gravity(self):\n", - " if self.diameter is None or self.rotation_speed is None:\n", - " raise ValueError(\"Diameter or rotation speed is not set. Please initialize the station properly.\")\n", - " radius = self.diameter / 2\n", - " angular_velocity = self.rotation_speed * 2 * math.pi / 60 # Convert RPM to rad/s\n", - " return angular_velocity**2 * radius\n", - "\n", - "# Test cases\n", - "print(\"Testing ModularStation (ISS):\")\n", - "iss = ModularStation(\"ISS\", \"ISS\")\n", - "print(f\"ISS volume per crew: {iss.volume_per_crew():.2f} m^3\")\n", - "print(f\"Expected: {ISS_Pressurized_Volume/ISS_min_crew:.2f} m^3\")\n", - "print(f\"Crew capacity matches: {iss.crew_capacity == ISS_min_crew}\")\n", - "print(f\"Pressurized volume matches: {iss.pressurized_volume == ISS_Pressurized_Volume}\")\n", - "\n", - "print(\"\\nTesting WheelSpaceStation (Von Braun Wheel):\")\n", - "vb_wheel = WheelSpaceStation(\"Von Braun Wheel\", \"von_braun\")\n", - "print(f\"Von Braun Wheel volume per crew: {vb_wheel.volume_per_crew():.2f} m^3\")\n", - "print(f\"Expected: {vb_wheel_Pressurized_Volume/80:.2f} m^3\")\n", - "print(f\"Rotation speed: {vb_wheel.rotation_speed} RPM\")\n", - "print(f\"Gravity: {vb_wheel.gravity:.3f} m/s^2\")\n", - "print(f\"Expected gravity: 1.655 m/s^2\")\n", - "print(f\"Pressurized volume matches: {vb_wheel.pressurized_volume == vb_wheel_Pressurized_Volume}\")\n", - "\n", - "print(\"\\nTesting WheelSpaceStation (Space Station V):\")\n", - "ssv = WheelSpaceStation(\"Space Station V\", \"space_station_v\")\n", - "print(f\"Space Station V volume per crew: {ssv.volume_per_crew():.2f} m^3\")\n", - "print(f\"Expected: {V_hph/100:.2f} m^3\")\n", - "print(f\"Rotation speed: {ssv.rotation_speed} RPM\")\n", - "print(f\"Gravity: {ssv.gravity:.3f} m/s^2\")\n", - "print(f\"Expected gravity: 9.810 m/s^2\")\n", - "print(f\"Pressurized volume matches: {ssv.pressurized_volume == V_hph}\")\n", - "print(f\"Diameter matches: {ssv.diameter == D_hph:.2f}\")\n", - "\n", - "print(\"\\nTesting WheelSpaceStation (Custom):\")\n", - "custom_station = WheelSpaceStation(\"Custom Station\", \"custom\", crew_capacity=150, diameter=400, rotation_speed=2, pressurized_volume=150000)\n", - "print(f\"Custom Station volume per crew: {custom_station.volume_per_crew():.2f} m^3\")\n", - "print(f\"Expected: {150000/150:.2f} m^3\")\n", - "print(f\"Rotation speed: {custom_station.rotation_speed} RPM\")\n", - "print(f\"Gravity: {custom_station.gravity:.3f} m/s^2\")\n", - "expected_gravity = (2 * 2 * math.pi / 60)**2 * (400/2)\n", - "print(f\"Expected gravity: {expected_gravity:.3f} m/s^2\")\n", - "print(f\"Calculated gravity matches expected: {abs(custom_station.gravity - expected_gravity) < 1e-6}\")\n", - "\n", - "print(\"\\nTesting rotation change:\")\n", - "custom_station.set_rotation(2.5)\n", - "print(f\"New rotation speed: {custom_station.rotation_speed} RPM\")\n", - "print(f\"New gravity: {custom_station.gravity:.3f} m/s^2\")\n", - "expected_new_gravity = (2.5 * 2 * math.pi / 60)**2 * (400/2)\n", - "print(f\"Expected gravity: {expected_new_gravity:.3f} m/s^2\")\n", - "print(f\"Calculated new gravity matches expected: {abs(custom_station.gravity - expected_new_gravity) < 1e-6}\")\n", - "\n", - "print(\"\\nTesting error handling for custom design:\")\n", - "try:\n", - " invalid_custom = WheelSpaceStation(\"Invalid Custom\", \"custom\", crew_capacity=100)\n", - "except ValueError as e:\n", - " print(f\"Caught expected error: {e}\")\n", - "\n", - "try:\n", - " invalid_custom = WheelSpaceStation(\"Invalid Custom\", \"custom\", crew_capacity=100, diameter=200, rotation_speed=2)\n", - "except ValueError as e:\n", - " print(f\"Caught expected error: {e}\")\n", - "\n", - "try:\n", - " invalid_custom = WheelSpaceStation(\"Invalid Custom\", \"custom\", crew_capacity=100, diameter=200, pressurized_volume=50000)\n", - " invalid_custom.set_rotation(None)\n", - "except ValueError as e:\n", - " print(f\"Caught expected error: {e}\")\n", - "\n", - "# Additional checks based on previous cell outputs\n", - "print(\"\\nAdditional checks:\")\n", - "print(f\"Space Station V volume: {V_hph:.2f} m^3\")\n", - "print(f\"Space Station V volume compared to ISS: {V_hph/ISS_Pressurized_Volume:.2f} times\")\n", - "print(f\"Space Station V volume compared to von Braun's wheel: {V_hph/vb_wheel_Pressurized_Volume:.2f} times\")\n", - "print(f\"Space Station V volume per crew (100 crew): {V_hph/100:.2f} m^3\")\n", - "print(f\"Space Station V volume per crew compared to ISS: {(V_hph/100)/(ISS_Pressurized_Volume/ISS_min_crew):.2f} times\")\n", - "\n", - "print(f\"\\nSpace Station V large radius: {R_hph:.2f} m\")\n", - "print(f\"Space Station V overall diameter: {D_hph:.2f} m\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18a5dd12", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.19" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/_config.yml b/_config.yml deleted file mode 100644 index acf2e69af8eab..0000000000000 --- a/_config.yml +++ /dev/null @@ -1,336 +0,0 @@ -# Welcome to Jekyll! -# -# This config file is meant for settings that affect your entire site, values -# which you are expected to set up once and rarely need to edit after that. -# For technical reasons, this file is *NOT* reloaded automatically when you use -# `jekyll serve`. If you change this file, please restart the server process. - -# Theme Settings -# -# Review documentation to determine if you should use `theme` or `remote_theme` -# https://mmistakes.github.io/minimal-mistakes/docs/quick-start-guide/#installing-the-theme - -# theme : "minimal-mistakes-jekyll" -# remote_theme : "mmistakes/minimal-mistakes" -minimal_mistakes_skin : "dark" # "sunrise", "air", "aqua", "contrast", "default", "dirt", "neon", "mint", "plum" -minimal_mistakes_skin2 : "sunrise" - -# Publication Category - The following the list of publication categories and their headings -publication_category: - manuscripts: - title: 'Journal Articles' - conferences: - title: 'Conference Papers' - -# Site Settings -locale : "en-GB" -title : "Angadh" -title_separator : "-" -subtitle : # site tagline that appears below site title in masthead -name : "Angadh Nanjangud" -description : "Space, Robotics, and AI." -url : # the base hostname & protocol for your site e.g. "https://mmistakes.github.io" -baseurl : # the subpath of your site, e.g. "/blog" -repository : # GitHub username/repo-name e.g. "mmistakes/minimal-mistakes" -teaser : # path of fallback teaser image, e.g. "/assets/images/500x300.png" -logo : # path of logo image to display in the masthead, e.g. "/assets/images/88x88.png" -masthead_title : # overrides the website title displayed in the masthead, use " " for no title - -# breadcrumbs : false # true, false (default) -words_per_minute : 200 -future : false -comments: - provider : "disqus" # false (default), "disqus", "discourse", "facebook", "staticman", "staticman_v2", "utterances", "giscus", "custom" - disqus: - shortname : "angadhn" # https://help.disqus.com/customer/portal/articles/466208-what-s-a-shortname- - discourse: - server : # https://meta.discourse.org/t/embedding-discourse-comments-via-javascript/31963 , e.g.: meta.discourse.org - facebook: - # https://developers.facebook.com/docs/plugins/comments - appid : - num_posts : # 5 (default) - colorscheme : # "light" (default), "dark" - utterances: - theme : # "github-light" (default), "github-dark" - issue_term : # "pathname" (default) - giscus: - repo_id : # Shown during giscus setup at https://giscus.app - category_name : # Full text name of the category - category_id : # Shown during giscus setup at https://giscus.app - discussion_term : # "pathname" (default), "url", "title", "og:title" - reactions_enabled : # '1' for enabled (default), '0' for disabled - theme : # "light" (default), "dark", "dark_dimmed", "transparent_dark", "preferred_color_scheme" - staticman: - branch : # "master" - endpoint : # "https://{your Staticman v3 API}/v3/entry/github/" -reCaptcha: - siteKey : - secret : -atom_feed: - path : # blank (default) uses feed.xml - hide : true # true, false (default) -search : # true, false (default) -search_full_content : # true, false (default) -search_provider : # lunr (default), algolia, google -lunr: - search_within_pages : # true, false (default) -algolia: - application_id : # YOUR_APPLICATION_ID - index_name : # YOUR_INDEX_NAME - search_only_api_key : # YOUR_SEARCH_ONLY_API_KEY - powered_by : # true (default), false -google: - search_engine_id : # YOUR_SEARCH_ENGINE_ID - instant_search : # false (default), true -# SEO Related -google_site_verification : -bing_site_verification : -naver_site_verification : -yandex_site_verification : -baidu_site_verification : - -# Social Sharing -twitter: - username : -facebook: - username : - app_id : - publisher : -og_image : # Open Graph/Twitter default site image -# For specifying social profiles -# - https://developers.google.com/structured-data/customize/social-profiles -social: - type : # Person or Organization (defaults to Person) - name : # If the user or organization name differs from the site's name - links: # An array of links to social media profiles - -# Analytics -analytics: - provider : false # false (default), "google", "google-universal", "google-gtag", "custom" - google: - tracking_id : - anonymize_ip : # true, false (default) - - -# Site Author -author: - name : "Angadh" - avatar : "/assets/imgs/Memoji.jpeg" # path of avatar image, e.g. "/assets/images/bio-photo.jpg" - bio : "Space, Robotics, and AI." - location : "London, UK" - email : - links: - - label: "Email" - icon: "far fa-fw fa-envelope-square" - url: "mailto:angadh.n@gmail.com" - - label: "Website" - icon: "fas fa-fw fa-link" - # url: "https://your-website.com" - #- label: "Twitter" - #icon: "fab fa-fw fa-twitter-square" - #url: "https://twitter.com/phytoblankton" - - label: "Google Scholar" - icon: "fab fa-fw fa-google" - url: "https://scholar.google.com/citations?user=_B6z_BUAAAAJ&hl=en" - - label: "GitHub" - icon: "fab fa-fw fa-github" - url: "https://github.com/angadhn" - - label: "Notes" - icon: "fas fa-fw fa-pencil-alt" - url: " https://theinformationspace.angadhn.com/" - - label: "Meet (soon)" - icon: "fas fa-fw fa-calendar" - url: "" - -# Site Footer -footer: - links: - - label: "GitHub" - icon: "fab fa-fw fa-github" - url: "https://github.com/angadhn" - - label: "Soundcloud" - icon: "fab fa-fw fa-soundcloud" - url: "https://soundcloud.com/angadh-nanjangud" - - -# Reading Files -include: - - .htaccess - - _pages -exclude: - - "*.sublime-project" - - "*.sublime-workspace" - - vendor - - .asset-cache - - .bundle - - .jekyll-assets-cache - - .sass-cache - - assets/js/plugins - - assets/js/_main.js - - assets/js/vendor - - Capfile - - CHANGELOG - - config - - Gemfile - - Gruntfile.js - - gulpfile.js - - LICENSE - - log - - node_modules - - package.json - - package-lock.json - - Rakefile - - README - - tmp - - /docs # ignore Minimal Mistakes /docs - - /test # ignore Minimal Mistakes /test -keep_files: - - .git - - .svn -encoding: "utf-8" -markdown_ext: "markdown,mkdown,mkdn,mkd,md" - - -# Conversion -markdown: kramdown -highlighter: rouge -lsi: false -excerpt_separator: "\n\n" -incremental: false - - -# Markdown Processing -kramdown: - input: GFM - hard_wrap: false - auto_ids: true - footnote_nr: 1 - entity_output: as_char - toc_levels: 1..6 - smart_quotes: lsquo,rsquo,ldquo,rdquo - enable_coderay: false - - -# Sass/SCSS -sass: - sass_dir: _sass - style: compressed # https://sass-lang.com/documentation/file.SASS_REFERENCE.html#output_style - - -# Outputting -permalink: /:categories/:title/ -paginate: 5 # amount of posts to show -paginate_path: /page:num/ -timezone: Europe/London # https://en.wikipedia.org/wiki/List_of_tz_database_time_zones - - -# Plugins (previously gems:) -plugins: - - jekyll-paginate - - jekyll-sitemap - - jekyll-gist - - jekyll-feed - - jekyll-include-cache - -# mimic GitHub Pages with --safe -whitelist: - - jekyll-paginate - - jekyll-sitemap - - jekyll-gist - - jekyll-feed - - jekyll-include-cache - -# Archives -# Type -# - GitHub Pages compatible archive pages built with Liquid ~> type: liquid (default) -# - Jekyll Archives plugin archive pages ~> type: jekyll-archives -# Path (examples) -# - Archive page should exist at path when using Liquid method or you can -# expect broken links (especially with breadcrumbs enabled) -# - /tags/my-awesome-tag/index.html ~> path: /tags/ -# - /categories/my-awesome-category/index.html ~> path: /categories/ -# - /my-awesome-category/index.html ~> path: / -category_archive: - type: liquid - path: /categories/ -tag_archive: - type: liquid - path: /tags/ -# https://github.com/jekyll/jekyll-archives -# jekyll-archives: -# enabled: -# - categories -# - tags -# layouts: -# category: archive-taxonomy -# tag: archive-taxonomy -# permalinks: -# category: /categories/:name/ -# tag: /tags/:name/ - - -# HTML Compression -# - https://jch.penibelst.de/ -compress_html: - clippings: all - ignore: - envs: development - -# Collections -collections: - publications: - output: true - permalink: /:collection/:path/ - online_textbooks: - output: true - permalink: /online_textbooks/:path/ - -# Defaults -defaults: - # _posts - - scope: - path: "" - type: posts - values: - layout: single - author_profile: false - read_time: true - share: false - related: false - mathjax: true - toc: true - comments: true - classes: wide - comments: true - # _pages - - scope: - path: "_pages" - type: pages - values: - layout: single - author_profile: true - classes: wide - # _research - - scope: - path: "" - type: publications - values: - layout: single - author_profile: true - comments: true - share: true - read_time: true - # _online_textbooks - - scope: - path: "" - type: online_textbooks - values: - layout: single # Or another layout if needed - author_profile: false - read_time: true - related: false - mathjax: true - share: true - comments: true - toc: true - classes: wide diff --git a/_data/navigation.yml b/_data/navigation.yml deleted file mode 100644 index 560dd377b945a..0000000000000 --- a/_data/navigation.yml +++ /dev/null @@ -1,14 +0,0 @@ -# main links -main: - #- title: "CV" - #url: https://angadhn.github.io/Angadh_CV.pdf - # - - - title: "Blog" - url: /year-archive/ - - - title: "Teaching" - url: /teaching/ - - - title: "Research" - url: /publications/ diff --git a/_data/ui-text.yml b/_data/ui-text.yml deleted file mode 100644 index d7ca0456ef1af..0000000000000 --- a/_data/ui-text.yml +++ /dev/null @@ -1,2024 +0,0 @@ -# User interface text and labels - -# English (default) -# ----------------- -en: &DEFAULT_EN - skip_links : "Skip links" - skip_primary_nav : "Skip to primary navigation" - skip_content : "Skip to content" - skip_footer : "Skip to footer" - page : "Page" - pagination_previous : "Previous" - pagination_next : "Next" - breadcrumb_home_label : "Home" - breadcrumb_separator : "/" - menu_label : "Toggle menu" - search_label : "Toggle search" - toc_label : "On this page" - ext_link_label : "Direct link" - less_than : "less than" - minute_read : "minute read" - share_on_label : "Share on" - meta_label : - tags_label : "Tags:" - categories_label : "Categories:" - date_label : "Updated:" - comments_label : "Leave a comment" - comments_title : "Comments" - more_label : "Learn more" - related_label : "You may also enjoy" - follow_label : "Follow:" - feed_label : "Feed" - powered_by : "Powered by" - website_label : "Website" - email_label : "Email" - recent_posts : "Recent posts" - undefined_wpm : "Undefined parameter words_per_minute at _config.yml" - comment_form_info : "Your email address will not be published. Required fields are marked" - comment_form_comment_label : "Comment" - comment_form_md_info : "Markdown is supported." - comment_form_name_label : "Name" - comment_form_email_label : "Email address" - comment_form_website_label : "Website (optional)" - comment_btn_submit : "Submit comment" - comment_btn_submitted : "Submitted" - comment_success_msg : "Thanks for your comment! It will show on the site once it has been approved." - comment_error_msg : "Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again." - loading_label : "Loading..." - search_label_text : "Enter your search term..." - search_placeholder_text : "Enter your search term..." - search_algolia_no_results : "No results" - results_found : "Result(s) found" - back_to_top : "Back to top" -en-US: - <<: *DEFAULT_EN -en-CA: - <<: *DEFAULT_EN -en-GB: - <<: *DEFAULT_EN -en-AU: - <<: *DEFAULT_EN - -# Spanish -# ------- -es: &DEFAULT_ES - skip_links : "Saltar enlaces" - skip_primary_nav : "Saltar a navegación principal" - skip_content : "Saltar a contenido" - skip_footer : "Saltar a pie" - page : "Página" - pagination_previous : "Anterior" - pagination_next : "Siguiente" - breadcrumb_home_label : "Inicio" - breadcrumb_separator : "/" - menu_label : "Alternar menú" - search_label : "Alternar búsqueda" - toc_label : "En esta página" - ext_link_label : "Enlace directo" - less_than : "menos de" - minute_read : "minuto(s) de lectura" - share_on_label : "Compartir en" - meta_label : - tags_label : "Etiquetas:" - categories_label : "Categorías:" - date_label : "Actualizado:" - comments_label : "Deja un comentario" - comments_title : "Comentarios" - more_label : "Ver más" - related_label : "Puede que también te interese" - follow_label : "Seguir:" - feed_label : "Feed" - powered_by : "Funciona con" - website_label : "Sitio web" - email_label : "Correo electrónico" - recent_posts : "Entradas recientes" - undefined_wpm : "El parámetro words_per_minute (palabras por minuto) no está definido en _config.yml" - comment_form_info : "Tu dirección de correo electrónico no se publicará. Los campos obligatorios están marcados" - comment_form_comment_label : "Comentario" - comment_form_md_info : "Puedes utilizar Markdown" - comment_form_name_label : "Nombre" - comment_form_email_label : "Dirección de correo electrónico" - comment_form_website_label : "Sitio web (opcional)" - comment_btn_submit : "Enviar comentario" - comment_btn_submitted : "Enviado" - comment_success_msg : "¡Gracias por tu comentario! Se publicará una vez sea aprobado." - comment_error_msg : "Ha ocurrido un error al enviar el comentario. Asegúrate de completar todos los campos obligatorios e inténtalo de nuevo." - loading_label : "Cargando..." - search_label_text : "Términos de búsqueda..." - search_placeholder_text : "Términos de búsqueda..." - search_algolia_no_results : - results_found : "resultado(s) encontrado(s)" - back_to_top : "Volver arriba" -es-ES: - <<: *DEFAULT_ES -es-CO: - <<: *DEFAULT_ES - -# French -# ------ -fr: &DEFAULT_FR - skip_links : - skip_primary_nav : - skip_content : - skip_footer : - page : "Page" - pagination_previous : "Précédent" - pagination_next : "Suivant" - breadcrumb_home_label : "Accueil" - breadcrumb_separator : "/" - menu_label : "Menu" - search_label : - toc_label : "Sur cette page" - ext_link_label : "Lien direct" - less_than : "moins de" - minute_read : "minute(s) de lecture" - share_on_label : "Partager sur" - meta_label : - tags_label : "Tags :" - categories_label : "Catégories :" - date_label : "Mis à jour :" - comments_label : "Laisser un commentaire" - comments_title : "Commentaires" - more_label : "Lire plus" - related_label : "Vous pourriez aimer aussi" - follow_label : "Contact" - feed_label : "Flux" - powered_by : "Propulsé par" - website_label : "Site" - email_label : "Email" - recent_posts : "Posts récents" - undefined_wpm : "Le paramètre words_per_minute n'est pas défini dans _config.yml" - comment_form_info : "Votre adresse email ne sera pas visible. Les champs obligatoires sont marqués" - comment_form_comment_label : "Commentaire" - comment_form_md_info : "Markdown est supporté." - comment_form_name_label : "Nom" - comment_form_email_label : "Adresse mail" - comment_form_website_label : "Site web (optionnel)" - comment_btn_submit : "Envoyer" - comment_btn_submitted : "Envoyé" - comment_success_msg : "Merci pour votre commentaire, il sera visible sur le site une fois approuvé." - comment_error_msg : "Désolé, une erreur est survenue lors de la soumission. Vérifiez que les champs obligatoires ont été remplis et réessayez." - loading_label : "Chargement..." - search_label_text : - search_placeholder_text : "Entrez votre recherche..." - search_algolia_no_results : - results_found : "Résultat(s) trouvé(s)" - back_to_top : "Retour en haut" -fr-FR: - <<: *DEFAULT_FR -fr-BE: - <<: *DEFAULT_FR -fr-CH: - <<: *DEFAULT_FR - -# Turkish -# ------- -tr: &DEFAULT_TR - skip_links : - skip_primary_nav : - skip_content : - skip_footer : - page : "Sayfa" - pagination_previous : "Önceki" - pagination_next : "Sonraki" - breadcrumb_home_label : "Ana Sayfa" - breadcrumb_separator : "/" - menu_label : - search_label : - toc_label : "İçindekiler" - ext_link_label : "Doğrudan Bağlantı" - less_than : "Şu süreden az: " - minute_read : "dakika tahmini okuma süresi" - share_on_label : "Paylaş" - meta_label : - tags_label : "Etiketler:" - categories_label : "Kategoriler:" - date_label : "Güncelleme tarihi:" - comments_label : "Yorum yapın" - comments_title : "Yorumlar" - more_label : "Daha fazlasını öğrenin" - related_label : "Bunlar ilginizi çekebilir:" - follow_label : "Takip et:" - feed_label : "RSS" - powered_by : "Emeği geçenler: " - website_label : "Web sayfası" - email_label : "E-posta" - recent_posts : "Son yazılar" - undefined_wpm : "_config.yml dosyasında tanımlanmamış words_per_minute parametresi" - comment_form_info : "Email adresiniz gösterilmeyecektir. Zorunlu alanlar işaretlenmiştir" - comment_form_comment_label : "Yorumunuz" - comment_form_md_info : "Markdown desteklenmektedir." - comment_form_name_label : "Adınız" - comment_form_email_label : "Email adresiniz" - comment_form_website_label : "Websiteniz (opsiyonel)" - comment_btn_submit : "Yorum Yap" - comment_btn_submitted : "Gönderildi" - comment_success_msg : "Yorumunuz için teşekkürler! Yorumunuz onaylandıktan sonra sitede gösterilecektir." - comment_error_msg : "Maalesef bir hata oluştu. Lütfen zorunlu olan tüm alanları doldurduğunuzdan emin olun ve sonrasında tekrar deneyin." - loading_label : "Yükleniyor..." - search_label_text : - search_algolia_no_results : -tr-TR: - <<: *DEFAULT_TR - -# Portuguese -# ---------- -pt: &DEFAULT_PT - skip_links : - skip_primary_nav : - skip_content : - skip_footer : - page : "Página" - pagination_previous : "Anterior" - pagination_next : "Seguinte" - breadcrumb_home_label : "Início" - breadcrumb_separator : "/" - menu_label : - search_label : - toc_label : "Nesta Página" - ext_link_label : "Link Direto" - less_than : "menos de" - minute_read : "minutos de leitura" - share_on_label : "Partilhar no" - meta_label : - tags_label : "Etiquetas:" - categories_label : "Categorias:" - date_label : "Atualizado:" - comments_label : "Deixe um Comentário" - comments_title : "Comentários" - more_label : "Saber mais" - related_label : "Também pode gostar de" - follow_label : "Siga:" - feed_label : "Feed" - powered_by : "Feito com" - website_label : "Site" - email_label : "Email" - recent_posts : "Artigos Recentes" - undefined_wpm : "Parâmetro words_per_minute não definido em _config.yml" - comment_form_info : "O seu endereço email não será publicado. Os campos obrigatórios estão assinalados" - comment_form_comment_label : "Comentário" - comment_form_md_info : "Markdown é suportado." - comment_form_name_label : "Nome" - comment_form_email_label : "Endereço Email" - comment_form_website_label : "Site (opcional)" - comment_btn_submit : "Sumbeter Comentário" - comment_btn_submitted : "Submetido" - comment_success_msg : "Obrigado pelo seu comentário! Será visível no site logo que aprovado." - comment_error_msg : "Lamento, ocorreu um erro na sua submissão. Por favor verifique se todos os campos obrigatórios estão corretamente preenchidos e tente novamente." - loading_label : "A carregar..." - search_label_text : - search_algolia_no_results : -pt-PT: - <<: *DEFAULT_PT -# Brazilian Portuguese -pt-BR: - skip_links : "Pular links" - skip_primary_nav : "Pular para navegação primária" - skip_content : "Pular para conteúdo" - skip_footer : "Pular para rodapé" - page : "Página" - pagination_previous : "Anterior" - pagination_next : "Próxima" - breadcrumb_home_label : "Início" - breadcrumb_separator : "/" - menu_label : "Chavear menu" - search_label : "Chavear busca" - toc_label : "Nesta página" - ext_link_label : "Link direto" - less_than : "menos de" - minute_read : "minuto(s) de leitura" - share_on_label : "Compartilhe" - meta_label : - tags_label : "Tags:" - categories_label : "Categorias:" - date_label : "Atualizado em:" - comments_label : "Deixe um comentário" - comments_title : "Comentários" - more_label : "Saiba mais" - related_label : "Talvez você também goste" - follow_label : "Siga:" - feed_label : "Feed" - powered_by : "Desenvolvido com" - website_label : "Site" - email_label : "E-mail" - recent_posts : "Publicações recentes" - undefined_wpm : "Parâmetro words_per_minute não definido em _config.yml" - comment_form_info : "Seu e-mail não será publicado. Os campos obrigatórios estão marcados" - comment_form_comment_label : "Comentário" - comment_form_md_info : "Você pode usar Markdown." - comment_form_name_label : "Nome" - comment_form_email_label : "E-mail" - comment_form_website_label : "Site (opcional)" - comment_btn_submit : "Enviar comentário" - comment_btn_submitted : "Enviado" - comment_success_msg : "Obrigado pelo seu comentário! Ele aparecerá no site assim que for aprovado." - comment_error_msg : "Desculpe, ocorreu um erro no envio. Verifique se todos os campos obrigatórios foram preenchidos e tente novamente." - loading_label : "Carregando..." - search_label_text : "Digite seu termo de busca..." - search_placeholder_text : "Digite seu termo de busca..." - search_algolia_no_results : "Nenhum resultado" - results_found : "Resultado(s) encontrado(s)" - back_to_top : "Voltar para o topo" - -# Italian -# ------- -it: &DEFAULT_IT - skip_links : - skip_primary_nav : - skip_content : - skip_footer : - page : "Pagina" - pagination_previous : "Precedente" - pagination_next : "Prossima" - breadcrumb_home_label : "Home" - breadcrumb_separator : "/" - menu_label : - search_label : - toc_label : "Indice della pagina" - ext_link_label : "Link" - less_than : "meno di" - minute_read : "minuto/i di lettura" - share_on_label : "Condividi" - meta_label : - tags_label : "Tags:" - categories_label : "Categorie:" - date_label : "Aggiornato:" - comments_label : "Scrivi un commento" - comments_title : - more_label : "Scopri di più" - related_label : "Potrebbe Piacerti Anche" - follow_label : "Segui:" - feed_label : "Feed" - powered_by : "Powered by" - website_label : "Website" - email_label : "Email" - recent_posts : "Articoli Recenti" - undefined_wpm : "Parametro words_per_minute non definito in _config.yml" - comment_form_info : "Il tuo indirizzo email non sarà pubblicato. Sono segnati i campi obbligatori" - comment_form_comment_label : "Commenta" - comment_form_md_info : "Il linguaggio Markdown è supportato" - comment_form_name_label : "Nome" - comment_form_email_label : "Indirizzo email" - comment_form_website_label : "Sito Web (opzionale)" - comment_btn_submit : "Invia commento" - comment_btn_submitted : "Inviato" - comment_success_msg : "Grazie per il tuo commento! Verrà visualizzato nel sito una volta che sarà approvato." - comment_error_msg : "C'è stato un errore con il tuo invio. Assicurati che tutti i campi richiesti siano stati completati e riprova." - loading_label : "Caricamento..." - search_label_text : - search_placeholder_text : "Inserisci termini di ricerca..." - search_algolia_no_results : - results_found : "Risultati" - back_to_top : "Vai su" -it-IT: - <<: *DEFAULT_IT - -# Chinese (zh-CN Chinese - China) -# -------------------------------- -zh: &DEFAULT_ZH_HANS - skip_links : "跳转链接" - skip_primary_nav : "转到主导航栏" - skip_content : "转到内容" - skip_footer : "转到底部" - page : "页面" - pagination_previous : "上一页" - pagination_next : "下一页" - breadcrumb_home_label : "首页" - breadcrumb_separator : "/" - menu_label : "切换菜单" - search_label : "切换搜索" - toc_label : "目录" - ext_link_label : "直接链接" - less_than : "少于" - minute_read : "分钟阅读" - share_on_label : "分享" - meta_label : - tags_label : "标签:" - categories_label : "分类:" - date_label : "更新时间:" - comments_label : "留下评论" - comments_title : "评论" - more_label : "了解更多" - related_label : "猜您还喜欢" - follow_label : "关注:" - feed_label : "Feed" - powered_by : "技术来自于" - website_label : "网站" - email_label : "电子邮箱" - recent_posts : "最新文章" - undefined_wpm : "_config.yml 配置中 words_per_minute 字段未定义" - comment_form_info : "您的电子邮箱地址并不会被展示。请填写标记为必须的字段。" - comment_form_comment_label : "评论" - comment_form_md_info : "支持 Markdown 语法。" - comment_form_name_label : "姓名" - comment_form_email_label : "电子邮箱" - comment_form_website_label : "网站(可选)" - comment_btn_submit : "提交评论" - comment_btn_submitted : "已提交" - comment_success_msg : "感谢您的评论!被批准后它会立即在此站点展示。" - comment_error_msg : "很抱歉,您的提交存在错误。请确保所有必填字段都已填写正确,然后再试一次。" - loading_label : "正在加载..." - search_label_text : "输入您要搜索的关键词..." - search_placeholder_text : "输入您要搜索的关键词..." - search_algolia_no_results : "无结果" - results_found : "条记录匹配" - back_to_top : "返回顶部" -zh-CN: - <<: *DEFAULT_ZH_HANS -zh-SG: - <<: *DEFAULT_ZH_HANS -# Taiwan (Traditional Chinese) -zh-TW: &DEFAULT_ZH_HANT - skip_links : - skip_primary_nav : "轉至主導航欄" - skip_content : "轉至内容" - skip_footer : "轉至頁脚" - page : "頁面" - pagination_previous : "前一頁" - pagination_next : "後一頁" - breadcrumb_home_label : "首頁" - breadcrumb_separator : "/" - menu_label : "切換選單" - search_label : "切換搜索" - toc_label : "本頁" - ext_link_label : "外部連結" - less_than : "少於" - minute_read : "分鐘閱讀" - share_on_label : "分享到" - meta_label : - tags_label : "標籤:" - categories_label : "分類:" - date_label : "更新時間:" - comments_label : "留言" - comments_title : "留言內容" - more_label : "了解更多" - related_label : "猜您有與趣" - follow_label : "追蹤:" - feed_label : "RSS Feed" - powered_by : "Powered by" - website_label : "網站" - email_label : "電子信箱" - recent_posts : "最新文章" - undefined_wpm : "_config.yml 中未定義 words_per_minute" - comment_form_info : "您的電子信箱不會被公開. 必填部份已標記" - comment_form_comment_label : "留言內容" - comment_form_md_info : "支援 Markdown 語法。" - comment_form_name_label : "名字" - comment_form_email_label : "電子信箱帳號" - comment_form_website_label : "網頁 (可選填)" - comment_btn_submit : "送出留言" - comment_btn_submitted : "已送出" - comment_success_msg : "感謝您的留言! 審核後將會顯示在站上。" - comment_error_msg : "抱歉,部份資料輸入有問題。請確認資料填寫正確後再試一次。" - loading_label : "載入中..." - search_label_text : "輸入您要搜索的關鍵詞..." - search_placeholder_text : "輸入您要搜索的關鍵詞..." - search_algolia_no_results : "沒有結果" - results_found : "條匹配的記錄" - back_to_top : "回到頂部" -zh-HK: - <<: *DEFAULT_ZH_HANT - -# German / Deutsch -# ---------------- -de: &DEFAULT_DE - skip_links : - skip_primary_nav : - skip_content : - skip_footer : - page : "Seite" - pagination_previous : "Vorherige" - pagination_next : "Nächste" - breadcrumb_home_label : "Start" - breadcrumb_separator : "/" - menu_label : "Menü ein-/ausschalten" - search_label : - toc_label : "Auf dieser Seite" - ext_link_label : "Direkter Link" - less_than : "weniger als" - minute_read : "Minuten zum Lesen" - share_on_label : "Teilen auf" - meta_label : - tags_label : "Tags:" - categories_label : "Kategorien:" - date_label : "Aktualisiert:" - comments_label : "Hinterlassen Sie einen Kommentar" - comments_title : "Kommentare" - more_label : "Mehr anzeigen" - related_label : "Ihnen gefällt vielleicht auch" - follow_label : "Folgen:" - feed_label : "Feed" - powered_by : "Möglich durch" - website_label : "Webseite" - email_label : "E-Mail" - recent_posts : "Aktuelle Beiträge" - undefined_wpm : "Undefinierter Parameter words_per_minute in _config.yml" - comment_form_info : "Ihre E-Mail Adresse wird nicht veröffentlicht. Benötigte Felder sind markiert" - comment_form_comment_label : "Kommentar" - comment_form_md_info : "Markdown wird unterstützt." - comment_form_name_label : "Name" - comment_form_email_label : "E-Mail-Addresse" - comment_form_website_label : "Webseite (optional)" - comment_btn_submit : "Kommentar absenden" - comment_btn_submitted : "Versendet" - comment_success_msg : "Danke für Ihren Kommentar! Er wird auf der Seite angezeigt, nachdem er geprüft wurde." - comment_error_msg : "Entschuldigung, es gab einen Fehler. Bitte füllen Sie alle benötigten Felder aus und versuchen Sie es erneut." - loading_label : "Lade..." - search_label_text : - search_placeholder_text : "Suchbegriff eingeben..." - search_algolia_no_results : - results_found : "Ergebnis(se) gefunden" -de-DE: - <<: *DEFAULT_DE -de-AT: - <<: *DEFAULT_DE -de-CH: - <<: *DEFAULT_DE -de-BE: - <<: *DEFAULT_DE -de-LI: - <<: *DEFAULT_DE -de-LU: - <<: *DEFAULT_DE - -# Nepali (Nepal) -# -------------- -ne: &DEFAULT_NE - skip_links : - skip_primary_nav : - skip_content : - skip_footer : - page : "पृष्‍ठ" - pagination_previous : "अघिल्लो" - pagination_next : "अर्को" - breadcrumb_home_label : "गृह" - breadcrumb_separator : "/" - menu_label : "टगल मेनु" - search_label : - toc_label : "यो पृष्‍ठमा" - ext_link_label : "सिधा सम्पर्क" - less_than : "कम्तिमा" - minute_read : "मिनेट पढ्नुहोस्" - share_on_label : "शेयर गर्नुहोस्" - meta_label : - tags_label : "ट्यागहरू:" - categories_label : "वर्गहरु:" - date_label : "अद्यावधिक:" - comments_label : "टिप्पणी दिनुहोस्" - comments_title : "टिप्पणीहरू" - more_label : "अझै सिक्नुहोस्" - related_label : "तपाईं रुचाउन सक्नुहुन्छ " - follow_label : "पछ्याउनुहोस्:" - feed_label : "फिड" - powered_by : "Powered by" - website_label : "वेबसाइट" - email_label : "इमेल" - recent_posts : "ताजा लेखहरु" - undefined_wpm : "अपरिभाषित प्यारामिटर शब्दहरू_प्रति_मिनेट at _config.yml" - comment_form_info : "तपाइँको इमेल ठेगाना प्रकाशित गरिने छैन।आवश्यक जानकारीहरुमा चिन्ह लगाइको छ" - comment_form_comment_label : "टिप्पणी" - comment_form_md_info : "मार्कडाउन समर्थित छ।" - comment_form_name_label : "नाम" - comment_form_email_label : "इमेल ठेगाना" - comment_form_website_label : "वेबसाइट (वैकल्पिक)" - comment_btn_submit : "टिप्पणी दिनुहोस् " - comment_btn_submitted : "टिप्पणी भयो" - comment_success_msg : "तपाईंको टिप्पणीको लागि धन्यवाद! एक पटक यो अनुमोदन गरेपछी यो साइटमा देखाउनेछ।" - comment_error_msg : "माफ गर्नुहोस्, तपाईंको टिप्पणी त्रुटि थियो।सबै आवश्यक जानकारीहरु पूरा गरिएको छ भने निश्चित गर्नुहोस् र फेरि प्रयास गर्नुहोस्।" - loading_label : "लोड हुँदैछ ..." - search_label_text : - search_algolia_no_results : -ne-NP: - <<: *DEFAULT_NE - -# Korean -# ------ -ko: &DEFAULT_KO - skip_links : - skip_primary_nav : - skip_content : - skip_footer : - page : "페이지" - pagination_previous : "이전" - pagination_next : "다음" - breadcrumb_home_label : "Home" - breadcrumb_separator : "/" - menu_label : "토글 메뉴" - search_label : - toc_label : "On This Page" - ext_link_label : "직접 링크" - less_than : "최대" - minute_read : "분 소요" - share_on_label : "공유하기" - meta_label : - tags_label : "태그:" - categories_label : "카테고리:" - date_label : "업데이트:" - comments_label : "댓글남기기" - comments_title : "댓글" - more_label : "더 보기" - related_label : "참고" - follow_label : "팔로우:" - feed_label : "피드" - powered_by : "Powered by" - website_label : "웹사이트" - email_label : "이메일" - recent_posts : "최근 포스트" - undefined_wpm : "Undefined parameter words_per_minute at _config.yml" - comment_form_info : "이메일은 공개되지 않습니다. 작성 필요 필드:" - comment_form_comment_label : "댓글" - comment_form_md_info : "마크다운을 지원합니다." - comment_form_name_label : "이름" - comment_form_email_label : "이메일" - comment_form_website_label : "웹사이트(선택사항)" - comment_btn_submit : "댓글 등록" - comment_btn_submitted : "등록됨" - comment_success_msg : "감사합니다! 댓글이 머지된 후 확인하실 수 있습니다." - comment_error_msg : "댓글 등록에 문제가 있습니다. 필요 필드를 작성했는지 확인하고 다시 시도하세요." - loading_label : "로딩중..." - search_label_text : - search_placeholder_text : "검색어를 입력하세요..." - search_algolia_no_results : - results_found : "개 결과 발견" - back_to_top : "맨 위로 이동" -ko-KR: - <<: *DEFAULT_KO - -# Russian / Русский -# ----------------- -ru: &DEFAULT_RU - skip_links : - skip_primary_nav : - skip_content : - skip_footer : - page : "Страница" - pagination_previous : "Предыдущая" - pagination_next : "Следующая" - breadcrumb_home_label : "Главная" - breadcrumb_separator : "/" - menu_label : "Выпадающее меню" - search_label : - toc_label : "Содержание" - ext_link_label : "Прямая ссылка" - less_than : "менее" - minute_read : "мин на чтение" - share_on_label : "Поделиться" - meta_label : - tags_label : "Метки:" - categories_label : "Разделы:" - date_label : "Дата изменения:" - comments_label : "Оставить комментарий" - comments_title : "Комментарии" - more_label : "Читать далее" - related_label : "Вам также может понравиться" - follow_label : "Связаться со мной:" - feed_label : "RSS-лента" - powered_by : "Сайт работает на" - website_label : "Сайт" - email_label : "Электронная почта" - recent_posts : "Свежие записи" - undefined_wpm : "Не определён параметр words_per_minute в _config.yml" - comment_form_info : "Ваш адрес электронной почты не будет опубликован. Обязательные поля помечены" - comment_form_comment_label : "Комментарий" - comment_form_md_info : "Поддерживается синтаксис Markdown." - comment_form_name_label : "Имя" - comment_form_email_label : "Электронная почта" - comment_form_website_label : "Ссылка на сайт (необязательно)" - comment_btn_submit : "Оставить комментарий" - comment_btn_submitted : "Отправлено" - comment_success_msg : "Спасибо за Ваш комментарий! Он будет опубликован на сайте после проверки." - comment_error_msg : "К сожалению, произошла ошибка с отправкой комментария. Пожалуйста, убедитесь, что все обязательные поля заполнены и попытайтесь снова." - loading_label : "Отправка..." - search_label_text : - search_placeholder_text : "Введите поисковый запрос..." - search_algolia_no_results : - results_found : "Найдено" -ru-RU: - <<: *DEFAULT_RU - -# Lithuanian / Lietuviškai -# ------------------------ -lt: &DEFAULT_LT - skip_links : - skip_primary_nav : - skip_content : - skip_footer : - page : "Puslapis" - pagination_previous : "Ankstesnis" - pagination_next : "Sekantis" - breadcrumb_home_label : "Pagrindinis" - breadcrumb_separator : "/" - menu_label : "Meniu rodymas" - search_label : - toc_label : "Turinys" - ext_link_label : "Tiesioginė nuoroda" - less_than : "mažiau nei" - minute_read : "min. skaitymo" - share_on_label : "Pasidalinti" - meta_label : - tags_label : "Žymės:" - categories_label : "Kategorijos:" - date_label : "Atnaujinta:" - comments_label : "Palikti komentarą" - comments_title : "Komentaras" - more_label : "Skaityti daugiau" - related_label : "Taip pat turėtų patikti" - follow_label : "Sekti:" - feed_label : "Šaltinis" - powered_by : "Sukurta su" - website_label : "Tinklapis" - email_label : "El. paštas" - recent_posts : "Naujausi įrašai" - undefined_wpm : "Nedeklaruotas parametras words_per_minute faile _config.yml" - comment_form_info : "El. pašto adresas nebus viešinamas. Būtini laukai pažymėti" - comment_form_comment_label : "Komentaras" - comment_form_md_info : "Markdown palaikomas." - comment_form_name_label : "Vardas" - comment_form_email_label : "El. paštas" - comment_form_website_label : "Tinklapis (nebūtina)" - comment_btn_submit : "Komentuoti" - comment_btn_submitted : "Įrašytas" - comment_success_msg : "Ačiū už komentarą! Jis bus parodytas kai bus patvirtintas." - comment_error_msg : "Atleiskite, įvyko netikėta klaida įrašant komentarą. Pasitikrinkite ar užpildėte visus būtinus laukus ir pamėginkite dar kartą." - loading_label : "Kraunama..." - search_label_text : - search_algolia_no_results : -lt-LT: - <<: *DEFAULT_LT - -# Greek -# ----- -gr: &DEFAULT_GR - skip_links : - skip_primary_nav : - skip_content : - skip_footer : - page : "Σελίδα" - pagination_previous : "Προηγούμενo" - pagination_next : "Επόμενo" - breadcrumb_home_label : "Αρχική" - breadcrumb_separator : "/" - menu_label : "Μενού" - search_label : - toc_label : "Περιεχόμενα" - ext_link_label : "Εξωτερικός Σύνδεσμος" - less_than : "Λιγότερο από" - minute_read : "λεπτά ανάγνωσης" - share_on_label : "Μοιραστείτε το" - meta_label : - tags_label : "Ετικέτες:" - categories_label : "Κατηγορίες:" - date_label : "Ενημερώθηκε:" - comments_label : "Αφήστε ένα σχόλιο" - comments_title : "Σχόλια" - more_label : "Διάβαστε περισσότερα" - related_label : "Σχετικές αναρτήσεις" - follow_label : "Ακολουθήστε:" - feed_label : "RSS Feed" - powered_by : "Δημιουργήθηκε με" - website_label : "Ιστοσελίδα" - email_label : "Email" - recent_posts : "Τελευταίες αναρτήσεις" - undefined_wpm : "Δεν έχει οριστεί η παράμετρος words_per_minute στο αρχείο _config.yml" - comment_form_info : "Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα απαιτούμενα πεδία εμφανίζονται με αστερίσκο" - comment_form_comment_label : "Σχόλιο" - comment_form_md_info : "Το πεδίο υποστηρίζει Markdown." - comment_form_name_label : "Όνομα" - comment_form_email_label : "Διεύθυνση email" - comment_form_website_label : "Ιστοσελίδα (προαιρετικό)" - comment_btn_submit : "Υπόβαλε ένα σχόλιο" - comment_btn_submitted : "Έχει υποβληθεί" - comment_success_msg : "Ευχαριστούμε για το σχόλιό σας! Θα εμφανιστεί στην ιστοσελίδα αφού εγκριθεί." - comment_error_msg : "Λυπούμαστε, παρουσιάστηκε σφάλμα με την υποβολή σας. Παρακαλούμε βεβαιωθείτε ότι έχετε όλα τα απαιτούμενα πεδία συμπληρωμένα και δοκιμάστε ξανά." - loading_label : "Φόρτωση..." - search_label_text : - search_placeholder_text : "Εισάγετε όρο αναζήτησης..." - search_algolia_no_results : - results_found : "Αποτελέσματα" -gr-GR: - <<: *DEFAULT_GR - -# Swedish -# ------- -sv: &DEFAULT_SV - skip_links : - skip_primary_nav : - skip_content : - skip_footer : - page : "Sidan" - pagination_previous : "Föregående" - pagination_next : "Nästa" - breadcrumb_home_label : "Hem" - breadcrumb_separator : "/" - menu_label : "Växla menyläge" - search_label : "Växla sökläge" - toc_label : "På denna sida" - ext_link_label : "Direkt länk" - less_than : "mindre än" - minute_read : "minut läsning" - share_on_label : "Dela på" - meta_label : - tags_label : "Taggar:" - categories_label : "Kategorier:" - date_label : "Uppdaterades:" - comments_label : "Lämna en kommentar" - comments_title : "Kommentarer" - more_label : "Lär dig mer" - related_label : "Du kanske vill även läsa:" - follow_label : "Följ:" - feed_label : "Flöde" - powered_by : "Framställd med" - website_label : "Webbsida" - email_label : "E-post" - recent_posts : "Senaste inlägg" - undefined_wpm : "Odefinerade parametrar words_per_minute i _config.yml" - comment_form_info : "Din e-post adress kommer inte att publiceras. Obligatoriska fält är markerade" - comment_form_comment_label : "Kommentar" - comment_form_md_info : "Stöd för Markdown finns." - comment_form_name_label : "Namn" - comment_form_email_label : "E-post adress" - comment_form_website_label : "Webdsida (valfritt)" - comment_btn_submit : "Skicka en kommentar" - comment_btn_submitted : "Kommentaren har tagits emot" - comment_success_msg : "Tack för din kommentar! Den kommer att visas på sidan så fort den har godkännts." - comment_error_msg : "Tyvärr det har blivit något fel i ett av fälten, se till att du fyllt i alla obligatoriska fält och försök igen." - loading_label : "Laddar..." - search_label_text : - search_placeholder_text : "Fyll i sökterm..." - search_algolia_no_results : - results_found : "Resultat funna" - back_to_top : "Tillbaka till toppen" -sv-SE: - <<: *DEFAULT_SV -sv-FI: - <<: *DEFAULT_SV - -# Dutch -# ----- -nl: &DEFAULT_NL - skip_links : - skip_primary_nav : - skip_content : - skip_footer : - page : "Pagina" - pagination_previous : "Vorige" - pagination_next : "Volgende" - breadcrumb_home_label : "Home" - breadcrumb_separator : "/" - menu_label : "Wissel Menu" - search_label : - toc_label : "Op deze pagina" - ext_link_label : "Directe Link" - less_than : "minder dan" - minute_read : "minuut gelezen" - share_on_label : "Deel op" - meta_label : - tags_label : "Labels:" - categories_label : "Categorieën:" - date_label : "Bijgewerkt:" - comments_label : "Laat een reactie achter" - comments_title : "Commentaren" - more_label : "Meer informatie" - related_label : "Bekijk ook eens" - follow_label : "Volg:" - feed_label : "Feed" - powered_by : "Aangedreven door" - website_label : "Website" - email_label : "Email" - recent_posts : "Recente berichten" - undefined_wpm : "Niet gedefinieerde parameter words_per_minute bij _config.yml" - comment_form_info : "Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd" - comment_form_comment_label : "Commentaar" - comment_form_md_info : "Markdown wordt ondersteund." - comment_form_name_label : "Naam" - comment_form_email_label : "E-mailadres" - comment_form_website_label : "Website (optioneel)" - comment_btn_submit : "Commentaar toevoegen" - comment_btn_submitted : "Toegevoegd" - comment_success_msg : "Bedankt voor uw reactie! Het zal op de site worden weergegeven zodra het is goedgekeurd." - comment_error_msg : "Sorry, er is een fout opgetreden bij uw inzending. Zorg ervoor dat alle vereiste velden zijn voltooid en probeer het opnieuw." - loading_label : "Laden..." - search_label_text : "Geef uw zoekterm in..." - search_placeholder_text : "Geef uw zoekterm in..." - search_algolia_no_results : - results_found : "Resultaat gevonden" - back_to_top : "Terug naar boven" -nl-BE: - <<: *DEFAULT_NL -nl-NL: - <<: *DEFAULT_NL - -# Indonesian -# ---------- -id: &DEFAULT_ID - skip_links : - skip_primary_nav : "Loncat ke navigasi" - skip_content : "Loncat ke konten" - skip_footer : "Loncat ke footer" - page : "Halaman" - pagination_previous : "Sebelumnya" - pagination_next : "Selanjutnya" - breadcrumb_home_label : "Beranda" - breadcrumb_separator : "/" - menu_label : "Menu" - search_label : "Pencarian" - toc_label : "Pada Halaman Ini" - ext_link_label : "Link langsung" - less_than : "Kurang dari" - minute_read : "menit baca" - share_on_label : "Bagikan di" - meta_label : - tags_label : "Label:" - categories_label : "Kategori:" - date_label : "Diupdate:" - comments_label : "Tinggalkan komentar" - comments_title : "Komentar" - more_label : "Pelajari lagi" - related_label : "Anda mungkin suka" - follow_label : "Ikuti:" - feed_label : "Feed" - powered_by : "Didukung oleh" - website_label : "Website" - email_label : "Email" - recent_posts : "Post terbaru" - undefined_wpm : "Parameter terdeskripsi words_per_minute di _config.yml" - comment_form_info : "Email Anda tidak akan dipublish. Kolom yang diperlukan ditandai dengan tanda " - comment_form_comment_label : "Komentar" - comment_form_md_info : "Markdown didukung." - comment_form_name_label : "Nama" - comment_form_email_label : "Alamat email" - comment_form_website_label : "Website (opsional)" - comment_btn_submit : "Kirim Komentar" - comment_btn_submitted : "Telah dikirim" - comment_success_msg : "Terimakasih atas komentar Anda! Komentar akan tampil setelah disetujui." - comment_error_msg : "Maaf, ada kesalahan pada komentar Anda. Pastikan seluruh kolom sudah dilengkapi dan coba kembali." - loading_label : "Sedang memuat..." - search_label_text : "Masukkan kata kunci pencarian..." - search_placeholder_text : "Masukkan kata kunci pencarian..." - search_algolia_no_results : "Tidak ada hasil" - results_found : "Hasil pencarian ditemukan" - back_to_top : "Kembali ke awal" -id-ID: - <<: *DEFAULT_ID - -# Vietnamese -# ---------- -vi: &DEFAULT_VI - skip_links : "Đường dẫn tắt" - skip_primary_nav : "Nhảy tới thanh điều hướng" - skip_content : "Nhảy tới nội dung" - skip_footer : "Nhảy tới chân trang" - page : "Trang" - pagination_previous : "Trước" - pagination_next : "Kế tiếp" - breadcrumb_home_label : "Trang chủ" - breadcrumb_separator : "/" - menu_label : "Menu" - search_label : "Tìm kiếm" - toc_label : "Mục lục" - ext_link_label : "Đường dẫn trực tiếp" - less_than : "chỉ cần" - minute_read : "phút để đọc" - share_on_label : "Chia sẻ tại" - meta_label : - tags_label : "Thẻ:" - categories_label : "Danh mục:" - date_label : "Ngày cập nhật:" - comments_label : "Để lại bình luận" - comments_title : "Bình luận" - more_label : "Mở rộng" - related_label : "Có thể bạn cũng thích" - follow_label : "Theo dõi:" - feed_label : "Feed" - powered_by : "Xây dựng trên nền tảng" - website_label : "Website" - email_label : "Email" - recent_posts : "Bài viết mới" - undefined_wpm : "Chưa định nghĩa thông số words_per_minute tại _config.yml" - comment_form_info : "Email của bạn sẽ được giữ bí mật. Các phần bắt buộc được đánh dấu" - comment_form_comment_label : "Bình luận" - comment_form_md_info : "Hỗ trợ Markdown." - comment_form_name_label : "Tên" - comment_form_email_label : "Địa chỉ email" - comment_form_website_label : "Website (không bắt buộc)" - comment_btn_submit : "Gửi bình luận" - comment_btn_submitted : "Đã được gửi" - comment_success_msg : "Cảm ơn bạn đã bình luận! Bình luận sẽ xuất hiện sau khi được duyệt." - comment_error_msg : "Rất tiếc, có lỗi trong việc gửi bình luận. Hãy đảm bảo toàn bộ các phần bắt buộc đã được điền đầy đủ và thử lại." - loading_label : "Đang tải..." - search_label_text : "Nhập từ khóa cần tìm..." - search_placeholder_text : "Nhập từ khóa cần tìm..." - search_algolia_no_results : "Không tìm thấy kết quả nào" - results_found : "Kết quả tìm được" - back_to_top : "Lên đầu trang" -vi-VN: - <<: *DEFAULT_VI - -# Danish -# ------ -da: &DEFAULT_DA - skip_links : - skip_primary_nav : "Gå til hovedmenuen" - skip_content : "Gå til indholdet" - skip_footer : "Gå til sidefoden" - page : "Side" - pagination_previous : "Forrige" - pagination_next : "Næste" - breadcrumb_home_label : "Forside" - breadcrumb_separator : "/" - menu_label : "Vis/skjul menu" - search_label : "Søgning til/fra" - toc_label : "På denne side" - ext_link_label : "Direkte link" - less_than : "mindre end" - minute_read : "minutters læsning" - share_on_label : "Del på" - meta_label : - tags_label : "Nøgleord:" - categories_label : "Kategorier:" - date_label : "Opdateret:" - comments_label : "Skriv en kommentar" - comments_title : "Kommentarer" - more_label : "Lær mere" - related_label : "Måske kan du også lide" - follow_label : "Følg:" - feed_label : "Feed" - powered_by : "Drives af" - website_label : "Website" - email_label : "E-mail" - recent_posts : "Seneste indlæg" - undefined_wpm : "Parameteren words_per_minute er ikke defineret i _config.yml" - comment_form_info : "Din e-mail bliver ikke offentliggjort. Obligatoriske felter er markeret" - comment_form_comment_label : "Kommentar" - comment_form_md_info : "Markdown er understøttet." - comment_form_name_label : "Navn" - comment_form_email_label : "E-mail" - comment_form_website_label : "Website (frivillig)" - comment_btn_submit : "Send kommentar" - comment_btn_submitted : "Sendt" - comment_success_msg : "Tak for din kommentar! Den bliver vist på siden, så snart den er godkendt." - comment_error_msg : "Desværre skete der en fejl. Prøv igen, mens du sørger for at alle obligatoriske felter er udfyldt." - loading_label : "Indlæser..." - search_label_text : "Hvad leder du efter..." - search_placeholder_text : "Hvad leder du efter..." - search_algolia_no_results : "Ingen resultater" - results_found : "Resultat(er) fundet" - back_to_top : "Tilbage til toppen" -da-DK: - <<: *DEFAULT_DA - -# Polish -# ------ -pl: &DEFAULT_PL - skip_links : - skip_primary_nav : - skip_content : - skip_footer : - page : "Strona" - pagination_previous : "Poprzednia" - pagination_next : "Następna" - breadcrumb_home_label : "Strona główna" - breadcrumb_separator : "/" - menu_label : "Przełącz menu" - search_label : - toc_label : "Spis treści" - ext_link_label : "Link bezpośredni" - less_than : "mniej niż" - minute_read : "minut(y)" - share_on_label : "Udostępnij" - meta_label : - tags_label : "Tagi:" - categories_label : "Kategorie:" - date_label : "Ostatnia aktualizacja:" - comments_label : "Zostaw komentarz" - comments_title : "Komentarze" - more_label : "Dowiedz się więcej" - related_label : "Także może Ci się spodobać" - follow_label : "Śledź:" - feed_label : "Feed" - powered_by : "Powstało dzięki" - website_label : "Strona" - email_label : "Email" - recent_posts : "Najnowsze wpisy" - undefined_wpm : "Parametr words_per_minute nie został zdefiniowany w _config.yml." - comment_form_info : "Twój adres email nie będzie udostępiony. Wymagane pola są oznaczone" - comment_form_comment_label : "Skomentuj" - comment_form_md_info : "Markdown jest wspierany" - comment_form_name_label : "Imię" - comment_form_email_label : "Adres email" - comment_form_website_label : "Strona www (opcjonalna)" - comment_btn_submit : "Skomentuj" - comment_btn_submitted : "Komentarz dodany" - comment_success_msg : "Dziękuję za Twój komentarz! Zostanie dodany po akceptacji." - comment_error_msg : "Niestety wystąpił błąd. Proszę upewnij się, że wszystkie wymagane pola zostały wypełnione i spróbuj ponownie." - loading_label : "Trwa ładowanie strony..." - search_label_text : - search_algolia_no_results : "Brak wyników" -pl-PL: - <<: *DEFAULT_PL - -# Japanese -# -------- -ja: &DEFAULT_JA - skip_links : - skip_primary_nav : - skip_content : - skip_footer : - page : "ページ" - pagination_previous : "前へ" - pagination_next : "次へ" - breadcrumb_home_label : "ホーム" - breadcrumb_separator : "/" - menu_label : "メニュー" - search_label : - toc_label : "目次" - ext_link_label : "リンク" - less_than : - minute_read : - share_on_label : "共有" - meta_label : - tags_label : "タグ:" - categories_label : "カテゴリー:" - date_label : "更新日時:" - comments_label : "コメントする" - comments_title : "コメント" - more_label : "さらに詳しく" - related_label : "関連記事" - follow_label : "フォロー" - feed_label : - powered_by : - website_label : - email_label : - recent_posts : "最近の投稿" - undefined_wpm : "パラメータ words_per_minute が _config.yml で定義されていません" - comment_form_info : "メールアドレスが公開されることはありません。次の印のある項目は必ず入力してください:" - comment_form_comment_label : "コメント" - comment_form_md_info : "Markdown を使用できます" - comment_form_name_label : "名前" - comment_form_email_label : "メールアドレス" - comment_form_website_label : "URL (任意)" - comment_btn_submit : "コメントを送信する" - comment_btn_submitted : "送信しました" - comment_success_msg : "コメントありがとうございます! コメントは承認されるとページに表示されます。" - comment_error_msg : "送信エラーです。必須項目がすべて入力されていることを確認して再送信してください。" - loading_label : "読み込み中..." - search_label_text : - search_placeholder_text : "検索キーワードを入力してください..." - search_algolia_no_results : - results_found : "件" -ja-JP: - <<: *DEFAULT_JA - -# Slovak -# ----------------- -sk: &DEFAULT_SK - skip_links : - skip_primary_nav : - skip_content : - skip_footer : - page : "Stránka" - pagination_previous : "Predošlá" - pagination_next : "Ďalšia" - breadcrumb_home_label : "Domov" - breadcrumb_separator : "/" - menu_label : "Menu" - search_label : - toc_label : "Obsah" - ext_link_label : "Priamy odkaz" - less_than : "menej ako" - minute_read : "minút" - share_on_label : "Zdieľaj na" - meta_label : - tags_label : "Tagy:" - categories_label : "Kategórie:" - date_label : "Aktualizované:" - comments_label : "Zanechaj odkaz" - comments_title : "Komentáre" - more_label : "Dozvedieť sa viac" - related_label : "Podobné články" - follow_label : "Sleduj:" - feed_label : "Zoznam" - powered_by : "Stránka vytvorená pomocou" - website_label : "Web stránka" - email_label : "Email" - recent_posts : "Najnovšie príspevky" - undefined_wpm : "Nedefinovaný parameter words_per_minute v _config.yml" - comment_form_info : "Tvoja emailová adresa nebude publikovaná. Požadované polia sú označené" - comment_form_comment_label : "Komentár" - comment_form_md_info : "Markdown je podporovaný." - comment_form_name_label : "Meno" - comment_form_email_label : "Emailová adresa" - comment_form_website_label : "Webstránka (voliteľné)" - comment_btn_submit : "Vlož komentár" - comment_btn_submitted : "Vložený" - comment_success_msg : "Ďakujem za tvoj komentár! Po schválení bude zobrazený na stránke." - comment_error_msg : "Prepáč, pri ukladaní nastala chyba. Ubezpeč sa prosím, že si vyplnil všetky požadované polia a skús znova." - loading_label : "Načítava sa..." - search_label_text : - search_placeholder_text : "Zadaj hľadaný výraz..." - search_algolia_no_results : - results_found : "Nájdených výsledkov" - back_to_top : "Na začiatok stránky" -sk-SK: - <<: *DEFAULT_SK - -# Hungarian -# ----------------- -hu: &DEFAULT_HU - skip_links : - skip_primary_nav : - skip_content : - skip_footer : - page : "Oldal" - pagination_previous : "Előző" - pagination_next : "Következő" - breadcrumb_home_label : "Kezdőlap" - breadcrumb_separator : "/" - menu_label : "Menü nyit/zár" - search_label : - toc_label : "Ezen az oldalon" - ext_link_label : "Közvetlen Link" - less_than : "kevesebb mint" - minute_read : "eltöltött percek" - share_on_label : "Megosztás" - meta_label : - tags_label : "Tagek:" - categories_label : "Kategóriák:" - date_label : "Frissítve:" - comments_label : "Szólj hozzá!" - comments_title : "Hozzászólások" - more_label : "Tovább" - related_label : "Ajánlások" - follow_label : "Követés:" - feed_label : "Folyam" - powered_by : "Powered by" - website_label : "Honlap" - email_label : "Email" - recent_posts : "Friss cikkek" - undefined_wpm : "Ismeretlen paraméter words_per_minute : _config.yml" - comment_form_info : "Az e-mail címed nem lesz publikus. A csillagozott mezők kitöltése kötelező" - comment_form_comment_label : "Hozzászólás" - comment_form_md_info : "Támogatott formázási mód: Markdown" - comment_form_name_label : "Név" - comment_form_email_label : "Email cím" - comment_form_website_label : "Honlap (nem kötelező):" - comment_btn_submit : "Hozzászólás elküldése" - comment_btn_submitted : "Hozzászólás elküldve" - comment_success_msg : "Köszönjük a Hozzászólást! A Hozzászólások csak előzetes moderáció után lesznek publikusak." - comment_error_msg : "Hoppá, hiba történt a beküldés közben. Kérlek ellenőrizd hogy minden kötelező mező ki van-e töltve." - loading_label : "Betöltés..." - search_label_text : - search_placeholder_text : "Keresendő szöveg..." - search_algolia_no_results : - results_found : "Találatok:" - back_to_top : "Oldal tetejére" -hu-HU: - <<: *DEFAULT_HU - -# Romanian -# ----------------- -ro: &DEFAULT_RO - skip_links : - skip_primary_nav : - skip_content : - skip_footer : - page : "Pagina" - pagination_previous : "Anterior" - pagination_next : "Următor" - breadcrumb_home_label : "Acasă" - breadcrumb_separator : "/" - menu_label : "Comută meniul" - search_label : - toc_label : "Pe această pagină" - ext_link_label : "Link direct" - less_than : "mai puțin de" - minute_read : "minute de citit" - share_on_label : "Distribuie pe" - meta_label : - tags_label : "Etichete:" - categories_label : "Categorii:" - date_label : "Actualizat:" - comments_label : "Lasă un comentariu" - comments_title : "Comentarii" - more_label : "Citește mai departe" - related_label : "S-ar putea să-ți placă" - follow_label : "Urmărește:" - feed_label : "Feed RSS" - powered_by : "Cu sprijinul" - website_label : "Site" - email_label : "Email" - recent_posts : "Articole recente" - undefined_wpm : "Parametru words_per_minute nedefinit în _config.yml" - comment_form_info : "Adresa ta de email nu va fi făcută publică. Câmpurile marcate sunt obligatorii" - comment_form_comment_label : "Comentariu" - comment_form_md_info : "Markdown este suportat." - comment_form_name_label : "Nume" - comment_form_email_label : "Adresă de email" - comment_form_website_label : "Site (opțional)" - comment_btn_submit : "Trimite comentariul" - comment_btn_submitted : "Trimis" - comment_success_msg : "Mulțumesc pentru comentariu! Va apărea pe site în momentul în care va fi aprobat." - comment_error_msg : "Scuze, este o problemă cu comentariul tău. Asigură-te că toate câmpurile obligatorii au fost completate și încearcă din nou." - loading_label : "Se încarcă..." - search_label_text : - search_placeholder_text : "Caută ceva..." - search_algolia_no_results : - results_found : "Rezultate găsite" - back_to_top : "Înapoi în susul paginii" -ro-RO: - <<: *DEFAULT_RO - -# Punjabi -# ----------------- -pa: &DEFAULT_PA - skip_links : "ਲਿੰਕ ਛੱਡੋ" - skip_primary_nav : "ਮੂਲ ਮਾਰਗ ਛੱਡੋ" - skip_content : "ਸਮੱਗਰੀ ਛੱਡੋ" - skip_footer : "ਅੰਤ ਵਿਚ ਲਿਖਿਆ ਛੱਡੋ" - page : "ਸਫ਼ਾ" - pagination_previous : "ਪਿਛਲਾ" - pagination_next : "ਅਗਲਾ " - breadcrumb_home_label : "ਘਰ" - breadcrumb_separator : "/" - menu_label : "ਟੌਗਲ ਮੀਨੂ" - search_label : "ਖੋਜ" - toc_label : "ਇਸ ਸਫ਼ੇ 'ਤੇ" - ext_link_label : "ਸਿੱਧਾ ਸੰਪਰਕ" - less_than : "ਤੋਂ ਘੱਟ" - minute_read : "ਮਿੰਟ ਵਿੱਚ ਪੜਿਆ ਜਾ ਸਕਦਾ ਹੈ" - share_on_label : "ਸਾਂਝਾ ਕਰੋ" - meta_label : "ਸਵੈ-ਸੰਦਰਭ ਜਾਣਕਾਰੀ" - tags_label : "ਟੈਗ" - categories_label : "ਵਰਗ" - date_label : "ਅਪਡੇਟ ਕੀਤਾ:" - comments_label : "ਇੱਕ ਟਿੱਪਣੀ ਛੱਡੋ" - comments_title : "ਟਿੱਪਣੀਆਂ" - more_label : "ਹੋਰ ਜਾਣੋ" - related_label : "ਤੁਸੀਂ ਇਸਦਾ ਆਨੰਦ ਵੀ ਲੈ ਸਕਦੇ ਹੋ" - follow_label : "ਫਾਲੋ ਅੱਪ ਕਰੋ:" - feed_label : "ਫੀਡ" - powered_by : "ਦੁਆਰਾ ਸੰਚਾਲਿਤ" - website_label : "ਵੈੱਬਸਾਇਟ" - email_label : "ਈਮੇਲ" - recent_posts : "ਹਾਲ ਹੀ ਦੇ ਪੋਸਟ" - undefined_wpm : "_config.yml ਤੇ ਅਣ-ਪ੍ਰਭਾਸ਼ਿਤ ਪੈਰਾਮੀਟਰ words_per_minute" - comment_form_info : "ਤੁਹਾਡਾ ਈਮੇਲ ਪਤਾ ਪ੍ਰਕਾਸ਼ਿਤ ਨਹੀਂ ਕੀਤਾ ਜਾਵੇਗਾ। ਅਨੁਮਾਨਿਤ ਸਥਾਨਾਂ ਨੂੰ ਅੰਡਰਲਾਈਨ ਕੀਤਾ ਗਿਆ ਹੈ" - comment_form_comment_label : "ਟਿੱਪਣੀ" - comment_form_md_info : "ਮਾਰਕਡਾਊਨ ਵਰਤ ਸਕਦੇ ਹੋ।" - comment_form_name_label : "ਨਾਮ" - comment_form_email_label : "ਈਮੇਲ ਪਤਾ" - comment_form_website_label : "ਵੈਬਸਾਈਟ (ਵਿਕਲਪਿਕ)" - comment_btn_submit : "ਕੋਈ ਟਿੱਪਣੀ ਭੇਜੋ" - comment_btn_submitted : "ਪੇਸ਼ ਕੀਤਾ" - comment_success_msg : "ਤੁਹਾਡੀਆਂ ਟਿੱਪਣੀਆਂ ਲਈ ਧੰਨਵਾਦ! ਇਹ ਮਨਜ਼ੂਰੀ ਮਿਲਣ ਦੇ ਬਾਅਦ ਸਾਈਟ 'ਤੇ ਦਿਖਾਇਆ ਜਾਵੇਗਾ।" - comment_error_msg : "ਮੁਆਫ ਕਰਨਾ, ਤੁਹਾਡੀ ਅਧੀਨਗੀ ਵਿੱਚ ਕੋਈ ਗਲਤੀ ਹੋਈ ਸੀ ਕਿਰਪਾ ਕਰਕੇ ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਸਾਰੇ ਲੋੜੀਂਦੇ ਖੇਤਰ ਪੂਰੇ ਹੋ ਗਏ ਹਨ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।" - loading_label : "ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ..." - search_label_text : "ਖੋਜ" - search_placeholder_text : "ਆਪਣੀ ਖੋਜ ਦੇ ਸ਼ਬਦ ਨੂੰ ਦਰਜ ਕਰੋ..." - search_algolia_no_results : - results_found : "ਨਤੀਜਾ ਮਿਲਿਆ/ਮਿਲੇ" - back_to_top : "ਵਾਪਸ ਚੋਟੀ 'ਤੇ ਜਾਓ" -pa-IN: - <<: *DEFAULT_PA - -# Persian (Farsi) -# -------------- -fa: &DEFAULT_FA - skip_links : - skip_primary_nav : - skip_content : - skip_footer : - page : "صفحه" - pagination_previous : "قبلی" - pagination_next : "بعدی" - breadcrumb_home_label : "صفحه اصلی" - breadcrumb_separator : "/" - menu_label : "فهرست" - toc_label : "در این صفحه" - ext_link_label : "لینک مستقیم" - less_than : " " - minute_read : "(طول مطالعه (دقیقه" - share_on_label : "اشتراک گذاری در" - meta_label : - tags_label : "تگ ها: " - categories_label : "دسته بندی ها: " - date_label : "به روز شده در: " - comments_label : "ارسال نظر" - comments_title : "نظرات" - more_label : "ادامه مطلب" - related_label : "ممکن است از این مطالب نیز لذت ببرید" - follow_label : "دنبال کنید: " - feed_label : "خوراک" - powered_by : "طراحی شده توسط" - website_label : "سایت اینترنتی" - email_label : "پست الکترونیک" - recent_posts : "آخرین مطالب" - undefined_wpm : ".(words_per_minute) _config.yml متغیر اشتباه در" - comment_form_info : ".آدرس ایمیل شما منتشر نخواهد شد. فیلدهای اجباری مشخص شده اند" - comment_form_comment_label : "دیدگاه" - comment_form_md_info : ".پشتیبانی می شود Markdown" - comment_form_name_label : "نام" - comment_form_email_label : "پست الکترونیک" - comment_form_website_label : "سایت اینترنتی (اختیاری)" - comment_btn_submit : "ارسال نظر" - comment_btn_submitted : "ارسال شد" - comment_success_msg : ".باتشکر از ارسال دیدگاه! پس از تأیید، این دیدگاه در سایت نشان داده خواهد شد" - comment_error_msg : ".متاسفانه در ارسال شما خطایی بود. لطفا مطمئن شوید تمام فیلدهای مورد نیاز تکمیل شده و دوباره امتحان کنید" - loading_label : "...بارگذاری" - search_label_text : - search_placeholder_text : "...عبارت جستجوی خود را وارد کنید" - search_algolia_no_results : - results_found : "نتایج" - back_to_top : "بازگشت به بالا" -fa-IR: - <<: *DEFAULT_FA - - -# Malayalam -# ----------------- -ml: &DEFAULT_ML - skip_links : - skip_primary_nav : - skip_content : - skip_footer : - page : "പേജ്" - pagination_previous : "തിരികെ" - pagination_next : "മുന്നോട്ട്" - breadcrumb_home_label : "ഹോം" - breadcrumb_separator : "/" - menu_label : "ടോഗിൾ മെനു" - search_label : "ടോഗിൾ സെർച്ച്" - toc_label : "ഈ പേജിൽ" - ext_link_label : "ലിങ്കിലേക് പോകാൻ" - less_than : "ഏതാണ്ട്" - minute_read : "മിനിറ്റ് ദൈർഖ്യം" - share_on_label : "ഷെയർ ചെയ്യുവാൻ " - meta_label : - tags_label : "ടാഗുകൾ:" - categories_label : "വിഭാഗങ്ങൾ:" - date_label : "അവസാന മാറ്റം:" - comments_label : "അഭിപ്രായം രേഖപ്പെടുത്തുക" - comments_title : "അഭിപ്രായങ്ങൾ" - more_label : "കൂടുതൽ അറിയുവാൻ" - related_label : "നിങ്ങൾക് ഇതും ഇഷ്ടപ്പെട്ടേക്കാം" - follow_label : "പിന്തുടരുക:" - feed_label : "ഫീഡ്" - powered_by : "പവേർഡ് ബൈ" - website_label : "വെബ്സൈറ്റ്" - email_label : "ഇ-മെയിൽ" - recent_posts : "സമീപകാല പോസ്റ്റുകൾ" - undefined_wpm : "Config.yml ലെ words_per_minute പരാമീറ്റർ നിർവചിച്ചിട്ടില്ല." - comment_form_info : "നിങ്ങളുടെ ഇമെയിൽ വിലാസം പ്രസിദ്ധീകരിക്കില്ല. ആവശ്യമായ ഫീൽഡുകൾ അടയാളപ്പെടുത്തി." - comment_form_comment_label : "കമന്റ്" - comment_form_md_info : "Markdown സപ്പോർട്ട് ചെയ്യുന്നതാണ്." - comment_form_name_label : "പേര്" - comment_form_email_label : "ഇ-മെയിൽ" - comment_form_website_label : "വെബ്സൈറ് (ഓപ്ഷണൽ)" - comment_btn_submit : "അഭിപ്രായം രേഖപ്പെടുത്തുക" - comment_btn_submitted : "രേഖപ്പെടുത്തി" - comment_success_msg : "നിങ്ങളുടെ അഭിപ്രായത്തിന് നന്ദി! ഇത് അംഗീകരിച്ചുകഴിഞ്ഞാൽ ഇത് സൈറ്റിൽ പ്രദർശിപ്പിക്കും." - comment_error_msg : "ക്ഷമിക്കണം, നിങ്ങളുടെ സമർപ്പണവുമായി ബന്ധപ്പെട്ട് ഒരു പിശകുണ്ടായിരുന്നു. ആവശ്യമായ എല്ലാ ഫീൽഡുകളും പൂർത്തിയായിട്ടുണ്ടെന്ന് ഉറപ്പുവരുത്തുക, വീണ്ടും ശ്രമിക്കുക." - loading_label : "ലോഡിംഗ്..." - search_label_text : - search_placeholder_text : "നിങ്ങളുടെ തിരയൽ പദം നൽകുക..." - search_algolia_no_results : - results_found : "ഫലം (കൾ) കണ്ടെത്തി" - back_to_top : "മുകളിലേയ്ക്ക്" -ml-IN: - <<: *DEFAULT_ML - -# Thailand -# -------------- -th: &DEFAULT_TH - skip_links : - skip_primary_nav : - skip_content : - skip_footer : - page : "หน้า" - pagination_previous : "ก่อนหน้า" - pagination_next : "ถัดไป" - breadcrumb_home_label : "หน้าแรก" - breadcrumb_separator : "/" - menu_label : "พับเมนู" - search_label : "พับการค้นหา" - toc_label : "บนหน้านี้" - ext_link_label : "ลิงก์โดยตรง" - less_than : "น้อยกว่า" - minute_read : "นาที ในการอ่าน" - share_on_label : "แชร์ไปที่" - meta_label : - tags_label : "แท็ก:" - categories_label : "หมวดหมู่:" - date_label : "อัพเดตล่าสุด:" - comments_label : "แสดงความคิดเห็น" - comments_title : "ความคิดเห็น" - more_label : "อ่านต่อ" - related_label : "คุณอาจจะชอบสิ่งนี้" - follow_label : "ติดตาม:" - feed_label : "ฟืดข่าว" - powered_by : "ขับเคลื่อนโดย" - website_label : "เว็บไซต์" - email_label : "อีเมล" - recent_posts : "โพสล่าสุด" - undefined_wpm : "ไม่สามารถระบุพารามิเตอร์ words_per_minute ได้ใน _config.yml" - comment_form_info : "อีเมลของคุณไม่สามารถโพสสาธารณะได้ กรุณากรอกช่องที่ระบุด้วยเครื่องหมายดอกจันไว้" - comment_form_comment_label : "แสดงความคิดเห็น" - comment_form_md_info : "มาร์กดาวน์ได้รับการสนับสนุน" - comment_form_name_label : "ชื่อ" - comment_form_email_label : "ที่อยู่อีเมล" - comment_form_website_label : "เว็บไซต์ (ตัวเลือก)" - comment_btn_submit : "ส่งความคิดเห็น" - comment_btn_submitted : "ส่งเรียบร้อยแล้ว" - comment_success_msg : "ขอบคุณสำหรับการแสดงความคิดเห็น! ความคิดเห็นจะได้รับการแสดงหลังจากได้รับการยืนยัน" - comment_error_msg : "ขออภัย, มีบางอย่างผิดพลาดจากการส่งแบบฟอร์ม กรุณาตรวจทานทุกช่อง และลองส่งใหม่อีกครั้ง" - loading_label : "กำลังโหลด..." - search_label_text : - search_placeholder_text : "ใส่คำค้นหาของคุณ..." - search_algolia_no_results : - results_found : "ผลการค้นหา พบ" - back_to_top : "กลับด้านบน" -th-TH: - <<: *DEFAULT_TH - -# Hindi -# ----------------- -hi: &DEFAULT_HI - skip_links : "लिंक छोड़ें" - skip_primary_nav : "प्राथमिक पथ-प्रदर्शन छोड़ें" - skip_content : "सामग्री छोड़ें" - skip_footer : "अंत-में लिखा छोड़ें" - page : "पृष्ठ" - pagination_previous : "पिछला" - pagination_next : "अगला" - breadcrumb_home_label : "घर" - breadcrumb_separator : "/" - menu_label : "टॉगल मेनू" - toc_label : "इस पृष्ठ पर" - ext_link_label : "सीधा संपर्क" - less_than : "से कम" - minute_read : "मिनट में पढ़ सकते हैं" - share_on_label : "साझा करें" - meta_label : "स्व-संदर्भात्मक जानकारी" - tags_label : "अंकितक:" - categories_label : "श्रेणियाँ:" - date_label : "अपडेट किया गया:" - comments_label : "एक टिप्पणी छोड़ें" - comments_title : "टिप्पणियाँ" - more_label : "और अधिक जानें" - related_label : "आप इसका भी आनंद ले सकते हैं" - follow_label : "अनुसरण करे:" - feed_label : "फ़ीड" - powered_by : "द्वारा संचालित" - website_label : "वेबसाइट" - email_label : "ईमेल" - recent_posts : "हाल के पोस्ट" - undefined_wpm : "_config.yml पर अपरिभाषित पैरामीटर words_per_minute" - comment_form_info : "आपका ईमेल पता प्रकाशित नहीं किया जाएगा। अपेक्षित स्थानों को रेखांकित कर दिया गया है" - comment_form_comment_label : "टिप्पणी" - comment_form_md_info : "मार्कडाउन की अनुमति है।" - comment_form_name_label : "नाम" - comment_form_email_label : "ईमेल पता" - comment_form_website_label : "वेबसाइट (ऐच्छिक)" - comment_btn_submit : "टिप्पणी भेजें" - comment_btn_submitted : "प्रस्तुत" - comment_success_msg : "आपके कमेंट के लिए धन्यवाद! इसे स्वीकृति मिलने के बाद साइट पर दिखाया जाएगा।" - comment_error_msg : "क्षमा करें, आपके सबमिशन के साथ एक त्रुटि हुई थी। कृपया सुनिश्चित करें कि सभी आवश्यक फ़ील्ड पूरा हो गए हैं और पुनः प्रयास करें।" - loading_label : "लोड हो रहा है..." - search_label_text : "खोज" - search_placeholder_text : "अपना खोज शब्द दर्ज करें..." - search_algolia_no_results : - results_found : "परिणाम मिला/मिले" - back_to_top : "शीर्ष पर वापस" -hi-IN: - <<: *DEFAULT_HI - -# Catalan -# -------------- -ca: &DEFAULT_CA - skip_links : "Salta els enllaços" - skip_primary_nav : "Salta a la navegació primària" - skip_content : "Salta al contingut" - skip_footer : "Salta al peu" - page : "Pàgina" - pagination_previous : "Anterior" - pagination_next : "Següent" - breadcrumb_home_label : "Inici" - breadcrumb_separator : "/" - menu_label : "Mostra/amaga el menú" - search_label : "Mostra/amaga la cerca" - toc_label : "En aquesta pàgina" - ext_link_label : "Enllaç directe" - less_than : "es llegeix en menys de" - minute_read : "minut(s)" - share_on_label : "Comparteix a" - meta_label : - tags_label : "Etiquetes:" - categories_label : "Categories:" - date_label : "Actualitzat:" - comments_label : "Deixa un comentari" - comments_title : "Comentaris" - more_label : "Llegeix més" - related_label : "També et pot agradar" - follow_label : "Segueix-me:" - feed_label : "Feed" - powered_by : "Funciona amb" - website_label : "Pàgina web" - email_label : "Correu electrònic" - recent_posts : "Entrades recents" - undefined_wpm : "El paràmetre words_per_minute no està definit a _config.yml" - comment_form_info : "No es mostrarà el teu correu electrònic. Els camps obligatoris estan marcats" - comment_form_comment_label : "Comentari" - comment_form_md_info : "Admet Markdown." - comment_form_name_label : "Nom" - comment_form_email_label : "Correu electrònic" - comment_form_website_label : "Pàgina web (opcional)" - comment_btn_submit : "Envia" - comment_btn_submitted : "Enviat" - comment_success_msg : "Gràcies pel teu comentari! Apareixerà un cop sigui aprovat." - comment_error_msg : "Hi ha hagut un error enviat el comentari. Comprova que els camps obligatirs estiguin omplerts i torna-ho a provar." - loading_label : "Carregant..." - search_label_text : "Introdueix termes per cercar..." - search_placeholder_text : "Introdueix termes per cercar..." - search_algolia_no_results : - results_found : "resultat(s)" - back_to_top : "Torna a dalt" -ca-ES: - <<: *DEFAULT_CA - -# Irish (Gaeilge) -# -------------- -ga: &DEFAULT_GA - skip_links : "Léim naisc" - skip_primary_nav : "Léim chuig príomh naiscleanúint" - skip_content : "Léim chuig inneachar" - skip_footer : "Léim chuig buntásc" - page : "Leathanach" - pagination_previous : "Leathanach roimhe sin" - pagination_next : "Céad leathanach eile" - breadcrumb_home_label : "Baile" - breadcrumb_separator : "/" - menu_label : "Scorán roghchlár" - search_label : "Scorán cuardach" - toc_label : "Ar an leathanach seo" - ext_link_label : "Nasc díreach" - less_than : "níos lú na" - minute_read : "a léamh" - share_on_label : "Roinn ar" - meta_label : - tags_label : "Clibeanna:" - categories_label : "Catagoírí:" - date_label : "Nuashonraíodh:" - comments_label : "Fág trácht" - comments_title : "Tráchtanna" - more_label : "Foghlaim níos mó" - follow_label : "Lean:" - feed_label : "Feed" - powered_by : "Ag fáil cumhacht as" - website_label : "Suíomh gréasáin" - email_label : "R-phost" - recent_posts : "Postálacha le deanaí" - comment_form_comment_label : "Trácht" - comment_form_name_label : "Ainm" - comment_form_email_label : "Ríomhsheoladh" - comment_form_website_label : "Suíomh gréasáin (roghnach)" - comment_btn_submit : "Cuir isteach trácht" - comment_btn_submitted : "Curtha isteach" - loading_label : "Lódáil..." - search_label_text : "Cuir do chuardach isteach..." - search_placeholder_text : "Cuir do chuardach isteach..." - search_algolia_no_results : - results_found : "Torthaí aimsithe" - back_to_top : "Ar ais go barr" -ga-IE: - <<: *DEFAULT_GA - - -# Finnish / Suomi -# ----------------- -fi: &DEFAULT_FI - skip_links : "Ohita linkit" - skip_primary_nav : "Hyppää pää navigaatioon" - skip_content : "Hyppää sisältöön" - skip_footer : "Hyppää alareunaan" - page : "Sivu" - pagination_previous : "Edellinen" - pagination_next : "Seuraava" - breadcrumb_home_label : "Etusivu" - breadcrumb_separator : "/" - menu_label : "Avaa valikko" - search_label : "Avaa haku" - toc_label : "Tällä sivulla" - ext_link_label : "Suora linkki" - less_than : "vähemmän kuin" - minute_read : "lukuaika" - share_on_label : "Jaa" - meta_label : - tags_label : "Tagit:" - categories_label : "Kategoriat:" - date_label : "Päivitetty:" - comments_label : "Jätä kommentti" - comments_title : "Kommentit" - more_label : "Lisää" - related_label : "Voit olla kiinnostunut myös" - follow_label : "Seuraa:" - feed_label : "Syöte" - powered_by : "Voimanlähteenä" - website_label : "Websivu" - email_label : "Email" - recent_posts : "Viimeisimmät postaukset" - undefined_wpm : "words_per_minute asetusta ei ole määritelty _config.yml tiedostossa" - comment_form_info : "Your email address will not be published. Required fields are marked" - comment_form_comment_label : "Kommentti" - comment_form_md_info : "Tukee markdown muotoilua." - comment_form_name_label : "Nimi" - comment_form_email_label : "Email osoite" - comment_form_website_label : "Webbisivu (vapaaehtoinen)" - comment_btn_submit : "Lähetä" - comment_btn_submitted : "Lähetetty" - comment_success_msg : "Kiitos kommentista, se julkaistaan tällä sivulla moderoinnin jälkeen." - comment_error_msg : "Tarkista että olet täyttänyt kaikki kentät ja yritä uudelleen." - loading_label : "Ladataan..." - search_label_text : "Hakusana..." - search_placeholder_text : "Hakusana..." - search_algolia_no_results : - results_found : "Tulosta" - back_to_top : "Ylös" - -# Myanmar (Burmese) -# ----------------- -my: &DEFAULT_MY - skip_links : "လင့်များကို​ကျော်ပါ။" - skip_primary_nav : "မူလအညွှန်းသို့​ကျော်ပါ။" - skip_content : "အကြောင်းအရာသို့ကျော်ပါ။" - skip_footer : "အောက်ခြေသို့ကျော်ပါ။" - page : "စာမျက်နှာ" - pagination_previous : "ရှေ့တစ်ခု" - pagination_next : "နောက်တစ်ခု" - breadcrumb_home_label : "ပင်မစာမျက်နှာ" - breadcrumb_separator : "/" - menu_label : "မီနူး ဖွင့်၊ပိတ်" - search_label : "ရှာ​ဖွေရန် ဖွင့်၊ပိတ်" - toc_label : "ဒီစာမျက်နှာတွင်" - ext_link_label : "တိုက်ရိုက်လင့်" - less_than : "ဖတ်ရန်ကြာချိန်" - minute_read : "မိနစ်" - share_on_label : "မျှဝေပါ။" - meta_label : - tags_label : "အမှတ်အသားများ -" - categories_label : "အမျိုးအစားများ -" - date_label : "ပြင်ဆင်ပြီး -" - comments_label : "မှတ်ချက်တစ်ခုချန်ထားပါ။" - comments_title : "မှတ်ချက်များ" - more_label : "ပိုမိုသိရှိရန်" - related_label : "သင်နှစ်သက်နိုင်​သော" - follow_label : "သတင်းလိုက်ယူရန် -" - feed_label : "Feed ယူရန် -" - powered_by : "ပံ့ပိုးသည်" - website_label : "ဝဘ်ဆိုက်" - email_label : "အီးမေးလ်" - recent_posts : "လတ်တလောရေးသားချက်များ" - undefined_wpm : "_config.yml မှာ words_per_minute ကိုမသတ်မှတ်ထားပါ။" - comment_form_info : "သင့်အီးမေးလ်လိပ်စာကို​ဖော်ပြသွားမည်မဟုတ်ပါ။ လိုအပ်သောဖြည့်စွက်ရန်​နေရာများကို အမှတ်အသားပြထားပါသည်။" - comment_form_comment_label : "မှတ်ချက်" - comment_form_md_info : "Markdown ကိုထောက်ပံ့သည်။" - comment_form_name_label : "နာမည်" - comment_form_email_label : "အီးမေးလိပ်စာ" - comment_form_website_label : "ဝဘ်ဆိုက် (မဖြည့်စွက်လည်းရသည်)" - comment_btn_submit : "မှတ်ချက်တင်ပါ" - comment_btn_submitted : "တင်သွင်းလိုက်သည်" - comment_success_msg : "မှတ်ချက်ပေးတဲ့အတွက်ကျေးဇူးတင်ပါတယ်။ ၎င်းကိုအတည်ပြုပြီးသည့်အခါ ဝဘ်ဆိုက်ပေါ်တွင်ပြလိမ့်မည်။" - comment_error_msg : "တောင်းပန်ပါတယ်။ သင့်တင်သွင်းမှုတွင်အမှားတစ်ခုရှိခဲ့သည်။ ကျေးဇူးပြုပြီးလိုအပ်သောဖြည့်စွက်ရန်​နေရာအားလုံးဖြည့်ပြီးပါကထပ်မံကြိုးစားပါ။" - loading_label : "တင်နေသည်..." - search_label_text : "သင့်ရှာဖွေရေးဝေါဟာရကိုရိုက်ထည့်ပါ..." - search_placeholder_text : "သင့်ရှာဖွေရေးဝေါဟာရကိုရိုက်ထည့်ပါ..." - search_algolia_no_results : - results_found : "ရလဒ်(များ)ကိုတွေ့ရှိခဲ့သည်" - back_to_top : "အပေါ်သို့ပြန်သွား" -my-MM: - <<: *DEFAULT_MY - -# Norwegian -# ------- -no: &DEFAULT_NO - skip_links : "Hopp over lenker" - skip_primary_nav : "Gå til primærnavigasjon" - skip_content : "Gå til innhold" - skip_footer : "Gå til fotnote" - page : "Side" - pagination_previous : "Forrige" - pagination_next : "Neste" - breadcrumb_home_label : "Hjem" - breadcrumb_separator : "/" - menu_label : "Vis/skjul meny" - search_label : "Vis/skjul søk" - toc_label : "På denne siden" - ext_link_label : "Direkte lenke" - less_than : "mindre enn" - minute_read : "minutters lesing" - share_on_label : "Del på" - meta_label : - tags_label : "Nøkkelord:" - categories_label : "Kategorier:" - date_label : "Oppdatert:" - comments_label : "Skriv en kommentar" - comments_title : "Kommentarer" - more_label : "Lær mer" - related_label : "Du vil kanskje også lese:" - follow_label : "Følg:" - feed_label : "Feed" - powered_by : "Lagd med" - website_label : "Nettside" - email_label : "E-post" - recent_posts : "Nyeste innlegg" - undefined_wpm : "Parameteret words_per_minute er ikke definert i _config.yml" - comment_form_info : "Din e-postadresse vil ikke bli publisert. Obligatoriske felt er markert" - comment_form_comment_label : "Kommentar" - comment_form_md_info : "Markdown er støttet" - comment_form_name_label : "Navn" - comment_form_email_label : "E-postadresse" - comment_form_website_label : "Nettside (frivillig)" - comment_btn_submit : "Send kommentar" - comment_btn_submitted : "Sendt" - comment_success_msg : "Takk for din kommentar! Den blir vist på siden så fort den er godkjent" - comment_error_msg : "Beklager, noe gikk galt. Sjekk at alle obligatoriska felt er utfylt og prøv igjen" - loading_label : "Laster..." - search_label_text : "Skriv inn søkeord" - search_placeholder_text : "Skriv inn søkeord" - search_algolia_no_results : "Ingen treff" - results_found : "Treff funnet" - back_to_top : "Tillbake til toppen" -no-NB: - <<: *DEFAULT_NO -no-NN: - <<: *DEFAULT_NO - -# Hebrew -# ------- -he: &DEFAULT_HE - skip_links : "דלגו על קישור" - skip_primary_nav : "דלגו לראשי" - skip_content : "דלגו לתוכן" - skip_footer : "דלגו לתחתית" - page : "דף" - pagination_previous : "קודם" - pagination_next : "הבא" - breadcrumb_home_label : "בית" - breadcrumb_separator : "/" - menu_label : "סגירה/פתיחה של תפריט" - search_label : "סגירה/פתיחה של חיפוש" - toc_label : "בדף זה" - ext_link_label : "קישור ישיר" - less_than : "פחות מ" - minute_read : "דקת קריאה" - share_on_label : "שתפו ב" - meta_label : - tags_label : "תגיות:" - categories_label : "קטגוריות:" - date_label : "מעודכן:" - comments_label : "השאירו הערה" - comments_title : "הערות" - more_label : "קראו עוד" - related_label : "אולי יעניין אותך גם" - follow_label : "עקבו אחרי" - feed_label : "פיד" - powered_by : "Powered by" - website_label : "אתר" - email_label : "אימייל" - recent_posts : "פוסטים אחרונים" - undefined_wpm : "Undefined parameter words_per_minute at _config.yml" - comment_form_info : "האימייל שלך נשמר חסוי. שדות חובה מסומנים" - comment_form_comment_label : "הערה" - comment_form_md_info : "Markdown is supported." - comment_form_name_label : "שם" - comment_form_email_label : "כתובת אימייל" - comment_form_website_label : "אתר (אפשרות)" - comment_btn_submit : "שלחו הערה" - comment_btn_submitted : "נשלח" - comment_success_msg : "תודה על ההערה שלך! היא תופיע באתר ברגע שתאושר." - comment_error_msg : "סליחה, קרתה תקלה בשליחה. אנא וודאו שכל השדות מלאים ונסו שנית." - loading_label : "טוען..." - search_label_text : "מילות חיפוש..." - search_placeholder_text : "מילות חיפוש..." - search_algolia_no_results : "אין תוצאות" - results_found : "תוצאות נמצאו" - back_to_top : "חזרה להתחלה" -he-IL: - <<: *DEFAULT_HE - -# Arabic (عربي) -# -------------- -ar: &DEFAULT_AR - skip_links : "تخطي الروابط" - skip_primary_nav : "تخطى الى شريط التنقل" - skip_content : "الانتقال الى المحتوى" - skip_footer : "الانتقال الى ذيل الصفحة" - page : "صفحه" - pagination_previous : "قبل" - pagination_next : "بعد" - breadcrumb_home_label : "الرئيس" - breadcrumb_separator : "/" - menu_label : "الخيارات" - search_label : "البحث" - toc_label : "على هذه الصفحة" - ext_link_label : "رابط مباشر" - less_than : "اقل من" - minute_read : "دقيقة قرائية" - share_on_label : "مشاركة" - meta_label : - tags_label : "العلامات الوصفية:" - categories_label : "الفئات:" - date_label : "تم التحديث:" - comments_label : "اترك تعليق" - comments_title : "التعليقات" - more_label : "اقرأ المزيد" - related_label : "قد يعجبك أيضا" - follow_label : "تابع:" - feed_label : "الاخبار - RSS" - powered_by : "تم تطوير بواسطة" - website_label : "موقع" - email_label : "ايميل" - recent_posts : "المشاركات الأخيرة" - undefined_wpm : "معامل غير معرف في words_per_minute (كلمة في الدقيقة) في ملف _config.yml" - comment_form_info : "لن يتم نشر عنوان بريدك الإلكتروني. الحقول المطلوبة إلزامية" - comment_form_comment_label : "تعليق" - comment_form_md_info : "لغة ال Markdown مدعومة." - comment_form_name_label : "الاسم" - comment_form_email_label : "البريد الالكتروني" - comment_form_website_label : "الموقع (اختياري)" - comment_btn_submit : "أضف تعليق" - comment_btn_submitted : "تم الإرسال" - comment_success_msg : "شكراً على التعليق! سيتم اظهاره عندما يتم موافقة عليه." - comment_error_msg : "للأسف, هناك خطأ في المحاولة. الرجاء الحرص على تعبئة جميع الخانات و محاولة مجدداً." - loading_label : "جاري التحميل..." - search_label_text : "اكتب مصطلح للبحث..." - search_placeholder_text : "اكتب مصطلح للبحث..." - search_algolia_no_results : "لا توجد نتائج" - results_found : "تم إيجاد نتيجة" - back_to_top : "الانتقال الى الأعلى" -ar-SD: - <<: *DEFAULT_AR -ar-SA: - <<: *DEFAULT_AR -ar-AE: - <<: *DEFAULT_AR -ar-EG: - <<: *DEFAULT_AR - -# Kiswahili -# ----------------- -sw: &DEFAULT_SW - skip_links : "Ruka viungo" - skip_primary_nav : "Ruka orodha kuu" - skip_content : "Ruka maandiko maakuu" - skip_footer : "Ruka chini" - page : "Ukurasa" - pagination_previous : "Rudi" - pagination_next : "Endelea" - breadcrumb_home_label : "Ukurasa wa kwanza" - breadcrumb_separator : "/" - menu_label : "Wezesha/Zima orodha" - search_label : "Wezesha/Zima kutafuta" - toc_label : "Kwa ukurasa huu" - ext_link_label : "Kiungo mbio" - less_than : "Soma kwa dakikia ndogo kuliko" - minute_read : "Soma kwa dakika" - share_on_label : "Tangaza" - meta_label : - tags_label : "Alama:" - categories_label : "Aina:" - date_label : "Geuzi ya mwisho:" - comments_label : "Wacha maoni" - comments_title : "Maoni" - more_label : "Jifunze zaidi" - related_label : "Pia, utapenda" - follow_label : "Fuata:" - feed_label : "Feed" - powered_by : "Inatumia" - website_label : "Tovuti" - email_label : "Barua pepe" - recent_posts : "Makala juzi" - undefined_wpm : "Ingizo words_per_minute kwa _config.yml haijawekwa" - comment_form_info : "Barua pepe yako haitaonekana. Kuna alama kwa ingizo tunahitaji." - comment_form_comment_label : "Maoni" - comment_form_md_info : "Unaweza kutumia `Markdown`." - comment_form_name_label : "Jina" - comment_form_email_label : "Barua pepe" - comment_form_website_label : "Tovuti (hiari)" - comment_btn_submit : "Tuma maoni" - comment_btn_submitted : "Umetuma" - comment_success_msg : "Asante kwa maoni yako! Itaonekana ikiridhiwa." - comment_error_msg : "Pole, kuna makosa kwa ingizo yako. Tafadhali angalia umeandika kwa ingizo zote zinahitaji, na jaribu tena." - loading_label : "Inapakiwa..." - search_label_text : "Ingiza neno unatafuta..." - search_placeholder_text : "Ingiza neno unatafuta..." - search_algolia_no_results : "Hakuna matokeo" - results_found : "Tumepata" - back_to_top : "Rudi juu" -sw-KE: - <<: *DEFAULT_SW -sw-TZ: - <<: *DEFAULT_SW - -# Another locale -# -------------- -# diff --git a/_includes/analytics-providers/custom.html b/_includes/analytics-providers/custom.html deleted file mode 100644 index c34b97ad90d91..0000000000000 --- a/_includes/analytics-providers/custom.html +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/_includes/analytics-providers/google-gtag.html b/_includes/analytics-providers/google-gtag.html deleted file mode 100644 index 16d0cf176bac9..0000000000000 --- a/_includes/analytics-providers/google-gtag.html +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/_includes/analytics-providers/google-universal.html b/_includes/analytics-providers/google-universal.html deleted file mode 100644 index 68c2674ba9304..0000000000000 --- a/_includes/analytics-providers/google-universal.html +++ /dev/null @@ -1,7 +0,0 @@ - - diff --git a/_includes/analytics-providers/google.html b/_includes/analytics-providers/google.html deleted file mode 100644 index c5742b9817d66..0000000000000 --- a/_includes/analytics-providers/google.html +++ /dev/null @@ -1,14 +0,0 @@ - diff --git a/_includes/analytics.html b/_includes/analytics.html deleted file mode 100644 index 2c730458ed6ea..0000000000000 --- a/_includes/analytics.html +++ /dev/null @@ -1,24 +0,0 @@ -{% if jekyll.environment == 'production' and site.analytics.provider and page.analytics != false %} - -{% case site.analytics.provider %} -{% when "google" %} - {% include /analytics-providers/google.html %} -{% when "google-universal" %} - {% include /analytics-providers/google-universal.html %} -{% when "google-gtag" %} - {% include /analytics-providers/google-gtag.html %} -{% when "custom" %} - {% include /analytics-providers/custom.html %} -{% endcase %} - -{% endif %} - - - - diff --git a/_includes/archive-single.html b/_includes/archive-single.html deleted file mode 100644 index 68174807ef50f..0000000000000 --- a/_includes/archive-single.html +++ /dev/null @@ -1,30 +0,0 @@ -{% if post.header.teaser %} - {% capture teaser %}{{ post.header.teaser }}{% endcapture %} -{% else %} - {% assign teaser = site.teaser %} -{% endif %} - -{% if post.id %} - {% assign title = post.title | markdownify | remove: "

" | remove: "

" %} -{% else %} - {% assign title = post.title %} -{% endif %} - -
- -
diff --git a/_includes/author-profile-custom-links.html b/_includes/author-profile-custom-links.html deleted file mode 100644 index 1a3d4caefc552..0000000000000 --- a/_includes/author-profile-custom-links.html +++ /dev/null @@ -1,7 +0,0 @@ - \ No newline at end of file diff --git a/_includes/author-profile.html b/_includes/author-profile.html deleted file mode 100644 index e256ec7dd18f8..0000000000000 --- a/_includes/author-profile.html +++ /dev/null @@ -1,246 +0,0 @@ -{% assign author = page.author | default: page.authors[0] | default: site.author %} -{% assign author = site.data.authors[author] | default: author %} - -
- - {% if author.avatar %} -
- - {{ author.name }} - -
- {% endif %} - -
-

- -

- {% if author.bio %} -
- {{ author.bio | markdownify }} -
- {% endif %} -
- -
- - -
-
diff --git a/_includes/breadcrumbs.html b/_includes/breadcrumbs.html deleted file mode 100644 index 75c032a4b7247..0000000000000 --- a/_includes/breadcrumbs.html +++ /dev/null @@ -1,40 +0,0 @@ -{% case site.category_archive.type %} - {% when "liquid" %} - {% assign path_type = "#" %} - {% when "jekyll-archives" %} - {% assign path_type = nil %} -{% endcase %} - -{% if page.collection != 'posts' %} - {% assign path_type = nil %} - {% assign crumb_path = '/' %} -{% else %} - {% assign crumb_path = site.category_archive.path %} -{% endif %} - - diff --git a/_includes/category-list.html b/_includes/category-list.html deleted file mode 100644 index ad9a3fc714235..0000000000000 --- a/_includes/category-list.html +++ /dev/null @@ -1,19 +0,0 @@ -{% case site.category_archive.type %} - {% when "liquid" %} - {% assign path_type = "#" %} - {% when "jekyll-archives" %} - {% assign path_type = nil %} -{% endcase %} - -{% if site.category_archive.path %} - {% assign categories_sorted = page.categories | sort_natural %} - -

- {{ site.data.ui-text[site.locale].categories_label | default: "Categories:" }} - - {% for category_word in categories_sorted %} - {% unless forloop.last %}, {% endunless %} - {% endfor %} - -

-{% endif %} \ No newline at end of file diff --git a/_includes/comment.html b/_includes/comment.html deleted file mode 100644 index 2e3013ee2a76e..0000000000000 --- a/_includes/comment.html +++ /dev/null @@ -1,22 +0,0 @@ - diff --git a/_includes/comments-providers/custom.html b/_includes/comments-providers/custom.html deleted file mode 100644 index 90993691ed40c..0000000000000 --- a/_includes/comments-providers/custom.html +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/_includes/comments-providers/custom_scripts.html b/_includes/comments-providers/custom_scripts.html deleted file mode 100644 index 6947946a73c9e..0000000000000 --- a/_includes/comments-providers/custom_scripts.html +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/_includes/comments-providers/discourse.html b/_includes/comments-providers/discourse.html deleted file mode 100644 index aca62cc848921..0000000000000 --- a/_includes/comments-providers/discourse.html +++ /dev/null @@ -1,13 +0,0 @@ -{% if site.comments.discourse.server %} -{% capture canonical %}{% if site.permalink contains '.html' %}{{ page.url | absolute_url }}{% else %}{{ page.url | absolute_url | remove:'index.html' | strip_slash }}{% endif %}{% endcapture %} - - -{% endif %} diff --git a/_includes/comments-providers/disqus.html b/_includes/comments-providers/disqus.html deleted file mode 100644 index 16a6027c71c68..0000000000000 --- a/_includes/comments-providers/disqus.html +++ /dev/null @@ -1,15 +0,0 @@ -{% if site.comments.disqus.shortname %} - - -{% endif %} diff --git a/_includes/comments-providers/facebook.html b/_includes/comments-providers/facebook.html deleted file mode 100644 index 009dc1c6c5e57..0000000000000 --- a/_includes/comments-providers/facebook.html +++ /dev/null @@ -1,8 +0,0 @@ -
- \ No newline at end of file diff --git a/_includes/comments-providers/giscus.html b/_includes/comments-providers/giscus.html deleted file mode 100644 index e89d41cea105f..0000000000000 --- a/_includes/comments-providers/giscus.html +++ /dev/null @@ -1,24 +0,0 @@ - \ No newline at end of file diff --git a/_includes/comments-providers/scripts.html b/_includes/comments-providers/scripts.html deleted file mode 100644 index e87badabd365f..0000000000000 --- a/_includes/comments-providers/scripts.html +++ /dev/null @@ -1,20 +0,0 @@ -{% if site.comments.provider and page.comments %} -{% case site.comments.provider %} - {% when "disqus" %} - {% include /comments-providers/disqus.html %} - {% when "discourse" %} - {% include /comments-providers/discourse.html %} - {% when "facebook" %} - {% include /comments-providers/facebook.html %} - {% when "staticman" %} - {% include /comments-providers/staticman.html %} - {% when "staticman_v2" %} - {% include /comments-providers/staticman_v2.html %} - {% when "utterances" %} - {% include /comments-providers/utterances.html %} - {% when "giscus" %} - {% include /comments-providers/giscus.html %} - {% when "custom" %} - {% include /comments-providers/custom_scripts.html %} -{% endcase %} -{% endif %} \ No newline at end of file diff --git a/_includes/comments-providers/staticman.html b/_includes/comments-providers/staticman.html deleted file mode 100644 index ae3991d9d6190..0000000000000 --- a/_includes/comments-providers/staticman.html +++ /dev/null @@ -1,40 +0,0 @@ -{% if site.repository and site.staticman.branch %} - -{% endif %} diff --git a/_includes/comments-providers/staticman_v2.html b/_includes/comments-providers/staticman_v2.html deleted file mode 100644 index 3d8ba1112b739..0000000000000 --- a/_includes/comments-providers/staticman_v2.html +++ /dev/null @@ -1,40 +0,0 @@ -{% if site.repository and site.comments.staticman.branch %} - -{% endif %} diff --git a/_includes/comments-providers/utterances.html b/_includes/comments-providers/utterances.html deleted file mode 100644 index 5cf6c5ccbb88a..0000000000000 --- a/_includes/comments-providers/utterances.html +++ /dev/null @@ -1,21 +0,0 @@ - diff --git a/_includes/comments.html b/_includes/comments.html deleted file mode 100644 index b27c893bbaf1b..0000000000000 --- a/_includes/comments.html +++ /dev/null @@ -1,180 +0,0 @@ -
- {% capture comments_label %}{{ site.data.ui-text[site.locale].comments_label | default: "Comments" }}{% endcapture %} - {% case site.comments.provider %} - {% when "discourse" %} -

{{ comments_label }}

-
- {% when "disqus" %} -

{{ comments_label }}

-
- {% when "facebook" %} -

{{ comments_label }}

-
- {% when "staticman_v2" %} -
- {% if site.repository and site.comments.staticman.branch %} - -
- {% if site.data.comments[page.slug] %} -

{{ site.data.ui-text[site.locale].comments_title | default: "Comments" }}

- {% assign comments = site.data.comments[page.slug] %} - - - {% assign commentObjects = '' | split: '' %} - {% for comment in comments %} - {% assign commentObject = comment[1] %} - {% assign commentObjects = commentObjects | push: commentObject %} - {% endfor %} - {% assign comments = commentObjects | sort: "date" %} - - {% for comment in comments %} - {% assign email = comment.email %} - {% assign name = comment.name %} - {% assign url = comment.url %} - {% assign date = comment.date %} - {% assign message = comment.message %} - {% include comment.html index=forloop.index email=email name=name url=url date=date message=message %} - {% endfor %} - {% endif %} -
- - - -
-

{{ site.data.ui-text[site.locale].comments_label | default: "Leave a Comment" }}

-

{{ site.data.ui-text[site.locale].comment_form_info | default: "Your email address will not be published. Required fields are marked" }} *

-
-
- - {{ site.data.ui-text[site.locale].loading_label | default: "Loading..." }} -
- -
- - - -
-
- - -
-
- - -
-
- - -
- - - - - {% if site.reCaptcha.siteKey %} -
-
-
- {% endif %} -
- -
-
-
- - {% if site.reCaptcha.siteKey %}{% endif %} - {% endif %} -
- {% when "staticman" %} -
- {% if site.repository and site.staticman.branch %} - -
- {% if site.data.comments[page.slug] %} -

{{ site.data.ui-text[site.locale].comments_title | default: "Comments" }}

- {% assign comments = site.data.comments[page.slug] %} - - - {% assign commentObjects = '' | split: '' %} - {% for comment in comments %} - {% assign commentObject = comment[1] %} - {% assign commentObjects = commentObjects | push: commentObject %} - {% endfor %} - {% assign comments = commentObjects | sort: "date" %} - - {% for comment in comments %} - {% assign email = comment.email %} - {% assign name = comment.name %} - {% assign url = comment.url %} - {% assign date = comment.date %} - {% assign message = comment.message %} - {% include comment.html index=forloop.index email=email name=name url=url date=date message=message %} - {% endfor %} - {% endif %} -
- - - -
-

{{ site.data.ui-text[site.locale].comments_label | default: "Leave a Comment" }}

-

{{ site.data.ui-text[site.locale].comment_form_info | default: "Your email address will not be published. Required fields are marked" }} *

-
-
- - {{ site.data.ui-text[site.locale].loading_label | default: "Loading..." }} -
- -
- - - -
-
- - -
-
- - -
-
- - -
- - - - -
- -
-
-
- - {% endif %} -
- {% when "utterances" %} -

{{ comments_label }}

-
- {% when "giscus" %} -

{{ comments_label }}

-
- {% when "custom" %} - {% include /comments-providers/custom.html %} - {% endcase %} -
diff --git a/_includes/documents-collection.html b/_includes/documents-collection.html deleted file mode 100644 index e88d8c4c46a2d..0000000000000 --- a/_includes/documents-collection.html +++ /dev/null @@ -1,15 +0,0 @@ -{% assign entries = site[include.collection] %} - -{% if include.sort_by %} - {% assign entries = entries | sort: include.sort_by %} -{% endif %} - -{% if include.sort_order == 'reverse' %} - {% assign entries = entries | reverse %} -{% endif %} - -{%- for post in entries -%} - {%- unless post.hidden -%} - {% include archive-single.html %} - {%- endunless -%} -{%- endfor -%} diff --git a/_includes/feature_row b/_includes/feature_row deleted file mode 100644 index 03f09c15cf0c8..0000000000000 --- a/_includes/feature_row +++ /dev/null @@ -1,41 +0,0 @@ -{% if include.id %} - {% assign feature_row = page[include.id] %} -{% else %} - {% assign feature_row = page.feature_row %} -{% endif %} - -
- - {% for f in feature_row %} -
-
- {% if f.image_path %} -
- {% if f.alt %}{{ f.alt }}{% endif %} - {% if f.image_caption %} - {{ f.image_caption | markdownify | remove: "

" | remove: "

" }}
- {% endif %} -
- {% endif %} - -
- {% if f.title %} -

{{ f.title }}

- {% endif %} - - {% if f.excerpt %} -
- {{ f.excerpt | markdownify }} -
- {% endif %} - - {% if f.url %} -

{{ f.btn_label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}

- {% endif %} -
-
-
- {% endfor %} - -
diff --git a/_includes/figure b/_includes/figure deleted file mode 100644 index dacc668d1006c..0000000000000 --- a/_includes/figure +++ /dev/null @@ -1,9 +0,0 @@ -
- {% if include.alt %}{{ include.alt }}{% endif %} - {%- if include.caption -%} -
- {{ include.caption | markdownify | remove: "

" | remove: "

" }} -
- {%- endif -%} -
diff --git a/_includes/footer.html b/_includes/footer.html deleted file mode 100644 index 21c21bca4e192..0000000000000 --- a/_includes/footer.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - diff --git a/_includes/footer/custom.html b/_includes/footer/custom.html deleted file mode 100644 index d512599d1abf2..0000000000000 --- a/_includes/footer/custom.html +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/_includes/gallery b/_includes/gallery deleted file mode 100644 index 71a9e1e1b3d14..0000000000000 --- a/_includes/gallery +++ /dev/null @@ -1,35 +0,0 @@ -{% if include.id %} - {% assign gallery = page[include.id] %} -{% else %} - {% assign gallery = page.gallery %} -{% endif %} - -{% if include.layout %} - {% assign gallery_layout = include.layout %} -{% else %} - {% if gallery.size == 2 %} - {% assign gallery_layout = 'half' %} - {% elsif gallery.size >= 3 %} - {% assign gallery_layout = 'third' %} - {% else %} - {% assign gallery_layout = '' %} - {% endif %} -{% endif %} - - diff --git a/_includes/group-by-array b/_includes/group-by-array deleted file mode 100644 index 708de41ae3f83..0000000000000 --- a/_includes/group-by-array +++ /dev/null @@ -1,47 +0,0 @@ - - - -{% assign __empty_array = '' | split: ',' %} -{% assign group_names = __empty_array %} -{% assign group_items = __empty_array %} - - -{% assign __names = include.collection | map: include.field %} - - -{% assign __names = __names | join: ',' | join: ',' | split: ',' %} - - -{% assign __names = __names | sort %} -{% for name in __names %} - - -{% unless name == previous %} - - -{% assign group_names = group_names | push: name %} -{% endunless %} - -{% assign previous = name %} -{% endfor %} - - - -{% for name in group_names %} - - -{% assign __item = __empty_array %} -{% for __element in include.collection %} -{% if __element[include.field] contains name %} -{% assign __item = __item | push: __element %} -{% endif %} -{% endfor %} - - -{% assign group_items = group_items | push: __item %} -{% endfor %} \ No newline at end of file diff --git a/_includes/head.html b/_includes/head.html deleted file mode 100644 index 5534926c7c419..0000000000000 --- a/_includes/head.html +++ /dev/null @@ -1,105 +0,0 @@ - -{% include seo.html %} -{% include head/custom.html %} -{% unless site.atom_feed.hide %} - -{% endunless %} - - - - - -{% if site.minimal_mistakes_skin2 %} - -{% endif %} - - - -{% if site.head_scripts %} - {% for script in site.head_scripts %} - - {% endfor %} -{% endif %} diff --git a/_includes/head/custom.html b/_includes/head/custom.html deleted file mode 100644 index 3a0ed212e469e..0000000000000 --- a/_includes/head/custom.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - diff --git a/_includes/masthead.html b/_includes/masthead.html deleted file mode 100644 index 5c6b32c45f07d..0000000000000 --- a/_includes/masthead.html +++ /dev/null @@ -1,75 +0,0 @@ -{% capture logo_path %}{{ site.logo }}{% endcapture %} - -
-
-
- -
-
-
diff --git a/_includes/nav_list b/_includes/nav_list deleted file mode 100644 index a035a5bd7b15f..0000000000000 --- a/_includes/nav_list +++ /dev/null @@ -1,26 +0,0 @@ -{% assign navigation = site.data.navigation[include.nav] %} - - diff --git a/_includes/page__date.html b/_includes/page__date.html deleted file mode 100644 index ec02005f1307f..0000000000000 --- a/_includes/page__date.html +++ /dev/null @@ -1,6 +0,0 @@ -{% assign date_format = site.date_format | default: "%B %-d, %Y" %} -{% if page.last_modified_at %} -

{{ site.data.ui-text[site.locale].date_label | default: "Updated:" }}

-{% elsif page.date %} -

{{ site.data.ui-text[site.locale].date_label | default: "Updated:" }}

-{% endif %} \ No newline at end of file diff --git a/_includes/page__hero.html b/_includes/page__hero.html deleted file mode 100644 index dd1c26fbf1fcc..0000000000000 --- a/_includes/page__hero.html +++ /dev/null @@ -1,55 +0,0 @@ -{% capture overlay_img_path %}{{ page.header.overlay_image | relative_url }}{% endcapture %} - -{% if page.header.overlay_filter contains "gradient" %} - {% capture overlay_filter %}{{ page.header.overlay_filter }}{% endcapture %} -{% elsif page.header.overlay_filter contains "rgba" %} - {% capture overlay_filter %}{{ page.header.overlay_filter }}{% endcapture %} - {% capture overlay_filter %}linear-gradient({{ overlay_filter }}, {{ overlay_filter }}){% endcapture %} -{% elsif page.header.overlay_filter %} - {% capture overlay_filter %}rgba(0, 0, 0, {{ page.header.overlay_filter }}){% endcapture %} - {% capture overlay_filter %}linear-gradient({{ overlay_filter }}, {{ overlay_filter }}){% endcapture %} -{% endif %} - -{% if page.header.image_description %} - {% assign image_description = page.header.image_description %} -{% else %} - {% assign image_description = page.title %} -{% endif %} - -{% assign image_description = image_description | markdownify | strip_html | strip_newlines | escape_once %} - -
- {% if page.header.overlay_color or page.header.overlay_image %} -
-

- {% if paginator and site.paginate_show_page_num %} - {{ site.title }}{% unless paginator.page == 1 %} {{ site.data.ui-text[site.locale].page | default: "Page" }} {{ paginator.page }}{% endunless %} - {% else %} - {{ page.title | default: site.title | markdownify | remove: "

" | remove: "

" }} - {% endif %} -

- {% if page.tagline %} -

{{ page.tagline | markdownify | remove: "

" | remove: "

" }}

- {% elsif page.header.show_overlay_excerpt != false and page.excerpt %} -

{{ page.excerpt | markdownify | remove: "

" | remove: "

" }}

- {% endif %} - {% include page__meta.html %} - {% if page.header.cta_url %} -

{{ page.header.cta_label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}

- {% endif %} - {% if page.header.actions %} -

- {% for action in page.header.actions %} - {{ action.label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }} - {% endfor %} - {% endif %} -

- {% else %} - {{ image_description }} - {% endif %} - {% if page.header.caption %} - {{ page.header.caption | markdownify | remove: "

" | remove: "

" }}
- {% endif %} -
diff --git a/_includes/page__hero_video.html b/_includes/page__hero_video.html deleted file mode 100644 index a313a23d45b92..0000000000000 --- a/_includes/page__hero_video.html +++ /dev/null @@ -1,2 +0,0 @@ -{% assign video = page.header.video %} -{% include video id=video.id provider=video.provider danmaku=video.danmaku %} diff --git a/_includes/page__meta.html b/_includes/page__meta.html deleted file mode 100644 index 89a4ce5497a82..0000000000000 --- a/_includes/page__meta.html +++ /dev/null @@ -1,32 +0,0 @@ -{% assign document = post | default: page %} -{% if document.read_time or document.show_date %} -

- {% if document.show_date and document.date %} - {% assign date = document.date %} - - - {% assign date_format = site.date_format | default: "%B %-d, %Y" %} - - - {% endif %} - - {% if document.read_time and document.show_date %}{% endif %} - - {% if document.read_time %} - {% assign words_per_minute = document.words_per_minute | default: site.words_per_minute | default: 200 %} - {% assign words = document.content | strip_html | number_of_words %} - - - - {% if words < words_per_minute %} - {{ site.data.ui-text[site.locale].less_than | default: "less than" }} 1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }} - {% elsif words == words_per_minute %} - 1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }} - {% else %} - {{ words | divided_by: words_per_minute }} {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }} - {% endif %} - - ({{ words }} {{ site.data.ui-text[site.locale].words | default: "words" }}) - {% endif %} -

-{% endif %} diff --git a/_includes/page__taxonomy.html b/_includes/page__taxonomy.html deleted file mode 100644 index 75c76c81ddf2a..0000000000000 --- a/_includes/page__taxonomy.html +++ /dev/null @@ -1,7 +0,0 @@ -{% if site.tag_archive.type and page.tags[0] %} - {% include tag-list.html %} -{% endif %} - -{% if site.category_archive.type and page.categories[0] %} - {% include category-list.html %} -{% endif %} \ No newline at end of file diff --git a/_includes/paginator.html b/_includes/paginator.html deleted file mode 100644 index bffa0794678e7..0000000000000 --- a/_includes/paginator.html +++ /dev/null @@ -1,69 +0,0 @@ -{% if paginator.total_pages > 1 %} - -{% endif %} diff --git a/_includes/post_pagination.html b/_includes/post_pagination.html deleted file mode 100644 index a93c6279763b9..0000000000000 --- a/_includes/post_pagination.html +++ /dev/null @@ -1,14 +0,0 @@ -{% if page.previous or page.next %} - -{% endif %} \ No newline at end of file diff --git a/_includes/posts-category.html b/_includes/posts-category.html deleted file mode 100644 index b364f30e94e5e..0000000000000 --- a/_includes/posts-category.html +++ /dev/null @@ -1,5 +0,0 @@ -{%- for post in site.categories[include.taxonomy] -%} - {%- unless post.hidden -%} - {% include archive-single.html %} - {%- endunless -%} -{%- endfor -%} diff --git a/_includes/posts-tag.html b/_includes/posts-tag.html deleted file mode 100644 index 46fade02a01fe..0000000000000 --- a/_includes/posts-tag.html +++ /dev/null @@ -1,5 +0,0 @@ -{%- for post in site.tags[include.taxonomy] -%} - {%- unless post.hidden -%} - {% include archive-single.html %} - {%- endunless -%} -{%- endfor -%} diff --git a/_includes/scripts.html b/_includes/scripts.html deleted file mode 100644 index fb8d4c43658a1..0000000000000 --- a/_includes/scripts.html +++ /dev/null @@ -1,47 +0,0 @@ -{% if site.footer_scripts %} - {% for script in site.footer_scripts %} - - {% endfor %} -{% else %} - -{% endif %} - -{% if site.search == true or page.layout == "search" %} - {%- assign search_provider = site.search_provider | default: "lunr" -%} - {%- case search_provider -%} - {%- when "lunr" -%} - {% include_cached search/lunr-search-scripts.html %} - {%- when "google" -%} - {% include_cached search/google-search-scripts.html %} - {%- when "algolia" -%} - {% include_cached search/algolia-search-scripts.html %} - {%- endcase -%} -{% endif %} - -{% include analytics.html %} -{% include /comments-providers/scripts.html %} - -{% if site.after_footer_scripts %} - {% for script in site.after_footer_scripts %} - - {% endfor %} -{% endif %} - -{% if page.mathjax %} - - - -{% endif %} diff --git a/_includes/search/algolia-search-scripts.html b/_includes/search/algolia-search-scripts.html deleted file mode 100644 index ba557c14f0d53..0000000000000 --- a/_includes/search/algolia-search-scripts.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - diff --git a/_includes/search/google-search-scripts.html b/_includes/search/google-search-scripts.html deleted file mode 100644 index 4af7423bb3ca2..0000000000000 --- a/_includes/search/google-search-scripts.html +++ /dev/null @@ -1,30 +0,0 @@ - \ No newline at end of file diff --git a/_includes/search/lunr-search-scripts.html b/_includes/search/lunr-search-scripts.html deleted file mode 100644 index 574c390094890..0000000000000 --- a/_includes/search/lunr-search-scripts.html +++ /dev/null @@ -1,10 +0,0 @@ -{% assign lang = site.locale | slice: 0,2 | default: "en" %} -{% case lang %} -{% when "gr" %} - {% assign lang = "gr" %} -{% else %} - {% assign lang = "en" %} -{% endcase %} - - - \ No newline at end of file diff --git a/_includes/search/search_form.html b/_includes/search/search_form.html deleted file mode 100644 index b9de365c6efe8..0000000000000 --- a/_includes/search/search_form.html +++ /dev/null @@ -1,26 +0,0 @@ -
- {%- assign search_provider = site.search_provider | default: "lunr" -%} - {%- case search_provider -%} - {%- when "lunr" -%} - -
- {%- when "google" -%} - -
- -
- {%- when "algolia" -%} - -
- {%- endcase -%} -
diff --git a/_includes/seo.html b/_includes/seo.html deleted file mode 100644 index c9d01e946a602..0000000000000 --- a/_includes/seo.html +++ /dev/null @@ -1,158 +0,0 @@ - -{%- if site.url -%} - {%- assign seo_url = site.url | append: site.baseurl -%} -{%- endif -%} -{%- assign seo_url = seo_url | default: site.github.url -%} - -{% assign title_separator = site.title_separator | default: '-' | replace: '|', '|' %} - -{%- if page.title -%} - {%- assign seo_title = page.title | append: " " | append: title_separator | append: " " | append: site.title -%} -{%- endif -%} - -{%- if seo_title -%} - {%- assign seo_title = seo_title | markdownify | strip_html | strip_newlines | escape_once -%} -{%- endif -%} - -{% if page.canonical_url %} - {%- assign canonical_url = page.canonical_url %} -{% else %} - {%- assign canonical_url = page.url | replace: "index.html", "" | absolute_url %} -{% endif %} - -{%- assign seo_description = page.description | default: page.excerpt | default: site.description -%} -{%- if seo_description -%} - {%- assign seo_description = seo_description | markdownify | strip_html | newline_to_br | strip_newlines | replace: '
', ' ' | escape_once | strip -%} -{%- endif -%} - -{%- assign author = page.author | default: page.authors[0] | default: site.author -%} -{%- assign author = site.data.authors[author] | default: author -%} - -{%- if author.twitter -%} - {%- assign author_twitter = author.twitter | replace: "@", "" -%} -{%- endif -%} - -{%- assign page_large_image = page.header.og_image | default: page.header.overlay_image | default: page.header.image | absolute_url -%} -{%- assign page_large_image = page_large_image | escape -%} - -{%- assign page_teaser_image = page.header.teaser | default: site.og_image | absolute_url -%} -{%- assign page_teaser_image = page_teaser_image | escape -%} - -{%- assign site_og_image = site.og_image | absolute_url -%} -{%- assign site_og_image = site_og_image | escape -%} - -{%- if page.date -%} - {%- assign og_type = "article" -%} -{%- else -%} - {%- assign og_type = "website" -%} -{%- endif -%} - -{{ seo_title | default: site.title }}{% if paginator %}{% unless paginator.page == 1 %} {{ title_separator }} {{ site.data.ui-text[site.locale].page | default: "Page" }} {{ paginator.page }}{% endunless %}{% endif %} - - -{% if author.name %} - - {% if og_type == "article" %} - - {% endif %} -{% endif %} - - - - - - - -{% if seo_description %} - -{% endif %} - -{% if page_large_image %} - -{% elsif page_teaser_image %} - -{% endif %} - -{% if site.twitter.username %} - - - - - - {% if page_large_image %} - - - {% else %} - - {% if page_teaser_image %} - - {% endif %} - {% endif %} - - {% if author_twitter %} - - {% endif %} -{% endif %} - -{% if page.date %} - -{% endif %} - -{% if og_type == "article" and page.last_modified_at %} - -{% endif %} - -{% if site.facebook %} - {% if site.facebook.publisher %} - - {% endif %} - - {% if site.facebook.app_id %} - - {% endif %} -{% endif %} - - - -{% if paginator.previous_page %} - -{% endif %} -{% if paginator.next_page %} - -{% endif %} - - - -{% if site.google_site_verification %} - -{% endif %} -{% if site.bing_site_verification %} - -{% endif %} -{% if site.alexa_site_verification %} - -{% endif %} -{% if site.yandex_site_verification %} - -{% endif %} -{% if site.naver_site_verification %} - -{% endif %} -{% if site.baidu_site_verification %} - -{% endif %} - diff --git a/_includes/sidebar.html b/_includes/sidebar.html deleted file mode 100644 index a4ca1ca78151b..0000000000000 --- a/_includes/sidebar.html +++ /dev/null @@ -1,19 +0,0 @@ -{% if page.author_profile or layout.author_profile or page.sidebar %} - -{% endif %} diff --git a/_includes/skip-links.html b/_includes/skip-links.html deleted file mode 100644 index c2d52235e14f4..0000000000000 --- a/_includes/skip-links.html +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/_includes/social-share.html b/_includes/social-share.html deleted file mode 100644 index 0b377982b2688..0000000000000 --- a/_includes/social-share.html +++ /dev/null @@ -1,11 +0,0 @@ - diff --git a/_includes/tag-list.html b/_includes/tag-list.html deleted file mode 100644 index 5893ee4e4d46a..0000000000000 --- a/_includes/tag-list.html +++ /dev/null @@ -1,19 +0,0 @@ -{% case site.tag_archive.type %} - {% when "liquid" %} - {% assign path_type = "#" %} - {% when "jekyll-archives" %} - {% assign path_type = nil %} -{% endcase %} - -{% if site.tag_archive.path %} - {% assign tags_sorted = page.tags | sort_natural %} - -

- {{ site.data.ui-text[site.locale].tags_label | default: "Tags:" }} - - {% for tag_word in tags_sorted %} - {% unless forloop.last %}, {% endunless %} - {% endfor %} - -

-{% endif %} \ No newline at end of file diff --git a/_includes/toc b/_includes/toc deleted file mode 100644 index 6423ccdc72e13..0000000000000 --- a/_includes/toc +++ /dev/null @@ -1,7 +0,0 @@ - \ No newline at end of file diff --git a/_includes/toc.html b/_includes/toc.html deleted file mode 100644 index 8c71007227346..0000000000000 --- a/_includes/toc.html +++ /dev/null @@ -1,182 +0,0 @@ -{% capture tocWorkspace %} - {% comment %} - Copyright (c) 2017 Vladimir "allejo" Jimenez - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the "Software"), to deal in the Software without - restriction, including without limitation the rights to use, - copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following - conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - {% endcomment %} - {% comment %} - Version 1.1.0 - https://github.com/allejo/jekyll-toc - - "...like all things liquid - where there's a will, and ~36 hours to spare, there's usually a/some way" ~jaybe - - Usage: - {% include toc.html html=content sanitize=true class="inline_toc" id="my_toc" h_min=2 h_max=3 %} - - Parameters: - * html (string) - the HTML of compiled markdown generated by kramdown in Jekyll - - Optional Parameters: - * sanitize (bool) : false - when set to true, the headers will be stripped of any HTML in the TOC - * class (string) : '' - a CSS class assigned to the TOC - * id (string) : '' - an ID to assigned to the TOC - * h_min (int) : 1 - the minimum TOC header level to use; any header lower than this value will be ignored - * h_max (int) : 6 - the maximum TOC header level to use; any header greater than this value will be ignored - * ordered (bool) : false - when set to true, an ordered list will be outputted instead of an unordered list - * item_class (string) : '' - add custom class(es) for each list item; has support for '%level%' placeholder, which is the current heading level - * submenu_class (string) : '' - add custom class(es) for each child group of headings; has support for '%level%' placeholder which is the current "submenu" heading level - * base_url (string) : '' - add a base url to the TOC links for when your TOC is on another page than the actual content - * anchor_class (string) : '' - add custom class(es) for each anchor element - * skip_no_ids (bool) : false - skip headers that do not have an `id` attribute - - Output: - An ordered or unordered list representing the table of contents of a markdown block. This snippet will only - generate the table of contents and will NOT output the markdown given to it - {% endcomment %} - - {% capture newline %} - {% endcapture %} - {% assign newline = newline | rstrip %} - - {% capture deprecation_warnings %}{% endcapture %} - - {% if include.baseurl %} - {% capture deprecation_warnings %}{{ deprecation_warnings }}{{ newline }}{% endcapture %} - {% endif %} - - {% if include.skipNoIDs %} - {% capture deprecation_warnings %}{{ deprecation_warnings }}{{ newline }}{% endcapture %} - {% endif %} - - {% capture jekyll_toc %}{% endcapture %} - {% assign orderedList = include.ordered | default: false %} - {% assign baseURL = include.base_url | default: include.baseurl | default: '' %} - {% assign skipNoIDs = include.skip_no_ids | default: include.skipNoIDs | default: false %} - {% assign minHeader = include.h_min | default: 1 %} - {% assign maxHeader = include.h_max | default: 6 %} - {% assign nodes = include.html | strip | split: ' maxHeader %} - {% continue %} - {% endif %} - - {% assign _workspace = node | split: '' | first }}>{% endcapture %} - {% assign header = _workspace[0] | replace: _hAttrToStrip, '' %} - - {% if include.item_class and include.item_class != blank %} - {% capture listItemClass %} class="{{ include.item_class | replace: '%level%', currLevel | split: '.' | join: ' ' }}"{% endcapture %} - {% endif %} - - {% if include.submenu_class and include.submenu_class != blank %} - {% assign subMenuLevel = currLevel | minus: 1 %} - {% capture subMenuClass %} class="{{ include.submenu_class | replace: '%level%', subMenuLevel | split: '.' | join: ' ' }}"{% endcapture %} - {% endif %} - - {% capture anchorBody %}{% if include.sanitize %}{{ header | strip_html }}{% else %}{{ header }}{% endif %}{% endcapture %} - - {% if htmlID %} - {% capture anchorAttributes %} href="{% if baseURL %}{{ baseURL }}{% endif %}#{{ htmlID }}"{% endcapture %} - - {% if include.anchor_class %} - {% capture anchorAttributes %}{{ anchorAttributes }} class="{{ include.anchor_class | split: '.' | join: ' ' }}"{% endcapture %} - {% endif %} - - {% capture listItem %}{{ anchorBody }}{% endcapture %} - {% elsif skipNoIDs == true %} - {% continue %} - {% else %} - {% capture listItem %}{{ anchorBody }}{% endcapture %} - {% endif %} - - {% if currLevel > lastLevel %} - {% capture jekyll_toc %}{{ jekyll_toc }}<{{ listModifier }}{{ subMenuClass }}>{% endcapture %} - {% elsif currLevel < lastLevel %} - {% assign repeatCount = lastLevel | minus: currLevel %} - - {% for i in (1..repeatCount) %} - {% capture jekyll_toc %}{{ jekyll_toc }}{% endcapture %} - {% endfor %} - - {% capture jekyll_toc %}{{ jekyll_toc }}{% endcapture %} - {% else %} - {% capture jekyll_toc %}{{ jekyll_toc }}{% endcapture %} - {% endif %} - - {% capture jekyll_toc %}{{ jekyll_toc }}{{ listItem }}{% endcapture %} - - {% assign lastLevel = currLevel %} - {% assign firstHeader = false %} - {% endfor %} - - {% assign repeatCount = minHeader | minus: 1 %} - {% assign repeatCount = lastLevel | minus: repeatCount %} - {% for i in (1..repeatCount) %} - {% capture jekyll_toc %}{{ jekyll_toc }}{% endcapture %} - {% endfor %} - - {% if jekyll_toc != '' %} - {% assign rootAttributes = '' %} - {% if include.class and include.class != blank %} - {% capture rootAttributes %} class="{{ include.class | split: '.' | join: ' ' }}"{% endcapture %} - {% endif %} - - {% if include.id and include.id != blank %} - {% capture rootAttributes %}{{ rootAttributes }} id="{{ include.id }}"{% endcapture %} - {% endif %} - - {% if rootAttributes %} - {% assign nodes = jekyll_toc | split: '>' %} - {% capture jekyll_toc %}<{{ listModifier }}{{ rootAttributes }}>{{ nodes | shift | join: '>' }}>{% endcapture %} - {% endif %} - {% endif %} -{% endcapture %}{% assign tocWorkspace = '' %}{{ deprecation_warnings }}{{ jekyll_toc }} diff --git a/_includes/video b/_includes/video deleted file mode 100644 index c85a868c1d0bb..0000000000000 --- a/_includes/video +++ /dev/null @@ -1,24 +0,0 @@ -{% capture video_id %}{{ include.id }}{% endcapture %} -{% capture video_provider %}{{ include.provider }}{% endcapture %} -{% capture video_danmaku %}{{ include.danmaku | default: 0 }}{% endcapture %} - -{% capture video_src %} - {% case video_provider %} - {% when "vimeo" %} - https://player.vimeo.com/video/{{ video_id }}?dnt=true - {% when "youtube" %} - https://www.youtube-nocookie.com/embed/{{ video_id }} - {% when "google-drive" %} - https://drive.google.com/file/d/{{ video_id }}/preview - {% when "bilibili" %} - https://player.bilibili.com/player.html?bvid={{ video_id }}&page=1&as_wide=1&high_quality=1&danmaku={{ video_danmaku }} - {% endcase %} -{% endcapture %} -{% assign video_src = video_src | strip %} - - -{% unless video_src == "" %} -
- -
-{% endunless %} diff --git a/_layouts/archive-taxonomy.html b/_layouts/archive-taxonomy.html deleted file mode 100644 index eb62a874d010a..0000000000000 --- a/_layouts/archive-taxonomy.html +++ /dev/null @@ -1,29 +0,0 @@ ---- -layout: default -author_profile: false ---- - -{% if page.header.overlay_color or page.header.overlay_image or page.header.image %} - {% include page__hero.html %} -{% elsif page.header.video.id and page.header.video.provider %} - {% include page__hero_video.html %} -{% endif %} - -{% if page.url != "/" and site.breadcrumbs %} - {% unless paginator %} - {% include breadcrumbs.html %} - {% endunless %} -{% endif %} - -
- {% include sidebar.html %} - -
- {% unless page.header.overlay_color or page.header.overlay_image %} -

{{ page.title }}

- {% endunless %} - {% for post in page.posts %} - {% include archive-single.html %} - {% endfor %} -
-
diff --git a/_layouts/archive.html b/_layouts/archive.html deleted file mode 100644 index 08beb89af5163..0000000000000 --- a/_layouts/archive.html +++ /dev/null @@ -1,26 +0,0 @@ ---- -layout: default ---- - -{% if page.header.overlay_color or page.header.overlay_image or page.header.image %} - {% include page__hero.html %} -{% elsif page.header.video.id and page.header.video.provider %} - {% include page__hero_video.html %} -{% endif %} - -{% if page.url != "/" and site.breadcrumbs %} - {% unless paginator %} - {% include breadcrumbs.html %} - {% endunless %} -{% endif %} - -
- {% include sidebar.html %} - -
- {% unless page.header.overlay_color or page.header.overlay_image %} -

{{ page.title }}

- {% endunless %} - {{ content }} -
-
\ No newline at end of file diff --git a/_layouts/categories.html b/_layouts/categories.html deleted file mode 100644 index f5448a2934c86..0000000000000 --- a/_layouts/categories.html +++ /dev/null @@ -1,43 +0,0 @@ ---- -layout: archive ---- - -{{ content }} - -{% assign categories_max = 0 %} -{% for category in site.categories %} - {% if category[1].size > categories_max %} - {% assign categories_max = category[1].size %} - {% endif %} -{% endfor %} - -
    - {% for i in (1..categories_max) reversed %} - {% for category in site.categories %} - {% if category[1].size == i %} -
  • - - {{ category[0] }} {{ i }} - -
  • - {% endif %} - {% endfor %} - {% endfor %} -
- -{% assign entries_layout = page.entries_layout | default: 'list' %} -{% for i in (1..categories_max) reversed %} - {% for category in site.categories %} - {% if category[1].size == i %} -
-

{{ category[0] }}

-
- {% for post in category.last %} - {% include archive-single.html type=entries_layout %} - {% endfor %} -
- {{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} ↑ -
- {% endif %} - {% endfor %} -{% endfor %} diff --git a/_layouts/category.html b/_layouts/category.html deleted file mode 100644 index b281c85603957..0000000000000 --- a/_layouts/category.html +++ /dev/null @@ -1,10 +0,0 @@ ---- -layout: archive ---- - -{{ content }} - -{% assign entries_layout = page.entries_layout | default: 'list' %} -
- {% include posts-category.html taxonomy=page.taxonomy type=entries_layout %} -
diff --git a/_layouts/collection.html b/_layouts/collection.html deleted file mode 100644 index d23d0c723bf49..0000000000000 --- a/_layouts/collection.html +++ /dev/null @@ -1,10 +0,0 @@ ---- -layout: archive ---- - -{{ content }} - -{% assign entries_layout = page.entries_layout | default: 'list' %} -
- {% include documents-collection.html collection=page.collection sort_by=page.sort_by sort_order=page.sort_order type=entries_layout %} -
diff --git a/_layouts/compress.html b/_layouts/compress.html deleted file mode 100644 index bb34487d2a756..0000000000000 --- a/_layouts/compress.html +++ /dev/null @@ -1,10 +0,0 @@ ---- -# Jekyll layout that compresses HTML -# v3.1.0 -# http://jch.penibelst.de/ -# © 2014–2015 Anatol Broder -# MIT License ---- - -{% capture _LINE_FEED %} -{% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment or site.compress_html.ignore.envs == "all" %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "" %}{% endif %}{% unless _pre_before contains "" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " ;; ;" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %}
Step Bytes
raw {{ content | size }}{% if _profile_endings %}
endings {{ _profile_endings }}{% endif %}{% if _profile_startings %}
startings {{ _profile_startings }}{% endif %}{% if _profile_comments %}
comments {{ _profile_comments }}{% endif %}{% if _profile_collapse %}
collapse {{ _profile_collapse }}{% endif %}{% if _profile_clippings %}
clippings {{ _profile_clippings }}{% endif %}
{% endif %}{% endif %} diff --git a/_layouts/default.html b/_layouts/default.html deleted file mode 100644 index af0f9c61d133f..0000000000000 --- a/_layouts/default.html +++ /dev/null @@ -1,118 +0,0 @@ ---- ---- - - - - - - {% include head.html %} - {% include head/custom.html %} - - - - - - - - {% include_cached skip-links.html %} - {% include_cached masthead.html %} - -
- {{ content }} -
- - {% if site.search == true %} -
- {% include_cached search/search_form.html %} -
- {% endif %} - - - - {% include scripts.html %} - - - - - - - - diff --git a/_layouts/home.html b/_layouts/home.html deleted file mode 100644 index 02e96eb81ca1a..0000000000000 --- a/_layouts/home.html +++ /dev/null @@ -1,22 +0,0 @@ ---- -layout: archive ---- - -{{ content }} - -

{{ site.data.ui-text[site.locale].recent_posts | default: "Recent Posts" }}

- -{% if paginator %} - {% assign posts = paginator.posts %} -{% else %} - {% assign posts = site.posts %} -{% endif %} - -{% assign entries_layout = page.entries_layout | default: 'list' %} -
- {% for post in posts %} - {% include archive-single.html type=entries_layout %} - {% endfor %} -
- -{% include paginator.html %} diff --git a/_layouts/posts.html b/_layouts/posts.html deleted file mode 100644 index 13fc707cf00a5..0000000000000 --- a/_layouts/posts.html +++ /dev/null @@ -1,30 +0,0 @@ ---- -layout: archive ---- - -{{ content }} - -
    - {% assign postsInYear = site.posts | where_exp: "item", "item.hidden != true" | group_by_exp: 'post', 'post.date | date: "%Y"' %} - {% for year in postsInYear %} -
  • - - {{ year.name }} {{ year.items | size }} - -
  • - {% endfor %} -
- -{% assign entries_layout = page.entries_layout | default: 'list' %} -{% assign postsByYear = site.posts | where_exp: "item", "item.hidden != true" | group_by_exp: 'post', 'post.date | date: "%Y"' %} -{% for year in postsByYear %} -
-

{{ year.name }}

-
- {% for post in year.items %} - {% include archive-single.html type=entries_layout %} - {% endfor %} -
- {{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} ↑ -
-{% endfor %} diff --git a/_layouts/search.html b/_layouts/search.html deleted file mode 100644 index 9e661a364b04f..0000000000000 --- a/_layouts/search.html +++ /dev/null @@ -1,42 +0,0 @@ ---- -layout: default ---- - -{% if page.header.overlay_color or page.header.overlay_image or page.header.image %} - {% include page__hero.html %} -{% endif %} - -{% if page.url != "/" and site.breadcrumbs %} - {% unless paginator %} - {% include breadcrumbs.html %} - {% endunless %} -{% endif %} - -
- {% include sidebar.html %} - -
- {% unless page.header.overlay_color or page.header.overlay_image %} -

{{ page.title }}

- {% endunless %} - - {{ content }} - - {%- assign search_provider = site.search_provider | default: "lunr" -%} - {%- case search_provider -%} - {%- when "lunr" -%} - -
- {%- when "google" -%} -
- -
-
- -
- {%- when "algolia" -%} - -
- {%- endcase -%} -
-
diff --git a/_layouts/single.html b/_layouts/single.html deleted file mode 100644 index 9f7ecf585ca89..0000000000000 --- a/_layouts/single.html +++ /dev/null @@ -1,94 +0,0 @@ ---- -layout: default ---- - -{% if page.header.overlay_color or page.header.overlay_image or page.header.image %} - {% include page__hero.html %} -{% elsif page.header.video.id and page.header.video.provider %} - {% include page__hero_video.html %} -{% endif %} - -{% assign breadcrumbs_enabled = site.breadcrumbs %} -{% if page.breadcrumbs != null %} - {% assign breadcrumbs_enabled = page.breadcrumbs %} -{% endif %} -{% if page.url != "/" and breadcrumbs_enabled %} - {% unless paginator %} - {% include breadcrumbs.html %} - {% endunless %} -{% endif %} - -
- - -
- {% if page.title %}{% endif %} - {% if page.excerpt %}{% endif %} - {% if page.date %}{% endif %} - {% if page.last_modified_at %}{% endif %} - -
- {% unless page.header.overlay_color or page.header.overlay_image %} -
- {% if page.title %}

{{ page.title | markdownify | remove: "

" | remove: "

" }}

{% endif %} - {% include page__meta.html %} -
- {% endunless %} - -
- {{ content }} - {% if page.link %}{% endif %} -
- -
- {% if site.data.ui-text[site.locale].meta_label %} -

{{ site.data.ui-text[site.locale].meta_label }}

- {% endif %} - {% include page__taxonomy.html %} - {% include page__date.html %} -
- - {% if page.share %}{% include social-share.html %}{% endif %} - - {% include post_pagination.html %} -
- - {% if site.comments.provider and page.comments %} - {% include comments.html %} - {% endif %} -
- - {% comment %}{% endcomment %} - {% if page.id and page.related and site.related_posts.size > 0 %} - - {% comment %}{% endcomment %} - {% elsif page.id and page.related %} - - {% endif %} -
diff --git a/_layouts/splash.html b/_layouts/splash.html deleted file mode 100644 index 2116502402a3e..0000000000000 --- a/_layouts/splash.html +++ /dev/null @@ -1,22 +0,0 @@ ---- -layout: default ---- - -{% if page.header.overlay_color or page.header.overlay_image or page.header.image %} - {% include page__hero.html %} -{% elsif page.header.video.id and page.header.video.provider %} - {% include page__hero_video.html %} -{% endif %} - -
-
- {% if page.title %}{% endif %} - {% if page.excerpt %}{% endif %} - {% if page.date %}{% endif %} - {% if page.last_modified_at %}{% endif %} - -
- {{ content }} -
-
-
diff --git a/_layouts/tag.html b/_layouts/tag.html deleted file mode 100644 index 8b1c1885004f3..0000000000000 --- a/_layouts/tag.html +++ /dev/null @@ -1,10 +0,0 @@ ---- -layout: archive ---- - -{{ content }} - -{% assign entries_layout = page.entries_layout | default: 'list' %} -
- {% include posts-tag.html taxonomy=page.taxonomy type=entries_layout %} -
diff --git a/_layouts/tags.html b/_layouts/tags.html deleted file mode 100644 index daa11828f813b..0000000000000 --- a/_layouts/tags.html +++ /dev/null @@ -1,43 +0,0 @@ ---- -layout: archive ---- - -{{ content }} - -{% assign tags_max = 0 %} -{% for tag in site.tags %} - {% if tag[1].size > tags_max %} - {% assign tags_max = tag[1].size %} - {% endif %} -{% endfor %} - -
    - {% for i in (1..tags_max) reversed %} - {% for tag in site.tags %} - {% if tag[1].size == i %} -
  • - - {{ tag[0] }} {{ i }} - -
  • - {% endif %} - {% endfor %} - {% endfor %} -
- -{% assign entries_layout = page.entries_layout | default: 'list' %} -{% for i in (1..tags_max) reversed %} - {% for tag in site.tags %} - {% if tag[1].size == i %} -
-

{{ tag[0] }}

-
- {% for post in tag.last %} - {% include archive-single.html type=entries_layout %} - {% endfor %} -
- {{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} ↑ -
- {% endif %} - {% endfor %} -{% endfor %} diff --git a/_online_textbooks/UG_final_year_project.md b/_online_textbooks/UG_final_year_project.md deleted file mode 100644 index 3d7174abb1ff4..0000000000000 --- a/_online_textbooks/UG_final_year_project.md +++ /dev/null @@ -1,334 +0,0 @@ ---- -title: "Final Year Project: Space Station Design" -excerpt: "An introduction to multibody dynamics and the use of symbolic computation in modelling them." -mathjax: true ---- - -{% marginfigure 'mf-id-1' 'assets/imgs/HQ_Final_Logo_for_light_theme.png' 'Logo for SpaceHQ. -We like to think of ourseleves as a ragtag group of outliers trying to figure out how we -can build larger structures in space. An example challenge is how we can go from -modular stations such as ISS, as seen on the left of our logo, to rotating wheel -space stations, on the right of our logo.' %} - -## Who this page serves? -{% newthought "This is likely only useful for" %} QMUL's final year undergraduate students in who are taking -[EMS690U final year project](https://www.qmul.ac.uk/modules/items/ems690u-integrated-design-project.html) -under my supervision. It will make little to no sense for anyone else (inlcuding those from QMUL) as -there will be a lot covered in the in-person workshops. This is merely to augment to that; it is not -meant as a standalone piece. - -## Project Areas -The core thesis of the project is that large (or even ultra-large) space structures -could help us inspirational or useful things. Human habitation and space-based astronomy -are classic examples of the former whereas -former whereas in-space manufacturing or tackling -overcome existential risks/threats -### In-Space Manufacturing (e.g., Organs, Electronics, and Pharmaceuticals Drugs) -**Domain**:: Commercial Businesses backed by either venture capital and/or -space agencies. - -[3-D printing artificial organs](https://www.nasa.gov/missions/station/iss-research/3d-bioprinting/) -would be a boon to those on the donor organs wait-list. ISS astronauts are also working on this technology -to if these -[artificial organs can withstand the space environment](https://www.space.com/international-space-station-3d-printed-hearts-astronauts-deep-space-travel). - -**Existing Players** -- **Semiconductors and Electronics** - - [Space Forge](https://www.spaceforge.com) -- **Pharmaceuticals Drugs** - - [Varda Space](https://www.varda.com) - - [BioOrbit](https://www.bioorbit.space/) - - -### Large Space Stations (Modular or Monolithic) -**Domain**: National space agencies have built space stations so far. -Commercial entities are now trying to get a piece of the pie. - -{% marginnote 'table-2-id' '*Table 1*: A table of space stations launched and planned.' %} -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Space Stations
FundingName (Year)CapacityType/Comments
Govt. fundedSalyut 1 (1971)3Monolithic
Salyut 2 (1973)2Monolithic, military. Debris collision failure
Salyut 3 (1974-1975)2Monolithic, military
Salyut 4 (1974-1977)3Monolithic
Salyut 5 (1976-1977)2Monolithic, military
Salyut 6 (1977-1982)3Semi-modular
Salyut 7 (1982-1991)3Semi-modular
Skylab (1973-1979)3Monolithic
Almaz (1973-1976)2-3Monolithic, military
Mir (1986-2001)3Modular
International Space Station (2000-present)7Modular, international
Tiangong-1 (2011-2018)3Monolithic prototype
Tiangong-2 (2016-2019)2Monolithic prototype
Tiangong Space Station (2021-present)3Modular
Lunar Gateway (planned 2024)4Modular, lunar orbit
ROSS (planned 2027)4Modular, Russian national
Indian Space Station (planned 2035)3Likely modular, details TBA
China's next-gen station (planned, date TBA)6Likely modular, expanded Tiangong
PrivateAxiom Station (planned 2025)4Modular, initially ISS-attached
Vast-1 (planned 2025)4Single module prototype
Haven-1 (planned 2027)8Larger follow-up to Vast-1
Starlab (planned 2028)4Single-launch station
The Exploration Company's Nyx (planned 2028)4Modular, expandable design
Orbital Reef (status uncertain)10Modular, project paused in 2023
Voyager Station (conceptual)400Rotating wheel design, highly speculative
Orbital Reef (planned 2027)10Duplicate entry, remove
-
- - - - -### Large Space Telescopes (25 metres or more) -**Domain**: Space agencies and commercial - - -### In-Space Servicing/Repair/Refuelling Systems -**Domain**: Commercial - -### Space-based Geoengineering -**Domain**: Commercial - -### Debris Removal -**Domain**: Commercial -**Existing Players** - - --[ClearSpace](http://clearspace.today) - -## Project Blurb (for Inspiration Only) -There is a rapidly growing number of man-made satellites in Earth’s orbit, fulfilling -a wide range of tasks. As satellite technology develops, there is a growing interest -in the design of satellites such as the International Space Station (ISS), that are -capable of sustaining human occupation for extended periods. The design requirements -of these occupied satellite systems are complex and depend upon the number of -occupants, the expected duration of occupation (i.e. the number of years an astronaut would -spend on the satellite) and the overarching purpose of the space station. - -Each group will examine a different type of space station, which serves different purposes, including -- A habitat for long-term occupation -- One with the optical telescopes or other imagers for disaster-monitoring, persistent Earth observations, -or space-based astronomy -- In-space factory for production of semi-conductors - -Students will focus on a single application from the above list and will consider -different levels of human occupants, range from less than 10 to several thousand people. -The specific objectives include determining precise system-level requirements, estimating -costs associated with different possible designs, and developing an Attitude and -Orbit Control System. Students will need to survey available launch vehicles (incl. -SpaceX’s Starship Super Heavy) to develop cost estimates and a mission plan/architecture -for the assembly. The latter will involve developing a high-level concept of operations -needed to assemble the desired space station using either robots or astronauts. Again, -a trade-off analysis is necessary as a precursor that estimates cost, speed, time, risks, etc. -for each assembly style. By the end of the project, students will be expected to conclude with -a recommendation on the station design, the chosen assembly architecture in the ConOps (aka -Concept of Operations) for their given occupancy limit, and orbit/attitude control system simulations. - -## Weekly Workshop Philosophy -In line with the [formal assessments (listed below)](http://angadhn.com/online_textbooks/UG_final_year_project/#formal-assessments) but also to prepare you as future leaders in engineering, -our weekly 2-hour workshops are geared primarily towards getting you to developing broader skills than -university might typically prepare you for in the early years. Some examples of skills you will develop -over the coming weeks are listed below (but this is by no means an exhaustive list): -1. **Public Speaking**: elevator pitch style in the early weeks to eventually being able to give rapid updates -in the later weeks. -2. **Writing**: Developing writing skills. -3. **Insight Generation**: Reflecting on technologies[^a] and the underlying -philosophy for their development. - -## Informal Assessments -Thus, we have the following two informal assessments: -1. Weekly in-class presentations by each member of every group the entire academic year. -2. 6-page technical report to be submitted in Week 6 of Semester B. - -## Formal Assessments - -| **Assessment** | **Due Date** | -| ------------------------------------------------------------------------------------------------------ | ------------ | -| **Assessment 1**: Front End Individual Design Report (10%) | [Due Date] | -| **Assessment 2**: Group Project Proposal/Feasibility Study (10%) | [Due Date] | -| **Assessment 3**: Peer Evaluation with Self Reflection and Action Plan Sem A (0%, Formative) | [Due Date] | -| **Assessment 4**: Peer Evaluation with Self Reflection and Action Plan Sem B (15%) | [Due Date] | -| **Assessment 5**: Individual Detailed Design Report (40%) | [Due Date] | -| **Assessment 6**: Final Group Presentation and Individual Back-up Evidence (15% Group, 10% Individual) | [Due Date] | - -## Useful Resources: -This list will grow but useful resources at the time of writing are listed below. -### Tools for Writing and Research Managemenent: -1. [$$\LaTeX$$ template on Overleaf](https://www.overleaf.com/latex/templates/qmul-sems-undergraduate-report-template/qdypzhkttgyt) -that I have posted. -2. [Zotero](https://www.zotero.org) is an excellent and free tool for collecting all the papers you use for -your research. These will be used as citations in the Reference section of your report(s). For these -reasons, tools like Zotero are also called reference management tools. Worth downloading and reading/wathcing some -tutorials online. -3. [Google Scholar](https://scholar.google.com) is superb for finding scholarly papers in addition to -the resources provided on QM+. A browser plugin can also be installed via Zotero that connects to Google -Scholar to quickly import papers that you find interesting; link here for -[Zotero Connector](https://www.zotero.org/download/connectors). -4. [Inkscape](https://inkscape.org) is one example of a useful tool for making high quality images. -[Keynote ](https://www.apple.com/uk/keynote/)and PowerPoint are -also useful tools not only for making presentations but also for quickly making schematics or editing images. - -### Some Technical References: -1. Space Systems Engineering Textbooks. The bible for this is typically [SMAD by James Wertz -Some goods one are by Stark and Fortescue](https://www.amazon.com/Space-Mission-Engineering-Technology-Library/dp/1881883159) which is also made available via the -[Internet Archive](https://archive.org/details/spacemissionanal0003edunse). Another is by -[Fortescue et al.](https://www.amazon.com/Spacecraft-Systems-Engineering-Peter-Fortescue/dp/047075012X/ref=sr_1_1?crid=1Q26KNFTZBRSQ&dib=eyJ2IjoiMSJ9.e0d04EB9lgaq4_O9stPoRdmatNHD5PIdX9hZzjEJaZjVglvWUD5JhGJ3eK5mZ7nJqUYuSfL7tKb1kte3X2Ebqmz_mbqegw7XFk98ScwyQvRcQvGKdmAHEonLpOQKcJ6Q.6z31353CMhm9mEjpNLrAcUx1-TDFRUHJSIUju5o05Iw&dib_tag=se&keywords=stark+fortescue&qid=1726750506&s=books&sprefix=stark+foretescu%2Cstripbooks-intl-ship%2C145&sr=1-1) -which QMUL students can access on QM+. -2. If you want to look into how books such as above can inform the development of large space structures, you can -read my paper on how to [robotically assemble 25 metre space telescopes](https://www.angadhn.com/publication/2023-06-01-towards-robotic-on-orbit-assembly) -and another [CalTech/NASA-JPL paper on 80 metre telescopes](https://kiss.caltech.edu/papers/largestructure/papers/architecture.pdf). -3. My blog post on [von Braun's rotating wheel space stations](http://www.angadhn.com/large%20space%20stations/space%20exploration/vonBraunWheels/). - -### Footnotes -[^a]: Here, I do not just mean space technolgoies but even those that you use in preparing your reports such as Github and $$\LaTeX$$. diff --git a/_online_textbooks/computational_dynamics.md b/_online_textbooks/computational_dynamics.md deleted file mode 100644 index 5e03af6feffc0..0000000000000 --- a/_online_textbooks/computational_dynamics.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: "Symbolic Computational Dynamics" -excerpt: "An introduction to multibody dynamics and the use of symbolic computation in modelling them." ---- - -## [Weblink](https://www.angadhn.com/ComputationalDynamics/kinematics/introduction.html) - -## Who might find the above link useful? -{% newthought "The above text is most useful for" %} QMUL's first year undergraduate students taking -[EMS418U: Computational and Mathematical Modelling 2](https://www.qmul.ac.uk/modules/items/ems418u-computational-and-mathematical-modelling-2.html). -It could also be a useful resource for educators interested in classical mechanics wishing to teach computational -modeling to students using computer symbolic algebra. The content makes have use of `sympy`; specifically, its -`physics.mechanics` module which has some utilities for quickly diving into vector operations. - -## Our purpose -The idea is to encourage intuition-driven modelling and computational thinking in three-dimensions. Where most -introductory textbooks on classical mechanics emphasise hand-derived models to study motions of -simple systems (particles or a simple pendulum), our approach focuses on enabling deeper capabilities with -computing. We teach the fundamentals of modeling motion in three dimensions of particles and rigid bodies. We -then introduce planar kinematics of rigid multibody systems. Why? Multibody systems are everywhere; humans are -one example and robot arms are another. Waiting to introduce students to these concepts in an advanced -postgraduate course does little to stimulate imagination, in my humble opinion, or challenge the student. -Empowering students with the tools to build models seems like a better way to go about things from both -a perspective of upskilling but also for students to find and refine their personal interests in pursuing -their educational path into engineering. The use of computational tools early in their career -likely {% sidenote '' 'I believe this will hold even in the age of AI.'%} also prepares them -for their future roles in research, industry, and entrepreneurship. - -Later courses can build on the modeling capabilities towards analysing systems through numerical simulation -in a more discipline specific sense. For example, we analyse spacecraft motion in -[Computational Spacecraft Dynamics](https://www.angadhn.com/online_textbooks/spacecraft_dynamics/). diff --git a/_online_textbooks/spacecraft_dynamics.md b/_online_textbooks/spacecraft_dynamics.md deleted file mode 100644 index 1d071f53ddfe4..0000000000000 --- a/_online_textbooks/spacecraft_dynamics.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: "Computational Spacecraft Dynamics" -comments : true -excerpt: "An introduction to spacecraft dynamics modelling and simulation." ---- -## [Weblink](http://angadhn.com/SpacecraftDynamics) - -## Who might find the above link useful? -{% newthought "The above online textbook is most useful for" %} QMUL's second year Aerospace Engineering undergraduate students taking -[EMS515U: Introduction to Spacecraft Dynamics](https://www.qmul.ac.uk/modules/items/ems515u-introduction-to-spacecraft-dynamics.html). -It could also be a useful resource for other educators interested in teaching orbital mechanics, especially using computational -tools like `numpy`. - -## Personal Recommendation of Pre-requisites -This is my personal list of pre-requisites (not prescribed or stated as so by my employers): -1. An interest in space engineering. -2. Vector algebra and basic vector differentiation. -3. Deep familiarity of classical mechanics, especially as taught by me using symbolic modelling tools over [here](https://www.angadhn.com/ComputationalDynamics). - -## Assessment Profile for QMUL course EMS515U -All assessments are conducted on the [JupyterHub platform provided by QMUL](http://hub.comp-teach.qmul.ac.uk). - -Assessment is carried out through the following elements: -- A coursework on orbital mechanics. This is upto and includes the lecture notes on Special Orbits (40%) -- Final online exam in January assessment period (60%). - -For students requiring resits, assessment is carried out through a reassessment written exam -in the LSR period (100%). - -### Schedule - -| Assessment | Release Date | Due Date | -| ----------------- | ------------------- | ------------------- | -| Coursework 1 | 11/12/2024 at 17:00 | 16/12/2024 at 23:59 | -| Final Exam | TBD | TBD | -| Late Summer Resit | TBD | TBD | - - diff --git a/_pages/404.md b/_pages/404.md deleted file mode 100644 index b3025a6053b51..0000000000000 --- a/_pages/404.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Page Not Found" -excerpt: "Page not found. Your pixels are in another canvas." -sitemap: false -permalink: /404.html ---- - -Sorry, but the page you were trying to view does not exist. diff --git a/_pages/about.md b/_pages/about.md deleted file mode 100644 index e4c08a1b3bef5..0000000000000 --- a/_pages/about.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -permalink: / -author_profile: true -mathjax: true -redirect_from: - - /about/ - - /about.html ---- - -## My Background and Interests -{% newthought 'At present, I am a Lecturer in Spacecraft Engineering'%} at Queen Mary University of -London in the UK{% sidenote 'One' '[My QMUL page](https://www.seresearch.qmul.ac.uk/robotics/people/ananjangud/)' %}. -Since entering academia in 2020, I have attempted to traverse the twofold research and education -landscape in a manner that I think can expand consciousness- mine as well as of those who try -to work with me. This is especially that case (I'd like to think) for students and early -career researchers. - -Everything I learned about my academic field of expertise (classical mechanics and -multibody dynamics) and its effective written communication was from the -[late Prof. Fidels O. Eke](https://web.archive.org/web/20230127150437/https://mae.ucdavis.edu/news/memoriam-professor-emeritus-fidelis-eke){% sidenote '' '[His UC Davis obituary](https://mae.ucdavis.edu/news/memoriam-professor-emeritus-fidelis-eke)' %}, -a truly extraordinary scholar and gentleman. Towards the completion of my PhD, I was fortunate to -be accepted by [Dr. Abhi Jain](https://www-robotics.jpl.nasa.gov/who-we-are/people/abhinandan_jain/) -to spend a year at the [NASA Jet Propulsion Laboratory's DARTSLab](https://dartslab.jpl.nasa.gov), -where his group works on fundamental aspects of computational/algorithmic multibody robot -dynamics while applying them in the context of various NASA missions. This was followed by -a postdocotoral appointment at the [Surrey Space Centre](https://www.surrey.ac.uk/surrey-space-centre)- -here, I drove research for [SSTL](https://www.sstl.co.uk) and Airbus into developing missions, -architectures, and technology development/demonstration plans for robotic -[in-space assembly](http://angadhn.com/publication/2023-06-01-towards-robotic-on-orbit-assembly) while also -driving development of lab-based technology demonstration testbeds. Here, again, my worldview -was expanded by [Prof. Craig Underwood](https://www.surrey.ac.uk/people/craig-underwood), -who possesses an encyclopaedic knowledge of space missions while also being a proper space engineer with -a deep understanding of technologies across various spacecraft subsystems. These experiences and mentors -got me working in space robotics where my group works on fundamental engineering science-based know-hows -towards realising futuristic space systems/technologies. - -## My Research and Pedagogic Philosophy: Tasteful engineering creativity via constructivist experimentation -My new approach to personal learning and pedagogic growth bears some parallels to Papert's -constructivist philosophy. My interpretation of this is that intuition and interest comes from -experimenting with new and previously unknown interactive tools, much like a child playing with an -ever-expanding collection of toys, to enhance their understanding of the world. My belief is that -this leads to one eventually uncovering{% sidenote '' 'In some cases, even _discovering_'.%} their -interests, which I see as an important precursor to developing taste. I am writing this while -reflecting on the efforts of some extraordinary students who, over the Summer of 2024, collectively -created an online textbook on Spacecraft Dynamics[^a] based on previous handwritten lecture notes. - -For students, I like to emphases exploration-based learning (as opposed to ), which deviates from -the conventions of formal academia that are examination-focused (as much as my role permits). -The dangers of eschewing exploration in educaation is bearing the anti-fruit in the extant -populist model of STEM research where group leaders are focused on enhancing personal metrics -by collecting more publications in a bid to raise personal research productivity indices -{%sidenote '' 'A classic case of Goodhart’s law. My issue is that these metrics are not an -effective measure of the true outputs from academia- the career of advisees [^b]. -Of course, this presumes advisees must also be self-motivated to grow their opportunities.'%}. -My conclusion is that a lot of today's professoriate are not too different from -philatelists[^c] but a potential answer lies in updating incentive structures. Or at least -clarifying them; a funder should make clear it wants only journall papers or only datasets or -a combination of these (and other) outputs. - -#### Footnotes -[^a]: The students built on prior basic knowledge of Python, $$\LaTeX$$, and Markdown but more importantly some of them learned how to thoroughly review [pull requests](https://github.com/angadhn/SpacecraftDynamics/pulls). They were able to teach their friends, via remote pair programming, how to make contributions without my direct supervision. In the process, this team also taught me about sensibly coordinating a larger Github project while flying by the seat of my pants. I would like to think that we all grew a bit. - -[^b]: Can one teach another **how** to love something? - -[^c]: A commentary will be needed from me to clarify this as I do believe that documentation is important in STEM but more important is training future scientists to be effectively communicate in writing. diff --git a/_pages/archive-layout-with-content.md b/_pages/archive-layout-with-content.md deleted file mode 100644 index 1616b07b04e23..0000000000000 --- a/_pages/archive-layout-with-content.md +++ /dev/null @@ -1,214 +0,0 @@ ---- -title: "Archive Layout with Content" -layout: archive -permalink: /archive-layout-with-content/ ---- - -A variety of common markup showing how the theme styles them. - -# Header one - -## Header two - -### Header three - -#### Header four - -##### Header five - -###### Header six - -## Blockquotes - -Single line blockquote: - -> Stay hungry. Stay foolish. - -Multi line blockquote with a cite reference: - -> People think focus means saying yes to the thing you've got to focus on. But that's not what it means at all. It means saying no to the hundred other good ideas that there are. You have to pick carefully. I'm actually as proud of the things we haven't done as the things I have done. Innovation is saying no to 1,000 things. - -Steve Jobs --- Apple Worldwide Developers' Conference, 1997 -{: .small} - -## Tables - -| Employee | Salary | | -| -------- | ------ | ------------------------------------------------------------ | -| [John Doe](#) | $1 | Because that's all Steve Jobs needed for a salary. | -| [Jane Doe](#) | $100K | For all the blogging she does. | -| [Fred Bloggs](#) | $100M | Pictures are worth a thousand words, right? So Jane × 1,000. | -| [Jane Bloggs](#) | $100B | With hair like that?! Enough said. | - -| Header1 | Header2 | Header3 | -|:--------|:-------:|--------:| -| cell1 | cell2 | cell3 | -| cell4 | cell5 | cell6 | -|-----------------------------| -| cell1 | cell2 | cell3 | -| cell4 | cell5 | cell6 | -|=============================| -| Foot1 | Foot2 | Foot3 | - -## Definition Lists - -Definition List Title -: Definition list division. - -Startup -: A startup company or startup is a company or temporary organization designed to search for a repeatable and scalable business model. - -#dowork -: Coined by Rob Dyrdek and his personal body guard Christopher "Big Black" Boykins, "Do Work" works as a self motivator, to motivating your friends. - -Do It Live -: I'll let Bill O'Reilly [explain](https://www.youtube.com/watch?v=O_HyZ5aW76c "We'll Do It Live") this one. - -## Unordered Lists (Nested) - - * List item one - * List item one - * List item one - * List item two - * List item three - * List item four - * List item two - * List item three - * List item four - * List item two - * List item three - * List item four - -## Ordered List (Nested) - - 1. List item one - 1. List item one - 1. List item one - 2. List item two - 3. List item three - 4. List item four - 2. List item two - 3. List item three - 4. List item four - 2. List item two - 3. List item three - 4. List item four - -## Buttons - -Make any link standout more when applying the `.btn` class. - -```html -Success Button -``` - -[Primary Button](#){: .btn} -[Success Button](#){: .btn .btn--success} -[Warning Button](#){: .btn .btn--warning} -[Danger Button](#){: .btn .btn--danger} -[Info Button](#){: .btn .btn--info} -[Inverse Button](#){: .btn .btn--inverse} -[Light Outline Button](#){: .btn .btn--light-outline} - -```markdown -[Primary Button Text](#link){: .btn} -[Success Button Text](#link){: .btn .btn--success} -[Warning Button Text](#link){: .btn .btn--warning} -[Danger Button Text](#link){: .btn .btn--danger} -[Info Button Text](#link){: .btn .btn--info} -[Inverse Button](#link){: .btn .btn--inverse} -[Light Outline Button](#link){: .btn .btn--light-outline} -``` - -[X-Large Button](#){: .btn .btn--x-large} -[Large Button](#){: .btn .btn--large} -[Default Button](#){: .btn} -[Small Button](#){: .btn .btn--small} - -```markdown -[X-Large Button](#link){: .btn .btn--x-large} -[Large Button](#link){: .btn .btn--large} -[Default Button](#link){: .btn} -[Small Button](#link){: .btn .btn--small} -``` - -## Notices - -**Watch out!** You can also add notices by appending `{: .notice}` to a paragraph. -{: .notice} - -## HTML Tags - -### Address Tag - -
- 1 Infinite Loop
Cupertino, CA 95014
United States -
- -### Anchor Tag (aka. Link) - -This is an example of a [link](http://apple.com "Apple"). - -### Abbreviation Tag - -The abbreviation CSS stands for "Cascading Style Sheets". - -*[CSS]: Cascading Style Sheets - -### Cite Tag - -"Code is poetry." ---Automattic - -### Code Tag - -You will learn later on in these tests that `word-wrap: break-word;` will be your best friend. - -### Strike Tag - -This tag will let you strikeout text. - -### Emphasize Tag - -The emphasize tag should _italicize_ text. - -### Insert Tag - -This tag should denote inserted text. - -### Keyboard Tag - -This scarcely known tag emulates keyboard text, which is usually styled like the `` tag. - -### Preformatted Tag - -This tag styles large blocks of code. - -
-.post-title {
-  margin: 0 0 5px;
-  font-weight: bold;
-  font-size: 38px;
-  line-height: 1.2;
-  and here's a line of some really, really, really, really long text, just to see how the PRE tag handles it and to find out how it overflows;
-}
-
- -### Quote Tag - -Developers, developers, developers… –Steve Ballmer - -### Strong Tag - -This tag shows **bold text**. - -### Subscript Tag - -Getting our science styling on with H2O, which should push the "2" down. - -### Superscript Tag - -Still sticking with science and Albert Einstein's E = MC2, which should lift the 2 up. - -### Variable Tag - -This allows you to denote variables. \ No newline at end of file diff --git a/_pages/category-archive-grid.md b/_pages/category-archive-grid.md deleted file mode 100644 index 3558be0a0db9e..0000000000000 --- a/_pages/category-archive-grid.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Posts by Category (grid view)" -layout: categories -permalink: /categories-grid/ -entries_layout: grid -author_profile: true ---- diff --git a/_pages/category-archive.md b/_pages/category-archive.md deleted file mode 100644 index 4cb3860e91be9..0000000000000 --- a/_pages/category-archive.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Posts by Category" -layout: categories -permalink: /categories/ -author_profile: true ---- diff --git a/_pages/collection-archive-grid.html b/_pages/collection-archive-grid.html deleted file mode 100644 index 3280bf7bdf796..0000000000000 --- a/_pages/collection-archive-grid.html +++ /dev/null @@ -1,28 +0,0 @@ ---- -layout: archive -title: "Posts by Collection (grid view)" -permalink: /collection-archive-grid/ -entries_layout: grid -author_profile: true ---- - -{% assign entries_layout = page.entries_layout | default: 'list' %} -{% capture written_label %}'None'{% endcapture %} - -{% for collection in site.collections %} - {% unless collection.output == false or collection.label == "posts" %} -
- {% capture label %}{{ collection.label }}{% endcapture %} - {% if label != written_label %} -

{{ label }}

- {% capture written_label %}{{ label }}{% endcapture %} - {% endif %} -
- {% for post in collection.docs %} - {% include archive-single.html type=entries_layout %} - {% endfor %} -
- {{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} ↑ -
- {% endunless %} -{% endfor %} diff --git a/_pages/collection-archive.html b/_pages/collection-archive.html deleted file mode 100644 index 219592b6d8e9f..0000000000000 --- a/_pages/collection-archive.html +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: archive -title: "Posts by Collection" -permalink: /collection-archive/ -author_profile: true ---- - -{% capture written_label %}'None'{% endcapture %} - -{% for collection in site.collections %} - {% unless collection.output == false or collection.label == "posts" %} - {% capture label %}{{ collection.label }}{% endcapture %} - {% if label != written_label %} -

{{ label }}

- {% capture written_label %}{{ label }}{% endcapture %} - {% endif %} - {% endunless %} - {% for post in collection.docs %} - {% unless collection.output == false or collection.label == "posts" %} - {% include archive-single.html type=page.entries_layout %} - {% endunless %} - {% endfor %} -{% endfor %} diff --git a/_pages/edge-case-grid.md b/_pages/edge-case-grid.md deleted file mode 100644 index c2f73e5a2a938..0000000000000 --- a/_pages/edge-case-grid.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Edge Case (grid view) -layout: category -permalink: /categories/edge-case-grid/ -taxonomy: Edge Case -entries_layout: grid ---- - -Sample post listing for the category `Edge Case`. diff --git a/_pages/edge-case.md b/_pages/edge-case.md deleted file mode 100644 index 016138a4675ab..0000000000000 --- a/_pages/edge-case.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Edge Case -layout: category -permalink: /categories/edge-case/ -taxonomy: Edge Case ---- - -Sample post listing for the category `Edge Case`. diff --git a/_pages/lorem-ipsum.md b/_pages/lorem-ipsum.md deleted file mode 100644 index 13be88aeb6759..0000000000000 --- a/_pages/lorem-ipsum.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "Lorem Ipsum" -permalink: /lorem-ipsum/ ---- - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec mollis. Quisque convallis libero in sapien pharetra tincidunt. Aliquam elit ante, malesuada id, tempor eu, gravida id, odio. Maecenas suscipit, risus et eleifend imperdiet, nisi orci ullamcorper massa, et adipiscing orci velit quis magna. Praesent sit amet ligula id orci venenatis auctor. Phasellus porttitor, metus non tincidunt dapibus, orci pede pretium neque, sit amet adipiscing ipsum lectus et libero. Aenean bibendum. Curabitur mattis quam id urna. Vivamus dui. Donec nonummy lacinia lorem. Cras risus arcu, sodales ac, ultrices ac, mollis quis, justo. Sed a libero. Quisque risus erat, posuere at, tristique non, lacinia quis, eros. - -Cras volutpat, lacus quis semper pharetra, nisi enim dignissim est, et sollicitudin quam ipsum vel mi. Sed commodo urna ac urna. Nullam eu tortor. Curabitur sodales scelerisque magna. Donec ultricies tristique pede. Nullam libero. Nam sollicitudin felis vel metus. Nullam posuere molestie metus. Nullam molestie, nunc id suscipit rhoncus, felis mi vulputate lacus, a ultrices tortor dolor eget augue. Aenean ultricies felis ut turpis. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse placerat tellus ac nulla. Proin adipiscing sem ac risus. Maecenas nisi. Cras semper. - -Praesent interdum mollis neque. In egestas nulla eget pede. Integer eu purus sed diam dictum scelerisque. Morbi cursus velit et felis. Maecenas faucibus aliquet erat. In aliquet rhoncus tellus. Integer auctor nibh a nunc fringilla tempus. Cras turpis urna, dignissim vel, suscipit pulvinar, rutrum quis, sem. Ut lobortis convallis dui. Sed nonummy orci a justo. Morbi nec diam eget eros eleifend tincidunt. - -Curabitur non elit. Pellentesque iaculis, nisl non aliquet adipiscing, purus urna aliquet orci, sed sodales pede neque at massa. Pellentesque laoreet, enim eget varius mollis, sapien erat suscipit metus, sit amet iaculis nulla sapien id felis. Aliquam erat volutpat. Nam congue nulla a ligula. Morbi tempor hendrerit erat. Curabitur augue. Vestibulum nulla est, commodo et, fringilla quis, bibendum eget, ipsum. Suspendisse pulvinar iaculis ante. Mauris dignissim ante quis nisi. Aliquam ante mi, aliquam et, pellentesque ac, dapibus et, enim. In vulputate justo vel magna. Phasellus imperdiet justo. Proin odio orci, dapibus id, porta a, pellentesque id, erat. Aliquam erat volutpat. Mauris nonummy varius libero. Sed dolor ipsum, tempor non, aliquet et, pulvinar quis, dui. Pellentesque mauris diam, lobortis id, varius varius, facilisis at, nulla. - -Cras pede. Nullam id velit sit amet turpis tincidunt sagittis. Nunc malesuada. Nunc consequat scelerisque odio. Donec eu leo. Nunc pellentesque felis sed odio. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus lobortis metus in lectus. Cras mollis quam eget sapien. Pellentesque non lorem sit amet sem lacinia euismod. - -Nulla eget diam eget leo imperdiet consequat. Morbi nunc magna, pellentesque eu, porta at, ultricies ut, neque. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In tincidunt. Praesent ut orci id eros congue ultrices. Mauris non neque. Donec nulla ante, molestie sit amet, fermentum nec, blandit sit amet, purus. Fusce eget diam eu odio iaculis mollis. Phasellus consectetuer pede quis nisi. Proin non sem ut elit pulvinar faucibus. In a turpis nec augue fringilla elementum. - -Nullam felis. Donec in nulla. Suspendisse sodales, turpis in suscipit ullamcorper, enim nunc sagittis risus, eu auctor velit tortor ut turpis. Mauris id augue at neque aliquam eleifend. Sed eget augue. Nunc faucibus ligula sed massa. Etiam non nulla. Etiam accumsan ullamcorper nisl. In pharetra massa at nunc. Nunc elementum. Duis sodales enim nec libero. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Praesent dapibus eros sodales urna. Duis magna nisi, lobortis quis, tincidunt rutrum, posuere non, ipsum. - -Aliquam convallis neque vitae diam. In diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis fermentum arcu in tortor. Sed nibh leo, rhoncus eu, fermentum et, scelerisque ac, massa. Cras id turpis. Etiam commodo sem luctus lorem. Morbi at mi. In rutrum. Aenean luctus pede euismod tortor. Phasellus dictum. Cras neque justo, venenatis sit amet, tristique et, vulputate in, dui. Etiam sed mi gravida sapien imperdiet dictum. Aliquam gravida orci a tortor. Donec tempor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus risus ante, pellentesque vitae, luctus eget, scelerisque sed, libero. Donec massa. - -Donec libero mauris, volutpat at, convallis vel, laoreet euismod, augue. In accumsan malesuada risus. Mauris metus magna, condimentum in, nonummy non, ornare eu, velit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin posuere. Proin rhoncus rutrum lorem. Phasellus dignissim massa non libero volutpat tincidunt. In hac habitasse platea dictumst. Phasellus eget eros. Nulla in nulla. Vivamus quis mauris. Maecenas pharetra rhoncus tellus. Sed sit amet lacus. - -Quisque interdum felis a tellus. Aliquam sed diam ac velit aliquam rutrum. Morbi commodo, risus a pulvinar adipiscing, tortor pede posuere risus, ac ornare tellus massa nec lectus. Vivamus mollis metus ac sapien. Nam sed est a libero ullamcorper dapibus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean a erat ac nibh accumsan volutpat. Phasellus pulvinar consequat turpis. Curabitur ante metus, tempus ut, consequat eu, sollicitudin sit amet, justo. Duis ut libero. - -Հայերեն - -Lorem Ipsum-ը տպագրության և տպագրական արդյունաբերության համար նախատեսված մոդելային տեքստ է: Սկսած 1500-ականներից\` Lorem Ipsum-ը հանդիսացել է տպագրական արդյունաբերության ստանդարտ մոդելային տեքստ, ինչը մի անհայտ տպագրիչի կողմից տարբեր տառատեսակների օրինակների գիրք ստեղծելու ջանքերի արդյունք է: Այս տեքստը ոչ միայն կարողացել է գոյատևել հինգ դարաշրջան, այլև ներառվել է էլեկտրոնային տպագրության մեջ\` մնալով էապես անփոփոխ: Այն հայտնի է դարձել 1960-ականներին Lorem Ipsum բովանդակող Letraset էջերի թողարկման արդյունքում, իսկ ավելի ուշ համակարգչային տպագրության այնպիսի ծրագրերի թողարկման հետևանքով, ինչպիսին է Aldus PageMaker-ը, որը ներառում է Lorem Ipsum-ի տարատեսակներ: - -Български - -Lorem Ipsum е елементарен примерен текст, използван в печатарската и типографската индустрия. Lorem Ipsum е индустриален стандарт от около 1500 година, когато неизвестен печатар взема няколко печатарски букви и ги разбърква, за да напечата с тях книга с примерни шрифтове. Този начин не само е оцелял повече от 5 века, но е навлязъл и в публикуването на електронни издания като е запазен почти без промяна. Популяризиран е през 60те години на 20ти век със издаването на Letraset листи, съдържащи Lorem Ipsum пасажи, популярен е и в наши дни във софтуер за печатни издания като Aldus PageMaker, който включва различни версии на Lorem Ipsum. - -Català - -Lorem Ipsum és un text de farciment usat per la indústria de la tipografia i la impremta. Lorem Ipsum ha estat el text estàndard de la indústria des de l’any 1500, quan un impressor desconegut va fer servir una galerada de text i la va mesclar per crear un llibre de mostres tipogràfiques. No només ha sobreviscut cinc segles, sinó que ha fet el salt cap a la creació de tipus de lletra electrònics, romanent essencialment sense canvis. Es va popularitzar l’any 1960 amb el llançament de fulls Letraset que contenien passatges de Lorem Ipsum, i més recentment amb programari d’autoedició com Aldus Pagemaker que inclou versions de Lorem Ipsum. - -Hrvatski - -Lorem Ipsum je jednostavno probni tekst koji se koristi u tiskarskoj i slovoslagarskoj industriji. Lorem Ipsum postoji kao industrijski standard još od 16-og stoljeća, kada je nepoznati tiskar uzeo tiskarsku galiju slova i posložio ih da bi napravio knjigu s uzorkom tiska. Taj je tekst ne samo preživio pet stoljeća, već se i vinuo u svijet elektronskog slovoslagarstva, ostajući u suštini nepromijenjen. Postao je popularan tijekom 1960-ih s pojavom Letraset listova s odlomcima Lorem Ipsum-a, a u skorije vrijeme sa software-om za stolno izdavaštvo kao što je Aldus PageMaker koji također sadrži varijante Lorem Ipsum-a. - -Česky - -Lorem Ipsum je demonstrativní výplňový text používaný v tiskařském a knihařském průmyslu. Lorem Ipsum je považováno za standard v této oblasti už od začátku 16. století, kdy dnes neznámý tiskař vzal kusy textu a na jejich základě vytvořil speciální vzorovou knihu. Jeho odkaz nevydržel pouze pět století, on přežil i nástup elektronické sazby v podstatě beze změny. Nejvíce popularizováno bylo Lorem Ipsum v šedesátých letech 20. století, kdy byly vydávány speciální vzorníky s jeho pasážemi a později pak díky počítačovým DTP programům jako Aldus PageMaker. - -Româna - -Lorem Ipsum este pur şi simplu o machetă pentru text a industriei tipografice. Lorem Ipsum a fost macheta standard a industriei încă din secolul al XVI-lea, când un tipograf anonim a luat o planşetă de litere şi le-a amestecat pentru a crea o carte demonstrativă pentru literele respective. Nu doar că a supravieţuit timp de cinci secole, dar şi a facut saltul în tipografia electronică practic neschimbată. A fost popularizată în anii ’60 odată cu ieşirea colilor Letraset care conţineau pasaje Lorem Ipsum, iar mai recent, prin programele de publicare pentru calculator, ca Aldus PageMaker care includeau versiuni de Lorem Ipsum. - -Српски - -Lorem Ipsum је једноставно модел текста који се користи у штампарској и словослагачкој индустрији. Lorem ipsum је био стандард за модел текста још од 1500. године, када је непознати штампар узео кутију са словима и сложио их како би направио узорак књиге. Не само што је овај модел опстао пет векова, него је чак почео да се користи и у електронским медијима, непроменивши се. Популаризован је шездесетих година двадесетог века заједно са листовима летерсета који су садржали Lorem Ipsum пасусе, а данас са софтверским пакетом за прелом као што је Aldus PageMaker који је садржао Lorem Ipsum верзије. \ No newline at end of file diff --git a/_pages/markup-grid.md b/_pages/markup-grid.md deleted file mode 100644 index 7ebf0badbdd73..0000000000000 --- a/_pages/markup-grid.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Markup (grid view) -layout: tag -permalink: /tags/markup-grid/ -taxonomy: markup -entries_layout: grid ---- - -Sample post listing for the tag `markup`. diff --git a/_pages/markup.md b/_pages/markup.md deleted file mode 100644 index 147a719ae258a..0000000000000 --- a/_pages/markup.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Markup -layout: tag -permalink: /tags/markup/ -taxonomy: markup ---- - -Sample post listing for the tag `markup`. diff --git a/_pages/page-a.md b/_pages/page-a.md deleted file mode 100644 index 3083db24ad105..0000000000000 --- a/_pages/page-a.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Page A" -permalink: /page-a/ -date: 2011-06-23T18:38:52+00:00 ---- - -Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. \ No newline at end of file diff --git a/_pages/page-archive-grid.html b/_pages/page-archive-grid.html deleted file mode 100644 index 269dc2a164031..0000000000000 --- a/_pages/page-archive-grid.html +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: archive -title: "Page Archive" -permalink: /page-archive-grid/ -entries_layout: grid -author_profile: false ---- - -{% assign entries_layout = page.entries_layout | default: 'list' %} -
-
- {% for post in site.pages %} - {% include archive-single.html type=entries_layout %} - {% endfor %} -
-
diff --git a/_pages/page-archive.html b/_pages/page-archive.html deleted file mode 100644 index ce11172ed4899..0000000000000 --- a/_pages/page-archive.html +++ /dev/null @@ -1,10 +0,0 @@ ---- -layout: archive -title: "Page Archive" -permalink: /page-archive/ -author_profile: false ---- - -{% for post in site.pages %} - {% include archive-single.html %} -{% endfor %} diff --git a/_pages/page-b.md b/_pages/page-b.md deleted file mode 100644 index d15ce12289d98..0000000000000 --- a/_pages/page-b.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Page B" -permalink: /page-b/ -date: 2011-06-23T18:39:14+00:00 ---- - -(lorem ipsum) \ No newline at end of file diff --git a/_pages/portfolio-archive.md b/_pages/portfolio-archive.md deleted file mode 100644 index 019082f49185e..0000000000000 --- a/_pages/portfolio-archive.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Portfolio -layout: collection -permalink: /portfolio/ -collection: portfolio -entries_layout: grid -classes: wide ---- - -Sample document listing for the collection `_portfolio`. diff --git a/_pages/post-archive-feature-rows.html b/_pages/post-archive-feature-rows.html deleted file mode 100644 index 47cab558d9fda..0000000000000 --- a/_pages/post-archive-feature-rows.html +++ /dev/null @@ -1,59 +0,0 @@ ---- -layout: archive -title: "Post Archive with Feature Rows" -permalink: /post-archive-feature-rows/ -author_profile: true -feature_row: - - image_path: assets/images/unsplash-gallery-image-1-th.jpg - alt: "placeholder image 1" - title: "Placeholder 1" - excerpt: "This is some sample content that goes here with **Markdown** formatting." - - image_path: /assets/images/unsplash-gallery-image-2-th.jpg - alt: "placeholder image 2" - title: "Placeholder 2" - excerpt: "This is some sample content that goes here with **Markdown** formatting." - url: "#test-link" - btn_label: "Read More" - btn_class: "btn--primary" - - image_path: /assets/images/unsplash-gallery-image-3-th.jpg - title: "Placeholder 3" - excerpt: "This is some sample content that goes here with **Markdown** formatting." -feature_row2: - - image_path: /assets/images/unsplash-gallery-image-2-th.jpg - alt: "placeholder image 2" - title: "Placeholder Image Left Aligned" - excerpt: 'This is some sample content that goes here with **Markdown** formatting. Left aligned with `type="left"`' - url: "#test-link" - btn_label: "Read More" - btn_class: "btn--primary" -feature_row3: - - image_path: /assets/images/unsplash-gallery-image-2-th.jpg - alt: "placeholder image 2" - title: "Placeholder Image Right Aligned" - excerpt: 'This is some sample content that goes here with **Markdown** formatting. Right aligned with `type="right"`' - url: "#test-link" - btn_label: "Read More" - btn_class: "btn--primary" -feature_row4: - - image_path: /assets/images/unsplash-gallery-image-2-th.jpg - alt: "placeholder image 2" - title: "Placeholder Image Center Aligned" - excerpt: 'This is some sample content that goes here with **Markdown** formatting. Centered with `type="center"`' - url: "#test-link" - btn_label: "Read More" - btn_class: "btn--primary" ---- - -{% for post in site.posts limit: 5 %} - {% include archive-single.html %} -{% endfor %} - -{% include feature_row id="intro" type="center" %} - -{% include feature_row %} - -{% include feature_row id="feature_row2" type="left" %} - -{% include feature_row id="feature_row3" type="right" %} - -{% include feature_row id="feature_row4" type="center" %} \ No newline at end of file diff --git a/_pages/publications.md b/_pages/publications.md deleted file mode 100644 index a03ecc4f22ff3..0000000000000 --- a/_pages/publications.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: archive -title: "Publications" -permalink: /publications/ -author_profile: true ---- - -{% if site.author.googlescholar %} -
You can also find my articles on my Google Scholar profile.
-{% endif %} - -{% assign categories = site.publication_category %} - -{% for category in categories %} -

{{ category[1].title }}

-
    - {% for post in site.publications reversed %} - {% if post.category == category[0] %} - {% include archive-single.html %} - {% endif %} - {% endfor %} -
-{% endfor %} diff --git a/_pages/recipes-archive.md b/_pages/recipes-archive.md deleted file mode 100644 index cdde1e4e65943..0000000000000 --- a/_pages/recipes-archive.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: collection -title: "Recipes" -collection: recipes -permalink: /recipes-archive/ -author_profile: false ---- - -Sample document listing for the collection `_recipes`. \ No newline at end of file diff --git a/_pages/sample-page.md b/_pages/sample-page.md deleted file mode 100644 index 060e53b864c9e..0000000000000 --- a/_pages/sample-page.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "Sample Page" -permalink: /sample-page/ -date: 2016-02-24T03:02:20+00:00 ---- - -This is an example page. It's different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this: - -> Hi there! I'm a bike messenger by day, aspiring actor by night, and this is my website. I live in Los Angeles, have a great dog named Jack, and I like pi'a coladas. (And gettin' caught in the rain.) - -...or something like this: - -> The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community. - -You should probably delete this page and create new pages for your content. Have fun! \ No newline at end of file diff --git a/_pages/search.md b/_pages/search.md deleted file mode 100644 index 9a05649273fda..0000000000000 --- a/_pages/search.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Search -layout: search -permalink: /search/ ---- \ No newline at end of file diff --git a/_pages/sitemap.md b/_pages/sitemap.md deleted file mode 100644 index 24d4009dc9ff0..0000000000000 --- a/_pages/sitemap.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -layout: archive -title: "Sitemap" -permalink: /sitemap/ -author_profile: false ---- - -A list of all the posts and pages found on the site. For you robots out there is an [XML version]({{ '/sitemap.xml' | relative_url }}) available for digesting as well. - -

Pages

-{% for post in site.pages %} - {% include archive-single.html %} -{% endfor %} - -

Posts

-{% for post in site.posts %} - {% include archive-single.html %} -{% endfor %} - -{% capture written_label %}'None'{% endcapture %} - -{% for collection in site.collections %} -{% unless collection.output == false or collection.label == "posts" %} - {% capture label %}{{ collection.label }}{% endcapture %} - {% if label != written_label %} -

{{ label }}

- {% capture written_label %}{{ label }}{% endcapture %} - {% endif %} -{% endunless %} -{% for post in collection.docs %} - {% unless collection.output == false or collection.label == "posts" %} - {% include archive-single.html %} - {% endunless %} -{% endfor %} -{% endfor %} \ No newline at end of file diff --git a/_pages/splash-page.md b/_pages/splash-page.md deleted file mode 100644 index 81d56258cbfe0..0000000000000 --- a/_pages/splash-page.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: "Splash Page" -layout: splash -permalink: /splash-page/ -date: 2016-03-23T11:48:41-04:00 -header: - overlay_color: "#000" - overlay_filter: "0.5" - overlay_image: /assets/images/unsplash-image-1.jpg - actions: - - label: "Learn More" - url: "/terms/" - caption: "Photo credit: [**Unsplash**](https://unsplash.com)" -excerpt: "Bacon ipsum dolor sit amet salami ham hock ham, hamburger corned beef short ribs kielbasa biltong t-bone drumstick tri-tip tail sirloin pork chop." -intro: - - excerpt: 'Nullam suscipit et nam, tellus velit pellentesque at malesuada, enim eaque. Quis nulla, netus tempor in diam gravida tincidunt, *proin faucibus* voluptate felis id sollicitudin. Centered with `type="center"`' -feature_row: - - image_path: assets/images/unsplash-gallery-image-1-th.jpg - image_caption: "Image courtesy of [Unsplash](https://unsplash.com/)" - alt: "placeholder image 1" - title: "Placeholder 1" - excerpt: "This is some sample content that goes here with **Markdown** formatting." - - image_path: /assets/images/unsplash-gallery-image-2-th.jpg - alt: "placeholder image 2" - title: "Placeholder 2" - excerpt: "This is some sample content that goes here with **Markdown** formatting." - url: "#test-link" - btn_label: "Read More" - btn_class: "btn--primary" - - image_path: /assets/images/unsplash-gallery-image-3-th.jpg - title: "Placeholder 3" - excerpt: "This is some sample content that goes here with **Markdown** formatting." -feature_row2: - - image_path: /assets/images/unsplash-gallery-image-2-th.jpg - alt: "placeholder image 2" - title: "Placeholder Image Left Aligned" - excerpt: 'This is some sample content that goes here with **Markdown** formatting. Left aligned with `type="left"`' - url: "#test-link" - btn_label: "Read More" - btn_class: "btn--primary" -feature_row3: - - image_path: /assets/images/unsplash-gallery-image-2-th.jpg - alt: "placeholder image 2" - title: "Placeholder Image Right Aligned" - excerpt: 'This is some sample content that goes here with **Markdown** formatting. Right aligned with `type="right"`' - url: "#test-link" - btn_label: "Read More" - btn_class: "btn--primary" -feature_row4: - - image_path: /assets/images/unsplash-gallery-image-2-th.jpg - alt: "placeholder image 2" - title: "Placeholder Image Center Aligned" - excerpt: 'This is some sample content that goes here with **Markdown** formatting. Centered with `type="center"`' - url: "#test-link" - btn_label: "Read More" - btn_class: "btn--primary" ---- - -{% include feature_row id="intro" type="center" %} - -{% include feature_row %} - -{% include feature_row id="feature_row2" type="left" %} - -{% include feature_row id="feature_row3" type="right" %} - -{% include feature_row id="feature_row4" type="center" %} \ No newline at end of file diff --git a/_pages/tag-archive-grid.md b/_pages/tag-archive-grid.md deleted file mode 100644 index fa4df8137729d..0000000000000 --- a/_pages/tag-archive-grid.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Posts by Tag (grid view)" -permalink: /tags-grid/ -layout: tags -entries_layout: grid -author_profile: true ---- diff --git a/_pages/tag-archive.md b/_pages/tag-archive.md deleted file mode 100644 index 3f4e3f0df86c1..0000000000000 --- a/_pages/tag-archive.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Posts by Tag" -permalink: /tags/ -layout: tags -author_profile: true ---- diff --git a/_pages/teaching.md b/_pages/teaching.md deleted file mode 100644 index 57109fccbd457..0000000000000 --- a/_pages/teaching.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: archive -title: "Online Teaching Resources" -permalink: /teaching/ -author_profile: true ---- - -{% for textbook in site.online_textbooks %} -
-

- {{ textbook.title }} -

-

- {{ textbook.excerpt | markdownify | strip_html | truncate: 160 }} -

-
-{% endfor %} \ No newline at end of file diff --git a/_pages/terms.md b/_pages/terms.md deleted file mode 100644 index f07f96fe10db8..0000000000000 --- a/_pages/terms.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -permalink: /terms/ -title: "Terms and Privacy Policy" -last_modified_at: 2016-06-06 -toc: true ---- - -## Privacy Policy - -The privacy of my visitors is extremely important. This Privacy Policy outlines the types of personal information that is received and collected and how it is used. - -First and foremost, I will never share your email address or any other personal information to anyone without your direct consent. - -### Log Files - -Like many other websites, this site uses log files to help learn about when, from where, and how often traffic flows to this site. The information in these log files include: - -* Internet Protocol addresses (IP) -* Types of browser -* Internet Service Provider (ISP) -* Date and time stamp -* Referring and exit pages -* Number of clicks - -All of this information is not linked to anything that is personally identifiable. - -### Cookies and Web Beacons - -When you visit this site "convenience" cookies are stored on your computer when you submit a comment to help you log in faster to [Disqus](http://disqus.com) the next time you leave a comment. - -Third-party advertisers may also place and read cookies on your browser and/or use web beacons to collect information. This site has no access or control over these cookies. You should review the respective privacy policies on any and all third-party ad servers for more information regarding their practices and how to opt-out. - -If you wish to disable cookies, you may do so through your web browser options. Instructions for doing so can be found on the specific web browsers' websites. - -#### Google Analytics - -Google Analytics is a web analytics tool I use to help understand how visitors engage with this website. It reports website trends using cookies and web beacons without identifying individual visitors. You can read [Google Analytics Privacy Policy](http://www.google.com/analytics/learn/privacy.html). - -#### Google Adsense - -Google Adsense, a third party affiliate marketing network, uses cookies to help make sure I get a commission when you buy a product after clicking on a link or ad banner that takes you to the site of one of their merchants. You can read [Google Adsense Privacy Policy](http://support.google.com/adsense/bin/answer.py?hl=en&answer=48182). - -## Disclosure Policy - -I make money on this website through affiliate programs. If you click an affiliate link or ad banner and buy the product, you help support this website because I'll get a percentage of that sale. - -Currently I'm an affiliate for Amazon and Google Adsense. - -What this means for you: - -* I became an affiliate to earn revenue towards the costs of running and maintaining this website. Where I have direct control over which ads are served on this website I offer only products that are directly related to the topic of this website and products that a reader/subscriber would have a genuine interest in or need of. -* I do not and will not recommend a product just for the sake of making money. -* I do not let the compensation I receive influence the content, topics, posts, or opinions expressed on this website. -* I respect and value my readers too much to write anything other than my own genuine and objective opinions and advice. - -Just like this website, my Disclosure Policy is a work in progress. As the revenue streams evolve, so will this page. \ No newline at end of file diff --git a/_pages/year-archive-grid.md b/_pages/year-archive-grid.md deleted file mode 100644 index 5029212cd32d6..0000000000000 --- a/_pages/year-archive-grid.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Posts by Year (grid view)" -permalink: /year-archive-grid/ -layout: posts -entries_layout: grid -author_profile: true ---- diff --git a/_pages/year-archive.md b/_pages/year-archive.md deleted file mode 100644 index 1021452ad951a..0000000000000 --- a/_pages/year-archive.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Posts by Year" -permalink: /year-archive/ -layout: posts -author_profile: true ---- diff --git a/_plugins/epigraph.rb b/_plugins/epigraph.rb deleted file mode 100644 index a4a1b3c505d90..0000000000000 --- a/_plugins/epigraph.rb +++ /dev/null @@ -1,28 +0,0 @@ -## Liquid tag 'epigraph' used to add an epigraph -## in the main text area of the layout -## Usage {% epigraph 'text-body-of-epigraph' 'author-of-epigraph' 'citation-of-epigraph' %} -# -module Jekyll - class RenderEpigraphTag < Liquid::Tag - - require "shellwords" - - def initialize(tag_name, text, tokens) - super - @text = text.shellsplit - end - - def render(context) - if @text.size == 3 - "

#{@text[0]}

"+ - "
#{@text[1]} "+"#{@text[2]}
" - else - "

#{@text[0]}

"+ - "
#{@text[1]}
" - - end - end - end -end - -Liquid::Template.register_tag('epigraph', Jekyll::RenderEpigraphTag) diff --git a/_plugins/fullwidth.rb b/_plugins/fullwidth.rb deleted file mode 100755 index 16cd0b3f78558..0000000000000 --- a/_plugins/fullwidth.rb +++ /dev/null @@ -1,37 +0,0 @@ -## This has a fairly harmless hack that wraps the img tag in a div to prevent it from being -## wrapped in a paragraph tag instead, which would totally fuck things up layout-wise -## Usage {% fullwidth 'path/to/image' 'caption goes here in quotes' %} -# -module Jekyll - class RenderFullWidthTag < Liquid::Tag - - require "shellwords" - require "kramdown" - - def initialize(tag_name, text, tokens) - super - @text = text.shellsplit - end - - def render(context) - - # Gather settings - site = context.registers[:site] - converter = site.find_converter_instance(::Jekyll::Converters::Markdown) - - baseurl = context.registers[:site].config['baseurl'] - label = Kramdown::Document.new(@text[1],{remove_span_html_tags:true}).to_html # render markdown in caption - label = converter.convert(label).gsub(/<\/?p[^>]*>/, "").chomp # remove

tags from render output - - if @text[0].start_with?('http://', 'https://','//') - "

"+ - "
#{label}
" - else - "
"+ - "
#{label}
" - end - end - end -end - -Liquid::Template.register_tag('fullwidth', Jekyll::RenderFullWidthTag) diff --git a/_plugins/main_column_img.rb b/_plugins/main_column_img.rb deleted file mode 100755 index 2bf22a56b711f..0000000000000 --- a/_plugins/main_column_img.rb +++ /dev/null @@ -1,35 +0,0 @@ -## Liquid tag 'maincolumn-figure' used to add image data that fits within the -## main column area of the layout -## Usage {% maincolumn 'path/to/image' 'This is the caption' %} -# -module Jekyll - class RenderMainColumnTag < Liquid::Tag - - require "shellwords" - require "kramdown" - - def initialize(tag_name, text, tokens) - super - @text = text.shellsplit - end - - def render(context) - - # Gather settings - site = context.registers[:site] - converter = site.find_converter_instance(::Jekyll::Converters::Markdown) - - baseurl = context.registers[:site].config['baseurl'] - label = Kramdown::Document.new(@text[1],{remove_span_html_tags:true}).to_html # render markdown in caption - label = converter.convert(label).gsub(/<\/?p[^>]*>/, "").chomp # remove

tags from render output - - if @text[0].start_with?('http://', 'https://','//') - "

#{label}
" - else - "
#{label}
" - end - end - end -end - -Liquid::Template.register_tag('maincolumn', Jekyll::RenderMainColumnTag) diff --git a/_plugins/margin_figure.rb b/_plugins/margin_figure.rb deleted file mode 100755 index e94fbdda1c925..0000000000000 --- a/_plugins/margin_figure.rb +++ /dev/null @@ -1,30 +0,0 @@ -## Liquid tag 'marginfigure' used to add image data that fits -## in the right margin column area of the layout -## Usage {% marginfigure 'margin-id-whatever' 'path/to/image' 'This is the caption' %} -# -module Jekyll - class RenderMarginFigureTag < Liquid::Tag - - require "shellwords" - - def initialize(tag_name, text, tokens) - super - @text = text.shellsplit - end - - def render(context) - baseurl = context.registers[:site].config['baseurl'] - if @text[1].start_with?('http://', 'https://', '//') - ""+ - ""+ - "
#{@text[2]}
" - else - ""+ - ""+ - "
#{@text[2]}
" - end - end - end -end - -Liquid::Template.register_tag('marginfigure', Jekyll::RenderMarginFigureTag) diff --git a/_plugins/marginnote.rb b/_plugins/marginnote.rb deleted file mode 100755 index 142eecc560c19..0000000000000 --- a/_plugins/marginnote.rb +++ /dev/null @@ -1,18 +0,0 @@ -module Jekyll - class RenderMarginNoteTag < Liquid::Tag - - require "shellwords" - - def initialize(tag_name, text, tokens) - super - @text = text.shellsplit - end - - def render(context) - "#{@text[1]} " - end - end -end - -Liquid::Template.register_tag('marginnote', Jekyll::RenderMarginNoteTag) - diff --git a/_plugins/mathjaxtag.rb b/_plugins/mathjaxtag.rb deleted file mode 100755 index c0d2202851b21..0000000000000 --- a/_plugins/mathjaxtag.rb +++ /dev/null @@ -1,27 +0,0 @@ -module Jekyll - class MathJaxBlockTag < Liquid::Tag - def render(context) - '
' - end - end -class MathJaxEndInlineTag < Liquid::Tag - def render(context) - '' - end - end -end - -Liquid::Template.register_tag('math', Jekyll::MathJaxBlockTag) -Liquid::Template.register_tag('m', Jekyll::MathJaxInlineTag) -Liquid::Template.register_tag('endmath', Jekyll::MathJaxEndBlockTag) -Liquid::Template.register_tag('em', Jekyll::MathJaxEndInlineTag) \ No newline at end of file diff --git a/_plugins/newthought.rb b/_plugins/newthought.rb deleted file mode 100755 index 95fb56e316173..0000000000000 --- a/_plugins/newthought.rb +++ /dev/null @@ -1,22 +0,0 @@ -## Newthought tag will render anything in the tag with small caps -## Usage {% newthought Your text string here} will render a span -## YOUR TEXT STRING HERE (sort of, you know, small caps) if you are using the tufte.css file - -module Jekyll - class RenderNewThoughtTag < Liquid::Tag - -require "shellwords" - - def initialize(tag_name, text, tokens) - super - @text = text.shellsplit - end - - - def render(context) - "#{@text[0]} " - end - end -end - -Liquid::Template.register_tag('newthought', Jekyll::RenderNewThoughtTag) \ No newline at end of file diff --git a/_plugins/sidenote.rb b/_plugins/sidenote.rb deleted file mode 100755 index 16a2b5d05f3d0..0000000000000 --- a/_plugins/sidenote.rb +++ /dev/null @@ -1,18 +0,0 @@ -module Jekyll - class RenderSideNoteTag < Liquid::Tag - - require "shellwords" - - def initialize(tag_name, text, tokens) - super - @text = text.shellsplit - end - - def render(context) - "#{@text[1]} " - end - end -end - -Liquid::Template.register_tag('sidenote', Jekyll::RenderSideNoteTag) - diff --git a/_posts/.DS_Store b/_posts/.DS_Store deleted file mode 100644 index 5008ddfcf53c0..0000000000000 Binary files a/_posts/.DS_Store and /dev/null differ diff --git a/_posts/2024-02-25-Improve-Internet.md b/_posts/2024-02-25-Improve-Internet.md deleted file mode 100644 index 6b1e646b3f5ed..0000000000000 --- a/_posts/2024-02-25-Improve-Internet.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: "Three major issues in today's consumer Internet" -date: 2024-02-10 22:33:30 -comments: true -categories: - - Social Networking - - Internet ---- - -{% newthought "Much of today's `free' or consumer internet" %} is built on three principles: - -1. **Involuntary user data exploitation**: Recent debates around generative AI have returned attention to this. - -2. **Novel manipulation of users by malicious actors through personal chat**: WhatsApp is used as a -political weapon to broadcast misinformation during elections, especially in developing economies. -It was central to disinformation campaigns during elections in Brazil -{% sidenote 'elaudio' 'El-Masri, Azza, Riedl, Martin J, and Woolley, Samuel. "Audio misinformation on WhatsApp: A case study from Lebanon." Harvard Kennedy School (HKS) Misinformation Review, 2022.' %}, -India{% sidenote 'banaji2019whatsapp' 'Banaji, Shakuntala, Bhat, Ramnath, Agarwal, Anushi, Passanha, Nihal, and Sadhana Pravin, Mukti. "WhatsApp vigilantes: An exploration of citizen reception and circulation of WhatsApp misinformation linked to mob violence in India." Department of Media and Communications, London School of Economics and Political Science, London, UK, 2019.' %}, and Lebanon{% sidenote 'recuero2021discursive' 'Recuero, Raquel, Soares, Felipe, and Vinhas, Otávio. "Discursive strategies for disinformation on WhatsApp and Twitter during the 2018 Brazilian presidential election." First Monday, 2021.' %}. - -3. **Social media companies incentivize poor online behaviors**: X and Reddit allow users to publish posts rapidly; some are insightful and informative while others lack taste, to put it mildly, leading to polarizing toxic content. - -# Proposal for new mechanics of online publication could ameliorate today's consumer internet - -I have been thinking a lot about the fundamental mechanics of online social platforms and how they -can be designed to be less exploitative/manipulative and offer more respectful experiences on the internet. -Specifically, I have been thinking about how publication should work on the internet and how this should be -facilitated by personal reflection. This would work better, in my opinion, than online public shaming/arguments -on comments threads of existing platforms. - -So, my idea is to re-imagine modern-day social media and personal messaging systems to introduce a new way -to publish that allows content publication/broadcasting only using content that exists within a chat in your inbox. -If this sounds unclear, think of having a button on WhatsApp or Gmail that converts a set of chat messages/emails/drafts between you and some friends into a blog or project proposal or white paper. In addition to human collaborations making the content appropriate for public sharing, an on-device AI agent (not on the cloud) enhancing/improving your pre-publication work, exposing biases in your thinking (think of this as an AI agent commenting in your GDocs). And then a button allows you to publish this content (or warns you against publishing). The on-device AI preserves privacy and recent developments show that LLMs can work on current personal computing hardware. A cloud-based agent could also be used for a second stage of monitoring; this would not violate user data privacy because the user's intent with posting is, after all, to have the data examined. - -I believe this introduction of some friction in the publication process that encourages reflection is one step towards driving individual users towards a society that's fairer and more respectful. - -# Some personal progress on making such a platform - -In this spirit, I spent some free time working on an inbox-to-publication platform using audio/speech as the communication modality. This choice was informed by my Indian heritage, where I feel spoken literacy is higher than written literacy which is being exploited as I mentioned earlier. [Click here to see an (out-of-date) demo](https://youtu.be/VbslBJX4Rfw?si=awveglcB-5oahR2C) of an iOS called Howler from 2022. - diff --git a/_posts/2024-09-28-spacestations.md b/_posts/2024-09-28-spacestations.md deleted file mode 100644 index 29a542888a0cf..0000000000000 --- a/_posts/2024-09-28-spacestations.md +++ /dev/null @@ -1,162 +0,0 @@ ---- -title: "Larger Space Stations" -date: 2024-10-10 22:33:30 -comments: true -categories: - - Large Space Stations - - Space Exploration ---- -# Capacity Comparison: 100-Person Space Station vs. ISS -## Known aspects of the ISS (or Data) -The volume of the ISS is: -- Total Pressurized Volume, $(V_{tot})_{ISS}$: $916 \,m^3$ -- Habitable Volume, $(V_{hab})_{ISS}$: $388 \,m^3$ - -This means about $42\%$ of the ISS's total volume is habitable. It typically hosts a: -- Standard crew, $n_{std}$ of $6$-$7$ astronauts. -- Maximum crew of,$n_{max}$ : Up to $13$ astronauts (short-term). - -Not sure when this will matter in my analysis but the ISS mass is $420,000 \, kg$. - - -```python -ISS_Pressurized_Volume = 916 #m^3 -ISS_Habitable_Volume = 388 #m^3 -ISS_min_crew = 6 #astronauts -ISS_max_crew = 13 #astronauts -max_volume_per_crew_ISS = ISS_Habitable_Volume/ISS_min_crew -min_volume_per_crew_ISS = ISS_Habitable_Volume/ISS_max_crew -ideal_volume_per_crew_ISS = ISS_Pressurized_Volume/ISS_min_crew -print("max volume per crew", max_volume_per_crew_ISS) -print("min volume per crew", min_volume_per_crew_ISS) -print("ideal volume per crew", ideal_volume_per_crew_ISS) -print("habitable percentage", 100*ISS_Habitable_Volume/ISS_Pressurized_Volume) -``` - - max volume per crew 64.66666666666667 - min volume per crew 29.846153846153847 - ideal volume per crew 152.66666666666666 - habitable percentage 42.35807860262009 - - -## Known aspects of Von Braun's Rotating Wheel Space Station -Wernher von Braun's [video](https://www.youtube.com/watch?v=5JJL8CUfF-o) says that a rotating wheel space station would: -- host 50 astronauts though [Wikipedia](https://en.wikipedia.org/wiki/Rotating_wheel_space_station#History) states 80 people. -- be a torus of 250 $ft$ (76 $m$) diameter. The video shows two decks (in most cases) which I assume is 6 $m$ height in total. Again wikipedia says 3 decks, but I will stick to two 6 $m$ decks for now. - -This implies that the distance from the center of the tube to the center of the torus is $R = 70/2 = 35 \, m$ and the minor radius of the tube is $r = 6/2 = 3 \, m$. The volume of this torus is then the station's total pressurized volume, which is given by: -$(V_{tot})_{vB} = 2 \pi^2 R r^2$ - -So, we can estimate the volume of the the von Braun space station as: -- Total Pressurized Volume: 916 $m^3$ -- Habitable Volume: 388 $m^3$ - - -```python -from math import pi -vb_wheel_dia = 70 #m -vb_wheel_height = 6 #m - -vb_wheel_Pressurized_Volume = 2 * pi**2 * (vb_wheel_dia/2) * (vb_wheel_height/2)**2 #m^3 -habitable_factor_ISS = ISS_Habitable_Volume/ISS_Pressurized_Volume -habitable_factor_targeted = 0.6 -vb_wheel_Habitable_Volume = vb_wheel_Pressurized_Volume * habitable_factor_targeted #m^3 - -vb_wheel_std_crew = 50 #astronauts -vb_wheel_max_crew = 100 #astronauts -max_volume_per_crew_vb = vb_wheel_Habitable_Volume/vb_wheel_std_crew -min_volume_per_crew_vb = vb_wheel_Habitable_Volume/vb_wheel_max_crew -ideal_volume_per_crew_vb = vb_wheel_Pressurized_Volume/vb_wheel_std_crew -print("vb_wheel_Pressurized_Volume", vb_wheel_Pressurized_Volume) -print("max volume per crew", max_volume_per_crew_vb) -print("min volume per crew", min_volume_per_crew_vb) -print("ideal volume per crew", ideal_volume_per_crew_vb) -``` - - vb_wheel_Pressurized_Volume 6217.850772686295 - max volume per crew 74.61420927223554 - min volume per crew 37.30710463611777 - ideal volume per crew 124.35701545372591 - - - -```python -habitable_ratios = vb_wheel_Habitable_Volume/ISS_Habitable_Volume -Pressurized_ratios = vb_wheel_Pressurized_Volume/ISS_Pressurized_Volume -print("habitable_ratios", habitable_ratios) -print("Pressurized_ratios", Pressurized_ratios) -``` - - habitable_ratios 9.6152331536386 - Pressurized_ratios 6.788046695072375 - - -### Question: How can we double the total volume of the von Braun wheel? -To double the wheel's pressurized volume to 12435.7 $m^3$, one option is to increase the tube's height to 8.48 $m$. - - -```python -from math import sqrt -vb_wheel_height_for_doubled_volume = 6 * sqrt(2) #m -vb_wheel_Pressurized_Volume_doubled = 2 * pi**2 * (vb_wheel_dia/2) * (vb_wheel_height_for_doubled_volume/2)**2 #m^3 -print("doubled vb_wheel_Pressurized_Volume", vb_wheel_Pressurized_Volume_doubled, "when tube dia is", vb_wheel_height_for_doubled_volume) -``` - - doubled vb_wheel_Pressurized_Volume 12435.701545372594 when tube dia is 8.485281374238571 - - -The other option is to increase the torus's diameter altogether, which we discuss later. - -### Question: Are there reasons to increase the radius of the wheel as opposed to the height of the tube? -One benefit might be that you need to rotate the tube slower to generate artificial gravity. - - -```python -vb_wheel_radius = vb_wheel_dia / 2 -earth_g = 9.81 #m/s^2 -rot_speed_vb = sqrt(1/3*earth_g/vb_wheel_radius) -print("rot speed of von Braun wheel to generate a third of Earth g is", rot_speed_vb, "rad/s or", rot_speed_vb/0.10472, "RPM") -``` - - rot speed of von Braun wheel to generate a third of Earth g is 0.30566087650952556 rad/s or 2.918839538861016 RPM - - -Comparing my calculations to [2001: A Space Odyssey's Space Staiton V](https://youtu.be/im-JM0f_J7s?t=136) - - -```python -SSV_wheel_radius = 150 #m -moon_g = 1.655 #m/s^2 -rot_speed_SSV_for_moon_g = sqrt(moon_g/SSV_wheel_radius) -print("2001's wheel generates Moon's gravity by rotating at", rot_speed_SSV_for_moon_g, "rad/s or", rot_speed_SSV_for_moon_g/0.10472, "RPM") -rot_speed_SSV_for_earth_g = sqrt(1/3*earth_g/SSV_wheel_radius) -print("2001's wheel generates third of Earth's gravity by rotating at", rot_speed_SSV_for_earth_g, "rad/s or", rot_speed_SSV_for_earth_g/0.10472, "RPM") -rot_speed_SSV_for_earth_g = sqrt(earth_g/SSV_wheel_radius) -print("2001's wheel generates third of Earth's gravity by rotating at", rot_speed_SSV_for_earth_g, "rad/s or", rot_speed_SSV_for_earth_g/0.10472, "RPM") -``` - - 2001's wheel generates Moon's gravity by rotating at 0.10503967504392488 rad/s or 1.003052664666968 RPM - 2001's wheel generates third of Earth's gravity by rotating at 0.147648230602334 rad/s or 1.4099334473102942 RPM - 2001's wheel generates third of Earth's gravity by rotating at 0.25573423705088844 rad/s or 2.442076366032166 RPM - - -This shows that lower spin rates (needed to prevent motion sickness and acceleration differentials between that push blood to the feet) result in accelerations closer to Earth's but are achievable only with structures larger in diameter than the von Braun wheel. But building larger structures carries the benefit of more pressurized volumes; Space Station V is a little over 4 times the volume of the von Braun wheel and 29 times the ISS. - - -```python -SSV_Pressurized_Volume = 2 * pi**2 * (SSV_wheel_radius) * (vb_wheel_height/2)**2 #m^3 -print("SSV volume is", SSV_Pressurized_Volume/vb_wheel_Pressurized_Volume, "time the von Braun wheel's and", SSV_Pressurized_Volume/ISS_Pressurized_Volume, "times that of ISS.") -``` - - SSV volume is 4.285714285714286 time the von Braun wheel's and 29.09162869316732 times that of ISS. - - -SSV volume is 4.285714285714286 time the von Braun wheel's and 29.09162869316732 times that of ISS. - -## So how can we get to this in one launch- that's the question! -Are inflatables the answer....? - - -```python - -``` diff --git a/_posts/2024-09-29-vonBraunWheels.md b/_posts/2024-09-29-vonBraunWheels.md deleted file mode 100644 index a706b84f1e0bb..0000000000000 --- a/_posts/2024-09-29-vonBraunWheels.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: "Some Space Stations in Fiction and Reality" -date: 2024-09-29 14:30:00 -comments: true -categories: - - Large Space Stations - - Space Exploration ---- -{% newthought "An earlier post in my teaching resources for" %} a final -year undergraduate project had a pretty helpful -AI-generated{%sidenote 'thankclaude' 'thanks to [Claude](claude.ai)'%} -[table](https://www.angadhn.com/online_textbooks/UG_final_year_project/#large-space-stations-modular-or-monolithic). -This is a quick post about Wernher von Braun's 1950's -[conceptual rotating wheel station](https://www.youtube.com/watch?v=5JJL8CUfF-o) with some basic comparisons -to the ISS (1998-present) and 1968's Space Station V from 2001: A Space -Odyssey{%sidenote 'spaceOdyssey' 'Watch this as homework!'%}. - -## Von Braun's Rotating Wheel Space Station -Wernher von Braun's [video](https://www.youtube.com/watch?v=5JJL8CUfF-o) envisioned a rotating wheel -space station with 9 sections for: -1. Headquarters and Communications -2. Earth Weather Observation/Prediction -3. Military Reconnaissance using Optical and Radar Telescopes -4. Emergency Hospital Section -5. Astronomy -6. Calculation Machines and a lower/outer deck with maintenance facilities -7. A/C equipment -8. Living quarters -9. Botanical and Zoological Laboratory -The video shows two decks per section, which I assume is 6 $m$ in heigh (i.e. the habitable portion between the -outer rim and inner rim). Wikipedia says the concept had 3 decks but as I haven't looked that up, I will stick to two -6 $m$ decks for now. - -The system is powered by an atomic reactor attached on one side of its central hub; its heat will drive a -turbo generator to power the station. Radio and radar antennas sit atop the reactor. The other side of the hub has -an airlock for astronauts to access/exit the space station via smaller spacecraft. Like a bicycle wheel, the system -had thin spokes are condensers for the turbo generator and air-conditioning plant. Three larger tubes are elevator -shafts that connect the hub to the main habitable sections of the wheel station. The station would: -- host 50 astronauts though [Wikipedia](https://en.wikipedia.org/wiki/Rotating_wheel_space_station#History) states 80 people. -- rotate at roughly 3 rpm to produce artificial gravity on the rim; and -- be a torus of 250 $ft$ (76 $m$) diameter. The distance from the center of the tube to the center of the torus is $R = 70/2 = 35 \, m$ and the minor radius of the tube is $r = 6/2 = 3 \, m$. The volume of this torus is then the station's total pressurized volume, which is given by $$(V_{tot})_{vB} = 2 {\pi^2} R {r^2}$$. - -So, we can estimate that the von Braun space station has a: -- Total Pressurized Volume: = 6217.85 $m^3$ -- Habitable Volume = 3730.71 $m^3$ - -Here, I assumed that 60% of the pressurized volume is habitable. This is a considerably more optimistic percentage -compared to the 42% of ISS. - -### How did von Braun imagine its realisation? -{% marginfigure 'mf-id-1' 'assets/imgs/AssemblyOfRim.png' 'Assembly of the Modular Rotating Wheel Space Station.' %} -{% marginfigure 'mf-id-2' 'assets/imgs/CondenserPipesInstallation.png' 'Condenser pipes being unwound for installation.' %} - -The short-version is that he assumed predominantly modular robotic assembly and a minor reliance on inflatables -for the airlock. First, the hub is inflated using compressed air from built-in tanks. Protection from meteors -is ensured by putting thin metal plates; this is unnecessary today as we have developed high-strength textiles -that are used on inflatable space stations. A second launch brings with it an airlock, which is again attached -by robots; this allows the pressurized hub to be used as a temporary quarters as the station assembly continues -with astronaut-robot teams. -Pre-fabricated and tested on the ground after which it is dismantled and assembled robotically in-orbit. -A number successive launches (he says) ensure the "parts of the station are assembled in the correct order". -Nylon tethers prevent parts from drifting away. The reactor appears to be the next big piece that is installed -so I assume this is the third launch. This is followed by the elevator shafts and the rim sections being brought -together. We can assume a single launch for each module: $3$ elevator tubes and 9 rim modules (assuming one per -section). Assuming condenser pipes are installed from one launch (but the structure itself needs to be unwound robotically, which seems unreasonable/unreal at the moment as a robotic task. - - -Lastly, the installation of instruments/equipment (a simple catch-all term for imaging antennas and -the lab facilities compute for astronomical/Earth Observation data analysis, I think) and two small -rocket motors on the rim. These rocket motors "blast for a few seconds" to revolve the station at about -$3 \, RPM$. - -## Comparing to ISS and Space Station V (2001: A Space Odyssey) -{% marginnote 'table-1-id' '*Table 1*: Comparing the ISS to fictional ideas.' %} - -| | ISS | von Braun | Space Station V | -| -------------------------------------------- | ------ | ---------------------- | --------------- | -| crew size (# of astronauts) | 7-13 | 50-80 | 2 | -| diameter of the station (m) | n/a | 75 | 300 | -| total volume $m^3$ | 916 | 6217.85 | 26647.93 | -| habitable % | 42.35% | 60% (assumed) | ? | -| Max. volume per crew $(\frac{m^3}{person})$ | 64.66 | 52.67 assuming 50 crew | 13223.46 | -| Rotational speed for artificial gravity (RPM)| - | 3 | 2.44 | -| Gravity on-board ($m/s^2$) | - | 1.655 | 9.81 | - -## Some gaps in von Braun design -1. Assumes a launch every 24 hours- not close to it then and not really close to that kind of cadence today. What could we do today? -2. Doesn't really say how many launches are needed to realize assembly in the video. This can probably be found elsewhere but my estimate from watching the video is 15-18 launches. -3. The process involves a number of assembly robots but we barely have one of these today. And whatever is there not autonomous. -4. Materials used in assembly are unknown. -5. Telescope sizes for reconnaisance and astronomy are unknown. -6. Power requirements are unknown. -7. What else? diff --git a/_posts/2025-05-26-Vipassana-1.md b/_posts/2025-05-26-Vipassana-1.md deleted file mode 100644 index 3769e30406bd9..0000000000000 --- a/_posts/2025-05-26-Vipassana-1.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "The Subtle Art of Vipassana" -date: 2025-03-01 22:33:30 -categories: - - Habits ---- - -{% epigraph 'If you can dream—and not make dreams your master;
-If you can think—and not make thoughts your aim;
-If you can meet with Triumph and Disaster
-And treat those two impostors just the same;' 'Rudyard Kipling' 'Rewards and Fairies (1910)' %} - -{% newthought "On the day after"%} my return diff --git a/_posts/2025-10-06-space-inflatables-1.md b/_posts/2025-10-06-space-inflatables-1.md deleted file mode 100644 index c81c1b2800853..0000000000000 --- a/_posts/2025-10-06-space-inflatables-1.md +++ /dev/null @@ -1,209 +0,0 @@ ---- -title: "Inflatable von Braun space stations: an idea worth revisiting?" -date: 2024-10-06 21:04:59 -comments: true -categories: - - Large Space Stations - - Space Exploration ---- - -## Background -Kepler's [Somnium](https://en.wikipedia.org/wiki/Somnium_(novel)){% sidenote -`somnium` "At the time of my writing this post, his sci-fi story was -archived [here](https://frostydrew.org/papers.dc/papers/paper-somnium)"%} -in 1608 and [Edward Everett Hale](https://en.wikipedia.org/wiki/Edward_Everett_Hale)'s -[Brick Moon](https://en.wikipedia.org/wiki/Brick_Moon) [^a] -from 1865 are -early fantasy science-fiction of space-faring humans. Kepler -faced more flak than fanfare for his work{% sidenote 'flak' "Kepler's mom was put on -[trial](https://thonyc.wordpress.com/2014/07/30/johannes-keplers-somnium-and-katharina-keplers-trial-for-witchcraft-the-emergence-of-a-myth/) -for witchcraft with some connections to Somnium. -Also credit for the link where it's [due](https://skullsinthestars.com/2018/02/23/somnium-by-johannes-kepler/)." %} -but I was especially surprised to learn about his use of creative writing -as a force for exploring ideas around space-faring and -extra-terrestrial civilisations. His scientific work in astronomy influenced -Newton and others indicating an enduring impact on science, engineering, and human -civilisation stemming from a curiosity about the motion of stars. -It suffices to say that space habitation has occupied us from a fictional -and scientific lens for some time now. - -Today's technocultural space community of thinkers has conjured or -realised astonishing visions like the Apollo program and reusable rockets in -the $20^{th}$ and $21^{st}$ centuries. The technical community no longer -battles claims of heresy but politics, as if fighting to overcome the limits -of physics isn't hard enough. Bureaucratic operators seek short-term -justifications for projects and hinder progress towards sci-fi realities -of large scale space travel and habitation{% sidenote 'inflatables-2' "not so for -space data services, -as satellites have been miniaturised, commodified, and productised out of the hands -of governments."%}, branding these pursuits as potentially irresponsible to justify with -taxpayer money. Governments want to solve the flat-lining productivity problem{% sidenote -"UKproductivity" "I believe such investment justifies technical education which -then creates skilled populations- some of whom work on new visions that generate -jobs and others work in these jobs or enter the existing labour market. I can't -definitively prove this, of course, but it feels to me a pathway to solving -the [UK's productivity puzzle](https://www.ons.gov.uk/employmentandlabourmarket/peopleinwork/labourproductivity/articles/whatistheproductivitypuzzle/2015-07-07)." %} -but want to do so without investing in visions of a limitlessly abundant future. -Meanwhile, private investors want rapid returns on investment while making -bold claims, like wanting flying cars but getting $140$ characters, extending the -participation in space progress to mostly the superwealthy. - -From hereon, this post will focus on the radical notion of space -superstructures, such as rotating wheel space stations, that expand our -presence in various Earth orbits and then extend our reach to go deeper into space. The -post mostly argues for a focus on developing inflatable technologies to -realise these structures in the near-term but it is possible that this is -too ambitious a goal. Note that other options for realising space superstructures -(e.g., robots) are not really considered here but are generally important. Along -the way, readers may find claims that explain why supporting the development -of space superstructures in the near-term is potentially valuable and socially -relevant. - -## The vision -Simply put, the vision I am putting forward is of deploying monolithic -space stations with crew capacities of at least $100$ astronauts, i.e., -$>10x$ the ISS's typical crew size; I call this the Hundred Person Habitat (HPH). -To date, no station has offered an order of magnitude increase on its -predecessors and none are in the pipeline{% sidenote 'inflatables-3' "The -in-development Lunar Gateway will operate at an orbit further to the -International Space Station (ISS) with a crew of 4. See table -[here](https://www.angadhn.com/online_textbooks/UG_final_year_project/#large-space-stations-modular-or-monolithic)"%}. -Assuming that a pressurized volume $>20x$ of the ISS gives each crew member a -hypothetical $\approx 200\,m^3$ of volume though, in practice, the habitable portion is -roughly identical to the space occupied by on-board equipment/instruments -for experiments and life support. The station will be a toroid and thus -conceptually resembles von Braun's{% sidenote 'potocnik' -"He was apparently inspired by Herman Potočnik's $30\,m$ ring-shaped habitat -described in [*The Problem of Space Travel*](https://books.google.co.uk/books/about/The_Problem_of_Space_Travel.html?id=6m0bCwAAQBAJ&redir_esc=y)" -at GEO over Berlin.%} rotating wheel station. The below table -compares the HPH to the ISS and von Braun station: - -| Parameters | ISS | von Braun wheel | Hundred person Habitat | -| -------------------------------------------- | ------ | ---------------------- | ---------------------- | -| crew size (# of astronauts) | 7-13 | 50-80 | 100 | -| diameter of the station (m) | n/a | 75 | ~75 | -| total volume $m^3$ | 916 | 6217.85 | 20x of ISS | -| habitable % | 42.35% | 60% (assumed) | ? | -| Max. volume per crew $(\frac{m^3}{person})$ | 64.66 | 52.67 assuming 50 crew | 183.20 | -| Rotational speed for artificial gravity (RPM)| - | 3 | 3 | -| Gravity on-board ($m/s^2$) | - | 1.655 | 1.655 | - -As opposed to von Braun's imagined multi-launch architecture, I am -imposing{% sidenote 'notproposing' 'Not proposing!'%} that this identically sized structure be achievable from a -single rocket launch by exploiting an idea as old -as NASA itself: using an inflatable -tube structure. - -## Inflatable tubular space stations: a counterintuitive idea -{% maincolumn 'assets/imgs/Goodyear1961.JPG' "Testing of an inlatable -space habitat prototype by Goodyear in 1961." %} - -In 1961, Goodyear Aircraft Corporation prototyped an inflatable tube -space station (see above) called the Erectable Torus Manned Space -Laboratory{% sidenote 'airlocks' "Around the same time, the Soviets -were developing inflatable airlocks; a more modestly sized appendage -to spacecraft that allows astronauts to move between a pressurized -spacecraft and the vacuum of space." %}. The idea never made it to -flight due to concerns that the soft materials it was made from{% sidenote -'goodyear-materials' 'three-ply nylon cords, held together by butyl elastomer.'%} -weren’t strong enough to withstand micrometeoroid collisions. -Nonetheless, this was an early example of a monolithic space station; -a tenth of von Braun's wheel station that could be packaged to $2\%$ -of its inflated volume (another cool image below). - -{% maincolumn 'assets/imgs/LittekenPaper_GoodYear.png' " -[Litteken's paper on space inflatables](https://ntrs.nasa.gov/api/citations/20190001443/downloads/20190001443.pdf) -has this really nice image of GoodYear's inital testing taken from James Hansen's -[_Spacefligth Revolution_](https://www.nasa.gov/wp-content/uploads/2023/04/sp-4308.pdf). -One can see James Webb underneath the full size inflated station; the images on the -left show the packaged tube structure." %} - -A long lull on habitable space inflatables followed -until NASA's TransHab program (1997) which developed -high strength materials capable of withstanding collisions with -micrometeoroids and orbital debris (MMOD). TransHab inspired -a cylindrical inflatable ISS module ($13\,ft$ in length and $10\,ft$ -in diameter)- BEAM (Bigelow Expandable Activity Module)- in -operation since 2016. The period between the GoodYear and TransHab -inflatable space stations laid the foundations for today's dominant -design of rigid space stations. In my eyes, this is a classic example -of where simpler elegant solutions were traded in for ones that are more -complex when we think about scale. For example, monolithic rigid stations were -followed by the modular ones, like the ISS, that have required in-space -assembly, mostly by astronauts, or propellant-intensive rendezvous -and docking manoeuvres. Building on this, most future scalable designs I have seen -purport the idea of robotic assembly. My recent learnings on inflatables suggest -that the same outcome might be realised by a simpler single inflatable system though -the development process will be less straightforward. The decision to focus -only on rigid stations/modules for several decades has made these inflatable -solutions a forgotten one; it appears that we threw out the baby with the bathwater. - -When I suggest this idea to people today, it seems a counterintuitive and -potentially outrageous solution that exposes biases in thinking- even amongst -experts who are, after all, only human. Firstly, there's a widespread belief -that inflatable structures are less safe due to the risk of MMOD collisions. -The incorrect analogy of balloons bursting is often mistakenly applied but -modern designs incorporate multiple layers of high-strength materials that are -remarkably resistant to punctures and could even self-heal. In fact, their -flexibility could make them more resilient than rigid structures. Secondly, -prevalence of robotics in automating human tasks has led to an assumption -that the same approach is optimal everywhere: we see robots building cars -and assume they should build space stations. But space presents unique -challenges where simplicity is paramount. Inflatable structures have minimal -mechanical complexity, reduce failure points, and simplify construction. -Moreover, our terrestrial experience doesn't include living in inflatable -habitats, making it non-obvious as a space solution. We're accustomed to rigid -structures so cannot envision lightweight, expandable living spaces as -a viable alternative. Yet, in the vacuum of space, these structures -provide vast habitable areas with superior radiation shielding and -thermal management. This insight has profound implications for future -space missions. By embracing inflatable technologies, we can -dramatically reduce launch costs, simplify construction processes, -and create larger, more versatile space habitats than ever before. -It's a reminder that in space engineering, sometimes the most effective -solutions are those that challenge our Earth-biased intuitions. - -## Why is now a good time to return to inflatable space structures? -There are probably many more reasons than I describe below as to why -now{% sidenote 'robotics1' -"Unlike was done with inflatables, we should maintain/increase support to -mature in-space robotic assembly and maintenance technology development -as I imagine that at even larger scales, a reliance on robots is inevitable."%} -is a good time to revisit the GoodYear inflatable station idea{% sidenote 'robotics2' "In fact, -such stations are just one application of inflatable -technologies I see. They could totally transform space robotics by using pneumatic actuation -for orbital applications thus eliminating the need for radiation-hardened components like -joint motors- a pretty massive bottleneck in the development of space robotics."%}. - -The first has to do with the emerging promise of Starship, which is seeing frequent impressive -tests. In contrast, when GoodYear was developing its concept, the -[Saturn V](https://www.google.com/search?q=saturn+v+development+year) -was still in early development and the GoodYear project might have been easy to kill; I imagine -the Moon missions would have also led to a reallocation of resources and -focus. Second, the impending retirement of the ISS means there is a window -(or even a need) for a successor with a larger volume for both crew sizes -and science output. Third, there will be eventually be more commercial users of a large -inflatable orbital volume than space agencies; in-space manufacturing -companies like Varda could use these stations to scale their drug manufacturing, -with the beneficiaries being patients on Earth. Other avenues here are for materials -science research and protein crystal growth (not my domain of expertise at all). -If in-space semiconductor manufacturing in microgravity becomes a thing, then -larger inflatable volumes would, again, answer the question of scaling. -Similarly, sci-fi outcomes such as at-scale 3-D printing artificial organs -would benefit those in need of hearts and lungs- demands that are not being met -by the donor organ market. - -All of which is even before we consider making these -stations rotate to produce an artificial gravity enabling safer long-haul -journeys for astronaut crews -heading to Mars or other locations away from the Earth{% sidenote 'hansen' "I am -currently reading James Hansen's -[_Spacefligth Revolution_](https://www.nasa.gov/wp-content/uploads/2023/04/sp-4308.pdf) that should -help me a deeper perspective on inflatable space stations. Fun fact: another of his books was adapted into -[First Man](https://en.wikipedia.org/wiki/First_Man_(film)) with Ryan Gosling playing Neil Armstrong."%}. - - - - -## Notes -[^a]: I've only read a summary of Brick Moon, a story of workers building a 200-foot sphere that are accidentally launched into space to become first inhabitants of space. The moon was to serve as a navigational aid for sailors. It also estimates a cost for the construction at ${\$}250k$ using $12$ million bricks. \ No newline at end of file diff --git a/_posts/2025-10-06-space-inflatables-2.md b/_posts/2025-10-06-space-inflatables-2.md deleted file mode 100644 index ee9d53f4f3bb3..0000000000000 --- a/_posts/2025-10-06-space-inflatables-2.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: "Inflatable 'bicycle tubes' to make von Braun Space Stations: a bygone idea worth revisiting?" -date: 2025-10-06 23:59:59 -comments: true -categories: - - Large Space Stations - - Space Exploration ---- - - - - - - \ No newline at end of file diff --git a/_posts/2060-04-13-EdgeCase.md b/_posts/2060-04-13-EdgeCase.md deleted file mode 100755 index a041cde3a277b..0000000000000 --- a/_posts/2060-04-13-EdgeCase.md +++ /dev/null @@ -1,172 +0,0 @@ ---- -title: "Edge Cases" -date: 2060-04-13 17:04:01 -mathjax: true -tags: - - cool posts - - category1 - - category2 ---- -Some edge cases and cautionary examples on using Markdown for writing content using this theme. In particular, list syntax can really knot things up. - - -### Mathjax improperly parsing greater and less than and ampersands inside blocks - -The mathjax HTML `````` scripts have been modified to properly render block style mathjax expressions inside a ```$$ ... $$``` set of character pairs, -using the standard Kramdown parser. Some examples sent to me by Quxiaofeng are now parsing correctly, I believe. - -This code: - -```latex -$$ - D = \left(\begin{matrix} - 1 & -1 & & & & \\ - & & \cdots & & \\ - & & & 1 & -1 - \end{matrix} - \right) -$$ -``` -yields this: - -$$ -D = \left(\begin{matrix} - 1 & -1 & & & & \\ - & & \cdots & & \\ - & & & 1 & -1 -\end{matrix} -\right) -$$ - -Other examples from the [wikia Tex reference](http://latex.wikia.com/wiki/Matrix_environments): - -$$ -\begin{matrix} -\alpha& \beta^{*}\\ -\gamma^{*}& \delta -\end{matrix} -$$ - - -$$ -\begin{bmatrix} -\alpha& \beta^{*}\\ -\gamma^{*}& \delta -\end{bmatrix} -$$ - -$$ -\begin{Bmatrix} -\alpha& \beta^{*}\\ -\gamma^{*}& \delta -\end{Bmatrix} -$$ - -$$ -\begin{vmatrix} -\alpha& \beta^{*}\\ -\gamma^{*}& \delta -\end{vmatrix} -$$ - -$$ -\begin{Vmatrix} -\alpha& \beta^{*}\\ -\gamma^{*}& \delta -\end{Vmatrix} -$$ - -$$ -\begin{Vmatrix} -\alpha& \beta^{*}\\ -\gamma^{*}& \delta -\end{Vmatrix} -$$ - -However, a problem still exists for inline matrix notation, from an example [here](https://en.wikibooks.org/wiki/LaTeX/Mathematics#Matrices_in_running_text): - -A matrix in text must be set smaller: $$ \bigl(\begin{smallmatrix}a & b \\ c & d\end{smallmatrix} \bigr) $$ to not increase leading in a portion of text. The way this inline matrix is written is: ```$$ \bigl(\begin{smallmatrix}a & b \\ c & d\end{smallmatrix} \bigr) $$``` - -## Edge Case 1 from Quxiaofeng: - -### No blank lines between Markdown list items - -The issue arises when sidenotes and marginnotes are put into list items. As mentioned in the main documentation page, lists can be problematic not only for semantic clarity, but also because they can creating formatting issues. For example: - -### Related algorithms - -+ Split Bregman iteration {% sidenote 1 'Goldstein, T. and Osher, S. (2009). The split Bregman method for l1-regularized problems. SIAM J. Img. Sci., 2:323-343.' %} -+ Dykstra's alternating projection algorithm {% sidenote 2 'Dykstra, R. L. (1983). An algorithm for restricted least squares regression. J. Amer. Statist. Assoc., 78(384):837-842.' %} -+ Proximal point algorithm applied to the dual -+ Numerous applications in statistics and machine learning: lasso, gen. lasso, graphical lasso, (overlapping) group lasso, ... -+ Embraces distributed computing for big data {% sidenote 3 'Boyd, S., Parikh, N., Chu, E., Peleato, B., and Eckstein, J. (2011). Distributed optimization and statistical learning via the alternating direction method of multipliers. Found. Trends Mach. learn., 3(1):1-122.' %} - -### Why this matters - -Notice how the sidenotes display properly, but the fact that sidenotes have more display 'volume' than the list items themselves causes a horizontal mismatch between the sidenote item's number and its corresponding list item. - -Please note that there must be *no blank lines between your list items*. This is due to a really strange thing about the Jekyll Markdown engine I have never noticed before. If you have a list, and you put a blank line between the items like this: - -``` - + list item 1 - - + list item 2 -``` - -It will create an html tag structure like this: - -``` -
    -
  • -

    list item 1

    -
  • -
  • -

    list item 2

    -
  • -
-``` -Which *totally* goofs up the layout CSS. - -However, if your Markdown is this: - -``` - + list item 1 - + list item 2 -``` - -It will create a tag structure like this: - -``` -
    -
  • list item 1
  • -
  • list item 2
  • -
-``` - -Here is the same content as above, with a blank line separating the list items. Notice how the sidenotes get squashed into the main content area: - - -### Remarks on ADMM version 2 - **one blank line** between Markdown list items - -Related algorithms - -+ Split Bregman iteration {% sidenote 1 'Goldstein, T. and Osher, S. (2009). The split Bregman method for l1-regularized problems. SIAM J. Img. Sci., 2:323-343.' %} - -+ Dykstra's alternating projection algorithm {% sidenote 2 'Dykstra, R. L. (1983). An algorithm for restricted least squares regression. J. Amer. Statist. Assoc., 78(384):837-842.' %} - -+ Proximal point algorithm applied to the dual - -+ Numerous applications in statistics and machine learning: lasso, gen. lasso, graphical lasso, (overlapping) group lasso, ... -
-
-
-
- -### Liquid tag parsing strangeness - -Example of the proper way to write an url inside a *Liquid* full-width image tag. - -This code: ```{{ '{% fullwidth "assets/imgs/rhino.png" "Tuftes pet rhino (via Edward Tufte)" ' }} %}``` - -produces the following image with a title. Notice that I have had to escape the double quotes in the HTML with a backslash. Also, the example above leaves out the single quote in 'Tufte's" because of the topsy-turvy way that you have to escape the escapes in code sections that are used for illustrative purposes in this text. Bottom line is that there are occasionally some odd interactions between the Markdown parser, custom *Liquid* tags and HTML. -{% fullwidth "assets/imgs/rhino.png" "Tufte's pet rhino (via Edward Tufte)" %} diff --git a/_posts/2060-04-13-tufte-style-jekyll-blog.md b/_posts/2060-04-13-tufte-style-jekyll-blog.md deleted file mode 100755 index c0d6d8845c324..0000000000000 --- a/_posts/2060-04-13-tufte-style-jekyll-blog.md +++ /dev/null @@ -1,395 +0,0 @@ ---- -title: "Tufte-style Jekyll blog" -toc: false -date: 2060-04-13 09:46:04 -mathjax: true -toc: true ---- - -{% newthought 'The Tufte Jekyll theme' %} is an attempt to create a website design with the look and feel of Edward Tufte's books and handouts. Tufte’s style is known for its extensive use of sidenotes, tight integration of graphics with text, and well-set typography. The idea for this project is essentially cribbed wholesale from Tufte and R Markdown's Tufte Handout format{% sidenote 'One' 'See [tufte-latex.github.io/tufte-latex/](https://tufte-latex.github.io/tufte-latex/) and [rmarkdown.rstudio.com/tufte_handout_format](http://rmarkdown.rstudio.com/tufte_handout_format.html)' %} This page is an adaptation of the [Tufte Handout PDF](http://rmarkdown.rstudio.com/examples/tufte-handout.pdf). - -## Jekyll customizations - -This Jekyll blog theme is based on the github repository by Edward Tufte [here](https://github.com/edwardtufte/tufte-css), which was orginally created by Dave Leipmann, but is now labeled under Edward Tufte's moniker. I borrowed freely from the Tufte-CSS repo and have transformed many of the typographic and page-structural features into a set of custom Liquid tags that make creating content using this style much easier than writing straight HTML. Essentially, if you know markdown, and mix in a few custom Liquid tags, you can be creating a website with this document style in short order. - -The remainder of this sample post is a self-documenting survey of the features of the Tufte-Jekyll theme. I have taken almost all of the sample content from the [Tufte-css](https://github.com/edwardtufte/tufte-css) repo and embedded it here to illustrate the parity in appearence between the two. The additional verbiage and commentary I have added is to document the custom *Liquid* markup tags and other features that are bundled with this theme. - -### The SASS settings file - -I have taken much of the actual *Tufte-css* files and modified them as necessary to accomodate the needs inherent in creating a Jekyll theme that has additional writing aids such as the Liquid tags. I have also turned the CSS file into a [SASS](http://sass-lang.com) file (the .scss type). This means that you can alter things like font choices, text color, background color, and underlining style by changing values in this file. When the Jekyll site is built using ```jekyll build``` the settings in this file will be compiled into the customized CSS file that the site uses. If you don't use SCSS or SASS, you are missing out on a huge productivity tool. - -This file looks like this: - -``` -/* This file contains all the constants for colors and font styles */ - -$body-font: ETBembo, Palatino, "Palatino Linotype", "Palatino LT STD", "Book Antiqua", Georgia, serif; -// Note that Gill Sans is the top of the stack and corresponds to what is used in Tufte's books -// However, it is not a free font, so if it is not present on the computer that is viewing the webpage -// The free Google 'Lato' font is used instead. It is similar. -$sans-font: "Gill Sans", "Gill Sans MT", "Lato", Calibri, sans-serif; -$code-font: Consolas, "Liberation Mono", Menlo, Courier, monospace; -$url-font: "Lucida Console", "Lucida Sans Typewriter", Monaco, "Bitstream Vera Sans Mono", monospace; -$text-color: #111; -$bg-color: #fffff8; -$contrast-color: #a00000; -$border-color: #333333; -$link-style: color; // choices are 'color' or 'underline'. Default is color using $contrast-color set above -``` -Any of these values can be changed in the ```_sass/_settings.scss``` file before the site is built. The default values are the ones from *tufte-css*. - -## Fundamentals - -### Color - -Although paper handouts obviously have a pure white background, the web is better served by the use of slightly off-white and off-black colors. I picked ```#fffff8``` and ```#111111``` because they are nearly indistinguishable from their 'pure' cousins, but dial down the harsh contrast. Tufte's books are a study in spare, minimalist design. In his book [The Visual Display of Quantitative Information](http://www.edwardtufte.com/tufte/books_vdqi), he uses a red ink to add some visual punctuation to the buff colored paper and dark ink. In that spirit, links are styled using a similar red color. - -### Headings - -Tufte CSS uses ```

``` for the document title, ```

``` with class ```code``` for the document subtitle, ```

``` for section headings, and ```

``` for low-level headings. More specific headings are not encouraged. If you feel the urge to reach for a heading of level 4 or greater, consider redesigning your document: - - -> [It is] notable that the Feynman lectures (3 volumes) write about all of physics in 1800 pages, using only 2 levels of hierarchical headings: chapters and A-level heads in the text. It also uses the methodology of *sentences* which then cumulate sequentially into *paragraphs*, rather than the grunts of bullet points. Undergraduate Caltech physics is very complicated material, but it didn’t require an elaborate hierarchy to organize. - -[http://www.edwardtufte.com/bboard/q-and-a-fetch-msg?msg_id=0000hB](http://www.edwardtufte.com/bboard/q-and-a-fetch-msg?msg_id=0000hB) - - -As a bonus, this excerpt regarding the use of headings provides an example of using block quotes. Markdown does not have a native `````` shorthand, but real html can be sprinkled in with the Markdown text. In the previous example, the `````` was preceded with a single return after the quotation itself. The previous blockquote was written in Markdown thusly: - -```Liquid -[It is] notable that the Feynman lectures (3 volumes) write about all of physics in 1800 pages, using only 2 levels of hierarchical headings: chapters and A-level heads in the text. It also uses the methodology of *sentences* which then cumulate sequentially into *paragraphs*, rather than the grunts of bullet points. Undergraduate Caltech physics is very complicated material, but it didn’t require an elaborate hierarchy to organize. -[http://www.edwardtufte.com/bboard/q-and-a-fetch-msg?msg_id=0000hB](http://www.edwardtufte.com/bboard/q-and-a-fetch-msg?msg_id=0000hB) -``` - - - -{% newthought 'In his later books' %}{% sidenote 'two' '[http://www.edwardtufte.com/tufte/books_be](http://www.edwardtufte.com/tufte/books_be)'%}, Tufte starts each section with a bit of vertical space, a non-indented paragraph, and sets the first few words of the sentence in small caps. To accomplish this using this style, enclose the sentence fragment you want styled with small caps in a custom Liquid tag called 'newthought' like so: - -```Liquid -{{ "{% newthought 'In his later books'" }} %} -``` - -### Text - -In print, Tufte uses the proprietary Monotype Bembo{% sidenote 3 'See Tufte’s comment in the [Tufte book fonts](http://www.edwardtufte.com/bboard/q-and-a-fetch-msg?msg_id=0000Vt) thread.' %} font. A similar effect is achieved in digital formats with the now open-source ETBembo, which Tufte-Jekyll supplies with a ```@font-face``` reference to a .ttf file. Thanks to [Linjie Ding](https://github.com/daveliepmann/tufte-css/commit/0a810a7d5f4707941c6f9fe99a53ec41f50a5c00), italicized text uses the ETBembo Italic font instead of mechanically skewing the characters. In case ETBembo somehow doesn’t work, Tufte CSS degrades gracefully to other serif fonts like Palatino and Georgia. Notice that Tufte CSS includes separate font files for **bold** (strong) and *italic* (emphasis), instead of relying on the browser to mechanically transform the text. This is typographic best practice. It’s also really important. Thus concludes my unnecessary use of em and strong for the purpose of example. - -Code snippets ape GitHub's font selection using Microsoft's [*Consolas*](http://www.microsoft.com/typography/ClearTypeFonts.mspx) and the sans-serif font uses Tufte's choice of Gill Sans. Since this is not a free font, and some systems will not have it installed, the free google font [*Lato*](https://www.google.com/fonts/specimen/Lato) is designated as a fallback. - - - -

Epigraphs

- -{% epigraph 'The English language . . . becomes ugly and inaccurate because our thoughts are foolish, but the slovenliness of our language makes it easier for us to have foolish thoughts.' 'George Orwell' ' "Politics and the English Language" ' %} - -{% epigraph 'For a successful technology, reality must take precedence over public relations, for Nature cannot be fooled.' 'Richard P. Feynman' ' “What Do You Care What Other People Think?” ' %} - - - -If you’d like to introduce your page or a section of your page with some quotes, use epigraphs. The two examples above show how they are styled. Epigraph elements are modeled after chapter epigraphs in Tufte’s books (particularly *Beautiful Evidence*). The [Tufte-css](https://github.com/edwardtufte/tufte-css) gitub repository has detailed instructions on how to achieve this using HTML elements. As an easier alternative, the *Tufte-jekyll* theme uses custom *Liquid tag* pairs that allow the writer to embed elements such as epigraphs in the middle of the regular Markdown text being edited. - -In order to use an epigraph in a page or section, type this: - -```{{ "{% epigraph 'text of citation' 'author of citation' 'citation source' "}} %}``` - -to produce this: - -{% epigraph 'I do not paint things, I paint only the differences between things.' 'Henri Matisse' 'Henri Matisse Dessins: thèmes et variations, 1943' %} - -{% epigraph ' "How did you go bankrupt?" Two ways. Gradually, then suddenly.' 'Ernest Hemingway' ' "The Sun Also Rises" '%} - -### Lists - -Tufte points out that while lists have valid uses, they tend to promote ineffective writing habits due to their “lack of syntactic and intellectual discipline”. He is particularly critical of hierarchical and bullet-pointed lists. So before reaching for an HTML list element, ask yourself: - -* Does this list actually have to be represented using an HTML ul or ol element? -* Would my idea be better expressed as sentences in paragraphs? -* Is my message causally complex enough to warrant a flow diagram instead? - -This is but a small subset of a proper overview of the topic of lists in communication. A better way to understand Tufte’s thoughts on lists would be to read “The Cognitive Style of PowerPoint: Pitching Out Corrupts Within,” a chapter in Tufte’s book *Beautiful Evidence*, excerpted at some length by Tufte himself [on his website](http://www.edwardtufte.com/bboard/q-and-a-fetch-msg?msg_id=0002QF). The whole piece is information-dense and therefore difficult to summarize. He speaks to web design specifically, but in terms of examples and principles rather than as a set of simple do-this, don’t-do-that prescriptions. It is well worth reading in full for that reason alone. - -For these reasons, Tufte CSS encourages caution before reaching for a list element, and by default removes the bullet points from unordered lists. - -## Figures - -### Margin Figures - -{% marginfigure 'mf-id-1' 'assets/imgs/rhino.png' 'F.J. Cole, “The History of Albrecht Dürer’s Rhinoceros in Zoological Literature,” *Science, Medicine, and History: Essays on the Evolution of Scientific Thought and Medical Practice* (London, 1953), ed. E. Ashworth Underwood, 337-356. From page 71 of Edward Tufte’s *Visual Explanations*.' %} - -Images and graphics play an integral role in Tufte’s work. To place figures in the margin, use the custom margin figure liquid tag included in the ```_plugins``` directory like so: - -```{{ "{% marginfigure 'mf-id-whatever' 'assets/imgs/rhino.png' 'F.J. Cole, “The History of Albrecht Dürer’s Rhinoceros in Zoological Literature,” *Science, Medicine, and History: Essays on the Evolution of Scientific Thought and Medical Practice* (London, 1953), ed. E. Ashworth Underwood, 337-356. From page 71 of Edward Tufte’s *Visual Explanations*.' "}} %}```. - -Note that this tag has *three* parameters. The first is an arbitrary id. This parameter can be named anything as long as it is unique to this post. The second parameter is the path to the image. And the final parameter is whatever caption you want to be displayed with the figure. All parameters *must* be enclosed in quotes for this simple liquid tag to work! - -In this example, the *Liquid* marginfigure tag was inserted *before* the paragraph so that it aligns with the beginning of the paragraph. On small screens, the image will collapse into a small symbol: at the location it has been inserted in the manuscript. Clicking on it will open the image. - -### Full Width Figures - -If you need a full-width image or figure, another custom liquid tag is available to use. Oddly enough, it is named 'fullwidth', and this markup: - -```{{ "{% fullwidth 'assets/imgs/napoleons-march.png' 'Napoleon's March *(Edward Tufte’s English translation)*' "}} %}``` - -Yields this: - -{% fullwidth 'assets/imgs/napoleons-march.png' "Napoleon's March *(Edward Tufte’s English translation)*" %} - - -### Main Column Figures - -Besides margin and full width figures, you can of course also include figures constrained to the main column. Yes, you guessed it, a custom liquid tag rides to the rescue once again: - -```{{ "{% maincolumn 'assets/img/export-imports.png' 'From Edward Tufte, *Visual Display of Quantitative Information*, page 92' "}} %}``` - -yields this: - -{% maincolumn "assets/imgs/exports-imports.png" "From Edward Tufte, *Visual Display of Quantitative Information*, page 92" %} - -## Sidenotes and Margin notes - -One of the most prominent and distinctive features of Tufte's style is the extensive use of sidenotes and margin notes. Perhaps you have noticed their use in this document already. You are very astute. - -There is a wide margin to provide ample room for sidenotes and small figures. There exists a slight semantic distinction between *sidenotes* and *marginnotes*. - -### Sidenotes - -Sidenotes{% sidenote 'sn-id-whatever' 'This is a sidenote and *displays a superscript*'%} display a superscript. The *sidenote* Liquid tag contains two components. The first is an identifier allowing the sidenote to be targeted by the twitchy index fingers of mobile device users so that all the yummy sidenote goodness is revealed when the superscript is tapped. The second components is the actual content of the sidenote. Both of these components should be enclosed in single quotes. Note that we are using the CSS 'counter' trick to automagically keep track of the number sequence on each page or post. On small screens, the sidenotes disappear and when the superscript is clicked, a side note will open below the content, which can then be closed with a similar click. Here is the markup for the sidenote at the beginning of this paragraph: - -```{{ "{% sidenote 'sn-id-whatever' 'This is a sidenote and *displays a superscript*'" }}%}``` - -### Margin notes - -Margin notes{% marginnote 'mn-id-whatever' 'This is a margin note *without* a superscript' %} are similar to sidenotes, but do not display a superscript. The *marginnnote* Liquid tags has the same two components as the *sidenote* tag. Anything can be placed in a margin note. Well, anything that is an inline element. Block level elements can make the Kramdown parser do strange things. On small screens, the margin notes disappear and this symbol: pops up. When clicked, it will open the margin note below the content, which can then be closed with a similar click. The Markdown content has a similar sort of markup as a sidenote, but without a number involved: - -```{{ "{% marginnote 'mn-id-whatever' 'This is a margin note *without* a superscript'" }} %}``` - -## Equations - -The Markdown parser being used by this Jekyll theme is Kramdown, which contains some built-in [Mathjax](//www.mathjax.org) support. Both inline and block-level mathematical figures can be added to the content. - -For instance, the following inline sequence: - -*When $$ a \ne 0 $$, there are two solutions to $$ ax^2 + bx + c = 0 $$* - -is written by enclosing a Mathjax expression within *a matching pair of double dollar signs: ```$$```*: - -```When $$ a \ne 0 $$, there are two solutions to $$ ax^2 + bx + c = 0 $$``` - -Similarly, this block-level Mathjax expression: - -$$ x = {-b \pm \sqrt{b^2-4ac} \over 2a} $$ - -is written by enclosing the expression within a pair of ```$$``` with an empty line above and below: - -```$$ x = {-b \pm \sqrt{b^2-4ac} \over 2a} $$``` - - -You can get pretty fancy, for instance, the wave equation's nabla is no big thing: - -$$ \frac{\partial^2 y}{\partial t^2}= c^2\nabla^2u $$ - - -All of the standard LaTeX equation markup is available to use inside these block tags. - -Please note that the block-level Mathjax expressions *must* be on their own line, separated from content above and below the block by a blank line for the Kramdown parser and the Mathjax javascript to play nicely with one another. - -The Mathjax integration is tricky, and some things such as the inline matrix notation simply do not work well unless allowances are made for using the notation for a small matrix. Bottom line: If you are using this to document mathematics, be super careful to isolate your LaTeX blocks by blank lines! - -## Tables - -Tables are, frankly, a pain in the ass to create. That said, they often are one of the best methods for presenting data. Tabular data are normally presented with right-aligned numbers, left-aligned text, and minimal grid lines. - -Note that when writing Jekyll Markdown content, there will often be a need to get some dirt under your fingernails and stoop to writing a little honest-to-god html. Yes, all that hideous ```.... or other required elements. - thead: [ 1, "
``` nonsense. *And* you must wrap the unholy mess in a ```
``` tag to ensure that the table stays centered in the main content column. - -Tables are designed with an ```overflow:scroll``` property to create slider bars when the viewport is narrow. This is so that you do not collapse all your beautiful data into a jumble of letters and numbers when you view it on your smartphone. - -{% marginnote 'table-1-id' '*Table 1*: A table with default style formatting' %} -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Content and tone of front-page articles in 94 U.S. newspapers, October and November, 1974Number of articlesPercent of articles with negative criticism of specific person or policy
Watergate: defendants and prosecutors, Ford’s pardon of Nixon
537
49%
Inflation, high cost of living
415
28%
Government competence: costs, quality, salaries of public employees
322
30%
Confidence in government: power of special interests, trust in political leaders, dishonesty in politics
266
52%
Government power: regulation of business, secrecy, control of CIA and FBI
154
42%
Crime
123
30%
Race
103
25%
Unemployment
100
13%
Shortages: energy, food
68
16%
-
- - -This is not the One True Table. Such a style does not exist. One must craft each data table with custom care to the narrative one is telling with that specific data. So take this not as “the table style to use”, but rather as “a table style to start from”. From here, use principles to guide you: avoid chartjunk, optimize the data-ink ratio (“within reason”, as Tufte says), and “mobilize every graphical element, perhaps several times over, to show the data.{% sidenote 'table-id' 'Page 139, *The Visual Display of Quantitative Information*, Edward Tufte 2001.'%} Furthermore, one must know when to reach for more complex data presentation tools, like a custom graphic or a JavaScript charting library. - -As an example of alternative table styles, academic publications written in LaTeX often rely on the ```booktabs``` package to produce clean, clear tables. Similar results can be achieved in Tufte CSS with the ```booktabs``` class, as demonstrated in this table: - -{% marginnote 'table-2-id' '*Table 2*: A table with booktabs style formatting' %} -
- - - - - - - - - - - - -
Items
AnimalDescriptionPrice ($)
Gnat per gram13.65
each 0.01
Gnu stuffed 92.50
Emu stuffed 33.33
Armadillofrozen 8.99
-
- -The table above was written in HTML as follows: - -``` -
- - - - - - - - - - - - -
Items
AnimalDescriptionPrice ($)
Gnat per gram13.65
each 0.01
Gnu stuffed 92.50
Emu stuffed 33.33
Armadillofrozen 8.99
-
-``` - - -{% newthought 'I like this style of table,' %} so I have made it the default for unstyled tables. This allows use of the [*Markdown Extra*](https://michelf.ca/projects/php-markdown/extra/) features built into the [*Kramdown*](http://kramdown.gettalong.org/parser/kramdown.html) parser. Here is a table created using the Markdown Extra table syntax to make a nice table which has the side benefit of being human readable in the raw Markdown file: - -{% marginnote 'tableID-3' 'Table 3: a table created with *Markdown Extra* markup using only the default table styling' %} - -| |mpg | cyl | disp | hp | drat | wt | -|:----------------|----:|-----:|-------:|-------:|-------:|----:| -|Mazda RX4 |21 |6 |160 |110 |3.90 |2.62 | -|Mazda RX4 Wag |21 |6 |160 |110 |3.90 |2.88 | -|Datsun 710 |22.8 |4 |108 |93 |3.85 |2.32 | -|Hornet 4 Drive |21.4 |6 |258 |110 |3.08 |3.21 | -|Hornet Sportabout|18.7 |8 |360 |175 |3.15 |3.44 | -|Valiant |18.1 |6 |160 |105 |2.76 |3.46 | - - -Using the following Markdown formatting: - -``` -| |mpg | cyl | disp | hp | drat | wt | -|:----------------|----:|-----:|-------:|-------:|-------:|----:| -|Mazda RX4 |21 |6 |160 |110 |3.90 |2.62 | -|Mazda RX4 Wag |21 |6 |160 |110 |3.90 |2.88 | -|Datsun 710 |22.8 |4 |108 |93 |3.85 |2.32 | -etc... -``` - -The following is a more simple table, showing the Markdown-style table markup. Remember to label the table with a *marginnote* Liquid tag, and you *must* separate the label from the table with a single blank line. This markup: - -``` -{{ "{% marginnote 'Table-ID4' 'Table 4: a simple table showing left, center, and right alignment of table headings and data' "}} %} - -|**Left** |**Center**|**Right**| -|:--------|:--------:|--------:| - Aardvarks| 1|$3.50 - Cat| 5 |$4.23 - Dogs |3 |$5.29 -``` - -Yields this table: - -{% marginnote 'Table-ID4' 'Table 4: a simple table showing left, center, and right alignment of table headings and data' %} - -|**Left** |**Center**|**Right**| -|:--------|:--------:|--------:| - Aardvarks| 1|$3.50 - Cat| 5 |$4.23 - Dogs |3 |$5.29 - - -## Code - -Code samples use a monospace font using the 'code' class. The Kramdown parser has the 'GFM' option enabled, which stands for 'Github Flavored Markdown', and this means that both inline code such as ```#include ``` and blocks of code can be delimited by surrounding them with 3 backticks: - -``` -(map tufte-style all-the-things) -``` -is created by the following markup: -
```(map tufte-style all-the-things)```
- -To get the code highlighted in the language of your choice like so: - - -``` ruby -module Jekyll - class RenderFullWidthTag < Liquid::Tag - require "shellwords" - - def initialize(tag_name, text, tokens) - super - @text = text.shellsplit - end - - def render(context) - "
" + - "

#{@text[1]}

" - end - end -end - -Liquid::Template.register_tag('fullwidth', Jekyll::RenderFullWidthTag) -``` - -Enclose the code block in three backticks, followed by a space and then the language name, like this: - -
 ``` ruby
-    module Jekyll
-    blah, blah...
-   ``` 
- - diff --git a/_publications/.DS_Store b/_publications/.DS_Store deleted file mode 100644 index e10d4c49a890f..0000000000000 Binary files a/_publications/.DS_Store and /dev/null differ diff --git a/_publications/2012-10-01-lagrange-equations-rocket-type.md b/_publications/2012-10-01-lagrange-equations-rocket-type.md deleted file mode 100644 index b1f31f2f32167..0000000000000 --- a/_publications/2012-10-01-lagrange-equations-rocket-type.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Lagrange's equations for rocket-type variable mass systems" -collection: publications -category: manuscripts -permalink: /publication/2012-10-01-lagrange-equations-rocket-type -excerpt: "This paper discusses Lagrange's equations for rocket-type variable mass systems." -date: 2012-10-01 -venue: "International Review of Aerospace Engineering" -citation: "Nanjangud, A. and Eke, F. O. (2012). \"Lagrange's equations for rocket-type variable mass systems.\" International Review of Aerospace Engineering. 5(5), 256-260." ---- - -This paper examines the geometry of motion and nutation stability in free axisymmetric variable mass systems. - -[Download paper here](https://qmro.qmul.ac.uk/xmlui/bitstream/handle/123456789/64398/Nanjangud%20Lagrange’s%20Equations%20for%20Rocket%202012%20Published.pdf?sequence=2) - -Recommended citation: Nanjangud, A. and Eke, F. O. (2018). "Lagrange's equations for rocket-type variable mass systems." International Review of Aerospace Engineering. 5(5), 255-260. diff --git a/_publications/2017-06-01-approximate-solution-angular-speeds.md b/_publications/2017-06-01-approximate-solution-angular-speeds.md deleted file mode 100644 index b57735f19fcfa..0000000000000 --- a/_publications/2017-06-01-approximate-solution-angular-speeds.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Approximate solution to the angular speeds of a nearly-symmetric mass-varying cylindrical body" -collection: publications -category: conferences -permalink: /publication/2017-06-01-approximate-solution-angular-speeds -excerpt: 'This paper presents an approximate solution to the angular speeds of a nearly-symmetric mass-varying cylindrical body.' -date: 2017-06-01 -venue: 'The Journal of the Astronautical Sciences' -paperurl: 'https://link.springer.com/article/10.1007/s40295-016-0099-8' -citation: 'Nanjangud, A. and Eke, F. O. (2017). "Approximate solution to the angular speeds of a nearly-symmetric mass-varying cylindrical body." The Journal of the Astronautical Sciences. 64(2), 99-117.' ---- - -This paper presents an approximate solution to the angular speeds of a nearly-symmetric mass-varying cylindrical body. - -[Download paper here](https://link.springer.com/article/10.1007/s40295-016-0099-8) - -Recommended citation: Nanjangud, A. and Eke, F. O. (2017). "Approximate solution to the angular speeds of a nearly-symmetric mass-varying cylindrical body." The Journal of the Astronautical Sciences. 64(2), 99-117. diff --git a/_publications/2018-03-01-robotics-ai-enabled-on-orbit-operations.md b/_publications/2018-03-01-robotics-ai-enabled-on-orbit-operations.md deleted file mode 100644 index ce3f8a95054ab..0000000000000 --- a/_publications/2018-03-01-robotics-ai-enabled-on-orbit-operations.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Robotics and AI-enabled on-orbit operations with future generation of small satellites" -collection: publications -category: manuscripts -permalink: /publication/2018-03-01-robotics-ai-enabled-on-orbit-operations -excerpt: 'This paper discusses robotics and AI-enabled on-orbit operations with future generation of small satellites.' -date: 2018-03-01 -venue: 'Proceedings of the IEEE' -paperurl: 'https://qmro.qmul.ac.uk/xmlui/bitstream/handle/123456789/64185/Nanjangud%20Robotics%20and%20AI%202018%20Accepted.pdf?sequence=2' -citation: 'Nanjangud, A., Blacker, P. C., Bandyopadhyay, S., and Gao, Y. (2018). "Robotics and AI-enabled on-orbit operations with future generation of small satellites." Proceedings of the IEEE. 106(3), 429-439.' ---- - -This paper discusses robotics and AI-enabled on-orbit operations with future generation of small satellites. - -[Download paper here](https://qmro.qmul.ac.uk/xmlui/bitstream/handle/123456789/64185/Nanjangud%20Robotics%20and%20AI%202018%20Accepted.pdf?sequence=2) - -Recommended citation: Nanjangud, A., Blacker, P. C., Bandyopadhyay, S., and Gao, Y. (2018). "Robotics and AI-enabled on-orbit operations with future generation of small satellites." Proceedings of the IEEE. 106(3), 429-439. diff --git a/_publications/2018-05-01-geometry-of-motion-nutation-stability.md b/_publications/2018-05-01-geometry-of-motion-nutation-stability.md deleted file mode 100644 index 80416d865d083..0000000000000 --- a/_publications/2018-05-01-geometry-of-motion-nutation-stability.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Geometry of motion and nutation stability of free axisymmetric variable mass systems" -collection: publications -category: manuscripts -permalink: /publication/2018-05-01-geometry-of-motion-nutation-stability -excerpt: 'This paper examines the geometry of motion and nutation stability in free axisymmetric variable mass systems.' -date: 2018-05-01 -venue: 'Nonlinear Dynamics' -paperurl: 'https://core.ac.uk/download/pdf/323287375.pdf' -citation: 'Nanjangud, A. (2018). "Geometry of motion and nutation stability of free axisymmetric variable mass systems." Nonlinear Dynamics. 94(3), 2205-2218.' ---- - -This paper examines the geometry of motion and nutation stability in free axisymmetric variable mass systems. - -[Download paper here](https://core.ac.uk/download/pdf/323287375.pdf) - -Recommended citation: Nanjangud, A. (2018). "Geometry of motion and nutation stability of free axisymmetric variable mass systems." Nonlinear Dynamics. 94(3), 2205-2218. diff --git a/_publications/2018-08-01-angular-momentum-free-variable-mass-systems.md b/_publications/2018-08-01-angular-momentum-free-variable-mass-systems.md deleted file mode 100644 index 44caf7b9b6a33..0000000000000 --- a/_publications/2018-08-01-angular-momentum-free-variable-mass-systems.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Angular momentum of free variable mass systems is partially conserved" -collection: publications -category: manuscripts -permalink: /publication/2018-08-01-angular-momentum-free-variable-mass-systems -excerpt: 'This paper demonstrates that angular momentum of free variable mass systems is partially conserved.' -date: 2018-08-01 -venue: 'Aerospace Science and Technology' -paperurl: 'https://qmro.qmul.ac.uk/xmlui/bitstream/handle/123456789/64182/Nanjangud%20Angular%20momentum%20of%20free%202018%20Accepted.pdf?sequence=2' -citation: 'Nanjangud, A. and Eke, F. O. (2018). "Angular momentum of free variable mass systems is partially conserved." Aerospace Science and Technology. 79, 1-4.' ---- - -This paper demonstrates that angular momentum of free variable mass systems is partially conserved. - -[Download paper here](https://qmro.qmul.ac.uk/xmlui/bitstream/handle/123456789/64182/Nanjangud%20Angular%20momentum%20of%20free%202018%20Accepted.pdf?sequence=2) - -Recommended citation: Nanjangud, A. and Eke, F. O. (2018). "Angular momentum of free variable mass systems is partially conserved." Aerospace Science and Technology. 79, 1-4. diff --git a/_publications/2024-08-01-towards-robotic-on-orbit-assembly.md b/_publications/2024-08-01-towards-robotic-on-orbit-assembly.md deleted file mode 100644 index cb398f4122783..0000000000000 --- a/_publications/2024-08-01-towards-robotic-on-orbit-assembly.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "Towards Robotic On-Orbit Assembly of Large Space Telescopes: Mission Architectures, Concepts, and Analyses" -collection: publications -category: manuscripts -permalink: /publication/2023-06-01-towards-robotic-on-orbit-assembly -excerpt: 'This paper discusses mission architectures and concepts for robotic on-orbit assembly of large space telescopes.' -date: 2024-08-24 -venue: 'Acta Astronautica' -paperurl: 'https://www.sciencedirect.com/science/article/pii/S0094576524004612' -citation: 'Nanjangud, A., Underwood, C., Rai, C. M., Eckersley, S., Sweeting, M., and Bianco. P. (2023). "Towards Robotic On-Orbit Assembly of Large Space Telescopes: Mission Architectures, Concepts, and Analyses." Acta Astronautica. (In Press)' ---- - -This paper discusses mission architectures and concepts for robotic on-orbit assembly of large space telescopes. - -[Download paper here](https://www.sciencedirect.com/science/article/pii/S0094576524004612) - -Recommended citation: Nanjangud, A., Underwood, C., Rai, C. M., Eckersley, S., Sweeting, M., and Bianco. P. (2023). "Towards Robotic On-Orbit Assembly of Large Space Telescopes: Mission Architectures, Concepts, and Analyses." Acta Astronautica. (In Press) diff --git a/_sass/.DS_Store b/_sass/.DS_Store deleted file mode 100644 index b5847149a8d91..0000000000000 Binary files a/_sass/.DS_Store and /dev/null differ diff --git a/_sass/minimal-mistakes.scss b/_sass/minimal-mistakes.scss deleted file mode 100644 index c305a1712d71d..0000000000000 --- a/_sass/minimal-mistakes.scss +++ /dev/null @@ -1,48 +0,0 @@ -/*! - * Minimal Mistakes Jekyll Theme 4.24.0 by Michael Rose - * Copyright 2013-2020 Michael Rose - mademistakes.com | @mmistakes - * Licensed under MIT (https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE) -*/ - -/* Tufte Features using jekyll-tufte*/ -//@import "minimal-mistakes/tables"; -@import "minimal-mistakes/fonts"; -@import "minimal-mistakes/settings"; - - -/* Variables */ -@import "minimal-mistakes/variables"; - -/* Mixins and functions */ -@import "minimal-mistakes/vendor/breakpoint/breakpoint"; -@include breakpoint-set("to ems", true); -@import "minimal-mistakes/vendor/magnific-popup/magnific-popup"; // Magnific Popup -@import "minimal-mistakes/vendor/susy/susy"; -@import "minimal-mistakes/mixins"; - -/* Core CSS */ -@import "minimal-mistakes/reset"; -@import "minimal-mistakes/base"; -@import "minimal-mistakes/forms"; -@import "minimal-mistakes/tables"; -@import "minimal-mistakes/animations"; - -/* Components */ -@import "minimal-mistakes/buttons"; -@import "minimal-mistakes/notices"; -@import "minimal-mistakes/masthead"; -@import "minimal-mistakes/navigation"; -@import "minimal-mistakes/footer"; -@import "minimal-mistakes/search"; -@import "minimal-mistakes/syntax"; - -/* Utility classes */ -@import "minimal-mistakes/utilities"; - -/* Layout specific */ -@import "minimal-mistakes/page"; -@import "minimal-mistakes/archive"; -@import "minimal-mistakes/sidebar"; -@import "minimal-mistakes/print"; - -@import "minimal-mistakes/toggle-button" diff --git a/_sass/minimal-mistakes/_animations.scss b/_sass/minimal-mistakes/_animations.scss deleted file mode 100644 index 25ef77fbbfce0..0000000000000 --- a/_sass/minimal-mistakes/_animations.scss +++ /dev/null @@ -1,21 +0,0 @@ -/* ========================================================================== - ANIMATIONS - ========================================================================== */ - -@-webkit-keyframes intro { - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } -} - -@keyframes intro { - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } -} \ No newline at end of file diff --git a/_sass/minimal-mistakes/_archive.scss b/_sass/minimal-mistakes/_archive.scss deleted file mode 100644 index 9f576323e7da2..0000000000000 --- a/_sass/minimal-mistakes/_archive.scss +++ /dev/null @@ -1,463 +0,0 @@ -/* ========================================================================== - ARCHIVE - ========================================================================== */ - -.archive { - margin-top: 1em; - margin-bottom: 2em; - - @include breakpoint($large) { - float: right; - width: calc(100% - #{$right-sidebar-width-narrow}); - padding-right: $right-sidebar-width-narrow; - } - - @include breakpoint($x-large) { - width: calc(100% - #{$right-sidebar-width}); - padding-right: $right-sidebar-width; - } -} - -.archive__item { - position: relative; - - a { - position: relative; - z-index: 10; - } - - a[rel="permalink"] { - position: static; - } -} - -.archive__subtitle { - margin: 1.414em 0 0.5em; - padding-bottom: 0.5em; - font-size: $type-size-5; - color: $muted-text-color; - border-bottom: 1px solid $border-color; - - + .list__item .archive__item-title { - margin-top: 0.5em; - } -} - -.archive__item-title { - margin-bottom: 0.25em; - font-family: $sans-serif-narrow; - line-height: initial; - overflow: hidden; - text-overflow: ellipsis; - - a[rel="permalink"]::before { - content: ''; - position: absolute; - left: 0; - top: 0; - right: 0; - bottom: 0; - } - - a + a { - opacity: 0.5; - } -} - -/* remove border*/ -.page__content { - .archive__item-title { - margin-top: 1em; - border-bottom: none; - } -} - -.archive__item-excerpt { - margin-top: 0; - font-size: $type-size-6; - - & + p { - text-indent: 0; - } - - a { - position: relative; - } -} - -.archive__item-teaser { - position: relative; - border-radius: $border-radius; - overflow: hidden; - - img { - width: 100%; - } -} - -.archive__item-caption { - position: absolute; - bottom: 0; - right: 0; - margin: 0 auto; - padding: 2px 5px; - color: #fff; - font-family: $caption-font-family; - font-size: $type-size-8; - background: #000; - text-align: right; - z-index: 5; - opacity: 0.5; - border-radius: $border-radius 0 0 0; - - @include breakpoint($large) { - padding: 5px 10px; - } - - a { - color: #fff; - text-decoration: none; - } -} - -/* - List view - ========================================================================== */ - -.list__item { - .page__meta { - margin: 0 0 4px; - font-size: 0.6em; - } -} - -/* - Grid view - ========================================================================== */ - -.archive { - .grid__wrapper { - /* extend grid elements to the right */ - - @include breakpoint($large) { - margin-right: -1 * $right-sidebar-width-narrow; - } - - @include breakpoint($x-large) { - margin-right: -1 * $right-sidebar-width; - } - } -} - -.grid__item { - margin-bottom: 2em; - - @include breakpoint($small) { - float: left; - width: span(5 of 10); - - &:nth-child(2n + 1) { - clear: both; - margin-left: 0; - } - - &:nth-child(2n + 2) { - clear: none; - margin-left: gutter(of 10); - } - } - - @include breakpoint($medium) { - margin-left: 0; /* override margin*/ - margin-right: 0; /* override margin*/ - width: span(3 of 12); - - &:nth-child(2n + 1) { - clear: none; - } - - &:nth-child(4n + 1) { - clear: both; - } - - &:nth-child(4n + 2) { - clear: none; - margin-left: gutter(1 of 12); - } - - &:nth-child(4n + 3) { - clear: none; - margin-left: gutter(1 of 12); - } - - &:nth-child(4n + 4) { - clear: none; - margin-left: gutter(1 of 12); - } - } - - .page__meta { - margin: 0 0 4px; - font-size: 0.6em; - } - - .page__meta-sep { - display: block; - - &::before { - display: none; - } - } - - .archive__item-title { - margin-top: 0.5em; - font-size: $type-size-5; - } - - .archive__item-excerpt { - display: none; - - @include breakpoint($medium) { - display: block; - font-size: $type-size-6; - } - } - - .archive__item-teaser { - @include breakpoint($small) { - max-height: 200px; - } - - @include breakpoint($medium) { - max-height: 120px; - } - } -} - -/* - Features - ========================================================================== */ - -.feature__wrapper { - @include clearfix(); - margin-bottom: 2em; - border-bottom: 1px solid $border-color; - - .archive__item-title { - margin-bottom: 0; - } -} - -.feature__item { - position: relative; - margin-bottom: 2em; - font-size: 1.125em; - - @include breakpoint($small) { - float: left; - margin-bottom: 0; - width: span(4 of 12); - - &:nth-child(3n + 1) { - clear: both; - margin-left: 0; - } - - &:nth-child(3n + 2) { - clear: none; - margin-left: gutter(of 12); - } - - &:nth-child(3n + 3) { - clear: none; - margin-left: gutter(of 12); - } - - .feature__item-teaser { - max-height: 200px; - overflow: hidden; - } - } - - .archive__item-body { - padding-left: gutter(1 of 12); - padding-right: gutter(1 of 12); - } - - a.btn::before { - content: ''; - position: absolute; - left: 0; - top: 0; - right: 0; - bottom: 0; - } - - &--left { - position: relative; - float: left; - margin-left: 0; - margin-right: 0; - width: 100%; - clear: both; - font-size: 1.125em; - - .archive__item { - float: left; - } - - .archive__item-teaser { - margin-bottom: 2em; - } - - a.btn::before { - content: ''; - position: absolute; - left: 0; - top: 0; - right: 0; - bottom: 0; - } - - @include breakpoint($small) { - .archive__item-teaser { - float: left; - width: span(5 of 12); - } - - .archive__item-body { - float: right; - padding-left: gutter(0.5 of 12); - padding-right: gutter(1 of 12); - width: span(7 of 12); - } - } - } - - &--right { - position: relative; - float: left; - margin-left: 0; - margin-right: 0; - width: 100%; - clear: both; - font-size: 1.125em; - - .archive__item { - float: left; - } - - .archive__item-teaser { - margin-bottom: 2em; - } - - a.btn::before { - content: ''; - position: absolute; - left: 0; - top: 0; - right: 0; - bottom: 0; - } - - @include breakpoint($small) { - text-align: right; - - .archive__item-teaser { - float: right; - width: span(5 of 12); - } - - .archive__item-body { - float: left; - width: span(7 of 12); - padding-left: gutter(0.5 of 12); - padding-right: gutter(1 of 12); - } - } - } - - &--center { - position: relative; - float: left; - margin-left: 0; - margin-right: 0; - width: 100%; - clear: both; - font-size: 1.125em; - - .archive__item { - float: left; - width: 100%; - } - - .archive__item-teaser { - margin-bottom: 2em; - } - - a.btn::before { - content: ''; - position: absolute; - left: 0; - top: 0; - right: 0; - bottom: 0; - } - - @include breakpoint($small) { - text-align: center; - - .archive__item-teaser { - margin: 0 auto; - width: span(5 of 12); - } - - .archive__item-body { - margin: 0 auto; - width: span(7 of 12); - } - } - } -} - -/* Place inside an archive layout */ - -.archive { - .feature__wrapper { - .archive__item-title { - margin-top: 0.25em; - font-size: 1em; - } - } - - .feature__item, - .feature__item--left, - .feature__item--center, - .feature__item--right { - font-size: 1em; - } -} - -/* - Wide Pages - ========================================================================== */ - - .wide { - .archive { - @include breakpoint($large) { - padding-right: 0; - } - - @include breakpoint($x-large) { - padding-right: 0; - } - } -} - -/* Place inside a single layout */ - -.layout--single { - .feature__wrapper { - display: inline-block; - } -} diff --git a/_sass/minimal-mistakes/_base.scss b/_sass/minimal-mistakes/_base.scss deleted file mode 100644 index 948b41d80ca53..0000000000000 --- a/_sass/minimal-mistakes/_base.scss +++ /dev/null @@ -1,340 +0,0 @@ -/* ========================================================================== - BASE ELEMENTS - ========================================================================== */ - -html { - /* sticky footer fix */ - position: relative; - min-height: 100%; - font-size: 16px; // change to whatever; Angadh put this here to stop the annoying resizing. -} - -body { - margin: 0; - padding: 0; - color: $text-color; - font-family: $body-font;//$global-font-family; - line-height: 1.5; - - &.overflow--hidden { - /* when primary navigation is visible, the content in the background won't scroll */ - overflow: hidden; - } -} - -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 2em 0 0.5em; - line-height: 1.2; - font-family: $sans-font;//$header-font-family; - font-weight: bold; -} - -h1 { - margin-top: 0; - font-size: $h-size-1; -} - -h2 { - font-size: $h-size-2; -} - -h3 { - font-size: $h-size-3; -} - -h4 { - font-size: $h-size-4; -} - -h5 { - font-size: $h-size-5; -} - -h6 { - font-size: $h-size-6; -} - -small, -.small { - font-size: $type-size-6; -} - -p { - margin-bottom: 1.3em; -} - -u, -ins { - text-decoration: none; - border-bottom: 1px solid $text-color; - a { - color: inherit; - } -} - -del a { - color: inherit; -} - -/* reduce orphans and widows when printing */ - -p, -pre, -blockquote, -ul, -ol, -dl, -figure, -table, -fieldset { - orphans: 3; - widows: 3; -} - -/* abbreviations */ - -abbr[title], -abbr[data-original-title] { - text-decoration: none; - cursor: help; - border-bottom: 1px dotted $text-color; -} - -/* blockquotes */ - -blockquote { - margin: 2em 1em 2em 0; - padding-left: 1em; - padding-right: 1em; - font-style: italic; - border-left: 0.25em solid $primary-color; - - cite { - font-style: italic; - - &:before { - content: "\2014"; - padding-right: 5px; - } - } -} - -/* links */ - -a { - &:focus { - @extend %tab-focus; - } - - &:visited { - color: $link-color-visited; - } - - &:hover { - color: $link-color-hover; - outline: 0; - } -} - -/* buttons */ - -button:focus { - @extend %tab-focus; -} - -/* code */ - -tt, -code, -kbd, -samp, -pre { - font-family: $monospace; -} - -pre { - overflow-x: auto; /* add scrollbars to wide code blocks*/ -} - -/* horizontal rule */ - -hr { - display: block; - margin: 1em 0; - border: 0; - border-top: 1px solid $border-color; -} - -/* lists */ - -ul li, -ol li { - margin-bottom: 0.5em; -} - -li ul, -li ol { - margin-top: 0.5em; -} - -/* - Media and embeds - ========================================================================== */ - -/* Figures and images */ - -figure { - display: -webkit-box; - display: flex; - -webkit-box-pack: justify; - justify-content: space-between; - -webkit-box-align: start; - align-items: flex-start; - flex-wrap: wrap; - margin: 2em 0; - - img, - iframe, - .fluid-width-video-wrapper { - margin-bottom: 1em; - } - - img { - width: 100%; - border-radius: $border-radius; - -webkit-transition: $global-transition; - transition: $global-transition; - } - - > a { - display: block; - } - - &.half { - > a, - > img { - @include breakpoint($small) { - width: calc(50% - 0.5em); - } - } - - figcaption { - width: 100%; - } - } - - &.third { - > a, - > img { - @include breakpoint($small) { - width: calc(33.3333% - 0.5em); - } - } - - figcaption { - width: 100%; - } - } -} - -/* Figure captions */ - -figcaption { - margin-bottom: 0.5em; - color: $muted-text-color; - font-family: $caption-font-family; - font-size: $type-size-6; - - a { - -webkit-transition: $global-transition; - transition: $global-transition; - - &:hover { - color: $link-color-hover; - } - } -} - -/* Fix IE9 SVG bug */ - -svg:not(:root) { - overflow: hidden; -} - -/* - Navigation lists - ========================================================================== */ - -/** - * Removes margins, padding, and bullet points from navigation lists - * - * Example usage: - * - */ - -nav { - ul { - margin: 0; - padding: 0; - } - - li { - list-style: none; - } - - a { - text-decoration: none; - } - - /* override white-space for nested lists */ - ul li, - ol li { - margin-bottom: 0; - } - - li ul, - li ol { - margin-top: 0; - } -} - -/* - Global animation transition - ========================================================================== */ - -b, -i, -strong, -em, -blockquote, -p, -q, -span, -figure, -img, -h1, -h2, -header, -input, -a, -tr, -td, -form button, -input[type="submit"], -.btn, -.highlight, -.archive__item-teaser { - -webkit-transition: $global-transition; - transition: $global-transition; -} diff --git a/_sass/minimal-mistakes/_buttons.scss b/_sass/minimal-mistakes/_buttons.scss deleted file mode 100644 index 9ef60a8453cc0..0000000000000 --- a/_sass/minimal-mistakes/_buttons.scss +++ /dev/null @@ -1,97 +0,0 @@ -/* ========================================================================== - BUTTONS - ========================================================================== */ - -/* - Default button - ========================================================================== */ - -.btn { - /* default */ - display: inline-block; - margin-bottom: 0.25em; - padding: 0.5em 1em; - font-family: $sans-serif; - font-size: $type-size-6; - font-weight: bold; - text-align: center; - text-decoration: none; - border-width: 0; - border-radius: $border-radius; - cursor: pointer; - - .icon { - margin-right: 0.5em; - } - - .icon + .hidden { - margin-left: -0.5em; /* override for hidden text*/ - } - - /* button colors */ - $buttoncolors: - (primary, $primary-color), - (inverse, #fff), - (light-outline, transparent), - (success, $success-color), - (warning, $warning-color), - (danger, $danger-color), - (info, $info-color), - (facebook, $facebook-color), - (twitter, $twitter-color), - (linkedin, $linkedin-color); - - @each $buttoncolor, $color in $buttoncolors { - &--#{$buttoncolor} { - @include yiq-contrasted($color); - @if ($buttoncolor == inverse) { - border: 1px solid $border-color; - } - @if ($buttoncolor == light-outline) { - border: 1px solid #fff; - } - - &:visited { - @include yiq-contrasted($color); - } - - &:hover { - @include yiq-contrasted(mix(#000, $color, 20%)); - } - } - } - - /* fills width of parent container */ - &--block { - display: block; - width: 100%; - - + .btn--block { - margin-top: 0.25em; - } - } - - /* disabled */ - &--disabled { - pointer-events: none; - cursor: not-allowed; - filter: alpha(opacity=65); - box-shadow: none; - opacity: 0.65; - } - - /* extra large button */ - &--x-large { - font-size: $type-size-4; - } - - /* large button */ - &--large { - font-size: $type-size-5; - } - - /* small button */ - &--small { - font-size: $type-size-7; - } -} \ No newline at end of file diff --git a/_sass/minimal-mistakes/_fonts.scss b/_sass/minimal-mistakes/_fonts.scss deleted file mode 100755 index 846882ca78e8d..0000000000000 --- a/_sass/minimal-mistakes/_fonts.scss +++ /dev/null @@ -1,37 +0,0 @@ -// Font imports file. If you don't want these fonts, comment out these and add your own into the fonts directory -// and point the src attribute to the file. -// - -@charset "UTF-8"; - -@font-face { - font-family: ETbook; - src: url("../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.eot"); - src: url("../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.eot?#iefix") format("embedded-opentype"), url("../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.woff") format("woff"), url("../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.ttf") format("truetype"), url("../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.svg#etbemboromanosf") format("svg"); - font-weight: normal; - font-style: normal -} - -@font-face { - font-family: ETbook; - src: url("../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.eot"); - src: url("../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.eot?#iefix") format("embedded-opentype"), url("../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.woff") format("woff"), url("../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.ttf") format("truetype"), url("../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.svg#etbemboromanosf") format("svg"); - font-weight: normal; - font-style: italic -} - -@font-face { - font-family: ETbook; - src: url("../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.eot"); - src: url("../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.eot?#iefix") format("embedded-opentype"), url("../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.woff") format("woff"), url("../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.ttf") format("truetype"), url("../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.svg#etbemboromanosf") format("svg"); - font-weight: bold; - font-style: normal -} - -@font-face { - font-family: ETbookRomanOldStyle; - src: url("../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.eot"); - src: url("../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.eot?#iefix") format("embedded-opentype"), url("../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.woff") format("woff"), url("../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.ttf") format("truetype"), url("../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.svg#etbemboromanosf") format("svg"); - font-weight: normal; - font-style: normal; -} \ No newline at end of file diff --git a/_sass/minimal-mistakes/_footer.scss b/_sass/minimal-mistakes/_footer.scss deleted file mode 100644 index c0b0625bdae8d..0000000000000 --- a/_sass/minimal-mistakes/_footer.scss +++ /dev/null @@ -1,85 +0,0 @@ -/* ========================================================================== - FOOTER - ========================================================================== */ - -.page__footer { - @include clearfix; - float: left; - margin-left: 0; - margin-right: 0; - width: 100%; - margin-top: 3em; - color: $muted-text-color; - -webkit-animation: $intro-transition; - animation: $intro-transition; - -webkit-animation-delay: 0.45s; - animation-delay: 0.45s; - background-color: $footer-background-color; - - footer { - @include clearfix; - margin-left: auto; - margin-right: auto; - margin-top: 2em; - max-width: 100%; - padding: 0 1em 2em; - - @include breakpoint($x-large) { - max-width: $x-large; - } - } - - a { - color: inherit; - text-decoration: none; - - &:hover { - text-decoration: underline; - } - } - - .fas, - .fab, - .far, - .fal { - color: $muted-text-color; - } -} - -.page__footer-copyright { - font-family: $global-font-family; - font-size: $type-size-7; -} - -.page__footer-follow { - ul { - margin: 0; - padding: 0; - list-style-type: none; - } - - li { - display: inline-block; - padding-top: 5px; - padding-bottom: 5px; - font-family: $sans-serif-narrow; - font-size: $type-size-6; - text-transform: uppercase; - } - - li + li:before { - content: ""; - padding-right: 5px; - } - - a { - padding-right: 10px; - font-weight: bold; - } - - .social-icons { - a { - white-space: nowrap; - } - } -} diff --git a/_sass/minimal-mistakes/_forms.scss b/_sass/minimal-mistakes/_forms.scss deleted file mode 100644 index 0dd9b480b7fbe..0000000000000 --- a/_sass/minimal-mistakes/_forms.scss +++ /dev/null @@ -1,359 +0,0 @@ -/* ========================================================================== - Forms - ========================================================================== */ - -form { - margin: 0 0 5px 0; - padding: 1em; - background-color: $form-background-color; - - fieldset { - margin-bottom: 5px; - padding: 0; - border-width: 0; - } - - legend { - display: block; - width: 100%; - margin-bottom: 5px * 2; - *margin-left: -7px; - padding: 0; - color: $text-color; - border: 0; - white-space: normal; - } - - p { - margin-bottom: (5px / 2); - } - - ul { - list-style-type: none; - margin: 0 0 5px 0; - padding: 0; - } - - br { - display: none; - } -} - -label, -input, -button, -select, -textarea { - vertical-align: baseline; - *vertical-align: middle; -} - -input, -button, -select, -textarea { - box-sizing: border-box; - font-family: $sans-serif; -} - -label { - display: block; - margin-bottom: 0.25em; - color: $text-color; - cursor: pointer; - - small { - font-size: $type-size-6; - } - - input, - textarea, - select { - display: block; - } -} - -input, -textarea, -select { - display: inline-block; - width: 100%; - padding: 0.25em; - margin-bottom: 0.5em; - color: $text-color; - background-color: $background-color; - border: $border-color; - border-radius: $border-radius; - box-shadow: $box-shadow; -} - -.input-mini { - width: 60px; -} - -.input-small { - width: 90px; -} - -input[type="image"], -input[type="checkbox"], -input[type="radio"] { - width: auto; - height: auto; - padding: 0; - margin: 3px 0; - *margin-top: 0; - line-height: normal; - cursor: pointer; - border-radius: 0; - border: 0 \9; - box-shadow: none; -} - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; - padding: 0; - *width: 13px; - *height: 13px; -} - -input[type="image"] { - border: 0; -} - -input[type="file"] { - width: auto; - padding: initial; - line-height: initial; - border: initial; - background-color: transparent; - background-color: initial; - box-shadow: none; -} - -input[type="button"], -input[type="reset"], -input[type="submit"] { - width: auto; - height: auto; - cursor: pointer; - *overflow: visible; -} - -select, -input[type="file"] { - *margin-top: 4px; -} - -select { - width: auto; - background-color: #fff; -} - -select[multiple], -select[size] { - height: auto; -} - -textarea { - resize: vertical; - height: auto; - overflow: auto; - vertical-align: top; -} - -input[type="hidden"] { - display: none; -} - -.form { - position: relative; -} - -.radio, -.checkbox { - padding-left: 18px; - font-weight: normal; -} - -.radio input[type="radio"], -.checkbox input[type="checkbox"] { - float: left; - margin-left: -18px; -} - -.radio.inline, -.checkbox.inline { - display: inline-block; - padding-top: 5px; - margin-bottom: 0; - vertical-align: middle; -} - -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { - margin-left: 10px; -} - -/* - Disabled state - ========================================================================== */ - -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - opacity: 0.5; - cursor: not-allowed; -} - -/* - Focus & active state - ========================================================================== */ - -input:focus, -textarea:focus { - border-color: $primary-color; - outline: 0; - outline: thin dotted \9; - box-shadow: inset 0 1px 3px rgba($text-color, 0.06), - 0 0 5px rgba($primary-color, 0.7); -} - -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus, -select:focus { - box-shadow: none; -} - -/* - Help text - ========================================================================== */ - -.help-block, -.help-inline { - color: $muted-text-color; -} - -.help-block { - display: block; - margin-bottom: 1em; - line-height: 1em; -} - -.help-inline { - display: inline-block; - vertical-align: middle; - padding-left: 5px; -} - -/* - .form-group - ========================================================================== */ - -.form-group { - margin-bottom: 5px; - padding: 0; - border-width: 0; -} - -/* - .form-inline - ========================================================================== */ - -.form-inline input, -.form-inline textarea, -.form-inline select { - display: inline-block; - margin-bottom: 0; -} - -.form-inline label { - display: inline-block; -} - -.form-inline .radio, -.form-inline .checkbox, -.form-inline .radio { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} - -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-left: 0; - margin-right: 3px; -} - -/* - .form-search - ========================================================================== */ - -.form-search input, -.form-search textarea, -.form-search select { - display: inline-block; - margin-bottom: 0; -} - -.form-search .search-query { - padding-left: 14px; - padding-right: 14px; - margin-bottom: 0; - border-radius: 14px; -} - -.form-search label { - display: inline-block; -} - -.form-search .radio, -.form-search .checkbox, -.form-inline .radio { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} - -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"] { - float: left; - margin-left: 0; - margin-right: 3px; -} - -/* - .form--loading - ========================================================================== */ - -.form--loading:before { - content: ""; -} - -.form--loading .form__spinner { - display: block; -} - -.form:before { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(255, 255, 255, 0.7); - z-index: 10; -} - -.form__spinner { - display: none; - position: absolute; - top: 50%; - left: 50%; - z-index: 11; -} diff --git a/_sass/minimal-mistakes/_masthead.scss b/_sass/minimal-mistakes/_masthead.scss deleted file mode 100644 index 45ed10d4e6f6e..0000000000000 --- a/_sass/minimal-mistakes/_masthead.scss +++ /dev/null @@ -1,93 +0,0 @@ -/* ========================================================================== - MASTHEAD - ========================================================================== */ - -.masthead { - position: relative; - border-bottom: 1px solid $border-color; - -webkit-animation: $intro-transition; - animation: $intro-transition; - -webkit-animation-delay: 0.15s; - animation-delay: 0.15s; - z-index: 20; - - &__inner-wrap { - @include clearfix; - margin-left: auto; - margin-right: auto; - padding: 1em; - max-width: 100%; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - font-family: $sans-font; - - @include breakpoint($x-large) { - max-width: $max-width; - } - - nav { - z-index: 10; - } - - a { - text-decoration: none; - } - } -} - -.site-logo img { - max-height: 2rem; -} - -.site-title { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -ms-flex-item-align: center; - align-self: center; - font-weight: bold; - // z-index: 20; -} - -.site-subtitle { - display: block; - font-size: $type-size-8; -} - -.masthead__menu { - float: left; - margin-left: 0; - margin-right: 0; - width: 100%; - clear: both; - - .site-nav { - margin-left: 0; - - @include breakpoint($small) { - float: right; - } - } - - ul { - margin: 0; - padding: 0; - clear: both; - list-style-type: none; - } -} - -.masthead__menu-item { - display: block; - list-style-type: none; - white-space: nowrap; - - &--lg { - padding-right: 2em; - font-weight: 700; - } -} diff --git a/_sass/minimal-mistakes/_mixins.scss b/_sass/minimal-mistakes/_mixins.scss deleted file mode 100644 index 4aa9eb09ca805..0000000000000 --- a/_sass/minimal-mistakes/_mixins.scss +++ /dev/null @@ -1,92 +0,0 @@ -/* ========================================================================== - MIXINS - ========================================================================== */ - -%tab-focus { - /* Default*/ - outline: thin dotted $focus-color; - /* Webkit*/ - outline: 5px auto $focus-color; - outline-offset: -2px; -} - -/* - em function - ========================================================================== */ - -@function em($target, $context: $doc-font-size) { - @return ($target / $context) * 1em; -} - - -/* - Bourbon clearfix - ========================================================================== */ - -/* - * Provides an easy way to include a clearfix for containing floats. - * link http://cssmojo.com/latest_new_clearfix_so_far/ - * - * example scss - Usage - * - * .element { - * @include clearfix; - * } - * - * example css - CSS Output - * - * .element::after { - * clear: both; - * content: ""; - * display: table; - * } -*/ - -@mixin clearfix { - clear: both; - - &::after { - clear: both; - content: ""; - display: table; - } -} - -/* - Compass YIQ Color Contrast - https://github.com/easy-designs/yiq-color-contrast - ========================================================================== */ - -@function yiq-is-light( - $color, - $threshold: $yiq-contrasted-threshold -) { - $red: red($color); - $green: green($color); - $blue: blue($color); - - $yiq: (($red*299)+($green*587)+($blue*114))/1000; - - @if $yiq-debug { @debug $yiq, $threshold; } - - @return if($yiq >= $threshold, true, false); -} - -@function yiq-contrast-color( - $color, - $dark: $yiq-contrasted-dark-default, - $light: $yiq-contrasted-light-default, - $threshold: $yiq-contrasted-threshold -) { - @return if(yiq-is-light($color, $threshold), $yiq-contrasted-dark-default, $yiq-contrasted-light-default); -} - -@mixin yiq-contrasted( - $background-color, - $dark: $yiq-contrasted-dark-default, - $light: $yiq-contrasted-light-default, - $threshold: $yiq-contrasted-threshold -) { - background-color: $background-color; - color: yiq-contrast-color($background-color, $dark, $light, $threshold); -} \ No newline at end of file diff --git a/_sass/minimal-mistakes/_navigation.scss b/_sass/minimal-mistakes/_navigation.scss deleted file mode 100644 index 24d1b1b5ce91e..0000000000000 --- a/_sass/minimal-mistakes/_navigation.scss +++ /dev/null @@ -1,573 +0,0 @@ -/* ========================================================================== - NAVIGATION - ========================================================================== */ - -/* - Breadcrumb navigation links - ========================================================================== */ - -.breadcrumbs { - @include clearfix; - margin: 0 auto; - max-width: 100%; - padding-left: 1em; - padding-right: 1em; - font-family: $sans-serif; - -webkit-animation: $intro-transition; - animation: $intro-transition; - -webkit-animation-delay: 0.3s; - animation-delay: 0.3s; - - @include breakpoint($x-large) { - max-width: $x-large; - } - - ol { - padding: 0; - list-style: none; - font-size: $type-size-6; - - @include breakpoint($large) { - float: right; - width: calc(100% - #{$right-sidebar-width-narrow}); - } - - @include breakpoint($x-large) { - width: calc(100% - #{$right-sidebar-width}); - } - } - - li { - display: inline; - } - - .current { - font-weight: bold; - } -} - -/* - Post pagination navigation links - ========================================================================== */ - -.pagination { - @include clearfix(); - float: left; - margin-top: 1em; - padding-top: 1em; - width: 100%; - - ul { - margin: 0; - padding: 0; - list-style-type: none; - font-family: $sans-serif; - } - - li { - display: block; - float: left; - margin-left: -1px; - - a { - display: block; - margin-bottom: 0.25em; - padding: 0.5em 1em; - font-family: $sans-serif; - font-size: 14px; - font-weight: bold; - line-height: 1.5; - text-align: center; - text-decoration: none; - color: $muted-text-color; - border: 1px solid mix(#000, $border-color, 25%); - border-radius: 0; - - &:hover { - color: $link-color-hover; - } - - &.current, - &.current.disabled { - color: #fff; - background: $primary-color; - } - - &.disabled { - color: rgba($muted-text-color, 0.5); - pointer-events: none; - cursor: not-allowed; - } - } - - &:first-child { - margin-left: 0; - - a { - border-top-left-radius: $border-radius; - border-bottom-left-radius: $border-radius; - } - } - - &:last-child { - a { - border-top-right-radius: $border-radius; - border-bottom-right-radius: $border-radius; - } - } - } - - /* next/previous buttons */ - &--pager { - display: block; - padding: 1em 2em; - float: left; - width: 50%; - font-family: $sans-serif; - font-size: $type-size-5; - font-weight: bold; - text-align: center; - text-decoration: none; - color: $muted-text-color; - border: 1px solid mix(#000, $border-color, 25%); - border-radius: $border-radius; - - &:hover { - @include yiq-contrasted($muted-text-color); - } - - &:first-child { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - - &:last-child { - margin-left: -1px; - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - - &.disabled { - color: rgba($muted-text-color, 0.5); - pointer-events: none; - cursor: not-allowed; - } - } -} - -.page__content + .pagination, -.page__meta + .pagination, -.page__share + .pagination, -.page__comments + .pagination { - margin-top: 2em; - padding-top: 2em; - border-top: 1px solid $border-color; -} - -/* - Priority plus navigation - ========================================================================== */ - -.greedy-nav { - position: relative; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - min-height: $nav-height; - background: $background-color; - - a { - display: block; - margin: 0 1rem; - color: $masthead-link-color; - text-decoration: none; - -webkit-transition: none; - transition: none; - - &:hover { - color: $masthead-link-color-hover; - } - - &.site-logo { - margin-left: 0; - margin-right: 0.5rem; - } - - &.site-title { - margin-left: 0; - } - } - - img { - -webkit-transition: none; - transition: none; - } - - &__toggle { - -ms-flex-item-align: center; - align-self: center; - height: $nav-toggle-height; - border: 0; - outline: none; - background-color: transparent; - cursor: pointer; - } - - .visible-links { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: end; - -ms-flex-pack: end; - justify-content: flex-end; - -webkit-box-flex: 1; - -ms-flex: 1; - flex: 1; - overflow: hidden; - - li { - -webkit-box-flex: 0; - -ms-flex: none; - flex: none; - } - - a { - position: relative; - - &:before { - content: ""; - position: absolute; - left: 0; - bottom: 0; - height: 4px; - background: $primary-color; - width: 100%; - -webkit-transition: $global-transition; - transition: $global-transition; - -webkit-transform: scaleX(0) translate3d(0, 0, 0); - transform: scaleX(0) translate3d(0, 0, 0); // hide - } - - &:hover:before { - -webkit-transform: scaleX(1); - -ms-transform: scaleX(1); - transform: scaleX(1); // reveal - } - } - } - - .hidden-links { - position: absolute; - top: 100%; - right: 0; - margin-top: 15px; - padding: 5px; - border: 1px solid $border-color; - border-radius: $border-radius; - background: $background-color; - -webkit-box-shadow: 0 2px 4px 0 rgba(#000, 0.16), - 0 2px 10px 0 rgba(#000, 0.12); - box-shadow: 0 2px 4px 0 rgba(#000, 0.16), 0 2px 10px 0 rgba(#000, 0.12); - - &.hidden { - display: none; - } - - a { - margin: 0; - padding: 10px 20px; - font-size: $type-size-5; - - &:hover { - color: $masthead-link-color-hover; - background: $navicon-link-color-hover; - } - } - - &:before { - content: ""; - position: absolute; - top: -11px; - right: 10px; - width: 0; - border-style: solid; - border-width: 0 10px 10px; - border-color: $border-color transparent; - display: block; - z-index: 0; - } - - &:after { - content: ""; - position: absolute; - top: -10px; - right: 10px; - width: 0; - border-style: solid; - border-width: 0 10px 10px; - border-color: $background-color transparent; - display: block; - z-index: 1; - } - - li { - display: block; - border-bottom: 1px solid $border-color; - - &:last-child { - border-bottom: none; - } - } - } -} - -.no-js { - .greedy-nav { - .visible-links { - -ms-flex-wrap: wrap; - flex-wrap: wrap; - overflow: visible; - } - } -} - -/* - Navigation list - ========================================================================== */ - -.nav__list { - margin-bottom: 1.5em; - - input[type="checkbox"], - label { - display: none; - } - - @include breakpoint(max-width $large - 1px) { - label { - position: relative; - display: inline-block; - padding: 0.5em 2.5em 0.5em 1em; - color: $gray; - font-size: $type-size-6; - font-weight: bold; - border: 1px solid $light-gray; - border-radius: $border-radius; - z-index: 20; - -webkit-transition: 0.2s ease-out; - transition: 0.2s ease-out; - cursor: pointer; - - &:before, - &:after { - content: ""; - position: absolute; - right: 1em; - top: 1.25em; - width: 0.75em; - height: 0.125em; - line-height: 1; - background-color: $gray; - -webkit-transition: 0.2s ease-out; - transition: 0.2s ease-out; - } - - &:after { - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); - } - - &:hover { - color: #fff; - border-color: $gray; - background-color: mix(white, #000, 20%); - - &:before, - &:after { - background-color: #fff; - } - } - } - - /* selected*/ - input:checked + label { - color: white; - background-color: mix(white, #000, 20%); - - &:before, - &:after { - background-color: #fff; - } - } - - /* on hover show expand*/ - label:hover:after { - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); - } - - input:checked + label:hover:after { - -webkit-transform: rotate(0); - -ms-transform: rotate(0); - transform: rotate(0); - } - - ul { - margin-bottom: 1em; - } - - a { - display: block; - padding: 0.25em 0; - - @include breakpoint($large) { - padding-top: 0.125em; - padding-bottom: 0.125em; - } - - &:hover { - text-decoration: underline; - } - } - } -} - -.nav__list .nav__items { - margin: 0; - font-size: 1.25rem; - - a { - color: inherit; - } - - .active { - margin-left: -0.5em; - padding-left: 0.5em; - padding-right: 0.5em; - font-weight: bold; - } - - @include breakpoint(max-width $large - 1px) { - position: relative; - max-height: 0; - opacity: 0%; - overflow: hidden; - z-index: 10; - -webkit-transition: 0.3s ease-in-out; - transition: 0.3s ease-in-out; - -webkit-transform: translate(0, 10%); - -ms-transform: translate(0, 10%); - transform: translate(0, 10%); - } -} - -@include breakpoint(max-width $large - 1px) { - .nav__list input:checked ~ .nav__items { - -webkit-transition: 0.5s ease-in-out; - transition: 0.5s ease-in-out; - max-height: 9999px; /* exaggerate max-height to accommodate tall lists*/ - overflow: visible; - opacity: 1; - margin-top: 1em; - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - transform: translate(0, 0); - } -} - -.nav__title { - margin: 0; - padding: 0.5rem 0.75rem; - font-family: $sans-serif-narrow; - font-size: $type-size-5; - font-weight: bold; -} - -.nav__sub-title { - display: block; - margin: 0.5rem 0; - padding: 0.25rem 0; - font-family: $sans-serif-narrow; - font-size: $type-size-6; - font-weight: bold; - text-transform: uppercase; - border-bottom: 1px solid $border-color; -} - -/* - Table of contents navigation - ========================================================================== */ - -.toc { - font-family: $sans-serif-narrow; - color: $gray; - background-color: $background-color; - border: 1px solid $border-color; - border-radius: $border-radius; - -webkit-box-shadow: $box-shadow; - box-shadow: $box-shadow; - - .nav__title { - color: #fff; - font-size: $type-size-6; - background: $primary-color; - border-top-left-radius: $border-radius; - border-top-right-radius: $border-radius; - } - - // Scrollspy marks toc items as .active when they are in focus - .active a { - @include yiq-contrasted($active-color); - } -} - -.toc__menu { - margin: 0; - padding: 0; - width: 100%; - list-style: none; - font-size: $type-size-6; - - @include breakpoint($large) { - font-size: $type-size-7; - } - - a { - display: block; - padding: 0.25rem 0.75rem; - color: $muted-text-color; - font-weight: bold; - line-height: 1.5; - border-bottom: 1px solid $border-color; - - &:hover { - color: $text-color; - } - } - - li ul > li a { - padding-left: 1.25rem; - font-weight: normal; - } - - li ul li ul > li a { - padding-left: 1.75rem; - } - - li ul li ul li ul > li a { - padding-left: 2.25rem; - } - - li ul li ul li ul li ul > li a { - padding-left: 2.75rem; - } - - li ul li ul li ul li ul li ul > li a { - padding-left: 3.25rem - } -} diff --git a/_sass/minimal-mistakes/_notices.scss b/_sass/minimal-mistakes/_notices.scss deleted file mode 100644 index 90570b012e237..0000000000000 --- a/_sass/minimal-mistakes/_notices.scss +++ /dev/null @@ -1,109 +0,0 @@ -/* ========================================================================== - NOTICE TEXT BLOCKS - ========================================================================== */ - -/** - * Default Kramdown usage (no indents!): - *
- * #### Headline for the Notice - * Text for the notice - *
- */ - -@mixin notice($notice-color) { - margin: 2em 0 !important; /* override*/ - padding: 1em; - color: $text-color; - font-family: $global-font-family; - font-size: $type-size-6 !important; - text-indent: initial; /* override*/ - background-color: mix($background-color, $notice-color, $notice-background-mix); - border-radius: $border-radius; - box-shadow: 0 1px 1px rgba($notice-color, 0.25); - - h4 { - margin-top: 0 !important; /* override*/ - margin-bottom: 0.75em; - line-height: inherit; - } - - @at-root .page__content #{&} h4 { - /* using at-root to override .page-content h4 font size*/ - margin-bottom: 0; - font-size: 1em; - } - - p { - &:last-child { - margin-bottom: 0 !important; /* override*/ - } - } - - h4 + p { - /* remove space above paragraphs that appear directly after notice headline*/ - margin-top: 0; - padding-top: 0; - } - - a { - color: mix(#000, $notice-color, 10%); - - &:hover { - color: mix(#000, $notice-color, 50%); - } - } - - @at-root #{selector-unify(&, "blockquote")} { - border-left-color: mix(#000, $notice-color, 10%); - } - - code { - background-color: mix($background-color, $notice-color, $code-notice-background-mix) - } - - pre code { - background-color: inherit; - } - - ul { - &:last-child { - margin-bottom: 0; /* override*/ - } - } -} - -/* Default notice */ - -.notice { - @include notice($light-gray); -} - -/* Primary notice */ - -.notice--primary { - @include notice($primary-color); -} - -/* Info notice */ - -.notice--info { - @include notice($info-color); -} - -/* Warning notice */ - -.notice--warning { - @include notice($warning-color); -} - -/* Success notice */ - -.notice--success { - @include notice($success-color); -} - -/* Danger notice */ - -.notice--danger { - @include notice($danger-color); -} diff --git a/_sass/minimal-mistakes/_page.scss b/_sass/minimal-mistakes/_page.scss deleted file mode 100644 index 50e40a9578437..0000000000000 --- a/_sass/minimal-mistakes/_page.scss +++ /dev/null @@ -1,759 +0,0 @@ -/* ========================================================================== - SINGLE PAGE/POST - ========================================================================== */ - -#main { - @include clearfix; - margin-left: auto; - margin-right: auto; - padding-left: 1em; - padding-right: 1em; - -webkit-animation: $intro-transition; - animation: $intro-transition; - max-width: 100%; - -webkit-animation-delay: 0.15s; - animation-delay: 0.15s; - - @include breakpoint($x-large) { - max-width: $max-width; - } -} - -body { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - min-height: 100vh; - counter-reset: sidenote-counter; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; -} - -.initial-content, -.search-content { - flex: 1 0 auto; -} - -.page { - @include breakpoint($large) { - float: right; - width: calc(100% - #{$right-sidebar-width-narrow}); - padding-right: $right-sidebar-width-narrow; - } - - @include breakpoint($x-large) { - width: calc(100% - #{$right-sidebar-width}); - padding-right: $right-sidebar-width; - } - - .page__inner-wrap { - float: left; - margin-top: 1em; - margin-left: 0; - margin-right: 0; - width: 100%; - clear: both; - - .page__content, - .page__meta, - .page__share { - position: relative; - float: left; - margin-left: 0; - margin-right: 0; - width: 100%; - clear: both; - } - } -} - -.page__title { - margin-top: 0; - line-height: 1; - - a { - color: $text-color; - text-decoration: none; - } - - & + .page__meta { - margin-top: -0.5em; - } -} - -.page__lead { - font-family: $global-font-family; - font-size: $type-size-4; -} - -.page__content { - h2 { - padding-bottom: 0.5em; - border-bottom: 1px solid $border-color; - } - - h1, h2, h3, h4, h5, h6 { - max-width: 75%; // Adjust the percentage as needed - .header-link { - position: relative; - left: 0.5em; - opacity: 0; - font-size: 0.8em; - -webkit-transition: opacity 0.2s ease-in-out 0.1s; - -moz-transition: opacity 0.2s ease-in-out 0.1s; - -o-transition: opacity 0.2s ease-in-out 0.1s; - transition: opacity 0.2s ease-in-out 0.1s; - } - - &:hover .header-link { - opacity: 1; - } - } - - p, - li, - dl { - font-size: 1em; - } - - /* paragraph indents */ - p { - margin: 0 0 $indent-var; - - /* sibling indentation*/ - @if $paragraph-indent == true { - & + p { - text-indent: $indent-var; - margin-top: -($indent-var); - } - } - } - - a:not(.btn) { - &:hover { - text-decoration: underline; - - img { - box-shadow: 0 0 10px rgba(#000, 0.25); - } - } - } - - :not(pre) > code { - padding-top: 0.1rem; - padding-bottom: 0.1rem; - font-size: 0.8em; - background: $code-background-color; - border-radius: $border-radius; - - &::before, - &::after { - letter-spacing: -0.2em; - content: "\00a0"; /* non-breaking space*/ - } - } - - dt { - margin-top: 1em; - font-family: $sans-serif; - font-weight: bold; - } - - dd { - margin-left: 1em; - font-family: $sans-serif; - font-size: $type-size-6; - } - - .small { - font-size: $type-size-6; - } - - /* blockquote citations */ - blockquote + .small { - margin-top: -1.5em; - padding-left: 1.25rem; - } -} - -.page__hero { - position: relative; - margin-bottom: 2em; - @include clearfix; - -webkit-animation: $intro-transition; - animation: $intro-transition; - -webkit-animation-delay: 0.25s; - animation-delay: 0.25s; - - &--overlay { - position: relative; - margin-bottom: 2em; - padding: 3em 0; - @include clearfix; - background-size: cover; - background-repeat: no-repeat; - background-position: center; - -webkit-animation: $intro-transition; - animation: $intro-transition; - -webkit-animation-delay: 0.25s; - animation-delay: 0.25s; - - a { - color: #fff; - } - - .wrapper { - padding-left: 1em; - padding-right: 1em; - - @include breakpoint($x-large) { - max-width: $x-large; - } - } - - .page__title, - .page__meta, - .page__lead, - .btn { - color: #fff; - text-shadow: 1px 1px 4px rgba(#000, 0.5); - } - - .page__lead { - max-width: $medium; - } - - .page__title { - font-size: $type-size-2; - - @include breakpoint($small) { - font-size: $type-size-1; - } - } - } -} - -.page__hero-image { - width: 100%; - height: auto; - -ms-interpolation-mode: bicubic; -} - -.page__hero-caption { - position: absolute; - bottom: 0; - right: 0; - margin: 0 auto; - padding: 2px 5px; - color: #fff; - font-family: $caption-font-family; - font-size: $type-size-7; - background: #000; - text-align: right; - z-index: 5; - opacity: 0.5; - border-radius: $border-radius 0 0 0; - - @include breakpoint($large) { - padding: 5px 10px; - } - - a { - color: #fff; - text-decoration: none; - } -} - -/* - Social sharing - ========================================================================== */ - -.page__share { - margin-top: 2em; - padding-top: 1em; - border-top: 1px solid $border-color; - - @include breakpoint(max-width $small) { - .btn span { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; - } - } -} - -.page__share-title { - margin-bottom: 10px; - font-size: $type-size-6; - text-transform: uppercase; -} - -/* - Page meta - ========================================================================== */ - -.page__meta { - margin-top: 0.25em; - color: $muted-text-color; - font-family: $sans-serif; - font-size: $type-size-6; - - p { - margin: 0; - } - - a { - color: inherit; - } -} - -.page__meta-title { - margin-bottom: 10px; - font-size: $type-size-6; - text-transform: uppercase; -} - -.page__meta-sep::before { - content: "\2022"; - padding-left: 0.5em; - padding-right: 0.5em; -} - -/* - Page taxonomy - ========================================================================== */ - -.page__taxonomy { - .sep { - display: none; - } - - strong { - margin-right: 10px; - } -} - -.page__taxonomy-item { - display: inline-block; - margin-right: 5px; - margin-bottom: 8px; - padding: 5px 10px; - text-decoration: none; - border: 1px solid mix(#000, $border-color, 25%); - border-radius: $border-radius; - - &:hover { - text-decoration: none; - color: $link-color-hover; - } -} - -.taxonomy__section { - margin-bottom: 2em; - padding-bottom: 1em; - - &:not(:last-child) { - border-bottom: solid 1px $border-color; - } - - .archive__item-title { - margin-top: 0; - } - - .archive__subtitle { - clear: both; - border: 0; - } - - + .taxonomy__section { - margin-top: 2em; - } -} - -.taxonomy__title { - margin-bottom: 0.5em; - color: $muted-text-color; -} - -.taxonomy__count { - color: $muted-text-color; -} - -.taxonomy__index { - display: grid; - grid-column-gap: 2em; - grid-template-columns: repeat(2, 1fr); - margin: 1.414em 0; - padding: 0; - font-size: 0.75em; - list-style: none; - - @include breakpoint($large) { - grid-template-columns: repeat(3, 1fr); - } - - a { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - padding: 0.25em 0; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - color: inherit; - text-decoration: none; - border-bottom: 1px solid $border-color; - } -} - -.back-to-top { - display: block; - clear: both; - color: $muted-text-color; - font-size: 0.6em; - text-transform: uppercase; - text-align: right; - text-decoration: none; -} - -/* - Comments - ========================================================================== */ - -.page__comments { - float: left; - margin-left: 0; - margin-right: 0; - width: 100%; - clear: both; -} - -.page__comments-title { - margin-top: 2rem; - margin-bottom: 10px; - padding-top: 2rem; - font-size: $type-size-6; - border-top: 1px solid $border-color; - text-transform: uppercase; -} - -.page__comments-form { - -webkit-transition: $global-transition; - transition: $global-transition; - - &.disabled { - input, - button, - textarea, - label { - pointer-events: none; - cursor: not-allowed; - filter: alpha(opacity=65); - box-shadow: none; - opacity: 0.65; - } - } -} - -.comment { - @include clearfix(); - margin: 1em 0; - - &:not(:last-child) { - border-bottom: 1px solid $border-color; - } -} - -.comment__avatar-wrapper { - float: left; - width: 60px; - height: 60px; - - @include breakpoint($large) { - width: 100px; - height: 100px; - } -} - -.comment__avatar { - width: 40px; - height: 40px; - border-radius: 50%; - - @include breakpoint($large) { - width: 80px; - height: 80px; - padding: 5px; - border: 1px solid $border-color; - } -} - -.comment__content-wrapper { - float: right; - width: calc(100% - 60px); - - @include breakpoint($large) { - width: calc(100% - 100px); - } -} - -.comment__author { - margin: 0; - - a { - text-decoration: none; - } -} - -.comment__date { - @extend .page__meta; - margin: 0; - - a { - text-decoration: none; - } -} - -/* - Related - ========================================================================== */ - -.page__related { - @include clearfix(); - float: left; - margin-top: 2em; - padding-top: 1em; - border-top: 1px solid $border-color; - - @include breakpoint($large) { - float: right; - width: calc(100% - #{$right-sidebar-width-narrow}); - } - - @include breakpoint($x-large) { - width: calc(100% - #{$right-sidebar-width}); - } - - a { - color: inherit; - text-decoration: none; - } -} - -.page__related-title { - margin-bottom: 10px; - font-size: $type-size-6; - text-transform: uppercase; -} - -/* - Wide Pages - ========================================================================== */ - -.wide { - .page { - @include breakpoint($large) { - padding-right: 0; - } - - @include breakpoint($x-large) { - padding-right: 0; - } - } - - .page__related { - @include breakpoint($large) { - padding-right: 0; - } - - @include breakpoint($x-large) { - padding-right: 0; - } - } -} - -/*****************************************************************************/ -/* -/* Figure Handling as per Tufte Jekyll blog theme -/* source: -/* [1] tufte-jekyll by Clay Hanson ( https://github.com/clayh53/tufte-jekyll ) -/* -/*****************************************************************************/ -// Mathjax fonts need TLC -.mjx-math{ - font-size: 1rem; -} -// --------- Typography stuff -----------// -// added rational line height and margins ala http://webtypography.net/intro/ - -/* Chapter Epigraphs */ -div.epigraph { margin: 3.5636rem 0; } - -div.epigraph > blockquote { margin-top: 3rem; - margin-bottom: 3rem; - } - -div.epigraph > blockquote, div.epigraph > blockquote > p { font-style: italic; } - -div.epigraph > blockquote > footer { font-style: normal; - width: 45%; - padding-left: 2.5%; - padding-right: 2.5%; - padding-top: 0; - margin-top: 0.4455rem; - margin-bottom: 3.1182rem } - -div.epigraph > blockquote > footer > cite { font-style: italic; } - -/* end chapter epigraphs styles */ - -/* Basic Layout stuff --*/ -/* -article { position: relative; - padding: 1 - - rem 0rem 2.5rem 0rem; } // reduced top and bottom padding by 50% -*/ - -/* -section { padding-top: 1rem; - padding-bottom: 1rem; } -*/ - -/* -ul,ol { width: 45%; - -webkit-padding-start: 5%; - -webkit-padding-end: 5%; - list-style-type: none; } -*/ -//li { padding: 0.5em 0; } //vertical padding on list items screws up vertical rhythym - -figure, figure img.maincolumn { max-width: 55%; - -webkit-margin-start: 0; - -webkit-margin-end: 0; - margin-bottom: 3em; } - -figcaption { float: right; - clear: right; - margin-right: -50%; - margin-top: 0; - margin-bottom: 0; - font-size: 1.0rem; - line-height: 1.6; - vertical-align: baseline; - position: relative; - max-width: 40%; - font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;} - -figure.fullwidth figcaption { float: left; margin-right: 0%; margin-left: 33%; max-width: 100%; } - -img { max-width: 100%; } - -.sidenote, .marginnote { float: right; - clear: right; - margin-right: -50%; - width: 45%; - margin-top: 0; - margin-bottom: 1.96rem; - font-size: 0.9rem; - line-height: 1.96; //changed to bring line heights into rational pattern - vertical-align: baseline; - position: relative; - font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;} - - -li .sidenote, li .marginnote{ margin-right: -50%; width: 25%} //added to allow for the fact that lists are indented and marginnotes and sidenotes push to right - -blockquote .sidenote, blockquote .marginnote { margin-right: -79% } - -.sidenote-number { counter-increment: sidenote-counter; } - -.sidenote-number:after, .sidenote:before { content: counter(sidenote-counter, lower-roman) " "; - font-family: et-bembo-roman-old-style; - color: $contrast-color; //added color - position: relative; - vertical-align: baseline; } - -.sidenote-number:after { content: counter(sidenote-counter, lower-roman); - font-size: 0.8rem; - color: $contrast-color; - top: -0.5rem; - left: 0.1rem; } - -.sidenote:before { content: counter(sidenote-counter, lower-roman) ".\000a0"; // this is unicode for a non-breaking space - color: $contrast-color; - top: 0rem; } //removed superscripting for numerical reference in sidenote - -p, footer, div.table-wrapper, .MJXc-display, .MathJax { width: 75%; } - -div.table-wrapper, table { overflow-x: auto; } //changed all overflow values to 'auto' so scroll bars appear only as needed - -@media screen and (max-width: 760px) { p, footer { width: 90%; } - pre code { width: 87.5%; } - //ul { width: 85%; } // Commened this cos it really bugs the alignment of the follow button in my iPhone 12 Pro Max - figure { max-width: 90%; } - figcaption, figure.fullwidth figcaption { margin-right: 0%; - max-width: none; } - blockquote p, blockquote footer, div.epigraph > blockquote > footer,.MJXc-display { width: 80%; - padding-left: 5%; - padding-right: 5%; - }} - -.marginnote code, .sidenote code { font-size: 1rem; } //more .code class removal - -pre { width: 52.5%; //, pre code, p pre code are both selectors in tufte.css - they have been removed here to fix alignment issues - padding-left: 2.5%; - overflow-x: auto; } - -.fullwidth, li.listing div{ max-width: 90%; } - -.full-width { .sidenote, .sidenote-number, .marginnote { display: none; } } - -span.newthought { font-variant: small-caps; - font-size: 1.2em; - letter-spacing: 0.05rem; } - -input.margin-toggle { display: none; } - -label.sidenote-number { display: inline; } - -label.margin-toggle:not(.sidenote-number) { display: none; } - -@media (max-width: 760px) { label.margin-toggle:not(.sidenote-number) { display: inline; color: $contrast-color; } - .sidenote, .marginnote { display: none; } - .margin-toggle:checked + .sidenote, - .margin-toggle:checked + .marginnote { display: block; - float: left; - left: 1rem; - clear: both; - width: 95%; - margin: 1rem 2.5%; - vertical-align: baseline; - position: relative; } - label { cursor: pointer; } - pre, pre code, p code, p pre code { width: 90%; - padding: 0; } - .table-caption { display: block; - float: right; - clear: both; - width: 98%; - margin-top: 1rem; - margin-bottom: 0.5rem; - margin-left: 1%; - margin-right: 1%; - vertical-align: baseline; - position: relative; } - div.table-wrapper, table, table.booktabs { width: 85%; } - div.table-wrapper { border-right: 1px solid #efefef; } - img { max-width: 100%; } - figcaption.maincolumn-figure, figure.fullwidth figcaption { float:none; text-align: center;} - figure.fullwidth figcaption { margin-left: 0; } - } -/*--- End of Basic Layout stuff from tufte.css ---*/ diff --git a/_sass/minimal-mistakes/_print.scss b/_sass/minimal-mistakes/_print.scss deleted file mode 100644 index b93f1d404e4dd..0000000000000 --- a/_sass/minimal-mistakes/_print.scss +++ /dev/null @@ -1,252 +0,0 @@ -/* ========================================================================== - PRINT STYLES - ========================================================================== */ - -@media print { - - [hidden] { - display: none; - } - - * { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - } - - html { - margin: 0; - padding: 0; - min-height: auto !important; - font-size: 16px; - } - - body { - margin: 0 auto; - background: #fff !important; - color: #000 !important; - font-size: 1rem; - line-height: 1.5; - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - text-rendering: optimizeLegibility; - } - - h1, - h2, - h3, - h4, - h5, - h6 { - color: #000; - line-height: 1.2; - margin-bottom: 0.75rem; - margin-top: 0; - } - - h1 { - font-size: 2.5rem; - } - - h2 { - font-size: 2rem; - } - - h3 { - font-size: 1.75rem; - } - - h4 { - font-size: 1.5rem; - } - - h5 { - font-size: 1.25rem; - } - - h6 { - font-size: 1rem; - } - - a, - a:visited { - color: #000; - text-decoration: underline; - word-wrap: break-word; - } - - table { - border-collapse: collapse; - } - - thead { - display: table-header-group; - } - - table, - th, - td { - border-bottom: 1px solid #000; - } - - td, - th { - padding: 8px 16px; - } - - img { - border: 0; - display: block; - max-width: 100% !important; - vertical-align: middle; - } - - hr { - border: 0; - border-bottom: 2px solid #bbb; - height: 0; - margin: 2.25rem 0; - padding: 0; - } - - dt { - font-weight: bold; - } - - dd { - margin: 0; - margin-bottom: 0.75rem; - } - - abbr[title], - acronym[title] { - border: 0; - text-decoration: none; - } - - table, - blockquote, - pre, - code, - figure, - li, - hr, - ul, - ol, - a, - tr { - page-break-inside: avoid; - } - - h2, - h3, - h4, - p, - a { - orphans: 3; - widows: 3; - } - - h1, - h2, - h3, - h4, - h5, - h6 { - page-break-after: avoid; - page-break-inside: avoid; - } - - h1 + p, - h2 + p, - h3 + p { - page-break-before: avoid; - } - - img { - page-break-after: auto; - page-break-before: auto; - page-break-inside: avoid; - } - - pre { - white-space: pre-wrap !important; - word-wrap: break-word; - } - - a[href^='http://']:after, - a[href^='https://']:after, - a[href^='ftp://']:after { - content: " (" attr(href) ")"; - font-size: 80%; - } - - abbr[title]:after, - acronym[title]:after { - content: " (" attr(title) ")"; - } - - #main { - max-width: 100%; - } - - .page { - margin: 0; - padding: 0; - width: 100%; - } - - .page-break, - .page-break-before { - page-break-before: always; - } - - .page-break-after { - page-break-after: always; - } - - .no-print { - display: none; - } - - a.no-reformat:after { - content: ''; - } - - abbr[title].no-reformat:after, - acronym[title].no-reformat:after { - content: ''; - } - - .page__hero-caption { - color: #000 !important; - background: #fff !important; - opacity: 1; - - a { - color: #000 !important; - } - } - -/* - Hide the following elements on print - ========================================================================== */ - - .masthead, - .toc, - .page__share, - .page__related, - .pagination, - .ads, - .page__footer, - .page__comments-form, - .author__avatar, - .author__content, - .author__urls-wrapper, - .nav__list, - .sidebar, - .adsbygoogle { - display: none !important; - height: 1px !important; - } -} \ No newline at end of file diff --git a/_sass/minimal-mistakes/_reset.scss b/_sass/minimal-mistakes/_reset.scss deleted file mode 100644 index 2259fd0c23884..0000000000000 --- a/_sass/minimal-mistakes/_reset.scss +++ /dev/null @@ -1,187 +0,0 @@ -/* ========================================================================== - STYLE RESETS - ========================================================================== */ - -* { box-sizing: border-box; } - -html { - /* apply a natural box layout model to all elements */ - box-sizing: border-box; - background-color: $background-color; - font-size: 16px; - - @include breakpoint($medium) { - font-size: 18px; - } - - @include breakpoint($large) { - font-size: 20px; - } - - @include breakpoint($x-large) { - font-size: 22px; - } - - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} - -/* Remove margin */ - -body { margin: 0; } - -/* Selected elements */ - -::-moz-selection { - color: #fff; - background: #000; -} - -::selection { - color: #fff; - background: #000; -} - -/* Display HTML5 elements in IE6-9 and FF3 */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section { - display: block; -} - -/* Display block in IE6-9 and FF3 */ - -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} - -/* Prevents modern browsers from displaying 'audio' without controls */ - -audio:not([controls]) { - display: none; -} - -a { - color: $link-color; -} - -/* Apply focus state */ - -a:focus { - @extend %tab-focus; -} - -/* Remove outline from links */ - -a:hover, -a:active { - outline: 0; -} - -/* Prevent sub and sup affecting line-height in all browsers */ - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -/* img border in anchor's and image quality */ - -img { - /* Responsive images (ensure images don't scale beyond their parents) */ - max-width: 100%; /* part 1: Set a maximum relative to the parent*/ - width: auto\9; /* IE7-8 need help adjusting responsive images*/ - height: auto; /* part 2: Scale the height according to the width, otherwise you get stretching*/ - - vertical-align: middle; - border: 0; - -ms-interpolation-mode: bicubic; -} - -/* Prevent max-width from affecting Google Maps */ - -#map_canvas img, -.google-maps img { - max-width: none; -} - -/* Consistent form font size in all browsers, margin changes, misc */ - -button, -input, -select, -textarea { - margin: 0; - font-size: 100%; - vertical-align: middle; -} - -button, -input { - *overflow: visible; /* inner spacing ie IE6/7*/ - line-height: normal; /* FF3/4 have !important on line-height in UA stylesheet*/ -} - -button::-moz-focus-inner, -input::-moz-focus-inner { /* inner padding and border oddities in FF3/4*/ - padding: 0; - border: 0; -} - -button, -html input[type="button"], // avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; /* corrects inability to style clickable `input` types in iOS*/ - cursor: pointer; /* improves usability and consistency of cursor style between image-type `input` and others*/ -} - -label, -select, -button, -input[type="button"], -input[type="reset"], -input[type="submit"], -input[type="radio"], -input[type="checkbox"] { - cursor: pointer; /* improves usability and consistency of cursor style between image-type `input` and others*/ -} - -input[type="search"] { /* Appearance in Safari/Chrome*/ - box-sizing: border-box; - -webkit-appearance: textfield; -} - -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; /* inner-padding issues in Chrome OSX, Safari 5*/ -} - -textarea { - overflow: auto; /* remove vertical scrollbar in IE6-9*/ - vertical-align: top; /* readability and alignment cross-browser*/ -} \ No newline at end of file diff --git a/_sass/minimal-mistakes/_search.scss b/_sass/minimal-mistakes/_search.scss deleted file mode 100644 index fa7ee832bf172..0000000000000 --- a/_sass/minimal-mistakes/_search.scss +++ /dev/null @@ -1,132 +0,0 @@ -/* ========================================================================== - SEARCH - ========================================================================== */ - -.layout--search { - .archive__item-teaser { - margin-bottom: 0.25em; - } -} - -.search__toggle { - margin-left: 1rem; - margin-right: 1rem; - height: $nav-toggle-height; - border: 0; - outline: none; - color: $primary-color; - background-color: transparent; - cursor: pointer; - -webkit-transition: 0.2s; - transition: 0.2s; - - &:hover { - color: mix(#000, $primary-color, 25%); - } -} - -.search-icon { - width: 100%; - height: 100%; -} - -.search-content { - display: none; - visibility: hidden; - padding-top: 1em; - padding-bottom: 1em; - - &__inner-wrap { - width: 100%; - margin-left: auto; - margin-right: auto; - padding-left: 1em; - padding-right: 1em; - -webkit-animation: $intro-transition; - animation: $intro-transition; - -webkit-animation-delay: 0.15s; - animation-delay: 0.15s; - - @include breakpoint($x-large) { - max-width: $max-width; - } - - } - - &__form { - background-color: transparent; - } - - .search-input { - display: block; - margin-bottom: 0; - padding: 0; - border: none; - outline: none; - box-shadow: none; - background-color: transparent; - font-size: $type-size-3; - - @include breakpoint($large) { - font-size: $type-size-2; - } - - @include breakpoint($x-large) { - font-size: $type-size-1; - } - } - - &.is--visible { - display: block; - visibility: visible; - - &::after { - content: ""; - display: block; - } - } - - .results__found { - margin-top: 0.5em; - font-size: $type-size-6; - } - - .archive__item { - margin-bottom: 2em; - - @include breakpoint($large) { - width: 75%; - } - - @include breakpoint($x-large) { - width: 50%; - } - } - - .archive__item-title { - margin-top: 0; - } - - .archive__item-excerpt { - margin-bottom: 0; - } -} - -/* Algolia search */ - -.ais-search-box { - max-width: 100% !important; - margin-bottom: 2em; -} - -.archive__item-title .ais-Highlight { - color: $primary-color; - font-style: normal; - text-decoration: underline; -} - -.archive__item-excerpt .ais-Highlight { - color: $primary-color; - font-style: normal; - font-weight: bold; -} diff --git a/_sass/minimal-mistakes/_settings.scss b/_sass/minimal-mistakes/_settings.scss deleted file mode 100755 index 3a2ae69bc7d1f..0000000000000 --- a/_sass/minimal-mistakes/_settings.scss +++ /dev/null @@ -1,17 +0,0 @@ -/* This file contains all the constants for colors and font styles */ - -$body-font: ETBembo, "Chronicle Text G2", Palatino, "Palatino Linotype", "Palatino LT STD", "Book Antiqua", Georgia, serif; -// Note that Gill Sans is the top of the stack and corresponds to what is used in Tufte's books -// However, it is not a free font, so if it is not present on the computer that is viewing the webpage -// The free Google 'Lato' font is used instead. It is similar. -$sans-font: "Gill Sans", "Gill Sans MT", "Gotham Narrow", "Lato", Calibri, sans-serif; -$code-font: Consolas, "Liberation Mono", Menlo, Courier, monospace; -$url-font: "Lucida Console", "Lucida Sans Typewriter", Monaco, "Bitstream Vera Sans Mono", monospace; -//$text-color: #111; -//$bg-color: #fffff8; -$contrast-color: #f97600;//#a00000; -//$border-color: #333333; -//$link-style: underline; // choices are 'color' or 'underline'. Color option styles links with $contrast-color set above - - - diff --git a/_sass/minimal-mistakes/_sidebar.scss b/_sass/minimal-mistakes/_sidebar.scss deleted file mode 100644 index 1592932ebb0b6..0000000000000 --- a/_sass/minimal-mistakes/_sidebar.scss +++ /dev/null @@ -1,352 +0,0 @@ -/* ========================================================================== - SIDEBAR - ========================================================================== */ - -/* - Default - ========================================================================== */ - -.sidebar { - @include clearfix(); - // @include breakpoint(max-width $large) { - // /* fix z-index order of follow links */ - // position: relative; - // z-index: 10; - // -webkit-transform: translate3d(0, 0, 0); - // transform: translate3d(0, 0, 0); - // } - - @include breakpoint($large) { - float: left; - width: calc(#{$right-sidebar-width-narrow} - 1em); - opacity: 0.75; - -webkit-transition: opacity 0.2s ease-in-out; - transition: opacity 0.2s ease-in-out; - - &:hover { - opacity: 1; - } - - &.sticky { - overflow-y: auto; - /* calculate height of nav list - viewport height - nav height - masthead x-padding - */ - max-height: calc(100vh - #{$nav-height} - 2em); - } - } - - @include breakpoint($x-large) { - width: calc(#{$right-sidebar-width} - 1em); - } - - > * { - margin-top: 1em; - margin-bottom: 1em; - } - - h2, - h3, - h4, - h5, - h6 { - margin-bottom: 0; - font-family: $sans-serif-narrow; - } - - p, - li { - font-family: $sans-serif; - font-size: $type-size-5; - line-height: 1.5; - } - - img { - width: 100%; - - &.emoji { - width: 20px; - height: 20px; - } - } -} - -.sidebar__right { - margin-bottom: 1em; - - @include breakpoint($large) { - position: absolute; - top: 0; - right: 0; - width: $right-sidebar-width-narrow; - margin-right: -1 * $right-sidebar-width-narrow; - padding-left: 1em; - z-index: 10; - - &.sticky { - @include clearfix(); - position: -webkit-sticky; - position: sticky; - top: 2em; - float: right; - - .toc { - .toc__menu { - overflow-y: auto; - max-height: calc(100vh - 7em); - } - } - } - } - - @include breakpoint($x-large) { - width: $right-sidebar-width; - margin-right: -1 * $right-sidebar-width; - } -} - -.splash .sidebar__right { - @include breakpoint($large) { - position: relative; - float: right; - margin-right: 0; - } - - @include breakpoint($x-large) { - margin-right: 0; - } -} - -/* - Author profile and links - ========================================================================== */ - -.author__avatar { - display: table-cell; - vertical-align: top; - width: 36px; - height: 36px; - - @include breakpoint($large) { - display: block; - width: auto; - height: auto; - } - - img { - max-width: 110px; - border-radius: 50%; - - @include breakpoint($large) { - padding: 5px; - border: 1px solid $border-color; - } - } -} - -.author__content { - display: table-cell; - vertical-align: top; - padding-left: 15px; - padding-right: 25px; - line-height: 1; - - @include breakpoint($large) { - display: block; - width: 100%; - padding-left: 0; - padding-right: 0; - } - - a { - color: inherit; - text-decoration: none; - } -} - -.author__name { - margin: 0; - - @include breakpoint($large) { - margin-top: 10px; - margin-bottom: 10px; - } -} - -.sidebar .author__name { - font-family: $sans-serif; - font-size: $type-size-5; -} - -.author__bio { - margin: 0; - - @include breakpoint($large) { - margin-top: 10px; - margin-bottom: 20px; - } -} - -.author__urls-wrapper { - position: relative; - display: table-cell; - vertical-align: middle; - font-family: $sans-serif; - z-index: 20; - cursor: pointer; - - li:last-child { - a { - margin-bottom: 0; - } - } - - .author__urls { - span.label { - padding-left: 5px; - } - } - - @include breakpoint($large) { - display: block; - } - - button { - position: relative; - margin-bottom: 0; - - &:before { - @supports (pointer-events: none) { - content: ''; - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - pointer-events: none; - } - } - - &.open { - &:before { - pointer-events: auto; - } - } - - @include breakpoint($large) { - display: none; - } - } -} - -.author__urls { - display: none; - position: absolute; - right: 0; - margin-top: 15px; - padding: 10px; - list-style-type: none; - border: 1px solid $border-color; - border-radius: $border-radius; - background: $background-color; - box-shadow: 0 2px 4px 0 rgba(#000, 0.16), 0 2px 10px 0 rgba(#000, 0.12); - cursor: default; - - &.is--visible { - display: block; - } - - @include breakpoint($large) { - display: block; - position: relative; - margin: 0; - padding: 0; - border: 0; - background: transparent; - box-shadow: none; - } - - &:before { - display: block; - content: ""; - position: absolute; - top: -11px; - left: calc(50% - 10px); - width: 0; - border-style: solid; - border-width: 0 10px 10px; - border-color: $border-color transparent; - z-index: 0; - - @include breakpoint($large) { - display: none; - } - } - - &:after { - display: block; - content: ""; - position: absolute; - top: -10px; - left: calc(50% - 10px); - width: 0; - border-style: solid; - border-width: 0 10px 10px; - border-color: $background-color transparent; - z-index: 1; - - @include breakpoint($large) { - display: none; - } - } - - ul { - padding: 10px; - list-style-type: none; - } - - li { - white-space: nowrap; - } - - a { - display: block; - margin-bottom: 5px; - padding-right: 5px; - padding-top: 2px; - padding-bottom: 2px; - color: inherit; - font-size: $type-size-5; - text-decoration: none; - - &:hover { - text-decoration: underline; - } - } -} - -// Specific styles for TOC -.toc { - font-family: $sans-serif; - font-size: $type-size-5; - - .nav__title { - font-size: $type-size-6; - } - - .toc__menu { - font-size: $type-size-6; - - ul { - padding-left: 1em; - } - } -} - -// Specific styles for author profile -.author__avatar, -.author__content, -.author__urls-wrapper { - font-family: $body-font; - font-size: $type-size-6; -} diff --git a/_sass/minimal-mistakes/_syntax.scss b/_sass/minimal-mistakes/_syntax.scss deleted file mode 100644 index 726520202bcda..0000000000000 --- a/_sass/minimal-mistakes/_syntax.scss +++ /dev/null @@ -1,324 +0,0 @@ -/* ========================================================================== - Syntax highlighting - ========================================================================== */ - -div.highlighter-rouge, -figure.highlight { - position: relative; - margin-bottom: 1em; - background: $base00; - color: $base05; - font-family: $monospace; - font-size: $type-size-6; - line-height: 1.8; - border-radius: $border-radius; - - > pre, - pre.highlight { - margin: 0; - padding: 1em; - } -} - -.highlight table { - margin-bottom: 0; - font-size: 1em; - border: 0; - - td { - padding: 0; - width: calc(100% - 1em); - border: 0; - - /* line numbers*/ - &.gutter, - &.rouge-gutter { - padding-right: 1em; - width: 1em; - color: $base04; - border-right: 1px solid $base04; - text-align: right; - } - - /* code */ - &.code, - &.rouge-code { - padding-left: 1em; - } - } - - pre { - margin: 0; - } -} - -.highlight pre { - width: 100%; -} - -.highlight .hll { - background-color: $base06; -} -.highlight { - .c { - /* Comment */ - color: $base04; - } - .err { - /* Error */ - color: $base08; - } - .k { - /* Keyword */ - color: $base0e; - } - .l { - /* Literal */ - color: $base09; - } - .n { - /* Name */ - color: $base05; - } - .o { - /* Operator */ - color: $base0c; - } - .p { - /* Punctuation */ - color: $base05; - } - .cm { - /* Comment.Multiline */ - color: $base04; - } - .cp { - /* Comment.Preproc */ - color: $base04; - } - .c1 { - /* Comment.Single */ - color: $base04; - } - .cs { - /* Comment.Special */ - color: $base04; - } - .gd { - /* Generic.Deleted */ - color: $base08; - } - .ge { - /* Generic.Emph */ - font-style: italic; - } - .gh { - /* Generic.Heading */ - color: $base05; - font-weight: bold; - } - .gi { - /* Generic.Inserted */ - color: $base0b; - } - .gp { - /* Generic.Prompt */ - color: $base04; - font-weight: bold; - } - .gs { - /* Generic.Strong */ - font-weight: bold; - } - .gu { - /* Generic.Subheading */ - color: $base0c; - font-weight: bold; - } - .kc { - /* Keyword.Constant */ - color: $base0e; - } - .kd { - /* Keyword.Declaration */ - color: $base0e; - } - .kn { - /* Keyword.Namespace */ - color: $base0c; - } - .kp { - /* Keyword.Pseudo */ - color: $base0e; - } - .kr { - /* Keyword.Reserved */ - color: $base0e; - } - .kt { - /* Keyword.Type */ - color: $base0a; - } - .ld { - /* Literal.Date */ - color: $base0b; - } - .m { - /* Literal.Number */ - color: $base09; - } - .s { - /* Literal.String */ - color: $base0b; - } - .na { - /* Name.Attribute */ - color: $base0d; - } - .nb { - /* Name.Builtin */ - color: $base05; - } - .nc { - /* Name.Class */ - color: $base0a; - } - .no { - /* Name.Constant */ - color: $base08; - } - .nd { - /* Name.Decorator */ - color: $base0c; - } - .ni { - /* Name.Entity */ - color: $base05; - } - .ne { - /* Name.Exception */ - color: $base08; - } - .nf { - /* Name.Function */ - color: $base0d; - } - .nl { - /* Name.Label */ - color: $base05; - } - .nn { - /* Name.Namespace */ - color: $base0a; - } - .nx { - /* Name.Other */ - color: $base0d; - } - .py { - /* Name.Property */ - color: $base05; - } - .nt { - /* Name.Tag */ - color: $base0c; - } - .nv { - /* Name.Variable */ - color: $base08; - } - .ow { - /* Operator.Word */ - color: $base0c; - } - .w { - /* Text.Whitespace */ - color: $base05; - } - .mf { - /* Literal.Number.Float */ - color: $base09; - } - .mh { - /* Literal.Number.Hex */ - color: $base09; - } - .mi { - /* Literal.Number.Integer */ - color: $base09; - } - .mo { - /* Literal.Number.Oct */ - color: $base09; - } - .sb { - /* Literal.String.Backtick */ - color: $base0b; - } - .sc { - /* Literal.String.Char */ - color: $base05; - } - .sd { - /* Literal.String.Doc */ - color: $base04; - } - .s2 { - /* Literal.String.Double */ - color: $base0b; - } - .se { - /* Literal.String.Escape */ - color: $base09; - } - .sh { - /* Literal.String.Heredoc */ - color: $base0b; - } - .si { - /* Literal.String.Interpol */ - color: $base09; - } - .sx { - /* Literal.String.Other */ - color: $base0b; - } - .sr { - /* Literal.String.Regex */ - color: $base0b; - } - .s1 { - /* Literal.String.Single */ - color: $base0b; - } - .ss { - /* Literal.String.Symbol */ - color: $base0b; - } - .bp { - /* Name.Builtin.Pseudo */ - color: $base05; - } - .vc { - /* Name.Variable.Class */ - color: $base08; - } - .vg { - /* Name.Variable.Global */ - color: $base08; - } - .vi { - /* Name.Variable.Instance */ - color: $base08; - } - .il { - /* Literal.Number.Integer.Long */ - color: $base09; - } -} - -.gist { - th, td { - border-bottom: 0; - } -} \ No newline at end of file diff --git a/_sass/minimal-mistakes/_tables.scss b/_sass/minimal-mistakes/_tables.scss deleted file mode 100644 index 830ed26566be0..0000000000000 --- a/_sass/minimal-mistakes/_tables.scss +++ /dev/null @@ -1,88 +0,0 @@ -/* ========================================================================== - TABLES - ========================================================================== */ -/* -table { - margin-bottom: 1em; - width: 100%; - font-family: $global-font-family; - font-size: $type-size-6; - border-collapse: collapse; - border: 1px solid $light-gray; - - & + table { - margin-top: 1em; - } -} - -thead { - background-color: $lighter-gray; - border-bottom: 1px solid $light-gray; -} - -th { - padding: 0.5em; - font-weight: bold; - text-align: left; - border-right: 1px solid $light-gray; -} - -td { - padding: 0.5em; - border-bottom: 1px solid $light-gray; - border-right: 1px solid $light-gray; -} - -tr, td, th { - vertical-align: middle; -} -*/ - -/*-- Table styling section - For Tufte-Jekyll, booktabs style is default for Markdown tables --*/ - -table, table.booktabs { width: auto; //making booktabs style tables the unstyled default in case someone uses Markdown styling - //margin: 0 auto; - border-spacing: 0px; - border-top: 2px solid $border-color; - border-bottom: 2px solid $border-color; } - -.booktabs th, th { border-bottom: 1px solid $border-color; - padding: 0.65ex 0.5em 0.4ex 0.5em; - font-weight: normal; - //text-align: center; - } - -th, td{ font-size: 1rem; - line-height: 1.71428571; } - -.booktabs th.cmid, th { border-bottom: 1px solid lighten($border-color, 25%); } - -.booktabs th.nocmid { border-bottom: none; } - -.booktabs tbody tr:first-child td, tr:first-child td { padding-top: 0.65ex; } /* add space between thead row and tbody */ - -.booktabs td, td { padding-left: 0.5em; - padding-right: 0.5em; - text-align: left; } - -.booktabs caption, caption { font-size: 90%; - text-align: left; - width: auto; - margin-left: auto; - margin-right: auto; - margin-top: 1ex; - caption-side: top; } - -.booktabs tbody tr, .booktabs thead tr th.l, .booktabs td.l { text-align: left !important; } -.booktabs tbody tr, .booktabs thead tr th.c, .booktabs td.c { text-align: center !important; } -.booktabs tbody tr, .booktabs thead tr th.r, .booktabs td.r { text-align: right !important; } - -.table-caption { float:right; - clear:right; - margin-right: -60%; - width: 50%; - margin-top: 0; - margin-bottom: 0; - font-size: 1.0rem; - line-height: 1.96; } -/* -- End of Table Styling section - For Tufte-Jekyll, booktabs style is default for Markdown tables --*/ diff --git a/_sass/minimal-mistakes/_toggle-button.scss b/_sass/minimal-mistakes/_toggle-button.scss deleted file mode 100644 index 21712c5f3fd26..0000000000000 --- a/_sass/minimal-mistakes/_toggle-button.scss +++ /dev/null @@ -1,56 +0,0 @@ -.theme-switch-wrapper { - display: flex; - align-items: center; - justify-content: center; - margin: 20px; -} - -.theme-switch { - display: inline-block; - height: 26px; /* Reduced height */ - position: relative; - width: 50px; /* Reduced width for smaller slider */ -} - -.theme-switch input { - display:none; -} - -.slider { - background-color: #ccc; - bottom: 0; - cursor: pointer; - left: 0; - position: absolute; - right: 0; - top: 0; - transition: .4s; -} - -.slider:before { - background-color: #f3f3f3; - bottom: 4px; - content: ""; - height: 18px; /* Reduced height */ - left: 4px; /* Initially positioned at the left */ - position: absolute; - transition: .4s; - width: 18px; /* Reduced width */ -} - -input:checked + .slider { - background-color: #252a34; -} - -.slider.round { - border-radius: 26px; /* Adjusted for reduced height */ -} - -.slider.round:before { - border-radius: 50%; -} - -input:checked + .slider:before { - left: calc(100% - 22px); /* Adjust left position for smaller button */ -} - diff --git a/_sass/minimal-mistakes/_utilities.scss b/_sass/minimal-mistakes/_utilities.scss deleted file mode 100644 index 9118ee82328e1..0000000000000 --- a/_sass/minimal-mistakes/_utilities.scss +++ /dev/null @@ -1,593 +0,0 @@ -/* ========================================================================== - UTILITY CLASSES - ========================================================================== */ - -/* - Visibility - ========================================================================== */ - -/* http://www.456bereastreet.com/archive/200711/screen_readers_sometimes_ignore_displaynone/ */ - -.hidden, -.is--hidden { - display: none; - visibility: hidden; -} - -/* for preloading images */ - -.load { - display: none; -} - -.transparent { - opacity: 0; -} - -/* https://developer.yahoo.com/blogs/ydn/clip-hidden-content-better-accessibility-53456.html */ - -.visually-hidden, -.screen-reader-text, -.screen-reader-text span, -.screen-reader-shortcut { - position: absolute !important; - clip: rect(1px, 1px, 1px, 1px); - height: 1px !important; - width: 1px !important; - border: 0 !important; - overflow: hidden; -} - -body:hover .visually-hidden a, -body:hover .visually-hidden input, -body:hover .visually-hidden button { - display: none !important; -} - -/* screen readers */ - -.screen-reader-text:focus, -.screen-reader-shortcut:focus { - clip: auto !important; - height: auto !important; - width: auto !important; - display: block; - font-size: 1em; - font-weight: bold; - padding: 15px 23px 14px; - background: #fff; - z-index: 100000; - text-decoration: none; - box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); -} - -/* - Skip links - ========================================================================== */ - -.skip-link { - position: fixed; - z-index: 20; - margin: 0; - font-family: $sans-serif; - white-space: nowrap; -} - -.skip-link li { - height: 0; - width: 0; - list-style: none; -} - -/* - Type - ========================================================================== */ - -.text-left { - text-align: left; -} - -.text-center { - text-align: center; -} - -.text-right { - text-align: right; -} - -.text-justify { - text-align: justify; -} - -.text-nowrap { - white-space: nowrap; -} - -/* - Task lists - ========================================================================== */ - -.task-list { - padding:0; - - li { - list-style-type: none; - } - - .task-list-item-checkbox { - margin-right: 0.5em; - opacity: 1; - } -} - -.task-list .task-list { - margin-left: 1em; -} - -/* - Alignment - ========================================================================== */ - -/* clearfix */ - -.cf { - clear: both; -} - -.wrapper { - margin-left: auto; - margin-right: auto; - width: 100%; -} - -/* - Images - ========================================================================== */ - -/* image align left */ - -.align-left { - display: block; - margin-left: auto; - margin-right: auto; - - @include breakpoint($small) { - float: left; - margin-right: 1em; - } -} - -/* image align right */ - -.align-right { - display: block; - margin-left: auto; - margin-right: auto; - - @include breakpoint($small) { - float: right; - margin-left: 1em; - } -} - -/* image align center */ - -.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -/* file page content container */ - -.full { - @include breakpoint($large) { - margin-right: -1 * span(2.5 of 12) !important; - } -} - -/* - Icons - ========================================================================== */ - -.icon { - display: inline-block; - fill: currentColor; - width: 1em; - height: 1.1em; - line-height: 1; - position: relative; - top: -0.1em; - vertical-align: middle; -} - -/* social icons*/ - -.social-icons { - .fas, - .fab, - .far, - .fal { - color: $text-color; - } - - .fa-behance, - .fa-behance-square { - color: $behance-color; - } - - .fa-bitbucket { - color: $bitbucket-color; - } - - .fa-dribbble, - .fa-dribble-square { - color: $dribbble-color; - } - - .fa-facebook, - .fa-facebook-square, - .fa-facebook-f { - color: $facebook-color; - } - - .fa-flickr { - color: $flickr-color; - } - - .fa-foursquare { - color: $foursquare-color; - } - - .fa-github, - .fa-github-alt, - .fa-github-square { - color: $github-color; - } - - .fa-gitlab { - color: $gitlab-color; - } - - .fa-instagram { - color: $instagram-color; - } - - .fa-keybase { - color: $keybase-color; - } - - .fa-lastfm, - .fa-lastfm-square { - color: $lastfm-color; - } - - .fa-linkedin, - .fa-linkedin-in { - color: $linkedin-color; - } - - .fa-mastodon, - .fa-mastodon-square { - color: $mastodon-color; - } - - .fa-pinterest, - .fa-pinterest-p, - .fa-pinterest-square { - color: $pinterest-color; - } - - .fa-reddit { - color: $reddit-color; - } - - .fa-rss, - .fa-rss-square { - color: $rss-color; - } - - .fa-soundcloud { - color: $soundcloud-color; - } - - .fa-stack-exchange, - .fa-stack-overflow { - color: $stackoverflow-color; - } - - .fa-tumblr, - .fa-tumblr-square { - color: $tumblr-color; - } - - .fa-twitter, - .fa-twitter-square { - color: $twitter-color; - } - - .fa-vimeo, - .fa-vimeo-square, - .fa-vimeo-v { - color: $vimeo-color; - } - - .fa-vine { - color: $vine-color; - } - - .fa-youtube { - color: $youtube-color; - } - - .fa-xing, - .fa-xing-square { - color: $xing-color; - } -} - -/* - Navicons - ========================================================================== */ - -.navicon { - position: relative; - width: $navicon-width; - height: $navicon-height; - background: $primary-color; - margin: auto; - -webkit-transition: 0.3s; - transition: 0.3s; - - &:before, - &:after { - content: ""; - position: absolute; - left: 0; - width: $navicon-width; - height: $navicon-height; - background: $primary-color; - -webkit-transition: 0.3s; - transition: 0.3s; - } - - &:before { - top: (-2 * $navicon-height); - } - - &:after { - bottom: (-2 * $navicon-height); - } -} - -.close .navicon { - /* hide the middle line*/ - background: transparent; - - /* overlay the lines by setting both their top values to 0*/ - &:before, - &:after { - -webkit-transform-origin: 50% 50%; - -ms-transform-origin: 50% 50%; - transform-origin: 50% 50%; - top: 0; - width: $navicon-width; - } - - /* rotate the lines to form the x shape*/ - &:before { - -webkit-transform: rotate3d(0, 0, 1, 45deg); - transform: rotate3d(0, 0, 1, 45deg); - } - &:after { - -webkit-transform: rotate3d(0, 0, 1, -45deg); - transform: rotate3d(0, 0, 1, -45deg); - } -} - -.greedy-nav__toggle { - &:before { - @supports (pointer-events: none) { - content: ''; - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - opacity: 0; - background-color: $background-color; - -webkit-transition: $global-transition; - transition: $global-transition; - pointer-events: none; - } - } - - &.close { - &:before { - opacity: 0.9; - -webkit-transition: $global-transition; - transition: $global-transition; - pointer-events: auto; - } - } -} - -.greedy-nav__toggle:hover { - .navicon, - .navicon:before, - .navicon:after { - background: mix(#000, $primary-color, 25%); - } - - &.close { - .navicon { - background: transparent; - } - } -} - -/* - Sticky, fixed to top content - ========================================================================== */ - -.sticky { - @include breakpoint($large) { - @include clearfix(); - position: -webkit-sticky; - position: sticky; - top: 2em; - - > * { - display: block; - } - } -} - -/* - Wells - ========================================================================== */ - -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: $border-radius; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} - -/* - Modals - ========================================================================== */ - -.show-modal { - overflow: hidden; - position: relative; - - &:before { - position: absolute; - content: ""; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 999; - background-color: rgba(255, 255, 255, 0.85); - } - - .modal { - display: block; - } -} - -.modal { - display: none; - position: fixed; - width: 300px; - top: 50%; - left: 50%; - margin-left: -150px; - margin-top: -150px; - min-height: 0; - z-index: 9999; - background: #fff; - border: 1px solid $border-color; - border-radius: $border-radius; - box-shadow: $box-shadow; - - &__title { - margin: 0; - padding: 0.5em 1em; - } - - &__supporting-text { - padding: 0 1em 0.5em 1em; - } - - &__actions { - padding: 0.5em 1em; - border-top: 1px solid $border-color; - } -} - -/* - Footnotes - ========================================================================== */ - -.footnote { - color: $muted-text-color; - text-decoration: none; -} - -.footnotes { - color: $muted-text-color; - - ol, - li, - p { - margin-bottom: 0; - font-size: $type-size-6; - } -} - -a.reversefootnote { - color: $contrast-color; - text-decoration: none; - - &:hover { - text-decoration: underline; - } -} - -/* - Required - ========================================================================== */ - -.required { - color: $danger-color; - font-weight: bold; -} - -/* - Google Custom Search Engine - ========================================================================== */ - -.gsc-control-cse { - table, - tr, - td { - border: 0; /* remove table borders widget */ - } -} - -/* - Responsive Video Embed - ========================================================================== */ - -.responsive-video-container { - position: relative; - margin-bottom: 1em; - padding-bottom: 56.25%; - height: 0; - overflow: hidden; - max-width: 100%; - - iframe, - object, - embed { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - } -} - -// full screen video fixes -:-webkit-full-screen-ancestor { - .masthead, - .page__footer { - position: static; - } -} diff --git a/_sass/minimal-mistakes/_variables.scss b/_sass/minimal-mistakes/_variables.scss deleted file mode 100644 index 81a3acf7b88f8..0000000000000 --- a/_sass/minimal-mistakes/_variables.scss +++ /dev/null @@ -1,173 +0,0 @@ -/* ========================================================================== - Variables - ========================================================================== */ - -/* - Typography - ========================================================================== */ - -$doc-font-size: 16 !default; - -/* paragraph indention */ -$paragraph-indent: false !default; // true, false (default) -$indent-var: 1.3em !default; - -/* system typefaces */ -$serif: Georgia, Times, serif !default; -$sans-serif: -apple-system, BlinkMacSystemFont, "Roboto", "Segoe UI", - "Helvetica Neue", "Lucida Grande", Arial, sans-serif !default; -$monospace: Monaco, Consolas, "Lucida Console", monospace !default; - -/* sans serif typefaces */ -$sans-serif-narrow: $sans-serif !default; -$helvetica: Helvetica, "Helvetica Neue", Arial, sans-serif !default; - -/* serif typefaces */ -$georgia: Georgia, serif !default; -$times: Times, serif !default; -$bodoni: "Bodoni MT", serif !default; -$calisto: "Calisto MT", serif !default; -$garamond: Garamond, serif !default; - -$global-font-family: $sans-serif !default; -$header-font-family: $sans-serif !default; -$caption-font-family: $serif !default; - -/* type scale */ -$type-size-1: 2.441em !default; // ~39.056px -$type-size-2: 1.953em !default; // ~31.248px -$type-size-3: 1.563em !default; // ~25.008px -$type-size-4: 1.25em !default; // ~20px -$type-size-5: 1em !default; // ~16px -$type-size-6: 0.75em !default; // ~12px -$type-size-7: 0.6875em !default; // ~11px -$type-size-8: 0.625em !default; // ~10px - -/* headline scale */ -$h-size-1: 1.563em !default; // ~25.008px -$h-size-2: 1.25em !default; // ~20px -$h-size-3: 1.125em !default; // ~18px -$h-size-4: 1.0625em !default; // ~17px -$h-size-5: 1.03125em !default; // ~16.5px -$h-size-6: 1em !default; // ~16px - -/* - Colors - ========================================================================== */ - -$gray: #7a8288 !default; -$dark-gray: mix(#000, $gray, 50%) !default; -$darker-gray: mix(#000, $gray, 60%) !default; -$light-gray: mix(#fff, $gray, 50%) !default; -$lighter-gray: mix(#fff, $gray, 90%) !default; - -$background-color: #fff !default; -$code-background-color: #fafafa !default; -$code-background-color-dark: $light-gray !default; -$text-color: $dark-gray !default; -$muted-text-color: mix(#fff, $text-color, 20%) !default; -$border-color: $lighter-gray !default; -$form-background-color: $lighter-gray !default; -$footer-background-color: $lighter-gray !default; - -$primary-color: #6f777d !default; -$success-color: #3fa63f !default; -$warning-color: #d67f05 !default; -$danger-color: #ee5f5b !default; -$info-color: #3b9cba !default; -$focus-color: $primary-color !default; -$active-color: mix(#fff, $primary-color, 80%) !default; - -/* YIQ color contrast */ -$yiq-contrasted-dark-default: $dark-gray !default; -$yiq-contrasted-light-default: #fff !default; -$yiq-contrasted-threshold: 175 !default; -$yiq-debug: false !default; - -/* brands */ -$behance-color: #1769ff !default; -$bitbucket-color: #205081 !default; -$dribbble-color: #ea4c89 !default; -$facebook-color: #3b5998 !default; -$flickr-color: #ff0084 !default; -$foursquare-color: #0072b1 !default; -$github-color: #171516 !default; -$gitlab-color: #e24329 !default; -$instagram-color: #517fa4 !default; -$keybase-color: #ef7639 !default; -$lastfm-color: #d51007 !default; -$linkedin-color: #007bb6 !default; -$mastodon-color: #2b90d9 !default; -$pinterest-color: #cb2027 !default; -$reddit-color: #ff4500 !default; -$rss-color: #fa9b39 !default; -$soundcloud-color: #ff3300 !default; -$stackoverflow-color: #fe7a15 !default; -$tumblr-color: #32506d !default; -$twitter-color: #55acee !default; -$vimeo-color: #1ab7ea !default; -$vine-color: #00bf8f !default; -$youtube-color: #bb0000 !default; -$xing-color: #006567 !default; - -/* links */ -$link-color: mix(#000, $info-color, 20%) !default; -$link-color-hover: mix(#000, $link-color, 25%) !default; -$link-color-visited: mix(#fff, $link-color, 15%) !default; -$masthead-link-color: $primary-color !default; -$masthead-link-color-hover: mix(#000, $primary-color, 25%) !default; -$navicon-link-color-hover: mix(#fff, $primary-color, 75%) !default; - -/* notices */ -$notice-background-mix: 80% !default; -$code-notice-background-mix: 90% !default; - -/* syntax highlighting (base16) */ -$base00: #263238 !default; -$base01: #2e3c43 !default; -$base02: #314549 !default; -$base03: #546e7a !default; -$base04: #b2ccd6 !default; -$base05: #eeffff !default; -$base06: #eeffff !default; -$base07: #ffffff !default; -$base08: #f07178 !default; -$base09: #f78c6c !default; -$base0a: #ffcb6b !default; -$base0b: #c3e88d !default; -$base0c: #89ddff !default; -$base0d: #82aaff !default; -$base0e: #c792ea !default; -$base0f: #ff5370 !default; - -/* - Breakpoints - ========================================================================== */ - -$small: 600px !default; -$medium: 768px !default; -$medium-wide: 900px !default; -$large: 1024px !default; -$x-large: 1280px !default; -$max-width: $x-large !default; - -/* - Grid - ========================================================================== */ - -$right-sidebar-width-narrow: 200px !default; -$right-sidebar-width: 300px !default; -$right-sidebar-width-wide: 400px !default; - -/* - Other - ========================================================================== */ - -$border-radius: 4px !default; -$box-shadow: 0 1px 1px rgba(0, 0, 0, 0.125) !default; -$nav-height: 2em !default; -$nav-toggle-height: 2rem !default; -$navicon-width: 1.5rem !default; -$navicon-height: 0.25rem !default; -$global-transition: all 0.2s ease-in-out !default; -$intro-transition: intro 0.3s both !default; diff --git a/_sass/minimal-mistakes/skins/_air.scss b/_sass/minimal-mistakes/skins/_air.scss deleted file mode 100644 index 0e5360c331c28..0000000000000 --- a/_sass/minimal-mistakes/skins/_air.scss +++ /dev/null @@ -1,23 +0,0 @@ -/* ========================================================================== - Air skin - ========================================================================== */ - -/* Colors */ -$background-color: #eeeeee !default; -$text-color: #222831 !default; -$muted-text-color: #393e46 !default; -$primary-color: #0092ca !default; -$border-color: mix(#fff, #393e46, 75%) !default; -$footer-background-color: $primary-color !default; -$link-color: #393e46 !default; -$masthead-link-color: $text-color !default; -$masthead-link-color-hover: $text-color !default; -$navicon-link-color-hover: mix(#fff, $text-color, 80%) !default; - -.page__footer { - color: #fff !important; // override -} - -.page__footer-follow .social-icons .svg-inline--fa { - color: inherit; -} diff --git a/_sass/minimal-mistakes/skins/_aqua.scss b/_sass/minimal-mistakes/skins/_aqua.scss deleted file mode 100644 index 7c3944e071738..0000000000000 --- a/_sass/minimal-mistakes/skins/_aqua.scss +++ /dev/null @@ -1,34 +0,0 @@ -/* ========================================================================== - Aqua skin - ========================================================================== */ - -/* Colors */ -$gray : #1976d2 !default; -$dark-gray : mix(#000, $gray, 40%) !default; -$darker-gray : mix(#000, $gray, 60%) !default; -$light-gray : mix(#fff, $gray, 50%) !default; -$lighter-gray : mix(#fff, $gray, 90%) !default; - -$body-color : #fff !default; -$background-color : #f0fff0 !default; -$code-background-color : $lighter-gray !default; -$code-background-color-dark : $light-gray !default; -$text-color : $dark-gray !default; -$border-color : $lighter-gray !default; - -$primary-color : $gray !default; -$success-color : #27ae60 !default; -$warning-color : #e67e22 !default; -$danger-color : #c0392b !default; -$info-color : #03a9f4 !default; - -/* links */ -$link-color : $info-color !default; -$link-color-hover : mix(#000, $link-color, 25%) !default; -$link-color-visited : mix(#fff, $link-color, 25%) !default; -$masthead-link-color : $primary-color !default; -$masthead-link-color-hover : mix(#000, $primary-color, 25%) !default; - -/* notices */ -$notice-background-mix: 90% !default; -$code-notice-background-mix: 95% !default; diff --git a/_sass/minimal-mistakes/skins/_contrast.scss b/_sass/minimal-mistakes/skins/_contrast.scss deleted file mode 100644 index 38283b8f6fe4c..0000000000000 --- a/_sass/minimal-mistakes/skins/_contrast.scss +++ /dev/null @@ -1,52 +0,0 @@ -/* ========================================================================== - Contrast skin - ========================================================================== */ - -/* Colors */ -$text-color: #000 !default; -$muted-text-color: $text-color !default; -$primary-color: #ff0000 !default; -$border-color: mix(#fff, $text-color, 75%) !default; -$footer-background-color: #000 !default; -$link-color: #0000ff !default; -$masthead-link-color: $text-color !default; -$masthead-link-color-hover: $text-color !default; -$navicon-link-color-hover: mix(#fff, $text-color, 80%) !default; - -/* contrast syntax highlighting (base16) */ -$base00: #000000 !default; -$base01: #242422 !default; -$base02: #484844 !default; -$base03: #6c6c66 !default; -$base04: #918f88 !default; -$base05: #b5b3aa !default; -$base06: #d9d7cc !default; -$base07: #fdfbee !default; -$base08: #ff6c60 !default; -$base09: #e9c062 !default; -$base0a: #ffffb6 !default; -$base0b: #a8ff60 !default; -$base0c: #c6c5fe !default; -$base0d: #96cbfe !default; -$base0e: #ff73fd !default; -$base0f: #b18a3d !default; - -.page__content { - .notice, - .notice--primary, - .notice--info, - .notice--warning, - .notice--success, - .notice--danger { - color: $text-color; - } -} - -.page__footer { - color: #fff !important; // override -} - -.page__footer-follow .social-icons i, -.page__footer-follow .social-icons .svg-inline--fa { - color: inherit; -} diff --git a/_sass/minimal-mistakes/skins/_dark.scss b/_sass/minimal-mistakes/skins/_dark.scss deleted file mode 100644 index 54768223c708b..0000000000000 --- a/_sass/minimal-mistakes/skins/_dark.scss +++ /dev/null @@ -1,30 +0,0 @@ -/* ========================================================================== - Dark skin - ========================================================================== */ - -/* Colors */ -$background-color: #252a34 !default; -$text-color: #eaeaea !default; -$primary-color: #00adb5 !default; -$border-color: mix(#fff, $background-color, 20%) !default; -$code-background-color: mix(#000, $background-color, 15%) !default; -$code-background-color-dark: mix(#000, $background-color, 20%) !default; -$form-background-color: mix(#000, $background-color, 15%) !default; -$footer-background-color: mix(#000, $background-color, 30%) !default; -$link-color: mix($primary-color, $text-color, 40%) !default; -$link-color-hover: mix(#fff, $link-color, 25%) !default; -$link-color-visited: mix(#000, $link-color, 25%) !default; -$masthead-link-color: $primary-color !default; -$masthead-link-color-hover: mix(#000, $text-color, 20%) !default; -$navicon-link-color-hover: mix(#000, $background-color, 30%) !default; - -.author__urls.social-icons i, -.author__urls.social-icons .svg-inline--fa, -.page__footer-follow .social-icons i, -.page__footer-follow .social-icons .svg-inline--fa { - color: inherit; -} - -.ais-search-box .ais-search-box--input { - background-color: $form-background-color; -} diff --git a/_sass/minimal-mistakes/skins/_default.scss b/_sass/minimal-mistakes/skins/_default.scss deleted file mode 100644 index 7489b584734d2..0000000000000 --- a/_sass/minimal-mistakes/skins/_default.scss +++ /dev/null @@ -1,5 +0,0 @@ -/* ========================================================================== - Default skin - ========================================================================== */ - -// Intentionally left blank diff --git a/_sass/minimal-mistakes/skins/_dirt.scss b/_sass/minimal-mistakes/skins/_dirt.scss deleted file mode 100644 index 5090f559da15e..0000000000000 --- a/_sass/minimal-mistakes/skins/_dirt.scss +++ /dev/null @@ -1,33 +0,0 @@ -/* ========================================================================== - Dirt skin - ========================================================================== */ - -/* Colors */ -$background-color: #f3f3f3 !default; -$text-color: #343434 !default; -$muted-text-color: #8e8b82 !default; -$primary-color: #343434 !default; -$border-color: #e9dcbe !default; -$footer-background-color: #e9dcbe !default; -$link-color: #343434 !default; -$masthead-link-color: $text-color !default; -$masthead-link-color-hover: $text-color !default; -$navicon-link-color-hover: mix(#fff, $text-color, 80%) !default; - -/* dirt syntax highlighting (base16) */ -$base00: #231e18 !default; -$base01: #302b25 !default; -$base02: #48413a !default; -$base03: #9d8b70 !default; -$base04: #b4a490 !default; -$base05: #cabcb1 !default; -$base06: #d7c8bc !default; -$base07: #e4d4c8 !default; -$base08: #d35c5c !default; -$base09: #ca7f32 !default; -$base0a: #e0ac16 !default; -$base0b: #b7ba53 !default; -$base0c: #6eb958 !default; -$base0d: #88a4d3 !default; -$base0e: #bb90e2 !default; -$base0f: #b49368 !default; diff --git a/_sass/minimal-mistakes/skins/_mint.scss b/_sass/minimal-mistakes/skins/_mint.scss deleted file mode 100644 index 28557a3a29219..0000000000000 --- a/_sass/minimal-mistakes/skins/_mint.scss +++ /dev/null @@ -1,24 +0,0 @@ -/* ========================================================================== - Mint skin - ========================================================================== */ - -/* Colors */ -$background-color: #f3f6f6 !default; -$text-color: #40514e !default; -$muted-text-color: #40514e !default; -$primary-color: #11999e !default; -$border-color: mix(#fff, #40514e, 75%) !default; -$footer-background-color: #30e3ca !default; -$link-color: #11999e !default; -$masthead-link-color: $text-color !default; -$masthead-link-color-hover: $text-color !default; -$navicon-link-color-hover: mix(#fff, $text-color, 80%) !default; - -.page__footer { - color: #fff !important; // override -} - -.page__footer-follow .social-icons i, -.page__footer-follow .social-icons .svg-inline--fa { - color: inherit; -} diff --git a/_sass/minimal-mistakes/skins/_neon.scss b/_sass/minimal-mistakes/skins/_neon.scss deleted file mode 100644 index a4f2ef5d9d8dd..0000000000000 --- a/_sass/minimal-mistakes/skins/_neon.scss +++ /dev/null @@ -1,63 +0,0 @@ -/* ========================================================================== - Neon skin - ========================================================================== */ - -/* Colors */ -$background-color: #141010 !default; -$text-color: #fff6fb !default; -$primary-color: #f21368 !default; -$border-color: mix(#fff, $background-color, 20%) !default; -$code-background-color: mix(#000, $background-color, 15%) !default; -$code-background-color-dark: mix(#000, $background-color, 20%) !default; -$form-background-color: mix(#000, $background-color, 15%) !default; -$footer-background-color: mix($primary-color, #000, 10%) !default; -$link-color: $primary-color !default; -$link-color-hover: mix(#fff, $link-color, 25%) !default; -$link-color-visited: mix(#000, $link-color, 25%) !default; -$masthead-link-color: $text-color !default; -$masthead-link-color-hover: mix(#000, $text-color, 20%) !default; -$navicon-link-color-hover: mix(#000, $background-color, 30%) !default; - -/* notices */ -$notice-background-mix: 90% !default; -$code-notice-background-mix: 95% !default; - -/* neon syntax highlighting (base16) */ -$base00: #ffffff !default; -$base01: #e0e0e0 !default; -$base02: #d0d0d0 !default; -$base03: #b0b0b0 !default; -$base04: #000000 !default; -$base05: #101010 !default; -$base06: #151515 !default; -$base07: #202020 !default; -$base08: #ff0086 !default; -$base09: #fd8900 !default; -$base0a: #aba800 !default; -$base0b: #00c918 !default; -$base0c: #1faaaa !default; -$base0d: #3777e6 !default; -$base0e: #ad00a1 !default; -$base0f: #cc6633 !default; - -.author__urls.social-icons i, -.author__urls.social-icons .svg-inline--fa, -.page__footer-follow .social-icons i, -.page__footer-follow .social-icons .svg-inline--fa { - color: inherit; -} - -/* next/previous buttons */ -.pagination--pager { - color: $text-color; - background-color: $primary-color; - border-color: transparent; - - &:visited { - color: $text-color; - } -} - -.ais-search-box .ais-search-box--input { - background-color: $form-background-color; -} \ No newline at end of file diff --git a/_sass/minimal-mistakes/skins/_plum.scss b/_sass/minimal-mistakes/skins/_plum.scss deleted file mode 100644 index defa69cde7963..0000000000000 --- a/_sass/minimal-mistakes/skins/_plum.scss +++ /dev/null @@ -1,70 +0,0 @@ -/* ========================================================================== - Plum skin - ========================================================================== */ - -/* Colors */ -$background-color: #521477 !default; -$text-color: #fffd86 !default; -$primary-color: #c327ab !default; -$border-color: mix(#fff, $background-color, 20%) !default; -$code-background-color: mix(#000, $background-color, 15%) !default; -$code-background-color-dark: mix(#000, $background-color, 20%) !default; -$form-background-color: mix(#000, $background-color, 15%) !default; -$footer-background-color: mix(#000, $background-color, 25%) !default; -$link-color: $primary-color !default; -$link-color-hover: mix(#fff, $link-color, 25%) !default; -$link-color-visited: mix(#000, $link-color, 25%) !default; -$masthead-link-color: $text-color !default; -$masthead-link-color-hover: mix(#000, $text-color, 20%) !default; -$navicon-link-color-hover: mix(#000, $background-color, 30%) !default; - -/* notices */ -$notice-background-mix: 70% !default; -$code-notice-background-mix: 80% !default; - -/* plum syntax highlighting (base16) */ -$base00: #ffffff !default; -$base01: #e0e0e0 !default; -$base02: #d0d0d0 !default; -$base03: #b0b0b0 !default; -$base04: #000000 !default; -$base05: #101010 !default; -$base06: #151515 !default; -$base07: #202020 !default; -$base08: #ff0086 !default; -$base09: #fd8900 !default; -$base0a: #aba800 !default; -$base0b: #00c918 !default; -$base0c: #1faaaa !default; -$base0d: #3777e6 !default; -$base0e: #ad00a1 !default; -$base0f: #cc6633 !default; - -.author__urls.social-icons i, -.author__urls.social-icons .svg-inline--fa, -.page__footer-follow .social-icons i, -.page__footer-follow .social-icons .svg-inline--fa { - color: inherit; -} - -.page__content { - a, - a:visited { - color: inherit; - } -} - -/* next/previous buttons */ -.pagination--pager { - color: $text-color; - background-color: $primary-color; - border-color: transparent; - - &:visited { - color: $text-color; - } -} - -.ais-search-box .ais-search-box--input { - background-color: $form-background-color; -} \ No newline at end of file diff --git a/_sass/minimal-mistakes/skins/_sunrise.scss b/_sass/minimal-mistakes/skins/_sunrise.scss deleted file mode 100644 index bc259f6d8d3d4..0000000000000 --- a/_sass/minimal-mistakes/skins/_sunrise.scss +++ /dev/null @@ -1,49 +0,0 @@ -/* ========================================================================== - Sunrise skin - ========================================================================== */ - -/* Colors */ -$dark-gray: #0e2431 !default; -$background-color: #e8d5b7 !default; -$text-color: #000 !default; -$muted-text-color: $dark-gray !default; -$primary-color: #fc3a52 !default; -$border-color: mix(#000, $background-color, 20%) !default; -$code-background-color: mix(#fff, $background-color, 20%) !default; -$code-background-color-dark: mix(#000, $background-color, 10%) !default; -$form-background-color: mix(#fff, $background-color, 15%) !default; -$footer-background-color: #f9b248 !default; -$link-color: mix(#000, $primary-color, 10%) !default; -$link-color-hover: mix(#fff, $link-color, 25%) !default; -$link-color-visited: mix(#000, $link-color, 25%) !default; -$masthead-link-color: $text-color !default; -$masthead-link-color-hover: mix(#000, $text-color, 20%) !default; -$navicon-link-color-hover: mix(#000, $background-color, 30%) !default; - -/* notices */ -$notice-background-mix: 75% !default; - -/* sunrise syntax highlighting (base16) */ -$base00: #1d1f21 !default; -$base01: #282a2e !default; -$base02: #373b41 !default; -$base03: #969896 !default; -$base04: #b4b7b4 !default; -$base05: #c5c8c6 !default; -$base06: #e0e0e0 !default; -$base07: #ffffff !default; -$base08: #cc6666 !default; -$base09: #de935f !default; -$base0a: #f0c674 !default; -$base0b: #b5bd68 !default; -$base0c: #8abeb7 !default; -$base0d: #81a2be !default; -$base0e: #b294bb !default; -$base0f: #a3685a !default; - -.author__urls.social-icons i, -.author__urls.social-icons .svg-inline--fa, -.page__footer-follow .social-icons i, -.page__footer-follow .social-icons .svg-inline--fa { - color: inherit; -} diff --git a/_sass/minimal-mistakes/vendor/breakpoint/_breakpoint.scss b/_sass/minimal-mistakes/vendor/breakpoint/_breakpoint.scss deleted file mode 100644 index a0528eb8bce6d..0000000000000 --- a/_sass/minimal-mistakes/vendor/breakpoint/_breakpoint.scss +++ /dev/null @@ -1,114 +0,0 @@ -////////////////////////////// -// Default Variables -////////////////////////////// -$Breakpoint-Settings: ( - 'default media': all, - 'default feature': min-width, - 'default pair': width, - - 'force all media type': false, - 'to ems': false, - 'transform resolutions': true, - - 'no queries': false, - 'no query fallbacks': false, - - 'base font size': 16px, - - 'legacy syntax': false -); - -$breakpoint: () !default; - -////////////////////////////// -// Imports -////////////////////////////// -@import "settings"; -@import "context"; -@import "helpers"; -@import "parsers"; -@import "no-query"; - -@import "respond-to"; - -@import "legacy-settings"; - -////////////////////////////// -// Breakpoint Mixin -////////////////////////////// - -@mixin breakpoint($query, $no-query: false) { - @include legacy-settings-warning; - - // Reset contexts - @include private-breakpoint-reset-contexts(); - - $breakpoint: breakpoint($query, false); - - $query-string: map-get($breakpoint, 'query'); - $query-fallback: map-get($breakpoint, 'fallback'); - - $private-breakpoint-context-holder: map-get($breakpoint, 'context holder') !global; - $private-breakpoint-query-count: map-get($breakpoint, 'query count') !global; - - // Allow for an as-needed override or usage of no query fallback. - @if $no-query != false { - $query-fallback: $no-query; - } - - @if $query-fallback != false { - $context-setter: private-breakpoint-set-context('no-query', $query-fallback); - } - - // Print Out Query String - @if not breakpoint-get('no queries') { - @media #{$query-string} { - @content; - } - } - - @if breakpoint-get('no query fallbacks') != false or breakpoint-get('no queries') == true { - - $type: type-of(breakpoint-get('no query fallbacks')); - $print: false; - - @if ($type == 'bool') { - $print: true; - } - @else if ($type == 'string') { - @if $query-fallback == breakpoint-get('no query fallbacks') { - $print: true; - } - } - @else if ($type == 'list') { - @each $wrapper in breakpoint-get('no query fallbacks') { - @if $query-fallback == $wrapper { - $print: true; - } - } - } - - // Write Fallback - @if ($query-fallback != false) and ($print == true) { - $type-fallback: type-of($query-fallback); - - @if ($type-fallback != 'bool') { - #{$query-fallback} & { - @content; - } - } - @else { - @content; - } - } - } - - @include private-breakpoint-reset-contexts(); -} - - -@mixin mq($query, $no-query: false) { - @include breakpoint($query, $no-query) { - @content; - } -} diff --git a/_sass/minimal-mistakes/vendor/breakpoint/_context.scss b/_sass/minimal-mistakes/vendor/breakpoint/_context.scss deleted file mode 100644 index 57947f5c8b55e..0000000000000 --- a/_sass/minimal-mistakes/vendor/breakpoint/_context.scss +++ /dev/null @@ -1,95 +0,0 @@ -////////////////////////////// -// Private Breakpoint Variables -////////////////////////////// -$private-breakpoint-context-holder: (); -$private-breakpoint-query-count: 0 !default; - -////////////////////////////// -// Breakpoint Has Context -// Returns whether or not you are inside a Breakpoint query -////////////////////////////// -@function breakpoint-has-context() { - @if length($private-breakpoint-query-count) { - @return true; - } - @else { - @return false; - } -} - -////////////////////////////// -// Breakpoint Get Context -// $feature: Input feature to get it's current MQ context. Returns false if no context -////////////////////////////// -@function breakpoint-get-context($feature) { - @if map-has-key($private-breakpoint-context-holder, $feature) { - $get: map-get($private-breakpoint-context-holder, $feature); - // Special handling of no-query from get side so /false/ prepends aren't returned - @if $feature == 'no-query' { - @if type-of($get) == 'list' and length($get) > 1 and nth($get, 1) == false { - $get: nth($get, length($get)); - } - } - @return $get; - } - @else { - @if breakpoint-has-context() and $feature == 'media' { - @return breakpoint-get('default media'); - } - @else { - @return false; - } - } -} - -////////////////////////////// -// Private function to set context -////////////////////////////// -@function private-breakpoint-set-context($feature, $value) { - @if $value == 'monochrome' { - $feature: 'monochrome'; - } - - $current: map-get($private-breakpoint-context-holder, $feature); - @if $current and length($current) == $private-breakpoint-query-count { - @warn "You have already queried against `#{$feature}`. Unexpected things may happen if you query against the same feature more than once in the same `and` query. Breakpoint is overwriting the current context with `#{$value}`"; - } - - @if not map-has-key($private-breakpoint-context-holder, $feature) { - $v-holder: (); - @for $i from 1 to $private-breakpoint-query-count { - @if $feature == 'media' { - $v-holder: append($v-holder, breakpoint-get('default media')); - } - @else { - $v-holder: append($v-holder, false); - } - } - $v-holder: append($v-holder, $value); - $private-breakpoint-context-holder: map-merge($private-breakpoint-context-holder, ($feature: $v-holder)) !global; - } - @else { - $v-holder: map-get($private-breakpoint-context-holder, $feature); - $length: length($v-holder); - @for $i from $length to $private-breakpoint-query-count - 1 { - @if $feature == 'media' { - $v-holder: append($v-holder, breakpoint-get('default media')); - } - @else { - $v-holder: append($v-holder, false); - } - } - $v-holder: append($v-holder, $value); - $private-breakpoint-context-holder: map-merge($private-breakpoint-context-holder, ($feature: $v-holder)) !global; - } - - @return true; -} - -////////////////////////////// -// Private function to reset context -////////////////////////////// -@mixin private-breakpoint-reset-contexts { - $private-breakpoint-context-holder: () !global; - $private-breakpoint-query-count: 0 !global; -} \ No newline at end of file diff --git a/_sass/minimal-mistakes/vendor/breakpoint/_helpers.scss b/_sass/minimal-mistakes/vendor/breakpoint/_helpers.scss deleted file mode 100644 index 97e522d11aa69..0000000000000 --- a/_sass/minimal-mistakes/vendor/breakpoint/_helpers.scss +++ /dev/null @@ -1,151 +0,0 @@ -////////////////////////////// -// Converts the input value to Base EMs -////////////////////////////// -@function breakpoint-to-base-em($value) { - $value-unit: unit($value); - - // Will convert relative EMs into root EMs. - @if breakpoint-get('base font size') and type-of(breakpoint-get('base font size')) == 'number' and $value-unit == 'em' { - $base-unit: unit(breakpoint-get('base font size')); - - @if $base-unit == 'px' or $base-unit == '%' or $base-unit == 'em' or $base-unit == 'pt' { - @return base-conversion($value) / base-conversion(breakpoint-get('base font size')) * 1em; - } - @else { - @warn '#{breakpoint-get(\'base font size\')} is not set in valid units for font size!'; - @return false; - } - } - @else { - @return base-conversion($value); - } -} - -@function base-conversion($value) { - $unit: unit($value); - - @if $unit == 'px' { - @return $value / 16px * 1em; - } - @else if $unit == '%' { - @return $value / 100% * 1em; - } - @else if $unit == 'em' { - @return $value; - } - @else if $unit == 'pt' { - @return $value / 12pt * 1em; - } - @else { - @return $value; -// @warn 'Everything is terrible! What have you done?!'; - } -} - -////////////////////////////// -// Returns whether the feature can have a min/max pair -////////////////////////////// -$breakpoint-min-max-features: 'color', - 'color-index', - 'aspect-ratio', - 'device-aspect-ratio', - 'device-height', - 'device-width', - 'height', - 'monochrome', - 'resolution', - 'width'; - -@function breakpoint-min-max($feature) { - @each $item in $breakpoint-min-max-features { - @if $feature == $item { - @return true; - } - } - @return false; -} - -////////////////////////////// -// Returns whether the feature can have a string value -////////////////////////////// -$breakpoint-string-features: 'orientation', - 'scan', - 'color', - 'aspect-ratio', - 'device-aspect-ratio', - 'pointer', - 'luminosity'; - -@function breakpoint-string-value($feature) { - @each $item in $breakpoint-string-features { - @if breakpoint-min-max($item) { - @if $feature == 'min-#{$item}' or $feature == 'max-#{$item}' { - @return true; - } - } - @else if $feature == $item { - @return true; - } - } - @return false; -} - -////////////////////////////// -// Returns whether the feature is a media type -////////////////////////////// -$breakpoint-media-types: 'all', - 'braille', - 'embossed', - 'handheld', - 'print', - 'projection', - 'screen', - 'speech', - 'tty', - 'tv'; - -@function breakpoint-is-media($feature) { - @each $media in $breakpoint-media-types { - @if ($feature == $media) or ($feature == 'not #{$media}') or ($feature == 'only #{$media}') { - @return true; - } - } - - @return false; -} - -////////////////////////////// -// Returns whether the feature can stand alone -////////////////////////////// -$breakpoint-single-string-features: 'color', - 'color-index', - 'grid', - 'monochrome'; - -@function breakpoint-single-string($feature) { - @each $item in $breakpoint-single-string-features { - @if $feature == $item { - @return true; - } - } - @return false; -} - -////////////////////////////// -// Returns whether the feature -////////////////////////////// -@function breakpoint-is-resolution($feature) { - $resolutions: 'device-pixel-ratio', 'dpr'; - - @if breakpoint-get('transform resolutions') { - $resolutions: append($resolutions, 'resolution'); - } - - @each $reso in $resolutions { - @if index($feature, $reso) or index($feature, 'min-#{$reso}') or index($feature, 'max-#{$reso}') { - @return true; - } - } - - @return false; -} diff --git a/_sass/minimal-mistakes/vendor/breakpoint/_legacy-settings.scss b/_sass/minimal-mistakes/vendor/breakpoint/_legacy-settings.scss deleted file mode 100644 index e060ebe3dca80..0000000000000 --- a/_sass/minimal-mistakes/vendor/breakpoint/_legacy-settings.scss +++ /dev/null @@ -1,50 +0,0 @@ -@mixin legacy-settings-warning { - $legacyVars: ( - 'default-media': 'default media', - 'default-feature': 'default feature', - 'force-media-all': 'force all media type', - 'to-ems': 'to ems', - 'resolutions': 'transform resolutions', - 'no-queries': 'no queries', - 'no-query-fallbacks': 'no query fallbacks', - 'base-font-size': 'base font size', - 'legacy-syntax': 'legacy syntax' - ); - - @each $legacy, $new in $legacyVars { - @if global-variable-exists('breakpoint-' + $legacy) { - @warn "In order to avoid variable namspace collisions, we have updated the way to change settings for Breakpoint. Please change all instances of `$breakpoint-#{$legacy}: {{setting}}` to `@include breakpoint-set('#{$new}', {{setting}})`. Variable settings, as well as this warning will be deprecated in a future release." - } - }; - - ////////////////////////////// - // Hand correct each setting - ////////////////////////////// - @if global-variable-exists('breakpoint-default-media') and $breakpoint-default-media != breakpoint-get('default media') { - @include breakpoint-set('default media', $breakpoint-default-media); - } - @if global-variable-exists('breakpoint-default-feature') and $breakpoint-default-feature != breakpoint-get('default feature') { - @include breakpoint-set('default feature', $breakpoint-default-feature); - } - @if global-variable-exists('breakpoint-force-media-all') and $breakpoint-force-media-all != breakpoint-get('force all media type') { - @include breakpoint-set('force all media type', $breakpoint-force-media-all); - } - @if global-variable-exists('breakpoint-to-ems') and $breakpoint-to-ems != breakpoint-get('to ems') { - @include breakpoint-set('to ems', $breakpoint-to-ems); - } - @if global-variable-exists('breakpoint-resolutions') and $breakpoint-resolutions != breakpoint-get('transform resolutions') { - @include breakpoint-set('transform resolutions', $breakpoint-resolutions); - } - @if global-variable-exists('breakpoint-no-queries') and $breakpoint-no-queries != breakpoint-get('no queries') { - @include breakpoint-set('no queries', $breakpoint-no-queries); - } - @if global-variable-exists('breakpoint-no-query-fallbacks') and $breakpoint-no-query-fallbacks != breakpoint-get('no query fallbacks') { - @include breakpoint-set('no query fallbacks', $breakpoint-no-query-fallbacks); - } - @if global-variable-exists('breakpoint-base-font-size') and $breakpoint-base-font-size != breakpoint-get('base font size') { - @include breakpoint-set('base font size', $breakpoint-base-font-size); - } - @if global-variable-exists('breakpoint-legacy-syntax') and $breakpoint-legacy-syntax != breakpoint-get('legacy syntax') { - @include breakpoint-set('legacy syntax', $breakpoint-legacy-syntax); - } -} \ No newline at end of file diff --git a/_sass/minimal-mistakes/vendor/breakpoint/_no-query.scss b/_sass/minimal-mistakes/vendor/breakpoint/_no-query.scss deleted file mode 100644 index 0b5a81f697230..0000000000000 --- a/_sass/minimal-mistakes/vendor/breakpoint/_no-query.scss +++ /dev/null @@ -1,15 +0,0 @@ -@function breakpoint-no-query($query) { - @if type-of($query) == 'list' { - $keyword: nth($query, 1); - - @if type-of($keyword) == 'string' and ($keyword == 'no-query' or $keyword == 'no query' or $keyword == 'fallback') { - @return nth($query, 2); - } - @else { - @return false; - } - } - @else { - @return false; - } -} diff --git a/_sass/minimal-mistakes/vendor/breakpoint/_parsers.scss b/_sass/minimal-mistakes/vendor/breakpoint/_parsers.scss deleted file mode 100644 index f0b053feebc1b..0000000000000 --- a/_sass/minimal-mistakes/vendor/breakpoint/_parsers.scss +++ /dev/null @@ -1,215 +0,0 @@ -////////////////////////////// -// Import Parser Pieces -////////////////////////////// -@import "parsers/query"; -@import "parsers/single"; -@import "parsers/double"; -@import "parsers/triple"; -@import "parsers/resolution"; - -$Memo-Exists: function-exists(memo-get) and function-exists(memo-set); - -////////////////////////////// -// Breakpoint Function -////////////////////////////// -@function breakpoint($query, $contexts...) { - $run: true; - $return: (); - - // Grab the Memo Output if Memoization can be a thing - @if $Memo-Exists { - $return: memo-get(breakpoint, breakpoint $query $contexts); - - @if $return != null { - $run: false; - } - } - - @if not $Memo-Exists or $run { - // Internal Variables - $query-string: ''; - $query-fallback: false; - $return: (); - - // Reserve Global Private Breakpoint Context - $holder-context: $private-breakpoint-context-holder; - $holder-query-count: $private-breakpoint-query-count; - - // Reset Global Private Breakpoint Context - $private-breakpoint-context-holder: () !global; - $private-breakpoint-query-count: 0 !global; - - - // Test to see if it's a comma-separated list - $or-list: if(list-separator($query) == 'comma', true, false); - - - @if ($or-list == false and breakpoint-get('legacy syntax') == false) { - $query-string: breakpoint-parse($query); - } - @else { - $length: length($query); - - $last: nth($query, $length); - $query-fallback: breakpoint-no-query($last); - - @if ($query-fallback != false) { - $length: $length - 1; - } - - @if (breakpoint-get('legacy syntax') == true) { - $mq: (); - - @for $i from 1 through $length { - $mq: append($mq, nth($query, $i), comma); - } - - $query-string: breakpoint-parse($mq); - } - @else { - $query-string: ''; - @for $i from 1 through $length { - $query-string: $query-string + if($i == 1, '', ', ') + breakpoint-parse(nth($query, $i)); - } - } - } - - $return: ('query': $query-string, - 'fallback': $query-fallback, - 'context holder': $private-breakpoint-context-holder, - 'query count': $private-breakpoint-query-count - ); - @if length($contexts) > 0 and nth($contexts, 1) != false { - @if $query-fallback != false { - $context-setter: private-breakpoint-set-context('no-query', $query-fallback); - } - $context-map: (); - @each $context in $contexts { - $context-map: map-merge($context-map, ($context: breakpoint-get-context($context))); - } - $return: map-merge($return, (context: $context-map)); - } - - // Reset Global Private Breakpoint Context - $private-breakpoint-context-holder: () !global; - $private-breakpoint-query-count: 0 !global; - - @if $Memo-Exists { - $holder: memo-set(breakpoint, breakpoint $query $contexts, $return); - } - } - - @return $return; -} - -////////////////////////////// -// General Breakpoint Parser -////////////////////////////// -@function breakpoint-parse($query) { - // Increase number of 'and' queries - $private-breakpoint-query-count: $private-breakpoint-query-count + 1 !global; - - // Set up Media Type - $query-print: ''; - - $force-all: ((breakpoint-get('force all media type') == true) and (breakpoint-get('default media') == 'all')); - $empty-media: true; - @if ($force-all == true) or (breakpoint-get('default media') != 'all') { - // Force the print of the default media type if (force all is true and default media type is all) or (default media type is not all) - $query-print: breakpoint-get('default media'); - $empty-media: false; - } - - - $query-resolution: false; - - $query-holder: breakpoint-parse-query($query); - - - - // Loop over each parsed out query and write it to $query-print - $first: true; - - @each $feature in $query-holder { - $length: length($feature); - - // Parse a single feature - @if ($length == 1) { - // Feature is currently a list, grab the actual value - $feature: nth($feature, 1); - - // Media Type must by convention be the first item, so it's safe to flat override $query-print, which right now should only be the default media type - @if (breakpoint-is-media($feature)) { - @if ($force-all == true) or ($feature != 'all') { - // Force the print of the default media type if (force all is true and default media type is all) or (default media type is not all) - $query-print: $feature; - $empty-media: false; - - // Set Context - $context-setter: private-breakpoint-set-context(media, $query-print); - } - } - @else { - $parsed: breakpoint-parse-single($feature, $empty-media, $first); - $query-print: '#{$query-print} #{$parsed}'; - $first: false; - } - } - // Parse a double feature - @else if ($length == 2) { - @if (breakpoint-is-resolution($feature) != false) { - $query-resolution: $feature; - } - @else { - $parsed: null; - // If it's a string/number pair, - // we check to see if one is a single-string value, - // then we parse it as a normal double - $alpha: nth($feature, 1); - $beta: nth($feature, 2); - @if breakpoint-single-string($alpha) or breakpoint-single-string($beta) { - $parsed: breakpoint-parse-single($alpha, $empty-media, $first); - $query-print: '#{$query-print} #{$parsed}'; - $first: false; - $parsed: breakpoint-parse-single($beta, $empty-media, $first); - $query-print: '#{$query-print} #{$parsed}'; - } - @else { - $parsed: breakpoint-parse-double($feature, $empty-media, $first); - $query-print: '#{$query-print} #{$parsed}'; - $first: false; - } - } - } - // Parse a triple feature - @else if ($length == 3) { - $parsed: breakpoint-parse-triple($feature, $empty-media, $first); - $query-print: '#{$query-print} #{$parsed}'; - $first: false; - } - - } - - @if ($query-resolution != false) { - $query-print: breakpoint-build-resolution($query-print, $query-resolution, $empty-media, $first); - } - - // Loop through each feature that's been detected so far and append 'false' to the the value list to increment their counters - @each $f, $v in $private-breakpoint-context-holder { - $v-holder: $v; - $length: length($v-holder); - @if length($v-holder) < $private-breakpoint-query-count { - @for $i from $length to $private-breakpoint-query-count { - @if $f == 'media' { - $v-holder: append($v-holder, breakpoint-get('default media')); - } - @else { - $v-holder: append($v-holder, false); - } - } - } - $private-breakpoint-context-holder: map-merge($private-breakpoint-context-holder, ($f: $v-holder)) !global; - } - - @return $query-print; -} diff --git a/_sass/minimal-mistakes/vendor/breakpoint/_respond-to.scss b/_sass/minimal-mistakes/vendor/breakpoint/_respond-to.scss deleted file mode 100644 index e2462c5fcefc9..0000000000000 --- a/_sass/minimal-mistakes/vendor/breakpoint/_respond-to.scss +++ /dev/null @@ -1,82 +0,0 @@ -//////////////////////// -// Default the Breakpoints variable -//////////////////////// -$breakpoints: () !default; -$BREAKPOINTS: () !default; - -//////////////////////// -// Respond-to API Mixin -//////////////////////// -@mixin respond-to($context, $no-query: false) { - @if length($breakpoints) > 0 and length($BREAKPOINTS) == 0 { - @warn "In order to avoid variable namespace collisions, we have updated the way to add breakpoints for respond-to. Please change all instances of `$breakpoints: add-breakpoint()` to `@include add-breakpoint()`. The `add-breakpoint()` function will be deprecated in a future release."; - $BREAKPOINTS: $breakpoints !global; - $breakpoints: () !global; - } - - @if type-of($BREAKPOINTS) != 'map' { - // Just in case someone writes gibberish to the $breakpoints variable. - @warn "Your breakpoints aren't a map! `respond-to` expects a map. Please check the value of $BREAKPOINTS variable."; - @content; - } - @else if map-has-key($BREAKPOINTS, $context) { - @include breakpoint(map-get($BREAKPOINTS, $context), $no-query) { - @content; - } - } - @else if not map-has-key($BREAKPOINTS, $context) { - @warn "`#{$context}` isn't a defined breakpoint! Please add it using `$breakpoints: add-breakpoint(`#{$context}`, $value);`"; - @content; - } - @else { - @warn "You haven't created any breakpoints yet! Make some already! `@include add-breakpoint($name, $bkpt)`"; - @content; - } -} - -////////////////////////////// -// Add Breakpoint to Breakpoints -// TODO: Remove function in next release -////////////////////////////// -@function add-breakpoint($name, $bkpt, $overwrite: false) { - $output: ($name: $bkpt); - - @if length($breakpoints) == 0 { - @return $output; - } - @else { - @if map-has-key($breakpoints, $name) and $overwrite != true { - @warn "You already have a breakpoint named `#{$name}`, please choose another breakpoint name, or pass in `$overwrite: true` to overwrite the previous breakpoint."; - @return $breakpoints; - } - @else if not map-has-key($breakpoints, $name) or $overwrite == true { - @return map-merge($breakpoints, $output); - } - } -} - -@mixin add-breakpoint($name, $bkpt, $overwrite: false) { - $output: ($name: $bkpt); - - @if length($BREAKPOINTS) == 0 { - $BREAKPOINTS: $output !global; - } - @else { - @if map-has-key($BREAKPOINTS, $name) and $overwrite != true { - @warn "You already have a breakpoint named `#{$name}`, please choose another breakpoint name, or pass in `$overwrite: true` to overwrite the previous breakpoint."; - $BREAKPOINTS: $BREAKPOINTS !global; - } - @else if not map-has-key($BREAKPOINTS, $name) or $overwrite == true { - $BREAKPOINTS: map-merge($BREAKPOINTS, $output) !global; - } - } -} - -@function get-breakpoint($name: false) { - @if $name == false { - @return $BREAKPOINTS; - } - @else { - @return map-get($BREAKPOINTS, $name); - } -} diff --git a/_sass/minimal-mistakes/vendor/breakpoint/_settings.scss b/_sass/minimal-mistakes/vendor/breakpoint/_settings.scss deleted file mode 100644 index 05ee689404d81..0000000000000 --- a/_sass/minimal-mistakes/vendor/breakpoint/_settings.scss +++ /dev/null @@ -1,71 +0,0 @@ -////////////////////////////// -// Has Setting -////////////////////////////// -@function breakpoint-has($setting) { - @if map-has-key($breakpoint, $setting) { - @return true; - } - @else { - @return false; - } -} - -////////////////////////////// -// Get Settings -////////////////////////////// -@function breakpoint-get($setting) { - @if breakpoint-has($setting) { - @return map-get($breakpoint, $setting); - } - @else { - @return map-get($Breakpoint-Settings, $setting); - } -} - -////////////////////////////// -// Set Settings -////////////////////////////// -@function breakpoint-set($setting, $value) { - @if (str-index($setting, '-') or str-index($setting, '_')) and str-index($setting, ' ') == null { - @warn "Words in Breakpoint settings should be separated by spaces, not dashes or underscores. Please replace dashes and underscores between words with spaces. Settings will not work as expected until changed."; - } - $breakpoint: map-merge($breakpoint, ($setting: $value)) !global; - @return true; -} - -@mixin breakpoint-change($setting, $value) { - $breakpoint-change: breakpoint-set($setting, $value); -} - -@mixin breakpoint-set($setting, $value) { - @include breakpoint-change($setting, $value); -} - -@mixin bkpt-change($setting, $value) { - @include breakpoint-change($setting, $value); -} -@mixin bkpt-set($setting, $value) { - @include breakpoint-change($setting, $value); -} - -////////////////////////////// -// Remove Setting -////////////////////////////// -@function breakpoint-reset($settings...) { - @if length($settings) == 1 { - $settings: nth($settings, 1); - } - - @each $setting in $settings { - $breakpoint: map-remove($breakpoint, $setting) !global; - } - @return true; -} - -@mixin breakpoint-reset($settings...) { - $breakpoint-reset: breakpoint-reset($settings); -} - -@mixin bkpt-reset($settings...) { - $breakpoint-reset: breakpoint-reset($settings); -} \ No newline at end of file diff --git a/_sass/minimal-mistakes/vendor/breakpoint/parsers/_double.scss b/_sass/minimal-mistakes/vendor/breakpoint/parsers/_double.scss deleted file mode 100644 index 24580c1516f61..0000000000000 --- a/_sass/minimal-mistakes/vendor/breakpoint/parsers/_double.scss +++ /dev/null @@ -1,33 +0,0 @@ -////////////////////////////// -// Import Pieces -////////////////////////////// -@import "double/default-pair"; -@import "double/double-string"; -@import "double/default"; - -@function breakpoint-parse-double($feature, $empty-media, $first) { - $parsed: ''; - $leader: ''; - // If we're forcing - @if not ($empty-media) or not ($first) { - $leader: 'and '; - } - - $first: nth($feature, 1); - $second: nth($feature, 2); - - // If we've got two numbers, we know we need to use the default pair because there are no media queries that has a media feature that is a number - @if type-of($first) == 'number' and type-of($second) == 'number' { - $parsed: breakpoint-parse-default-pair($first, $second); - } - // If they are both strings, we send it through the string parser - @else if type-of($first) == 'string' and type-of($second) == 'string' { - $parsed: breakpoint-parse-double-string($first, $second); - } - // If it's a string/number pair, we parse it as a normal double - @else { - $parsed: breakpoint-parse-double-default($first, $second); - } - - @return $leader + $parsed; -} diff --git a/_sass/minimal-mistakes/vendor/breakpoint/parsers/_query.scss b/_sass/minimal-mistakes/vendor/breakpoint/parsers/_query.scss deleted file mode 100644 index b138b3933bc89..0000000000000 --- a/_sass/minimal-mistakes/vendor/breakpoint/parsers/_query.scss +++ /dev/null @@ -1,82 +0,0 @@ -@function breakpoint-parse-query($query) { - // Parse features out of an individual query - $feature-holder: (); - $query-holder: (); - $length: length($query); - - @if $length == 2 { - // If we've got a string/number, number/string, check to see if it's a valid string/number pair or two singles - @if (type-of(nth($query, 1)) == 'string' and type-of(nth($query, 2)) == 'number') or (type-of(nth($query, 1)) == 'number' and type-of(nth($query, 2)) == 'string') { - - $number: ''; - $value: ''; - - @if type-of(nth($query, 1)) == 'string' { - $number: nth($query, 2); - $value: nth($query, 1); - } - @else { - $number: nth($query, 1); - $value: nth($query, 2); - } - - // If the string value can be a single value, check to see if the number passed in is a valid input for said single value. Fortunately, all current single-value options only accept unitless numbers, so this check is easy. - @if breakpoint-single-string($value) { - @if unitless($number) { - $feature-holder: append($value, $number, space); - $query-holder: append($query-holder, $feature-holder, comma); - @return $query-holder; - } - } - // If the string is a media type, split the query - @if breakpoint-is-media($value) { - $query-holder: append($query-holder, nth($query, 1)); - $query-holder: append($query-holder, nth($query, 2)); - @return $query-holder; - } - // If it's not a single feature, we're just going to assume it's a proper string/value pair, and roll with it. - @else { - $feature-holder: append($value, $number, space); - $query-holder: append($query-holder, $feature-holder, comma); - @return $query-holder; - } - - } - // If they're both numbers, we assume it's a double and roll with that - @else if (type-of(nth($query, 1)) == 'number' and type-of(nth($query, 2)) == 'number') { - $feature-holder: append(nth($query, 1), nth($query, 2), space); - $query-holder: append($query-holder, $feature-holder, comma); - @return $query-holder; - } - // If they're both strings and neither are singles, we roll with that. - @else if (type-of(nth($query, 1)) == 'string' and type-of(nth($query, 2)) == 'string') { - @if not breakpoint-single-string(nth($query, 1)) and not breakpoint-single-string(nth($query, 2)) { - $feature-holder: append(nth($query, 1), nth($query, 2), space); - $query-holder: append($query-holder, $feature-holder, comma); - @return $query-holder; - } - } - } - @else if $length == 3 { - // If we've got three items and none is a list, we check to see - @if type-of(nth($query, 1)) != 'list' and type-of(nth($query, 2)) != 'list' and type-of(nth($query, 3)) != 'list' { - // If none of the items are single string values and none of the values are media values, we're good. - @if (not breakpoint-single-string(nth($query, 1)) and not breakpoint-single-string(nth($query, 2)) and not breakpoint-single-string(nth($query, 3))) and ((not breakpoint-is-media(nth($query, 1)) and not breakpoint-is-media(nth($query, 2)) and not breakpoint-is-media(nth($query, 3)))) { - $feature-holder: append(nth($query, 1), nth($query, 2), space); - $feature-holder: append($feature-holder, nth($query, 3), space); - $query-holder: append($query-holder, $feature-holder, comma); - @return $query-holder; - } - // let's check to see if the first item is a media type - @else if breakpoint-is-media(nth($query, 1)) { - $query-holder: append($query-holder, nth($query, 1)); - $feature-holder: append(nth($query, 2), nth($query, 3), space); - $query-holder: append($query-holder, $feature-holder); - @return $query-holder; - } - } - } - - // If it's a single item, or if it's not a special case double or triple, we can simply return the query. - @return $query; -} diff --git a/_sass/minimal-mistakes/vendor/breakpoint/parsers/_resolution.scss b/_sass/minimal-mistakes/vendor/breakpoint/parsers/_resolution.scss deleted file mode 100644 index 19769adf44392..0000000000000 --- a/_sass/minimal-mistakes/vendor/breakpoint/parsers/_resolution.scss +++ /dev/null @@ -1,31 +0,0 @@ -@import "resolution/resolution"; - -@function breakpoint-build-resolution($query-print, $query-resolution, $empty-media, $first) { - $leader: ''; - // If we're forcing - @if not ($empty-media) or not ($first) { - $leader: 'and '; - } - - @if breakpoint-get('transform resolutions') and $query-resolution { - $resolutions: breakpoint-make-resolutions($query-resolution); - $length: length($resolutions); - $query-holder: ''; - - @for $i from 1 through $length { - $query: '#{$query-print} #{$leader}#{nth($resolutions, $i)}'; - @if $i == 1 { - $query-holder: $query; - } - @else { - $query-holder: '#{$query-holder}, #{$query}'; - } - } - - @return $query-holder; - } - @else { - // Return with attached resolution - @return $query-print; - } -} diff --git a/_sass/minimal-mistakes/vendor/breakpoint/parsers/_single.scss b/_sass/minimal-mistakes/vendor/breakpoint/parsers/_single.scss deleted file mode 100644 index d9fd764a72689..0000000000000 --- a/_sass/minimal-mistakes/vendor/breakpoint/parsers/_single.scss +++ /dev/null @@ -1,26 +0,0 @@ -////////////////////////////// -// Import Pieces -////////////////////////////// -@import "single/default"; - -@function breakpoint-parse-single($feature, $empty-media, $first) { - $parsed: ''; - $leader: ''; - // If we're forcing - @if not ($empty-media) or not ($first) { - $leader: 'and '; - } - - // If it's a single feature that can stand alone, we let it - @if (breakpoint-single-string($feature)) { - $parsed: $feature; - // Set Context - $context-setter: private-breakpoint-set-context($feature, $feature); - } - // If it's not a stand alone feature, we pass it off to the default handler. - @else { - $parsed: breakpoint-parse-default($feature); - } - - @return $leader + '(' + $parsed + ')'; -} diff --git a/_sass/minimal-mistakes/vendor/breakpoint/parsers/_triple.scss b/_sass/minimal-mistakes/vendor/breakpoint/parsers/_triple.scss deleted file mode 100644 index e2732067f9da0..0000000000000 --- a/_sass/minimal-mistakes/vendor/breakpoint/parsers/_triple.scss +++ /dev/null @@ -1,36 +0,0 @@ -////////////////////////////// -// Import Pieces -////////////////////////////// -@import "triple/default"; - -@function breakpoint-parse-triple($feature, $empty-media, $first) { - $parsed: ''; - $leader: ''; - - // If we're forcing - @if not ($empty-media) or not ($first) { - $leader: 'and '; - } - - // separate the string features from the value numbers - $string: null; - $numbers: null; - @each $val in $feature { - @if type-of($val) == string { - $string: $val; - } - @else { - @if type-of($numbers) == 'null' { - $numbers: $val; - } - @else { - $numbers: append($numbers, $val); - } - } - } - - $parsed: breakpoint-parse-triple-default($string, nth($numbers, 1), nth($numbers, 2)); - - @return $leader + $parsed; - -} diff --git a/_sass/minimal-mistakes/vendor/breakpoint/parsers/double/_default-pair.scss b/_sass/minimal-mistakes/vendor/breakpoint/parsers/double/_default-pair.scss deleted file mode 100644 index f88432ccdb29b..0000000000000 --- a/_sass/minimal-mistakes/vendor/breakpoint/parsers/double/_default-pair.scss +++ /dev/null @@ -1,21 +0,0 @@ -@function breakpoint-parse-default-pair($first, $second) { - $default: breakpoint-get('default pair'); - $min: ''; - $max: ''; - - // Sort into min and max - $min: min($first, $second); - $max: max($first, $second); - - // Set Context - $context-setter: private-breakpoint-set-context(min-#{$default}, $min); - $context-setter: private-breakpoint-set-context(max-#{$default}, $max); - - // Make them EMs if need be - @if (breakpoint-get('to ems') == true) { - $min: breakpoint-to-base-em($min); - $max: breakpoint-to-base-em($max); - } - - @return '(min-#{$default}: #{$min}) and (max-#{$default}: #{$max})'; -} diff --git a/_sass/minimal-mistakes/vendor/breakpoint/parsers/double/_default.scss b/_sass/minimal-mistakes/vendor/breakpoint/parsers/double/_default.scss deleted file mode 100644 index 73190ed590f4e..0000000000000 --- a/_sass/minimal-mistakes/vendor/breakpoint/parsers/double/_default.scss +++ /dev/null @@ -1,22 +0,0 @@ -@function breakpoint-parse-double-default($first, $second) { - $feature: ''; - $value: ''; - - @if type-of($first) == 'string' { - $feature: $first; - $value: $second; - } - @else { - $feature: $second; - $value: $first; - } - - // Set Context - $context-setter: private-breakpoint-set-context($feature, $value); - - @if (breakpoint-get('to ems') == true) { - $value: breakpoint-to-base-em($value); - } - - @return '(#{$feature}: #{$value})' -} diff --git a/_sass/minimal-mistakes/vendor/breakpoint/parsers/double/_double-string.scss b/_sass/minimal-mistakes/vendor/breakpoint/parsers/double/_double-string.scss deleted file mode 100644 index c6fd0cb033a5f..0000000000000 --- a/_sass/minimal-mistakes/vendor/breakpoint/parsers/double/_double-string.scss +++ /dev/null @@ -1,22 +0,0 @@ -@function breakpoint-parse-double-string($first, $second) { - $feature: ''; - $value: ''; - - // Test to see which is the feature and which is the value - @if (breakpoint-string-value($first) == true) { - $feature: $first; - $value: $second; - } - @else if (breakpoint-string-value($second) == true) { - $feature: $second; - $value: $first; - } - @else { - @warn "Neither #{$first} nor #{$second} is a valid media query name."; - } - - // Set Context - $context-setter: private-breakpoint-set-context($feature, $value); - - @return '(#{$feature}: #{$value})'; -} \ No newline at end of file diff --git a/_sass/minimal-mistakes/vendor/breakpoint/parsers/resolution/_resolution.scss b/_sass/minimal-mistakes/vendor/breakpoint/parsers/resolution/_resolution.scss deleted file mode 100644 index 3680421269bd9..0000000000000 --- a/_sass/minimal-mistakes/vendor/breakpoint/parsers/resolution/_resolution.scss +++ /dev/null @@ -1,60 +0,0 @@ -@function breakpoint-make-resolutions($resolution) { - $length: length($resolution); - - $output: (); - - @if $length == 2 { - $feature: ''; - $value: ''; - - // Find which is number - @if type-of(nth($resolution, 1)) == 'number' { - $value: nth($resolution, 1); - } - @else { - $value: nth($resolution, 2); - } - - // Determine min/max/standard - @if index($resolution, 'min-resolution') { - $feature: 'min-'; - } - @else if index($resolution, 'max-resolution') { - $feature: 'max-'; - } - - $standard: '(#{$feature}resolution: #{$value})'; - - // If we're not dealing with dppx, - @if unit($value) != 'dppx' { - $base: 96dpi; - @if unit($value) == 'dpcm' { - $base: 243.84dpcm; - } - // Write out feature tests - $webkit: ''; - $moz: ''; - $webkit: '(-webkit-#{$feature}device-pixel-ratio: #{$value / $base})'; - $moz: '(#{$feature}-moz-device-pixel-ratio: #{$value / $base})'; - // Append to output - $output: append($output, $standard, space); - $output: append($output, $webkit, space); - $output: append($output, $moz, space); - } - @else { - $webkit: ''; - $moz: ''; - $webkit: '(-webkit-#{$feature}device-pixel-ratio: #{$value / 1dppx})'; - $moz: '(#{$feature}-moz-device-pixel-ratio: #{$value / 1dppx})'; - $fallback: '(#{$feature}resolution: #{$value / 1dppx * 96dpi})'; - // Append to output - $output: append($output, $standard, space); - $output: append($output, $webkit, space); - $output: append($output, $moz, space); - $output: append($output, $fallback, space); - } - - } - - @return $output; -} diff --git a/_sass/minimal-mistakes/vendor/breakpoint/parsers/single/_default.scss b/_sass/minimal-mistakes/vendor/breakpoint/parsers/single/_default.scss deleted file mode 100644 index 503ef427b0995..0000000000000 --- a/_sass/minimal-mistakes/vendor/breakpoint/parsers/single/_default.scss +++ /dev/null @@ -1,13 +0,0 @@ -@function breakpoint-parse-default($feature) { - $default: breakpoint-get('default feature'); - - // Set Context - $context-setter: private-breakpoint-set-context($default, $feature); - - @if (breakpoint-get('to ems') == true) and (type-of($feature) == 'number') { - @return '#{$default}: #{breakpoint-to-base-em($feature)}'; - } - @else { - @return '#{$default}: #{$feature}'; - } -} diff --git a/_sass/minimal-mistakes/vendor/breakpoint/parsers/triple/_default.scss b/_sass/minimal-mistakes/vendor/breakpoint/parsers/triple/_default.scss deleted file mode 100644 index 7fa418dda7231..0000000000000 --- a/_sass/minimal-mistakes/vendor/breakpoint/parsers/triple/_default.scss +++ /dev/null @@ -1,18 +0,0 @@ -@function breakpoint-parse-triple-default($feature, $first, $second) { - - // Sort into min and max - $min: min($first, $second); - $max: max($first, $second); - - // Set Context - $context-setter: private-breakpoint-set-context(min-#{$feature}, $min); - $context-setter: private-breakpoint-set-context(max-#{$feature}, $max); - - // Make them EMs if need be - @if (breakpoint-get('to ems') == true) { - $min: breakpoint-to-base-em($min); - $max: breakpoint-to-base-em($max); - } - - @return '(min-#{$feature}: #{$min}) and (max-#{$feature}: #{$max})'; -} diff --git a/_sass/minimal-mistakes/vendor/magnific-popup/_magnific-popup.scss b/_sass/minimal-mistakes/vendor/magnific-popup/_magnific-popup.scss deleted file mode 100644 index 27b27bcc3cc14..0000000000000 --- a/_sass/minimal-mistakes/vendor/magnific-popup/_magnific-popup.scss +++ /dev/null @@ -1,649 +0,0 @@ -/* Magnific Popup CSS */ - -@import "settings"; - -//////////////////////// -// -// Contents: -// -// 1. Default Settings -// 2. General styles -// - Transluscent overlay -// - Containers, wrappers -// - Cursors -// - Helper classes -// 3. Appearance -// - Preloader & text that displays error messages -// - CSS reset for buttons -// - Close icon -// - "1 of X" counter -// - Navigation (left/right) arrows -// - Iframe content type styles -// - Image content type styles -// - Media query where size of arrows is reduced -// - IE7 support -// -//////////////////////// - - - -//////////////////////// -// 1. Default Settings -//////////////////////// - -$mfp-overlay-color: #0b0b0b !default; -$mfp-overlay-opacity: 0.8 !default; -$mfp-shadow: 0 0 8px rgba(0, 0, 0, 0.6) !default; // shadow on image or iframe -$mfp-popup-padding-left: 8px !default; // Padding from left and from right side -$mfp-popup-padding-left-mobile: 6px !default; // Same as above, but is applied when width of window is less than 800px - -$mfp-z-index-base: 1040 !default; // Base z-index of popup -$mfp-include-arrows: true !default; // include styles for nav arrows -$mfp-controls-opacity: 0.65 !default; -$mfp-controls-color: #FFF !default; -$mfp-controls-border-color: #3F3F3F !default; -$mfp-inner-close-icon-color: #333 !default; -$mfp-controls-text-color: #CCC !default; // Color of preloader and "1 of X" indicator -$mfp-controls-text-color-hover: #FFF !default; -$mfp-IE7support: true !default; // Very basic IE7 support - -// Iframe-type options -$mfp-include-iframe-type: true !default; -$mfp-iframe-padding-top: 40px !default; -$mfp-iframe-background: #000 !default; -$mfp-iframe-max-width: 900px !default; -$mfp-iframe-ratio: 9/16 !default; - -// Image-type options -$mfp-include-image-type: true !default; -$mfp-image-background: #444 !default; -$mfp-image-padding-top: 40px !default; -$mfp-image-padding-bottom: 40px !default; -$mfp-include-mobile-layout-for-image: true !default; // Removes paddings from top and bottom - -// Image caption options -$mfp-caption-title-color: #F3F3F3 !default; -$mfp-caption-subtitle-color: #BDBDBD !default; - -// A11y -$mfp-use-visuallyhidden: false !default; // Hide content from browsers, but make it available for screen readers - - - -//////////////////////// -// 2. General styles -//////////////////////// - -// Transluscent overlay -.mfp-bg { - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: $mfp-z-index-base + 2; - overflow: hidden; - position: fixed; - - background: $mfp-overlay-color; - opacity: $mfp-overlay-opacity; - @if $mfp-IE7support { - filter: unquote("alpha(opacity=#{$mfp-overlay-opacity*100})"); - } -} - -// Wrapper for popup -.mfp-wrap { - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: $mfp-z-index-base + 3; - position: fixed; - outline: none !important; - -webkit-backface-visibility: hidden; // fixes webkit bug that can cause "false" scrollbar -} - -// Root container -.mfp-container { - text-align: center; - position: absolute; - width: 100%; - height: 100%; - left: 0; - top: 0; - padding: 0 $mfp-popup-padding-left; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -// Vertical centerer helper -.mfp-container { - &:before { - content: ''; - display: inline-block; - height: 100%; - vertical-align: middle; - } -} - -// Remove vertical centering when popup has class `mfp-align-top` -.mfp-align-top { - .mfp-container { - &:before { - display: none; - } - } -} - -// Popup content holder -.mfp-content { - position: relative; - display: inline-block; - vertical-align: middle; - margin: 0 auto; - text-align: left; - z-index: $mfp-z-index-base + 5; -} -.mfp-inline-holder, -.mfp-ajax-holder { - .mfp-content { - width: 100%; - cursor: auto; - } -} - -// Cursors -.mfp-ajax-cur { - cursor: progress; -} -.mfp-zoom-out-cur { - &, .mfp-image-holder .mfp-close { - cursor: -moz-zoom-out; - cursor: -webkit-zoom-out; - cursor: zoom-out; - } -} -.mfp-zoom { - cursor: pointer; - cursor: -webkit-zoom-in; - cursor: -moz-zoom-in; - cursor: zoom-in; -} -.mfp-auto-cursor { - .mfp-content { - cursor: auto; - } -} - -.mfp-close, -.mfp-arrow, -.mfp-preloader, -.mfp-counter { - -webkit-user-select:none; - -moz-user-select: none; - user-select: none; -} - -// Hide the image during the loading -.mfp-loading { - &.mfp-figure { - display: none; - } -} - -// Helper class that hides stuff -@if $mfp-use-visuallyhidden { - // From HTML5 Boilerplate https://github.com/h5bp/html5-boilerplate/blob/v4.2.0/doc/css.md#visuallyhidden - .mfp-hide { - border: 0 !important; - clip: rect(0 0 0 0) !important; - height: 1px !important; - margin: -1px !important; - overflow: hidden !important; - padding: 0 !important; - position: absolute !important; - width: 1px !important; - } -} @else { - .mfp-hide { - display: none !important; - } -} - - -//////////////////////// -// 3. Appearance -//////////////////////// - -// Preloader and text that displays error messages -.mfp-preloader { - color: $mfp-controls-text-color; - position: absolute; - top: 50%; - width: auto; - text-align: center; - margin-top: -0.8em; - left: 8px; - right: 8px; - z-index: $mfp-z-index-base + 4; - a { - color: $mfp-controls-text-color; - &:hover { - color: $mfp-controls-text-color-hover; - } - } -} - -// Hide preloader when content successfully loaded -.mfp-s-ready { - .mfp-preloader { - display: none; - } -} - -// Hide content when it was not loaded -.mfp-s-error { - .mfp-content { - display: none; - } -} - -// CSS-reset for buttons -button { - &.mfp-close, - &.mfp-arrow { - overflow: visible; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; - display: block; - outline: none; - padding: 0; - z-index: $mfp-z-index-base + 6; - -webkit-box-shadow: none; - box-shadow: none; - } - &::-moz-focus-inner { - padding: 0; - border: 0 - } -} - - -// Close icon -.mfp-close { - width: 44px; - height: 44px; - line-height: 44px; - - position: absolute; - right: 0; - top: 0; - text-decoration: none; - text-align: center; - opacity: $mfp-controls-opacity; - @if $mfp-IE7support { - filter: unquote("alpha(opacity=#{$mfp-controls-opacity*100})"); - } - padding: 0 0 18px 10px; - color: $mfp-controls-color; - - font-style: normal; - font-size: 28px; - font-family: $serif; - - &:hover, - &:focus { - opacity: 1; - @if $mfp-IE7support { - filter: unquote("alpha(opacity=#{1*100})"); - } - } - - &:active { - top: 1px; - } -} -.mfp-close-btn-in { - .mfp-close { - color: $mfp-inner-close-icon-color; - } -} -.mfp-image-holder, -.mfp-iframe-holder { - .mfp-close { - color: $mfp-controls-color; - right: -6px; - text-align: right; - padding-right: 6px; - width: 100%; - } -} - -// "1 of X" counter -.mfp-counter { - position: absolute; - top: 0; - right: 0; - color: $mfp-controls-text-color; - font-size: 12px; - line-height: 18px; -} - -// Navigation arrows -@if $mfp-include-arrows { - .mfp-arrow { - position: absolute; - opacity: $mfp-controls-opacity; - @if $mfp-IE7support { - filter: unquote("alpha(opacity=#{$mfp-controls-opacity*100})"); - } - margin: 0; - top: 50%; - margin-top: -55px; - padding: 0; - width: 90px; - height: 110px; - -webkit-tap-highlight-color: rgba(0,0,0,0); - &:active { - margin-top: -54px; - } - &:hover, - &:focus { - opacity: 1; - @if $mfp-IE7support { - filter: unquote("alpha(opacity=#{1*100})"); - } - } - &:before, - &:after, - .mfp-b, - .mfp-a { - content: ''; - display: block; - width: 0; - height: 0; - position: absolute; - left: 0; - top: 0; - margin-top: 35px; - margin-left: 35px; - border: medium inset transparent; - } - - &:after, - .mfp-a { - - border-top-width: 13px; - border-bottom-width: 13px; - top:8px; - } - - &:before, - .mfp-b { - border-top-width: 21px; - border-bottom-width: 21px; - opacity: 0.7; - } - - } - - .mfp-arrow-left { - left: 0; - - &:after, - .mfp-a { - border-right: 17px solid $mfp-controls-color; - margin-left: 31px; - } - &:before, - .mfp-b { - margin-left: 25px; - border-right: 27px solid $mfp-controls-border-color; - } - } - - .mfp-arrow-right { - right: 0; - &:after, - .mfp-a { - border-left: 17px solid $mfp-controls-color; - margin-left: 39px - } - &:before, - .mfp-b { - border-left: 27px solid $mfp-controls-border-color; - } - } -} - - - -// Iframe content type -@if $mfp-include-iframe-type { - .mfp-iframe-holder { - padding-top: $mfp-iframe-padding-top; - padding-bottom: $mfp-iframe-padding-top; - .mfp-content { - line-height: 0; - width: 100%; - max-width: $mfp-iframe-max-width; - } - .mfp-close { - top: -40px; - } - } - .mfp-iframe-scaler { - width: 100%; - height: 0; - overflow: hidden; - padding-top: $mfp-iframe-ratio * 100%; - iframe { - position: absolute; - display: block; - top: 0; - left: 0; - width: 100%; - height: 100%; - box-shadow: $mfp-shadow; - background: $mfp-iframe-background; - } - } -} - - - -// Image content type -@if $mfp-include-image-type { - - /* Main image in popup */ - img { - &.mfp-img { - width: auto; - max-width: 100%; - height: auto; - display: block; - line-height: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: $mfp-image-padding-top 0 $mfp-image-padding-bottom; - margin: 0 auto; - } - } - - /* The shadow behind the image */ - .mfp-figure { - line-height: 0; - &:after { - content: ''; - position: absolute; - left: 0; - top: $mfp-image-padding-top; - bottom: $mfp-image-padding-bottom; - display: block; - right: 0; - width: auto; - height: auto; - z-index: -1; - box-shadow: $mfp-shadow; - background: $mfp-image-background; - } - small { - color: $mfp-caption-subtitle-color; - display: block; - font-size: 12px; - line-height: 14px; - } - figure { - margin: 0; - } - figcaption { - margin-top: 0; - margin-bottom: 0; // reset for bottom spacing - } - } - .mfp-bottom-bar { - margin-top: -$mfp-image-padding-bottom + 4; - position: absolute; - top: 100%; - left: 0; - width: 100%; - cursor: auto; - } - .mfp-title { - text-align: left; - line-height: 18px; - color: $mfp-caption-title-color; - word-wrap: break-word; - padding-right: 36px; // leave some space for counter at right side - } - - .mfp-image-holder { - .mfp-content { - max-width: 100%; - } - } - - .mfp-gallery { - .mfp-image-holder { - .mfp-figure { - cursor: pointer; - } - } - } - - - @if $mfp-include-mobile-layout-for-image { - @media screen and (max-width: 800px) and (orientation:landscape), screen and (max-height: 300px) { - /** - * Remove all paddings around the image on small screen - */ - .mfp-img-mobile { - .mfp-image-holder { - padding-left: 0; - padding-right: 0; - } - img { - &.mfp-img { - padding: 0; - } - } - .mfp-figure { - // The shadow behind the image - &:after { - top: 0; - bottom: 0; - } - small { - display: inline; - margin-left: 5px; - } - } - .mfp-bottom-bar { - background: rgba(0,0,0,0.6); - bottom: 0; - margin: 0; - top: auto; - padding: 3px 5px; - position: fixed; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - &:empty { - padding: 0; - } - } - .mfp-counter { - right: 5px; - top: 3px; - } - .mfp-close { - top: 0; - right: 0; - width: 35px; - height: 35px; - line-height: 35px; - background: rgba(0, 0, 0, 0.6); - position: fixed; - text-align: center; - padding: 0; - } - } - } - } -} - - - -// Scale navigation arrows and reduce padding from sides -@media all and (max-width: 900px) { - .mfp-arrow { - -webkit-transform: scale(0.75); - transform: scale(0.75); - } - .mfp-arrow-left { - -webkit-transform-origin: 0; - transform-origin: 0; - } - .mfp-arrow-right { - -webkit-transform-origin: 100%; - transform-origin: 100%; - } - .mfp-container { - padding-left: $mfp-popup-padding-left-mobile; - padding-right: $mfp-popup-padding-left-mobile; - } -} - - - -// IE7 support -// Styles that make popup look nicier in old IE -@if $mfp-IE7support { - .mfp-ie7 { - .mfp-img { - padding: 0; - } - .mfp-bottom-bar { - width: 600px; - left: 50%; - margin-left: -300px; - margin-top: 5px; - padding-bottom: 5px; - } - .mfp-container { - padding: 0; - } - .mfp-content { - padding-top: 44px; - } - .mfp-close { - top: 0; - right: 0; - padding-top: 0; - } - } -} diff --git a/_sass/minimal-mistakes/vendor/magnific-popup/_settings.scss b/_sass/minimal-mistakes/vendor/magnific-popup/_settings.scss deleted file mode 100644 index e7866b3f17c27..0000000000000 --- a/_sass/minimal-mistakes/vendor/magnific-popup/_settings.scss +++ /dev/null @@ -1,46 +0,0 @@ -//////////////////////// -// Settings // -//////////////////////// - -// overlay -$mfp-overlay-color: #000; // Color of overlay screen -$mfp-overlay-opacity: 0.8; // Opacity of overlay screen -$mfp-shadow: 0 0 8px rgba(0, 0, 0, 0.6); // Shadow on image or iframe - -// spacing -$mfp-popup-padding-left: 8px; // Padding from left and from right side -$mfp-popup-padding-left-mobile: 6px; // Same as above, but is applied when width of window is less than 800px - -$mfp-z-index-base: 1040; // Base z-index of popup - -// controls -$mfp-include-arrows: true; // Include styles for nav arrows -$mfp-controls-opacity: 1; // Opacity of controls -$mfp-controls-color: #fff; // Color of controls -$mfp-controls-border-color: #fff; // Border color of controls -$mfp-inner-close-icon-color: #fff; // Color of close button when inside -$mfp-controls-text-color: #ccc; // Color of preloader and "1 of X" indicator -$mfp-controls-text-color-hover: #fff; // Hover color of preloader and "1 of X" indicator -$mfp-IE7support: true; // Very basic IE7 support - -// Iframe-type options -$mfp-include-iframe-type: true; // Enable Iframe-type popups -$mfp-iframe-padding-top: 40px; // Iframe padding top -$mfp-iframe-background: #000; // Background color of iframes -$mfp-iframe-max-width: 900px; // Maximum width of iframes -$mfp-iframe-ratio: 9/16; // Ratio of iframe (9/16 = widescreen, 3/4 = standard, etc.) - -// Image-type options -$mfp-include-image-type: true; // Enable Image-type popups -$mfp-image-background: #444 !default; -$mfp-image-padding-top: 40px; // Image padding top -$mfp-image-padding-bottom: 40px; // Image padding bottom -$mfp-include-mobile-layout-for-image: true; // Removes paddings from top and bottom - -// Image caption options -$mfp-caption-title-color: #f3f3f3; // Caption title color -$mfp-caption-subtitle-color: #bdbdbd; // Caption subtitle color -.mfp-counter { font-family: $serif; } // Caption font family - -// A11y -$mfp-use-visuallyhidden: false; \ No newline at end of file diff --git a/_sass/minimal-mistakes/vendor/susy/_su.scss b/_sass/minimal-mistakes/vendor/susy/_su.scss deleted file mode 100644 index 83386adba2010..0000000000000 --- a/_sass/minimal-mistakes/vendor/susy/_su.scss +++ /dev/null @@ -1,4 +0,0 @@ -// Su -// == - -@import 'susy/su'; diff --git a/_sass/minimal-mistakes/vendor/susy/_susy-prefix.scss b/_sass/minimal-mistakes/vendor/susy/_susy-prefix.scss deleted file mode 100644 index 185b35613e3cb..0000000000000 --- a/_sass/minimal-mistakes/vendor/susy/_susy-prefix.scss +++ /dev/null @@ -1,13 +0,0 @@ -// Susy (Prefixed) -// =============== - -$susy-version: 3; - -@import 'susy/utilities'; -@import 'susy/su-validate'; -@import 'susy/su-math'; -@import 'susy/settings'; -@import 'susy/normalize'; -@import 'susy/parse'; -@import 'susy/syntax-helpers'; -@import 'susy/api'; diff --git a/_sass/minimal-mistakes/vendor/susy/_susy.scss b/_sass/minimal-mistakes/vendor/susy/_susy.scss deleted file mode 100644 index bfda3d086acf9..0000000000000 --- a/_sass/minimal-mistakes/vendor/susy/_susy.scss +++ /dev/null @@ -1,5 +0,0 @@ -// Susy (Un-Prefixed) -// ================== - -@import 'susy-prefix'; -@import 'susy/unprefix'; diff --git a/_sass/minimal-mistakes/vendor/susy/plugins/_svg-grid.scss b/_sass/minimal-mistakes/vendor/susy/plugins/_svg-grid.scss deleted file mode 100644 index 99db8d1ed4ba6..0000000000000 --- a/_sass/minimal-mistakes/vendor/susy/plugins/_svg-grid.scss +++ /dev/null @@ -1,5 +0,0 @@ -// SVG Grid Background -// =================== - -@import 'svg-grid/prefix'; -@import 'svg-grid/svg-unprefix'; diff --git a/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_prefix.scss b/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_prefix.scss deleted file mode 100644 index 21fb45fa581de..0000000000000 --- a/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_prefix.scss +++ /dev/null @@ -1,7 +0,0 @@ -// Prefixed SVG Plugin -// =================== - -@import 'svg-settings'; -@import 'svg-utilities'; -@import 'svg-grid-math'; -@import 'svg-api'; diff --git a/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-api.scss b/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-api.scss deleted file mode 100644 index 7d880e3e283c1..0000000000000 --- a/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-api.scss +++ /dev/null @@ -1,114 +0,0 @@ -/// Plugin: SVG Grid Image -/// ====================== -/// @group plugin_svg-grid -/// @see susy-svg-grid - - - -/// ## Overview -/// If you want to generate svg-backgrounds -/// for help visualizing and debugging your grids, -/// import the SVG Grid Plugin. -/// -/// The plugin adds `svg-grid-colors` setting -/// to your global defaults, -/// which you can override in `$susy`. -/// It also provides you with a new function, -/// `susy-svg-grid()`, -/// which will return inline svg for use in -/// backgrounds or generated content. -/// -/// This function come with an unprefixed alias by default, -/// using the `svg-grid` import. -/// If you only only want prefixed versions of the API, -/// import the `svg-grid/prefix` partial instead. -/// -/// @group plugin_svg-grid -/// -/// @example scss - importing the plugin -/// // The full path to import Susy will depend on your setup… -/// -/// // unprefixed -/// @import 'plugins/svg-grid'; -/// -/// // prefixed -/// @import 'plugins/svg-grid/prefix'; -/// -/// @example scss - generating background grids -/// .grid { -/// background: susy-svg-grid() no-repeat scroll; -/// } - - - -// SVG Grid -// -------- -/// Return inline svg-data in to display the grid. -/// -/// @group plugin_svg-grid -/// -/// @param {Map | List} $grid [$susy] - -/// Map or shorthand defining the current grid -/// @param {Color | List | null} $colors [null] - -/// Column color, or list of colors for column-gradient, -/// used to override the global `svg-grid-colors` setting -/// @param {Length | null} $offset [null] - -/// Manually override the default grid-image offset, -/// to account for grid edges -/// -/// @return {String} - -/// CSS inline-data SVG string, in `url()` format, -/// for use in image or content properties -/// @example scss -/// .grid { -/// background: susy-svg-grid() no-repeat scroll; -/// } -@function susy-svg-grid( - $grid: $susy, - $colors: null, - $offset: null -) { - // Grid parsing & normalizing - $grid: susy-compile($grid, $context-only: true); - - // Color and gradient handling - $gradient: ''; - - @if (not $colors) { - $colors: susy-get('svg-grid-colors'); - } - - @if length($colors) > 1 { - $gradient: _susy-svg-gradient($colors); - $colors: 'url(%23susy-svg-gradient)'; - } @else { - $colors: _susy-svg-color($colors); - } - - // Get a default image-width - $span: ( - 'span': map-get($grid, 'columns'), - 'spread': map-get($grid, 'container-spread'), - ); - $span: map-merge($grid, $span); - $image-width: su-call('su-span', $span); - $image-width: if((type-of($image-width) == 'number'), $image-width, 100%); - - // SVG construction - $columns: map-get($grid, 'columns'); - $offset: $offset or _susy-svg-offset($grid); - - $attrs: 'fill="#{$colors}" width="#{$image-width}"'; - $svg: 'data:image/svg+xml,'; - $svg: $svg + '%3Csvg xmlns="http://www.w3.org/2000/svg" #{$attrs} %3E'; - $svg: $svg + $gradient; - - @for $column from 1 through length($columns) { - $width: susy-span(1 narrow at $column, $grid); - $x: _susy-svg-column-position($column, $grid); - - $svg: $svg + _susy-svg-rect($x, $width, $offset); - } - - @return url('#{$svg}%3C/svg%3E'); -} diff --git a/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-grid-math.scss b/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-grid-math.scss deleted file mode 100644 index 044801abe218a..0000000000000 --- a/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-grid-math.scss +++ /dev/null @@ -1,67 +0,0 @@ -// SVG Grid Math -// ============= - - - -// SVG Column Position -// ------------------- -/// Determine the proper horizontal position -/// for a column rectangle -/// -/// @access private -/// -/// @param {Integer} $column - -/// 1-indexed column location on the grid -/// @param {Map} $grid - -/// Normalized settings map representing the current grid -/// -/// @return {Length} - -/// Horizontal position of svg column rectangle, -/// as distance from the grid edge -@function _susy-svg-column-position( - $column, - $grid -) { - $x: $column - 1; - - @if ($x > 0) { - $x: susy-span(first $x wide, $grid); - } - - @return $x; -} - - - -// SVG Offset -// ---------- -/// Determine if a grid image needs to be offset, -/// to account for edge gutters. -/// -/// @access private -/// -/// @param {Map} $grid - -/// Normalized settings map representing the current grid -/// -/// @return {Length | null} - -/// Expected distance from container edge to first column, -/// based on spread values and gutter-widths -@function _susy-svg-offset( - $grid -) { - $columns: su-valid-columns(map-get($grid, 'columns')); - $gutters: su-valid-gutters(map-get($grid, 'gutters')); - $container: su-valid-spread(map-get($grid, 'container-spread')) + 1; - - @if ($container == 0) { - @return null; - } - - $gutter: su-call('su-gutter', $grid); - - @if (type-of($gutter) == 'string') { - @return 'calc(#{$container} * #{$gutter} / 2)'; - } - - @return $container * $gutter / 2; -} diff --git a/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-settings.scss b/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-settings.scss deleted file mode 100644 index 3fcc91fbea305..0000000000000 --- a/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-settings.scss +++ /dev/null @@ -1,14 +0,0 @@ -// SVG Settings -// ============ - - -// Susy SVG Defaults -// ================= -/// This plugin adds the `svg-grid-colors` property -/// and default value to `$_susy-defaults` — -/// you can override that value in `$susy` -/// or any other grid settings map. -/// @group plugin_svg-grid -$_susy-defaults: map-merge(( - 'svg-grid-colors': hsla(120, 50%, 50%, 0.5) hsla(120, 50%, 75%, 0.5), - ), $_susy-defaults); diff --git a/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-unprefix.scss b/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-unprefix.scss deleted file mode 100644 index 187157cfeddc8..0000000000000 --- a/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-unprefix.scss +++ /dev/null @@ -1,18 +0,0 @@ -// Unprefix Susy SVG Grid -// ====================== - - - -// SVG Grid -// -------- -/// Un-prefixed alias for `susy-svg-grid` -/// -/// @group plugin_svg-grid -/// @alias susy-svg-grid -@function svg-grid( - $grid: $susy, - $colors: susy-get('svg-grid-colors'), - $offset: null -) { - @return susy-svg-grid($grid, $colors, $offset); -} diff --git a/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-utilities.scss b/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-utilities.scss deleted file mode 100644 index e4bf18ff5b6bc..0000000000000 --- a/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-utilities.scss +++ /dev/null @@ -1,133 +0,0 @@ -// SVG Utilities -// ============= - - - -// SVG Validate Units -// ------------------ -/// Make sure a length is supported in svg -/// -/// @access private -/// -/// @param {Length} $length - -/// The length to validate -/// @param {String} $name [null] - -/// Optional name of length origin, -/// for error reporting -/// -/// @return {Length} - -/// An svg-validated length, or comparable valid length -@function _susy-svg-validate-units( - $length, - $name: null -) { - $_svg-units: ('em', 'ex', 'px', 'pt', 'pc', 'cm', 'mm', 'in', '%'); - $string: type-of($length) == 'string'; - - @if ($length == 0) or ($string) or index($_svg-units, unit($length)) { - @return $length; - } - - @return _susy-error( - '`#{unit($length)}` #{$name} units are not supported in SVG', - '_susy-svg-validate-units'); -} - - - -// SVG Rect -// -------- -/// Build a single svg rectangle -/// -/// @access private -/// -/// @param {Length} $x - -/// Horizontal position for the rectangle -/// @param {Length} $width - -/// Width of the rectangle -/// @param {Length} $offset [null] - -/// Offset the rectangle, to account for edge gutters -/// -/// @return {String} - -/// Escaped string representing one svg rectangle -@function _susy-svg-rect( - $x, - $width, - $offset: null -) { - $x: _susy-svg-validate-units($x); - $width: _susy-svg-validate-units($width); - $offset: if($offset == 0, null, $offset); - - @if (type-of($offset) == 'number') and (type-of($x) == 'number') { - @if comparable($x, $offset) { - $x: $x + $offset; - } @else { - $x: 'calc(#{$x} + #{$offset})'; - } - } @else if $offset and ($x != 0) { - $x: 'calc(#{$x} + #{$offset})'; - } @else if $offset { - $x: $offset; - } - - @return '%3Crect x="#{$x}" width="#{$width}" height="100%"/%3E'; -} - - - -// SVG Color -// --------- -/// Stringify colors, and escape hex symbol -/// -/// @access private -/// -/// @param {Color} $color - -/// Color to stringify and escape -/// -/// @return {String} - -/// Escaped string value of color -@function _susy-svg-color( - $color -) { - $color: inspect($color); // convert to string - - @if (str-index($color, '#') == 1) { - $color: '%23' + str-slice($color, 2); - } - - @return $color; -} - - - -// SVG Gradient -// ------------ -/// Create a multi-color svg gradient -/// -/// @access private -/// -/// @param {List} $colors - -/// List of colors to be equally spaced from `0%` to `100%` -/// in each column rectangle -/// -/// @return {String} - -/// Escaped string representing one svg gradient -/// (`id="susy-svg-gradient"`) -@function _susy-svg-gradient( - $colors -) { - $gradient: '%3Cdefs%3E%3ClinearGradient spreadMethod="pad"'; - $gradient: '#{$gradient} id="susy-svg-gradient"'; - $gradient: '#{$gradient} x1="0%" y1="0%" x2="100%" y2="0%"%3E'; - - @for $i from 1 through length($colors) { - $color: _susy-svg-color(nth($colors, $i)); - $offset: percentage(($i - 1) / (length($colors) - 1)); - $stop: '%3Cstop offset="#{$offset}" style="stop-color:#{$color};" /%3E'; - - $gradient: $gradient + $stop; - } - - @return $gradient + '%3C/linearGradient%3E%3C/defs%3E'; -} diff --git a/_sass/minimal-mistakes/vendor/susy/susy/_api.scss b/_sass/minimal-mistakes/vendor/susy/susy/_api.scss deleted file mode 100644 index de8c9bdd8d0c7..0000000000000 --- a/_sass/minimal-mistakes/vendor/susy/susy/_api.scss +++ /dev/null @@ -1,318 +0,0 @@ -/// Susy3 API Functions -/// =================== -/// These three functions form the core of Susy's -/// layout-building grid API. -/// -/// - Use `span()` and `gutter()` to return any grid-width, -/// and apply the results wherever you need them: -/// CSS `width`, `margin`, `padding`, `flex-basis`, `transform`, etc. -/// - For asymmetrical-fluid grids, -/// `slice()` can help manage your nesting context. -/// -/// All three functions come with an unprefixed alias by default, -/// using the `susy` import. -/// Import the `susy-prefix` partial instead, -/// if you only only want prefixed versions of the API. -/// -/// This is a thin syntax-sugar shell around -/// the "Su" core-math functions: `su-span`, `su-gutter`, and `su-slice`. -/// If you prefer the more constrained syntax of the math engine, -/// you are welcome to use those functions instead. -/// -/// @group b-api -/// @see susy-span -/// @see susy-gutter -/// @see susy-slice -/// @see su-span -/// @see su-gutter -/// @see su-slice - - - -/// ## Shorthand -/// -/// All functions draw on the same shorthand syntax in two parts, -/// seperated by the word `of`. -/// -/// ### Span Syntax: `` [`` ``] -/// The first part describes the -/// **span** width, location, and spread in any order. -/// Only the width is required: -/// -/// - `span(2)` will return the width of 2 columns. -/// - `span(3 wide)` will return 3-columns, with an additional gutter. -/// - location is only needed with asymmetrical grids, -/// where `span(3 at 2)` will return the width of -/// specific columns on the grid. -/// Since these are functions, they will not handle placement for you. -/// -/// ### Context Syntax: `[of ]` -/// The second half of Susy's shorthand -/// describes the grid-**context** – -/// available columns, container-spread, and optional gutter override – -/// in any order. -/// All of these settings have globally-defined defaults: -/// -/// - `span(2 of 6)` will set the context to -/// a slice of 6 columns from the global grid. -/// More details below. -/// - `span(2 of 12 wide)` changes the container-spread -/// as well as the column-context. -/// - `span(2 of 12 set-gutters 0.5em)` -/// will override the global gutters setting -/// for this one calculation. -/// -/// A single unitless number for `columns` -/// will be treated as a slice of the parent grid. -/// On a grid with `columns: susy-repeat(12, 120px)`, -/// the shorthand `of 4` will use the parent `120px` column-width. -/// You can also be more explicit, -/// and say `of susy-repeat(4, 100px)`. -/// If you are using asymmetrical grids, -/// like `columns: (1 1 2 3 5 8)`, -/// Susy can't slice it for you without knowing which columns you want. -/// The `slice` function accepts exactly the same syntax as `span`, -/// but returns a list of columns rather than a width. -/// Use it in your context like `of slice(first 3)`. -/// -/// @group b-api - - - -// Susy Span -// --------- -/// This is the primary function in Susy — -/// used to return the width of a span across one or more columns, -/// and any relevant gutters along the way. -/// With the default settings, -/// `span(3)` will return the width of 3 columns, -/// and the 2 intermediate gutters. -/// This can be used to set the `width` property of grid elements, -/// or `margin` and `padding` -/// to push, pull, and pad your elements. -/// -/// - This is a thin syntax-sugar shell around -/// the core-math `su-span()` function. -/// - The un-prefixed alias `span()` is available by default. -/// -/// @group b-api -/// @see su-span -/// @see $susy -/// -/// @param {list} $span - -/// Shorthand expression to define the width of the span, -/// optionally containing: -/// - a count, length, or column-list span. -/// - `at $n`, `first`, or `last` location on asymmetrical grids, -/// where `at 1 == first`, -/// and `last` will calculate the proper location -/// based on columns and span. -/// - `narrow`, `wide`, or `wider` for optionally spreading -/// across adjacent gutters. -/// - `of $n ` for available grid columns -/// and spread of the container. -/// Span counts like `of 6` are valid -/// in the context of symmetrical grids, -/// where Susy can safely infer a slice of the parent columns. -/// - and `set-gutters $n` to override global gutter settings. -/// -/// @param {map} $config [()] - -/// Optional map of Susy grid configuration settings. -/// See `$susy` documentation for details. -/// -/// @return {length} - -/// Calculated length value, using the units given, -/// or converting to `%` for fraction-based grids, -/// or a full `calc` function when units/fractions -/// are not comparable outside the browser. -/// -/// @example scss - span half the grid -/// .foo { -/// // the result is a bit under 50% to account for gutters -/// width: susy-span(6 of 12); -/// } -/// -/// @example scss - span a specific segment of asymmetrical grid -/// .foo { -/// width: susy-span(3 at 3 of (1 2 3 5 8)); -/// } -@function susy-span( - $span, - $config: () -) { - $output: susy-compile($span, $config); - - @if map-get($output, 'span') { - @return su-call('su-span', $output); - } - - $actual: '[#{type-of($span)}] `#{inspect($span)}`'; - @return _susy-error( - 'Unable to determine span value from #{$actual}.', - 'susy-span'); -} - - - -// Susy Gutter -// ----------- -/// The gutter function returns -/// the width of a single gutter on your grid, -/// to be applied where you see fit – -/// on `margins`, `padding`, `transform`, or element `width`. -/// -/// - This is a thin syntax-sugar shell around -/// the core-math `su-gutter()` function. -/// - The un-prefixed alias `gutter()` is available by default. -/// -/// @group b-api -/// @see su-gutter -/// @see $susy -/// -/// @param {list | number} $context [null] - -/// Optional context for nested gutters, -/// including shorthand for -/// `columns`, `gutters`, and `container-spread` -/// (additional shorthand will be ignored) -/// -/// @param {map} $config [()] - -/// Optional map of Susy grid configuration settings. -/// See `$susy` documentation for details. -/// -/// @return {length} - -/// Width of a gutter as `%` of current context, -/// or in the units defined by `column-width` when available -/// -/// @example scss - add gutters before or after an element -/// .floats { -/// float: left; -/// width: span(3 of 6); -/// margin-left: gutter(of 6); -/// } -/// -/// @example scss - add gutters to padding -/// .flexbox { -/// flex: 1 1 span(3 wide of 6 wide); -/// padding: gutter(of 6) / 2; -/// } -/// -@function susy-gutter( - $context: susy-get('columns'), - $config: () -) { - $context: susy-compile($context, $config, 'context-only'); - - @return su-call('su-gutter', $context); -} - - - -// Susy Slice -// ---------- -/// Working with asymmetrical grids (un-equal column widths) -/// can be challenging –  -/// expecially when they involve fluid/fractional elements. -/// Describing a context `of (15em 6em 6em 6em 15em)` is a lot -/// to put inside the span or gutter function shorthand. -/// This slice function returns a sub-slice of asymmetrical columns to use -/// for a nested context. -/// `slice(3 at 2)` will give you a subset of the global grid, -/// spanning 3 columns, starting with the second. -/// -/// - This is a thin syntax-sugar shell around -/// the core-math `su-slice()` function. -/// - The un-prefixed alias `slice()` is available by default. -/// -/// @group b-api -/// @see su-slice -/// @see $susy -/// -/// @param {list} $span - -/// Shorthand expression to define the subset span, optionally containing: -/// - `at $n`, `first`, or `last` location on asymmetrical grids; -/// - `of $n ` for available grid columns -/// and spread of the container -/// - Span-counts like `of 6` are only valid -/// in the context of symmetrical grids -/// - Valid spreads include `narrow`, `wide`, or `wider` -/// -/// @param {map} $config [()] - -/// Optional map of Susy grid configuration settings. -/// See `$susy` documentation for details. -/// -/// @return {list} - -/// Subset list of columns for use for a nested context -/// -/// @example scss - Return a nested segment of asymmetrical grid -/// $context: susy-slice(3 at 3 of (1 2 3 5 8)); -/// /* $context: #{$context}; */ -@function susy-slice( - $span, - $config: () -) { - $span: susy-compile($span, $config); - - @return su-call('su-slice', $span); -} - - - -/// ## Building Grids -/// The web has come a long way -/// since the days of double-margin-hacks -/// and inconsistent subpixel rounding. -/// In addition to floats and tables, -/// we can now use much more powerful tools, -/// like flexbox and CSS grid, -/// to build more interesting and responsive layouts. -/// -/// With Susy3, we hope you'll start moving in that direction. -/// You can still build classic 12-column Grid Systems, -/// and we'll help you get there, -/// but Susy3 is primarily designed for a grid-math-on-demand -/// approach to layout: -/// applying our functions only where you really need grid math. -/// Read the [intro article by OddBird][welcome] for more details. -/// -/// [welcome]: http://oddbird.net/2017/06/28/susy3/ -/// -/// @group b-api -/// @link http://oddbird.net/2017/06/28/susy3/ Article: Welcome to Susy3 -/// -/// @example scss - floats -/// .float { -/// width: span(3); -/// margin-right: gutter(); -/// } -/// -/// @example scss - flexbox -/// .flexbox { -/// flex: 1 1 span(3); -/// // half a gutter on either side… -/// padding: 0 gutter() / 2; -/// } -/// -/// @example scss - pushing and pulling -/// .push-3 { -/// margin-left: span(3 wide); -/// } -/// -/// .pull-3 { -/// margin-left: 0 - span(3 wide); -/// } -/// -/// @example scss - building an attribute system -/// // markup example:
-/// [data-span] { -/// float: left; -/// -/// &:not([data-span*='last']) { -/// margin-right: gutter(); -/// } -/// } -/// -/// @for $span from 1 through length(susy-get('columns')) { -/// [data-span*='#{$span}'] { -/// width: span($span); -/// } -/// } diff --git a/_sass/minimal-mistakes/vendor/susy/susy/_normalize.scss b/_sass/minimal-mistakes/vendor/susy/susy/_normalize.scss deleted file mode 100644 index a988504c18146..0000000000000 --- a/_sass/minimal-mistakes/vendor/susy/susy/_normalize.scss +++ /dev/null @@ -1,261 +0,0 @@ -/// Syntax Normalization -/// ==================== -/// Susy is divided into two layers: -/// "Su" provides the core math functions with a stripped-down syntax, -/// while "Susy" adds global settings, shorthand syntax, -/// and other helpers. -/// Each setting (e.g. span, location, columns, spread, etc.) -/// has a single canonical syntax in Su. -/// -/// This normalization module helps translate between those layers, -/// transforming parsed Susy input into -/// values that Su will understand. -/// -/// @group x-normal -/// -/// @see susy-normalize -/// @see susy-normalize-span -/// @see susy-normalize-columns -/// @see susy-normalize-spread -/// @see susy-normalize-location - - - -// Susy Normalize -// -------------- -/// Normalize the values in a configuration map. -/// In addition to the global `$susy` properties, -/// this map can include local span-related imformation, -/// like `span` and `location`. -/// -/// Normalization does not check that values are valid, -/// which will happen in the Su math layer. -/// These functions merely look for known Susy syntax – -/// returning a map with those shorthand values -/// converted into low-level data for Su. -/// For example `span: all` and `location: first` -/// will be converted into specific numbers. -/// -/// @group x-normal -/// @see $susy -/// @see susy-parse -/// -/// @param {map} $config - -/// Map of Susy configuration settings to normalize. -/// See `$susy` and `susy-parse()` documentation for details. -/// @param {map | null} $context [null] - -/// Map of Susy configuration settings to use as global reference, -/// or `null` to use global settings. -/// -/// @return {map} - -/// Map of Susy configuration settings, -/// with all values normalized for Su math functions. -@function susy-normalize( - $config, - $context: null -) { - // Spread - @each $setting in ('spread', 'container-spread') { - $value: map-get($config, $setting); - - @if $value { - $value: susy-normalize-spread($value); - $config: map-merge($config, ($setting: $value)); - } - } - - // Columns - $columns: map-get($config, 'columns'); - - @if $columns { - $columns: susy-normalize-columns($columns, $context); - $config: map-merge($config, ('columns': $columns)); - } - - @if not $columns { - $map: type-of($context) == 'map'; - $columns: if($map, map-get($context, 'columns'), null); - $columns: $columns or susy-get('columns'); - } - - // Span - $span: map-get($config, 'span'); - - @if $span { - $span: susy-normalize-span($span, $columns); - $config: map-merge($config, ('span': $span)); - } - - // Location - $location: map-get($config, 'location'); - - @if $location { - $location: susy-normalize-location($span, $location, $columns); - $config: map-merge($config, ('location': $location)); - } - - @return $config; -} - - - -// Normalize Span -// -------------- -/// Normalize `span` shorthand for Su. -/// Su span syntax allows an explicit length (e.g. `3em`), -/// unitless column-span number (e.g. `3` columns), -/// or an explicit list of columns (e.g. `(3 5 8)`). -/// -/// Susy span syntax also allows the `all` keyword, -/// which will be converted to a slice of the context -/// in normalization. -/// -/// @group x-normal -/// -/// @param {number | list | 'all'} $span - -/// Span value to normalize. -/// @param {list} $columns - -/// Normalized list of columns in the grid -/// -/// @return {number | list} - -/// Number or list value for `$span` -@function susy-normalize-span( - $span, - $columns: susy-get('columns') -) { - @if ($span == 'all') { - @return length($columns); - } - - @return $span; -} - - - -// Normalize Columns -// ----------------- -/// Normalize `column` shorthand for Su. -/// Su column syntax only allows column lists (e.g. `120px 1 1 1 120px`). -/// -/// Susy span syntax also allows a unitless `slice` number (e.g `of 5`), -/// which will be converted to a slice of the context -/// in normalization. -/// -/// @group x-normal -/// -/// @param {list | integer} $columns - -/// List of available columns, -/// or unitless integer representing a slice of -/// the available context. -/// @param {map | null} $context [null] - -/// Map of Susy configuration settings to use as global reference, -/// or `null` to access global settings. -/// -/// @return {list} - -/// Columns list value, normalized for Su input. -/// -/// @throws -/// when attempting to access a slice of asymmetrical context -@function susy-normalize-columns( - $columns, - $context: null -) { - $context: $context or susy-settings(); - - @if type-of($columns) == 'list' { - @return _susy-flatten($columns); - } - - @if (type-of($columns) == 'number') and (unitless($columns)) { - $span: $columns; - $context: map-get($context, 'columns'); - $symmetrical: susy-repeat(length($context), nth($context, 1)); - - @if ($context == $symmetrical) { - @return susy-repeat($span, nth($context, 1)); - } @else { - $actual: 'of `#{$span}`'; - $columns: 'grid-columns `#{$context}`'; - @return _susy-error( - 'context-slice #{$actual} can not be determined based on #{$columns}.', - 'susy-normalize-columns'); - } - } - - @return $columns; -} - - - -// Normalize Spread -// ---------------- -/// Normalize `spread` shorthand for Su. -/// Su spread syntax only allows the numbers `-1`, `0`, or `1` – -/// representing the number of gutters covered -/// in relation to columns spanned. -/// -/// Susy spread syntax also allows keywords for each value – -/// `narrow` for `-1`, `wide` for `0`, or `wider` for `1` – -/// which will be converted to their respective integers -/// in normalization. -/// -/// @group x-normal -/// -/// @param {0 | 1 | -1 | 'narrow' | 'wide' | 'wider'} $spread - -/// Spread across adjacent gutters, relative to a column-count — -/// either `narrow` (-1), `wide` (0), or `wider` (1) -/// -/// @return {number} - -/// Numeric value for `$spread` -@function susy-normalize-spread( - $spread -) { - $normal-spread: ( - 'narrow': -1, - 'wide': 0, - 'wider': 1, - ); - - @return map-get($normal-spread, $spread) or $spread; -} - - - -// Normalize Location -// ------------------ -/// Normalize `location` shorthand for Su. -/// Su location syntax requires the (1-indexed) number for a column. -/// -/// Susy also allows the `first` and `last` keywords, -/// where `first` is always `1`, -/// and `last` is calculated based on span and column values. -/// Both keywords are normalized into an integer index -/// in normalization. -/// -/// @group x-normal -/// -/// @param {number} $span - -/// Number of grid-columns to be spanned -/// @param {integer | 'first' | 'last'} $location - -/// Starting (1-indexed) column position of a span, -/// or a named location keyword. -/// @param {list} $columns - -/// Already-normalized list of columns in the grid. -/// -/// @return {integer} - -/// Numeric value for `$location` -@function susy-normalize-location( - $span, - $location, - $columns -) { - $count: length($columns); - $normal-locations: ( - 'first': 1, - 'alpha': 1, - 'last': $count - $span + 1, - 'omega': $count - $span + 1, - ); - - @return map-get($normal-locations, $location) or $location; -} diff --git a/_sass/minimal-mistakes/vendor/susy/susy/_parse.scss b/_sass/minimal-mistakes/vendor/susy/susy/_parse.scss deleted file mode 100644 index 98aa40a9fac53..0000000000000 --- a/_sass/minimal-mistakes/vendor/susy/susy/_parse.scss +++ /dev/null @@ -1,163 +0,0 @@ -/// Shorthand Syntax Parser -/// ======================= -/// The syntax parser converts [shorthand syntax][short] -/// into a map of settings that can be compared/merged with -/// other config maps and global setting. -/// -/// [short]: b-api.html -/// -/// @group x-parser - - - -// Parse -// ----- -/// The `parse` function provides all the syntax-sugar in Susy, -/// converting user shorthand -/// into a usable map of keys and values -/// that can be normalized and passed to Su. -/// -/// @group x-parser -/// @see $susy -/// -/// @param {list} $shorthand - -/// Shorthand expression to define the width of the span, -/// optionally containing: -/// - a count, length, or column-list span; -/// - `at $n`, `first`, or `last` location on asymmetrical grids; -/// - `narrow`, `wide`, or `wider` for optionally spreading -/// across adjacent gutters; -/// - `of $n ` for available grid columns -/// and spread of the container -/// (span counts like `of 6` are only valid -/// in the context of symmetrical grids); -/// - and `set-gutters $n` to override global gutter settings -/// @param {bool} $context-only [false] - -/// Allow the parser to ignore span and span-spread values, -/// only parsing context and container-spread. -/// This makes it possible to accept spanless values, -/// like the `gutters()` syntax. -/// When parsing context-only, -/// the `of` indicator is optional. -/// -/// @return {map} - -/// Map of span and grid settings -/// parsed from shorthand input – -/// including all the properties available globally – -/// `columns`, `gutters`, `spread`, `container-spread` – -/// along with the span-specific properties -/// `span`, and `location`. -/// -/// @throw -/// when a shorthand value is not recognized -@function susy-parse( - $shorthand, - $context-only: false -) { - $parse-error: 'Unknown shorthand property:'; - $options: ( - 'first': 'location', - 'last': 'location', - 'alpha': 'location', - 'omega': 'location', - 'narrow': 'spread', - 'wide': 'spread', - 'wider': 'spread', - ); - - $return: (); - $span: null; - $columns: null; - - $of: null; - $next: false; - - // Allow context-only shorthand, without span - @if ($context-only) and (not index($shorthand, 'of')) { - @if su-valid-columns($shorthand, 'fail-silent') { - $shorthand: 'of' $shorthand; - } @else { - $shorthand: join('of', $shorthand); - } - } - - // loop through the shorthand list - @for $i from 1 through length($shorthand) { - $item: nth($shorthand, $i); - $type: type-of($item); - $error: false; - $details: '[#{$type}] `#{$item}`'; - - // if we know what's supposed to be coming next… - @if $next { - - // Add to the return map - $return: map-merge($return, ($next: $item)); - - // Reset next to `false` - $next: false; - - } @else { // If we don't know what's supposed to be coming… - - // Keywords… - @if ($type == 'string') { - // Check the map for keywords… - @if map-has-key($options, $item) { - $setting: map-get($options, $item); - - // Spread could be on the span or the container… - @if ($setting == 'spread') and ($of) { - $return: map-merge($return, ('container-spread': $item)); - } @else { - $return: map-merge($return, ($setting: $item)); - } - - } @else if ($item == 'all') { - // `All` is a span shortcut - $span: 'all'; - } @else if ($item == 'at') { - // Some keywords setup what's next… - $next: 'location'; - } @else if ($item == 'set-gutters') { - $next: 'gutters'; - } @else if ($item == 'of') { - $of: true; - } @else { - $error: true; - } - - } @else if ($type == 'number') or ($type == 'list') { // Numbers & lists… - - @if not ($span or $of) { - // We don't have a span, and we're not expecting context… - $span: $item; - } @else if ($of) and (not $columns) { - // We are expecting context… - $columns: $item; - } @else { - $error: true; - } - - } @else { - $error: true; - } - } - - @if $error { - @return _susy-error('#{$parse-error} #{$details}', 'susy-parse'); - } - } - - // If we have span, merge it in - @if $span { - $return: map-merge($return, ('span': $span)); - } - - // If we have columns, merge them in - @if $columns { - $return: map-merge($return, ('columns': $columns)); - } - - // Return the map of settings… - @return $return; -} diff --git a/_sass/minimal-mistakes/vendor/susy/susy/_settings.scss b/_sass/minimal-mistakes/vendor/susy/susy/_settings.scss deleted file mode 100644 index b824477cf164e..0000000000000 --- a/_sass/minimal-mistakes/vendor/susy/susy/_settings.scss +++ /dev/null @@ -1,329 +0,0 @@ -/// Susy3 Configuration -/// =================== -/// Susy3 has 4 core settings, in a single settings map. -/// You'll notice a few differences from Susy2: -/// -/// **Columns** no longer accept a single number, like `12`, -/// but use a syntax more similar to the new -/// CSS [grid-template-columns][columns] – -/// a list of relative sizes for each column on the grid. -/// Unitless numbers in Susy act very similar to `fr` units in CSS, -/// and the `susy-repeat()` function (similar to the css `repeat()`) -/// helps quickly establish equal-width columns. -/// -/// [columns]: https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-columns -/// -/// - `susy-repeat(12)` will create 12 fluid, equal-width columns -/// - `susy-repeat(6, 120px)` will create 6 equal `120px`-wide columns -/// - `120px susy-repeat(4) 120px` will create 6 columns, -/// the first and last are `120px`, -/// while the middle 4 are equal fractions of the remainder. -/// Susy will output `calc()` values in order to achieve this. -/// -/// **Gutters** haven't changed – -/// a single fraction or explicit width – -/// but the `calc()` output feature -/// means you can now use any combination of units and fractions -/// to create static-gutters on a fluid grid, etc. -/// -/// **Spread** existed in the Susy2 API as a span option, -/// and was otherwise handled behind the scenes. -/// Now we're giving you full control over all spread issues. -/// You can find a more [detailed explanation of spread on the blog][spread]. -/// -/// [spread]: http://oddbird.net/2017/06/13/susy-spread/ -/// -/// You can access your global settings at any time -/// with the `susy-settings()` function, -/// or grab a single setting from the global scope -/// with `susy-get('columns')`, `susy-get('gutters')` etc. -/// -/// @group a-config -/// @link http://oddbird.net/2017/06/13/susy-spread/ -/// Article: Understanding Spread in Susy3 -/// -/// @see $susy -/// @see susy-settings -/// @see susy-get - - - -// Susy -// ---- -/// The grid is defined in a single map variable, -/// with four initial properties: -/// `columns`, `gutters`, `spread` and `container-spread`. -/// Anything you put in the root `$susy` variable map -/// will be treated as a global project default. -/// You can create similar configuration maps -/// under different variable names, -/// to override the defaults as-needed. -/// -/// @group a-config -/// @type Map -/// -/// @see $_susy-defaults -/// @see {function} susy-repeat -/// @link -/// https://codepen.io/mirisuzanne/pen/EgmJJp?editors=1100 -/// Spread examples on CodePen -/// -/// @prop {list} columns - -/// Columns are described by a list of numbers, -/// representing the relative width of each column. -/// The syntax is a simplified version of CSS native -/// `grid-template-columns`, -/// expecting a list of grid-column widths. -/// Unitless numbers create fractional fluid columns -/// (similar to the CSS-native `fr` unit), -/// while length values (united numbers) -/// are used to define static columns. -/// You can mix-and match units and fractions, -/// to create a mixed grid. -/// Susy will generate `calc()` values when necessary, -/// to make all your units work together. -/// -/// Use the `susy-repeat($count, $value)` function -/// to more easily repetative columns, -/// similar to the CSS-native `repeat()`. -/// -/// - `susy-repeat(8)`: -/// an 8-column, symmetrical, fluid grid. -///
Identical to `(1 1 1 1 1 1 1 1)`. -/// - `susy-repeat(6, 8em)`: -/// a 6-column, symmetrical, em-based grid. -///
Identical to `(8em 8em 8em 8em 8em 8em)`. -/// - `(300px susy-repeat(4) 300px)`: -/// a 6-column, asymmetrical, mixed fluid/static grid -/// using `calc()` output. -///
Identical to `(300px 1 1 1 1 300px)`. -/// -/// **NOTE** that `12` is no longer a valid 12-column grid definition, -/// and you must list all the columns individually -/// (or by using the `susy-repeat()` function). -/// -/// @prop {number} gutters - -/// Gutters are defined as a single width, -/// or fluid ratio, similar to the native-CSS -/// `grid-column-gap` syntax. -/// Similar to columns, -/// gutters can use any valid CSS length unit, -/// or unitless numbers to define a relative fraction. -/// -/// - `0.5`: -/// a fluid gutter, half the size of a single-fraction column. -/// - `1em`: -/// a static gutter, `1em` wide. -/// -/// Mix static gutters with fluid columns, or vice versa, -/// and Susy will generate the required `calc()` to make it work. -/// -/// @prop {string} spread [narrow] - -/// Spread of an element across adjacent gutters: -/// either `narrow` (none), `wide` (one), or `wider` (two) -/// -/// - Both spread settings default to `narrow`, -/// the most common use-case. -/// A `narrow` spread only has gutters *between* columns -/// (one less gutter than columns). -/// This is how all css-native grids work, -/// and most margin-based grid systems. -/// - A `wide` spread includes the same number of gutters as columns, -/// spanning across a single side-gutter. -/// This is how most padding-based grid systems often work, -/// and is also useful for pushing and pulling elements into place. -/// - The rare `wider` spread includes gutters -/// on both sides of the column-span -/// (one more gutters than columns). -/// -/// @prop {string} container-spread [narrow] - -/// Spread of a container around adjacent gutters: -/// either `narrow` (none), `wide` (one), or `wider` (two). -/// See `spread` property for details. -/// -/// @since 3.0.0-beta.1 - -/// `columns` setting no longer accepts numbers -/// (e.g. `12`) for symmetrical fluid grids, -/// or the initial `12 x 120px` syntax for -/// symmetrical fixed-unit grids. -/// Use `susy-repeat(12)` or `susy-repeat(12, 120px)` instead. -/// -/// @example scss - default values -/// // 4 symmetrical, fluid columns -/// // gutters are 1/4 the size of a column -/// // elements span 1 less gutter than columns -/// // containers span 1 less gutter as well -/// $susy: ( -/// 'columns': susy-repeat(4), -/// 'gutters': 0.25, -/// 'spread': 'narrow', -/// 'container-spread': 'narrow', -/// ); -/// -/// @example scss - inside-static gutters -/// // 6 symmetrical, fluid columns… -/// // gutters are static, triggering calc()… -/// // elements span equal columns & gutters… -/// // containers span equal columns & gutters… -/// $susy: ( -/// 'columns': susy-repeat(6), -/// 'gutters': 0.5em, -/// 'spread': 'wide', -/// 'container-spread': 'wide', -/// ); -$susy: () !default; - - - -// Susy Repeat -// ----------- -/// Similar to the `repeat(, )` function -/// that is available in native CSS Grid templates, -/// the `susy-repeat()` function helps generate repetative layouts -/// by repeating any value a given number of times. -/// Where Susy previously allowed `8` as a column definition -/// for 8 equal columns, you should now use `susy-repeat(8)`. -/// -/// @group a-config -/// -/// @param {integer} $count - -/// The number of repetitions, e.g. `12` for a 12-column grid. -/// @param {*} $value [1] - -/// The value to be repeated. -/// Technically any value can be repeated here, -/// but the function exists to repeat column-width descriptions: -/// e.g. the default `1` for single-fraction fluid columns, -/// `5em` for a static column, -/// or even `5em 120px` if you are alternating column widths. -/// -/// @return {list} - -/// List of repeated values -/// -/// @example scss -/// // 12 column grid, with 5em columns -/// $susy: ( -/// columns: susy-repeat(12, 5em), -/// ); -/// -/// @example scss -/// // asymmetrical 5-column grid -/// $susy: ( -/// columns: 20px susy-repeat(3, 100px) 20px, -/// ); -/// -/// /* result: #{susy-get('columns')} */ -@function susy-repeat( - $count, - $value: 1 -) { - $return: (); - - @for $i from 1 through $count { - $return: join($return, $value); - } - - @return $return; -} - - - -// Susy Defaults -// ------------- -/// Configuration map of Susy factory defaults. -/// Do not override this map directly – -/// use `$susy` for user and project setting overrides. -/// -/// @access private -/// @type Map -/// -/// @see $susy -/// -/// @prop {number | list} columns [susy-repeat(4)] -/// @prop {number} gutters [0.25] -/// @prop {string} spread ['narrow'] -/// @prop {string} container-spread ['narrow'] -$_susy-defaults: ( - 'columns': susy-repeat(4), - 'gutters': 0.25, - 'spread': 'narrow', - 'container-spread': 'narrow', -); - - - -// Susy Settings -// ------------- -/// Return a combined map of Susy settings, -/// based on the factory defaults (`$_susy-defaults`), -/// user-defined project configuration (`$susy`), -/// and any local overrides required – -/// such as a configuration map passed into a function. -/// -/// @group a-config -/// -/// @param {maps} $overrides… - -/// Optional map override of global configuration settings. -/// See `$susy` above for properties. -/// -/// @return {map} - -/// Combined map of Susy configuration settings, -/// in order of specificity: -/// any `$overrides...`, -/// then `$susy` project settings, -/// and finally the `$_susy-defaults` -/// -/// @example scss - global settings -/// @each $key, $value in susy-settings() { -/// /* #{$key}: #{$value} */ -/// } -/// -/// @example scss - local settings -/// $local: ('columns': 1 2 3 5 8); -/// -/// @each $key, $value in susy-settings($local) { -/// /* #{$key}: #{$value} */ -/// } -@function susy-settings( - $overrides... -) { - $settings: map-merge($_susy-defaults, $susy); - - @each $config in $overrides { - $settings: map-merge($settings, $config); - } - - @return $settings; -} - - - -// Susy Get -// -------- -/// Return the current global value of any Susy setting -/// -/// @group a-config -/// -/// @param {string} $key - -/// Setting to retrieve from the configuration. -/// -/// @return {*} - -/// Value mapped to `$key` in the configuration maps, -/// in order of specificity: -/// `$susy`, then `$_susy-defaults` -/// -/// @example scss - -/// /* columns: #{susy-get('columns')} */ -/// /* gutters: #{susy-get('gutters')} */ -@function susy-get( - $key -) { - $settings: susy-settings(); - - @if not map-has-key($settings, $key) { - @return _susy-error( - 'There is no Susy setting called `#{$key}`', - 'susy-get'); - } - - @return map-get($settings, $key); -} diff --git a/_sass/minimal-mistakes/vendor/susy/susy/_su-math.scss b/_sass/minimal-mistakes/vendor/susy/susy/_su-math.scss deleted file mode 100644 index 1e88528405f04..0000000000000 --- a/_sass/minimal-mistakes/vendor/susy/susy/_su-math.scss +++ /dev/null @@ -1,441 +0,0 @@ -/// Grid Math Engine -/// ================ -/// The `su` functions give you direct access to the math layer, -/// without any syntax-sugar like shorthand parsing, and normalization. -/// If you prefer named arguments, and stripped-down syntax, -/// you can use these functions directly in your code – -/// replacing `span`, `gutter`, and `slice`. -/// -/// These functions are also useful -/// for building mixins or other extensions to Susy. -/// Apply the Susy syntax to new mixins and functions, -/// using our "Plugin Helpers", -/// or write your own syntax and pass the normalized results along -/// to `su` for compilation. -/// -/// @group su-math -/// -/// @see su-span -/// @see su-gutter -/// @see su-slice -/// @ignore _su-sum -/// @ignore _su-calc-span -/// @ignore _su-calc-sum -/// @ignore _su-needs-calc-output - - - -// Su Span -// ------- -/// Calculates and returns a CSS-ready span width, -/// based on normalized span and context data – -/// a low-level version of `susy-span`, -/// with all of the logic and none of the syntax sugar. -/// -/// - Grids defined with unitless numbers will return `%` values. -/// - Grids defined with comparable units -/// will return a value in the units provided. -/// - Grids defined with a mix of units, -/// or a combination of untiless numbers and unit-lengths, -/// will return a `calc()` string. -/// -/// @group su-math -/// @see susy-span -/// -/// @param {number | list} $span - -/// Number or list of grid columns to span -/// @param {list} $columns - -/// List of columns available -/// @param {number} $gutters - -/// Width of a gutter in column-comparable units -/// @param {0 | 1 | -1} $spread - -/// Number of gutters spanned, -/// relative to `span` count -/// @param {0 | 1 | -1} $container-spread [$spread] - -/// Number of gutters spanned, -/// relative to `columns` count -/// @param {integer} $location [1] - -/// Optional position of sub-span among full set of columns -/// -/// @return {length} - -/// Relative or static length of a span on the grid -@function su-span( - $span, - $columns, - $gutters, - $spread, - $container-spread: $spread, - $location: 1 -) { - $span: su-valid-span($span); - $columns: su-valid-columns($columns); - $gutters: su-valid-gutters($gutters); - $spread: su-valid-spread($spread); - - @if (type-of($span) == 'number') { - @if (not unitless($span)) { - @return $span; - } - - $location: su-valid-location($span, $location, $columns); - $span: su-slice($span, $columns, $location, $validate: false); - } - - @if _su-needs-calc-output($span, $columns, $gutters, $spread, not 'validate') { - @return _su-calc-span($span, $columns, $gutters, $spread, $container-spread, not 'validate'); - } - - $span-width: _su-sum($span, $gutters, $spread, $validate: false); - - @if unitless($span-width) { - $container-spread: su-valid-spread($container-spread); - $container: _su-sum($columns, $gutters, $container-spread, $validate: false); - @return percentage($span-width / $container); - } - - @return $span-width; -} - - - -// Su Gutter -// --------- -/// Calculates and returns a CSS-ready gutter width, -/// based on normalized grid data – -/// a low-level version of `susy-gutter`, -/// with all of the logic and none of the syntax sugar. -/// -/// - Grids defined with unitless numbers will return `%` values. -/// - Grids defined with comparable units -/// will return a value in the units provided. -/// - Grids defined with a mix of units, -/// or a combination of untiless numbers and unit-lengths, -/// will return a `calc()` string. -/// -/// @group su-math -/// @see susy-gutter -/// -/// @param {list} $columns - -/// List of columns in the grid -/// @param {number} $gutters - -/// Width of a gutter in column-comparable units -/// @param {0 | 1 | -1} $container-spread - -/// Number of gutters spanned, -/// relative to `columns` count -/// -/// @return {length} - -/// Relative or static length of one gutter in a grid -@function su-gutter( - $columns, - $gutters, - $container-spread -) { - @if (type-of($gutters) == 'number') { - @if ($gutters == 0) or (not unitless($gutters)) { - @return $gutters; - } - } - - @if _su-needs-calc-output($gutters, $columns, $gutters, -1, not 'validate') { - @return _su-calc-span($gutters, $columns, $gutters, -1, $container-spread, not 'validate'); - } - - $container: _su-sum($columns, $gutters, $container-spread); - @return percentage($gutters / $container); -} - - - -// Su Slice -// -------- -/// Returns a list of columns -/// based on a given span/location slice of the grid – -/// a low-level version of `susy-slice`, -/// with all of the logic and none of the syntax sugar. -/// -/// @group su-math -/// @see susy-slice -/// -/// @param {number} $span - -/// Number of grid columns to span -/// @param {list} $columns - -/// List of columns in the grid -/// @param {number} $location [1] - -/// Starting index of a span in the list of columns -/// @param {bool} $validate [true] - -/// Check that arguments are valid before proceeding -/// -/// @return {list} - -/// Subset list of grid columns, based on span and location -@function su-slice( - $span, - $columns, - $location: 1, - $validate: true -) { - @if $validate { - $columns: su-valid-columns($columns); - $location: su-valid-location($span, $location, $columns); - } - - $floor: floor($span); - $sub-columns: (); - - @for $i from $location to ($location + $floor) { - $sub-columns: append($sub-columns, nth($columns, $i)); - } - - @if $floor != $span { - $remainder: $span - $floor; - $column: $location + $floor; - $sub-columns: append($sub-columns, nth($columns, $column) * $remainder); - } - - @return $sub-columns; -} - - - -// Su Sum -// ------ -/// Get the total sum of column-units in a layout. -/// -/// @group su-math -/// @access private -/// -/// @param {list} $columns - -/// List of columns in the grid -/// @param {number} $gutters - -/// Width of a gutter in column-comparable units -/// @param {0 | 1 | -1} $spread - -/// Number of gutters spanned, -/// relative to `columns` count -/// @param {bool} $validate [true] - -/// Check that arguments are valid before proceeding -/// -/// @return {number} - -/// Total sum of column-units in a grid -@function _su-sum( - $columns, - $gutters, - $spread, - $validate: true -) { - @if $validate { - $columns: su-valid-span($columns); - $gutters: su-valid-gutters($gutters); - $spread: su-valid-spread($spread); - } - - // Calculate column-sum - $column-sum: 0; - @each $column in $columns { - $column-sum: $column-sum + $column; - } - - $gutter-sum: (ceil(length($columns)) + $spread) * $gutters; - $total: if(($gutter-sum > 0), $column-sum + $gutter-sum, $column-sum); - - @return $total; -} - - - -// Su Calc -// ------- -/// Return a usable span width as a `calc()` function, -/// in order to create mixed-unit grids. -/// -/// @group su-math -/// @access private -/// -/// @param {number | list} $span - -/// Pre-sliced list of grid columns to span -/// @param {list} $columns - -/// List of columns available -/// @param {number} $gutters - -/// Width of a gutter in column-comparable units -/// @param {0 | 1 | -1} $spread - -/// Number of gutters spanned, -/// relative to `span` count -/// @param {0 | 1 | -1} $container-spread [$spread] - -/// Number of gutters spanned, -/// relative to `columns` count -/// @param {bool} $validate [true] - -/// Check that arguments are valid before proceeding -/// -/// @return {length} - -/// Relative or static length of a span on the grid -@function _su-calc-span( - $span, - $columns, - $gutters, - $spread, - $container-spread: $spread, - $validate: true -) { - @if $validate { - $span: su-valid-span($span); - $columns: su-valid-columns($columns); - $gutters: su-valid-gutters($gutters); - $spread: su-valid-spread($spread); - $container-spread: su-valid-spread($container-spread); - } - - // Span and context - $span: _su-calc-sum($span, $gutters, $spread, not 'validate'); - $context: _su-calc-sum($columns, $gutters, $container-spread, not 'validate'); - - // Fixed and fluid - $fixed-span: map-get($span, 'fixed'); - $fluid-span: map-get($span, 'fluid'); - $fixed-context: map-get($context, 'fixed'); - $fluid-context: map-get($context, 'fluid'); - - $calc: '#{$fixed-span}'; - $fluid-calc: '(100% - #{$fixed-context})'; - - // Fluid-values - @if (not $fluid-span) { - $fluid-calc: null; - } @else if ($fluid-span != $fluid-context) { - $fluid-span: '* #{$fluid-span}'; - $fluid-context: if($fluid-context, '/ #{$fluid-context}', ''); - $fluid-calc: '(#{$fluid-calc $fluid-context $fluid-span})'; - } - - @if $fluid-calc { - $calc: if(($calc != ''), '#{$calc} + ', ''); - $calc: '#{$calc + $fluid-calc}'; - } - - @return calc(#{unquote($calc)}); -} - - - -// Su Calc-Sum -// ----------- -/// Get the total sum of fixed and fluid column-units -/// for creating a mixed-unit layout with `calc()` values. -/// -/// @group su-math -/// @access private -/// -/// @param {list} $columns - -/// List of columns available -/// @param {number} $gutters - -/// Width of a gutter in column-comparable units -/// @param {0 | 1 | -1} $spread - -/// Number of gutters spanned, -/// relative to `span` count -/// @param {bool} $validate [true] - -/// Check that arguments are valid before proceeding -/// -/// @return {map} - -/// Map with `fixed` and `fluid` keys -/// containing the proper math as strings -@function _su-calc-sum( - $columns, - $gutters, - $spread, - $validate: true -) { - @if $validate { - $columns: su-valid-span($columns); - $gutters: su-valid-gutters($gutters); - $spread: su-valid-spread($spread); - } - - $fluid: 0; - $fixed: (); - $calc: null; - - // Gutters - $gutters: $gutters * (length($columns) + $spread); - - // Columns - @each $col in append($columns, $gutters) { - @if unitless($col) { - $fluid: $fluid + $col; - } @else { - $fixed: _su-map-add-units($fixed, $col); - } - } - - // Compile Fixed Units - @each $unit, $total in $fixed { - @if ($total != (0 * $total)) { - $calc: if($calc, '#{$calc} + #{$total}', '#{$total}'); - } - } - - // Calc null or string - @if $calc { - $calc: if(str-index($calc, '+'), '(#{$calc})', '#{$calc}'); - } - - // Fluid 0 => null - $fluid: if(($fluid == 0), null, $fluid); - - - // Return map - $return: ( - 'fixed': $calc, - 'fluid': $fluid, - ); - - @return $return; -} - - - -// Needs Calc -// ---------- -/// Check if `calc()` will be needed in defining a span, -/// if the necessary units in a grid are not comparable. -/// -/// @group su-math -/// @access private -/// -/// @param {list} $span - -/// Slice of columns to span -/// @param {list} $columns - -/// List of available columns in the grid -/// @param {number} $gutters - -/// Width of a gutter -/// @param {0 | 1 | -1} $spread - -/// Number of gutters spanned, -/// relative to `span` count -/// @param {bool} $validate [true] - -/// Check that arguments are valid before proceeding -/// -/// @return {bool} - -/// `True` when units do not match, and `calc()` will be required -@function _su-needs-calc-output( - $span, - $columns, - $gutters, - $spread, - $validate: true -) { - @if $validate { - $span: su-valid-span($span); - $columns: su-valid-columns($columns); - $gutters: su-valid-gutters($gutters); - } - - $has-gutter: if((length($span) > 1) or ($spread >= 0), true, false); - $check: if($has-gutter, append($span, $gutters), $span); - $safe-span: _su-is-comparable($check...); - - @if ($safe-span == 'static') { - @return false; - } @else if (not $safe-span) { - @return true; - } - - $safe-fluid: _su-is-comparable($gutters, $columns...); - - @return not $safe-fluid; -} diff --git a/_sass/minimal-mistakes/vendor/susy/susy/_su-validate.scss b/_sass/minimal-mistakes/vendor/susy/susy/_su-validate.scss deleted file mode 100644 index 5befad30fc3dd..0000000000000 --- a/_sass/minimal-mistakes/vendor/susy/susy/_su-validate.scss +++ /dev/null @@ -1,213 +0,0 @@ -/// Validation -/// ========== -/// Each argument to Su has a single canonical syntax. -/// These validation functions check to ensure -/// that each argument is valid, -/// in order to provide useful errors -/// before attempting to calculate the results/ -/// -/// @group x-validation -/// -/// @see su-valid-columns -/// @see su-valid-gutters -/// @see su-valid-spread -/// @see su-valid-location - - - -// Valid Span -// ---------- -/// Check that the `span` argument -/// is a number, length, or column-list -/// -/// @group x-validation -/// -/// @param {number | list} $span - -/// Number of columns, or length of span -/// -/// @return {number | list} - -/// Validated `$span` number, length, or columns list -/// -/// @throw -/// when span value is not a number, or valid column list -@function su-valid-span( - $span -) { - $type: type-of($span); - @if ($type == 'number') { - @return $span; - } @else if ($type == 'list') and su-valid-columns($span, 'silent-failure') { - @return $span; - } - - $actual: '[#{type-of($span)}] `#{inspect($span)}`'; - @return _susy-error( - '#{$actual} is not a valid number, length, or column-list for $span.', - 'su-valid-span'); -} - - - -// Valid Columns -// ------------- -/// Check that the `columns` argument is a valid -/// list of column-lengths -/// -/// @group x-validation -/// -/// @param {list} $columns - -/// List of column-lengths -/// @param {bool} $silent-failure [true] - -/// Set false to return null on failure -/// -/// @return {list} - -/// Validated `$columns` list -/// -/// @throw -/// when column value is not a valid list of numbers -@function su-valid-columns( - $columns, - $silent-failure: false -) { - @if (type-of($columns) == 'list') { - $fail: false; - - @each $col in $columns { - @if (type-of($col) != 'number') { - $fail: true; - } - } - - @if not $fail { - @return $columns; - } - } - - // Silent Failure - @if $silent-failure { - @return null; - } - - // Error Message - $actual: '[#{type-of($columns)}] `#{inspect($columns)}`'; - - @return _susy-error( - '#{$actual} is not a valid list of numbers for $columns.', - 'su-valid-columns'); -} - - - -// Valid Gutters -// ------------- -/// Check that the `gutters` argument is a valid number -/// -/// @group x-validation -/// -/// @param {number} $gutters - -/// Width of a gutter -/// -/// @return {number} - -/// Validated `$gutters` number -/// -/// @throw -/// when gutter value is not a number -@function su-valid-gutters( - $gutters -) { - $type: type-of($gutters); - - @if ($type == 'number') { - @return $gutters; - } - - $actual: '[#{$type}] `#{inspect($gutters)}`'; - @return _susy-error( - '#{$actual} is not a number or length for $gutters.', - 'su-valid-gutters'); -} - - - -// Valid Spread -// ------------ -/// Check that the `spread` argument is a valid -/// intiger between `-1` and `1` -/// -/// @group x-validation -/// -/// @param {0 | 1 | -1} $spread - -/// Number of gutters to include in a span, -/// relative to the number columns -/// -/// @return {0 | 1 | -1} - -/// Validated `$spread` number -/// -/// @throw -/// when spread value is not a valid spread -@function su-valid-spread( - $spread -) { - @if index(0 1 -1, $spread) { - @return $spread; - } - - $actual: '[#{type-of($spread)}] `#{inspect($spread)}`'; - @return _susy-error( - '#{$actual} is not a normalized [0 | 1 | -1] value for `$spread`.', - 'su-valid-spread'); -} - - - -// Valid Location -// -------------- -/// Check that the `location` argument is a valid number, -/// within the scope of available columns -/// -/// @group x-validation -/// -/// @param {number} $span - -/// Number of grid-columns to be spanned -/// @param {integer | string} $location - -/// Starting (1-indexed) column-position of that span -/// @param {list} $columns - -/// List of available columns in the grid -/// -/// @return {integer} - -/// Validated `$location` intiger -/// -/// @throw -/// when location value is not a valid index, -/// given the context and span. -@function su-valid-location( - $span, - $location, - $columns -) { - $count: length($columns); - - @if $location { - @if (type-of($location) != 'number') or (not unitless($location)) { - $actual: '[#{type-of($location)}] `#{$location}`'; - @return _susy-error( - '#{$actual} is not a unitless number for $location.', - 'su-valid-location'); - } @else if (round($location) != $location) { - @return _susy-error( - 'Location (`#{$location}`) must be a 1-indexed intiger position.', - 'su-valid-location'); - } @else if ($location > $count) or ($location < 1) { - @return _susy-error( - 'Position `#{$location}` does not exist in grid `#{$columns}`.', - 'su-valid-location'); - } @else if ($location + $span - 1 > $count) { - $details: 'grid `#{$columns}` for span `#{$span}` at `#{$location}`'; - @return _susy-error( - 'There are not enough columns in #{$details}.', - 'su-valid-location'); - } - } - - @return $location; -} diff --git a/_sass/minimal-mistakes/vendor/susy/susy/_syntax-helpers.scss b/_sass/minimal-mistakes/vendor/susy/susy/_syntax-helpers.scss deleted file mode 100644 index f6043eac7d338..0000000000000 --- a/_sass/minimal-mistakes/vendor/susy/susy/_syntax-helpers.scss +++ /dev/null @@ -1,191 +0,0 @@ -/// Syntax Utilities for Extending Susy -/// =================================== -/// There are many steps involved -/// when translating between the Susy syntax layer, -/// and the Su core math. -/// That entire process can be condensed with these two functions. -/// For anyone that wants to access the full power of Susy, -/// and build their own plugins, functions, or mixins – -/// this is the primary API for compiling user input, -/// and accessing the core math. -/// -/// This is the same technique we use internally, -/// to keep our API layer simple and light-weight. -/// Every function accepts two arguments, -/// a "shorthand" description of the span or context, -/// and an optional settings-map to override global defaults. -/// -/// - Use `susy-compile()` to parse, merge, and normalize -/// all the user settings into a single map. -/// - Then use `su-call()` to call one of the core math functions, -/// with whatever data is needed for that function. -/// -/// @group plugin-utils -/// @see susy-compile -/// @see su-call -/// -/// @example scss - Susy API `gutter` function -/// @function susy-gutter( -/// $context: susy-get('columns'), -/// $config: () -/// ) { -/// // compile and normalize all user arguments and global settings -/// $context: susy-compile($context, $config, 'context-only'); -/// // call `su-gutter` with the appropriate data -/// @return su-call('su-gutter', $context); -/// } -/// -/// @example scss - Sample `span` mixin for floated grids -/// @mixin span( -/// $span, -/// $config: () -/// ) { -/// $context: susy-compile($span, $config); -/// width: su-call('su-span', $context); -/// -/// @if index($span, 'last') { -/// float: right; -/// } @else { -/// float: left; -/// margin-right: su-call('su-gutter', $context); -/// } -/// } - - - -// Compile -// ------- -/// Susy's syntax layer has various moving parts, -/// with syntax-parsing for the grid/span shorthand, -/// and normalization for each of the resulting values. -/// The compile function rolls this all together -/// in a single call – -/// for quick access from our internal API functions, -/// or any additional functions and mixins you add to your project. -/// Pass user input and configuration maps to the compiler, -/// and it will hand back a map of values ready for Su. -/// Combine this with the `su-call` function -/// to quickly parse, normalize, and process grid calculations. -/// -/// @group plugin-utils -/// @see su-call -/// -/// @param {list | map} $shorthand - -/// Shorthand expression to define the width of the span, -/// optionally containing: -/// - a count, length, or column-list span; -/// - `at $n`, `first`, or `last` location on asymmetrical grids; -/// - `narrow`, `wide`, or `wider` for optionally spreading -/// across adjacent gutters; -/// - `of $n ` for available grid columns -/// and spread of the container -/// (span counts like `of 6` are only valid -/// in the context of symmetrical grids); -/// - and `set-gutters $n` to override global gutter settings -/// @param {map} $config [null] - -/// Optional map of Susy grid configuration settings -/// @param {bool} $context-only [false] - -/// Allow the parser to ignore span and span-spread values, -/// only parsing context and container-spread -/// -/// @return {map} - -/// Parsed and normalized map of settings, -/// based on global and local configuration, -/// alongwith shorthad adjustments. -/// -/// @example scss - -/// $user-input: 3 wide of susy-repeat(6, 120px) set-gutters 10px; -/// $grid-data: susy-compile($user-input, $susy); -/// -/// @each $key, $value in $grid-data { -/// /* #{$key}: #{$value}, */ -/// } -@function susy-compile( - $short, - $config: null, - $context-only: false -) { - // Get and normalize config - $config: if($config, susy-settings($config), susy-settings()); - $normal-config: susy-normalize($config); - - // Parse and normalize shorthand - @if (type-of($short) != 'map') and (length($short) > 0) { - $short: susy-parse($short, $context-only); - } - - $normal-short: susy-normalize($short, $normal-config); - - // Merge and return - @return map-merge($normal-config, $normal-short); -} - - - -// Call -// ---- -/// The Susy parsing and normalization process -/// results in a map of configuration settings, -/// much like the global `$susy` settings map. -/// In order to pass that information along to Su math functions, -/// the proper values have to be picked out, -/// and converted to arguments. -/// -/// The `su-call` function streamlines that process, -/// weeding out the unnecessary data, -/// and passing the rest along to Su in the proper format. -/// Combine this with `susy-compile` to quickly parse, -/// normalize, and process grid calculations. -/// -/// @group plugin-utils -/// -/// @require su-span -/// @require su-gutter -/// @require su-slice -/// @see susy-compile -/// -/// @param {'su-span' | 'su-gutter' | 'su-slice'} $name - -/// Name of the Su math function to call. -/// @param {map} $config - -/// Parsed and normalized map of Susy configuration settings -/// to use for math-function arguments. -/// -/// @return {*} - -/// Results of the function being called. -/// -/// @example scss - -/// $user-input: 3 wide of susy-repeat(6, 120px) set-gutters 10px; -/// $grid-data: susy-compile($user-input, $susy); -/// -/// .su-span { -/// width: su-call('su-span', $grid-data); -/// } -@function su-call( - $name, - $config -) { - $grid-function-args: ( - 'su-span': ('span', 'columns', 'gutters', 'spread', 'container-spread', 'location'), - 'su-gutter': ('columns', 'gutters', 'container-spread'), - 'su-slice': ('span', 'columns', 'location'), - ); - - $args: map-get($grid-function-args, $name); - - @if not $args { - $options: 'Try one of these: #{map-keys($grid-function-args)}'; - @return _susy-error( - '#{$name} is not a public Su function. #{$options}', - 'su-call'); - } - - $call: if(function-exists('get-function'), get-function($name), $name); - $output: (); - - @each $arg in $args { - $value: map-get($config, $arg); - $output: if($value, map-merge($output, ($arg: $value)), $output); - } - - @return call($call, $output...); -} diff --git a/_sass/minimal-mistakes/vendor/susy/susy/_unprefix.scss b/_sass/minimal-mistakes/vendor/susy/susy/_unprefix.scss deleted file mode 100644 index 2cfd1b81a9095..0000000000000 --- a/_sass/minimal-mistakes/vendor/susy/susy/_unprefix.scss +++ /dev/null @@ -1,56 +0,0 @@ -// Unprefix Susy -// ============= - - -// Span -// ---- -/// Un-prefixed alias for `susy-span` -/// (available by default) -/// -/// @group api -/// @alias susy-span -/// -/// @param {list} $span -/// @param {map} $config [()] -@function span( - $span, - $config: () -) { - @return susy-span($span, $config); -} - - -// Gutter -// ------ -/// Un-prefixed alias for `susy-gutter` -/// (available by default) -/// -/// @group api -/// @alias susy-gutter -/// -/// @param {integer | list} $context [null] - -/// @param {map} $config [()] -@function gutter( - $context: susy-get('columns'), - $config: () -) { - @return susy-gutter($context, $config); -} - - -// Slice -// ----- -/// Un-prefixed alias for `susy-slice` -/// (available by default) -/// -/// @group api -/// @alias susy-slice -/// -/// @param {list} $span -/// @param {map} $config [()] -@function slice( - $span, - $config: () -) { - @return susy-slice($span, $config); -} diff --git a/_sass/minimal-mistakes/vendor/susy/susy/_utilities.scss b/_sass/minimal-mistakes/vendor/susy/susy/_utilities.scss deleted file mode 100644 index 3c62de2d5acfb..0000000000000 --- a/_sass/minimal-mistakes/vendor/susy/susy/_utilities.scss +++ /dev/null @@ -1,167 +0,0 @@ -// Sass Utilities -// ============== -// - Susy Error Output Override [variable] -// - Susy Error [function] - - - -// Susy Error Output Override -// -------------------------- -/// Turn off error output for testing -/// @group x-utility -/// @access private -$_susy-error-output-override: false !default; - - - -// Susy Error -// ---------- -/// Optionally return error messages without failing, -/// as a way to test error cases -/// -/// @group x-utility -/// @access private -/// -/// @param {string} $message - -/// A useful error message, explaining the problem -/// @param {string} $source - -/// The original source of the error for debugging -/// @param {bool} $override [$_susy-error-output-override] - -/// Optionally return the error rather than failing -/// @return {string} - -/// Combined error with source and message -/// @throws When `$override == true` -@function _susy-error( - $message, - $source, - $override: $_susy-error-output-override -) { - @if $override { - @return 'ERROR [#{$source}] #{$message}'; - } - - @error '[#{$source}] #{$message}'; -} - - -// Su Is Comparable -// ---------------- -/// Check that the units in a grid are comparable -/// -/// @group x-validation -/// @access private -/// -/// @param {numbers} $lengths… - -/// Arglist of all the number values to compare -/// (columns, gutters, span, etc) -/// -/// @return {'fluid' | 'static' | false} - -/// The type of span (fluid or static) when units match, -/// or `false` for mismatched units -@function _su-is-comparable( - $lengths... -) { - $first: nth($lengths, 1); - - @if (length($lengths) == 1) { - @return if(unitless($first), 'fluid', 'static'); - } - - @for $i from 2 through length($lengths) { - $comp: nth($lengths, $i); - - $fail: not comparable($first, $comp); - $fail: $fail or (unitless($first) and not unitless($comp)); - $fail: $fail or (unitless($comp) and not unitless($first)); - - @if $fail { - @return false; - } - } - - @return if(unitless($first), 'fluid', 'static'); -} - - -// Su Map Add Units -// ---------------- -/// The calc features use a map of units and values -/// to compile the proper algorythm. -/// This function adds a new value to any comparable existing unit/value, -/// or adds a new unit/value pair to the map -/// -/// @group x-utility -/// @access private -/// -/// @param {map} $map - -/// A map of unit/value pairs, e.g. ('px': 120px) -/// @param {length} $value - -/// A new length to be added to the map -/// @return {map} - -/// The updated map, with new value added -/// -/// @example scss - -/// $map: (0px: 120px); -/// $map: _su-map-add-units($map, 1in); // add a comparable unit -/// $map: _su-map-add-units($map, 3vw); // add a new unit -/// -/// @each $units, $value in $map { -/// /* #{$units}: #{$value} */ -/// } -@function _su-map-add-units( - $map, - $value -) { - $unit: $value * 0; - $has: map-get($map, $unit) or 0; - - @if ($has == 0) { - @each $try, $could in $map { - $match: comparable($try, $value); - $unit: if($match, $try, $unit); - $has: if($match, $could, $has); - } - } - - @return map-merge($map, ($unit: $has + $value)); -} - - -// Susy Flatten -// ------------ -/// Flatten a multidimensional list -/// -/// @group x-utility -/// @access private -/// -/// @param {list} $list - -/// The list to be flattened -/// @return {list} - -/// The flattened list -/// -/// @example scss - -/// $list: 120px (30em 30em) 120px; -/// /* #{_susy-flatten($list)} */ -@function _susy-flatten( - $list -) { - $flat: (); - - // Don't iterate over maps - @if (type-of($list) == 'map') { - @return $list; - } - - // Iterate over lists (or single items) - @each $item in $list { - @if (type-of($item) == 'list') { - $item: _susy-flatten($item); - $flat: join($flat, $item); - } @else { - $flat: append($flat, $item); - } - } - - // Return flattened list - @return $flat; -} diff --git a/archive-layout-with-content/index.html b/archive-layout-with-content/index.html new file mode 100644 index 0000000000000..e9172b3014092 --- /dev/null +++ b/archive-layout-with-content/index.html @@ -0,0 +1,839 @@ + + + + + +Archive Layout with Content - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + + + +
+ +

Archive Layout with Content

+ +

A variety of common markup showing how the theme styles them.

+ +

Header one

+ +

Header two

+ +

Header three

+ +

Header four

+ +
Header five
+ +
Header six
+ +

Blockquotes

+ +

Single line blockquote:

+ +
+

Stay hungry. Stay foolish.

+
+ +

Multi line blockquote with a cite reference:

+ +
+

People think focus means saying yes to the thing you’ve got to focus on. But that’s not what it means at all. It means saying no to the hundred other good ideas that there are. You have to pick carefully. I’m actually as proud of the things we haven’t done as the things I have done. Innovation is saying no to 1,000 things.

+
+ +

Steve Jobs — Apple Worldwide Developers’ Conference, 1997

+ +

Tables

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EmployeeSalary 
John Doe$1Because that’s all Steve Jobs needed for a salary.
Jane Doe$100KFor all the blogging she does.
Fred Bloggs$100MPictures are worth a thousand words, right? So Jane × 1,000.
Jane Bloggs$100BWith hair like that?! Enough said.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Header1Header2Header3
cell1cell2cell3
cell4cell5cell6
cell1cell2cell3
cell4cell5cell6
Foot1Foot2Foot3
+ +

Definition Lists

+ +
+
Definition List Title
+
Definition list division.
+
Startup
+
A startup company or startup is a company or temporary organization designed to search for a repeatable and scalable business model.
+
#dowork
+
Coined by Rob Dyrdek and his personal body guard Christopher “Big Black” Boykins, “Do Work” works as a self motivator, to motivating your friends.
+
Do It Live
+
I’ll let Bill O’Reilly explain this one.
+
+ +

Unordered Lists (Nested)

+ +
    +
  • List item one +
      +
    • List item one +
        +
      • List item one
      • +
      • List item two
      • +
      • List item three
      • +
      • List item four
      • +
      +
    • +
    • List item two
    • +
    • List item three
    • +
    • List item four
    • +
    +
  • +
  • List item two
  • +
  • List item three
  • +
  • List item four
  • +
+ +

Ordered List (Nested)

+ +
    +
  1. List item one +
      +
    1. List item one +
        +
      1. List item one
      2. +
      3. List item two
      4. +
      5. List item three
      6. +
      7. List item four
      8. +
      +
    2. +
    3. List item two
    4. +
    5. List item three
    6. +
    7. List item four
    8. +
    +
  2. +
  3. List item two
  4. +
  5. List item three
  6. +
  7. List item four
  8. +
+ +

Buttons

+ +

Make any link standout more when applying the .btn class.

+ +
<a href="#" class="btn--success">Success Button</a>
+
+ +

Primary Button +Success Button +Warning Button +Danger Button +Info Button +Inverse Button +Light Outline Button

+ +
[Primary Button Text](#link){: .btn}
+[Success Button Text](#link){: .btn .btn--success}
+[Warning Button Text](#link){: .btn .btn--warning}
+[Danger Button Text](#link){: .btn .btn--danger}
+[Info Button Text](#link){: .btn .btn--info}
+[Inverse Button](#link){: .btn .btn--inverse}
+[Light Outline Button](#link){: .btn .btn--light-outline}
+
+ +

X-Large Button +Large Button +Default Button +Small Button

+ +
[X-Large Button](#link){: .btn .btn--x-large}
+[Large Button](#link){: .btn .btn--large}
+[Default Button](#link){: .btn}
+[Small Button](#link){: .btn .btn--small}
+
+ +

Notices

+ +

Watch out! You can also add notices by appending {: .notice} to a paragraph.

+ +

HTML Tags

+ +

Address Tag

+ +
+ 1 Infinite Loop
Cupertino, CA 95014
United States +
+ + + +

This is an example of a link.

+ +

Abbreviation Tag

+ +

The abbreviation CSS stands for “Cascading Style Sheets”.

+ +

Cite Tag

+ +

“Code is poetry.” —Automattic

+ +

Code Tag

+ +

You will learn later on in these tests that word-wrap: break-word; will be your best friend.

+ +

Strike Tag

+ +

This tag will let you strikeout text.

+ +

Emphasize Tag

+ +

The emphasize tag should italicize text.

+ +

Insert Tag

+ +

This tag should denote inserted text.

+ +

Keyboard Tag

+ +

This scarcely known tag emulates keyboard text, which is usually styled like the <code> tag.

+ +

Preformatted Tag

+ +

This tag styles large blocks of code.

+ +
+.post-title {
+  margin: 0 0 5px;
+  font-weight: bold;
+  font-size: 38px;
+  line-height: 1.2;
+  and here's a line of some really, really, really, really long text, just to see how the PRE tag handles it and to find out how it overflows;
+}
+
+ +

Quote Tag

+ +

Developers, developers, developers… –Steve Ballmer

+ +

Strong Tag

+ +

This tag shows bold text.

+ +

Subscript Tag

+ +

Getting our science styling on with H2O, which should push the “2” down.

+ +

Superscript Tag

+ +

Still sticking with science and Albert Einstein’s E = MC2, which should lift the 2 up.

+ +

Variable Tag

+ +

This allows you to denote variables.

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/css/main.css b/assets/css/main.css new file mode 100644 index 0000000000000..08e1f2fd0e6d6 --- /dev/null +++ b/assets/css/main.css @@ -0,0 +1,7 @@ +.author__urls.social-icons i,.author__urls.social-icons .svg-inline--fa,.page__footer-follow .social-icons i,.page__footer-follow .social-icons .svg-inline--fa{color:inherit}.ais-search-box .ais-search-box--input{background-color:#1f242c}/*! + * Minimal Mistakes Jekyll Theme 4.24.0 by Michael Rose + * Copyright 2013-2020 Michael Rose - mademistakes.com | @mmistakes + * Licensed under MIT (https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE) +*/@font-face{font-family:ETbook;src:url("../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.eot");src:url("../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.eot?#iefix") format("embedded-opentype"),url("../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.woff") format("woff"),url("../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.ttf") format("truetype"),url("../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.svg#etbemboromanosf") format("svg");font-weight:normal;font-style:normal}@font-face{font-family:ETbook;src:url("../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.eot");src:url("../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.eot?#iefix") format("embedded-opentype"),url("../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.woff") format("woff"),url("../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.ttf") format("truetype"),url("../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.svg#etbemboromanosf") format("svg");font-weight:normal;font-style:italic}@font-face{font-family:ETbook;src:url("../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.eot");src:url("../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.eot?#iefix") format("embedded-opentype"),url("../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.woff") format("woff"),url("../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.ttf") format("truetype"),url("../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.svg#etbemboromanosf") format("svg");font-weight:bold;font-style:normal}@font-face{font-family:ETbookRomanOldStyle;src:url("../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.eot");src:url("../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.eot?#iefix") format("embedded-opentype"),url("../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.woff") format("woff"),url("../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.ttf") format("truetype"),url("../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.svg#etbemboromanosf") format("svg");font-weight:normal;font-style:normal}.mfp-counter{font-family:Georgia,Times,serif}.mfp-bg{top:0;left:0;width:100%;height:100%;z-index:1042;overflow:hidden;position:fixed;background:#000;opacity:.8;filter:alpha(opacity=80)}.mfp-wrap{top:0;left:0;width:100%;height:100%;z-index:1043;position:fixed;outline:none !important;-webkit-backface-visibility:hidden}.mfp-container{text-align:center;position:absolute;width:100%;height:100%;left:0;top:0;padding:0 8px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mfp-container:before{content:'';display:inline-block;height:100%;vertical-align:middle}.mfp-align-top .mfp-container:before{display:none}.mfp-content{position:relative;display:inline-block;vertical-align:middle;margin:0 auto;text-align:left;z-index:1045}.mfp-inline-holder .mfp-content,.mfp-ajax-holder .mfp-content{width:100%;cursor:auto}.mfp-ajax-cur{cursor:progress}.mfp-zoom-out-cur,.mfp-zoom-out-cur .mfp-image-holder .mfp-close{cursor:-moz-zoom-out;cursor:-webkit-zoom-out;cursor:zoom-out}.mfp-zoom{cursor:pointer;cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.mfp-auto-cursor .mfp-content{cursor:auto}.mfp-close,.mfp-arrow,.mfp-preloader,.mfp-counter{-webkit-user-select:none;-moz-user-select:none;user-select:none}.mfp-loading.mfp-figure{display:none}.mfp-hide{display:none !important}.mfp-preloader{color:#ccc;position:absolute;top:50%;width:auto;text-align:center;margin-top:-0.8em;left:8px;right:8px;z-index:1044}.mfp-preloader a{color:#ccc}.mfp-preloader a:hover{color:#fff}.mfp-s-ready .mfp-preloader{display:none}.mfp-s-error .mfp-content{display:none}button.mfp-close,button.mfp-arrow{overflow:visible;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;display:block;outline:none;padding:0;z-index:1046;-webkit-box-shadow:none;box-shadow:none}button::-moz-focus-inner{padding:0;border:0}.mfp-close{width:44px;height:44px;line-height:44px;position:absolute;right:0;top:0;text-decoration:none;text-align:center;opacity:1;filter:alpha(opacity=100);padding:0 0 18px 10px;color:#fff;font-style:normal;font-size:28px;font-family:Georgia,Times,serif}.mfp-close:hover,.mfp-close:focus{opacity:1;filter:alpha(opacity=100)}.mfp-close:active{top:1px}.mfp-close-btn-in .mfp-close{color:#fff}.mfp-image-holder .mfp-close,.mfp-iframe-holder .mfp-close{color:#fff;right:-6px;text-align:right;padding-right:6px;width:100%}.mfp-counter{position:absolute;top:0;right:0;color:#ccc;font-size:12px;line-height:18px}.mfp-arrow{position:absolute;opacity:1;filter:alpha(opacity=100);margin:0;top:50%;margin-top:-55px;padding:0;width:90px;height:110px;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mfp-arrow:active{margin-top:-54px}.mfp-arrow:hover,.mfp-arrow:focus{opacity:1;filter:alpha(opacity=100)}.mfp-arrow:before,.mfp-arrow:after,.mfp-arrow .mfp-b,.mfp-arrow .mfp-a{content:'';display:block;width:0;height:0;position:absolute;left:0;top:0;margin-top:35px;margin-left:35px;border:medium inset transparent}.mfp-arrow:after,.mfp-arrow .mfp-a{border-top-width:13px;border-bottom-width:13px;top:8px}.mfp-arrow:before,.mfp-arrow .mfp-b{border-top-width:21px;border-bottom-width:21px;opacity:0.7}.mfp-arrow-left{left:0}.mfp-arrow-left:after,.mfp-arrow-left .mfp-a{border-right:17px solid #fff;margin-left:31px}.mfp-arrow-left:before,.mfp-arrow-left .mfp-b{margin-left:25px;border-right:27px solid #fff}.mfp-arrow-right{right:0}.mfp-arrow-right:after,.mfp-arrow-right .mfp-a{border-left:17px solid #fff;margin-left:39px}.mfp-arrow-right:before,.mfp-arrow-right .mfp-b{border-left:27px solid #fff}.mfp-iframe-holder{padding-top:40px;padding-bottom:40px}.mfp-iframe-holder .mfp-content{line-height:0;width:100%;max-width:900px}.mfp-iframe-holder .mfp-close{top:-40px}.mfp-iframe-scaler{width:100%;height:0;overflow:hidden;padding-top:56.25%}.mfp-iframe-scaler iframe{position:absolute;display:block;top:0;left:0;width:100%;height:100%;box-shadow:0 0 8px rgba(0,0,0,0.6);background:#000}img.mfp-img{width:auto;max-width:100%;height:auto;display:block;line-height:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:40px 0 40px;margin:0 auto}.mfp-figure{line-height:0}.mfp-figure:after{content:'';position:absolute;left:0;top:40px;bottom:40px;display:block;right:0;width:auto;height:auto;z-index:-1;box-shadow:0 0 8px rgba(0,0,0,0.6);background:#444}.mfp-figure small{color:#bdbdbd;display:block;font-size:12px;line-height:14px}.mfp-figure figure{margin:0}.mfp-figure figcaption{margin-top:0;margin-bottom:0}.mfp-bottom-bar{margin-top:-36px;position:absolute;top:100%;left:0;width:100%;cursor:auto}.mfp-title{text-align:left;line-height:18px;color:#f3f3f3;word-wrap:break-word;padding-right:36px}.mfp-image-holder .mfp-content{max-width:100%}.mfp-gallery .mfp-image-holder .mfp-figure{cursor:pointer}@media screen and (max-width: 800px) and (orientation: landscape),screen and (max-height: 300px){.mfp-img-mobile .mfp-image-holder{padding-left:0;padding-right:0}.mfp-img-mobile img.mfp-img{padding:0}.mfp-img-mobile .mfp-figure:after{top:0;bottom:0}.mfp-img-mobile .mfp-figure small{display:inline;margin-left:5px}.mfp-img-mobile .mfp-bottom-bar{background:rgba(0,0,0,0.6);bottom:0;margin:0;top:auto;padding:3px 5px;position:fixed;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mfp-img-mobile .mfp-bottom-bar:empty{padding:0}.mfp-img-mobile .mfp-counter{right:5px;top:3px}.mfp-img-mobile .mfp-close{top:0;right:0;width:35px;height:35px;line-height:35px;background:rgba(0,0,0,0.6);position:fixed;text-align:center;padding:0}}@media all and (max-width: 900px){.mfp-arrow{-webkit-transform:scale(0.75);transform:scale(0.75)}.mfp-arrow-left{-webkit-transform-origin:0;transform-origin:0}.mfp-arrow-right{-webkit-transform-origin:100%;transform-origin:100%}.mfp-container{padding-left:6px;padding-right:6px}}.mfp-ie7 .mfp-img{padding:0}.mfp-ie7 .mfp-bottom-bar{width:600px;left:50%;margin-left:-300px;margin-top:5px;padding-bottom:5px}.mfp-ie7 .mfp-container{padding:0}.mfp-ie7 .mfp-content{padding-top:44px}.mfp-ie7 .mfp-close{top:0;right:0;padding-top:0}button:focus,a:focus{outline:thin dotted #00adb5;outline:5px auto #00adb5;outline-offset:-2px}*{box-sizing:border-box}html{box-sizing:border-box;background-color:#252a34;font-size:16px;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}@media (min-width: 48em){html{font-size:18px}}@media (min-width: 64em){html{font-size:20px}}@media (min-width: 80em){html{font-size:22px}}body{margin:0}::-moz-selection{color:#fff;background:#000}::selection{color:#fff;background:#000}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}a{color:#8cd2d5}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{box-sizing:border-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}html{position:relative;min-height:100%;font-size:16px}body{margin:0;padding:0;color:#eaeaea;font-family:ETBembo,"Chronicle Text G2",Palatino,"Palatino Linotype","Palatino LT STD","Book Antiqua",Georgia,serif;line-height:1.5}body.overflow--hidden{overflow:hidden}h1,h2,h3,h4,h5,h6{margin:2em 0 0.5em;line-height:1.2;font-family:"Gill Sans","Gill Sans MT","Gotham Narrow","Lato",Calibri,sans-serif;font-weight:bold}h1{margin-top:0;font-size:1.563em}h2{font-size:1.25em}h3{font-size:1.125em}h4{font-size:1.0625em}h5{font-size:1.03125em}h6{font-size:1em}small,.small{font-size:.75em}p{margin-bottom:1.3em}u,ins{text-decoration:none;border-bottom:1px solid #eaeaea}u a,ins a{color:inherit}del a{color:inherit}p,pre,blockquote,ul,ol,dl,figure,table,fieldset{orphans:3;widows:3}abbr[title],abbr[data-original-title]{text-decoration:none;cursor:help;border-bottom:1px dotted #eaeaea}blockquote{margin:2em 1em 2em 0;padding-left:1em;padding-right:1em;font-style:italic;border-left:0.25em solid #00adb5}blockquote cite{font-style:italic}blockquote cite:before{content:"\2014";padding-right:5px}a:visited{color:#699ea0}a:hover{color:#a9dde0;outline:0}tt,code,kbd,samp,pre{font-family:Monaco,Consolas,"Lucida Console",monospace}pre{overflow-x:auto}hr{display:block;margin:1em 0;border:0;border-top:1px solid #51555d}ul li,ol li{margin-bottom:0.5em}li ul,li ol{margin-top:0.5em}figure{display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;-webkit-box-align:start;align-items:flex-start;flex-wrap:wrap;margin:2em 0}figure img,figure iframe,figure .fluid-width-video-wrapper{margin-bottom:1em}figure img{width:100%;border-radius:4px;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}figure>a{display:block}@media (min-width: 37.5em){figure.half>a,figure.half>img{width:calc(50% - 0.5em)}}figure.half figcaption{width:100%}@media (min-width: 37.5em){figure.third>a,figure.third>img{width:calc(33.3333% - 0.5em)}}figure.third figcaption{width:100%}figcaption{margin-bottom:0.5em;color:#eee;font-family:Georgia,Times,serif;font-size:.75em}figcaption a{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}figcaption a:hover{color:#a9dde0}svg:not(:root){overflow:hidden}nav ul{margin:0;padding:0}nav li{list-style:none}nav a{text-decoration:none}nav ul li,nav ol li{margin-bottom:0}nav li ul,nav li ol{margin-top:0}b,i,strong,em,blockquote,p,q,span,figure,img,h1,h2,header,input,a,tr,td,form button,input[type="submit"],.btn,.highlight,.archive__item-teaser{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}form{margin:0 0 5px 0;padding:1em;background-color:#1f242c}form fieldset{margin-bottom:5px;padding:0;border-width:0}form legend{display:block;width:100%;margin-bottom:10px;*margin-left:-7px;padding:0;color:#eaeaea;border:0;white-space:normal}form p{margin-bottom:2.5px}form ul{list-style-type:none;margin:0 0 5px 0;padding:0}form br{display:none}label,input,button,select,textarea{vertical-align:baseline;*vertical-align:middle}input,button,select,textarea{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}label{display:block;margin-bottom:0.25em;color:#eaeaea;cursor:pointer}label small{font-size:.75em}label input,label textarea,label select{display:block}input,textarea,select{display:inline-block;width:100%;padding:0.25em;margin-bottom:0.5em;color:#eaeaea;background-color:#252a34;border:#51555d;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.125)}.input-mini{width:60px}.input-small{width:90px}input[type="image"],input[type="checkbox"],input[type="radio"]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;cursor:pointer;border-radius:0;border:0 \9;box-shadow:none}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type="image"]{border:0}input[type="file"]{width:auto;padding:initial;line-height:initial;border:initial;background-color:transparent;background-color:initial;box-shadow:none}input[type="button"],input[type="reset"],input[type="submit"]{width:auto;height:auto;cursor:pointer;*overflow:visible}select,input[type="file"]{*margin-top:4px}select{width:auto;background-color:#fff}select[multiple],select[size]{height:auto}textarea{resize:vertical;height:auto;overflow:auto;vertical-align:top}input[type="hidden"]{display:none}.form{position:relative}.radio,.checkbox{padding-left:18px;font-weight:normal}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{opacity:0.5;cursor:not-allowed}input:focus,textarea:focus{border-color:#00adb5;outline:0;outline:thin dotted \9;box-shadow:inset 0 1px 3px rgba(234,234,234,0.06),0 0 5px rgba(0,173,181,0.7)}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{box-shadow:none}.help-block,.help-inline{color:#eee}.help-block{display:block;margin-bottom:1em;line-height:1em}.help-inline{display:inline-block;vertical-align:middle;padding-left:5px}.form-group{margin-bottom:5px;padding:0;border-width:0}.form-inline input,.form-inline textarea,.form-inline select{display:inline-block;margin-bottom:0}.form-inline label{display:inline-block}.form-inline .radio,.form-inline .checkbox,.form-inline .radio{padding-left:0;margin-bottom:0;vertical-align:middle}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-left:0;margin-right:3px}.form-search input,.form-search textarea,.form-search select{display:inline-block;margin-bottom:0}.form-search .search-query{padding-left:14px;padding-right:14px;margin-bottom:0;border-radius:14px}.form-search label{display:inline-block}.form-search .radio,.form-search .checkbox,.form-inline .radio{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"]{float:left;margin-left:0;margin-right:3px}.form--loading:before{content:""}.form--loading .form__spinner{display:block}.form:before{position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(255,255,255,0.7);z-index:10}.form__spinner{display:none;position:absolute;top:50%;left:50%;z-index:11}table,table.booktabs{width:auto;border-spacing:0px;border-top:2px solid #51555d;border-bottom:2px solid #51555d}.booktabs th,th{border-bottom:1px solid #51555d;padding:0.65ex 0.5em 0.4ex 0.5em;font-weight:normal}th,td{font-size:1rem;line-height:1.71428571}.booktabs th.cmid,th{border-bottom:1px solid #90949e}.booktabs th.nocmid{border-bottom:none}.booktabs tbody tr:first-child td,tr:first-child td{padding-top:0.65ex}.booktabs td,td{padding-left:0.5em;padding-right:0.5em;text-align:left}.booktabs caption,caption{font-size:90%;text-align:left;width:auto;margin-left:auto;margin-right:auto;margin-top:1ex;caption-side:top}.booktabs tbody tr,.booktabs thead tr th.l,.booktabs td.l{text-align:left !important}.booktabs tbody tr,.booktabs thead tr th.c,.booktabs td.c{text-align:center !important}.booktabs tbody tr,.booktabs thead tr th.r,.booktabs td.r{text-align:right !important}.table-caption{float:right;clear:right;margin-right:-60%;width:50%;margin-top:0;margin-bottom:0;font-size:1.0rem;line-height:1.96}@-webkit-keyframes intro{0%{opacity:0}100%{opacity:1}}@keyframes intro{0%{opacity:0}100%{opacity:1}}.btn{display:inline-block;margin-bottom:0.25em;padding:0.5em 1em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;font-weight:bold;text-align:center;text-decoration:none;border-width:0;border-radius:4px;cursor:pointer}.btn .icon{margin-right:0.5em}.btn .icon+.hidden{margin-left:-0.5em}.btn--primary{background-color:#00adb5;color:#fff}.btn--primary:visited{background-color:#00adb5;color:#fff}.btn--primary:hover{background-color:#008a91;color:#fff}.btn--inverse{background-color:#fff;color:#3d4144;border:1px solid #51555d}.btn--inverse:visited{background-color:#fff;color:#3d4144}.btn--inverse:hover{background-color:#ccc;color:#3d4144}.btn--light-outline{background-color:rgba(0,0,0,0);color:#fff;border:1px solid #fff}.btn--light-outline:visited{background-color:rgba(0,0,0,0);color:#fff}.btn--light-outline:hover{background-color:rgba(0,0,0,0.2);color:#fff}.btn--success{background-color:#3fa63f;color:#fff}.btn--success:visited{background-color:#3fa63f;color:#fff}.btn--success:hover{background-color:#328532;color:#fff}.btn--warning{background-color:#d67f05;color:#fff}.btn--warning:visited{background-color:#d67f05;color:#fff}.btn--warning:hover{background-color:#ab6604;color:#fff}.btn--danger{background-color:#ee5f5b;color:#fff}.btn--danger:visited{background-color:#ee5f5b;color:#fff}.btn--danger:hover{background-color:#be4c49;color:#fff}.btn--info{background-color:#3b9cba;color:#fff}.btn--info:visited{background-color:#3b9cba;color:#fff}.btn--info:hover{background-color:#2f7d95;color:#fff}.btn--facebook{background-color:#3b5998;color:#fff}.btn--facebook:visited{background-color:#3b5998;color:#fff}.btn--facebook:hover{background-color:#2f477a;color:#fff}.btn--twitter{background-color:#55acee;color:#fff}.btn--twitter:visited{background-color:#55acee;color:#fff}.btn--twitter:hover{background-color:#448abe;color:#fff}.btn--linkedin{background-color:#007bb6;color:#fff}.btn--linkedin:visited{background-color:#007bb6;color:#fff}.btn--linkedin:hover{background-color:#006292;color:#fff}.btn--block{display:block;width:100%}.btn--block+.btn--block{margin-top:0.25em}.btn--disabled{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);box-shadow:none;opacity:0.65}.btn--x-large{font-size:1.25em}.btn--large{font-size:1em}.btn--small{font-size:.6875em}.notice{margin:2em 0 !important;padding:1em;color:#eaeaea;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#434851;border-radius:4px;box-shadow:0 1px 1px rgba(189,193,196,0.25)}.notice h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice h4{margin-bottom:0;font-size:1em}.notice p:last-child{margin-bottom:0 !important}.notice h4+p{margin-top:0;padding-top:0}.notice a{color:#aaaeb0}.notice a:hover{color:#5f6162}blockquote.notice{border-left-color:#aaaeb0}.notice code{background-color:#343942}.notice pre code{background-color:inherit}.notice ul:last-child{margin-bottom:0}.notice--primary{margin:2em 0 !important;padding:1em;color:#eaeaea;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#1e444e;border-radius:4px;box-shadow:0 1px 1px rgba(0,173,181,0.25)}.notice--primary h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice--primary h4{margin-bottom:0;font-size:1em}.notice--primary p:last-child{margin-bottom:0 !important}.notice--primary h4+p{margin-top:0;padding-top:0}.notice--primary a{color:#009ca3}.notice--primary a:hover{color:#00575b}blockquote.notice--primary{border-left-color:#009ca3}.notice--primary code{background-color:#213741}.notice--primary pre code{background-color:inherit}.notice--primary ul:last-child{margin-bottom:0}.notice--info{margin:2em 0 !important;padding:1em;color:#eaeaea;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#29414f;border-radius:4px;box-shadow:0 1px 1px rgba(59,156,186,0.25)}.notice--info h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice--info h4{margin-bottom:0;font-size:1em}.notice--info p:last-child{margin-bottom:0 !important}.notice--info h4+p{margin-top:0;padding-top:0}.notice--info a{color:#358ca7}.notice--info a:hover{color:#1e4e5d}blockquote.notice--info{border-left-color:#358ca7}.notice--info code{background-color:#273541}.notice--info pre code{background-color:inherit}.notice--info ul:last-child{margin-bottom:0}.notice--warning{margin:2em 0 !important;padding:1em;color:#eaeaea;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#483b2b;border-radius:4px;box-shadow:0 1px 1px rgba(214,127,5,0.25)}.notice--warning h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice--warning h4{margin-bottom:0;font-size:1em}.notice--warning p:last-child{margin-bottom:0 !important}.notice--warning h4+p{margin-top:0;padding-top:0}.notice--warning a{color:#c17205}.notice--warning a:hover{color:#6b4003}blockquote.notice--warning{border-left-color:#c17205}.notice--warning code{background-color:#37332f}.notice--warning pre code{background-color:inherit}.notice--warning ul:last-child{margin-bottom:0}.notice--success{margin:2em 0 !important;padding:1em;color:#eaeaea;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#2a4336;border-radius:4px;box-shadow:0 1px 1px rgba(63,166,63,0.25)}.notice--success h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice--success h4{margin-bottom:0;font-size:1em}.notice--success p:last-child{margin-bottom:0 !important}.notice--success h4+p{margin-top:0;padding-top:0}.notice--success a{color:#399539}.notice--success a:hover{color:#205320}blockquote.notice--success{border-left-color:#399539}.notice--success code{background-color:#283635}.notice--success pre code{background-color:inherit}.notice--success ul:last-child{margin-bottom:0}.notice--danger{margin:2em 0 !important;padding:1em;color:#eaeaea;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#4d353c;border-radius:4px;box-shadow:0 1px 1px rgba(238,95,91,0.25)}.notice--danger h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice--danger h4{margin-bottom:0;font-size:1em}.notice--danger p:last-child{margin-bottom:0 !important}.notice--danger h4+p{margin-top:0;padding-top:0}.notice--danger a{color:#d65652}.notice--danger a:hover{color:#77302e}blockquote.notice--danger{border-left-color:#d65652}.notice--danger code{background-color:#392f38}.notice--danger pre code{background-color:inherit}.notice--danger ul:last-child{margin-bottom:0}.masthead{position:relative;border-bottom:1px solid #51555d;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.15s;animation-delay:0.15s;z-index:20}.masthead__inner-wrap{clear:both;margin-left:auto;margin-right:auto;padding:1em;max-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-family:"Gill Sans","Gill Sans MT","Gotham Narrow","Lato",Calibri,sans-serif}.masthead__inner-wrap::after{clear:both;content:"";display:table}@media (min-width: 80em){.masthead__inner-wrap{max-width:1280px}}.masthead__inner-wrap nav{z-index:10}.masthead__inner-wrap a{text-decoration:none}.site-logo img{max-height:2rem}.site-title{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-item-align:center;align-self:center;font-weight:bold}.site-subtitle{display:block;font-size:.625em}.masthead__menu{float:left;margin-left:0;margin-right:0;width:100%;clear:both}.masthead__menu .site-nav{margin-left:0}@media (min-width: 37.5em){.masthead__menu .site-nav{float:right}}.masthead__menu ul{margin:0;padding:0;clear:both;list-style-type:none}.masthead__menu-item{display:block;list-style-type:none;white-space:nowrap}.masthead__menu-item--lg{padding-right:2em;font-weight:700}.breadcrumbs{clear:both;margin:0 auto;max-width:100%;padding-left:1em;padding-right:1em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.3s;animation-delay:0.3s}.breadcrumbs::after{clear:both;content:"";display:table}@media (min-width: 80em){.breadcrumbs{max-width:1280px}}.breadcrumbs ol{padding:0;list-style:none;font-size:.75em}@media (min-width: 64em){.breadcrumbs ol{float:right;width:calc(100% - 200px)}}@media (min-width: 80em){.breadcrumbs ol{width:calc(100% - 300px)}}.breadcrumbs li{display:inline}.breadcrumbs .current{font-weight:bold}.pagination{clear:both;float:left;margin-top:1em;padding-top:1em;width:100%}.pagination::after{clear:both;content:"";display:table}.pagination ul{margin:0;padding:0;list-style-type:none;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}.pagination li{display:block;float:left;margin-left:-1px}.pagination li a{display:block;margin-bottom:0.25em;padding:0.5em 1em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:14px;font-weight:bold;line-height:1.5;text-align:center;text-decoration:none;color:#eee;border:1px solid #3d4046;border-radius:0}.pagination li a:hover{color:#a9dde0}.pagination li a.current,.pagination li a.current.disabled{color:#fff;background:#00adb5}.pagination li a.disabled{color:rgba(238,238,238,0.5);pointer-events:none;cursor:not-allowed}.pagination li:first-child{margin-left:0}.pagination li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination--pager{display:block;padding:1em 2em;float:left;width:50%;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1em;font-weight:bold;text-align:center;text-decoration:none;color:#eee;border:1px solid #3d4046;border-radius:4px}.pagination--pager:hover{background-color:#eee;color:#3d4144}.pagination--pager:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.pagination--pager:last-child{margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.pagination--pager.disabled{color:rgba(238,238,238,0.5);pointer-events:none;cursor:not-allowed}.page__content+.pagination,.page__meta+.pagination,.comment__date+.pagination,.page__share+.pagination,.page__comments+.pagination{margin-top:2em;padding-top:2em;border-top:1px solid #51555d}.greedy-nav{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:2em;background:#252a34}.greedy-nav a{display:block;margin:0 1rem;color:#00adb5;text-decoration:none;-webkit-transition:none;transition:none}.greedy-nav a:hover{color:#bbb}.greedy-nav a.site-logo{margin-left:0;margin-right:0.5rem}.greedy-nav a.site-title{margin-left:0}.greedy-nav img{-webkit-transition:none;transition:none}.greedy-nav__toggle{-ms-flex-item-align:center;align-self:center;height:2rem;border:0;outline:none;background-color:transparent;cursor:pointer}.greedy-nav .visible-links{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden}.greedy-nav .visible-links li{-webkit-box-flex:0;-ms-flex:none;flex:none}.greedy-nav .visible-links a{position:relative}.greedy-nav .visible-links a:before{content:"";position:absolute;left:0;bottom:0;height:4px;background:#00adb5;width:100%;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;-webkit-transform:scaleX(0) translate3d(0, 0, 0);transform:scaleX(0) translate3d(0, 0, 0)}.greedy-nav .visible-links a:hover:before{-webkit-transform:scaleX(1);-ms-transform:scaleX(1);transform:scaleX(1)}.greedy-nav .hidden-links{position:absolute;top:100%;right:0;margin-top:15px;padding:5px;border:1px solid #51555d;border-radius:4px;background:#252a34;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);box-shadow:0 2px 4px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)}.greedy-nav .hidden-links.hidden{display:none}.greedy-nav .hidden-links a{margin:0;padding:10px 20px;font-size:1em}.greedy-nav .hidden-links a:hover{color:#bbb;background:#1a1d24}.greedy-nav .hidden-links:before{content:"";position:absolute;top:-11px;right:10px;width:0;border-style:solid;border-width:0 10px 10px;border-color:#51555d transparent;display:block;z-index:0}.greedy-nav .hidden-links:after{content:"";position:absolute;top:-10px;right:10px;width:0;border-style:solid;border-width:0 10px 10px;border-color:#252a34 transparent;display:block;z-index:1}.greedy-nav .hidden-links li{display:block;border-bottom:1px solid #51555d}.greedy-nav .hidden-links li:last-child{border-bottom:none}.no-js .greedy-nav .visible-links{-ms-flex-wrap:wrap;flex-wrap:wrap;overflow:visible}.nav__list{margin-bottom:1.5em}.nav__list input[type="checkbox"],.nav__list label{display:none}@media (max-width: 63.9375em){.nav__list label{position:relative;display:inline-block;padding:0.5em 2.5em 0.5em 1em;color:#7a8288;font-size:.75em;font-weight:bold;border:1px solid #bdc1c4;border-radius:4px;z-index:20;-webkit-transition:0.2s ease-out;transition:0.2s ease-out;cursor:pointer}.nav__list label:before,.nav__list label:after{content:"";position:absolute;right:1em;top:1.25em;width:0.75em;height:0.125em;line-height:1;background-color:#7a8288;-webkit-transition:0.2s ease-out;transition:0.2s ease-out}.nav__list label:after{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.nav__list label:hover{color:#fff;border-color:#7a8288;background-color:#333}.nav__list label:hover:before,.nav__list label:hover:after{background-color:#fff}.nav__list input:checked+label{color:white;background-color:#333}.nav__list input:checked+label:before,.nav__list input:checked+label:after{background-color:#fff}.nav__list label:hover:after{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.nav__list input:checked+label:hover:after{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}.nav__list ul{margin-bottom:1em}.nav__list a{display:block;padding:0.25em 0}}@media (max-width: 63.9375em) and (min-width: 64em){.nav__list a{padding-top:0.125em;padding-bottom:0.125em}}@media (max-width: 63.9375em){.nav__list a:hover{text-decoration:underline}}.nav__list .nav__items{margin:0;font-size:1.25rem}.nav__list .nav__items a{color:inherit}.nav__list .nav__items .active{margin-left:-0.5em;padding-left:0.5em;padding-right:0.5em;font-weight:bold}@media (max-width: 63.9375em){.nav__list .nav__items{position:relative;max-height:0;opacity:0%;overflow:hidden;z-index:10;-webkit-transition:0.3s ease-in-out;transition:0.3s ease-in-out;-webkit-transform:translate(0, 10%);-ms-transform:translate(0, 10%);transform:translate(0, 10%)}}@media (max-width: 63.9375em){.nav__list input:checked~.nav__items{-webkit-transition:0.5s ease-in-out;transition:0.5s ease-in-out;max-height:9999px;overflow:visible;opacity:1;margin-top:1em;-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}}.nav__title{margin:0;padding:0.5rem 0.75rem;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1em;font-weight:bold}.nav__sub-title{display:block;margin:0.5rem 0;padding:0.25rem 0;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;font-weight:bold;text-transform:uppercase;border-bottom:1px solid #51555d}.toc{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;color:#7a8288;background-color:#252a34;border:1px solid #51555d;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.125);box-shadow:0 1px 1px rgba(0,0,0,0.125)}.toc .nav__title{color:#fff;font-size:.75em;background:#00adb5;border-top-left-radius:4px;border-top-right-radius:4px}.toc .active a{background-color:#cceff0;color:#3d4144}.toc__menu{margin:0;padding:0;width:100%;list-style:none;font-size:.75em}@media (min-width: 64em){.toc__menu{font-size:.6875em}}.toc__menu a{display:block;padding:0.25rem 0.75rem;color:#eee;font-weight:bold;line-height:1.5;border-bottom:1px solid #51555d}.toc__menu a:hover{color:#eaeaea}.toc__menu li ul>li a{padding-left:1.25rem;font-weight:normal}.toc__menu li ul li ul>li a{padding-left:1.75rem}.toc__menu li ul li ul li ul>li a{padding-left:2.25rem}.toc__menu li ul li ul li ul li ul>li a{padding-left:2.75rem}.toc__menu li ul li ul li ul li ul li ul>li a{padding-left:3.25rem}.page__footer{clear:both;float:left;margin-left:0;margin-right:0;width:100%;margin-top:3em;color:#eee;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.45s;animation-delay:0.45s;background-color:#1a1d24}.page__footer::after{clear:both;content:"";display:table}.page__footer footer{clear:both;margin-left:auto;margin-right:auto;margin-top:2em;max-width:100%;padding:0 1em 2em}.page__footer footer::after{clear:both;content:"";display:table}@media (min-width: 80em){.page__footer footer{max-width:1280px}}.page__footer a{color:inherit;text-decoration:none}.page__footer a:hover{text-decoration:underline}.page__footer .fas,.page__footer .fab,.page__footer .far,.page__footer .fal{color:#eee}.page__footer-copyright{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.6875em}.page__footer-follow ul{margin:0;padding:0;list-style-type:none}.page__footer-follow li{display:inline-block;padding-top:5px;padding-bottom:5px;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;text-transform:uppercase}.page__footer-follow li+li:before{content:"";padding-right:5px}.page__footer-follow a{padding-right:10px;font-weight:bold}.page__footer-follow .social-icons a{white-space:nowrap}.layout--search .archive__item-teaser{margin-bottom:0.25em}.search__toggle{margin-left:1rem;margin-right:1rem;height:2rem;border:0;outline:none;color:#00adb5;background-color:transparent;cursor:pointer;-webkit-transition:0.2s;transition:0.2s}.search__toggle:hover{color:#008288}.search-icon{width:100%;height:100%}.search-content{display:none;visibility:hidden;padding-top:1em;padding-bottom:1em}.search-content__inner-wrap{width:100%;margin-left:auto;margin-right:auto;padding-left:1em;padding-right:1em;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.15s;animation-delay:0.15s}@media (min-width: 80em){.search-content__inner-wrap{max-width:1280px}}.search-content__form{background-color:transparent}.search-content .search-input{display:block;margin-bottom:0;padding:0;border:none;outline:none;box-shadow:none;background-color:transparent;font-size:1.563em}@media (min-width: 64em){.search-content .search-input{font-size:1.953em}}@media (min-width: 80em){.search-content .search-input{font-size:2.441em}}.search-content.is--visible{display:block;visibility:visible}.search-content.is--visible::after{content:"";display:block}.search-content .results__found{margin-top:0.5em;font-size:.75em}.search-content .archive__item{margin-bottom:2em}@media (min-width: 64em){.search-content .archive__item{width:75%}}@media (min-width: 80em){.search-content .archive__item{width:50%}}.search-content .archive__item-title{margin-top:0}.search-content .archive__item-excerpt{margin-bottom:0}.ais-search-box{max-width:100% !important;margin-bottom:2em}.archive__item-title .ais-Highlight{color:#00adb5;font-style:normal;text-decoration:underline}.archive__item-excerpt .ais-Highlight{color:#00adb5;font-style:normal;font-weight:bold}div.highlighter-rouge,figure.highlight{position:relative;margin-bottom:1em;background:#263238;color:#eff;font-family:Monaco,Consolas,"Lucida Console",monospace;font-size:.75em;line-height:1.8;border-radius:4px}div.highlighter-rouge>pre,div.highlighter-rouge pre.highlight,figure.highlight>pre,figure.highlight pre.highlight{margin:0;padding:1em}.highlight table{margin-bottom:0;font-size:1em;border:0}.highlight table td{padding:0;width:calc(100% - 1em);border:0}.highlight table td.gutter,.highlight table td.rouge-gutter{padding-right:1em;width:1em;color:#b2ccd6;border-right:1px solid #b2ccd6;text-align:right}.highlight table td.code,.highlight table td.rouge-code{padding-left:1em}.highlight table pre{margin:0}.highlight pre{width:100%}.highlight .hll{background-color:#eff}.highlight .c{color:#b2ccd6}.highlight .err{color:#f07178}.highlight .k{color:#c792ea}.highlight .l{color:#f78c6c}.highlight .n{color:#eff}.highlight .o{color:#89ddff}.highlight .p{color:#eff}.highlight .cm{color:#b2ccd6}.highlight .cp{color:#b2ccd6}.highlight .c1{color:#b2ccd6}.highlight .cs{color:#b2ccd6}.highlight .gd{color:#f07178}.highlight .ge{font-style:italic}.highlight .gh{color:#eff;font-weight:bold}.highlight .gi{color:#c3e88d}.highlight .gp{color:#b2ccd6;font-weight:bold}.highlight .gs{font-weight:bold}.highlight .gu{color:#89ddff;font-weight:bold}.highlight .kc{color:#c792ea}.highlight .kd{color:#c792ea}.highlight .kn{color:#89ddff}.highlight .kp{color:#c792ea}.highlight .kr{color:#c792ea}.highlight .kt{color:#ffcb6b}.highlight .ld{color:#c3e88d}.highlight .m{color:#f78c6c}.highlight .s{color:#c3e88d}.highlight .na{color:#82aaff}.highlight .nb{color:#eff}.highlight .nc{color:#ffcb6b}.highlight .no{color:#f07178}.highlight .nd{color:#89ddff}.highlight .ni{color:#eff}.highlight .ne{color:#f07178}.highlight .nf{color:#82aaff}.highlight .nl{color:#eff}.highlight .nn{color:#ffcb6b}.highlight .nx{color:#82aaff}.highlight .py{color:#eff}.highlight .nt{color:#89ddff}.highlight .nv{color:#f07178}.highlight .ow{color:#89ddff}.highlight .w{color:#eff}.highlight .mf{color:#f78c6c}.highlight .mh{color:#f78c6c}.highlight .mi{color:#f78c6c}.highlight .mo{color:#f78c6c}.highlight .sb{color:#c3e88d}.highlight .sc{color:#eff}.highlight .sd{color:#b2ccd6}.highlight .s2{color:#c3e88d}.highlight .se{color:#f78c6c}.highlight .sh{color:#c3e88d}.highlight .si{color:#f78c6c}.highlight .sx{color:#c3e88d}.highlight .sr{color:#c3e88d}.highlight .s1{color:#c3e88d}.highlight .ss{color:#c3e88d}.highlight .bp{color:#eff}.highlight .vc{color:#f07178}.highlight .vg{color:#f07178}.highlight .vi{color:#f07178}.highlight .il{color:#f78c6c}.gist th,.gist td{border-bottom:0}.hidden,.is--hidden{display:none;visibility:hidden}.load{display:none}.transparent{opacity:0}.visually-hidden,.screen-reader-text,.screen-reader-text span,.screen-reader-shortcut{position:absolute !important;clip:rect(1px, 1px, 1px, 1px);height:1px !important;width:1px !important;border:0 !important;overflow:hidden}body:hover .visually-hidden a,body:hover .visually-hidden input,body:hover .visually-hidden button{display:none !important}.screen-reader-text:focus,.screen-reader-shortcut:focus{clip:auto !important;height:auto !important;width:auto !important;display:block;font-size:1em;font-weight:bold;padding:15px 23px 14px;background:#fff;z-index:100000;text-decoration:none;box-shadow:0 0 2px 2px rgba(0,0,0,0.6)}.skip-link{position:fixed;z-index:20;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;white-space:nowrap}.skip-link li{height:0;width:0;list-style:none}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.task-list{padding:0}.task-list li{list-style-type:none}.task-list .task-list-item-checkbox{margin-right:0.5em;opacity:1}.task-list .task-list{margin-left:1em}.cf{clear:both}.wrapper{margin-left:auto;margin-right:auto;width:100%}.align-left{display:block;margin-left:auto;margin-right:auto}@media (min-width: 37.5em){.align-left{float:left;margin-right:1em}}.align-right{display:block;margin-left:auto;margin-right:auto}@media (min-width: 37.5em){.align-right{float:right;margin-left:1em}}.align-center{display:block;margin-left:auto;margin-right:auto}@media (min-width: 64em){.full{margin-right:-20.3389830508% !important}}.icon{display:inline-block;fill:currentColor;width:1em;height:1.1em;line-height:1;position:relative;top:-0.1em;vertical-align:middle}.social-icons .fas,.social-icons .fab,.social-icons .far,.social-icons .fal{color:#eaeaea}.social-icons .fa-behance,.social-icons .fa-behance-square{color:#1769ff}.social-icons .fa-bitbucket{color:#205081}.social-icons .fa-dribbble,.social-icons .fa-dribble-square{color:#ea4c89}.social-icons .fa-facebook,.social-icons .fa-facebook-square,.social-icons .fa-facebook-f{color:#3b5998}.social-icons .fa-flickr{color:#ff0084}.social-icons .fa-foursquare{color:#0072b1}.social-icons .fa-github,.social-icons .fa-github-alt,.social-icons .fa-github-square{color:#171516}.social-icons .fa-gitlab{color:#e24329}.social-icons .fa-instagram{color:#517fa4}.social-icons .fa-keybase{color:#ef7639}.social-icons .fa-lastfm,.social-icons .fa-lastfm-square{color:#d51007}.social-icons .fa-linkedin,.social-icons .fa-linkedin-in{color:#007bb6}.social-icons .fa-mastodon,.social-icons .fa-mastodon-square{color:#2b90d9}.social-icons .fa-pinterest,.social-icons .fa-pinterest-p,.social-icons .fa-pinterest-square{color:#cb2027}.social-icons .fa-reddit{color:#ff4500}.social-icons .fa-rss,.social-icons .fa-rss-square{color:#fa9b39}.social-icons .fa-soundcloud{color:#f30}.social-icons .fa-stack-exchange,.social-icons .fa-stack-overflow{color:#fe7a15}.social-icons .fa-tumblr,.social-icons .fa-tumblr-square{color:#32506d}.social-icons .fa-twitter,.social-icons .fa-twitter-square{color:#55acee}.social-icons .fa-vimeo,.social-icons .fa-vimeo-square,.social-icons .fa-vimeo-v{color:#1ab7ea}.social-icons .fa-vine{color:#00bf8f}.social-icons .fa-youtube{color:#b00}.social-icons .fa-xing,.social-icons .fa-xing-square{color:#006567}.navicon{position:relative;width:1.5rem;height:.25rem;background:#00adb5;margin:auto;-webkit-transition:0.3s;transition:0.3s}.navicon:before,.navicon:after{content:"";position:absolute;left:0;width:1.5rem;height:.25rem;background:#00adb5;-webkit-transition:0.3s;transition:0.3s}.navicon:before{top:-.5rem}.navicon:after{bottom:-.5rem}.close .navicon{background:transparent}.close .navicon:before,.close .navicon:after{-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;top:0;width:1.5rem}.close .navicon:before{-webkit-transform:rotate3d(0, 0, 1, 45deg);transform:rotate3d(0, 0, 1, 45deg)}.close .navicon:after{-webkit-transform:rotate3d(0, 0, 1, -45deg);transform:rotate3d(0, 0, 1, -45deg)}@supports (pointer-events: none){.greedy-nav__toggle:before{content:'';position:fixed;top:0;left:0;width:100%;height:100%;opacity:0;background-color:#252a34;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;pointer-events:none}}.greedy-nav__toggle.close:before{opacity:0.9;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;pointer-events:auto}.greedy-nav__toggle:hover .navicon,.greedy-nav__toggle:hover .navicon:before,.greedy-nav__toggle:hover .navicon:after{background:#008288}.greedy-nav__toggle.close:hover .navicon{background:transparent}@media (min-width: 64em){.sticky{clear:both;position:-webkit-sticky;position:sticky;top:2em}.sticky::after{clear:both;content:"";display:table}.sticky>*{display:block}}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.show-modal{overflow:hidden;position:relative}.show-modal:before{position:absolute;content:"";top:0;left:0;width:100%;height:100%;z-index:999;background-color:rgba(255,255,255,0.85)}.show-modal .modal{display:block}.modal{display:none;position:fixed;width:300px;top:50%;left:50%;margin-left:-150px;margin-top:-150px;min-height:0;z-index:9999;background:#fff;border:1px solid #51555d;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.125)}.modal__title{margin:0;padding:0.5em 1em}.modal__supporting-text{padding:0 1em 0.5em 1em}.modal__actions{padding:0.5em 1em;border-top:1px solid #51555d}.footnote{color:#eee;text-decoration:none}.footnotes{color:#eee}.footnotes ol,.footnotes li,.footnotes p{margin-bottom:0;font-size:.75em}a.reversefootnote{color:#f97600;text-decoration:none}a.reversefootnote:hover{text-decoration:underline}.required{color:#ee5f5b;font-weight:bold}.gsc-control-cse table,.gsc-control-cse tr,.gsc-control-cse td{border:0}.responsive-video-container{position:relative;margin-bottom:1em;padding-bottom:56.25%;height:0;overflow:hidden;max-width:100%}.responsive-video-container iframe,.responsive-video-container object,.responsive-video-container embed{position:absolute;top:0;left:0;width:100%;height:100%}:-webkit-full-screen-ancestor .masthead,:-webkit-full-screen-ancestor .page__footer{position:static}#main{clear:both;margin-left:auto;margin-right:auto;padding-left:1em;padding-right:1em;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;max-width:100%;-webkit-animation-delay:0.15s;animation-delay:0.15s}#main::after{clear:both;content:"";display:table}@media (min-width: 80em){#main{max-width:1280px}}body{display:-webkit-box;display:-ms-flexbox;display:flex;min-height:100vh;counter-reset:sidenote-counter;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.initial-content,.search-content{flex:1 0 auto}@media (min-width: 64em){.page{float:right;width:calc(100% - 200px);padding-right:200px}}@media (min-width: 80em){.page{width:calc(100% - 300px);padding-right:300px}}.page .page__inner-wrap{float:left;margin-top:1em;margin-left:0;margin-right:0;width:100%;clear:both}.page .page__inner-wrap .page__content,.page .page__inner-wrap .page__meta,.page .page__inner-wrap .comment__date,.page .page__inner-wrap .page__share{position:relative;float:left;margin-left:0;margin-right:0;width:100%;clear:both}.page__title{margin-top:0;line-height:1}.page__title a{color:#eaeaea;text-decoration:none}.page__title+.page__meta,.page__title+.comment__date{margin-top:-0.5em}.page__lead{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1.25em}.page__content h2{padding-bottom:0.5em;border-bottom:1px solid #51555d}.page__content h1,.page__content h2,.page__content h3,.page__content h4,.page__content h5,.page__content h6{max-width:75%}.page__content h1 .header-link,.page__content h2 .header-link,.page__content h3 .header-link,.page__content h4 .header-link,.page__content h5 .header-link,.page__content h6 .header-link{position:relative;left:0.5em;opacity:0;font-size:0.8em;-webkit-transition:opacity 0.2s ease-in-out 0.1s;-moz-transition:opacity 0.2s ease-in-out 0.1s;-o-transition:opacity 0.2s ease-in-out 0.1s;transition:opacity 0.2s ease-in-out 0.1s}.page__content h1:hover .header-link,.page__content h2:hover .header-link,.page__content h3:hover .header-link,.page__content h4:hover .header-link,.page__content h5:hover .header-link,.page__content h6:hover .header-link{opacity:1}.page__content p,.page__content li,.page__content dl{font-size:1em}.page__content p{margin:0 0 1.3em}.page__content a:not(.btn):hover{text-decoration:underline}.page__content a:not(.btn):hover img{box-shadow:0 0 10px rgba(0,0,0,0.25)}.page__content :not(pre)>code{padding-top:0.1rem;padding-bottom:0.1rem;font-size:0.8em;background:#1f242c;border-radius:4px}.page__content :not(pre)>code::before,.page__content :not(pre)>code::after{letter-spacing:-0.2em;content:"\00a0"}.page__content dt{margin-top:1em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-weight:bold}.page__content dd{margin-left:1em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em}.page__content .small{font-size:.75em}.page__content blockquote+.small{margin-top:-1.5em;padding-left:1.25rem}.page__hero{position:relative;margin-bottom:2em;clear:both;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.25s;animation-delay:0.25s}.page__hero::after{clear:both;content:"";display:table}.page__hero--overlay{position:relative;margin-bottom:2em;padding:3em 0;clear:both;background-size:cover;background-repeat:no-repeat;background-position:center;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.25s;animation-delay:0.25s}.page__hero--overlay::after{clear:both;content:"";display:table}.page__hero--overlay a{color:#fff}.page__hero--overlay .wrapper{padding-left:1em;padding-right:1em}@media (min-width: 80em){.page__hero--overlay .wrapper{max-width:1280px}}.page__hero--overlay .page__title,.page__hero--overlay .page__meta,.page__hero--overlay .comment__date,.page__hero--overlay .page__lead,.page__hero--overlay .btn{color:#fff;text-shadow:1px 1px 4px rgba(0,0,0,0.5)}.page__hero--overlay .page__lead{max-width:768px}.page__hero--overlay .page__title{font-size:1.953em}@media (min-width: 37.5em){.page__hero--overlay .page__title{font-size:2.441em}}.page__hero-image{width:100%;height:auto;-ms-interpolation-mode:bicubic}.page__hero-caption{position:absolute;bottom:0;right:0;margin:0 auto;padding:2px 5px;color:#fff;font-family:Georgia,Times,serif;font-size:.6875em;background:#000;text-align:right;z-index:5;opacity:0.5;border-radius:4px 0 0 0}@media (min-width: 64em){.page__hero-caption{padding:5px 10px}}.page__hero-caption a{color:#fff;text-decoration:none}.page__share{margin-top:2em;padding-top:1em;border-top:1px solid #51555d}@media (max-width: 37.5em){.page__share .btn span{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}}.page__share-title{margin-bottom:10px;font-size:.75em;text-transform:uppercase}.page__meta,.comment__date{margin-top:0.25em;color:#eee;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em}.page__meta p,.comment__date p{margin:0}.page__meta a,.comment__date a{color:inherit}.page__meta-title{margin-bottom:10px;font-size:.75em;text-transform:uppercase}.page__meta-sep::before{content:"\2022";padding-left:0.5em;padding-right:0.5em}.page__taxonomy .sep{display:none}.page__taxonomy strong{margin-right:10px}.page__taxonomy-item{display:inline-block;margin-right:5px;margin-bottom:8px;padding:5px 10px;text-decoration:none;border:1px solid #3d4046;border-radius:4px}.page__taxonomy-item:hover{text-decoration:none;color:#a9dde0}.taxonomy__section{margin-bottom:2em;padding-bottom:1em}.taxonomy__section:not(:last-child){border-bottom:solid 1px #51555d}.taxonomy__section .archive__item-title{margin-top:0}.taxonomy__section .archive__subtitle{clear:both;border:0}.taxonomy__section+.taxonomy__section{margin-top:2em}.taxonomy__title{margin-bottom:0.5em;color:#eee}.taxonomy__count{color:#eee}.taxonomy__index{display:grid;grid-column-gap:2em;grid-template-columns:repeat(2, 1fr);margin:1.414em 0;padding:0;font-size:0.75em;list-style:none}@media (min-width: 64em){.taxonomy__index{grid-template-columns:repeat(3, 1fr)}}.taxonomy__index a{display:-webkit-box;display:-ms-flexbox;display:flex;padding:0.25em 0;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;color:inherit;text-decoration:none;border-bottom:1px solid #51555d}.back-to-top{display:block;clear:both;color:#eee;font-size:0.6em;text-transform:uppercase;text-align:right;text-decoration:none}.page__comments{float:left;margin-left:0;margin-right:0;width:100%;clear:both}.page__comments-title{margin-top:2rem;margin-bottom:10px;padding-top:2rem;font-size:.75em;border-top:1px solid #51555d;text-transform:uppercase}.page__comments-form{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.page__comments-form.disabled input,.page__comments-form.disabled button,.page__comments-form.disabled textarea,.page__comments-form.disabled label{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);box-shadow:none;opacity:0.65}.comment{clear:both;margin:1em 0}.comment::after{clear:both;content:"";display:table}.comment:not(:last-child){border-bottom:1px solid #51555d}.comment__avatar-wrapper{float:left;width:60px;height:60px}@media (min-width: 64em){.comment__avatar-wrapper{width:100px;height:100px}}.comment__avatar{width:40px;height:40px;border-radius:50%}@media (min-width: 64em){.comment__avatar{width:80px;height:80px;padding:5px;border:1px solid #51555d}}.comment__content-wrapper{float:right;width:calc(100% - 60px)}@media (min-width: 64em){.comment__content-wrapper{width:calc(100% - 100px)}}.comment__author{margin:0}.comment__author a{text-decoration:none}.comment__date{margin:0}.comment__date a{text-decoration:none}.page__related{clear:both;float:left;margin-top:2em;padding-top:1em;border-top:1px solid #51555d}.page__related::after{clear:both;content:"";display:table}@media (min-width: 64em){.page__related{float:right;width:calc(100% - 200px)}}@media (min-width: 80em){.page__related{width:calc(100% - 300px)}}.page__related a{color:inherit;text-decoration:none}.page__related-title{margin-bottom:10px;font-size:.75em;text-transform:uppercase}@media (min-width: 64em){.wide .page{padding-right:0}}@media (min-width: 80em){.wide .page{padding-right:0}}@media (min-width: 64em){.wide .page__related{padding-right:0}}@media (min-width: 80em){.wide .page__related{padding-right:0}}.mjx-math{font-size:1rem}div.epigraph{margin:3.5636rem 0}div.epigraph>blockquote{margin-top:3rem;margin-bottom:3rem}div.epigraph>blockquote,div.epigraph>blockquote>p{font-style:italic}div.epigraph>blockquote>footer{font-style:normal;width:45%;padding-left:2.5%;padding-right:2.5%;padding-top:0;margin-top:0.4455rem;margin-bottom:3.1182rem}div.epigraph>blockquote>footer>cite{font-style:italic}figure,figure img.maincolumn{max-width:55%;-webkit-margin-start:0;-webkit-margin-end:0;margin-bottom:3em}figcaption{float:right;clear:right;margin-right:-50%;margin-top:0;margin-bottom:0;font-size:1.0rem;line-height:1.6;vertical-align:baseline;position:relative;max-width:40%;font-family:'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif}figure.fullwidth figcaption{float:left;margin-right:0%;margin-left:33%;max-width:100%}img{max-width:100%}.sidenote,.marginnote{float:right;clear:right;margin-right:-50%;width:45%;margin-top:0;margin-bottom:1.96rem;font-size:0.9rem;line-height:1.96;vertical-align:baseline;position:relative;font-family:'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif}li .sidenote,li .marginnote{margin-right:-50%;width:25%}blockquote .sidenote,blockquote .marginnote{margin-right:-79%}.sidenote-number{counter-increment:sidenote-counter}.sidenote-number:after,.sidenote:before{content:counter(sidenote-counter, lower-roman) " ";font-family:et-bembo-roman-old-style;color:#f97600;position:relative;vertical-align:baseline}.sidenote-number:after{content:counter(sidenote-counter, lower-roman);font-size:0.8rem;color:#f97600;top:-0.5rem;left:0.1rem}.sidenote:before{content:counter(sidenote-counter, lower-roman) ". ";color:#f97600;top:0rem}p,footer,div.table-wrapper,.MJXc-display,.MathJax{width:75%}div.table-wrapper,table{overflow-x:auto}@media screen and (max-width: 760px){p,footer{width:90%}pre code{width:87.5%}figure{max-width:90%}figcaption,figure.fullwidth figcaption{margin-right:0%;max-width:none}blockquote p,blockquote footer,div.epigraph>blockquote>footer,.MJXc-display{width:80%;padding-left:5%;padding-right:5%}}.marginnote code,.sidenote code{font-size:1rem}pre{width:52.5%;padding-left:2.5%;overflow-x:auto}.fullwidth,li.listing div{max-width:90%}.full-width .sidenote,.full-width .sidenote-number,.full-width .marginnote{display:none}span.newthought{font-variant:small-caps;font-size:1.2em;letter-spacing:0.05rem}input.margin-toggle{display:none}label.sidenote-number{display:inline}label.margin-toggle:not(.sidenote-number){display:none}@media (max-width: 760px){label.margin-toggle:not(.sidenote-number){display:inline;color:#f97600}.sidenote,.marginnote{display:none}.margin-toggle:checked+.sidenote,.margin-toggle:checked+.marginnote{display:block;float:left;left:1rem;clear:both;width:95%;margin:1rem 2.5%;vertical-align:baseline;position:relative}label{cursor:pointer}pre,pre code,p code,p pre code{width:90%;padding:0}.table-caption{display:block;float:right;clear:both;width:98%;margin-top:1rem;margin-bottom:0.5rem;margin-left:1%;margin-right:1%;vertical-align:baseline;position:relative}div.table-wrapper,table,table.booktabs{width:85%}div.table-wrapper{border-right:1px solid #efefef}img{max-width:100%}figcaption.maincolumn-figure,figure.fullwidth figcaption{float:none;text-align:center}figure.fullwidth figcaption{margin-left:0}}.archive{margin-top:1em;margin-bottom:2em}@media (min-width: 64em){.archive{float:right;width:calc(100% - 200px);padding-right:200px}}@media (min-width: 80em){.archive{width:calc(100% - 300px);padding-right:300px}}.archive__item{position:relative}.archive__item a{position:relative;z-index:10}.archive__item a[rel="permalink"]{position:static}.archive__subtitle{margin:1.414em 0 0.5em;padding-bottom:0.5em;font-size:1em;color:#eee;border-bottom:1px solid #51555d}.archive__subtitle+.list__item .archive__item-title{margin-top:0.5em}.archive__item-title{margin-bottom:0.25em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;line-height:initial;overflow:hidden;text-overflow:ellipsis}.archive__item-title a[rel="permalink"]::before{content:'';position:absolute;left:0;top:0;right:0;bottom:0}.archive__item-title a+a{opacity:0.5}.page__content .archive__item-title{margin-top:1em;border-bottom:none}.archive__item-excerpt{margin-top:0;font-size:.75em}.archive__item-excerpt+p{text-indent:0}.archive__item-excerpt a{position:relative}.archive__item-teaser{position:relative;border-radius:4px;overflow:hidden}.archive__item-teaser img{width:100%}.archive__item-caption{position:absolute;bottom:0;right:0;margin:0 auto;padding:2px 5px;color:#fff;font-family:Georgia,Times,serif;font-size:.625em;background:#000;text-align:right;z-index:5;opacity:0.5;border-radius:4px 0 0 0}@media (min-width: 64em){.archive__item-caption{padding:5px 10px}}.archive__item-caption a{color:#fff;text-decoration:none}.list__item .page__meta,.list__item .comment__date{margin:0 0 4px;font-size:0.6em}@media (min-width: 64em){.archive .grid__wrapper{margin-right:-200px}}@media (min-width: 80em){.archive .grid__wrapper{margin-right:-300px}}.grid__item{margin-bottom:2em}@media (min-width: 37.5em){.grid__item{float:left;width:48.9795918367%}.grid__item:nth-child(2n + 1){clear:both;margin-left:0}.grid__item:nth-child(2n + 2){clear:none;margin-left:2.0408163265%}}@media (min-width: 48em){.grid__item{margin-left:0;margin-right:0;width:23.7288135593%}.grid__item:nth-child(2n + 1){clear:none}.grid__item:nth-child(4n + 1){clear:both}.grid__item:nth-child(4n + 2){clear:none;margin-left:1.6949152542%}.grid__item:nth-child(4n + 3){clear:none;margin-left:1.6949152542%}.grid__item:nth-child(4n + 4){clear:none;margin-left:1.6949152542%}}.grid__item .page__meta,.grid__item .comment__date{margin:0 0 4px;font-size:0.6em}.grid__item .page__meta-sep{display:block}.grid__item .page__meta-sep::before{display:none}.grid__item .archive__item-title{margin-top:0.5em;font-size:1em}.grid__item .archive__item-excerpt{display:none}@media (min-width: 48em){.grid__item .archive__item-excerpt{display:block;font-size:.75em}}@media (min-width: 37.5em){.grid__item .archive__item-teaser{max-height:200px}}@media (min-width: 48em){.grid__item .archive__item-teaser{max-height:120px}}.feature__wrapper{clear:both;margin-bottom:2em;border-bottom:1px solid #51555d}.feature__wrapper::after{clear:both;content:"";display:table}.feature__wrapper .archive__item-title{margin-bottom:0}.feature__item{position:relative;margin-bottom:2em;font-size:1.125em}@media (min-width: 37.5em){.feature__item{float:left;margin-bottom:0;width:32.2033898305%}.feature__item:nth-child(3n + 1){clear:both;margin-left:0}.feature__item:nth-child(3n + 2){clear:none;margin-left:1.6949152542%}.feature__item:nth-child(3n + 3){clear:none;margin-left:1.6949152542%}.feature__item .feature__item-teaser{max-height:200px;overflow:hidden}}.feature__item .archive__item-body{padding-left:1.6949152542%;padding-right:1.6949152542%}.feature__item a.btn::before{content:'';position:absolute;left:0;top:0;right:0;bottom:0}.feature__item--left{position:relative;float:left;margin-left:0;margin-right:0;width:100%;clear:both;font-size:1.125em}.feature__item--left .archive__item{float:left}.feature__item--left .archive__item-teaser{margin-bottom:2em}.feature__item--left a.btn::before{content:'';position:absolute;left:0;top:0;right:0;bottom:0}@media (min-width: 37.5em){.feature__item--left .archive__item-teaser{float:left;width:40.6779661017%}.feature__item--left .archive__item-body{float:right;padding-left:1.6949152542%;padding-right:1.6949152542%;width:57.6271186441%}}.feature__item--right{position:relative;float:left;margin-left:0;margin-right:0;width:100%;clear:both;font-size:1.125em}.feature__item--right .archive__item{float:left}.feature__item--right .archive__item-teaser{margin-bottom:2em}.feature__item--right a.btn::before{content:'';position:absolute;left:0;top:0;right:0;bottom:0}@media (min-width: 37.5em){.feature__item--right{text-align:right}.feature__item--right .archive__item-teaser{float:right;width:40.6779661017%}.feature__item--right .archive__item-body{float:left;width:57.6271186441%;padding-left:1.6949152542%;padding-right:1.6949152542%}}.feature__item--center{position:relative;float:left;margin-left:0;margin-right:0;width:100%;clear:both;font-size:1.125em}.feature__item--center .archive__item{float:left;width:100%}.feature__item--center .archive__item-teaser{margin-bottom:2em}.feature__item--center a.btn::before{content:'';position:absolute;left:0;top:0;right:0;bottom:0}@media (min-width: 37.5em){.feature__item--center{text-align:center}.feature__item--center .archive__item-teaser{margin:0 auto;width:40.6779661017%}.feature__item--center .archive__item-body{margin:0 auto;width:57.6271186441%}}.archive .feature__wrapper .archive__item-title{margin-top:0.25em;font-size:1em}.archive .feature__item,.archive .feature__item--left,.archive .feature__item--center,.archive .feature__item--right{font-size:1em}@media (min-width: 64em){.wide .archive{padding-right:0}}@media (min-width: 80em){.wide .archive{padding-right:0}}.layout--single .feature__wrapper{display:inline-block}.sidebar{clear:both}.sidebar::after{clear:both;content:"";display:table}@media (min-width: 64em){.sidebar{float:left;width:calc(200px - 1em);opacity:0.75;-webkit-transition:opacity 0.2s ease-in-out;transition:opacity 0.2s ease-in-out}.sidebar:hover{opacity:1}.sidebar.sticky{overflow-y:auto;max-height:calc(100vh - 2em - 2em)}}@media (min-width: 80em){.sidebar{width:calc(300px - 1em)}}.sidebar>*{margin-top:1em;margin-bottom:1em}.sidebar h2,.sidebar h3,.sidebar h4,.sidebar h5,.sidebar h6{margin-bottom:0;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}.sidebar p,.sidebar li{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1em;line-height:1.5}.sidebar img{width:100%}.sidebar img.emoji{width:20px;height:20px}.sidebar__right{margin-bottom:1em}@media (min-width: 64em){.sidebar__right{position:absolute;top:0;right:0;width:200px;margin-right:-200px;padding-left:1em;z-index:10}.sidebar__right.sticky{clear:both;position:-webkit-sticky;position:sticky;top:2em;float:right}.sidebar__right.sticky::after{clear:both;content:"";display:table}.sidebar__right.sticky .toc .toc__menu{overflow-y:auto;max-height:calc(100vh - 7em)}}@media (min-width: 80em){.sidebar__right{width:300px;margin-right:-300px}}@media (min-width: 64em){.splash .sidebar__right{position:relative;float:right;margin-right:0}}@media (min-width: 80em){.splash .sidebar__right{margin-right:0}}.author__avatar{display:table-cell;vertical-align:top;width:36px;height:36px}@media (min-width: 64em){.author__avatar{display:block;width:auto;height:auto}}.author__avatar img{max-width:110px;border-radius:50%}@media (min-width: 64em){.author__avatar img{padding:5px;border:1px solid #51555d}}.author__content{display:table-cell;vertical-align:top;padding-left:15px;padding-right:25px;line-height:1}@media (min-width: 64em){.author__content{display:block;width:100%;padding-left:0;padding-right:0}}.author__content a{color:inherit;text-decoration:none}.author__name{margin:0}@media (min-width: 64em){.author__name{margin-top:10px;margin-bottom:10px}}.sidebar .author__name{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1em}.author__bio{margin:0}@media (min-width: 64em){.author__bio{margin-top:10px;margin-bottom:20px}}.author__urls-wrapper{position:relative;display:table-cell;vertical-align:middle;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;z-index:20;cursor:pointer}.author__urls-wrapper li:last-child a{margin-bottom:0}.author__urls-wrapper .author__urls span.label{padding-left:5px}@media (min-width: 64em){.author__urls-wrapper{display:block}}.author__urls-wrapper button{position:relative;margin-bottom:0}@supports (pointer-events: none){.author__urls-wrapper button:before{content:'';position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none}}.author__urls-wrapper button.open:before{pointer-events:auto}@media (min-width: 64em){.author__urls-wrapper button{display:none}}.author__urls{display:none;position:absolute;right:0;margin-top:15px;padding:10px;list-style-type:none;border:1px solid #51555d;border-radius:4px;background:#252a34;box-shadow:0 2px 4px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);cursor:default}.author__urls.is--visible{display:block}@media (min-width: 64em){.author__urls{display:block;position:relative;margin:0;padding:0;border:0;background:transparent;box-shadow:none}}.author__urls:before{display:block;content:"";position:absolute;top:-11px;left:calc(50% - 10px);width:0;border-style:solid;border-width:0 10px 10px;border-color:#51555d transparent;z-index:0}@media (min-width: 64em){.author__urls:before{display:none}}.author__urls:after{display:block;content:"";position:absolute;top:-10px;left:calc(50% - 10px);width:0;border-style:solid;border-width:0 10px 10px;border-color:#252a34 transparent;z-index:1}@media (min-width: 64em){.author__urls:after{display:none}}.author__urls ul{padding:10px;list-style-type:none}.author__urls li{white-space:nowrap}.author__urls a{display:block;margin-bottom:5px;padding-right:5px;padding-top:2px;padding-bottom:2px;color:inherit;font-size:1em;text-decoration:none}.author__urls a:hover{text-decoration:underline}.toc{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1em}.toc .nav__title{font-size:.75em}.toc .toc__menu{font-size:.75em}.toc .toc__menu ul{padding-left:1em}.author__avatar,.author__content,.author__urls-wrapper{font-family:ETBembo,"Chronicle Text G2",Palatino,"Palatino Linotype","Palatino LT STD","Book Antiqua",Georgia,serif;font-size:.75em}@media print{[hidden]{display:none}*{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}html{margin:0;padding:0;min-height:auto !important;font-size:16px}body{margin:0 auto;background:#fff !important;color:#000 !important;font-size:1rem;line-height:1.5;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}h1,h2,h3,h4,h5,h6{color:#000;line-height:1.2;margin-bottom:0.75rem;margin-top:0}h1{font-size:2.5rem}h2{font-size:2rem}h3{font-size:1.75rem}h4{font-size:1.5rem}h5{font-size:1.25rem}h6{font-size:1rem}a,a:visited{color:#000;text-decoration:underline;word-wrap:break-word}table{border-collapse:collapse}thead{display:table-header-group}table,th,td{border-bottom:1px solid #000}td,th{padding:8px 16px}img{border:0;display:block;max-width:100% !important;vertical-align:middle}hr{border:0;border-bottom:2px solid #bbb;height:0;margin:2.25rem 0;padding:0}dt{font-weight:bold}dd{margin:0;margin-bottom:0.75rem}abbr[title],acronym[title]{border:0;text-decoration:none}table,blockquote,pre,code,figure,li,hr,ul,ol,a,tr{page-break-inside:avoid}h2,h3,h4,p,a{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid;page-break-inside:avoid}h1+p,h2+p,h3+p{page-break-before:avoid}img{page-break-after:auto;page-break-before:auto;page-break-inside:avoid}pre{white-space:pre-wrap !important;word-wrap:break-word}a[href^='http://']:after,a[href^='https://']:after,a[href^='ftp://']:after{content:" (" attr(href) ")";font-size:80%}abbr[title]:after,acronym[title]:after{content:" (" attr(title) ")"}#main{max-width:100%}.page{margin:0;padding:0;width:100%}.page-break,.page-break-before{page-break-before:always}.page-break-after{page-break-after:always}.no-print{display:none}a.no-reformat:after{content:''}abbr.no-reformat[title]:after,acronym.no-reformat[title]:after{content:''}.page__hero-caption{color:#000 !important;background:#fff !important;opacity:1}.page__hero-caption a{color:#000 !important}.masthead,.toc,.page__share,.page__related,.pagination,.ads,.page__footer,.page__comments-form,.author__avatar,.author__content,.author__urls-wrapper,.nav__list,.sidebar,.adsbygoogle{display:none !important;height:1px !important}}.theme-switch-wrapper{display:flex;align-items:center;justify-content:center;margin:20px}.theme-switch{display:inline-block;height:26px;position:relative;width:50px}.theme-switch input{display:none}.slider{background-color:#ccc;bottom:0;cursor:pointer;left:0;position:absolute;right:0;top:0;transition:.4s}.slider:before{background-color:#f3f3f3;bottom:4px;content:"";height:18px;left:4px;position:absolute;transition:.4s;width:18px}input:checked+.slider{background-color:#252a34}.slider.round{border-radius:26px}.slider.round:before{border-radius:50%}input:checked+.slider:before{left:calc(100% - 22px)}.wide_post article.page{float:left;width:100%}.sidebar__right{padding-left:5%}.layout--single{margin-left:10%;margin-right:10%} + +/*# sourceMappingURL=main.css.map */ \ No newline at end of file diff --git a/assets/css/main.css.map b/assets/css/main.css.map new file mode 100644 index 0000000000000..7115b0fd97a16 --- /dev/null +++ b/assets/css/main.css.map @@ -0,0 +1,124 @@ +{ + "version": 3, + "file": "main.css", + "sources": [ + "main.scss", + "_sass/minimal-mistakes/skins/_dark.scss", + "_sass/minimal-mistakes.scss", + "_sass/minimal-mistakes/_fonts.scss", + "_sass/minimal-mistakes/_settings.scss", + "_sass/minimal-mistakes/_variables.scss", + "_sass/minimal-mistakes/vendor/breakpoint/_breakpoint.scss", + "_sass/minimal-mistakes/vendor/breakpoint/_settings.scss", + "_sass/minimal-mistakes/vendor/breakpoint/_context.scss", + "_sass/minimal-mistakes/vendor/breakpoint/_helpers.scss", + "_sass/minimal-mistakes/vendor/breakpoint/_parsers.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/_query.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/_single.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/single/_default.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/_double.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/double/_default-pair.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/double/_double-string.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/double/_default.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/_triple.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/triple/_default.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/_resolution.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/resolution/_resolution.scss", + "_sass/minimal-mistakes/vendor/breakpoint/_no-query.scss", + "_sass/minimal-mistakes/vendor/breakpoint/_respond-to.scss", + "_sass/minimal-mistakes/vendor/breakpoint/_legacy-settings.scss", + "_sass/minimal-mistakes/vendor/magnific-popup/_magnific-popup.scss", + "_sass/minimal-mistakes/vendor/magnific-popup/_settings.scss", + "_sass/minimal-mistakes/vendor/susy/_susy.scss", + "_sass/minimal-mistakes/vendor/susy/_susy-prefix.scss", + "_sass/minimal-mistakes/vendor/susy/susy/_utilities.scss", + "_sass/minimal-mistakes/vendor/susy/susy/_su-validate.scss", + "_sass/minimal-mistakes/vendor/susy/susy/_su-math.scss", + "_sass/minimal-mistakes/vendor/susy/susy/_settings.scss", + "_sass/minimal-mistakes/vendor/susy/susy/_normalize.scss", + "_sass/minimal-mistakes/vendor/susy/susy/_parse.scss", + "_sass/minimal-mistakes/vendor/susy/susy/_syntax-helpers.scss", + "_sass/minimal-mistakes/vendor/susy/susy/_api.scss", + "_sass/minimal-mistakes/vendor/susy/susy/_unprefix.scss", + "_sass/minimal-mistakes/_mixins.scss", + "_sass/minimal-mistakes/_reset.scss", + "_sass/minimal-mistakes/_base.scss", + "_sass/minimal-mistakes/_forms.scss", + "_sass/minimal-mistakes/_tables.scss", + "_sass/minimal-mistakes/_animations.scss", + "_sass/minimal-mistakes/_buttons.scss", + "_sass/minimal-mistakes/_notices.scss", + "_sass/minimal-mistakes/_masthead.scss", + "_sass/minimal-mistakes/_navigation.scss", + "_sass/minimal-mistakes/_footer.scss", + "_sass/minimal-mistakes/_search.scss", + "_sass/minimal-mistakes/_syntax.scss", + "_sass/minimal-mistakes/_utilities.scss", + "_sass/minimal-mistakes/_page.scss", + "_sass/minimal-mistakes/_archive.scss", + "_sass/minimal-mistakes/_sidebar.scss", + "_sass/minimal-mistakes/_print.scss", + "_sass/minimal-mistakes/_toggle-button.scss" + ], + "sourcesContent": [ + "@charset \"utf-8\";\n\n@import \"minimal-mistakes/skins/dark\"; // skin\n@import \"minimal-mistakes\"; // main partials\n\n// AN Notes: https://github.com/NaanProphet/tripodvideoninja/commit/d9905c1f71ac57597b20073c95c50807e45f57a5\n/* hack to fill the left-hand-side when there is no author */\n .wide_post article.page {\n float: left;\n width: 100%;\n }\n\n /* push the TOC out to the right just a little*/\n .sidebar__right {\n \tpadding-left: 5%;\n }\n .layout--single {\n \tmargin-left: 10%;\n \tmargin-right: 10%;\n }\n", + "/* ==========================================================================\n Dark skin\n ========================================================================== */\n\n/* Colors */\n$background-color: #252a34 !default;\n$text-color: #eaeaea !default;\n$primary-color: #00adb5 !default;\n$border-color: mix(#fff, $background-color, 20%) !default;\n$code-background-color: mix(#000, $background-color, 15%) !default;\n$code-background-color-dark: mix(#000, $background-color, 20%) !default;\n$form-background-color: mix(#000, $background-color, 15%) !default;\n$footer-background-color: mix(#000, $background-color, 30%) !default;\n$link-color: mix($primary-color, $text-color, 40%) !default;\n$link-color-hover: mix(#fff, $link-color, 25%) !default;\n$link-color-visited: mix(#000, $link-color, 25%) !default;\n$masthead-link-color: $primary-color !default;\n$masthead-link-color-hover: mix(#000, $text-color, 20%) !default;\n$navicon-link-color-hover: mix(#000, $background-color, 30%) !default;\n\n.author__urls.social-icons i,\n.author__urls.social-icons .svg-inline--fa,\n.page__footer-follow .social-icons i,\n.page__footer-follow .social-icons .svg-inline--fa {\n color: inherit;\n}\n\n.ais-search-box .ais-search-box--input {\n background-color: $form-background-color;\n}\n", + "/*!\n * Minimal Mistakes Jekyll Theme 4.24.0 by Michael Rose\n * Copyright 2013-2020 Michael Rose - mademistakes.com | @mmistakes\n * Licensed under MIT (https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE)\n*/\n\n/* Tufte Features using jekyll-tufte*/\n//@import \"minimal-mistakes/tables\";\n@import \"minimal-mistakes/fonts\";\n@import \"minimal-mistakes/settings\";\n\n\n/* Variables */\n@import \"minimal-mistakes/variables\";\n\n/* Mixins and functions */\n@import \"minimal-mistakes/vendor/breakpoint/breakpoint\";\n@include breakpoint-set(\"to ems\", true);\n@import \"minimal-mistakes/vendor/magnific-popup/magnific-popup\"; // Magnific Popup\n@import \"minimal-mistakes/vendor/susy/susy\";\n@import \"minimal-mistakes/mixins\";\n\n/* Core CSS */\n@import \"minimal-mistakes/reset\";\n@import \"minimal-mistakes/base\";\n@import \"minimal-mistakes/forms\";\n@import \"minimal-mistakes/tables\";\n@import \"minimal-mistakes/animations\";\n\n/* Components */\n@import \"minimal-mistakes/buttons\";\n@import \"minimal-mistakes/notices\";\n@import \"minimal-mistakes/masthead\";\n@import \"minimal-mistakes/navigation\";\n@import \"minimal-mistakes/footer\";\n@import \"minimal-mistakes/search\";\n@import \"minimal-mistakes/syntax\";\n\n/* Utility classes */\n@import \"minimal-mistakes/utilities\";\n\n/* Layout specific */\n@import \"minimal-mistakes/page\";\n@import \"minimal-mistakes/archive\";\n@import \"minimal-mistakes/sidebar\";\n@import \"minimal-mistakes/print\";\n\n@import \"minimal-mistakes/toggle-button\"\n", + "// Font imports file. If you don't want these fonts, comment out these and add your own into the fonts directory \n// and point the src attribute to the file.\n// \n\n@charset \"UTF-8\";\n\n@font-face {\n font-family: ETbook;\n src: url(\"../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.eot\");\n src: url(\"../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.woff\") format(\"woff\"), url(\"../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.ttf\") format(\"truetype\"), url(\"../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.svg#etbemboromanosf\") format(\"svg\");\n font-weight: normal;\n font-style: normal\n}\n\n@font-face {\n font-family: ETbook;\n src: url(\"../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.eot\");\n src: url(\"../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.woff\") format(\"woff\"), url(\"../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.ttf\") format(\"truetype\"), url(\"../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.svg#etbemboromanosf\") format(\"svg\");\n font-weight: normal;\n font-style: italic\n}\n\n@font-face {\n font-family: ETbook;\n src: url(\"../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.eot\");\n src: url(\"../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.woff\") format(\"woff\"), url(\"../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.ttf\") format(\"truetype\"), url(\"../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.svg#etbemboromanosf\") format(\"svg\");\n font-weight: bold;\n font-style: normal\n}\n\n@font-face {\n font-family: ETbookRomanOldStyle;\n src: url(\"../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.eot\");\n src: url(\"../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.woff\") format(\"woff\"), url(\"../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.ttf\") format(\"truetype\"), url(\"../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.svg#etbemboromanosf\") format(\"svg\");\n font-weight: normal;\n font-style: normal;\n}", + "/* This file contains all the constants for colors and font styles */\n\n$body-font: ETBembo, \"Chronicle Text G2\", Palatino, \"Palatino Linotype\", \"Palatino LT STD\", \"Book Antiqua\", Georgia, serif;\n// Note that Gill Sans is the top of the stack and corresponds to what is used in Tufte's books\n// However, it is not a free font, so if it is not present on the computer that is viewing the webpage\n// The free Google 'Lato' font is used instead. It is similar.\n$sans-font: \"Gill Sans\", \"Gill Sans MT\", \"Gotham Narrow\", \"Lato\", Calibri, sans-serif;\n$code-font: Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n$url-font: \"Lucida Console\", \"Lucida Sans Typewriter\", Monaco, \"Bitstream Vera Sans Mono\", monospace;\n//$text-color: #111;\n//$bg-color: #fffff8;\n$contrast-color: #f97600;//#a00000;\n//$border-color: #333333;\n//$link-style: underline; // choices are 'color' or 'underline'. Color option styles links with $contrast-color set above\n\n\n\n", + "/* ==========================================================================\n Variables\n ========================================================================== */\n\n/*\n Typography\n ========================================================================== */\n\n$doc-font-size: 16 !default;\n\n/* paragraph indention */\n$paragraph-indent: false !default; // true, false (default)\n$indent-var: 1.3em !default;\n\n/* system typefaces */\n$serif: Georgia, Times, serif !default;\n$sans-serif: -apple-system, BlinkMacSystemFont, \"Roboto\", \"Segoe UI\",\n \"Helvetica Neue\", \"Lucida Grande\", Arial, sans-serif !default;\n$monospace: Monaco, Consolas, \"Lucida Console\", monospace !default;\n\n/* sans serif typefaces */\n$sans-serif-narrow: $sans-serif !default;\n$helvetica: Helvetica, \"Helvetica Neue\", Arial, sans-serif !default;\n\n/* serif typefaces */\n$georgia: Georgia, serif !default;\n$times: Times, serif !default;\n$bodoni: \"Bodoni MT\", serif !default;\n$calisto: \"Calisto MT\", serif !default;\n$garamond: Garamond, serif !default;\n\n$global-font-family: $sans-serif !default;\n$header-font-family: $sans-serif !default;\n$caption-font-family: $serif !default;\n\n/* type scale */\n$type-size-1: 2.441em !default; // ~39.056px\n$type-size-2: 1.953em !default; // ~31.248px\n$type-size-3: 1.563em !default; // ~25.008px\n$type-size-4: 1.25em !default; // ~20px\n$type-size-5: 1em !default; // ~16px\n$type-size-6: 0.75em !default; // ~12px\n$type-size-7: 0.6875em !default; // ~11px\n$type-size-8: 0.625em !default; // ~10px\n\n/* headline scale */\n$h-size-1: 1.563em !default; // ~25.008px\n$h-size-2: 1.25em !default; // ~20px\n$h-size-3: 1.125em !default; // ~18px\n$h-size-4: 1.0625em !default; // ~17px\n$h-size-5: 1.03125em !default; // ~16.5px\n$h-size-6: 1em !default; // ~16px\n\n/*\n Colors\n ========================================================================== */\n\n$gray: #7a8288 !default;\n$dark-gray: mix(#000, $gray, 50%) !default;\n$darker-gray: mix(#000, $gray, 60%) !default;\n$light-gray: mix(#fff, $gray, 50%) !default;\n$lighter-gray: mix(#fff, $gray, 90%) !default;\n\n$background-color: #fff !default;\n$code-background-color: #fafafa !default;\n$code-background-color-dark: $light-gray !default;\n$text-color: $dark-gray !default;\n$muted-text-color: mix(#fff, $text-color, 20%) !default;\n$border-color: $lighter-gray !default;\n$form-background-color: $lighter-gray !default;\n$footer-background-color: $lighter-gray !default;\n\n$primary-color: #6f777d !default;\n$success-color: #3fa63f !default;\n$warning-color: #d67f05 !default;\n$danger-color: #ee5f5b !default;\n$info-color: #3b9cba !default;\n$focus-color: $primary-color !default;\n$active-color: mix(#fff, $primary-color, 80%) !default;\n\n/* YIQ color contrast */\n$yiq-contrasted-dark-default: $dark-gray !default;\n$yiq-contrasted-light-default: #fff !default;\n$yiq-contrasted-threshold: 175 !default;\n$yiq-debug: false !default;\n\n/* brands */\n$behance-color: #1769ff !default;\n$bitbucket-color: #205081 !default;\n$dribbble-color: #ea4c89 !default;\n$facebook-color: #3b5998 !default;\n$flickr-color: #ff0084 !default;\n$foursquare-color: #0072b1 !default;\n$github-color: #171516 !default;\n$gitlab-color: #e24329 !default;\n$instagram-color: #517fa4 !default;\n$keybase-color: #ef7639 !default;\n$lastfm-color: #d51007 !default;\n$linkedin-color: #007bb6 !default;\n$mastodon-color: #2b90d9 !default;\n$pinterest-color: #cb2027 !default;\n$reddit-color: #ff4500 !default;\n$rss-color: #fa9b39 !default;\n$soundcloud-color: #ff3300 !default;\n$stackoverflow-color: #fe7a15 !default;\n$tumblr-color: #32506d !default;\n$twitter-color: #55acee !default;\n$vimeo-color: #1ab7ea !default;\n$vine-color: #00bf8f !default;\n$youtube-color: #bb0000 !default;\n$xing-color: #006567 !default;\n\n/* links */\n$link-color: mix(#000, $info-color, 20%) !default;\n$link-color-hover: mix(#000, $link-color, 25%) !default;\n$link-color-visited: mix(#fff, $link-color, 15%) !default;\n$masthead-link-color: $primary-color !default;\n$masthead-link-color-hover: mix(#000, $primary-color, 25%) !default;\n$navicon-link-color-hover: mix(#fff, $primary-color, 75%) !default;\n\n/* notices */\n$notice-background-mix: 80% !default;\n$code-notice-background-mix: 90% !default;\n\n/* syntax highlighting (base16) */\n$base00: #263238 !default;\n$base01: #2e3c43 !default;\n$base02: #314549 !default;\n$base03: #546e7a !default;\n$base04: #b2ccd6 !default;\n$base05: #eeffff !default;\n$base06: #eeffff !default;\n$base07: #ffffff !default;\n$base08: #f07178 !default;\n$base09: #f78c6c !default;\n$base0a: #ffcb6b !default;\n$base0b: #c3e88d !default;\n$base0c: #89ddff !default;\n$base0d: #82aaff !default;\n$base0e: #c792ea !default;\n$base0f: #ff5370 !default;\n\n/*\n Breakpoints\n ========================================================================== */\n\n$small: 600px !default;\n$medium: 768px !default;\n$medium-wide: 900px !default;\n$large: 1024px !default;\n$x-large: 1280px !default;\n$max-width: $x-large !default;\n\n/*\n Grid\n ========================================================================== */\n\n$right-sidebar-width-narrow: 200px !default;\n$right-sidebar-width: 300px !default;\n$right-sidebar-width-wide: 400px !default;\n\n/*\n Other\n ========================================================================== */\n\n$border-radius: 4px !default;\n$box-shadow: 0 1px 1px rgba(0, 0, 0, 0.125) !default;\n$nav-height: 2em !default;\n$nav-toggle-height: 2rem !default;\n$navicon-width: 1.5rem !default;\n$navicon-height: 0.25rem !default;\n$global-transition: all 0.2s ease-in-out !default;\n$intro-transition: intro 0.3s both !default;\n", + "//////////////////////////////\n// Default Variables\n//////////////////////////////\n$Breakpoint-Settings: (\n 'default media': all,\n 'default feature': min-width,\n 'default pair': width,\n\n 'force all media type': false,\n 'to ems': false,\n 'transform resolutions': true,\n\n 'no queries': false,\n 'no query fallbacks': false,\n\n 'base font size': 16px,\n\n 'legacy syntax': false\n);\n\n$breakpoint: () !default;\n\n//////////////////////////////\n// Imports\n//////////////////////////////\n@import \"settings\";\n@import \"context\";\n@import \"helpers\";\n@import \"parsers\";\n@import \"no-query\";\n\n@import \"respond-to\";\n\n@import \"legacy-settings\";\n\n//////////////////////////////\n// Breakpoint Mixin\n//////////////////////////////\n\n@mixin breakpoint($query, $no-query: false) {\n @include legacy-settings-warning;\n\n // Reset contexts\n @include private-breakpoint-reset-contexts();\n\n $breakpoint: breakpoint($query, false);\n\n $query-string: map-get($breakpoint, 'query');\n $query-fallback: map-get($breakpoint, 'fallback');\n\n $private-breakpoint-context-holder: map-get($breakpoint, 'context holder') !global;\n $private-breakpoint-query-count: map-get($breakpoint, 'query count') !global;\n\n // Allow for an as-needed override or usage of no query fallback.\n @if $no-query != false {\n $query-fallback: $no-query;\n }\n\n @if $query-fallback != false {\n $context-setter: private-breakpoint-set-context('no-query', $query-fallback);\n }\n\n // Print Out Query String\n @if not breakpoint-get('no queries') {\n @media #{$query-string} {\n @content;\n }\n }\n\n @if breakpoint-get('no query fallbacks') != false or breakpoint-get('no queries') == true {\n\n $type: type-of(breakpoint-get('no query fallbacks'));\n $print: false;\n\n @if ($type == 'bool') {\n $print: true;\n }\n @else if ($type == 'string') {\n @if $query-fallback == breakpoint-get('no query fallbacks') {\n $print: true;\n }\n }\n @else if ($type == 'list') {\n @each $wrapper in breakpoint-get('no query fallbacks') {\n @if $query-fallback == $wrapper {\n $print: true;\n }\n }\n }\n\n // Write Fallback\n @if ($query-fallback != false) and ($print == true) {\n $type-fallback: type-of($query-fallback);\n\n @if ($type-fallback != 'bool') {\n #{$query-fallback} & {\n @content;\n }\n }\n @else {\n @content;\n }\n }\n }\n\n @include private-breakpoint-reset-contexts();\n}\n\n\n@mixin mq($query, $no-query: false) {\n @include breakpoint($query, $no-query) {\n @content;\n }\n}\n", + "//////////////////////////////\n// Has Setting\n//////////////////////////////\n@function breakpoint-has($setting) {\n @if map-has-key($breakpoint, $setting) {\n @return true;\n }\n @else {\n @return false;\n }\n}\n\n//////////////////////////////\n// Get Settings\n//////////////////////////////\n@function breakpoint-get($setting) {\n @if breakpoint-has($setting) {\n @return map-get($breakpoint, $setting);\n }\n @else {\n @return map-get($Breakpoint-Settings, $setting);\n }\n}\n\n//////////////////////////////\n// Set Settings\n//////////////////////////////\n@function breakpoint-set($setting, $value) {\n @if (str-index($setting, '-') or str-index($setting, '_')) and str-index($setting, ' ') == null {\n @warn \"Words in Breakpoint settings should be separated by spaces, not dashes or underscores. Please replace dashes and underscores between words with spaces. Settings will not work as expected until changed.\";\n }\n $breakpoint: map-merge($breakpoint, ($setting: $value)) !global;\n @return true;\n}\n\n@mixin breakpoint-change($setting, $value) {\n $breakpoint-change: breakpoint-set($setting, $value);\n}\n\n@mixin breakpoint-set($setting, $value) {\n @include breakpoint-change($setting, $value);\n}\n\n@mixin bkpt-change($setting, $value) {\n @include breakpoint-change($setting, $value);\n}\n@mixin bkpt-set($setting, $value) {\n @include breakpoint-change($setting, $value);\n}\n\n//////////////////////////////\n// Remove Setting\n//////////////////////////////\n@function breakpoint-reset($settings...) {\n @if length($settings) == 1 {\n $settings: nth($settings, 1);\n }\n\n @each $setting in $settings {\n $breakpoint: map-remove($breakpoint, $setting) !global;\n }\n @return true;\n}\n\n@mixin breakpoint-reset($settings...) {\n $breakpoint-reset: breakpoint-reset($settings);\n}\n\n@mixin bkpt-reset($settings...) {\n $breakpoint-reset: breakpoint-reset($settings);\n}", + "//////////////////////////////\n// Private Breakpoint Variables\n//////////////////////////////\n$private-breakpoint-context-holder: ();\n$private-breakpoint-query-count: 0 !default;\n\n//////////////////////////////\n// Breakpoint Has Context\n// Returns whether or not you are inside a Breakpoint query\n//////////////////////////////\n@function breakpoint-has-context() {\n @if length($private-breakpoint-query-count) {\n @return true;\n }\n @else {\n @return false;\n }\n}\n\n//////////////////////////////\n// Breakpoint Get Context\n// $feature: Input feature to get it's current MQ context. Returns false if no context\n//////////////////////////////\n@function breakpoint-get-context($feature) {\n @if map-has-key($private-breakpoint-context-holder, $feature) {\n $get: map-get($private-breakpoint-context-holder, $feature);\n // Special handling of no-query from get side so /false/ prepends aren't returned\n @if $feature == 'no-query' {\n @if type-of($get) == 'list' and length($get) > 1 and nth($get, 1) == false {\n $get: nth($get, length($get));\n }\n }\n @return $get;\n }\n @else {\n @if breakpoint-has-context() and $feature == 'media' {\n @return breakpoint-get('default media');\n }\n @else {\n @return false;\n }\n }\n}\n\n//////////////////////////////\n// Private function to set context\n//////////////////////////////\n@function private-breakpoint-set-context($feature, $value) {\n @if $value == 'monochrome' {\n $feature: 'monochrome';\n }\n\n $current: map-get($private-breakpoint-context-holder, $feature);\n @if $current and length($current) == $private-breakpoint-query-count {\n @warn \"You have already queried against `#{$feature}`. Unexpected things may happen if you query against the same feature more than once in the same `and` query. Breakpoint is overwriting the current context with `#{$value}`\";\n }\n\n @if not map-has-key($private-breakpoint-context-holder, $feature) {\n $v-holder: ();\n @for $i from 1 to $private-breakpoint-query-count {\n @if $feature == 'media' {\n $v-holder: append($v-holder, breakpoint-get('default media'));\n }\n @else {\n $v-holder: append($v-holder, false);\n }\n }\n $v-holder: append($v-holder, $value);\n $private-breakpoint-context-holder: map-merge($private-breakpoint-context-holder, ($feature: $v-holder)) !global;\n }\n @else {\n $v-holder: map-get($private-breakpoint-context-holder, $feature);\n $length: length($v-holder);\n @for $i from $length to $private-breakpoint-query-count - 1 {\n @if $feature == 'media' {\n $v-holder: append($v-holder, breakpoint-get('default media'));\n }\n @else {\n $v-holder: append($v-holder, false);\n }\n }\n $v-holder: append($v-holder, $value);\n $private-breakpoint-context-holder: map-merge($private-breakpoint-context-holder, ($feature: $v-holder)) !global;\n }\n\n @return true;\n}\n\n//////////////////////////////\n// Private function to reset context\n//////////////////////////////\n@mixin private-breakpoint-reset-contexts {\n $private-breakpoint-context-holder: () !global;\n $private-breakpoint-query-count: 0 !global;\n}", + "//////////////////////////////\n// Converts the input value to Base EMs\n//////////////////////////////\n@function breakpoint-to-base-em($value) {\n $value-unit: unit($value);\n\n // Will convert relative EMs into root EMs.\n @if breakpoint-get('base font size') and type-of(breakpoint-get('base font size')) == 'number' and $value-unit == 'em' {\n $base-unit: unit(breakpoint-get('base font size'));\n\n @if $base-unit == 'px' or $base-unit == '%' or $base-unit == 'em' or $base-unit == 'pt' {\n @return base-conversion($value) / base-conversion(breakpoint-get('base font size')) * 1em;\n }\n @else {\n @warn '#{breakpoint-get(\\'base font size\\')} is not set in valid units for font size!';\n @return false;\n }\n }\n @else {\n @return base-conversion($value);\n }\n}\n\n@function base-conversion($value) {\n $unit: unit($value);\n\n @if $unit == 'px' {\n @return $value / 16px * 1em;\n }\n @else if $unit == '%' {\n @return $value / 100% * 1em;\n }\n @else if $unit == 'em' {\n @return $value;\n }\n @else if $unit == 'pt' {\n @return $value / 12pt * 1em;\n }\n @else {\n @return $value;\n// @warn 'Everything is terrible! What have you done?!';\n }\n}\n\n//////////////////////////////\n// Returns whether the feature can have a min/max pair\n//////////////////////////////\n$breakpoint-min-max-features: 'color',\n 'color-index',\n 'aspect-ratio',\n 'device-aspect-ratio',\n 'device-height',\n 'device-width',\n 'height',\n 'monochrome',\n 'resolution',\n 'width';\n\n@function breakpoint-min-max($feature) {\n @each $item in $breakpoint-min-max-features {\n @if $feature == $item {\n @return true;\n }\n }\n @return false;\n}\n\n//////////////////////////////\n// Returns whether the feature can have a string value\n//////////////////////////////\n$breakpoint-string-features: 'orientation',\n 'scan',\n 'color',\n 'aspect-ratio',\n 'device-aspect-ratio',\n 'pointer',\n 'luminosity';\n\n@function breakpoint-string-value($feature) {\n @each $item in $breakpoint-string-features {\n @if breakpoint-min-max($item) {\n @if $feature == 'min-#{$item}' or $feature == 'max-#{$item}' {\n @return true;\n }\n }\n @else if $feature == $item {\n @return true;\n }\n }\n @return false;\n}\n\n//////////////////////////////\n// Returns whether the feature is a media type\n//////////////////////////////\n$breakpoint-media-types: 'all',\n 'braille',\n 'embossed',\n 'handheld',\n 'print',\n 'projection',\n 'screen',\n 'speech',\n 'tty',\n 'tv';\n\n@function breakpoint-is-media($feature) {\n @each $media in $breakpoint-media-types {\n @if ($feature == $media) or ($feature == 'not #{$media}') or ($feature == 'only #{$media}') {\n @return true;\n }\n }\n\n @return false;\n}\n\n//////////////////////////////\n// Returns whether the feature can stand alone\n//////////////////////////////\n$breakpoint-single-string-features: 'color',\n 'color-index',\n 'grid',\n 'monochrome';\n\n@function breakpoint-single-string($feature) {\n @each $item in $breakpoint-single-string-features {\n @if $feature == $item {\n @return true;\n }\n }\n @return false;\n}\n\n//////////////////////////////\n// Returns whether the feature\n//////////////////////////////\n@function breakpoint-is-resolution($feature) {\n $resolutions: 'device-pixel-ratio', 'dpr';\n\n @if breakpoint-get('transform resolutions') {\n $resolutions: append($resolutions, 'resolution');\n }\n\n @each $reso in $resolutions {\n @if index($feature, $reso) or index($feature, 'min-#{$reso}') or index($feature, 'max-#{$reso}') {\n @return true;\n }\n }\n\n @return false;\n}\n", + "//////////////////////////////\n// Import Parser Pieces\n//////////////////////////////\n@import \"parsers/query\";\n@import \"parsers/single\";\n@import \"parsers/double\";\n@import \"parsers/triple\";\n@import \"parsers/resolution\";\n\n$Memo-Exists: function-exists(memo-get) and function-exists(memo-set);\n\n//////////////////////////////\n// Breakpoint Function\n//////////////////////////////\n@function breakpoint($query, $contexts...) {\n $run: true;\n $return: ();\n\n // Grab the Memo Output if Memoization can be a thing\n @if $Memo-Exists {\n $return: memo-get(breakpoint, breakpoint $query $contexts);\n\n @if $return != null {\n $run: false;\n }\n }\n\n @if not $Memo-Exists or $run {\n // Internal Variables\n $query-string: '';\n $query-fallback: false;\n $return: ();\n\n // Reserve Global Private Breakpoint Context\n $holder-context: $private-breakpoint-context-holder;\n $holder-query-count: $private-breakpoint-query-count;\n\n // Reset Global Private Breakpoint Context\n $private-breakpoint-context-holder: () !global;\n $private-breakpoint-query-count: 0 !global;\n\n\n // Test to see if it's a comma-separated list\n $or-list: if(list-separator($query) == 'comma', true, false);\n\n\n @if ($or-list == false and breakpoint-get('legacy syntax') == false) {\n $query-string: breakpoint-parse($query);\n }\n @else {\n $length: length($query);\n\n $last: nth($query, $length);\n $query-fallback: breakpoint-no-query($last);\n\n @if ($query-fallback != false) {\n $length: $length - 1;\n }\n\n @if (breakpoint-get('legacy syntax') == true) {\n $mq: ();\n\n @for $i from 1 through $length {\n $mq: append($mq, nth($query, $i), comma);\n }\n\n $query-string: breakpoint-parse($mq);\n }\n @else {\n $query-string: '';\n @for $i from 1 through $length {\n $query-string: $query-string + if($i == 1, '', ', ') + breakpoint-parse(nth($query, $i));\n }\n }\n }\n\n $return: ('query': $query-string,\n 'fallback': $query-fallback,\n 'context holder': $private-breakpoint-context-holder,\n 'query count': $private-breakpoint-query-count\n );\n @if length($contexts) > 0 and nth($contexts, 1) != false {\n @if $query-fallback != false {\n $context-setter: private-breakpoint-set-context('no-query', $query-fallback);\n }\n $context-map: ();\n @each $context in $contexts {\n $context-map: map-merge($context-map, ($context: breakpoint-get-context($context)));\n }\n $return: map-merge($return, (context: $context-map));\n }\n\n // Reset Global Private Breakpoint Context\n $private-breakpoint-context-holder: () !global;\n $private-breakpoint-query-count: 0 !global;\n\n @if $Memo-Exists {\n $holder: memo-set(breakpoint, breakpoint $query $contexts, $return);\n }\n }\n\n @return $return;\n}\n\n//////////////////////////////\n// General Breakpoint Parser\n//////////////////////////////\n@function breakpoint-parse($query) {\n // Increase number of 'and' queries\n $private-breakpoint-query-count: $private-breakpoint-query-count + 1 !global;\n\n // Set up Media Type\n $query-print: '';\n\n $force-all: ((breakpoint-get('force all media type') == true) and (breakpoint-get('default media') == 'all'));\n $empty-media: true;\n @if ($force-all == true) or (breakpoint-get('default media') != 'all') {\n // Force the print of the default media type if (force all is true and default media type is all) or (default media type is not all)\n $query-print: breakpoint-get('default media');\n $empty-media: false;\n }\n\n\n $query-resolution: false;\n\n $query-holder: breakpoint-parse-query($query);\n\n\n\n // Loop over each parsed out query and write it to $query-print\n $first: true;\n\n @each $feature in $query-holder {\n $length: length($feature);\n\n // Parse a single feature\n @if ($length == 1) {\n // Feature is currently a list, grab the actual value\n $feature: nth($feature, 1);\n\n // Media Type must by convention be the first item, so it's safe to flat override $query-print, which right now should only be the default media type\n @if (breakpoint-is-media($feature)) {\n @if ($force-all == true) or ($feature != 'all') {\n // Force the print of the default media type if (force all is true and default media type is all) or (default media type is not all)\n $query-print: $feature;\n $empty-media: false;\n\n // Set Context\n $context-setter: private-breakpoint-set-context(media, $query-print);\n }\n }\n @else {\n $parsed: breakpoint-parse-single($feature, $empty-media, $first);\n $query-print: '#{$query-print} #{$parsed}';\n $first: false;\n }\n }\n // Parse a double feature\n @else if ($length == 2) {\n @if (breakpoint-is-resolution($feature) != false) {\n $query-resolution: $feature;\n }\n @else {\n $parsed: null;\n // If it's a string/number pair,\n // we check to see if one is a single-string value,\n // then we parse it as a normal double\n $alpha: nth($feature, 1);\n $beta: nth($feature, 2);\n @if breakpoint-single-string($alpha) or breakpoint-single-string($beta) {\n $parsed: breakpoint-parse-single($alpha, $empty-media, $first);\n $query-print: '#{$query-print} #{$parsed}';\n $first: false;\n $parsed: breakpoint-parse-single($beta, $empty-media, $first);\n $query-print: '#{$query-print} #{$parsed}';\n }\n @else {\n $parsed: breakpoint-parse-double($feature, $empty-media, $first);\n $query-print: '#{$query-print} #{$parsed}';\n $first: false;\n }\n }\n }\n // Parse a triple feature\n @else if ($length == 3) {\n $parsed: breakpoint-parse-triple($feature, $empty-media, $first);\n $query-print: '#{$query-print} #{$parsed}';\n $first: false;\n }\n\n }\n\n @if ($query-resolution != false) {\n $query-print: breakpoint-build-resolution($query-print, $query-resolution, $empty-media, $first);\n }\n\n // Loop through each feature that's been detected so far and append 'false' to the the value list to increment their counters\n @each $f, $v in $private-breakpoint-context-holder {\n $v-holder: $v;\n $length: length($v-holder);\n @if length($v-holder) < $private-breakpoint-query-count {\n @for $i from $length to $private-breakpoint-query-count {\n @if $f == 'media' {\n $v-holder: append($v-holder, breakpoint-get('default media'));\n }\n @else {\n $v-holder: append($v-holder, false);\n }\n }\n }\n $private-breakpoint-context-holder: map-merge($private-breakpoint-context-holder, ($f: $v-holder)) !global;\n }\n\n @return $query-print;\n}\n", + "@function breakpoint-parse-query($query) {\n // Parse features out of an individual query\n $feature-holder: ();\n $query-holder: ();\n $length: length($query);\n\n @if $length == 2 {\n // If we've got a string/number, number/string, check to see if it's a valid string/number pair or two singles\n @if (type-of(nth($query, 1)) == 'string' and type-of(nth($query, 2)) == 'number') or (type-of(nth($query, 1)) == 'number' and type-of(nth($query, 2)) == 'string') {\n\n $number: '';\n $value: '';\n\n @if type-of(nth($query, 1)) == 'string' {\n $number: nth($query, 2);\n $value: nth($query, 1);\n }\n @else {\n $number: nth($query, 1);\n $value: nth($query, 2);\n }\n\n // If the string value can be a single value, check to see if the number passed in is a valid input for said single value. Fortunately, all current single-value options only accept unitless numbers, so this check is easy.\n @if breakpoint-single-string($value) {\n @if unitless($number) {\n $feature-holder: append($value, $number, space);\n $query-holder: append($query-holder, $feature-holder, comma);\n @return $query-holder;\n }\n }\n // If the string is a media type, split the query\n @if breakpoint-is-media($value) {\n $query-holder: append($query-holder, nth($query, 1));\n $query-holder: append($query-holder, nth($query, 2));\n @return $query-holder;\n }\n // If it's not a single feature, we're just going to assume it's a proper string/value pair, and roll with it.\n @else {\n $feature-holder: append($value, $number, space);\n $query-holder: append($query-holder, $feature-holder, comma);\n @return $query-holder;\n }\n\n }\n // If they're both numbers, we assume it's a double and roll with that\n @else if (type-of(nth($query, 1)) == 'number' and type-of(nth($query, 2)) == 'number') {\n $feature-holder: append(nth($query, 1), nth($query, 2), space);\n $query-holder: append($query-holder, $feature-holder, comma);\n @return $query-holder;\n }\n // If they're both strings and neither are singles, we roll with that.\n @else if (type-of(nth($query, 1)) == 'string' and type-of(nth($query, 2)) == 'string') {\n @if not breakpoint-single-string(nth($query, 1)) and not breakpoint-single-string(nth($query, 2)) {\n $feature-holder: append(nth($query, 1), nth($query, 2), space);\n $query-holder: append($query-holder, $feature-holder, comma);\n @return $query-holder;\n }\n }\n }\n @else if $length == 3 {\n // If we've got three items and none is a list, we check to see\n @if type-of(nth($query, 1)) != 'list' and type-of(nth($query, 2)) != 'list' and type-of(nth($query, 3)) != 'list' {\n // If none of the items are single string values and none of the values are media values, we're good.\n @if (not breakpoint-single-string(nth($query, 1)) and not breakpoint-single-string(nth($query, 2)) and not breakpoint-single-string(nth($query, 3))) and ((not breakpoint-is-media(nth($query, 1)) and not breakpoint-is-media(nth($query, 2)) and not breakpoint-is-media(nth($query, 3)))) {\n $feature-holder: append(nth($query, 1), nth($query, 2), space);\n $feature-holder: append($feature-holder, nth($query, 3), space);\n $query-holder: append($query-holder, $feature-holder, comma);\n @return $query-holder;\n }\n // let's check to see if the first item is a media type\n @else if breakpoint-is-media(nth($query, 1)) {\n $query-holder: append($query-holder, nth($query, 1));\n $feature-holder: append(nth($query, 2), nth($query, 3), space);\n $query-holder: append($query-holder, $feature-holder);\n @return $query-holder;\n }\n }\n }\n\n // If it's a single item, or if it's not a special case double or triple, we can simply return the query.\n @return $query;\n}\n", + "//////////////////////////////\n// Import Pieces\n//////////////////////////////\n@import \"single/default\";\n\n@function breakpoint-parse-single($feature, $empty-media, $first) {\n $parsed: '';\n $leader: '';\n // If we're forcing\n @if not ($empty-media) or not ($first) {\n $leader: 'and ';\n }\n\n // If it's a single feature that can stand alone, we let it\n @if (breakpoint-single-string($feature)) {\n $parsed: $feature;\n // Set Context\n $context-setter: private-breakpoint-set-context($feature, $feature);\n }\n // If it's not a stand alone feature, we pass it off to the default handler.\n @else {\n $parsed: breakpoint-parse-default($feature);\n }\n\n @return $leader + '(' + $parsed + ')';\n}\n", + "@function breakpoint-parse-default($feature) {\n $default: breakpoint-get('default feature');\n\n // Set Context\n $context-setter: private-breakpoint-set-context($default, $feature);\n\n @if (breakpoint-get('to ems') == true) and (type-of($feature) == 'number') {\n @return '#{$default}: #{breakpoint-to-base-em($feature)}';\n }\n @else {\n @return '#{$default}: #{$feature}';\n }\n}\n", + "//////////////////////////////\n// Import Pieces\n//////////////////////////////\n@import \"double/default-pair\";\n@import \"double/double-string\";\n@import \"double/default\";\n\n@function breakpoint-parse-double($feature, $empty-media, $first) {\n $parsed: '';\n $leader: '';\n // If we're forcing\n @if not ($empty-media) or not ($first) {\n $leader: 'and ';\n }\n\n $first: nth($feature, 1);\n $second: nth($feature, 2);\n\n // If we've got two numbers, we know we need to use the default pair because there are no media queries that has a media feature that is a number\n @if type-of($first) == 'number' and type-of($second) == 'number' {\n $parsed: breakpoint-parse-default-pair($first, $second);\n }\n // If they are both strings, we send it through the string parser\n @else if type-of($first) == 'string' and type-of($second) == 'string' {\n $parsed: breakpoint-parse-double-string($first, $second);\n }\n // If it's a string/number pair, we parse it as a normal double\n @else {\n $parsed: breakpoint-parse-double-default($first, $second);\n }\n\n @return $leader + $parsed;\n}\n", + "@function breakpoint-parse-default-pair($first, $second) {\n $default: breakpoint-get('default pair');\n $min: '';\n $max: '';\n\n // Sort into min and max\n $min: min($first, $second);\n $max: max($first, $second);\n\n // Set Context\n $context-setter: private-breakpoint-set-context(min-#{$default}, $min);\n $context-setter: private-breakpoint-set-context(max-#{$default}, $max);\n\n // Make them EMs if need be\n @if (breakpoint-get('to ems') == true) {\n $min: breakpoint-to-base-em($min);\n $max: breakpoint-to-base-em($max);\n }\n\n @return '(min-#{$default}: #{$min}) and (max-#{$default}: #{$max})';\n}\n", + "@function breakpoint-parse-double-string($first, $second) {\n $feature: '';\n $value: '';\n\n // Test to see which is the feature and which is the value\n @if (breakpoint-string-value($first) == true) {\n $feature: $first;\n $value: $second;\n }\n @else if (breakpoint-string-value($second) == true) {\n $feature: $second;\n $value: $first;\n }\n @else {\n @warn \"Neither #{$first} nor #{$second} is a valid media query name.\";\n }\n\n // Set Context\n $context-setter: private-breakpoint-set-context($feature, $value);\n\n @return '(#{$feature}: #{$value})';\n}", + "@function breakpoint-parse-double-default($first, $second) {\n $feature: '';\n $value: '';\n\n @if type-of($first) == 'string' {\n $feature: $first;\n $value: $second;\n }\n @else {\n $feature: $second;\n $value: $first;\n }\n\n // Set Context\n $context-setter: private-breakpoint-set-context($feature, $value);\n\n @if (breakpoint-get('to ems') == true) {\n $value: breakpoint-to-base-em($value);\n }\n\n @return '(#{$feature}: #{$value})'\n}\n", + "//////////////////////////////\n// Import Pieces\n//////////////////////////////\n@import \"triple/default\";\n\n@function breakpoint-parse-triple($feature, $empty-media, $first) {\n $parsed: '';\n $leader: '';\n\n // If we're forcing\n @if not ($empty-media) or not ($first) {\n $leader: 'and ';\n }\n\n // separate the string features from the value numbers\n $string: null;\n $numbers: null;\n @each $val in $feature {\n @if type-of($val) == string {\n $string: $val;\n }\n @else {\n @if type-of($numbers) == 'null' {\n $numbers: $val;\n }\n @else {\n $numbers: append($numbers, $val);\n }\n }\n }\n\n $parsed: breakpoint-parse-triple-default($string, nth($numbers, 1), nth($numbers, 2));\n\n @return $leader + $parsed;\n\n}\n", + "@function breakpoint-parse-triple-default($feature, $first, $second) {\n\n // Sort into min and max\n $min: min($first, $second);\n $max: max($first, $second);\n\n // Set Context\n $context-setter: private-breakpoint-set-context(min-#{$feature}, $min);\n $context-setter: private-breakpoint-set-context(max-#{$feature}, $max);\n\n // Make them EMs if need be\n @if (breakpoint-get('to ems') == true) {\n $min: breakpoint-to-base-em($min);\n $max: breakpoint-to-base-em($max);\n }\n\n @return '(min-#{$feature}: #{$min}) and (max-#{$feature}: #{$max})';\n}\n", + "@import \"resolution/resolution\";\n\n@function breakpoint-build-resolution($query-print, $query-resolution, $empty-media, $first) {\n $leader: '';\n // If we're forcing\n @if not ($empty-media) or not ($first) {\n $leader: 'and ';\n }\n\n @if breakpoint-get('transform resolutions') and $query-resolution {\n $resolutions: breakpoint-make-resolutions($query-resolution);\n $length: length($resolutions);\n $query-holder: '';\n\n @for $i from 1 through $length {\n $query: '#{$query-print} #{$leader}#{nth($resolutions, $i)}';\n @if $i == 1 {\n $query-holder: $query;\n }\n @else {\n $query-holder: '#{$query-holder}, #{$query}';\n }\n }\n\n @return $query-holder;\n }\n @else {\n // Return with attached resolution\n @return $query-print;\n }\n}\n", + "@function breakpoint-make-resolutions($resolution) {\n $length: length($resolution);\n\n $output: ();\n\n @if $length == 2 {\n $feature: '';\n $value: '';\n\n // Find which is number\n @if type-of(nth($resolution, 1)) == 'number' {\n $value: nth($resolution, 1);\n }\n @else {\n $value: nth($resolution, 2);\n }\n\n // Determine min/max/standard\n @if index($resolution, 'min-resolution') {\n $feature: 'min-';\n }\n @else if index($resolution, 'max-resolution') {\n $feature: 'max-';\n }\n\n $standard: '(#{$feature}resolution: #{$value})';\n\n // If we're not dealing with dppx,\n @if unit($value) != 'dppx' {\n $base: 96dpi;\n @if unit($value) == 'dpcm' {\n $base: 243.84dpcm;\n }\n // Write out feature tests\n $webkit: '';\n $moz: '';\n $webkit: '(-webkit-#{$feature}device-pixel-ratio: #{$value / $base})';\n $moz: '(#{$feature}-moz-device-pixel-ratio: #{$value / $base})';\n // Append to output\n $output: append($output, $standard, space);\n $output: append($output, $webkit, space);\n $output: append($output, $moz, space);\n }\n @else {\n $webkit: '';\n $moz: '';\n $webkit: '(-webkit-#{$feature}device-pixel-ratio: #{$value / 1dppx})';\n $moz: '(#{$feature}-moz-device-pixel-ratio: #{$value / 1dppx})';\n $fallback: '(#{$feature}resolution: #{$value / 1dppx * 96dpi})';\n // Append to output\n $output: append($output, $standard, space);\n $output: append($output, $webkit, space);\n $output: append($output, $moz, space);\n $output: append($output, $fallback, space);\n }\n\n }\n\n @return $output;\n}\n", + "@function breakpoint-no-query($query) {\n @if type-of($query) == 'list' {\n $keyword: nth($query, 1);\n\n @if type-of($keyword) == 'string' and ($keyword == 'no-query' or $keyword == 'no query' or $keyword == 'fallback') {\n @return nth($query, 2);\n }\n @else {\n @return false;\n }\n }\n @else {\n @return false;\n }\n}\n", + "////////////////////////\n// Default the Breakpoints variable\n////////////////////////\n$breakpoints: () !default;\n$BREAKPOINTS: () !default;\n\n////////////////////////\n// Respond-to API Mixin\n////////////////////////\n@mixin respond-to($context, $no-query: false) {\n @if length($breakpoints) > 0 and length($BREAKPOINTS) == 0 {\n @warn \"In order to avoid variable namespace collisions, we have updated the way to add breakpoints for respond-to. Please change all instances of `$breakpoints: add-breakpoint()` to `@include add-breakpoint()`. The `add-breakpoint()` function will be deprecated in a future release.\";\n $BREAKPOINTS: $breakpoints !global;\n $breakpoints: () !global;\n }\n\n @if type-of($BREAKPOINTS) != 'map' {\n // Just in case someone writes gibberish to the $breakpoints variable.\n @warn \"Your breakpoints aren't a map! `respond-to` expects a map. Please check the value of $BREAKPOINTS variable.\";\n @content;\n }\n @else if map-has-key($BREAKPOINTS, $context) {\n @include breakpoint(map-get($BREAKPOINTS, $context), $no-query) {\n @content;\n }\n }\n @else if not map-has-key($BREAKPOINTS, $context) {\n @warn \"`#{$context}` isn't a defined breakpoint! Please add it using `$breakpoints: add-breakpoint(`#{$context}`, $value);`\";\n @content;\n }\n @else {\n @warn \"You haven't created any breakpoints yet! Make some already! `@include add-breakpoint($name, $bkpt)`\";\n @content;\n }\n}\n\n//////////////////////////////\n// Add Breakpoint to Breakpoints\n// TODO: Remove function in next release\n//////////////////////////////\n@function add-breakpoint($name, $bkpt, $overwrite: false) {\n $output: ($name: $bkpt);\n\n @if length($breakpoints) == 0 {\n @return $output;\n }\n @else {\n @if map-has-key($breakpoints, $name) and $overwrite != true {\n @warn \"You already have a breakpoint named `#{$name}`, please choose another breakpoint name, or pass in `$overwrite: true` to overwrite the previous breakpoint.\";\n @return $breakpoints;\n }\n @else if not map-has-key($breakpoints, $name) or $overwrite == true {\n @return map-merge($breakpoints, $output);\n }\n }\n}\n\n@mixin add-breakpoint($name, $bkpt, $overwrite: false) {\n $output: ($name: $bkpt);\n\n @if length($BREAKPOINTS) == 0 {\n $BREAKPOINTS: $output !global;\n }\n @else {\n @if map-has-key($BREAKPOINTS, $name) and $overwrite != true {\n @warn \"You already have a breakpoint named `#{$name}`, please choose another breakpoint name, or pass in `$overwrite: true` to overwrite the previous breakpoint.\";\n $BREAKPOINTS: $BREAKPOINTS !global;\n }\n @else if not map-has-key($BREAKPOINTS, $name) or $overwrite == true {\n $BREAKPOINTS: map-merge($BREAKPOINTS, $output) !global;\n }\n }\n}\n\n@function get-breakpoint($name: false) {\n @if $name == false {\n @return $BREAKPOINTS;\n }\n @else {\n @return map-get($BREAKPOINTS, $name);\n }\n}\n", + "@mixin legacy-settings-warning {\n $legacyVars: (\n 'default-media': 'default media',\n 'default-feature': 'default feature',\n 'force-media-all': 'force all media type',\n 'to-ems': 'to ems',\n 'resolutions': 'transform resolutions',\n 'no-queries': 'no queries',\n 'no-query-fallbacks': 'no query fallbacks',\n 'base-font-size': 'base font size',\n 'legacy-syntax': 'legacy syntax'\n );\n\n @each $legacy, $new in $legacyVars {\n @if global-variable-exists('breakpoint-' + $legacy) {\n @warn \"In order to avoid variable namspace collisions, we have updated the way to change settings for Breakpoint. Please change all instances of `$breakpoint-#{$legacy}: {{setting}}` to `@include breakpoint-set('#{$new}', {{setting}})`. Variable settings, as well as this warning will be deprecated in a future release.\"\n }\n };\n\n //////////////////////////////\n // Hand correct each setting\n //////////////////////////////\n @if global-variable-exists('breakpoint-default-media') and $breakpoint-default-media != breakpoint-get('default media') {\n @include breakpoint-set('default media', $breakpoint-default-media);\n }\n @if global-variable-exists('breakpoint-default-feature') and $breakpoint-default-feature != breakpoint-get('default feature') {\n @include breakpoint-set('default feature', $breakpoint-default-feature);\n }\n @if global-variable-exists('breakpoint-force-media-all') and $breakpoint-force-media-all != breakpoint-get('force all media type') {\n @include breakpoint-set('force all media type', $breakpoint-force-media-all);\n }\n @if global-variable-exists('breakpoint-to-ems') and $breakpoint-to-ems != breakpoint-get('to ems') {\n @include breakpoint-set('to ems', $breakpoint-to-ems);\n }\n @if global-variable-exists('breakpoint-resolutions') and $breakpoint-resolutions != breakpoint-get('transform resolutions') {\n @include breakpoint-set('transform resolutions', $breakpoint-resolutions);\n }\n @if global-variable-exists('breakpoint-no-queries') and $breakpoint-no-queries != breakpoint-get('no queries') {\n @include breakpoint-set('no queries', $breakpoint-no-queries);\n }\n @if global-variable-exists('breakpoint-no-query-fallbacks') and $breakpoint-no-query-fallbacks != breakpoint-get('no query fallbacks') {\n @include breakpoint-set('no query fallbacks', $breakpoint-no-query-fallbacks);\n }\n @if global-variable-exists('breakpoint-base-font-size') and $breakpoint-base-font-size != breakpoint-get('base font size') {\n @include breakpoint-set('base font size', $breakpoint-base-font-size);\n }\n @if global-variable-exists('breakpoint-legacy-syntax') and $breakpoint-legacy-syntax != breakpoint-get('legacy syntax') {\n @include breakpoint-set('legacy syntax', $breakpoint-legacy-syntax);\n }\n}", + "/* Magnific Popup CSS */\n\n@import \"settings\";\n\n////////////////////////\n//\n// Contents:\n//\n// 1. Default Settings\n// 2. General styles\n// - Transluscent overlay\n// - Containers, wrappers\n// - Cursors\n// - Helper classes\n// 3. Appearance\n// - Preloader & text that displays error messages\n// - CSS reset for buttons\n// - Close icon\n// - \"1 of X\" counter\n// - Navigation (left/right) arrows\n// - Iframe content type styles\n// - Image content type styles\n// - Media query where size of arrows is reduced\n// - IE7 support\n//\n////////////////////////\n\n\n\n////////////////////////\n// 1. Default Settings\n////////////////////////\n\n$mfp-overlay-color: #0b0b0b !default;\n$mfp-overlay-opacity: 0.8 !default;\n$mfp-shadow: 0 0 8px rgba(0, 0, 0, 0.6) !default; // shadow on image or iframe\n$mfp-popup-padding-left: 8px !default; // Padding from left and from right side\n$mfp-popup-padding-left-mobile: 6px !default; // Same as above, but is applied when width of window is less than 800px\n\n$mfp-z-index-base: 1040 !default; // Base z-index of popup\n$mfp-include-arrows: true !default; // include styles for nav arrows\n$mfp-controls-opacity: 0.65 !default;\n$mfp-controls-color: #FFF !default;\n$mfp-controls-border-color: #3F3F3F !default;\n$mfp-inner-close-icon-color: #333 !default;\n$mfp-controls-text-color: #CCC !default; // Color of preloader and \"1 of X\" indicator\n$mfp-controls-text-color-hover: #FFF !default;\n$mfp-IE7support: true !default; // Very basic IE7 support\n\n// Iframe-type options\n$mfp-include-iframe-type: true !default;\n$mfp-iframe-padding-top: 40px !default;\n$mfp-iframe-background: #000 !default;\n$mfp-iframe-max-width: 900px !default;\n$mfp-iframe-ratio: 9/16 !default;\n\n// Image-type options\n$mfp-include-image-type: true !default;\n$mfp-image-background: #444 !default;\n$mfp-image-padding-top: 40px !default;\n$mfp-image-padding-bottom: 40px !default;\n$mfp-include-mobile-layout-for-image: true !default; // Removes paddings from top and bottom\n\n// Image caption options\n$mfp-caption-title-color: #F3F3F3 !default;\n$mfp-caption-subtitle-color: #BDBDBD !default;\n\n// A11y\n$mfp-use-visuallyhidden: false !default; // Hide content from browsers, but make it available for screen readers\n\n\n\n////////////////////////\n// 2. General styles\n////////////////////////\n\n// Transluscent overlay\n.mfp-bg {\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: $mfp-z-index-base + 2;\n overflow: hidden;\n position: fixed;\n\n background: $mfp-overlay-color;\n opacity: $mfp-overlay-opacity;\n @if $mfp-IE7support {\n filter: unquote(\"alpha(opacity=#{$mfp-overlay-opacity*100})\");\n }\n}\n\n// Wrapper for popup\n.mfp-wrap {\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: $mfp-z-index-base + 3;\n position: fixed;\n outline: none !important;\n -webkit-backface-visibility: hidden; // fixes webkit bug that can cause \"false\" scrollbar\n}\n\n// Root container\n.mfp-container {\n text-align: center;\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n padding: 0 $mfp-popup-padding-left;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n\n// Vertical centerer helper\n.mfp-container {\n &:before {\n content: '';\n display: inline-block;\n height: 100%;\n vertical-align: middle;\n }\n}\n\n// Remove vertical centering when popup has class `mfp-align-top`\n.mfp-align-top {\n .mfp-container {\n &:before {\n display: none;\n }\n }\n}\n\n// Popup content holder\n.mfp-content {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n margin: 0 auto;\n text-align: left;\n z-index: $mfp-z-index-base + 5;\n}\n.mfp-inline-holder,\n.mfp-ajax-holder {\n .mfp-content {\n width: 100%;\n cursor: auto;\n }\n}\n\n// Cursors\n.mfp-ajax-cur {\n cursor: progress;\n}\n.mfp-zoom-out-cur {\n &, .mfp-image-holder .mfp-close {\n cursor: -moz-zoom-out;\n cursor: -webkit-zoom-out;\n cursor: zoom-out;\n }\n}\n.mfp-zoom {\n cursor: pointer;\n cursor: -webkit-zoom-in;\n cursor: -moz-zoom-in;\n cursor: zoom-in;\n}\n.mfp-auto-cursor {\n .mfp-content {\n cursor: auto;\n }\n}\n\n.mfp-close,\n.mfp-arrow,\n.mfp-preloader,\n.mfp-counter {\n -webkit-user-select:none;\n -moz-user-select: none;\n user-select: none;\n}\n\n// Hide the image during the loading\n.mfp-loading {\n &.mfp-figure {\n display: none;\n }\n}\n\n// Helper class that hides stuff\n@if $mfp-use-visuallyhidden {\n // From HTML5 Boilerplate https://github.com/h5bp/html5-boilerplate/blob/v4.2.0/doc/css.md#visuallyhidden\n .mfp-hide {\n border: 0 !important;\n clip: rect(0 0 0 0) !important;\n height: 1px !important;\n margin: -1px !important;\n overflow: hidden !important;\n padding: 0 !important;\n position: absolute !important;\n width: 1px !important;\n }\n} @else {\n .mfp-hide {\n display: none !important;\n }\n}\n\n\n////////////////////////\n// 3. Appearance\n////////////////////////\n\n// Preloader and text that displays error messages\n.mfp-preloader {\n color: $mfp-controls-text-color;\n position: absolute;\n top: 50%;\n width: auto;\n text-align: center;\n margin-top: -0.8em;\n left: 8px;\n right: 8px;\n z-index: $mfp-z-index-base + 4;\n a {\n color: $mfp-controls-text-color;\n &:hover {\n color: $mfp-controls-text-color-hover;\n }\n }\n}\n\n// Hide preloader when content successfully loaded\n.mfp-s-ready {\n .mfp-preloader {\n display: none;\n }\n}\n\n// Hide content when it was not loaded\n.mfp-s-error {\n .mfp-content {\n display: none;\n }\n}\n\n// CSS-reset for buttons\nbutton {\n &.mfp-close,\n &.mfp-arrow {\n overflow: visible;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n display: block;\n outline: none;\n padding: 0;\n z-index: $mfp-z-index-base + 6;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n &::-moz-focus-inner {\n padding: 0;\n border: 0\n }\n}\n\n\n// Close icon\n.mfp-close {\n width: 44px;\n height: 44px;\n line-height: 44px;\n\n position: absolute;\n right: 0;\n top: 0;\n text-decoration: none;\n text-align: center;\n opacity: $mfp-controls-opacity;\n @if $mfp-IE7support {\n filter: unquote(\"alpha(opacity=#{$mfp-controls-opacity*100})\");\n }\n padding: 0 0 18px 10px;\n color: $mfp-controls-color;\n\n font-style: normal;\n font-size: 28px;\n font-family: $serif;\n\n &:hover,\n &:focus {\n opacity: 1;\n @if $mfp-IE7support {\n filter: unquote(\"alpha(opacity=#{1*100})\");\n }\n }\n\n &:active {\n top: 1px;\n }\n}\n.mfp-close-btn-in {\n .mfp-close {\n color: $mfp-inner-close-icon-color;\n }\n}\n.mfp-image-holder,\n.mfp-iframe-holder {\n .mfp-close {\n color: $mfp-controls-color;\n right: -6px;\n text-align: right;\n padding-right: 6px;\n width: 100%;\n }\n}\n\n// \"1 of X\" counter\n.mfp-counter {\n position: absolute;\n top: 0;\n right: 0;\n color: $mfp-controls-text-color;\n font-size: 12px;\n line-height: 18px;\n}\n\n// Navigation arrows\n@if $mfp-include-arrows {\n .mfp-arrow {\n position: absolute;\n opacity: $mfp-controls-opacity;\n @if $mfp-IE7support {\n filter: unquote(\"alpha(opacity=#{$mfp-controls-opacity*100})\");\n }\n margin: 0;\n top: 50%;\n margin-top: -55px;\n padding: 0;\n width: 90px;\n height: 110px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n &:active {\n margin-top: -54px;\n }\n &:hover,\n &:focus {\n opacity: 1;\n @if $mfp-IE7support {\n filter: unquote(\"alpha(opacity=#{1*100})\");\n }\n }\n &:before,\n &:after,\n .mfp-b,\n .mfp-a {\n content: '';\n display: block;\n width: 0;\n height: 0;\n position: absolute;\n left: 0;\n top: 0;\n margin-top: 35px;\n margin-left: 35px;\n border: medium inset transparent;\n }\n\n &:after,\n .mfp-a {\n\n border-top-width: 13px;\n border-bottom-width: 13px;\n top:8px;\n }\n\n &:before,\n .mfp-b {\n border-top-width: 21px;\n border-bottom-width: 21px;\n opacity: 0.7;\n }\n\n }\n\n .mfp-arrow-left {\n left: 0;\n\n &:after,\n .mfp-a {\n border-right: 17px solid $mfp-controls-color;\n margin-left: 31px;\n }\n &:before,\n .mfp-b {\n margin-left: 25px;\n border-right: 27px solid $mfp-controls-border-color;\n }\n }\n\n .mfp-arrow-right {\n right: 0;\n &:after,\n .mfp-a {\n border-left: 17px solid $mfp-controls-color;\n margin-left: 39px\n }\n &:before,\n .mfp-b {\n border-left: 27px solid $mfp-controls-border-color;\n }\n }\n}\n\n\n\n// Iframe content type\n@if $mfp-include-iframe-type {\n .mfp-iframe-holder {\n padding-top: $mfp-iframe-padding-top;\n padding-bottom: $mfp-iframe-padding-top;\n .mfp-content {\n line-height: 0;\n width: 100%;\n max-width: $mfp-iframe-max-width;\n }\n .mfp-close {\n top: -40px;\n }\n }\n .mfp-iframe-scaler {\n width: 100%;\n height: 0;\n overflow: hidden;\n padding-top: $mfp-iframe-ratio * 100%;\n iframe {\n position: absolute;\n display: block;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n box-shadow: $mfp-shadow;\n background: $mfp-iframe-background;\n }\n }\n}\n\n\n\n// Image content type\n@if $mfp-include-image-type {\n\n /* Main image in popup */\n img {\n &.mfp-img {\n width: auto;\n max-width: 100%;\n height: auto;\n display: block;\n line-height: 0;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n padding: $mfp-image-padding-top 0 $mfp-image-padding-bottom;\n margin: 0 auto;\n }\n }\n\n /* The shadow behind the image */\n .mfp-figure {\n line-height: 0;\n &:after {\n content: '';\n position: absolute;\n left: 0;\n top: $mfp-image-padding-top;\n bottom: $mfp-image-padding-bottom;\n display: block;\n right: 0;\n width: auto;\n height: auto;\n z-index: -1;\n box-shadow: $mfp-shadow;\n background: $mfp-image-background;\n }\n small {\n color: $mfp-caption-subtitle-color;\n display: block;\n font-size: 12px;\n line-height: 14px;\n }\n figure {\n margin: 0;\n }\n figcaption {\n margin-top: 0;\n margin-bottom: 0; // reset for bottom spacing\n }\n }\n .mfp-bottom-bar {\n margin-top: -$mfp-image-padding-bottom + 4;\n position: absolute;\n top: 100%;\n left: 0;\n width: 100%;\n cursor: auto;\n }\n .mfp-title {\n text-align: left;\n line-height: 18px;\n color: $mfp-caption-title-color;\n word-wrap: break-word;\n padding-right: 36px; // leave some space for counter at right side\n }\n\n .mfp-image-holder {\n .mfp-content {\n max-width: 100%;\n }\n }\n\n .mfp-gallery {\n .mfp-image-holder {\n .mfp-figure {\n cursor: pointer;\n }\n }\n }\n\n\n @if $mfp-include-mobile-layout-for-image {\n @media screen and (max-width: 800px) and (orientation:landscape), screen and (max-height: 300px) {\n /**\n * Remove all paddings around the image on small screen\n */\n .mfp-img-mobile {\n .mfp-image-holder {\n padding-left: 0;\n padding-right: 0;\n }\n img {\n &.mfp-img {\n padding: 0;\n }\n }\n .mfp-figure {\n // The shadow behind the image\n &:after {\n top: 0;\n bottom: 0;\n }\n small {\n display: inline;\n margin-left: 5px;\n }\n }\n .mfp-bottom-bar {\n background: rgba(0,0,0,0.6);\n bottom: 0;\n margin: 0;\n top: auto;\n padding: 3px 5px;\n position: fixed;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n &:empty {\n padding: 0;\n }\n }\n .mfp-counter {\n right: 5px;\n top: 3px;\n }\n .mfp-close {\n top: 0;\n right: 0;\n width: 35px;\n height: 35px;\n line-height: 35px;\n background: rgba(0, 0, 0, 0.6);\n position: fixed;\n text-align: center;\n padding: 0;\n }\n }\n }\n }\n}\n\n\n\n// Scale navigation arrows and reduce padding from sides\n@media all and (max-width: 900px) {\n .mfp-arrow {\n -webkit-transform: scale(0.75);\n transform: scale(0.75);\n }\n .mfp-arrow-left {\n -webkit-transform-origin: 0;\n transform-origin: 0;\n }\n .mfp-arrow-right {\n -webkit-transform-origin: 100%;\n transform-origin: 100%;\n }\n .mfp-container {\n padding-left: $mfp-popup-padding-left-mobile;\n padding-right: $mfp-popup-padding-left-mobile;\n }\n}\n\n\n\n// IE7 support\n// Styles that make popup look nicier in old IE\n@if $mfp-IE7support {\n .mfp-ie7 {\n .mfp-img {\n padding: 0;\n }\n .mfp-bottom-bar {\n width: 600px;\n left: 50%;\n margin-left: -300px;\n margin-top: 5px;\n padding-bottom: 5px;\n }\n .mfp-container {\n padding: 0;\n }\n .mfp-content {\n padding-top: 44px;\n }\n .mfp-close {\n top: 0;\n right: 0;\n padding-top: 0;\n }\n }\n}\n", + "////////////////////////\n// Settings //\n////////////////////////\n\n// overlay\n$mfp-overlay-color: #000; // Color of overlay screen\n$mfp-overlay-opacity: 0.8; // Opacity of overlay screen\n$mfp-shadow: 0 0 8px rgba(0, 0, 0, 0.6); // Shadow on image or iframe\n\n// spacing\n$mfp-popup-padding-left: 8px; // Padding from left and from right side\n$mfp-popup-padding-left-mobile: 6px; // Same as above, but is applied when width of window is less than 800px\n\n$mfp-z-index-base: 1040; // Base z-index of popup\n\n// controls\n$mfp-include-arrows: true; // Include styles for nav arrows\n$mfp-controls-opacity: 1; // Opacity of controls\n$mfp-controls-color: #fff; // Color of controls\n$mfp-controls-border-color: #fff; // Border color of controls\n$mfp-inner-close-icon-color: #fff; // Color of close button when inside\n$mfp-controls-text-color: #ccc; // Color of preloader and \"1 of X\" indicator\n$mfp-controls-text-color-hover: #fff; // Hover color of preloader and \"1 of X\" indicator\n$mfp-IE7support: true; // Very basic IE7 support\n\n// Iframe-type options\n$mfp-include-iframe-type: true; // Enable Iframe-type popups\n$mfp-iframe-padding-top: 40px; // Iframe padding top\n$mfp-iframe-background: #000; // Background color of iframes\n$mfp-iframe-max-width: 900px; // Maximum width of iframes\n$mfp-iframe-ratio: 9/16; // Ratio of iframe (9/16 = widescreen, 3/4 = standard, etc.)\n\n// Image-type options\n$mfp-include-image-type: true; // Enable Image-type popups\n$mfp-image-background: #444 !default;\n$mfp-image-padding-top: 40px; // Image padding top\n$mfp-image-padding-bottom: 40px; // Image padding bottom\n$mfp-include-mobile-layout-for-image: true; // Removes paddings from top and bottom\n\n// Image caption options\n$mfp-caption-title-color: #f3f3f3; // Caption title color\n$mfp-caption-subtitle-color: #bdbdbd; // Caption subtitle color\n.mfp-counter { font-family: $serif; } // Caption font family\n\n// A11y\n$mfp-use-visuallyhidden: false;", + "// Susy (Un-Prefixed)\n// ==================\n\n@import 'susy-prefix';\n@import 'susy/unprefix';\n", + "// Susy (Prefixed)\n// ===============\n\n$susy-version: 3;\n\n@import 'susy/utilities';\n@import 'susy/su-validate';\n@import 'susy/su-math';\n@import 'susy/settings';\n@import 'susy/normalize';\n@import 'susy/parse';\n@import 'susy/syntax-helpers';\n@import 'susy/api';\n", + "// Sass Utilities\n// ==============\n// - Susy Error Output Override [variable]\n// - Susy Error [function]\n\n\n\n// Susy Error Output Override\n// --------------------------\n/// Turn off error output for testing\n/// @group x-utility\n/// @access private\n$_susy-error-output-override: false !default;\n\n\n\n// Susy Error\n// ----------\n/// Optionally return error messages without failing,\n/// as a way to test error cases\n///\n/// @group x-utility\n/// @access private\n///\n/// @param {string} $message -\n/// A useful error message, explaining the problem\n/// @param {string} $source -\n/// The original source of the error for debugging\n/// @param {bool} $override [$_susy-error-output-override] -\n/// Optionally return the error rather than failing\n/// @return {string} -\n/// Combined error with source and message\n/// @throws When `$override == true`\n@function _susy-error(\n $message,\n $source,\n $override: $_susy-error-output-override\n) {\n @if $override {\n @return 'ERROR [#{$source}] #{$message}';\n }\n\n @error '[#{$source}] #{$message}';\n}\n\n\n// Su Is Comparable\n// ----------------\n/// Check that the units in a grid are comparable\n///\n/// @group x-validation\n/// @access private\n///\n/// @param {numbers} $lengths… -\n/// Arglist of all the number values to compare\n/// (columns, gutters, span, etc)\n///\n/// @return {'fluid' | 'static' | false} -\n/// The type of span (fluid or static) when units match,\n/// or `false` for mismatched units\n@function _su-is-comparable(\n $lengths...\n) {\n $first: nth($lengths, 1);\n\n @if (length($lengths) == 1) {\n @return if(unitless($first), 'fluid', 'static');\n }\n\n @for $i from 2 through length($lengths) {\n $comp: nth($lengths, $i);\n\n $fail: not comparable($first, $comp);\n $fail: $fail or (unitless($first) and not unitless($comp));\n $fail: $fail or (unitless($comp) and not unitless($first));\n\n @if $fail {\n @return false;\n }\n }\n\n @return if(unitless($first), 'fluid', 'static');\n}\n\n\n// Su Map Add Units\n// ----------------\n/// The calc features use a map of units and values\n/// to compile the proper algorythm.\n/// This function adds a new value to any comparable existing unit/value,\n/// or adds a new unit/value pair to the map\n///\n/// @group x-utility\n/// @access private\n///\n/// @param {map} $map -\n/// A map of unit/value pairs, e.g. ('px': 120px)\n/// @param {length} $value -\n/// A new length to be added to the map\n/// @return {map} -\n/// The updated map, with new value added\n///\n/// @example scss -\n/// $map: (0px: 120px);\n/// $map: _su-map-add-units($map, 1in); // add a comparable unit\n/// $map: _su-map-add-units($map, 3vw); // add a new unit\n///\n/// @each $units, $value in $map {\n/// /* #{$units}: #{$value} */\n/// }\n@function _su-map-add-units(\n $map,\n $value\n) {\n $unit: $value * 0;\n $has: map-get($map, $unit) or 0;\n\n @if ($has == 0) {\n @each $try, $could in $map {\n $match: comparable($try, $value);\n $unit: if($match, $try, $unit);\n $has: if($match, $could, $has);\n }\n }\n\n @return map-merge($map, ($unit: $has + $value));\n}\n\n\n// Susy Flatten\n// ------------\n/// Flatten a multidimensional list\n///\n/// @group x-utility\n/// @access private\n///\n/// @param {list} $list -\n/// The list to be flattened\n/// @return {list} -\n/// The flattened list\n///\n/// @example scss -\n/// $list: 120px (30em 30em) 120px;\n/// /* #{_susy-flatten($list)} */\n@function _susy-flatten(\n $list\n) {\n $flat: ();\n\n // Don't iterate over maps\n @if (type-of($list) == 'map') {\n @return $list;\n }\n\n // Iterate over lists (or single items)\n @each $item in $list {\n @if (type-of($item) == 'list') {\n $item: _susy-flatten($item);\n $flat: join($flat, $item);\n } @else {\n $flat: append($flat, $item);\n }\n }\n\n // Return flattened list\n @return $flat;\n}\n", + "/// Validation\n/// ==========\n/// Each argument to Su has a single canonical syntax.\n/// These validation functions check to ensure\n/// that each argument is valid,\n/// in order to provide useful errors\n/// before attempting to calculate the results/\n///\n/// @group x-validation\n///\n/// @see su-valid-columns\n/// @see su-valid-gutters\n/// @see su-valid-spread\n/// @see su-valid-location\n\n\n\n// Valid Span\n// ----------\n/// Check that the `span` argument\n/// is a number, length, or column-list\n///\n/// @group x-validation\n///\n/// @param {number | list} $span -\n/// Number of columns, or length of span\n///\n/// @return {number | list} -\n/// Validated `$span` number, length, or columns list\n///\n/// @throw\n/// when span value is not a number, or valid column list\n@function su-valid-span(\n $span\n) {\n $type: type-of($span);\n @if ($type == 'number') {\n @return $span;\n } @else if ($type == 'list') and su-valid-columns($span, 'silent-failure') {\n @return $span;\n }\n\n $actual: '[#{type-of($span)}] `#{inspect($span)}`';\n @return _susy-error(\n '#{$actual} is not a valid number, length, or column-list for $span.',\n 'su-valid-span');\n}\n\n\n\n// Valid Columns\n// -------------\n/// Check that the `columns` argument is a valid\n/// list of column-lengths\n///\n/// @group x-validation\n///\n/// @param {list} $columns -\n/// List of column-lengths\n/// @param {bool} $silent-failure [true] -\n/// Set false to return null on failure\n///\n/// @return {list} -\n/// Validated `$columns` list\n///\n/// @throw\n/// when column value is not a valid list of numbers\n@function su-valid-columns(\n $columns,\n $silent-failure: false\n) {\n @if (type-of($columns) == 'list') {\n $fail: false;\n\n @each $col in $columns {\n @if (type-of($col) != 'number') {\n $fail: true;\n }\n }\n\n @if not $fail {\n @return $columns;\n }\n }\n\n // Silent Failure\n @if $silent-failure {\n @return null;\n }\n\n // Error Message\n $actual: '[#{type-of($columns)}] `#{inspect($columns)}`';\n\n @return _susy-error(\n '#{$actual} is not a valid list of numbers for $columns.',\n 'su-valid-columns');\n}\n\n\n\n// Valid Gutters\n// -------------\n/// Check that the `gutters` argument is a valid number\n///\n/// @group x-validation\n///\n/// @param {number} $gutters -\n/// Width of a gutter\n///\n/// @return {number} -\n/// Validated `$gutters` number\n///\n/// @throw\n/// when gutter value is not a number\n@function su-valid-gutters(\n $gutters\n) {\n $type: type-of($gutters);\n\n @if ($type == 'number') {\n @return $gutters;\n }\n\n $actual: '[#{$type}] `#{inspect($gutters)}`';\n @return _susy-error(\n '#{$actual} is not a number or length for $gutters.',\n 'su-valid-gutters');\n}\n\n\n\n// Valid Spread\n// ------------\n/// Check that the `spread` argument is a valid\n/// intiger between `-1` and `1`\n///\n/// @group x-validation\n///\n/// @param {0 | 1 | -1} $spread -\n/// Number of gutters to include in a span,\n/// relative to the number columns\n///\n/// @return {0 | 1 | -1} -\n/// Validated `$spread` number\n///\n/// @throw\n/// when spread value is not a valid spread\n@function su-valid-spread(\n $spread\n) {\n @if index(0 1 -1, $spread) {\n @return $spread;\n }\n\n $actual: '[#{type-of($spread)}] `#{inspect($spread)}`';\n @return _susy-error(\n '#{$actual} is not a normalized [0 | 1 | -1] value for `$spread`.',\n 'su-valid-spread');\n}\n\n\n\n// Valid Location\n// --------------\n/// Check that the `location` argument is a valid number,\n/// within the scope of available columns\n///\n/// @group x-validation\n///\n/// @param {number} $span -\n/// Number of grid-columns to be spanned\n/// @param {integer | string} $location -\n/// Starting (1-indexed) column-position of that span\n/// @param {list} $columns -\n/// List of available columns in the grid\n///\n/// @return {integer} -\n/// Validated `$location` intiger\n///\n/// @throw\n/// when location value is not a valid index,\n/// given the context and span.\n@function su-valid-location(\n $span,\n $location,\n $columns\n) {\n $count: length($columns);\n\n @if $location {\n @if (type-of($location) != 'number') or (not unitless($location)) {\n $actual: '[#{type-of($location)}] `#{$location}`';\n @return _susy-error(\n '#{$actual} is not a unitless number for $location.',\n 'su-valid-location');\n } @else if (round($location) != $location) {\n @return _susy-error(\n 'Location (`#{$location}`) must be a 1-indexed intiger position.',\n 'su-valid-location');\n } @else if ($location > $count) or ($location < 1) {\n @return _susy-error(\n 'Position `#{$location}` does not exist in grid `#{$columns}`.',\n 'su-valid-location');\n } @else if ($location + $span - 1 > $count) {\n $details: 'grid `#{$columns}` for span `#{$span}` at `#{$location}`';\n @return _susy-error(\n 'There are not enough columns in #{$details}.',\n 'su-valid-location');\n }\n }\n\n @return $location;\n}\n", + "/// Grid Math Engine\n/// ================\n/// The `su` functions give you direct access to the math layer,\n/// without any syntax-sugar like shorthand parsing, and normalization.\n/// If you prefer named arguments, and stripped-down syntax,\n/// you can use these functions directly in your code –\n/// replacing `span`, `gutter`, and `slice`.\n///\n/// These functions are also useful\n/// for building mixins or other extensions to Susy.\n/// Apply the Susy syntax to new mixins and functions,\n/// using our \"Plugin Helpers\",\n/// or write your own syntax and pass the normalized results along\n/// to `su` for compilation.\n///\n/// @group su-math\n///\n/// @see su-span\n/// @see su-gutter\n/// @see su-slice\n/// @ignore _su-sum\n/// @ignore _su-calc-span\n/// @ignore _su-calc-sum\n/// @ignore _su-needs-calc-output\n\n\n\n// Su Span\n// -------\n/// Calculates and returns a CSS-ready span width,\n/// based on normalized span and context data –\n/// a low-level version of `susy-span`,\n/// with all of the logic and none of the syntax sugar.\n///\n/// - Grids defined with unitless numbers will return `%` values.\n/// - Grids defined with comparable units\n/// will return a value in the units provided.\n/// - Grids defined with a mix of units,\n/// or a combination of untiless numbers and unit-lengths,\n/// will return a `calc()` string.\n///\n/// @group su-math\n/// @see susy-span\n///\n/// @param {number | list} $span -\n/// Number or list of grid columns to span\n/// @param {list} $columns -\n/// List of columns available\n/// @param {number} $gutters -\n/// Width of a gutter in column-comparable units\n/// @param {0 | 1 | -1} $spread -\n/// Number of gutters spanned,\n/// relative to `span` count\n/// @param {0 | 1 | -1} $container-spread [$spread] -\n/// Number of gutters spanned,\n/// relative to `columns` count\n/// @param {integer} $location [1] -\n/// Optional position of sub-span among full set of columns\n///\n/// @return {length} -\n/// Relative or static length of a span on the grid\n@function su-span(\n $span,\n $columns,\n $gutters,\n $spread,\n $container-spread: $spread,\n $location: 1\n) {\n $span: su-valid-span($span);\n $columns: su-valid-columns($columns);\n $gutters: su-valid-gutters($gutters);\n $spread: su-valid-spread($spread);\n\n @if (type-of($span) == 'number') {\n @if (not unitless($span)) {\n @return $span;\n }\n\n $location: su-valid-location($span, $location, $columns);\n $span: su-slice($span, $columns, $location, $validate: false);\n }\n\n @if _su-needs-calc-output($span, $columns, $gutters, $spread, not 'validate') {\n @return _su-calc-span($span, $columns, $gutters, $spread, $container-spread, not 'validate');\n }\n\n $span-width: _su-sum($span, $gutters, $spread, $validate: false);\n\n @if unitless($span-width) {\n $container-spread: su-valid-spread($container-spread);\n $container: _su-sum($columns, $gutters, $container-spread, $validate: false);\n @return percentage($span-width / $container);\n }\n\n @return $span-width;\n}\n\n\n\n// Su Gutter\n// ---------\n/// Calculates and returns a CSS-ready gutter width,\n/// based on normalized grid data –\n/// a low-level version of `susy-gutter`,\n/// with all of the logic and none of the syntax sugar.\n///\n/// - Grids defined with unitless numbers will return `%` values.\n/// - Grids defined with comparable units\n/// will return a value in the units provided.\n/// - Grids defined with a mix of units,\n/// or a combination of untiless numbers and unit-lengths,\n/// will return a `calc()` string.\n///\n/// @group su-math\n/// @see susy-gutter\n///\n/// @param {list} $columns -\n/// List of columns in the grid\n/// @param {number} $gutters -\n/// Width of a gutter in column-comparable units\n/// @param {0 | 1 | -1} $container-spread -\n/// Number of gutters spanned,\n/// relative to `columns` count\n///\n/// @return {length} -\n/// Relative or static length of one gutter in a grid\n@function su-gutter(\n $columns,\n $gutters,\n $container-spread\n) {\n @if (type-of($gutters) == 'number') {\n @if ($gutters == 0) or (not unitless($gutters)) {\n @return $gutters;\n }\n }\n\n @if _su-needs-calc-output($gutters, $columns, $gutters, -1, not 'validate') {\n @return _su-calc-span($gutters, $columns, $gutters, -1, $container-spread, not 'validate');\n }\n\n $container: _su-sum($columns, $gutters, $container-spread);\n @return percentage($gutters / $container);\n}\n\n\n\n// Su Slice\n// --------\n/// Returns a list of columns\n/// based on a given span/location slice of the grid –\n/// a low-level version of `susy-slice`,\n/// with all of the logic and none of the syntax sugar.\n///\n/// @group su-math\n/// @see susy-slice\n///\n/// @param {number} $span -\n/// Number of grid columns to span\n/// @param {list} $columns -\n/// List of columns in the grid\n/// @param {number} $location [1] -\n/// Starting index of a span in the list of columns\n/// @param {bool} $validate [true] -\n/// Check that arguments are valid before proceeding\n///\n/// @return {list} -\n/// Subset list of grid columns, based on span and location\n@function su-slice(\n $span,\n $columns,\n $location: 1,\n $validate: true\n) {\n @if $validate {\n $columns: su-valid-columns($columns);\n $location: su-valid-location($span, $location, $columns);\n }\n\n $floor: floor($span);\n $sub-columns: ();\n\n @for $i from $location to ($location + $floor) {\n $sub-columns: append($sub-columns, nth($columns, $i));\n }\n\n @if $floor != $span {\n $remainder: $span - $floor;\n $column: $location + $floor;\n $sub-columns: append($sub-columns, nth($columns, $column) * $remainder);\n }\n\n @return $sub-columns;\n}\n\n\n\n// Su Sum\n// ------\n/// Get the total sum of column-units in a layout.\n///\n/// @group su-math\n/// @access private\n///\n/// @param {list} $columns -\n/// List of columns in the grid\n/// @param {number} $gutters -\n/// Width of a gutter in column-comparable units\n/// @param {0 | 1 | -1} $spread -\n/// Number of gutters spanned,\n/// relative to `columns` count\n/// @param {bool} $validate [true] -\n/// Check that arguments are valid before proceeding\n///\n/// @return {number} -\n/// Total sum of column-units in a grid\n@function _su-sum(\n $columns,\n $gutters,\n $spread,\n $validate: true\n) {\n @if $validate {\n $columns: su-valid-span($columns);\n $gutters: su-valid-gutters($gutters);\n $spread: su-valid-spread($spread);\n }\n\n // Calculate column-sum\n $column-sum: 0;\n @each $column in $columns {\n $column-sum: $column-sum + $column;\n }\n\n $gutter-sum: (ceil(length($columns)) + $spread) * $gutters;\n $total: if(($gutter-sum > 0), $column-sum + $gutter-sum, $column-sum);\n\n @return $total;\n}\n\n\n\n// Su Calc\n// -------\n/// Return a usable span width as a `calc()` function,\n/// in order to create mixed-unit grids.\n///\n/// @group su-math\n/// @access private\n///\n/// @param {number | list} $span -\n/// Pre-sliced list of grid columns to span\n/// @param {list} $columns -\n/// List of columns available\n/// @param {number} $gutters -\n/// Width of a gutter in column-comparable units\n/// @param {0 | 1 | -1} $spread -\n/// Number of gutters spanned,\n/// relative to `span` count\n/// @param {0 | 1 | -1} $container-spread [$spread] -\n/// Number of gutters spanned,\n/// relative to `columns` count\n/// @param {bool} $validate [true] -\n/// Check that arguments are valid before proceeding\n///\n/// @return {length} -\n/// Relative or static length of a span on the grid\n@function _su-calc-span(\n $span,\n $columns,\n $gutters,\n $spread,\n $container-spread: $spread,\n $validate: true\n) {\n @if $validate {\n $span: su-valid-span($span);\n $columns: su-valid-columns($columns);\n $gutters: su-valid-gutters($gutters);\n $spread: su-valid-spread($spread);\n $container-spread: su-valid-spread($container-spread);\n }\n\n // Span and context\n $span: _su-calc-sum($span, $gutters, $spread, not 'validate');\n $context: _su-calc-sum($columns, $gutters, $container-spread, not 'validate');\n\n // Fixed and fluid\n $fixed-span: map-get($span, 'fixed');\n $fluid-span: map-get($span, 'fluid');\n $fixed-context: map-get($context, 'fixed');\n $fluid-context: map-get($context, 'fluid');\n\n $calc: '#{$fixed-span}';\n $fluid-calc: '(100% - #{$fixed-context})';\n\n // Fluid-values\n @if (not $fluid-span) {\n $fluid-calc: null;\n } @else if ($fluid-span != $fluid-context) {\n $fluid-span: '* #{$fluid-span}';\n $fluid-context: if($fluid-context, '/ #{$fluid-context}', '');\n $fluid-calc: '(#{$fluid-calc $fluid-context $fluid-span})';\n }\n\n @if $fluid-calc {\n $calc: if(($calc != ''), '#{$calc} + ', '');\n $calc: '#{$calc + $fluid-calc}';\n }\n\n @return calc(#{unquote($calc)});\n}\n\n\n\n// Su Calc-Sum\n// -----------\n/// Get the total sum of fixed and fluid column-units\n/// for creating a mixed-unit layout with `calc()` values.\n///\n/// @group su-math\n/// @access private\n///\n/// @param {list} $columns -\n/// List of columns available\n/// @param {number} $gutters -\n/// Width of a gutter in column-comparable units\n/// @param {0 | 1 | -1} $spread -\n/// Number of gutters spanned,\n/// relative to `span` count\n/// @param {bool} $validate [true] -\n/// Check that arguments are valid before proceeding\n///\n/// @return {map} -\n/// Map with `fixed` and `fluid` keys\n/// containing the proper math as strings\n@function _su-calc-sum(\n $columns,\n $gutters,\n $spread,\n $validate: true\n) {\n @if $validate {\n $columns: su-valid-span($columns);\n $gutters: su-valid-gutters($gutters);\n $spread: su-valid-spread($spread);\n }\n\n $fluid: 0;\n $fixed: ();\n $calc: null;\n\n // Gutters\n $gutters: $gutters * (length($columns) + $spread);\n\n // Columns\n @each $col in append($columns, $gutters) {\n @if unitless($col) {\n $fluid: $fluid + $col;\n } @else {\n $fixed: _su-map-add-units($fixed, $col);\n }\n }\n\n // Compile Fixed Units\n @each $unit, $total in $fixed {\n @if ($total != (0 * $total)) {\n $calc: if($calc, '#{$calc} + #{$total}', '#{$total}');\n }\n }\n\n // Calc null or string\n @if $calc {\n $calc: if(str-index($calc, '+'), '(#{$calc})', '#{$calc}');\n }\n\n // Fluid 0 => null\n $fluid: if(($fluid == 0), null, $fluid);\n\n\n // Return map\n $return: (\n 'fixed': $calc,\n 'fluid': $fluid,\n );\n\n @return $return;\n}\n\n\n\n// Needs Calc\n// ----------\n/// Check if `calc()` will be needed in defining a span,\n/// if the necessary units in a grid are not comparable.\n///\n/// @group su-math\n/// @access private\n///\n/// @param {list} $span -\n/// Slice of columns to span\n/// @param {list} $columns -\n/// List of available columns in the grid\n/// @param {number} $gutters -\n/// Width of a gutter\n/// @param {0 | 1 | -1} $spread -\n/// Number of gutters spanned,\n/// relative to `span` count\n/// @param {bool} $validate [true] -\n/// Check that arguments are valid before proceeding\n///\n/// @return {bool} -\n/// `True` when units do not match, and `calc()` will be required\n@function _su-needs-calc-output(\n $span,\n $columns,\n $gutters,\n $spread,\n $validate: true\n) {\n @if $validate {\n $span: su-valid-span($span);\n $columns: su-valid-columns($columns);\n $gutters: su-valid-gutters($gutters);\n }\n\n $has-gutter: if((length($span) > 1) or ($spread >= 0), true, false);\n $check: if($has-gutter, append($span, $gutters), $span);\n $safe-span: _su-is-comparable($check...);\n\n @if ($safe-span == 'static') {\n @return false;\n } @else if (not $safe-span) {\n @return true;\n }\n\n $safe-fluid: _su-is-comparable($gutters, $columns...);\n\n @return not $safe-fluid;\n}\n", + "/// Susy3 Configuration\n/// ===================\n/// Susy3 has 4 core settings, in a single settings map.\n/// You'll notice a few differences from Susy2:\n///\n/// **Columns** no longer accept a single number, like `12`,\n/// but use a syntax more similar to the new\n/// CSS [grid-template-columns][columns] –\n/// a list of relative sizes for each column on the grid.\n/// Unitless numbers in Susy act very similar to `fr` units in CSS,\n/// and the `susy-repeat()` function (similar to the css `repeat()`)\n/// helps quickly establish equal-width columns.\n///\n/// [columns]: https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-columns\n///\n/// - `susy-repeat(12)` will create 12 fluid, equal-width columns\n/// - `susy-repeat(6, 120px)` will create 6 equal `120px`-wide columns\n/// - `120px susy-repeat(4) 120px` will create 6 columns,\n/// the first and last are `120px`,\n/// while the middle 4 are equal fractions of the remainder.\n/// Susy will output `calc()` values in order to achieve this.\n///\n/// **Gutters** haven't changed –\n/// a single fraction or explicit width –\n/// but the `calc()` output feature\n/// means you can now use any combination of units and fractions\n/// to create static-gutters on a fluid grid, etc.\n///\n/// **Spread** existed in the Susy2 API as a span option,\n/// and was otherwise handled behind the scenes.\n/// Now we're giving you full control over all spread issues.\n/// You can find a more [detailed explanation of spread on the blog][spread].\n///\n/// [spread]: http://oddbird.net/2017/06/13/susy-spread/\n///\n/// You can access your global settings at any time\n/// with the `susy-settings()` function,\n/// or grab a single setting from the global scope\n/// with `susy-get('columns')`, `susy-get('gutters')` etc.\n///\n/// @group a-config\n/// @link http://oddbird.net/2017/06/13/susy-spread/\n/// Article: Understanding Spread in Susy3\n///\n/// @see $susy\n/// @see susy-settings\n/// @see susy-get\n\n\n\n// Susy\n// ----\n/// The grid is defined in a single map variable,\n/// with four initial properties:\n/// `columns`, `gutters`, `spread` and `container-spread`.\n/// Anything you put in the root `$susy` variable map\n/// will be treated as a global project default.\n/// You can create similar configuration maps\n/// under different variable names,\n/// to override the defaults as-needed.\n///\n/// @group a-config\n/// @type Map\n///\n/// @see $_susy-defaults\n/// @see {function} susy-repeat\n/// @link\n/// https://codepen.io/mirisuzanne/pen/EgmJJp?editors=1100\n/// Spread examples on CodePen\n///\n/// @prop {list} columns -\n/// Columns are described by a list of numbers,\n/// representing the relative width of each column.\n/// The syntax is a simplified version of CSS native\n/// `grid-template-columns`,\n/// expecting a list of grid-column widths.\n/// Unitless numbers create fractional fluid columns\n/// (similar to the CSS-native `fr` unit),\n/// while length values (united numbers)\n/// are used to define static columns.\n/// You can mix-and match units and fractions,\n/// to create a mixed grid.\n/// Susy will generate `calc()` values when necessary,\n/// to make all your units work together.\n///\n/// Use the `susy-repeat($count, $value)` function\n/// to more easily repetative columns,\n/// similar to the CSS-native `repeat()`.\n///\n/// - `susy-repeat(8)`:\n/// an 8-column, symmetrical, fluid grid.\n///
Identical to `(1 1 1 1 1 1 1 1)`.\n/// - `susy-repeat(6, 8em)`:\n/// a 6-column, symmetrical, em-based grid.\n///
Identical to `(8em 8em 8em 8em 8em 8em)`.\n/// - `(300px susy-repeat(4) 300px)`:\n/// a 6-column, asymmetrical, mixed fluid/static grid\n/// using `calc()` output.\n///
Identical to `(300px 1 1 1 1 300px)`.\n///\n/// **NOTE** that `12` is no longer a valid 12-column grid definition,\n/// and you must list all the columns individually\n/// (or by using the `susy-repeat()` function).\n///\n/// @prop {number} gutters -\n/// Gutters are defined as a single width,\n/// or fluid ratio, similar to the native-CSS\n/// `grid-column-gap` syntax.\n/// Similar to columns,\n/// gutters can use any valid CSS length unit,\n/// or unitless numbers to define a relative fraction.\n///\n/// - `0.5`:\n/// a fluid gutter, half the size of a single-fraction column.\n/// - `1em`:\n/// a static gutter, `1em` wide.\n///\n/// Mix static gutters with fluid columns, or vice versa,\n/// and Susy will generate the required `calc()` to make it work.\n///\n/// @prop {string} spread [narrow] -\n/// Spread of an element across adjacent gutters:\n/// either `narrow` (none), `wide` (one), or `wider` (two)\n///\n/// - Both spread settings default to `narrow`,\n/// the most common use-case.\n/// A `narrow` spread only has gutters *between* columns\n/// (one less gutter than columns).\n/// This is how all css-native grids work,\n/// and most margin-based grid systems.\n/// - A `wide` spread includes the same number of gutters as columns,\n/// spanning across a single side-gutter.\n/// This is how most padding-based grid systems often work,\n/// and is also useful for pushing and pulling elements into place.\n/// - The rare `wider` spread includes gutters\n/// on both sides of the column-span\n/// (one more gutters than columns).\n///\n/// @prop {string} container-spread [narrow] -\n/// Spread of a container around adjacent gutters:\n/// either `narrow` (none), `wide` (one), or `wider` (two).\n/// See `spread` property for details.\n///\n/// @since 3.0.0-beta.1 -\n/// `columns` setting no longer accepts numbers\n/// (e.g. `12`) for symmetrical fluid grids,\n/// or the initial `12 x 120px` syntax for\n/// symmetrical fixed-unit grids.\n/// Use `susy-repeat(12)` or `susy-repeat(12, 120px)` instead.\n///\n/// @example scss - default values\n/// // 4 symmetrical, fluid columns\n/// // gutters are 1/4 the size of a column\n/// // elements span 1 less gutter than columns\n/// // containers span 1 less gutter as well\n/// $susy: (\n/// 'columns': susy-repeat(4),\n/// 'gutters': 0.25,\n/// 'spread': 'narrow',\n/// 'container-spread': 'narrow',\n/// );\n///\n/// @example scss - inside-static gutters\n/// // 6 symmetrical, fluid columns…\n/// // gutters are static, triggering calc()…\n/// // elements span equal columns & gutters…\n/// // containers span equal columns & gutters…\n/// $susy: (\n/// 'columns': susy-repeat(6),\n/// 'gutters': 0.5em,\n/// 'spread': 'wide',\n/// 'container-spread': 'wide',\n/// );\n$susy: () !default;\n\n\n\n// Susy Repeat\n// -----------\n/// Similar to the `repeat(, )` function\n/// that is available in native CSS Grid templates,\n/// the `susy-repeat()` function helps generate repetative layouts\n/// by repeating any value a given number of times.\n/// Where Susy previously allowed `8` as a column definition\n/// for 8 equal columns, you should now use `susy-repeat(8)`.\n///\n/// @group a-config\n///\n/// @param {integer} $count -\n/// The number of repetitions, e.g. `12` for a 12-column grid.\n/// @param {*} $value [1] -\n/// The value to be repeated.\n/// Technically any value can be repeated here,\n/// but the function exists to repeat column-width descriptions:\n/// e.g. the default `1` for single-fraction fluid columns,\n/// `5em` for a static column,\n/// or even `5em 120px` if you are alternating column widths.\n///\n/// @return {list} -\n/// List of repeated values\n///\n/// @example scss\n/// // 12 column grid, with 5em columns\n/// $susy: (\n/// columns: susy-repeat(12, 5em),\n/// );\n///\n/// @example scss\n/// // asymmetrical 5-column grid\n/// $susy: (\n/// columns: 20px susy-repeat(3, 100px) 20px,\n/// );\n///\n/// /* result: #{susy-get('columns')} */\n@function susy-repeat(\n $count,\n $value: 1\n) {\n $return: ();\n\n @for $i from 1 through $count {\n $return: join($return, $value);\n }\n\n @return $return;\n}\n\n\n\n// Susy Defaults\n// -------------\n/// Configuration map of Susy factory defaults.\n/// Do not override this map directly –\n/// use `$susy` for user and project setting overrides.\n///\n/// @access private\n/// @type Map\n///\n/// @see $susy\n///\n/// @prop {number | list} columns [susy-repeat(4)]\n/// @prop {number} gutters [0.25]\n/// @prop {string} spread ['narrow']\n/// @prop {string} container-spread ['narrow']\n$_susy-defaults: (\n 'columns': susy-repeat(4),\n 'gutters': 0.25,\n 'spread': 'narrow',\n 'container-spread': 'narrow',\n);\n\n\n\n// Susy Settings\n// -------------\n/// Return a combined map of Susy settings,\n/// based on the factory defaults (`$_susy-defaults`),\n/// user-defined project configuration (`$susy`),\n/// and any local overrides required –\n/// such as a configuration map passed into a function.\n///\n/// @group a-config\n///\n/// @param {maps} $overrides… -\n/// Optional map override of global configuration settings.\n/// See `$susy` above for properties.\n///\n/// @return {map} -\n/// Combined map of Susy configuration settings,\n/// in order of specificity:\n/// any `$overrides...`,\n/// then `$susy` project settings,\n/// and finally the `$_susy-defaults`\n///\n/// @example scss - global settings\n/// @each $key, $value in susy-settings() {\n/// /* #{$key}: #{$value} */\n/// }\n///\n/// @example scss - local settings\n/// $local: ('columns': 1 2 3 5 8);\n///\n/// @each $key, $value in susy-settings($local) {\n/// /* #{$key}: #{$value} */\n/// }\n@function susy-settings(\n $overrides...\n) {\n $settings: map-merge($_susy-defaults, $susy);\n\n @each $config in $overrides {\n $settings: map-merge($settings, $config);\n }\n\n @return $settings;\n}\n\n\n\n// Susy Get\n// --------\n/// Return the current global value of any Susy setting\n///\n/// @group a-config\n///\n/// @param {string} $key -\n/// Setting to retrieve from the configuration.\n///\n/// @return {*} -\n/// Value mapped to `$key` in the configuration maps,\n/// in order of specificity:\n/// `$susy`, then `$_susy-defaults`\n///\n/// @example scss -\n/// /* columns: #{susy-get('columns')} */\n/// /* gutters: #{susy-get('gutters')} */\n@function susy-get(\n $key\n) {\n $settings: susy-settings();\n\n @if not map-has-key($settings, $key) {\n @return _susy-error(\n 'There is no Susy setting called `#{$key}`',\n 'susy-get');\n }\n\n @return map-get($settings, $key);\n}\n", + "/// Syntax Normalization\n/// ====================\n/// Susy is divided into two layers:\n/// \"Su\" provides the core math functions with a stripped-down syntax,\n/// while \"Susy\" adds global settings, shorthand syntax,\n/// and other helpers.\n/// Each setting (e.g. span, location, columns, spread, etc.)\n/// has a single canonical syntax in Su.\n///\n/// This normalization module helps translate between those layers,\n/// transforming parsed Susy input into\n/// values that Su will understand.\n///\n/// @group x-normal\n///\n/// @see susy-normalize\n/// @see susy-normalize-span\n/// @see susy-normalize-columns\n/// @see susy-normalize-spread\n/// @see susy-normalize-location\n\n\n\n// Susy Normalize\n// --------------\n/// Normalize the values in a configuration map.\n/// In addition to the global `$susy` properties,\n/// this map can include local span-related imformation,\n/// like `span` and `location`.\n///\n/// Normalization does not check that values are valid,\n/// which will happen in the Su math layer.\n/// These functions merely look for known Susy syntax –\n/// returning a map with those shorthand values\n/// converted into low-level data for Su.\n/// For example `span: all` and `location: first`\n/// will be converted into specific numbers.\n///\n/// @group x-normal\n/// @see $susy\n/// @see susy-parse\n///\n/// @param {map} $config -\n/// Map of Susy configuration settings to normalize.\n/// See `$susy` and `susy-parse()` documentation for details.\n/// @param {map | null} $context [null] -\n/// Map of Susy configuration settings to use as global reference,\n/// or `null` to use global settings.\n///\n/// @return {map} -\n/// Map of Susy configuration settings,\n/// with all values normalized for Su math functions.\n@function susy-normalize(\n $config,\n $context: null\n) {\n // Spread\n @each $setting in ('spread', 'container-spread') {\n $value: map-get($config, $setting);\n\n @if $value {\n $value: susy-normalize-spread($value);\n $config: map-merge($config, ($setting: $value));\n }\n }\n\n // Columns\n $columns: map-get($config, 'columns');\n\n @if $columns {\n $columns: susy-normalize-columns($columns, $context);\n $config: map-merge($config, ('columns': $columns));\n }\n\n @if not $columns {\n $map: type-of($context) == 'map';\n $columns: if($map, map-get($context, 'columns'), null);\n $columns: $columns or susy-get('columns');\n }\n\n // Span\n $span: map-get($config, 'span');\n\n @if $span {\n $span: susy-normalize-span($span, $columns);\n $config: map-merge($config, ('span': $span));\n }\n\n // Location\n $location: map-get($config, 'location');\n\n @if $location {\n $location: susy-normalize-location($span, $location, $columns);\n $config: map-merge($config, ('location': $location));\n }\n\n @return $config;\n}\n\n\n\n// Normalize Span\n// --------------\n/// Normalize `span` shorthand for Su.\n/// Su span syntax allows an explicit length (e.g. `3em`),\n/// unitless column-span number (e.g. `3` columns),\n/// or an explicit list of columns (e.g. `(3 5 8)`).\n///\n/// Susy span syntax also allows the `all` keyword,\n/// which will be converted to a slice of the context\n/// in normalization.\n///\n/// @group x-normal\n///\n/// @param {number | list | 'all'} $span -\n/// Span value to normalize.\n/// @param {list} $columns -\n/// Normalized list of columns in the grid\n///\n/// @return {number | list} -\n/// Number or list value for `$span`\n@function susy-normalize-span(\n $span,\n $columns: susy-get('columns')\n) {\n @if ($span == 'all') {\n @return length($columns);\n }\n\n @return $span;\n}\n\n\n\n// Normalize Columns\n// -----------------\n/// Normalize `column` shorthand for Su.\n/// Su column syntax only allows column lists (e.g. `120px 1 1 1 120px`).\n///\n/// Susy span syntax also allows a unitless `slice` number (e.g `of 5`),\n/// which will be converted to a slice of the context\n/// in normalization.\n///\n/// @group x-normal\n///\n/// @param {list | integer} $columns -\n/// List of available columns,\n/// or unitless integer representing a slice of\n/// the available context.\n/// @param {map | null} $context [null] -\n/// Map of Susy configuration settings to use as global reference,\n/// or `null` to access global settings.\n///\n/// @return {list} -\n/// Columns list value, normalized for Su input.\n///\n/// @throws\n/// when attempting to access a slice of asymmetrical context\n@function susy-normalize-columns(\n $columns,\n $context: null\n) {\n $context: $context or susy-settings();\n\n @if type-of($columns) == 'list' {\n @return _susy-flatten($columns);\n }\n\n @if (type-of($columns) == 'number') and (unitless($columns)) {\n $span: $columns;\n $context: map-get($context, 'columns');\n $symmetrical: susy-repeat(length($context), nth($context, 1));\n\n @if ($context == $symmetrical) {\n @return susy-repeat($span, nth($context, 1));\n } @else {\n $actual: 'of `#{$span}`';\n $columns: 'grid-columns `#{$context}`';\n @return _susy-error(\n 'context-slice #{$actual} can not be determined based on #{$columns}.',\n 'susy-normalize-columns');\n }\n }\n\n @return $columns;\n}\n\n\n\n// Normalize Spread\n// ----------------\n/// Normalize `spread` shorthand for Su.\n/// Su spread syntax only allows the numbers `-1`, `0`, or `1` –\n/// representing the number of gutters covered\n/// in relation to columns spanned.\n///\n/// Susy spread syntax also allows keywords for each value –\n/// `narrow` for `-1`, `wide` for `0`, or `wider` for `1` –\n/// which will be converted to their respective integers\n/// in normalization.\n///\n/// @group x-normal\n///\n/// @param {0 | 1 | -1 | 'narrow' | 'wide' | 'wider'} $spread -\n/// Spread across adjacent gutters, relative to a column-count —\n/// either `narrow` (-1), `wide` (0), or `wider` (1)\n///\n/// @return {number} -\n/// Numeric value for `$spread`\n@function susy-normalize-spread(\n $spread\n) {\n $normal-spread: (\n 'narrow': -1,\n 'wide': 0,\n 'wider': 1,\n );\n\n @return map-get($normal-spread, $spread) or $spread;\n}\n\n\n\n// Normalize Location\n// ------------------\n/// Normalize `location` shorthand for Su.\n/// Su location syntax requires the (1-indexed) number for a column.\n///\n/// Susy also allows the `first` and `last` keywords,\n/// where `first` is always `1`,\n/// and `last` is calculated based on span and column values.\n/// Both keywords are normalized into an integer index\n/// in normalization.\n///\n/// @group x-normal\n///\n/// @param {number} $span -\n/// Number of grid-columns to be spanned\n/// @param {integer | 'first' | 'last'} $location -\n/// Starting (1-indexed) column position of a span,\n/// or a named location keyword.\n/// @param {list} $columns -\n/// Already-normalized list of columns in the grid.\n///\n/// @return {integer} -\n/// Numeric value for `$location`\n@function susy-normalize-location(\n $span,\n $location,\n $columns\n) {\n $count: length($columns);\n $normal-locations: (\n 'first': 1,\n 'alpha': 1,\n 'last': $count - $span + 1,\n 'omega': $count - $span + 1,\n );\n\n @return map-get($normal-locations, $location) or $location;\n}\n", + "/// Shorthand Syntax Parser\n/// =======================\n/// The syntax parser converts [shorthand syntax][short]\n/// into a map of settings that can be compared/merged with\n/// other config maps and global setting.\n///\n/// [short]: b-api.html\n///\n/// @group x-parser\n\n\n\n// Parse\n// -----\n/// The `parse` function provides all the syntax-sugar in Susy,\n/// converting user shorthand\n/// into a usable map of keys and values\n/// that can be normalized and passed to Su.\n///\n/// @group x-parser\n/// @see $susy\n///\n/// @param {list} $shorthand -\n/// Shorthand expression to define the width of the span,\n/// optionally containing:\n/// - a count, length, or column-list span;\n/// - `at $n`, `first`, or `last` location on asymmetrical grids;\n/// - `narrow`, `wide`, or `wider` for optionally spreading\n/// across adjacent gutters;\n/// - `of $n ` for available grid columns\n/// and spread of the container\n/// (span counts like `of 6` are only valid\n/// in the context of symmetrical grids);\n/// - and `set-gutters $n` to override global gutter settings\n/// @param {bool} $context-only [false] -\n/// Allow the parser to ignore span and span-spread values,\n/// only parsing context and container-spread.\n/// This makes it possible to accept spanless values,\n/// like the `gutters()` syntax.\n/// When parsing context-only,\n/// the `of` indicator is optional.\n///\n/// @return {map} -\n/// Map of span and grid settings\n/// parsed from shorthand input –\n/// including all the properties available globally –\n/// `columns`, `gutters`, `spread`, `container-spread` –\n/// along with the span-specific properties\n/// `span`, and `location`.\n///\n/// @throw\n/// when a shorthand value is not recognized\n@function susy-parse(\n $shorthand,\n $context-only: false\n) {\n $parse-error: 'Unknown shorthand property:';\n $options: (\n 'first': 'location',\n 'last': 'location',\n 'alpha': 'location',\n 'omega': 'location',\n 'narrow': 'spread',\n 'wide': 'spread',\n 'wider': 'spread',\n );\n\n $return: ();\n $span: null;\n $columns: null;\n\n $of: null;\n $next: false;\n\n // Allow context-only shorthand, without span\n @if ($context-only) and (not index($shorthand, 'of')) {\n @if su-valid-columns($shorthand, 'fail-silent') {\n $shorthand: 'of' $shorthand;\n } @else {\n $shorthand: join('of', $shorthand);\n }\n }\n\n // loop through the shorthand list\n @for $i from 1 through length($shorthand) {\n $item: nth($shorthand, $i);\n $type: type-of($item);\n $error: false;\n $details: '[#{$type}] `#{$item}`';\n\n // if we know what's supposed to be coming next…\n @if $next {\n\n // Add to the return map\n $return: map-merge($return, ($next: $item));\n\n // Reset next to `false`\n $next: false;\n\n } @else { // If we don't know what's supposed to be coming…\n\n // Keywords…\n @if ($type == 'string') {\n // Check the map for keywords…\n @if map-has-key($options, $item) {\n $setting: map-get($options, $item);\n\n // Spread could be on the span or the container…\n @if ($setting == 'spread') and ($of) {\n $return: map-merge($return, ('container-spread': $item));\n } @else {\n $return: map-merge($return, ($setting: $item));\n }\n\n } @else if ($item == 'all') {\n // `All` is a span shortcut\n $span: 'all';\n } @else if ($item == 'at') {\n // Some keywords setup what's next…\n $next: 'location';\n } @else if ($item == 'set-gutters') {\n $next: 'gutters';\n } @else if ($item == 'of') {\n $of: true;\n } @else {\n $error: true;\n }\n\n } @else if ($type == 'number') or ($type == 'list') { // Numbers & lists…\n\n @if not ($span or $of) {\n // We don't have a span, and we're not expecting context…\n $span: $item;\n } @else if ($of) and (not $columns) {\n // We are expecting context…\n $columns: $item;\n } @else {\n $error: true;\n }\n\n } @else {\n $error: true;\n }\n }\n\n @if $error {\n @return _susy-error('#{$parse-error} #{$details}', 'susy-parse');\n }\n }\n\n // If we have span, merge it in\n @if $span {\n $return: map-merge($return, ('span': $span));\n }\n\n // If we have columns, merge them in\n @if $columns {\n $return: map-merge($return, ('columns': $columns));\n }\n\n // Return the map of settings…\n @return $return;\n}\n", + "/// Syntax Utilities for Extending Susy\n/// ===================================\n/// There are many steps involved\n/// when translating between the Susy syntax layer,\n/// and the Su core math.\n/// That entire process can be condensed with these two functions.\n/// For anyone that wants to access the full power of Susy,\n/// and build their own plugins, functions, or mixins –\n/// this is the primary API for compiling user input,\n/// and accessing the core math.\n///\n/// This is the same technique we use internally,\n/// to keep our API layer simple and light-weight.\n/// Every function accepts two arguments,\n/// a \"shorthand\" description of the span or context,\n/// and an optional settings-map to override global defaults.\n///\n/// - Use `susy-compile()` to parse, merge, and normalize\n/// all the user settings into a single map.\n/// - Then use `su-call()` to call one of the core math functions,\n/// with whatever data is needed for that function.\n///\n/// @group plugin-utils\n/// @see susy-compile\n/// @see su-call\n///\n/// @example scss - Susy API `gutter` function\n/// @function susy-gutter(\n/// $context: susy-get('columns'),\n/// $config: ()\n/// ) {\n/// // compile and normalize all user arguments and global settings\n/// $context: susy-compile($context, $config, 'context-only');\n/// // call `su-gutter` with the appropriate data\n/// @return su-call('su-gutter', $context);\n/// }\n///\n/// @example scss - Sample `span` mixin for floated grids\n/// @mixin span(\n/// $span,\n/// $config: ()\n/// ) {\n/// $context: susy-compile($span, $config);\n/// width: su-call('su-span', $context);\n///\n/// @if index($span, 'last') {\n/// float: right;\n/// } @else {\n/// float: left;\n/// margin-right: su-call('su-gutter', $context);\n/// }\n/// }\n\n\n\n// Compile\n// -------\n/// Susy's syntax layer has various moving parts,\n/// with syntax-parsing for the grid/span shorthand,\n/// and normalization for each of the resulting values.\n/// The compile function rolls this all together\n/// in a single call –\n/// for quick access from our internal API functions,\n/// or any additional functions and mixins you add to your project.\n/// Pass user input and configuration maps to the compiler,\n/// and it will hand back a map of values ready for Su.\n/// Combine this with the `su-call` function\n/// to quickly parse, normalize, and process grid calculations.\n///\n/// @group plugin-utils\n/// @see su-call\n///\n/// @param {list | map} $shorthand -\n/// Shorthand expression to define the width of the span,\n/// optionally containing:\n/// - a count, length, or column-list span;\n/// - `at $n`, `first`, or `last` location on asymmetrical grids;\n/// - `narrow`, `wide`, or `wider` for optionally spreading\n/// across adjacent gutters;\n/// - `of $n ` for available grid columns\n/// and spread of the container\n/// (span counts like `of 6` are only valid\n/// in the context of symmetrical grids);\n/// - and `set-gutters $n` to override global gutter settings\n/// @param {map} $config [null] -\n/// Optional map of Susy grid configuration settings\n/// @param {bool} $context-only [false] -\n/// Allow the parser to ignore span and span-spread values,\n/// only parsing context and container-spread\n///\n/// @return {map} -\n/// Parsed and normalized map of settings,\n/// based on global and local configuration,\n/// alongwith shorthad adjustments.\n///\n/// @example scss -\n/// $user-input: 3 wide of susy-repeat(6, 120px) set-gutters 10px;\n/// $grid-data: susy-compile($user-input, $susy);\n///\n/// @each $key, $value in $grid-data {\n/// /* #{$key}: #{$value}, */\n/// }\n@function susy-compile(\n $short,\n $config: null,\n $context-only: false\n) {\n // Get and normalize config\n $config: if($config, susy-settings($config), susy-settings());\n $normal-config: susy-normalize($config);\n\n // Parse and normalize shorthand\n @if (type-of($short) != 'map') and (length($short) > 0) {\n $short: susy-parse($short, $context-only);\n }\n\n $normal-short: susy-normalize($short, $normal-config);\n\n // Merge and return\n @return map-merge($normal-config, $normal-short);\n}\n\n\n\n// Call\n// ----\n/// The Susy parsing and normalization process\n/// results in a map of configuration settings,\n/// much like the global `$susy` settings map.\n/// In order to pass that information along to Su math functions,\n/// the proper values have to be picked out,\n/// and converted to arguments.\n///\n/// The `su-call` function streamlines that process,\n/// weeding out the unnecessary data,\n/// and passing the rest along to Su in the proper format.\n/// Combine this with `susy-compile` to quickly parse,\n/// normalize, and process grid calculations.\n///\n/// @group plugin-utils\n///\n/// @require su-span\n/// @require su-gutter\n/// @require su-slice\n/// @see susy-compile\n///\n/// @param {'su-span' | 'su-gutter' | 'su-slice'} $name -\n/// Name of the Su math function to call.\n/// @param {map} $config -\n/// Parsed and normalized map of Susy configuration settings\n/// to use for math-function arguments.\n///\n/// @return {*} -\n/// Results of the function being called.\n///\n/// @example scss -\n/// $user-input: 3 wide of susy-repeat(6, 120px) set-gutters 10px;\n/// $grid-data: susy-compile($user-input, $susy);\n///\n/// .su-span {\n/// width: su-call('su-span', $grid-data);\n/// }\n@function su-call(\n $name,\n $config\n) {\n $grid-function-args: (\n 'su-span': ('span', 'columns', 'gutters', 'spread', 'container-spread', 'location'),\n 'su-gutter': ('columns', 'gutters', 'container-spread'),\n 'su-slice': ('span', 'columns', 'location'),\n );\n\n $args: map-get($grid-function-args, $name);\n\n @if not $args {\n $options: 'Try one of these: #{map-keys($grid-function-args)}';\n @return _susy-error(\n '#{$name} is not a public Su function. #{$options}',\n 'su-call');\n }\n\n $call: if(function-exists('get-function'), get-function($name), $name);\n $output: ();\n\n @each $arg in $args {\n $value: map-get($config, $arg);\n $output: if($value, map-merge($output, ($arg: $value)), $output);\n }\n\n @return call($call, $output...);\n}\n", + "/// Susy3 API Functions\n/// ===================\n/// These three functions form the core of Susy's\n/// layout-building grid API.\n///\n/// - Use `span()` and `gutter()` to return any grid-width,\n/// and apply the results wherever you need them:\n/// CSS `width`, `margin`, `padding`, `flex-basis`, `transform`, etc.\n/// - For asymmetrical-fluid grids,\n/// `slice()` can help manage your nesting context.\n///\n/// All three functions come with an unprefixed alias by default,\n/// using the `susy` import.\n/// Import the `susy-prefix` partial instead,\n/// if you only only want prefixed versions of the API.\n///\n/// This is a thin syntax-sugar shell around\n/// the \"Su\" core-math functions: `su-span`, `su-gutter`, and `su-slice`.\n/// If you prefer the more constrained syntax of the math engine,\n/// you are welcome to use those functions instead.\n///\n/// @group b-api\n/// @see susy-span\n/// @see susy-gutter\n/// @see susy-slice\n/// @see su-span\n/// @see su-gutter\n/// @see su-slice\n\n\n\n/// ## Shorthand\n///\n/// All functions draw on the same shorthand syntax in two parts,\n/// seperated by the word `of`.\n///\n/// ### Span Syntax: `` [`` ``]\n/// The first part describes the\n/// **span** width, location, and spread in any order.\n/// Only the width is required:\n///\n/// - `span(2)` will return the width of 2 columns.\n/// - `span(3 wide)` will return 3-columns, with an additional gutter.\n/// - location is only needed with asymmetrical grids,\n/// where `span(3 at 2)` will return the width of\n/// specific columns on the grid.\n/// Since these are functions, they will not handle placement for you.\n///\n/// ### Context Syntax: `[of ]`\n/// The second half of Susy's shorthand\n/// describes the grid-**context** –\n/// available columns, container-spread, and optional gutter override –\n/// in any order.\n/// All of these settings have globally-defined defaults:\n///\n/// - `span(2 of 6)` will set the context to\n/// a slice of 6 columns from the global grid.\n/// More details below.\n/// - `span(2 of 12 wide)` changes the container-spread\n/// as well as the column-context.\n/// - `span(2 of 12 set-gutters 0.5em)`\n/// will override the global gutters setting\n/// for this one calculation.\n///\n/// A single unitless number for `columns`\n/// will be treated as a slice of the parent grid.\n/// On a grid with `columns: susy-repeat(12, 120px)`,\n/// the shorthand `of 4` will use the parent `120px` column-width.\n/// You can also be more explicit,\n/// and say `of susy-repeat(4, 100px)`.\n/// If you are using asymmetrical grids,\n/// like `columns: (1 1 2 3 5 8)`,\n/// Susy can't slice it for you without knowing which columns you want.\n/// The `slice` function accepts exactly the same syntax as `span`,\n/// but returns a list of columns rather than a width.\n/// Use it in your context like `of slice(first 3)`.\n///\n/// @group b-api\n\n\n\n// Susy Span\n// ---------\n/// This is the primary function in Susy —\n/// used to return the width of a span across one or more columns,\n/// and any relevant gutters along the way.\n/// With the default settings,\n/// `span(3)` will return the width of 3 columns,\n/// and the 2 intermediate gutters.\n/// This can be used to set the `width` property of grid elements,\n/// or `margin` and `padding`\n/// to push, pull, and pad your elements.\n///\n/// - This is a thin syntax-sugar shell around\n/// the core-math `su-span()` function.\n/// - The un-prefixed alias `span()` is available by default.\n///\n/// @group b-api\n/// @see su-span\n/// @see $susy\n///\n/// @param {list} $span -\n/// Shorthand expression to define the width of the span,\n/// optionally containing:\n/// - a count, length, or column-list span.\n/// - `at $n`, `first`, or `last` location on asymmetrical grids,\n/// where `at 1 == first`,\n/// and `last` will calculate the proper location\n/// based on columns and span.\n/// - `narrow`, `wide`, or `wider` for optionally spreading\n/// across adjacent gutters.\n/// - `of $n ` for available grid columns\n/// and spread of the container.\n/// Span counts like `of 6` are valid\n/// in the context of symmetrical grids,\n/// where Susy can safely infer a slice of the parent columns.\n/// - and `set-gutters $n` to override global gutter settings.\n///\n/// @param {map} $config [()] -\n/// Optional map of Susy grid configuration settings.\n/// See `$susy` documentation for details.\n///\n/// @return {length} -\n/// Calculated length value, using the units given,\n/// or converting to `%` for fraction-based grids,\n/// or a full `calc` function when units/fractions\n/// are not comparable outside the browser.\n///\n/// @example scss - span half the grid\n/// .foo {\n/// // the result is a bit under 50% to account for gutters\n/// width: susy-span(6 of 12);\n/// }\n///\n/// @example scss - span a specific segment of asymmetrical grid\n/// .foo {\n/// width: susy-span(3 at 3 of (1 2 3 5 8));\n/// }\n@function susy-span(\n $span,\n $config: ()\n) {\n $output: susy-compile($span, $config);\n\n @if map-get($output, 'span') {\n @return su-call('su-span', $output);\n }\n\n $actual: '[#{type-of($span)}] `#{inspect($span)}`';\n @return _susy-error(\n 'Unable to determine span value from #{$actual}.',\n 'susy-span');\n}\n\n\n\n// Susy Gutter\n// -----------\n/// The gutter function returns\n/// the width of a single gutter on your grid,\n/// to be applied where you see fit –\n/// on `margins`, `padding`, `transform`, or element `width`.\n///\n/// - This is a thin syntax-sugar shell around\n/// the core-math `su-gutter()` function.\n/// - The un-prefixed alias `gutter()` is available by default.\n///\n/// @group b-api\n/// @see su-gutter\n/// @see $susy\n///\n/// @param {list | number} $context [null] -\n/// Optional context for nested gutters,\n/// including shorthand for\n/// `columns`, `gutters`, and `container-spread`\n/// (additional shorthand will be ignored)\n///\n/// @param {map} $config [()] -\n/// Optional map of Susy grid configuration settings.\n/// See `$susy` documentation for details.\n///\n/// @return {length} -\n/// Width of a gutter as `%` of current context,\n/// or in the units defined by `column-width` when available\n///\n/// @example scss - add gutters before or after an element\n/// .floats {\n/// float: left;\n/// width: span(3 of 6);\n/// margin-left: gutter(of 6);\n/// }\n///\n/// @example scss - add gutters to padding\n/// .flexbox {\n/// flex: 1 1 span(3 wide of 6 wide);\n/// padding: gutter(of 6) / 2;\n/// }\n///\n@function susy-gutter(\n $context: susy-get('columns'),\n $config: ()\n) {\n $context: susy-compile($context, $config, 'context-only');\n\n @return su-call('su-gutter', $context);\n}\n\n\n\n// Susy Slice\n// ----------\n/// Working with asymmetrical grids (un-equal column widths)\n/// can be challenging – \n/// expecially when they involve fluid/fractional elements.\n/// Describing a context `of (15em 6em 6em 6em 15em)` is a lot\n/// to put inside the span or gutter function shorthand.\n/// This slice function returns a sub-slice of asymmetrical columns to use\n/// for a nested context.\n/// `slice(3 at 2)` will give you a subset of the global grid,\n/// spanning 3 columns, starting with the second.\n///\n/// - This is a thin syntax-sugar shell around\n/// the core-math `su-slice()` function.\n/// - The un-prefixed alias `slice()` is available by default.\n///\n/// @group b-api\n/// @see su-slice\n/// @see $susy\n///\n/// @param {list} $span -\n/// Shorthand expression to define the subset span, optionally containing:\n/// - `at $n`, `first`, or `last` location on asymmetrical grids;\n/// - `of $n ` for available grid columns\n/// and spread of the container\n/// - Span-counts like `of 6` are only valid\n/// in the context of symmetrical grids\n/// - Valid spreads include `narrow`, `wide`, or `wider`\n///\n/// @param {map} $config [()] -\n/// Optional map of Susy grid configuration settings.\n/// See `$susy` documentation for details.\n///\n/// @return {list} -\n/// Subset list of columns for use for a nested context\n///\n/// @example scss - Return a nested segment of asymmetrical grid\n/// $context: susy-slice(3 at 3 of (1 2 3 5 8));\n/// /* $context: #{$context}; */\n@function susy-slice(\n $span,\n $config: ()\n) {\n $span: susy-compile($span, $config);\n\n @return su-call('su-slice', $span);\n}\n\n\n\n/// ## Building Grids\n/// The web has come a long way\n/// since the days of double-margin-hacks\n/// and inconsistent subpixel rounding.\n/// In addition to floats and tables,\n/// we can now use much more powerful tools,\n/// like flexbox and CSS grid,\n/// to build more interesting and responsive layouts.\n///\n/// With Susy3, we hope you'll start moving in that direction.\n/// You can still build classic 12-column Grid Systems,\n/// and we'll help you get there,\n/// but Susy3 is primarily designed for a grid-math-on-demand\n/// approach to layout:\n/// applying our functions only where you really need grid math.\n/// Read the [intro article by OddBird][welcome] for more details.\n///\n/// [welcome]: http://oddbird.net/2017/06/28/susy3/\n///\n/// @group b-api\n/// @link http://oddbird.net/2017/06/28/susy3/ Article: Welcome to Susy3\n///\n/// @example scss - floats\n/// .float {\n/// width: span(3);\n/// margin-right: gutter();\n/// }\n///\n/// @example scss - flexbox\n/// .flexbox {\n/// flex: 1 1 span(3);\n/// // half a gutter on either side…\n/// padding: 0 gutter() / 2;\n/// }\n///\n/// @example scss - pushing and pulling\n/// .push-3 {\n/// margin-left: span(3 wide);\n/// }\n///\n/// .pull-3 {\n/// margin-left: 0 - span(3 wide);\n/// }\n///\n/// @example scss - building an attribute system\n/// // markup example:
\n/// [data-span] {\n/// float: left;\n///\n/// &:not([data-span*='last']) {\n/// margin-right: gutter();\n/// }\n/// }\n///\n/// @for $span from 1 through length(susy-get('columns')) {\n/// [data-span*='#{$span}'] {\n/// width: span($span);\n/// }\n/// }\n", + "// Unprefix Susy\n// =============\n\n\n// Span\n// ----\n/// Un-prefixed alias for `susy-span`\n/// (available by default)\n///\n/// @group api\n/// @alias susy-span\n///\n/// @param {list} $span\n/// @param {map} $config [()]\n@function span(\n $span,\n $config: ()\n) {\n @return susy-span($span, $config);\n}\n\n\n// Gutter\n// ------\n/// Un-prefixed alias for `susy-gutter`\n/// (available by default)\n///\n/// @group api\n/// @alias susy-gutter\n///\n/// @param {integer | list} $context [null] -\n/// @param {map} $config [()]\n@function gutter(\n $context: susy-get('columns'),\n $config: ()\n) {\n @return susy-gutter($context, $config);\n}\n\n\n// Slice\n// -----\n/// Un-prefixed alias for `susy-slice`\n/// (available by default)\n///\n/// @group api\n/// @alias susy-slice\n///\n/// @param {list} $span\n/// @param {map} $config [()]\n@function slice(\n $span,\n $config: ()\n) {\n @return susy-slice($span, $config);\n}\n", + "/* ==========================================================================\n MIXINS\n ========================================================================== */\n\n%tab-focus {\n /* Default*/\n outline: thin dotted $focus-color;\n /* Webkit*/\n outline: 5px auto $focus-color;\n outline-offset: -2px;\n}\n\n/*\n em function\n ========================================================================== */\n\n@function em($target, $context: $doc-font-size) {\n @return ($target / $context) * 1em;\n}\n\n\n/*\n Bourbon clearfix\n ========================================================================== */\n\n/*\n * Provides an easy way to include a clearfix for containing floats.\n * link http://cssmojo.com/latest_new_clearfix_so_far/\n *\n * example scss - Usage\n *\n * .element {\n * @include clearfix;\n * }\n *\n * example css - CSS Output\n *\n * .element::after {\n * clear: both;\n * content: \"\";\n * display: table;\n * }\n*/\n\n@mixin clearfix {\n clear: both;\n\n &::after {\n clear: both;\n content: \"\";\n display: table;\n }\n}\n\n/*\n Compass YIQ Color Contrast\n https://github.com/easy-designs/yiq-color-contrast\n ========================================================================== */\n\n@function yiq-is-light(\n $color,\n $threshold: $yiq-contrasted-threshold\n) {\n $red: red($color);\n $green: green($color);\n $blue: blue($color);\n\n $yiq: (($red*299)+($green*587)+($blue*114))/1000;\n\n @if $yiq-debug { @debug $yiq, $threshold; }\n\n @return if($yiq >= $threshold, true, false);\n}\n\n@function yiq-contrast-color(\n $color,\n $dark: $yiq-contrasted-dark-default,\n $light: $yiq-contrasted-light-default,\n $threshold: $yiq-contrasted-threshold\n) {\n @return if(yiq-is-light($color, $threshold), $yiq-contrasted-dark-default, $yiq-contrasted-light-default);\n}\n\n@mixin yiq-contrasted(\n $background-color,\n $dark: $yiq-contrasted-dark-default,\n $light: $yiq-contrasted-light-default,\n $threshold: $yiq-contrasted-threshold\n) {\n background-color: $background-color;\n color: yiq-contrast-color($background-color, $dark, $light, $threshold);\n}", + "/* ==========================================================================\n STYLE RESETS\n ========================================================================== */\n\n* { box-sizing: border-box; }\n\nhtml {\n /* apply a natural box layout model to all elements */\n box-sizing: border-box;\n background-color: $background-color;\n font-size: 16px;\n\n @include breakpoint($medium) {\n font-size: 18px;\n }\n\n @include breakpoint($large) {\n font-size: 20px;\n }\n\n @include breakpoint($x-large) {\n font-size: 22px;\n }\n\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n}\n\n/* Remove margin */\n\nbody { margin: 0; }\n\n/* Selected elements */\n\n::-moz-selection {\n color: #fff;\n background: #000;\n}\n\n::selection {\n color: #fff;\n background: #000;\n}\n\n/* Display HTML5 elements in IE6-9 and FF3 */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection {\n display: block;\n}\n\n/* Display block in IE6-9 and FF3 */\n\naudio,\ncanvas,\nvideo {\n display: inline-block;\n *display: inline;\n *zoom: 1;\n}\n\n/* Prevents modern browsers from displaying 'audio' without controls */\n\naudio:not([controls]) {\n display: none;\n}\n\na {\n color: $link-color;\n}\n\n/* Apply focus state */\n\na:focus {\n @extend %tab-focus;\n}\n\n/* Remove outline from links */\n\na:hover,\na:active {\n outline: 0;\n}\n\n/* Prevent sub and sup affecting line-height in all browsers */\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n/* img border in anchor's and image quality */\n\nimg {\n /* Responsive images (ensure images don't scale beyond their parents) */\n max-width: 100%; /* part 1: Set a maximum relative to the parent*/\n width: auto\\9; /* IE7-8 need help adjusting responsive images*/\n height: auto; /* part 2: Scale the height according to the width, otherwise you get stretching*/\n\n vertical-align: middle;\n border: 0;\n -ms-interpolation-mode: bicubic;\n}\n\n/* Prevent max-width from affecting Google Maps */\n\n#map_canvas img,\n.google-maps img {\n max-width: none;\n}\n\n/* Consistent form font size in all browsers, margin changes, misc */\n\nbutton,\ninput,\nselect,\ntextarea {\n margin: 0;\n font-size: 100%;\n vertical-align: middle;\n}\n\nbutton,\ninput {\n *overflow: visible; /* inner spacing ie IE6/7*/\n line-height: normal; /* FF3/4 have !important on line-height in UA stylesheet*/\n}\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner { /* inner padding and border oddities in FF3/4*/\n padding: 0;\n border: 0;\n}\n\nbutton,\nhtml input[type=\"button\"], // avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; /* corrects inability to style clickable `input` types in iOS*/\n cursor: pointer; /* improves usability and consistency of cursor style between image-type `input` and others*/\n}\n\nlabel,\nselect,\nbutton,\ninput[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"],\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n cursor: pointer; /* improves usability and consistency of cursor style between image-type `input` and others*/\n}\n\ninput[type=\"search\"] { /* Appearance in Safari/Chrome*/\n box-sizing: border-box;\n -webkit-appearance: textfield;\n}\n\ninput[type=\"search\"]::-webkit-search-decoration,\ninput[type=\"search\"]::-webkit-search-cancel-button {\n -webkit-appearance: none; /* inner-padding issues in Chrome OSX, Safari 5*/\n}\n\ntextarea {\n overflow: auto; /* remove vertical scrollbar in IE6-9*/\n vertical-align: top; /* readability and alignment cross-browser*/\n}", + "/* ==========================================================================\n BASE ELEMENTS\n ========================================================================== */\n\nhtml {\n /* sticky footer fix */\n position: relative;\n min-height: 100%;\n font-size: 16px; // change to whatever; Angadh put this here to stop the annoying resizing.\n}\n\nbody {\n margin: 0;\n padding: 0;\n color: $text-color;\n font-family: $body-font;//$global-font-family;\n line-height: 1.5;\n\n &.overflow--hidden {\n /* when primary navigation is visible, the content in the background won't scroll */\n overflow: hidden;\n }\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin: 2em 0 0.5em;\n line-height: 1.2;\n font-family: $sans-font;//$header-font-family;\n font-weight: bold;\n}\n\nh1 {\n margin-top: 0;\n font-size: $h-size-1;\n}\n\nh2 {\n font-size: $h-size-2;\n}\n\nh3 {\n font-size: $h-size-3;\n}\n\nh4 {\n font-size: $h-size-4;\n}\n\nh5 {\n font-size: $h-size-5;\n}\n\nh6 {\n font-size: $h-size-6;\n}\n\nsmall,\n.small {\n font-size: $type-size-6;\n}\n\np {\n margin-bottom: 1.3em;\n}\n\nu,\nins {\n text-decoration: none;\n border-bottom: 1px solid $text-color;\n a {\n color: inherit;\n }\n}\n\ndel a {\n color: inherit;\n}\n\n/* reduce orphans and widows when printing */\n\np,\npre,\nblockquote,\nul,\nol,\ndl,\nfigure,\ntable,\nfieldset {\n orphans: 3;\n widows: 3;\n}\n\n/* abbreviations */\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: none;\n cursor: help;\n border-bottom: 1px dotted $text-color;\n}\n\n/* blockquotes */\n\nblockquote {\n margin: 2em 1em 2em 0;\n padding-left: 1em;\n padding-right: 1em;\n font-style: italic;\n border-left: 0.25em solid $primary-color;\n\n cite {\n font-style: italic;\n\n &:before {\n content: \"\\2014\";\n padding-right: 5px;\n }\n }\n}\n\n/* links */\n\na {\n &:focus {\n @extend %tab-focus;\n }\n\n &:visited {\n color: $link-color-visited;\n }\n\n &:hover {\n color: $link-color-hover;\n outline: 0;\n }\n}\n\n/* buttons */\n\nbutton:focus {\n @extend %tab-focus;\n}\n\n/* code */\n\ntt,\ncode,\nkbd,\nsamp,\npre {\n font-family: $monospace;\n}\n\npre {\n overflow-x: auto; /* add scrollbars to wide code blocks*/\n}\n\n/* horizontal rule */\n\nhr {\n display: block;\n margin: 1em 0;\n border: 0;\n border-top: 1px solid $border-color;\n}\n\n/* lists */\n\nul li,\nol li {\n margin-bottom: 0.5em;\n}\n\nli ul,\nli ol {\n margin-top: 0.5em;\n}\n\n/*\n Media and embeds\n ========================================================================== */\n\n/* Figures and images */\n\nfigure {\n display: -webkit-box;\n display: flex;\n -webkit-box-pack: justify;\n justify-content: space-between;\n -webkit-box-align: start;\n align-items: flex-start;\n flex-wrap: wrap;\n margin: 2em 0;\n\n img,\n iframe,\n .fluid-width-video-wrapper {\n margin-bottom: 1em;\n }\n\n img {\n width: 100%;\n border-radius: $border-radius;\n -webkit-transition: $global-transition;\n transition: $global-transition;\n }\n\n > a {\n display: block;\n }\n\n &.half {\n > a,\n > img {\n @include breakpoint($small) {\n width: calc(50% - 0.5em);\n }\n }\n\n figcaption {\n width: 100%;\n }\n }\n\n &.third {\n > a,\n > img {\n @include breakpoint($small) {\n width: calc(33.3333% - 0.5em);\n }\n }\n\n figcaption {\n width: 100%;\n }\n }\n}\n\n/* Figure captions */\n\nfigcaption {\n margin-bottom: 0.5em;\n color: $muted-text-color;\n font-family: $caption-font-family;\n font-size: $type-size-6;\n\n a {\n -webkit-transition: $global-transition;\n transition: $global-transition;\n\n &:hover {\n color: $link-color-hover;\n }\n }\n}\n\n/* Fix IE9 SVG bug */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/*\n Navigation lists\n ========================================================================== */\n\n/**\n * Removes margins, padding, and bullet points from navigation lists\n *\n * Example usage:\n * \n */\n\nnav {\n ul {\n margin: 0;\n padding: 0;\n }\n\n li {\n list-style: none;\n }\n\n a {\n text-decoration: none;\n }\n\n /* override white-space for nested lists */\n ul li,\n ol li {\n margin-bottom: 0;\n }\n\n li ul,\n li ol {\n margin-top: 0;\n }\n}\n\n/*\n Global animation transition\n ========================================================================== */\n\nb,\ni,\nstrong,\nem,\nblockquote,\np,\nq,\nspan,\nfigure,\nimg,\nh1,\nh2,\nheader,\ninput,\na,\ntr,\ntd,\nform button,\ninput[type=\"submit\"],\n.btn,\n.highlight,\n.archive__item-teaser {\n -webkit-transition: $global-transition;\n transition: $global-transition;\n}\n", + "/* ==========================================================================\n Forms\n ========================================================================== */\n\nform {\n margin: 0 0 5px 0;\n padding: 1em;\n background-color: $form-background-color;\n\n fieldset {\n margin-bottom: 5px;\n padding: 0;\n border-width: 0;\n }\n\n legend {\n display: block;\n width: 100%;\n margin-bottom: 5px * 2;\n *margin-left: -7px;\n padding: 0;\n color: $text-color;\n border: 0;\n white-space: normal;\n }\n\n p {\n margin-bottom: (5px / 2);\n }\n\n ul {\n list-style-type: none;\n margin: 0 0 5px 0;\n padding: 0;\n }\n\n br {\n display: none;\n }\n}\n\nlabel,\ninput,\nbutton,\nselect,\ntextarea {\n vertical-align: baseline;\n *vertical-align: middle;\n}\n\ninput,\nbutton,\nselect,\ntextarea {\n box-sizing: border-box;\n font-family: $sans-serif;\n}\n\nlabel {\n display: block;\n margin-bottom: 0.25em;\n color: $text-color;\n cursor: pointer;\n\n small {\n font-size: $type-size-6;\n }\n\n input,\n textarea,\n select {\n display: block;\n }\n}\n\ninput,\ntextarea,\nselect {\n display: inline-block;\n width: 100%;\n padding: 0.25em;\n margin-bottom: 0.5em;\n color: $text-color;\n background-color: $background-color;\n border: $border-color;\n border-radius: $border-radius;\n box-shadow: $box-shadow;\n}\n\n.input-mini {\n width: 60px;\n}\n\n.input-small {\n width: 90px;\n}\n\ninput[type=\"image\"],\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n width: auto;\n height: auto;\n padding: 0;\n margin: 3px 0;\n *margin-top: 0;\n line-height: normal;\n cursor: pointer;\n border-radius: 0;\n border: 0 \\9;\n box-shadow: none;\n}\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n *width: 13px;\n *height: 13px;\n}\n\ninput[type=\"image\"] {\n border: 0;\n}\n\ninput[type=\"file\"] {\n width: auto;\n padding: initial;\n line-height: initial;\n border: initial;\n background-color: transparent;\n background-color: initial;\n box-shadow: none;\n}\n\ninput[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n width: auto;\n height: auto;\n cursor: pointer;\n *overflow: visible;\n}\n\nselect,\ninput[type=\"file\"] {\n *margin-top: 4px;\n}\n\nselect {\n width: auto;\n background-color: #fff;\n}\n\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\ntextarea {\n resize: vertical;\n height: auto;\n overflow: auto;\n vertical-align: top;\n}\n\ninput[type=\"hidden\"] {\n display: none;\n}\n\n.form {\n position: relative;\n}\n\n.radio,\n.checkbox {\n padding-left: 18px;\n font-weight: normal;\n}\n\n.radio input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"] {\n float: left;\n margin-left: -18px;\n}\n\n.radio.inline,\n.checkbox.inline {\n display: inline-block;\n padding-top: 5px;\n margin-bottom: 0;\n vertical-align: middle;\n}\n\n.radio.inline + .radio.inline,\n.checkbox.inline + .checkbox.inline {\n margin-left: 10px;\n}\n\n/*\n Disabled state\n ========================================================================== */\n\ninput[disabled],\nselect[disabled],\ntextarea[disabled],\ninput[readonly],\nselect[readonly],\ntextarea[readonly] {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/*\n Focus & active state\n ========================================================================== */\n\ninput:focus,\ntextarea:focus {\n border-color: $primary-color;\n outline: 0;\n outline: thin dotted \\9;\n box-shadow: inset 0 1px 3px rgba($text-color, 0.06),\n 0 0 5px rgba($primary-color, 0.7);\n}\n\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus,\nselect:focus {\n box-shadow: none;\n}\n\n/*\n Help text\n ========================================================================== */\n\n.help-block,\n.help-inline {\n color: $muted-text-color;\n}\n\n.help-block {\n display: block;\n margin-bottom: 1em;\n line-height: 1em;\n}\n\n.help-inline {\n display: inline-block;\n vertical-align: middle;\n padding-left: 5px;\n}\n\n/*\n .form-group\n ========================================================================== */\n\n.form-group {\n margin-bottom: 5px;\n padding: 0;\n border-width: 0;\n}\n\n/*\n .form-inline\n ========================================================================== */\n\n.form-inline input,\n.form-inline textarea,\n.form-inline select {\n display: inline-block;\n margin-bottom: 0;\n}\n\n.form-inline label {\n display: inline-block;\n}\n\n.form-inline .radio,\n.form-inline .checkbox,\n.form-inline .radio {\n padding-left: 0;\n margin-bottom: 0;\n vertical-align: middle;\n}\n\n.form-inline .radio input[type=\"radio\"],\n.form-inline .checkbox input[type=\"checkbox\"] {\n float: left;\n margin-left: 0;\n margin-right: 3px;\n}\n\n/*\n .form-search\n ========================================================================== */\n\n.form-search input,\n.form-search textarea,\n.form-search select {\n display: inline-block;\n margin-bottom: 0;\n}\n\n.form-search .search-query {\n padding-left: 14px;\n padding-right: 14px;\n margin-bottom: 0;\n border-radius: 14px;\n}\n\n.form-search label {\n display: inline-block;\n}\n\n.form-search .radio,\n.form-search .checkbox,\n.form-inline .radio {\n padding-left: 0;\n margin-bottom: 0;\n vertical-align: middle;\n}\n\n.form-search .radio input[type=\"radio\"],\n.form-search .checkbox input[type=\"checkbox\"] {\n float: left;\n margin-left: 0;\n margin-right: 3px;\n}\n\n/*\n .form--loading\n ========================================================================== */\n\n.form--loading:before {\n content: \"\";\n}\n\n.form--loading .form__spinner {\n display: block;\n}\n\n.form:before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(255, 255, 255, 0.7);\n z-index: 10;\n}\n\n.form__spinner {\n display: none;\n position: absolute;\n top: 50%;\n left: 50%;\n z-index: 11;\n}\n", + "/* ==========================================================================\n TABLES\n ========================================================================== */\n/*\ntable {\n margin-bottom: 1em;\n width: 100%;\n font-family: $global-font-family;\n font-size: $type-size-6;\n border-collapse: collapse;\n border: 1px solid $light-gray;\n\n & + table {\n margin-top: 1em;\n }\n}\n\nthead {\n background-color: $lighter-gray;\n border-bottom: 1px solid $light-gray;\n}\n\nth {\n padding: 0.5em;\n font-weight: bold;\n text-align: left;\n border-right: 1px solid $light-gray;\n}\n\ntd {\n padding: 0.5em;\n border-bottom: 1px solid $light-gray;\n border-right: 1px solid $light-gray;\n}\n\ntr, td, th {\n vertical-align: middle;\n}\n*/\n\n/*-- Table styling section - For Tufte-Jekyll, booktabs style is default for Markdown tables --*/\n\ntable, table.booktabs { width: auto; //making booktabs style tables the unstyled default in case someone uses Markdown styling\n //margin: 0 auto;\n border-spacing: 0px;\n border-top: 2px solid $border-color;\n border-bottom: 2px solid $border-color; }\n\n.booktabs th, th { border-bottom: 1px solid $border-color;\n padding: 0.65ex 0.5em 0.4ex 0.5em;\n font-weight: normal;\n //text-align: center; \n }\n\nth, td{ font-size: 1rem;\n line-height: 1.71428571; }\n\n.booktabs th.cmid, th { border-bottom: 1px solid lighten($border-color, 25%); }\n\n.booktabs th.nocmid { border-bottom: none; }\n\n.booktabs tbody tr:first-child td, tr:first-child td { padding-top: 0.65ex; } /* add space between thead row and tbody */\n\n.booktabs td, td { padding-left: 0.5em;\n padding-right: 0.5em;\n text-align: left; } \n\n.booktabs caption, caption { font-size: 90%;\n text-align: left;\n width: auto;\n margin-left: auto;\n margin-right: auto;\n margin-top: 1ex;\n caption-side: top; }\n\n.booktabs tbody tr, .booktabs thead tr th.l, .booktabs td.l { text-align: left !important; }\n.booktabs tbody tr, .booktabs thead tr th.c, .booktabs td.c { text-align: center !important; }\n.booktabs tbody tr, .booktabs thead tr th.r, .booktabs td.r { text-align: right !important; }\n\n.table-caption { float:right;\n clear:right;\n margin-right: -60%;\n width: 50%;\n margin-top: 0;\n margin-bottom: 0;\n font-size: 1.0rem;\n line-height: 1.96; }\n/* -- End of Table Styling section - For Tufte-Jekyll, booktabs style is default for Markdown tables --*/\n", + "/* ==========================================================================\n ANIMATIONS\n ========================================================================== */\n\n@-webkit-keyframes intro {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n\n@keyframes intro {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}", + "/* ==========================================================================\n BUTTONS\n ========================================================================== */\n\n/*\n Default button\n ========================================================================== */\n\n.btn {\n /* default */\n display: inline-block;\n margin-bottom: 0.25em;\n padding: 0.5em 1em;\n font-family: $sans-serif;\n font-size: $type-size-6;\n font-weight: bold;\n text-align: center;\n text-decoration: none;\n border-width: 0;\n border-radius: $border-radius;\n cursor: pointer;\n\n .icon {\n margin-right: 0.5em;\n }\n\n .icon + .hidden {\n margin-left: -0.5em; /* override for hidden text*/\n }\n\n /* button colors */\n $buttoncolors:\n (primary, $primary-color),\n (inverse, #fff),\n (light-outline, transparent),\n (success, $success-color),\n (warning, $warning-color),\n (danger, $danger-color),\n (info, $info-color),\n (facebook, $facebook-color),\n (twitter, $twitter-color),\n (linkedin, $linkedin-color);\n\n @each $buttoncolor, $color in $buttoncolors {\n &--#{$buttoncolor} {\n @include yiq-contrasted($color);\n @if ($buttoncolor == inverse) {\n border: 1px solid $border-color;\n }\n @if ($buttoncolor == light-outline) {\n border: 1px solid #fff;\n }\n\n &:visited {\n @include yiq-contrasted($color);\n }\n\n &:hover {\n @include yiq-contrasted(mix(#000, $color, 20%));\n }\n }\n }\n\n /* fills width of parent container */\n &--block {\n display: block;\n width: 100%;\n\n + .btn--block {\n margin-top: 0.25em;\n }\n }\n\n /* disabled */\n &--disabled {\n pointer-events: none;\n cursor: not-allowed;\n filter: alpha(opacity=65);\n box-shadow: none;\n opacity: 0.65;\n }\n\n /* extra large button */\n &--x-large {\n font-size: $type-size-4;\n }\n\n /* large button */\n &--large {\n font-size: $type-size-5;\n }\n\n /* small button */\n &--small {\n font-size: $type-size-7;\n }\n}", + "/* ==========================================================================\n NOTICE TEXT BLOCKS\n ========================================================================== */\n\n/**\n * Default Kramdown usage (no indents!):\n *
\n * #### Headline for the Notice\n * Text for the notice\n *
\n */\n\n@mixin notice($notice-color) {\n margin: 2em 0 !important; /* override*/\n padding: 1em;\n color: $text-color;\n font-family: $global-font-family;\n font-size: $type-size-6 !important;\n text-indent: initial; /* override*/\n background-color: mix($background-color, $notice-color, $notice-background-mix);\n border-radius: $border-radius;\n box-shadow: 0 1px 1px rgba($notice-color, 0.25);\n\n h4 {\n margin-top: 0 !important; /* override*/\n margin-bottom: 0.75em;\n line-height: inherit;\n }\n\n @at-root .page__content #{&} h4 {\n /* using at-root to override .page-content h4 font size*/\n margin-bottom: 0;\n font-size: 1em;\n }\n\n p {\n &:last-child {\n margin-bottom: 0 !important; /* override*/\n }\n }\n\n h4 + p {\n /* remove space above paragraphs that appear directly after notice headline*/\n margin-top: 0;\n padding-top: 0;\n }\n\n a {\n color: mix(#000, $notice-color, 10%);\n\n &:hover {\n color: mix(#000, $notice-color, 50%);\n }\n }\n\n @at-root #{selector-unify(&, \"blockquote\")} {\n border-left-color: mix(#000, $notice-color, 10%);\n }\n\n code {\n background-color: mix($background-color, $notice-color, $code-notice-background-mix)\n }\n\n\tpre code {\n\t\tbackground-color: inherit;\n\t}\n\n ul {\n &:last-child {\n margin-bottom: 0; /* override*/\n }\n }\n}\n\n/* Default notice */\n\n.notice {\n @include notice($light-gray);\n}\n\n/* Primary notice */\n\n.notice--primary {\n @include notice($primary-color);\n}\n\n/* Info notice */\n\n.notice--info {\n @include notice($info-color);\n}\n\n/* Warning notice */\n\n.notice--warning {\n @include notice($warning-color);\n}\n\n/* Success notice */\n\n.notice--success {\n @include notice($success-color);\n}\n\n/* Danger notice */\n\n.notice--danger {\n @include notice($danger-color);\n}\n", + "/* ==========================================================================\n MASTHEAD\n ========================================================================== */\n\n.masthead {\n position: relative;\n border-bottom: 1px solid $border-color;\n -webkit-animation: $intro-transition;\n animation: $intro-transition;\n -webkit-animation-delay: 0.15s;\n animation-delay: 0.15s;\n z-index: 20;\n\n &__inner-wrap {\n @include clearfix;\n margin-left: auto;\n margin-right: auto;\n padding: 1em;\n max-width: 100%;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n font-family: $sans-font;\n\n @include breakpoint($x-large) {\n max-width: $max-width;\n }\n\n nav {\n z-index: 10;\n }\n\n a {\n text-decoration: none;\n }\n }\n}\n\n.site-logo img {\n max-height: 2rem;\n}\n\n.site-title {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-item-align: center;\n align-self: center;\n font-weight: bold;\n // z-index: 20;\n}\n\n.site-subtitle {\n display: block;\n font-size: $type-size-8;\n}\n\n.masthead__menu {\n float: left;\n margin-left: 0;\n margin-right: 0;\n width: 100%;\n clear: both;\n\n .site-nav {\n margin-left: 0;\n\n @include breakpoint($small) {\n float: right;\n }\n }\n\n ul {\n margin: 0;\n padding: 0;\n clear: both;\n list-style-type: none;\n }\n}\n\n.masthead__menu-item {\n display: block;\n list-style-type: none;\n white-space: nowrap;\n\n &--lg {\n padding-right: 2em;\n font-weight: 700;\n }\n}\n", + "/* ==========================================================================\n NAVIGATION\n ========================================================================== */\n\n/*\n Breadcrumb navigation links\n ========================================================================== */\n\n.breadcrumbs {\n @include clearfix;\n margin: 0 auto;\n max-width: 100%;\n padding-left: 1em;\n padding-right: 1em;\n font-family: $sans-serif;\n -webkit-animation: $intro-transition;\n animation: $intro-transition;\n -webkit-animation-delay: 0.3s;\n animation-delay: 0.3s;\n\n @include breakpoint($x-large) {\n max-width: $x-large;\n }\n\n ol {\n padding: 0;\n list-style: none;\n font-size: $type-size-6;\n\n @include breakpoint($large) {\n float: right;\n width: calc(100% - #{$right-sidebar-width-narrow});\n }\n\n @include breakpoint($x-large) {\n width: calc(100% - #{$right-sidebar-width});\n }\n }\n\n li {\n display: inline;\n }\n\n .current {\n font-weight: bold;\n }\n}\n\n/*\n Post pagination navigation links\n ========================================================================== */\n\n.pagination {\n @include clearfix();\n float: left;\n margin-top: 1em;\n padding-top: 1em;\n width: 100%;\n\n ul {\n margin: 0;\n padding: 0;\n list-style-type: none;\n font-family: $sans-serif;\n }\n\n li {\n display: block;\n float: left;\n margin-left: -1px;\n\n a {\n display: block;\n margin-bottom: 0.25em;\n padding: 0.5em 1em;\n font-family: $sans-serif;\n font-size: 14px;\n font-weight: bold;\n line-height: 1.5;\n text-align: center;\n text-decoration: none;\n color: $muted-text-color;\n border: 1px solid mix(#000, $border-color, 25%);\n border-radius: 0;\n\n &:hover {\n color: $link-color-hover;\n }\n\n &.current,\n &.current.disabled {\n color: #fff;\n background: $primary-color;\n }\n\n &.disabled {\n color: rgba($muted-text-color, 0.5);\n pointer-events: none;\n cursor: not-allowed;\n }\n }\n\n &:first-child {\n margin-left: 0;\n\n a {\n border-top-left-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n }\n }\n\n &:last-child {\n a {\n border-top-right-radius: $border-radius;\n border-bottom-right-radius: $border-radius;\n }\n }\n }\n\n /* next/previous buttons */\n &--pager {\n display: block;\n padding: 1em 2em;\n float: left;\n width: 50%;\n font-family: $sans-serif;\n font-size: $type-size-5;\n font-weight: bold;\n text-align: center;\n text-decoration: none;\n color: $muted-text-color;\n border: 1px solid mix(#000, $border-color, 25%);\n border-radius: $border-radius;\n\n &:hover {\n @include yiq-contrasted($muted-text-color);\n }\n\n &:first-child {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n\n &:last-child {\n margin-left: -1px;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n &.disabled {\n color: rgba($muted-text-color, 0.5);\n pointer-events: none;\n cursor: not-allowed;\n }\n }\n}\n\n.page__content + .pagination,\n.page__meta + .pagination,\n.page__share + .pagination,\n.page__comments + .pagination {\n margin-top: 2em;\n padding-top: 2em;\n border-top: 1px solid $border-color;\n}\n\n/*\n Priority plus navigation\n ========================================================================== */\n\n.greedy-nav {\n position: relative;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n min-height: $nav-height;\n background: $background-color;\n\n a {\n display: block;\n margin: 0 1rem;\n color: $masthead-link-color;\n text-decoration: none;\n -webkit-transition: none;\n transition: none;\n\n &:hover {\n color: $masthead-link-color-hover;\n }\n\n &.site-logo {\n margin-left: 0;\n margin-right: 0.5rem;\n }\n\n &.site-title {\n margin-left: 0;\n }\n }\n\n img {\n -webkit-transition: none;\n transition: none;\n }\n\n &__toggle {\n -ms-flex-item-align: center;\n align-self: center;\n height: $nav-toggle-height;\n border: 0;\n outline: none;\n background-color: transparent;\n cursor: pointer;\n }\n\n .visible-links {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: end;\n -ms-flex-pack: end;\n justify-content: flex-end;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n overflow: hidden;\n\n li {\n -webkit-box-flex: 0;\n -ms-flex: none;\n flex: none;\n }\n\n a {\n position: relative;\n\n &:before {\n content: \"\";\n position: absolute;\n left: 0;\n bottom: 0;\n height: 4px;\n background: $primary-color;\n width: 100%;\n -webkit-transition: $global-transition;\n transition: $global-transition;\n -webkit-transform: scaleX(0) translate3d(0, 0, 0);\n transform: scaleX(0) translate3d(0, 0, 0); // hide\n }\n\n &:hover:before {\n -webkit-transform: scaleX(1);\n -ms-transform: scaleX(1);\n transform: scaleX(1); // reveal\n }\n }\n }\n\n .hidden-links {\n position: absolute;\n top: 100%;\n right: 0;\n margin-top: 15px;\n padding: 5px;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n background: $background-color;\n -webkit-box-shadow: 0 2px 4px 0 rgba(#000, 0.16),\n 0 2px 10px 0 rgba(#000, 0.12);\n box-shadow: 0 2px 4px 0 rgba(#000, 0.16), 0 2px 10px 0 rgba(#000, 0.12);\n\n &.hidden {\n display: none;\n }\n\n a {\n margin: 0;\n padding: 10px 20px;\n font-size: $type-size-5;\n\n &:hover {\n color: $masthead-link-color-hover;\n background: $navicon-link-color-hover;\n }\n }\n\n &:before {\n content: \"\";\n position: absolute;\n top: -11px;\n right: 10px;\n width: 0;\n border-style: solid;\n border-width: 0 10px 10px;\n border-color: $border-color transparent;\n display: block;\n z-index: 0;\n }\n\n &:after {\n content: \"\";\n position: absolute;\n top: -10px;\n right: 10px;\n width: 0;\n border-style: solid;\n border-width: 0 10px 10px;\n border-color: $background-color transparent;\n display: block;\n z-index: 1;\n }\n\n li {\n display: block;\n border-bottom: 1px solid $border-color;\n\n &:last-child {\n border-bottom: none;\n }\n }\n }\n}\n\n.no-js {\n .greedy-nav {\n .visible-links {\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n overflow: visible;\n }\n }\n}\n\n/*\n Navigation list\n ========================================================================== */\n\n.nav__list {\n margin-bottom: 1.5em;\n\n input[type=\"checkbox\"],\n label {\n display: none;\n }\n\n @include breakpoint(max-width $large - 1px) {\n label {\n position: relative;\n display: inline-block;\n padding: 0.5em 2.5em 0.5em 1em;\n color: $gray;\n font-size: $type-size-6;\n font-weight: bold;\n border: 1px solid $light-gray;\n border-radius: $border-radius;\n z-index: 20;\n -webkit-transition: 0.2s ease-out;\n transition: 0.2s ease-out;\n cursor: pointer;\n\n &:before,\n &:after {\n content: \"\";\n position: absolute;\n right: 1em;\n top: 1.25em;\n width: 0.75em;\n height: 0.125em;\n line-height: 1;\n background-color: $gray;\n -webkit-transition: 0.2s ease-out;\n transition: 0.2s ease-out;\n }\n\n &:after {\n -webkit-transform: rotate(90deg);\n -ms-transform: rotate(90deg);\n transform: rotate(90deg);\n }\n\n &:hover {\n color: #fff;\n border-color: $gray;\n background-color: mix(white, #000, 20%);\n\n &:before,\n &:after {\n background-color: #fff;\n }\n }\n }\n\n /* selected*/\n input:checked + label {\n color: white;\n background-color: mix(white, #000, 20%);\n\n &:before,\n &:after {\n background-color: #fff;\n }\n }\n\n /* on hover show expand*/\n label:hover:after {\n -webkit-transform: rotate(90deg);\n -ms-transform: rotate(90deg);\n transform: rotate(90deg);\n }\n\n input:checked + label:hover:after {\n -webkit-transform: rotate(0);\n -ms-transform: rotate(0);\n transform: rotate(0);\n }\n\n ul {\n margin-bottom: 1em;\n }\n\n a {\n display: block;\n padding: 0.25em 0;\n\n @include breakpoint($large) {\n padding-top: 0.125em;\n padding-bottom: 0.125em;\n }\n\n &:hover {\n text-decoration: underline;\n }\n }\n }\n}\n\n.nav__list .nav__items {\n margin: 0;\n font-size: 1.25rem;\n\n a {\n color: inherit;\n }\n\n .active {\n margin-left: -0.5em;\n padding-left: 0.5em;\n padding-right: 0.5em;\n font-weight: bold;\n }\n\n @include breakpoint(max-width $large - 1px) {\n position: relative;\n max-height: 0;\n opacity: 0%;\n overflow: hidden;\n z-index: 10;\n -webkit-transition: 0.3s ease-in-out;\n transition: 0.3s ease-in-out;\n -webkit-transform: translate(0, 10%);\n -ms-transform: translate(0, 10%);\n transform: translate(0, 10%);\n }\n}\n\n@include breakpoint(max-width $large - 1px) {\n .nav__list input:checked ~ .nav__items {\n -webkit-transition: 0.5s ease-in-out;\n transition: 0.5s ease-in-out;\n max-height: 9999px; /* exaggerate max-height to accommodate tall lists*/\n overflow: visible;\n opacity: 1;\n margin-top: 1em;\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n transform: translate(0, 0);\n }\n}\n\n.nav__title {\n margin: 0;\n padding: 0.5rem 0.75rem;\n font-family: $sans-serif-narrow;\n font-size: $type-size-5;\n font-weight: bold;\n}\n\n.nav__sub-title {\n display: block;\n margin: 0.5rem 0;\n padding: 0.25rem 0;\n font-family: $sans-serif-narrow;\n font-size: $type-size-6;\n font-weight: bold;\n text-transform: uppercase;\n border-bottom: 1px solid $border-color;\n}\n\n/*\n Table of contents navigation\n ========================================================================== */\n\n.toc {\n font-family: $sans-serif-narrow;\n color: $gray;\n background-color: $background-color;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n -webkit-box-shadow: $box-shadow;\n box-shadow: $box-shadow;\n\n .nav__title {\n color: #fff;\n font-size: $type-size-6;\n background: $primary-color;\n border-top-left-radius: $border-radius;\n border-top-right-radius: $border-radius;\n }\n\n // Scrollspy marks toc items as .active when they are in focus\n .active a {\n @include yiq-contrasted($active-color);\n }\n}\n\n.toc__menu {\n margin: 0;\n padding: 0;\n width: 100%;\n list-style: none;\n font-size: $type-size-6;\n\n @include breakpoint($large) {\n font-size: $type-size-7;\n }\n\n a {\n display: block;\n padding: 0.25rem 0.75rem;\n color: $muted-text-color;\n font-weight: bold;\n line-height: 1.5;\n border-bottom: 1px solid $border-color;\n\n &:hover {\n color: $text-color;\n }\n }\n\n li ul > li a {\n padding-left: 1.25rem;\n font-weight: normal;\n }\n\n li ul li ul > li a {\n padding-left: 1.75rem;\n }\n\n li ul li ul li ul > li a {\n padding-left: 2.25rem;\n }\n\n li ul li ul li ul li ul > li a {\n padding-left: 2.75rem;\n }\n\n li ul li ul li ul li ul li ul > li a {\n padding-left: 3.25rem\n }\n}\n", + "/* ==========================================================================\n FOOTER\n ========================================================================== */\n\n.page__footer {\n @include clearfix;\n float: left;\n margin-left: 0;\n margin-right: 0;\n width: 100%;\n margin-top: 3em;\n color: $muted-text-color;\n -webkit-animation: $intro-transition;\n animation: $intro-transition;\n -webkit-animation-delay: 0.45s;\n animation-delay: 0.45s;\n background-color: $footer-background-color;\n\n footer {\n @include clearfix;\n margin-left: auto;\n margin-right: auto;\n margin-top: 2em;\n max-width: 100%;\n padding: 0 1em 2em;\n\n @include breakpoint($x-large) {\n max-width: $x-large;\n }\n }\n\n a {\n color: inherit;\n text-decoration: none;\n\n &:hover {\n text-decoration: underline;\n }\n }\n\n .fas,\n .fab,\n .far,\n .fal {\n color: $muted-text-color;\n }\n}\n\n.page__footer-copyright {\n font-family: $global-font-family;\n font-size: $type-size-7;\n}\n\n.page__footer-follow {\n ul {\n margin: 0;\n padding: 0;\n list-style-type: none;\n }\n\n li {\n display: inline-block;\n padding-top: 5px;\n padding-bottom: 5px;\n font-family: $sans-serif-narrow;\n font-size: $type-size-6;\n text-transform: uppercase;\n }\n\n li + li:before {\n content: \"\";\n padding-right: 5px;\n }\n\n a {\n padding-right: 10px;\n font-weight: bold;\n }\n\n .social-icons {\n a {\n white-space: nowrap;\n }\n }\n}\n", + "/* ==========================================================================\n SEARCH\n ========================================================================== */\n\n.layout--search {\n .archive__item-teaser {\n margin-bottom: 0.25em;\n }\n}\n\n.search__toggle {\n margin-left: 1rem;\n margin-right: 1rem;\n height: $nav-toggle-height;\n border: 0;\n outline: none;\n color: $primary-color;\n background-color: transparent;\n cursor: pointer;\n -webkit-transition: 0.2s;\n transition: 0.2s;\n\n &:hover {\n color: mix(#000, $primary-color, 25%);\n }\n}\n\n.search-icon {\n width: 100%;\n height: 100%;\n}\n\n.search-content {\n display: none;\n visibility: hidden;\n padding-top: 1em;\n padding-bottom: 1em;\n\n &__inner-wrap {\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n padding-left: 1em;\n padding-right: 1em;\n -webkit-animation: $intro-transition;\n animation: $intro-transition;\n -webkit-animation-delay: 0.15s;\n animation-delay: 0.15s;\n\n @include breakpoint($x-large) {\n max-width: $max-width;\n }\n\n }\n\n &__form {\n background-color: transparent;\n }\n\n .search-input {\n display: block;\n margin-bottom: 0;\n padding: 0;\n border: none;\n outline: none;\n box-shadow: none;\n background-color: transparent;\n font-size: $type-size-3;\n\n @include breakpoint($large) {\n font-size: $type-size-2;\n }\n\n @include breakpoint($x-large) {\n font-size: $type-size-1;\n }\n }\n\n &.is--visible {\n display: block;\n visibility: visible;\n\n &::after {\n content: \"\";\n display: block;\n }\n }\n\n .results__found {\n margin-top: 0.5em;\n font-size: $type-size-6;\n }\n\n .archive__item {\n margin-bottom: 2em;\n\n @include breakpoint($large) {\n width: 75%;\n }\n\n @include breakpoint($x-large) {\n width: 50%;\n }\n }\n\n .archive__item-title {\n margin-top: 0;\n }\n\n .archive__item-excerpt {\n margin-bottom: 0;\n }\n}\n\n/* Algolia search */\n\n.ais-search-box {\n max-width: 100% !important;\n margin-bottom: 2em;\n}\n\n.archive__item-title .ais-Highlight {\n color: $primary-color;\n font-style: normal;\n text-decoration: underline;\n}\n\n.archive__item-excerpt .ais-Highlight {\n color: $primary-color;\n font-style: normal;\n font-weight: bold;\n}\n", + "/* ==========================================================================\n Syntax highlighting\n ========================================================================== */\n\ndiv.highlighter-rouge,\nfigure.highlight {\n position: relative;\n margin-bottom: 1em;\n background: $base00;\n color: $base05;\n font-family: $monospace;\n font-size: $type-size-6;\n line-height: 1.8;\n border-radius: $border-radius;\n\n > pre,\n pre.highlight {\n margin: 0;\n padding: 1em;\n }\n}\n\n.highlight table {\n margin-bottom: 0;\n font-size: 1em;\n border: 0;\n\n td {\n padding: 0;\n width: calc(100% - 1em);\n border: 0;\n\n /* line numbers*/\n &.gutter,\n &.rouge-gutter {\n padding-right: 1em;\n width: 1em;\n color: $base04;\n border-right: 1px solid $base04;\n text-align: right;\n }\n\n /* code */\n &.code,\n &.rouge-code {\n padding-left: 1em;\n }\n }\n\n pre {\n margin: 0;\n }\n}\n\n.highlight pre {\n width: 100%;\n}\n\n.highlight .hll {\n background-color: $base06;\n}\n.highlight {\n .c {\n /* Comment */\n color: $base04;\n }\n .err {\n /* Error */\n color: $base08;\n }\n .k {\n /* Keyword */\n color: $base0e;\n }\n .l {\n /* Literal */\n color: $base09;\n }\n .n {\n /* Name */\n color: $base05;\n }\n .o {\n /* Operator */\n color: $base0c;\n }\n .p {\n /* Punctuation */\n color: $base05;\n }\n .cm {\n /* Comment.Multiline */\n color: $base04;\n }\n .cp {\n /* Comment.Preproc */\n color: $base04;\n }\n .c1 {\n /* Comment.Single */\n color: $base04;\n }\n .cs {\n /* Comment.Special */\n color: $base04;\n }\n .gd {\n /* Generic.Deleted */\n color: $base08;\n }\n .ge {\n /* Generic.Emph */\n font-style: italic;\n }\n .gh {\n /* Generic.Heading */\n color: $base05;\n font-weight: bold;\n }\n .gi {\n /* Generic.Inserted */\n color: $base0b;\n }\n .gp {\n /* Generic.Prompt */\n color: $base04;\n font-weight: bold;\n }\n .gs {\n /* Generic.Strong */\n font-weight: bold;\n }\n .gu {\n /* Generic.Subheading */\n color: $base0c;\n font-weight: bold;\n }\n .kc {\n /* Keyword.Constant */\n color: $base0e;\n }\n .kd {\n /* Keyword.Declaration */\n color: $base0e;\n }\n .kn {\n /* Keyword.Namespace */\n color: $base0c;\n }\n .kp {\n /* Keyword.Pseudo */\n color: $base0e;\n }\n .kr {\n /* Keyword.Reserved */\n color: $base0e;\n }\n .kt {\n /* Keyword.Type */\n color: $base0a;\n }\n .ld {\n /* Literal.Date */\n color: $base0b;\n }\n .m {\n /* Literal.Number */\n color: $base09;\n }\n .s {\n /* Literal.String */\n color: $base0b;\n }\n .na {\n /* Name.Attribute */\n color: $base0d;\n }\n .nb {\n /* Name.Builtin */\n color: $base05;\n }\n .nc {\n /* Name.Class */\n color: $base0a;\n }\n .no {\n /* Name.Constant */\n color: $base08;\n }\n .nd {\n /* Name.Decorator */\n color: $base0c;\n }\n .ni {\n /* Name.Entity */\n color: $base05;\n }\n .ne {\n /* Name.Exception */\n color: $base08;\n }\n .nf {\n /* Name.Function */\n color: $base0d;\n }\n .nl {\n /* Name.Label */\n color: $base05;\n }\n .nn {\n /* Name.Namespace */\n color: $base0a;\n }\n .nx {\n /* Name.Other */\n color: $base0d;\n }\n .py {\n /* Name.Property */\n color: $base05;\n }\n .nt {\n /* Name.Tag */\n color: $base0c;\n }\n .nv {\n /* Name.Variable */\n color: $base08;\n }\n .ow {\n /* Operator.Word */\n color: $base0c;\n }\n .w {\n /* Text.Whitespace */\n color: $base05;\n }\n .mf {\n /* Literal.Number.Float */\n color: $base09;\n }\n .mh {\n /* Literal.Number.Hex */\n color: $base09;\n }\n .mi {\n /* Literal.Number.Integer */\n color: $base09;\n }\n .mo {\n /* Literal.Number.Oct */\n color: $base09;\n }\n .sb {\n /* Literal.String.Backtick */\n color: $base0b;\n }\n .sc {\n /* Literal.String.Char */\n color: $base05;\n }\n .sd {\n /* Literal.String.Doc */\n color: $base04;\n }\n .s2 {\n /* Literal.String.Double */\n color: $base0b;\n }\n .se {\n /* Literal.String.Escape */\n color: $base09;\n }\n .sh {\n /* Literal.String.Heredoc */\n color: $base0b;\n }\n .si {\n /* Literal.String.Interpol */\n color: $base09;\n }\n .sx {\n /* Literal.String.Other */\n color: $base0b;\n }\n .sr {\n /* Literal.String.Regex */\n color: $base0b;\n }\n .s1 {\n /* Literal.String.Single */\n color: $base0b;\n }\n .ss {\n /* Literal.String.Symbol */\n color: $base0b;\n }\n .bp {\n /* Name.Builtin.Pseudo */\n color: $base05;\n }\n .vc {\n /* Name.Variable.Class */\n color: $base08;\n }\n .vg {\n /* Name.Variable.Global */\n color: $base08;\n }\n .vi {\n /* Name.Variable.Instance */\n color: $base08;\n }\n .il {\n /* Literal.Number.Integer.Long */\n color: $base09;\n }\n}\n\n.gist {\n th, td {\n border-bottom: 0;\n }\n}", + "/* ==========================================================================\n UTILITY CLASSES\n ========================================================================== */\n\n/*\n Visibility\n ========================================================================== */\n\n/* http://www.456bereastreet.com/archive/200711/screen_readers_sometimes_ignore_displaynone/ */\n\n.hidden,\n.is--hidden {\n display: none;\n visibility: hidden;\n}\n\n/* for preloading images */\n\n.load {\n display: none;\n}\n\n.transparent {\n opacity: 0;\n}\n\n/* https://developer.yahoo.com/blogs/ydn/clip-hidden-content-better-accessibility-53456.html */\n\n.visually-hidden,\n.screen-reader-text,\n.screen-reader-text span,\n.screen-reader-shortcut {\n position: absolute !important;\n clip: rect(1px, 1px, 1px, 1px);\n height: 1px !important;\n width: 1px !important;\n border: 0 !important;\n overflow: hidden;\n}\n\nbody:hover .visually-hidden a,\nbody:hover .visually-hidden input,\nbody:hover .visually-hidden button {\n display: none !important;\n}\n\n/* screen readers */\n\n.screen-reader-text:focus,\n.screen-reader-shortcut:focus {\n clip: auto !important;\n height: auto !important;\n width: auto !important;\n display: block;\n font-size: 1em;\n font-weight: bold;\n padding: 15px 23px 14px;\n background: #fff;\n z-index: 100000;\n text-decoration: none;\n box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6);\n}\n\n/*\n Skip links\n ========================================================================== */\n\n.skip-link {\n position: fixed;\n z-index: 20;\n margin: 0;\n font-family: $sans-serif;\n white-space: nowrap;\n}\n\n.skip-link li {\n height: 0;\n width: 0;\n list-style: none;\n}\n\n/*\n Type\n ========================================================================== */\n\n.text-left {\n text-align: left;\n}\n\n.text-center {\n text-align: center;\n}\n\n.text-right {\n text-align: right;\n}\n\n.text-justify {\n text-align: justify;\n}\n\n.text-nowrap {\n white-space: nowrap;\n}\n\n/*\n Task lists\n ========================================================================== */\n\n.task-list {\n padding:0;\n\n li {\n list-style-type: none;\n }\n\n .task-list-item-checkbox {\n margin-right: 0.5em;\n opacity: 1;\n }\n}\n\n.task-list .task-list {\n margin-left: 1em;\n}\n\n/*\n Alignment\n ========================================================================== */\n\n/* clearfix */\n\n.cf {\n clear: both;\n}\n\n.wrapper {\n margin-left: auto;\n margin-right: auto;\n width: 100%;\n}\n\n/*\n Images\n ========================================================================== */\n\n/* image align left */\n\n.align-left {\n display: block;\n margin-left: auto;\n margin-right: auto;\n\n @include breakpoint($small) {\n float: left;\n margin-right: 1em;\n }\n}\n\n/* image align right */\n\n.align-right {\n display: block;\n margin-left: auto;\n margin-right: auto;\n\n @include breakpoint($small) {\n float: right;\n margin-left: 1em;\n }\n}\n\n/* image align center */\n\n.align-center {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n/* file page content container */\n\n.full {\n @include breakpoint($large) {\n margin-right: -1 * span(2.5 of 12) !important;\n }\n}\n\n/*\n Icons\n ========================================================================== */\n\n.icon {\n display: inline-block;\n fill: currentColor;\n width: 1em;\n height: 1.1em;\n line-height: 1;\n position: relative;\n top: -0.1em;\n vertical-align: middle;\n}\n\n/* social icons*/\n\n.social-icons {\n .fas,\n .fab,\n .far,\n .fal {\n color: $text-color;\n }\n\n .fa-behance,\n .fa-behance-square {\n color: $behance-color;\n }\n\n .fa-bitbucket {\n color: $bitbucket-color;\n }\n\n .fa-dribbble,\n .fa-dribble-square {\n color: $dribbble-color;\n }\n\n .fa-facebook,\n .fa-facebook-square,\n .fa-facebook-f {\n color: $facebook-color;\n }\n\n .fa-flickr {\n color: $flickr-color;\n }\n\n .fa-foursquare {\n color: $foursquare-color;\n }\n\n .fa-github,\n .fa-github-alt,\n .fa-github-square {\n color: $github-color;\n }\n\n .fa-gitlab {\n color: $gitlab-color;\n }\n\n .fa-instagram {\n color: $instagram-color;\n }\n\n .fa-keybase {\n color: $keybase-color;\n }\n\n .fa-lastfm,\n .fa-lastfm-square {\n color: $lastfm-color;\n }\n\n .fa-linkedin,\n .fa-linkedin-in {\n color: $linkedin-color;\n }\n\n .fa-mastodon,\n .fa-mastodon-square {\n color: $mastodon-color;\n }\n\n .fa-pinterest,\n .fa-pinterest-p,\n .fa-pinterest-square {\n color: $pinterest-color;\n }\n\n .fa-reddit {\n color: $reddit-color;\n }\n\n .fa-rss,\n .fa-rss-square {\n color: $rss-color;\n }\n\n .fa-soundcloud {\n color: $soundcloud-color;\n }\n\n .fa-stack-exchange,\n .fa-stack-overflow {\n color: $stackoverflow-color;\n }\n\n .fa-tumblr,\n .fa-tumblr-square {\n color: $tumblr-color;\n }\n\n .fa-twitter,\n .fa-twitter-square {\n color: $twitter-color;\n }\n\n .fa-vimeo,\n .fa-vimeo-square,\n .fa-vimeo-v {\n color: $vimeo-color;\n }\n\n .fa-vine {\n color: $vine-color;\n }\n\n .fa-youtube {\n color: $youtube-color;\n }\n\n .fa-xing,\n .fa-xing-square {\n color: $xing-color;\n }\n}\n\n/*\n Navicons\n ========================================================================== */\n\n.navicon {\n position: relative;\n width: $navicon-width;\n height: $navicon-height;\n background: $primary-color;\n margin: auto;\n -webkit-transition: 0.3s;\n transition: 0.3s;\n\n &:before,\n &:after {\n content: \"\";\n position: absolute;\n left: 0;\n width: $navicon-width;\n height: $navicon-height;\n background: $primary-color;\n -webkit-transition: 0.3s;\n transition: 0.3s;\n }\n\n &:before {\n top: (-2 * $navicon-height);\n }\n\n &:after {\n bottom: (-2 * $navicon-height);\n }\n}\n\n.close .navicon {\n /* hide the middle line*/\n background: transparent;\n\n /* overlay the lines by setting both their top values to 0*/\n &:before,\n &:after {\n -webkit-transform-origin: 50% 50%;\n -ms-transform-origin: 50% 50%;\n transform-origin: 50% 50%;\n top: 0;\n width: $navicon-width;\n }\n\n /* rotate the lines to form the x shape*/\n &:before {\n -webkit-transform: rotate3d(0, 0, 1, 45deg);\n transform: rotate3d(0, 0, 1, 45deg);\n }\n &:after {\n -webkit-transform: rotate3d(0, 0, 1, -45deg);\n transform: rotate3d(0, 0, 1, -45deg);\n }\n}\n\n.greedy-nav__toggle {\n &:before {\n @supports (pointer-events: none) {\n content: '';\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n opacity: 0;\n background-color: $background-color;\n -webkit-transition: $global-transition;\n transition: $global-transition;\n pointer-events: none;\n }\n }\n\n &.close {\n &:before {\n opacity: 0.9;\n -webkit-transition: $global-transition;\n transition: $global-transition;\n pointer-events: auto;\n }\n }\n}\n\n.greedy-nav__toggle:hover {\n .navicon,\n .navicon:before,\n .navicon:after {\n background: mix(#000, $primary-color, 25%);\n }\n\n &.close {\n .navicon {\n background: transparent;\n }\n }\n}\n\n/*\n Sticky, fixed to top content\n ========================================================================== */\n\n.sticky {\n @include breakpoint($large) {\n @include clearfix();\n position: -webkit-sticky;\n position: sticky;\n top: 2em;\n\n > * {\n display: block;\n }\n }\n}\n\n/*\n Wells\n ========================================================================== */\n\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: $border-radius;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n\n/*\n Modals\n ========================================================================== */\n\n.show-modal {\n overflow: hidden;\n position: relative;\n\n &:before {\n position: absolute;\n content: \"\";\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 999;\n background-color: rgba(255, 255, 255, 0.85);\n }\n\n .modal {\n display: block;\n }\n}\n\n.modal {\n display: none;\n position: fixed;\n width: 300px;\n top: 50%;\n left: 50%;\n margin-left: -150px;\n margin-top: -150px;\n min-height: 0;\n z-index: 9999;\n background: #fff;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n box-shadow: $box-shadow;\n\n &__title {\n margin: 0;\n padding: 0.5em 1em;\n }\n\n &__supporting-text {\n padding: 0 1em 0.5em 1em;\n }\n\n &__actions {\n padding: 0.5em 1em;\n border-top: 1px solid $border-color;\n }\n}\n\n/*\n Footnotes\n ========================================================================== */\n\n.footnote {\n color: $muted-text-color;\n text-decoration: none;\n}\n\n.footnotes {\n color: $muted-text-color;\n\n ol,\n li,\n p {\n margin-bottom: 0;\n font-size: $type-size-6;\n }\n}\n\na.reversefootnote {\n color: $contrast-color;\n text-decoration: none;\n\n &:hover {\n text-decoration: underline;\n }\n}\n\n/*\n Required\n ========================================================================== */\n\n.required {\n color: $danger-color;\n font-weight: bold;\n}\n\n/*\n Google Custom Search Engine\n ========================================================================== */\n\n.gsc-control-cse {\n table,\n tr,\n td {\n border: 0; /* remove table borders widget */\n }\n}\n\n/*\n Responsive Video Embed\n ========================================================================== */\n\n.responsive-video-container {\n position: relative;\n margin-bottom: 1em;\n padding-bottom: 56.25%;\n height: 0;\n overflow: hidden;\n max-width: 100%;\n\n iframe,\n object,\n embed {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n// full screen video fixes\n:-webkit-full-screen-ancestor {\n .masthead,\n .page__footer {\n position: static;\n }\n}\n", + "/* ==========================================================================\n SINGLE PAGE/POST\n ========================================================================== */\n\n#main {\n @include clearfix;\n margin-left: auto;\n margin-right: auto;\n padding-left: 1em;\n padding-right: 1em;\n -webkit-animation: $intro-transition;\n animation: $intro-transition;\n max-width: 100%;\n -webkit-animation-delay: 0.15s;\n animation-delay: 0.15s;\n\n @include breakpoint($x-large) {\n max-width: $max-width;\n }\n}\n\nbody {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n min-height: 100vh;\n counter-reset: sidenote-counter;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n\n.initial-content,\n.search-content {\n flex: 1 0 auto;\n}\n\n.page {\n @include breakpoint($large) {\n float: right;\n width: calc(100% - #{$right-sidebar-width-narrow});\n padding-right: $right-sidebar-width-narrow;\n }\n\n @include breakpoint($x-large) {\n width: calc(100% - #{$right-sidebar-width});\n padding-right: $right-sidebar-width;\n }\n\n .page__inner-wrap {\n float: left;\n margin-top: 1em;\n margin-left: 0;\n margin-right: 0;\n width: 100%;\n clear: both;\n\n .page__content,\n .page__meta,\n .page__share {\n position: relative;\n float: left;\n margin-left: 0;\n margin-right: 0;\n width: 100%;\n clear: both;\n }\n }\n}\n\n.page__title {\n margin-top: 0;\n line-height: 1;\n\n a {\n color: $text-color;\n text-decoration: none;\n }\n\n & + .page__meta {\n margin-top: -0.5em;\n }\n}\n\n.page__lead {\n font-family: $global-font-family;\n font-size: $type-size-4;\n}\n\n.page__content {\n h2 {\n padding-bottom: 0.5em;\n border-bottom: 1px solid $border-color;\n }\n\n\th1, h2, h3, h4, h5, h6 {\n\t\tmax-width: 75%; // Adjust the percentage as needed\n\t\t.header-link {\n\t\t\tposition: relative;\n\t\t\tleft: 0.5em;\n\t\t\topacity: 0;\n\t\t\tfont-size: 0.8em;\n\t\t\t-webkit-transition: opacity 0.2s ease-in-out 0.1s;\n\t\t\t-moz-transition: opacity 0.2s ease-in-out 0.1s;\n\t\t\t-o-transition: opacity 0.2s ease-in-out 0.1s;\n\t\t\ttransition: opacity 0.2s ease-in-out 0.1s;\n\t\t}\n\n\t\t&:hover .header-link {\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n p,\n li,\n dl {\n font-size: 1em;\n }\n\n /* paragraph indents */\n p {\n margin: 0 0 $indent-var;\n\n /* sibling indentation*/\n @if $paragraph-indent == true {\n & + p {\n text-indent: $indent-var;\n margin-top: -($indent-var);\n }\n }\n }\n\n a:not(.btn) {\n &:hover {\n text-decoration: underline;\n\n img {\n box-shadow: 0 0 10px rgba(#000, 0.25);\n }\n }\n }\n\n :not(pre) > code {\n padding-top: 0.1rem;\n padding-bottom: 0.1rem;\n font-size: 0.8em;\n background: $code-background-color;\n border-radius: $border-radius;\n\n &::before,\n &::after {\n letter-spacing: -0.2em;\n content: \"\\00a0\"; /* non-breaking space*/\n }\n }\n\n dt {\n margin-top: 1em;\n font-family: $sans-serif;\n font-weight: bold;\n }\n\n dd {\n margin-left: 1em;\n font-family: $sans-serif;\n font-size: $type-size-6;\n }\n\n .small {\n font-size: $type-size-6;\n }\n\n /* blockquote citations */\n blockquote + .small {\n margin-top: -1.5em;\n padding-left: 1.25rem;\n }\n}\n\n.page__hero {\n position: relative;\n margin-bottom: 2em;\n @include clearfix;\n -webkit-animation: $intro-transition;\n animation: $intro-transition;\n -webkit-animation-delay: 0.25s;\n animation-delay: 0.25s;\n\n &--overlay {\n position: relative;\n margin-bottom: 2em;\n padding: 3em 0;\n @include clearfix;\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n -webkit-animation: $intro-transition;\n animation: $intro-transition;\n -webkit-animation-delay: 0.25s;\n animation-delay: 0.25s;\n\n a {\n color: #fff;\n }\n\n .wrapper {\n padding-left: 1em;\n padding-right: 1em;\n\n @include breakpoint($x-large) {\n max-width: $x-large;\n }\n }\n\n .page__title,\n .page__meta,\n .page__lead,\n .btn {\n color: #fff;\n text-shadow: 1px 1px 4px rgba(#000, 0.5);\n }\n\n .page__lead {\n max-width: $medium;\n }\n\n .page__title {\n font-size: $type-size-2;\n\n @include breakpoint($small) {\n font-size: $type-size-1;\n }\n }\n }\n}\n\n.page__hero-image {\n width: 100%;\n height: auto;\n -ms-interpolation-mode: bicubic;\n}\n\n.page__hero-caption {\n position: absolute;\n bottom: 0;\n right: 0;\n margin: 0 auto;\n padding: 2px 5px;\n color: #fff;\n font-family: $caption-font-family;\n font-size: $type-size-7;\n background: #000;\n text-align: right;\n z-index: 5;\n opacity: 0.5;\n border-radius: $border-radius 0 0 0;\n\n @include breakpoint($large) {\n padding: 5px 10px;\n }\n\n a {\n color: #fff;\n text-decoration: none;\n }\n}\n\n/*\n Social sharing\n ========================================================================== */\n\n.page__share {\n margin-top: 2em;\n padding-top: 1em;\n border-top: 1px solid $border-color;\n\n @include breakpoint(max-width $small) {\n .btn span {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n }\n }\n}\n\n.page__share-title {\n margin-bottom: 10px;\n font-size: $type-size-6;\n text-transform: uppercase;\n}\n\n/*\n Page meta\n ========================================================================== */\n\n.page__meta {\n margin-top: 0.25em;\n color: $muted-text-color;\n font-family: $sans-serif;\n font-size: $type-size-6;\n\n p {\n margin: 0;\n }\n\n a {\n color: inherit;\n }\n}\n\n.page__meta-title {\n margin-bottom: 10px;\n font-size: $type-size-6;\n text-transform: uppercase;\n}\n\n.page__meta-sep::before {\n content: \"\\2022\";\n padding-left: 0.5em;\n padding-right: 0.5em;\n}\n\n/*\n Page taxonomy\n ========================================================================== */\n\n.page__taxonomy {\n .sep {\n display: none;\n }\n\n strong {\n margin-right: 10px;\n }\n}\n\n.page__taxonomy-item {\n display: inline-block;\n margin-right: 5px;\n margin-bottom: 8px;\n padding: 5px 10px;\n text-decoration: none;\n border: 1px solid mix(#000, $border-color, 25%);\n border-radius: $border-radius;\n\n &:hover {\n text-decoration: none;\n color: $link-color-hover;\n }\n}\n\n.taxonomy__section {\n margin-bottom: 2em;\n padding-bottom: 1em;\n\n &:not(:last-child) {\n border-bottom: solid 1px $border-color;\n }\n\n .archive__item-title {\n margin-top: 0;\n }\n\n .archive__subtitle {\n clear: both;\n border: 0;\n }\n\n + .taxonomy__section {\n margin-top: 2em;\n }\n}\n\n.taxonomy__title {\n margin-bottom: 0.5em;\n color: $muted-text-color;\n}\n\n.taxonomy__count {\n color: $muted-text-color;\n}\n\n.taxonomy__index {\n display: grid;\n grid-column-gap: 2em;\n grid-template-columns: repeat(2, 1fr);\n margin: 1.414em 0;\n padding: 0;\n font-size: 0.75em;\n list-style: none;\n\n @include breakpoint($large) {\n grid-template-columns: repeat(3, 1fr);\n }\n\n a {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n padding: 0.25em 0;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n color: inherit;\n text-decoration: none;\n border-bottom: 1px solid $border-color;\n }\n}\n\n.back-to-top {\n display: block;\n clear: both;\n color: $muted-text-color;\n font-size: 0.6em;\n text-transform: uppercase;\n text-align: right;\n text-decoration: none;\n}\n\n/*\n Comments\n ========================================================================== */\n\n.page__comments {\n float: left;\n margin-left: 0;\n margin-right: 0;\n width: 100%;\n clear: both;\n}\n\n.page__comments-title {\n margin-top: 2rem;\n margin-bottom: 10px;\n padding-top: 2rem;\n font-size: $type-size-6;\n border-top: 1px solid $border-color;\n text-transform: uppercase;\n}\n\n.page__comments-form {\n -webkit-transition: $global-transition;\n transition: $global-transition;\n\n &.disabled {\n input,\n button,\n textarea,\n label {\n pointer-events: none;\n cursor: not-allowed;\n filter: alpha(opacity=65);\n box-shadow: none;\n opacity: 0.65;\n }\n }\n}\n\n.comment {\n @include clearfix();\n margin: 1em 0;\n\n &:not(:last-child) {\n border-bottom: 1px solid $border-color;\n }\n}\n\n.comment__avatar-wrapper {\n float: left;\n width: 60px;\n height: 60px;\n\n @include breakpoint($large) {\n width: 100px;\n height: 100px;\n }\n}\n\n.comment__avatar {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n\n @include breakpoint($large) {\n width: 80px;\n height: 80px;\n padding: 5px;\n border: 1px solid $border-color;\n }\n}\n\n.comment__content-wrapper {\n float: right;\n width: calc(100% - 60px);\n\n @include breakpoint($large) {\n width: calc(100% - 100px);\n }\n}\n\n.comment__author {\n margin: 0;\n\n a {\n text-decoration: none;\n }\n}\n\n.comment__date {\n @extend .page__meta;\n margin: 0;\n\n a {\n text-decoration: none;\n }\n}\n\n/*\n Related\n ========================================================================== */\n\n.page__related {\n @include clearfix();\n float: left;\n margin-top: 2em;\n padding-top: 1em;\n border-top: 1px solid $border-color;\n\n @include breakpoint($large) {\n float: right;\n width: calc(100% - #{$right-sidebar-width-narrow});\n }\n\n @include breakpoint($x-large) {\n width: calc(100% - #{$right-sidebar-width});\n }\n\n a {\n color: inherit;\n text-decoration: none;\n }\n}\n\n.page__related-title {\n margin-bottom: 10px;\n font-size: $type-size-6;\n text-transform: uppercase;\n}\n\n/*\n Wide Pages\n ========================================================================== */\n\n.wide {\n .page {\n @include breakpoint($large) {\n padding-right: 0;\n }\n\n @include breakpoint($x-large) {\n padding-right: 0;\n }\n }\n\n .page__related {\n @include breakpoint($large) {\n padding-right: 0;\n }\n\n @include breakpoint($x-large) {\n padding-right: 0;\n }\n }\n}\n\n/*****************************************************************************/\n/*\n/* Figure Handling as per Tufte Jekyll blog theme \n/* source: \n/* [1] tufte-jekyll by Clay Hanson ( https://github.com/clayh53/tufte-jekyll )\n/*\n/*****************************************************************************/\n// Mathjax fonts need TLC\n.mjx-math{\n font-size: 1rem;\n}\n// --------- Typography stuff -----------//\n// added rational line height and margins ala http://webtypography.net/intro/\n\n/* Chapter Epigraphs */\ndiv.epigraph { margin: 3.5636rem 0; }\n\ndiv.epigraph > blockquote { margin-top: 3rem;\n margin-bottom: 3rem;\n }\n\ndiv.epigraph > blockquote, div.epigraph > blockquote > p { font-style: italic; }\n\ndiv.epigraph > blockquote > footer { font-style: normal;\n width: 45%;\n padding-left: 2.5%;\n padding-right: 2.5%;\n padding-top: 0;\n margin-top: 0.4455rem;\n margin-bottom: 3.1182rem }\n\ndiv.epigraph > blockquote > footer > cite { font-style: italic; }\n\n/* end chapter epigraphs styles */\n\n/* Basic Layout stuff --*/\n/*\narticle { position: relative;\n padding: 1\n\n rem 0rem 2.5rem 0rem; } // reduced top and bottom padding by 50%\n*/\n\n/*\nsection { padding-top: 1rem;\n padding-bottom: 1rem; }\n*/\n\n/*\nul,ol { width: 45%;\n -webkit-padding-start: 5%;\n -webkit-padding-end: 5%;\n list-style-type: none; }\n*/\n//li { padding: 0.5em 0; } //vertical padding on list items screws up vertical rhythym\n\nfigure, figure img.maincolumn { max-width: 55%;\n -webkit-margin-start: 0;\n -webkit-margin-end: 0;\n margin-bottom: 3em; }\n\nfigcaption { float: right;\n clear: right;\n margin-right: -50%;\n margin-top: 0;\n margin-bottom: 0;\n font-size: 1.0rem;\n line-height: 1.6;\n vertical-align: baseline;\n position: relative;\n max-width: 40%;\n font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;}\n\nfigure.fullwidth figcaption { float: left; margin-right: 0%; margin-left: 33%; max-width: 100%; }\n\nimg { max-width: 100%; }\n\n.sidenote, .marginnote { float: right;\n clear: right;\n margin-right: -50%;\n width: 45%;\n margin-top: 0;\n margin-bottom: 1.96rem;\n font-size: 0.9rem;\n line-height: 1.96; //changed to bring line heights into rational pattern\n vertical-align: baseline;\n position: relative;\n font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;}\n\n\nli .sidenote, li .marginnote{ margin-right: -50%; width: 25%} //added to allow for the fact that lists are indented and marginnotes and sidenotes push to right\n\nblockquote .sidenote, blockquote .marginnote { margin-right: -79% }\n\n.sidenote-number { counter-increment: sidenote-counter; }\n\n.sidenote-number:after, .sidenote:before { content: counter(sidenote-counter, lower-roman) \" \";\n font-family: et-bembo-roman-old-style;\n color: $contrast-color; //added color\n position: relative;\n vertical-align: baseline; }\n\n.sidenote-number:after { content: counter(sidenote-counter, lower-roman);\n font-size: 0.8rem;\n\t\t\t color: $contrast-color;\n top: -0.5rem;\n left: 0.1rem; }\n\n.sidenote:before { content: counter(sidenote-counter, lower-roman) \".\\000a0\"; // this is unicode for a non-breaking space\n color: $contrast-color;\n top: 0rem; } //removed superscripting for numerical reference in sidenote\n\np, footer, div.table-wrapper, .MJXc-display, .MathJax { width: 75%; }\n\ndiv.table-wrapper, table { overflow-x: auto; } //changed all overflow values to 'auto' so scroll bars appear only as needed\n\n@media screen and (max-width: 760px) { p, footer { width: 90%; }\n pre code { width: 87.5%; }\n //ul { width: 85%; } // Commened this cos it really bugs the alignment of the follow button in my iPhone 12 Pro Max\n figure { max-width: 90%; }\n figcaption, figure.fullwidth figcaption { margin-right: 0%;\n max-width: none; }\n blockquote p, blockquote footer, div.epigraph > blockquote > footer,.MJXc-display { width: 80%;\n padding-left: 5%;\n padding-right: 5%;\n }}\n\n.marginnote code, .sidenote code { font-size: 1rem; } //more .code class removal\n\npre { width: 52.5%; //, pre code, p pre code are both selectors in tufte.css - they have been removed here to fix alignment issues\n padding-left: 2.5%;\n overflow-x: auto; }\n\n.fullwidth, li.listing div{ max-width: 90%; }\n\n.full-width { .sidenote, .sidenote-number, .marginnote { display: none; } }\n\nspan.newthought { font-variant: small-caps;\n font-size: 1.2em;\n letter-spacing: 0.05rem; }\n\ninput.margin-toggle { display: none; }\n\nlabel.sidenote-number { display: inline; }\n\nlabel.margin-toggle:not(.sidenote-number) { display: none; }\n\n@media (max-width: 760px) { label.margin-toggle:not(.sidenote-number) { display: inline; color: $contrast-color; }\n .sidenote, .marginnote { display: none; }\n .margin-toggle:checked + .sidenote,\n .margin-toggle:checked + .marginnote { display: block;\n float: left;\n left: 1rem;\n clear: both;\n width: 95%;\n margin: 1rem 2.5%;\n vertical-align: baseline;\n position: relative; }\n label { cursor: pointer; }\n pre, pre code, p code, p pre code { width: 90%;\n padding: 0; }\n .table-caption { display: block;\n float: right;\n clear: both;\n width: 98%;\n margin-top: 1rem;\n margin-bottom: 0.5rem;\n margin-left: 1%;\n margin-right: 1%;\n vertical-align: baseline;\n position: relative; }\n div.table-wrapper, table, table.booktabs { width: 85%; }\n div.table-wrapper { border-right: 1px solid #efefef; }\n img { max-width: 100%; } \n figcaption.maincolumn-figure, figure.fullwidth figcaption { float:none; text-align: center;}\n figure.fullwidth figcaption { margin-left: 0; }\n }\n/*--- End of Basic Layout stuff from tufte.css ---*/\n", + "/* ==========================================================================\n ARCHIVE\n ========================================================================== */\n\n.archive {\n margin-top: 1em;\n margin-bottom: 2em;\n\n @include breakpoint($large) {\n float: right;\n width: calc(100% - #{$right-sidebar-width-narrow});\n padding-right: $right-sidebar-width-narrow;\n }\n\n @include breakpoint($x-large) {\n width: calc(100% - #{$right-sidebar-width});\n padding-right: $right-sidebar-width;\n }\n}\n\n.archive__item {\n position: relative;\n\n a {\n position: relative;\n z-index: 10;\n }\n\n a[rel=\"permalink\"] {\n position: static;\n }\n}\n\n.archive__subtitle {\n margin: 1.414em 0 0.5em;\n padding-bottom: 0.5em;\n font-size: $type-size-5;\n color: $muted-text-color;\n border-bottom: 1px solid $border-color;\n\n + .list__item .archive__item-title {\n margin-top: 0.5em;\n }\n}\n\n.archive__item-title {\n margin-bottom: 0.25em;\n font-family: $sans-serif-narrow;\n line-height: initial;\n overflow: hidden;\n text-overflow: ellipsis;\n\n a[rel=\"permalink\"]::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n }\n\n a + a {\n opacity: 0.5;\n }\n}\n\n/* remove border*/\n.page__content {\n .archive__item-title {\n margin-top: 1em;\n border-bottom: none;\n }\n}\n\n.archive__item-excerpt {\n margin-top: 0;\n font-size: $type-size-6;\n\n & + p {\n text-indent: 0;\n }\n\n a {\n position: relative;\n }\n}\n\n.archive__item-teaser {\n position: relative;\n border-radius: $border-radius;\n overflow: hidden;\n\n img {\n width: 100%;\n }\n}\n\n.archive__item-caption {\n position: absolute;\n bottom: 0;\n right: 0;\n margin: 0 auto;\n padding: 2px 5px;\n color: #fff;\n font-family: $caption-font-family;\n font-size: $type-size-8;\n background: #000;\n text-align: right;\n z-index: 5;\n opacity: 0.5;\n border-radius: $border-radius 0 0 0;\n\n @include breakpoint($large) {\n padding: 5px 10px;\n }\n\n a {\n color: #fff;\n text-decoration: none;\n }\n}\n\n/*\n List view\n ========================================================================== */\n\n.list__item {\n .page__meta {\n margin: 0 0 4px;\n font-size: 0.6em;\n }\n}\n\n/*\n Grid view\n ========================================================================== */\n\n.archive {\n .grid__wrapper {\n /* extend grid elements to the right */\n\n @include breakpoint($large) {\n margin-right: -1 * $right-sidebar-width-narrow;\n }\n\n @include breakpoint($x-large) {\n margin-right: -1 * $right-sidebar-width;\n }\n }\n}\n\n.grid__item {\n margin-bottom: 2em;\n\n @include breakpoint($small) {\n float: left;\n width: span(5 of 10);\n\n &:nth-child(2n + 1) {\n clear: both;\n margin-left: 0;\n }\n\n &:nth-child(2n + 2) {\n clear: none;\n margin-left: gutter(of 10);\n }\n }\n\n @include breakpoint($medium) {\n margin-left: 0; /* override margin*/\n margin-right: 0; /* override margin*/\n width: span(3 of 12);\n\n &:nth-child(2n + 1) {\n clear: none;\n }\n\n &:nth-child(4n + 1) {\n clear: both;\n }\n\n &:nth-child(4n + 2) {\n clear: none;\n margin-left: gutter(1 of 12);\n }\n\n &:nth-child(4n + 3) {\n clear: none;\n margin-left: gutter(1 of 12);\n }\n\n &:nth-child(4n + 4) {\n clear: none;\n margin-left: gutter(1 of 12);\n }\n }\n\n .page__meta {\n margin: 0 0 4px;\n font-size: 0.6em;\n }\n\n .page__meta-sep {\n display: block;\n\n &::before {\n display: none;\n }\n }\n\n .archive__item-title {\n margin-top: 0.5em;\n font-size: $type-size-5;\n }\n\n .archive__item-excerpt {\n display: none;\n\n @include breakpoint($medium) {\n display: block;\n font-size: $type-size-6;\n }\n }\n\n .archive__item-teaser {\n @include breakpoint($small) {\n max-height: 200px;\n }\n\n @include breakpoint($medium) {\n max-height: 120px;\n }\n }\n}\n\n/*\n Features\n ========================================================================== */\n\n.feature__wrapper {\n @include clearfix();\n margin-bottom: 2em;\n border-bottom: 1px solid $border-color;\n\n .archive__item-title {\n margin-bottom: 0;\n }\n}\n\n.feature__item {\n position: relative;\n margin-bottom: 2em;\n font-size: 1.125em;\n\n @include breakpoint($small) {\n float: left;\n margin-bottom: 0;\n width: span(4 of 12);\n\n &:nth-child(3n + 1) {\n clear: both;\n margin-left: 0;\n }\n\n &:nth-child(3n + 2) {\n clear: none;\n margin-left: gutter(of 12);\n }\n\n &:nth-child(3n + 3) {\n clear: none;\n margin-left: gutter(of 12);\n }\n\n .feature__item-teaser {\n max-height: 200px;\n overflow: hidden;\n }\n }\n\n .archive__item-body {\n padding-left: gutter(1 of 12);\n padding-right: gutter(1 of 12);\n }\n\n a.btn::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n }\n\n &--left {\n position: relative;\n float: left;\n margin-left: 0;\n margin-right: 0;\n width: 100%;\n clear: both;\n font-size: 1.125em;\n\n .archive__item {\n float: left;\n }\n\n .archive__item-teaser {\n margin-bottom: 2em;\n }\n\n a.btn::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n }\n\n @include breakpoint($small) {\n .archive__item-teaser {\n float: left;\n width: span(5 of 12);\n }\n\n .archive__item-body {\n float: right;\n padding-left: gutter(0.5 of 12);\n padding-right: gutter(1 of 12);\n width: span(7 of 12);\n }\n }\n }\n\n &--right {\n position: relative;\n float: left;\n margin-left: 0;\n margin-right: 0;\n width: 100%;\n clear: both;\n font-size: 1.125em;\n\n .archive__item {\n float: left;\n }\n\n .archive__item-teaser {\n margin-bottom: 2em;\n }\n\n a.btn::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n }\n\n @include breakpoint($small) {\n text-align: right;\n\n .archive__item-teaser {\n float: right;\n width: span(5 of 12);\n }\n\n .archive__item-body {\n float: left;\n width: span(7 of 12);\n padding-left: gutter(0.5 of 12);\n padding-right: gutter(1 of 12);\n }\n }\n }\n\n &--center {\n position: relative;\n float: left;\n margin-left: 0;\n margin-right: 0;\n width: 100%;\n clear: both;\n font-size: 1.125em;\n\n .archive__item {\n float: left;\n width: 100%;\n }\n\n .archive__item-teaser {\n margin-bottom: 2em;\n }\n\n a.btn::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n }\n\n @include breakpoint($small) {\n text-align: center;\n\n .archive__item-teaser {\n margin: 0 auto;\n width: span(5 of 12);\n }\n\n .archive__item-body {\n margin: 0 auto;\n width: span(7 of 12);\n }\n }\n }\n}\n\n/* Place inside an archive layout */\n\n.archive {\n .feature__wrapper {\n .archive__item-title {\n margin-top: 0.25em;\n font-size: 1em;\n }\n }\n\n .feature__item,\n .feature__item--left,\n .feature__item--center,\n .feature__item--right {\n font-size: 1em;\n }\n}\n\n/*\n Wide Pages\n ========================================================================== */\n\n .wide {\n .archive {\n @include breakpoint($large) {\n padding-right: 0;\n }\n\n @include breakpoint($x-large) {\n padding-right: 0;\n }\n }\n}\n\n/* Place inside a single layout */\n\n.layout--single {\n\t.feature__wrapper {\n\t\tdisplay: inline-block;\n\t}\n}\n", + "/* ==========================================================================\n SIDEBAR\n ========================================================================== */\n\n/*\n Default\n ========================================================================== */\n\n.sidebar {\n @include clearfix();\n // @include breakpoint(max-width $large) {\n // /* fix z-index order of follow links */\n // position: relative;\n // z-index: 10;\n // -webkit-transform: translate3d(0, 0, 0);\n // transform: translate3d(0, 0, 0);\n // }\n\n @include breakpoint($large) {\n float: left;\n width: calc(#{$right-sidebar-width-narrow} - 1em);\n opacity: 0.75;\n -webkit-transition: opacity 0.2s ease-in-out;\n transition: opacity 0.2s ease-in-out;\n\n &:hover {\n opacity: 1;\n }\n\n &.sticky {\n overflow-y: auto;\n /* calculate height of nav list\n viewport height - nav height - masthead x-padding\n */\n max-height: calc(100vh - #{$nav-height} - 2em);\n }\n }\n\n @include breakpoint($x-large) {\n width: calc(#{$right-sidebar-width} - 1em);\n }\n\n > * {\n margin-top: 1em;\n margin-bottom: 1em;\n }\n\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin-bottom: 0;\n font-family: $sans-serif-narrow;\n }\n\n p,\n li {\n font-family: $sans-serif;\n font-size: $type-size-5;\n line-height: 1.5;\n }\n\n img {\n width: 100%;\n\n &.emoji {\n width: 20px;\n height: 20px;\n }\n }\n}\n\n.sidebar__right {\n margin-bottom: 1em;\n\n @include breakpoint($large) {\n position: absolute;\n top: 0;\n right: 0;\n width: $right-sidebar-width-narrow;\n margin-right: -1 * $right-sidebar-width-narrow;\n padding-left: 1em;\n z-index: 10;\n\n &.sticky {\n @include clearfix();\n position: -webkit-sticky;\n position: sticky;\n top: 2em;\n float: right;\n\n .toc {\n .toc__menu {\n overflow-y: auto;\n max-height: calc(100vh - 7em);\n }\n }\n }\n }\n\n @include breakpoint($x-large) {\n width: $right-sidebar-width;\n margin-right: -1 * $right-sidebar-width;\n }\n}\n\n.splash .sidebar__right {\n @include breakpoint($large) {\n position: relative;\n float: right;\n margin-right: 0;\n }\n\n @include breakpoint($x-large) {\n margin-right: 0;\n }\n}\n\n/*\n Author profile and links\n ========================================================================== */\n\n.author__avatar {\n display: table-cell;\n vertical-align: top;\n width: 36px;\n height: 36px;\n\n @include breakpoint($large) {\n display: block;\n width: auto;\n height: auto;\n }\n\n img {\n max-width: 110px;\n border-radius: 50%;\n\n @include breakpoint($large) {\n padding: 5px;\n border: 1px solid $border-color;\n }\n }\n}\n\n.author__content {\n display: table-cell;\n vertical-align: top;\n padding-left: 15px;\n padding-right: 25px;\n line-height: 1;\n\n @include breakpoint($large) {\n display: block;\n width: 100%;\n padding-left: 0;\n padding-right: 0;\n }\n\n a {\n color: inherit;\n text-decoration: none;\n }\n}\n\n.author__name {\n margin: 0;\n\n @include breakpoint($large) {\n margin-top: 10px;\n margin-bottom: 10px;\n }\n}\n\n.sidebar .author__name {\n font-family: $sans-serif;\n font-size: $type-size-5;\n}\n\n.author__bio {\n margin: 0;\n\n @include breakpoint($large) {\n margin-top: 10px;\n margin-bottom: 20px;\n }\n}\n\n.author__urls-wrapper {\n position: relative;\n display: table-cell;\n vertical-align: middle;\n font-family: $sans-serif;\n z-index: 20;\n cursor: pointer;\n\n li:last-child {\n a {\n margin-bottom: 0;\n }\n }\n\n .author__urls {\n span.label {\n padding-left: 5px;\n }\n }\n\n @include breakpoint($large) {\n display: block;\n }\n\n button {\n position: relative;\n margin-bottom: 0;\n\n &:before {\n @supports (pointer-events: none) {\n content: '';\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n }\n }\n\n &.open {\n &:before {\n pointer-events: auto;\n }\n }\n\n @include breakpoint($large) {\n display: none;\n }\n }\n}\n\n.author__urls {\n display: none;\n position: absolute;\n right: 0;\n margin-top: 15px;\n padding: 10px;\n list-style-type: none;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n background: $background-color;\n box-shadow: 0 2px 4px 0 rgba(#000, 0.16), 0 2px 10px 0 rgba(#000, 0.12);\n cursor: default;\n\n &.is--visible {\n display: block;\n }\n\n @include breakpoint($large) {\n display: block;\n position: relative;\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n box-shadow: none;\n }\n\n &:before {\n display: block;\n content: \"\";\n position: absolute;\n top: -11px;\n left: calc(50% - 10px);\n width: 0;\n border-style: solid;\n border-width: 0 10px 10px;\n border-color: $border-color transparent;\n z-index: 0;\n\n @include breakpoint($large) {\n display: none;\n }\n }\n\n &:after {\n display: block;\n content: \"\";\n position: absolute;\n top: -10px;\n left: calc(50% - 10px);\n width: 0;\n border-style: solid;\n border-width: 0 10px 10px;\n border-color: $background-color transparent;\n z-index: 1;\n\n @include breakpoint($large) {\n display: none;\n }\n }\n\n ul {\n padding: 10px;\n list-style-type: none;\n }\n\n li {\n white-space: nowrap;\n }\n\n a {\n display: block;\n margin-bottom: 5px;\n padding-right: 5px;\n padding-top: 2px;\n padding-bottom: 2px;\n color: inherit;\n font-size: $type-size-5;\n text-decoration: none;\n\n &:hover {\n text-decoration: underline;\n }\n }\n}\n\n// Specific styles for TOC\n.toc {\n font-family: $sans-serif;\n font-size: $type-size-5;\n\n .nav__title {\n font-size: $type-size-6;\n }\n\n .toc__menu {\n font-size: $type-size-6;\n\n ul {\n padding-left: 1em;\n }\n }\n}\n\n// Specific styles for author profile\n.author__avatar,\n.author__content,\n.author__urls-wrapper {\n font-family: $body-font;\n font-size: $type-size-6;\n}\n", + "/* ==========================================================================\n PRINT STYLES\n ========================================================================== */\n\n@media print {\n\n [hidden] {\n display: none;\n }\n\n * {\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n }\n\n html {\n margin: 0;\n padding: 0;\n min-height: auto !important;\n font-size: 16px;\n }\n\n body {\n margin: 0 auto;\n background: #fff !important;\n color: #000 !important;\n font-size: 1rem;\n line-height: 1.5;\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n text-rendering: optimizeLegibility;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n color: #000;\n line-height: 1.2;\n margin-bottom: 0.75rem;\n margin-top: 0;\n }\n\n h1 {\n font-size: 2.5rem;\n }\n\n h2 {\n font-size: 2rem;\n }\n\n h3 {\n font-size: 1.75rem;\n }\n\n h4 {\n font-size: 1.5rem;\n }\n\n h5 {\n font-size: 1.25rem;\n }\n\n h6 {\n font-size: 1rem;\n }\n\n a,\n a:visited {\n color: #000;\n text-decoration: underline;\n word-wrap: break-word;\n }\n\n table {\n border-collapse: collapse;\n }\n\n thead {\n display: table-header-group;\n }\n\n table,\n th,\n td {\n border-bottom: 1px solid #000;\n }\n\n td,\n th {\n padding: 8px 16px;\n }\n\n img {\n border: 0;\n display: block;\n max-width: 100% !important;\n vertical-align: middle;\n }\n\n hr {\n border: 0;\n border-bottom: 2px solid #bbb;\n height: 0;\n margin: 2.25rem 0;\n padding: 0;\n }\n\n dt {\n font-weight: bold;\n }\n\n dd {\n margin: 0;\n margin-bottom: 0.75rem;\n }\n\n abbr[title],\n acronym[title] {\n border: 0;\n text-decoration: none;\n }\n\n table,\n blockquote,\n pre,\n code,\n figure,\n li,\n hr,\n ul,\n ol,\n a,\n tr {\n page-break-inside: avoid;\n }\n\n h2,\n h3,\n h4,\n p,\n a {\n orphans: 3;\n widows: 3;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n page-break-after: avoid;\n page-break-inside: avoid;\n }\n\n h1 + p,\n h2 + p,\n h3 + p {\n page-break-before: avoid;\n }\n\n img {\n page-break-after: auto;\n page-break-before: auto;\n page-break-inside: avoid;\n }\n\n pre {\n white-space: pre-wrap !important;\n word-wrap: break-word;\n }\n\n a[href^='http://']:after,\n a[href^='https://']:after,\n a[href^='ftp://']:after {\n content: \" (\" attr(href) \")\";\n font-size: 80%;\n }\n\n abbr[title]:after,\n acronym[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n #main {\n max-width: 100%;\n }\n\n .page {\n margin: 0;\n padding: 0;\n width: 100%;\n }\n\n .page-break,\n .page-break-before {\n page-break-before: always;\n }\n\n .page-break-after {\n page-break-after: always;\n }\n\n .no-print {\n display: none;\n }\n\n a.no-reformat:after {\n content: '';\n }\n\n abbr[title].no-reformat:after,\n acronym[title].no-reformat:after {\n content: '';\n }\n\n .page__hero-caption {\n color: #000 !important;\n background: #fff !important;\n opacity: 1;\n\n a {\n color: #000 !important;\n }\n }\n\n/*\n Hide the following elements on print\n ========================================================================== */\n\n .masthead,\n .toc,\n .page__share,\n .page__related,\n .pagination,\n .ads,\n .page__footer,\n .page__comments-form,\n .author__avatar,\n .author__content,\n .author__urls-wrapper,\n .nav__list,\n .sidebar,\n .adsbygoogle {\n display: none !important;\n height: 1px !important;\n }\n}", + ".theme-switch-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 20px;\n}\n\n.theme-switch {\n display: inline-block;\n height: 26px; /* Reduced height */\n position: relative;\n width: 50px; /* Reduced width for smaller slider */\n}\n\n.theme-switch input { \n display:none;\n}\n\n.slider {\n background-color: #ccc;\n bottom: 0;\n cursor: pointer;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n transition: .4s;\n}\n\n.slider:before {\n background-color: #f3f3f3;\n bottom: 4px;\n content: \"\";\n height: 18px; /* Reduced height */\n left: 4px; /* Initially positioned at the left */\n position: absolute;\n transition: .4s;\n width: 18px; /* Reduced width */\n}\n\ninput:checked + .slider {\n background-color: #252a34;\n}\n\n.slider.round {\n border-radius: 26px; /* Adjusted for reduced height */\n}\n\n.slider.round:before {\n border-radius: 50%;\n}\n\ninput:checked + .slider:before {\n left: calc(100% - 22px); /* Adjust left position for smaller button */\n}\n\n" + ], + "names": [], + "mappings": "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" +} \ No newline at end of file diff --git a/assets/css/main.scss b/assets/css/main.scss deleted file mode 100644 index ec05fed65f40b..0000000000000 --- a/assets/css/main.scss +++ /dev/null @@ -1,25 +0,0 @@ ---- -# Only the main Sass file needs front matter (the dashes are enough) -search: false ---- - -@charset "utf-8"; - -@import "minimal-mistakes/skins/{{ site.minimal_mistakes_skin | default: 'default' }}"; // skin -@import "minimal-mistakes"; // main partials - -// AN Notes: https://github.com/NaanProphet/tripodvideoninja/commit/d9905c1f71ac57597b20073c95c50807e45f57a5 -/* hack to fill the left-hand-side when there is no author */ - .wide_post article.page { - float: left; - width: 100%; - } - - /* push the TOC out to the right just a little*/ - .sidebar__right { - padding-left: 5%; - } - .layout--single { - margin-left: 10%; - margin-right: 10%; - } diff --git a/assets/css/theme2.css b/assets/css/theme2.css new file mode 100644 index 0000000000000..0e2b030cfce74 --- /dev/null +++ b/assets/css/theme2.css @@ -0,0 +1,7 @@ +.author__urls.social-icons i,.author__urls.social-icons .svg-inline--fa,.page__footer-follow .social-icons i,.page__footer-follow .social-icons .svg-inline--fa{color:inherit}/*! + * Minimal Mistakes Jekyll Theme 4.24.0 by Michael Rose + * Copyright 2013-2020 Michael Rose - mademistakes.com | @mmistakes + * Licensed under MIT (https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE) +*/@font-face{font-family:ETbook;src:url("../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.eot");src:url("../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.eot?#iefix") format("embedded-opentype"),url("../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.woff") format("woff"),url("../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.ttf") format("truetype"),url("../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.svg#etbemboromanosf") format("svg");font-weight:normal;font-style:normal}@font-face{font-family:ETbook;src:url("../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.eot");src:url("../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.eot?#iefix") format("embedded-opentype"),url("../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.woff") format("woff"),url("../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.ttf") format("truetype"),url("../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.svg#etbemboromanosf") format("svg");font-weight:normal;font-style:italic}@font-face{font-family:ETbook;src:url("../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.eot");src:url("../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.eot?#iefix") format("embedded-opentype"),url("../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.woff") format("woff"),url("../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.ttf") format("truetype"),url("../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.svg#etbemboromanosf") format("svg");font-weight:bold;font-style:normal}@font-face{font-family:ETbookRomanOldStyle;src:url("../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.eot");src:url("../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.eot?#iefix") format("embedded-opentype"),url("../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.woff") format("woff"),url("../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.ttf") format("truetype"),url("../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.svg#etbemboromanosf") format("svg");font-weight:normal;font-style:normal}.mfp-counter{font-family:Georgia,Times,serif}.mfp-bg{top:0;left:0;width:100%;height:100%;z-index:1042;overflow:hidden;position:fixed;background:#000;opacity:.8;filter:alpha(opacity=80)}.mfp-wrap{top:0;left:0;width:100%;height:100%;z-index:1043;position:fixed;outline:none !important;-webkit-backface-visibility:hidden}.mfp-container{text-align:center;position:absolute;width:100%;height:100%;left:0;top:0;padding:0 8px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mfp-container:before{content:'';display:inline-block;height:100%;vertical-align:middle}.mfp-align-top .mfp-container:before{display:none}.mfp-content{position:relative;display:inline-block;vertical-align:middle;margin:0 auto;text-align:left;z-index:1045}.mfp-inline-holder .mfp-content,.mfp-ajax-holder .mfp-content{width:100%;cursor:auto}.mfp-ajax-cur{cursor:progress}.mfp-zoom-out-cur,.mfp-zoom-out-cur .mfp-image-holder .mfp-close{cursor:-moz-zoom-out;cursor:-webkit-zoom-out;cursor:zoom-out}.mfp-zoom{cursor:pointer;cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.mfp-auto-cursor .mfp-content{cursor:auto}.mfp-close,.mfp-arrow,.mfp-preloader,.mfp-counter{-webkit-user-select:none;-moz-user-select:none;user-select:none}.mfp-loading.mfp-figure{display:none}.mfp-hide{display:none !important}.mfp-preloader{color:#ccc;position:absolute;top:50%;width:auto;text-align:center;margin-top:-0.8em;left:8px;right:8px;z-index:1044}.mfp-preloader a{color:#ccc}.mfp-preloader a:hover{color:#fff}.mfp-s-ready .mfp-preloader{display:none}.mfp-s-error .mfp-content{display:none}button.mfp-close,button.mfp-arrow{overflow:visible;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;display:block;outline:none;padding:0;z-index:1046;-webkit-box-shadow:none;box-shadow:none}button::-moz-focus-inner{padding:0;border:0}.mfp-close{width:44px;height:44px;line-height:44px;position:absolute;right:0;top:0;text-decoration:none;text-align:center;opacity:1;filter:alpha(opacity=100);padding:0 0 18px 10px;color:#fff;font-style:normal;font-size:28px;font-family:Georgia,Times,serif}.mfp-close:hover,.mfp-close:focus{opacity:1;filter:alpha(opacity=100)}.mfp-close:active{top:1px}.mfp-close-btn-in .mfp-close{color:#fff}.mfp-image-holder .mfp-close,.mfp-iframe-holder .mfp-close{color:#fff;right:-6px;text-align:right;padding-right:6px;width:100%}.mfp-counter{position:absolute;top:0;right:0;color:#ccc;font-size:12px;line-height:18px}.mfp-arrow{position:absolute;opacity:1;filter:alpha(opacity=100);margin:0;top:50%;margin-top:-55px;padding:0;width:90px;height:110px;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mfp-arrow:active{margin-top:-54px}.mfp-arrow:hover,.mfp-arrow:focus{opacity:1;filter:alpha(opacity=100)}.mfp-arrow:before,.mfp-arrow:after,.mfp-arrow .mfp-b,.mfp-arrow .mfp-a{content:'';display:block;width:0;height:0;position:absolute;left:0;top:0;margin-top:35px;margin-left:35px;border:medium inset transparent}.mfp-arrow:after,.mfp-arrow .mfp-a{border-top-width:13px;border-bottom-width:13px;top:8px}.mfp-arrow:before,.mfp-arrow .mfp-b{border-top-width:21px;border-bottom-width:21px;opacity:0.7}.mfp-arrow-left{left:0}.mfp-arrow-left:after,.mfp-arrow-left .mfp-a{border-right:17px solid #fff;margin-left:31px}.mfp-arrow-left:before,.mfp-arrow-left .mfp-b{margin-left:25px;border-right:27px solid #fff}.mfp-arrow-right{right:0}.mfp-arrow-right:after,.mfp-arrow-right .mfp-a{border-left:17px solid #fff;margin-left:39px}.mfp-arrow-right:before,.mfp-arrow-right .mfp-b{border-left:27px solid #fff}.mfp-iframe-holder{padding-top:40px;padding-bottom:40px}.mfp-iframe-holder .mfp-content{line-height:0;width:100%;max-width:900px}.mfp-iframe-holder .mfp-close{top:-40px}.mfp-iframe-scaler{width:100%;height:0;overflow:hidden;padding-top:56.25%}.mfp-iframe-scaler iframe{position:absolute;display:block;top:0;left:0;width:100%;height:100%;box-shadow:0 0 8px rgba(0,0,0,0.6);background:#000}img.mfp-img{width:auto;max-width:100%;height:auto;display:block;line-height:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:40px 0 40px;margin:0 auto}.mfp-figure{line-height:0}.mfp-figure:after{content:'';position:absolute;left:0;top:40px;bottom:40px;display:block;right:0;width:auto;height:auto;z-index:-1;box-shadow:0 0 8px rgba(0,0,0,0.6);background:#444}.mfp-figure small{color:#bdbdbd;display:block;font-size:12px;line-height:14px}.mfp-figure figure{margin:0}.mfp-figure figcaption{margin-top:0;margin-bottom:0}.mfp-bottom-bar{margin-top:-36px;position:absolute;top:100%;left:0;width:100%;cursor:auto}.mfp-title{text-align:left;line-height:18px;color:#f3f3f3;word-wrap:break-word;padding-right:36px}.mfp-image-holder .mfp-content{max-width:100%}.mfp-gallery .mfp-image-holder .mfp-figure{cursor:pointer}@media screen and (max-width: 800px) and (orientation: landscape),screen and (max-height: 300px){.mfp-img-mobile .mfp-image-holder{padding-left:0;padding-right:0}.mfp-img-mobile img.mfp-img{padding:0}.mfp-img-mobile .mfp-figure:after{top:0;bottom:0}.mfp-img-mobile .mfp-figure small{display:inline;margin-left:5px}.mfp-img-mobile .mfp-bottom-bar{background:rgba(0,0,0,0.6);bottom:0;margin:0;top:auto;padding:3px 5px;position:fixed;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mfp-img-mobile .mfp-bottom-bar:empty{padding:0}.mfp-img-mobile .mfp-counter{right:5px;top:3px}.mfp-img-mobile .mfp-close{top:0;right:0;width:35px;height:35px;line-height:35px;background:rgba(0,0,0,0.6);position:fixed;text-align:center;padding:0}}@media all and (max-width: 900px){.mfp-arrow{-webkit-transform:scale(0.75);transform:scale(0.75)}.mfp-arrow-left{-webkit-transform-origin:0;transform-origin:0}.mfp-arrow-right{-webkit-transform-origin:100%;transform-origin:100%}.mfp-container{padding-left:6px;padding-right:6px}}.mfp-ie7 .mfp-img{padding:0}.mfp-ie7 .mfp-bottom-bar{width:600px;left:50%;margin-left:-300px;margin-top:5px;padding-bottom:5px}.mfp-ie7 .mfp-container{padding:0}.mfp-ie7 .mfp-content{padding-top:44px}.mfp-ie7 .mfp-close{top:0;right:0;padding-top:0}button:focus,a:focus{outline:thin dotted #fc3a52;outline:5px auto #fc3a52;outline-offset:-2px}*{box-sizing:border-box}html{box-sizing:border-box;background-color:#e8d5b7;font-size:16px;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}@media (min-width: 48em){html{font-size:18px}}@media (min-width: 64em){html{font-size:20px}}@media (min-width: 80em){html{font-size:22px}}body{margin:0}::-moz-selection{color:#fff;background:#000}::selection{color:#fff;background:#000}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}a{color:#e3344a}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{box-sizing:border-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}html{position:relative;min-height:100%;font-size:16px}body{margin:0;padding:0;color:#000;font-family:ETBembo,"Chronicle Text G2",Palatino,"Palatino Linotype","Palatino LT STD","Book Antiqua",Georgia,serif;line-height:1.5}body.overflow--hidden{overflow:hidden}h1,h2,h3,h4,h5,h6{margin:2em 0 0.5em;line-height:1.2;font-family:"Gill Sans","Gill Sans MT","Gotham Narrow","Lato",Calibri,sans-serif;font-weight:bold}h1{margin-top:0;font-size:1.563em}h2{font-size:1.25em}h3{font-size:1.125em}h4{font-size:1.0625em}h5{font-size:1.03125em}h6{font-size:1em}small,.small{font-size:.75em}p{margin-bottom:1.3em}u,ins{text-decoration:none;border-bottom:1px solid #000}u a,ins a{color:inherit}del a{color:inherit}p,pre,blockquote,ul,ol,dl,figure,table,fieldset{orphans:3;widows:3}abbr[title],abbr[data-original-title]{text-decoration:none;cursor:help;border-bottom:1px dotted #000}blockquote{margin:2em 1em 2em 0;padding-left:1em;padding-right:1em;font-style:italic;border-left:0.25em solid #fc3a52}blockquote cite{font-style:italic}blockquote cite:before{content:"\2014";padding-right:5px}a:visited{color:#aa2738}a:hover{color:#ea6777;outline:0}tt,code,kbd,samp,pre{font-family:Monaco,Consolas,"Lucida Console",monospace}pre{overflow-x:auto}hr{display:block;margin:1em 0;border:0;border-top:1px solid #baaa92}ul li,ol li{margin-bottom:0.5em}li ul,li ol{margin-top:0.5em}figure{display:-webkit-box;display:flex;-webkit-box-pack:justify;justify-content:space-between;-webkit-box-align:start;align-items:flex-start;flex-wrap:wrap;margin:2em 0}figure img,figure iframe,figure .fluid-width-video-wrapper{margin-bottom:1em}figure img{width:100%;border-radius:4px;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}figure>a{display:block}@media (min-width: 37.5em){figure.half>a,figure.half>img{width:calc(50% - 0.5em)}}figure.half figcaption{width:100%}@media (min-width: 37.5em){figure.third>a,figure.third>img{width:calc(33.3333% - 0.5em)}}figure.third figcaption{width:100%}figcaption{margin-bottom:0.5em;color:#0e2431;font-family:Georgia,Times,serif;font-size:.75em}figcaption a{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}figcaption a:hover{color:#ea6777}svg:not(:root){overflow:hidden}nav ul{margin:0;padding:0}nav li{list-style:none}nav a{text-decoration:none}nav ul li,nav ol li{margin-bottom:0}nav li ul,nav li ol{margin-top:0}b,i,strong,em,blockquote,p,q,span,figure,img,h1,h2,header,input,a,tr,td,form button,input[type="submit"],.btn,.highlight,.archive__item-teaser{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}form{margin:0 0 5px 0;padding:1em;background-color:#ebdbc2}form fieldset{margin-bottom:5px;padding:0;border-width:0}form legend{display:block;width:100%;margin-bottom:10px;*margin-left:-7px;padding:0;color:#000;border:0;white-space:normal}form p{margin-bottom:2.5px}form ul{list-style-type:none;margin:0 0 5px 0;padding:0}form br{display:none}label,input,button,select,textarea{vertical-align:baseline;*vertical-align:middle}input,button,select,textarea{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}label{display:block;margin-bottom:0.25em;color:#000;cursor:pointer}label small{font-size:.75em}label input,label textarea,label select{display:block}input,textarea,select{display:inline-block;width:100%;padding:0.25em;margin-bottom:0.5em;color:#000;background-color:#e8d5b7;border:#baaa92;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.125)}.input-mini{width:60px}.input-small{width:90px}input[type="image"],input[type="checkbox"],input[type="radio"]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;cursor:pointer;border-radius:0;border:0 \9;box-shadow:none}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type="image"]{border:0}input[type="file"]{width:auto;padding:initial;line-height:initial;border:initial;background-color:transparent;background-color:initial;box-shadow:none}input[type="button"],input[type="reset"],input[type="submit"]{width:auto;height:auto;cursor:pointer;*overflow:visible}select,input[type="file"]{*margin-top:4px}select{width:auto;background-color:#fff}select[multiple],select[size]{height:auto}textarea{resize:vertical;height:auto;overflow:auto;vertical-align:top}input[type="hidden"]{display:none}.form{position:relative}.radio,.checkbox{padding-left:18px;font-weight:normal}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{opacity:0.5;cursor:not-allowed}input:focus,textarea:focus{border-color:#fc3a52;outline:0;outline:thin dotted \9;box-shadow:inset 0 1px 3px rgba(0,0,0,0.06),0 0 5px rgba(252,58,82,0.7)}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{box-shadow:none}.help-block,.help-inline{color:#0e2431}.help-block{display:block;margin-bottom:1em;line-height:1em}.help-inline{display:inline-block;vertical-align:middle;padding-left:5px}.form-group{margin-bottom:5px;padding:0;border-width:0}.form-inline input,.form-inline textarea,.form-inline select{display:inline-block;margin-bottom:0}.form-inline label{display:inline-block}.form-inline .radio,.form-inline .checkbox,.form-inline .radio{padding-left:0;margin-bottom:0;vertical-align:middle}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-left:0;margin-right:3px}.form-search input,.form-search textarea,.form-search select{display:inline-block;margin-bottom:0}.form-search .search-query{padding-left:14px;padding-right:14px;margin-bottom:0;border-radius:14px}.form-search label{display:inline-block}.form-search .radio,.form-search .checkbox,.form-inline .radio{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"]{float:left;margin-left:0;margin-right:3px}.form--loading:before{content:""}.form--loading .form__spinner{display:block}.form:before{position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(255,255,255,0.7);z-index:10}.form__spinner{display:none;position:absolute;top:50%;left:50%;z-index:11}table,table.booktabs{width:auto;border-spacing:0px;border-top:2px solid #baaa92;border-bottom:2px solid #baaa92}.booktabs th,th{border-bottom:1px solid #baaa92;padding:0.65ex 0.5em 0.4ex 0.5em;font-weight:normal}th,td{font-size:1rem;line-height:1.71428571}.booktabs th.cmid,th{border-bottom:1px solid #ebe7e0}.booktabs th.nocmid{border-bottom:none}.booktabs tbody tr:first-child td,tr:first-child td{padding-top:0.65ex}.booktabs td,td{padding-left:0.5em;padding-right:0.5em;text-align:left}.booktabs caption,caption{font-size:90%;text-align:left;width:auto;margin-left:auto;margin-right:auto;margin-top:1ex;caption-side:top}.booktabs tbody tr,.booktabs thead tr th.l,.booktabs td.l{text-align:left !important}.booktabs tbody tr,.booktabs thead tr th.c,.booktabs td.c{text-align:center !important}.booktabs tbody tr,.booktabs thead tr th.r,.booktabs td.r{text-align:right !important}.table-caption{float:right;clear:right;margin-right:-60%;width:50%;margin-top:0;margin-bottom:0;font-size:1.0rem;line-height:1.96}@-webkit-keyframes intro{0%{opacity:0}100%{opacity:1}}@keyframes intro{0%{opacity:0}100%{opacity:1}}.btn{display:inline-block;margin-bottom:0.25em;padding:0.5em 1em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;font-weight:bold;text-align:center;text-decoration:none;border-width:0;border-radius:4px;cursor:pointer}.btn .icon{margin-right:0.5em}.btn .icon+.hidden{margin-left:-0.5em}.btn--primary{background-color:#fc3a52;color:#fff}.btn--primary:visited{background-color:#fc3a52;color:#fff}.btn--primary:hover{background-color:#ca2e42;color:#fff}.btn--inverse{background-color:#fff;color:#0e2431;border:1px solid #baaa92}.btn--inverse:visited{background-color:#fff;color:#0e2431}.btn--inverse:hover{background-color:#ccc;color:#0e2431}.btn--light-outline{background-color:rgba(0,0,0,0);color:#fff;border:1px solid #fff}.btn--light-outline:visited{background-color:rgba(0,0,0,0);color:#fff}.btn--light-outline:hover{background-color:rgba(0,0,0,0.2);color:#fff}.btn--success{background-color:#3fa63f;color:#fff}.btn--success:visited{background-color:#3fa63f;color:#fff}.btn--success:hover{background-color:#328532;color:#fff}.btn--warning{background-color:#d67f05;color:#fff}.btn--warning:visited{background-color:#d67f05;color:#fff}.btn--warning:hover{background-color:#ab6604;color:#fff}.btn--danger{background-color:#ee5f5b;color:#fff}.btn--danger:visited{background-color:#ee5f5b;color:#fff}.btn--danger:hover{background-color:#be4c49;color:#fff}.btn--info{background-color:#3b9cba;color:#fff}.btn--info:visited{background-color:#3b9cba;color:#fff}.btn--info:hover{background-color:#2f7d95;color:#fff}.btn--facebook{background-color:#3b5998;color:#fff}.btn--facebook:visited{background-color:#3b5998;color:#fff}.btn--facebook:hover{background-color:#2f477a;color:#fff}.btn--twitter{background-color:#55acee;color:#fff}.btn--twitter:visited{background-color:#55acee;color:#fff}.btn--twitter:hover{background-color:#448abe;color:#fff}.btn--linkedin{background-color:#007bb6;color:#fff}.btn--linkedin:visited{background-color:#007bb6;color:#fff}.btn--linkedin:hover{background-color:#006292;color:#fff}.btn--block{display:block;width:100%}.btn--block+.btn--block{margin-top:0.25em}.btn--disabled{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);box-shadow:none;opacity:0.65}.btn--x-large{font-size:1.25em}.btn--large{font-size:1em}.btn--small{font-size:.6875em}.notice{margin:2em 0 !important;padding:1em;color:#000;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#ddd0ba;border-radius:4px;box-shadow:0 1px 1px rgba(189,193,196,0.25)}.notice h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice h4{margin-bottom:0;font-size:1em}.notice p:last-child{margin-bottom:0 !important}.notice h4+p{margin-top:0;padding-top:0}.notice a{color:#aaaeb0}.notice a:hover{color:#5f6162}blockquote.notice{border-left-color:#aaaeb0}.notice code{background-color:#e4d3b8}.notice pre code{background-color:inherit}.notice ul:last-child{margin-bottom:0}.notice--primary{margin:2em 0 !important;padding:1em;color:#000;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#edae9e;border-radius:4px;box-shadow:0 1px 1px rgba(252,58,82,0.25)}.notice--primary h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice--primary h4{margin-bottom:0;font-size:1em}.notice--primary p:last-child{margin-bottom:0 !important}.notice--primary h4+p{margin-top:0;padding-top:0}.notice--primary a{color:#e3344a}.notice--primary a:hover{color:#7e1d29}blockquote.notice--primary{border-left-color:#e3344a}.notice--primary code{background-color:#eac6ad}.notice--primary pre code{background-color:inherit}.notice--primary ul:last-child{margin-bottom:0}.notice--info{margin:2em 0 !important;padding:1em;color:#000;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#bdc7b8;border-radius:4px;box-shadow:0 1px 1px rgba(59,156,186,0.25)}.notice--info h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice--info h4{margin-bottom:0;font-size:1em}.notice--info p:last-child{margin-bottom:0 !important}.notice--info h4+p{margin-top:0;padding-top:0}.notice--info a{color:#358ca7}.notice--info a:hover{color:#1e4e5d}blockquote.notice--info{border-left-color:#358ca7}.notice--info code{background-color:#d7cfb7}.notice--info pre code{background-color:inherit}.notice--info ul:last-child{margin-bottom:0}.notice--warning{margin:2em 0 !important;padding:1em;color:#000;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#e4c08b;border-radius:4px;box-shadow:0 1px 1px rgba(214,127,5,0.25)}.notice--warning h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice--warning h4{margin-bottom:0;font-size:1em}.notice--warning p:last-child{margin-bottom:0 !important}.notice--warning h4+p{margin-top:0;padding-top:0}.notice--warning a{color:#c17205}.notice--warning a:hover{color:#6b4003}blockquote.notice--warning{border-left-color:#c17205}.notice--warning code{background-color:#e6cca5}.notice--warning pre code{background-color:inherit}.notice--warning ul:last-child{margin-bottom:0}.notice--success{margin:2em 0 !important;padding:1em;color:#000;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#bec999;border-radius:4px;box-shadow:0 1px 1px rgba(63,166,63,0.25)}.notice--success h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice--success h4{margin-bottom:0;font-size:1em}.notice--success p:last-child{margin-bottom:0 !important}.notice--success h4+p{margin-top:0;padding-top:0}.notice--success a{color:#399539}.notice--success a:hover{color:#205320}blockquote.notice--success{border-left-color:#399539}.notice--success code{background-color:#d7d0ab}.notice--success pre code{background-color:inherit}.notice--success ul:last-child{margin-bottom:0}.notice--danger{margin:2em 0 !important;padding:1em;color:#000;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em !important;text-indent:initial;background-color:#eab8a0;border-radius:4px;box-shadow:0 1px 1px rgba(238,95,91,0.25)}.notice--danger h4{margin-top:0 !important;margin-bottom:0.75em;line-height:inherit}.page__content .notice--danger h4{margin-bottom:0;font-size:1em}.notice--danger p:last-child{margin-bottom:0 !important}.notice--danger h4+p{margin-top:0;padding-top:0}.notice--danger a{color:#d65652}.notice--danger a:hover{color:#77302e}blockquote.notice--danger{border-left-color:#d65652}.notice--danger code{background-color:#e9c9ae}.notice--danger pre code{background-color:inherit}.notice--danger ul:last-child{margin-bottom:0}.masthead{position:relative;border-bottom:1px solid #baaa92;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.15s;animation-delay:0.15s;z-index:20}.masthead__inner-wrap{clear:both;margin-left:auto;margin-right:auto;padding:1em;max-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-family:"Gill Sans","Gill Sans MT","Gotham Narrow","Lato",Calibri,sans-serif}.masthead__inner-wrap::after{clear:both;content:"";display:table}@media (min-width: 80em){.masthead__inner-wrap{max-width:1280px}}.masthead__inner-wrap nav{z-index:10}.masthead__inner-wrap a{text-decoration:none}.site-logo img{max-height:2rem}.site-title{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-item-align:center;align-self:center;font-weight:bold}.site-subtitle{display:block;font-size:.625em}.masthead__menu{float:left;margin-left:0;margin-right:0;width:100%;clear:both}.masthead__menu .site-nav{margin-left:0}@media (min-width: 37.5em){.masthead__menu .site-nav{float:right}}.masthead__menu ul{margin:0;padding:0;clear:both;list-style-type:none}.masthead__menu-item{display:block;list-style-type:none;white-space:nowrap}.masthead__menu-item--lg{padding-right:2em;font-weight:700}.breadcrumbs{clear:both;margin:0 auto;max-width:100%;padding-left:1em;padding-right:1em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.3s;animation-delay:0.3s}.breadcrumbs::after{clear:both;content:"";display:table}@media (min-width: 80em){.breadcrumbs{max-width:1280px}}.breadcrumbs ol{padding:0;list-style:none;font-size:.75em}@media (min-width: 64em){.breadcrumbs ol{float:right;width:calc(100% - 200px)}}@media (min-width: 80em){.breadcrumbs ol{width:calc(100% - 300px)}}.breadcrumbs li{display:inline}.breadcrumbs .current{font-weight:bold}.pagination{clear:both;float:left;margin-top:1em;padding-top:1em;width:100%}.pagination::after{clear:both;content:"";display:table}.pagination ul{margin:0;padding:0;list-style-type:none;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}.pagination li{display:block;float:left;margin-left:-1px}.pagination li a{display:block;margin-bottom:0.25em;padding:0.5em 1em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:14px;font-weight:bold;line-height:1.5;text-align:center;text-decoration:none;color:#0e2431;border:1px solid #8c806e;border-radius:0}.pagination li a:hover{color:#ea6777}.pagination li a.current,.pagination li a.current.disabled{color:#fff;background:#fc3a52}.pagination li a.disabled{color:rgba(14,36,49,0.5);pointer-events:none;cursor:not-allowed}.pagination li:first-child{margin-left:0}.pagination li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination--pager{display:block;padding:1em 2em;float:left;width:50%;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1em;font-weight:bold;text-align:center;text-decoration:none;color:#0e2431;border:1px solid #8c806e;border-radius:4px}.pagination--pager:hover{background-color:#0e2431;color:#fff}.pagination--pager:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.pagination--pager:last-child{margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.pagination--pager.disabled{color:rgba(14,36,49,0.5);pointer-events:none;cursor:not-allowed}.page__content+.pagination,.page__meta+.pagination,.comment__date+.pagination,.page__share+.pagination,.page__comments+.pagination{margin-top:2em;padding-top:2em;border-top:1px solid #baaa92}.greedy-nav{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:2em;background:#e8d5b7}.greedy-nav a{display:block;margin:0 1rem;color:#000;text-decoration:none;-webkit-transition:none;transition:none}.greedy-nav a:hover{color:#000}.greedy-nav a.site-logo{margin-left:0;margin-right:0.5rem}.greedy-nav a.site-title{margin-left:0}.greedy-nav img{-webkit-transition:none;transition:none}.greedy-nav__toggle{-ms-flex-item-align:center;align-self:center;height:2rem;border:0;outline:none;background-color:transparent;cursor:pointer}.greedy-nav .visible-links{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden}.greedy-nav .visible-links li{-webkit-box-flex:0;-ms-flex:none;flex:none}.greedy-nav .visible-links a{position:relative}.greedy-nav .visible-links a:before{content:"";position:absolute;left:0;bottom:0;height:4px;background:#fc3a52;width:100%;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;-webkit-transform:scaleX(0) translate3d(0, 0, 0);transform:scaleX(0) translate3d(0, 0, 0)}.greedy-nav .visible-links a:hover:before{-webkit-transform:scaleX(1);-ms-transform:scaleX(1);transform:scaleX(1)}.greedy-nav .hidden-links{position:absolute;top:100%;right:0;margin-top:15px;padding:5px;border:1px solid #baaa92;border-radius:4px;background:#e8d5b7;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);box-shadow:0 2px 4px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)}.greedy-nav .hidden-links.hidden{display:none}.greedy-nav .hidden-links a{margin:0;padding:10px 20px;font-size:1em}.greedy-nav .hidden-links a:hover{color:#000;background:#a29580}.greedy-nav .hidden-links:before{content:"";position:absolute;top:-11px;right:10px;width:0;border-style:solid;border-width:0 10px 10px;border-color:#baaa92 transparent;display:block;z-index:0}.greedy-nav .hidden-links:after{content:"";position:absolute;top:-10px;right:10px;width:0;border-style:solid;border-width:0 10px 10px;border-color:#e8d5b7 transparent;display:block;z-index:1}.greedy-nav .hidden-links li{display:block;border-bottom:1px solid #baaa92}.greedy-nav .hidden-links li:last-child{border-bottom:none}.no-js .greedy-nav .visible-links{-ms-flex-wrap:wrap;flex-wrap:wrap;overflow:visible}.nav__list{margin-bottom:1.5em}.nav__list input[type="checkbox"],.nav__list label{display:none}@media (max-width: 63.9375em){.nav__list label{position:relative;display:inline-block;padding:0.5em 2.5em 0.5em 1em;color:#7a8288;font-size:.75em;font-weight:bold;border:1px solid #bdc1c4;border-radius:4px;z-index:20;-webkit-transition:0.2s ease-out;transition:0.2s ease-out;cursor:pointer}.nav__list label:before,.nav__list label:after{content:"";position:absolute;right:1em;top:1.25em;width:0.75em;height:0.125em;line-height:1;background-color:#7a8288;-webkit-transition:0.2s ease-out;transition:0.2s ease-out}.nav__list label:after{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.nav__list label:hover{color:#fff;border-color:#7a8288;background-color:#333}.nav__list label:hover:before,.nav__list label:hover:after{background-color:#fff}.nav__list input:checked+label{color:white;background-color:#333}.nav__list input:checked+label:before,.nav__list input:checked+label:after{background-color:#fff}.nav__list label:hover:after{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.nav__list input:checked+label:hover:after{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}.nav__list ul{margin-bottom:1em}.nav__list a{display:block;padding:0.25em 0}}@media (max-width: 63.9375em) and (min-width: 64em){.nav__list a{padding-top:0.125em;padding-bottom:0.125em}}@media (max-width: 63.9375em){.nav__list a:hover{text-decoration:underline}}.nav__list .nav__items{margin:0;font-size:1.25rem}.nav__list .nav__items a{color:inherit}.nav__list .nav__items .active{margin-left:-0.5em;padding-left:0.5em;padding-right:0.5em;font-weight:bold}@media (max-width: 63.9375em){.nav__list .nav__items{position:relative;max-height:0;opacity:0%;overflow:hidden;z-index:10;-webkit-transition:0.3s ease-in-out;transition:0.3s ease-in-out;-webkit-transform:translate(0, 10%);-ms-transform:translate(0, 10%);transform:translate(0, 10%)}}@media (max-width: 63.9375em){.nav__list input:checked~.nav__items{-webkit-transition:0.5s ease-in-out;transition:0.5s ease-in-out;max-height:9999px;overflow:visible;opacity:1;margin-top:1em;-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}}.nav__title{margin:0;padding:0.5rem 0.75rem;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1em;font-weight:bold}.nav__sub-title{display:block;margin:0.5rem 0;padding:0.25rem 0;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;font-weight:bold;text-transform:uppercase;border-bottom:1px solid #baaa92}.toc{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;color:#7a8288;background-color:#e8d5b7;border:1px solid #baaa92;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.125);box-shadow:0 1px 1px rgba(0,0,0,0.125)}.toc .nav__title{color:#fff;font-size:.75em;background:#fc3a52;border-top-left-radius:4px;border-top-right-radius:4px}.toc .active a{background-color:#fed8dc;color:#0e2431}.toc__menu{margin:0;padding:0;width:100%;list-style:none;font-size:.75em}@media (min-width: 64em){.toc__menu{font-size:.6875em}}.toc__menu a{display:block;padding:0.25rem 0.75rem;color:#0e2431;font-weight:bold;line-height:1.5;border-bottom:1px solid #baaa92}.toc__menu a:hover{color:#000}.toc__menu li ul>li a{padding-left:1.25rem;font-weight:normal}.toc__menu li ul li ul>li a{padding-left:1.75rem}.toc__menu li ul li ul li ul>li a{padding-left:2.25rem}.toc__menu li ul li ul li ul li ul>li a{padding-left:2.75rem}.toc__menu li ul li ul li ul li ul li ul>li a{padding-left:3.25rem}.page__footer{clear:both;float:left;margin-left:0;margin-right:0;width:100%;margin-top:3em;color:#0e2431;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.45s;animation-delay:0.45s;background-color:#f9b248}.page__footer::after{clear:both;content:"";display:table}.page__footer footer{clear:both;margin-left:auto;margin-right:auto;margin-top:2em;max-width:100%;padding:0 1em 2em}.page__footer footer::after{clear:both;content:"";display:table}@media (min-width: 80em){.page__footer footer{max-width:1280px}}.page__footer a{color:inherit;text-decoration:none}.page__footer a:hover{text-decoration:underline}.page__footer .fas,.page__footer .fab,.page__footer .far,.page__footer .fal{color:#0e2431}.page__footer-copyright{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.6875em}.page__footer-follow ul{margin:0;padding:0;list-style-type:none}.page__footer-follow li{display:inline-block;padding-top:5px;padding-bottom:5px;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em;text-transform:uppercase}.page__footer-follow li+li:before{content:"";padding-right:5px}.page__footer-follow a{padding-right:10px;font-weight:bold}.page__footer-follow .social-icons a{white-space:nowrap}.layout--search .archive__item-teaser{margin-bottom:0.25em}.search__toggle{margin-left:1rem;margin-right:1rem;height:2rem;border:0;outline:none;color:#fc3a52;background-color:transparent;cursor:pointer;-webkit-transition:0.2s;transition:0.2s}.search__toggle:hover{color:#bd2c3e}.search-icon{width:100%;height:100%}.search-content{display:none;visibility:hidden;padding-top:1em;padding-bottom:1em}.search-content__inner-wrap{width:100%;margin-left:auto;margin-right:auto;padding-left:1em;padding-right:1em;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.15s;animation-delay:0.15s}@media (min-width: 80em){.search-content__inner-wrap{max-width:1280px}}.search-content__form{background-color:transparent}.search-content .search-input{display:block;margin-bottom:0;padding:0;border:none;outline:none;box-shadow:none;background-color:transparent;font-size:1.563em}@media (min-width: 64em){.search-content .search-input{font-size:1.953em}}@media (min-width: 80em){.search-content .search-input{font-size:2.441em}}.search-content.is--visible{display:block;visibility:visible}.search-content.is--visible::after{content:"";display:block}.search-content .results__found{margin-top:0.5em;font-size:.75em}.search-content .archive__item{margin-bottom:2em}@media (min-width: 64em){.search-content .archive__item{width:75%}}@media (min-width: 80em){.search-content .archive__item{width:50%}}.search-content .archive__item-title{margin-top:0}.search-content .archive__item-excerpt{margin-bottom:0}.ais-search-box{max-width:100% !important;margin-bottom:2em}.archive__item-title .ais-Highlight{color:#fc3a52;font-style:normal;text-decoration:underline}.archive__item-excerpt .ais-Highlight{color:#fc3a52;font-style:normal;font-weight:bold}div.highlighter-rouge,figure.highlight{position:relative;margin-bottom:1em;background:#1d1f21;color:#c5c8c6;font-family:Monaco,Consolas,"Lucida Console",monospace;font-size:.75em;line-height:1.8;border-radius:4px}div.highlighter-rouge>pre,div.highlighter-rouge pre.highlight,figure.highlight>pre,figure.highlight pre.highlight{margin:0;padding:1em}.highlight table{margin-bottom:0;font-size:1em;border:0}.highlight table td{padding:0;width:calc(100% - 1em);border:0}.highlight table td.gutter,.highlight table td.rouge-gutter{padding-right:1em;width:1em;color:#b4b7b4;border-right:1px solid #b4b7b4;text-align:right}.highlight table td.code,.highlight table td.rouge-code{padding-left:1em}.highlight table pre{margin:0}.highlight pre{width:100%}.highlight .hll{background-color:#e0e0e0}.highlight .c{color:#b4b7b4}.highlight .err{color:#c66}.highlight .k{color:#b294bb}.highlight .l{color:#de935f}.highlight .n{color:#c5c8c6}.highlight .o{color:#8abeb7}.highlight .p{color:#c5c8c6}.highlight .cm{color:#b4b7b4}.highlight .cp{color:#b4b7b4}.highlight .c1{color:#b4b7b4}.highlight .cs{color:#b4b7b4}.highlight .gd{color:#c66}.highlight .ge{font-style:italic}.highlight .gh{color:#c5c8c6;font-weight:bold}.highlight .gi{color:#b5bd68}.highlight .gp{color:#b4b7b4;font-weight:bold}.highlight .gs{font-weight:bold}.highlight .gu{color:#8abeb7;font-weight:bold}.highlight .kc{color:#b294bb}.highlight .kd{color:#b294bb}.highlight .kn{color:#8abeb7}.highlight .kp{color:#b294bb}.highlight .kr{color:#b294bb}.highlight .kt{color:#f0c674}.highlight .ld{color:#b5bd68}.highlight .m{color:#de935f}.highlight .s{color:#b5bd68}.highlight .na{color:#81a2be}.highlight .nb{color:#c5c8c6}.highlight .nc{color:#f0c674}.highlight .no{color:#c66}.highlight .nd{color:#8abeb7}.highlight .ni{color:#c5c8c6}.highlight .ne{color:#c66}.highlight .nf{color:#81a2be}.highlight .nl{color:#c5c8c6}.highlight .nn{color:#f0c674}.highlight .nx{color:#81a2be}.highlight .py{color:#c5c8c6}.highlight .nt{color:#8abeb7}.highlight .nv{color:#c66}.highlight .ow{color:#8abeb7}.highlight .w{color:#c5c8c6}.highlight .mf{color:#de935f}.highlight .mh{color:#de935f}.highlight .mi{color:#de935f}.highlight .mo{color:#de935f}.highlight .sb{color:#b5bd68}.highlight .sc{color:#c5c8c6}.highlight .sd{color:#b4b7b4}.highlight .s2{color:#b5bd68}.highlight .se{color:#de935f}.highlight .sh{color:#b5bd68}.highlight .si{color:#de935f}.highlight .sx{color:#b5bd68}.highlight .sr{color:#b5bd68}.highlight .s1{color:#b5bd68}.highlight .ss{color:#b5bd68}.highlight .bp{color:#c5c8c6}.highlight .vc{color:#c66}.highlight .vg{color:#c66}.highlight .vi{color:#c66}.highlight .il{color:#de935f}.gist th,.gist td{border-bottom:0}.hidden,.is--hidden{display:none;visibility:hidden}.load{display:none}.transparent{opacity:0}.visually-hidden,.screen-reader-text,.screen-reader-text span,.screen-reader-shortcut{position:absolute !important;clip:rect(1px, 1px, 1px, 1px);height:1px !important;width:1px !important;border:0 !important;overflow:hidden}body:hover .visually-hidden a,body:hover .visually-hidden input,body:hover .visually-hidden button{display:none !important}.screen-reader-text:focus,.screen-reader-shortcut:focus{clip:auto !important;height:auto !important;width:auto !important;display:block;font-size:1em;font-weight:bold;padding:15px 23px 14px;background:#fff;z-index:100000;text-decoration:none;box-shadow:0 0 2px 2px rgba(0,0,0,0.6)}.skip-link{position:fixed;z-index:20;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;white-space:nowrap}.skip-link li{height:0;width:0;list-style:none}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.task-list{padding:0}.task-list li{list-style-type:none}.task-list .task-list-item-checkbox{margin-right:0.5em;opacity:1}.task-list .task-list{margin-left:1em}.cf{clear:both}.wrapper{margin-left:auto;margin-right:auto;width:100%}.align-left{display:block;margin-left:auto;margin-right:auto}@media (min-width: 37.5em){.align-left{float:left;margin-right:1em}}.align-right{display:block;margin-left:auto;margin-right:auto}@media (min-width: 37.5em){.align-right{float:right;margin-left:1em}}.align-center{display:block;margin-left:auto;margin-right:auto}@media (min-width: 64em){.full{margin-right:-20.3389830508% !important}}.icon{display:inline-block;fill:currentColor;width:1em;height:1.1em;line-height:1;position:relative;top:-0.1em;vertical-align:middle}.social-icons .fas,.social-icons .fab,.social-icons .far,.social-icons .fal{color:#000}.social-icons .fa-behance,.social-icons .fa-behance-square{color:#1769ff}.social-icons .fa-bitbucket{color:#205081}.social-icons .fa-dribbble,.social-icons .fa-dribble-square{color:#ea4c89}.social-icons .fa-facebook,.social-icons .fa-facebook-square,.social-icons .fa-facebook-f{color:#3b5998}.social-icons .fa-flickr{color:#ff0084}.social-icons .fa-foursquare{color:#0072b1}.social-icons .fa-github,.social-icons .fa-github-alt,.social-icons .fa-github-square{color:#171516}.social-icons .fa-gitlab{color:#e24329}.social-icons .fa-instagram{color:#517fa4}.social-icons .fa-keybase{color:#ef7639}.social-icons .fa-lastfm,.social-icons .fa-lastfm-square{color:#d51007}.social-icons .fa-linkedin,.social-icons .fa-linkedin-in{color:#007bb6}.social-icons .fa-mastodon,.social-icons .fa-mastodon-square{color:#2b90d9}.social-icons .fa-pinterest,.social-icons .fa-pinterest-p,.social-icons .fa-pinterest-square{color:#cb2027}.social-icons .fa-reddit{color:#ff4500}.social-icons .fa-rss,.social-icons .fa-rss-square{color:#fa9b39}.social-icons .fa-soundcloud{color:#f30}.social-icons .fa-stack-exchange,.social-icons .fa-stack-overflow{color:#fe7a15}.social-icons .fa-tumblr,.social-icons .fa-tumblr-square{color:#32506d}.social-icons .fa-twitter,.social-icons .fa-twitter-square{color:#55acee}.social-icons .fa-vimeo,.social-icons .fa-vimeo-square,.social-icons .fa-vimeo-v{color:#1ab7ea}.social-icons .fa-vine{color:#00bf8f}.social-icons .fa-youtube{color:#b00}.social-icons .fa-xing,.social-icons .fa-xing-square{color:#006567}.navicon{position:relative;width:1.5rem;height:.25rem;background:#fc3a52;margin:auto;-webkit-transition:0.3s;transition:0.3s}.navicon:before,.navicon:after{content:"";position:absolute;left:0;width:1.5rem;height:.25rem;background:#fc3a52;-webkit-transition:0.3s;transition:0.3s}.navicon:before{top:-.5rem}.navicon:after{bottom:-.5rem}.close .navicon{background:transparent}.close .navicon:before,.close .navicon:after{-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;top:0;width:1.5rem}.close .navicon:before{-webkit-transform:rotate3d(0, 0, 1, 45deg);transform:rotate3d(0, 0, 1, 45deg)}.close .navicon:after{-webkit-transform:rotate3d(0, 0, 1, -45deg);transform:rotate3d(0, 0, 1, -45deg)}@supports (pointer-events: none){.greedy-nav__toggle:before{content:'';position:fixed;top:0;left:0;width:100%;height:100%;opacity:0;background-color:#e8d5b7;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;pointer-events:none}}.greedy-nav__toggle.close:before{opacity:0.9;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;pointer-events:auto}.greedy-nav__toggle:hover .navicon,.greedy-nav__toggle:hover .navicon:before,.greedy-nav__toggle:hover .navicon:after{background:#bd2c3e}.greedy-nav__toggle.close:hover .navicon{background:transparent}@media (min-width: 64em){.sticky{clear:both;position:-webkit-sticky;position:sticky;top:2em}.sticky::after{clear:both;content:"";display:table}.sticky>*{display:block}}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.show-modal{overflow:hidden;position:relative}.show-modal:before{position:absolute;content:"";top:0;left:0;width:100%;height:100%;z-index:999;background-color:rgba(255,255,255,0.85)}.show-modal .modal{display:block}.modal{display:none;position:fixed;width:300px;top:50%;left:50%;margin-left:-150px;margin-top:-150px;min-height:0;z-index:9999;background:#fff;border:1px solid #baaa92;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.125)}.modal__title{margin:0;padding:0.5em 1em}.modal__supporting-text{padding:0 1em 0.5em 1em}.modal__actions{padding:0.5em 1em;border-top:1px solid #baaa92}.footnote{color:#0e2431;text-decoration:none}.footnotes{color:#0e2431}.footnotes ol,.footnotes li,.footnotes p{margin-bottom:0;font-size:.75em}a.reversefootnote{color:#f97600;text-decoration:none}a.reversefootnote:hover{text-decoration:underline}.required{color:#ee5f5b;font-weight:bold}.gsc-control-cse table,.gsc-control-cse tr,.gsc-control-cse td{border:0}.responsive-video-container{position:relative;margin-bottom:1em;padding-bottom:56.25%;height:0;overflow:hidden;max-width:100%}.responsive-video-container iframe,.responsive-video-container object,.responsive-video-container embed{position:absolute;top:0;left:0;width:100%;height:100%}:-webkit-full-screen-ancestor .masthead,:-webkit-full-screen-ancestor .page__footer{position:static}#main{clear:both;margin-left:auto;margin-right:auto;padding-left:1em;padding-right:1em;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;max-width:100%;-webkit-animation-delay:0.15s;animation-delay:0.15s}#main::after{clear:both;content:"";display:table}@media (min-width: 80em){#main{max-width:1280px}}body{display:-webkit-box;display:-ms-flexbox;display:flex;min-height:100vh;counter-reset:sidenote-counter;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.initial-content,.search-content{flex:1 0 auto}@media (min-width: 64em){.page{float:right;width:calc(100% - 200px);padding-right:200px}}@media (min-width: 80em){.page{width:calc(100% - 300px);padding-right:300px}}.page .page__inner-wrap{float:left;margin-top:1em;margin-left:0;margin-right:0;width:100%;clear:both}.page .page__inner-wrap .page__content,.page .page__inner-wrap .page__meta,.page .page__inner-wrap .comment__date,.page .page__inner-wrap .page__share{position:relative;float:left;margin-left:0;margin-right:0;width:100%;clear:both}.page__title{margin-top:0;line-height:1}.page__title a{color:#000;text-decoration:none}.page__title+.page__meta,.page__title+.comment__date{margin-top:-0.5em}.page__lead{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1.25em}.page__content h2{padding-bottom:0.5em;border-bottom:1px solid #baaa92}.page__content h1,.page__content h2,.page__content h3,.page__content h4,.page__content h5,.page__content h6{max-width:75%}.page__content h1 .header-link,.page__content h2 .header-link,.page__content h3 .header-link,.page__content h4 .header-link,.page__content h5 .header-link,.page__content h6 .header-link{position:relative;left:0.5em;opacity:0;font-size:0.8em;-webkit-transition:opacity 0.2s ease-in-out 0.1s;-moz-transition:opacity 0.2s ease-in-out 0.1s;-o-transition:opacity 0.2s ease-in-out 0.1s;transition:opacity 0.2s ease-in-out 0.1s}.page__content h1:hover .header-link,.page__content h2:hover .header-link,.page__content h3:hover .header-link,.page__content h4:hover .header-link,.page__content h5:hover .header-link,.page__content h6:hover .header-link{opacity:1}.page__content p,.page__content li,.page__content dl{font-size:1em}.page__content p{margin:0 0 1.3em}.page__content a:not(.btn):hover{text-decoration:underline}.page__content a:not(.btn):hover img{box-shadow:0 0 10px rgba(0,0,0,0.25)}.page__content :not(pre)>code{padding-top:0.1rem;padding-bottom:0.1rem;font-size:0.8em;background:#edddc5;border-radius:4px}.page__content :not(pre)>code::before,.page__content :not(pre)>code::after{letter-spacing:-0.2em;content:"\00a0"}.page__content dt{margin-top:1em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-weight:bold}.page__content dd{margin-left:1em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em}.page__content .small{font-size:.75em}.page__content blockquote+.small{margin-top:-1.5em;padding-left:1.25rem}.page__hero{position:relative;margin-bottom:2em;clear:both;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.25s;animation-delay:0.25s}.page__hero::after{clear:both;content:"";display:table}.page__hero--overlay{position:relative;margin-bottom:2em;padding:3em 0;clear:both;background-size:cover;background-repeat:no-repeat;background-position:center;-webkit-animation:intro 0.3s both;animation:intro 0.3s both;-webkit-animation-delay:0.25s;animation-delay:0.25s}.page__hero--overlay::after{clear:both;content:"";display:table}.page__hero--overlay a{color:#fff}.page__hero--overlay .wrapper{padding-left:1em;padding-right:1em}@media (min-width: 80em){.page__hero--overlay .wrapper{max-width:1280px}}.page__hero--overlay .page__title,.page__hero--overlay .page__meta,.page__hero--overlay .comment__date,.page__hero--overlay .page__lead,.page__hero--overlay .btn{color:#fff;text-shadow:1px 1px 4px rgba(0,0,0,0.5)}.page__hero--overlay .page__lead{max-width:768px}.page__hero--overlay .page__title{font-size:1.953em}@media (min-width: 37.5em){.page__hero--overlay .page__title{font-size:2.441em}}.page__hero-image{width:100%;height:auto;-ms-interpolation-mode:bicubic}.page__hero-caption{position:absolute;bottom:0;right:0;margin:0 auto;padding:2px 5px;color:#fff;font-family:Georgia,Times,serif;font-size:.6875em;background:#000;text-align:right;z-index:5;opacity:0.5;border-radius:4px 0 0 0}@media (min-width: 64em){.page__hero-caption{padding:5px 10px}}.page__hero-caption a{color:#fff;text-decoration:none}.page__share{margin-top:2em;padding-top:1em;border-top:1px solid #baaa92}@media (max-width: 37.5em){.page__share .btn span{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}}.page__share-title{margin-bottom:10px;font-size:.75em;text-transform:uppercase}.page__meta,.comment__date{margin-top:0.25em;color:#0e2431;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:.75em}.page__meta p,.comment__date p{margin:0}.page__meta a,.comment__date a{color:inherit}.page__meta-title{margin-bottom:10px;font-size:.75em;text-transform:uppercase}.page__meta-sep::before{content:"\2022";padding-left:0.5em;padding-right:0.5em}.page__taxonomy .sep{display:none}.page__taxonomy strong{margin-right:10px}.page__taxonomy-item{display:inline-block;margin-right:5px;margin-bottom:8px;padding:5px 10px;text-decoration:none;border:1px solid #8c806e;border-radius:4px}.page__taxonomy-item:hover{text-decoration:none;color:#ea6777}.taxonomy__section{margin-bottom:2em;padding-bottom:1em}.taxonomy__section:not(:last-child){border-bottom:solid 1px #baaa92}.taxonomy__section .archive__item-title{margin-top:0}.taxonomy__section .archive__subtitle{clear:both;border:0}.taxonomy__section+.taxonomy__section{margin-top:2em}.taxonomy__title{margin-bottom:0.5em;color:#0e2431}.taxonomy__count{color:#0e2431}.taxonomy__index{display:grid;grid-column-gap:2em;grid-template-columns:repeat(2, 1fr);margin:1.414em 0;padding:0;font-size:0.75em;list-style:none}@media (min-width: 64em){.taxonomy__index{grid-template-columns:repeat(3, 1fr)}}.taxonomy__index a{display:-webkit-box;display:-ms-flexbox;display:flex;padding:0.25em 0;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;color:inherit;text-decoration:none;border-bottom:1px solid #baaa92}.back-to-top{display:block;clear:both;color:#0e2431;font-size:0.6em;text-transform:uppercase;text-align:right;text-decoration:none}.page__comments{float:left;margin-left:0;margin-right:0;width:100%;clear:both}.page__comments-title{margin-top:2rem;margin-bottom:10px;padding-top:2rem;font-size:.75em;border-top:1px solid #baaa92;text-transform:uppercase}.page__comments-form{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.page__comments-form.disabled input,.page__comments-form.disabled button,.page__comments-form.disabled textarea,.page__comments-form.disabled label{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);box-shadow:none;opacity:0.65}.comment{clear:both;margin:1em 0}.comment::after{clear:both;content:"";display:table}.comment:not(:last-child){border-bottom:1px solid #baaa92}.comment__avatar-wrapper{float:left;width:60px;height:60px}@media (min-width: 64em){.comment__avatar-wrapper{width:100px;height:100px}}.comment__avatar{width:40px;height:40px;border-radius:50%}@media (min-width: 64em){.comment__avatar{width:80px;height:80px;padding:5px;border:1px solid #baaa92}}.comment__content-wrapper{float:right;width:calc(100% - 60px)}@media (min-width: 64em){.comment__content-wrapper{width:calc(100% - 100px)}}.comment__author{margin:0}.comment__author a{text-decoration:none}.comment__date{margin:0}.comment__date a{text-decoration:none}.page__related{clear:both;float:left;margin-top:2em;padding-top:1em;border-top:1px solid #baaa92}.page__related::after{clear:both;content:"";display:table}@media (min-width: 64em){.page__related{float:right;width:calc(100% - 200px)}}@media (min-width: 80em){.page__related{width:calc(100% - 300px)}}.page__related a{color:inherit;text-decoration:none}.page__related-title{margin-bottom:10px;font-size:.75em;text-transform:uppercase}@media (min-width: 64em){.wide .page{padding-right:0}}@media (min-width: 80em){.wide .page{padding-right:0}}@media (min-width: 64em){.wide .page__related{padding-right:0}}@media (min-width: 80em){.wide .page__related{padding-right:0}}.mjx-math{font-size:1rem}div.epigraph{margin:3.5636rem 0}div.epigraph>blockquote{margin-top:3rem;margin-bottom:3rem}div.epigraph>blockquote,div.epigraph>blockquote>p{font-style:italic}div.epigraph>blockquote>footer{font-style:normal;width:45%;padding-left:2.5%;padding-right:2.5%;padding-top:0;margin-top:0.4455rem;margin-bottom:3.1182rem}div.epigraph>blockquote>footer>cite{font-style:italic}figure,figure img.maincolumn{max-width:55%;-webkit-margin-start:0;-webkit-margin-end:0;margin-bottom:3em}figcaption{float:right;clear:right;margin-right:-50%;margin-top:0;margin-bottom:0;font-size:1.0rem;line-height:1.6;vertical-align:baseline;position:relative;max-width:40%;font-family:'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif}figure.fullwidth figcaption{float:left;margin-right:0%;margin-left:33%;max-width:100%}img{max-width:100%}.sidenote,.marginnote{float:right;clear:right;margin-right:-50%;width:45%;margin-top:0;margin-bottom:1.96rem;font-size:0.9rem;line-height:1.96;vertical-align:baseline;position:relative;font-family:'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif}li .sidenote,li .marginnote{margin-right:-50%;width:25%}blockquote .sidenote,blockquote .marginnote{margin-right:-79%}.sidenote-number{counter-increment:sidenote-counter}.sidenote-number:after,.sidenote:before{content:counter(sidenote-counter, lower-roman) " ";font-family:et-bembo-roman-old-style;color:#f97600;position:relative;vertical-align:baseline}.sidenote-number:after{content:counter(sidenote-counter, lower-roman);font-size:0.8rem;color:#f97600;top:-0.5rem;left:0.1rem}.sidenote:before{content:counter(sidenote-counter, lower-roman) ". ";color:#f97600;top:0rem}p,footer,div.table-wrapper,.MJXc-display,.MathJax{width:75%}div.table-wrapper,table{overflow-x:auto}@media screen and (max-width: 760px){p,footer{width:90%}pre code{width:87.5%}figure{max-width:90%}figcaption,figure.fullwidth figcaption{margin-right:0%;max-width:none}blockquote p,blockquote footer,div.epigraph>blockquote>footer,.MJXc-display{width:80%;padding-left:5%;padding-right:5%}}.marginnote code,.sidenote code{font-size:1rem}pre{width:52.5%;padding-left:2.5%;overflow-x:auto}.fullwidth,li.listing div{max-width:90%}.full-width .sidenote,.full-width .sidenote-number,.full-width .marginnote{display:none}span.newthought{font-variant:small-caps;font-size:1.2em;letter-spacing:0.05rem}input.margin-toggle{display:none}label.sidenote-number{display:inline}label.margin-toggle:not(.sidenote-number){display:none}@media (max-width: 760px){label.margin-toggle:not(.sidenote-number){display:inline;color:#f97600}.sidenote,.marginnote{display:none}.margin-toggle:checked+.sidenote,.margin-toggle:checked+.marginnote{display:block;float:left;left:1rem;clear:both;width:95%;margin:1rem 2.5%;vertical-align:baseline;position:relative}label{cursor:pointer}pre,pre code,p code,p pre code{width:90%;padding:0}.table-caption{display:block;float:right;clear:both;width:98%;margin-top:1rem;margin-bottom:0.5rem;margin-left:1%;margin-right:1%;vertical-align:baseline;position:relative}div.table-wrapper,table,table.booktabs{width:85%}div.table-wrapper{border-right:1px solid #efefef}img{max-width:100%}figcaption.maincolumn-figure,figure.fullwidth figcaption{float:none;text-align:center}figure.fullwidth figcaption{margin-left:0}}.archive{margin-top:1em;margin-bottom:2em}@media (min-width: 64em){.archive{float:right;width:calc(100% - 200px);padding-right:200px}}@media (min-width: 80em){.archive{width:calc(100% - 300px);padding-right:300px}}.archive__item{position:relative}.archive__item a{position:relative;z-index:10}.archive__item a[rel="permalink"]{position:static}.archive__subtitle{margin:1.414em 0 0.5em;padding-bottom:0.5em;font-size:1em;color:#0e2431;border-bottom:1px solid #baaa92}.archive__subtitle+.list__item .archive__item-title{margin-top:0.5em}.archive__item-title{margin-bottom:0.25em;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;line-height:initial;overflow:hidden;text-overflow:ellipsis}.archive__item-title a[rel="permalink"]::before{content:'';position:absolute;left:0;top:0;right:0;bottom:0}.archive__item-title a+a{opacity:0.5}.page__content .archive__item-title{margin-top:1em;border-bottom:none}.archive__item-excerpt{margin-top:0;font-size:.75em}.archive__item-excerpt+p{text-indent:0}.archive__item-excerpt a{position:relative}.archive__item-teaser{position:relative;border-radius:4px;overflow:hidden}.archive__item-teaser img{width:100%}.archive__item-caption{position:absolute;bottom:0;right:0;margin:0 auto;padding:2px 5px;color:#fff;font-family:Georgia,Times,serif;font-size:.625em;background:#000;text-align:right;z-index:5;opacity:0.5;border-radius:4px 0 0 0}@media (min-width: 64em){.archive__item-caption{padding:5px 10px}}.archive__item-caption a{color:#fff;text-decoration:none}.list__item .page__meta,.list__item .comment__date{margin:0 0 4px;font-size:0.6em}@media (min-width: 64em){.archive .grid__wrapper{margin-right:-200px}}@media (min-width: 80em){.archive .grid__wrapper{margin-right:-300px}}.grid__item{margin-bottom:2em}@media (min-width: 37.5em){.grid__item{float:left;width:48.9795918367%}.grid__item:nth-child(2n + 1){clear:both;margin-left:0}.grid__item:nth-child(2n + 2){clear:none;margin-left:2.0408163265%}}@media (min-width: 48em){.grid__item{margin-left:0;margin-right:0;width:23.7288135593%}.grid__item:nth-child(2n + 1){clear:none}.grid__item:nth-child(4n + 1){clear:both}.grid__item:nth-child(4n + 2){clear:none;margin-left:1.6949152542%}.grid__item:nth-child(4n + 3){clear:none;margin-left:1.6949152542%}.grid__item:nth-child(4n + 4){clear:none;margin-left:1.6949152542%}}.grid__item .page__meta,.grid__item .comment__date{margin:0 0 4px;font-size:0.6em}.grid__item .page__meta-sep{display:block}.grid__item .page__meta-sep::before{display:none}.grid__item .archive__item-title{margin-top:0.5em;font-size:1em}.grid__item .archive__item-excerpt{display:none}@media (min-width: 48em){.grid__item .archive__item-excerpt{display:block;font-size:.75em}}@media (min-width: 37.5em){.grid__item .archive__item-teaser{max-height:200px}}@media (min-width: 48em){.grid__item .archive__item-teaser{max-height:120px}}.feature__wrapper{clear:both;margin-bottom:2em;border-bottom:1px solid #baaa92}.feature__wrapper::after{clear:both;content:"";display:table}.feature__wrapper .archive__item-title{margin-bottom:0}.feature__item{position:relative;margin-bottom:2em;font-size:1.125em}@media (min-width: 37.5em){.feature__item{float:left;margin-bottom:0;width:32.2033898305%}.feature__item:nth-child(3n + 1){clear:both;margin-left:0}.feature__item:nth-child(3n + 2){clear:none;margin-left:1.6949152542%}.feature__item:nth-child(3n + 3){clear:none;margin-left:1.6949152542%}.feature__item .feature__item-teaser{max-height:200px;overflow:hidden}}.feature__item .archive__item-body{padding-left:1.6949152542%;padding-right:1.6949152542%}.feature__item a.btn::before{content:'';position:absolute;left:0;top:0;right:0;bottom:0}.feature__item--left{position:relative;float:left;margin-left:0;margin-right:0;width:100%;clear:both;font-size:1.125em}.feature__item--left .archive__item{float:left}.feature__item--left .archive__item-teaser{margin-bottom:2em}.feature__item--left a.btn::before{content:'';position:absolute;left:0;top:0;right:0;bottom:0}@media (min-width: 37.5em){.feature__item--left .archive__item-teaser{float:left;width:40.6779661017%}.feature__item--left .archive__item-body{float:right;padding-left:1.6949152542%;padding-right:1.6949152542%;width:57.6271186441%}}.feature__item--right{position:relative;float:left;margin-left:0;margin-right:0;width:100%;clear:both;font-size:1.125em}.feature__item--right .archive__item{float:left}.feature__item--right .archive__item-teaser{margin-bottom:2em}.feature__item--right a.btn::before{content:'';position:absolute;left:0;top:0;right:0;bottom:0}@media (min-width: 37.5em){.feature__item--right{text-align:right}.feature__item--right .archive__item-teaser{float:right;width:40.6779661017%}.feature__item--right .archive__item-body{float:left;width:57.6271186441%;padding-left:1.6949152542%;padding-right:1.6949152542%}}.feature__item--center{position:relative;float:left;margin-left:0;margin-right:0;width:100%;clear:both;font-size:1.125em}.feature__item--center .archive__item{float:left;width:100%}.feature__item--center .archive__item-teaser{margin-bottom:2em}.feature__item--center a.btn::before{content:'';position:absolute;left:0;top:0;right:0;bottom:0}@media (min-width: 37.5em){.feature__item--center{text-align:center}.feature__item--center .archive__item-teaser{margin:0 auto;width:40.6779661017%}.feature__item--center .archive__item-body{margin:0 auto;width:57.6271186441%}}.archive .feature__wrapper .archive__item-title{margin-top:0.25em;font-size:1em}.archive .feature__item,.archive .feature__item--left,.archive .feature__item--center,.archive .feature__item--right{font-size:1em}@media (min-width: 64em){.wide .archive{padding-right:0}}@media (min-width: 80em){.wide .archive{padding-right:0}}.layout--single .feature__wrapper{display:inline-block}.sidebar{clear:both}.sidebar::after{clear:both;content:"";display:table}@media (min-width: 64em){.sidebar{float:left;width:calc(200px - 1em);opacity:0.75;-webkit-transition:opacity 0.2s ease-in-out;transition:opacity 0.2s ease-in-out}.sidebar:hover{opacity:1}.sidebar.sticky{overflow-y:auto;max-height:calc(100vh - 2em - 2em)}}@media (min-width: 80em){.sidebar{width:calc(300px - 1em)}}.sidebar>*{margin-top:1em;margin-bottom:1em}.sidebar h2,.sidebar h3,.sidebar h4,.sidebar h5,.sidebar h6{margin-bottom:0;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}.sidebar p,.sidebar li{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1em;line-height:1.5}.sidebar img{width:100%}.sidebar img.emoji{width:20px;height:20px}.sidebar__right{margin-bottom:1em}@media (min-width: 64em){.sidebar__right{position:absolute;top:0;right:0;width:200px;margin-right:-200px;padding-left:1em;z-index:10}.sidebar__right.sticky{clear:both;position:-webkit-sticky;position:sticky;top:2em;float:right}.sidebar__right.sticky::after{clear:both;content:"";display:table}.sidebar__right.sticky .toc .toc__menu{overflow-y:auto;max-height:calc(100vh - 7em)}}@media (min-width: 80em){.sidebar__right{width:300px;margin-right:-300px}}@media (min-width: 64em){.splash .sidebar__right{position:relative;float:right;margin-right:0}}@media (min-width: 80em){.splash .sidebar__right{margin-right:0}}.author__avatar{display:table-cell;vertical-align:top;width:36px;height:36px}@media (min-width: 64em){.author__avatar{display:block;width:auto;height:auto}}.author__avatar img{max-width:110px;border-radius:50%}@media (min-width: 64em){.author__avatar img{padding:5px;border:1px solid #baaa92}}.author__content{display:table-cell;vertical-align:top;padding-left:15px;padding-right:25px;line-height:1}@media (min-width: 64em){.author__content{display:block;width:100%;padding-left:0;padding-right:0}}.author__content a{color:inherit;text-decoration:none}.author__name{margin:0}@media (min-width: 64em){.author__name{margin-top:10px;margin-bottom:10px}}.sidebar .author__name{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1em}.author__bio{margin:0}@media (min-width: 64em){.author__bio{margin-top:10px;margin-bottom:20px}}.author__urls-wrapper{position:relative;display:table-cell;vertical-align:middle;font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;z-index:20;cursor:pointer}.author__urls-wrapper li:last-child a{margin-bottom:0}.author__urls-wrapper .author__urls span.label{padding-left:5px}@media (min-width: 64em){.author__urls-wrapper{display:block}}.author__urls-wrapper button{position:relative;margin-bottom:0}@supports (pointer-events: none){.author__urls-wrapper button:before{content:'';position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none}}.author__urls-wrapper button.open:before{pointer-events:auto}@media (min-width: 64em){.author__urls-wrapper button{display:none}}.author__urls{display:none;position:absolute;right:0;margin-top:15px;padding:10px;list-style-type:none;border:1px solid #baaa92;border-radius:4px;background:#e8d5b7;box-shadow:0 2px 4px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);cursor:default}.author__urls.is--visible{display:block}@media (min-width: 64em){.author__urls{display:block;position:relative;margin:0;padding:0;border:0;background:transparent;box-shadow:none}}.author__urls:before{display:block;content:"";position:absolute;top:-11px;left:calc(50% - 10px);width:0;border-style:solid;border-width:0 10px 10px;border-color:#baaa92 transparent;z-index:0}@media (min-width: 64em){.author__urls:before{display:none}}.author__urls:after{display:block;content:"";position:absolute;top:-10px;left:calc(50% - 10px);width:0;border-style:solid;border-width:0 10px 10px;border-color:#e8d5b7 transparent;z-index:1}@media (min-width: 64em){.author__urls:after{display:none}}.author__urls ul{padding:10px;list-style-type:none}.author__urls li{white-space:nowrap}.author__urls a{display:block;margin-bottom:5px;padding-right:5px;padding-top:2px;padding-bottom:2px;color:inherit;font-size:1em;text-decoration:none}.author__urls a:hover{text-decoration:underline}.toc{font-family:-apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-size:1em}.toc .nav__title{font-size:.75em}.toc .toc__menu{font-size:.75em}.toc .toc__menu ul{padding-left:1em}.author__avatar,.author__content,.author__urls-wrapper{font-family:ETBembo,"Chronicle Text G2",Palatino,"Palatino Linotype","Palatino LT STD","Book Antiqua",Georgia,serif;font-size:.75em}@media print{[hidden]{display:none}*{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}html{margin:0;padding:0;min-height:auto !important;font-size:16px}body{margin:0 auto;background:#fff !important;color:#000 !important;font-size:1rem;line-height:1.5;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}h1,h2,h3,h4,h5,h6{color:#000;line-height:1.2;margin-bottom:0.75rem;margin-top:0}h1{font-size:2.5rem}h2{font-size:2rem}h3{font-size:1.75rem}h4{font-size:1.5rem}h5{font-size:1.25rem}h6{font-size:1rem}a,a:visited{color:#000;text-decoration:underline;word-wrap:break-word}table{border-collapse:collapse}thead{display:table-header-group}table,th,td{border-bottom:1px solid #000}td,th{padding:8px 16px}img{border:0;display:block;max-width:100% !important;vertical-align:middle}hr{border:0;border-bottom:2px solid #bbb;height:0;margin:2.25rem 0;padding:0}dt{font-weight:bold}dd{margin:0;margin-bottom:0.75rem}abbr[title],acronym[title]{border:0;text-decoration:none}table,blockquote,pre,code,figure,li,hr,ul,ol,a,tr{page-break-inside:avoid}h2,h3,h4,p,a{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid;page-break-inside:avoid}h1+p,h2+p,h3+p{page-break-before:avoid}img{page-break-after:auto;page-break-before:auto;page-break-inside:avoid}pre{white-space:pre-wrap !important;word-wrap:break-word}a[href^='http://']:after,a[href^='https://']:after,a[href^='ftp://']:after{content:" (" attr(href) ")";font-size:80%}abbr[title]:after,acronym[title]:after{content:" (" attr(title) ")"}#main{max-width:100%}.page{margin:0;padding:0;width:100%}.page-break,.page-break-before{page-break-before:always}.page-break-after{page-break-after:always}.no-print{display:none}a.no-reformat:after{content:''}abbr.no-reformat[title]:after,acronym.no-reformat[title]:after{content:''}.page__hero-caption{color:#000 !important;background:#fff !important;opacity:1}.page__hero-caption a{color:#000 !important}.masthead,.toc,.page__share,.page__related,.pagination,.ads,.page__footer,.page__comments-form,.author__avatar,.author__content,.author__urls-wrapper,.nav__list,.sidebar,.adsbygoogle{display:none !important;height:1px !important}}.theme-switch-wrapper{display:flex;align-items:center;justify-content:center;margin:20px}.theme-switch{display:inline-block;height:26px;position:relative;width:50px}.theme-switch input{display:none}.slider{background-color:#ccc;bottom:0;cursor:pointer;left:0;position:absolute;right:0;top:0;transition:.4s}.slider:before{background-color:#f3f3f3;bottom:4px;content:"";height:18px;left:4px;position:absolute;transition:.4s;width:18px}input:checked+.slider{background-color:#252a34}.slider.round{border-radius:26px}.slider.round:before{border-radius:50%}input:checked+.slider:before{left:calc(100% - 22px)}.wide_post article.page{float:left;width:100%}.sidebar__right{padding-left:5%}.layout--single{margin-left:10%;margin-right:10%} + +/*# sourceMappingURL=theme2.css.map */ \ No newline at end of file diff --git a/assets/css/theme2.css.map b/assets/css/theme2.css.map new file mode 100644 index 0000000000000..fb1b9f4ea26fc --- /dev/null +++ b/assets/css/theme2.css.map @@ -0,0 +1,124 @@ +{ + "version": 3, + "file": "theme2.css", + "sources": [ + "theme2.scss", + "_sass/minimal-mistakes/skins/_sunrise.scss", + "_sass/minimal-mistakes.scss", + "_sass/minimal-mistakes/_fonts.scss", + "_sass/minimal-mistakes/_settings.scss", + "_sass/minimal-mistakes/_variables.scss", + "_sass/minimal-mistakes/vendor/breakpoint/_breakpoint.scss", + "_sass/minimal-mistakes/vendor/breakpoint/_settings.scss", + "_sass/minimal-mistakes/vendor/breakpoint/_context.scss", + "_sass/minimal-mistakes/vendor/breakpoint/_helpers.scss", + "_sass/minimal-mistakes/vendor/breakpoint/_parsers.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/_query.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/_single.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/single/_default.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/_double.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/double/_default-pair.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/double/_double-string.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/double/_default.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/_triple.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/triple/_default.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/_resolution.scss", + "_sass/minimal-mistakes/vendor/breakpoint/parsers/resolution/_resolution.scss", + "_sass/minimal-mistakes/vendor/breakpoint/_no-query.scss", + "_sass/minimal-mistakes/vendor/breakpoint/_respond-to.scss", + "_sass/minimal-mistakes/vendor/breakpoint/_legacy-settings.scss", + "_sass/minimal-mistakes/vendor/magnific-popup/_magnific-popup.scss", + "_sass/minimal-mistakes/vendor/magnific-popup/_settings.scss", + "_sass/minimal-mistakes/vendor/susy/_susy.scss", + "_sass/minimal-mistakes/vendor/susy/_susy-prefix.scss", + "_sass/minimal-mistakes/vendor/susy/susy/_utilities.scss", + "_sass/minimal-mistakes/vendor/susy/susy/_su-validate.scss", + "_sass/minimal-mistakes/vendor/susy/susy/_su-math.scss", + "_sass/minimal-mistakes/vendor/susy/susy/_settings.scss", + "_sass/minimal-mistakes/vendor/susy/susy/_normalize.scss", + "_sass/minimal-mistakes/vendor/susy/susy/_parse.scss", + "_sass/minimal-mistakes/vendor/susy/susy/_syntax-helpers.scss", + "_sass/minimal-mistakes/vendor/susy/susy/_api.scss", + "_sass/minimal-mistakes/vendor/susy/susy/_unprefix.scss", + "_sass/minimal-mistakes/_mixins.scss", + "_sass/minimal-mistakes/_reset.scss", + "_sass/minimal-mistakes/_base.scss", + "_sass/minimal-mistakes/_forms.scss", + "_sass/minimal-mistakes/_tables.scss", + "_sass/minimal-mistakes/_animations.scss", + "_sass/minimal-mistakes/_buttons.scss", + "_sass/minimal-mistakes/_notices.scss", + "_sass/minimal-mistakes/_masthead.scss", + "_sass/minimal-mistakes/_navigation.scss", + "_sass/minimal-mistakes/_footer.scss", + "_sass/minimal-mistakes/_search.scss", + "_sass/minimal-mistakes/_syntax.scss", + "_sass/minimal-mistakes/_utilities.scss", + "_sass/minimal-mistakes/_page.scss", + "_sass/minimal-mistakes/_archive.scss", + "_sass/minimal-mistakes/_sidebar.scss", + "_sass/minimal-mistakes/_print.scss", + "_sass/minimal-mistakes/_toggle-button.scss" + ], + "sourcesContent": [ + "@charset \"utf-8\";\n\n@import \"minimal-mistakes/skins/sunrise\"; // skin\n@import \"minimal-mistakes\"; // main partials\n\n// AN Notes: https://github.com/NaanProphet/tripodvideoninja/commit/d9905c1f71ac57597b20073c95c50807e45f57a5\n/* hack to fill the left-hand-side when there is no author */\n .wide_post article.page {\n float: left;\n width: 100%;\n }\n\n /* push the TOC out to the right just a little*/\n .sidebar__right {\n \tpadding-left: 5%;\n }\n .layout--single {\n \tmargin-left: 10%;\n \tmargin-right: 10%;\n }\n", + "/* ==========================================================================\n Sunrise skin\n ========================================================================== */\n\n/* Colors */\n$dark-gray: #0e2431 !default;\n$background-color: #e8d5b7 !default;\n$text-color: #000 !default;\n$muted-text-color: $dark-gray !default;\n$primary-color: #fc3a52 !default;\n$border-color: mix(#000, $background-color, 20%) !default;\n$code-background-color: mix(#fff, $background-color, 20%) !default;\n$code-background-color-dark: mix(#000, $background-color, 10%) !default;\n$form-background-color: mix(#fff, $background-color, 15%) !default;\n$footer-background-color: #f9b248 !default;\n$link-color: mix(#000, $primary-color, 10%) !default;\n$link-color-hover: mix(#fff, $link-color, 25%) !default;\n$link-color-visited: mix(#000, $link-color, 25%) !default;\n$masthead-link-color: $text-color !default;\n$masthead-link-color-hover: mix(#000, $text-color, 20%) !default;\n$navicon-link-color-hover: mix(#000, $background-color, 30%) !default;\n\n/* notices */\n$notice-background-mix: 75% !default;\n\n/* sunrise syntax highlighting (base16) */\n$base00: #1d1f21 !default;\n$base01: #282a2e !default;\n$base02: #373b41 !default;\n$base03: #969896 !default;\n$base04: #b4b7b4 !default;\n$base05: #c5c8c6 !default;\n$base06: #e0e0e0 !default;\n$base07: #ffffff !default;\n$base08: #cc6666 !default;\n$base09: #de935f !default;\n$base0a: #f0c674 !default;\n$base0b: #b5bd68 !default;\n$base0c: #8abeb7 !default;\n$base0d: #81a2be !default;\n$base0e: #b294bb !default;\n$base0f: #a3685a !default;\n\n.author__urls.social-icons i,\n.author__urls.social-icons .svg-inline--fa,\n.page__footer-follow .social-icons i,\n.page__footer-follow .social-icons .svg-inline--fa {\n color: inherit;\n}\n", + "/*!\n * Minimal Mistakes Jekyll Theme 4.24.0 by Michael Rose\n * Copyright 2013-2020 Michael Rose - mademistakes.com | @mmistakes\n * Licensed under MIT (https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE)\n*/\n\n/* Tufte Features using jekyll-tufte*/\n//@import \"minimal-mistakes/tables\";\n@import \"minimal-mistakes/fonts\";\n@import \"minimal-mistakes/settings\";\n\n\n/* Variables */\n@import \"minimal-mistakes/variables\";\n\n/* Mixins and functions */\n@import \"minimal-mistakes/vendor/breakpoint/breakpoint\";\n@include breakpoint-set(\"to ems\", true);\n@import \"minimal-mistakes/vendor/magnific-popup/magnific-popup\"; // Magnific Popup\n@import \"minimal-mistakes/vendor/susy/susy\";\n@import \"minimal-mistakes/mixins\";\n\n/* Core CSS */\n@import \"minimal-mistakes/reset\";\n@import \"minimal-mistakes/base\";\n@import \"minimal-mistakes/forms\";\n@import \"minimal-mistakes/tables\";\n@import \"minimal-mistakes/animations\";\n\n/* Components */\n@import \"minimal-mistakes/buttons\";\n@import \"minimal-mistakes/notices\";\n@import \"minimal-mistakes/masthead\";\n@import \"minimal-mistakes/navigation\";\n@import \"minimal-mistakes/footer\";\n@import \"minimal-mistakes/search\";\n@import \"minimal-mistakes/syntax\";\n\n/* Utility classes */\n@import \"minimal-mistakes/utilities\";\n\n/* Layout specific */\n@import \"minimal-mistakes/page\";\n@import \"minimal-mistakes/archive\";\n@import \"minimal-mistakes/sidebar\";\n@import \"minimal-mistakes/print\";\n\n@import \"minimal-mistakes/toggle-button\"\n", + "// Font imports file. If you don't want these fonts, comment out these and add your own into the fonts directory \n// and point the src attribute to the file.\n// \n\n@charset \"UTF-8\";\n\n@font-face {\n font-family: ETbook;\n src: url(\"../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.eot\");\n src: url(\"../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.woff\") format(\"woff\"), url(\"../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.ttf\") format(\"truetype\"), url(\"../fonts/et-book/et-book-roman-line-figures/et-book-roman-line-figures.svg#etbemboromanosf\") format(\"svg\");\n font-weight: normal;\n font-style: normal\n}\n\n@font-face {\n font-family: ETbook;\n src: url(\"../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.eot\");\n src: url(\"../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.woff\") format(\"woff\"), url(\"../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.ttf\") format(\"truetype\"), url(\"../fonts/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.svg#etbemboromanosf\") format(\"svg\");\n font-weight: normal;\n font-style: italic\n}\n\n@font-face {\n font-family: ETbook;\n src: url(\"../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.eot\");\n src: url(\"../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.woff\") format(\"woff\"), url(\"../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.ttf\") format(\"truetype\"), url(\"../fonts/et-book/et-book-bold-line-figures/et-book-bold-line-figures.svg#etbemboromanosf\") format(\"svg\");\n font-weight: bold;\n font-style: normal\n}\n\n@font-face {\n font-family: ETbookRomanOldStyle;\n src: url(\"../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.eot\");\n src: url(\"../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.woff\") format(\"woff\"), url(\"../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.ttf\") format(\"truetype\"), url(\"../fonts/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.svg#etbemboromanosf\") format(\"svg\");\n font-weight: normal;\n font-style: normal;\n}", + "/* This file contains all the constants for colors and font styles */\n\n$body-font: ETBembo, \"Chronicle Text G2\", Palatino, \"Palatino Linotype\", \"Palatino LT STD\", \"Book Antiqua\", Georgia, serif;\n// Note that Gill Sans is the top of the stack and corresponds to what is used in Tufte's books\n// However, it is not a free font, so if it is not present on the computer that is viewing the webpage\n// The free Google 'Lato' font is used instead. It is similar.\n$sans-font: \"Gill Sans\", \"Gill Sans MT\", \"Gotham Narrow\", \"Lato\", Calibri, sans-serif;\n$code-font: Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n$url-font: \"Lucida Console\", \"Lucida Sans Typewriter\", Monaco, \"Bitstream Vera Sans Mono\", monospace;\n//$text-color: #111;\n//$bg-color: #fffff8;\n$contrast-color: #f97600;//#a00000;\n//$border-color: #333333;\n//$link-style: underline; // choices are 'color' or 'underline'. Color option styles links with $contrast-color set above\n\n\n\n", + "/* ==========================================================================\n Variables\n ========================================================================== */\n\n/*\n Typography\n ========================================================================== */\n\n$doc-font-size: 16 !default;\n\n/* paragraph indention */\n$paragraph-indent: false !default; // true, false (default)\n$indent-var: 1.3em !default;\n\n/* system typefaces */\n$serif: Georgia, Times, serif !default;\n$sans-serif: -apple-system, BlinkMacSystemFont, \"Roboto\", \"Segoe UI\",\n \"Helvetica Neue\", \"Lucida Grande\", Arial, sans-serif !default;\n$monospace: Monaco, Consolas, \"Lucida Console\", monospace !default;\n\n/* sans serif typefaces */\n$sans-serif-narrow: $sans-serif !default;\n$helvetica: Helvetica, \"Helvetica Neue\", Arial, sans-serif !default;\n\n/* serif typefaces */\n$georgia: Georgia, serif !default;\n$times: Times, serif !default;\n$bodoni: \"Bodoni MT\", serif !default;\n$calisto: \"Calisto MT\", serif !default;\n$garamond: Garamond, serif !default;\n\n$global-font-family: $sans-serif !default;\n$header-font-family: $sans-serif !default;\n$caption-font-family: $serif !default;\n\n/* type scale */\n$type-size-1: 2.441em !default; // ~39.056px\n$type-size-2: 1.953em !default; // ~31.248px\n$type-size-3: 1.563em !default; // ~25.008px\n$type-size-4: 1.25em !default; // ~20px\n$type-size-5: 1em !default; // ~16px\n$type-size-6: 0.75em !default; // ~12px\n$type-size-7: 0.6875em !default; // ~11px\n$type-size-8: 0.625em !default; // ~10px\n\n/* headline scale */\n$h-size-1: 1.563em !default; // ~25.008px\n$h-size-2: 1.25em !default; // ~20px\n$h-size-3: 1.125em !default; // ~18px\n$h-size-4: 1.0625em !default; // ~17px\n$h-size-5: 1.03125em !default; // ~16.5px\n$h-size-6: 1em !default; // ~16px\n\n/*\n Colors\n ========================================================================== */\n\n$gray: #7a8288 !default;\n$dark-gray: mix(#000, $gray, 50%) !default;\n$darker-gray: mix(#000, $gray, 60%) !default;\n$light-gray: mix(#fff, $gray, 50%) !default;\n$lighter-gray: mix(#fff, $gray, 90%) !default;\n\n$background-color: #fff !default;\n$code-background-color: #fafafa !default;\n$code-background-color-dark: $light-gray !default;\n$text-color: $dark-gray !default;\n$muted-text-color: mix(#fff, $text-color, 20%) !default;\n$border-color: $lighter-gray !default;\n$form-background-color: $lighter-gray !default;\n$footer-background-color: $lighter-gray !default;\n\n$primary-color: #6f777d !default;\n$success-color: #3fa63f !default;\n$warning-color: #d67f05 !default;\n$danger-color: #ee5f5b !default;\n$info-color: #3b9cba !default;\n$focus-color: $primary-color !default;\n$active-color: mix(#fff, $primary-color, 80%) !default;\n\n/* YIQ color contrast */\n$yiq-contrasted-dark-default: $dark-gray !default;\n$yiq-contrasted-light-default: #fff !default;\n$yiq-contrasted-threshold: 175 !default;\n$yiq-debug: false !default;\n\n/* brands */\n$behance-color: #1769ff !default;\n$bitbucket-color: #205081 !default;\n$dribbble-color: #ea4c89 !default;\n$facebook-color: #3b5998 !default;\n$flickr-color: #ff0084 !default;\n$foursquare-color: #0072b1 !default;\n$github-color: #171516 !default;\n$gitlab-color: #e24329 !default;\n$instagram-color: #517fa4 !default;\n$keybase-color: #ef7639 !default;\n$lastfm-color: #d51007 !default;\n$linkedin-color: #007bb6 !default;\n$mastodon-color: #2b90d9 !default;\n$pinterest-color: #cb2027 !default;\n$reddit-color: #ff4500 !default;\n$rss-color: #fa9b39 !default;\n$soundcloud-color: #ff3300 !default;\n$stackoverflow-color: #fe7a15 !default;\n$tumblr-color: #32506d !default;\n$twitter-color: #55acee !default;\n$vimeo-color: #1ab7ea !default;\n$vine-color: #00bf8f !default;\n$youtube-color: #bb0000 !default;\n$xing-color: #006567 !default;\n\n/* links */\n$link-color: mix(#000, $info-color, 20%) !default;\n$link-color-hover: mix(#000, $link-color, 25%) !default;\n$link-color-visited: mix(#fff, $link-color, 15%) !default;\n$masthead-link-color: $primary-color !default;\n$masthead-link-color-hover: mix(#000, $primary-color, 25%) !default;\n$navicon-link-color-hover: mix(#fff, $primary-color, 75%) !default;\n\n/* notices */\n$notice-background-mix: 80% !default;\n$code-notice-background-mix: 90% !default;\n\n/* syntax highlighting (base16) */\n$base00: #263238 !default;\n$base01: #2e3c43 !default;\n$base02: #314549 !default;\n$base03: #546e7a !default;\n$base04: #b2ccd6 !default;\n$base05: #eeffff !default;\n$base06: #eeffff !default;\n$base07: #ffffff !default;\n$base08: #f07178 !default;\n$base09: #f78c6c !default;\n$base0a: #ffcb6b !default;\n$base0b: #c3e88d !default;\n$base0c: #89ddff !default;\n$base0d: #82aaff !default;\n$base0e: #c792ea !default;\n$base0f: #ff5370 !default;\n\n/*\n Breakpoints\n ========================================================================== */\n\n$small: 600px !default;\n$medium: 768px !default;\n$medium-wide: 900px !default;\n$large: 1024px !default;\n$x-large: 1280px !default;\n$max-width: $x-large !default;\n\n/*\n Grid\n ========================================================================== */\n\n$right-sidebar-width-narrow: 200px !default;\n$right-sidebar-width: 300px !default;\n$right-sidebar-width-wide: 400px !default;\n\n/*\n Other\n ========================================================================== */\n\n$border-radius: 4px !default;\n$box-shadow: 0 1px 1px rgba(0, 0, 0, 0.125) !default;\n$nav-height: 2em !default;\n$nav-toggle-height: 2rem !default;\n$navicon-width: 1.5rem !default;\n$navicon-height: 0.25rem !default;\n$global-transition: all 0.2s ease-in-out !default;\n$intro-transition: intro 0.3s both !default;\n", + "//////////////////////////////\n// Default Variables\n//////////////////////////////\n$Breakpoint-Settings: (\n 'default media': all,\n 'default feature': min-width,\n 'default pair': width,\n\n 'force all media type': false,\n 'to ems': false,\n 'transform resolutions': true,\n\n 'no queries': false,\n 'no query fallbacks': false,\n\n 'base font size': 16px,\n\n 'legacy syntax': false\n);\n\n$breakpoint: () !default;\n\n//////////////////////////////\n// Imports\n//////////////////////////////\n@import \"settings\";\n@import \"context\";\n@import \"helpers\";\n@import \"parsers\";\n@import \"no-query\";\n\n@import \"respond-to\";\n\n@import \"legacy-settings\";\n\n//////////////////////////////\n// Breakpoint Mixin\n//////////////////////////////\n\n@mixin breakpoint($query, $no-query: false) {\n @include legacy-settings-warning;\n\n // Reset contexts\n @include private-breakpoint-reset-contexts();\n\n $breakpoint: breakpoint($query, false);\n\n $query-string: map-get($breakpoint, 'query');\n $query-fallback: map-get($breakpoint, 'fallback');\n\n $private-breakpoint-context-holder: map-get($breakpoint, 'context holder') !global;\n $private-breakpoint-query-count: map-get($breakpoint, 'query count') !global;\n\n // Allow for an as-needed override or usage of no query fallback.\n @if $no-query != false {\n $query-fallback: $no-query;\n }\n\n @if $query-fallback != false {\n $context-setter: private-breakpoint-set-context('no-query', $query-fallback);\n }\n\n // Print Out Query String\n @if not breakpoint-get('no queries') {\n @media #{$query-string} {\n @content;\n }\n }\n\n @if breakpoint-get('no query fallbacks') != false or breakpoint-get('no queries') == true {\n\n $type: type-of(breakpoint-get('no query fallbacks'));\n $print: false;\n\n @if ($type == 'bool') {\n $print: true;\n }\n @else if ($type == 'string') {\n @if $query-fallback == breakpoint-get('no query fallbacks') {\n $print: true;\n }\n }\n @else if ($type == 'list') {\n @each $wrapper in breakpoint-get('no query fallbacks') {\n @if $query-fallback == $wrapper {\n $print: true;\n }\n }\n }\n\n // Write Fallback\n @if ($query-fallback != false) and ($print == true) {\n $type-fallback: type-of($query-fallback);\n\n @if ($type-fallback != 'bool') {\n #{$query-fallback} & {\n @content;\n }\n }\n @else {\n @content;\n }\n }\n }\n\n @include private-breakpoint-reset-contexts();\n}\n\n\n@mixin mq($query, $no-query: false) {\n @include breakpoint($query, $no-query) {\n @content;\n }\n}\n", + "//////////////////////////////\n// Has Setting\n//////////////////////////////\n@function breakpoint-has($setting) {\n @if map-has-key($breakpoint, $setting) {\n @return true;\n }\n @else {\n @return false;\n }\n}\n\n//////////////////////////////\n// Get Settings\n//////////////////////////////\n@function breakpoint-get($setting) {\n @if breakpoint-has($setting) {\n @return map-get($breakpoint, $setting);\n }\n @else {\n @return map-get($Breakpoint-Settings, $setting);\n }\n}\n\n//////////////////////////////\n// Set Settings\n//////////////////////////////\n@function breakpoint-set($setting, $value) {\n @if (str-index($setting, '-') or str-index($setting, '_')) and str-index($setting, ' ') == null {\n @warn \"Words in Breakpoint settings should be separated by spaces, not dashes or underscores. Please replace dashes and underscores between words with spaces. Settings will not work as expected until changed.\";\n }\n $breakpoint: map-merge($breakpoint, ($setting: $value)) !global;\n @return true;\n}\n\n@mixin breakpoint-change($setting, $value) {\n $breakpoint-change: breakpoint-set($setting, $value);\n}\n\n@mixin breakpoint-set($setting, $value) {\n @include breakpoint-change($setting, $value);\n}\n\n@mixin bkpt-change($setting, $value) {\n @include breakpoint-change($setting, $value);\n}\n@mixin bkpt-set($setting, $value) {\n @include breakpoint-change($setting, $value);\n}\n\n//////////////////////////////\n// Remove Setting\n//////////////////////////////\n@function breakpoint-reset($settings...) {\n @if length($settings) == 1 {\n $settings: nth($settings, 1);\n }\n\n @each $setting in $settings {\n $breakpoint: map-remove($breakpoint, $setting) !global;\n }\n @return true;\n}\n\n@mixin breakpoint-reset($settings...) {\n $breakpoint-reset: breakpoint-reset($settings);\n}\n\n@mixin bkpt-reset($settings...) {\n $breakpoint-reset: breakpoint-reset($settings);\n}", + "//////////////////////////////\n// Private Breakpoint Variables\n//////////////////////////////\n$private-breakpoint-context-holder: ();\n$private-breakpoint-query-count: 0 !default;\n\n//////////////////////////////\n// Breakpoint Has Context\n// Returns whether or not you are inside a Breakpoint query\n//////////////////////////////\n@function breakpoint-has-context() {\n @if length($private-breakpoint-query-count) {\n @return true;\n }\n @else {\n @return false;\n }\n}\n\n//////////////////////////////\n// Breakpoint Get Context\n// $feature: Input feature to get it's current MQ context. Returns false if no context\n//////////////////////////////\n@function breakpoint-get-context($feature) {\n @if map-has-key($private-breakpoint-context-holder, $feature) {\n $get: map-get($private-breakpoint-context-holder, $feature);\n // Special handling of no-query from get side so /false/ prepends aren't returned\n @if $feature == 'no-query' {\n @if type-of($get) == 'list' and length($get) > 1 and nth($get, 1) == false {\n $get: nth($get, length($get));\n }\n }\n @return $get;\n }\n @else {\n @if breakpoint-has-context() and $feature == 'media' {\n @return breakpoint-get('default media');\n }\n @else {\n @return false;\n }\n }\n}\n\n//////////////////////////////\n// Private function to set context\n//////////////////////////////\n@function private-breakpoint-set-context($feature, $value) {\n @if $value == 'monochrome' {\n $feature: 'monochrome';\n }\n\n $current: map-get($private-breakpoint-context-holder, $feature);\n @if $current and length($current) == $private-breakpoint-query-count {\n @warn \"You have already queried against `#{$feature}`. Unexpected things may happen if you query against the same feature more than once in the same `and` query. Breakpoint is overwriting the current context with `#{$value}`\";\n }\n\n @if not map-has-key($private-breakpoint-context-holder, $feature) {\n $v-holder: ();\n @for $i from 1 to $private-breakpoint-query-count {\n @if $feature == 'media' {\n $v-holder: append($v-holder, breakpoint-get('default media'));\n }\n @else {\n $v-holder: append($v-holder, false);\n }\n }\n $v-holder: append($v-holder, $value);\n $private-breakpoint-context-holder: map-merge($private-breakpoint-context-holder, ($feature: $v-holder)) !global;\n }\n @else {\n $v-holder: map-get($private-breakpoint-context-holder, $feature);\n $length: length($v-holder);\n @for $i from $length to $private-breakpoint-query-count - 1 {\n @if $feature == 'media' {\n $v-holder: append($v-holder, breakpoint-get('default media'));\n }\n @else {\n $v-holder: append($v-holder, false);\n }\n }\n $v-holder: append($v-holder, $value);\n $private-breakpoint-context-holder: map-merge($private-breakpoint-context-holder, ($feature: $v-holder)) !global;\n }\n\n @return true;\n}\n\n//////////////////////////////\n// Private function to reset context\n//////////////////////////////\n@mixin private-breakpoint-reset-contexts {\n $private-breakpoint-context-holder: () !global;\n $private-breakpoint-query-count: 0 !global;\n}", + "//////////////////////////////\n// Converts the input value to Base EMs\n//////////////////////////////\n@function breakpoint-to-base-em($value) {\n $value-unit: unit($value);\n\n // Will convert relative EMs into root EMs.\n @if breakpoint-get('base font size') and type-of(breakpoint-get('base font size')) == 'number' and $value-unit == 'em' {\n $base-unit: unit(breakpoint-get('base font size'));\n\n @if $base-unit == 'px' or $base-unit == '%' or $base-unit == 'em' or $base-unit == 'pt' {\n @return base-conversion($value) / base-conversion(breakpoint-get('base font size')) * 1em;\n }\n @else {\n @warn '#{breakpoint-get(\\'base font size\\')} is not set in valid units for font size!';\n @return false;\n }\n }\n @else {\n @return base-conversion($value);\n }\n}\n\n@function base-conversion($value) {\n $unit: unit($value);\n\n @if $unit == 'px' {\n @return $value / 16px * 1em;\n }\n @else if $unit == '%' {\n @return $value / 100% * 1em;\n }\n @else if $unit == 'em' {\n @return $value;\n }\n @else if $unit == 'pt' {\n @return $value / 12pt * 1em;\n }\n @else {\n @return $value;\n// @warn 'Everything is terrible! What have you done?!';\n }\n}\n\n//////////////////////////////\n// Returns whether the feature can have a min/max pair\n//////////////////////////////\n$breakpoint-min-max-features: 'color',\n 'color-index',\n 'aspect-ratio',\n 'device-aspect-ratio',\n 'device-height',\n 'device-width',\n 'height',\n 'monochrome',\n 'resolution',\n 'width';\n\n@function breakpoint-min-max($feature) {\n @each $item in $breakpoint-min-max-features {\n @if $feature == $item {\n @return true;\n }\n }\n @return false;\n}\n\n//////////////////////////////\n// Returns whether the feature can have a string value\n//////////////////////////////\n$breakpoint-string-features: 'orientation',\n 'scan',\n 'color',\n 'aspect-ratio',\n 'device-aspect-ratio',\n 'pointer',\n 'luminosity';\n\n@function breakpoint-string-value($feature) {\n @each $item in $breakpoint-string-features {\n @if breakpoint-min-max($item) {\n @if $feature == 'min-#{$item}' or $feature == 'max-#{$item}' {\n @return true;\n }\n }\n @else if $feature == $item {\n @return true;\n }\n }\n @return false;\n}\n\n//////////////////////////////\n// Returns whether the feature is a media type\n//////////////////////////////\n$breakpoint-media-types: 'all',\n 'braille',\n 'embossed',\n 'handheld',\n 'print',\n 'projection',\n 'screen',\n 'speech',\n 'tty',\n 'tv';\n\n@function breakpoint-is-media($feature) {\n @each $media in $breakpoint-media-types {\n @if ($feature == $media) or ($feature == 'not #{$media}') or ($feature == 'only #{$media}') {\n @return true;\n }\n }\n\n @return false;\n}\n\n//////////////////////////////\n// Returns whether the feature can stand alone\n//////////////////////////////\n$breakpoint-single-string-features: 'color',\n 'color-index',\n 'grid',\n 'monochrome';\n\n@function breakpoint-single-string($feature) {\n @each $item in $breakpoint-single-string-features {\n @if $feature == $item {\n @return true;\n }\n }\n @return false;\n}\n\n//////////////////////////////\n// Returns whether the feature\n//////////////////////////////\n@function breakpoint-is-resolution($feature) {\n $resolutions: 'device-pixel-ratio', 'dpr';\n\n @if breakpoint-get('transform resolutions') {\n $resolutions: append($resolutions, 'resolution');\n }\n\n @each $reso in $resolutions {\n @if index($feature, $reso) or index($feature, 'min-#{$reso}') or index($feature, 'max-#{$reso}') {\n @return true;\n }\n }\n\n @return false;\n}\n", + "//////////////////////////////\n// Import Parser Pieces\n//////////////////////////////\n@import \"parsers/query\";\n@import \"parsers/single\";\n@import \"parsers/double\";\n@import \"parsers/triple\";\n@import \"parsers/resolution\";\n\n$Memo-Exists: function-exists(memo-get) and function-exists(memo-set);\n\n//////////////////////////////\n// Breakpoint Function\n//////////////////////////////\n@function breakpoint($query, $contexts...) {\n $run: true;\n $return: ();\n\n // Grab the Memo Output if Memoization can be a thing\n @if $Memo-Exists {\n $return: memo-get(breakpoint, breakpoint $query $contexts);\n\n @if $return != null {\n $run: false;\n }\n }\n\n @if not $Memo-Exists or $run {\n // Internal Variables\n $query-string: '';\n $query-fallback: false;\n $return: ();\n\n // Reserve Global Private Breakpoint Context\n $holder-context: $private-breakpoint-context-holder;\n $holder-query-count: $private-breakpoint-query-count;\n\n // Reset Global Private Breakpoint Context\n $private-breakpoint-context-holder: () !global;\n $private-breakpoint-query-count: 0 !global;\n\n\n // Test to see if it's a comma-separated list\n $or-list: if(list-separator($query) == 'comma', true, false);\n\n\n @if ($or-list == false and breakpoint-get('legacy syntax') == false) {\n $query-string: breakpoint-parse($query);\n }\n @else {\n $length: length($query);\n\n $last: nth($query, $length);\n $query-fallback: breakpoint-no-query($last);\n\n @if ($query-fallback != false) {\n $length: $length - 1;\n }\n\n @if (breakpoint-get('legacy syntax') == true) {\n $mq: ();\n\n @for $i from 1 through $length {\n $mq: append($mq, nth($query, $i), comma);\n }\n\n $query-string: breakpoint-parse($mq);\n }\n @else {\n $query-string: '';\n @for $i from 1 through $length {\n $query-string: $query-string + if($i == 1, '', ', ') + breakpoint-parse(nth($query, $i));\n }\n }\n }\n\n $return: ('query': $query-string,\n 'fallback': $query-fallback,\n 'context holder': $private-breakpoint-context-holder,\n 'query count': $private-breakpoint-query-count\n );\n @if length($contexts) > 0 and nth($contexts, 1) != false {\n @if $query-fallback != false {\n $context-setter: private-breakpoint-set-context('no-query', $query-fallback);\n }\n $context-map: ();\n @each $context in $contexts {\n $context-map: map-merge($context-map, ($context: breakpoint-get-context($context)));\n }\n $return: map-merge($return, (context: $context-map));\n }\n\n // Reset Global Private Breakpoint Context\n $private-breakpoint-context-holder: () !global;\n $private-breakpoint-query-count: 0 !global;\n\n @if $Memo-Exists {\n $holder: memo-set(breakpoint, breakpoint $query $contexts, $return);\n }\n }\n\n @return $return;\n}\n\n//////////////////////////////\n// General Breakpoint Parser\n//////////////////////////////\n@function breakpoint-parse($query) {\n // Increase number of 'and' queries\n $private-breakpoint-query-count: $private-breakpoint-query-count + 1 !global;\n\n // Set up Media Type\n $query-print: '';\n\n $force-all: ((breakpoint-get('force all media type') == true) and (breakpoint-get('default media') == 'all'));\n $empty-media: true;\n @if ($force-all == true) or (breakpoint-get('default media') != 'all') {\n // Force the print of the default media type if (force all is true and default media type is all) or (default media type is not all)\n $query-print: breakpoint-get('default media');\n $empty-media: false;\n }\n\n\n $query-resolution: false;\n\n $query-holder: breakpoint-parse-query($query);\n\n\n\n // Loop over each parsed out query and write it to $query-print\n $first: true;\n\n @each $feature in $query-holder {\n $length: length($feature);\n\n // Parse a single feature\n @if ($length == 1) {\n // Feature is currently a list, grab the actual value\n $feature: nth($feature, 1);\n\n // Media Type must by convention be the first item, so it's safe to flat override $query-print, which right now should only be the default media type\n @if (breakpoint-is-media($feature)) {\n @if ($force-all == true) or ($feature != 'all') {\n // Force the print of the default media type if (force all is true and default media type is all) or (default media type is not all)\n $query-print: $feature;\n $empty-media: false;\n\n // Set Context\n $context-setter: private-breakpoint-set-context(media, $query-print);\n }\n }\n @else {\n $parsed: breakpoint-parse-single($feature, $empty-media, $first);\n $query-print: '#{$query-print} #{$parsed}';\n $first: false;\n }\n }\n // Parse a double feature\n @else if ($length == 2) {\n @if (breakpoint-is-resolution($feature) != false) {\n $query-resolution: $feature;\n }\n @else {\n $parsed: null;\n // If it's a string/number pair,\n // we check to see if one is a single-string value,\n // then we parse it as a normal double\n $alpha: nth($feature, 1);\n $beta: nth($feature, 2);\n @if breakpoint-single-string($alpha) or breakpoint-single-string($beta) {\n $parsed: breakpoint-parse-single($alpha, $empty-media, $first);\n $query-print: '#{$query-print} #{$parsed}';\n $first: false;\n $parsed: breakpoint-parse-single($beta, $empty-media, $first);\n $query-print: '#{$query-print} #{$parsed}';\n }\n @else {\n $parsed: breakpoint-parse-double($feature, $empty-media, $first);\n $query-print: '#{$query-print} #{$parsed}';\n $first: false;\n }\n }\n }\n // Parse a triple feature\n @else if ($length == 3) {\n $parsed: breakpoint-parse-triple($feature, $empty-media, $first);\n $query-print: '#{$query-print} #{$parsed}';\n $first: false;\n }\n\n }\n\n @if ($query-resolution != false) {\n $query-print: breakpoint-build-resolution($query-print, $query-resolution, $empty-media, $first);\n }\n\n // Loop through each feature that's been detected so far and append 'false' to the the value list to increment their counters\n @each $f, $v in $private-breakpoint-context-holder {\n $v-holder: $v;\n $length: length($v-holder);\n @if length($v-holder) < $private-breakpoint-query-count {\n @for $i from $length to $private-breakpoint-query-count {\n @if $f == 'media' {\n $v-holder: append($v-holder, breakpoint-get('default media'));\n }\n @else {\n $v-holder: append($v-holder, false);\n }\n }\n }\n $private-breakpoint-context-holder: map-merge($private-breakpoint-context-holder, ($f: $v-holder)) !global;\n }\n\n @return $query-print;\n}\n", + "@function breakpoint-parse-query($query) {\n // Parse features out of an individual query\n $feature-holder: ();\n $query-holder: ();\n $length: length($query);\n\n @if $length == 2 {\n // If we've got a string/number, number/string, check to see if it's a valid string/number pair or two singles\n @if (type-of(nth($query, 1)) == 'string' and type-of(nth($query, 2)) == 'number') or (type-of(nth($query, 1)) == 'number' and type-of(nth($query, 2)) == 'string') {\n\n $number: '';\n $value: '';\n\n @if type-of(nth($query, 1)) == 'string' {\n $number: nth($query, 2);\n $value: nth($query, 1);\n }\n @else {\n $number: nth($query, 1);\n $value: nth($query, 2);\n }\n\n // If the string value can be a single value, check to see if the number passed in is a valid input for said single value. Fortunately, all current single-value options only accept unitless numbers, so this check is easy.\n @if breakpoint-single-string($value) {\n @if unitless($number) {\n $feature-holder: append($value, $number, space);\n $query-holder: append($query-holder, $feature-holder, comma);\n @return $query-holder;\n }\n }\n // If the string is a media type, split the query\n @if breakpoint-is-media($value) {\n $query-holder: append($query-holder, nth($query, 1));\n $query-holder: append($query-holder, nth($query, 2));\n @return $query-holder;\n }\n // If it's not a single feature, we're just going to assume it's a proper string/value pair, and roll with it.\n @else {\n $feature-holder: append($value, $number, space);\n $query-holder: append($query-holder, $feature-holder, comma);\n @return $query-holder;\n }\n\n }\n // If they're both numbers, we assume it's a double and roll with that\n @else if (type-of(nth($query, 1)) == 'number' and type-of(nth($query, 2)) == 'number') {\n $feature-holder: append(nth($query, 1), nth($query, 2), space);\n $query-holder: append($query-holder, $feature-holder, comma);\n @return $query-holder;\n }\n // If they're both strings and neither are singles, we roll with that.\n @else if (type-of(nth($query, 1)) == 'string' and type-of(nth($query, 2)) == 'string') {\n @if not breakpoint-single-string(nth($query, 1)) and not breakpoint-single-string(nth($query, 2)) {\n $feature-holder: append(nth($query, 1), nth($query, 2), space);\n $query-holder: append($query-holder, $feature-holder, comma);\n @return $query-holder;\n }\n }\n }\n @else if $length == 3 {\n // If we've got three items and none is a list, we check to see\n @if type-of(nth($query, 1)) != 'list' and type-of(nth($query, 2)) != 'list' and type-of(nth($query, 3)) != 'list' {\n // If none of the items are single string values and none of the values are media values, we're good.\n @if (not breakpoint-single-string(nth($query, 1)) and not breakpoint-single-string(nth($query, 2)) and not breakpoint-single-string(nth($query, 3))) and ((not breakpoint-is-media(nth($query, 1)) and not breakpoint-is-media(nth($query, 2)) and not breakpoint-is-media(nth($query, 3)))) {\n $feature-holder: append(nth($query, 1), nth($query, 2), space);\n $feature-holder: append($feature-holder, nth($query, 3), space);\n $query-holder: append($query-holder, $feature-holder, comma);\n @return $query-holder;\n }\n // let's check to see if the first item is a media type\n @else if breakpoint-is-media(nth($query, 1)) {\n $query-holder: append($query-holder, nth($query, 1));\n $feature-holder: append(nth($query, 2), nth($query, 3), space);\n $query-holder: append($query-holder, $feature-holder);\n @return $query-holder;\n }\n }\n }\n\n // If it's a single item, or if it's not a special case double or triple, we can simply return the query.\n @return $query;\n}\n", + "//////////////////////////////\n// Import Pieces\n//////////////////////////////\n@import \"single/default\";\n\n@function breakpoint-parse-single($feature, $empty-media, $first) {\n $parsed: '';\n $leader: '';\n // If we're forcing\n @if not ($empty-media) or not ($first) {\n $leader: 'and ';\n }\n\n // If it's a single feature that can stand alone, we let it\n @if (breakpoint-single-string($feature)) {\n $parsed: $feature;\n // Set Context\n $context-setter: private-breakpoint-set-context($feature, $feature);\n }\n // If it's not a stand alone feature, we pass it off to the default handler.\n @else {\n $parsed: breakpoint-parse-default($feature);\n }\n\n @return $leader + '(' + $parsed + ')';\n}\n", + "@function breakpoint-parse-default($feature) {\n $default: breakpoint-get('default feature');\n\n // Set Context\n $context-setter: private-breakpoint-set-context($default, $feature);\n\n @if (breakpoint-get('to ems') == true) and (type-of($feature) == 'number') {\n @return '#{$default}: #{breakpoint-to-base-em($feature)}';\n }\n @else {\n @return '#{$default}: #{$feature}';\n }\n}\n", + "//////////////////////////////\n// Import Pieces\n//////////////////////////////\n@import \"double/default-pair\";\n@import \"double/double-string\";\n@import \"double/default\";\n\n@function breakpoint-parse-double($feature, $empty-media, $first) {\n $parsed: '';\n $leader: '';\n // If we're forcing\n @if not ($empty-media) or not ($first) {\n $leader: 'and ';\n }\n\n $first: nth($feature, 1);\n $second: nth($feature, 2);\n\n // If we've got two numbers, we know we need to use the default pair because there are no media queries that has a media feature that is a number\n @if type-of($first) == 'number' and type-of($second) == 'number' {\n $parsed: breakpoint-parse-default-pair($first, $second);\n }\n // If they are both strings, we send it through the string parser\n @else if type-of($first) == 'string' and type-of($second) == 'string' {\n $parsed: breakpoint-parse-double-string($first, $second);\n }\n // If it's a string/number pair, we parse it as a normal double\n @else {\n $parsed: breakpoint-parse-double-default($first, $second);\n }\n\n @return $leader + $parsed;\n}\n", + "@function breakpoint-parse-default-pair($first, $second) {\n $default: breakpoint-get('default pair');\n $min: '';\n $max: '';\n\n // Sort into min and max\n $min: min($first, $second);\n $max: max($first, $second);\n\n // Set Context\n $context-setter: private-breakpoint-set-context(min-#{$default}, $min);\n $context-setter: private-breakpoint-set-context(max-#{$default}, $max);\n\n // Make them EMs if need be\n @if (breakpoint-get('to ems') == true) {\n $min: breakpoint-to-base-em($min);\n $max: breakpoint-to-base-em($max);\n }\n\n @return '(min-#{$default}: #{$min}) and (max-#{$default}: #{$max})';\n}\n", + "@function breakpoint-parse-double-string($first, $second) {\n $feature: '';\n $value: '';\n\n // Test to see which is the feature and which is the value\n @if (breakpoint-string-value($first) == true) {\n $feature: $first;\n $value: $second;\n }\n @else if (breakpoint-string-value($second) == true) {\n $feature: $second;\n $value: $first;\n }\n @else {\n @warn \"Neither #{$first} nor #{$second} is a valid media query name.\";\n }\n\n // Set Context\n $context-setter: private-breakpoint-set-context($feature, $value);\n\n @return '(#{$feature}: #{$value})';\n}", + "@function breakpoint-parse-double-default($first, $second) {\n $feature: '';\n $value: '';\n\n @if type-of($first) == 'string' {\n $feature: $first;\n $value: $second;\n }\n @else {\n $feature: $second;\n $value: $first;\n }\n\n // Set Context\n $context-setter: private-breakpoint-set-context($feature, $value);\n\n @if (breakpoint-get('to ems') == true) {\n $value: breakpoint-to-base-em($value);\n }\n\n @return '(#{$feature}: #{$value})'\n}\n", + "//////////////////////////////\n// Import Pieces\n//////////////////////////////\n@import \"triple/default\";\n\n@function breakpoint-parse-triple($feature, $empty-media, $first) {\n $parsed: '';\n $leader: '';\n\n // If we're forcing\n @if not ($empty-media) or not ($first) {\n $leader: 'and ';\n }\n\n // separate the string features from the value numbers\n $string: null;\n $numbers: null;\n @each $val in $feature {\n @if type-of($val) == string {\n $string: $val;\n }\n @else {\n @if type-of($numbers) == 'null' {\n $numbers: $val;\n }\n @else {\n $numbers: append($numbers, $val);\n }\n }\n }\n\n $parsed: breakpoint-parse-triple-default($string, nth($numbers, 1), nth($numbers, 2));\n\n @return $leader + $parsed;\n\n}\n", + "@function breakpoint-parse-triple-default($feature, $first, $second) {\n\n // Sort into min and max\n $min: min($first, $second);\n $max: max($first, $second);\n\n // Set Context\n $context-setter: private-breakpoint-set-context(min-#{$feature}, $min);\n $context-setter: private-breakpoint-set-context(max-#{$feature}, $max);\n\n // Make them EMs if need be\n @if (breakpoint-get('to ems') == true) {\n $min: breakpoint-to-base-em($min);\n $max: breakpoint-to-base-em($max);\n }\n\n @return '(min-#{$feature}: #{$min}) and (max-#{$feature}: #{$max})';\n}\n", + "@import \"resolution/resolution\";\n\n@function breakpoint-build-resolution($query-print, $query-resolution, $empty-media, $first) {\n $leader: '';\n // If we're forcing\n @if not ($empty-media) or not ($first) {\n $leader: 'and ';\n }\n\n @if breakpoint-get('transform resolutions') and $query-resolution {\n $resolutions: breakpoint-make-resolutions($query-resolution);\n $length: length($resolutions);\n $query-holder: '';\n\n @for $i from 1 through $length {\n $query: '#{$query-print} #{$leader}#{nth($resolutions, $i)}';\n @if $i == 1 {\n $query-holder: $query;\n }\n @else {\n $query-holder: '#{$query-holder}, #{$query}';\n }\n }\n\n @return $query-holder;\n }\n @else {\n // Return with attached resolution\n @return $query-print;\n }\n}\n", + "@function breakpoint-make-resolutions($resolution) {\n $length: length($resolution);\n\n $output: ();\n\n @if $length == 2 {\n $feature: '';\n $value: '';\n\n // Find which is number\n @if type-of(nth($resolution, 1)) == 'number' {\n $value: nth($resolution, 1);\n }\n @else {\n $value: nth($resolution, 2);\n }\n\n // Determine min/max/standard\n @if index($resolution, 'min-resolution') {\n $feature: 'min-';\n }\n @else if index($resolution, 'max-resolution') {\n $feature: 'max-';\n }\n\n $standard: '(#{$feature}resolution: #{$value})';\n\n // If we're not dealing with dppx,\n @if unit($value) != 'dppx' {\n $base: 96dpi;\n @if unit($value) == 'dpcm' {\n $base: 243.84dpcm;\n }\n // Write out feature tests\n $webkit: '';\n $moz: '';\n $webkit: '(-webkit-#{$feature}device-pixel-ratio: #{$value / $base})';\n $moz: '(#{$feature}-moz-device-pixel-ratio: #{$value / $base})';\n // Append to output\n $output: append($output, $standard, space);\n $output: append($output, $webkit, space);\n $output: append($output, $moz, space);\n }\n @else {\n $webkit: '';\n $moz: '';\n $webkit: '(-webkit-#{$feature}device-pixel-ratio: #{$value / 1dppx})';\n $moz: '(#{$feature}-moz-device-pixel-ratio: #{$value / 1dppx})';\n $fallback: '(#{$feature}resolution: #{$value / 1dppx * 96dpi})';\n // Append to output\n $output: append($output, $standard, space);\n $output: append($output, $webkit, space);\n $output: append($output, $moz, space);\n $output: append($output, $fallback, space);\n }\n\n }\n\n @return $output;\n}\n", + "@function breakpoint-no-query($query) {\n @if type-of($query) == 'list' {\n $keyword: nth($query, 1);\n\n @if type-of($keyword) == 'string' and ($keyword == 'no-query' or $keyword == 'no query' or $keyword == 'fallback') {\n @return nth($query, 2);\n }\n @else {\n @return false;\n }\n }\n @else {\n @return false;\n }\n}\n", + "////////////////////////\n// Default the Breakpoints variable\n////////////////////////\n$breakpoints: () !default;\n$BREAKPOINTS: () !default;\n\n////////////////////////\n// Respond-to API Mixin\n////////////////////////\n@mixin respond-to($context, $no-query: false) {\n @if length($breakpoints) > 0 and length($BREAKPOINTS) == 0 {\n @warn \"In order to avoid variable namespace collisions, we have updated the way to add breakpoints for respond-to. Please change all instances of `$breakpoints: add-breakpoint()` to `@include add-breakpoint()`. The `add-breakpoint()` function will be deprecated in a future release.\";\n $BREAKPOINTS: $breakpoints !global;\n $breakpoints: () !global;\n }\n\n @if type-of($BREAKPOINTS) != 'map' {\n // Just in case someone writes gibberish to the $breakpoints variable.\n @warn \"Your breakpoints aren't a map! `respond-to` expects a map. Please check the value of $BREAKPOINTS variable.\";\n @content;\n }\n @else if map-has-key($BREAKPOINTS, $context) {\n @include breakpoint(map-get($BREAKPOINTS, $context), $no-query) {\n @content;\n }\n }\n @else if not map-has-key($BREAKPOINTS, $context) {\n @warn \"`#{$context}` isn't a defined breakpoint! Please add it using `$breakpoints: add-breakpoint(`#{$context}`, $value);`\";\n @content;\n }\n @else {\n @warn \"You haven't created any breakpoints yet! Make some already! `@include add-breakpoint($name, $bkpt)`\";\n @content;\n }\n}\n\n//////////////////////////////\n// Add Breakpoint to Breakpoints\n// TODO: Remove function in next release\n//////////////////////////////\n@function add-breakpoint($name, $bkpt, $overwrite: false) {\n $output: ($name: $bkpt);\n\n @if length($breakpoints) == 0 {\n @return $output;\n }\n @else {\n @if map-has-key($breakpoints, $name) and $overwrite != true {\n @warn \"You already have a breakpoint named `#{$name}`, please choose another breakpoint name, or pass in `$overwrite: true` to overwrite the previous breakpoint.\";\n @return $breakpoints;\n }\n @else if not map-has-key($breakpoints, $name) or $overwrite == true {\n @return map-merge($breakpoints, $output);\n }\n }\n}\n\n@mixin add-breakpoint($name, $bkpt, $overwrite: false) {\n $output: ($name: $bkpt);\n\n @if length($BREAKPOINTS) == 0 {\n $BREAKPOINTS: $output !global;\n }\n @else {\n @if map-has-key($BREAKPOINTS, $name) and $overwrite != true {\n @warn \"You already have a breakpoint named `#{$name}`, please choose another breakpoint name, or pass in `$overwrite: true` to overwrite the previous breakpoint.\";\n $BREAKPOINTS: $BREAKPOINTS !global;\n }\n @else if not map-has-key($BREAKPOINTS, $name) or $overwrite == true {\n $BREAKPOINTS: map-merge($BREAKPOINTS, $output) !global;\n }\n }\n}\n\n@function get-breakpoint($name: false) {\n @if $name == false {\n @return $BREAKPOINTS;\n }\n @else {\n @return map-get($BREAKPOINTS, $name);\n }\n}\n", + "@mixin legacy-settings-warning {\n $legacyVars: (\n 'default-media': 'default media',\n 'default-feature': 'default feature',\n 'force-media-all': 'force all media type',\n 'to-ems': 'to ems',\n 'resolutions': 'transform resolutions',\n 'no-queries': 'no queries',\n 'no-query-fallbacks': 'no query fallbacks',\n 'base-font-size': 'base font size',\n 'legacy-syntax': 'legacy syntax'\n );\n\n @each $legacy, $new in $legacyVars {\n @if global-variable-exists('breakpoint-' + $legacy) {\n @warn \"In order to avoid variable namspace collisions, we have updated the way to change settings for Breakpoint. Please change all instances of `$breakpoint-#{$legacy}: {{setting}}` to `@include breakpoint-set('#{$new}', {{setting}})`. Variable settings, as well as this warning will be deprecated in a future release.\"\n }\n };\n\n //////////////////////////////\n // Hand correct each setting\n //////////////////////////////\n @if global-variable-exists('breakpoint-default-media') and $breakpoint-default-media != breakpoint-get('default media') {\n @include breakpoint-set('default media', $breakpoint-default-media);\n }\n @if global-variable-exists('breakpoint-default-feature') and $breakpoint-default-feature != breakpoint-get('default feature') {\n @include breakpoint-set('default feature', $breakpoint-default-feature);\n }\n @if global-variable-exists('breakpoint-force-media-all') and $breakpoint-force-media-all != breakpoint-get('force all media type') {\n @include breakpoint-set('force all media type', $breakpoint-force-media-all);\n }\n @if global-variable-exists('breakpoint-to-ems') and $breakpoint-to-ems != breakpoint-get('to ems') {\n @include breakpoint-set('to ems', $breakpoint-to-ems);\n }\n @if global-variable-exists('breakpoint-resolutions') and $breakpoint-resolutions != breakpoint-get('transform resolutions') {\n @include breakpoint-set('transform resolutions', $breakpoint-resolutions);\n }\n @if global-variable-exists('breakpoint-no-queries') and $breakpoint-no-queries != breakpoint-get('no queries') {\n @include breakpoint-set('no queries', $breakpoint-no-queries);\n }\n @if global-variable-exists('breakpoint-no-query-fallbacks') and $breakpoint-no-query-fallbacks != breakpoint-get('no query fallbacks') {\n @include breakpoint-set('no query fallbacks', $breakpoint-no-query-fallbacks);\n }\n @if global-variable-exists('breakpoint-base-font-size') and $breakpoint-base-font-size != breakpoint-get('base font size') {\n @include breakpoint-set('base font size', $breakpoint-base-font-size);\n }\n @if global-variable-exists('breakpoint-legacy-syntax') and $breakpoint-legacy-syntax != breakpoint-get('legacy syntax') {\n @include breakpoint-set('legacy syntax', $breakpoint-legacy-syntax);\n }\n}", + "/* Magnific Popup CSS */\n\n@import \"settings\";\n\n////////////////////////\n//\n// Contents:\n//\n// 1. Default Settings\n// 2. General styles\n// - Transluscent overlay\n// - Containers, wrappers\n// - Cursors\n// - Helper classes\n// 3. Appearance\n// - Preloader & text that displays error messages\n// - CSS reset for buttons\n// - Close icon\n// - \"1 of X\" counter\n// - Navigation (left/right) arrows\n// - Iframe content type styles\n// - Image content type styles\n// - Media query where size of arrows is reduced\n// - IE7 support\n//\n////////////////////////\n\n\n\n////////////////////////\n// 1. Default Settings\n////////////////////////\n\n$mfp-overlay-color: #0b0b0b !default;\n$mfp-overlay-opacity: 0.8 !default;\n$mfp-shadow: 0 0 8px rgba(0, 0, 0, 0.6) !default; // shadow on image or iframe\n$mfp-popup-padding-left: 8px !default; // Padding from left and from right side\n$mfp-popup-padding-left-mobile: 6px !default; // Same as above, but is applied when width of window is less than 800px\n\n$mfp-z-index-base: 1040 !default; // Base z-index of popup\n$mfp-include-arrows: true !default; // include styles for nav arrows\n$mfp-controls-opacity: 0.65 !default;\n$mfp-controls-color: #FFF !default;\n$mfp-controls-border-color: #3F3F3F !default;\n$mfp-inner-close-icon-color: #333 !default;\n$mfp-controls-text-color: #CCC !default; // Color of preloader and \"1 of X\" indicator\n$mfp-controls-text-color-hover: #FFF !default;\n$mfp-IE7support: true !default; // Very basic IE7 support\n\n// Iframe-type options\n$mfp-include-iframe-type: true !default;\n$mfp-iframe-padding-top: 40px !default;\n$mfp-iframe-background: #000 !default;\n$mfp-iframe-max-width: 900px !default;\n$mfp-iframe-ratio: 9/16 !default;\n\n// Image-type options\n$mfp-include-image-type: true !default;\n$mfp-image-background: #444 !default;\n$mfp-image-padding-top: 40px !default;\n$mfp-image-padding-bottom: 40px !default;\n$mfp-include-mobile-layout-for-image: true !default; // Removes paddings from top and bottom\n\n// Image caption options\n$mfp-caption-title-color: #F3F3F3 !default;\n$mfp-caption-subtitle-color: #BDBDBD !default;\n\n// A11y\n$mfp-use-visuallyhidden: false !default; // Hide content from browsers, but make it available for screen readers\n\n\n\n////////////////////////\n// 2. General styles\n////////////////////////\n\n// Transluscent overlay\n.mfp-bg {\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: $mfp-z-index-base + 2;\n overflow: hidden;\n position: fixed;\n\n background: $mfp-overlay-color;\n opacity: $mfp-overlay-opacity;\n @if $mfp-IE7support {\n filter: unquote(\"alpha(opacity=#{$mfp-overlay-opacity*100})\");\n }\n}\n\n// Wrapper for popup\n.mfp-wrap {\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: $mfp-z-index-base + 3;\n position: fixed;\n outline: none !important;\n -webkit-backface-visibility: hidden; // fixes webkit bug that can cause \"false\" scrollbar\n}\n\n// Root container\n.mfp-container {\n text-align: center;\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n padding: 0 $mfp-popup-padding-left;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n\n// Vertical centerer helper\n.mfp-container {\n &:before {\n content: '';\n display: inline-block;\n height: 100%;\n vertical-align: middle;\n }\n}\n\n// Remove vertical centering when popup has class `mfp-align-top`\n.mfp-align-top {\n .mfp-container {\n &:before {\n display: none;\n }\n }\n}\n\n// Popup content holder\n.mfp-content {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n margin: 0 auto;\n text-align: left;\n z-index: $mfp-z-index-base + 5;\n}\n.mfp-inline-holder,\n.mfp-ajax-holder {\n .mfp-content {\n width: 100%;\n cursor: auto;\n }\n}\n\n// Cursors\n.mfp-ajax-cur {\n cursor: progress;\n}\n.mfp-zoom-out-cur {\n &, .mfp-image-holder .mfp-close {\n cursor: -moz-zoom-out;\n cursor: -webkit-zoom-out;\n cursor: zoom-out;\n }\n}\n.mfp-zoom {\n cursor: pointer;\n cursor: -webkit-zoom-in;\n cursor: -moz-zoom-in;\n cursor: zoom-in;\n}\n.mfp-auto-cursor {\n .mfp-content {\n cursor: auto;\n }\n}\n\n.mfp-close,\n.mfp-arrow,\n.mfp-preloader,\n.mfp-counter {\n -webkit-user-select:none;\n -moz-user-select: none;\n user-select: none;\n}\n\n// Hide the image during the loading\n.mfp-loading {\n &.mfp-figure {\n display: none;\n }\n}\n\n// Helper class that hides stuff\n@if $mfp-use-visuallyhidden {\n // From HTML5 Boilerplate https://github.com/h5bp/html5-boilerplate/blob/v4.2.0/doc/css.md#visuallyhidden\n .mfp-hide {\n border: 0 !important;\n clip: rect(0 0 0 0) !important;\n height: 1px !important;\n margin: -1px !important;\n overflow: hidden !important;\n padding: 0 !important;\n position: absolute !important;\n width: 1px !important;\n }\n} @else {\n .mfp-hide {\n display: none !important;\n }\n}\n\n\n////////////////////////\n// 3. Appearance\n////////////////////////\n\n// Preloader and text that displays error messages\n.mfp-preloader {\n color: $mfp-controls-text-color;\n position: absolute;\n top: 50%;\n width: auto;\n text-align: center;\n margin-top: -0.8em;\n left: 8px;\n right: 8px;\n z-index: $mfp-z-index-base + 4;\n a {\n color: $mfp-controls-text-color;\n &:hover {\n color: $mfp-controls-text-color-hover;\n }\n }\n}\n\n// Hide preloader when content successfully loaded\n.mfp-s-ready {\n .mfp-preloader {\n display: none;\n }\n}\n\n// Hide content when it was not loaded\n.mfp-s-error {\n .mfp-content {\n display: none;\n }\n}\n\n// CSS-reset for buttons\nbutton {\n &.mfp-close,\n &.mfp-arrow {\n overflow: visible;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n display: block;\n outline: none;\n padding: 0;\n z-index: $mfp-z-index-base + 6;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n &::-moz-focus-inner {\n padding: 0;\n border: 0\n }\n}\n\n\n// Close icon\n.mfp-close {\n width: 44px;\n height: 44px;\n line-height: 44px;\n\n position: absolute;\n right: 0;\n top: 0;\n text-decoration: none;\n text-align: center;\n opacity: $mfp-controls-opacity;\n @if $mfp-IE7support {\n filter: unquote(\"alpha(opacity=#{$mfp-controls-opacity*100})\");\n }\n padding: 0 0 18px 10px;\n color: $mfp-controls-color;\n\n font-style: normal;\n font-size: 28px;\n font-family: $serif;\n\n &:hover,\n &:focus {\n opacity: 1;\n @if $mfp-IE7support {\n filter: unquote(\"alpha(opacity=#{1*100})\");\n }\n }\n\n &:active {\n top: 1px;\n }\n}\n.mfp-close-btn-in {\n .mfp-close {\n color: $mfp-inner-close-icon-color;\n }\n}\n.mfp-image-holder,\n.mfp-iframe-holder {\n .mfp-close {\n color: $mfp-controls-color;\n right: -6px;\n text-align: right;\n padding-right: 6px;\n width: 100%;\n }\n}\n\n// \"1 of X\" counter\n.mfp-counter {\n position: absolute;\n top: 0;\n right: 0;\n color: $mfp-controls-text-color;\n font-size: 12px;\n line-height: 18px;\n}\n\n// Navigation arrows\n@if $mfp-include-arrows {\n .mfp-arrow {\n position: absolute;\n opacity: $mfp-controls-opacity;\n @if $mfp-IE7support {\n filter: unquote(\"alpha(opacity=#{$mfp-controls-opacity*100})\");\n }\n margin: 0;\n top: 50%;\n margin-top: -55px;\n padding: 0;\n width: 90px;\n height: 110px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n &:active {\n margin-top: -54px;\n }\n &:hover,\n &:focus {\n opacity: 1;\n @if $mfp-IE7support {\n filter: unquote(\"alpha(opacity=#{1*100})\");\n }\n }\n &:before,\n &:after,\n .mfp-b,\n .mfp-a {\n content: '';\n display: block;\n width: 0;\n height: 0;\n position: absolute;\n left: 0;\n top: 0;\n margin-top: 35px;\n margin-left: 35px;\n border: medium inset transparent;\n }\n\n &:after,\n .mfp-a {\n\n border-top-width: 13px;\n border-bottom-width: 13px;\n top:8px;\n }\n\n &:before,\n .mfp-b {\n border-top-width: 21px;\n border-bottom-width: 21px;\n opacity: 0.7;\n }\n\n }\n\n .mfp-arrow-left {\n left: 0;\n\n &:after,\n .mfp-a {\n border-right: 17px solid $mfp-controls-color;\n margin-left: 31px;\n }\n &:before,\n .mfp-b {\n margin-left: 25px;\n border-right: 27px solid $mfp-controls-border-color;\n }\n }\n\n .mfp-arrow-right {\n right: 0;\n &:after,\n .mfp-a {\n border-left: 17px solid $mfp-controls-color;\n margin-left: 39px\n }\n &:before,\n .mfp-b {\n border-left: 27px solid $mfp-controls-border-color;\n }\n }\n}\n\n\n\n// Iframe content type\n@if $mfp-include-iframe-type {\n .mfp-iframe-holder {\n padding-top: $mfp-iframe-padding-top;\n padding-bottom: $mfp-iframe-padding-top;\n .mfp-content {\n line-height: 0;\n width: 100%;\n max-width: $mfp-iframe-max-width;\n }\n .mfp-close {\n top: -40px;\n }\n }\n .mfp-iframe-scaler {\n width: 100%;\n height: 0;\n overflow: hidden;\n padding-top: $mfp-iframe-ratio * 100%;\n iframe {\n position: absolute;\n display: block;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n box-shadow: $mfp-shadow;\n background: $mfp-iframe-background;\n }\n }\n}\n\n\n\n// Image content type\n@if $mfp-include-image-type {\n\n /* Main image in popup */\n img {\n &.mfp-img {\n width: auto;\n max-width: 100%;\n height: auto;\n display: block;\n line-height: 0;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n padding: $mfp-image-padding-top 0 $mfp-image-padding-bottom;\n margin: 0 auto;\n }\n }\n\n /* The shadow behind the image */\n .mfp-figure {\n line-height: 0;\n &:after {\n content: '';\n position: absolute;\n left: 0;\n top: $mfp-image-padding-top;\n bottom: $mfp-image-padding-bottom;\n display: block;\n right: 0;\n width: auto;\n height: auto;\n z-index: -1;\n box-shadow: $mfp-shadow;\n background: $mfp-image-background;\n }\n small {\n color: $mfp-caption-subtitle-color;\n display: block;\n font-size: 12px;\n line-height: 14px;\n }\n figure {\n margin: 0;\n }\n figcaption {\n margin-top: 0;\n margin-bottom: 0; // reset for bottom spacing\n }\n }\n .mfp-bottom-bar {\n margin-top: -$mfp-image-padding-bottom + 4;\n position: absolute;\n top: 100%;\n left: 0;\n width: 100%;\n cursor: auto;\n }\n .mfp-title {\n text-align: left;\n line-height: 18px;\n color: $mfp-caption-title-color;\n word-wrap: break-word;\n padding-right: 36px; // leave some space for counter at right side\n }\n\n .mfp-image-holder {\n .mfp-content {\n max-width: 100%;\n }\n }\n\n .mfp-gallery {\n .mfp-image-holder {\n .mfp-figure {\n cursor: pointer;\n }\n }\n }\n\n\n @if $mfp-include-mobile-layout-for-image {\n @media screen and (max-width: 800px) and (orientation:landscape), screen and (max-height: 300px) {\n /**\n * Remove all paddings around the image on small screen\n */\n .mfp-img-mobile {\n .mfp-image-holder {\n padding-left: 0;\n padding-right: 0;\n }\n img {\n &.mfp-img {\n padding: 0;\n }\n }\n .mfp-figure {\n // The shadow behind the image\n &:after {\n top: 0;\n bottom: 0;\n }\n small {\n display: inline;\n margin-left: 5px;\n }\n }\n .mfp-bottom-bar {\n background: rgba(0,0,0,0.6);\n bottom: 0;\n margin: 0;\n top: auto;\n padding: 3px 5px;\n position: fixed;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n &:empty {\n padding: 0;\n }\n }\n .mfp-counter {\n right: 5px;\n top: 3px;\n }\n .mfp-close {\n top: 0;\n right: 0;\n width: 35px;\n height: 35px;\n line-height: 35px;\n background: rgba(0, 0, 0, 0.6);\n position: fixed;\n text-align: center;\n padding: 0;\n }\n }\n }\n }\n}\n\n\n\n// Scale navigation arrows and reduce padding from sides\n@media all and (max-width: 900px) {\n .mfp-arrow {\n -webkit-transform: scale(0.75);\n transform: scale(0.75);\n }\n .mfp-arrow-left {\n -webkit-transform-origin: 0;\n transform-origin: 0;\n }\n .mfp-arrow-right {\n -webkit-transform-origin: 100%;\n transform-origin: 100%;\n }\n .mfp-container {\n padding-left: $mfp-popup-padding-left-mobile;\n padding-right: $mfp-popup-padding-left-mobile;\n }\n}\n\n\n\n// IE7 support\n// Styles that make popup look nicier in old IE\n@if $mfp-IE7support {\n .mfp-ie7 {\n .mfp-img {\n padding: 0;\n }\n .mfp-bottom-bar {\n width: 600px;\n left: 50%;\n margin-left: -300px;\n margin-top: 5px;\n padding-bottom: 5px;\n }\n .mfp-container {\n padding: 0;\n }\n .mfp-content {\n padding-top: 44px;\n }\n .mfp-close {\n top: 0;\n right: 0;\n padding-top: 0;\n }\n }\n}\n", + "////////////////////////\n// Settings //\n////////////////////////\n\n// overlay\n$mfp-overlay-color: #000; // Color of overlay screen\n$mfp-overlay-opacity: 0.8; // Opacity of overlay screen\n$mfp-shadow: 0 0 8px rgba(0, 0, 0, 0.6); // Shadow on image or iframe\n\n// spacing\n$mfp-popup-padding-left: 8px; // Padding from left and from right side\n$mfp-popup-padding-left-mobile: 6px; // Same as above, but is applied when width of window is less than 800px\n\n$mfp-z-index-base: 1040; // Base z-index of popup\n\n// controls\n$mfp-include-arrows: true; // Include styles for nav arrows\n$mfp-controls-opacity: 1; // Opacity of controls\n$mfp-controls-color: #fff; // Color of controls\n$mfp-controls-border-color: #fff; // Border color of controls\n$mfp-inner-close-icon-color: #fff; // Color of close button when inside\n$mfp-controls-text-color: #ccc; // Color of preloader and \"1 of X\" indicator\n$mfp-controls-text-color-hover: #fff; // Hover color of preloader and \"1 of X\" indicator\n$mfp-IE7support: true; // Very basic IE7 support\n\n// Iframe-type options\n$mfp-include-iframe-type: true; // Enable Iframe-type popups\n$mfp-iframe-padding-top: 40px; // Iframe padding top\n$mfp-iframe-background: #000; // Background color of iframes\n$mfp-iframe-max-width: 900px; // Maximum width of iframes\n$mfp-iframe-ratio: 9/16; // Ratio of iframe (9/16 = widescreen, 3/4 = standard, etc.)\n\n// Image-type options\n$mfp-include-image-type: true; // Enable Image-type popups\n$mfp-image-background: #444 !default;\n$mfp-image-padding-top: 40px; // Image padding top\n$mfp-image-padding-bottom: 40px; // Image padding bottom\n$mfp-include-mobile-layout-for-image: true; // Removes paddings from top and bottom\n\n// Image caption options\n$mfp-caption-title-color: #f3f3f3; // Caption title color\n$mfp-caption-subtitle-color: #bdbdbd; // Caption subtitle color\n.mfp-counter { font-family: $serif; } // Caption font family\n\n// A11y\n$mfp-use-visuallyhidden: false;", + "// Susy (Un-Prefixed)\n// ==================\n\n@import 'susy-prefix';\n@import 'susy/unprefix';\n", + "// Susy (Prefixed)\n// ===============\n\n$susy-version: 3;\n\n@import 'susy/utilities';\n@import 'susy/su-validate';\n@import 'susy/su-math';\n@import 'susy/settings';\n@import 'susy/normalize';\n@import 'susy/parse';\n@import 'susy/syntax-helpers';\n@import 'susy/api';\n", + "// Sass Utilities\n// ==============\n// - Susy Error Output Override [variable]\n// - Susy Error [function]\n\n\n\n// Susy Error Output Override\n// --------------------------\n/// Turn off error output for testing\n/// @group x-utility\n/// @access private\n$_susy-error-output-override: false !default;\n\n\n\n// Susy Error\n// ----------\n/// Optionally return error messages without failing,\n/// as a way to test error cases\n///\n/// @group x-utility\n/// @access private\n///\n/// @param {string} $message -\n/// A useful error message, explaining the problem\n/// @param {string} $source -\n/// The original source of the error for debugging\n/// @param {bool} $override [$_susy-error-output-override] -\n/// Optionally return the error rather than failing\n/// @return {string} -\n/// Combined error with source and message\n/// @throws When `$override == true`\n@function _susy-error(\n $message,\n $source,\n $override: $_susy-error-output-override\n) {\n @if $override {\n @return 'ERROR [#{$source}] #{$message}';\n }\n\n @error '[#{$source}] #{$message}';\n}\n\n\n// Su Is Comparable\n// ----------------\n/// Check that the units in a grid are comparable\n///\n/// @group x-validation\n/// @access private\n///\n/// @param {numbers} $lengths… -\n/// Arglist of all the number values to compare\n/// (columns, gutters, span, etc)\n///\n/// @return {'fluid' | 'static' | false} -\n/// The type of span (fluid or static) when units match,\n/// or `false` for mismatched units\n@function _su-is-comparable(\n $lengths...\n) {\n $first: nth($lengths, 1);\n\n @if (length($lengths) == 1) {\n @return if(unitless($first), 'fluid', 'static');\n }\n\n @for $i from 2 through length($lengths) {\n $comp: nth($lengths, $i);\n\n $fail: not comparable($first, $comp);\n $fail: $fail or (unitless($first) and not unitless($comp));\n $fail: $fail or (unitless($comp) and not unitless($first));\n\n @if $fail {\n @return false;\n }\n }\n\n @return if(unitless($first), 'fluid', 'static');\n}\n\n\n// Su Map Add Units\n// ----------------\n/// The calc features use a map of units and values\n/// to compile the proper algorythm.\n/// This function adds a new value to any comparable existing unit/value,\n/// or adds a new unit/value pair to the map\n///\n/// @group x-utility\n/// @access private\n///\n/// @param {map} $map -\n/// A map of unit/value pairs, e.g. ('px': 120px)\n/// @param {length} $value -\n/// A new length to be added to the map\n/// @return {map} -\n/// The updated map, with new value added\n///\n/// @example scss -\n/// $map: (0px: 120px);\n/// $map: _su-map-add-units($map, 1in); // add a comparable unit\n/// $map: _su-map-add-units($map, 3vw); // add a new unit\n///\n/// @each $units, $value in $map {\n/// /* #{$units}: #{$value} */\n/// }\n@function _su-map-add-units(\n $map,\n $value\n) {\n $unit: $value * 0;\n $has: map-get($map, $unit) or 0;\n\n @if ($has == 0) {\n @each $try, $could in $map {\n $match: comparable($try, $value);\n $unit: if($match, $try, $unit);\n $has: if($match, $could, $has);\n }\n }\n\n @return map-merge($map, ($unit: $has + $value));\n}\n\n\n// Susy Flatten\n// ------------\n/// Flatten a multidimensional list\n///\n/// @group x-utility\n/// @access private\n///\n/// @param {list} $list -\n/// The list to be flattened\n/// @return {list} -\n/// The flattened list\n///\n/// @example scss -\n/// $list: 120px (30em 30em) 120px;\n/// /* #{_susy-flatten($list)} */\n@function _susy-flatten(\n $list\n) {\n $flat: ();\n\n // Don't iterate over maps\n @if (type-of($list) == 'map') {\n @return $list;\n }\n\n // Iterate over lists (or single items)\n @each $item in $list {\n @if (type-of($item) == 'list') {\n $item: _susy-flatten($item);\n $flat: join($flat, $item);\n } @else {\n $flat: append($flat, $item);\n }\n }\n\n // Return flattened list\n @return $flat;\n}\n", + "/// Validation\n/// ==========\n/// Each argument to Su has a single canonical syntax.\n/// These validation functions check to ensure\n/// that each argument is valid,\n/// in order to provide useful errors\n/// before attempting to calculate the results/\n///\n/// @group x-validation\n///\n/// @see su-valid-columns\n/// @see su-valid-gutters\n/// @see su-valid-spread\n/// @see su-valid-location\n\n\n\n// Valid Span\n// ----------\n/// Check that the `span` argument\n/// is a number, length, or column-list\n///\n/// @group x-validation\n///\n/// @param {number | list} $span -\n/// Number of columns, or length of span\n///\n/// @return {number | list} -\n/// Validated `$span` number, length, or columns list\n///\n/// @throw\n/// when span value is not a number, or valid column list\n@function su-valid-span(\n $span\n) {\n $type: type-of($span);\n @if ($type == 'number') {\n @return $span;\n } @else if ($type == 'list') and su-valid-columns($span, 'silent-failure') {\n @return $span;\n }\n\n $actual: '[#{type-of($span)}] `#{inspect($span)}`';\n @return _susy-error(\n '#{$actual} is not a valid number, length, or column-list for $span.',\n 'su-valid-span');\n}\n\n\n\n// Valid Columns\n// -------------\n/// Check that the `columns` argument is a valid\n/// list of column-lengths\n///\n/// @group x-validation\n///\n/// @param {list} $columns -\n/// List of column-lengths\n/// @param {bool} $silent-failure [true] -\n/// Set false to return null on failure\n///\n/// @return {list} -\n/// Validated `$columns` list\n///\n/// @throw\n/// when column value is not a valid list of numbers\n@function su-valid-columns(\n $columns,\n $silent-failure: false\n) {\n @if (type-of($columns) == 'list') {\n $fail: false;\n\n @each $col in $columns {\n @if (type-of($col) != 'number') {\n $fail: true;\n }\n }\n\n @if not $fail {\n @return $columns;\n }\n }\n\n // Silent Failure\n @if $silent-failure {\n @return null;\n }\n\n // Error Message\n $actual: '[#{type-of($columns)}] `#{inspect($columns)}`';\n\n @return _susy-error(\n '#{$actual} is not a valid list of numbers for $columns.',\n 'su-valid-columns');\n}\n\n\n\n// Valid Gutters\n// -------------\n/// Check that the `gutters` argument is a valid number\n///\n/// @group x-validation\n///\n/// @param {number} $gutters -\n/// Width of a gutter\n///\n/// @return {number} -\n/// Validated `$gutters` number\n///\n/// @throw\n/// when gutter value is not a number\n@function su-valid-gutters(\n $gutters\n) {\n $type: type-of($gutters);\n\n @if ($type == 'number') {\n @return $gutters;\n }\n\n $actual: '[#{$type}] `#{inspect($gutters)}`';\n @return _susy-error(\n '#{$actual} is not a number or length for $gutters.',\n 'su-valid-gutters');\n}\n\n\n\n// Valid Spread\n// ------------\n/// Check that the `spread` argument is a valid\n/// intiger between `-1` and `1`\n///\n/// @group x-validation\n///\n/// @param {0 | 1 | -1} $spread -\n/// Number of gutters to include in a span,\n/// relative to the number columns\n///\n/// @return {0 | 1 | -1} -\n/// Validated `$spread` number\n///\n/// @throw\n/// when spread value is not a valid spread\n@function su-valid-spread(\n $spread\n) {\n @if index(0 1 -1, $spread) {\n @return $spread;\n }\n\n $actual: '[#{type-of($spread)}] `#{inspect($spread)}`';\n @return _susy-error(\n '#{$actual} is not a normalized [0 | 1 | -1] value for `$spread`.',\n 'su-valid-spread');\n}\n\n\n\n// Valid Location\n// --------------\n/// Check that the `location` argument is a valid number,\n/// within the scope of available columns\n///\n/// @group x-validation\n///\n/// @param {number} $span -\n/// Number of grid-columns to be spanned\n/// @param {integer | string} $location -\n/// Starting (1-indexed) column-position of that span\n/// @param {list} $columns -\n/// List of available columns in the grid\n///\n/// @return {integer} -\n/// Validated `$location` intiger\n///\n/// @throw\n/// when location value is not a valid index,\n/// given the context and span.\n@function su-valid-location(\n $span,\n $location,\n $columns\n) {\n $count: length($columns);\n\n @if $location {\n @if (type-of($location) != 'number') or (not unitless($location)) {\n $actual: '[#{type-of($location)}] `#{$location}`';\n @return _susy-error(\n '#{$actual} is not a unitless number for $location.',\n 'su-valid-location');\n } @else if (round($location) != $location) {\n @return _susy-error(\n 'Location (`#{$location}`) must be a 1-indexed intiger position.',\n 'su-valid-location');\n } @else if ($location > $count) or ($location < 1) {\n @return _susy-error(\n 'Position `#{$location}` does not exist in grid `#{$columns}`.',\n 'su-valid-location');\n } @else if ($location + $span - 1 > $count) {\n $details: 'grid `#{$columns}` for span `#{$span}` at `#{$location}`';\n @return _susy-error(\n 'There are not enough columns in #{$details}.',\n 'su-valid-location');\n }\n }\n\n @return $location;\n}\n", + "/// Grid Math Engine\n/// ================\n/// The `su` functions give you direct access to the math layer,\n/// without any syntax-sugar like shorthand parsing, and normalization.\n/// If you prefer named arguments, and stripped-down syntax,\n/// you can use these functions directly in your code –\n/// replacing `span`, `gutter`, and `slice`.\n///\n/// These functions are also useful\n/// for building mixins or other extensions to Susy.\n/// Apply the Susy syntax to new mixins and functions,\n/// using our \"Plugin Helpers\",\n/// or write your own syntax and pass the normalized results along\n/// to `su` for compilation.\n///\n/// @group su-math\n///\n/// @see su-span\n/// @see su-gutter\n/// @see su-slice\n/// @ignore _su-sum\n/// @ignore _su-calc-span\n/// @ignore _su-calc-sum\n/// @ignore _su-needs-calc-output\n\n\n\n// Su Span\n// -------\n/// Calculates and returns a CSS-ready span width,\n/// based on normalized span and context data –\n/// a low-level version of `susy-span`,\n/// with all of the logic and none of the syntax sugar.\n///\n/// - Grids defined with unitless numbers will return `%` values.\n/// - Grids defined with comparable units\n/// will return a value in the units provided.\n/// - Grids defined with a mix of units,\n/// or a combination of untiless numbers and unit-lengths,\n/// will return a `calc()` string.\n///\n/// @group su-math\n/// @see susy-span\n///\n/// @param {number | list} $span -\n/// Number or list of grid columns to span\n/// @param {list} $columns -\n/// List of columns available\n/// @param {number} $gutters -\n/// Width of a gutter in column-comparable units\n/// @param {0 | 1 | -1} $spread -\n/// Number of gutters spanned,\n/// relative to `span` count\n/// @param {0 | 1 | -1} $container-spread [$spread] -\n/// Number of gutters spanned,\n/// relative to `columns` count\n/// @param {integer} $location [1] -\n/// Optional position of sub-span among full set of columns\n///\n/// @return {length} -\n/// Relative or static length of a span on the grid\n@function su-span(\n $span,\n $columns,\n $gutters,\n $spread,\n $container-spread: $spread,\n $location: 1\n) {\n $span: su-valid-span($span);\n $columns: su-valid-columns($columns);\n $gutters: su-valid-gutters($gutters);\n $spread: su-valid-spread($spread);\n\n @if (type-of($span) == 'number') {\n @if (not unitless($span)) {\n @return $span;\n }\n\n $location: su-valid-location($span, $location, $columns);\n $span: su-slice($span, $columns, $location, $validate: false);\n }\n\n @if _su-needs-calc-output($span, $columns, $gutters, $spread, not 'validate') {\n @return _su-calc-span($span, $columns, $gutters, $spread, $container-spread, not 'validate');\n }\n\n $span-width: _su-sum($span, $gutters, $spread, $validate: false);\n\n @if unitless($span-width) {\n $container-spread: su-valid-spread($container-spread);\n $container: _su-sum($columns, $gutters, $container-spread, $validate: false);\n @return percentage($span-width / $container);\n }\n\n @return $span-width;\n}\n\n\n\n// Su Gutter\n// ---------\n/// Calculates and returns a CSS-ready gutter width,\n/// based on normalized grid data –\n/// a low-level version of `susy-gutter`,\n/// with all of the logic and none of the syntax sugar.\n///\n/// - Grids defined with unitless numbers will return `%` values.\n/// - Grids defined with comparable units\n/// will return a value in the units provided.\n/// - Grids defined with a mix of units,\n/// or a combination of untiless numbers and unit-lengths,\n/// will return a `calc()` string.\n///\n/// @group su-math\n/// @see susy-gutter\n///\n/// @param {list} $columns -\n/// List of columns in the grid\n/// @param {number} $gutters -\n/// Width of a gutter in column-comparable units\n/// @param {0 | 1 | -1} $container-spread -\n/// Number of gutters spanned,\n/// relative to `columns` count\n///\n/// @return {length} -\n/// Relative or static length of one gutter in a grid\n@function su-gutter(\n $columns,\n $gutters,\n $container-spread\n) {\n @if (type-of($gutters) == 'number') {\n @if ($gutters == 0) or (not unitless($gutters)) {\n @return $gutters;\n }\n }\n\n @if _su-needs-calc-output($gutters, $columns, $gutters, -1, not 'validate') {\n @return _su-calc-span($gutters, $columns, $gutters, -1, $container-spread, not 'validate');\n }\n\n $container: _su-sum($columns, $gutters, $container-spread);\n @return percentage($gutters / $container);\n}\n\n\n\n// Su Slice\n// --------\n/// Returns a list of columns\n/// based on a given span/location slice of the grid –\n/// a low-level version of `susy-slice`,\n/// with all of the logic and none of the syntax sugar.\n///\n/// @group su-math\n/// @see susy-slice\n///\n/// @param {number} $span -\n/// Number of grid columns to span\n/// @param {list} $columns -\n/// List of columns in the grid\n/// @param {number} $location [1] -\n/// Starting index of a span in the list of columns\n/// @param {bool} $validate [true] -\n/// Check that arguments are valid before proceeding\n///\n/// @return {list} -\n/// Subset list of grid columns, based on span and location\n@function su-slice(\n $span,\n $columns,\n $location: 1,\n $validate: true\n) {\n @if $validate {\n $columns: su-valid-columns($columns);\n $location: su-valid-location($span, $location, $columns);\n }\n\n $floor: floor($span);\n $sub-columns: ();\n\n @for $i from $location to ($location + $floor) {\n $sub-columns: append($sub-columns, nth($columns, $i));\n }\n\n @if $floor != $span {\n $remainder: $span - $floor;\n $column: $location + $floor;\n $sub-columns: append($sub-columns, nth($columns, $column) * $remainder);\n }\n\n @return $sub-columns;\n}\n\n\n\n// Su Sum\n// ------\n/// Get the total sum of column-units in a layout.\n///\n/// @group su-math\n/// @access private\n///\n/// @param {list} $columns -\n/// List of columns in the grid\n/// @param {number} $gutters -\n/// Width of a gutter in column-comparable units\n/// @param {0 | 1 | -1} $spread -\n/// Number of gutters spanned,\n/// relative to `columns` count\n/// @param {bool} $validate [true] -\n/// Check that arguments are valid before proceeding\n///\n/// @return {number} -\n/// Total sum of column-units in a grid\n@function _su-sum(\n $columns,\n $gutters,\n $spread,\n $validate: true\n) {\n @if $validate {\n $columns: su-valid-span($columns);\n $gutters: su-valid-gutters($gutters);\n $spread: su-valid-spread($spread);\n }\n\n // Calculate column-sum\n $column-sum: 0;\n @each $column in $columns {\n $column-sum: $column-sum + $column;\n }\n\n $gutter-sum: (ceil(length($columns)) + $spread) * $gutters;\n $total: if(($gutter-sum > 0), $column-sum + $gutter-sum, $column-sum);\n\n @return $total;\n}\n\n\n\n// Su Calc\n// -------\n/// Return a usable span width as a `calc()` function,\n/// in order to create mixed-unit grids.\n///\n/// @group su-math\n/// @access private\n///\n/// @param {number | list} $span -\n/// Pre-sliced list of grid columns to span\n/// @param {list} $columns -\n/// List of columns available\n/// @param {number} $gutters -\n/// Width of a gutter in column-comparable units\n/// @param {0 | 1 | -1} $spread -\n/// Number of gutters spanned,\n/// relative to `span` count\n/// @param {0 | 1 | -1} $container-spread [$spread] -\n/// Number of gutters spanned,\n/// relative to `columns` count\n/// @param {bool} $validate [true] -\n/// Check that arguments are valid before proceeding\n///\n/// @return {length} -\n/// Relative or static length of a span on the grid\n@function _su-calc-span(\n $span,\n $columns,\n $gutters,\n $spread,\n $container-spread: $spread,\n $validate: true\n) {\n @if $validate {\n $span: su-valid-span($span);\n $columns: su-valid-columns($columns);\n $gutters: su-valid-gutters($gutters);\n $spread: su-valid-spread($spread);\n $container-spread: su-valid-spread($container-spread);\n }\n\n // Span and context\n $span: _su-calc-sum($span, $gutters, $spread, not 'validate');\n $context: _su-calc-sum($columns, $gutters, $container-spread, not 'validate');\n\n // Fixed and fluid\n $fixed-span: map-get($span, 'fixed');\n $fluid-span: map-get($span, 'fluid');\n $fixed-context: map-get($context, 'fixed');\n $fluid-context: map-get($context, 'fluid');\n\n $calc: '#{$fixed-span}';\n $fluid-calc: '(100% - #{$fixed-context})';\n\n // Fluid-values\n @if (not $fluid-span) {\n $fluid-calc: null;\n } @else if ($fluid-span != $fluid-context) {\n $fluid-span: '* #{$fluid-span}';\n $fluid-context: if($fluid-context, '/ #{$fluid-context}', '');\n $fluid-calc: '(#{$fluid-calc $fluid-context $fluid-span})';\n }\n\n @if $fluid-calc {\n $calc: if(($calc != ''), '#{$calc} + ', '');\n $calc: '#{$calc + $fluid-calc}';\n }\n\n @return calc(#{unquote($calc)});\n}\n\n\n\n// Su Calc-Sum\n// -----------\n/// Get the total sum of fixed and fluid column-units\n/// for creating a mixed-unit layout with `calc()` values.\n///\n/// @group su-math\n/// @access private\n///\n/// @param {list} $columns -\n/// List of columns available\n/// @param {number} $gutters -\n/// Width of a gutter in column-comparable units\n/// @param {0 | 1 | -1} $spread -\n/// Number of gutters spanned,\n/// relative to `span` count\n/// @param {bool} $validate [true] -\n/// Check that arguments are valid before proceeding\n///\n/// @return {map} -\n/// Map with `fixed` and `fluid` keys\n/// containing the proper math as strings\n@function _su-calc-sum(\n $columns,\n $gutters,\n $spread,\n $validate: true\n) {\n @if $validate {\n $columns: su-valid-span($columns);\n $gutters: su-valid-gutters($gutters);\n $spread: su-valid-spread($spread);\n }\n\n $fluid: 0;\n $fixed: ();\n $calc: null;\n\n // Gutters\n $gutters: $gutters * (length($columns) + $spread);\n\n // Columns\n @each $col in append($columns, $gutters) {\n @if unitless($col) {\n $fluid: $fluid + $col;\n } @else {\n $fixed: _su-map-add-units($fixed, $col);\n }\n }\n\n // Compile Fixed Units\n @each $unit, $total in $fixed {\n @if ($total != (0 * $total)) {\n $calc: if($calc, '#{$calc} + #{$total}', '#{$total}');\n }\n }\n\n // Calc null or string\n @if $calc {\n $calc: if(str-index($calc, '+'), '(#{$calc})', '#{$calc}');\n }\n\n // Fluid 0 => null\n $fluid: if(($fluid == 0), null, $fluid);\n\n\n // Return map\n $return: (\n 'fixed': $calc,\n 'fluid': $fluid,\n );\n\n @return $return;\n}\n\n\n\n// Needs Calc\n// ----------\n/// Check if `calc()` will be needed in defining a span,\n/// if the necessary units in a grid are not comparable.\n///\n/// @group su-math\n/// @access private\n///\n/// @param {list} $span -\n/// Slice of columns to span\n/// @param {list} $columns -\n/// List of available columns in the grid\n/// @param {number} $gutters -\n/// Width of a gutter\n/// @param {0 | 1 | -1} $spread -\n/// Number of gutters spanned,\n/// relative to `span` count\n/// @param {bool} $validate [true] -\n/// Check that arguments are valid before proceeding\n///\n/// @return {bool} -\n/// `True` when units do not match, and `calc()` will be required\n@function _su-needs-calc-output(\n $span,\n $columns,\n $gutters,\n $spread,\n $validate: true\n) {\n @if $validate {\n $span: su-valid-span($span);\n $columns: su-valid-columns($columns);\n $gutters: su-valid-gutters($gutters);\n }\n\n $has-gutter: if((length($span) > 1) or ($spread >= 0), true, false);\n $check: if($has-gutter, append($span, $gutters), $span);\n $safe-span: _su-is-comparable($check...);\n\n @if ($safe-span == 'static') {\n @return false;\n } @else if (not $safe-span) {\n @return true;\n }\n\n $safe-fluid: _su-is-comparable($gutters, $columns...);\n\n @return not $safe-fluid;\n}\n", + "/// Susy3 Configuration\n/// ===================\n/// Susy3 has 4 core settings, in a single settings map.\n/// You'll notice a few differences from Susy2:\n///\n/// **Columns** no longer accept a single number, like `12`,\n/// but use a syntax more similar to the new\n/// CSS [grid-template-columns][columns] –\n/// a list of relative sizes for each column on the grid.\n/// Unitless numbers in Susy act very similar to `fr` units in CSS,\n/// and the `susy-repeat()` function (similar to the css `repeat()`)\n/// helps quickly establish equal-width columns.\n///\n/// [columns]: https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-columns\n///\n/// - `susy-repeat(12)` will create 12 fluid, equal-width columns\n/// - `susy-repeat(6, 120px)` will create 6 equal `120px`-wide columns\n/// - `120px susy-repeat(4) 120px` will create 6 columns,\n/// the first and last are `120px`,\n/// while the middle 4 are equal fractions of the remainder.\n/// Susy will output `calc()` values in order to achieve this.\n///\n/// **Gutters** haven't changed –\n/// a single fraction or explicit width –\n/// but the `calc()` output feature\n/// means you can now use any combination of units and fractions\n/// to create static-gutters on a fluid grid, etc.\n///\n/// **Spread** existed in the Susy2 API as a span option,\n/// and was otherwise handled behind the scenes.\n/// Now we're giving you full control over all spread issues.\n/// You can find a more [detailed explanation of spread on the blog][spread].\n///\n/// [spread]: http://oddbird.net/2017/06/13/susy-spread/\n///\n/// You can access your global settings at any time\n/// with the `susy-settings()` function,\n/// or grab a single setting from the global scope\n/// with `susy-get('columns')`, `susy-get('gutters')` etc.\n///\n/// @group a-config\n/// @link http://oddbird.net/2017/06/13/susy-spread/\n/// Article: Understanding Spread in Susy3\n///\n/// @see $susy\n/// @see susy-settings\n/// @see susy-get\n\n\n\n// Susy\n// ----\n/// The grid is defined in a single map variable,\n/// with four initial properties:\n/// `columns`, `gutters`, `spread` and `container-spread`.\n/// Anything you put in the root `$susy` variable map\n/// will be treated as a global project default.\n/// You can create similar configuration maps\n/// under different variable names,\n/// to override the defaults as-needed.\n///\n/// @group a-config\n/// @type Map\n///\n/// @see $_susy-defaults\n/// @see {function} susy-repeat\n/// @link\n/// https://codepen.io/mirisuzanne/pen/EgmJJp?editors=1100\n/// Spread examples on CodePen\n///\n/// @prop {list} columns -\n/// Columns are described by a list of numbers,\n/// representing the relative width of each column.\n/// The syntax is a simplified version of CSS native\n/// `grid-template-columns`,\n/// expecting a list of grid-column widths.\n/// Unitless numbers create fractional fluid columns\n/// (similar to the CSS-native `fr` unit),\n/// while length values (united numbers)\n/// are used to define static columns.\n/// You can mix-and match units and fractions,\n/// to create a mixed grid.\n/// Susy will generate `calc()` values when necessary,\n/// to make all your units work together.\n///\n/// Use the `susy-repeat($count, $value)` function\n/// to more easily repetative columns,\n/// similar to the CSS-native `repeat()`.\n///\n/// - `susy-repeat(8)`:\n/// an 8-column, symmetrical, fluid grid.\n///
Identical to `(1 1 1 1 1 1 1 1)`.\n/// - `susy-repeat(6, 8em)`:\n/// a 6-column, symmetrical, em-based grid.\n///
Identical to `(8em 8em 8em 8em 8em 8em)`.\n/// - `(300px susy-repeat(4) 300px)`:\n/// a 6-column, asymmetrical, mixed fluid/static grid\n/// using `calc()` output.\n///
Identical to `(300px 1 1 1 1 300px)`.\n///\n/// **NOTE** that `12` is no longer a valid 12-column grid definition,\n/// and you must list all the columns individually\n/// (or by using the `susy-repeat()` function).\n///\n/// @prop {number} gutters -\n/// Gutters are defined as a single width,\n/// or fluid ratio, similar to the native-CSS\n/// `grid-column-gap` syntax.\n/// Similar to columns,\n/// gutters can use any valid CSS length unit,\n/// or unitless numbers to define a relative fraction.\n///\n/// - `0.5`:\n/// a fluid gutter, half the size of a single-fraction column.\n/// - `1em`:\n/// a static gutter, `1em` wide.\n///\n/// Mix static gutters with fluid columns, or vice versa,\n/// and Susy will generate the required `calc()` to make it work.\n///\n/// @prop {string} spread [narrow] -\n/// Spread of an element across adjacent gutters:\n/// either `narrow` (none), `wide` (one), or `wider` (two)\n///\n/// - Both spread settings default to `narrow`,\n/// the most common use-case.\n/// A `narrow` spread only has gutters *between* columns\n/// (one less gutter than columns).\n/// This is how all css-native grids work,\n/// and most margin-based grid systems.\n/// - A `wide` spread includes the same number of gutters as columns,\n/// spanning across a single side-gutter.\n/// This is how most padding-based grid systems often work,\n/// and is also useful for pushing and pulling elements into place.\n/// - The rare `wider` spread includes gutters\n/// on both sides of the column-span\n/// (one more gutters than columns).\n///\n/// @prop {string} container-spread [narrow] -\n/// Spread of a container around adjacent gutters:\n/// either `narrow` (none), `wide` (one), or `wider` (two).\n/// See `spread` property for details.\n///\n/// @since 3.0.0-beta.1 -\n/// `columns` setting no longer accepts numbers\n/// (e.g. `12`) for symmetrical fluid grids,\n/// or the initial `12 x 120px` syntax for\n/// symmetrical fixed-unit grids.\n/// Use `susy-repeat(12)` or `susy-repeat(12, 120px)` instead.\n///\n/// @example scss - default values\n/// // 4 symmetrical, fluid columns\n/// // gutters are 1/4 the size of a column\n/// // elements span 1 less gutter than columns\n/// // containers span 1 less gutter as well\n/// $susy: (\n/// 'columns': susy-repeat(4),\n/// 'gutters': 0.25,\n/// 'spread': 'narrow',\n/// 'container-spread': 'narrow',\n/// );\n///\n/// @example scss - inside-static gutters\n/// // 6 symmetrical, fluid columns…\n/// // gutters are static, triggering calc()…\n/// // elements span equal columns & gutters…\n/// // containers span equal columns & gutters…\n/// $susy: (\n/// 'columns': susy-repeat(6),\n/// 'gutters': 0.5em,\n/// 'spread': 'wide',\n/// 'container-spread': 'wide',\n/// );\n$susy: () !default;\n\n\n\n// Susy Repeat\n// -----------\n/// Similar to the `repeat(, )` function\n/// that is available in native CSS Grid templates,\n/// the `susy-repeat()` function helps generate repetative layouts\n/// by repeating any value a given number of times.\n/// Where Susy previously allowed `8` as a column definition\n/// for 8 equal columns, you should now use `susy-repeat(8)`.\n///\n/// @group a-config\n///\n/// @param {integer} $count -\n/// The number of repetitions, e.g. `12` for a 12-column grid.\n/// @param {*} $value [1] -\n/// The value to be repeated.\n/// Technically any value can be repeated here,\n/// but the function exists to repeat column-width descriptions:\n/// e.g. the default `1` for single-fraction fluid columns,\n/// `5em` for a static column,\n/// or even `5em 120px` if you are alternating column widths.\n///\n/// @return {list} -\n/// List of repeated values\n///\n/// @example scss\n/// // 12 column grid, with 5em columns\n/// $susy: (\n/// columns: susy-repeat(12, 5em),\n/// );\n///\n/// @example scss\n/// // asymmetrical 5-column grid\n/// $susy: (\n/// columns: 20px susy-repeat(3, 100px) 20px,\n/// );\n///\n/// /* result: #{susy-get('columns')} */\n@function susy-repeat(\n $count,\n $value: 1\n) {\n $return: ();\n\n @for $i from 1 through $count {\n $return: join($return, $value);\n }\n\n @return $return;\n}\n\n\n\n// Susy Defaults\n// -------------\n/// Configuration map of Susy factory defaults.\n/// Do not override this map directly –\n/// use `$susy` for user and project setting overrides.\n///\n/// @access private\n/// @type Map\n///\n/// @see $susy\n///\n/// @prop {number | list} columns [susy-repeat(4)]\n/// @prop {number} gutters [0.25]\n/// @prop {string} spread ['narrow']\n/// @prop {string} container-spread ['narrow']\n$_susy-defaults: (\n 'columns': susy-repeat(4),\n 'gutters': 0.25,\n 'spread': 'narrow',\n 'container-spread': 'narrow',\n);\n\n\n\n// Susy Settings\n// -------------\n/// Return a combined map of Susy settings,\n/// based on the factory defaults (`$_susy-defaults`),\n/// user-defined project configuration (`$susy`),\n/// and any local overrides required –\n/// such as a configuration map passed into a function.\n///\n/// @group a-config\n///\n/// @param {maps} $overrides… -\n/// Optional map override of global configuration settings.\n/// See `$susy` above for properties.\n///\n/// @return {map} -\n/// Combined map of Susy configuration settings,\n/// in order of specificity:\n/// any `$overrides...`,\n/// then `$susy` project settings,\n/// and finally the `$_susy-defaults`\n///\n/// @example scss - global settings\n/// @each $key, $value in susy-settings() {\n/// /* #{$key}: #{$value} */\n/// }\n///\n/// @example scss - local settings\n/// $local: ('columns': 1 2 3 5 8);\n///\n/// @each $key, $value in susy-settings($local) {\n/// /* #{$key}: #{$value} */\n/// }\n@function susy-settings(\n $overrides...\n) {\n $settings: map-merge($_susy-defaults, $susy);\n\n @each $config in $overrides {\n $settings: map-merge($settings, $config);\n }\n\n @return $settings;\n}\n\n\n\n// Susy Get\n// --------\n/// Return the current global value of any Susy setting\n///\n/// @group a-config\n///\n/// @param {string} $key -\n/// Setting to retrieve from the configuration.\n///\n/// @return {*} -\n/// Value mapped to `$key` in the configuration maps,\n/// in order of specificity:\n/// `$susy`, then `$_susy-defaults`\n///\n/// @example scss -\n/// /* columns: #{susy-get('columns')} */\n/// /* gutters: #{susy-get('gutters')} */\n@function susy-get(\n $key\n) {\n $settings: susy-settings();\n\n @if not map-has-key($settings, $key) {\n @return _susy-error(\n 'There is no Susy setting called `#{$key}`',\n 'susy-get');\n }\n\n @return map-get($settings, $key);\n}\n", + "/// Syntax Normalization\n/// ====================\n/// Susy is divided into two layers:\n/// \"Su\" provides the core math functions with a stripped-down syntax,\n/// while \"Susy\" adds global settings, shorthand syntax,\n/// and other helpers.\n/// Each setting (e.g. span, location, columns, spread, etc.)\n/// has a single canonical syntax in Su.\n///\n/// This normalization module helps translate between those layers,\n/// transforming parsed Susy input into\n/// values that Su will understand.\n///\n/// @group x-normal\n///\n/// @see susy-normalize\n/// @see susy-normalize-span\n/// @see susy-normalize-columns\n/// @see susy-normalize-spread\n/// @see susy-normalize-location\n\n\n\n// Susy Normalize\n// --------------\n/// Normalize the values in a configuration map.\n/// In addition to the global `$susy` properties,\n/// this map can include local span-related imformation,\n/// like `span` and `location`.\n///\n/// Normalization does not check that values are valid,\n/// which will happen in the Su math layer.\n/// These functions merely look for known Susy syntax –\n/// returning a map with those shorthand values\n/// converted into low-level data for Su.\n/// For example `span: all` and `location: first`\n/// will be converted into specific numbers.\n///\n/// @group x-normal\n/// @see $susy\n/// @see susy-parse\n///\n/// @param {map} $config -\n/// Map of Susy configuration settings to normalize.\n/// See `$susy` and `susy-parse()` documentation for details.\n/// @param {map | null} $context [null] -\n/// Map of Susy configuration settings to use as global reference,\n/// or `null` to use global settings.\n///\n/// @return {map} -\n/// Map of Susy configuration settings,\n/// with all values normalized for Su math functions.\n@function susy-normalize(\n $config,\n $context: null\n) {\n // Spread\n @each $setting in ('spread', 'container-spread') {\n $value: map-get($config, $setting);\n\n @if $value {\n $value: susy-normalize-spread($value);\n $config: map-merge($config, ($setting: $value));\n }\n }\n\n // Columns\n $columns: map-get($config, 'columns');\n\n @if $columns {\n $columns: susy-normalize-columns($columns, $context);\n $config: map-merge($config, ('columns': $columns));\n }\n\n @if not $columns {\n $map: type-of($context) == 'map';\n $columns: if($map, map-get($context, 'columns'), null);\n $columns: $columns or susy-get('columns');\n }\n\n // Span\n $span: map-get($config, 'span');\n\n @if $span {\n $span: susy-normalize-span($span, $columns);\n $config: map-merge($config, ('span': $span));\n }\n\n // Location\n $location: map-get($config, 'location');\n\n @if $location {\n $location: susy-normalize-location($span, $location, $columns);\n $config: map-merge($config, ('location': $location));\n }\n\n @return $config;\n}\n\n\n\n// Normalize Span\n// --------------\n/// Normalize `span` shorthand for Su.\n/// Su span syntax allows an explicit length (e.g. `3em`),\n/// unitless column-span number (e.g. `3` columns),\n/// or an explicit list of columns (e.g. `(3 5 8)`).\n///\n/// Susy span syntax also allows the `all` keyword,\n/// which will be converted to a slice of the context\n/// in normalization.\n///\n/// @group x-normal\n///\n/// @param {number | list | 'all'} $span -\n/// Span value to normalize.\n/// @param {list} $columns -\n/// Normalized list of columns in the grid\n///\n/// @return {number | list} -\n/// Number or list value for `$span`\n@function susy-normalize-span(\n $span,\n $columns: susy-get('columns')\n) {\n @if ($span == 'all') {\n @return length($columns);\n }\n\n @return $span;\n}\n\n\n\n// Normalize Columns\n// -----------------\n/// Normalize `column` shorthand for Su.\n/// Su column syntax only allows column lists (e.g. `120px 1 1 1 120px`).\n///\n/// Susy span syntax also allows a unitless `slice` number (e.g `of 5`),\n/// which will be converted to a slice of the context\n/// in normalization.\n///\n/// @group x-normal\n///\n/// @param {list | integer} $columns -\n/// List of available columns,\n/// or unitless integer representing a slice of\n/// the available context.\n/// @param {map | null} $context [null] -\n/// Map of Susy configuration settings to use as global reference,\n/// or `null` to access global settings.\n///\n/// @return {list} -\n/// Columns list value, normalized for Su input.\n///\n/// @throws\n/// when attempting to access a slice of asymmetrical context\n@function susy-normalize-columns(\n $columns,\n $context: null\n) {\n $context: $context or susy-settings();\n\n @if type-of($columns) == 'list' {\n @return _susy-flatten($columns);\n }\n\n @if (type-of($columns) == 'number') and (unitless($columns)) {\n $span: $columns;\n $context: map-get($context, 'columns');\n $symmetrical: susy-repeat(length($context), nth($context, 1));\n\n @if ($context == $symmetrical) {\n @return susy-repeat($span, nth($context, 1));\n } @else {\n $actual: 'of `#{$span}`';\n $columns: 'grid-columns `#{$context}`';\n @return _susy-error(\n 'context-slice #{$actual} can not be determined based on #{$columns}.',\n 'susy-normalize-columns');\n }\n }\n\n @return $columns;\n}\n\n\n\n// Normalize Spread\n// ----------------\n/// Normalize `spread` shorthand for Su.\n/// Su spread syntax only allows the numbers `-1`, `0`, or `1` –\n/// representing the number of gutters covered\n/// in relation to columns spanned.\n///\n/// Susy spread syntax also allows keywords for each value –\n/// `narrow` for `-1`, `wide` for `0`, or `wider` for `1` –\n/// which will be converted to their respective integers\n/// in normalization.\n///\n/// @group x-normal\n///\n/// @param {0 | 1 | -1 | 'narrow' | 'wide' | 'wider'} $spread -\n/// Spread across adjacent gutters, relative to a column-count —\n/// either `narrow` (-1), `wide` (0), or `wider` (1)\n///\n/// @return {number} -\n/// Numeric value for `$spread`\n@function susy-normalize-spread(\n $spread\n) {\n $normal-spread: (\n 'narrow': -1,\n 'wide': 0,\n 'wider': 1,\n );\n\n @return map-get($normal-spread, $spread) or $spread;\n}\n\n\n\n// Normalize Location\n// ------------------\n/// Normalize `location` shorthand for Su.\n/// Su location syntax requires the (1-indexed) number for a column.\n///\n/// Susy also allows the `first` and `last` keywords,\n/// where `first` is always `1`,\n/// and `last` is calculated based on span and column values.\n/// Both keywords are normalized into an integer index\n/// in normalization.\n///\n/// @group x-normal\n///\n/// @param {number} $span -\n/// Number of grid-columns to be spanned\n/// @param {integer | 'first' | 'last'} $location -\n/// Starting (1-indexed) column position of a span,\n/// or a named location keyword.\n/// @param {list} $columns -\n/// Already-normalized list of columns in the grid.\n///\n/// @return {integer} -\n/// Numeric value for `$location`\n@function susy-normalize-location(\n $span,\n $location,\n $columns\n) {\n $count: length($columns);\n $normal-locations: (\n 'first': 1,\n 'alpha': 1,\n 'last': $count - $span + 1,\n 'omega': $count - $span + 1,\n );\n\n @return map-get($normal-locations, $location) or $location;\n}\n", + "/// Shorthand Syntax Parser\n/// =======================\n/// The syntax parser converts [shorthand syntax][short]\n/// into a map of settings that can be compared/merged with\n/// other config maps and global setting.\n///\n/// [short]: b-api.html\n///\n/// @group x-parser\n\n\n\n// Parse\n// -----\n/// The `parse` function provides all the syntax-sugar in Susy,\n/// converting user shorthand\n/// into a usable map of keys and values\n/// that can be normalized and passed to Su.\n///\n/// @group x-parser\n/// @see $susy\n///\n/// @param {list} $shorthand -\n/// Shorthand expression to define the width of the span,\n/// optionally containing:\n/// - a count, length, or column-list span;\n/// - `at $n`, `first`, or `last` location on asymmetrical grids;\n/// - `narrow`, `wide`, or `wider` for optionally spreading\n/// across adjacent gutters;\n/// - `of $n ` for available grid columns\n/// and spread of the container\n/// (span counts like `of 6` are only valid\n/// in the context of symmetrical grids);\n/// - and `set-gutters $n` to override global gutter settings\n/// @param {bool} $context-only [false] -\n/// Allow the parser to ignore span and span-spread values,\n/// only parsing context and container-spread.\n/// This makes it possible to accept spanless values,\n/// like the `gutters()` syntax.\n/// When parsing context-only,\n/// the `of` indicator is optional.\n///\n/// @return {map} -\n/// Map of span and grid settings\n/// parsed from shorthand input –\n/// including all the properties available globally –\n/// `columns`, `gutters`, `spread`, `container-spread` –\n/// along with the span-specific properties\n/// `span`, and `location`.\n///\n/// @throw\n/// when a shorthand value is not recognized\n@function susy-parse(\n $shorthand,\n $context-only: false\n) {\n $parse-error: 'Unknown shorthand property:';\n $options: (\n 'first': 'location',\n 'last': 'location',\n 'alpha': 'location',\n 'omega': 'location',\n 'narrow': 'spread',\n 'wide': 'spread',\n 'wider': 'spread',\n );\n\n $return: ();\n $span: null;\n $columns: null;\n\n $of: null;\n $next: false;\n\n // Allow context-only shorthand, without span\n @if ($context-only) and (not index($shorthand, 'of')) {\n @if su-valid-columns($shorthand, 'fail-silent') {\n $shorthand: 'of' $shorthand;\n } @else {\n $shorthand: join('of', $shorthand);\n }\n }\n\n // loop through the shorthand list\n @for $i from 1 through length($shorthand) {\n $item: nth($shorthand, $i);\n $type: type-of($item);\n $error: false;\n $details: '[#{$type}] `#{$item}`';\n\n // if we know what's supposed to be coming next…\n @if $next {\n\n // Add to the return map\n $return: map-merge($return, ($next: $item));\n\n // Reset next to `false`\n $next: false;\n\n } @else { // If we don't know what's supposed to be coming…\n\n // Keywords…\n @if ($type == 'string') {\n // Check the map for keywords…\n @if map-has-key($options, $item) {\n $setting: map-get($options, $item);\n\n // Spread could be on the span or the container…\n @if ($setting == 'spread') and ($of) {\n $return: map-merge($return, ('container-spread': $item));\n } @else {\n $return: map-merge($return, ($setting: $item));\n }\n\n } @else if ($item == 'all') {\n // `All` is a span shortcut\n $span: 'all';\n } @else if ($item == 'at') {\n // Some keywords setup what's next…\n $next: 'location';\n } @else if ($item == 'set-gutters') {\n $next: 'gutters';\n } @else if ($item == 'of') {\n $of: true;\n } @else {\n $error: true;\n }\n\n } @else if ($type == 'number') or ($type == 'list') { // Numbers & lists…\n\n @if not ($span or $of) {\n // We don't have a span, and we're not expecting context…\n $span: $item;\n } @else if ($of) and (not $columns) {\n // We are expecting context…\n $columns: $item;\n } @else {\n $error: true;\n }\n\n } @else {\n $error: true;\n }\n }\n\n @if $error {\n @return _susy-error('#{$parse-error} #{$details}', 'susy-parse');\n }\n }\n\n // If we have span, merge it in\n @if $span {\n $return: map-merge($return, ('span': $span));\n }\n\n // If we have columns, merge them in\n @if $columns {\n $return: map-merge($return, ('columns': $columns));\n }\n\n // Return the map of settings…\n @return $return;\n}\n", + "/// Syntax Utilities for Extending Susy\n/// ===================================\n/// There are many steps involved\n/// when translating between the Susy syntax layer,\n/// and the Su core math.\n/// That entire process can be condensed with these two functions.\n/// For anyone that wants to access the full power of Susy,\n/// and build their own plugins, functions, or mixins –\n/// this is the primary API for compiling user input,\n/// and accessing the core math.\n///\n/// This is the same technique we use internally,\n/// to keep our API layer simple and light-weight.\n/// Every function accepts two arguments,\n/// a \"shorthand\" description of the span or context,\n/// and an optional settings-map to override global defaults.\n///\n/// - Use `susy-compile()` to parse, merge, and normalize\n/// all the user settings into a single map.\n/// - Then use `su-call()` to call one of the core math functions,\n/// with whatever data is needed for that function.\n///\n/// @group plugin-utils\n/// @see susy-compile\n/// @see su-call\n///\n/// @example scss - Susy API `gutter` function\n/// @function susy-gutter(\n/// $context: susy-get('columns'),\n/// $config: ()\n/// ) {\n/// // compile and normalize all user arguments and global settings\n/// $context: susy-compile($context, $config, 'context-only');\n/// // call `su-gutter` with the appropriate data\n/// @return su-call('su-gutter', $context);\n/// }\n///\n/// @example scss - Sample `span` mixin for floated grids\n/// @mixin span(\n/// $span,\n/// $config: ()\n/// ) {\n/// $context: susy-compile($span, $config);\n/// width: su-call('su-span', $context);\n///\n/// @if index($span, 'last') {\n/// float: right;\n/// } @else {\n/// float: left;\n/// margin-right: su-call('su-gutter', $context);\n/// }\n/// }\n\n\n\n// Compile\n// -------\n/// Susy's syntax layer has various moving parts,\n/// with syntax-parsing for the grid/span shorthand,\n/// and normalization for each of the resulting values.\n/// The compile function rolls this all together\n/// in a single call –\n/// for quick access from our internal API functions,\n/// or any additional functions and mixins you add to your project.\n/// Pass user input and configuration maps to the compiler,\n/// and it will hand back a map of values ready for Su.\n/// Combine this with the `su-call` function\n/// to quickly parse, normalize, and process grid calculations.\n///\n/// @group plugin-utils\n/// @see su-call\n///\n/// @param {list | map} $shorthand -\n/// Shorthand expression to define the width of the span,\n/// optionally containing:\n/// - a count, length, or column-list span;\n/// - `at $n`, `first`, or `last` location on asymmetrical grids;\n/// - `narrow`, `wide`, or `wider` for optionally spreading\n/// across adjacent gutters;\n/// - `of $n ` for available grid columns\n/// and spread of the container\n/// (span counts like `of 6` are only valid\n/// in the context of symmetrical grids);\n/// - and `set-gutters $n` to override global gutter settings\n/// @param {map} $config [null] -\n/// Optional map of Susy grid configuration settings\n/// @param {bool} $context-only [false] -\n/// Allow the parser to ignore span and span-spread values,\n/// only parsing context and container-spread\n///\n/// @return {map} -\n/// Parsed and normalized map of settings,\n/// based on global and local configuration,\n/// alongwith shorthad adjustments.\n///\n/// @example scss -\n/// $user-input: 3 wide of susy-repeat(6, 120px) set-gutters 10px;\n/// $grid-data: susy-compile($user-input, $susy);\n///\n/// @each $key, $value in $grid-data {\n/// /* #{$key}: #{$value}, */\n/// }\n@function susy-compile(\n $short,\n $config: null,\n $context-only: false\n) {\n // Get and normalize config\n $config: if($config, susy-settings($config), susy-settings());\n $normal-config: susy-normalize($config);\n\n // Parse and normalize shorthand\n @if (type-of($short) != 'map') and (length($short) > 0) {\n $short: susy-parse($short, $context-only);\n }\n\n $normal-short: susy-normalize($short, $normal-config);\n\n // Merge and return\n @return map-merge($normal-config, $normal-short);\n}\n\n\n\n// Call\n// ----\n/// The Susy parsing and normalization process\n/// results in a map of configuration settings,\n/// much like the global `$susy` settings map.\n/// In order to pass that information along to Su math functions,\n/// the proper values have to be picked out,\n/// and converted to arguments.\n///\n/// The `su-call` function streamlines that process,\n/// weeding out the unnecessary data,\n/// and passing the rest along to Su in the proper format.\n/// Combine this with `susy-compile` to quickly parse,\n/// normalize, and process grid calculations.\n///\n/// @group plugin-utils\n///\n/// @require su-span\n/// @require su-gutter\n/// @require su-slice\n/// @see susy-compile\n///\n/// @param {'su-span' | 'su-gutter' | 'su-slice'} $name -\n/// Name of the Su math function to call.\n/// @param {map} $config -\n/// Parsed and normalized map of Susy configuration settings\n/// to use for math-function arguments.\n///\n/// @return {*} -\n/// Results of the function being called.\n///\n/// @example scss -\n/// $user-input: 3 wide of susy-repeat(6, 120px) set-gutters 10px;\n/// $grid-data: susy-compile($user-input, $susy);\n///\n/// .su-span {\n/// width: su-call('su-span', $grid-data);\n/// }\n@function su-call(\n $name,\n $config\n) {\n $grid-function-args: (\n 'su-span': ('span', 'columns', 'gutters', 'spread', 'container-spread', 'location'),\n 'su-gutter': ('columns', 'gutters', 'container-spread'),\n 'su-slice': ('span', 'columns', 'location'),\n );\n\n $args: map-get($grid-function-args, $name);\n\n @if not $args {\n $options: 'Try one of these: #{map-keys($grid-function-args)}';\n @return _susy-error(\n '#{$name} is not a public Su function. #{$options}',\n 'su-call');\n }\n\n $call: if(function-exists('get-function'), get-function($name), $name);\n $output: ();\n\n @each $arg in $args {\n $value: map-get($config, $arg);\n $output: if($value, map-merge($output, ($arg: $value)), $output);\n }\n\n @return call($call, $output...);\n}\n", + "/// Susy3 API Functions\n/// ===================\n/// These three functions form the core of Susy's\n/// layout-building grid API.\n///\n/// - Use `span()` and `gutter()` to return any grid-width,\n/// and apply the results wherever you need them:\n/// CSS `width`, `margin`, `padding`, `flex-basis`, `transform`, etc.\n/// - For asymmetrical-fluid grids,\n/// `slice()` can help manage your nesting context.\n///\n/// All three functions come with an unprefixed alias by default,\n/// using the `susy` import.\n/// Import the `susy-prefix` partial instead,\n/// if you only only want prefixed versions of the API.\n///\n/// This is a thin syntax-sugar shell around\n/// the \"Su\" core-math functions: `su-span`, `su-gutter`, and `su-slice`.\n/// If you prefer the more constrained syntax of the math engine,\n/// you are welcome to use those functions instead.\n///\n/// @group b-api\n/// @see susy-span\n/// @see susy-gutter\n/// @see susy-slice\n/// @see su-span\n/// @see su-gutter\n/// @see su-slice\n\n\n\n/// ## Shorthand\n///\n/// All functions draw on the same shorthand syntax in two parts,\n/// seperated by the word `of`.\n///\n/// ### Span Syntax: `` [`` ``]\n/// The first part describes the\n/// **span** width, location, and spread in any order.\n/// Only the width is required:\n///\n/// - `span(2)` will return the width of 2 columns.\n/// - `span(3 wide)` will return 3-columns, with an additional gutter.\n/// - location is only needed with asymmetrical grids,\n/// where `span(3 at 2)` will return the width of\n/// specific columns on the grid.\n/// Since these are functions, they will not handle placement for you.\n///\n/// ### Context Syntax: `[of ]`\n/// The second half of Susy's shorthand\n/// describes the grid-**context** –\n/// available columns, container-spread, and optional gutter override –\n/// in any order.\n/// All of these settings have globally-defined defaults:\n///\n/// - `span(2 of 6)` will set the context to\n/// a slice of 6 columns from the global grid.\n/// More details below.\n/// - `span(2 of 12 wide)` changes the container-spread\n/// as well as the column-context.\n/// - `span(2 of 12 set-gutters 0.5em)`\n/// will override the global gutters setting\n/// for this one calculation.\n///\n/// A single unitless number for `columns`\n/// will be treated as a slice of the parent grid.\n/// On a grid with `columns: susy-repeat(12, 120px)`,\n/// the shorthand `of 4` will use the parent `120px` column-width.\n/// You can also be more explicit,\n/// and say `of susy-repeat(4, 100px)`.\n/// If you are using asymmetrical grids,\n/// like `columns: (1 1 2 3 5 8)`,\n/// Susy can't slice it for you without knowing which columns you want.\n/// The `slice` function accepts exactly the same syntax as `span`,\n/// but returns a list of columns rather than a width.\n/// Use it in your context like `of slice(first 3)`.\n///\n/// @group b-api\n\n\n\n// Susy Span\n// ---------\n/// This is the primary function in Susy —\n/// used to return the width of a span across one or more columns,\n/// and any relevant gutters along the way.\n/// With the default settings,\n/// `span(3)` will return the width of 3 columns,\n/// and the 2 intermediate gutters.\n/// This can be used to set the `width` property of grid elements,\n/// or `margin` and `padding`\n/// to push, pull, and pad your elements.\n///\n/// - This is a thin syntax-sugar shell around\n/// the core-math `su-span()` function.\n/// - The un-prefixed alias `span()` is available by default.\n///\n/// @group b-api\n/// @see su-span\n/// @see $susy\n///\n/// @param {list} $span -\n/// Shorthand expression to define the width of the span,\n/// optionally containing:\n/// - a count, length, or column-list span.\n/// - `at $n`, `first`, or `last` location on asymmetrical grids,\n/// where `at 1 == first`,\n/// and `last` will calculate the proper location\n/// based on columns and span.\n/// - `narrow`, `wide`, or `wider` for optionally spreading\n/// across adjacent gutters.\n/// - `of $n ` for available grid columns\n/// and spread of the container.\n/// Span counts like `of 6` are valid\n/// in the context of symmetrical grids,\n/// where Susy can safely infer a slice of the parent columns.\n/// - and `set-gutters $n` to override global gutter settings.\n///\n/// @param {map} $config [()] -\n/// Optional map of Susy grid configuration settings.\n/// See `$susy` documentation for details.\n///\n/// @return {length} -\n/// Calculated length value, using the units given,\n/// or converting to `%` for fraction-based grids,\n/// or a full `calc` function when units/fractions\n/// are not comparable outside the browser.\n///\n/// @example scss - span half the grid\n/// .foo {\n/// // the result is a bit under 50% to account for gutters\n/// width: susy-span(6 of 12);\n/// }\n///\n/// @example scss - span a specific segment of asymmetrical grid\n/// .foo {\n/// width: susy-span(3 at 3 of (1 2 3 5 8));\n/// }\n@function susy-span(\n $span,\n $config: ()\n) {\n $output: susy-compile($span, $config);\n\n @if map-get($output, 'span') {\n @return su-call('su-span', $output);\n }\n\n $actual: '[#{type-of($span)}] `#{inspect($span)}`';\n @return _susy-error(\n 'Unable to determine span value from #{$actual}.',\n 'susy-span');\n}\n\n\n\n// Susy Gutter\n// -----------\n/// The gutter function returns\n/// the width of a single gutter on your grid,\n/// to be applied where you see fit –\n/// on `margins`, `padding`, `transform`, or element `width`.\n///\n/// - This is a thin syntax-sugar shell around\n/// the core-math `su-gutter()` function.\n/// - The un-prefixed alias `gutter()` is available by default.\n///\n/// @group b-api\n/// @see su-gutter\n/// @see $susy\n///\n/// @param {list | number} $context [null] -\n/// Optional context for nested gutters,\n/// including shorthand for\n/// `columns`, `gutters`, and `container-spread`\n/// (additional shorthand will be ignored)\n///\n/// @param {map} $config [()] -\n/// Optional map of Susy grid configuration settings.\n/// See `$susy` documentation for details.\n///\n/// @return {length} -\n/// Width of a gutter as `%` of current context,\n/// or in the units defined by `column-width` when available\n///\n/// @example scss - add gutters before or after an element\n/// .floats {\n/// float: left;\n/// width: span(3 of 6);\n/// margin-left: gutter(of 6);\n/// }\n///\n/// @example scss - add gutters to padding\n/// .flexbox {\n/// flex: 1 1 span(3 wide of 6 wide);\n/// padding: gutter(of 6) / 2;\n/// }\n///\n@function susy-gutter(\n $context: susy-get('columns'),\n $config: ()\n) {\n $context: susy-compile($context, $config, 'context-only');\n\n @return su-call('su-gutter', $context);\n}\n\n\n\n// Susy Slice\n// ----------\n/// Working with asymmetrical grids (un-equal column widths)\n/// can be challenging – \n/// expecially when they involve fluid/fractional elements.\n/// Describing a context `of (15em 6em 6em 6em 15em)` is a lot\n/// to put inside the span or gutter function shorthand.\n/// This slice function returns a sub-slice of asymmetrical columns to use\n/// for a nested context.\n/// `slice(3 at 2)` will give you a subset of the global grid,\n/// spanning 3 columns, starting with the second.\n///\n/// - This is a thin syntax-sugar shell around\n/// the core-math `su-slice()` function.\n/// - The un-prefixed alias `slice()` is available by default.\n///\n/// @group b-api\n/// @see su-slice\n/// @see $susy\n///\n/// @param {list} $span -\n/// Shorthand expression to define the subset span, optionally containing:\n/// - `at $n`, `first`, or `last` location on asymmetrical grids;\n/// - `of $n ` for available grid columns\n/// and spread of the container\n/// - Span-counts like `of 6` are only valid\n/// in the context of symmetrical grids\n/// - Valid spreads include `narrow`, `wide`, or `wider`\n///\n/// @param {map} $config [()] -\n/// Optional map of Susy grid configuration settings.\n/// See `$susy` documentation for details.\n///\n/// @return {list} -\n/// Subset list of columns for use for a nested context\n///\n/// @example scss - Return a nested segment of asymmetrical grid\n/// $context: susy-slice(3 at 3 of (1 2 3 5 8));\n/// /* $context: #{$context}; */\n@function susy-slice(\n $span,\n $config: ()\n) {\n $span: susy-compile($span, $config);\n\n @return su-call('su-slice', $span);\n}\n\n\n\n/// ## Building Grids\n/// The web has come a long way\n/// since the days of double-margin-hacks\n/// and inconsistent subpixel rounding.\n/// In addition to floats and tables,\n/// we can now use much more powerful tools,\n/// like flexbox and CSS grid,\n/// to build more interesting and responsive layouts.\n///\n/// With Susy3, we hope you'll start moving in that direction.\n/// You can still build classic 12-column Grid Systems,\n/// and we'll help you get there,\n/// but Susy3 is primarily designed for a grid-math-on-demand\n/// approach to layout:\n/// applying our functions only where you really need grid math.\n/// Read the [intro article by OddBird][welcome] for more details.\n///\n/// [welcome]: http://oddbird.net/2017/06/28/susy3/\n///\n/// @group b-api\n/// @link http://oddbird.net/2017/06/28/susy3/ Article: Welcome to Susy3\n///\n/// @example scss - floats\n/// .float {\n/// width: span(3);\n/// margin-right: gutter();\n/// }\n///\n/// @example scss - flexbox\n/// .flexbox {\n/// flex: 1 1 span(3);\n/// // half a gutter on either side…\n/// padding: 0 gutter() / 2;\n/// }\n///\n/// @example scss - pushing and pulling\n/// .push-3 {\n/// margin-left: span(3 wide);\n/// }\n///\n/// .pull-3 {\n/// margin-left: 0 - span(3 wide);\n/// }\n///\n/// @example scss - building an attribute system\n/// // markup example:
\n/// [data-span] {\n/// float: left;\n///\n/// &:not([data-span*='last']) {\n/// margin-right: gutter();\n/// }\n/// }\n///\n/// @for $span from 1 through length(susy-get('columns')) {\n/// [data-span*='#{$span}'] {\n/// width: span($span);\n/// }\n/// }\n", + "// Unprefix Susy\n// =============\n\n\n// Span\n// ----\n/// Un-prefixed alias for `susy-span`\n/// (available by default)\n///\n/// @group api\n/// @alias susy-span\n///\n/// @param {list} $span\n/// @param {map} $config [()]\n@function span(\n $span,\n $config: ()\n) {\n @return susy-span($span, $config);\n}\n\n\n// Gutter\n// ------\n/// Un-prefixed alias for `susy-gutter`\n/// (available by default)\n///\n/// @group api\n/// @alias susy-gutter\n///\n/// @param {integer | list} $context [null] -\n/// @param {map} $config [()]\n@function gutter(\n $context: susy-get('columns'),\n $config: ()\n) {\n @return susy-gutter($context, $config);\n}\n\n\n// Slice\n// -----\n/// Un-prefixed alias for `susy-slice`\n/// (available by default)\n///\n/// @group api\n/// @alias susy-slice\n///\n/// @param {list} $span\n/// @param {map} $config [()]\n@function slice(\n $span,\n $config: ()\n) {\n @return susy-slice($span, $config);\n}\n", + "/* ==========================================================================\n MIXINS\n ========================================================================== */\n\n%tab-focus {\n /* Default*/\n outline: thin dotted $focus-color;\n /* Webkit*/\n outline: 5px auto $focus-color;\n outline-offset: -2px;\n}\n\n/*\n em function\n ========================================================================== */\n\n@function em($target, $context: $doc-font-size) {\n @return ($target / $context) * 1em;\n}\n\n\n/*\n Bourbon clearfix\n ========================================================================== */\n\n/*\n * Provides an easy way to include a clearfix for containing floats.\n * link http://cssmojo.com/latest_new_clearfix_so_far/\n *\n * example scss - Usage\n *\n * .element {\n * @include clearfix;\n * }\n *\n * example css - CSS Output\n *\n * .element::after {\n * clear: both;\n * content: \"\";\n * display: table;\n * }\n*/\n\n@mixin clearfix {\n clear: both;\n\n &::after {\n clear: both;\n content: \"\";\n display: table;\n }\n}\n\n/*\n Compass YIQ Color Contrast\n https://github.com/easy-designs/yiq-color-contrast\n ========================================================================== */\n\n@function yiq-is-light(\n $color,\n $threshold: $yiq-contrasted-threshold\n) {\n $red: red($color);\n $green: green($color);\n $blue: blue($color);\n\n $yiq: (($red*299)+($green*587)+($blue*114))/1000;\n\n @if $yiq-debug { @debug $yiq, $threshold; }\n\n @return if($yiq >= $threshold, true, false);\n}\n\n@function yiq-contrast-color(\n $color,\n $dark: $yiq-contrasted-dark-default,\n $light: $yiq-contrasted-light-default,\n $threshold: $yiq-contrasted-threshold\n) {\n @return if(yiq-is-light($color, $threshold), $yiq-contrasted-dark-default, $yiq-contrasted-light-default);\n}\n\n@mixin yiq-contrasted(\n $background-color,\n $dark: $yiq-contrasted-dark-default,\n $light: $yiq-contrasted-light-default,\n $threshold: $yiq-contrasted-threshold\n) {\n background-color: $background-color;\n color: yiq-contrast-color($background-color, $dark, $light, $threshold);\n}", + "/* ==========================================================================\n STYLE RESETS\n ========================================================================== */\n\n* { box-sizing: border-box; }\n\nhtml {\n /* apply a natural box layout model to all elements */\n box-sizing: border-box;\n background-color: $background-color;\n font-size: 16px;\n\n @include breakpoint($medium) {\n font-size: 18px;\n }\n\n @include breakpoint($large) {\n font-size: 20px;\n }\n\n @include breakpoint($x-large) {\n font-size: 22px;\n }\n\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n}\n\n/* Remove margin */\n\nbody { margin: 0; }\n\n/* Selected elements */\n\n::-moz-selection {\n color: #fff;\n background: #000;\n}\n\n::selection {\n color: #fff;\n background: #000;\n}\n\n/* Display HTML5 elements in IE6-9 and FF3 */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection {\n display: block;\n}\n\n/* Display block in IE6-9 and FF3 */\n\naudio,\ncanvas,\nvideo {\n display: inline-block;\n *display: inline;\n *zoom: 1;\n}\n\n/* Prevents modern browsers from displaying 'audio' without controls */\n\naudio:not([controls]) {\n display: none;\n}\n\na {\n color: $link-color;\n}\n\n/* Apply focus state */\n\na:focus {\n @extend %tab-focus;\n}\n\n/* Remove outline from links */\n\na:hover,\na:active {\n outline: 0;\n}\n\n/* Prevent sub and sup affecting line-height in all browsers */\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n/* img border in anchor's and image quality */\n\nimg {\n /* Responsive images (ensure images don't scale beyond their parents) */\n max-width: 100%; /* part 1: Set a maximum relative to the parent*/\n width: auto\\9; /* IE7-8 need help adjusting responsive images*/\n height: auto; /* part 2: Scale the height according to the width, otherwise you get stretching*/\n\n vertical-align: middle;\n border: 0;\n -ms-interpolation-mode: bicubic;\n}\n\n/* Prevent max-width from affecting Google Maps */\n\n#map_canvas img,\n.google-maps img {\n max-width: none;\n}\n\n/* Consistent form font size in all browsers, margin changes, misc */\n\nbutton,\ninput,\nselect,\ntextarea {\n margin: 0;\n font-size: 100%;\n vertical-align: middle;\n}\n\nbutton,\ninput {\n *overflow: visible; /* inner spacing ie IE6/7*/\n line-height: normal; /* FF3/4 have !important on line-height in UA stylesheet*/\n}\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner { /* inner padding and border oddities in FF3/4*/\n padding: 0;\n border: 0;\n}\n\nbutton,\nhtml input[type=\"button\"], // avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; /* corrects inability to style clickable `input` types in iOS*/\n cursor: pointer; /* improves usability and consistency of cursor style between image-type `input` and others*/\n}\n\nlabel,\nselect,\nbutton,\ninput[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"],\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n cursor: pointer; /* improves usability and consistency of cursor style between image-type `input` and others*/\n}\n\ninput[type=\"search\"] { /* Appearance in Safari/Chrome*/\n box-sizing: border-box;\n -webkit-appearance: textfield;\n}\n\ninput[type=\"search\"]::-webkit-search-decoration,\ninput[type=\"search\"]::-webkit-search-cancel-button {\n -webkit-appearance: none; /* inner-padding issues in Chrome OSX, Safari 5*/\n}\n\ntextarea {\n overflow: auto; /* remove vertical scrollbar in IE6-9*/\n vertical-align: top; /* readability and alignment cross-browser*/\n}", + "/* ==========================================================================\n BASE ELEMENTS\n ========================================================================== */\n\nhtml {\n /* sticky footer fix */\n position: relative;\n min-height: 100%;\n font-size: 16px; // change to whatever; Angadh put this here to stop the annoying resizing.\n}\n\nbody {\n margin: 0;\n padding: 0;\n color: $text-color;\n font-family: $body-font;//$global-font-family;\n line-height: 1.5;\n\n &.overflow--hidden {\n /* when primary navigation is visible, the content in the background won't scroll */\n overflow: hidden;\n }\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin: 2em 0 0.5em;\n line-height: 1.2;\n font-family: $sans-font;//$header-font-family;\n font-weight: bold;\n}\n\nh1 {\n margin-top: 0;\n font-size: $h-size-1;\n}\n\nh2 {\n font-size: $h-size-2;\n}\n\nh3 {\n font-size: $h-size-3;\n}\n\nh4 {\n font-size: $h-size-4;\n}\n\nh5 {\n font-size: $h-size-5;\n}\n\nh6 {\n font-size: $h-size-6;\n}\n\nsmall,\n.small {\n font-size: $type-size-6;\n}\n\np {\n margin-bottom: 1.3em;\n}\n\nu,\nins {\n text-decoration: none;\n border-bottom: 1px solid $text-color;\n a {\n color: inherit;\n }\n}\n\ndel a {\n color: inherit;\n}\n\n/* reduce orphans and widows when printing */\n\np,\npre,\nblockquote,\nul,\nol,\ndl,\nfigure,\ntable,\nfieldset {\n orphans: 3;\n widows: 3;\n}\n\n/* abbreviations */\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: none;\n cursor: help;\n border-bottom: 1px dotted $text-color;\n}\n\n/* blockquotes */\n\nblockquote {\n margin: 2em 1em 2em 0;\n padding-left: 1em;\n padding-right: 1em;\n font-style: italic;\n border-left: 0.25em solid $primary-color;\n\n cite {\n font-style: italic;\n\n &:before {\n content: \"\\2014\";\n padding-right: 5px;\n }\n }\n}\n\n/* links */\n\na {\n &:focus {\n @extend %tab-focus;\n }\n\n &:visited {\n color: $link-color-visited;\n }\n\n &:hover {\n color: $link-color-hover;\n outline: 0;\n }\n}\n\n/* buttons */\n\nbutton:focus {\n @extend %tab-focus;\n}\n\n/* code */\n\ntt,\ncode,\nkbd,\nsamp,\npre {\n font-family: $monospace;\n}\n\npre {\n overflow-x: auto; /* add scrollbars to wide code blocks*/\n}\n\n/* horizontal rule */\n\nhr {\n display: block;\n margin: 1em 0;\n border: 0;\n border-top: 1px solid $border-color;\n}\n\n/* lists */\n\nul li,\nol li {\n margin-bottom: 0.5em;\n}\n\nli ul,\nli ol {\n margin-top: 0.5em;\n}\n\n/*\n Media and embeds\n ========================================================================== */\n\n/* Figures and images */\n\nfigure {\n display: -webkit-box;\n display: flex;\n -webkit-box-pack: justify;\n justify-content: space-between;\n -webkit-box-align: start;\n align-items: flex-start;\n flex-wrap: wrap;\n margin: 2em 0;\n\n img,\n iframe,\n .fluid-width-video-wrapper {\n margin-bottom: 1em;\n }\n\n img {\n width: 100%;\n border-radius: $border-radius;\n -webkit-transition: $global-transition;\n transition: $global-transition;\n }\n\n > a {\n display: block;\n }\n\n &.half {\n > a,\n > img {\n @include breakpoint($small) {\n width: calc(50% - 0.5em);\n }\n }\n\n figcaption {\n width: 100%;\n }\n }\n\n &.third {\n > a,\n > img {\n @include breakpoint($small) {\n width: calc(33.3333% - 0.5em);\n }\n }\n\n figcaption {\n width: 100%;\n }\n }\n}\n\n/* Figure captions */\n\nfigcaption {\n margin-bottom: 0.5em;\n color: $muted-text-color;\n font-family: $caption-font-family;\n font-size: $type-size-6;\n\n a {\n -webkit-transition: $global-transition;\n transition: $global-transition;\n\n &:hover {\n color: $link-color-hover;\n }\n }\n}\n\n/* Fix IE9 SVG bug */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/*\n Navigation lists\n ========================================================================== */\n\n/**\n * Removes margins, padding, and bullet points from navigation lists\n *\n * Example usage:\n * \n */\n\nnav {\n ul {\n margin: 0;\n padding: 0;\n }\n\n li {\n list-style: none;\n }\n\n a {\n text-decoration: none;\n }\n\n /* override white-space for nested lists */\n ul li,\n ol li {\n margin-bottom: 0;\n }\n\n li ul,\n li ol {\n margin-top: 0;\n }\n}\n\n/*\n Global animation transition\n ========================================================================== */\n\nb,\ni,\nstrong,\nem,\nblockquote,\np,\nq,\nspan,\nfigure,\nimg,\nh1,\nh2,\nheader,\ninput,\na,\ntr,\ntd,\nform button,\ninput[type=\"submit\"],\n.btn,\n.highlight,\n.archive__item-teaser {\n -webkit-transition: $global-transition;\n transition: $global-transition;\n}\n", + "/* ==========================================================================\n Forms\n ========================================================================== */\n\nform {\n margin: 0 0 5px 0;\n padding: 1em;\n background-color: $form-background-color;\n\n fieldset {\n margin-bottom: 5px;\n padding: 0;\n border-width: 0;\n }\n\n legend {\n display: block;\n width: 100%;\n margin-bottom: 5px * 2;\n *margin-left: -7px;\n padding: 0;\n color: $text-color;\n border: 0;\n white-space: normal;\n }\n\n p {\n margin-bottom: (5px / 2);\n }\n\n ul {\n list-style-type: none;\n margin: 0 0 5px 0;\n padding: 0;\n }\n\n br {\n display: none;\n }\n}\n\nlabel,\ninput,\nbutton,\nselect,\ntextarea {\n vertical-align: baseline;\n *vertical-align: middle;\n}\n\ninput,\nbutton,\nselect,\ntextarea {\n box-sizing: border-box;\n font-family: $sans-serif;\n}\n\nlabel {\n display: block;\n margin-bottom: 0.25em;\n color: $text-color;\n cursor: pointer;\n\n small {\n font-size: $type-size-6;\n }\n\n input,\n textarea,\n select {\n display: block;\n }\n}\n\ninput,\ntextarea,\nselect {\n display: inline-block;\n width: 100%;\n padding: 0.25em;\n margin-bottom: 0.5em;\n color: $text-color;\n background-color: $background-color;\n border: $border-color;\n border-radius: $border-radius;\n box-shadow: $box-shadow;\n}\n\n.input-mini {\n width: 60px;\n}\n\n.input-small {\n width: 90px;\n}\n\ninput[type=\"image\"],\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n width: auto;\n height: auto;\n padding: 0;\n margin: 3px 0;\n *margin-top: 0;\n line-height: normal;\n cursor: pointer;\n border-radius: 0;\n border: 0 \\9;\n box-shadow: none;\n}\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n *width: 13px;\n *height: 13px;\n}\n\ninput[type=\"image\"] {\n border: 0;\n}\n\ninput[type=\"file\"] {\n width: auto;\n padding: initial;\n line-height: initial;\n border: initial;\n background-color: transparent;\n background-color: initial;\n box-shadow: none;\n}\n\ninput[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n width: auto;\n height: auto;\n cursor: pointer;\n *overflow: visible;\n}\n\nselect,\ninput[type=\"file\"] {\n *margin-top: 4px;\n}\n\nselect {\n width: auto;\n background-color: #fff;\n}\n\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\ntextarea {\n resize: vertical;\n height: auto;\n overflow: auto;\n vertical-align: top;\n}\n\ninput[type=\"hidden\"] {\n display: none;\n}\n\n.form {\n position: relative;\n}\n\n.radio,\n.checkbox {\n padding-left: 18px;\n font-weight: normal;\n}\n\n.radio input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"] {\n float: left;\n margin-left: -18px;\n}\n\n.radio.inline,\n.checkbox.inline {\n display: inline-block;\n padding-top: 5px;\n margin-bottom: 0;\n vertical-align: middle;\n}\n\n.radio.inline + .radio.inline,\n.checkbox.inline + .checkbox.inline {\n margin-left: 10px;\n}\n\n/*\n Disabled state\n ========================================================================== */\n\ninput[disabled],\nselect[disabled],\ntextarea[disabled],\ninput[readonly],\nselect[readonly],\ntextarea[readonly] {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/*\n Focus & active state\n ========================================================================== */\n\ninput:focus,\ntextarea:focus {\n border-color: $primary-color;\n outline: 0;\n outline: thin dotted \\9;\n box-shadow: inset 0 1px 3px rgba($text-color, 0.06),\n 0 0 5px rgba($primary-color, 0.7);\n}\n\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus,\nselect:focus {\n box-shadow: none;\n}\n\n/*\n Help text\n ========================================================================== */\n\n.help-block,\n.help-inline {\n color: $muted-text-color;\n}\n\n.help-block {\n display: block;\n margin-bottom: 1em;\n line-height: 1em;\n}\n\n.help-inline {\n display: inline-block;\n vertical-align: middle;\n padding-left: 5px;\n}\n\n/*\n .form-group\n ========================================================================== */\n\n.form-group {\n margin-bottom: 5px;\n padding: 0;\n border-width: 0;\n}\n\n/*\n .form-inline\n ========================================================================== */\n\n.form-inline input,\n.form-inline textarea,\n.form-inline select {\n display: inline-block;\n margin-bottom: 0;\n}\n\n.form-inline label {\n display: inline-block;\n}\n\n.form-inline .radio,\n.form-inline .checkbox,\n.form-inline .radio {\n padding-left: 0;\n margin-bottom: 0;\n vertical-align: middle;\n}\n\n.form-inline .radio input[type=\"radio\"],\n.form-inline .checkbox input[type=\"checkbox\"] {\n float: left;\n margin-left: 0;\n margin-right: 3px;\n}\n\n/*\n .form-search\n ========================================================================== */\n\n.form-search input,\n.form-search textarea,\n.form-search select {\n display: inline-block;\n margin-bottom: 0;\n}\n\n.form-search .search-query {\n padding-left: 14px;\n padding-right: 14px;\n margin-bottom: 0;\n border-radius: 14px;\n}\n\n.form-search label {\n display: inline-block;\n}\n\n.form-search .radio,\n.form-search .checkbox,\n.form-inline .radio {\n padding-left: 0;\n margin-bottom: 0;\n vertical-align: middle;\n}\n\n.form-search .radio input[type=\"radio\"],\n.form-search .checkbox input[type=\"checkbox\"] {\n float: left;\n margin-left: 0;\n margin-right: 3px;\n}\n\n/*\n .form--loading\n ========================================================================== */\n\n.form--loading:before {\n content: \"\";\n}\n\n.form--loading .form__spinner {\n display: block;\n}\n\n.form:before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(255, 255, 255, 0.7);\n z-index: 10;\n}\n\n.form__spinner {\n display: none;\n position: absolute;\n top: 50%;\n left: 50%;\n z-index: 11;\n}\n", + "/* ==========================================================================\n TABLES\n ========================================================================== */\n/*\ntable {\n margin-bottom: 1em;\n width: 100%;\n font-family: $global-font-family;\n font-size: $type-size-6;\n border-collapse: collapse;\n border: 1px solid $light-gray;\n\n & + table {\n margin-top: 1em;\n }\n}\n\nthead {\n background-color: $lighter-gray;\n border-bottom: 1px solid $light-gray;\n}\n\nth {\n padding: 0.5em;\n font-weight: bold;\n text-align: left;\n border-right: 1px solid $light-gray;\n}\n\ntd {\n padding: 0.5em;\n border-bottom: 1px solid $light-gray;\n border-right: 1px solid $light-gray;\n}\n\ntr, td, th {\n vertical-align: middle;\n}\n*/\n\n/*-- Table styling section - For Tufte-Jekyll, booktabs style is default for Markdown tables --*/\n\ntable, table.booktabs { width: auto; //making booktabs style tables the unstyled default in case someone uses Markdown styling\n //margin: 0 auto;\n border-spacing: 0px;\n border-top: 2px solid $border-color;\n border-bottom: 2px solid $border-color; }\n\n.booktabs th, th { border-bottom: 1px solid $border-color;\n padding: 0.65ex 0.5em 0.4ex 0.5em;\n font-weight: normal;\n //text-align: center; \n }\n\nth, td{ font-size: 1rem;\n line-height: 1.71428571; }\n\n.booktabs th.cmid, th { border-bottom: 1px solid lighten($border-color, 25%); }\n\n.booktabs th.nocmid { border-bottom: none; }\n\n.booktabs tbody tr:first-child td, tr:first-child td { padding-top: 0.65ex; } /* add space between thead row and tbody */\n\n.booktabs td, td { padding-left: 0.5em;\n padding-right: 0.5em;\n text-align: left; } \n\n.booktabs caption, caption { font-size: 90%;\n text-align: left;\n width: auto;\n margin-left: auto;\n margin-right: auto;\n margin-top: 1ex;\n caption-side: top; }\n\n.booktabs tbody tr, .booktabs thead tr th.l, .booktabs td.l { text-align: left !important; }\n.booktabs tbody tr, .booktabs thead tr th.c, .booktabs td.c { text-align: center !important; }\n.booktabs tbody tr, .booktabs thead tr th.r, .booktabs td.r { text-align: right !important; }\n\n.table-caption { float:right;\n clear:right;\n margin-right: -60%;\n width: 50%;\n margin-top: 0;\n margin-bottom: 0;\n font-size: 1.0rem;\n line-height: 1.96; }\n/* -- End of Table Styling section - For Tufte-Jekyll, booktabs style is default for Markdown tables --*/\n", + "/* ==========================================================================\n ANIMATIONS\n ========================================================================== */\n\n@-webkit-keyframes intro {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n\n@keyframes intro {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}", + "/* ==========================================================================\n BUTTONS\n ========================================================================== */\n\n/*\n Default button\n ========================================================================== */\n\n.btn {\n /* default */\n display: inline-block;\n margin-bottom: 0.25em;\n padding: 0.5em 1em;\n font-family: $sans-serif;\n font-size: $type-size-6;\n font-weight: bold;\n text-align: center;\n text-decoration: none;\n border-width: 0;\n border-radius: $border-radius;\n cursor: pointer;\n\n .icon {\n margin-right: 0.5em;\n }\n\n .icon + .hidden {\n margin-left: -0.5em; /* override for hidden text*/\n }\n\n /* button colors */\n $buttoncolors:\n (primary, $primary-color),\n (inverse, #fff),\n (light-outline, transparent),\n (success, $success-color),\n (warning, $warning-color),\n (danger, $danger-color),\n (info, $info-color),\n (facebook, $facebook-color),\n (twitter, $twitter-color),\n (linkedin, $linkedin-color);\n\n @each $buttoncolor, $color in $buttoncolors {\n &--#{$buttoncolor} {\n @include yiq-contrasted($color);\n @if ($buttoncolor == inverse) {\n border: 1px solid $border-color;\n }\n @if ($buttoncolor == light-outline) {\n border: 1px solid #fff;\n }\n\n &:visited {\n @include yiq-contrasted($color);\n }\n\n &:hover {\n @include yiq-contrasted(mix(#000, $color, 20%));\n }\n }\n }\n\n /* fills width of parent container */\n &--block {\n display: block;\n width: 100%;\n\n + .btn--block {\n margin-top: 0.25em;\n }\n }\n\n /* disabled */\n &--disabled {\n pointer-events: none;\n cursor: not-allowed;\n filter: alpha(opacity=65);\n box-shadow: none;\n opacity: 0.65;\n }\n\n /* extra large button */\n &--x-large {\n font-size: $type-size-4;\n }\n\n /* large button */\n &--large {\n font-size: $type-size-5;\n }\n\n /* small button */\n &--small {\n font-size: $type-size-7;\n }\n}", + "/* ==========================================================================\n NOTICE TEXT BLOCKS\n ========================================================================== */\n\n/**\n * Default Kramdown usage (no indents!):\n *
\n * #### Headline for the Notice\n * Text for the notice\n *
\n */\n\n@mixin notice($notice-color) {\n margin: 2em 0 !important; /* override*/\n padding: 1em;\n color: $text-color;\n font-family: $global-font-family;\n font-size: $type-size-6 !important;\n text-indent: initial; /* override*/\n background-color: mix($background-color, $notice-color, $notice-background-mix);\n border-radius: $border-radius;\n box-shadow: 0 1px 1px rgba($notice-color, 0.25);\n\n h4 {\n margin-top: 0 !important; /* override*/\n margin-bottom: 0.75em;\n line-height: inherit;\n }\n\n @at-root .page__content #{&} h4 {\n /* using at-root to override .page-content h4 font size*/\n margin-bottom: 0;\n font-size: 1em;\n }\n\n p {\n &:last-child {\n margin-bottom: 0 !important; /* override*/\n }\n }\n\n h4 + p {\n /* remove space above paragraphs that appear directly after notice headline*/\n margin-top: 0;\n padding-top: 0;\n }\n\n a {\n color: mix(#000, $notice-color, 10%);\n\n &:hover {\n color: mix(#000, $notice-color, 50%);\n }\n }\n\n @at-root #{selector-unify(&, \"blockquote\")} {\n border-left-color: mix(#000, $notice-color, 10%);\n }\n\n code {\n background-color: mix($background-color, $notice-color, $code-notice-background-mix)\n }\n\n\tpre code {\n\t\tbackground-color: inherit;\n\t}\n\n ul {\n &:last-child {\n margin-bottom: 0; /* override*/\n }\n }\n}\n\n/* Default notice */\n\n.notice {\n @include notice($light-gray);\n}\n\n/* Primary notice */\n\n.notice--primary {\n @include notice($primary-color);\n}\n\n/* Info notice */\n\n.notice--info {\n @include notice($info-color);\n}\n\n/* Warning notice */\n\n.notice--warning {\n @include notice($warning-color);\n}\n\n/* Success notice */\n\n.notice--success {\n @include notice($success-color);\n}\n\n/* Danger notice */\n\n.notice--danger {\n @include notice($danger-color);\n}\n", + "/* ==========================================================================\n MASTHEAD\n ========================================================================== */\n\n.masthead {\n position: relative;\n border-bottom: 1px solid $border-color;\n -webkit-animation: $intro-transition;\n animation: $intro-transition;\n -webkit-animation-delay: 0.15s;\n animation-delay: 0.15s;\n z-index: 20;\n\n &__inner-wrap {\n @include clearfix;\n margin-left: auto;\n margin-right: auto;\n padding: 1em;\n max-width: 100%;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n font-family: $sans-font;\n\n @include breakpoint($x-large) {\n max-width: $max-width;\n }\n\n nav {\n z-index: 10;\n }\n\n a {\n text-decoration: none;\n }\n }\n}\n\n.site-logo img {\n max-height: 2rem;\n}\n\n.site-title {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-item-align: center;\n align-self: center;\n font-weight: bold;\n // z-index: 20;\n}\n\n.site-subtitle {\n display: block;\n font-size: $type-size-8;\n}\n\n.masthead__menu {\n float: left;\n margin-left: 0;\n margin-right: 0;\n width: 100%;\n clear: both;\n\n .site-nav {\n margin-left: 0;\n\n @include breakpoint($small) {\n float: right;\n }\n }\n\n ul {\n margin: 0;\n padding: 0;\n clear: both;\n list-style-type: none;\n }\n}\n\n.masthead__menu-item {\n display: block;\n list-style-type: none;\n white-space: nowrap;\n\n &--lg {\n padding-right: 2em;\n font-weight: 700;\n }\n}\n", + "/* ==========================================================================\n NAVIGATION\n ========================================================================== */\n\n/*\n Breadcrumb navigation links\n ========================================================================== */\n\n.breadcrumbs {\n @include clearfix;\n margin: 0 auto;\n max-width: 100%;\n padding-left: 1em;\n padding-right: 1em;\n font-family: $sans-serif;\n -webkit-animation: $intro-transition;\n animation: $intro-transition;\n -webkit-animation-delay: 0.3s;\n animation-delay: 0.3s;\n\n @include breakpoint($x-large) {\n max-width: $x-large;\n }\n\n ol {\n padding: 0;\n list-style: none;\n font-size: $type-size-6;\n\n @include breakpoint($large) {\n float: right;\n width: calc(100% - #{$right-sidebar-width-narrow});\n }\n\n @include breakpoint($x-large) {\n width: calc(100% - #{$right-sidebar-width});\n }\n }\n\n li {\n display: inline;\n }\n\n .current {\n font-weight: bold;\n }\n}\n\n/*\n Post pagination navigation links\n ========================================================================== */\n\n.pagination {\n @include clearfix();\n float: left;\n margin-top: 1em;\n padding-top: 1em;\n width: 100%;\n\n ul {\n margin: 0;\n padding: 0;\n list-style-type: none;\n font-family: $sans-serif;\n }\n\n li {\n display: block;\n float: left;\n margin-left: -1px;\n\n a {\n display: block;\n margin-bottom: 0.25em;\n padding: 0.5em 1em;\n font-family: $sans-serif;\n font-size: 14px;\n font-weight: bold;\n line-height: 1.5;\n text-align: center;\n text-decoration: none;\n color: $muted-text-color;\n border: 1px solid mix(#000, $border-color, 25%);\n border-radius: 0;\n\n &:hover {\n color: $link-color-hover;\n }\n\n &.current,\n &.current.disabled {\n color: #fff;\n background: $primary-color;\n }\n\n &.disabled {\n color: rgba($muted-text-color, 0.5);\n pointer-events: none;\n cursor: not-allowed;\n }\n }\n\n &:first-child {\n margin-left: 0;\n\n a {\n border-top-left-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n }\n }\n\n &:last-child {\n a {\n border-top-right-radius: $border-radius;\n border-bottom-right-radius: $border-radius;\n }\n }\n }\n\n /* next/previous buttons */\n &--pager {\n display: block;\n padding: 1em 2em;\n float: left;\n width: 50%;\n font-family: $sans-serif;\n font-size: $type-size-5;\n font-weight: bold;\n text-align: center;\n text-decoration: none;\n color: $muted-text-color;\n border: 1px solid mix(#000, $border-color, 25%);\n border-radius: $border-radius;\n\n &:hover {\n @include yiq-contrasted($muted-text-color);\n }\n\n &:first-child {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n\n &:last-child {\n margin-left: -1px;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n &.disabled {\n color: rgba($muted-text-color, 0.5);\n pointer-events: none;\n cursor: not-allowed;\n }\n }\n}\n\n.page__content + .pagination,\n.page__meta + .pagination,\n.page__share + .pagination,\n.page__comments + .pagination {\n margin-top: 2em;\n padding-top: 2em;\n border-top: 1px solid $border-color;\n}\n\n/*\n Priority plus navigation\n ========================================================================== */\n\n.greedy-nav {\n position: relative;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n min-height: $nav-height;\n background: $background-color;\n\n a {\n display: block;\n margin: 0 1rem;\n color: $masthead-link-color;\n text-decoration: none;\n -webkit-transition: none;\n transition: none;\n\n &:hover {\n color: $masthead-link-color-hover;\n }\n\n &.site-logo {\n margin-left: 0;\n margin-right: 0.5rem;\n }\n\n &.site-title {\n margin-left: 0;\n }\n }\n\n img {\n -webkit-transition: none;\n transition: none;\n }\n\n &__toggle {\n -ms-flex-item-align: center;\n align-self: center;\n height: $nav-toggle-height;\n border: 0;\n outline: none;\n background-color: transparent;\n cursor: pointer;\n }\n\n .visible-links {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: end;\n -ms-flex-pack: end;\n justify-content: flex-end;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n overflow: hidden;\n\n li {\n -webkit-box-flex: 0;\n -ms-flex: none;\n flex: none;\n }\n\n a {\n position: relative;\n\n &:before {\n content: \"\";\n position: absolute;\n left: 0;\n bottom: 0;\n height: 4px;\n background: $primary-color;\n width: 100%;\n -webkit-transition: $global-transition;\n transition: $global-transition;\n -webkit-transform: scaleX(0) translate3d(0, 0, 0);\n transform: scaleX(0) translate3d(0, 0, 0); // hide\n }\n\n &:hover:before {\n -webkit-transform: scaleX(1);\n -ms-transform: scaleX(1);\n transform: scaleX(1); // reveal\n }\n }\n }\n\n .hidden-links {\n position: absolute;\n top: 100%;\n right: 0;\n margin-top: 15px;\n padding: 5px;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n background: $background-color;\n -webkit-box-shadow: 0 2px 4px 0 rgba(#000, 0.16),\n 0 2px 10px 0 rgba(#000, 0.12);\n box-shadow: 0 2px 4px 0 rgba(#000, 0.16), 0 2px 10px 0 rgba(#000, 0.12);\n\n &.hidden {\n display: none;\n }\n\n a {\n margin: 0;\n padding: 10px 20px;\n font-size: $type-size-5;\n\n &:hover {\n color: $masthead-link-color-hover;\n background: $navicon-link-color-hover;\n }\n }\n\n &:before {\n content: \"\";\n position: absolute;\n top: -11px;\n right: 10px;\n width: 0;\n border-style: solid;\n border-width: 0 10px 10px;\n border-color: $border-color transparent;\n display: block;\n z-index: 0;\n }\n\n &:after {\n content: \"\";\n position: absolute;\n top: -10px;\n right: 10px;\n width: 0;\n border-style: solid;\n border-width: 0 10px 10px;\n border-color: $background-color transparent;\n display: block;\n z-index: 1;\n }\n\n li {\n display: block;\n border-bottom: 1px solid $border-color;\n\n &:last-child {\n border-bottom: none;\n }\n }\n }\n}\n\n.no-js {\n .greedy-nav {\n .visible-links {\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n overflow: visible;\n }\n }\n}\n\n/*\n Navigation list\n ========================================================================== */\n\n.nav__list {\n margin-bottom: 1.5em;\n\n input[type=\"checkbox\"],\n label {\n display: none;\n }\n\n @include breakpoint(max-width $large - 1px) {\n label {\n position: relative;\n display: inline-block;\n padding: 0.5em 2.5em 0.5em 1em;\n color: $gray;\n font-size: $type-size-6;\n font-weight: bold;\n border: 1px solid $light-gray;\n border-radius: $border-radius;\n z-index: 20;\n -webkit-transition: 0.2s ease-out;\n transition: 0.2s ease-out;\n cursor: pointer;\n\n &:before,\n &:after {\n content: \"\";\n position: absolute;\n right: 1em;\n top: 1.25em;\n width: 0.75em;\n height: 0.125em;\n line-height: 1;\n background-color: $gray;\n -webkit-transition: 0.2s ease-out;\n transition: 0.2s ease-out;\n }\n\n &:after {\n -webkit-transform: rotate(90deg);\n -ms-transform: rotate(90deg);\n transform: rotate(90deg);\n }\n\n &:hover {\n color: #fff;\n border-color: $gray;\n background-color: mix(white, #000, 20%);\n\n &:before,\n &:after {\n background-color: #fff;\n }\n }\n }\n\n /* selected*/\n input:checked + label {\n color: white;\n background-color: mix(white, #000, 20%);\n\n &:before,\n &:after {\n background-color: #fff;\n }\n }\n\n /* on hover show expand*/\n label:hover:after {\n -webkit-transform: rotate(90deg);\n -ms-transform: rotate(90deg);\n transform: rotate(90deg);\n }\n\n input:checked + label:hover:after {\n -webkit-transform: rotate(0);\n -ms-transform: rotate(0);\n transform: rotate(0);\n }\n\n ul {\n margin-bottom: 1em;\n }\n\n a {\n display: block;\n padding: 0.25em 0;\n\n @include breakpoint($large) {\n padding-top: 0.125em;\n padding-bottom: 0.125em;\n }\n\n &:hover {\n text-decoration: underline;\n }\n }\n }\n}\n\n.nav__list .nav__items {\n margin: 0;\n font-size: 1.25rem;\n\n a {\n color: inherit;\n }\n\n .active {\n margin-left: -0.5em;\n padding-left: 0.5em;\n padding-right: 0.5em;\n font-weight: bold;\n }\n\n @include breakpoint(max-width $large - 1px) {\n position: relative;\n max-height: 0;\n opacity: 0%;\n overflow: hidden;\n z-index: 10;\n -webkit-transition: 0.3s ease-in-out;\n transition: 0.3s ease-in-out;\n -webkit-transform: translate(0, 10%);\n -ms-transform: translate(0, 10%);\n transform: translate(0, 10%);\n }\n}\n\n@include breakpoint(max-width $large - 1px) {\n .nav__list input:checked ~ .nav__items {\n -webkit-transition: 0.5s ease-in-out;\n transition: 0.5s ease-in-out;\n max-height: 9999px; /* exaggerate max-height to accommodate tall lists*/\n overflow: visible;\n opacity: 1;\n margin-top: 1em;\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n transform: translate(0, 0);\n }\n}\n\n.nav__title {\n margin: 0;\n padding: 0.5rem 0.75rem;\n font-family: $sans-serif-narrow;\n font-size: $type-size-5;\n font-weight: bold;\n}\n\n.nav__sub-title {\n display: block;\n margin: 0.5rem 0;\n padding: 0.25rem 0;\n font-family: $sans-serif-narrow;\n font-size: $type-size-6;\n font-weight: bold;\n text-transform: uppercase;\n border-bottom: 1px solid $border-color;\n}\n\n/*\n Table of contents navigation\n ========================================================================== */\n\n.toc {\n font-family: $sans-serif-narrow;\n color: $gray;\n background-color: $background-color;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n -webkit-box-shadow: $box-shadow;\n box-shadow: $box-shadow;\n\n .nav__title {\n color: #fff;\n font-size: $type-size-6;\n background: $primary-color;\n border-top-left-radius: $border-radius;\n border-top-right-radius: $border-radius;\n }\n\n // Scrollspy marks toc items as .active when they are in focus\n .active a {\n @include yiq-contrasted($active-color);\n }\n}\n\n.toc__menu {\n margin: 0;\n padding: 0;\n width: 100%;\n list-style: none;\n font-size: $type-size-6;\n\n @include breakpoint($large) {\n font-size: $type-size-7;\n }\n\n a {\n display: block;\n padding: 0.25rem 0.75rem;\n color: $muted-text-color;\n font-weight: bold;\n line-height: 1.5;\n border-bottom: 1px solid $border-color;\n\n &:hover {\n color: $text-color;\n }\n }\n\n li ul > li a {\n padding-left: 1.25rem;\n font-weight: normal;\n }\n\n li ul li ul > li a {\n padding-left: 1.75rem;\n }\n\n li ul li ul li ul > li a {\n padding-left: 2.25rem;\n }\n\n li ul li ul li ul li ul > li a {\n padding-left: 2.75rem;\n }\n\n li ul li ul li ul li ul li ul > li a {\n padding-left: 3.25rem\n }\n}\n", + "/* ==========================================================================\n FOOTER\n ========================================================================== */\n\n.page__footer {\n @include clearfix;\n float: left;\n margin-left: 0;\n margin-right: 0;\n width: 100%;\n margin-top: 3em;\n color: $muted-text-color;\n -webkit-animation: $intro-transition;\n animation: $intro-transition;\n -webkit-animation-delay: 0.45s;\n animation-delay: 0.45s;\n background-color: $footer-background-color;\n\n footer {\n @include clearfix;\n margin-left: auto;\n margin-right: auto;\n margin-top: 2em;\n max-width: 100%;\n padding: 0 1em 2em;\n\n @include breakpoint($x-large) {\n max-width: $x-large;\n }\n }\n\n a {\n color: inherit;\n text-decoration: none;\n\n &:hover {\n text-decoration: underline;\n }\n }\n\n .fas,\n .fab,\n .far,\n .fal {\n color: $muted-text-color;\n }\n}\n\n.page__footer-copyright {\n font-family: $global-font-family;\n font-size: $type-size-7;\n}\n\n.page__footer-follow {\n ul {\n margin: 0;\n padding: 0;\n list-style-type: none;\n }\n\n li {\n display: inline-block;\n padding-top: 5px;\n padding-bottom: 5px;\n font-family: $sans-serif-narrow;\n font-size: $type-size-6;\n text-transform: uppercase;\n }\n\n li + li:before {\n content: \"\";\n padding-right: 5px;\n }\n\n a {\n padding-right: 10px;\n font-weight: bold;\n }\n\n .social-icons {\n a {\n white-space: nowrap;\n }\n }\n}\n", + "/* ==========================================================================\n SEARCH\n ========================================================================== */\n\n.layout--search {\n .archive__item-teaser {\n margin-bottom: 0.25em;\n }\n}\n\n.search__toggle {\n margin-left: 1rem;\n margin-right: 1rem;\n height: $nav-toggle-height;\n border: 0;\n outline: none;\n color: $primary-color;\n background-color: transparent;\n cursor: pointer;\n -webkit-transition: 0.2s;\n transition: 0.2s;\n\n &:hover {\n color: mix(#000, $primary-color, 25%);\n }\n}\n\n.search-icon {\n width: 100%;\n height: 100%;\n}\n\n.search-content {\n display: none;\n visibility: hidden;\n padding-top: 1em;\n padding-bottom: 1em;\n\n &__inner-wrap {\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n padding-left: 1em;\n padding-right: 1em;\n -webkit-animation: $intro-transition;\n animation: $intro-transition;\n -webkit-animation-delay: 0.15s;\n animation-delay: 0.15s;\n\n @include breakpoint($x-large) {\n max-width: $max-width;\n }\n\n }\n\n &__form {\n background-color: transparent;\n }\n\n .search-input {\n display: block;\n margin-bottom: 0;\n padding: 0;\n border: none;\n outline: none;\n box-shadow: none;\n background-color: transparent;\n font-size: $type-size-3;\n\n @include breakpoint($large) {\n font-size: $type-size-2;\n }\n\n @include breakpoint($x-large) {\n font-size: $type-size-1;\n }\n }\n\n &.is--visible {\n display: block;\n visibility: visible;\n\n &::after {\n content: \"\";\n display: block;\n }\n }\n\n .results__found {\n margin-top: 0.5em;\n font-size: $type-size-6;\n }\n\n .archive__item {\n margin-bottom: 2em;\n\n @include breakpoint($large) {\n width: 75%;\n }\n\n @include breakpoint($x-large) {\n width: 50%;\n }\n }\n\n .archive__item-title {\n margin-top: 0;\n }\n\n .archive__item-excerpt {\n margin-bottom: 0;\n }\n}\n\n/* Algolia search */\n\n.ais-search-box {\n max-width: 100% !important;\n margin-bottom: 2em;\n}\n\n.archive__item-title .ais-Highlight {\n color: $primary-color;\n font-style: normal;\n text-decoration: underline;\n}\n\n.archive__item-excerpt .ais-Highlight {\n color: $primary-color;\n font-style: normal;\n font-weight: bold;\n}\n", + "/* ==========================================================================\n Syntax highlighting\n ========================================================================== */\n\ndiv.highlighter-rouge,\nfigure.highlight {\n position: relative;\n margin-bottom: 1em;\n background: $base00;\n color: $base05;\n font-family: $monospace;\n font-size: $type-size-6;\n line-height: 1.8;\n border-radius: $border-radius;\n\n > pre,\n pre.highlight {\n margin: 0;\n padding: 1em;\n }\n}\n\n.highlight table {\n margin-bottom: 0;\n font-size: 1em;\n border: 0;\n\n td {\n padding: 0;\n width: calc(100% - 1em);\n border: 0;\n\n /* line numbers*/\n &.gutter,\n &.rouge-gutter {\n padding-right: 1em;\n width: 1em;\n color: $base04;\n border-right: 1px solid $base04;\n text-align: right;\n }\n\n /* code */\n &.code,\n &.rouge-code {\n padding-left: 1em;\n }\n }\n\n pre {\n margin: 0;\n }\n}\n\n.highlight pre {\n width: 100%;\n}\n\n.highlight .hll {\n background-color: $base06;\n}\n.highlight {\n .c {\n /* Comment */\n color: $base04;\n }\n .err {\n /* Error */\n color: $base08;\n }\n .k {\n /* Keyword */\n color: $base0e;\n }\n .l {\n /* Literal */\n color: $base09;\n }\n .n {\n /* Name */\n color: $base05;\n }\n .o {\n /* Operator */\n color: $base0c;\n }\n .p {\n /* Punctuation */\n color: $base05;\n }\n .cm {\n /* Comment.Multiline */\n color: $base04;\n }\n .cp {\n /* Comment.Preproc */\n color: $base04;\n }\n .c1 {\n /* Comment.Single */\n color: $base04;\n }\n .cs {\n /* Comment.Special */\n color: $base04;\n }\n .gd {\n /* Generic.Deleted */\n color: $base08;\n }\n .ge {\n /* Generic.Emph */\n font-style: italic;\n }\n .gh {\n /* Generic.Heading */\n color: $base05;\n font-weight: bold;\n }\n .gi {\n /* Generic.Inserted */\n color: $base0b;\n }\n .gp {\n /* Generic.Prompt */\n color: $base04;\n font-weight: bold;\n }\n .gs {\n /* Generic.Strong */\n font-weight: bold;\n }\n .gu {\n /* Generic.Subheading */\n color: $base0c;\n font-weight: bold;\n }\n .kc {\n /* Keyword.Constant */\n color: $base0e;\n }\n .kd {\n /* Keyword.Declaration */\n color: $base0e;\n }\n .kn {\n /* Keyword.Namespace */\n color: $base0c;\n }\n .kp {\n /* Keyword.Pseudo */\n color: $base0e;\n }\n .kr {\n /* Keyword.Reserved */\n color: $base0e;\n }\n .kt {\n /* Keyword.Type */\n color: $base0a;\n }\n .ld {\n /* Literal.Date */\n color: $base0b;\n }\n .m {\n /* Literal.Number */\n color: $base09;\n }\n .s {\n /* Literal.String */\n color: $base0b;\n }\n .na {\n /* Name.Attribute */\n color: $base0d;\n }\n .nb {\n /* Name.Builtin */\n color: $base05;\n }\n .nc {\n /* Name.Class */\n color: $base0a;\n }\n .no {\n /* Name.Constant */\n color: $base08;\n }\n .nd {\n /* Name.Decorator */\n color: $base0c;\n }\n .ni {\n /* Name.Entity */\n color: $base05;\n }\n .ne {\n /* Name.Exception */\n color: $base08;\n }\n .nf {\n /* Name.Function */\n color: $base0d;\n }\n .nl {\n /* Name.Label */\n color: $base05;\n }\n .nn {\n /* Name.Namespace */\n color: $base0a;\n }\n .nx {\n /* Name.Other */\n color: $base0d;\n }\n .py {\n /* Name.Property */\n color: $base05;\n }\n .nt {\n /* Name.Tag */\n color: $base0c;\n }\n .nv {\n /* Name.Variable */\n color: $base08;\n }\n .ow {\n /* Operator.Word */\n color: $base0c;\n }\n .w {\n /* Text.Whitespace */\n color: $base05;\n }\n .mf {\n /* Literal.Number.Float */\n color: $base09;\n }\n .mh {\n /* Literal.Number.Hex */\n color: $base09;\n }\n .mi {\n /* Literal.Number.Integer */\n color: $base09;\n }\n .mo {\n /* Literal.Number.Oct */\n color: $base09;\n }\n .sb {\n /* Literal.String.Backtick */\n color: $base0b;\n }\n .sc {\n /* Literal.String.Char */\n color: $base05;\n }\n .sd {\n /* Literal.String.Doc */\n color: $base04;\n }\n .s2 {\n /* Literal.String.Double */\n color: $base0b;\n }\n .se {\n /* Literal.String.Escape */\n color: $base09;\n }\n .sh {\n /* Literal.String.Heredoc */\n color: $base0b;\n }\n .si {\n /* Literal.String.Interpol */\n color: $base09;\n }\n .sx {\n /* Literal.String.Other */\n color: $base0b;\n }\n .sr {\n /* Literal.String.Regex */\n color: $base0b;\n }\n .s1 {\n /* Literal.String.Single */\n color: $base0b;\n }\n .ss {\n /* Literal.String.Symbol */\n color: $base0b;\n }\n .bp {\n /* Name.Builtin.Pseudo */\n color: $base05;\n }\n .vc {\n /* Name.Variable.Class */\n color: $base08;\n }\n .vg {\n /* Name.Variable.Global */\n color: $base08;\n }\n .vi {\n /* Name.Variable.Instance */\n color: $base08;\n }\n .il {\n /* Literal.Number.Integer.Long */\n color: $base09;\n }\n}\n\n.gist {\n th, td {\n border-bottom: 0;\n }\n}", + "/* ==========================================================================\n UTILITY CLASSES\n ========================================================================== */\n\n/*\n Visibility\n ========================================================================== */\n\n/* http://www.456bereastreet.com/archive/200711/screen_readers_sometimes_ignore_displaynone/ */\n\n.hidden,\n.is--hidden {\n display: none;\n visibility: hidden;\n}\n\n/* for preloading images */\n\n.load {\n display: none;\n}\n\n.transparent {\n opacity: 0;\n}\n\n/* https://developer.yahoo.com/blogs/ydn/clip-hidden-content-better-accessibility-53456.html */\n\n.visually-hidden,\n.screen-reader-text,\n.screen-reader-text span,\n.screen-reader-shortcut {\n position: absolute !important;\n clip: rect(1px, 1px, 1px, 1px);\n height: 1px !important;\n width: 1px !important;\n border: 0 !important;\n overflow: hidden;\n}\n\nbody:hover .visually-hidden a,\nbody:hover .visually-hidden input,\nbody:hover .visually-hidden button {\n display: none !important;\n}\n\n/* screen readers */\n\n.screen-reader-text:focus,\n.screen-reader-shortcut:focus {\n clip: auto !important;\n height: auto !important;\n width: auto !important;\n display: block;\n font-size: 1em;\n font-weight: bold;\n padding: 15px 23px 14px;\n background: #fff;\n z-index: 100000;\n text-decoration: none;\n box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6);\n}\n\n/*\n Skip links\n ========================================================================== */\n\n.skip-link {\n position: fixed;\n z-index: 20;\n margin: 0;\n font-family: $sans-serif;\n white-space: nowrap;\n}\n\n.skip-link li {\n height: 0;\n width: 0;\n list-style: none;\n}\n\n/*\n Type\n ========================================================================== */\n\n.text-left {\n text-align: left;\n}\n\n.text-center {\n text-align: center;\n}\n\n.text-right {\n text-align: right;\n}\n\n.text-justify {\n text-align: justify;\n}\n\n.text-nowrap {\n white-space: nowrap;\n}\n\n/*\n Task lists\n ========================================================================== */\n\n.task-list {\n padding:0;\n\n li {\n list-style-type: none;\n }\n\n .task-list-item-checkbox {\n margin-right: 0.5em;\n opacity: 1;\n }\n}\n\n.task-list .task-list {\n margin-left: 1em;\n}\n\n/*\n Alignment\n ========================================================================== */\n\n/* clearfix */\n\n.cf {\n clear: both;\n}\n\n.wrapper {\n margin-left: auto;\n margin-right: auto;\n width: 100%;\n}\n\n/*\n Images\n ========================================================================== */\n\n/* image align left */\n\n.align-left {\n display: block;\n margin-left: auto;\n margin-right: auto;\n\n @include breakpoint($small) {\n float: left;\n margin-right: 1em;\n }\n}\n\n/* image align right */\n\n.align-right {\n display: block;\n margin-left: auto;\n margin-right: auto;\n\n @include breakpoint($small) {\n float: right;\n margin-left: 1em;\n }\n}\n\n/* image align center */\n\n.align-center {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n/* file page content container */\n\n.full {\n @include breakpoint($large) {\n margin-right: -1 * span(2.5 of 12) !important;\n }\n}\n\n/*\n Icons\n ========================================================================== */\n\n.icon {\n display: inline-block;\n fill: currentColor;\n width: 1em;\n height: 1.1em;\n line-height: 1;\n position: relative;\n top: -0.1em;\n vertical-align: middle;\n}\n\n/* social icons*/\n\n.social-icons {\n .fas,\n .fab,\n .far,\n .fal {\n color: $text-color;\n }\n\n .fa-behance,\n .fa-behance-square {\n color: $behance-color;\n }\n\n .fa-bitbucket {\n color: $bitbucket-color;\n }\n\n .fa-dribbble,\n .fa-dribble-square {\n color: $dribbble-color;\n }\n\n .fa-facebook,\n .fa-facebook-square,\n .fa-facebook-f {\n color: $facebook-color;\n }\n\n .fa-flickr {\n color: $flickr-color;\n }\n\n .fa-foursquare {\n color: $foursquare-color;\n }\n\n .fa-github,\n .fa-github-alt,\n .fa-github-square {\n color: $github-color;\n }\n\n .fa-gitlab {\n color: $gitlab-color;\n }\n\n .fa-instagram {\n color: $instagram-color;\n }\n\n .fa-keybase {\n color: $keybase-color;\n }\n\n .fa-lastfm,\n .fa-lastfm-square {\n color: $lastfm-color;\n }\n\n .fa-linkedin,\n .fa-linkedin-in {\n color: $linkedin-color;\n }\n\n .fa-mastodon,\n .fa-mastodon-square {\n color: $mastodon-color;\n }\n\n .fa-pinterest,\n .fa-pinterest-p,\n .fa-pinterest-square {\n color: $pinterest-color;\n }\n\n .fa-reddit {\n color: $reddit-color;\n }\n\n .fa-rss,\n .fa-rss-square {\n color: $rss-color;\n }\n\n .fa-soundcloud {\n color: $soundcloud-color;\n }\n\n .fa-stack-exchange,\n .fa-stack-overflow {\n color: $stackoverflow-color;\n }\n\n .fa-tumblr,\n .fa-tumblr-square {\n color: $tumblr-color;\n }\n\n .fa-twitter,\n .fa-twitter-square {\n color: $twitter-color;\n }\n\n .fa-vimeo,\n .fa-vimeo-square,\n .fa-vimeo-v {\n color: $vimeo-color;\n }\n\n .fa-vine {\n color: $vine-color;\n }\n\n .fa-youtube {\n color: $youtube-color;\n }\n\n .fa-xing,\n .fa-xing-square {\n color: $xing-color;\n }\n}\n\n/*\n Navicons\n ========================================================================== */\n\n.navicon {\n position: relative;\n width: $navicon-width;\n height: $navicon-height;\n background: $primary-color;\n margin: auto;\n -webkit-transition: 0.3s;\n transition: 0.3s;\n\n &:before,\n &:after {\n content: \"\";\n position: absolute;\n left: 0;\n width: $navicon-width;\n height: $navicon-height;\n background: $primary-color;\n -webkit-transition: 0.3s;\n transition: 0.3s;\n }\n\n &:before {\n top: (-2 * $navicon-height);\n }\n\n &:after {\n bottom: (-2 * $navicon-height);\n }\n}\n\n.close .navicon {\n /* hide the middle line*/\n background: transparent;\n\n /* overlay the lines by setting both their top values to 0*/\n &:before,\n &:after {\n -webkit-transform-origin: 50% 50%;\n -ms-transform-origin: 50% 50%;\n transform-origin: 50% 50%;\n top: 0;\n width: $navicon-width;\n }\n\n /* rotate the lines to form the x shape*/\n &:before {\n -webkit-transform: rotate3d(0, 0, 1, 45deg);\n transform: rotate3d(0, 0, 1, 45deg);\n }\n &:after {\n -webkit-transform: rotate3d(0, 0, 1, -45deg);\n transform: rotate3d(0, 0, 1, -45deg);\n }\n}\n\n.greedy-nav__toggle {\n &:before {\n @supports (pointer-events: none) {\n content: '';\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n opacity: 0;\n background-color: $background-color;\n -webkit-transition: $global-transition;\n transition: $global-transition;\n pointer-events: none;\n }\n }\n\n &.close {\n &:before {\n opacity: 0.9;\n -webkit-transition: $global-transition;\n transition: $global-transition;\n pointer-events: auto;\n }\n }\n}\n\n.greedy-nav__toggle:hover {\n .navicon,\n .navicon:before,\n .navicon:after {\n background: mix(#000, $primary-color, 25%);\n }\n\n &.close {\n .navicon {\n background: transparent;\n }\n }\n}\n\n/*\n Sticky, fixed to top content\n ========================================================================== */\n\n.sticky {\n @include breakpoint($large) {\n @include clearfix();\n position: -webkit-sticky;\n position: sticky;\n top: 2em;\n\n > * {\n display: block;\n }\n }\n}\n\n/*\n Wells\n ========================================================================== */\n\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: $border-radius;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n\n/*\n Modals\n ========================================================================== */\n\n.show-modal {\n overflow: hidden;\n position: relative;\n\n &:before {\n position: absolute;\n content: \"\";\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 999;\n background-color: rgba(255, 255, 255, 0.85);\n }\n\n .modal {\n display: block;\n }\n}\n\n.modal {\n display: none;\n position: fixed;\n width: 300px;\n top: 50%;\n left: 50%;\n margin-left: -150px;\n margin-top: -150px;\n min-height: 0;\n z-index: 9999;\n background: #fff;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n box-shadow: $box-shadow;\n\n &__title {\n margin: 0;\n padding: 0.5em 1em;\n }\n\n &__supporting-text {\n padding: 0 1em 0.5em 1em;\n }\n\n &__actions {\n padding: 0.5em 1em;\n border-top: 1px solid $border-color;\n }\n}\n\n/*\n Footnotes\n ========================================================================== */\n\n.footnote {\n color: $muted-text-color;\n text-decoration: none;\n}\n\n.footnotes {\n color: $muted-text-color;\n\n ol,\n li,\n p {\n margin-bottom: 0;\n font-size: $type-size-6;\n }\n}\n\na.reversefootnote {\n color: $contrast-color;\n text-decoration: none;\n\n &:hover {\n text-decoration: underline;\n }\n}\n\n/*\n Required\n ========================================================================== */\n\n.required {\n color: $danger-color;\n font-weight: bold;\n}\n\n/*\n Google Custom Search Engine\n ========================================================================== */\n\n.gsc-control-cse {\n table,\n tr,\n td {\n border: 0; /* remove table borders widget */\n }\n}\n\n/*\n Responsive Video Embed\n ========================================================================== */\n\n.responsive-video-container {\n position: relative;\n margin-bottom: 1em;\n padding-bottom: 56.25%;\n height: 0;\n overflow: hidden;\n max-width: 100%;\n\n iframe,\n object,\n embed {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n// full screen video fixes\n:-webkit-full-screen-ancestor {\n .masthead,\n .page__footer {\n position: static;\n }\n}\n", + "/* ==========================================================================\n SINGLE PAGE/POST\n ========================================================================== */\n\n#main {\n @include clearfix;\n margin-left: auto;\n margin-right: auto;\n padding-left: 1em;\n padding-right: 1em;\n -webkit-animation: $intro-transition;\n animation: $intro-transition;\n max-width: 100%;\n -webkit-animation-delay: 0.15s;\n animation-delay: 0.15s;\n\n @include breakpoint($x-large) {\n max-width: $max-width;\n }\n}\n\nbody {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n min-height: 100vh;\n counter-reset: sidenote-counter;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n\n.initial-content,\n.search-content {\n flex: 1 0 auto;\n}\n\n.page {\n @include breakpoint($large) {\n float: right;\n width: calc(100% - #{$right-sidebar-width-narrow});\n padding-right: $right-sidebar-width-narrow;\n }\n\n @include breakpoint($x-large) {\n width: calc(100% - #{$right-sidebar-width});\n padding-right: $right-sidebar-width;\n }\n\n .page__inner-wrap {\n float: left;\n margin-top: 1em;\n margin-left: 0;\n margin-right: 0;\n width: 100%;\n clear: both;\n\n .page__content,\n .page__meta,\n .page__share {\n position: relative;\n float: left;\n margin-left: 0;\n margin-right: 0;\n width: 100%;\n clear: both;\n }\n }\n}\n\n.page__title {\n margin-top: 0;\n line-height: 1;\n\n a {\n color: $text-color;\n text-decoration: none;\n }\n\n & + .page__meta {\n margin-top: -0.5em;\n }\n}\n\n.page__lead {\n font-family: $global-font-family;\n font-size: $type-size-4;\n}\n\n.page__content {\n h2 {\n padding-bottom: 0.5em;\n border-bottom: 1px solid $border-color;\n }\n\n\th1, h2, h3, h4, h5, h6 {\n\t\tmax-width: 75%; // Adjust the percentage as needed\n\t\t.header-link {\n\t\t\tposition: relative;\n\t\t\tleft: 0.5em;\n\t\t\topacity: 0;\n\t\t\tfont-size: 0.8em;\n\t\t\t-webkit-transition: opacity 0.2s ease-in-out 0.1s;\n\t\t\t-moz-transition: opacity 0.2s ease-in-out 0.1s;\n\t\t\t-o-transition: opacity 0.2s ease-in-out 0.1s;\n\t\t\ttransition: opacity 0.2s ease-in-out 0.1s;\n\t\t}\n\n\t\t&:hover .header-link {\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n p,\n li,\n dl {\n font-size: 1em;\n }\n\n /* paragraph indents */\n p {\n margin: 0 0 $indent-var;\n\n /* sibling indentation*/\n @if $paragraph-indent == true {\n & + p {\n text-indent: $indent-var;\n margin-top: -($indent-var);\n }\n }\n }\n\n a:not(.btn) {\n &:hover {\n text-decoration: underline;\n\n img {\n box-shadow: 0 0 10px rgba(#000, 0.25);\n }\n }\n }\n\n :not(pre) > code {\n padding-top: 0.1rem;\n padding-bottom: 0.1rem;\n font-size: 0.8em;\n background: $code-background-color;\n border-radius: $border-radius;\n\n &::before,\n &::after {\n letter-spacing: -0.2em;\n content: \"\\00a0\"; /* non-breaking space*/\n }\n }\n\n dt {\n margin-top: 1em;\n font-family: $sans-serif;\n font-weight: bold;\n }\n\n dd {\n margin-left: 1em;\n font-family: $sans-serif;\n font-size: $type-size-6;\n }\n\n .small {\n font-size: $type-size-6;\n }\n\n /* blockquote citations */\n blockquote + .small {\n margin-top: -1.5em;\n padding-left: 1.25rem;\n }\n}\n\n.page__hero {\n position: relative;\n margin-bottom: 2em;\n @include clearfix;\n -webkit-animation: $intro-transition;\n animation: $intro-transition;\n -webkit-animation-delay: 0.25s;\n animation-delay: 0.25s;\n\n &--overlay {\n position: relative;\n margin-bottom: 2em;\n padding: 3em 0;\n @include clearfix;\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n -webkit-animation: $intro-transition;\n animation: $intro-transition;\n -webkit-animation-delay: 0.25s;\n animation-delay: 0.25s;\n\n a {\n color: #fff;\n }\n\n .wrapper {\n padding-left: 1em;\n padding-right: 1em;\n\n @include breakpoint($x-large) {\n max-width: $x-large;\n }\n }\n\n .page__title,\n .page__meta,\n .page__lead,\n .btn {\n color: #fff;\n text-shadow: 1px 1px 4px rgba(#000, 0.5);\n }\n\n .page__lead {\n max-width: $medium;\n }\n\n .page__title {\n font-size: $type-size-2;\n\n @include breakpoint($small) {\n font-size: $type-size-1;\n }\n }\n }\n}\n\n.page__hero-image {\n width: 100%;\n height: auto;\n -ms-interpolation-mode: bicubic;\n}\n\n.page__hero-caption {\n position: absolute;\n bottom: 0;\n right: 0;\n margin: 0 auto;\n padding: 2px 5px;\n color: #fff;\n font-family: $caption-font-family;\n font-size: $type-size-7;\n background: #000;\n text-align: right;\n z-index: 5;\n opacity: 0.5;\n border-radius: $border-radius 0 0 0;\n\n @include breakpoint($large) {\n padding: 5px 10px;\n }\n\n a {\n color: #fff;\n text-decoration: none;\n }\n}\n\n/*\n Social sharing\n ========================================================================== */\n\n.page__share {\n margin-top: 2em;\n padding-top: 1em;\n border-top: 1px solid $border-color;\n\n @include breakpoint(max-width $small) {\n .btn span {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n }\n }\n}\n\n.page__share-title {\n margin-bottom: 10px;\n font-size: $type-size-6;\n text-transform: uppercase;\n}\n\n/*\n Page meta\n ========================================================================== */\n\n.page__meta {\n margin-top: 0.25em;\n color: $muted-text-color;\n font-family: $sans-serif;\n font-size: $type-size-6;\n\n p {\n margin: 0;\n }\n\n a {\n color: inherit;\n }\n}\n\n.page__meta-title {\n margin-bottom: 10px;\n font-size: $type-size-6;\n text-transform: uppercase;\n}\n\n.page__meta-sep::before {\n content: \"\\2022\";\n padding-left: 0.5em;\n padding-right: 0.5em;\n}\n\n/*\n Page taxonomy\n ========================================================================== */\n\n.page__taxonomy {\n .sep {\n display: none;\n }\n\n strong {\n margin-right: 10px;\n }\n}\n\n.page__taxonomy-item {\n display: inline-block;\n margin-right: 5px;\n margin-bottom: 8px;\n padding: 5px 10px;\n text-decoration: none;\n border: 1px solid mix(#000, $border-color, 25%);\n border-radius: $border-radius;\n\n &:hover {\n text-decoration: none;\n color: $link-color-hover;\n }\n}\n\n.taxonomy__section {\n margin-bottom: 2em;\n padding-bottom: 1em;\n\n &:not(:last-child) {\n border-bottom: solid 1px $border-color;\n }\n\n .archive__item-title {\n margin-top: 0;\n }\n\n .archive__subtitle {\n clear: both;\n border: 0;\n }\n\n + .taxonomy__section {\n margin-top: 2em;\n }\n}\n\n.taxonomy__title {\n margin-bottom: 0.5em;\n color: $muted-text-color;\n}\n\n.taxonomy__count {\n color: $muted-text-color;\n}\n\n.taxonomy__index {\n display: grid;\n grid-column-gap: 2em;\n grid-template-columns: repeat(2, 1fr);\n margin: 1.414em 0;\n padding: 0;\n font-size: 0.75em;\n list-style: none;\n\n @include breakpoint($large) {\n grid-template-columns: repeat(3, 1fr);\n }\n\n a {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n padding: 0.25em 0;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n color: inherit;\n text-decoration: none;\n border-bottom: 1px solid $border-color;\n }\n}\n\n.back-to-top {\n display: block;\n clear: both;\n color: $muted-text-color;\n font-size: 0.6em;\n text-transform: uppercase;\n text-align: right;\n text-decoration: none;\n}\n\n/*\n Comments\n ========================================================================== */\n\n.page__comments {\n float: left;\n margin-left: 0;\n margin-right: 0;\n width: 100%;\n clear: both;\n}\n\n.page__comments-title {\n margin-top: 2rem;\n margin-bottom: 10px;\n padding-top: 2rem;\n font-size: $type-size-6;\n border-top: 1px solid $border-color;\n text-transform: uppercase;\n}\n\n.page__comments-form {\n -webkit-transition: $global-transition;\n transition: $global-transition;\n\n &.disabled {\n input,\n button,\n textarea,\n label {\n pointer-events: none;\n cursor: not-allowed;\n filter: alpha(opacity=65);\n box-shadow: none;\n opacity: 0.65;\n }\n }\n}\n\n.comment {\n @include clearfix();\n margin: 1em 0;\n\n &:not(:last-child) {\n border-bottom: 1px solid $border-color;\n }\n}\n\n.comment__avatar-wrapper {\n float: left;\n width: 60px;\n height: 60px;\n\n @include breakpoint($large) {\n width: 100px;\n height: 100px;\n }\n}\n\n.comment__avatar {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n\n @include breakpoint($large) {\n width: 80px;\n height: 80px;\n padding: 5px;\n border: 1px solid $border-color;\n }\n}\n\n.comment__content-wrapper {\n float: right;\n width: calc(100% - 60px);\n\n @include breakpoint($large) {\n width: calc(100% - 100px);\n }\n}\n\n.comment__author {\n margin: 0;\n\n a {\n text-decoration: none;\n }\n}\n\n.comment__date {\n @extend .page__meta;\n margin: 0;\n\n a {\n text-decoration: none;\n }\n}\n\n/*\n Related\n ========================================================================== */\n\n.page__related {\n @include clearfix();\n float: left;\n margin-top: 2em;\n padding-top: 1em;\n border-top: 1px solid $border-color;\n\n @include breakpoint($large) {\n float: right;\n width: calc(100% - #{$right-sidebar-width-narrow});\n }\n\n @include breakpoint($x-large) {\n width: calc(100% - #{$right-sidebar-width});\n }\n\n a {\n color: inherit;\n text-decoration: none;\n }\n}\n\n.page__related-title {\n margin-bottom: 10px;\n font-size: $type-size-6;\n text-transform: uppercase;\n}\n\n/*\n Wide Pages\n ========================================================================== */\n\n.wide {\n .page {\n @include breakpoint($large) {\n padding-right: 0;\n }\n\n @include breakpoint($x-large) {\n padding-right: 0;\n }\n }\n\n .page__related {\n @include breakpoint($large) {\n padding-right: 0;\n }\n\n @include breakpoint($x-large) {\n padding-right: 0;\n }\n }\n}\n\n/*****************************************************************************/\n/*\n/* Figure Handling as per Tufte Jekyll blog theme \n/* source: \n/* [1] tufte-jekyll by Clay Hanson ( https://github.com/clayh53/tufte-jekyll )\n/*\n/*****************************************************************************/\n// Mathjax fonts need TLC\n.mjx-math{\n font-size: 1rem;\n}\n// --------- Typography stuff -----------//\n// added rational line height and margins ala http://webtypography.net/intro/\n\n/* Chapter Epigraphs */\ndiv.epigraph { margin: 3.5636rem 0; }\n\ndiv.epigraph > blockquote { margin-top: 3rem;\n margin-bottom: 3rem;\n }\n\ndiv.epigraph > blockquote, div.epigraph > blockquote > p { font-style: italic; }\n\ndiv.epigraph > blockquote > footer { font-style: normal;\n width: 45%;\n padding-left: 2.5%;\n padding-right: 2.5%;\n padding-top: 0;\n margin-top: 0.4455rem;\n margin-bottom: 3.1182rem }\n\ndiv.epigraph > blockquote > footer > cite { font-style: italic; }\n\n/* end chapter epigraphs styles */\n\n/* Basic Layout stuff --*/\n/*\narticle { position: relative;\n padding: 1\n\n rem 0rem 2.5rem 0rem; } // reduced top and bottom padding by 50%\n*/\n\n/*\nsection { padding-top: 1rem;\n padding-bottom: 1rem; }\n*/\n\n/*\nul,ol { width: 45%;\n -webkit-padding-start: 5%;\n -webkit-padding-end: 5%;\n list-style-type: none; }\n*/\n//li { padding: 0.5em 0; } //vertical padding on list items screws up vertical rhythym\n\nfigure, figure img.maincolumn { max-width: 55%;\n -webkit-margin-start: 0;\n -webkit-margin-end: 0;\n margin-bottom: 3em; }\n\nfigcaption { float: right;\n clear: right;\n margin-right: -50%;\n margin-top: 0;\n margin-bottom: 0;\n font-size: 1.0rem;\n line-height: 1.6;\n vertical-align: baseline;\n position: relative;\n max-width: 40%;\n font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;}\n\nfigure.fullwidth figcaption { float: left; margin-right: 0%; margin-left: 33%; max-width: 100%; }\n\nimg { max-width: 100%; }\n\n.sidenote, .marginnote { float: right;\n clear: right;\n margin-right: -50%;\n width: 45%;\n margin-top: 0;\n margin-bottom: 1.96rem;\n font-size: 0.9rem;\n line-height: 1.96; //changed to bring line heights into rational pattern\n vertical-align: baseline;\n position: relative;\n font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;}\n\n\nli .sidenote, li .marginnote{ margin-right: -50%; width: 25%} //added to allow for the fact that lists are indented and marginnotes and sidenotes push to right\n\nblockquote .sidenote, blockquote .marginnote { margin-right: -79% }\n\n.sidenote-number { counter-increment: sidenote-counter; }\n\n.sidenote-number:after, .sidenote:before { content: counter(sidenote-counter, lower-roman) \" \";\n font-family: et-bembo-roman-old-style;\n color: $contrast-color; //added color\n position: relative;\n vertical-align: baseline; }\n\n.sidenote-number:after { content: counter(sidenote-counter, lower-roman);\n font-size: 0.8rem;\n\t\t\t color: $contrast-color;\n top: -0.5rem;\n left: 0.1rem; }\n\n.sidenote:before { content: counter(sidenote-counter, lower-roman) \".\\000a0\"; // this is unicode for a non-breaking space\n color: $contrast-color;\n top: 0rem; } //removed superscripting for numerical reference in sidenote\n\np, footer, div.table-wrapper, .MJXc-display, .MathJax { width: 75%; }\n\ndiv.table-wrapper, table { overflow-x: auto; } //changed all overflow values to 'auto' so scroll bars appear only as needed\n\n@media screen and (max-width: 760px) { p, footer { width: 90%; }\n pre code { width: 87.5%; }\n //ul { width: 85%; } // Commened this cos it really bugs the alignment of the follow button in my iPhone 12 Pro Max\n figure { max-width: 90%; }\n figcaption, figure.fullwidth figcaption { margin-right: 0%;\n max-width: none; }\n blockquote p, blockquote footer, div.epigraph > blockquote > footer,.MJXc-display { width: 80%;\n padding-left: 5%;\n padding-right: 5%;\n }}\n\n.marginnote code, .sidenote code { font-size: 1rem; } //more .code class removal\n\npre { width: 52.5%; //, pre code, p pre code are both selectors in tufte.css - they have been removed here to fix alignment issues\n padding-left: 2.5%;\n overflow-x: auto; }\n\n.fullwidth, li.listing div{ max-width: 90%; }\n\n.full-width { .sidenote, .sidenote-number, .marginnote { display: none; } }\n\nspan.newthought { font-variant: small-caps;\n font-size: 1.2em;\n letter-spacing: 0.05rem; }\n\ninput.margin-toggle { display: none; }\n\nlabel.sidenote-number { display: inline; }\n\nlabel.margin-toggle:not(.sidenote-number) { display: none; }\n\n@media (max-width: 760px) { label.margin-toggle:not(.sidenote-number) { display: inline; color: $contrast-color; }\n .sidenote, .marginnote { display: none; }\n .margin-toggle:checked + .sidenote,\n .margin-toggle:checked + .marginnote { display: block;\n float: left;\n left: 1rem;\n clear: both;\n width: 95%;\n margin: 1rem 2.5%;\n vertical-align: baseline;\n position: relative; }\n label { cursor: pointer; }\n pre, pre code, p code, p pre code { width: 90%;\n padding: 0; }\n .table-caption { display: block;\n float: right;\n clear: both;\n width: 98%;\n margin-top: 1rem;\n margin-bottom: 0.5rem;\n margin-left: 1%;\n margin-right: 1%;\n vertical-align: baseline;\n position: relative; }\n div.table-wrapper, table, table.booktabs { width: 85%; }\n div.table-wrapper { border-right: 1px solid #efefef; }\n img { max-width: 100%; } \n figcaption.maincolumn-figure, figure.fullwidth figcaption { float:none; text-align: center;}\n figure.fullwidth figcaption { margin-left: 0; }\n }\n/*--- End of Basic Layout stuff from tufte.css ---*/\n", + "/* ==========================================================================\n ARCHIVE\n ========================================================================== */\n\n.archive {\n margin-top: 1em;\n margin-bottom: 2em;\n\n @include breakpoint($large) {\n float: right;\n width: calc(100% - #{$right-sidebar-width-narrow});\n padding-right: $right-sidebar-width-narrow;\n }\n\n @include breakpoint($x-large) {\n width: calc(100% - #{$right-sidebar-width});\n padding-right: $right-sidebar-width;\n }\n}\n\n.archive__item {\n position: relative;\n\n a {\n position: relative;\n z-index: 10;\n }\n\n a[rel=\"permalink\"] {\n position: static;\n }\n}\n\n.archive__subtitle {\n margin: 1.414em 0 0.5em;\n padding-bottom: 0.5em;\n font-size: $type-size-5;\n color: $muted-text-color;\n border-bottom: 1px solid $border-color;\n\n + .list__item .archive__item-title {\n margin-top: 0.5em;\n }\n}\n\n.archive__item-title {\n margin-bottom: 0.25em;\n font-family: $sans-serif-narrow;\n line-height: initial;\n overflow: hidden;\n text-overflow: ellipsis;\n\n a[rel=\"permalink\"]::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n }\n\n a + a {\n opacity: 0.5;\n }\n}\n\n/* remove border*/\n.page__content {\n .archive__item-title {\n margin-top: 1em;\n border-bottom: none;\n }\n}\n\n.archive__item-excerpt {\n margin-top: 0;\n font-size: $type-size-6;\n\n & + p {\n text-indent: 0;\n }\n\n a {\n position: relative;\n }\n}\n\n.archive__item-teaser {\n position: relative;\n border-radius: $border-radius;\n overflow: hidden;\n\n img {\n width: 100%;\n }\n}\n\n.archive__item-caption {\n position: absolute;\n bottom: 0;\n right: 0;\n margin: 0 auto;\n padding: 2px 5px;\n color: #fff;\n font-family: $caption-font-family;\n font-size: $type-size-8;\n background: #000;\n text-align: right;\n z-index: 5;\n opacity: 0.5;\n border-radius: $border-radius 0 0 0;\n\n @include breakpoint($large) {\n padding: 5px 10px;\n }\n\n a {\n color: #fff;\n text-decoration: none;\n }\n}\n\n/*\n List view\n ========================================================================== */\n\n.list__item {\n .page__meta {\n margin: 0 0 4px;\n font-size: 0.6em;\n }\n}\n\n/*\n Grid view\n ========================================================================== */\n\n.archive {\n .grid__wrapper {\n /* extend grid elements to the right */\n\n @include breakpoint($large) {\n margin-right: -1 * $right-sidebar-width-narrow;\n }\n\n @include breakpoint($x-large) {\n margin-right: -1 * $right-sidebar-width;\n }\n }\n}\n\n.grid__item {\n margin-bottom: 2em;\n\n @include breakpoint($small) {\n float: left;\n width: span(5 of 10);\n\n &:nth-child(2n + 1) {\n clear: both;\n margin-left: 0;\n }\n\n &:nth-child(2n + 2) {\n clear: none;\n margin-left: gutter(of 10);\n }\n }\n\n @include breakpoint($medium) {\n margin-left: 0; /* override margin*/\n margin-right: 0; /* override margin*/\n width: span(3 of 12);\n\n &:nth-child(2n + 1) {\n clear: none;\n }\n\n &:nth-child(4n + 1) {\n clear: both;\n }\n\n &:nth-child(4n + 2) {\n clear: none;\n margin-left: gutter(1 of 12);\n }\n\n &:nth-child(4n + 3) {\n clear: none;\n margin-left: gutter(1 of 12);\n }\n\n &:nth-child(4n + 4) {\n clear: none;\n margin-left: gutter(1 of 12);\n }\n }\n\n .page__meta {\n margin: 0 0 4px;\n font-size: 0.6em;\n }\n\n .page__meta-sep {\n display: block;\n\n &::before {\n display: none;\n }\n }\n\n .archive__item-title {\n margin-top: 0.5em;\n font-size: $type-size-5;\n }\n\n .archive__item-excerpt {\n display: none;\n\n @include breakpoint($medium) {\n display: block;\n font-size: $type-size-6;\n }\n }\n\n .archive__item-teaser {\n @include breakpoint($small) {\n max-height: 200px;\n }\n\n @include breakpoint($medium) {\n max-height: 120px;\n }\n }\n}\n\n/*\n Features\n ========================================================================== */\n\n.feature__wrapper {\n @include clearfix();\n margin-bottom: 2em;\n border-bottom: 1px solid $border-color;\n\n .archive__item-title {\n margin-bottom: 0;\n }\n}\n\n.feature__item {\n position: relative;\n margin-bottom: 2em;\n font-size: 1.125em;\n\n @include breakpoint($small) {\n float: left;\n margin-bottom: 0;\n width: span(4 of 12);\n\n &:nth-child(3n + 1) {\n clear: both;\n margin-left: 0;\n }\n\n &:nth-child(3n + 2) {\n clear: none;\n margin-left: gutter(of 12);\n }\n\n &:nth-child(3n + 3) {\n clear: none;\n margin-left: gutter(of 12);\n }\n\n .feature__item-teaser {\n max-height: 200px;\n overflow: hidden;\n }\n }\n\n .archive__item-body {\n padding-left: gutter(1 of 12);\n padding-right: gutter(1 of 12);\n }\n\n a.btn::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n }\n\n &--left {\n position: relative;\n float: left;\n margin-left: 0;\n margin-right: 0;\n width: 100%;\n clear: both;\n font-size: 1.125em;\n\n .archive__item {\n float: left;\n }\n\n .archive__item-teaser {\n margin-bottom: 2em;\n }\n\n a.btn::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n }\n\n @include breakpoint($small) {\n .archive__item-teaser {\n float: left;\n width: span(5 of 12);\n }\n\n .archive__item-body {\n float: right;\n padding-left: gutter(0.5 of 12);\n padding-right: gutter(1 of 12);\n width: span(7 of 12);\n }\n }\n }\n\n &--right {\n position: relative;\n float: left;\n margin-left: 0;\n margin-right: 0;\n width: 100%;\n clear: both;\n font-size: 1.125em;\n\n .archive__item {\n float: left;\n }\n\n .archive__item-teaser {\n margin-bottom: 2em;\n }\n\n a.btn::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n }\n\n @include breakpoint($small) {\n text-align: right;\n\n .archive__item-teaser {\n float: right;\n width: span(5 of 12);\n }\n\n .archive__item-body {\n float: left;\n width: span(7 of 12);\n padding-left: gutter(0.5 of 12);\n padding-right: gutter(1 of 12);\n }\n }\n }\n\n &--center {\n position: relative;\n float: left;\n margin-left: 0;\n margin-right: 0;\n width: 100%;\n clear: both;\n font-size: 1.125em;\n\n .archive__item {\n float: left;\n width: 100%;\n }\n\n .archive__item-teaser {\n margin-bottom: 2em;\n }\n\n a.btn::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n }\n\n @include breakpoint($small) {\n text-align: center;\n\n .archive__item-teaser {\n margin: 0 auto;\n width: span(5 of 12);\n }\n\n .archive__item-body {\n margin: 0 auto;\n width: span(7 of 12);\n }\n }\n }\n}\n\n/* Place inside an archive layout */\n\n.archive {\n .feature__wrapper {\n .archive__item-title {\n margin-top: 0.25em;\n font-size: 1em;\n }\n }\n\n .feature__item,\n .feature__item--left,\n .feature__item--center,\n .feature__item--right {\n font-size: 1em;\n }\n}\n\n/*\n Wide Pages\n ========================================================================== */\n\n .wide {\n .archive {\n @include breakpoint($large) {\n padding-right: 0;\n }\n\n @include breakpoint($x-large) {\n padding-right: 0;\n }\n }\n}\n\n/* Place inside a single layout */\n\n.layout--single {\n\t.feature__wrapper {\n\t\tdisplay: inline-block;\n\t}\n}\n", + "/* ==========================================================================\n SIDEBAR\n ========================================================================== */\n\n/*\n Default\n ========================================================================== */\n\n.sidebar {\n @include clearfix();\n // @include breakpoint(max-width $large) {\n // /* fix z-index order of follow links */\n // position: relative;\n // z-index: 10;\n // -webkit-transform: translate3d(0, 0, 0);\n // transform: translate3d(0, 0, 0);\n // }\n\n @include breakpoint($large) {\n float: left;\n width: calc(#{$right-sidebar-width-narrow} - 1em);\n opacity: 0.75;\n -webkit-transition: opacity 0.2s ease-in-out;\n transition: opacity 0.2s ease-in-out;\n\n &:hover {\n opacity: 1;\n }\n\n &.sticky {\n overflow-y: auto;\n /* calculate height of nav list\n viewport height - nav height - masthead x-padding\n */\n max-height: calc(100vh - #{$nav-height} - 2em);\n }\n }\n\n @include breakpoint($x-large) {\n width: calc(#{$right-sidebar-width} - 1em);\n }\n\n > * {\n margin-top: 1em;\n margin-bottom: 1em;\n }\n\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin-bottom: 0;\n font-family: $sans-serif-narrow;\n }\n\n p,\n li {\n font-family: $sans-serif;\n font-size: $type-size-5;\n line-height: 1.5;\n }\n\n img {\n width: 100%;\n\n &.emoji {\n width: 20px;\n height: 20px;\n }\n }\n}\n\n.sidebar__right {\n margin-bottom: 1em;\n\n @include breakpoint($large) {\n position: absolute;\n top: 0;\n right: 0;\n width: $right-sidebar-width-narrow;\n margin-right: -1 * $right-sidebar-width-narrow;\n padding-left: 1em;\n z-index: 10;\n\n &.sticky {\n @include clearfix();\n position: -webkit-sticky;\n position: sticky;\n top: 2em;\n float: right;\n\n .toc {\n .toc__menu {\n overflow-y: auto;\n max-height: calc(100vh - 7em);\n }\n }\n }\n }\n\n @include breakpoint($x-large) {\n width: $right-sidebar-width;\n margin-right: -1 * $right-sidebar-width;\n }\n}\n\n.splash .sidebar__right {\n @include breakpoint($large) {\n position: relative;\n float: right;\n margin-right: 0;\n }\n\n @include breakpoint($x-large) {\n margin-right: 0;\n }\n}\n\n/*\n Author profile and links\n ========================================================================== */\n\n.author__avatar {\n display: table-cell;\n vertical-align: top;\n width: 36px;\n height: 36px;\n\n @include breakpoint($large) {\n display: block;\n width: auto;\n height: auto;\n }\n\n img {\n max-width: 110px;\n border-radius: 50%;\n\n @include breakpoint($large) {\n padding: 5px;\n border: 1px solid $border-color;\n }\n }\n}\n\n.author__content {\n display: table-cell;\n vertical-align: top;\n padding-left: 15px;\n padding-right: 25px;\n line-height: 1;\n\n @include breakpoint($large) {\n display: block;\n width: 100%;\n padding-left: 0;\n padding-right: 0;\n }\n\n a {\n color: inherit;\n text-decoration: none;\n }\n}\n\n.author__name {\n margin: 0;\n\n @include breakpoint($large) {\n margin-top: 10px;\n margin-bottom: 10px;\n }\n}\n\n.sidebar .author__name {\n font-family: $sans-serif;\n font-size: $type-size-5;\n}\n\n.author__bio {\n margin: 0;\n\n @include breakpoint($large) {\n margin-top: 10px;\n margin-bottom: 20px;\n }\n}\n\n.author__urls-wrapper {\n position: relative;\n display: table-cell;\n vertical-align: middle;\n font-family: $sans-serif;\n z-index: 20;\n cursor: pointer;\n\n li:last-child {\n a {\n margin-bottom: 0;\n }\n }\n\n .author__urls {\n span.label {\n padding-left: 5px;\n }\n }\n\n @include breakpoint($large) {\n display: block;\n }\n\n button {\n position: relative;\n margin-bottom: 0;\n\n &:before {\n @supports (pointer-events: none) {\n content: '';\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n }\n }\n\n &.open {\n &:before {\n pointer-events: auto;\n }\n }\n\n @include breakpoint($large) {\n display: none;\n }\n }\n}\n\n.author__urls {\n display: none;\n position: absolute;\n right: 0;\n margin-top: 15px;\n padding: 10px;\n list-style-type: none;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n background: $background-color;\n box-shadow: 0 2px 4px 0 rgba(#000, 0.16), 0 2px 10px 0 rgba(#000, 0.12);\n cursor: default;\n\n &.is--visible {\n display: block;\n }\n\n @include breakpoint($large) {\n display: block;\n position: relative;\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n box-shadow: none;\n }\n\n &:before {\n display: block;\n content: \"\";\n position: absolute;\n top: -11px;\n left: calc(50% - 10px);\n width: 0;\n border-style: solid;\n border-width: 0 10px 10px;\n border-color: $border-color transparent;\n z-index: 0;\n\n @include breakpoint($large) {\n display: none;\n }\n }\n\n &:after {\n display: block;\n content: \"\";\n position: absolute;\n top: -10px;\n left: calc(50% - 10px);\n width: 0;\n border-style: solid;\n border-width: 0 10px 10px;\n border-color: $background-color transparent;\n z-index: 1;\n\n @include breakpoint($large) {\n display: none;\n }\n }\n\n ul {\n padding: 10px;\n list-style-type: none;\n }\n\n li {\n white-space: nowrap;\n }\n\n a {\n display: block;\n margin-bottom: 5px;\n padding-right: 5px;\n padding-top: 2px;\n padding-bottom: 2px;\n color: inherit;\n font-size: $type-size-5;\n text-decoration: none;\n\n &:hover {\n text-decoration: underline;\n }\n }\n}\n\n// Specific styles for TOC\n.toc {\n font-family: $sans-serif;\n font-size: $type-size-5;\n\n .nav__title {\n font-size: $type-size-6;\n }\n\n .toc__menu {\n font-size: $type-size-6;\n\n ul {\n padding-left: 1em;\n }\n }\n}\n\n// Specific styles for author profile\n.author__avatar,\n.author__content,\n.author__urls-wrapper {\n font-family: $body-font;\n font-size: $type-size-6;\n}\n", + "/* ==========================================================================\n PRINT STYLES\n ========================================================================== */\n\n@media print {\n\n [hidden] {\n display: none;\n }\n\n * {\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n }\n\n html {\n margin: 0;\n padding: 0;\n min-height: auto !important;\n font-size: 16px;\n }\n\n body {\n margin: 0 auto;\n background: #fff !important;\n color: #000 !important;\n font-size: 1rem;\n line-height: 1.5;\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n text-rendering: optimizeLegibility;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n color: #000;\n line-height: 1.2;\n margin-bottom: 0.75rem;\n margin-top: 0;\n }\n\n h1 {\n font-size: 2.5rem;\n }\n\n h2 {\n font-size: 2rem;\n }\n\n h3 {\n font-size: 1.75rem;\n }\n\n h4 {\n font-size: 1.5rem;\n }\n\n h5 {\n font-size: 1.25rem;\n }\n\n h6 {\n font-size: 1rem;\n }\n\n a,\n a:visited {\n color: #000;\n text-decoration: underline;\n word-wrap: break-word;\n }\n\n table {\n border-collapse: collapse;\n }\n\n thead {\n display: table-header-group;\n }\n\n table,\n th,\n td {\n border-bottom: 1px solid #000;\n }\n\n td,\n th {\n padding: 8px 16px;\n }\n\n img {\n border: 0;\n display: block;\n max-width: 100% !important;\n vertical-align: middle;\n }\n\n hr {\n border: 0;\n border-bottom: 2px solid #bbb;\n height: 0;\n margin: 2.25rem 0;\n padding: 0;\n }\n\n dt {\n font-weight: bold;\n }\n\n dd {\n margin: 0;\n margin-bottom: 0.75rem;\n }\n\n abbr[title],\n acronym[title] {\n border: 0;\n text-decoration: none;\n }\n\n table,\n blockquote,\n pre,\n code,\n figure,\n li,\n hr,\n ul,\n ol,\n a,\n tr {\n page-break-inside: avoid;\n }\n\n h2,\n h3,\n h4,\n p,\n a {\n orphans: 3;\n widows: 3;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n page-break-after: avoid;\n page-break-inside: avoid;\n }\n\n h1 + p,\n h2 + p,\n h3 + p {\n page-break-before: avoid;\n }\n\n img {\n page-break-after: auto;\n page-break-before: auto;\n page-break-inside: avoid;\n }\n\n pre {\n white-space: pre-wrap !important;\n word-wrap: break-word;\n }\n\n a[href^='http://']:after,\n a[href^='https://']:after,\n a[href^='ftp://']:after {\n content: \" (\" attr(href) \")\";\n font-size: 80%;\n }\n\n abbr[title]:after,\n acronym[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n #main {\n max-width: 100%;\n }\n\n .page {\n margin: 0;\n padding: 0;\n width: 100%;\n }\n\n .page-break,\n .page-break-before {\n page-break-before: always;\n }\n\n .page-break-after {\n page-break-after: always;\n }\n\n .no-print {\n display: none;\n }\n\n a.no-reformat:after {\n content: '';\n }\n\n abbr[title].no-reformat:after,\n acronym[title].no-reformat:after {\n content: '';\n }\n\n .page__hero-caption {\n color: #000 !important;\n background: #fff !important;\n opacity: 1;\n\n a {\n color: #000 !important;\n }\n }\n\n/*\n Hide the following elements on print\n ========================================================================== */\n\n .masthead,\n .toc,\n .page__share,\n .page__related,\n .pagination,\n .ads,\n .page__footer,\n .page__comments-form,\n .author__avatar,\n .author__content,\n .author__urls-wrapper,\n .nav__list,\n .sidebar,\n .adsbygoogle {\n display: none !important;\n height: 1px !important;\n }\n}", + ".theme-switch-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 20px;\n}\n\n.theme-switch {\n display: inline-block;\n height: 26px; /* Reduced height */\n position: relative;\n width: 50px; /* Reduced width for smaller slider */\n}\n\n.theme-switch input { \n display:none;\n}\n\n.slider {\n background-color: #ccc;\n bottom: 0;\n cursor: pointer;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n transition: .4s;\n}\n\n.slider:before {\n background-color: #f3f3f3;\n bottom: 4px;\n content: \"\";\n height: 18px; /* Reduced height */\n left: 4px; /* Initially positioned at the left */\n position: absolute;\n transition: .4s;\n width: 18px; /* Reduced width */\n}\n\ninput:checked + .slider {\n background-color: #252a34;\n}\n\n.slider.round {\n border-radius: 26px; /* Adjusted for reduced height */\n}\n\n.slider.round:before {\n border-radius: 50%;\n}\n\ninput:checked + .slider:before {\n left: calc(100% - 22px); /* Adjust left position for smaller button */\n}\n\n" + ], + "names": [], + "mappings": "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" +} \ No newline at end of file diff --git a/assets/css/theme2.scss b/assets/css/theme2.scss deleted file mode 100644 index f83e0e61c668a..0000000000000 --- a/assets/css/theme2.scss +++ /dev/null @@ -1,24 +0,0 @@ ---- -# Only the main Sass file needs front matter (the dashes are enough) ---- - -@charset "utf-8"; - -@import "minimal-mistakes/skins/{{ site.minimal_mistakes_skin2 | default: 'default' }}"; // skin -@import "minimal-mistakes"; // main partials - -// AN Notes: https://github.com/NaanProphet/tripodvideoninja/commit/d9905c1f71ac57597b20073c95c50807e45f57a5 -/* hack to fill the left-hand-side when there is no author */ - .wide_post article.page { - float: left; - width: 100%; - } - - /* push the TOC out to the right just a little*/ - .sidebar__right { - padding-left: 5%; - } - .layout--single { - margin-left: 10%; - margin-right: 10%; - } diff --git a/assets/imgs/favicons/.DS_Store b/assets/imgs/favicons/.DS_Store deleted file mode 100644 index 5008ddfcf53c0..0000000000000 Binary files a/assets/imgs/favicons/.DS_Store and /dev/null differ diff --git a/assets/js/_main.js b/assets/js/_main.js deleted file mode 100644 index 06c7092f1b719..0000000000000 --- a/assets/js/_main.js +++ /dev/null @@ -1,136 +0,0 @@ -/* ========================================================================== - jQuery plugin settings and other scripts - ========================================================================== */ - -$(function() { - // FitVids init - $("#main").fitVids(); - - // Sticky sidebar - var stickySideBar = function() { - var show = - $(".author__urls-wrapper").find("button").length === 0 - ? $(window).width() > 1024 // width should match $large Sass variable - : !$(".author__urls-wrapper").find("button").is(":visible"); - if (show) { - // fix - $(".sidebar").addClass("sticky"); - } else { - // unfix - $(".sidebar").removeClass("sticky"); - } - }; - - stickySideBar(); - - $(window).resize(function() { - stickySideBar(); - }); - - // Follow menu drop down - $(".author__urls-wrapper").find("button").on("click", function() { - $(".author__urls").toggleClass("is--visible"); - $(".author__urls-wrapper").find("button").toggleClass("open"); - }); - - // Close search screen with Esc key - $(document).keyup(function(e) { - if (e.keyCode === 27) { - if ($(".initial-content").hasClass("is--hidden")) { - $(".search-content").toggleClass("is--visible"); - $(".initial-content").toggleClass("is--hidden"); - } - } - }); - - // Search toggle - $(".search__toggle").on("click", function() { - $(".search-content").toggleClass("is--visible"); - $(".initial-content").toggleClass("is--hidden"); - // set focus on input - setTimeout(function() { - $(".search-content").find("input").focus(); - }, 400); - }); - - // Smooth scrolling - var scroll = new SmoothScroll('a[href*="#"]', { - offset: 20, - speed: 400, - speedAsDuration: true, - durationMax: 500 - }); - - // Gumshoe scroll spy init - if($("nav.toc").length > 0) { - var spy = new Gumshoe("nav.toc a", { - // Active classes - navClass: "active", // applied to the nav list item - contentClass: "active", // applied to the content - - // Nested navigation - nested: false, // if true, add classes to parents of active link - nestedClass: "active", // applied to the parent items - - // Offset & reflow - offset: 20, // how far from the top of the page to activate a content area - reflow: true, // if true, listen for reflows - - // Event support - events: true // if true, emit custom events - }); - } - - // add lightbox class to all image links - $( - "a[href$='.jpg'],a[href$='.jpeg'],a[href$='.JPG'],a[href$='.png'],a[href$='.gif'],a[href$='.webp']" - ).has("> img").addClass("image-popup"); - - // Magnific-Popup options - $(".image-popup").magnificPopup({ - // disableOn: function() { - // if( $(window).width() < 500 ) { - // return false; - // } - // return true; - // }, - type: "image", - tLoading: "Loading image #%curr%...", - gallery: { - enabled: true, - navigateByImgClick: true, - preload: [0, 1] // Will preload 0 - before current, and 1 after the current image - }, - image: { - tError: 'Image #%curr% could not be loaded.' - }, - removalDelay: 500, // Delay in milliseconds before popup is removed - // Class that is added to body when popup is open. - // make it unique to apply your CSS animations just to this exact popup - mainClass: "mfp-zoom-in", - callbacks: { - beforeOpen: function() { - // just a hack that adds mfp-anim class to markup - this.st.image.markup = this.st.image.markup.replace( - "mfp-figure", - "mfp-figure mfp-with-anim" - ); - } - }, - closeOnContentClick: true, - midClick: true // allow opening popup on middle mouse click. Always set it to true if you don't provide alternative source. - }); - - // Add anchors for headings - $('.page__content').find('h1, h2, h3, h4, h5, h6').each(function() { - var id = $(this).attr('id'); - if (id) { - var anchor = document.createElement("a"); - anchor.className = 'header-link'; - anchor.href = '#' + id; - anchor.innerHTML = 'Permalink'; - anchor.title = "Permalink"; - $(this).append(anchor); - } - }); -}); diff --git a/assets/js/lunr/lunr-en.js b/assets/js/lunr/lunr-en.js index 43429309faf00..d1400a7682989 100644 --- a/assets/js/lunr/lunr-en.js +++ b/assets/js/lunr/lunr-en.js @@ -1,7 +1,3 @@ ---- -layout: none ---- - var idx = lunr(function () { this.field('title') this.field('excerpt') @@ -39,7 +35,7 @@ $(document).ready(function() { }) }); resultdiv.empty(); - resultdiv.prepend('

'+result.length+' {{ site.data.ui-text[site.locale].results_found | default: "Result(s) found" }}

'); + resultdiv.prepend('

'+result.length+' Result(s) found

'); for (var item in result) { var ref = result[item].ref; if(store[ref].teaser){ diff --git a/assets/js/lunr/lunr-gr.js b/assets/js/lunr/lunr-gr.js index 10eb0e71cef48..e829362bf6752 100644 --- a/assets/js/lunr/lunr-gr.js +++ b/assets/js/lunr/lunr-gr.js @@ -1,7 +1,3 @@ ---- -layout: none ---- - step1list = new Array(); step1list["ΦΑΓΙΑ"] = "ΦΑ"; step1list["ΦΑΓΙΟΥ"] = "ΦΑ"; @@ -492,7 +488,7 @@ $(document).ready(function() { }) }); resultdiv.empty(); - resultdiv.prepend('

'+result.length+' {{ site.data.ui-text[site.locale].results_found | default: "Result(s) found" }}

'); + resultdiv.prepend('

'+result.length+' Result(s) found

'); for (var item in result) { var ref = result[item].ref; if(store[ref].teaser){ diff --git a/assets/js/lunr/lunr-store.js b/assets/js/lunr/lunr-store.js index 565e3b3e4e7c1..5c19aae9b6daf 100644 --- a/assets/js/lunr/lunr-store.js +++ b/assets/js/lunr/lunr-store.js @@ -1,84 +1,73 @@ ---- -layout: none ---- - -var store = [ - {%- for c in site.collections -%} - {%- if forloop.last -%} - {%- assign l = true -%} - {%- endif -%} - {%- assign docs = c.docs | where_exp:'doc','doc.search != false' -%} - {%- for doc in docs -%} - {%- if doc.header.teaser -%} - {%- capture teaser -%}{{ doc.header.teaser }}{%- endcapture -%} - {%- else -%} - {%- assign teaser = site.teaser -%} - {%- endif -%} - { - "title": {{ doc.title | jsonify }}, - "excerpt": - {%- if site.search_full_content == true -%} - {{ doc.content | newline_to_br | - replace:"
", " " | - replace:"

", " " | - replace:"", " " | - replace:"", " " | - replace:"", " " | - replace:"", " " | - replace:"", " " | - replace:"", " "| - strip_html | strip_newlines | jsonify }}, - {%- else -%} - {{ doc.content | newline_to_br | - replace:"
", " " | - replace:"

", " " | - replace:"", " " | - replace:"", " " | - replace:"", " " | - replace:"", " " | - replace:"", " " | - replace:"", " "| - strip_html | strip_newlines | truncatewords: 50 | jsonify }}, - {%- endif -%} - "categories": {{ doc.categories | jsonify }}, - "tags": {{ doc.tags | jsonify }}, - "url": {{ doc.url | relative_url | jsonify }}, - "teaser": {{ teaser | relative_url | jsonify }} - }{%- unless forloop.last and l -%},{%- endunless -%} - {%- endfor -%} - {%- endfor -%}{%- if site.lunr.search_within_pages -%}, - {%- assign pages = site.pages | where_exp:'doc','doc.search != false' -%} - {%- for doc in pages -%} - {%- if forloop.last -%} - {%- assign l = true -%} - {%- endif -%} - { - "title": {{ doc.title | jsonify }}, - "excerpt": - {%- if site.search_full_content == true -%} - {{ doc.content | newline_to_br | - replace:"
", " " | - replace:"

", " " | - replace:"", " " | - replace:"", " " | - replace:"", " " | - replace:"", " " | - replace:"", " " | - replace:"", " "| - strip_html | strip_newlines | jsonify }}, - {%- else -%} - {{ doc.content | newline_to_br | - replace:"
", " " | - replace:"

", " " | - replace:"", " " | - replace:"", " " | - replace:"", " " | - replace:"", " " | - replace:"", " " | - replace:"", " "| - strip_html | strip_newlines | truncatewords: 50 | jsonify }}, - {%- endif -%} - "url": {{ doc.url | absolute_url | jsonify }} - }{%- unless forloop.last and l -%},{%- endunless -%} - {%- endfor -%} -{%- endif -%}] +var store = [{ + "title": "Final Year Project: Space Station Design", + "excerpt":"⊕ Logo for SpaceHQ. We like to think of ourseleves as a ragtag group of outliers trying to figure out how we can build larger structures in space. An example challenge is how we can go from modular stations such as ISS, as seen on the left of our logo,...","categories": [], + "tags": [], + "url": "/online_textbooks/UG_final_year_project/", + "teaser": null + },{ + "title": "Symbolic Computational Dynamics", + "excerpt":"Weblink Who might find the above link useful? The above text is most useful for QMUL’s first year undergraduate students taking EMS418U: Computational and Mathematical Modelling 2. It could also be a useful resource for educators interested in classical mechanics wishing to teach computational modeling to students using computer symbolic...","categories": [], + "tags": [], + "url": "/online_textbooks/computational_dynamics/", + "teaser": null + },{ + "title": "Computational Spacecraft Dynamics", + "excerpt":"Weblink Who might find the above link useful? The above online textbook is most useful for QMUL’s second year Aerospace Engineering undergraduate students taking EMS515U: Introduction to Spacecraft Dynamics. It could also be a useful resource for other educators interested in teaching orbital mechanics, especially using computational tools like numpy....","categories": [], + "tags": [], + "url": "/online_textbooks/spacecraft_dynamics/", + "teaser": null + },{ + "title": "Three major issues in today's consumer Internet", + "excerpt":"Much of today’s `free’ or consumer internet is built on three principles: Involuntary user data exploitation: Recent debates around generative AI have returned attention to this. Novel manipulation of users by malicious actors through personal chat: WhatsApp is used as a political weapon to broadcast misinformation during elections, especially in...","categories": ["Social Networking","Internet"], + "tags": [], + "url": "/social%20networking/internet/Improve-Internet/", + "teaser": null + },{ + "title": "Some Space Stations in Fiction and Reality", + "excerpt":"An earlier post in my teaching resources for a final year undergraduate project had a pretty helpful AI-generatedthanks to Claude table. This is a quick post about Wernher von Braun’s 1950’s conceptual rotating wheel station with some basic comparisons to the ISS (1998-present) and 1968’s Space Station V from 2001:...","categories": ["Large Space Stations","Space Exploration"], + "tags": [], + "url": "/large%20space%20stations/space%20exploration/vonBraunWheels/", + "teaser": null + },{ + "title": "Inflatable von Braun space stations: an idea worth revisiting?", + "excerpt":"Background Kepler’s SomniumAt the time of my writing this post, his sci-fi story was archived here in 1608 and Edward Everett Hale’s Brick Moon 1 from 1865 are early fantasy science-fiction of space-faring humans. Kepler faced more flak than fanfare for his workKepler’s mom was put on trial for witchcraft...","categories": ["Large Space Stations","Space Exploration"], + "tags": [], + "url": "/large%20space%20stations/space%20exploration/space-inflatables-1/", + "teaser": null + },{ + "title": "Lagrange's equations for rocket-type variable mass systems", + "excerpt":"This paper examines the geometry of motion and nutation stability in free axisymmetric variable mass systems. Download paper here Recommended citation: Nanjangud, A. and Eke, F. O. (2018). “Lagrange’s equations for rocket-type variable mass systems.” International Review of Aerospace Engineering. 5(5), 255-260. ","categories": ["manuscripts"], + "tags": [], + "url": "/publication/2012-10-01-lagrange-equations-rocket-type", + "teaser": null + },{ + "title": "Approximate solution to the angular speeds of a nearly-symmetric mass-varying cylindrical body", + "excerpt":"This paper presents an approximate solution to the angular speeds of a nearly-symmetric mass-varying cylindrical body. Download paper here Recommended citation: Nanjangud, A. and Eke, F. O. (2017). “Approximate solution to the angular speeds of a nearly-symmetric mass-varying cylindrical body.” The Journal of the Astronautical Sciences. 64(2), 99-117. ","categories": ["conferences"], + "tags": [], + "url": "/publication/2017-06-01-approximate-solution-angular-speeds", + "teaser": null + },{ + "title": "Robotics and AI-enabled on-orbit operations with future generation of small satellites", + "excerpt":"This paper discusses robotics and AI-enabled on-orbit operations with future generation of small satellites. Download paper here Recommended citation: Nanjangud, A., Blacker, P. C., Bandyopadhyay, S., and Gao, Y. (2018). “Robotics and AI-enabled on-orbit operations with future generation of small satellites.” Proceedings of the IEEE. 106(3), 429-439. ","categories": ["manuscripts"], + "tags": [], + "url": "/publication/2018-03-01-robotics-ai-enabled-on-orbit-operations", + "teaser": null + },{ + "title": "Geometry of motion and nutation stability of free axisymmetric variable mass systems", + "excerpt":"This paper examines the geometry of motion and nutation stability in free axisymmetric variable mass systems. Download paper here Recommended citation: Nanjangud, A. (2018). “Geometry of motion and nutation stability of free axisymmetric variable mass systems.” Nonlinear Dynamics. 94(3), 2205-2218. ","categories": ["manuscripts"], + "tags": [], + "url": "/publication/2018-05-01-geometry-of-motion-nutation-stability", + "teaser": null + },{ + "title": "Angular momentum of free variable mass systems is partially conserved", + "excerpt":"This paper demonstrates that angular momentum of free variable mass systems is partially conserved. Download paper here Recommended citation: Nanjangud, A. and Eke, F. O. (2018). “Angular momentum of free variable mass systems is partially conserved.” Aerospace Science and Technology. 79, 1-4. ","categories": ["manuscripts"], + "tags": [], + "url": "/publication/2018-08-01-angular-momentum-free-variable-mass-systems", + "teaser": null + },{ + "title": "Towards Robotic On-Orbit Assembly of Large Space Telescopes: Mission Architectures, Concepts, and Analyses", + "excerpt":"This paper discusses mission architectures and concepts for robotic on-orbit assembly of large space telescopes. Download paper here Recommended citation: Nanjangud, A., Underwood, C., Rai, C. M., Eckersley, S., Sweeting, M., and Bianco. P. (2023). “Towards Robotic On-Orbit Assembly of Large Space Telescopes: Mission Architectures, Concepts, and Analyses.” Acta Astronautica....","categories": ["manuscripts"], + "tags": [], + "url": "/publication/2023-06-01-towards-robotic-on-orbit-assembly", + "teaser": null + }] diff --git a/assets/js/plugins/gumshoe.js b/assets/js/plugins/gumshoe.js deleted file mode 100644 index 713b6eb303020..0000000000000 --- a/assets/js/plugins/gumshoe.js +++ /dev/null @@ -1,484 +0,0 @@ -/*! - * gumshoejs v5.1.1 - * A simple, framework-agnostic scrollspy script. - * (c) 2019 Chris Ferdinandi - * MIT License - * http://github.com/cferdinandi/gumshoe - */ - -(function (root, factory) { - if ( typeof define === 'function' && define.amd ) { - define([], (function () { - return factory(root); - })); - } else if ( typeof exports === 'object' ) { - module.exports = factory(root); - } else { - root.Gumshoe = factory(root); - } -})(typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : this, (function (window) { - - 'use strict'; - - // - // Defaults - // - - var defaults = { - - // Active classes - navClass: 'active', - contentClass: 'active', - - // Nested navigation - nested: false, - nestedClass: 'active', - - // Offset & reflow - offset: 0, - reflow: false, - - // Event support - events: true - - }; - - - // - // Methods - // - - /** - * Merge two or more objects together. - * @param {Object} objects The objects to merge together - * @returns {Object} Merged values of defaults and options - */ - var extend = function () { - var merged = {}; - Array.prototype.forEach.call(arguments, (function (obj) { - for (var key in obj) { - if (!obj.hasOwnProperty(key)) return; - merged[key] = obj[key]; - } - })); - return merged; - }; - - /** - * Emit a custom event - * @param {String} type The event type - * @param {Node} elem The element to attach the event to - * @param {Object} detail Any details to pass along with the event - */ - var emitEvent = function (type, elem, detail) { - - // Make sure events are enabled - if (!detail.settings.events) return; - - // Create a new event - var event = new CustomEvent(type, { - bubbles: true, - cancelable: true, - detail: detail - }); - - // Dispatch the event - elem.dispatchEvent(event); - - }; - - /** - * Get an element's distance from the top of the Document. - * @param {Node} elem The element - * @return {Number} Distance from the top in pixels - */ - var getOffsetTop = function (elem) { - var location = 0; - if (elem.offsetParent) { - while (elem) { - location += elem.offsetTop; - elem = elem.offsetParent; - } - } - return location >= 0 ? location : 0; - }; - - /** - * Sort content from first to last in the DOM - * @param {Array} contents The content areas - */ - var sortContents = function (contents) { - if(contents) { - contents.sort((function (item1, item2) { - var offset1 = getOffsetTop(item1.content); - var offset2 = getOffsetTop(item2.content); - if (offset1 < offset2) return -1; - return 1; - })); - } - }; - - /** - * Get the offset to use for calculating position - * @param {Object} settings The settings for this instantiation - * @return {Float} The number of pixels to offset the calculations - */ - var getOffset = function (settings) { - - // if the offset is a function run it - if (typeof settings.offset === 'function') { - return parseFloat(settings.offset()); - } - - // Otherwise, return it as-is - return parseFloat(settings.offset); - - }; - - /** - * Get the document element's height - * @private - * @returns {Number} - */ - var getDocumentHeight = function () { - return Math.max( - document.body.scrollHeight, document.documentElement.scrollHeight, - document.body.offsetHeight, document.documentElement.offsetHeight, - document.body.clientHeight, document.documentElement.clientHeight - ); - }; - - /** - * Determine if an element is in view - * @param {Node} elem The element - * @param {Object} settings The settings for this instantiation - * @param {Boolean} bottom If true, check if element is above bottom of viewport instead - * @return {Boolean} Returns true if element is in the viewport - */ - var isInView = function (elem, settings, bottom) { - var bounds = elem.getBoundingClientRect(); - var offset = getOffset(settings); - if (bottom) { - return parseInt(bounds.bottom, 10) < (window.innerHeight || document.documentElement.clientHeight); - } - return parseInt(bounds.top, 10) <= offset; - }; - - /** - * Check if at the bottom of the viewport - * @return {Boolean} If true, page is at the bottom of the viewport - */ - var isAtBottom = function () { - if (window.innerHeight + window.pageYOffset >= getDocumentHeight()) return true; - return false; - }; - - /** - * Check if the last item should be used (even if not at the top of the page) - * @param {Object} item The last item - * @param {Object} settings The settings for this instantiation - * @return {Boolean} If true, use the last item - */ - var useLastItem = function (item, settings) { - if (isAtBottom() && isInView(item.content, settings, true)) return true; - return false; - }; - - /** - * Get the active content - * @param {Array} contents The content areas - * @param {Object} settings The settings for this instantiation - * @return {Object} The content area and matching navigation link - */ - var getActive = function (contents, settings) { - var last = contents[contents.length-1]; - if (useLastItem(last, settings)) return last; - for (var i = contents.length - 1; i >= 0; i--) { - if (isInView(contents[i].content, settings)) return contents[i]; - } - }; - - /** - * Deactivate parent navs in a nested navigation - * @param {Node} nav The starting navigation element - * @param {Object} settings The settings for this instantiation - */ - var deactivateNested = function (nav, settings) { - - // If nesting isn't activated, bail - if (!settings.nested) return; - - // Get the parent navigation - var li = nav.parentNode.closest('li'); - if (!li) return; - - // Remove the active class - li.classList.remove(settings.nestedClass); - - // Apply recursively to any parent navigation elements - deactivateNested(li, settings); - - }; - - /** - * Deactivate a nav and content area - * @param {Object} items The nav item and content to deactivate - * @param {Object} settings The settings for this instantiation - */ - var deactivate = function (items, settings) { - - // Make sure their are items to deactivate - if (!items) return; - - // Get the parent list item - var li = items.nav.closest('li'); - if (!li) return; - - // Remove the active class from the nav and content - li.classList.remove(settings.navClass); - items.content.classList.remove(settings.contentClass); - - // Deactivate any parent navs in a nested navigation - deactivateNested(li, settings); - - // Emit a custom event - emitEvent('gumshoeDeactivate', li, { - link: items.nav, - content: items.content, - settings: settings - }); - - }; - - - /** - * Activate parent navs in a nested navigation - * @param {Node} nav The starting navigation element - * @param {Object} settings The settings for this instantiation - */ - var activateNested = function (nav, settings) { - - // If nesting isn't activated, bail - if (!settings.nested) return; - - // Get the parent navigation - var li = nav.parentNode.closest('li'); - if (!li) return; - - // Add the active class - li.classList.add(settings.nestedClass); - - // Apply recursively to any parent navigation elements - activateNested(li, settings); - - }; - - /** - * Activate a nav and content area - * @param {Object} items The nav item and content to activate - * @param {Object} settings The settings for this instantiation - */ - var activate = function (items, settings) { - - // Make sure their are items to activate - if (!items) return; - - // Get the parent list item - var li = items.nav.closest('li'); - if (!li) return; - - // Add the active class to the nav and content - li.classList.add(settings.navClass); - items.content.classList.add(settings.contentClass); - - // Activate any parent navs in a nested navigation - activateNested(li, settings); - - // Emit a custom event - emitEvent('gumshoeActivate', li, { - link: items.nav, - content: items.content, - settings: settings - }); - - }; - - /** - * Create the Constructor object - * @param {String} selector The selector to use for navigation items - * @param {Object} options User options and settings - */ - var Constructor = function (selector, options) { - - // - // Variables - // - - var publicAPIs = {}; - var navItems, contents, current, timeout, settings; - - - // - // Methods - // - - /** - * Set variables from DOM elements - */ - publicAPIs.setup = function () { - - // Get all nav items - navItems = document.querySelectorAll(selector); - - // Create contents array - contents = []; - - // Loop through each item, get it's matching content, and push to the array - Array.prototype.forEach.call(navItems, (function (item) { - - // Get the content for the nav item - var content = document.getElementById(decodeURIComponent(item.hash.substr(1))); - if (!content) return; - - // Push to the contents array - contents.push({ - nav: item, - content: content - }); - - })); - - // Sort contents by the order they appear in the DOM - sortContents(contents); - - }; - - /** - * Detect which content is currently active - */ - publicAPIs.detect = function () { - - // Get the active content - var active = getActive(contents, settings); - - // if there's no active content, deactivate and bail - if (!active) { - if (current) { - deactivate(current, settings); - current = null; - } - return; - } - - // If the active content is the one currently active, do nothing - if (current && active.content === current.content) return; - - // Deactivate the current content and activate the new content - deactivate(current, settings); - activate(active, settings); - - // Update the currently active content - current = active; - - }; - - /** - * Detect the active content on scroll - * Debounced for performance - */ - var scrollHandler = function (event) { - - // If there's a timer, cancel it - if (timeout) { - window.cancelAnimationFrame(timeout); - } - - // Setup debounce callback - timeout = window.requestAnimationFrame(publicAPIs.detect); - - }; - - /** - * Update content sorting on resize - * Debounced for performance - */ - var resizeHandler = function (event) { - - // If there's a timer, cancel it - if (timeout) { - window.cancelAnimationFrame(timeout); - } - - // Setup debounce callback - timeout = window.requestAnimationFrame((function () { - sortContents(contents); - publicAPIs.detect(); - })); - - }; - - /** - * Destroy the current instantiation - */ - publicAPIs.destroy = function () { - - // Undo DOM changes - if (current) { - deactivate(current, settings); - } - - // Remove event listeners - window.removeEventListener('scroll', scrollHandler, false); - if (settings.reflow) { - window.removeEventListener('resize', resizeHandler, false); - } - - // Reset variables - contents = null; - navItems = null; - current = null; - timeout = null; - settings = null; - - }; - - /** - * Initialize the current instantiation - */ - var init = function () { - - // Merge user options into defaults - settings = extend(defaults, options || {}); - - // Setup variables based on the current DOM - publicAPIs.setup(); - - // Find the currently active content - publicAPIs.detect(); - - // Setup event listeners - window.addEventListener('scroll', scrollHandler, false); - if (settings.reflow) { - window.addEventListener('resize', resizeHandler, false); - } - - }; - - - // - // Initialize and return the public APIs - // - - init(); - return publicAPIs; - - }; - - - // - // Return the Constructor - // - - return Constructor; - -})); \ No newline at end of file diff --git a/assets/js/plugins/jquery.ba-throttle-debounce.js b/assets/js/plugins/jquery.ba-throttle-debounce.js deleted file mode 100644 index fa30bdfffe23f..0000000000000 --- a/assets/js/plugins/jquery.ba-throttle-debounce.js +++ /dev/null @@ -1,252 +0,0 @@ -/*! - * jQuery throttle / debounce - v1.1 - 3/7/2010 - * http://benalman.com/projects/jquery-throttle-debounce-plugin/ - * - * Copyright (c) 2010 "Cowboy" Ben Alman - * Dual licensed under the MIT and GPL licenses. - * http://benalman.com/about/license/ - */ - -// Script: jQuery throttle / debounce: Sometimes, less is more! -// -// *Version: 1.1, Last updated: 3/7/2010* -// -// Project Home - http://benalman.com/projects/jquery-throttle-debounce-plugin/ -// GitHub - http://github.com/cowboy/jquery-throttle-debounce/ -// Source - http://github.com/cowboy/jquery-throttle-debounce/raw/master/jquery.ba-throttle-debounce.js -// (Minified) - http://github.com/cowboy/jquery-throttle-debounce/raw/master/jquery.ba-throttle-debounce.min.js (0.7kb) -// -// About: License -// -// Copyright (c) 2010 "Cowboy" Ben Alman, -// Dual licensed under the MIT and GPL licenses. -// http://benalman.com/about/license/ -// -// About: Examples -// -// These working examples, complete with fully commented code, illustrate a few -// ways in which this plugin can be used. -// -// Throttle - http://benalman.com/code/projects/jquery-throttle-debounce/examples/throttle/ -// Debounce - http://benalman.com/code/projects/jquery-throttle-debounce/examples/debounce/ -// -// About: Support and Testing -// -// Information about what version or versions of jQuery this plugin has been -// tested with, what browsers it has been tested in, and where the unit tests -// reside (so you can test it yourself). -// -// jQuery Versions - none, 1.3.2, 1.4.2 -// Browsers Tested - Internet Explorer 6-8, Firefox 2-3.6, Safari 3-4, Chrome 4-5, Opera 9.6-10.1. -// Unit Tests - http://benalman.com/code/projects/jquery-throttle-debounce/unit/ -// -// About: Release History -// -// 1.1 - (3/7/2010) Fixed a bug in where trailing callbacks -// executed later than they should. Reworked a fair amount of internal -// logic as well. -// 1.0 - (3/6/2010) Initial release as a stand-alone project. Migrated over -// from jquery-misc repo v0.4 to jquery-throttle repo v1.0, added the -// no_trailing throttle parameter and debounce functionality. -// -// Topic: Note for non-jQuery users -// -// jQuery isn't actually required for this plugin, because nothing internal -// uses any jQuery methods or properties. jQuery is just used as a namespace -// under which these methods can exist. -// -// Since jQuery isn't actually required for this plugin, if jQuery doesn't exist -// when this plugin is loaded, the method described below will be created in -// the `Cowboy` namespace. Usage will be exactly the same, but instead of -// $.method() or jQuery.method(), you'll need to use Cowboy.method(). - -(function(window,undefined){ - '$:nomunge'; // Used by YUI compressor. - - // Since jQuery really isn't required for this plugin, use `jQuery` as the - // namespace only if it already exists, otherwise use the `Cowboy` namespace, - // creating it if necessary. - var $ = window.jQuery || window.Cowboy || ( window.Cowboy = {} ), - - // Internal method reference. - jq_throttle; - - // Method: jQuery.throttle - // - // Throttle execution of a function. Especially useful for rate limiting - // execution of handlers on events like resize and scroll. If you want to - // rate-limit execution of a function to a single time, see the - // method. - // - // In this visualization, | is a throttled-function call and X is the actual - // callback execution: - // - // > Throttled with `no_trailing` specified as false or unspecified: - // > ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - // > X X X X X X X X X X X X - // > - // > Throttled with `no_trailing` specified as true: - // > ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - // > X X X X X X X X X X - // - // Usage: - // - // > var throttled = jQuery.throttle( delay, [ no_trailing, ] callback ); - // > - // > jQuery('selector').bind( 'someevent', throttled ); - // > jQuery('selector').unbind( 'someevent', throttled ); - // - // This also works in jQuery 1.4+: - // - // > jQuery('selector').bind( 'someevent', jQuery.throttle( delay, [ no_trailing, ] callback ) ); - // > jQuery('selector').unbind( 'someevent', callback ); - // - // Arguments: - // - // delay - (Number) A zero-or-greater delay in milliseconds. For event - // callbacks, values around 100 or 250 (or even higher) are most useful. - // no_trailing - (Boolean) Optional, defaults to false. If no_trailing is - // true, callback will only execute every `delay` milliseconds while the - // throttled-function is being called. If no_trailing is false or - // unspecified, callback will be executed one final time after the last - // throttled-function call. (After the throttled-function has not been - // called for `delay` milliseconds, the internal counter is reset) - // callback - (Function) A function to be executed after delay milliseconds. - // The `this` context and all arguments are passed through, as-is, to - // `callback` when the throttled-function is executed. - // - // Returns: - // - // (Function) A new, throttled, function. - - $.throttle = jq_throttle = function( delay, no_trailing, callback, debounce_mode ) { - // After wrapper has stopped being called, this timeout ensures that - // `callback` is executed at the proper times in `throttle` and `end` - // debounce modes. - var timeout_id, - - // Keep track of the last time `callback` was executed. - last_exec = 0; - - // `no_trailing` defaults to falsy. - if ( typeof no_trailing !== 'boolean' ) { - debounce_mode = callback; - callback = no_trailing; - no_trailing = undefined; - } - - // The `wrapper` function encapsulates all of the throttling / debouncing - // functionality and when executed will limit the rate at which `callback` - // is executed. - function wrapper() { - var that = this, - elapsed = +new Date() - last_exec, - args = arguments; - - // Execute `callback` and update the `last_exec` timestamp. - function exec() { - last_exec = +new Date(); - callback.apply( that, args ); - }; - - // If `debounce_mode` is true (at_begin) this is used to clear the flag - // to allow future `callback` executions. - function clear() { - timeout_id = undefined; - }; - - if ( debounce_mode && !timeout_id ) { - // Since `wrapper` is being called for the first time and - // `debounce_mode` is true (at_begin), execute `callback`. - exec(); - } - - // Clear any existing timeout. - timeout_id && clearTimeout( timeout_id ); - - if ( debounce_mode === undefined && elapsed > delay ) { - // In throttle mode, if `delay` time has been exceeded, execute - // `callback`. - exec(); - - } else if ( no_trailing !== true ) { - // In trailing throttle mode, since `delay` time has not been - // exceeded, schedule `callback` to execute `delay` ms after most - // recent execution. - // - // If `debounce_mode` is true (at_begin), schedule `clear` to execute - // after `delay` ms. - // - // If `debounce_mode` is false (at end), schedule `callback` to - // execute after `delay` ms. - timeout_id = setTimeout( debounce_mode ? clear : exec, debounce_mode === undefined ? delay - elapsed : delay ); - } - }; - - // Set the guid of `wrapper` function to the same of original callback, so - // it can be removed in jQuery 1.4+ .unbind or .die by using the original - // callback as a reference. - if ( $.guid ) { - wrapper.guid = callback.guid = callback.guid || $.guid++; - } - - // Return the wrapper function. - return wrapper; - }; - - // Method: jQuery.debounce - // - // Debounce execution of a function. Debouncing, unlike throttling, - // guarantees that a function is only executed a single time, either at the - // very beginning of a series of calls, or at the very end. If you want to - // simply rate-limit execution of a function, see the - // method. - // - // In this visualization, | is a debounced-function call and X is the actual - // callback execution: - // - // > Debounced with `at_begin` specified as false or unspecified: - // > ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - // > X X - // > - // > Debounced with `at_begin` specified as true: - // > ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| - // > X X - // - // Usage: - // - // > var debounced = jQuery.debounce( delay, [ at_begin, ] callback ); - // > - // > jQuery('selector').bind( 'someevent', debounced ); - // > jQuery('selector').unbind( 'someevent', debounced ); - // - // This also works in jQuery 1.4+: - // - // > jQuery('selector').bind( 'someevent', jQuery.debounce( delay, [ at_begin, ] callback ) ); - // > jQuery('selector').unbind( 'someevent', callback ); - // - // Arguments: - // - // delay - (Number) A zero-or-greater delay in milliseconds. For event - // callbacks, values around 100 or 250 (or even higher) are most useful. - // at_begin - (Boolean) Optional, defaults to false. If at_begin is false or - // unspecified, callback will only be executed `delay` milliseconds after - // the last debounced-function call. If at_begin is true, callback will be - // executed only at the first debounced-function call. (After the - // throttled-function has not been called for `delay` milliseconds, the - // internal counter is reset) - // callback - (Function) A function to be executed after delay milliseconds. - // The `this` context and all arguments are passed through, as-is, to - // `callback` when the debounced-function is executed. - // - // Returns: - // - // (Function) A new, debounced, function. - - $.debounce = function( delay, at_begin, callback ) { - return callback === undefined - ? jq_throttle( delay, at_begin, false ) - : jq_throttle( delay, callback, at_begin !== false ); - }; - -})(this); diff --git a/assets/js/plugins/jquery.fitvids.js b/assets/js/plugins/jquery.fitvids.js deleted file mode 100644 index 5c2f85c992a69..0000000000000 --- a/assets/js/plugins/jquery.fitvids.js +++ /dev/null @@ -1,82 +0,0 @@ -/*jshint browser:true */ -/*! -* FitVids 1.1 -* -* Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com -* Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/ -* Released under the WTFPL license - http://sam.zoy.org/wtfpl/ -* -*/ - -;(function( $ ){ - - 'use strict'; - - $.fn.fitVids = function( options ) { - var settings = { - customSelector: null, - ignore: null - }; - - if(!document.getElementById('fit-vids-style')) { - // appendStyles: https://github.com/toddmotto/fluidvids/blob/master/dist/fluidvids.js - var head = document.head || document.getElementsByTagName('head')[0]; - var css = '.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}'; - var div = document.createElement("div"); - div.innerHTML = '

x

'; - head.appendChild(div.childNodes[1]); - } - - if ( options ) { - $.extend( settings, options ); - } - - return this.each(function(){ - var selectors = [ - 'iframe[src*="player.vimeo.com"]', - 'iframe[src*="youtube.com"]', - 'iframe[src*="youtube-nocookie.com"]', - 'iframe[src*="kickstarter.com"][src*="video.html"]', - 'object', - 'embed' - ]; - - if (settings.customSelector) { - selectors.push(settings.customSelector); - } - - var ignoreList = '.fitvidsignore'; - - if(settings.ignore) { - ignoreList = ignoreList + ', ' + settings.ignore; - } - - var $allVideos = $(this).find(selectors.join(',')); - $allVideos = $allVideos.not('object object'); // SwfObj conflict patch - $allVideos = $allVideos.not(ignoreList); // Disable FitVids on this video. - - $allVideos.each(function(count){ - var $this = $(this); - if($this.parents(ignoreList).length > 0) { - return; // Disable FitVids on this video. - } - if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; } - if ((!$this.css('height') && !$this.css('width')) && (isNaN($this.attr('height')) || isNaN($this.attr('width')))) - { - $this.attr('height', 9); - $this.attr('width', 16); - } - var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(), - width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(), - aspectRatio = height / width; - if(!$this.attr('id')){ - var videoID = 'fitvid' + count; - $this.attr('id', videoID); - } - $this.wrap('
').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+'%'); - $this.removeAttr('height').removeAttr('width'); - }); - }); - }; -// Works with either jQuery or Zepto -})( window.jQuery || window.Zepto ); \ No newline at end of file diff --git a/assets/js/plugins/jquery.greedy-navigation.js b/assets/js/plugins/jquery.greedy-navigation.js deleted file mode 100644 index b29931fa3e956..0000000000000 --- a/assets/js/plugins/jquery.greedy-navigation.js +++ /dev/null @@ -1,127 +0,0 @@ -/* -GreedyNav.js - https://github.com/lukejacksonn/GreedyNav -Licensed under the MIT license - http://opensource.org/licenses/MIT -Copyright (c) 2015 Luke Jackson http://lukejacksonn.com -*/ - -$(function() { - - var $btn = $("nav.greedy-nav .greedy-nav__toggle"); - var $vlinks = $("nav.greedy-nav .visible-links"); - var $hlinks = $("nav.greedy-nav .hidden-links"); - var $nav = $("nav.greedy-nav"); - var $logo = $('nav.greedy-nav .site-logo'); - var $logoImg = $('nav.greedy-nav .site-logo img'); - var $title = $("nav.greedy-nav .site-title"); - var $search = $('nav.greedy-nav button.search__toggle'); - - var numOfItems, totalSpace, closingTime, breakWidths; - - // This function measures both hidden and visible links and sets the navbar breakpoints - // This is called the first time the script runs and everytime the "check()" function detects a change of window width that reached a different CSS width breakpoint, which affects the size of navbar Items - // Please note that "CSS width breakpoints" (which are only 4) !== "navbar breakpoints" (which are as many as the number of items on the navbar) - function measureLinks(){ - numOfItems = 0; - totalSpace = 0; - closingTime = 1000; - breakWidths = []; - - // Adds the width of a navItem in order to create breakpoints for the navbar - function addWidth(i, w) { - totalSpace += w; - numOfItems += 1; - breakWidths.push(totalSpace); - } - - // Measures the width of hidden links by making a temporary clone of them and positioning under visible links - function hiddenWidth(obj){ - var clone = obj.clone(); - clone.css("visibility","hidden"); - $vlinks.append(clone); - addWidth(0, clone.outerWidth()); - clone.remove(); - } - // Measure both visible and hidden links widths - $vlinks.children().outerWidth(addWidth); - $hlinks.children().each(function(){hiddenWidth($(this))}); - } - // Get initial state - measureLinks(); - - var winWidth = $( window ).width(); - // Set the last measured CSS width breakpoint: 0: <768px, 1: <1024px, 2: < 1280px, 3: >= 1280px. - var lastBreakpoint = winWidth < 768 ? 0 : winWidth < 1024 ? 1 : winWidth < 1280 ? 2 : 3; - - var availableSpace, numOfVisibleItems, requiredSpace, timer; - - function check() { - - winWidth = $( window ).width(); - // Set the current CSS width breakpoint: 0: <768px, 1: <1024px, 2: < 1280px, 3: >= 1280px. - var curBreakpoint = winWidth < 768 ? 0 : winWidth < 1024 ? 1 : winWidth < 1280 ? 2 : 3; - // If current breakpoint is different from last measured breakpoint, measureLinks again - if(curBreakpoint !== lastBreakpoint) measureLinks(); - // Set the last measured CSS width breakpoint with the current breakpoint - lastBreakpoint = curBreakpoint; - - // Get instant state - numOfVisibleItems = $vlinks.children().length; - // Decrease the width of visible elements from the nav innerWidth to find out the available space for navItems - availableSpace = /* nav */ $nav.innerWidth() - - /* logo */ ($logo.length !== 0 ? $logo.outerWidth(true) : 0) - - /* title */ $title.outerWidth(true) - - /* search */ ($search.length !== 0 ? $search.outerWidth(true) : 0) - - /* toggle */ (numOfVisibleItems !== breakWidths.length ? $btn.outerWidth(true) : 0); - requiredSpace = breakWidths[numOfVisibleItems - 1]; - - // There is not enought space - if (requiredSpace > availableSpace) { - $vlinks.children().last().prependTo($hlinks); - numOfVisibleItems -= 1; - check(); - // There is more than enough space. If only one element is hidden, add the toggle width to the available space - } else if (availableSpace + (numOfVisibleItems === breakWidths.length - 1?$btn.outerWidth(true):0) > breakWidths[numOfVisibleItems]) { - $hlinks.children().first().appendTo($vlinks); - numOfVisibleItems += 1; - check(); - } - // Update the button accordingly - $btn.attr("count", numOfItems - numOfVisibleItems); - if (numOfVisibleItems === numOfItems) { - $btn.addClass('hidden'); - } else $btn.removeClass('hidden'); - } - - // Window listeners - $(window).resize(function() { - check(); - }); - - $btn.on('click', function() { - $hlinks.toggleClass('hidden'); - $(this).toggleClass('close'); - clearTimeout(timer); - }); - - $hlinks.on('mouseleave', function() { - // Mouse has left, start the timer - timer = setTimeout(function() { - $hlinks.addClass('hidden'); - }, closingTime); - }).on('mouseenter', function() { - // Mouse is back, cancel the timer - clearTimeout(timer); - }) - - // check if page has a logo - if($logoImg.length !== 0){ - // check if logo is not loaded - if(!($logoImg[0].complete || $logoImg[0].naturalWidth !== 0)){ - // if logo is not loaded wait for logo to load or fail to check - $logoImg.one("load error", check); - // if logo is already loaded just check - } else check(); - // if page does not have a logo just check - } else check(); - -}); diff --git a/assets/js/plugins/jquery.magnific-popup.js b/assets/js/plugins/jquery.magnific-popup.js deleted file mode 100644 index 7d1d1978490cd..0000000000000 --- a/assets/js/plugins/jquery.magnific-popup.js +++ /dev/null @@ -1,1860 +0,0 @@ -/*! Magnific Popup - v1.1.0 - 2016-02-20 -* http://dimsemenov.com/plugins/magnific-popup/ -* Copyright (c) 2016 Dmitry Semenov; */ -;(function (factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(['jquery'], factory); - } else if (typeof exports === 'object') { - // Node/CommonJS - factory(require('jquery')); - } else { - // Browser globals - factory(window.jQuery || window.Zepto); - } - }(function($) { - - /*>>core*/ - /** - * - * Magnific Popup Core JS file - * - */ - - - /** - * Private static constants - */ - var CLOSE_EVENT = 'Close', - BEFORE_CLOSE_EVENT = 'BeforeClose', - AFTER_CLOSE_EVENT = 'AfterClose', - BEFORE_APPEND_EVENT = 'BeforeAppend', - MARKUP_PARSE_EVENT = 'MarkupParse', - OPEN_EVENT = 'Open', - CHANGE_EVENT = 'Change', - NS = 'mfp', - EVENT_NS = '.' + NS, - READY_CLASS = 'mfp-ready', - REMOVING_CLASS = 'mfp-removing', - PREVENT_CLOSE_CLASS = 'mfp-prevent-close'; - - - /** - * Private vars - */ - /*jshint -W079 */ - var mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this' - MagnificPopup = function(){}, - _isJQ = !!(window.jQuery), - _prevStatus, - _window = $(window), - _document, - _prevContentType, - _wrapClasses, - _currPopupType; - - - /** - * Private functions - */ - var _mfpOn = function(name, f) { - mfp.ev.on(NS + name + EVENT_NS, f); - }, - _getEl = function(className, appendTo, html, raw) { - var el = document.createElement('div'); - el.className = 'mfp-'+className; - if(html) { - el.innerHTML = html; - } - if(!raw) { - el = $(el); - if(appendTo) { - el.appendTo(appendTo); - } - } else if(appendTo) { - appendTo.appendChild(el); - } - return el; - }, - _mfpTrigger = function(e, data) { - mfp.ev.triggerHandler(NS + e, data); - - if(mfp.st.callbacks) { - // converts "mfpEventName" to "eventName" callback and triggers it if it's present - e = e.charAt(0).toLowerCase() + e.slice(1); - if(mfp.st.callbacks[e]) { - mfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]); - } - } - }, - _getCloseBtn = function(type) { - if(type !== _currPopupType || !mfp.currTemplate.closeBtn) { - mfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) ); - _currPopupType = type; - } - return mfp.currTemplate.closeBtn; - }, - // Initialize Magnific Popup only when called at least once - _checkInstance = function() { - if(!$.magnificPopup.instance) { - /*jshint -W020 */ - mfp = new MagnificPopup(); - mfp.init(); - $.magnificPopup.instance = mfp; - } - }, - // CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr - supportsTransitions = function() { - var s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist - v = ['ms','O','Moz','Webkit']; // 'v' for vendor - - if( s['transition'] !== undefined ) { - return true; - } - - while( v.length ) { - if( v.pop() + 'Transition' in s ) { - return true; - } - } - - return false; - }; - - - - /** - * Public functions - */ - MagnificPopup.prototype = { - - constructor: MagnificPopup, - - /** - * Initializes Magnific Popup plugin. - * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed - */ - init: function() { - var appVersion = navigator.appVersion; - mfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener; - mfp.isAndroid = (/android/gi).test(appVersion); - mfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion); - mfp.supportsTransition = supportsTransitions(); - - // We disable fixed positioned lightbox on devices that don't handle it nicely. - // If you know a better way of detecting this - let me know. - mfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) ); - _document = $(document); - - mfp.popupsCache = {}; - }, - - /** - * Opens popup - * @param data [description] - */ - open: function(data) { - - var i; - - if(data.isObj === false) { - // convert jQuery collection to array to avoid conflicts later - mfp.items = data.items.toArray(); - - mfp.index = 0; - var items = data.items, - item; - for(i = 0; i < items.length; i++) { - item = items[i]; - if(item.parsed) { - item = item.el[0]; - } - if(item === data.el[0]) { - mfp.index = i; - break; - } - } - } else { - mfp.items = $.isArray(data.items) ? data.items : [data.items]; - mfp.index = data.index || 0; - } - - // if popup is already opened - we just update the content - if(mfp.isOpen) { - mfp.updateItemHTML(); - return; - } - - mfp.types = []; - _wrapClasses = ''; - if(data.mainEl && data.mainEl.length) { - mfp.ev = data.mainEl.eq(0); - } else { - mfp.ev = _document; - } - - if(data.key) { - if(!mfp.popupsCache[data.key]) { - mfp.popupsCache[data.key] = {}; - } - mfp.currTemplate = mfp.popupsCache[data.key]; - } else { - mfp.currTemplate = {}; - } - - - - mfp.st = $.extend(true, {}, $.magnificPopup.defaults, data ); - mfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos; - - if(mfp.st.modal) { - mfp.st.closeOnContentClick = false; - mfp.st.closeOnBgClick = false; - mfp.st.showCloseBtn = false; - mfp.st.enableEscapeKey = false; - } - - - // Building markup - // main containers are created only once - if(!mfp.bgOverlay) { - - // Dark overlay - mfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() { - mfp.close(); - }); - - mfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) { - if(mfp._checkIfClose(e.target)) { - mfp.close(); - } - }); - - mfp.container = _getEl('container', mfp.wrap); - } - - mfp.contentContainer = _getEl('content'); - if(mfp.st.preloader) { - mfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading); - } - - - // Initializing modules - var modules = $.magnificPopup.modules; - for(i = 0; i < modules.length; i++) { - var n = modules[i]; - n = n.charAt(0).toUpperCase() + n.slice(1); - mfp['init'+n].call(mfp); - } - _mfpTrigger('BeforeOpen'); - - - if(mfp.st.showCloseBtn) { - // Close button - if(!mfp.st.closeBtnInside) { - mfp.wrap.append( _getCloseBtn() ); - } else { - _mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) { - values.close_replaceWith = _getCloseBtn(item.type); - }); - _wrapClasses += ' mfp-close-btn-in'; - } - } - - if(mfp.st.alignTop) { - _wrapClasses += ' mfp-align-top'; - } - - - - if(mfp.fixedContentPos) { - mfp.wrap.css({ - overflow: mfp.st.overflowY, - overflowX: 'hidden', - overflowY: mfp.st.overflowY - }); - } else { - mfp.wrap.css({ - top: _window.scrollTop(), - position: 'absolute' - }); - } - if( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) { - mfp.bgOverlay.css({ - height: _document.height(), - position: 'absolute' - }); - } - - - - if(mfp.st.enableEscapeKey) { - // Close on ESC key - _document.on('keyup' + EVENT_NS, function(e) { - if(e.keyCode === 27) { - mfp.close(); - } - }); - } - - _window.on('resize' + EVENT_NS, function() { - mfp.updateSize(); - }); - - - if(!mfp.st.closeOnContentClick) { - _wrapClasses += ' mfp-auto-cursor'; - } - - if(_wrapClasses) - mfp.wrap.addClass(_wrapClasses); - - - // this triggers recalculation of layout, so we get it once to not to trigger twice - var windowHeight = mfp.wH = _window.height(); - - - var windowStyles = {}; - - if( mfp.fixedContentPos ) { - if(mfp._hasScrollBar(windowHeight)){ - var s = mfp._getScrollbarSize(); - if(s) { - windowStyles.marginRight = s; - } - } - } - - if(mfp.fixedContentPos) { - if(!mfp.isIE7) { - windowStyles.overflow = 'hidden'; - } else { - // ie7 double-scroll bug - $('body, html').css('overflow', 'hidden'); - } - } - - - - var classesToadd = mfp.st.mainClass; - if(mfp.isIE7) { - classesToadd += ' mfp-ie7'; - } - if(classesToadd) { - mfp._addClassToMFP( classesToadd ); - } - - // add content - mfp.updateItemHTML(); - - _mfpTrigger('BuildControls'); - - // remove scrollbar, add margin e.t.c - $('html').css(windowStyles); - - // add everything to DOM - mfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) ); - - // Save last focused element - mfp._lastFocusedEl = document.activeElement; - - // Wait for next cycle to allow CSS transition - setTimeout(function() { - - if(mfp.content) { - mfp._addClassToMFP(READY_CLASS); - mfp._setFocus(); - } else { - // if content is not defined (not loaded e.t.c) we add class only for BG - mfp.bgOverlay.addClass(READY_CLASS); - } - - // Trap the focus in popup - _document.on('focusin' + EVENT_NS, mfp._onFocusIn); - - }, 16); - - mfp.isOpen = true; - mfp.updateSize(windowHeight); - _mfpTrigger(OPEN_EVENT); - - return data; - }, - - /** - * Closes the popup - */ - close: function() { - if(!mfp.isOpen) return; - _mfpTrigger(BEFORE_CLOSE_EVENT); - - mfp.isOpen = false; - // for CSS3 animation - if(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition ) { - mfp._addClassToMFP(REMOVING_CLASS); - setTimeout(function() { - mfp._close(); - }, mfp.st.removalDelay); - } else { - mfp._close(); - } - }, - - /** - * Helper for close() function - */ - _close: function() { - _mfpTrigger(CLOSE_EVENT); - - var classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' '; - - mfp.bgOverlay.detach(); - mfp.wrap.detach(); - mfp.container.empty(); - - if(mfp.st.mainClass) { - classesToRemove += mfp.st.mainClass + ' '; - } - - mfp._removeClassFromMFP(classesToRemove); - - if(mfp.fixedContentPos) { - var windowStyles = {marginRight: ''}; - if(mfp.isIE7) { - $('body, html').css('overflow', ''); - } else { - windowStyles.overflow = ''; - } - $('html').css(windowStyles); - } - - _document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS); - mfp.ev.off(EVENT_NS); - - // clean up DOM elements that aren't removed - mfp.wrap.attr('class', 'mfp-wrap').removeAttr('style'); - mfp.bgOverlay.attr('class', 'mfp-bg'); - mfp.container.attr('class', 'mfp-container'); - - // remove close button from target element - if(mfp.st.showCloseBtn && - (!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) { - if(mfp.currTemplate.closeBtn) - mfp.currTemplate.closeBtn.detach(); - } - - - if(mfp.st.autoFocusLast && mfp._lastFocusedEl) { - $(mfp._lastFocusedEl).focus(); // put tab focus back - } - mfp.currItem = null; - mfp.content = null; - mfp.currTemplate = null; - mfp.prevHeight = 0; - - _mfpTrigger(AFTER_CLOSE_EVENT); - }, - - updateSize: function(winHeight) { - - if(mfp.isIOS) { - // fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2 - var zoomLevel = document.documentElement.clientWidth / window.innerWidth; - var height = window.innerHeight * zoomLevel; - mfp.wrap.css('height', height); - mfp.wH = height; - } else { - mfp.wH = winHeight || _window.height(); - } - // Fixes #84: popup incorrectly positioned with position:relative on body - if(!mfp.fixedContentPos) { - mfp.wrap.css('height', mfp.wH); - } - - _mfpTrigger('Resize'); - - }, - - /** - * Set content of popup based on current index - */ - updateItemHTML: function() { - var item = mfp.items[mfp.index]; - - // Detach and perform modifications - mfp.contentContainer.detach(); - - if(mfp.content) - mfp.content.detach(); - - if(!item.parsed) { - item = mfp.parseEl( mfp.index ); - } - - var type = item.type; - - _mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]); - // BeforeChange event works like so: - // _mfpOn('BeforeChange', function(e, prevType, newType) { }); - - mfp.currItem = item; - - if(!mfp.currTemplate[type]) { - var markup = mfp.st[type] ? mfp.st[type].markup : false; - - // allows to modify markup - _mfpTrigger('FirstMarkupParse', markup); - - if(markup) { - mfp.currTemplate[type] = $(markup); - } else { - // if there is no markup found we just define that template is parsed - mfp.currTemplate[type] = true; - } - } - - if(_prevContentType && _prevContentType !== item.type) { - mfp.container.removeClass('mfp-'+_prevContentType+'-holder'); - } - - var newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]); - mfp.appendContent(newContent, type); - - item.preloaded = true; - - _mfpTrigger(CHANGE_EVENT, item); - _prevContentType = item.type; - - // Append container back after its content changed - mfp.container.prepend(mfp.contentContainer); - - _mfpTrigger('AfterChange'); - }, - - - /** - * Set HTML content of popup - */ - appendContent: function(newContent, type) { - mfp.content = newContent; - - if(newContent) { - if(mfp.st.showCloseBtn && mfp.st.closeBtnInside && - mfp.currTemplate[type] === true) { - // if there is no markup, we just append close button element inside - if(!mfp.content.find('.mfp-close').length) { - mfp.content.append(_getCloseBtn()); - } - } else { - mfp.content = newContent; - } - } else { - mfp.content = ''; - } - - _mfpTrigger(BEFORE_APPEND_EVENT); - mfp.container.addClass('mfp-'+type+'-holder'); - - mfp.contentContainer.append(mfp.content); - }, - - - /** - * Creates Magnific Popup data object based on given data - * @param {int} index Index of item to parse - */ - parseEl: function(index) { - var item = mfp.items[index], - type; - - if(item.tagName) { - item = { el: $(item) }; - } else { - type = item.type; - item = { data: item, src: item.src }; - } - - if(item.el) { - var types = mfp.types; - - // check for 'mfp-TYPE' class - for(var i = 0; i < types.length; i++) { - if( item.el.hasClass('mfp-'+types[i]) ) { - type = types[i]; - break; - } - } - - item.src = item.el.attr('data-mfp-src'); - if(!item.src) { - item.src = item.el.attr('href'); - } - } - - item.type = type || mfp.st.type || 'inline'; - item.index = index; - item.parsed = true; - mfp.items[index] = item; - _mfpTrigger('ElementParse', item); - - return mfp.items[index]; - }, - - - /** - * Initializes single popup or a group of popups - */ - addGroup: function(el, options) { - var eHandler = function(e) { - e.mfpEl = this; - mfp._openClick(e, el, options); - }; - - if(!options) { - options = {}; - } - - var eName = 'click.magnificPopup'; - options.mainEl = el; - - if(options.items) { - options.isObj = true; - el.off(eName).on(eName, eHandler); - } else { - options.isObj = false; - if(options.delegate) { - el.off(eName).on(eName, options.delegate , eHandler); - } else { - options.items = el; - el.off(eName).on(eName, eHandler); - } - } - }, - _openClick: function(e, el, options) { - var midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick; - - - if(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey ) ) { - return; - } - - var disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn; - - if(disableOn) { - if($.isFunction(disableOn)) { - if( !disableOn.call(mfp) ) { - return true; - } - } else { // else it's number - if( _window.width() < disableOn ) { - return true; - } - } - } - - if(e.type) { - e.preventDefault(); - - // This will prevent popup from closing if element is inside and popup is already opened - if(mfp.isOpen) { - e.stopPropagation(); - } - } - - options.el = $(e.mfpEl); - if(options.delegate) { - options.items = el.find(options.delegate); - } - mfp.open(options); - }, - - - /** - * Updates text on preloader - */ - updateStatus: function(status, text) { - - if(mfp.preloader) { - if(_prevStatus !== status) { - mfp.container.removeClass('mfp-s-'+_prevStatus); - } - - if(!text && status === 'loading') { - text = mfp.st.tLoading; - } - - var data = { - status: status, - text: text - }; - // allows to modify status - _mfpTrigger('UpdateStatus', data); - - status = data.status; - text = data.text; - - mfp.preloader.html(text); - - mfp.preloader.find('a').on('click', function(e) { - e.stopImmediatePropagation(); - }); - - mfp.container.addClass('mfp-s-'+status); - _prevStatus = status; - } - }, - - - /* - "Private" helpers that aren't private at all - */ - // Check to close popup or not - // "target" is an element that was clicked - _checkIfClose: function(target) { - - if($(target).hasClass(PREVENT_CLOSE_CLASS)) { - return; - } - - var closeOnContent = mfp.st.closeOnContentClick; - var closeOnBg = mfp.st.closeOnBgClick; - - if(closeOnContent && closeOnBg) { - return true; - } else { - - // We close the popup if click is on close button or on preloader. Or if there is no content. - if(!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0]) ) { - return true; - } - - // if click is outside the content - if( (target !== mfp.content[0] && !$.contains(mfp.content[0], target)) ) { - if(closeOnBg) { - // last check, if the clicked element is in DOM, (in case it's removed onclick) - if( $.contains(document, target) ) { - return true; - } - } - } else if(closeOnContent) { - return true; - } - - } - return false; - }, - _addClassToMFP: function(cName) { - mfp.bgOverlay.addClass(cName); - mfp.wrap.addClass(cName); - }, - _removeClassFromMFP: function(cName) { - this.bgOverlay.removeClass(cName); - mfp.wrap.removeClass(cName); - }, - _hasScrollBar: function(winHeight) { - return ( (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) ); - }, - _setFocus: function() { - (mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus(); - }, - _onFocusIn: function(e) { - if( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) { - mfp._setFocus(); - return false; - } - }, - _parseMarkup: function(template, values, item) { - var arr; - if(item.data) { - values = $.extend(item.data, values); - } - _mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] ); - - $.each(values, function(key, value) { - if(value === undefined || value === false) { - return true; - } - arr = key.split('_'); - if(arr.length > 1) { - var el = template.find(EVENT_NS + '-'+arr[0]); - - if(el.length > 0) { - var attr = arr[1]; - if(attr === 'replaceWith') { - if(el[0] !== value[0]) { - el.replaceWith(value); - } - } else if(attr === 'img') { - if(el.is('img')) { - el.attr('src', value); - } else { - el.replaceWith( $('').attr('src', value).attr('class', el.attr('class')) ); - } - } else { - el.attr(arr[1], value); - } - } - - } else { - template.find(EVENT_NS + '-'+key).html(value); - } - }); - }, - - _getScrollbarSize: function() { - // thx David - if(mfp.scrollbarSize === undefined) { - var scrollDiv = document.createElement("div"); - scrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;'; - document.body.appendChild(scrollDiv); - mfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth; - document.body.removeChild(scrollDiv); - } - return mfp.scrollbarSize; - } - - }; /* MagnificPopup core prototype end */ - - - - - /** - * Public static functions - */ - $.magnificPopup = { - instance: null, - proto: MagnificPopup.prototype, - modules: [], - - open: function(options, index) { - _checkInstance(); - - if(!options) { - options = {}; - } else { - options = $.extend(true, {}, options); - } - - options.isObj = true; - options.index = index || 0; - return this.instance.open(options); - }, - - close: function() { - return $.magnificPopup.instance && $.magnificPopup.instance.close(); - }, - - registerModule: function(name, module) { - if(module.options) { - $.magnificPopup.defaults[name] = module.options; - } - $.extend(this.proto, module.proto); - this.modules.push(name); - }, - - defaults: { - - // Info about options is in docs: - // http://dimsemenov.com/plugins/magnific-popup/documentation.html#options - - disableOn: 0, - - key: null, - - midClick: false, - - mainClass: '', - - preloader: true, - - focus: '', // CSS selector of input to focus after popup is opened - - closeOnContentClick: false, - - closeOnBgClick: true, - - closeBtnInside: true, - - showCloseBtn: true, - - enableEscapeKey: true, - - modal: false, - - alignTop: false, - - removalDelay: 0, - - prependTo: null, - - fixedContentPos: 'auto', - - fixedBgPos: 'auto', - - overflowY: 'auto', - - closeMarkup: '', - - tClose: 'Close (Esc)', - - tLoading: 'Loading...', - - autoFocusLast: true - - } - }; - - - - $.fn.magnificPopup = function(options) { - _checkInstance(); - - var jqEl = $(this); - - // We call some API method of first param is a string - if (typeof options === "string" ) { - - if(options === 'open') { - var items, - itemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup, - index = parseInt(arguments[1], 10) || 0; - - if(itemOpts.items) { - items = itemOpts.items[index]; - } else { - items = jqEl; - if(itemOpts.delegate) { - items = items.find(itemOpts.delegate); - } - items = items.eq( index ); - } - mfp._openClick({mfpEl:items}, jqEl, itemOpts); - } else { - if(mfp.isOpen) - mfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1)); - } - - } else { - // clone options obj - options = $.extend(true, {}, options); - - /* - * As Zepto doesn't support .data() method for objects - * and it works only in normal browsers - * we assign "options" object directly to the DOM element. FTW! - */ - if(_isJQ) { - jqEl.data('magnificPopup', options); - } else { - jqEl[0].magnificPopup = options; - } - - mfp.addGroup(jqEl, options); - - } - return jqEl; - }; - - /*>>core*/ - - /*>>inline*/ - - var INLINE_NS = 'inline', - _hiddenClass, - _inlinePlaceholder, - _lastInlineElement, - _putInlineElementsBack = function() { - if(_lastInlineElement) { - _inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach(); - _lastInlineElement = null; - } - }; - - $.magnificPopup.registerModule(INLINE_NS, { - options: { - hiddenClass: 'hide', // will be appended with `mfp-` prefix - markup: '', - tNotFound: 'Content not found' - }, - proto: { - - initInline: function() { - mfp.types.push(INLINE_NS); - - _mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() { - _putInlineElementsBack(); - }); - }, - - getInline: function(item, template) { - - _putInlineElementsBack(); - - if(item.src) { - var inlineSt = mfp.st.inline, - el = $(item.src); - - if(el.length) { - - // If target element has parent - we replace it with placeholder and put it back after popup is closed - var parent = el[0].parentNode; - if(parent && parent.tagName) { - if(!_inlinePlaceholder) { - _hiddenClass = inlineSt.hiddenClass; - _inlinePlaceholder = _getEl(_hiddenClass); - _hiddenClass = 'mfp-'+_hiddenClass; - } - // replace target inline element with placeholder - _lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass); - } - - mfp.updateStatus('ready'); - } else { - mfp.updateStatus('error', inlineSt.tNotFound); - el = $('
'); - } - - item.inlineElement = el; - return el; - } - - mfp.updateStatus('ready'); - mfp._parseMarkup(template, {}, item); - return template; - } - } - }); - - /*>>inline*/ - - /*>>ajax*/ - var AJAX_NS = 'ajax', - _ajaxCur, - _removeAjaxCursor = function() { - if(_ajaxCur) { - $(document.body).removeClass(_ajaxCur); - } - }, - _destroyAjaxRequest = function() { - _removeAjaxCursor(); - if(mfp.req) { - mfp.req.abort(); - } - }; - - $.magnificPopup.registerModule(AJAX_NS, { - - options: { - settings: null, - cursor: 'mfp-ajax-cur', - tError: 'The content could not be loaded.' - }, - - proto: { - initAjax: function() { - mfp.types.push(AJAX_NS); - _ajaxCur = mfp.st.ajax.cursor; - - _mfpOn(CLOSE_EVENT+'.'+AJAX_NS, _destroyAjaxRequest); - _mfpOn('BeforeChange.' + AJAX_NS, _destroyAjaxRequest); - }, - getAjax: function(item) { - - if(_ajaxCur) { - $(document.body).addClass(_ajaxCur); - } - - mfp.updateStatus('loading'); - - var opts = $.extend({ - url: item.src, - success: function(data, textStatus, jqXHR) { - var temp = { - data:data, - xhr:jqXHR - }; - - _mfpTrigger('ParseAjax', temp); - - mfp.appendContent( $(temp.data), AJAX_NS ); - - item.finished = true; - - _removeAjaxCursor(); - - mfp._setFocus(); - - setTimeout(function() { - mfp.wrap.addClass(READY_CLASS); - }, 16); - - mfp.updateStatus('ready'); - - _mfpTrigger('AjaxContentAdded'); - }, - error: function() { - _removeAjaxCursor(); - item.finished = item.loadError = true; - mfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src)); - } - }, mfp.st.ajax.settings); - - mfp.req = $.ajax(opts); - - return ''; - } - } - }); - - /*>>ajax*/ - - /*>>image*/ - var _imgInterval, - _getTitle = function(item) { - if(item.data && item.data.title !== undefined) - return item.data.title; - - var src = mfp.st.image.titleSrc; - - if(src) { - if($.isFunction(src)) { - return src.call(mfp, item); - } else if(item.el) { - return item.el.attr(src) || ''; - } - } - return ''; - }; - - $.magnificPopup.registerModule('image', { - - options: { - markup: '
'+ - '
'+ - '
'+ - '
'+ - '
'+ - '
'+ - '
'+ - '
'+ - '
'+ - '
'+ - '
'+ - '
', - cursor: 'mfp-zoom-out-cur', - titleSrc: 'title', - verticalFit: true, - tError: 'The image could not be loaded.' - }, - - proto: { - initImage: function() { - var imgSt = mfp.st.image, - ns = '.image'; - - mfp.types.push('image'); - - _mfpOn(OPEN_EVENT+ns, function() { - if(mfp.currItem.type === 'image' && imgSt.cursor) { - $(document.body).addClass(imgSt.cursor); - } - }); - - _mfpOn(CLOSE_EVENT+ns, function() { - if(imgSt.cursor) { - $(document.body).removeClass(imgSt.cursor); - } - _window.off('resize' + EVENT_NS); - }); - - _mfpOn('Resize'+ns, mfp.resizeImage); - if(mfp.isLowIE) { - _mfpOn('AfterChange', mfp.resizeImage); - } - }, - resizeImage: function() { - var item = mfp.currItem; - if(!item || !item.img) return; - - if(mfp.st.image.verticalFit) { - var decr = 0; - // fix box-sizing in ie7/8 - if(mfp.isLowIE) { - decr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'),10); - } - item.img.css('max-height', mfp.wH-decr); - } - }, - _onImageHasSize: function(item) { - if(item.img) { - - item.hasSize = true; - - if(_imgInterval) { - clearInterval(_imgInterval); - } - - item.isCheckingImgSize = false; - - _mfpTrigger('ImageHasSize', item); - - if(item.imgHidden) { - if(mfp.content) - mfp.content.removeClass('mfp-loading'); - - item.imgHidden = false; - } - - } - }, - - /** - * Function that loops until the image has size to display elements that rely on it asap - */ - findImageSize: function(item) { - - var counter = 0, - img = item.img[0], - mfpSetInterval = function(delay) { - - if(_imgInterval) { - clearInterval(_imgInterval); - } - // decelerating interval that checks for size of an image - _imgInterval = setInterval(function() { - if(img.naturalWidth > 0) { - mfp._onImageHasSize(item); - return; - } - - if(counter > 200) { - clearInterval(_imgInterval); - } - - counter++; - if(counter === 3) { - mfpSetInterval(10); - } else if(counter === 40) { - mfpSetInterval(50); - } else if(counter === 100) { - mfpSetInterval(500); - } - }, delay); - }; - - mfpSetInterval(1); - }, - - getImage: function(item, template) { - - var guard = 0, - - // image load complete handler - onLoadComplete = function() { - if(item) { - if (item.img[0].complete) { - item.img.off('.mfploader'); - - if(item === mfp.currItem){ - mfp._onImageHasSize(item); - - mfp.updateStatus('ready'); - } - - item.hasSize = true; - item.loaded = true; - - _mfpTrigger('ImageLoadComplete'); - - } - else { - // if image complete check fails 200 times (20 sec), we assume that there was an error. - guard++; - if(guard < 200) { - setTimeout(onLoadComplete,100); - } else { - onLoadError(); - } - } - } - }, - - // image error handler - onLoadError = function() { - if(item) { - item.img.off('.mfploader'); - if(item === mfp.currItem){ - mfp._onImageHasSize(item); - mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) ); - } - - item.hasSize = true; - item.loaded = true; - item.loadError = true; - } - }, - imgSt = mfp.st.image; - - - var el = template.find('.mfp-img'); - if(el.length) { - var img = document.createElement('img'); - img.className = 'mfp-img'; - if(item.el && item.el.find('img').length) { - img.alt = item.el.find('img').attr('alt'); - } - item.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError); - img.src = item.src; - - // without clone() "error" event is not firing when IMG is replaced by new IMG - // TODO: find a way to avoid such cloning - if(el.is('img')) { - item.img = item.img.clone(); - } - - img = item.img[0]; - if(img.naturalWidth > 0) { - item.hasSize = true; - } else if(!img.width) { - item.hasSize = false; - } - } - - mfp._parseMarkup(template, { - title: _getTitle(item), - img_replaceWith: item.img - }, item); - - mfp.resizeImage(); - - if(item.hasSize) { - if(_imgInterval) clearInterval(_imgInterval); - - if(item.loadError) { - template.addClass('mfp-loading'); - mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) ); - } else { - template.removeClass('mfp-loading'); - mfp.updateStatus('ready'); - } - return template; - } - - mfp.updateStatus('loading'); - item.loading = true; - - if(!item.hasSize) { - item.imgHidden = true; - template.addClass('mfp-loading'); - mfp.findImageSize(item); - } - - return template; - } - } - }); - - /*>>image*/ - - /*>>zoom*/ - var hasMozTransform, - getHasMozTransform = function() { - if(hasMozTransform === undefined) { - hasMozTransform = document.createElement('p').style.MozTransform !== undefined; - } - return hasMozTransform; - }; - - $.magnificPopup.registerModule('zoom', { - - options: { - enabled: false, - easing: 'ease-in-out', - duration: 300, - opener: function(element) { - return element.is('img') ? element : element.find('img'); - } - }, - - proto: { - - initZoom: function() { - var zoomSt = mfp.st.zoom, - ns = '.zoom', - image; - - if(!zoomSt.enabled || !mfp.supportsTransition) { - return; - } - - var duration = zoomSt.duration, - getElToAnimate = function(image) { - var newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'), - transition = 'all '+(zoomSt.duration/1000)+'s ' + zoomSt.easing, - cssObj = { - position: 'fixed', - zIndex: 9999, - left: 0, - top: 0, - '-webkit-backface-visibility': 'hidden' - }, - t = 'transition'; - - cssObj['-webkit-'+t] = cssObj['-moz-'+t] = cssObj['-o-'+t] = cssObj[t] = transition; - - newImg.css(cssObj); - return newImg; - }, - showMainContent = function() { - mfp.content.css('visibility', 'visible'); - }, - openTimeout, - animatedImg; - - _mfpOn('BuildControls'+ns, function() { - if(mfp._allowZoom()) { - - clearTimeout(openTimeout); - mfp.content.css('visibility', 'hidden'); - - // Basically, all code below does is clones existing image, puts in on top of the current one and animated it - - image = mfp._getItemToZoom(); - - if(!image) { - showMainContent(); - return; - } - - animatedImg = getElToAnimate(image); - - animatedImg.css( mfp._getOffset() ); - - mfp.wrap.append(animatedImg); - - openTimeout = setTimeout(function() { - animatedImg.css( mfp._getOffset( true ) ); - openTimeout = setTimeout(function() { - - showMainContent(); - - setTimeout(function() { - animatedImg.remove(); - image = animatedImg = null; - _mfpTrigger('ZoomAnimationEnded'); - }, 16); // avoid blink when switching images - - }, duration); // this timeout equals animation duration - - }, 16); // by adding this timeout we avoid short glitch at the beginning of animation - - - // Lots of timeouts... - } - }); - _mfpOn(BEFORE_CLOSE_EVENT+ns, function() { - if(mfp._allowZoom()) { - - clearTimeout(openTimeout); - - mfp.st.removalDelay = duration; - - if(!image) { - image = mfp._getItemToZoom(); - if(!image) { - return; - } - animatedImg = getElToAnimate(image); - } - - animatedImg.css( mfp._getOffset(true) ); - mfp.wrap.append(animatedImg); - mfp.content.css('visibility', 'hidden'); - - setTimeout(function() { - animatedImg.css( mfp._getOffset() ); - }, 16); - } - - }); - - _mfpOn(CLOSE_EVENT+ns, function() { - if(mfp._allowZoom()) { - showMainContent(); - if(animatedImg) { - animatedImg.remove(); - } - image = null; - } - }); - }, - - _allowZoom: function() { - return mfp.currItem.type === 'image'; - }, - - _getItemToZoom: function() { - if(mfp.currItem.hasSize) { - return mfp.currItem.img; - } else { - return false; - } - }, - - // Get element postion relative to viewport - _getOffset: function(isLarge) { - var el; - if(isLarge) { - el = mfp.currItem.img; - } else { - el = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem); - } - - var offset = el.offset(); - var paddingTop = parseInt(el.css('padding-top'),10); - var paddingBottom = parseInt(el.css('padding-bottom'),10); - offset.top -= ( $(window).scrollTop() - paddingTop ); - - - /* - - Animating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa. - - */ - var obj = { - width: el.width(), - // fix Zepto height+padding issue - height: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop - }; - - // I hate to do this, but there is no another option - if( getHasMozTransform() ) { - obj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)'; - } else { - obj.left = offset.left; - obj.top = offset.top; - } - return obj; - } - - } - }); - - - - /*>>zoom*/ - - /*>>iframe*/ - - var IFRAME_NS = 'iframe', - _emptyPage = '//about:blank', - - _fixIframeBugs = function(isShowing) { - if(mfp.currTemplate[IFRAME_NS]) { - var el = mfp.currTemplate[IFRAME_NS].find('iframe'); - if(el.length) { - // reset src after the popup is closed to avoid "video keeps playing after popup is closed" bug - if(!isShowing) { - el[0].src = _emptyPage; - } - - // IE8 black screen bug fix - if(mfp.isIE8) { - el.css('display', isShowing ? 'block' : 'none'); - } - } - } - }; - - $.magnificPopup.registerModule(IFRAME_NS, { - - options: { - markup: '
'+ - '
'+ - ''+ - '
', - - srcAction: 'iframe_src', - - // we don't care and support only one default type of URL by default - patterns: { - youtube: { - index: 'youtube.com', - id: 'v=', - src: '//www.youtube.com/embed/%id%?autoplay=1' - }, - vimeo: { - index: 'vimeo.com/', - id: '/', - src: '//player.vimeo.com/video/%id%?autoplay=1' - }, - gmaps: { - index: '//maps.google.', - src: '%id%&output=embed' - } - } - }, - - proto: { - initIframe: function() { - mfp.types.push(IFRAME_NS); - - _mfpOn('BeforeChange', function(e, prevType, newType) { - if(prevType !== newType) { - if(prevType === IFRAME_NS) { - _fixIframeBugs(); // iframe if removed - } else if(newType === IFRAME_NS) { - _fixIframeBugs(true); // iframe is showing - } - }// else { - // iframe source is switched, don't do anything - //} - }); - - _mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() { - _fixIframeBugs(); - }); - }, - - getIframe: function(item, template) { - var embedSrc = item.src; - var iframeSt = mfp.st.iframe; - - $.each(iframeSt.patterns, function() { - if(embedSrc.indexOf( this.index ) > -1) { - if(this.id) { - if(typeof this.id === 'string') { - embedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length); - } else { - embedSrc = this.id.call( this, embedSrc ); - } - } - embedSrc = this.src.replace('%id%', embedSrc ); - return false; // break; - } - }); - - var dataObj = {}; - if(iframeSt.srcAction) { - dataObj[iframeSt.srcAction] = embedSrc; - } - mfp._parseMarkup(template, dataObj, item); - - mfp.updateStatus('ready'); - - return template; - } - } - }); - - - - /*>>iframe*/ - - /*>>gallery*/ - /** - * Get looped index depending on number of slides - */ - var _getLoopedId = function(index) { - var numSlides = mfp.items.length; - if(index > numSlides - 1) { - return index - numSlides; - } else if(index < 0) { - return numSlides + index; - } - return index; - }, - _replaceCurrTotal = function(text, curr, total) { - return text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total); - }; - - $.magnificPopup.registerModule('gallery', { - - options: { - enabled: false, - arrowMarkup: '', - preload: [0,2], - navigateByImgClick: true, - arrows: true, - - tPrev: 'Previous (Left arrow key)', - tNext: 'Next (Right arrow key)', - tCounter: '%curr% of %total%' - }, - - proto: { - initGallery: function() { - - var gSt = mfp.st.gallery, - ns = '.mfp-gallery'; - - mfp.direction = true; // true - next, false - prev - - if(!gSt || !gSt.enabled ) return false; - - _wrapClasses += ' mfp-gallery'; - - _mfpOn(OPEN_EVENT+ns, function() { - - if(gSt.navigateByImgClick) { - mfp.wrap.on('click'+ns, '.mfp-img', function() { - if(mfp.items.length > 1) { - mfp.next(); - return false; - } - }); - } - - _document.on('keydown'+ns, function(e) { - if (e.keyCode === 37) { - mfp.prev(); - } else if (e.keyCode === 39) { - mfp.next(); - } - }); - }); - - _mfpOn('UpdateStatus'+ns, function(e, data) { - if(data.text) { - data.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length); - } - }); - - _mfpOn(MARKUP_PARSE_EVENT+ns, function(e, element, values, item) { - var l = mfp.items.length; - values.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : ''; - }); - - _mfpOn('BuildControls' + ns, function() { - if(mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) { - var markup = gSt.arrowMarkup, - arrowLeft = mfp.arrowLeft = $( markup.replace(/%title%/gi, gSt.tPrev).replace(/%dir%/gi, 'left') ).addClass(PREVENT_CLOSE_CLASS), - arrowRight = mfp.arrowRight = $( markup.replace(/%title%/gi, gSt.tNext).replace(/%dir%/gi, 'right') ).addClass(PREVENT_CLOSE_CLASS); - - arrowLeft.click(function() { - mfp.prev(); - }); - arrowRight.click(function() { - mfp.next(); - }); - - mfp.container.append(arrowLeft.add(arrowRight)); - } - }); - - _mfpOn(CHANGE_EVENT+ns, function() { - if(mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout); - - mfp._preloadTimeout = setTimeout(function() { - mfp.preloadNearbyImages(); - mfp._preloadTimeout = null; - }, 16); - }); - - - _mfpOn(CLOSE_EVENT+ns, function() { - _document.off(ns); - mfp.wrap.off('click'+ns); - mfp.arrowRight = mfp.arrowLeft = null; - }); - - }, - next: function() { - mfp.direction = true; - mfp.index = _getLoopedId(mfp.index + 1); - mfp.updateItemHTML(); - }, - prev: function() { - mfp.direction = false; - mfp.index = _getLoopedId(mfp.index - 1); - mfp.updateItemHTML(); - }, - goTo: function(newIndex) { - mfp.direction = (newIndex >= mfp.index); - mfp.index = newIndex; - mfp.updateItemHTML(); - }, - preloadNearbyImages: function() { - var p = mfp.st.gallery.preload, - preloadBefore = Math.min(p[0], mfp.items.length), - preloadAfter = Math.min(p[1], mfp.items.length), - i; - - for(i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) { - mfp._preloadItem(mfp.index+i); - } - for(i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) { - mfp._preloadItem(mfp.index-i); - } - }, - _preloadItem: function(index) { - index = _getLoopedId(index); - - if(mfp.items[index].preloaded) { - return; - } - - var item = mfp.items[index]; - if(!item.parsed) { - item = mfp.parseEl( index ); - } - - _mfpTrigger('LazyLoad', item); - - if(item.type === 'image') { - item.img = $('').on('load.mfploader', function() { - item.hasSize = true; - }).on('error.mfploader', function() { - item.hasSize = true; - item.loadError = true; - _mfpTrigger('LazyLoadError', item); - }).attr('src', item.src); - } - - - item.preloaded = true; - } - } - }); - - /*>>gallery*/ - - /*>>retina*/ - - var RETINA_NS = 'retina'; - - $.magnificPopup.registerModule(RETINA_NS, { - options: { - replaceSrc: function(item) { - return item.src.replace(/\.\w+$/, function(m) { return '@2x' + m; }); - }, - ratio: 1 // Function or number. Set to 1 to disable. - }, - proto: { - initRetina: function() { - if(window.devicePixelRatio > 1) { - - var st = mfp.st.retina, - ratio = st.ratio; - - ratio = !isNaN(ratio) ? ratio : ratio(); - - if(ratio > 1) { - _mfpOn('ImageHasSize' + '.' + RETINA_NS, function(e, item) { - item.img.css({ - 'max-width': item.img[0].naturalWidth / ratio, - 'width': '100%' - }); - }); - _mfpOn('ElementParse' + '.' + RETINA_NS, function(e, item) { - item.src = st.replaceSrc(item, ratio); - }); - } - } - - } - } - }); - - /*>>retina*/ - _checkInstance(); })); \ No newline at end of file diff --git a/assets/js/plugins/smooth-scroll.js b/assets/js/plugins/smooth-scroll.js deleted file mode 100644 index c4179a731f67b..0000000000000 --- a/assets/js/plugins/smooth-scroll.js +++ /dev/null @@ -1,650 +0,0 @@ -/*! - * smooth-scroll v16.1.2 - * Animate scrolling to anchor links - * (c) 2020 Chris Ferdinandi - * MIT License - * http://github.com/cferdinandi/smooth-scroll - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - define([], (function () { - return factory(root); - })); - } else if (typeof exports === 'object') { - module.exports = factory(root); - } else { - root.SmoothScroll = factory(root); - } -})(typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : this, (function (window) { - - 'use strict'; - - // - // Default settings - // - - var defaults = { - - // Selectors - ignore: '[data-scroll-ignore]', - header: null, - topOnEmptyHash: true, - - // Speed & Duration - speed: 500, - speedAsDuration: false, - durationMax: null, - durationMin: null, - clip: true, - offset: 0, - - // Easing - easing: 'easeInOutCubic', - customEasing: null, - - // History - updateURL: true, - popstate: true, - - // Custom Events - emitEvents: true - - }; - - - // - // Utility Methods - // - - /** - * Check if browser supports required methods - * @return {Boolean} Returns true if all required methods are supported - */ - var supports = function () { - return ( - 'querySelector' in document && - 'addEventListener' in window && - 'requestAnimationFrame' in window && - 'closest' in window.Element.prototype - ); - }; - - /** - * Merge two or more objects together. - * @param {Object} objects The objects to merge together - * @returns {Object} Merged values of defaults and options - */ - var extend = function () { - var merged = {}; - Array.prototype.forEach.call(arguments, (function (obj) { - for (var key in obj) { - if (!obj.hasOwnProperty(key)) return; - merged[key] = obj[key]; - } - })); - return merged; - }; - - /** - * Check to see if user prefers reduced motion - * @param {Object} settings Script settings - */ - var reduceMotion = function () { - if ('matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches) { - return true; - } - return false; - }; - - /** - * Get the height of an element. - * @param {Node} elem The element to get the height of - * @return {Number} The element's height in pixels - */ - var getHeight = function (elem) { - return parseInt(window.getComputedStyle(elem).height, 10); - }; - - /** - * Escape special characters for use with querySelector - * @author Mathias Bynens - * @link https://github.com/mathiasbynens/CSS.escape - * @param {String} id The anchor ID to escape - */ - var escapeCharacters = function (id) { - - // Remove leading hash - if (id.charAt(0) === '#') { - id = id.substr(1); - } - - var string = String(id); - var length = string.length; - var index = -1; - var codeUnit; - var result = ''; - var firstCodeUnit = string.charCodeAt(0); - while (++index < length) { - codeUnit = string.charCodeAt(index); - // Note: there’s no need to special-case astral symbols, surrogate - // pairs, or lone surrogates. - - // If the character is NULL (U+0000), then throw an - // `InvalidCharacterError` exception and terminate these steps. - if (codeUnit === 0x0000) { - throw new InvalidCharacterError( - 'Invalid character: the input contains U+0000.' - ); - } - - if ( - // If the character is in the range [\1-\1F] (U+0001 to U+001F) or is - // U+007F, […] - (codeUnit >= 0x0001 && codeUnit <= 0x001F) || codeUnit == 0x007F || - // If the character is the first character and is in the range [0-9] - // (U+0030 to U+0039), […] - (index === 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) || - // If the character is the second character and is in the range [0-9] - // (U+0030 to U+0039) and the first character is a `-` (U+002D), […] - ( - index === 1 && - codeUnit >= 0x0030 && codeUnit <= 0x0039 && - firstCodeUnit === 0x002D - ) - ) { - // http://dev.w3.org/csswg/cssom/#escape-a-character-as-code-point - result += '\\' + codeUnit.toString(16) + ' '; - continue; - } - - // If the character is not handled by one of the above rules and is - // greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or - // is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to - // U+005A), or [a-z] (U+0061 to U+007A), […] - if ( - codeUnit >= 0x0080 || - codeUnit === 0x002D || - codeUnit === 0x005F || - codeUnit >= 0x0030 && codeUnit <= 0x0039 || - codeUnit >= 0x0041 && codeUnit <= 0x005A || - codeUnit >= 0x0061 && codeUnit <= 0x007A - ) { - // the character itself - result += string.charAt(index); - continue; - } - - // Otherwise, the escaped character. - // http://dev.w3.org/csswg/cssom/#escape-a-character - result += '\\' + string.charAt(index); - - } - - // Return sanitized hash - return '#' + result; - - }; - - /** - * Calculate the easing pattern - * @link https://gist.github.com/gre/1650294 - * @param {String} type Easing pattern - * @param {Number} time Time animation should take to complete - * @returns {Number} - */ - var easingPattern = function (settings, time) { - var pattern; - - // Default Easing Patterns - if (settings.easing === 'easeInQuad') pattern = time * time; // accelerating from zero velocity - if (settings.easing === 'easeOutQuad') pattern = time * (2 - time); // decelerating to zero velocity - if (settings.easing === 'easeInOutQuad') pattern = time < 0.5 ? 2 * time * time : -1 + (4 - 2 * time) * time; // acceleration until halfway, then deceleration - if (settings.easing === 'easeInCubic') pattern = time * time * time; // accelerating from zero velocity - if (settings.easing === 'easeOutCubic') pattern = (--time) * time * time + 1; // decelerating to zero velocity - if (settings.easing === 'easeInOutCubic') pattern = time < 0.5 ? 4 * time * time * time : (time - 1) * (2 * time - 2) * (2 * time - 2) + 1; // acceleration until halfway, then deceleration - if (settings.easing === 'easeInQuart') pattern = time * time * time * time; // accelerating from zero velocity - if (settings.easing === 'easeOutQuart') pattern = 1 - (--time) * time * time * time; // decelerating to zero velocity - if (settings.easing === 'easeInOutQuart') pattern = time < 0.5 ? 8 * time * time * time * time : 1 - 8 * (--time) * time * time * time; // acceleration until halfway, then deceleration - if (settings.easing === 'easeInQuint') pattern = time * time * time * time * time; // accelerating from zero velocity - if (settings.easing === 'easeOutQuint') pattern = 1 + (--time) * time * time * time * time; // decelerating to zero velocity - if (settings.easing === 'easeInOutQuint') pattern = time < 0.5 ? 16 * time * time * time * time * time : 1 + 16 * (--time) * time * time * time * time; // acceleration until halfway, then deceleration - - // Custom Easing Patterns - if (!!settings.customEasing) pattern = settings.customEasing(time); - - return pattern || time; // no easing, no acceleration - }; - - /** - * Determine the document's height - * @returns {Number} - */ - var getDocumentHeight = function () { - return Math.max( - document.body.scrollHeight, document.documentElement.scrollHeight, - document.body.offsetHeight, document.documentElement.offsetHeight, - document.body.clientHeight, document.documentElement.clientHeight - ); - }; - - /** - * Calculate how far to scroll - * Clip support added by robjtede - https://github.com/cferdinandi/smooth-scroll/issues/405 - * @param {Element} anchor The anchor element to scroll to - * @param {Number} headerHeight Height of a fixed header, if any - * @param {Number} offset Number of pixels by which to offset scroll - * @param {Boolean} clip If true, adjust scroll distance to prevent abrupt stops near the bottom of the page - * @returns {Number} - */ - var getEndLocation = function (anchor, headerHeight, offset, clip) { - var location = 0; - if (anchor.offsetParent) { - do { - location += anchor.offsetTop; - anchor = anchor.offsetParent; - } while (anchor); - } - location = Math.max(location - headerHeight - offset, 0); - if (clip) { - location = Math.min(location, getDocumentHeight() - window.innerHeight); - } - return location; - }; - - /** - * Get the height of the fixed header - * @param {Node} header The header - * @return {Number} The height of the header - */ - var getHeaderHeight = function (header) { - return !header ? 0 : (getHeight(header) + header.offsetTop); - }; - - /** - * Calculate the speed to use for the animation - * @param {Number} distance The distance to travel - * @param {Object} settings The plugin settings - * @return {Number} How fast to animate - */ - var getSpeed = function (distance, settings) { - var speed = settings.speedAsDuration ? settings.speed : Math.abs(distance / 1000 * settings.speed); - if (settings.durationMax && speed > settings.durationMax) return settings.durationMax; - if (settings.durationMin && speed < settings.durationMin) return settings.durationMin; - return parseInt(speed, 10); - }; - - var setHistory = function (options) { - - // Make sure this should run - if (!history.replaceState || !options.updateURL || history.state) return; - - // Get the hash to use - var hash = window.location.hash; - hash = hash ? hash : ''; - - // Set a default history - history.replaceState( - { - smoothScroll: JSON.stringify(options), - anchor: hash ? hash : window.pageYOffset - }, - document.title, - hash ? hash : window.location.href - ); - - }; - - /** - * Update the URL - * @param {Node} anchor The anchor that was scrolled to - * @param {Boolean} isNum If true, anchor is a number - * @param {Object} options Settings for Smooth Scroll - */ - var updateURL = function (anchor, isNum, options) { - - // Bail if the anchor is a number - if (isNum) return; - - // Verify that pushState is supported and the updateURL option is enabled - if (!history.pushState || !options.updateURL) return; - - // Update URL - history.pushState( - { - smoothScroll: JSON.stringify(options), - anchor: anchor.id - }, - document.title, - anchor === document.documentElement ? '#top' : '#' + anchor.id - ); - - }; - - /** - * Bring the anchored element into focus - * @param {Node} anchor The anchor element - * @param {Number} endLocation The end location to scroll to - * @param {Boolean} isNum If true, scroll is to a position rather than an element - */ - var adjustFocus = function (anchor, endLocation, isNum) { - - // Is scrolling to top of page, blur - if (anchor === 0) { - document.body.focus(); - } - - // Don't run if scrolling to a number on the page - if (isNum) return; - - // Otherwise, bring anchor element into focus - anchor.focus(); - if (document.activeElement !== anchor) { - anchor.setAttribute('tabindex', '-1'); - anchor.focus(); - anchor.style.outline = 'none'; - } - window.scrollTo(0 , endLocation); - - }; - - /** - * Emit a custom event - * @param {String} type The event type - * @param {Object} options The settings object - * @param {Node} anchor The anchor element - * @param {Node} toggle The toggle element - */ - var emitEvent = function (type, options, anchor, toggle) { - if (!options.emitEvents || typeof window.CustomEvent !== 'function') return; - var event = new CustomEvent(type, { - bubbles: true, - detail: { - anchor: anchor, - toggle: toggle - } - }); - document.dispatchEvent(event); - }; - - - // - // SmoothScroll Constructor - // - - var SmoothScroll = function (selector, options) { - - // - // Variables - // - - var smoothScroll = {}; // Object for public APIs - var settings, anchor, toggle, fixedHeader, eventTimeout, animationInterval; - - - // - // Methods - // - - /** - * Cancel a scroll-in-progress - */ - smoothScroll.cancelScroll = function (noEvent) { - cancelAnimationFrame(animationInterval); - animationInterval = null; - if (noEvent) return; - emitEvent('scrollCancel', settings); - }; - - /** - * Start/stop the scrolling animation - * @param {Node|Number} anchor The element or position to scroll to - * @param {Element} toggle The element that toggled the scroll event - * @param {Object} options - */ - smoothScroll.animateScroll = function (anchor, toggle, options) { - - // Cancel any in progress scrolls - smoothScroll.cancelScroll(); - - // Local settings - var _settings = extend(settings || defaults, options || {}); // Merge user options with defaults - - // Selectors and variables - var isNum = Object.prototype.toString.call(anchor) === '[object Number]' ? true : false; - var anchorElem = isNum || !anchor.tagName ? null : anchor; - if (!isNum && !anchorElem) return; - var startLocation = window.pageYOffset; // Current location on the page - if (_settings.header && !fixedHeader) { - // Get the fixed header if not already set - fixedHeader = document.querySelector(_settings.header); - } - var headerHeight = getHeaderHeight(fixedHeader); - var endLocation = isNum ? anchor : getEndLocation(anchorElem, headerHeight, parseInt((typeof _settings.offset === 'function' ? _settings.offset(anchor, toggle) : _settings.offset), 10), _settings.clip); // Location to scroll to - var distance = endLocation - startLocation; // distance to travel - var documentHeight = getDocumentHeight(); - var timeLapsed = 0; - var speed = getSpeed(distance, _settings); - var start, percentage, position; - - /** - * Stop the scroll animation when it reaches its target (or the bottom/top of page) - * @param {Number} position Current position on the page - * @param {Number} endLocation Scroll to location - * @param {Number} animationInterval How much to scroll on this loop - */ - var stopAnimateScroll = function (position, endLocation) { - - // Get the current location - var currentLocation = window.pageYOffset; - - // Check if the end location has been reached yet (or we've hit the end of the document) - if (position == endLocation || currentLocation == endLocation || ((startLocation < endLocation && window.innerHeight + currentLocation) >= documentHeight)) { - - // Clear the animation timer - smoothScroll.cancelScroll(true); - - // Bring the anchored element into focus - adjustFocus(anchor, endLocation, isNum); - - // Emit a custom event - emitEvent('scrollStop', _settings, anchor, toggle); - - // Reset start - start = null; - animationInterval = null; - - return true; - - } - }; - - /** - * Loop scrolling animation - */ - var loopAnimateScroll = function (timestamp) { - if (!start) { start = timestamp; } - timeLapsed += timestamp - start; - percentage = speed === 0 ? 0 : (timeLapsed / speed); - percentage = (percentage > 1) ? 1 : percentage; - position = startLocation + (distance * easingPattern(_settings, percentage)); - window.scrollTo(0, Math.floor(position)); - if (!stopAnimateScroll(position, endLocation)) { - animationInterval = window.requestAnimationFrame(loopAnimateScroll); - start = timestamp; - } - }; - - /** - * Reset position to fix weird iOS bug - * @link https://github.com/cferdinandi/smooth-scroll/issues/45 - */ - if (window.pageYOffset === 0) { - window.scrollTo(0, 0); - } - - // Update the URL - updateURL(anchor, isNum, _settings); - - // If the user prefers reduced motion, jump to location - if (reduceMotion()) { - window.scrollTo(0, Math.floor(endLocation)); - return; - } - - // Emit a custom event - emitEvent('scrollStart', _settings, anchor, toggle); - - // Start scrolling animation - smoothScroll.cancelScroll(true); - window.requestAnimationFrame(loopAnimateScroll); - - }; - - /** - * If smooth scroll element clicked, animate scroll - */ - var clickHandler = function (event) { - - // Don't run if event was canceled but still bubbled up - // By @mgreter - https://github.com/cferdinandi/smooth-scroll/pull/462/ - if (event.defaultPrevented) return; - - // Don't run if right-click or command/control + click or shift + click - if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey) return; - - // Check if event.target has closest() method - // By @totegi - https://github.com/cferdinandi/smooth-scroll/pull/401/ - if (!('closest' in event.target)) return; - - // Check if a smooth scroll link was clicked - toggle = event.target.closest(selector); - if (!toggle || toggle.tagName.toLowerCase() !== 'a' || event.target.closest(settings.ignore)) return; - - // Only run if link is an anchor and points to the current page - if (toggle.hostname !== window.location.hostname || toggle.pathname !== window.location.pathname || !/#/.test(toggle.href)) return; - - // Get an escaped version of the hash - var hash; - try { - hash = escapeCharacters(decodeURIComponent(toggle.hash)); - } catch(e) { - hash = escapeCharacters(toggle.hash); - } - - // Get the anchored element - var anchor; - if (hash === '#') { - if (!settings.topOnEmptyHash) return; - anchor = document.documentElement; - } else { - anchor = document.querySelector(hash); - } - anchor = !anchor && hash === '#top' ? document.documentElement : anchor; - - // If anchored element exists, scroll to it - if (!anchor) return; - event.preventDefault(); - setHistory(settings); - smoothScroll.animateScroll(anchor, toggle); - - }; - - /** - * Animate scroll on popstate events - */ - var popstateHandler = function (event) { - - // Stop if history.state doesn't exist (ex. if clicking on a broken anchor link). - // fixes `Cannot read property 'smoothScroll' of null` error getting thrown. - if (history.state === null) return; - - // Only run if state is a popstate record for this instantiation - if (!history.state.smoothScroll || history.state.smoothScroll !== JSON.stringify(settings)) return; - - // Only run if state includes an anchor - - // if (!history.state.anchor && history.state.anchor !== 0) return; - - // Get the anchor - var anchor = history.state.anchor; - if (typeof anchor === 'string' && anchor) { - anchor = document.querySelector(escapeCharacters(history.state.anchor)); - if (!anchor) return; - } - - // Animate scroll to anchor link - smoothScroll.animateScroll(anchor, null, {updateURL: false}); - - }; - - /** - * Destroy the current initialization. - */ - smoothScroll.destroy = function () { - - // If plugin isn't already initialized, stop - if (!settings) return; - - // Remove event listeners - document.removeEventListener('click', clickHandler, false); - window.removeEventListener('popstate', popstateHandler, false); - - // Cancel any scrolls-in-progress - smoothScroll.cancelScroll(); - - // Reset variables - settings = null; - anchor = null; - toggle = null; - fixedHeader = null; - eventTimeout = null; - animationInterval = null; - - }; - - /** - * Initialize Smooth Scroll - * @param {Object} options User settings - */ - var init = function () { - - // feature test - if (!supports()) throw 'Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.'; - - // Destroy any existing initializations - smoothScroll.destroy(); - - // Selectors and variables - settings = extend(defaults, options || {}); // Merge user options with defaults - fixedHeader = settings.header ? document.querySelector(settings.header) : null; // Get the fixed header - - // When a toggle is clicked, run the click handler - document.addEventListener('click', clickHandler, false); - - // If updateURL and popState are enabled, listen for pop events - if (settings.updateURL && settings.popstate) { - window.addEventListener('popstate', popstateHandler, false); - } - - }; - - - // - // Initialize plugin - // - - init(); - - - // - // Public APIs - // - - return smoothScroll; - - }; - - return SmoothScroll; - -})); diff --git a/assets/js/vendor/jquery/jquery-3.6.0.js b/assets/js/vendor/jquery/jquery-3.6.0.js deleted file mode 100644 index fc6c299b73e79..0000000000000 --- a/assets/js/vendor/jquery/jquery-3.6.0.js +++ /dev/null @@ -1,10881 +0,0 @@ -/*! - * jQuery JavaScript Library v3.6.0 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2021-03-02T17:08Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var flat = arr.flat ? function( array ) { - return arr.flat.call( array ); -} : function( array ) { - return arr.concat.apply( [], array ); -}; - - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - -var isFunction = function isFunction( obj ) { - - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 - // Plus for old WebKit, typeof returns "function" for HTML collections - // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) - return typeof obj === "function" && typeof obj.nodeType !== "number" && - typeof obj.item !== "function"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - -var document = window.document; - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.6.0", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - even: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return ( i + 1 ) % 2; - } ) ); - }, - - odd: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return i % 2; - } ) ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a provided context; falls back to the global one - // if not specified. - globalEval: function( code, options, doc ) { - DOMEval( code, { nonce: options && options.nonce }, doc ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return flat( ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), - function( _i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); - } ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.6 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2021-02-16 - */ -( function( window ) { -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ( {} ).hasOwnProperty, - arr = [], - pop = arr.pop, - pushNative = arr.push, - push = arr.push, - slice = arr.slice, - - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[ i ] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + - "ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram - identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - - // "Attribute values must be CSS identifiers [capture 5] - // or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + - whitespace + "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + - whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + - "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + - whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + - whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + - "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + - "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rhtml = /HTML$/i, - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), - funescape = function( escape, nonHex ) { - var high = "0x" + escape.slice( 1 ) - 0x10000; - - return nonHex ? - - // Strip the backslash prefix from a non-hex escape sequence - nonHex : - - // Replace a hexadecimal escape sequence with the encoded Unicode code point - // Support: IE <=11+ - // For values outside the Basic Multilingual Plane (BMP), manually construct a - // surrogate pair - high < 0 ? - String.fromCharCode( high + 0x10000 ) : - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + - ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - ( arr = slice.call( preferredDoc.childNodes ) ), - preferredDoc.childNodes - ); - - // Support: Android<4.0 - // Detect silently failing push.apply - // eslint-disable-next-line no-unused-expressions - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - pushNative.apply( target, slice.call( els ) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - - // Can't trust NodeList.length - while ( ( target[ j++ ] = els[ i++ ] ) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - setDocument( context ); - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { - - // ID selector - if ( ( m = match[ 1 ] ) ) { - - // Document context - if ( nodeType === 9 ) { - if ( ( elem = context.getElementById( m ) ) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && ( elem = newContext.getElementById( m ) ) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[ 2 ] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && - - // Support: IE 8 only - // Exclude object elements - ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // The technique has to be used as well when a leading combinator is used - // as such selectors are not recognized by querySelectorAll. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && - ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - - // We can use :scope instead of the ID hack if the browser - // supports it & if we're not changing the context. - if ( newContext !== context || !support.scope ) { - - // Capture the context ID, setting it first if necessary - if ( ( nid = context.getAttribute( "id" ) ) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", ( nid = expando ) ); - } - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + - toSelector( groups[ i ] ); - } - newSelector = groups.join( "," ); - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return ( cache[ key + " " ] = value ); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement( "fieldset" ); - - try { - return !!fn( el ); - } catch ( e ) { - return false; - } finally { - - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split( "|" ), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[ i ] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( ( cur = cur.nextSibling ) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return ( name === "input" || name === "button" ) && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction( function( argument ) { - argument = +argument; - return markFunction( function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ ( j = matchIndexes[ i ] ) ] ) { - seed[ j ] = !( matches[ j ] = seed[ j ] ); - } - } - } ); - } ); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem && elem.namespaceURI, - docElem = elem && ( elem.ownerDocument || elem ).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9 - 11+, Edge 12 - 18+ - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( preferredDoc != document && - ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, - // Safari 4 - 5 only, Opera <=11.6 - 12.x only - // IE/Edge & older browsers don't support the :scope pseudo-class. - // Support: Safari 6.0 only - // Safari 6.0 supports :scope but it's an alias of :root there. - support.scope = assert( function( el ) { - docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); - return typeof el.querySelectorAll !== "undefined" && - !el.querySelectorAll( ":scope fieldset div" ).length; - } ); - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert( function( el ) { - el.className = "i"; - return !el.getAttribute( "className" ); - } ); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert( function( el ) { - el.appendChild( document.createComment( "" ) ); - return !el.getElementsByTagName( "*" ).length; - } ); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert( function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - } ); - - // ID filter and find - if ( support.getById ) { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute( "id" ) === attrId; - }; - }; - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode( "id" ); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( ( elem = elems[ i++ ] ) ) { - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find[ "TAG" ] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { - - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert( function( el ) { - - var input; - - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll( "[selected]" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push( "~=" ); - } - - // Support: IE 11+, Edge 15 - 18+ - // IE 11/Edge don't find elements on a `[name='']` query in some cases. - // Adding a temporary attribute to the document before the selection works - // around the issue. - // Interestingly, IE 10 & older don't seem to have the issue. - input = document.createElement( "input" ); - input.setAttribute( "name", "" ); - el.appendChild( input ); - if ( !el.querySelectorAll( "[name='']" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + - whitespace + "*(?:''|\"\")" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll( ":checked" ).length ) { - rbuggyQSA.push( ":checked" ); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push( ".#.+[+~]" ); - } - - // Support: Firefox <=3.6 - 5 only - // Old Firefox doesn't throw on a badly-escaped identifier. - el.querySelectorAll( "\\\f" ); - rbuggyQSA.push( "[\\r\\n\\f]" ); - } ); - - assert( function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement( "input" ); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll( "[name=d]" ).length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: Opera 10 - 11 only - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll( "*,:x" ); - rbuggyQSA.push( ",.*:" ); - } ); - } - - if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector ) ) ) ) { - - assert( function( el ) { - - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - } ); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - ) ); - } : - function( a, b ) { - if ( b ) { - while ( ( b = b.parentNode ) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { - - // Choose the first element that is related to our preferred document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( a == document || a.ownerDocument == preferredDoc && - contains( preferredDoc, a ) ) { - return -1; - } - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( b == document || b.ownerDocument == preferredDoc && - contains( preferredDoc, b ) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - return a == document ? -1 : - b == document ? 1 : - /* eslint-enable eqeqeq */ - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( ( cur = cur.parentNode ) ) { - ap.unshift( cur ); - } - cur = b; - while ( ( cur = cur.parentNode ) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[ i ] === bp[ i ] ) { - i++; - } - - return i ? - - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[ i ], bp[ i ] ) : - - // Otherwise nodes in our document sort first - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - ap[ i ] == preferredDoc ? -1 : - bp[ i ] == preferredDoc ? 1 : - /* eslint-enable eqeqeq */ - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - setDocument( elem ); - - if ( support.matchesSelector && documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch ( e ) { - nonnativeSelectorCache( expr, true ); - } - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( context.ownerDocument || context ) != document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( elem.ownerDocument || elem ) != document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return ( sel + "" ).replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - - // If no nodeType, this is expected to be an array - while ( ( node = elem[ i++ ] ) ) { - - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[ 1 ] = match[ 1 ].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[ 3 ] = ( match[ 3 ] || match[ 4 ] || - match[ 5 ] || "" ).replace( runescape, funescape ); - - if ( match[ 2 ] === "~=" ) { - match[ 3 ] = " " + match[ 3 ] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[ 1 ] = match[ 1 ].toLowerCase(); - - if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { - - // nth-* requires argument - if ( !match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[ 4 ] = +( match[ 4 ] ? - match[ 5 ] + ( match[ 6 ] || 1 ) : - 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); - match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); - - // other types prohibit arguments - } else if ( match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[ 6 ] && match[ 2 ]; - - if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[ 3 ] ) { - match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - - // Get excess from tokenize (recursively) - ( excess = tokenize( unquoted, true ) ) && - - // advance to the next closing parenthesis - ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { - - // excess is a negative index - match[ 0 ] = match[ 0 ].slice( 0, excess ); - match[ 2 ] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { - return true; - } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - ( pattern = new RegExp( "(^|" + whitespace + - ")" + className + "(" + whitespace + "|$)" ) ) && classCache( - className, function( elem ) { - return pattern.test( - typeof elem.className === "string" && elem.className || - typeof elem.getAttribute !== "undefined" && - elem.getAttribute( "class" ) || - "" - ); - } ); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - /* eslint-disable max-len */ - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - /* eslint-enable max-len */ - - }; - }, - - "CHILD": function( type, what, _argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, _context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( ( node = node[ dir ] ) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( ( node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - - // Use previously-cached element index if available - if ( useCache ) { - - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - - // Use the same loop as above to seek `elem` from the start - while ( ( node = ++nodeIndex && node && node[ dir ] || - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || - ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction( function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[ i ] ); - seed[ idx ] = !( matches[ idx ] = matched[ i ] ); - } - } ) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - - // Potentially complex pseudos - "not": markFunction( function( selector ) { - - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction( function( seed, matches, _context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( ( elem = unmatched[ i ] ) ) { - seed[ i ] = !( matches[ i ] = elem ); - } - } - } ) : - function( elem, _context, xml ) { - input[ 0 ] = elem; - matcher( input, null, xml, results ); - - // Don't keep the element (issue #299) - input[ 0 ] = null; - return !results.pop(); - }; - } ), - - "has": markFunction( function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - } ), - - "contains": markFunction( function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; - }; - } ), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - - // lang value must be a valid identifier - if ( !ridentifier.test( lang || "" ) ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( ( elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); - return false; - }; - } ), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && - ( !document.hasFocus || document.hasFocus() ) && - !!( elem.type || elem.href || ~elem.tabIndex ); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return ( nodeName === "input" && !!elem.checked ) || - ( nodeName === "option" && !!elem.selected ); - }, - - "selected": function( elem ) { - - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - // eslint-disable-next-line no-unused-expressions - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos[ "empty" ]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( ( attr = elem.getAttribute( "type" ) ) == null || - attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo( function() { - return [ 0 ]; - } ), - - "last": createPositionalPseudo( function( _matchIndexes, length ) { - return [ length - 1 ]; - } ), - - "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - } ), - - "even": createPositionalPseudo( function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "odd": createPositionalPseudo( function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ) - } -}; - -Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || ( match = rcomma.exec( soFar ) ) ) { - if ( match ) { - - // Don't consume trailing commas as valid - soFar = soFar.slice( match[ 0 ].length ) || soFar; - } - groups.push( ( tokens = [] ) ); - } - - matched = false; - - // Combinators - if ( ( match = rcombinators.exec( soFar ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - - // Cast descendant combinators to space - type: match[ 0 ].replace( rtrim, " " ) - } ); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || - ( match = preFilters[ type ]( match ) ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - type: type, - matches: match - } ); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[ i ].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || - ( outerCache[ elem.uniqueID ] = {} ); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( ( oldCache = uniqueCache[ key ] ) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return ( newCache[ 2 ] = oldCache[ 2 ] ); - } else { - - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[ i ]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[ 0 ]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[ i ], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( ( elem = unmatched[ i ] ) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction( function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( - selector || "*", - context.nodeType ? [ context ] : context, - [] - ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( ( elem = temp[ i ] ) ) { - matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) ) { - - // Restore matcherIn since elem is not yet a final match - temp.push( ( matcherIn[ i ] = elem ) ); - } - } - postFinder( null, ( matcherOut = [] ), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) && - ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { - - seed[ temp ] = !( results[ temp ] = elem ); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - } ); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[ 0 ].type ], - implicitRelative = leadingRelative || Expr.relative[ " " ], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - ( checkContext = context ).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { - matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; - } else { - matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[ j ].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens - .slice( 0, i - 1 ) - .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), - - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), - len = elems.length; - - if ( outermost ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - outermostContext = context == document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( !context && elem.ownerDocument != document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( ( matcher = elementMatchers[ j++ ] ) ) { - if ( matcher( elem, context || document, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - - // They will have gone through all possible matchers - if ( ( elem = !matcher && elem ) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( ( matcher = setMatchers[ j++ ] ) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !( unmatched[ i ] || setMatched[ i ] ) ) { - setMatched[ i ] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[ i ] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( - selector, - matcherFromGroupMatchers( elementMatchers, setMatchers ) - ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( ( selector = compiled.selector || selector ) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[ 0 ] = match[ 0 ].slice( 0 ); - if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { - - context = ( Expr.find[ "ID" ]( token.matches[ 0 ] - .replace( runescape, funescape ), context ) || [] )[ 0 ]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[ i ]; - - // Abort if we hit a combinator - if ( Expr.relative[ ( type = token.type ) ] ) { - break; - } - if ( ( find = Expr.find[ type ] ) ) { - - // Search, expanding context for leading sibling combinators - if ( ( seed = find( - token.matches[ 0 ].replace( runescape, funescape ), - rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || - context - ) ) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert( function( el ) { - - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; -} ); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert( function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute( "href" ) === "#"; -} ) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - } ); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert( function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -} ) ) { - addHandle( "value", function( elem, _name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - } ); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert( function( el ) { - return el.getAttribute( "disabled" ) == null; -} ) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; - } - } ); -} - -return Sizzle; - -} )( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -} -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, _i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, _i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, _i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( elem.contentDocument != null && - - // Support: IE 11+ - // elements with no `data` attribute has an object - // `contentDocument` with a `null` prototype. - getProto( elem.contentDocument ) ) { - - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( _i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the primary Deferred - primary = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - primary.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( primary.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return primary.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); - } - - return primary.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, _key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( _all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - - // Support: IE <=9 only - // IE <=9 replaces "; - support.option = !!div.lastChild; -} )(); - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting
", "
" ], - col: [ 2, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - - _default: [ 0, "", "" ] -}; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: IE <=9 only -if ( !support.option ) { - wrapMap.optgroup = wrapMap.option = [ 1, "" ]; -} - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Only attach events to objects that accept data - if ( !acceptData( elem ) ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = Object.create( null ); - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( nativeEvent ), - - handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - - // Support: Chrome 86+ - // In Chrome, if an element having a focusout handler is blurred by - // clicking outside of it, it invokes the handler synchronously. If - // that handler calls `.remove()` on the element, the data is cleared, - // leaving `result` undefined. We need to guard against this. - return result && result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - which: true -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - // Suppress native focus or blur as it's already being fired - // in leverageNative. - _default: function() { - return true; - }, - - delegateType: delegateType - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.get( src ); - events = pdataOld.events; - - if ( events ) { - dataPriv.remove( dest, "handle events" ); - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = flat( args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - }, doc ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html; - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var swap = function( elem, options, callback ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.call( elem ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableTrDimensionsVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - }, - - // Support: IE 9 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Behavior in IE 9 is more subtle than in newer versions & it passes - // some versions of this test; make sure not to make it pass there! - // - // Support: Firefox 70+ - // Only Firefox includes border widths - // in computed dimensions. (gh-4529) - reliableTrDimensions: function() { - var table, tr, trChild, trStyle; - if ( reliableTrDimensionsVal == null ) { - table = document.createElement( "table" ); - tr = document.createElement( "tr" ); - trChild = document.createElement( "div" ); - - table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; - tr.style.cssText = "border:1px solid"; - - // Support: Chrome 86+ - // Height set through cssText does not get applied. - // Computed height then comes back as 0. - tr.style.height = "1px"; - trChild.style.height = "9px"; - - // Support: Android 8 Chrome 86+ - // In our bodyBackground.html iframe, - // display for all div elements is set to "inline", - // which causes a problem only in Android 8 Chrome 86. - // Ensuring the div is display: block - // gets around this issue. - trChild.style.display = "block"; - - documentElement - .appendChild( table ) - .appendChild( tr ) - .appendChild( trChild ); - - trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + - parseInt( trStyle.borderTopWidth, 10 ) + - parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; - - documentElement.removeChild( table ); - } - return reliableTrDimensionsVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( _elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Support: IE 9 - 11 only - // Use offsetWidth/offsetHeight for when box sizing is unreliable. - // In those cases, the computed value can be trusted to be border-box. - if ( ( !support.boxSizingReliable() && isBorderBox || - - // Support: IE 10 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Interestingly, in some cases IE 9 doesn't suffer from this issue. - !support.reliableTrDimensions() && nodeName( elem, "tr" ) || - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - val === "auto" || - - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - - // Make sure the element is visible & connected - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( _i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - - // Handle: regular nodes (via `this.ownerDocument`), window - // (via `this.document`) & document (via `this`). - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = { guid: Date.now() }; - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml, parserErrorElem; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) {} - - parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; - if ( !xml || parserErrorElem ) { - jQuery.error( "Invalid XML: " + ( - parserErrorElem ? - jQuery.map( parserErrorElem.childNodes, function( el ) { - return el.textContent; - } ).join( "\n" ) : - data - ) ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ).filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ).map( function( _i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - -originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + - uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Use a noop converter for missing script but not if jsonp - if ( !isSuccess && - jQuery.inArray( "script", s.dataTypes ) > -1 && - jQuery.inArray( "json", s.dataTypes ) < 0 ) { - s.converters[ "text script" ] = function() {}; - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( _i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - -jQuery.ajaxPrefilter( function( s ) { - var i; - for ( i in s.headers ) { - if ( i.toLowerCase() === "content-type" ) { - s.contentType = s.headers[ i ] || ""; - } - } -} ); - - -jQuery._evalUrl = function( url, options, doc ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options, doc ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + + + +
+ +

Posts by Category (grid view)

+ + + + + + + + + + + + + + + + + +
+

Large Space Stations

+
+ + + + + +
+
+ +

+ + Inflatable von Braun space stations: an idea worth revisiting? + + +

+ + +

+ + + + + + + + + + + + 8 minute read + + + (1772 words) + +

+ + +

Background +Kepler’s SomniumAt the time of my writing this post, his sci-fi story was +archived here +in 1608 and Edward Everett Hale’s +Brick Moon 1 +from 1865 ...

+
+
+ + + + + + +
+
+ +

+ + Some Space Stations in Fiction and Reality + + +

+ + +

+ + + + + + + + + + + + 4 minute read + + + (857 words) + +

+ + +

An earlier post in my teaching resources for a final +year undergraduate project had a pretty helpful +AI-generatedthanks to Claude +table. +This is a quick po...

+
+
+ + +
+ Back to top ↑ +
+ + + +
+

Space Exploration

+
+ + + + + +
+
+ +

+ + Inflatable von Braun space stations: an idea worth revisiting? + + +

+ + +

+ + + + + + + + + + + + 8 minute read + + + (1772 words) + +

+ + +

Background +Kepler’s SomniumAt the time of my writing this post, his sci-fi story was +archived here +in 1608 and Edward Everett Hale’s +Brick Moon 1 +from 1865 ...

+
+
+ + + + + + +
+
+ +

+ + Some Space Stations in Fiction and Reality + + +

+ + +

+ + + + + + + + + + + + 4 minute read + + + (857 words) + +

+ + +

An earlier post in my teaching resources for a final +year undergraduate project had a pretty helpful +AI-generatedthanks to Claude +table. +This is a quick po...

+
+
+ + +
+ Back to top ↑ +
+ + + + + +
+

Social Networking

+
+ + + + + +
+ +
+ + +
+ Back to top ↑ +
+ + + +
+

Internet

+
+ + + + + +
+ +
+ + +
+ Back to top ↑ +
+ + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/categories/edge-case-grid/index.html b/categories/edge-case-grid/index.html new file mode 100644 index 0000000000000..1b7786e4274d2 --- /dev/null +++ b/categories/edge-case-grid/index.html @@ -0,0 +1,570 @@ + + + + + +Edge Case (grid view) - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + + + +
+ +

Edge Case (grid view)

+ +

Sample post listing for the category Edge Case.

+ + + +
+ +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/categories/edge-case/index.html b/categories/edge-case/index.html new file mode 100644 index 0000000000000..bc347d18a2de2 --- /dev/null +++ b/categories/edge-case/index.html @@ -0,0 +1,570 @@ + + + + + +Edge Case - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + + + +
+ +

Edge Case

+ +

Sample post listing for the category Edge Case.

+ + + +
+ +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/categories/index.html b/categories/index.html new file mode 100644 index 0000000000000..34ca3289c40c0 --- /dev/null +++ b/categories/index.html @@ -0,0 +1,931 @@ + + + + + +Posts by Category - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + + + +
+ +

Posts by Category

+ + + + + + + + + + + + + + + + + +
+

Large Space Stations

+
+ + + + + +
+
+ +

+ + Inflatable von Braun space stations: an idea worth revisiting? + + +

+ + +

+ + + + + + + + + + + + 8 minute read + + + (1772 words) + +

+ + +

Background +Kepler’s SomniumAt the time of my writing this post, his sci-fi story was +archived here +in 1608 and Edward Everett Hale’s +Brick Moon 1 +from 1865 ...

+
+
+ + + + + + +
+
+ +

+ + Some Space Stations in Fiction and Reality + + +

+ + +

+ + + + + + + + + + + + 4 minute read + + + (857 words) + +

+ + +

An earlier post in my teaching resources for a final +year undergraduate project had a pretty helpful +AI-generatedthanks to Claude +table. +This is a quick po...

+
+
+ + +
+ Back to top ↑ +
+ + + +
+

Space Exploration

+
+ + + + + +
+
+ +

+ + Inflatable von Braun space stations: an idea worth revisiting? + + +

+ + +

+ + + + + + + + + + + + 8 minute read + + + (1772 words) + +

+ + +

Background +Kepler’s SomniumAt the time of my writing this post, his sci-fi story was +archived here +in 1608 and Edward Everett Hale’s +Brick Moon 1 +from 1865 ...

+
+
+ + + + + + +
+
+ +

+ + Some Space Stations in Fiction and Reality + + +

+ + +

+ + + + + + + + + + + + 4 minute read + + + (857 words) + +

+ + +

An earlier post in my teaching resources for a final +year undergraduate project had a pretty helpful +AI-generatedthanks to Claude +table. +This is a quick po...

+
+
+ + +
+ Back to top ↑ +
+ + + + + +
+

Social Networking

+
+ + + + + +
+ +
+ + +
+ Back to top ↑ +
+ + + +
+

Internet

+
+ + + + + +
+ +
+ + +
+ Back to top ↑ +
+ + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/collection-archive-grid/index.html b/collection-archive-grid/index.html new file mode 100644 index 0000000000000..9de044eb25bc6 --- /dev/null +++ b/collection-archive-grid/index.html @@ -0,0 +1,966 @@ + + + + + +Posts by Collection (grid view) - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + + + +
+ +

Posts by Collection (grid view)

+ + + + + + +
+ + +

online_textbooks

+ + +
+ + + + + +
+
+ +

+ + Final Year Project: Space Station Design + + +

+ + +

+ + + + + + + + + + + + 6 minute read + + + (1283 words) + +

+ + +

An introduction to multibody dynamics and the use of symbolic computation in modelling them. +

+
+
+ + + + + + +
+
+ +

+ + Symbolic Computational Dynamics + + +

+ + +

+ + + + + + + + + + + + 1 minute read + + + (283 words) + +

+ + +

An introduction to multibody dynamics and the use of symbolic computation in modelling them. +

+
+
+ + + + + + +
+
+ +

+ + Computational Spacecraft Dynamics + + +

+ + +

+ + + + + + + + + + + + less than 1 minute read + + + (188 words) + +

+ + +

An introduction to spacecraft dynamics modelling and simulation. +

+
+
+ + +
+ Back to top ↑ +
+ + + + + +
+ + +

publications

+ + +
+ + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + +
+ Back to top ↑ +
+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/collection-archive/index.html b/collection-archive/index.html new file mode 100644 index 0000000000000..9462d62758297 --- /dev/null +++ b/collection-archive/index.html @@ -0,0 +1,980 @@ + + + + + +Posts by Collection - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + + + +
+ +

Posts by Collection

+ + + + + + + +

online_textbooks

+ + + + + + + + + +
+
+ +

+ + Final Year Project: Space Station Design + + +

+ + +

+ + + + + + + + + + + + 6 minute read + + + (1283 words) + +

+ + +

An introduction to multibody dynamics and the use of symbolic computation in modelling them. +

+
+
+ + + + + + + + +
+
+ +

+ + Symbolic Computational Dynamics + + +

+ + +

+ + + + + + + + + + + + 1 minute read + + + (283 words) + +

+ + +

An introduction to multibody dynamics and the use of symbolic computation in modelling them. +

+
+
+ + + + + + + + +
+
+ +

+ + Computational Spacecraft Dynamics + + +

+ + +

+ + + + + + + + + + + + less than 1 minute read + + + (188 words) + +

+ + +

An introduction to spacecraft dynamics modelling and simulation. +

+
+
+ + + + + + + + + + + + + + + + +

publications

+ + + + + + + + + +
+ +
+ + + + + + + + +
+ +
+ + + + + + + + +
+ +
+ + + + + + + + +
+ +
+ + + + + + + + +
+ +
+ + + + + + + + +
+ +
+ + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/feed.xml b/feed.xml new file mode 100644 index 0000000000000..cde2f00a591eb --- /dev/null +++ b/feed.xml @@ -0,0 +1,414 @@ +Jekyll2024-10-07T12:24:12+01:00/feed.xmlAngadhSpace, Robotics, and AI.AngadhInflatable von Braun space stations: an idea worth revisiting?2024-10-06T22:04:59+01:002024-10-06T22:04:59+01:00/large%20space%20stations/space%20exploration/space-inflatables-1Background

+

Kepler’s SomniumAt the time of my writing this post, his sci-fi story was +archived here +in 1608 and Edward Everett Hale’s +Brick Moon 1 +from 1865 are +early fantasy science-fiction of space-faring humans. Kepler +faced more flak than fanfare for his workKepler’s mom was put on +trial +for witchcraft with some connections to Somnium. +Also credit for the link where it’s due. +but I was especially surprised to learn about his use of creative writing +as a force for exploring ideas around space-faring and +extra-terrestrial civilisations. His scientific work in astronomy influenced +Newton and others indicating an enduring impact on science, engineering, and human +civilisation stemming from a curiosity about the motion of stars. +It suffices to say that space habitation has occupied us from a fictional +and scientific lens for some time now.

+ +

Today’s technocultural space community of thinkers has conjured or +realised astonishing visions like the Apollo program and reusable rockets in +the $20^{th}$ and $21^{st}$ centuries. The technical community no longer +battles claims of heresy but politics, as if fighting to overcome the limits +of physics isn’t hard enough. Bureaucratic operators seek short-term +justifications for projects and hinder progress towards sci-fi realities +of large scale space travel and habitationnot so for +space data services, +as satellites have been miniaturised, commodified, and productised out of the hands +of governments. , branding these pursuits as potentially irresponsible to justify with +taxpayer money. Governments want to solve the flat-lining productivity problemI believe such investment justifies technical education which +then creates skilled populations- some of whom work on new visions that generate +jobs and others work in these jobs or enter the existing labour market. I can’t +definitively prove this, of course, but it feels to me a pathway to solving +the UK’s productivity puzzle. +but want to do so without investing in visions of a limitlessly abundant future. +Meanwhile, private investors want rapid returns on investment while making +bold claims, like wanting flying cars but getting $140$ characters, extending the +participation in space progress to mostly the superwealthy.

+ +

From hereon, this post will focus on the radical notion of space +superstructures, such as rotating wheel space stations, that expand our +presence in various Earth orbits and then extend our reach to go deeper into space. The +post mostly argues for a focus on developing inflatable technologies to +realise these structures in the near-term but it is possible that this is +too ambitious a goal. Note that other options for realising space superstructures +(e.g., robots) are not really considered here but are generally important. Along +the way, readers may find claims that explain why supporting the development +of space superstructures in the near-term is potentially valuable and socially +relevant.

+ +

The vision

+

Simply put, the vision I am putting forward is of deploying monolithic +space stations with crew capacities of at least $100$ astronauts, i.e., +$>10x$ the ISS’s typical crew size; I call this the Hundred Person Habitat (HPH). +To date, no station has offered an order of magnitude increase on its +predecessors and none are in the pipelineThe +in-development Lunar Gateway will operate at an orbit further to the +International Space Station (ISS) with a crew of 4. See table +here . +Assuming that a pressurized volume $>20x$ of the ISS gives each crew member a +hypothetical $\approx 200\,m^3$ of volume though, in practice, the habitable portion is +roughly identical to the space occupied by on-board equipment/instruments +for experiments and life support. The station will be a toroid and thus +conceptually resembles von Braun’sHe was apparently inspired by Herman Potočnik’s $30\,m$ ring-shaped habitat +described in The Problem of Space Travel rotating wheel station. The below table +compares the HPH to the ISS and von Braun station:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParametersISSvon Braun wheelHundred person Habitat
crew size (# of astronauts)7-1350-80100
diameter of the station (m)n/a75~75
total volume $m^3$9166217.8520x of ISS
habitable %42.35%60% (assumed)?
Max. volume per crew $(\frac{m^3}{person})$64.6652.67 assuming 50 crew183.20
Rotational speed for artificial gravity (RPM)-33
Gravity on-board ($m/s^2$)-1.6551.655
+ +

As opposed to von Braun’s imagined multi-launch architecture, I am +imposingNot proposing! that this identically sized structure be achievable from a +single rocket launch by exploiting an idea as old +as NASA itself: using an inflatable +tube structure.

+ +

Inflatable tubular space stations: a counterintuitive idea

+
Testing of an inlatable +space habitat prototype by Goodyear in 1961.
+ +

In 1961, Goodyear Aircraft Corporation prototyped an inflatable tube +space station (see above) called the Erectable Torus Manned Space +LaboratoryAround the same time, the Soviets +were developing inflatable airlocks; a more modestly sized appendage +to spacecraft that allows astronauts to move between a pressurized +spacecraft and the vacuum of space. . The idea never made it to +flight due to concerns that the soft materials it was made fromthree-ply nylon cords, held together by butyl elastomer. +weren’t strong enough to withstand micrometeoroid collisions. +Nonetheless, this was an early example of a monolithic space station; +a tenth of von Braun’s wheel station that could be packaged to $2\%$ +of its inflated volume (another cool image below).

+ +
+Litteken’s paper on space inflatables +has this really nice image of GoodYear’s inital testing taken from James Hansen’s +Spacefligth Revolution. +One can see James Webb underneath the full size inflated station; the images on the +left show the packaged tube structure.
+ +

A long lull on habitable space inflatables followed +until NASA’s TransHab program (1997) which developed +high strength materials capable of withstanding collisions with +micrometeoroids and orbital debris (MMOD). TransHab inspired +a cylindrical inflatable ISS module ($13\,ft$ in length and $10\,ft$ +in diameter)- BEAM (Bigelow Expandable Activity Module)- in +operation since 2016. The period between the GoodYear and TransHab +inflatable space stations laid the foundations for today’s dominant +design of rigid space stations. In my eyes, this is a classic example +of where simpler elegant solutions were traded in for ones that are more +complex when we think about scale. For example, monolithic rigid stations were +followed by the modular ones, like the ISS, that have required in-space +assembly, mostly by astronauts, or propellant-intensive rendezvous +and docking manoeuvres. Building on this, most future scalable designs I have seen +purport the idea of robotic assembly. My recent learnings on inflatables suggest +that the same outcome might be realised by a simpler single inflatable system though +the development process will be less straightforward. The decision to focus +only on rigid stations/modules for several decades has made these inflatable +solutions a forgotten one; it appears that we threw out the baby with the bathwater.

+ +

When I suggest this idea to people today, it seems a counterintuitive and +potentially outrageous solution that exposes biases in thinking- even amongst +experts who are, after all, only human. Firstly, there’s a widespread belief +that inflatable structures are less safe due to the risk of MMOD collisions. +The incorrect analogy of balloons bursting is often mistakenly applied but +modern designs incorporate multiple layers of high-strength materials that are +remarkably resistant to punctures and could even self-heal. In fact, their +flexibility could make them more resilient than rigid structures. Secondly, +prevalence of robotics in automating human tasks has led to an assumption +that the same approach is optimal everywhere: we see robots building cars +and assume they should build space stations. But space presents unique +challenges where simplicity is paramount. Inflatable structures have minimal +mechanical complexity, reduce failure points, and simplify construction. +Moreover, our terrestrial experience doesn’t include living in inflatable +habitats, making it non-obvious as a space solution. We’re accustomed to rigid +structures so cannot envision lightweight, expandable living spaces as +a viable alternative. Yet, in the vacuum of space, these structures +provide vast habitable areas with superior radiation shielding and +thermal management. This insight has profound implications for future +space missions. By embracing inflatable technologies, we can +dramatically reduce launch costs, simplify construction processes, +and create larger, more versatile space habitats than ever before. +It’s a reminder that in space engineering, sometimes the most effective +solutions are those that challenge our Earth-biased intuitions.

+ +

Why is now a good time to return to inflatable space structures?

+

There are probably many more reasons than I describe below as to why +nowUnlike was done with inflatables, we should maintain/increase support to +mature in-space robotic assembly and maintenance technology development +as I imagine that at even larger scales, a reliance on robots is inevitable. +is a good time to revisit the GoodYear inflatable station ideaIn fact, +such stations are just one application of inflatable +technologies I see. They could totally transform space robotics by using pneumatic actuation +for orbital applications thus eliminating the need for radiation-hardened components like +joint motors- a pretty massive bottleneck in the development of space robotics. .

+ +

The first has to do with the emerging promise of Starship, which is seeing frequent impressive +tests. In contrast, when GoodYear was developing its concept, the +Saturn V +was still in early development and the GoodYear project might have been easy to kill; I imagine +the Moon missions would have also led to a reallocation of resources and +focus. Second, the impending retirement of the ISS means there is a window +(or even a need) for a successor with a larger volume for both crew sizes +and science output. Third, there will be eventually be more commercial users of a large +inflatable orbital volume than space agencies; in-space manufacturing +companies like Varda could use these stations to scale their drug manufacturing, +with the beneficiaries being patients on Earth. Other avenues here are for materials +science research and protein crystal growth (not my domain of expertise at all). +If in-space semiconductor manufacturing in microgravity becomes a thing, then +larger inflatable volumes would, again, answer the question of scaling. +Similarly, sci-fi outcomes such as at-scale 3-D printing artificial organs +would benefit those in need of hearts and lungs- demands that are not being met +by the donor organ market.

+ +

All of which is even before we consider making these +stations rotate to produce an artificial gravity enabling safer long-haul +journeys for astronaut crews +heading to Mars or other locations away from the EarthI am +currently reading James Hansen’s +Spacefligth Revolution that should +help me a deeper perspective on inflatable space stations. Fun fact: another of his books was adapted into +First Man with Ryan Gosling playing Neil Armstrong. .

+ + + +

Notes

+
+
    +
  1. +

    I’ve only read a summary of Brick Moon, a story of workers building a 200-foot sphere that are accidentally launched into space to become first inhabitants of space. The moon was to serve as a navigational aid for sailors. It also estimates a cost for the construction at ${$}250k$ using $12$ million bricks. 

    +
  2. +
+
]]>AngadhSome Space Stations in Fiction and Reality2024-09-29T15:30:00+01:002024-09-29T15:30:00+01:00/large%20space%20stations/space%20exploration/vonBraunWheelsAn earlier post in my teaching resources for a final +year undergraduate project had a pretty helpful +AI-generatedthanks to Claude +table. +This is a quick post about Wernher von Braun’s 1950’s +conceptual rotating wheel station with some basic comparisons +to the ISS (1998-present) and 1968’s Space Station V from 2001: A Space +OdysseyWatch this as homework! .

+ +

Von Braun’s Rotating Wheel Space Station

+

Wernher von Braun’s video envisioned a rotating wheel +space station with 9 sections for:

+
    +
  1. Headquarters and Communications
  2. +
  3. Earth Weather Observation/Prediction
  4. +
  5. Military Reconnaissance using Optical and Radar Telescopes
  6. +
  7. Emergency Hospital Section
  8. +
  9. Astronomy
  10. +
  11. Calculation Machines and a lower/outer deck with maintenance facilities
  12. +
  13. A/C equipment
  14. +
  15. Living quarters
  16. +
  17. Botanical and Zoological Laboratory +The video shows two decks per section, which I assume is 6 $m$ in heigh (i.e. the habitable portion between the +outer rim and inner rim). Wikipedia says the concept had 3 decks but as I haven’t looked that up, I will stick to two +6 $m$ decks for now.
  18. +
+ +

The system is powered by an atomic reactor attached on one side of its central hub; its heat will drive a +turbo generator to power the station. Radio and radar antennas sit atop the reactor. The other side of the hub has +an airlock for astronauts to access/exit the space station via smaller spacecraft. Like a bicycle wheel, the system +had thin spokes are condensers for the turbo generator and air-conditioning plant. Three larger tubes are elevator +shafts that connect the hub to the main habitable sections of the wheel station. The station would:

+
    +
  • host 50 astronauts though Wikipedia states 80 people.
  • +
  • rotate at roughly 3 rpm to produce artificial gravity on the rim; and
  • +
  • be a torus of 250 $ft$ (76 $m$) diameter. The distance from the center of the tube to the center of the torus is $R = 70/2 = 35 \, m$ and the minor radius of the tube is $r = 6/2 = 3 \, m$. The volume of this torus is then the station’s total pressurized volume, which is given by \((V_{tot})_{vB} = 2 {\pi^2} R {r^2}\).
  • +
+ +

So, we can estimate that the von Braun space station has a:

+
    +
  • Total Pressurized Volume: = 6217.85 $m^3$
  • +
  • Habitable Volume = 3730.71 $m^3$
  • +
+ +

Here, I assumed that 60% of the pressurized volume is habitable. This is a considerably more optimistic percentage +compared to the 42% of ISS.

+ +

How did von Braun imagine its realisation?

+


Assembly of the Modular Rotating Wheel Space Station.
+
Condenser pipes being unwound for installation.

+ +

The short-version is that he assumed predominantly modular robotic assembly and a minor reliance on inflatables +for the airlock. First, the hub is inflated using compressed air from built-in tanks. Protection from meteors +is ensured by putting thin metal plates; this is unnecessary today as we have developed high-strength textiles +that are used on inflatable space stations. A second launch brings with it an airlock, which is again attached +by robots; this allows the pressurized hub to be used as a temporary quarters as the station assembly continues +with astronaut-robot teams. +Pre-fabricated and tested on the ground after which it is dismantled and assembled robotically in-orbit. +A number successive launches (he says) ensure the “parts of the station are assembled in the correct order”. +Nylon tethers prevent parts from drifting away. The reactor appears to be the next big piece that is installed +so I assume this is the third launch. This is followed by the elevator shafts and the rim sections being brought +together. We can assume a single launch for each module: $3$ elevator tubes and 9 rim modules (assuming one per +section). Assuming condenser pipes are installed from one launch (but the structure itself needs to be unwound robotically, which seems unreasonable/unreal at the moment as a robotic task.

+ +

Lastly, the installation of instruments/equipment (a simple catch-all term for imaging antennas and +the lab facilities compute for astronomical/Earth Observation data analysis, I think) and two small +rocket motors on the rim. These rocket motors “blast for a few seconds” to revolve the station at about +$3 \, RPM$.

+ +

Comparing to ISS and Space Station V (2001: A Space Odyssey)

+

Table 1: Comparing the ISS to fictional ideas.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 ISSvon BraunSpace Station V
crew size (# of astronauts)7-1350-802
diameter of the station (m)n/a75300
total volume $m^3$9166217.8526647.93
habitable %42.35%60% (assumed)?
Max. volume per crew $(\frac{m^3}{person})$64.6652.67 assuming 50 crew13223.46
Rotational speed for artificial gravity (RPM)-32.44
Gravity on-board ($m/s^2$)-1.6559.81
+ +

Some gaps in von Braun design

+
    +
  1. Assumes a launch every 24 hours- not close to it then and not really close to that kind of cadence today. What could we do today?
  2. +
  3. Doesn’t really say how many launches are needed to realize assembly in the video. This can probably be found elsewhere but my estimate from watching the video is 15-18 launches.
  4. +
  5. The process involves a number of assembly robots but we barely have one of these today. And whatever is there not autonomous.
  6. +
  7. Materials used in assembly are unknown.
  8. +
  9. Telescope sizes for reconnaisance and astronomy are unknown.
  10. +
  11. Power requirements are unknown.
  12. +
  13. What else?
  14. +
]]>
Angadh
Three major issues in today’s consumer Internet2024-02-10T22:33:30+00:002024-02-10T22:33:30+00:00/social%20networking/internet/Improve-InternetMuch of today’s `free’ or consumer internet is built on three principles:

+ +
    +
  1. +

    Involuntary user data exploitation: Recent debates around generative AI have returned attention to this.

    +
  2. +
  3. +

    Novel manipulation of users by malicious actors through personal chat: WhatsApp is used as a +political weapon to broadcast misinformation during elections, especially in developing economies. +It was central to disinformation campaigns during elections in Brazil +El-Masri, Azza, Riedl, Martin J, and Woolley, Samuel. “Audio misinformation on WhatsApp: A case study from Lebanon.” Harvard Kennedy School (HKS) Misinformation Review, 2022. , +IndiaBanaji, Shakuntala, Bhat, Ramnath, Agarwal, Anushi, Passanha, Nihal, and Sadhana Pravin, Mukti. “WhatsApp vigilantes: An exploration of citizen reception and circulation of WhatsApp misinformation linked to mob violence in India.” Department of Media and Communications, London School of Economics and Political Science, London, UK, 2019. , and LebanonRecuero, Raquel, Soares, Felipe, and Vinhas, Otávio. “Discursive strategies for disinformation on WhatsApp and Twitter during the 2018 Brazilian presidential election.” First Monday, 2021. .

    +
  4. +
  5. +

    Social media companies incentivize poor online behaviors: X and Reddit allow users to publish posts rapidly; some are insightful and informative while others lack taste, to put it mildly, leading to polarizing toxic content.

    +
  6. +
+ +

Proposal for new mechanics of online publication could ameliorate today’s consumer internet

+ +

I have been thinking a lot about the fundamental mechanics of online social platforms and how they +can be designed to be less exploitative/manipulative and offer more respectful experiences on the internet. +Specifically, I have been thinking about how publication should work on the internet and how this should be +facilitated by personal reflection. This would work better, in my opinion, than online public shaming/arguments +on comments threads of existing platforms.

+ +

So, my idea is to re-imagine modern-day social media and personal messaging systems to introduce a new way +to publish that allows content publication/broadcasting only using content that exists within a chat in your inbox. +If this sounds unclear, think of having a button on WhatsApp or Gmail that converts a set of chat messages/emails/drafts between you and some friends into a blog or project proposal or white paper. In addition to human collaborations making the content appropriate for public sharing, an on-device AI agent (not on the cloud) enhancing/improving your pre-publication work, exposing biases in your thinking (think of this as an AI agent commenting in your GDocs). And then a button allows you to publish this content (or warns you against publishing). The on-device AI preserves privacy and recent developments show that LLMs can work on current personal computing hardware. A cloud-based agent could also be used for a second stage of monitoring; this would not violate user data privacy because the user’s intent with posting is, after all, to have the data examined.

+ +

I believe this introduction of some friction in the publication process that encourages reflection is one step towards driving individual users towards a society that’s fairer and more respectful.

+ +

Some personal progress on making such a platform

+ +

In this spirit, I spent some free time working on an inbox-to-publication platform using audio/speech as the communication modality. This choice was informed by my Indian heritage, where I feel spoken literacy is higher than written literacy which is being exploited as I mentioned earlier. Click here to see an (out-of-date) demo of an iOS called Howler from 2022.

]]>
Angadh
\ No newline at end of file diff --git a/files/.DS_Store b/files/.DS_Store deleted file mode 100644 index 8439a17bc343e..0000000000000 Binary files a/files/.DS_Store and /dev/null differ diff --git a/index.html b/index.html new file mode 100644 index 0000000000000..e9993d77034f6 --- /dev/null +++ b/index.html @@ -0,0 +1,680 @@ + + + + + +Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + +
+ + +
+ + + + + +
+ +
+ + + + +
+ + +
+

My Background and Interests

+

At present, I am a Lecturer in Spacecraft Engineering at Queen Mary University of +London in the UKMy QMUL page . +Since entering academia in 2020, I have attempted to traverse the twofold research and education +landscape in a manner that I think can expand consciousness- mine as well as of those who try +to work with me. This is especially that case (I’d like to think) for students and early +career researchers.

+ +

Everything I learned about my academic field of expertise (classical mechanics and +multibody dynamics) and its effective written communication was from the +late Prof. Fidels O. EkeHis UC Davis obituary , +a truly extraordinary scholar and gentleman. Towards the completion of my PhD, I was fortunate to +be accepted by Dr. Abhi Jain +to spend a year at the NASA Jet Propulsion Laboratory’s DARTSLab, +where his group works on fundamental aspects of computational/algorithmic multibody robot +dynamics while applying them in the context of various NASA missions. This was followed by +a postdocotoral appointment at the Surrey Space Centre- +here, I drove research for SSTL and Airbus into developing missions, +architectures, and technology development/demonstration plans for robotic +in-space assembly while also +driving development of lab-based technology demonstration testbeds. Here, again, my worldview +was expanded by Prof. Craig Underwood, +who possesses an encyclopaedic knowledge of space missions while also being a proper space engineer with +a deep understanding of technologies across various spacecraft subsystems. These experiences and mentors +got me working in space robotics where my group works on fundamental engineering science-based know-hows +towards realising futuristic space systems/technologies.

+ +

My Research and Pedagogic Philosophy: Tasteful engineering creativity via constructivist experimentation

+

My new approach to personal learning and pedagogic growth bears some parallels to Papert’s +constructivist philosophy. My interpretation of this is that intuition and interest comes from +experimenting with new and previously unknown interactive tools, much like a child playing with an +ever-expanding collection of toys, to enhance their understanding of the world. My belief is that +this leads to one eventually uncoveringIn some cases, even discovering. their +interests, which I see as an important precursor to developing taste. I am writing this while +reflecting on the efforts of some extraordinary students who, over the Summer of 2024, collectively +created an online textbook on Spacecraft Dynamics1 based on previous handwritten lecture notes.

+ +

For students, I like to emphases exploration-based learning (as opposed to ), which deviates from +the conventions of formal academia that are examination-focused (as much as my role permits). +The dangers of eschewing exploration in educaation is bearing the anti-fruit in the extant +populist model of STEM research where group leaders are focused on enhancing personal metrics +by collecting more publications in a bid to raise personal research productivity indices +A classic case of Goodhart’s law. My issue is that these metrics are not an +effective measure of the true outputs from academia- the career of advisees 2. +Of course, this presumes advisees must also be self-motivated to grow their opportunities. . +My conclusion is that a lot of today’s professoriate are not too different from +philatelists3 but a potential answer lies in updating incentive structures. Or at least +clarifying them; a funder should make clear it wants only journall papers or only datasets or +a combination of these (and other) outputs.

+ +

Footnotes

+ +
+
    +
  1. +

    The students built on prior basic knowledge of Python, \(\LaTeX\), and Markdown but more importantly some of them learned how to thoroughly review pull requests. They were able to teach their friends, via remote pair programming, how to make contributions without my direct supervision. In the process, this team also taught me about sensibly coordinating a larger Github project while flying by the seat of my pants. I would like to think that we all grew a bit. 

    +
  2. +
  3. +

    Can one teach another how to love something? 

    +
  4. +
  5. +

    A commentary will be needed from me to clarify this as I do believe that documentation is important in STEM but more important is training future scientists to be effectively communicate in writing. 

    +
  6. +
+
+ + +
+ +
+ + + + + + +
+ + + + +
+ + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/large space stations/space exploration/space-inflatables-1/index.html b/large space stations/space exploration/space-inflatables-1/index.html new file mode 100644 index 0000000000000..70a465ca7694d --- /dev/null +++ b/large space stations/space exploration/space-inflatables-1/index.html @@ -0,0 +1,826 @@ + + + + + +Inflatable von Braun space stations: an idea worth revisiting? - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + +
+ + +
+ + + + + +
+ +
+

Inflatable von Braun space stations: an idea worth revisiting? +

+ + +

+ + + + + + + + + + + + 8 minute read + + + (1772 words) + +

+ + +
+ + +
+

Background

+

Kepler’s SomniumAt the time of my writing this post, his sci-fi story was +archived here +in 1608 and Edward Everett Hale’s +Brick Moon 1 +from 1865 are +early fantasy science-fiction of space-faring humans. Kepler +faced more flak than fanfare for his workKepler’s mom was put on +trial +for witchcraft with some connections to Somnium. +Also credit for the link where it’s due. +but I was especially surprised to learn about his use of creative writing +as a force for exploring ideas around space-faring and +extra-terrestrial civilisations. His scientific work in astronomy influenced +Newton and others indicating an enduring impact on science, engineering, and human +civilisation stemming from a curiosity about the motion of stars. +It suffices to say that space habitation has occupied us from a fictional +and scientific lens for some time now.

+ +

Today’s technocultural space community of thinkers has conjured or +realised astonishing visions like the Apollo program and reusable rockets in +the $20^{th}$ and $21^{st}$ centuries. The technical community no longer +battles claims of heresy but politics, as if fighting to overcome the limits +of physics isn’t hard enough. Bureaucratic operators seek short-term +justifications for projects and hinder progress towards sci-fi realities +of large scale space travel and habitationnot so for +space data services, +as satellites have been miniaturised, commodified, and productised out of the hands +of governments. , branding these pursuits as potentially irresponsible to justify with +taxpayer money. Governments want to solve the flat-lining productivity problemI believe such investment justifies technical education which +then creates skilled populations- some of whom work on new visions that generate +jobs and others work in these jobs or enter the existing labour market. I can’t +definitively prove this, of course, but it feels to me a pathway to solving +the UK’s productivity puzzle. +but want to do so without investing in visions of a limitlessly abundant future. +Meanwhile, private investors want rapid returns on investment while making +bold claims, like wanting flying cars but getting $140$ characters, extending the +participation in space progress to mostly the superwealthy.

+ +

From hereon, this post will focus on the radical notion of space +superstructures, such as rotating wheel space stations, that expand our +presence in various Earth orbits and then extend our reach to go deeper into space. The +post mostly argues for a focus on developing inflatable technologies to +realise these structures in the near-term but it is possible that this is +too ambitious a goal. Note that other options for realising space superstructures +(e.g., robots) are not really considered here but are generally important. Along +the way, readers may find claims that explain why supporting the development +of space superstructures in the near-term is potentially valuable and socially +relevant.

+ +

The vision

+

Simply put, the vision I am putting forward is of deploying monolithic +space stations with crew capacities of at least $100$ astronauts, i.e., +$>10x$ the ISS’s typical crew size; I call this the Hundred Person Habitat (HPH). +To date, no station has offered an order of magnitude increase on its +predecessors and none are in the pipelineThe +in-development Lunar Gateway will operate at an orbit further to the +International Space Station (ISS) with a crew of 4. See table +here . +Assuming that a pressurized volume $>20x$ of the ISS gives each crew member a +hypothetical $\approx 200\,m^3$ of volume though, in practice, the habitable portion is +roughly identical to the space occupied by on-board equipment/instruments +for experiments and life support. The station will be a toroid and thus +conceptually resembles von Braun’sHe was apparently inspired by Herman Potočnik’s $30\,m$ ring-shaped habitat +described in The Problem of Space Travel rotating wheel station. The below table +compares the HPH to the ISS and von Braun station:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParametersISSvon Braun wheelHundred person Habitat
crew size (# of astronauts)7-1350-80100
diameter of the station (m)n/a75~75
total volume $m^3$9166217.8520x of ISS
habitable %42.35%60% (assumed)?
Max. volume per crew $(\frac{m^3}{person})$64.6652.67 assuming 50 crew183.20
Rotational speed for artificial gravity (RPM)-33
Gravity on-board ($m/s^2$)-1.6551.655
+ +

As opposed to von Braun’s imagined multi-launch architecture, I am +imposingNot proposing! that this identically sized structure be achievable from a +single rocket launch by exploiting an idea as old +as NASA itself: using an inflatable +tube structure.

+ +

Inflatable tubular space stations: a counterintuitive idea

+
Testing of an inlatable +space habitat prototype by Goodyear in 1961.
+ +

In 1961, Goodyear Aircraft Corporation prototyped an inflatable tube +space station (see above) called the Erectable Torus Manned Space +LaboratoryAround the same time, the Soviets +were developing inflatable airlocks; a more modestly sized appendage +to spacecraft that allows astronauts to move between a pressurized +spacecraft and the vacuum of space. . The idea never made it to +flight due to concerns that the soft materials it was made fromthree-ply nylon cords, held together by butyl elastomer. +weren’t strong enough to withstand micrometeoroid collisions. +Nonetheless, this was an early example of a monolithic space station; +a tenth of von Braun’s wheel station that could be packaged to $2\%$ +of its inflated volume (another cool image below).

+ +
+Litteken’s paper on space inflatables +has this really nice image of GoodYear’s inital testing taken from James Hansen’s +Spacefligth Revolution. +One can see James Webb underneath the full size inflated station; the images on the +left show the packaged tube structure.
+ +

A long lull on habitable space inflatables followed +until NASA’s TransHab program (1997) which developed +high strength materials capable of withstanding collisions with +micrometeoroids and orbital debris (MMOD). TransHab inspired +a cylindrical inflatable ISS module ($13\,ft$ in length and $10\,ft$ +in diameter)- BEAM (Bigelow Expandable Activity Module)- in +operation since 2016. The period between the GoodYear and TransHab +inflatable space stations laid the foundations for today’s dominant +design of rigid space stations. In my eyes, this is a classic example +of where simpler elegant solutions were traded in for ones that are more +complex when we think about scale. For example, monolithic rigid stations were +followed by the modular ones, like the ISS, that have required in-space +assembly, mostly by astronauts, or propellant-intensive rendezvous +and docking manoeuvres. Building on this, most future scalable designs I have seen +purport the idea of robotic assembly. My recent learnings on inflatables suggest +that the same outcome might be realised by a simpler single inflatable system though +the development process will be less straightforward. The decision to focus +only on rigid stations/modules for several decades has made these inflatable +solutions a forgotten one; it appears that we threw out the baby with the bathwater.

+ +

When I suggest this idea to people today, it seems a counterintuitive and +potentially outrageous solution that exposes biases in thinking- even amongst +experts who are, after all, only human. Firstly, there’s a widespread belief +that inflatable structures are less safe due to the risk of MMOD collisions. +The incorrect analogy of balloons bursting is often mistakenly applied but +modern designs incorporate multiple layers of high-strength materials that are +remarkably resistant to punctures and could even self-heal. In fact, their +flexibility could make them more resilient than rigid structures. Secondly, +prevalence of robotics in automating human tasks has led to an assumption +that the same approach is optimal everywhere: we see robots building cars +and assume they should build space stations. But space presents unique +challenges where simplicity is paramount. Inflatable structures have minimal +mechanical complexity, reduce failure points, and simplify construction. +Moreover, our terrestrial experience doesn’t include living in inflatable +habitats, making it non-obvious as a space solution. We’re accustomed to rigid +structures so cannot envision lightweight, expandable living spaces as +a viable alternative. Yet, in the vacuum of space, these structures +provide vast habitable areas with superior radiation shielding and +thermal management. This insight has profound implications for future +space missions. By embracing inflatable technologies, we can +dramatically reduce launch costs, simplify construction processes, +and create larger, more versatile space habitats than ever before. +It’s a reminder that in space engineering, sometimes the most effective +solutions are those that challenge our Earth-biased intuitions.

+ +

Why is now a good time to return to inflatable space structures?

+

There are probably many more reasons than I describe below as to why +nowUnlike was done with inflatables, we should maintain/increase support to +mature in-space robotic assembly and maintenance technology development +as I imagine that at even larger scales, a reliance on robots is inevitable. +is a good time to revisit the GoodYear inflatable station ideaIn fact, +such stations are just one application of inflatable +technologies I see. They could totally transform space robotics by using pneumatic actuation +for orbital applications thus eliminating the need for radiation-hardened components like +joint motors- a pretty massive bottleneck in the development of space robotics. .

+ +

The first has to do with the emerging promise of Starship, which is seeing frequent impressive +tests. In contrast, when GoodYear was developing its concept, the +Saturn V +was still in early development and the GoodYear project might have been easy to kill; I imagine +the Moon missions would have also led to a reallocation of resources and +focus. Second, the impending retirement of the ISS means there is a window +(or even a need) for a successor with a larger volume for both crew sizes +and science output. Third, there will be eventually be more commercial users of a large +inflatable orbital volume than space agencies; in-space manufacturing +companies like Varda could use these stations to scale their drug manufacturing, +with the beneficiaries being patients on Earth. Other avenues here are for materials +science research and protein crystal growth (not my domain of expertise at all). +If in-space semiconductor manufacturing in microgravity becomes a thing, then +larger inflatable volumes would, again, answer the question of scaling. +Similarly, sci-fi outcomes such as at-scale 3-D printing artificial organs +would benefit those in need of hearts and lungs- demands that are not being met +by the donor organ market.

+ +

All of which is even before we consider making these +stations rotate to produce an artificial gravity enabling safer long-haul +journeys for astronaut crews +heading to Mars or other locations away from the EarthI am +currently reading James Hansen’s +Spacefligth Revolution that should +help me a deeper perspective on inflatable space stations. Fun fact: another of his books was adapted into +First Man with Ryan Gosling playing Neil Armstrong. .

+ + + +

Notes

+
+
    +
  1. +

    I’ve only read a summary of Brick Moon, a story of workers building a 200-foot sphere that are accidentally launched into space to become first inhabitants of space. The moon was to serve as a navigational aid for sailors. It also estimates a cost for the construction at ${$}250k$ using $12$ million bricks. 

    +
  2. +
+
+ + +
+ + + + + + + + +
+ + +
+ + +

Leave a comment

+
+ +
+ + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/large space stations/space exploration/vonBraunWheels/index.html b/large space stations/space exploration/vonBraunWheels/index.html new file mode 100644 index 0000000000000..f87c52444fed8 --- /dev/null +++ b/large space stations/space exploration/vonBraunWheels/index.html @@ -0,0 +1,720 @@ + + + + + +Some Space Stations in Fiction and Reality - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + +
+ + +
+ + + + + +
+ +
+

Some Space Stations in Fiction and Reality +

+ + +

+ + + + + + + + + + + + 4 minute read + + + (857 words) + +

+ + +
+ + +
+

An earlier post in my teaching resources for a final +year undergraduate project had a pretty helpful +AI-generatedthanks to Claude +table. +This is a quick post about Wernher von Braun’s 1950’s +conceptual rotating wheel station with some basic comparisons +to the ISS (1998-present) and 1968’s Space Station V from 2001: A Space +OdysseyWatch this as homework! .

+ +

Von Braun’s Rotating Wheel Space Station

+

Wernher von Braun’s video envisioned a rotating wheel +space station with 9 sections for:

+
    +
  1. Headquarters and Communications
  2. +
  3. Earth Weather Observation/Prediction
  4. +
  5. Military Reconnaissance using Optical and Radar Telescopes
  6. +
  7. Emergency Hospital Section
  8. +
  9. Astronomy
  10. +
  11. Calculation Machines and a lower/outer deck with maintenance facilities
  12. +
  13. A/C equipment
  14. +
  15. Living quarters
  16. +
  17. Botanical and Zoological Laboratory +The video shows two decks per section, which I assume is 6 $m$ in heigh (i.e. the habitable portion between the +outer rim and inner rim). Wikipedia says the concept had 3 decks but as I haven’t looked that up, I will stick to two +6 $m$ decks for now.
  18. +
+ +

The system is powered by an atomic reactor attached on one side of its central hub; its heat will drive a +turbo generator to power the station. Radio and radar antennas sit atop the reactor. The other side of the hub has +an airlock for astronauts to access/exit the space station via smaller spacecraft. Like a bicycle wheel, the system +had thin spokes are condensers for the turbo generator and air-conditioning plant. Three larger tubes are elevator +shafts that connect the hub to the main habitable sections of the wheel station. The station would:

+
    +
  • host 50 astronauts though Wikipedia states 80 people.
  • +
  • rotate at roughly 3 rpm to produce artificial gravity on the rim; and
  • +
  • be a torus of 250 $ft$ (76 $m$) diameter. The distance from the center of the tube to the center of the torus is $R = 70/2 = 35 \, m$ and the minor radius of the tube is $r = 6/2 = 3 \, m$. The volume of this torus is then the station’s total pressurized volume, which is given by \((V_{tot})_{vB} = 2 {\pi^2} R {r^2}\).
  • +
+ +

So, we can estimate that the von Braun space station has a:

+
    +
  • Total Pressurized Volume: = 6217.85 $m^3$
  • +
  • Habitable Volume = 3730.71 $m^3$
  • +
+ +

Here, I assumed that 60% of the pressurized volume is habitable. This is a considerably more optimistic percentage +compared to the 42% of ISS.

+ +

How did von Braun imagine its realisation?

+


Assembly of the Modular Rotating Wheel Space Station.
+
Condenser pipes being unwound for installation.

+ +

The short-version is that he assumed predominantly modular robotic assembly and a minor reliance on inflatables +for the airlock. First, the hub is inflated using compressed air from built-in tanks. Protection from meteors +is ensured by putting thin metal plates; this is unnecessary today as we have developed high-strength textiles +that are used on inflatable space stations. A second launch brings with it an airlock, which is again attached +by robots; this allows the pressurized hub to be used as a temporary quarters as the station assembly continues +with astronaut-robot teams. +Pre-fabricated and tested on the ground after which it is dismantled and assembled robotically in-orbit. +A number successive launches (he says) ensure the “parts of the station are assembled in the correct order”. +Nylon tethers prevent parts from drifting away. The reactor appears to be the next big piece that is installed +so I assume this is the third launch. This is followed by the elevator shafts and the rim sections being brought +together. We can assume a single launch for each module: $3$ elevator tubes and 9 rim modules (assuming one per +section). Assuming condenser pipes are installed from one launch (but the structure itself needs to be unwound robotically, which seems unreasonable/unreal at the moment as a robotic task.

+ +

Lastly, the installation of instruments/equipment (a simple catch-all term for imaging antennas and +the lab facilities compute for astronomical/Earth Observation data analysis, I think) and two small +rocket motors on the rim. These rocket motors “blast for a few seconds” to revolve the station at about +$3 \, RPM$.

+ +

Comparing to ISS and Space Station V (2001: A Space Odyssey)

+

Table 1: Comparing the ISS to fictional ideas.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 ISSvon BraunSpace Station V
crew size (# of astronauts)7-1350-802
diameter of the station (m)n/a75300
total volume $m^3$9166217.8526647.93
habitable %42.35%60% (assumed)?
Max. volume per crew $(\frac{m^3}{person})$64.6652.67 assuming 50 crew13223.46
Rotational speed for artificial gravity (RPM)-32.44
Gravity on-board ($m/s^2$)-1.6559.81
+ +

Some gaps in von Braun design

+
    +
  1. Assumes a launch every 24 hours- not close to it then and not really close to that kind of cadence today. What could we do today?
  2. +
  3. Doesn’t really say how many launches are needed to realize assembly in the video. This can probably be found elsewhere but my estimate from watching the video is 15-18 launches.
  4. +
  5. The process involves a number of assembly robots but we barely have one of these today. And whatever is there not autonomous.
  6. +
  7. Materials used in assembly are unknown.
  8. +
  9. Telescope sizes for reconnaisance and astronomy are unknown.
  10. +
  11. Power requirements are unknown.
  12. +
  13. What else?
  14. +
+ + +
+ + + + + + + + +
+ + +
+ + +

Leave a comment

+
+ +
+ + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lorem-ipsum/index.html b/lorem-ipsum/index.html new file mode 100644 index 0000000000000..b2055a3171c79 --- /dev/null +++ b/lorem-ipsum/index.html @@ -0,0 +1,646 @@ + + + + + +Lorem Ipsum - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + +
+ + +
+ + + + + +
+ +
+

Lorem Ipsum +

+ + + +
+ + +
+

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec mollis. Quisque convallis libero in sapien pharetra tincidunt. Aliquam elit ante, malesuada id, tempor eu, gravida id, odio. Maecenas suscipit, risus et eleifend imperdiet, nisi orci ullamcorper massa, et adipiscing orci velit quis magna. Praesent sit amet ligula id orci venenatis auctor. Phasellus porttitor, metus non tincidunt dapibus, orci pede pretium neque, sit amet adipiscing ipsum lectus et libero. Aenean bibendum. Curabitur mattis quam id urna. Vivamus dui. Donec nonummy lacinia lorem. Cras risus arcu, sodales ac, ultrices ac, mollis quis, justo. Sed a libero. Quisque risus erat, posuere at, tristique non, lacinia quis, eros.

+ +

Cras volutpat, lacus quis semper pharetra, nisi enim dignissim est, et sollicitudin quam ipsum vel mi. Sed commodo urna ac urna. Nullam eu tortor. Curabitur sodales scelerisque magna. Donec ultricies tristique pede. Nullam libero. Nam sollicitudin felis vel metus. Nullam posuere molestie metus. Nullam molestie, nunc id suscipit rhoncus, felis mi vulputate lacus, a ultrices tortor dolor eget augue. Aenean ultricies felis ut turpis. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse placerat tellus ac nulla. Proin adipiscing sem ac risus. Maecenas nisi. Cras semper.

+ +

Praesent interdum mollis neque. In egestas nulla eget pede. Integer eu purus sed diam dictum scelerisque. Morbi cursus velit et felis. Maecenas faucibus aliquet erat. In aliquet rhoncus tellus. Integer auctor nibh a nunc fringilla tempus. Cras turpis urna, dignissim vel, suscipit pulvinar, rutrum quis, sem. Ut lobortis convallis dui. Sed nonummy orci a justo. Morbi nec diam eget eros eleifend tincidunt.

+ +

Curabitur non elit. Pellentesque iaculis, nisl non aliquet adipiscing, purus urna aliquet orci, sed sodales pede neque at massa. Pellentesque laoreet, enim eget varius mollis, sapien erat suscipit metus, sit amet iaculis nulla sapien id felis. Aliquam erat volutpat. Nam congue nulla a ligula. Morbi tempor hendrerit erat. Curabitur augue. Vestibulum nulla est, commodo et, fringilla quis, bibendum eget, ipsum. Suspendisse pulvinar iaculis ante. Mauris dignissim ante quis nisi. Aliquam ante mi, aliquam et, pellentesque ac, dapibus et, enim. In vulputate justo vel magna. Phasellus imperdiet justo. Proin odio orci, dapibus id, porta a, pellentesque id, erat. Aliquam erat volutpat. Mauris nonummy varius libero. Sed dolor ipsum, tempor non, aliquet et, pulvinar quis, dui. Pellentesque mauris diam, lobortis id, varius varius, facilisis at, nulla.

+ +

Cras pede. Nullam id velit sit amet turpis tincidunt sagittis. Nunc malesuada. Nunc consequat scelerisque odio. Donec eu leo. Nunc pellentesque felis sed odio. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus lobortis metus in lectus. Cras mollis quam eget sapien. Pellentesque non lorem sit amet sem lacinia euismod.

+ +

Nulla eget diam eget leo imperdiet consequat. Morbi nunc magna, pellentesque eu, porta at, ultricies ut, neque. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In tincidunt. Praesent ut orci id eros congue ultrices. Mauris non neque. Donec nulla ante, molestie sit amet, fermentum nec, blandit sit amet, purus. Fusce eget diam eu odio iaculis mollis. Phasellus consectetuer pede quis nisi. Proin non sem ut elit pulvinar faucibus. In a turpis nec augue fringilla elementum.

+ +

Nullam felis. Donec in nulla. Suspendisse sodales, turpis in suscipit ullamcorper, enim nunc sagittis risus, eu auctor velit tortor ut turpis. Mauris id augue at neque aliquam eleifend. Sed eget augue. Nunc faucibus ligula sed massa. Etiam non nulla. Etiam accumsan ullamcorper nisl. In pharetra massa at nunc. Nunc elementum. Duis sodales enim nec libero. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Praesent dapibus eros sodales urna. Duis magna nisi, lobortis quis, tincidunt rutrum, posuere non, ipsum.

+ +

Aliquam convallis neque vitae diam. In diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis fermentum arcu in tortor. Sed nibh leo, rhoncus eu, fermentum et, scelerisque ac, massa. Cras id turpis. Etiam commodo sem luctus lorem. Morbi at mi. In rutrum. Aenean luctus pede euismod tortor. Phasellus dictum. Cras neque justo, venenatis sit amet, tristique et, vulputate in, dui. Etiam sed mi gravida sapien imperdiet dictum. Aliquam gravida orci a tortor. Donec tempor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus risus ante, pellentesque vitae, luctus eget, scelerisque sed, libero. Donec massa.

+ +

Donec libero mauris, volutpat at, convallis vel, laoreet euismod, augue. In accumsan malesuada risus. Mauris metus magna, condimentum in, nonummy non, ornare eu, velit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin posuere. Proin rhoncus rutrum lorem. Phasellus dignissim massa non libero volutpat tincidunt. In hac habitasse platea dictumst. Phasellus eget eros. Nulla in nulla. Vivamus quis mauris. Maecenas pharetra rhoncus tellus. Sed sit amet lacus.

+ +

Quisque interdum felis a tellus. Aliquam sed diam ac velit aliquam rutrum. Morbi commodo, risus a pulvinar adipiscing, tortor pede posuere risus, ac ornare tellus massa nec lectus. Vivamus mollis metus ac sapien. Nam sed est a libero ullamcorper dapibus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean a erat ac nibh accumsan volutpat. Phasellus pulvinar consequat turpis. Curabitur ante metus, tempus ut, consequat eu, sollicitudin sit amet, justo. Duis ut libero.

+ +

Հայերեն

+ +

Lorem Ipsum-ը տպագրության և տպագրական արդյունաբերության համար նախատեսված մոդելային տեքստ է: Սկսած 1500-ականներից` Lorem Ipsum-ը հանդիսացել է տպագրական արդյունաբերության ստանդարտ մոդելային տեքստ, ինչը մի անհայտ տպագրիչի կողմից տարբեր տառատեսակների օրինակների գիրք ստեղծելու ջանքերի արդյունք է: Այս տեքստը ոչ միայն կարողացել է գոյատևել հինգ դարաշրջան, այլև ներառվել է էլեկտրոնային տպագրության մեջ` մնալով էապես անփոփոխ: Այն հայտնի է դարձել 1960-ականներին Lorem Ipsum բովանդակող Letraset էջերի թողարկման արդյունքում, իսկ ավելի ուշ համակարգչային տպագրության այնպիսի ծրագրերի թողարկման հետևանքով, ինչպիսին է Aldus PageMaker-ը, որը ներառում է Lorem Ipsum-ի տարատեսակներ:

+ +

Български

+ +

Lorem Ipsum е елементарен примерен текст, използван в печатарската и типографската индустрия. Lorem Ipsum е индустриален стандарт от около 1500 година, когато неизвестен печатар взема няколко печатарски букви и ги разбърква, за да напечата с тях книга с примерни шрифтове. Този начин не само е оцелял повече от 5 века, но е навлязъл и в публикуването на електронни издания като е запазен почти без промяна. Популяризиран е през 60те години на 20ти век със издаването на Letraset листи, съдържащи Lorem Ipsum пасажи, популярен е и в наши дни във софтуер за печатни издания като Aldus PageMaker, който включва различни версии на Lorem Ipsum.

+ +

Català

+ +

Lorem Ipsum és un text de farciment usat per la indústria de la tipografia i la impremta. Lorem Ipsum ha estat el text estàndard de la indústria des de l’any 1500, quan un impressor desconegut va fer servir una galerada de text i la va mesclar per crear un llibre de mostres tipogràfiques. No només ha sobreviscut cinc segles, sinó que ha fet el salt cap a la creació de tipus de lletra electrònics, romanent essencialment sense canvis. Es va popularitzar l’any 1960 amb el llançament de fulls Letraset que contenien passatges de Lorem Ipsum, i més recentment amb programari d’autoedició com Aldus Pagemaker que inclou versions de Lorem Ipsum.

+ +

Hrvatski

+ +

Lorem Ipsum je jednostavno probni tekst koji se koristi u tiskarskoj i slovoslagarskoj industriji. Lorem Ipsum postoji kao industrijski standard još od 16-og stoljeća, kada je nepoznati tiskar uzeo tiskarsku galiju slova i posložio ih da bi napravio knjigu s uzorkom tiska. Taj je tekst ne samo preživio pet stoljeća, već se i vinuo u svijet elektronskog slovoslagarstva, ostajući u suštini nepromijenjen. Postao je popularan tijekom 1960-ih s pojavom Letraset listova s odlomcima Lorem Ipsum-a, a u skorije vrijeme sa software-om za stolno izdavaštvo kao što je Aldus PageMaker koji također sadrži varijante Lorem Ipsum-a.

+ +

Česky

+ +

Lorem Ipsum je demonstrativní výplňový text používaný v tiskařském a knihařském průmyslu. Lorem Ipsum je považováno za standard v této oblasti už od začátku 16. století, kdy dnes neznámý tiskař vzal kusy textu a na jejich základě vytvořil speciální vzorovou knihu. Jeho odkaz nevydržel pouze pět století, on přežil i nástup elektronické sazby v podstatě beze změny. Nejvíce popularizováno bylo Lorem Ipsum v šedesátých letech 20. století, kdy byly vydávány speciální vzorníky s jeho pasážemi a později pak díky počítačovým DTP programům jako Aldus PageMaker.

+ +

Româna

+ +

Lorem Ipsum este pur şi simplu o machetă pentru text a industriei tipografice. Lorem Ipsum a fost macheta standard a industriei încă din secolul al XVI-lea, când un tipograf anonim a luat o planşetă de litere şi le-a amestecat pentru a crea o carte demonstrativă pentru literele respective. Nu doar că a supravieţuit timp de cinci secole, dar şi a facut saltul în tipografia electronică practic neschimbată. A fost popularizată în anii ’60 odată cu ieşirea colilor Letraset care conţineau pasaje Lorem Ipsum, iar mai recent, prin programele de publicare pentru calculator, ca Aldus PageMaker care includeau versiuni de Lorem Ipsum.

+ +

Српски

+ +

Lorem Ipsum је једноставно модел текста који се користи у штампарској и словослагачкој индустрији. Lorem ipsum је био стандард за модел текста још од 1500. године, када је непознати штампар узео кутију са словима и сложио их како би направио узорак књиге. Не само што је овај модел опстао пет векова, него је чак почео да се користи и у електронским медијима, непроменивши се. Популаризован је шездесетих година двадесетог века заједно са листовима летерсета који су садржали Lorem Ipsum пасусе, а данас са софтверским пакетом за прелом као што је Aldus PageMaker који је садржао Lorem Ipsum верзије.

+ + +
+ +
+ + + + + + +
+ + + + +
+ + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/online_textbooks/UG_final_year_project/index.html b/online_textbooks/UG_final_year_project/index.html new file mode 100644 index 0000000000000..802060baa4242 --- /dev/null +++ b/online_textbooks/UG_final_year_project/index.html @@ -0,0 +1,950 @@ + + + + + +Final Year Project: Space Station Design - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + +
+ + +
+ + + + + +
+ +
+

Final Year Project: Space Station Design +

+ + +

+ + + + + + + + + + + + 6 minute read + + + (1283 words) + +

+ + +
+ + +
+


Logo for SpaceHQ. +We like to think of ourseleves as a ragtag group of outliers trying to figure out how we +can build larger structures in space. An example challenge is how we can go from +modular stations such as ISS, as seen on the left of our logo, to rotating wheel +space stations, on the right of our logo.

+ +

Who this page serves?

+

This is likely only useful for QMUL’s final year undergraduate students in who are taking +EMS690U final year project +under my supervision. It will make little to no sense for anyone else (inlcuding those from QMUL) as +there will be a lot covered in the in-person workshops. This is merely to augment to that; it is not +meant as a standalone piece.

+ +

Project Areas

+

The core thesis of the project is that large (or even ultra-large) space structures +could help us inspirational or useful things. Human habitation and space-based astronomy +are classic examples of the former whereas +former whereas in-space manufacturing or tackling +overcome existential risks/threats

+

In-Space Manufacturing (e.g., Organs, Electronics, and Pharmaceuticals Drugs)

+

Domain:: Commercial Businesses backed by either venture capital and/or +space agencies.

+ +

3-D printing artificial organs +would be a boon to those on the donor organs wait-list. ISS astronauts are also working on this technology +to if these +artificial organs can withstand the space environment.

+ +

Existing Players

+ + +

Large Space Stations (Modular or Monolithic)

+

Domain: National space agencies have built space stations so far. +Commercial entities are now trying to get a piece of the pie.

+ +

Table 1: A table of space stations launched and planned.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Space Stations
FundingName (Year)CapacityType/Comments
Govt. fundedSalyut 1 (1971)3Monolithic
Salyut 2 (1973)2Monolithic, military. Debris collision failure
Salyut 3 (1974-1975)2Monolithic, military
Salyut 4 (1974-1977)3Monolithic
Salyut 5 (1976-1977)2Monolithic, military
Salyut 6 (1977-1982)3Semi-modular
Salyut 7 (1982-1991)3Semi-modular
Skylab (1973-1979)3Monolithic
Almaz (1973-1976)2-3Monolithic, military
Mir (1986-2001)3Modular
International Space Station (2000-present)7Modular, international
Tiangong-1 (2011-2018)3Monolithic prototype
Tiangong-2 (2016-2019)2Monolithic prototype
Tiangong Space Station (2021-present)3Modular
Lunar Gateway (planned 2024)4Modular, lunar orbit
ROSS (planned 2027)4Modular, Russian national
Indian Space Station (planned 2035)3Likely modular, details TBA
China's next-gen station (planned, date TBA)6Likely modular, expanded Tiangong
PrivateAxiom Station (planned 2025)4Modular, initially ISS-attached
Vast-1 (planned 2025)4Single module prototype
Haven-1 (planned 2027)8Larger follow-up to Vast-1
Starlab (planned 2028)4Single-launch station
The Exploration Company's Nyx (planned 2028)4Modular, expandable design
Orbital Reef (status uncertain)10Modular, project paused in 2023
Voyager Station (conceptual)400Rotating wheel design, highly speculative
Orbital Reef (planned 2027)10Duplicate entry, remove
+
+ + + +

Large Space Telescopes (25 metres or more)

+

Domain: Space agencies and commercial

+ +

In-Space Servicing/Repair/Refuelling Systems

+

Domain: Commercial

+ +

Space-based Geoengineering

+

Domain: Commercial

+ +

Debris Removal

+

Domain: Commercial +Existing Players

+ +

-ClearSpace

+ +

Project Blurb (for Inspiration Only)

+

There is a rapidly growing number of man-made satellites in Earth’s orbit, fulfilling +a wide range of tasks. As satellite technology develops, there is a growing interest +in the design of satellites such as the International Space Station (ISS), that are +capable of sustaining human occupation for extended periods. The design requirements +of these occupied satellite systems are complex and depend upon the number of +occupants, the expected duration of occupation (i.e. the number of years an astronaut would +spend on the satellite) and the overarching purpose of the space station.

+ +

Each group will examine a different type of space station, which serves different purposes, including

+
    +
  • A habitat for long-term occupation
  • +
  • One with the optical telescopes or other imagers for disaster-monitoring, persistent Earth observations, +or space-based astronomy
  • +
  • In-space factory for production of semi-conductors
  • +
+ +

Students will focus on a single application from the above list and will consider +different levels of human occupants, range from less than 10 to several thousand people. +The specific objectives include determining precise system-level requirements, estimating +costs associated with different possible designs, and developing an Attitude and +Orbit Control System. Students will need to survey available launch vehicles (incl. +SpaceX’s Starship Super Heavy) to develop cost estimates and a mission plan/architecture +for the assembly. The latter will involve developing a high-level concept of operations +needed to assemble the desired space station using either robots or astronauts. Again, +a trade-off analysis is necessary as a precursor that estimates cost, speed, time, risks, etc. +for each assembly style. By the end of the project, students will be expected to conclude with +a recommendation on the station design, the chosen assembly architecture in the ConOps (aka +Concept of Operations) for their given occupancy limit, and orbit/attitude control system simulations.

+ +

Weekly Workshop Philosophy

+

In line with the formal assessments (listed below) but also to prepare you as future leaders in engineering, +our weekly 2-hour workshops are geared primarily towards getting you to developing broader skills than +university might typically prepare you for in the early years. Some examples of skills you will develop +over the coming weeks are listed below (but this is by no means an exhaustive list):

+
    +
  1. Public Speaking: elevator pitch style in the early weeks to eventually being able to give rapid updates +in the later weeks.
  2. +
  3. Writing: Developing writing skills.
  4. +
  5. Insight Generation: Reflecting on technologies1 and the underlying +philosophy for their development.
  6. +
+ +

Informal Assessments

+

Thus, we have the following two informal assessments:

+
    +
  1. Weekly in-class presentations by each member of every group the entire academic year.
  2. +
  3. 6-page technical report to be submitted in Week 6 of Semester B.
  4. +
+ +

Formal Assessments

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AssessmentDue Date
Assessment 1: Front End Individual Design Report (10%)[Due Date]
Assessment 2: Group Project Proposal/Feasibility Study (10%)[Due Date]
Assessment 3: Peer Evaluation with Self Reflection and Action Plan Sem A (0%, Formative)[Due Date]
Assessment 4: Peer Evaluation with Self Reflection and Action Plan Sem B (15%)[Due Date]
Assessment 5: Individual Detailed Design Report (40%)[Due Date]
Assessment 6: Final Group Presentation and Individual Back-up Evidence (15% Group, 10% Individual)[Due Date]
+ +

Useful Resources:

+

This list will grow but useful resources at the time of writing are listed below.

+

Tools for Writing and Research Managemenent:

+
    +
  1. \(\LaTeX\) template on Overleaf +that I have posted.
  2. +
  3. Zotero is an excellent and free tool for collecting all the papers you use for +your research. These will be used as citations in the Reference section of your report(s). For these +reasons, tools like Zotero are also called reference management tools. Worth downloading and reading/wathcing some +tutorials online.
  4. +
  5. Google Scholar is superb for finding scholarly papers in addition to +the resources provided on QM+. A browser plugin can also be installed via Zotero that connects to Google +Scholar to quickly import papers that you find interesting; link here for +Zotero Connector.
  6. +
  7. Inkscape is one example of a useful tool for making high quality images. +Keynote and PowerPoint are +also useful tools not only for making presentations but also for quickly making schematics or editing images.
  8. +
+ +

Some Technical References:

+
    +
  1. Space Systems Engineering Textbooks. The bible for this is typically SMAD by James Wertz +Some goods one are by Stark and Fortescue which is also made available via the +Internet Archive. Another is by +Fortescue et al. +which QMUL students can access on QM+.
  2. +
  3. If you want to look into how books such as above can inform the development of large space structures, you can +read my paper on how to robotically assemble 25 metre space telescopes +and another CalTech/NASA-JPL paper on 80 metre telescopes.
  4. +
  5. My blog post on von Braun’s rotating wheel space stations.
  6. +
+ +

Footnotes

+
+
    +
  1. +

    Here, I do not just mean space technolgoies but even those that you use in preparing your reports such as Github and \(\LaTeX\). 

    +
  2. +
+
+ + +
+ +
+ + + + + + +

Updated:

+ +
+ + + + + + + +
+ + +
+ + +

Leave a comment

+
+ +
+ + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/online_textbooks/computational_dynamics/index.html b/online_textbooks/computational_dynamics/index.html new file mode 100644 index 0000000000000..96831fc5ba921 --- /dev/null +++ b/online_textbooks/computational_dynamics/index.html @@ -0,0 +1,603 @@ + + + + + +Symbolic Computational Dynamics - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + +
+ + +
+ + + + + +
+ +
+

Symbolic Computational Dynamics +

+ + +

+ + + + + + + + + + + + 1 minute read + + + (283 words) + +

+ + +
+ + +
+ + + +

The above text is most useful for QMUL’s first year undergraduate students taking +EMS418U: Computational and Mathematical Modelling 2. +It could also be a useful resource for educators interested in classical mechanics wishing to teach computational +modeling to students using computer symbolic algebra. The content makes have use of sympy; specifically, its +physics.mechanics module which has some utilities for quickly diving into vector operations.

+ +

Our purpose

+

The idea is to encourage intuition-driven modelling and computational thinking in three-dimensions. Where most +introductory textbooks on classical mechanics emphasise hand-derived models to study motions of +simple systems (particles or a simple pendulum), our approach focuses on enabling deeper capabilities with +computing. We teach the fundamentals of modeling motion in three dimensions of particles and rigid bodies. We +then introduce planar kinematics of rigid multibody systems. Why? Multibody systems are everywhere; humans are +one example and robot arms are another. Waiting to introduce students to these concepts in an advanced +postgraduate course does little to stimulate imagination, in my humble opinion, or challenge the student. +Empowering students with the tools to build models seems like a better way to go about things from both +a perspective of upskilling but also for students to find and refine their personal interests in pursuing +their educational path into engineering. The use of computational tools early in their career +likely I believe this will hold even in the age of AI. also prepares them +for their future roles in research, industry, and entrepreneurship.

+ +

Later courses can build on the modeling capabilities towards analysing systems through numerical simulation +in a more discipline specific sense. For example, we analyse spacecraft motion in +Computational Spacecraft Dynamics.

+ + +
+ +
+ + + + + + +

Updated:

+ +
+ + + + + + + +
+ + +
+ + +

Leave a comment

+
+ +
+ + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/online_textbooks/spacecraft_dynamics/index.html b/online_textbooks/spacecraft_dynamics/index.html new file mode 100644 index 0000000000000..1e418c8b6e27f --- /dev/null +++ b/online_textbooks/spacecraft_dynamics/index.html @@ -0,0 +1,633 @@ + + + + + +Computational Spacecraft Dynamics - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + +
+ + +
+ + + + + +
+ +
+

Computational Spacecraft Dynamics +

+ + +

+ + + + + + + + + + + + less than 1 minute read + + + (188 words) + +

+ + +
+ + +
+ + + +

The above online textbook is most useful for QMUL’s second year Aerospace Engineering undergraduate students taking +EMS515U: Introduction to Spacecraft Dynamics. +It could also be a useful resource for other educators interested in teaching orbital mechanics, especially using computational +tools like numpy.

+ +

Personal Recommendation of Pre-requisites

+

This is my personal list of pre-requisites (not prescribed or stated as so by my employers):

+
    +
  1. An interest in space engineering.
  2. +
  3. Vector algebra and basic vector differentiation.
  4. +
  5. Deep familiarity of classical mechanics, especially as taught by me using symbolic modelling tools over here.
  6. +
+ +

Assessment Profile for QMUL course EMS515U

+

All assessments are conducted on the JupyterHub platform provided by QMUL.

+ +

Assessment is carried out through the following elements:

+
    +
  • A coursework on orbital mechanics. This is upto and includes the lecture notes on Special Orbits (40%)
  • +
  • Final online exam in January assessment period (60%).
  • +
+ +

For students requiring resits, assessment is carried out through a reassessment written exam +in the LSR period (100%).

+ +

Schedule

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
AssessmentRelease DateDue Date
Coursework 111/12/2024 at 17:0016/12/2024 at 23:59
Final ExamTBDTBD
Late Summer ResitTBDTBD
+ + + +
+ +
+ + + + + + +

Updated:

+ +
+ + + + + + + +
+ + +
+ + +

Leave a comment

+
+ +
+ + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 761910a1b0a42..0000000000000 --- a/package-lock.json +++ /dev/null @@ -1,1534 +0,0 @@ -{ - "name": "minimal-mistakes", - "version": "4.24.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "minimal-mistakes", - "version": "4.24.0", - "license": "MIT", - "devDependencies": { - "npm-run-all": "^4.1.5", - "onchange": "^7.1.0", - "uglify-js": "^3.13.6" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/@blakeembrey/deque": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@blakeembrey/deque/-/deque-1.0.5.tgz", - "integrity": "sha512-6xnwtvp9DY1EINIKdTfvfeAtCYw4OqBZJhtiqkT3ivjnEfa25VQ3TsKvaFfKm8MyGIEfE95qLe+bNEt3nB0Ylg==", - "dev": true - }, - "node_modules/@blakeembrey/template": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@blakeembrey/template/-/template-1.0.0.tgz", - "integrity": "sha512-J6WGZqCLdRMHUkyRG6fBSIFJ0rL60/nsQNh5rQvsYZ5u0PsKw6XQcJcA3DWvd9cN3j/IQx5yB1fexhCafwwUUw==", - "dev": true - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.1" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "dev": true, - "dependencies": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", - "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "dependencies": { - "has": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "bin": { - "npm-run-all": "bin/npm-run-all/index.js", - "run-p": "bin/run-p/index.js", - "run-s": "bin/run-s/index.js" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/onchange": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/onchange/-/onchange-7.1.0.tgz", - "integrity": "sha512-ZJcqsPiWUAUpvmnJri5TPBooqJOPmC0ttN65juhN15Q8xA+Nbg3BaxBHXQ45EistKKlKElb0edmbPWnKSBkvMg==", - "dev": true, - "dependencies": { - "@blakeembrey/deque": "^1.0.5", - "@blakeembrey/template": "^1.0.0", - "arg": "^4.1.3", - "chokidar": "^3.3.1", - "cross-spawn": "^7.0.1", - "ignore": "^5.1.4", - "tree-kill": "^1.2.2" - }, - "bin": { - "onchange": "dist/bin.js" - } - }, - "node_modules/onchange/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/onchange/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/onchange/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/onchange/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/onchange/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/picomatch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", - "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidtree": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz", - "integrity": "sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg==", - "dev": true, - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/resolve": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", - "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", - "dev": true, - "dependencies": { - "path-parse": "^1.0.6" - } - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shell-quote": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.1.tgz", - "integrity": "sha512-2kUqeAGnMAu6YrTPX4E3LfxacH9gKljzVjlkUeSqY0soGwK4KLl7TURXCem712tkhBCeeaFP9QK4dKn88s3Icg==", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "node_modules/string.prototype.padend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", - "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", - "dev": true, - "dependencies": { - "define-properties": "^1.1.2", - "es-abstract": "^1.4.3", - "function-bind": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/uglify-js": { - "version": "3.13.6", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.6.tgz", - "integrity": "sha512-rRprLwl8RVaS+Qvx3Wh5hPfPBn9++G6xkGlUupya0s5aDmNjI7z3lnRLB3u7sN4OmbB0pWgzhM9BEJyiWAwtAA==", - "dev": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - } - }, - "dependencies": { - "@blakeembrey/deque": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@blakeembrey/deque/-/deque-1.0.5.tgz", - "integrity": "sha512-6xnwtvp9DY1EINIKdTfvfeAtCYw4OqBZJhtiqkT3ivjnEfa25VQ3TsKvaFfKm8MyGIEfE95qLe+bNEt3nB0Ylg==", - "dev": true - }, - "@blakeembrey/template": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@blakeembrey/template/-/template-1.0.0.tgz", - "integrity": "sha512-J6WGZqCLdRMHUkyRG6fBSIFJ0rL60/nsQNh5rQvsYZ5u0PsKw6XQcJcA3DWvd9cN3j/IQx5yB1fexhCafwwUUw==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "graceful-fs": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", - "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "^1.0.1" - } - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.0" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "onchange": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/onchange/-/onchange-7.1.0.tgz", - "integrity": "sha512-ZJcqsPiWUAUpvmnJri5TPBooqJOPmC0ttN65juhN15Q8xA+Nbg3BaxBHXQ45EistKKlKElb0edmbPWnKSBkvMg==", - "dev": true, - "requires": { - "@blakeembrey/deque": "^1.0.5", - "@blakeembrey/template": "^1.0.0", - "arg": "^4.1.3", - "chokidar": "^3.3.1", - "cross-spawn": "^7.0.1", - "ignore": "^5.1.4", - "tree-kill": "^1.2.2" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "picomatch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", - "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", - "dev": true - }, - "pidtree": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz", - "integrity": "sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "resolve": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", - "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shell-quote": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.1.tgz", - "integrity": "sha512-2kUqeAGnMAu6YrTPX4E3LfxacH9gKljzVjlkUeSqY0soGwK4KLl7TURXCem712tkhBCeeaFP9QK4dKn88s3Icg==", - "dev": true - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "string.prototype.padend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", - "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.4.3", - "function-bind": "^1.0.2" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true - }, - "uglify-js": { - "version": "3.13.6", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.6.tgz", - "integrity": "sha512-rRprLwl8RVaS+Qvx3Wh5hPfPBn9++G6xkGlUupya0s5aDmNjI7z3lnRLB3u7sN4OmbB0pWgzhM9BEJyiWAwtAA==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 653e05b4ef431..0000000000000 --- a/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "minimal-mistakes", - "private": true, - "version": "4.24.0", - "description": "Minimal Mistakes 2 column Jekyll theme.", - "repository": { - "type": "git", - "url": "git://github.com/mmistakes/minimal-mistakes.git" - }, - "keywords": [ - "jekyll", - "theme", - "minimal" - ], - "author": "Michael Rose", - "license": "MIT", - "bugs": { - "url": "https://github.com/mmistakes/minimal-mistakes/issues" - }, - "homepage": "https://mmistakes.github.io/minimal-mistakes/", - "engines": { - "node": ">= 0.10.0" - }, - "devDependencies": { - "npm-run-all": "^4.1.5", - "onchange": "^7.1.0", - "uglify-js": "^3.13.6" - }, - "scripts": { - "uglify": "uglifyjs assets/js/vendor/jquery/jquery-3.6.0.js assets/js/plugins/jquery.fitvids.js assets/js/plugins/jquery.greedy-navigation.js assets/js/plugins/jquery.magnific-popup.js assets/js/plugins/jquery.ba-throttle-debounce.js assets/js/plugins/smooth-scroll.js assets/js/plugins/gumshoe.js assets/js/_main.js -c -m -o assets/js/main.min.js", - "add-banner": "node banner.js", - "watch:js": "onchange \"assets/js/**/*.js\" -e \"assets/js/main.min.js\" -- npm run build:js", - "build:js": "npm run uglify && npm run add-banner" - } -} diff --git a/page-a/index.html b/page-a/index.html new file mode 100644 index 0000000000000..00fcf3e5c55be --- /dev/null +++ b/page-a/index.html @@ -0,0 +1,606 @@ + + + + + +Page A - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + +
+ + +
+ + + + + +
+ +
+

Page A +

+ + + +
+ + +
+

Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

+ + +
+ +
+ + + + + + +

Updated:

+ +
+ + + + +
+ + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/page-archive-grid/index.html b/page-archive-grid/index.html new file mode 100644 index 0000000000000..9b7460361601e --- /dev/null +++ b/page-archive-grid/index.html @@ -0,0 +1,1228 @@ + + + + + +Page Archive - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + +
+ +

Page Archive

+ + +
+
+ + + + + +
+
+ +

+ + Page Not Found + +

+ + + +

Page not found. Your pixels are in another canvas. +

+
+
+ + + + + + +
+
+ +

+ + + +

+ + + + +
+
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+
+ +

+ + + +

+ + + + +
+
+ + + + + + +
+
+ +

+ + + +

+ + + + +
+
+ + + + + + +
+
+ +

+ + + +

+ + + + +
+
+ + + + + + +
+
+ +

+ + + +

+ + + + +
+
+ + + + + + +
+ +
+ + + + + + +
+
+ +

+ + Markup + +

+ + + + +
+
+ + + + + + +
+
+ +

+ + Page A + +

+ + + + +
+
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+
+ +

+ + Page B + +

+ + + + +
+
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+
+ +

+ + Search + +

+ + + + +
+
+ + + + + + +
+ +
+ + + + + + +
+
+ +

+ + Splash Page + +

+ + + +

Bacon ipsum dolor sit amet salami ham hock ham, hamburger corned beef short ribs kielbasa biltong t-bone drumstick tri-tip tail sirloin pork chop. +

+
+
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+
+ +

+ + + +

+ + + + +
+
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+
+ +

+ + + +

+ + + + +
+
+ + + + + + +
+
+ +

+ + + +

+ + + + +
+
+ + + + + + +
+
+ +

+ + + +

+ + + + +
+
+ + + + + + +
+
+ +

+ + + +

+ + + + +
+
+ + +
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/page-archive/index.html b/page-archive/index.html new file mode 100644 index 0000000000000..5cfd004a6498c --- /dev/null +++ b/page-archive/index.html @@ -0,0 +1,1223 @@ + + + + + +Page Archive - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + +
+ +

Page Archive

+ + + + + + +
+
+ +

+ + Page Not Found + +

+ + + +

Page not found. Your pixels are in another canvas. +

+
+
+ + + + + + +
+
+ +

+ + + +

+ + + + +
+
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+
+ +

+ + + +

+ + + + +
+
+ + + + + + +
+
+ +

+ + + +

+ + + + +
+
+ + + + + + +
+
+ +

+ + + +

+ + + + +
+
+ + + + + + +
+
+ +

+ + + +

+ + + + +
+
+ + + + + + +
+ +
+ + + + + + +
+
+ +

+ + Markup + +

+ + + + +
+
+ + + + + + +
+
+ +

+ + Page A + +

+ + + + +
+
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+
+ +

+ + Page B + +

+ + + + +
+
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+
+ +

+ + Search + +

+ + + + +
+
+ + + + + + +
+ +
+ + + + + + +
+
+ +

+ + Splash Page + +

+ + + +

Bacon ipsum dolor sit amet salami ham hock ham, hamburger corned beef short ribs kielbasa biltong t-bone drumstick tri-tip tail sirloin pork chop. +

+
+
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+
+ +

+ + + +

+ + + + +
+
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+
+ +

+ + + +

+ + + + +
+
+ + + + + + +
+
+ +

+ + + +

+ + + + +
+
+ + + + + + +
+
+ +

+ + + +

+ + + + +
+
+ + + + + + +
+
+ +

+ + + +

+ + + + +
+
+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/page-b/index.html b/page-b/index.html new file mode 100644 index 0000000000000..83bb8a7eb7575 --- /dev/null +++ b/page-b/index.html @@ -0,0 +1,606 @@ + + + + + +Page B - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + +
+ + +
+ + + + + +
+ +
+

Page B +

+ + + +
+ + +
+

(lorem ipsum)

+ + +
+ +
+ + + + + + +

Updated:

+ +
+ + + + +
+ + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/portfolio/index.html b/portfolio/index.html new file mode 100644 index 0000000000000..7712759b727ce --- /dev/null +++ b/portfolio/index.html @@ -0,0 +1,574 @@ + + + + + +Portfolio - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + + + +
+ +

Portfolio

+ +

Sample document listing for the collection _portfolio.

+ + + +
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post-archive-feature-rows/index.html b/post-archive-feature-rows/index.html new file mode 100644 index 0000000000000..cd2ba49907b39 --- /dev/null +++ b/post-archive-feature-rows/index.html @@ -0,0 +1,908 @@ + + + + + +Post Archive with Feature Rows - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + + + +
+ +

Post Archive with Feature Rows

+ + + + + + +
+
+ +

+ + Inflatable von Braun space stations: an idea worth revisiting? + + +

+ + +

+ + + + + + + + + + + + 8 minute read + + + (1772 words) + +

+ + +

Background +Kepler’s SomniumAt the time of my writing this post, his sci-fi story was +archived here +in 1608 and Edward Everett Hale’s +Brick Moon 1 +from 1865 ...

+
+
+ + + + + + +
+
+ +

+ + Some Space Stations in Fiction and Reality + + +

+ + +

+ + + + + + + + + + + + 4 minute read + + + (857 words) + +

+ + +

An earlier post in my teaching resources for a final +year undergraduate project had a pretty helpful +AI-generatedthanks to Claude +table. +This is a quick po...

+
+
+ + + + + + +
+ +
+ + + + + +
+ + + +
+ + + + +
+ + +
+
+ +
+ placeholder image 1 + +
+ + +
+ +

Placeholder 1

+ + + +
+

This is some sample content that goes here with Markdown formatting.

+ +
+ + + +
+
+
+ +
+
+ +
+ placeholder image 2 + +
+ + +
+ +

Placeholder 2

+ + + +
+

This is some sample content that goes here with Markdown formatting.

+ +
+ + + +

Read More

+ +
+
+
+ +
+
+ +
+ + +
+ + +
+ +

Placeholder 3

+ + + +
+

This is some sample content that goes here with Markdown formatting.

+ +
+ + + +
+
+
+ + +
+ + + + +
+ + +
+
+ +
+ placeholder image 2 + +
+ + +
+ +

Placeholder Image Left Aligned

+ + + +
+

This is some sample content that goes here with Markdown formatting. Left aligned with type="left"

+ +
+ + + +

Read More

+ +
+
+
+ + +
+ + + + +
+ + +
+
+ +
+ placeholder image 2 + +
+ + +
+ +

Placeholder Image Right Aligned

+ + + +
+

This is some sample content that goes here with Markdown formatting. Right aligned with type="right"

+ +
+ + + +

Read More

+ +
+
+
+ + +
+ + + + +
+ + +
+
+ +
+ placeholder image 2 + +
+ + +
+ +

Placeholder Image Center Aligned

+ + + +
+

This is some sample content that goes here with Markdown formatting. Centered with type="center"

+ +
+ + + +

Read More

+ +
+
+
+ + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/publication/2012-10-01-lagrange-equations-rocket-type.html b/publication/2012-10-01-lagrange-equations-rocket-type.html new file mode 100644 index 0000000000000..a49aa290952ce --- /dev/null +++ b/publication/2012-10-01-lagrange-equations-rocket-type.html @@ -0,0 +1,693 @@ + + + + + +Lagrange’s equations for rocket-type variable mass systems - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + +
+ + +
+ + + + + +
+ +
+

Lagrange’s equations for rocket-type variable mass systems +

+ + +

+ + + + + + + + + + + + less than 1 minute read + + + (42 words) + +

+ + +
+ + +
+

This paper examines the geometry of motion and nutation stability in free axisymmetric variable mass systems.

+ +

Download paper here

+ +

Recommended citation: Nanjangud, A. and Eke, F. O. (2018). “Lagrange’s equations for rocket-type variable mass systems.” International Review of Aerospace Engineering. 5(5), 255-260.

+ + +
+ +
+ + + + + + + + + +

+ Categories: + + + + + +

+ + + + +

Updated:

+ +
+ + + + + + + +
+ + +
+ + +

Leave a comment

+
+ +
+ + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/publication/2017-06-01-approximate-solution-angular-speeds.html b/publication/2017-06-01-approximate-solution-angular-speeds.html new file mode 100644 index 0000000000000..3ade4ca5a3105 --- /dev/null +++ b/publication/2017-06-01-approximate-solution-angular-speeds.html @@ -0,0 +1,694 @@ + + + + + +Approximate solution to the angular speeds of a nearly-symmetric mass-varying cylindrical body - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + +
+ + +
+ + + + + +
+ +
+

Approximate solution to the angular speeds of a nearly-symmetric mass-varying cylindrical body +

+ + +

+ + + + + + + + + + + + less than 1 minute read + + + (48 words) + +

+ + +
+ + +
+

This paper presents an approximate solution to the angular speeds of a nearly-symmetric mass-varying cylindrical body.

+ +

Download paper here

+ +

Recommended citation: Nanjangud, A. and Eke, F. O. (2017). “Approximate solution to the angular speeds of a nearly-symmetric mass-varying cylindrical body.” The Journal of the Astronautical Sciences. 64(2), 99-117.

+ + +
+ +
+ + + + + + + + + +

+ Categories: + + + + + +

+ + + + +

Updated:

+ +
+ + + + + + + +
+ + +
+ + +

Leave a comment

+
+ +
+ + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/publication/2018-03-01-robotics-ai-enabled-on-orbit-operations.html b/publication/2018-03-01-robotics-ai-enabled-on-orbit-operations.html new file mode 100644 index 0000000000000..54558ff01434b --- /dev/null +++ b/publication/2018-03-01-robotics-ai-enabled-on-orbit-operations.html @@ -0,0 +1,694 @@ + + + + + +Robotics and AI-enabled on-orbit operations with future generation of small satellites - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + +
+ + +
+ + + + + +
+ +
+

Robotics and AI-enabled on-orbit operations with future generation of small satellites +

+ + +

+ + + + + + + + + + + + less than 1 minute read + + + (47 words) + +

+ + +
+ + +
+

This paper discusses robotics and AI-enabled on-orbit operations with future generation of small satellites.

+ +

Download paper here

+ +

Recommended citation: Nanjangud, A., Blacker, P. C., Bandyopadhyay, S., and Gao, Y. (2018). “Robotics and AI-enabled on-orbit operations with future generation of small satellites.” Proceedings of the IEEE. 106(3), 429-439.

+ + +
+ +
+ + + + + + + + + +

+ Categories: + + + + + +

+ + + + +

Updated:

+ +
+ + + + + + + +
+ + +
+ + +

Leave a comment

+
+ +
+ + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/publication/2018-05-01-geometry-of-motion-nutation-stability.html b/publication/2018-05-01-geometry-of-motion-nutation-stability.html new file mode 100644 index 0000000000000..84010cce52351 --- /dev/null +++ b/publication/2018-05-01-geometry-of-motion-nutation-stability.html @@ -0,0 +1,694 @@ + + + + + +Geometry of motion and nutation stability of free axisymmetric variable mass systems - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + +
+ + +
+ + + + + +
+ +
+

Geometry of motion and nutation stability of free axisymmetric variable mass systems +

+ + +

+ + + + + + + + + + + + less than 1 minute read + + + (40 words) + +

+ + +
+ + +
+

This paper examines the geometry of motion and nutation stability in free axisymmetric variable mass systems.

+ +

Download paper here

+ +

Recommended citation: Nanjangud, A. (2018). “Geometry of motion and nutation stability of free axisymmetric variable mass systems.” Nonlinear Dynamics. 94(3), 2205-2218.

+ + +
+ +
+ + + + + + + + + +

+ Categories: + + + + + +

+ + + + +

Updated:

+ +
+ + + + + + + +
+ + +
+ + +

Leave a comment

+
+ +
+ + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/publication/2018-08-01-angular-momentum-free-variable-mass-systems.html b/publication/2018-08-01-angular-momentum-free-variable-mass-systems.html new file mode 100644 index 0000000000000..6ab9b5f98db20 --- /dev/null +++ b/publication/2018-08-01-angular-momentum-free-variable-mass-systems.html @@ -0,0 +1,694 @@ + + + + + +Angular momentum of free variable mass systems is partially conserved - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + +
+ + +
+ + + + + +
+ +
+

Angular momentum of free variable mass systems is partially conserved +

+ + +

+ + + + + + + + + + + + less than 1 minute read + + + (42 words) + +

+ + +
+ + +
+

This paper demonstrates that angular momentum of free variable mass systems is partially conserved.

+ +

Download paper here

+ +

Recommended citation: Nanjangud, A. and Eke, F. O. (2018). “Angular momentum of free variable mass systems is partially conserved.” Aerospace Science and Technology. 79, 1-4.

+ + +
+ +
+ + + + + + + + + +

+ Categories: + + + + + +

+ + + + +

Updated:

+ +
+ + + + + + + +
+ + +
+ + +

Leave a comment

+
+ +
+ + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/publication/2023-06-01-towards-robotic-on-orbit-assembly.html b/publication/2023-06-01-towards-robotic-on-orbit-assembly.html new file mode 100644 index 0000000000000..7d9f6ae80061b --- /dev/null +++ b/publication/2023-06-01-towards-robotic-on-orbit-assembly.html @@ -0,0 +1,693 @@ + + + + + +Towards Robotic On-Orbit Assembly of Large Space Telescopes: Mission Architectures, Concepts, and Analyses - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + +
+ + +
+ + + + + +
+ +
+

Towards Robotic On-Orbit Assembly of Large Space Telescopes: Mission Architectures, Concepts, and Analyses +

+ + +

+ + + + + + + + + + + + less than 1 minute read + + + (52 words) + +

+ + +
+ + +
+

This paper discusses mission architectures and concepts for robotic on-orbit assembly of large space telescopes.

+ +

Download paper here

+ +

Recommended citation: Nanjangud, A., Underwood, C., Rai, C. M., Eckersley, S., Sweeting, M., and Bianco. P. (2023). “Towards Robotic On-Orbit Assembly of Large Space Telescopes: Mission Architectures, Concepts, and Analyses.” Acta Astronautica. (In Press)

+ + +
+ +
+ + + + + + + + + +

+ Categories: + + + + + +

+ + + + +

Updated:

+ +
+ + + + + + + +
+ + +
+ + +

Leave a comment

+
+ +
+ + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/publications/index.html b/publications/index.html new file mode 100644 index 0000000000000..768b0d08ae781 --- /dev/null +++ b/publications/index.html @@ -0,0 +1,844 @@ + + + + + +Publications - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + + + +
+ +

Publications

+ + +

Journal Articles

+ + +

Conference Papers

+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/recipes-archive/index.html b/recipes-archive/index.html new file mode 100644 index 0000000000000..55dfedcef891f --- /dev/null +++ b/recipes-archive/index.html @@ -0,0 +1,451 @@ + + + + + +Recipes - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + +
+ +

Recipes

+ +

Sample document listing for the collection _recipes.

+ + + +
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000000000..e087884e68255 --- /dev/null +++ b/robots.txt @@ -0,0 +1 @@ +Sitemap: /sitemap.xml diff --git a/sample-page/index.html b/sample-page/index.html new file mode 100644 index 0000000000000..a083fe9c2e99e --- /dev/null +++ b/sample-page/index.html @@ -0,0 +1,618 @@ + + + + + +Sample Page - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + +
+ + +
+ + + + + +
+ +
+

Sample Page +

+ + + +
+ + +
+

This is an example page. It’s different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this:

+ +
+

Hi there! I’m a bike messenger by day, aspiring actor by night, and this is my website. I live in Los Angeles, have a great dog named Jack, and I like pi’a coladas. (And gettin’ caught in the rain.)

+
+ +

…or something like this:

+ +
+

The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.

+
+ +

You should probably delete this page and create new pages for your content. Have fun!

+ + +
+ +
+ + + + + + +

Updated:

+ +
+ + + + +
+ + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/search/index.html b/search/index.html new file mode 100644 index 0000000000000..e1c993025b4ab --- /dev/null +++ b/search/index.html @@ -0,0 +1,570 @@ + + + + + +Search - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + + + +
+ +

Search

+ + + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000000000..768b66b4c9b08 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,147 @@ + + + +/online_textbooks/UG_final_year_project/ +2024-10-07T12:24:12+01:00 + + +/online_textbooks/computational_dynamics/ +2024-10-07T12:24:12+01:00 + + +/online_textbooks/spacecraft_dynamics/ +2024-10-07T12:24:12+01:00 + + +/social%20networking/internet/Improve-Internet/ +2024-02-10T22:33:30+00:00 + + +/large%20space%20stations/space%20exploration/vonBraunWheels/ +2024-09-29T15:30:00+01:00 + + +/large%20space%20stations/space%20exploration/space-inflatables-1/ +2024-10-06T22:04:59+01:00 + + +/publication/2012-10-01-lagrange-equations-rocket-type +2012-10-01T00:00:00+01:00 + + +/publication/2017-06-01-approximate-solution-angular-speeds +2017-06-01T00:00:00+01:00 + + +/publication/2018-03-01-robotics-ai-enabled-on-orbit-operations +2018-03-01T00:00:00+00:00 + + +/publication/2018-05-01-geometry-of-motion-nutation-stability +2018-05-01T00:00:00+01:00 + + +/publication/2018-08-01-angular-momentum-free-variable-mass-systems +2018-08-01T00:00:00+01:00 + + +/publication/2023-06-01-towards-robotic-on-orbit-assembly +2024-08-24T00:00:00+01:00 + + +/ + + +/archive-layout-with-content/ + + +/categories-grid/ + + +/categories/ + + +/collection-archive-grid/ + + +/collection-archive/ + + +/categories/edge-case-grid/ + + +/categories/edge-case/ + + +/lorem-ipsum/ + + +/tags/markup-grid/ + + +/tags/markup/ + + +/page-a/ + + +/page-archive-grid/ + + +/page-archive/ + + +/page-b/ + + +/portfolio/ + + +/post-archive-feature-rows/ + + +/publications/ + + +/recipes-archive/ + + +/sample-page/ + + +/search/ + + +/sitemap/ + + +/splash-page/ + + +/tags-grid/ + + +/tags/ + + +/teaching/ + + +/terms/ +2016-06-06T00:00:00+01:00 + + +/year-archive-grid/ + + +/year-archive/ + + +/Angadh_CV.pdf +2024-09-28T22:08:37+01:00 + + +/files/communications/Angadh_Dream_Doc_for_ARIA_Jenny.pdf +2024-09-28T22:08:37+01:00 + + diff --git a/sitemap/index.html b/sitemap/index.html new file mode 100644 index 0000000000000..16ff8ac6f1145 --- /dev/null +++ b/sitemap/index.html @@ -0,0 +1,1476 @@ + + + + + +Sitemap - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + +
+ +

Sitemap

+ +

A list of all the posts and pages found on the site. For you robots out there is an XML version available for digesting as well.

+ +

Pages

+ +
+
+ +

+ + Page Not Found + +

+ + + +

Page not found. Your pixels are in another canvas. +

+
+
+ +
+
+ +

+ + + +

+ + + + +
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+ +

+ + + +

+ + + + +
+
+ +
+
+ +

+ + + +

+ + + + +
+
+ +
+
+ +

+ + + +

+ + + + +
+
+ +
+
+ +

+ + + +

+ + + + +
+
+ +
+ +
+ +
+
+ +

+ + Markup + +

+ + + + +
+
+ +
+
+ +

+ + Page A + +

+ + + + +
+
+ +
+ +
+ +
+ +
+ +
+
+ +

+ + Page B + +

+ + + + +
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+ +

+ + Search + +

+ + + + +
+
+ +
+ +
+ +
+
+ +

+ + Splash Page + +

+ + + +

Bacon ipsum dolor sit amet salami ham hock ham, hamburger corned beef short ribs kielbasa biltong t-bone drumstick tri-tip tail sirloin pork chop. +

+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+ +

+ + + +

+ + + + +
+
+ +
+ +
+ +
+ +
+ +
+
+ +

+ + + +

+ + + + +
+
+ +
+
+ +

+ + + +

+ + + + +
+
+ +
+
+ +

+ + + +

+ + + + +
+
+ +
+
+ +

+ + + +

+ + + + +
+
+ +

Posts

+ +
+
+ +

+ + Inflatable von Braun space stations: an idea worth revisiting? + + +

+ + +

+ + + + + + + + + + + + 8 minute read + + + (1772 words) + +

+ + +

Background +Kepler’s SomniumAt the time of my writing this post, his sci-fi story was +archived here +in 1608 and Edward Everett Hale’s +Brick Moon 1 +from 1865 ...

+
+
+ +
+
+ +

+ + Some Space Stations in Fiction and Reality + + +

+ + +

+ + + + + + + + + + + + 4 minute read + + + (857 words) + +

+ + +

An earlier post in my teaching resources for a final +year undergraduate project had a pretty helpful +AI-generatedthanks to Claude +table. +This is a quick po...

+
+
+ +
+ +
+ +

online_textbooks

+ +
+
+ +

+ + Final Year Project: Space Station Design + + +

+ + +

+ + + + + + + + + + + + 6 minute read + + + (1283 words) + +

+ + +

An introduction to multibody dynamics and the use of symbolic computation in modelling them. +

+
+
+ +
+
+ +

+ + Symbolic Computational Dynamics + + +

+ + +

+ + + + + + + + + + + + 1 minute read + + + (283 words) + +

+ + +

An introduction to multibody dynamics and the use of symbolic computation in modelling them. +

+
+
+ +
+
+ +

+ + Computational Spacecraft Dynamics + + +

+ + +

+ + + + + + + + + + + + less than 1 minute read + + + (188 words) + +

+ + +

An introduction to spacecraft dynamics modelling and simulation. +

+
+
+ +

publications

+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/social networking/internet/Improve-Internet/index.html b/social networking/internet/Improve-Internet/index.html new file mode 100644 index 0000000000000..7ac145edce815 --- /dev/null +++ b/social networking/internet/Improve-Internet/index.html @@ -0,0 +1,618 @@ + + + + + +Three major issues in today’s consumer Internet - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + +
+ + +
+ + + + + +
+ +
+

Three major issues in today’s consumer Internet +

+ + +

+ + + + + + + + + + + + 2 minute read + + + (548 words) + +

+ + +
+ + +
+

Much of today’s `free’ or consumer internet is built on three principles:

+ +
    +
  1. +

    Involuntary user data exploitation: Recent debates around generative AI have returned attention to this.

    +
  2. +
  3. +

    Novel manipulation of users by malicious actors through personal chat: WhatsApp is used as a +political weapon to broadcast misinformation during elections, especially in developing economies. +It was central to disinformation campaigns during elections in Brazil +El-Masri, Azza, Riedl, Martin J, and Woolley, Samuel. “Audio misinformation on WhatsApp: A case study from Lebanon.” Harvard Kennedy School (HKS) Misinformation Review, 2022. , +IndiaBanaji, Shakuntala, Bhat, Ramnath, Agarwal, Anushi, Passanha, Nihal, and Sadhana Pravin, Mukti. “WhatsApp vigilantes: An exploration of citizen reception and circulation of WhatsApp misinformation linked to mob violence in India.” Department of Media and Communications, London School of Economics and Political Science, London, UK, 2019. , and LebanonRecuero, Raquel, Soares, Felipe, and Vinhas, Otávio. “Discursive strategies for disinformation on WhatsApp and Twitter during the 2018 Brazilian presidential election.” First Monday, 2021. .

    +
  4. +
  5. +

    Social media companies incentivize poor online behaviors: X and Reddit allow users to publish posts rapidly; some are insightful and informative while others lack taste, to put it mildly, leading to polarizing toxic content.

    +
  6. +
+ +

Proposal for new mechanics of online publication could ameliorate today’s consumer internet

+ +

I have been thinking a lot about the fundamental mechanics of online social platforms and how they +can be designed to be less exploitative/manipulative and offer more respectful experiences on the internet. +Specifically, I have been thinking about how publication should work on the internet and how this should be +facilitated by personal reflection. This would work better, in my opinion, than online public shaming/arguments +on comments threads of existing platforms.

+ +

So, my idea is to re-imagine modern-day social media and personal messaging systems to introduce a new way +to publish that allows content publication/broadcasting only using content that exists within a chat in your inbox. +If this sounds unclear, think of having a button on WhatsApp or Gmail that converts a set of chat messages/emails/drafts between you and some friends into a blog or project proposal or white paper. In addition to human collaborations making the content appropriate for public sharing, an on-device AI agent (not on the cloud) enhancing/improving your pre-publication work, exposing biases in your thinking (think of this as an AI agent commenting in your GDocs). And then a button allows you to publish this content (or warns you against publishing). The on-device AI preserves privacy and recent developments show that LLMs can work on current personal computing hardware. A cloud-based agent could also be used for a second stage of monitoring; this would not violate user data privacy because the user’s intent with posting is, after all, to have the data examined.

+ +

I believe this introduction of some friction in the publication process that encourages reflection is one step towards driving individual users towards a society that’s fairer and more respectful.

+ +

Some personal progress on making such a platform

+ +

In this spirit, I spent some free time working on an inbox-to-publication platform using audio/speech as the communication modality. This choice was informed by my Indian heritage, where I feel spoken literacy is higher than written literacy which is being exploited as I mentioned earlier. Click here to see an (out-of-date) demo of an iOS called Howler from 2022.

+ + + +
+ + + + + + + + +
+ + +
+ + +

Leave a comment

+
+ +
+ + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/splash-page/index.html b/splash-page/index.html new file mode 100644 index 0000000000000..42951b8787528 --- /dev/null +++ b/splash-page/index.html @@ -0,0 +1,704 @@ + + + + + +Splash Page - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + + + + +
+ +
+

+ + Splash Page + + +

+ +

Bacon ipsum dolor sit amet salami ham hock ham, hamburger corned beef short ribs kielbasa biltong t-bone drumstick tri-tip tail sirloin pork chop. +

+ + + + + + +

+ + Learn More + + +

+ + + Photo credit: Unsplash + + +
+ + + +
+
+ + + + + +
+ +
+ + +
+
+ + +
+ + + +
+

Nullam suscipit et nam, tellus velit pellentesque at malesuada, enim eaque. Quis nulla, netus tempor in diam gravida tincidunt, proin faucibus voluptate felis id sollicitudin. Centered with type="center"

+ +
+ + + +
+
+
+ + +
+ +
+ + +
+
+ +
+ placeholder image 1 + + Image courtesy of Unsplash + + +
+ + +
+ +

Placeholder 1

+ + + +
+

This is some sample content that goes here with Markdown formatting.

+ +
+ + + +
+
+
+ +
+
+ +
+ placeholder image 2 + +
+ + +
+ +

Placeholder 2

+ + + +
+

This is some sample content that goes here with Markdown formatting.

+ +
+ + + +

Read More

+ +
+
+
+ +
+
+ +
+ + +
+ + +
+ +

Placeholder 3

+ + + +
+

This is some sample content that goes here with Markdown formatting.

+ +
+ + + +
+
+
+ + +
+ +
+ + +
+
+ +
+ placeholder image 2 + +
+ + +
+ +

Placeholder Image Left Aligned

+ + + +
+

This is some sample content that goes here with Markdown formatting. Left aligned with type="left"

+ +
+ + + +

Read More

+ +
+
+
+ + +
+ +
+ + +
+
+ +
+ placeholder image 2 + +
+ + +
+ +

Placeholder Image Right Aligned

+ + + +
+

This is some sample content that goes here with Markdown formatting. Right aligned with type="right"

+ +
+ + + +

Read More

+ +
+
+
+ + +
+ +
+ + +
+
+ +
+ placeholder image 2 + +
+ + +
+ +

Placeholder Image Center Aligned

+ + + +
+

This is some sample content that goes here with Markdown formatting. Centered with type="center"

+ +
+ + + +

Read More

+ +
+
+
+ + +
+ +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags-grid/index.html b/tags-grid/index.html new file mode 100644 index 0000000000000..8d29c1b7f0999 --- /dev/null +++ b/tags-grid/index.html @@ -0,0 +1,575 @@ + + + + + +Posts by Tag (grid view) - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + + + +
+ +

Posts by Tag (grid view)

+ + + + + + + +
    + +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/index.html b/tags/index.html new file mode 100644 index 0000000000000..5417e5a146a55 --- /dev/null +++ b/tags/index.html @@ -0,0 +1,575 @@ + + + + + +Posts by Tag - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + + + +
+ +

Posts by Tag

+ + + + + + + +
    + +
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/markup-grid/index.html b/tags/markup-grid/index.html new file mode 100644 index 0000000000000..f2413f54007c3 --- /dev/null +++ b/tags/markup-grid/index.html @@ -0,0 +1,570 @@ + + + + + +Markup (grid view) - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + + + +
+ +

Markup (grid view)

+ +

Sample post listing for the tag markup.

+ + + +
+ +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags/markup/index.html b/tags/markup/index.html new file mode 100644 index 0000000000000..0198b5f467ded --- /dev/null +++ b/tags/markup/index.html @@ -0,0 +1,570 @@ + + + + + +Markup - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + + + +
+ +

Markup

+ +

Sample post listing for the tag markup.

+ + + +
+ +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/teaching/index.html b/teaching/index.html new file mode 100644 index 0000000000000..1bd2874ef6276 --- /dev/null +++ b/teaching/index.html @@ -0,0 +1,593 @@ + + + + + +Online Teaching Resources - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + + + +
+ +

Online Teaching Resources

+ + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/terms/index.html b/terms/index.html new file mode 100644 index 0000000000000..589ff5e1e81f9 --- /dev/null +++ b/terms/index.html @@ -0,0 +1,654 @@ + + + + + +Terms and Privacy Policy - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + + + +
+ + +
+ + + + + +
+ +
+

Terms and Privacy Policy +

+ + + +
+ + +
+

Privacy Policy

+ +

The privacy of my visitors is extremely important. This Privacy Policy outlines the types of personal information that is received and collected and how it is used.

+ +

First and foremost, I will never share your email address or any other personal information to anyone without your direct consent.

+ +

Log Files

+ +

Like many other websites, this site uses log files to help learn about when, from where, and how often traffic flows to this site. The information in these log files include:

+ +
    +
  • Internet Protocol addresses (IP)
  • +
  • Types of browser
  • +
  • Internet Service Provider (ISP)
  • +
  • Date and time stamp
  • +
  • Referring and exit pages
  • +
  • Number of clicks
  • +
+ +

All of this information is not linked to anything that is personally identifiable.

+ +

Cookies and Web Beacons

+ +

When you visit this site “convenience” cookies are stored on your computer when you submit a comment to help you log in faster to Disqus the next time you leave a comment.

+ +

Third-party advertisers may also place and read cookies on your browser and/or use web beacons to collect information. This site has no access or control over these cookies. You should review the respective privacy policies on any and all third-party ad servers for more information regarding their practices and how to opt-out.

+ +

If you wish to disable cookies, you may do so through your web browser options. Instructions for doing so can be found on the specific web browsers’ websites.

+ +

Google Analytics

+ +

Google Analytics is a web analytics tool I use to help understand how visitors engage with this website. It reports website trends using cookies and web beacons without identifying individual visitors. You can read Google Analytics Privacy Policy.

+ +

Google Adsense

+ +

Google Adsense, a third party affiliate marketing network, uses cookies to help make sure I get a commission when you buy a product after clicking on a link or ad banner that takes you to the site of one of their merchants. You can read Google Adsense Privacy Policy.

+ +

Disclosure Policy

+ +

I make money on this website through affiliate programs. If you click an affiliate link or ad banner and buy the product, you help support this website because I’ll get a percentage of that sale.

+ +

Currently I’m an affiliate for Amazon and Google Adsense.

+ +

What this means for you:

+ +
    +
  • I became an affiliate to earn revenue towards the costs of running and maintaining this website. Where I have direct control over which ads are served on this website I offer only products that are directly related to the topic of this website and products that a reader/subscriber would have a genuine interest in or need of.
  • +
  • I do not and will not recommend a product just for the sake of making money.
  • +
  • I do not let the compensation I receive influence the content, topics, posts, or opinions expressed on this website.
  • +
  • I respect and value my readers too much to write anything other than my own genuine and objective opinions and advice.
  • +
+ +

Just like this website, my Disclosure Policy is a work in progress. As the revenue streams evolve, so will this page.

+ + +
+ +
+ + + + + + +

Updated:

+ +
+ + + + +
+ + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/year-archive-grid/index.html b/year-archive-grid/index.html new file mode 100644 index 0000000000000..e2d50a883ff6e --- /dev/null +++ b/year-archive-grid/index.html @@ -0,0 +1,718 @@ + + + + + +Posts by Year (grid view) - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + + + +
+ +

Posts by Year (grid view)

+ + + + + + + + + +
+

2024

+
+ + + + + +
+
+ +

+ + Inflatable von Braun space stations: an idea worth revisiting? + + +

+ + +

+ + + + + + + + + + + + 8 minute read + + + (1772 words) + +

+ + +

Background +Kepler’s SomniumAt the time of my writing this post, his sci-fi story was +archived here +in 1608 and Edward Everett Hale’s +Brick Moon 1 +from 1865 ...

+
+
+ + + + + + +
+
+ +

+ + Some Space Stations in Fiction and Reality + + +

+ + +

+ + + + + + + + + + + + 4 minute read + + + (857 words) + +

+ + +

An earlier post in my teaching resources for a final +year undergraduate project had a pretty helpful +AI-generatedthanks to Claude +table. +This is a quick po...

+
+
+ + + + + + +
+ +
+ + +
+ Back to top ↑ +
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/year-archive/index.html b/year-archive/index.html new file mode 100644 index 0000000000000..714045791b685 --- /dev/null +++ b/year-archive/index.html @@ -0,0 +1,718 @@ + + + + + +Posts by Year - Angadh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ + +
+ + + + +
+ + + + + +
+ +

Posts by Year

+ + + + + + + + + +
+

2024

+
+ + + + + +
+
+ +

+ + Inflatable von Braun space stations: an idea worth revisiting? + + +

+ + +

+ + + + + + + + + + + + 8 minute read + + + (1772 words) + +

+ + +

Background +Kepler’s SomniumAt the time of my writing this post, his sci-fi story was +archived here +in 1608 and Edward Everett Hale’s +Brick Moon 1 +from 1865 ...

+
+
+ + + + + + +
+
+ +

+ + Some Space Stations in Fiction and Reality + + +

+ + +

+ + + + + + + + + + + + 4 minute read + + + (857 words) + +

+ + +

An earlier post in my teaching resources for a final +year undergraduate project had a pretty helpful +AI-generatedthanks to Claude +table. +This is a quick po...

+
+
+ + + + + + +
+ +
+ + +
+ Back to top ↑ +
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +