├── .gitignore ├── .travis.yml ├── 404.md ├── CONTRIBUTING.md ├── Gemfile ├── README.md ├── _config.yml ├── _includes ├── footer.html └── header.html ├── _layouts ├── 404.html ├── default.html ├── hero.html └── techfar.html ├── assets ├── _sass │ ├── bourbon │ │ ├── _bourbon-deprecated-upcoming.scss │ │ ├── _bourbon.scss │ │ ├── addons │ │ │ ├── _button.scss │ │ │ ├── _clearfix.scss │ │ │ ├── _directional-values.scss │ │ │ ├── _ellipsis.scss │ │ │ ├── _font-family.scss │ │ │ ├── _hide-text.scss │ │ │ ├── _html5-input-types.scss │ │ │ ├── _position.scss │ │ │ ├── _prefixer.scss │ │ │ ├── _retina-image.scss │ │ │ ├── _size.scss │ │ │ ├── _timing-functions.scss │ │ │ ├── _triangle.scss │ │ │ └── _word-wrap.scss │ │ ├── css3 │ │ │ ├── _animation.scss │ │ │ ├── _appearance.scss │ │ │ ├── _backface-visibility.scss │ │ │ ├── _background-image.scss │ │ │ ├── _background.scss │ │ │ ├── _border-image.scss │ │ │ ├── _border-radius.scss │ │ │ ├── _box-sizing.scss │ │ │ ├── _calc.scss │ │ │ ├── _columns.scss │ │ │ ├── _filter.scss │ │ │ ├── _flex-box.scss │ │ │ ├── _font-face.scss │ │ │ ├── _font-feature-settings.scss │ │ │ ├── _hidpi-media-query.scss │ │ │ ├── _hyphens.scss │ │ │ ├── _image-rendering.scss │ │ │ ├── _keyframes.scss │ │ │ ├── _linear-gradient.scss │ │ │ ├── _perspective.scss │ │ │ ├── _placeholder.scss │ │ │ ├── _radial-gradient.scss │ │ │ ├── _transform.scss │ │ │ ├── _transition.scss │ │ │ └── _user-select.scss │ │ ├── functions │ │ │ ├── _assign.scss │ │ │ ├── _color-lightness.scss │ │ │ ├── _flex-grid.scss │ │ │ ├── _golden-ratio.scss │ │ │ ├── _grid-width.scss │ │ │ ├── _modular-scale.scss │ │ │ ├── _px-to-em.scss │ │ │ ├── _px-to-rem.scss │ │ │ ├── _strip-units.scss │ │ │ ├── _tint-shade.scss │ │ │ ├── _transition-property-name.scss │ │ │ └── _unpack.scss │ │ ├── helpers │ │ │ ├── _convert-units.scss │ │ │ ├── _gradient-positions-parser.scss │ │ │ ├── _is-num.scss │ │ │ ├── _linear-angle-parser.scss │ │ │ ├── _linear-gradient-parser.scss │ │ │ ├── _linear-positions-parser.scss │ │ │ ├── _linear-side-corner-parser.scss │ │ │ ├── _radial-arg-parser.scss │ │ │ ├── _radial-gradient-parser.scss │ │ │ ├── _radial-positions-parser.scss │ │ │ ├── _render-gradients.scss │ │ │ ├── _shape-size-stripper.scss │ │ │ └── _str-to-num.scss │ │ └── settings │ │ │ ├── _prefixer.scss │ │ │ └── _px-to-em.scss │ ├── neat │ │ ├── _neat-helpers.scss │ │ ├── _neat.scss │ │ ├── functions │ │ │ ├── _new-breakpoint.scss │ │ │ └── _private.scss │ │ ├── grid │ │ │ ├── _fill-parent.scss │ │ │ ├── _grid.scss │ │ │ ├── _media.scss │ │ │ ├── _omega.scss │ │ │ ├── _outer-container.scss │ │ │ ├── _pad.scss │ │ │ ├── _private.scss │ │ │ ├── _reset.scss │ │ │ ├── _row.scss │ │ │ ├── _shift.scss │ │ │ ├── _span-columns.scss │ │ │ ├── _to-deprecate.scss │ │ │ └── _visual-grid.scss │ │ └── settings │ │ │ ├── _grid.scss │ │ │ └── _visual-grid.scss │ └── styles.scss ├── css │ ├── bootstrap.css │ ├── site.css │ └── styles.scss ├── docs │ ├── Data_Asset_Collection_Memo-02_21_14.pdf │ ├── FITARA_Guidance_Statistical_Agencies_and_Units_OMB.pdf │ ├── JSON User Guide_v4_02 11 16.pdf │ ├── MEMO_RE_IMPLEMENTATION_OF_DOI_OPEN_DATA_POLICY.pdf │ ├── Memo_from_the_Acting_Deputy Secretary_et_alia_Open_Data_Policy.pdf │ └── sample_data_call_procedure.md ├── ghbtns │ └── github-btn.html ├── images │ ├── bullet-circle.svg │ ├── bullet-circle1.svg │ ├── bullet-sq.svg │ ├── bullet-sq1.svg │ ├── menu_icon.svg │ ├── techfar1.jpg │ ├── techfar1.png │ ├── techfar2.png │ ├── techfar3.png │ ├── techfar4.png │ ├── techfar5.png │ └── usds_logo.png ├── img │ ├── background.png │ ├── glyphicons-halflings-white.png │ ├── glyphicons-halflings.png │ └── seal.jpg └── js │ ├── bootstrap.min.js │ ├── federated-analytics.all.min.js │ ├── jquery-1.11.1.min.js │ ├── scrollspy.js │ ├── site.js │ └── vendor │ └── jquery-1.11.1.min.js ├── favicon.ico ├── index.md ├── schema.md ├── schemaexamples ├── CSA_json_schema_fy16_august.json ├── FITARAMilestonesExample.json ├── FITARA_milestones_schema.json ├── JSON User Guide_v5_04_25_16.pdf ├── boardsexample.json ├── bureauITLeadershipSchema.json ├── costSavingsAvoidanceSchema.json ├── governanceBoardSchema.json └── leadersexample.json └── script ├── bootstrap └── server /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | _site 3 | .ruby-version 4 | .sass-cache 5 | Gemfile.lock 6 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | script: "bundle exec jekyll build" 3 | -------------------------------------------------------------------------------- /404.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Page Not Found' 3 | layout: "404" 4 | --- 5 | 6 | # Page Not Found 7 | 8 | [Return to CIO.gov]("http://cio.gov") 9 | 10 | Last Update August 8, 10:48am 11 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Management and Oversight of Federal Information Technology Resources 2 | 3 | *By contributing to this project, you dedicate your work to the public domain and relinquish any copyright claims under the terms of the [CC0 Public Domain Dedication](https://creativecommons.org/publicdomain/zero/1.0/). See the [license file](LICENSE) for additional information.* 4 | 5 | ## How to Contribute 6 | 7 | This project constitutes a collaborative work ("open source"). Federal employees and members of the public are encouraged to improve the project by contributing. 8 | 9 | Contributions can be made, primarily in two ways: 10 | 11 | ### Easy 12 | 13 | 1. Browse the content at https://management.cio.gov. 14 | 2. Click the "Edit this Page" button in the top right corner of any page. 15 | 3. Make changes as you would normally. 16 | 4. Click "Submit". 17 | 5. Your change(s) should appear once approved. 18 | 19 | *Note: You may need to [create a free GitHub account](https://github.com/signup/free) if you do not already have one* 20 | 21 | ### Advanced 22 | 23 | 1. Configure git by using this [basic tutorial](https://help.github.com/articles/set-up-git) or by downloading the [GitHub for Mac](https://mac.github.com/) (or [GitHub for Windows](https://windows.github.com/)) and optionally [Mou](http://mouapp.com/). 24 | 2. [Fork](https://help.github.com/articles/fork-a-repo) the project 25 | 3. Make changes as you would normally using the tools installed in step #1. 26 | 4. Push the changes back to your fork 27 | 5. Submitting a pull request to this repository 28 | 6. Your change(s) should appear once approved. 29 | 30 | 31 | ## Privacy 32 | 33 | All comments, messages, pull requests, and other submissions received through official White House pages including this GitHub page may be subject to archiving requirements. See the [README](README.md#privacy) for more information. 34 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'github-pages' 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ##Management and Oversight of Federal Information Technology Public Comments 2 | 3 | The Federal Information Technology Acquisition Reform Act ([FITARA)](https://www.congress.gov/113/plaws/publ291/PLAW-113publ291.pdf#page=148]), passed by Congress in December 2014, is a historic law that represents the first major overhaul of Federal information Technology (IT) in almost 20 years. Since FITARA’s passing, OMB published guidance to agencies to ensure that this law is applied consistently governmentwide in a way that is both workable and effective. This guidance is now available as OMB Memorandum M-15-14: Management and Oversight of Federal Information Technology. 4 | 5 | OMB used this Github site to collect public feedback on proposed guidance in April 2015. To continue the discussion of FITARA implementation and to access resources from the CIO Council, please visit our updated repo [here](https://github.com/WhiteHouse/CIOmanagement), also available at https://management.cio.gov. 6 | 7 | ### License 8 | 9 | As a work of the United States Government, this project is in the public domain within the United States. 10 | 11 | Additionally, we waive copyright and related rights in the work worldwide through the [CC0 1.0 Universal public domain dedication](https://creativecommons.org/publicdomain/zero/1.0/). 12 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | # settings from whitehouse.github.io/fitara 2 | 3 | #document settings 4 | title: Management and Oversight of Federal Information Technology 5 | desc: Office of Management and Budget (OMB) M-15-14 6 | url: https://management.cio.gov 7 | 8 | #global settings, no need to change these 9 | root_url: 10 | org_name: whitehouse 11 | repo_name: fitara 12 | branch: gh-pages 13 | 14 | # default build settings for running locally, no need to edit 15 | pymgemnts: true 16 | exclude: ["script", "vendor", "Gemfile", "Gemfile.lock", "config.ru", "Procfile", "Rakefile", "readme.md"] 17 | markdown: kramdown 18 | relative_permalinks: false 19 | 20 | gems: 21 | - jekyll-redirect-from 22 | 23 | kramdown: 24 | toc_levels: "1,2" 25 | 26 | # original settings 27 | 28 | permalink: pretty 29 | # markdown: rdiscount 30 | highlighter: pygments 31 | 32 | collections: 33 | - guidanceSections 34 | 35 | sass: 36 | sass_dir: assets/_sass 37 | -------------------------------------------------------------------------------- /_includes/footer.html: -------------------------------------------------------------------------------- 1 |
2 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /_includes/header.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | OMB - Management and Oversight of Federal IT Public Feedback 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 24 | 29 | 30 | {% capture edit_url %}https://github.com/{{ site.org_name }}/{{ site.repo_name }}/edit/{{ site.branch }}/{{ page.path }}{% endcapture %} 31 | 32 | 33 | 34 | 43 | 44 | 45 | 46 | 85 | -------------------------------------------------------------------------------- /_layouts/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Page Not Found 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 | {{ content }} 18 |
19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /_layouts/default.html: -------------------------------------------------------------------------------- 1 | {% include header.html %} 2 | 3 |
4 |
5 |
6 |

{{ page.title }}

7 |
8 |
9 | 10 |
11 |
12 | {{ content }} 13 |
14 |
15 |
16 | 17 | {% include footer.html %} -------------------------------------------------------------------------------- /_layouts/hero.html: -------------------------------------------------------------------------------- 1 | {% include header.html %} 2 | 3 |
4 |
5 |
6 |
7 |

{{ site.title }}

8 |

{{ site.desc }}

9 |
10 |
11 |
12 |
13 | 14 |
15 |
16 |
17 | {{ content }} 18 |
19 |
20 |
21 | 22 | {% include footer.html %} 23 | -------------------------------------------------------------------------------- /_layouts/techfar.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The TechFAR 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 21 | 22 |
23 |
24 |
25 | {{ content }} 26 |
27 | READ THE HANDBOOK 28 |
29 |
30 | SUBMIT COMMENTS 31 |
32 | 33 | 34 | 35 |
36 |
37 |
38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/_bourbon-deprecated-upcoming.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // These mixins/functions are deprecated 3 | // They will be removed in the next MAJOR version release 4 | //************************************************************************// 5 | @mixin inline-block { 6 | display: inline-block; 7 | @warn "inline-block mixin is deprecated and will be removed in the next major version release"; 8 | } 9 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/_bourbon.scss: -------------------------------------------------------------------------------- 1 | // Settings 2 | @import "settings/prefixer"; 3 | @import "settings/px-to-em"; 4 | 5 | // Custom Helpers 6 | @import "helpers/convert-units"; 7 | @import "helpers/gradient-positions-parser"; 8 | @import "helpers/is-num"; 9 | @import "helpers/linear-angle-parser"; 10 | @import "helpers/linear-gradient-parser"; 11 | @import "helpers/linear-positions-parser"; 12 | @import "helpers/linear-side-corner-parser"; 13 | @import "helpers/radial-arg-parser"; 14 | @import "helpers/radial-positions-parser"; 15 | @import "helpers/radial-gradient-parser"; 16 | @import "helpers/render-gradients"; 17 | @import "helpers/shape-size-stripper"; 18 | @import "helpers/str-to-num"; 19 | 20 | // Custom Functions 21 | @import "functions/assign"; 22 | @import "functions/color-lightness"; 23 | @import "functions/flex-grid"; 24 | @import "functions/golden-ratio"; 25 | @import "functions/grid-width"; 26 | @import "functions/modular-scale"; 27 | @import "functions/px-to-em"; 28 | @import "functions/px-to-rem"; 29 | @import "functions/strip-units"; 30 | @import "functions/tint-shade"; 31 | @import "functions/transition-property-name"; 32 | @import "functions/unpack"; 33 | 34 | // CSS3 Mixins 35 | @import "css3/animation"; 36 | @import "css3/appearance"; 37 | @import "css3/backface-visibility"; 38 | @import "css3/background"; 39 | @import "css3/background-image"; 40 | @import "css3/border-image"; 41 | @import "css3/border-radius"; 42 | @import "css3/box-sizing"; 43 | @import "css3/calc"; 44 | @import "css3/columns"; 45 | @import "css3/filter"; 46 | @import "css3/flex-box"; 47 | @import "css3/font-face"; 48 | @import "css3/font-feature-settings"; 49 | @import "css3/hyphens"; 50 | @import "css3/hidpi-media-query"; 51 | @import "css3/image-rendering"; 52 | @import "css3/keyframes"; 53 | @import "css3/linear-gradient"; 54 | @import "css3/perspective"; 55 | @import "css3/radial-gradient"; 56 | @import "css3/transform"; 57 | @import "css3/transition"; 58 | @import "css3/user-select"; 59 | @import "css3/placeholder"; 60 | 61 | // Addons & other mixins 62 | @import "addons/button"; 63 | @import "addons/clearfix"; 64 | @import "addons/directional-values"; 65 | @import "addons/ellipsis"; 66 | @import "addons/font-family"; 67 | @import "addons/hide-text"; 68 | @import "addons/html5-input-types"; 69 | @import "addons/position"; 70 | @import "addons/prefixer"; 71 | @import "addons/retina-image"; 72 | @import "addons/size"; 73 | @import "addons/timing-functions"; 74 | @import "addons/triangle"; 75 | @import "addons/word-wrap"; 76 | 77 | // Soon to be deprecated Mixins 78 | @import "bourbon-deprecated-upcoming"; 79 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/addons/_button.scss: -------------------------------------------------------------------------------- 1 | @mixin button ($style: simple, $base-color: #4294f0, $text-size: inherit, $padding: 7px 18px) { 2 | 3 | @if type-of($style) == string and type-of($base-color) == color { 4 | @include buttonstyle($style, $base-color, $text-size, $padding); 5 | } 6 | 7 | @if type-of($style) == string and type-of($base-color) == number { 8 | $padding: $text-size; 9 | $text-size: $base-color; 10 | $base-color: #4294f0; 11 | 12 | @if $padding == inherit { 13 | $padding: 7px 18px; 14 | } 15 | 16 | @include buttonstyle($style, $base-color, $text-size, $padding); 17 | } 18 | 19 | @if type-of($style) == color and type-of($base-color) == color { 20 | $base-color: $style; 21 | $style: simple; 22 | @include buttonstyle($style, $base-color, $text-size, $padding); 23 | } 24 | 25 | @if type-of($style) == color and type-of($base-color) == number { 26 | $padding: $text-size; 27 | $text-size: $base-color; 28 | $base-color: $style; 29 | $style: simple; 30 | 31 | @if $padding == inherit { 32 | $padding: 7px 18px; 33 | } 34 | 35 | @include buttonstyle($style, $base-color, $text-size, $padding); 36 | } 37 | 38 | @if type-of($style) == number { 39 | $padding: $base-color; 40 | $text-size: $style; 41 | $base-color: #4294f0; 42 | $style: simple; 43 | 44 | @if $padding == #4294f0 { 45 | $padding: 7px 18px; 46 | } 47 | 48 | @include buttonstyle($style, $base-color, $text-size, $padding); 49 | } 50 | 51 | &:disabled { 52 | opacity: 0.5; 53 | cursor: not-allowed; 54 | } 55 | } 56 | 57 | 58 | // Selector Style Button 59 | //************************************************************************// 60 | @mixin buttonstyle($type, $b-color, $t-size, $pad) { 61 | // Grayscale button 62 | @if $type == simple and $b-color == grayscale($b-color) { 63 | @include simple($b-color, true, $t-size, $pad); 64 | } 65 | 66 | @if $type == shiny and $b-color == grayscale($b-color) { 67 | @include shiny($b-color, true, $t-size, $pad); 68 | } 69 | 70 | @if $type == pill and $b-color == grayscale($b-color) { 71 | @include pill($b-color, true, $t-size, $pad); 72 | } 73 | 74 | @if $type == flat and $b-color == grayscale($b-color) { 75 | @include flat($b-color, true, $t-size, $pad); 76 | } 77 | 78 | // Colored button 79 | @if $type == simple { 80 | @include simple($b-color, false, $t-size, $pad); 81 | } 82 | 83 | @else if $type == shiny { 84 | @include shiny($b-color, false, $t-size, $pad); 85 | } 86 | 87 | @else if $type == pill { 88 | @include pill($b-color, false, $t-size, $pad); 89 | } 90 | 91 | @else if $type == flat { 92 | @include flat($b-color, false, $t-size, $pad); 93 | } 94 | } 95 | 96 | 97 | // Simple Button 98 | //************************************************************************// 99 | @mixin simple($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) { 100 | $color: hsl(0, 0, 100%); 101 | $border: adjust-color($base-color, $saturation: 9%, $lightness: -14%); 102 | $inset-shadow: adjust-color($base-color, $saturation: -8%, $lightness: 15%); 103 | $stop-gradient: adjust-color($base-color, $saturation: 9%, $lightness: -11%); 104 | $text-shadow: adjust-color($base-color, $saturation: 15%, $lightness: -18%); 105 | 106 | @if is-light($base-color) { 107 | $color: hsl(0, 0, 20%); 108 | $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%); 109 | } 110 | 111 | @if $grayscale == true { 112 | $border: grayscale($border); 113 | $inset-shadow: grayscale($inset-shadow); 114 | $stop-gradient: grayscale($stop-gradient); 115 | $text-shadow: grayscale($text-shadow); 116 | } 117 | 118 | border: 1px solid $border; 119 | border-radius: 3px; 120 | box-shadow: inset 0 1px 0 0 $inset-shadow; 121 | color: $color; 122 | display: inline-block; 123 | font-size: $textsize; 124 | font-weight: bold; 125 | @include linear-gradient ($base-color, $stop-gradient); 126 | padding: $padding; 127 | text-decoration: none; 128 | text-shadow: 0 1px 0 $text-shadow; 129 | background-clip: padding-box; 130 | 131 | &:hover:not(:disabled) { 132 | $base-color-hover: adjust-color($base-color, $saturation: -4%, $lightness: -5%); 133 | $inset-shadow-hover: adjust-color($base-color, $saturation: -7%, $lightness: 5%); 134 | $stop-gradient-hover: adjust-color($base-color, $saturation: 8%, $lightness: -14%); 135 | 136 | @if $grayscale == true { 137 | $base-color-hover: grayscale($base-color-hover); 138 | $inset-shadow-hover: grayscale($inset-shadow-hover); 139 | $stop-gradient-hover: grayscale($stop-gradient-hover); 140 | } 141 | 142 | box-shadow: inset 0 1px 0 0 $inset-shadow-hover; 143 | cursor: pointer; 144 | @include linear-gradient ($base-color-hover, $stop-gradient-hover); 145 | } 146 | 147 | &:active:not(:disabled), 148 | &:focus:not(:disabled) { 149 | $border-active: adjust-color($base-color, $saturation: 9%, $lightness: -14%); 150 | $inset-shadow-active: adjust-color($base-color, $saturation: 7%, $lightness: -17%); 151 | 152 | @if $grayscale == true { 153 | $border-active: grayscale($border-active); 154 | $inset-shadow-active: grayscale($inset-shadow-active); 155 | } 156 | 157 | border: 1px solid $border-active; 158 | box-shadow: inset 0 0 8px 4px $inset-shadow-active, inset 0 0 8px 4px $inset-shadow-active; 159 | } 160 | } 161 | 162 | 163 | // Shiny Button 164 | //************************************************************************// 165 | @mixin shiny($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) { 166 | $color: hsl(0, 0, 100%); 167 | $border: adjust-color($base-color, $red: -117, $green: -111, $blue: -81); 168 | $border-bottom: adjust-color($base-color, $red: -126, $green: -127, $blue: -122); 169 | $fourth-stop: adjust-color($base-color, $red: -79, $green: -70, $blue: -46); 170 | $inset-shadow: adjust-color($base-color, $red: 37, $green: 29, $blue: 12); 171 | $second-stop: adjust-color($base-color, $red: -56, $green: -50, $blue: -33); 172 | $text-shadow: adjust-color($base-color, $red: -140, $green: -141, $blue: -114); 173 | $third-stop: adjust-color($base-color, $red: -86, $green: -75, $blue: -48); 174 | 175 | @if is-light($base-color) { 176 | $color: hsl(0, 0, 20%); 177 | $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%); 178 | } 179 | 180 | @if $grayscale == true { 181 | $border: grayscale($border); 182 | $border-bottom: grayscale($border-bottom); 183 | $fourth-stop: grayscale($fourth-stop); 184 | $inset-shadow: grayscale($inset-shadow); 185 | $second-stop: grayscale($second-stop); 186 | $text-shadow: grayscale($text-shadow); 187 | $third-stop: grayscale($third-stop); 188 | } 189 | 190 | border: 1px solid $border; 191 | border-bottom: 1px solid $border-bottom; 192 | border-radius: 5px; 193 | box-shadow: inset 0 1px 0 0 $inset-shadow; 194 | color: $color; 195 | display: inline-block; 196 | font-size: $textsize; 197 | font-weight: bold; 198 | @include linear-gradient(top, $base-color 0%, $second-stop 50%, $third-stop 50%, $fourth-stop 100%); 199 | padding: $padding; 200 | text-align: center; 201 | text-decoration: none; 202 | text-shadow: 0 -1px 1px $text-shadow; 203 | 204 | &:hover:not(:disabled) { 205 | $first-stop-hover: adjust-color($base-color, $red: -13, $green: -15, $blue: -18); 206 | $second-stop-hover: adjust-color($base-color, $red: -66, $green: -62, $blue: -51); 207 | $third-stop-hover: adjust-color($base-color, $red: -93, $green: -85, $blue: -66); 208 | $fourth-stop-hover: adjust-color($base-color, $red: -86, $green: -80, $blue: -63); 209 | 210 | @if $grayscale == true { 211 | $first-stop-hover: grayscale($first-stop-hover); 212 | $second-stop-hover: grayscale($second-stop-hover); 213 | $third-stop-hover: grayscale($third-stop-hover); 214 | $fourth-stop-hover: grayscale($fourth-stop-hover); 215 | } 216 | 217 | cursor: pointer; 218 | @include linear-gradient(top, $first-stop-hover 0%, 219 | $second-stop-hover 50%, 220 | $third-stop-hover 50%, 221 | $fourth-stop-hover 100%); 222 | } 223 | 224 | &:active:not(:disabled), 225 | &:focus:not(:disabled) { 226 | $inset-shadow-active: adjust-color($base-color, $red: -111, $green: -116, $blue: -122); 227 | 228 | @if $grayscale == true { 229 | $inset-shadow-active: grayscale($inset-shadow-active); 230 | } 231 | 232 | box-shadow: inset 0 0 20px 0 $inset-shadow-active; 233 | } 234 | } 235 | 236 | 237 | // Pill Button 238 | //************************************************************************// 239 | @mixin pill($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) { 240 | $color: hsl(0, 0, 100%); 241 | $border-bottom: adjust-color($base-color, $hue: 8, $saturation: -11%, $lightness: -26%); 242 | $border-sides: adjust-color($base-color, $hue: 4, $saturation: -21%, $lightness: -21%); 243 | $border-top: adjust-color($base-color, $hue: -1, $saturation: -30%, $lightness: -15%); 244 | $inset-shadow: adjust-color($base-color, $hue: -1, $saturation: -1%, $lightness: 7%); 245 | $stop-gradient: adjust-color($base-color, $hue: 8, $saturation: 14%, $lightness: -10%); 246 | $text-shadow: adjust-color($base-color, $hue: 5, $saturation: -19%, $lightness: -15%); 247 | 248 | @if is-light($base-color) { 249 | $color: hsl(0, 0, 20%); 250 | $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%); 251 | } 252 | 253 | @if $grayscale == true { 254 | $border-bottom: grayscale($border-bottom); 255 | $border-sides: grayscale($border-sides); 256 | $border-top: grayscale($border-top); 257 | $inset-shadow: grayscale($inset-shadow); 258 | $stop-gradient: grayscale($stop-gradient); 259 | $text-shadow: grayscale($text-shadow); 260 | } 261 | 262 | border: 1px solid $border-top; 263 | border-color: $border-top $border-sides $border-bottom; 264 | border-radius: 16px; 265 | box-shadow: inset 0 1px 0 0 $inset-shadow; 266 | color: $color; 267 | display: inline-block; 268 | font-size: $textsize; 269 | font-weight: normal; 270 | line-height: 1; 271 | @include linear-gradient ($base-color, $stop-gradient); 272 | padding: $padding; 273 | text-align: center; 274 | text-decoration: none; 275 | text-shadow: 0 -1px 1px $text-shadow; 276 | background-clip: padding-box; 277 | 278 | &:hover:not(:disabled) { 279 | $base-color-hover: adjust-color($base-color, $lightness: -4.5%); 280 | $border-bottom: adjust-color($base-color, $hue: 8, $saturation: 13.5%, $lightness: -32%); 281 | $border-sides: adjust-color($base-color, $hue: 4, $saturation: -2%, $lightness: -27%); 282 | $border-top: adjust-color($base-color, $hue: -1, $saturation: -17%, $lightness: -21%); 283 | $inset-shadow-hover: adjust-color($base-color, $saturation: -1%, $lightness: 3%); 284 | $stop-gradient-hover: adjust-color($base-color, $hue: 8, $saturation: -4%, $lightness: -15.5%); 285 | $text-shadow-hover: adjust-color($base-color, $hue: 5, $saturation: -5%, $lightness: -22%); 286 | 287 | @if $grayscale == true { 288 | $base-color-hover: grayscale($base-color-hover); 289 | $border-bottom: grayscale($border-bottom); 290 | $border-sides: grayscale($border-sides); 291 | $border-top: grayscale($border-top); 292 | $inset-shadow-hover: grayscale($inset-shadow-hover); 293 | $stop-gradient-hover: grayscale($stop-gradient-hover); 294 | $text-shadow-hover: grayscale($text-shadow-hover); 295 | } 296 | 297 | border: 1px solid $border-top; 298 | border-color: $border-top $border-sides $border-bottom; 299 | box-shadow: inset 0 1px 0 0 $inset-shadow-hover; 300 | cursor: pointer; 301 | @include linear-gradient ($base-color-hover, $stop-gradient-hover); 302 | text-shadow: 0 -1px 1px $text-shadow-hover; 303 | background-clip: padding-box; 304 | } 305 | 306 | &:active:not(:disabled), 307 | &:focus:not(:disabled) { 308 | $active-color: adjust-color($base-color, $hue: 4, $saturation: -12%, $lightness: -10%); 309 | $border-active: adjust-color($base-color, $hue: 6, $saturation: -2.5%, $lightness: -30%); 310 | $border-bottom-active: adjust-color($base-color, $hue: 11, $saturation: 6%, $lightness: -31%); 311 | $inset-shadow-active: adjust-color($base-color, $hue: 9, $saturation: 2%, $lightness: -21.5%); 312 | $text-shadow-active: adjust-color($base-color, $hue: 5, $saturation: -12%, $lightness: -21.5%); 313 | 314 | @if $grayscale == true { 315 | $active-color: grayscale($active-color); 316 | $border-active: grayscale($border-active); 317 | $border-bottom-active: grayscale($border-bottom-active); 318 | $inset-shadow-active: grayscale($inset-shadow-active); 319 | $text-shadow-active: grayscale($text-shadow-active); 320 | } 321 | 322 | background: $active-color; 323 | border: 1px solid $border-active; 324 | border-bottom: 1px solid $border-bottom-active; 325 | box-shadow: inset 0 0 6px 3px $inset-shadow-active; 326 | text-shadow: 0 -1px 1px $text-shadow-active; 327 | } 328 | } 329 | 330 | 331 | 332 | // Flat Button 333 | //************************************************************************// 334 | @mixin flat($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) { 335 | $color: hsl(0, 0, 100%); 336 | 337 | @if is-light($base-color) { 338 | $color: hsl(0, 0, 20%); 339 | } 340 | 341 | background-color: $base-color; 342 | border-radius: 3px; 343 | border: none; 344 | color: $color; 345 | display: inline-block; 346 | font-size: inherit; 347 | font-weight: bold; 348 | padding: 7px 18px; 349 | text-decoration: none; 350 | background-clip: padding-box; 351 | 352 | &:hover:not(:disabled){ 353 | $base-color-hover: adjust-color($base-color, $saturation: 4%, $lightness: 5%); 354 | 355 | @if $grayscale == true { 356 | $base-color-hover: grayscale($base-color-hover); 357 | } 358 | 359 | background-color: $base-color-hover; 360 | cursor: pointer; 361 | } 362 | 363 | &:active:not(:disabled), 364 | &:focus:not(:disabled) { 365 | $base-color-active: adjust-color($base-color, $saturation: -4%, $lightness: -5%); 366 | 367 | @if $grayscale == true { 368 | $base-color-active: grayscale($base-color-active); 369 | } 370 | 371 | background-color: $base-color-active; 372 | cursor: pointer; 373 | } 374 | } 375 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/addons/_clearfix.scss: -------------------------------------------------------------------------------- 1 | // Modern micro clearfix provides an easy way to contain floats without adding additional markup. 2 | // 3 | // Example usage: 4 | // 5 | // // Contain all floats within .wrapper 6 | // .wrapper { 7 | // @include clearfix; 8 | // .content, 9 | // .sidebar { 10 | // float : left; 11 | // } 12 | // } 13 | 14 | @mixin clearfix { 15 | &:after { 16 | content:""; 17 | display:table; 18 | clear:both; 19 | } 20 | } 21 | 22 | // Acknowledgements 23 | // Beat *that* clearfix: [Thierry Koblentz](http://www.css-101.org/articles/clearfix/latest-new-clearfix-so-far.php) 24 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/addons/_directional-values.scss: -------------------------------------------------------------------------------- 1 | // directional-property mixins are shorthands 2 | // for writing properties like the following 3 | // 4 | // @include margin(null 0 10px); 5 | // ------ 6 | // margin-right: 0; 7 | // margin-bottom: 10px; 8 | // margin-left: 0; 9 | // 10 | // - or - 11 | // 12 | // @include border-style(dotted null); 13 | // ------ 14 | // border-top-style: dotted; 15 | // border-bottom-style: dotted; 16 | // 17 | // ------ 18 | // 19 | // Note: You can also use false instead of null 20 | 21 | @function collapse-directionals($vals) { 22 | $output: null; 23 | 24 | $A: nth( $vals, 1 ); 25 | $B: if( length($vals) < 2, $A, nth($vals, 2)); 26 | $C: if( length($vals) < 3, $A, nth($vals, 3)); 27 | $D: if( length($vals) < 2, $A, nth($vals, if( length($vals) < 4, 2, 4) )); 28 | 29 | @if $A == 0 { $A: 0 } 30 | @if $B == 0 { $B: 0 } 31 | @if $C == 0 { $C: 0 } 32 | @if $D == 0 { $D: 0 } 33 | 34 | @if $A == $B and $A == $C and $A == $D { $output: $A } 35 | @else if $A == $C and $B == $D { $output: $A $B } 36 | @else if $B == $D { $output: $A $B $C } 37 | @else { $output: $A $B $C $D } 38 | 39 | @return $output; 40 | } 41 | 42 | @function contains-falsy($list) { 43 | @each $item in $list { 44 | @if not $item { 45 | @return true; 46 | } 47 | } 48 | 49 | @return false; 50 | } 51 | 52 | @mixin directional-property($pre, $suf, $vals) { 53 | // Property Names 54 | $top: $pre + "-top" + if($suf, "-#{$suf}", ""); 55 | $bottom: $pre + "-bottom" + if($suf, "-#{$suf}", ""); 56 | $left: $pre + "-left" + if($suf, "-#{$suf}", ""); 57 | $right: $pre + "-right" + if($suf, "-#{$suf}", ""); 58 | $all: $pre + if($suf, "-#{$suf}", ""); 59 | 60 | $vals: collapse-directionals($vals); 61 | 62 | @if contains-falsy($vals) { 63 | @if nth($vals, 1) { #{$top}: nth($vals, 1); } 64 | 65 | @if length($vals) == 1 { 66 | @if nth($vals, 1) { #{$right}: nth($vals, 1); } 67 | } @else { 68 | @if nth($vals, 2) { #{$right}: nth($vals, 2); } 69 | } 70 | 71 | // prop: top/bottom right/left 72 | @if length($vals) == 2 { 73 | @if nth($vals, 1) { #{$bottom}: nth($vals, 1); } 74 | @if nth($vals, 2) { #{$left}: nth($vals, 2); } 75 | 76 | // prop: top right/left bottom 77 | } @else if length($vals) == 3 { 78 | @if nth($vals, 3) { #{$bottom}: nth($vals, 3); } 79 | @if nth($vals, 2) { #{$left}: nth($vals, 2); } 80 | 81 | // prop: top right bottom left 82 | } @else if length($vals) == 4 { 83 | @if nth($vals, 3) { #{$bottom}: nth($vals, 3); } 84 | @if nth($vals, 4) { #{$left}: nth($vals, 4); } 85 | } 86 | 87 | // prop: top/right/bottom/left 88 | } @else { 89 | #{$all}: $vals; 90 | } 91 | } 92 | 93 | @mixin margin($vals...) { 94 | @include directional-property(margin, false, $vals...); 95 | } 96 | 97 | @mixin padding($vals...) { 98 | @include directional-property(padding, false, $vals...); 99 | } 100 | 101 | @mixin border-style($vals...) { 102 | @include directional-property(border, style, $vals...); 103 | } 104 | 105 | @mixin border-color($vals...) { 106 | @include directional-property(border, color, $vals...); 107 | } 108 | 109 | @mixin border-width($vals...) { 110 | @include directional-property(border, width, $vals...); 111 | } 112 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/addons/_ellipsis.scss: -------------------------------------------------------------------------------- 1 | @mixin ellipsis($width: 100%) { 2 | display: inline-block; 3 | max-width: $width; 4 | overflow: hidden; 5 | text-overflow: ellipsis; 6 | white-space: nowrap; 7 | } 8 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/addons/_font-family.scss: -------------------------------------------------------------------------------- 1 | $georgia: Georgia, Cambria, "Times New Roman", Times, serif; 2 | $helvetica: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; 3 | $lucida-grande: "Lucida Grande", Tahoma, Verdana, Arial, sans-serif; 4 | $monospace: "Bitstream Vera Sans Mono", Consolas, Courier, monospace; 5 | $verdana: Verdana, Geneva, sans-serif; 6 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/addons/_hide-text.scss: -------------------------------------------------------------------------------- 1 | @mixin hide-text { 2 | overflow: hidden; 3 | 4 | &:before { 5 | content: ""; 6 | display: block; 7 | width: 0; 8 | height: 100%; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/addons/_html5-input-types.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Generate a variable ($all-text-inputs) with a list of all html5 3 | // input types that have a text-based input, excluding textarea. 4 | // http://diveintohtml5.org/forms.html 5 | //************************************************************************// 6 | $inputs-list: 'input[type="email"]', 7 | 'input[type="number"]', 8 | 'input[type="password"]', 9 | 'input[type="search"]', 10 | 'input[type="tel"]', 11 | 'input[type="text"]', 12 | 'input[type="url"]', 13 | 14 | // Webkit & Gecko may change the display of these in the future 15 | 'input[type="color"]', 16 | 'input[type="date"]', 17 | 'input[type="datetime"]', 18 | 'input[type="datetime-local"]', 19 | 'input[type="month"]', 20 | 'input[type="time"]', 21 | 'input[type="week"]'; 22 | 23 | // Bare inputs 24 | //************************************************************************// 25 | $all-text-inputs: assign-inputs($inputs-list); 26 | 27 | // Hover Pseudo-class 28 | //************************************************************************// 29 | $all-text-inputs-hover: assign-inputs($inputs-list, hover); 30 | 31 | // Focus Pseudo-class 32 | //************************************************************************// 33 | $all-text-inputs-focus: assign-inputs($inputs-list, focus); 34 | 35 | 36 | 37 | // You must use interpolation on the variable: 38 | // #{$all-text-inputs} 39 | // #{$all-text-inputs-hover} 40 | // #{$all-text-inputs-focus} 41 | 42 | // Example 43 | //************************************************************************// 44 | // #{$all-text-inputs}, textarea { 45 | // border: 1px solid red; 46 | // } 47 | 48 | 49 | 50 | //************************************************************************// 51 | // Generate a variable ($all-button-inputs) with a list of all html5 52 | // input types that have a button-based input, excluding button. 53 | //************************************************************************// 54 | $inputs-button-list: 'input[type="button"]', 55 | 'input[type="reset"]', 56 | 'input[type="submit"]'; 57 | 58 | // Bare inputs 59 | //************************************************************************// 60 | $all-button-inputs: assign-inputs($inputs-button-list); 61 | 62 | // Hover Pseudo-class 63 | //************************************************************************// 64 | $all-button-inputs-hover: assign-inputs($inputs-button-list, hover); 65 | 66 | // Focus Pseudo-class 67 | //************************************************************************// 68 | $all-button-inputs-focus: assign-inputs($inputs-button-list, focus); 69 | 70 | // Active Pseudo-class 71 | //************************************************************************// 72 | $all-button-inputs-active: assign-inputs($inputs-button-list, active); 73 | 74 | 75 | 76 | // You must use interpolation on the variable: 77 | // #{$all-button-inputs} 78 | // #{$all-button-inputs-hover} 79 | // #{$all-button-inputs-focus} 80 | // #{$all-button-inputs-active} 81 | 82 | // Example 83 | //************************************************************************// 84 | // #{$all-button-inputs}, button { 85 | // border: 1px solid red; 86 | // } 87 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/addons/_position.scss: -------------------------------------------------------------------------------- 1 | @mixin position ($position: relative, $coordinates: null null null null) { 2 | 3 | @if type-of($position) == list { 4 | $coordinates: $position; 5 | $position: relative; 6 | } 7 | 8 | $coordinates: unpack($coordinates); 9 | 10 | $top: nth($coordinates, 1); 11 | $right: nth($coordinates, 2); 12 | $bottom: nth($coordinates, 3); 13 | $left: nth($coordinates, 4); 14 | 15 | position: $position; 16 | 17 | @if ($top and $top == auto) or (type-of($top) == number) { 18 | top: $top; 19 | } 20 | 21 | @if ($right and $right == auto) or (type-of($right) == number) { 22 | right: $right; 23 | } 24 | 25 | @if ($bottom and $bottom == auto) or (type-of($bottom) == number) { 26 | bottom: $bottom; 27 | } 28 | 29 | @if ($left and $left == auto) or (type-of($left) == number) { 30 | left: $left; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/addons/_prefixer.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Example: @include prefixer(border-radius, $radii, webkit ms spec); 3 | //************************************************************************// 4 | // Variables located in /settings/_prefixer.scss 5 | 6 | @mixin prefixer ($property, $value, $prefixes) { 7 | @each $prefix in $prefixes { 8 | @if $prefix == webkit { 9 | @if $prefix-for-webkit { 10 | -webkit-#{$property}: $value; 11 | } 12 | } 13 | @else if $prefix == moz { 14 | @if $prefix-for-mozilla { 15 | -moz-#{$property}: $value; 16 | } 17 | } 18 | @else if $prefix == ms { 19 | @if $prefix-for-microsoft { 20 | -ms-#{$property}: $value; 21 | } 22 | } 23 | @else if $prefix == o { 24 | @if $prefix-for-opera { 25 | -o-#{$property}: $value; 26 | } 27 | } 28 | @else if $prefix == spec { 29 | @if $prefix-for-spec { 30 | #{$property}: $value; 31 | } 32 | } 33 | @else { 34 | @warn "Unrecognized prefix: #{$prefix}"; 35 | } 36 | } 37 | } 38 | 39 | @mixin disable-prefix-for-all() { 40 | $prefix-for-webkit: false !global; 41 | $prefix-for-mozilla: false !global; 42 | $prefix-for-microsoft: false !global; 43 | $prefix-for-opera: false !global; 44 | $prefix-for-spec: false !global; 45 | } 46 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/addons/_retina-image.scss: -------------------------------------------------------------------------------- 1 | @mixin retina-image($filename, $background-size, $extension: png, $retina-filename: null, $retina-suffix: _2x, $asset-pipeline: false) { 2 | @if $asset-pipeline { 3 | background-image: image-url("#{$filename}.#{$extension}"); 4 | } 5 | @else { 6 | background-image: url("#{$filename}.#{$extension}"); 7 | } 8 | 9 | @include hidpi { 10 | @if $asset-pipeline { 11 | @if $retina-filename { 12 | background-image: image-url("#{$retina-filename}.#{$extension}"); 13 | } 14 | @else { 15 | background-image: image-url("#{$filename}#{$retina-suffix}.#{$extension}"); 16 | } 17 | } 18 | 19 | @else { 20 | @if $retina-filename { 21 | background-image: url("#{$retina-filename}.#{$extension}"); 22 | } 23 | @else { 24 | background-image: url("#{$filename}#{$retina-suffix}.#{$extension}"); 25 | } 26 | } 27 | 28 | background-size: $background-size; 29 | 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/addons/_size.scss: -------------------------------------------------------------------------------- 1 | @mixin size($size) { 2 | $height: nth($size, 1); 3 | $width: $height; 4 | 5 | @if length($size) > 1 { 6 | $height: nth($size, 2); 7 | } 8 | 9 | @if $height == auto or (type-of($height) == number and not unitless($height)) { 10 | height: $height; 11 | } 12 | 13 | @if $width == auto or (type-of($height) == number and not unitless($width)) { 14 | width: $width; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/addons/_timing-functions.scss: -------------------------------------------------------------------------------- 1 | // CSS cubic-bezier timing functions. Timing functions courtesy of jquery.easie (github.com/jaukia/easie) 2 | // Timing functions are the same as demo'ed here: http://jqueryui.com/demos/effect/easing.html 3 | 4 | // EASE IN 5 | $ease-in-quad: cubic-bezier(0.550, 0.085, 0.680, 0.530); 6 | $ease-in-cubic: cubic-bezier(0.550, 0.055, 0.675, 0.190); 7 | $ease-in-quart: cubic-bezier(0.895, 0.030, 0.685, 0.220); 8 | $ease-in-quint: cubic-bezier(0.755, 0.050, 0.855, 0.060); 9 | $ease-in-sine: cubic-bezier(0.470, 0.000, 0.745, 0.715); 10 | $ease-in-expo: cubic-bezier(0.950, 0.050, 0.795, 0.035); 11 | $ease-in-circ: cubic-bezier(0.600, 0.040, 0.980, 0.335); 12 | $ease-in-back: cubic-bezier(0.600, -0.280, 0.735, 0.045); 13 | 14 | // EASE OUT 15 | $ease-out-quad: cubic-bezier(0.250, 0.460, 0.450, 0.940); 16 | $ease-out-cubic: cubic-bezier(0.215, 0.610, 0.355, 1.000); 17 | $ease-out-quart: cubic-bezier(0.165, 0.840, 0.440, 1.000); 18 | $ease-out-quint: cubic-bezier(0.230, 1.000, 0.320, 1.000); 19 | $ease-out-sine: cubic-bezier(0.390, 0.575, 0.565, 1.000); 20 | $ease-out-expo: cubic-bezier(0.190, 1.000, 0.220, 1.000); 21 | $ease-out-circ: cubic-bezier(0.075, 0.820, 0.165, 1.000); 22 | $ease-out-back: cubic-bezier(0.175, 0.885, 0.320, 1.275); 23 | 24 | // EASE IN OUT 25 | $ease-in-out-quad: cubic-bezier(0.455, 0.030, 0.515, 0.955); 26 | $ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1.000); 27 | $ease-in-out-quart: cubic-bezier(0.770, 0.000, 0.175, 1.000); 28 | $ease-in-out-quint: cubic-bezier(0.860, 0.000, 0.070, 1.000); 29 | $ease-in-out-sine: cubic-bezier(0.445, 0.050, 0.550, 0.950); 30 | $ease-in-out-expo: cubic-bezier(1.000, 0.000, 0.000, 1.000); 31 | $ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.150, 0.860); 32 | $ease-in-out-back: cubic-bezier(0.680, -0.550, 0.265, 1.550); 33 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/addons/_triangle.scss: -------------------------------------------------------------------------------- 1 | @mixin triangle ($size, $color, $direction) { 2 | height: 0; 3 | width: 0; 4 | 5 | $width: nth($size, 1); 6 | $height: nth($size, length($size)); 7 | 8 | $foreground-color: nth($color, 1); 9 | $background-color: if(length($color) == 2, nth($color, 2), transparent); 10 | 11 | @if ($direction == up) or ($direction == down) or ($direction == right) or ($direction == left) { 12 | 13 | $width: $width / 2; 14 | $height: if(length($size) > 1, $height, $height/2); 15 | 16 | @if $direction == up { 17 | border-left: $width solid $background-color; 18 | border-right: $width solid $background-color; 19 | border-bottom: $height solid $foreground-color; 20 | 21 | } @else if $direction == right { 22 | border-top: $width solid $background-color; 23 | border-bottom: $width solid $background-color; 24 | border-left: $height solid $foreground-color; 25 | 26 | } @else if $direction == down { 27 | border-left: $width solid $background-color; 28 | border-right: $width solid $background-color; 29 | border-top: $height solid $foreground-color; 30 | 31 | } @else if $direction == left { 32 | border-top: $width solid $background-color; 33 | border-bottom: $width solid $background-color; 34 | border-right: $height solid $foreground-color; 35 | } 36 | } 37 | 38 | @else if ($direction == up-right) or ($direction == up-left) { 39 | border-top: $height solid $foreground-color; 40 | 41 | @if $direction == up-right { 42 | border-left: $width solid $background-color; 43 | 44 | } @else if $direction == up-left { 45 | border-right: $width solid $background-color; 46 | } 47 | } 48 | 49 | @else if ($direction == down-right) or ($direction == down-left) { 50 | border-bottom: $height solid $foreground-color; 51 | 52 | @if $direction == down-right { 53 | border-left: $width solid $background-color; 54 | 55 | } @else if $direction == down-left { 56 | border-right: $width solid $background-color; 57 | } 58 | } 59 | 60 | @else if ($direction == inset-up) { 61 | border-width: $height $width; 62 | border-style: solid; 63 | border-color: $background-color $background-color $foreground-color; 64 | } 65 | 66 | @else if ($direction == inset-down) { 67 | border-width: $height $width; 68 | border-style: solid; 69 | border-color: $foreground-color $background-color $background-color; 70 | } 71 | 72 | @else if ($direction == inset-right) { 73 | border-width: $width $height; 74 | border-style: solid; 75 | border-color: $background-color $background-color $background-color $foreground-color; 76 | } 77 | 78 | @else if ($direction == inset-left) { 79 | border-width: $width $height; 80 | border-style: solid; 81 | border-color: $background-color $foreground-color $background-color $background-color; 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/addons/_word-wrap.scss: -------------------------------------------------------------------------------- 1 | @mixin word-wrap($wrap: break-word) { 2 | word-wrap: $wrap; 3 | 4 | @if $wrap == break-word { 5 | overflow-wrap: break-word; 6 | word-break: break-all; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/css3/_animation.scss: -------------------------------------------------------------------------------- 1 | // http://www.w3.org/TR/css3-animations/#the-animation-name-property- 2 | // Each of these mixins support comma separated lists of values, which allows different transitions for individual properties to be described in a single style rule. Each value in the list corresponds to the value at that same position in the other properties. 3 | 4 | // Official animation shorthand property. 5 | @mixin animation ($animations...) { 6 | @include prefixer(animation, $animations, webkit moz spec); 7 | } 8 | 9 | // Individual Animation Properties 10 | @mixin animation-name ($names...) { 11 | @include prefixer(animation-name, $names, webkit moz spec); 12 | } 13 | 14 | 15 | @mixin animation-duration ($times...) { 16 | @include prefixer(animation-duration, $times, webkit moz spec); 17 | } 18 | 19 | 20 | @mixin animation-timing-function ($motions...) { 21 | // ease | linear | ease-in | ease-out | ease-in-out 22 | @include prefixer(animation-timing-function, $motions, webkit moz spec); 23 | } 24 | 25 | 26 | @mixin animation-iteration-count ($values...) { 27 | // infinite | 28 | @include prefixer(animation-iteration-count, $values, webkit moz spec); 29 | } 30 | 31 | 32 | @mixin animation-direction ($directions...) { 33 | // normal | alternate 34 | @include prefixer(animation-direction, $directions, webkit moz spec); 35 | } 36 | 37 | 38 | @mixin animation-play-state ($states...) { 39 | // running | paused 40 | @include prefixer(animation-play-state, $states, webkit moz spec); 41 | } 42 | 43 | 44 | @mixin animation-delay ($times...) { 45 | @include prefixer(animation-delay, $times, webkit moz spec); 46 | } 47 | 48 | 49 | @mixin animation-fill-mode ($modes...) { 50 | // none | forwards | backwards | both 51 | @include prefixer(animation-fill-mode, $modes, webkit moz spec); 52 | } 53 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/css3/_appearance.scss: -------------------------------------------------------------------------------- 1 | @mixin appearance ($value) { 2 | @include prefixer(appearance, $value, webkit moz ms o spec); 3 | } 4 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/css3/_backface-visibility.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Backface-visibility mixin 3 | //************************************************************************// 4 | @mixin backface-visibility($visibility) { 5 | @include prefixer(backface-visibility, $visibility, webkit spec); 6 | } 7 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/css3/_background-image.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Background-image property for adding multiple background images with 3 | // gradients, or for stringing multiple gradients together. 4 | //************************************************************************// 5 | 6 | @mixin background-image($images...) { 7 | $webkit-images: (); 8 | $spec-images: (); 9 | 10 | @each $image in $images { 11 | $webkit-image: (); 12 | $spec-image: (); 13 | 14 | @if (type-of($image) == string) { 15 | $url-str: str-slice($image, 0, 3); 16 | $gradient-type: str-slice($image, 0, 6); 17 | 18 | @if $url-str == "url" { 19 | $webkit-image: $image; 20 | $spec-image: $image; 21 | } 22 | 23 | @else if $gradient-type == "linear" { 24 | $gradients: _linear-gradient-parser($image); 25 | $webkit-image: map-get($gradients, webkit-image); 26 | $spec-image: map-get($gradients, spec-image); 27 | } 28 | 29 | @else if $gradient-type == "radial" { 30 | $gradients: _radial-gradient-parser($image); 31 | $webkit-image: map-get($gradients, webkit-image); 32 | $spec-image: map-get($gradients, spec-image); 33 | } 34 | } 35 | 36 | $webkit-images: append($webkit-images, $webkit-image, comma); 37 | $spec-images: append($spec-images, $spec-image, comma); 38 | } 39 | 40 | background-image: $webkit-images; 41 | background-image: $spec-images; 42 | } 43 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/css3/_background.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Background property for adding multiple backgrounds using shorthand 3 | // notation. 4 | //************************************************************************// 5 | 6 | @mixin background($backgrounds...) { 7 | $webkit-backgrounds: (); 8 | $spec-backgrounds: (); 9 | 10 | @each $background in $backgrounds { 11 | $webkit-background: (); 12 | $spec-background: (); 13 | $background-type: type-of($background); 14 | 15 | @if $background-type == string or list { 16 | $background-str: if($background-type == list, nth($background, 1), $background); 17 | 18 | $url-str: str-slice($background-str, 0, 3); 19 | $gradient-type: str-slice($background-str, 0, 6); 20 | 21 | @if $url-str == "url" { 22 | $webkit-background: $background; 23 | $spec-background: $background; 24 | } 25 | 26 | @else if $gradient-type == "linear" { 27 | $gradients: _linear-gradient-parser("#{$background}"); 28 | $webkit-background: map-get($gradients, webkit-image); 29 | $spec-background: map-get($gradients, spec-image); 30 | } 31 | 32 | @else if $gradient-type == "radial" { 33 | $gradients: _radial-gradient-parser("#{$background}"); 34 | $webkit-background: map-get($gradients, webkit-image); 35 | $spec-background: map-get($gradients, spec-image); 36 | } 37 | 38 | @else { 39 | $webkit-background: $background; 40 | $spec-background: $background; 41 | } 42 | } 43 | 44 | @else { 45 | $webkit-background: $background; 46 | $spec-background: $background; 47 | } 48 | 49 | $webkit-backgrounds: append($webkit-backgrounds, $webkit-background, comma); 50 | $spec-backgrounds: append($spec-backgrounds, $spec-background, comma); 51 | } 52 | 53 | background: $webkit-backgrounds; 54 | background: $spec-backgrounds; 55 | } 56 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/css3/_border-image.scss: -------------------------------------------------------------------------------- 1 | @mixin border-image($borders...) { 2 | $webkit-borders: (); 3 | $spec-borders: (); 4 | 5 | @each $border in $borders { 6 | $webkit-border: (); 7 | $spec-border: (); 8 | $border-type: type-of($border); 9 | 10 | @if $border-type == string or list { 11 | $border-str: if($border-type == list, nth($border, 1), $border); 12 | 13 | $url-str: str-slice($border-str, 0, 3); 14 | $gradient-type: str-slice($border-str, 0, 6); 15 | 16 | @if $url-str == "url" { 17 | $webkit-border: $border; 18 | $spec-border: $border; 19 | } 20 | 21 | @else if $gradient-type == "linear" { 22 | $gradients: _linear-gradient-parser("#{$border}"); 23 | $webkit-border: map-get($gradients, webkit-image); 24 | $spec-border: map-get($gradients, spec-image); 25 | } 26 | 27 | @else if $gradient-type == "radial" { 28 | $gradients: _radial-gradient-parser("#{$border}"); 29 | $webkit-border: map-get($gradients, webkit-image); 30 | $spec-border: map-get($gradients, spec-image); 31 | } 32 | 33 | @else { 34 | $webkit-border: $border; 35 | $spec-border: $border; 36 | } 37 | } 38 | 39 | @else { 40 | $webkit-border: $border; 41 | $spec-border: $border; 42 | } 43 | 44 | $webkit-borders: append($webkit-borders, $webkit-border, comma); 45 | $spec-borders: append($spec-borders, $spec-border, comma); 46 | } 47 | 48 | -webkit-border-image: $webkit-borders; 49 | border-image: $spec-borders; 50 | border-style: solid; 51 | } 52 | 53 | //Examples: 54 | // @include border-image(url("image.png")); 55 | // @include border-image(url("image.png") 20 stretch); 56 | // @include border-image(linear-gradient(45deg, orange, yellow)); 57 | // @include border-image(linear-gradient(45deg, orange, yellow) stretch); 58 | // @include border-image(linear-gradient(45deg, orange, yellow) 20 30 40 50 stretch round); 59 | // @include border-image(radial-gradient(top, cover, orange, yellow, orange)); 60 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/css3/_border-radius.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Shorthand Border-radius mixins 3 | //************************************************************************// 4 | @mixin border-top-radius($radii) { 5 | @include prefixer(border-top-left-radius, $radii, spec); 6 | @include prefixer(border-top-right-radius, $radii, spec); 7 | } 8 | 9 | @mixin border-bottom-radius($radii) { 10 | @include prefixer(border-bottom-left-radius, $radii, spec); 11 | @include prefixer(border-bottom-right-radius, $radii, spec); 12 | } 13 | 14 | @mixin border-left-radius($radii) { 15 | @include prefixer(border-top-left-radius, $radii, spec); 16 | @include prefixer(border-bottom-left-radius, $radii, spec); 17 | } 18 | 19 | @mixin border-right-radius($radii) { 20 | @include prefixer(border-top-right-radius, $radii, spec); 21 | @include prefixer(border-bottom-right-radius, $radii, spec); 22 | } 23 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/css3/_box-sizing.scss: -------------------------------------------------------------------------------- 1 | @mixin box-sizing ($box) { 2 | // content-box | border-box | inherit 3 | @include prefixer(box-sizing, $box, webkit moz spec); 4 | } 5 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/css3/_calc.scss: -------------------------------------------------------------------------------- 1 | @mixin calc($property, $value) { 2 | #{$property}: -webkit-calc(#{$value}); 3 | #{$property}: calc(#{$value}); 4 | } 5 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/css3/_columns.scss: -------------------------------------------------------------------------------- 1 | @mixin columns($arg: auto) { 2 | // || 3 | @include prefixer(columns, $arg, webkit moz spec); 4 | } 5 | 6 | @mixin column-count($int: auto) { 7 | // auto || integer 8 | @include prefixer(column-count, $int, webkit moz spec); 9 | } 10 | 11 | @mixin column-gap($length: normal) { 12 | // normal || length 13 | @include prefixer(column-gap, $length, webkit moz spec); 14 | } 15 | 16 | @mixin column-fill($arg: auto) { 17 | // auto || length 18 | @include prefixer(column-fill, $arg, webkit moz spec); 19 | } 20 | 21 | @mixin column-rule($arg) { 22 | // || || 23 | @include prefixer(column-rule, $arg, webkit moz spec); 24 | } 25 | 26 | @mixin column-rule-color($color) { 27 | @include prefixer(column-rule-color, $color, webkit moz spec); 28 | } 29 | 30 | @mixin column-rule-style($style: none) { 31 | // none | hidden | dashed | dotted | double | groove | inset | inset | outset | ridge | solid 32 | @include prefixer(column-rule-style, $style, webkit moz spec); 33 | } 34 | 35 | @mixin column-rule-width ($width: none) { 36 | @include prefixer(column-rule-width, $width, webkit moz spec); 37 | } 38 | 39 | @mixin column-span($arg: none) { 40 | // none || all 41 | @include prefixer(column-span, $arg, webkit moz spec); 42 | } 43 | 44 | @mixin column-width($length: auto) { 45 | // auto || length 46 | @include prefixer(column-width, $length, webkit moz spec); 47 | } 48 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/css3/_filter.scss: -------------------------------------------------------------------------------- 1 | @mixin filter($function: none) { 2 | // [ 3 | @include prefixer(perspective, $depth, webkit moz spec); 4 | } 5 | 6 | @mixin perspective-origin($value: 50% 50%) { 7 | @include prefixer(perspective-origin, $value, webkit moz spec); 8 | } 9 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/css3/_placeholder.scss: -------------------------------------------------------------------------------- 1 | @mixin placeholder { 2 | $placeholders: ":-webkit-input" ":-moz" "-moz" "-ms-input"; 3 | @each $placeholder in $placeholders { 4 | &:#{$placeholder}-placeholder { 5 | @content; 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/css3/_radial-gradient.scss: -------------------------------------------------------------------------------- 1 | // Requires Sass 3.1+ 2 | @mixin radial-gradient($G1, $G2, 3 | $G3: null, $G4: null, 4 | $G5: null, $G6: null, 5 | $G7: null, $G8: null, 6 | $G9: null, $G10: null, 7 | $pos: null, 8 | $shape-size: null, 9 | $fallback: null) { 10 | 11 | $data: _radial-arg-parser($G1, $G2, $pos, $shape-size); 12 | $G1: nth($data, 1); 13 | $G2: nth($data, 2); 14 | $pos: nth($data, 3); 15 | $shape-size: nth($data, 4); 16 | 17 | $full: $G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10; 18 | 19 | // Strip deprecated cover/contain for spec 20 | $shape-size-spec: _shape-size-stripper($shape-size); 21 | 22 | // Set $G1 as the default fallback color 23 | $first-color: nth($full, 1); 24 | $fallback-color: nth($first-color, 1); 25 | 26 | @if (type-of($fallback) == color) or ($fallback == "transparent") { 27 | $fallback-color: $fallback; 28 | } 29 | 30 | // Add Commas and spaces 31 | $shape-size: if($shape-size, '#{$shape-size}, ', null); 32 | $pos: if($pos, '#{$pos}, ', null); 33 | $pos-spec: if($pos, 'at #{$pos}', null); 34 | $shape-size-spec: if(($shape-size-spec != ' ') and ($pos == null), '#{$shape-size-spec}, ', '#{$shape-size-spec} '); 35 | 36 | background-color: $fallback-color; 37 | background-image: -webkit-radial-gradient(unquote(#{$pos}#{$shape-size}#{$full})); 38 | background-image: unquote("radial-gradient(#{$shape-size-spec}#{$pos-spec}#{$full})"); 39 | } 40 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/css3/_transform.scss: -------------------------------------------------------------------------------- 1 | @mixin transform($property: none) { 2 | // none | 3 | @include prefixer(transform, $property, webkit moz ms o spec); 4 | } 5 | 6 | @mixin transform-origin($axes: 50%) { 7 | // x-axis - left | center | right | length | % 8 | // y-axis - top | center | bottom | length | % 9 | // z-axis - length 10 | @include prefixer(transform-origin, $axes, webkit moz ms o spec); 11 | } 12 | 13 | @mixin transform-style ($style: flat) { 14 | @include prefixer(transform-style, $style, webkit moz ms o spec); 15 | } 16 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/css3/_transition.scss: -------------------------------------------------------------------------------- 1 | // Shorthand mixin. Supports multiple parentheses-deliminated values for each variable. 2 | // Example: @include transition (all 2s ease-in-out); 3 | // @include transition (opacity 1s ease-in 2s, width 2s ease-out); 4 | // @include transition-property (transform, opacity); 5 | 6 | @mixin transition ($properties...) { 7 | // Fix for vendor-prefix transform property 8 | $needs-prefixes: false; 9 | $webkit: (); 10 | $moz: (); 11 | $spec: (); 12 | 13 | // Create lists for vendor-prefixed transform 14 | @each $list in $properties { 15 | @if nth($list, 1) == "transform" { 16 | $needs-prefixes: true; 17 | $list1: -webkit-transform; 18 | $list2: -moz-transform; 19 | $list3: (); 20 | 21 | @each $var in $list { 22 | $list3: join($list3, $var); 23 | 24 | @if $var != "transform" { 25 | $list1: join($list1, $var); 26 | $list2: join($list2, $var); 27 | } 28 | } 29 | 30 | $webkit: append($webkit, $list1); 31 | $moz: append($moz, $list2); 32 | $spec: append($spec, $list3); 33 | } 34 | 35 | // Create lists for non-prefixed transition properties 36 | @else { 37 | $webkit: append($webkit, $list, comma); 38 | $moz: append($moz, $list, comma); 39 | $spec: append($spec, $list, comma); 40 | } 41 | } 42 | 43 | @if $needs-prefixes { 44 | -webkit-transition: $webkit; 45 | -moz-transition: $moz; 46 | transition: $spec; 47 | } 48 | @else { 49 | @if length($properties) >= 1 { 50 | @include prefixer(transition, $properties, webkit moz spec); 51 | } 52 | 53 | @else { 54 | $properties: all 0.15s ease-out 0s; 55 | @include prefixer(transition, $properties, webkit moz spec); 56 | } 57 | } 58 | } 59 | 60 | @mixin transition-property ($properties...) { 61 | -webkit-transition-property: transition-property-names($properties, 'webkit'); 62 | -moz-transition-property: transition-property-names($properties, 'moz'); 63 | transition-property: transition-property-names($properties, false); 64 | } 65 | 66 | @mixin transition-duration ($times...) { 67 | @include prefixer(transition-duration, $times, webkit moz spec); 68 | } 69 | 70 | @mixin transition-timing-function ($motions...) { 71 | // ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier() 72 | @include prefixer(transition-timing-function, $motions, webkit moz spec); 73 | } 74 | 75 | @mixin transition-delay ($times...) { 76 | @include prefixer(transition-delay, $times, webkit moz spec); 77 | } 78 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/css3/_user-select.scss: -------------------------------------------------------------------------------- 1 | @mixin user-select($arg: none) { 2 | @include prefixer(user-select, $arg, webkit moz ms spec); 3 | } 4 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/functions/_assign.scss: -------------------------------------------------------------------------------- 1 | @function assign-inputs($inputs, $pseudo: null) { 2 | $list : (); 3 | 4 | @each $input in $inputs { 5 | $input: unquote($input); 6 | $input: if($pseudo, $input + ":" + $pseudo, $input); 7 | $list: append($list, $input, comma); 8 | } 9 | 10 | @return $list; 11 | } -------------------------------------------------------------------------------- /assets/_sass/bourbon/functions/_color-lightness.scss: -------------------------------------------------------------------------------- 1 | // Programatically determines whether a color is light or dark 2 | // Returns a boolean 3 | // More details here http://robots.thoughtbot.com/closer-look-color-lightness 4 | 5 | @function is-light($hex-color) { 6 | $-local-red: red(rgba($hex-color, 1.0)); 7 | $-local-green: green(rgba($hex-color, 1.0)); 8 | $-local-blue: blue(rgba($hex-color, 1.0)); 9 | 10 | $-local-lightness: ($-local-red * 0.2126 + $-local-green * 0.7152 + $-local-blue * 0.0722) / 255; 11 | 12 | @return $-local-lightness > .6; 13 | } 14 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/functions/_flex-grid.scss: -------------------------------------------------------------------------------- 1 | // Flexible grid 2 | @function flex-grid($columns, $container-columns: $fg-max-columns) { 3 | $width: $columns * $fg-column + ($columns - 1) * $fg-gutter; 4 | $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter; 5 | @return percentage($width / $container-width); 6 | } 7 | 8 | // Flexible gutter 9 | @function flex-gutter($container-columns: $fg-max-columns, $gutter: $fg-gutter) { 10 | $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter; 11 | @return percentage($gutter / $container-width); 12 | } 13 | 14 | // The $fg-column, $fg-gutter and $fg-max-columns variables must be defined in your base stylesheet to properly use the flex-grid function. 15 | // This function takes the fluid grid equation (target / context = result) and uses columns to help define each. 16 | // 17 | // The calculation presumes that your column structure will be missing the last gutter: 18 | // 19 | // -- column -- gutter -- column -- gutter -- column 20 | // 21 | // $fg-column: 60px; // Column Width 22 | // $fg-gutter: 25px; // Gutter Width 23 | // $fg-max-columns: 12; // Total Columns For Main Container 24 | // 25 | // div { 26 | // width: flex-grid(4); // returns (315px / 995px) = 31.65829%; 27 | // margin-left: flex-gutter(); // returns (25px / 995px) = 2.51256%; 28 | // 29 | // p { 30 | // width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%; 31 | // float: left; 32 | // margin: flex-gutter(4); // returns (25px / 315px) = 7.936508%; 33 | // } 34 | // 35 | // blockquote { 36 | // float: left; 37 | // width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%; 38 | // } 39 | // } -------------------------------------------------------------------------------- /assets/_sass/bourbon/functions/_golden-ratio.scss: -------------------------------------------------------------------------------- 1 | @function golden-ratio($value, $increment) { 2 | @return modular-scale($value, $increment, $golden) 3 | } 4 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/functions/_grid-width.scss: -------------------------------------------------------------------------------- 1 | @function grid-width($n) { 2 | @return $n * $gw-column + ($n - 1) * $gw-gutter; 3 | } 4 | 5 | // The $gw-column and $gw-gutter variables must be defined in your base stylesheet to properly use the grid-width function. 6 | // 7 | // $gw-column: 100px; // Column Width 8 | // $gw-gutter: 40px; // Gutter Width 9 | // 10 | // div { 11 | // width: grid-width(4); // returns 520px; 12 | // margin-left: $gw-gutter; // returns 40px; 13 | // } 14 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/functions/_modular-scale.scss: -------------------------------------------------------------------------------- 1 | // Scaling Variables 2 | $golden: 1.618; 3 | $minor-second: 1.067; 4 | $major-second: 1.125; 5 | $minor-third: 1.2; 6 | $major-third: 1.25; 7 | $perfect-fourth: 1.333; 8 | $augmented-fourth: 1.414; 9 | $perfect-fifth: 1.5; 10 | $minor-sixth: 1.6; 11 | $major-sixth: 1.667; 12 | $minor-seventh: 1.778; 13 | $major-seventh: 1.875; 14 | $octave: 2; 15 | $major-tenth: 2.5; 16 | $major-eleventh: 2.667; 17 | $major-twelfth: 3; 18 | $double-octave: 4; 19 | 20 | @function modular-scale($value, $increment, $ratio) { 21 | $v1: nth($value, 1); 22 | $v2: nth($value, length($value)); 23 | $value: $v1; 24 | 25 | // scale $v2 to just above $v1 26 | @while $v2 > $v1 { 27 | $v2: ($v2 / $ratio); // will be off-by-1 28 | } 29 | @while $v2 < $v1 { 30 | $v2: ($v2 * $ratio); // will fix off-by-1 31 | } 32 | 33 | // check AFTER scaling $v2 to prevent double-counting corner-case 34 | $double-stranded: $v2 > $v1; 35 | 36 | @if $increment > 0 { 37 | @for $i from 1 through $increment { 38 | @if $double-stranded and ($v1 * $ratio) > $v2 { 39 | $value: $v2; 40 | $v2: ($v2 * $ratio); 41 | } @else { 42 | $v1: ($v1 * $ratio); 43 | $value: $v1; 44 | } 45 | } 46 | } 47 | 48 | @if $increment < 0 { 49 | // adjust $v2 to just below $v1 50 | @if $double-stranded { 51 | $v2: ($v2 / $ratio); 52 | } 53 | 54 | @for $i from $increment through -1 { 55 | @if $double-stranded and ($v1 / $ratio) < $v2 { 56 | $value: $v2; 57 | $v2: ($v2 / $ratio); 58 | } @else { 59 | $v1: ($v1 / $ratio); 60 | $value: $v1; 61 | } 62 | } 63 | } 64 | 65 | @return $value; 66 | } 67 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/functions/_px-to-em.scss: -------------------------------------------------------------------------------- 1 | // Convert pixels to ems 2 | // eg. for a relational value of 12px write em(12) when the parent is 16px 3 | // if the parent is another value say 24px write em(12, 24) 4 | 5 | @function em($pxval, $base: $em-base) { 6 | @if not unitless($pxval) { 7 | $pxval: strip-units($pxval); 8 | } 9 | @if not unitless($base) { 10 | $base: strip-units($base); 11 | } 12 | @return ($pxval / $base) * 1em; 13 | } 14 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/functions/_px-to-rem.scss: -------------------------------------------------------------------------------- 1 | // Convert pixels to rems 2 | // eg. for a relational value of 12px write rem(12) 3 | // Assumes $em-base is the font-size of 4 | 5 | @function rem($pxval) { 6 | @if not unitless($pxval) { 7 | $pxval: strip-units($pxval); 8 | } 9 | 10 | $base: $em-base; 11 | @if not unitless($base) { 12 | $base: strip-units($base); 13 | } 14 | @return ($pxval / $base) * 1rem; 15 | } 16 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/functions/_strip-units.scss: -------------------------------------------------------------------------------- 1 | // Srtips the units from a value. e.g. 12px -> 12 2 | 3 | @function strip-units($val) { 4 | @return ($val / ($val * 0 + 1)); 5 | } 6 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/functions/_tint-shade.scss: -------------------------------------------------------------------------------- 1 | // Add percentage of white to a color 2 | @function tint($color, $percent){ 3 | @return mix(white, $color, $percent); 4 | } 5 | 6 | // Add percentage of black to a color 7 | @function shade($color, $percent){ 8 | @return mix(black, $color, $percent); 9 | } 10 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/functions/_transition-property-name.scss: -------------------------------------------------------------------------------- 1 | // Return vendor-prefixed property names if appropriate 2 | // Example: transition-property-names((transform, color, background), moz) -> -moz-transform, color, background 3 | //************************************************************************// 4 | @function transition-property-names($props, $vendor: false) { 5 | $new-props: (); 6 | 7 | @each $prop in $props { 8 | $new-props: append($new-props, transition-property-name($prop, $vendor), comma); 9 | } 10 | 11 | @return $new-props; 12 | } 13 | 14 | @function transition-property-name($prop, $vendor: false) { 15 | // put other properties that need to be prefixed here aswell 16 | @if $vendor and $prop == transform { 17 | @return unquote('-'+$vendor+'-'+$prop); 18 | } 19 | @else { 20 | @return $prop; 21 | } 22 | } -------------------------------------------------------------------------------- /assets/_sass/bourbon/functions/_unpack.scss: -------------------------------------------------------------------------------- 1 | // Convert shorthand to the 4-value syntax 2 | 3 | @function unpack($shorthand) { 4 | @if length($shorthand) == 1 { 5 | @return nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1); 6 | } 7 | @else if length($shorthand) == 2 { 8 | @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 1) nth($shorthand, 2); 9 | } 10 | @else if length($shorthand) == 3 { 11 | @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 3) nth($shorthand, 2); 12 | } 13 | @else { 14 | @return $shorthand; 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/helpers/_convert-units.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Helper function for str-to-num fn. 3 | // Source: http://sassmeister.com/gist/9647408 4 | //************************************************************************// 5 | @function _convert-units($number, $unit) { 6 | $strings: 'px' 'cm' 'mm' '%' 'ch' 'pica' 'in' 'em' 'rem' 'pt' 'pc' 'ex' 'vw' 'vh' 'vmin' 'vmax', 'deg', 'rad', 'grad', 'turn'; 7 | $units: 1px 1cm 1mm 1% 1ch 1pica 1in 1em 1rem 1pt 1pc 1ex 1vw 1vh 1vmin 1vmax, 1deg, 1rad, 1grad, 1turn; 8 | $index: index($strings, $unit); 9 | 10 | @if not $index { 11 | @warn "Unknown unit `#{$unit}`."; 12 | @return false; 13 | } 14 | @return $number * nth($units, $index); 15 | } 16 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/helpers/_gradient-positions-parser.scss: -------------------------------------------------------------------------------- 1 | @function _gradient-positions-parser($gradient-type, $gradient-positions) { 2 | @if $gradient-positions 3 | and ($gradient-type == linear) 4 | and (type-of($gradient-positions) != color) { 5 | $gradient-positions: _linear-positions-parser($gradient-positions); 6 | } 7 | @else if $gradient-positions 8 | and ($gradient-type == radial) 9 | and (type-of($gradient-positions) != color) { 10 | $gradient-positions: _radial-positions-parser($gradient-positions); 11 | } 12 | @return $gradient-positions; 13 | } 14 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/helpers/_is-num.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Helper for linear-gradient-parser 3 | //************************************************************************// 4 | @function _is-num($char) { 5 | $values: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' 0 1 2 3 4 5 6 7 8 9; 6 | $index: index($values, $char); 7 | @return if($index, true, false); 8 | } 9 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/helpers/_linear-angle-parser.scss: -------------------------------------------------------------------------------- 1 | // Private function for linear-gradient-parser 2 | @function _linear-angle-parser($image, $first-val, $prefix, $suffix) { 3 | $offset: null; 4 | $unit-short: str-slice($first-val, str-length($first-val) - 2, str-length($first-val)); 5 | $unit-long: str-slice($first-val, str-length($first-val) - 3, str-length($first-val)); 6 | 7 | @if ($unit-long == "grad") or 8 | ($unit-long == "turn") { 9 | $offset: if($unit-long == "grad", -100grad * 3, -0.75turn); 10 | } 11 | 12 | @else if ($unit-short == "deg") or 13 | ($unit-short == "rad") { 14 | $offset: if($unit-short == "deg", -90 * 3, 1.6rad); 15 | } 16 | 17 | @if $offset { 18 | $num: _str-to-num($first-val); 19 | 20 | @return ( 21 | webkit-image: -webkit- + $prefix + ($offset - $num) + $suffix, 22 | spec-image: $image 23 | ); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/helpers/_linear-gradient-parser.scss: -------------------------------------------------------------------------------- 1 | @function _linear-gradient-parser($image) { 2 | $image: unquote($image); 3 | $gradients: (); 4 | $start: str-index($image, "("); 5 | $end: str-index($image, ","); 6 | $first-val: str-slice($image, $start + 1, $end - 1); 7 | 8 | $prefix: str-slice($image, 0, $start); 9 | $suffix: str-slice($image, $end, str-length($image)); 10 | 11 | $has-multiple-vals: str-index($first-val, " "); 12 | $has-single-position: unquote(_position-flipper($first-val) + ""); 13 | $has-angle: _is-num(str-slice($first-val, 0, 0)); 14 | 15 | @if $has-multiple-vals { 16 | $gradients: _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals); 17 | } 18 | 19 | @else if $has-single-position != "" { 20 | $pos: unquote($has-single-position + ""); 21 | 22 | $gradients: ( 23 | webkit-image: -webkit- + $image, 24 | spec-image: $prefix + "to " + $pos + $suffix 25 | ); 26 | } 27 | 28 | @else if $has-angle { 29 | // Rotate degree for webkit 30 | $gradients: _linear-angle-parser($image, $first-val, $prefix, $suffix); 31 | } 32 | 33 | @else { 34 | $gradients: ( 35 | webkit-image: -webkit- + $image, 36 | spec-image: $image 37 | ); 38 | } 39 | 40 | @return $gradients; 41 | } 42 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/helpers/_linear-positions-parser.scss: -------------------------------------------------------------------------------- 1 | @function _linear-positions-parser($pos) { 2 | $type: type-of(nth($pos, 1)); 3 | $spec: null; 4 | $degree: null; 5 | $side: null; 6 | $corner: null; 7 | $length: length($pos); 8 | // Parse Side and corner positions 9 | @if ($length > 1) { 10 | @if nth($pos, 1) == "to" { // Newer syntax 11 | $side: nth($pos, 2); 12 | 13 | @if $length == 2 { // eg. to top 14 | // Swap for backwards compatability 15 | $degree: _position-flipper(nth($pos, 2)); 16 | } 17 | @else if $length == 3 { // eg. to top left 18 | $corner: nth($pos, 3); 19 | } 20 | } 21 | @else if $length == 2 { // Older syntax ("top left") 22 | $side: _position-flipper(nth($pos, 1)); 23 | $corner: _position-flipper(nth($pos, 2)); 24 | } 25 | 26 | @if ("#{$side} #{$corner}" == "left top") or ("#{$side} #{$corner}" == "top left") { 27 | $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); 28 | } 29 | @else if ("#{$side} #{$corner}" == "right top") or ("#{$side} #{$corner}" == "top right") { 30 | $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); 31 | } 32 | @else if ("#{$side} #{$corner}" == "right bottom") or ("#{$side} #{$corner}" == "bottom right") { 33 | $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); 34 | } 35 | @else if ("#{$side} #{$corner}" == "left bottom") or ("#{$side} #{$corner}" == "bottom left") { 36 | $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); 37 | } 38 | $spec: to $side $corner; 39 | } 40 | @else if $length == 1 { 41 | // Swap for backwards compatability 42 | @if $type == string { 43 | $degree: $pos; 44 | $spec: to _position-flipper($pos); 45 | } 46 | @else { 47 | $degree: -270 - $pos; //rotate the gradient opposite from spec 48 | $spec: $pos; 49 | } 50 | } 51 | $degree: unquote($degree + ","); 52 | $spec: unquote($spec + ","); 53 | @return $degree $spec; 54 | } 55 | 56 | @function _position-flipper($pos) { 57 | @return if($pos == left, right, null) 58 | if($pos == right, left, null) 59 | if($pos == top, bottom, null) 60 | if($pos == bottom, top, null); 61 | } 62 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/helpers/_linear-side-corner-parser.scss: -------------------------------------------------------------------------------- 1 | // Private function for linear-gradient-parser 2 | @function _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals) { 3 | $val-1: str-slice($first-val, 0, $has-multiple-vals - 1 ); 4 | $val-2: str-slice($first-val, $has-multiple-vals + 1, str-length($first-val)); 5 | $val-3: null; 6 | $has-val-3: str-index($val-2, " "); 7 | 8 | @if $has-val-3 { 9 | $val-3: str-slice($val-2, $has-val-3 + 1, str-length($val-2)); 10 | $val-2: str-slice($val-2, 0, $has-val-3 - 1); 11 | } 12 | 13 | $pos: _position-flipper($val-1) _position-flipper($val-2) _position-flipper($val-3); 14 | $pos: unquote($pos + ""); 15 | 16 | // Use old spec for webkit 17 | @if $val-1 == "to" { 18 | @return ( 19 | webkit-image: -webkit- + $prefix + $pos + $suffix, 20 | spec-image: $image 21 | ); 22 | } 23 | 24 | // Bring the code up to spec 25 | @else { 26 | @return ( 27 | webkit-image: -webkit- + $image, 28 | spec-image: $prefix + "to " + $pos + $suffix 29 | ); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/helpers/_radial-arg-parser.scss: -------------------------------------------------------------------------------- 1 | @function _radial-arg-parser($G1, $G2, $pos, $shape-size) { 2 | @each $value in $G1, $G2 { 3 | $first-val: nth($value, 1); 4 | $pos-type: type-of($first-val); 5 | $spec-at-index: null; 6 | 7 | // Determine if spec was passed to mixin 8 | @if type-of($value) == list { 9 | $spec-at-index: if(index($value, at), index($value, at), false); 10 | } 11 | @if $spec-at-index { 12 | @if $spec-at-index > 1 { 13 | @for $i from 1 through ($spec-at-index - 1) { 14 | $shape-size: $shape-size nth($value, $i); 15 | } 16 | @for $i from ($spec-at-index + 1) through length($value) { 17 | $pos: $pos nth($value, $i); 18 | } 19 | } 20 | @else if $spec-at-index == 1 { 21 | @for $i from ($spec-at-index + 1) through length($value) { 22 | $pos: $pos nth($value, $i); 23 | } 24 | } 25 | $G1: null; 26 | } 27 | 28 | // If not spec calculate correct values 29 | @else { 30 | @if ($pos-type != color) or ($first-val != "transparent") { 31 | @if ($pos-type == number) 32 | or ($first-val == "center") 33 | or ($first-val == "top") 34 | or ($first-val == "right") 35 | or ($first-val == "bottom") 36 | or ($first-val == "left") { 37 | 38 | $pos: $value; 39 | 40 | @if $pos == $G1 { 41 | $G1: null; 42 | } 43 | } 44 | 45 | @else if 46 | ($first-val == "ellipse") 47 | or ($first-val == "circle") 48 | or ($first-val == "closest-side") 49 | or ($first-val == "closest-corner") 50 | or ($first-val == "farthest-side") 51 | or ($first-val == "farthest-corner") 52 | or ($first-val == "contain") 53 | or ($first-val == "cover") { 54 | 55 | $shape-size: $value; 56 | 57 | @if $value == $G1 { 58 | $G1: null; 59 | } 60 | 61 | @else if $value == $G2 { 62 | $G2: null; 63 | } 64 | } 65 | } 66 | } 67 | } 68 | @return $G1, $G2, $pos, $shape-size; 69 | } 70 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/helpers/_radial-gradient-parser.scss: -------------------------------------------------------------------------------- 1 | @function _radial-gradient-parser($image) { 2 | $image: unquote($image); 3 | $gradients: (); 4 | $start: str-index($image, "("); 5 | $end: str-index($image, ","); 6 | $first-val: str-slice($image, $start + 1, $end - 1); 7 | 8 | $prefix: str-slice($image, 0, $start); 9 | $suffix: str-slice($image, $end, str-length($image)); 10 | 11 | $is-spec-syntax: str-index($first-val, "at"); 12 | 13 | @if $is-spec-syntax and $is-spec-syntax > 1 { 14 | $keyword: str-slice($first-val, 1, $is-spec-syntax - 2); 15 | $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val)); 16 | $pos: append($pos, $keyword, comma); 17 | 18 | $gradients: ( 19 | webkit-image: -webkit- + $prefix + $pos + $suffix, 20 | spec-image: $image 21 | ) 22 | } 23 | 24 | @else if $is-spec-syntax == 1 { 25 | $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val)); 26 | 27 | $gradients: ( 28 | webkit-image: -webkit- + $prefix + $pos + $suffix, 29 | spec-image: $image 30 | ) 31 | } 32 | 33 | @else if str-index($image, "cover") or str-index($image, "contain") { 34 | @warn "Radial-gradient needs to be updated to conform to latest spec."; 35 | 36 | $gradients: ( 37 | webkit-image: null, 38 | spec-image: $image 39 | ) 40 | } 41 | 42 | @else { 43 | $gradients: ( 44 | webkit-image: -webkit- + $image, 45 | spec-image: $image 46 | ) 47 | } 48 | 49 | @return $gradients; 50 | } 51 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/helpers/_radial-positions-parser.scss: -------------------------------------------------------------------------------- 1 | @function _radial-positions-parser($gradient-pos) { 2 | $shape-size: nth($gradient-pos, 1); 3 | $pos: nth($gradient-pos, 2); 4 | $shape-size-spec: _shape-size-stripper($shape-size); 5 | 6 | $pre-spec: unquote(if($pos, "#{$pos}, ", null)) 7 | unquote(if($shape-size, "#{$shape-size},", null)); 8 | $pos-spec: if($pos, "at #{$pos}", null); 9 | 10 | $spec: "#{$shape-size-spec} #{$pos-spec}"; 11 | 12 | // Add comma 13 | @if ($spec != ' ') { 14 | $spec: "#{$spec}," 15 | } 16 | 17 | @return $pre-spec $spec; 18 | } 19 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/helpers/_render-gradients.scss: -------------------------------------------------------------------------------- 1 | // User for linear and radial gradients within background-image or border-image properties 2 | 3 | @function _render-gradients($gradient-positions, $gradients, $gradient-type, $vendor: false) { 4 | $pre-spec: null; 5 | $spec: null; 6 | $vendor-gradients: null; 7 | @if $gradient-type == linear { 8 | @if $gradient-positions { 9 | $pre-spec: nth($gradient-positions, 1); 10 | $spec: nth($gradient-positions, 2); 11 | } 12 | } 13 | @else if $gradient-type == radial { 14 | $pre-spec: nth($gradient-positions, 1); 15 | $spec: nth($gradient-positions, 2); 16 | } 17 | 18 | @if $vendor { 19 | $vendor-gradients: -#{$vendor}-#{$gradient-type}-gradient(#{$pre-spec} $gradients); 20 | } 21 | @else if $vendor == false { 22 | $vendor-gradients: "#{$gradient-type}-gradient(#{$spec} #{$gradients})"; 23 | $vendor-gradients: unquote($vendor-gradients); 24 | } 25 | @return $vendor-gradients; 26 | } 27 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/helpers/_shape-size-stripper.scss: -------------------------------------------------------------------------------- 1 | @function _shape-size-stripper($shape-size) { 2 | $shape-size-spec: null; 3 | @each $value in $shape-size { 4 | @if ($value == "cover") or ($value == "contain") { 5 | $value: null; 6 | } 7 | $shape-size-spec: "#{$shape-size-spec} #{$value}"; 8 | } 9 | @return $shape-size-spec; 10 | } 11 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/helpers/_str-to-num.scss: -------------------------------------------------------------------------------- 1 | //************************************************************************// 2 | // Helper function for linear/radial-gradient-parsers. 3 | // Source: http://sassmeister.com/gist/9647408 4 | //************************************************************************// 5 | @function _str-to-num($string) { 6 | // Matrices 7 | $strings: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9'; 8 | $numbers: 0 1 2 3 4 5 6 7 8 9; 9 | 10 | // Result 11 | $result: 0; 12 | $divider: 0; 13 | $minus: false; 14 | 15 | // Looping through all characters 16 | @for $i from 1 through str-length($string) { 17 | $character: str-slice($string, $i, $i); 18 | $index: index($strings, $character); 19 | 20 | @if $character == '-' { 21 | $minus: true; 22 | } 23 | 24 | @else if $character == '.' { 25 | $divider: 1; 26 | } 27 | 28 | @else { 29 | @if not $index { 30 | $result: if($minus, $result * -1, $result); 31 | @return _convert-units($result, str-slice($string, $i)); 32 | } 33 | 34 | $number: nth($numbers, $index); 35 | 36 | @if $divider == 0 { 37 | $result: $result * 10; 38 | } 39 | 40 | @else { 41 | // Move the decimal dot to the left 42 | $divider: $divider * 10; 43 | $number: $number / $divider; 44 | } 45 | 46 | $result: $result + $number; 47 | } 48 | } 49 | @return if($minus, $result * -1, $result); 50 | } 51 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/settings/_prefixer.scss: -------------------------------------------------------------------------------- 1 | // Variable settings for /addons/prefixer.scss 2 | $prefix-for-webkit: true !default; 3 | $prefix-for-mozilla: true !default; 4 | $prefix-for-microsoft: true !default; 5 | $prefix-for-opera: true !default; 6 | $prefix-for-spec: true !default; // required for keyframe mixin 7 | -------------------------------------------------------------------------------- /assets/_sass/bourbon/settings/_px-to-em.scss: -------------------------------------------------------------------------------- 1 | $em-base: 16px !default; 2 | -------------------------------------------------------------------------------- /assets/_sass/neat/_neat-helpers.scss: -------------------------------------------------------------------------------- 1 | // Functions 2 | @import "functions/private"; 3 | @import "functions/new-breakpoint"; 4 | 5 | // Settings 6 | @import "settings/grid"; 7 | @import "settings/visual-grid"; 8 | -------------------------------------------------------------------------------- /assets/_sass/neat/_neat.scss: -------------------------------------------------------------------------------- 1 | // Bourbon Neat 1.6.0.pre 2 | // MIT Licensed 3 | // Copyright (c) 2012-2013 thoughtbot, inc. 4 | 5 | // Helpers 6 | @import "neat-helpers"; 7 | 8 | // Grid 9 | @import "grid/private"; 10 | @import "grid/reset"; 11 | @import "grid/grid"; 12 | @import "grid/omega"; 13 | @import "grid/outer-container"; 14 | @import "grid/span-columns"; 15 | @import "grid/row"; 16 | @import "grid/shift"; 17 | @import "grid/pad"; 18 | @import "grid/fill-parent"; 19 | @import "grid/media"; 20 | @import "grid/to-deprecate"; 21 | @import "grid/visual-grid"; 22 | -------------------------------------------------------------------------------- /assets/_sass/neat/functions/_new-breakpoint.scss: -------------------------------------------------------------------------------- 1 | @function new-breakpoint($query:$feature $value $columns, $total-columns: $grid-columns) { 2 | 3 | @if length($query) == 1 { 4 | $query: $default-feature nth($query, 1) $total-columns; 5 | } 6 | 7 | @else if length($query) % 2 == 0 { 8 | $query: append($query, $total-columns); 9 | } 10 | 11 | @if not belongs-to($query, $visual-grid-breakpoints) { 12 | $visual-grid-breakpoints: append($visual-grid-breakpoints, $query, comma) !global; 13 | } 14 | 15 | @return $query; 16 | } 17 | -------------------------------------------------------------------------------- /assets/_sass/neat/functions/_private.scss: -------------------------------------------------------------------------------- 1 | // Checks if a number is even 2 | @function is-even($int) { 3 | @if $int%2 == 0 { 4 | @return true; 5 | } 6 | 7 | @return false; 8 | } 9 | 10 | // Checks if an element belongs to a list 11 | @function belongs-to($tested-item, $list) { 12 | @each $item in $list { 13 | @if $item == $tested-item { 14 | @return true; 15 | } 16 | } 17 | 18 | @return false; 19 | } 20 | 21 | // Contains display value 22 | @function contains-display-value($query) { 23 | @if belongs-to(table, $query) or belongs-to(block, $query) or belongs-to(inline-block, $query) or belongs-to(inline, $query) { 24 | @return true; 25 | } 26 | 27 | @return false; 28 | } 29 | 30 | // Parses the first argument of span-columns() 31 | @function container-span($span: $span) { 32 | @if length($span) == 3 { 33 | $container-columns: nth($span, 3); 34 | @return $container-columns; 35 | } 36 | 37 | @else if length($span) == 2 { 38 | $container-columns: nth($span, 2); 39 | @return $container-columns; 40 | } 41 | 42 | @else { 43 | @return $grid-columns; 44 | } 45 | } 46 | 47 | @function container-shift($shift: $shift) { 48 | $parent-columns: $grid-columns !global !default; 49 | 50 | @if length($shift) == 3 { 51 | $container-columns: nth($shift, 3); 52 | @return $container-columns; 53 | } 54 | 55 | @else if length($shift) == 2 { 56 | $container-columns: nth($shift, 2); 57 | @return $container-columns; 58 | } 59 | 60 | @else { 61 | @return $parent-columns; 62 | } 63 | } 64 | 65 | // Generates a striped background 66 | @function gradient-stops($grid-columns, $color: $visual-grid-color) { 67 | $transparent: rgba(0,0,0,0); 68 | 69 | $column-width: flex-grid(1, $grid-columns); 70 | $gutter-width: flex-gutter($grid-columns); 71 | $column-offset: $column-width; 72 | 73 | $values: ($transparent 0, $color 0); 74 | 75 | @for $i from 1 to $grid-columns*2 { 76 | @if is-even($i) { 77 | $values: append($values, $transparent $column-offset, comma); 78 | $values: append($values, $color $column-offset, comma); 79 | $column-offset: $column-offset + $column-width; 80 | } 81 | 82 | @else { 83 | $values: append($values, $color $column-offset, comma); 84 | $values: append($values, $transparent $column-offset, comma); 85 | $column-offset: $column-offset + $gutter-width; 86 | } 87 | } 88 | 89 | @return $values; 90 | } 91 | 92 | // Layout direction 93 | @function get-direction($layout, $default) { 94 | $direction: nil; 95 | 96 | @if $layout == LTR or $layout == RTL { 97 | $direction: direction-from-layout($layout); 98 | } @else { 99 | $direction: direction-from-layout($default); 100 | } 101 | 102 | @return $direction; 103 | } 104 | 105 | @function direction-from-layout($layout) { 106 | $direction: nil; 107 | 108 | @if $layout == LTR { 109 | $direction: right; 110 | } @else { 111 | $direction: left; 112 | } 113 | 114 | @return $direction; 115 | } 116 | 117 | @function get-opposite-direction($direction) { 118 | $opposite-direction: left; 119 | 120 | @if $direction == left { 121 | $opposite-direction: right; 122 | } 123 | 124 | @return $opposite-direction; 125 | } 126 | -------------------------------------------------------------------------------- /assets/_sass/neat/grid/_fill-parent.scss: -------------------------------------------------------------------------------- 1 | @mixin fill-parent() { 2 | width: 100%; 3 | 4 | @if $border-box-sizing == false { 5 | @include box-sizing(border-box); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /assets/_sass/neat/grid/_grid.scss: -------------------------------------------------------------------------------- 1 | @if $border-box-sizing == true { 2 | * { 3 | @include box-sizing(border-box); 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /assets/_sass/neat/grid/_media.scss: -------------------------------------------------------------------------------- 1 | @mixin media($query:$feature $value $columns, $total-columns: $grid-columns) { 2 | @if length($query) == 1 { 3 | @media screen and ($default-feature: nth($query, 1)) { 4 | $default-grid-columns: $grid-columns; 5 | $grid-columns: $total-columns !global; 6 | @content; 7 | $grid-columns: $default-grid-columns !global; 8 | } 9 | } 10 | 11 | @else { 12 | $loopTo: length($query); 13 | $mediaQuery: 'screen and '; 14 | $default-grid-columns: $grid-columns; 15 | $grid-columns: $total-columns !global; 16 | 17 | @if length($query) % 2 != 0 { 18 | $grid-columns: nth($query, $loopTo) !global; 19 | $loopTo: $loopTo - 1; 20 | } 21 | 22 | $i: 1; 23 | @while $i <= $loopTo { 24 | $mediaQuery: $mediaQuery + '(' + nth($query, $i) + ': ' + nth($query, $i + 1) + ') '; 25 | 26 | @if ($i + 1) != $loopTo { 27 | $mediaQuery: $mediaQuery + 'and '; 28 | } 29 | 30 | $i: $i + 2; 31 | } 32 | 33 | @media #{$mediaQuery} { 34 | @content; 35 | $grid-columns: $default-grid-columns !global; 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /assets/_sass/neat/grid/_omega.scss: -------------------------------------------------------------------------------- 1 | // Remove last element gutter 2 | @mixin omega($query: block, $direction: default) { 3 | $table: if(belongs-to(table, $query), true, false); 4 | $auto: if(belongs-to(auto, $query), true, false); 5 | 6 | @if $direction != default { 7 | @warn "The omega mixin will no longer take a $direction argument. To change the layout direction, use row($direction) or set $default-layout-direction instead." 8 | } @else { 9 | $direction: get-direction($layout-direction, $default-layout-direction); 10 | } 11 | 12 | @if $table { 13 | @warn "The omega mixin no longer removes padding in table layouts." 14 | } 15 | 16 | @if length($query) == 1 { 17 | @if $auto { 18 | &:last-child { 19 | margin-#{$direction}: 0; 20 | } 21 | } 22 | 23 | @else if contains-display-value($query) and $table == false { 24 | margin-#{$direction}: 0; 25 | } 26 | 27 | @else { 28 | @include nth-child($query, $direction); 29 | } 30 | } 31 | 32 | @else if length($query) == 2 { 33 | @if $auto { 34 | &:last-child { 35 | margin-#{$direction}: 0; 36 | } 37 | } 38 | 39 | @else { 40 | @include nth-child(nth($query, 1), $direction); 41 | } 42 | } 43 | 44 | @else { 45 | @warn "Too many arguments passed to the omega() mixin." 46 | } 47 | } 48 | 49 | @mixin nth-child($query, $direction) { 50 | $opposite-direction: get-opposite-direction($direction); 51 | 52 | &:nth-child(#{$query}) { 53 | margin-#{$direction}: 0; 54 | } 55 | 56 | @if type-of($query) == number { 57 | &:nth-child(#{$query}+1) { 58 | clear: $opposite-direction; 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /assets/_sass/neat/grid/_outer-container.scss: -------------------------------------------------------------------------------- 1 | @mixin outer-container { 2 | @include clearfix; 3 | max-width: $max-width; 4 | margin: { 5 | left: auto; 6 | right: auto; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /assets/_sass/neat/grid/_pad.scss: -------------------------------------------------------------------------------- 1 | @mixin pad($padding: flex-gutter()) { 2 | $padding-list: null; 3 | @each $value in $padding { 4 | $value: if($value == 'default', flex-gutter(), $value); 5 | $padding-list: join($padding-list, $value); 6 | } 7 | padding: $padding-list; 8 | } 9 | -------------------------------------------------------------------------------- /assets/_sass/neat/grid/_private.scss: -------------------------------------------------------------------------------- 1 | $parent-columns: $grid-columns !default; 2 | $fg-column: $column; 3 | $fg-gutter: $gutter; 4 | $fg-max-columns: $grid-columns; 5 | $container-display-table: false !default; 6 | $layout-direction: nil !default; 7 | 8 | @function flex-grid($columns, $container-columns: $fg-max-columns) { 9 | $width: $columns * $fg-column + ($columns - 1) * $fg-gutter; 10 | $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter; 11 | @return percentage($width / $container-width); 12 | } 13 | 14 | @function flex-gutter($container-columns: $fg-max-columns, $gutter: $fg-gutter) { 15 | $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter; 16 | @return percentage($gutter / $container-width); 17 | } 18 | 19 | @function grid-width($n) { 20 | @return $n * $gw-column + ($n - 1) * $gw-gutter; 21 | } 22 | 23 | @function get-parent-columns($columns) { 24 | @if $columns != $grid-columns { 25 | $parent-columns: $columns !global; 26 | } @else { 27 | $parent-columns: $grid-columns !global; 28 | } 29 | 30 | @return $parent-columns; 31 | } 32 | 33 | @function is-display-table($container-is-display-table, $display) { 34 | $display-table: false; 35 | 36 | @if $container-is-display-table == true { 37 | $display-table: true; 38 | } @else if $display == table { 39 | $display-table: true; 40 | } 41 | 42 | @return $display-table; 43 | } 44 | -------------------------------------------------------------------------------- /assets/_sass/neat/grid/_reset.scss: -------------------------------------------------------------------------------- 1 | @mixin reset-display { 2 | $container-display-table: false !global; 3 | } 4 | 5 | @mixin reset-layout-direction { 6 | $layout-direction: $default-layout-direction !global; 7 | } 8 | 9 | @mixin reset-all { 10 | @include reset-display; 11 | @include reset-layout-direction; 12 | } 13 | -------------------------------------------------------------------------------- /assets/_sass/neat/grid/_row.scss: -------------------------------------------------------------------------------- 1 | @mixin row($display: block, $direction: $default-layout-direction) { 2 | @include clearfix; 3 | $layout-direction: $direction !global; 4 | 5 | @if $display == table { 6 | display: table; 7 | @include fill-parent; 8 | table-layout: fixed; 9 | $container-display-table: true !global; 10 | } 11 | 12 | @else { 13 | display: block; 14 | $container-display-table: false !global; 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /assets/_sass/neat/grid/_shift.scss: -------------------------------------------------------------------------------- 1 | @mixin shift($n-columns: 1) { 2 | @include shift-in-context($n-columns); 3 | } 4 | 5 | @mixin shift-in-context($shift: $columns of $container-columns) { 6 | $n-columns: nth($shift, 1); 7 | $parent-columns: container-shift($shift) !global; 8 | 9 | $direction: get-direction($layout-direction, $default-layout-direction); 10 | $opposite-direction: get-opposite-direction($direction); 11 | 12 | margin-#{$opposite-direction}: $n-columns * flex-grid(1, $parent-columns) + $n-columns * flex-gutter($parent-columns); 13 | 14 | // Reset nesting context 15 | $parent-columns: $grid-columns !global; 16 | } 17 | -------------------------------------------------------------------------------- /assets/_sass/neat/grid/_span-columns.scss: -------------------------------------------------------------------------------- 1 | @mixin span-columns($span: $columns of $container-columns, $display: block) { 2 | $columns: nth($span, 1); 3 | $container-columns: container-span($span); 4 | 5 | // Set nesting context (used by shift()) 6 | $parent-columns: get-parent-columns($container-columns) !global; 7 | 8 | $direction: get-direction($layout-direction, $default-layout-direction); 9 | $opposite-direction: get-opposite-direction($direction); 10 | 11 | $display-table: is-display-table($container-display-table, $display); 12 | 13 | @if $display-table { 14 | display: table-cell; 15 | width: percentage($columns / $container-columns); 16 | } @else { 17 | float: #{$opposite-direction}; 18 | 19 | @if $display != no-display { 20 | display: block; 21 | } 22 | 23 | @if $display == collapse { 24 | @warn "The 'collapse' argument will be deprecated. Use 'block-collapse' instead." 25 | } 26 | 27 | @if $display == collapse or $display == block-collapse { 28 | width: flex-grid($columns, $container-columns) + flex-gutter($container-columns); 29 | 30 | &:last-child { 31 | width: flex-grid($columns, $container-columns); 32 | } 33 | 34 | } @else { 35 | margin-#{$direction}: flex-gutter($container-columns); 36 | width: flex-grid($columns, $container-columns); 37 | 38 | &:last-child { 39 | margin-#{$direction}: 0; 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /assets/_sass/neat/grid/_to-deprecate.scss: -------------------------------------------------------------------------------- 1 | @mixin breakpoint($query:$feature $value $columns, $total-columns: $grid-columns) { 2 | @warn "The breakpoint() mixin was renamed to media() in Neat 1.0. Please update your project with the new syntax before the next version bump."; 3 | 4 | @if length($query) == 1 { 5 | @media screen and ($default-feature: nth($query, 1)) { 6 | $default-grid-columns: $grid-columns; 7 | $grid-columns: $total-columns; 8 | @content; 9 | $grid-columns: $default-grid-columns; 10 | } 11 | } 12 | 13 | @else if length($query) == 2 { 14 | @media screen and (nth($query, 1): nth($query, 2)) { 15 | $default-grid-columns: $grid-columns; 16 | $grid-columns: $total-columns; 17 | @content; 18 | $grid-columns: $default-grid-columns; 19 | } 20 | } 21 | 22 | @else if length($query) == 3 { 23 | @media screen and (nth($query, 1): nth($query, 2)) { 24 | $default-grid-columns: $grid-columns; 25 | $grid-columns: nth($query, 3); 26 | @content; 27 | $grid-columns: $default-grid-columns; 28 | } 29 | } 30 | 31 | @else if length($query) == 4 { 32 | @media screen and (nth($query, 1): nth($query, 2)) and (nth($query, 3): nth($query, 4)) { 33 | $default-grid-columns: $grid-columns; 34 | $grid-columns: $total-columns; 35 | @content; 36 | $grid-columns: $default-grid-columns; 37 | } 38 | } 39 | 40 | @else if length($query) == 5 { 41 | @media screen and (nth($query, 1): nth($query, 2)) and (nth($query, 3): nth($query, 4)) { 42 | $default-grid-columns: $grid-columns; 43 | $grid-columns: nth($query, 5); 44 | @content; 45 | $grid-columns: $default-grid-columns; 46 | } 47 | } 48 | 49 | @else { 50 | @warn "Wrong number of arguments for breakpoint(). Read the documentation for more details."; 51 | } 52 | } 53 | 54 | @mixin nth-omega($nth, $display: block, $direction: default) { 55 | @warn "The nth-omega() mixin is deprecated. Please use omega() instead."; 56 | @include omega($nth $display, $direction); 57 | } 58 | -------------------------------------------------------------------------------- /assets/_sass/neat/grid/_visual-grid.scss: -------------------------------------------------------------------------------- 1 | @mixin grid-column-gradient($values...) { 2 | background-image: deprecated-webkit-gradient(linear, left top, left bottom, $values); 3 | background-image: -webkit-linear-gradient(left, $values); 4 | background-image: -moz-linear-gradient(left, $values); 5 | background-image: -ms-linear-gradient(left, $values); 6 | background-image: -o-linear-gradient(left, $values); 7 | background-image: unquote("linear-gradient(left, #{$values})"); 8 | } 9 | 10 | @if $visual-grid == true or $visual-grid == yes { 11 | body:before { 12 | content: ''; 13 | display: inline-block; 14 | @include grid-column-gradient(gradient-stops($grid-columns)); 15 | height: 100%; 16 | left: 0; 17 | margin: 0 auto; 18 | max-width: $max-width; 19 | opacity: $visual-grid-opacity; 20 | position: fixed; 21 | right: 0; 22 | width: 100%; 23 | pointer-events: none; 24 | 25 | @if $visual-grid-index == back { 26 | z-index: -1; 27 | } 28 | 29 | @else if $visual-grid-index == front { 30 | z-index: 9999; 31 | } 32 | 33 | @each $breakpoint in $visual-grid-breakpoints { 34 | @if $breakpoint != nil { 35 | @include media($breakpoint) { 36 | @include grid-column-gradient(gradient-stops($grid-columns)); 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /assets/_sass/neat/settings/_grid.scss: -------------------------------------------------------------------------------- 1 | $column: golden-ratio(1em, 3) !default; // Column width 2 | $gutter: golden-ratio(1em, 1) !default; // Gutter between each two columns 3 | $grid-columns: 12 !default; // Total number of columns in the grid 4 | $max-width: em(1088) !default; // Max-width of the outer container 5 | $border-box-sizing: true !default; // Makes all elements have a border-box layout 6 | $default-feature: min-width; // Default @media feature for the breakpoint() mixin 7 | $default-layout-direction: LTR !default; 8 | -------------------------------------------------------------------------------- /assets/_sass/neat/settings/_visual-grid.scss: -------------------------------------------------------------------------------- 1 | $visual-grid: false !default; // Display the base grid 2 | $visual-grid-color: #EEE !default; 3 | $visual-grid-index: back !default; // Show grid behind content (back) or overlay it over the content (front) 4 | $visual-grid-opacity: 0.4 !default; 5 | $visual-grid-breakpoints: () !default; 6 | -------------------------------------------------------------------------------- /assets/_sass/styles.scss: -------------------------------------------------------------------------------- 1 | @import "bourbon/bourbon"; 2 | @import "neat/neat"; 3 | 4 | // Colors 5 | $atlantic_blue: #36435a; 6 | $pacific_blue: #3A96B7; 7 | $miami_vice_blue: #3A96B7; 8 | $white: #fff; 9 | $black: #333; 10 | $gray: #4D4D4D; 11 | $background_white: #fff; 12 | $gray_blue: #a5a8b7; 13 | 14 | // Fonts 15 | $serif: 'Merriweather', Georgia, serif; 16 | $sans-serif: 'Open Sans', sans-serif; 17 | 18 | // Mobile Breakpoints 19 | $mobile: new-breakpoint(min-width 0px max-width 640px 4); 20 | $slimmer: new-breakpoint(min-width 641px max-width 980px 12); 21 | 22 | @media screen { 23 | body { 24 | background: $background_white; 25 | font-family: $serif; 26 | margin: 0; 27 | line-height: 28px; 28 | } 29 | 30 | body#techfar_landing_page { 31 | background: $atlantic_blue; 32 | } 33 | 34 | a { 35 | color: inherit; 36 | font-family: inherit; 37 | font-weight: inherit; 38 | text-decoration: none; 39 | } 40 | 41 | a.anchor_offset { 42 | display: block; 43 | position: relative; 44 | top: -60px; 45 | visibility: hidden; 46 | } 47 | 48 | a:hover { 49 | text-decoration: underline; 50 | } 51 | 52 | ol, ul { 53 | list-style-type: decimal; 54 | list-style-position: inside; 55 | li { 56 | margin: 1em 0; 57 | color: $black; 58 | } 59 | } 60 | 61 | h1 { 62 | font-size: 50px; 63 | font-weight: 300; 64 | border-bottom: 1px solid $white; 65 | padding-bottom: 0.25em; 66 | margin-bottom: 20px; 67 | line-height: 65px; 68 | @include media($mobile){ 69 | font-size: 28px; 70 | line-height: 36px; 71 | } 72 | } 73 | 74 | h2 { 75 | font-family: $serif; 76 | font-size: 54px; 77 | line-height: 65px; 78 | font-weight: 300; 79 | margin-top: 0; 80 | color: $black; 81 | @include media($mobile) { 82 | font-size: 32px; 83 | line-height: 42px; 84 | } 85 | } 86 | 87 | h3 { 88 | font-family: $sans-serif; 89 | font-size: 18px; 90 | } 91 | 92 | h4 { 93 | font-family: $serif; 94 | font-size: 18px; 95 | color: $miami_vice_blue; 96 | margin-bottom: 0; 97 | } 98 | 99 | h5 { 100 | font-family: $sans-serif; 101 | font-size: 14px; 102 | margin-bottom: 15px; 103 | color: $black; 104 | font-weight: lighter; 105 | } 106 | 107 | p { 108 | color: $black; 109 | } 110 | 111 | .outer_container { 112 | @include outer-container(); 113 | padding: 40px; 114 | 115 | @include media($mobile) { 116 | padding: 20px; 117 | } 118 | } 119 | 120 | .inner_container { 121 | @include shift(1); 122 | @include span-columns(10); 123 | 124 | @include media($mobile) { 125 | @include shift(0); 126 | @include span-columns(4); 127 | } 128 | 129 | @include media($slimmer) { 130 | @include shift(0); 131 | @include span-columns(12); 132 | } 133 | } 134 | 135 | .button { 136 | font-size: inherit; 137 | font-family: $sans-serif; 138 | display: inline-block; 139 | margin-top: 40px; 140 | margin-right: 20px; 141 | a { 142 | display: inline-block; 143 | padding: 10px 30px; 144 | text-decoration: none; 145 | border: 1px solid $white; 146 | min-width: 172px; 147 | text-align: center; 148 | } 149 | a:hover { 150 | background: $white; 151 | color: $atlantic_blue; 152 | text-decoration: none; 153 | } 154 | @include media($mobile) { 155 | margin-top: 20px; 156 | display: block; 157 | margin-right: 0; 158 | text-align: left; 159 | } 160 | } 161 | 162 | #alpha_tag { 163 | float: right; 164 | background: green; 165 | color: $white; 166 | padding: 10px; 167 | font-family: $sans-serif; 168 | } 169 | 170 | 171 | #introduction { 172 | background: $atlantic_blue; 173 | color: $white; 174 | padding-bottom: 60px; 175 | 176 | a { 177 | text-decoration: underline; 178 | } 179 | 180 | a:hover { 181 | background: $white; 182 | color: $atlantic_blue; 183 | } 184 | 185 | #usds_logo { 186 | display: inline-block; 187 | img { 188 | max-height: 100%; 189 | max-width: 100%; 190 | } 191 | } 192 | 193 | #usds_logo:hover { 194 | background: $gray_blue; 195 | } 196 | 197 | .button a { 198 | text-decoration: none; 199 | } 200 | 201 | p { 202 | max-width: 600px; 203 | font-family: $sans-serif; 204 | font-size: 20px; 205 | line-height: 38px; 206 | margin-top: 40px; 207 | font-weight: lighter; 208 | color: $white; 209 | } 210 | 211 | p.download_links { 212 | font-size: 16px; 213 | } 214 | 215 | @include media($mobile) { 216 | p { 217 | font-size: 16px; 218 | line-height: 24px; 219 | margin-top: 20px; 220 | } 221 | padding-bottom: 20px; 222 | } 223 | } 224 | 225 | #navigation_bar { 226 | visibility: hidden; 227 | display: none; 228 | position: fixed; 229 | width: 100%; 230 | height: 0; 231 | background: $atlantic_blue; 232 | color: $white; 233 | font-family: $serif; 234 | .outer_container { 235 | padding: 0 40px; 236 | } 237 | 238 | h4 { 239 | padding: 20px 0; 240 | margin-top: 0; 241 | font-size: 20px; 242 | color: $white; 243 | font-weight: lighter; 244 | line-height: 20px; 245 | display: inline-block; 246 | 247 | } 248 | h4:hover { 249 | text-decoration: underline; 250 | } 251 | 252 | ul { 253 | float: right; 254 | display: inline; 255 | padding: 0; 256 | list-style-position: outside; 257 | } 258 | 259 | .active { 260 | a { 261 | background: $miami_vice_blue; 262 | color: $white; 263 | text-decoration: none; 264 | } 265 | } 266 | 267 | li { 268 | display: inline; 269 | margin-left: 5px; 270 | list-style-type: none; 271 | 272 | a { 273 | display: inline-block; 274 | height: 24px; 275 | width: 24px; 276 | line-height: 22px; 277 | text-align: center; 278 | font-family: $serif; 279 | font-weight: lighter; 280 | color: $white; 281 | border: 1px solid $pacific_blue; 282 | } 283 | a:hover { 284 | background: $miami_vice_blue; 285 | color: $white; 286 | text-decoration: none; 287 | } 288 | } 289 | 290 | #menu_icon { 291 | display: none; 292 | height: 14px; 293 | width: 16px; 294 | margin-top: 16px; 295 | float: right; 296 | background-image: url('../images/menu_icon.svg'); 297 | background-size: contain; 298 | a { 299 | display: block; 300 | height: 100%; 301 | width: 100%; 302 | } 303 | } 304 | 305 | @include media($mobile) { 306 | ul { 307 | display: none; 308 | } 309 | #menu_icon { 310 | display: inline-block; 311 | } 312 | .outer_container { 313 | padding: 0 20px; 314 | } 315 | h4 { 316 | font-size: 16px; 317 | padding: 16px 0; 318 | line-height: 16px; 319 | } 320 | } 321 | 322 | @include media($slimmer) { 323 | ul { 324 | display: none; 325 | } 326 | #menu_icon { 327 | display: inline-block; 328 | margin-top: 20px; 329 | height: 18px; 330 | width: 20px; 331 | } 332 | } 333 | } 334 | 335 | #navigation_bar.show { 336 | visibility: visible; 337 | display: block; 338 | height: 60px; 339 | 340 | @include media($mobile) { 341 | height: 48px; 342 | visibility: visible; 343 | display: block; 344 | } 345 | } 346 | 347 | #plays_index { 348 | background: $miami_vice_blue; 349 | color: $black; 350 | padding-bottom: 60px; 351 | 352 | 353 | h3 { 354 | color: $white; 355 | font-size: 23px; 356 | font-weight: normal; 357 | margin-bottom: 38px; 358 | } 359 | 360 | .columns { 361 | -moz-column-count: 2; 362 | -moz-column-gap: 20px; 363 | -webkit-column-count: 2; 364 | -webkit-column-gap: 20px; 365 | column-count: 2; 366 | column-gap: 20px; 367 | } 368 | 369 | ol { 370 | list-style-position: inside; 371 | padding-left: 0px; 372 | margin-top: 0px; 373 | 374 | a { 375 | vertical-align: top; 376 | color: $white; 377 | margin-top: 0; 378 | display: inline-block; 379 | width: 85%; 380 | } 381 | 382 | a:hover { 383 | color: $black; 384 | } 385 | } 386 | 387 | ol, li { 388 | color: $white; 389 | font-size: 20px; 390 | font-weight: lighter; 391 | margin-top: 0; 392 | } 393 | 394 | .button { 395 | a { 396 | color: white; 397 | } 398 | a:hover { 399 | color: $black; 400 | } 401 | } 402 | 403 | @include media($mobile) { 404 | h3 { 405 | font-size: 18px; 406 | margin-bottom: 20px; 407 | } 408 | ol, li { 409 | font-size: 16px; 410 | line-height: 24px; 411 | } 412 | padding-bottom: 20px; 413 | } 414 | 415 | @include media($slimmer) { 416 | .columns { 417 | -moz-column-count: 1; 418 | -moz-column-gap: 0px; 419 | -webkit-column-count: 1; 420 | -webkit-column-gap: 0px; 421 | column-count: 1; 422 | column-gap: 00px; 423 | } 424 | } 425 | 426 | @include media($mobile) { 427 | .columns { 428 | -moz-column-count: 1; 429 | -moz-column-gap: 0px; 430 | -webkit-column-count: 1; 431 | -webkit-column-gap: 0px; 432 | column-count: 1; 433 | column-gap: 00px; 434 | } 435 | } 436 | } 437 | 438 | #plays, #techfar { 439 | 440 | h2, h4 { 441 | @include span-columns(8); 442 | } 443 | h4 { 444 | margin-top: 0px; 445 | color: $atlantic_blue; 446 | } 447 | 448 | h2 { 449 | margin-bottom: 24px; 450 | } 451 | 452 | h5 { 453 | font-size: 14px; 454 | } 455 | 456 | p { 457 | @include span-columns(9); 458 | } 459 | 460 | ol, ul { 461 | @include span-columns(8); 462 | list-style-position: outside; 463 | padding-left: 25px; 464 | } 465 | 466 | ol { 467 | list-style-image: url("../images/bullet-sq.svg"); 468 | margin-top: 0px; 469 | } 470 | 471 | li { 472 | font-size: 15px; 473 | line-height: 25px; 474 | padding-left: 5px; 475 | } 476 | 477 | ul { 478 | list-style-image: url("../images/bullet-circle.svg"); 479 | } 480 | 481 | a { 482 | color: $atlantic_blue; 483 | // border-bottom: 1px solid $atlantic_blue; 484 | text-decoration: underline; 485 | display: inline-block; 486 | } 487 | 488 | a:hover { 489 | color: $white; 490 | // border-bottom: 1px solid $white; 491 | background: $atlantic_blue; 492 | } 493 | 494 | @include media($mobile) { 495 | p { 496 | font-size: 16px; 497 | line-height: 24px; 498 | } 499 | ol, li { 500 | font-size: 14px; 501 | line-height: 20px; 502 | } 503 | 504 | h2, h4, p, ol, ul { 505 | @include span-columns(4); 506 | } 507 | } 508 | 509 | @include media($slimmer) { 510 | h2, h4 { 511 | @include span-columns(9); 512 | } 513 | p { 514 | @include span-columns(10); 515 | } 516 | } 517 | } 518 | 519 | #techfar { 520 | em { 521 | font-size: 12px; 522 | // margin-right: 5px; 523 | line-height: 0; 524 | vertical-align: super; 525 | } 526 | h2, h4 { 527 | margin-top: 20px; 528 | } 529 | img { 530 | max-width: 100%; 531 | } 532 | } 533 | } 534 | 535 | @media print { 536 | body { 537 | background: white; 538 | font-family: $serif; 539 | font-weight: lighter; 540 | line-height: 1.5em; 541 | font-size: 12px; 542 | margin-left: 16.5%; 543 | margin-right: 16.5% 544 | } 545 | 546 | #plays_index { 547 | ol { 548 | list-style-type: decimal; 549 | } 550 | a { 551 | text-decoration: none; 552 | } 553 | } 554 | 555 | #navigation_bar { 556 | display: none; 557 | } 558 | 559 | a { 560 | color: black; 561 | text-decoration: underline; 562 | } 563 | 564 | ol, ul { 565 | width: 80%; 566 | } 567 | 568 | ol { 569 | list-style-type: square; 570 | } 571 | 572 | p { 573 | width: 100%; 574 | } 575 | 576 | h2, h4 { 577 | width: 66%; 578 | } 579 | 580 | h2 { 581 | margin-top: 0px; 582 | } 583 | 584 | h5 { 585 | margin-top: 60px; 586 | margin-bottom: 0px; 587 | } 588 | 589 | .button { 590 | display: none; 591 | } 592 | } 593 | -------------------------------------------------------------------------------- /assets/css/styles.scss: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | @import "styles"; -------------------------------------------------------------------------------- /assets/docs/Data_Asset_Collection_Memo-02_21_14.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WhiteHouse/fitara/e1e460497f3c7e3d988612a134ca04fe61783f2c/assets/docs/Data_Asset_Collection_Memo-02_21_14.pdf -------------------------------------------------------------------------------- /assets/docs/FITARA_Guidance_Statistical_Agencies_and_Units_OMB.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WhiteHouse/fitara/e1e460497f3c7e3d988612a134ca04fe61783f2c/assets/docs/FITARA_Guidance_Statistical_Agencies_and_Units_OMB.pdf -------------------------------------------------------------------------------- /assets/docs/JSON User Guide_v4_02 11 16.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WhiteHouse/fitara/e1e460497f3c7e3d988612a134ca04fe61783f2c/assets/docs/JSON User Guide_v4_02 11 16.pdf -------------------------------------------------------------------------------- /assets/docs/MEMO_RE_IMPLEMENTATION_OF_DOI_OPEN_DATA_POLICY.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WhiteHouse/fitara/e1e460497f3c7e3d988612a134ca04fe61783f2c/assets/docs/MEMO_RE_IMPLEMENTATION_OF_DOI_OPEN_DATA_POLICY.pdf -------------------------------------------------------------------------------- /assets/docs/Memo_from_the_Acting_Deputy Secretary_et_alia_Open_Data_Policy.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WhiteHouse/fitara/e1e460497f3c7e3d988612a134ca04fe61783f2c/assets/docs/Memo_from_the_Acting_Deputy Secretary_et_alia_Open_Data_Policy.pdf -------------------------------------------------------------------------------- /assets/docs/sample_data_call_procedure.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Sample Procedure for a data call 4 | permalink: /assets/docs/sample_data_call_procedure/ 5 | filename: sample_data_call_procedure.md 6 | --- 7 | 8 | ## Background 9 | 10 | Many agencies have an incomplete inventory of their data assets. Open data teams often find that a distributed data call is a good means of filling in the gaps. Below is a model for this. 11 | 12 | There are two principle models for this - one where you direct each participant to populate a spreadsheet and the other where you direct them to input new entries into a system such as CKAN. The below focuses on the first model. 13 | 14 | ## Steps 15 | 16 | 1. The central coordinator should consolidate your current inventory in an authoritative copy. It's important to maintain version control from this point forward. 17 | 2. Parse the current inventory into sections based on your organization's components (e.g. by agency or bureau). 18 | 3. Require each component to provide one or more empowered data representatives. 19 | 4. Provide each representative with instructions (draft memo below) and their appropriate section of the current data inventory. 20 | 5. Each representative should then confirm the entries and their metadata in the current inventory, then ask the question of what datasets from their component are unaccounted for in this inventory. 21 | 6. The representatives should systematically add new rows for existing datasets that had been recorded in the inventory. 22 | * As appropriate, the representatives should coordinate with other staff in order to include all required metadata for each entry as well as as much optional metadata as possible. 23 | * The representatives themselves may need to coordinate a data call within their component in order to scale this process to the full expanse of their component's data offerings. 24 | * If needed, the representative may need to systematically browse their component's web presence in order to find the myriad datasets that are offered but had not been accounted for in the inventory. 25 | 7. The representative is responsible for returning to the central coordinator an updated spreadsheet that includes the original inventory but then expands on it. The column structure should remain the same so that the central coordinator can easily re-assemble the organization's inventory. 26 | 8. The central coordinator should carefully combine the updated inventories, ensuring that each spreadsheet's columns have remained consistant and that each spreadsheet contains not just additions but the original inventory material as well. 27 | 9. Upon completion, the central coordinator should certify the expanded inventory as the new authoritative copy. 28 | 29 | 30 | ## Draft memo 31 | 32 | You should be receiving a spreadsheet that contains the datasets that we currently have on record for your component. You'll notice that the column headers in the spreadsheet represent the required, required-if-applicable, and optional metadata fields. It is important that each row represent one dataset and that each dataset have as complete of a metadata record as possible, with as many fields filled in as possible and as accurately as possible. 33 | 34 | In your spreadsheet, columns A-I represent required fields; columns J-R are required fields if they are applicable to the dataset; and columns S-AB are recommended but optional. Further guidance for each metadata field can be found at http://project-open-data.github.io/schema/. 35 | 36 | Before doing anything else, please review what is currently in the spreadsheet and confirm that it is still accurate. You may need to check with your component's data stewards but this is the best opportunity to update any erroneous or out of date entries. 37 | 38 | Most agency components publish or maintain many more datasets than are accounted for in the current inventory. This effort seeks to correct that. Your goal should be to add as many unaccounted for datasets to this spreadsheet, but given the potential size of this task, you may need to proceed systematically. 39 | 40 | First begin by establishing the major sources of your component's data that are not represented in the current inventory. One means of finding unaccounted for datasets is to browse various sections of your component's web presence, be those pages on public websites or on your intranet. You'll oftentimes find partial data catalogs that way. Otherwise, you may need to survey your component's data stewards to enlist their help. If you deputize more representatives from those sources to populate the spreadsheet, it's important that you maintain control and consistency over the process. 41 | 42 | Be sure to add to what you had as your initial data inventory instead of starting from scratch. It's also important to maintain the spreadsheet columns as you originally received them since the your agency's central coordinator will be combining your final product with that of the other components. 43 | 44 | Include all datasets, including those which are for internal use only. Use the accessLevel metadata field to articulate whether the dataset is public, restricted public, or private. The catalog entries for datasets that are public or restricted public will be visible to the public at Data.gov and our agency's data hub, but the catalog entries that are marked private will only be visible to agency staff and OMB. 45 | 46 | For more details, consult the Implementation Guidance issued by OMB in August, 2013, specifically sections 2A and 2B: [http://project-open-data.github.io/implementation-guide#ii-policy-requirements](http://project-open-data.github.io/implementation-guide#ii-policy-requirements). 47 | 48 | 49 | -------------------------------------------------------------------------------- /assets/images/bullet-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | Slice 1 4 | Created with Sketch (http://www.bohemiancoding.com/sketch) 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /assets/images/bullet-circle1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | Slice 1 4 | Created with Sketch (http://www.bohemiancoding.com/sketch) 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /assets/images/bullet-sq.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | Slice 1 4 | Created with Sketch (http://www.bohemiancoding.com/sketch) 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /assets/images/bullet-sq1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | Slice 1 4 | Created with Sketch (http://www.bohemiancoding.com/sketch) 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /assets/images/menu_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | Slice 1 4 | Created with Sketch (http://www.bohemiancoding.com/sketch) 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /assets/images/techfar1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WhiteHouse/fitara/e1e460497f3c7e3d988612a134ca04fe61783f2c/assets/images/techfar1.jpg -------------------------------------------------------------------------------- /assets/images/techfar1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WhiteHouse/fitara/e1e460497f3c7e3d988612a134ca04fe61783f2c/assets/images/techfar1.png -------------------------------------------------------------------------------- /assets/images/techfar2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WhiteHouse/fitara/e1e460497f3c7e3d988612a134ca04fe61783f2c/assets/images/techfar2.png -------------------------------------------------------------------------------- /assets/images/techfar3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WhiteHouse/fitara/e1e460497f3c7e3d988612a134ca04fe61783f2c/assets/images/techfar3.png -------------------------------------------------------------------------------- /assets/images/techfar4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WhiteHouse/fitara/e1e460497f3c7e3d988612a134ca04fe61783f2c/assets/images/techfar4.png -------------------------------------------------------------------------------- /assets/images/techfar5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WhiteHouse/fitara/e1e460497f3c7e3d988612a134ca04fe61783f2c/assets/images/techfar5.png -------------------------------------------------------------------------------- /assets/images/usds_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WhiteHouse/fitara/e1e460497f3c7e3d988612a134ca04fe61783f2c/assets/images/usds_logo.png -------------------------------------------------------------------------------- /assets/img/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WhiteHouse/fitara/e1e460497f3c7e3d988612a134ca04fe61783f2c/assets/img/background.png -------------------------------------------------------------------------------- /assets/img/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WhiteHouse/fitara/e1e460497f3c7e3d988612a134ca04fe61783f2c/assets/img/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /assets/img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WhiteHouse/fitara/e1e460497f3c7e3d988612a134ca04fe61783f2c/assets/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /assets/img/seal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WhiteHouse/fitara/e1e460497f3c7e3d988612a134ca04fe61783f2c/assets/img/seal.jpg -------------------------------------------------------------------------------- /assets/js/federated-analytics.all.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * v0.1 121011 : First Test Version 3 | * v1.0 121012 : Added Cookie Synchronizing and filtered out Outbound tracking of cross- and sub-domain links 4 | * v1.1 121015 : Changed cross-domain to use setAllowAnchor and fixed problem with some links 5 | * v1.2 121015-2 : Added incoming cross-domain tracking to default _gaq tracker by adding _setAllowLinker and _setAllowAnchor 6 | * v1.3 121015-3 : All Cross-domain Tracking removed 7 | * v1.4 121015-4 : Multiple Search parameters and XDT links tracked as events 8 | * v1.5 121122 : Change to sub-domain level visits (cookies). _DOMReady delays tracking so goes last. ECereto Review. JSHinted 9 | * v1.6 130107 : Added Agency, sub-agency and Cookie timeout variables and functions 10 | * v1.61 130115 : Fix for (elm in ... now for (var elm = 0 Added Agency, sub-agency and Cookie timeout variables and functions 11 | * v1.62 130123 : Using Slots 33, 34, 35 for Page Level Custom Vars 12 | * v1.7 130503 : Single File Version 13 | * v1.71 130708 : Single File s/d Ver and AGENCY/SUB defaulting to hostnames instead of 'unspecified' 14 | * v1.72 130719 : SFS PUAs and exts 15 | */ 16 | /** 17 | * @preserve 18 | * Google Analytics Government Wide Site Usage Measurement Reference:Brian Katz, Cardinal Path 19 | * v1.73 130827 : Final Katz-CP Version. exts, multiple devuas 20 | **/ 21 | 22 | /* 23 | * Begin E-Nor 24 | * v1.74 131022 : Fix for multiple PUA loop 25 | * v1.75 140221 : Added option to use dc.js for demographic data 26 | * v1.76 140514 : Fix for bug in routine triggered by sdor=true. Routine wrote an extra sub-domain cookie in addition to the cross-sub-domain cookie. 27 | */ 28 | 29 | var _gaq=_gaq||[];var _gas=_gas||[];var GSA_CPwrapGA=(function(){var h;var i=document.location.hostname;var d={VERSION:"v1.76 140514 : Fix for subdomain cookie in cross subdomain tracking",SEARCH_PARAMS:"q|querytext|nasaInclude|k|QT",HOST_DOMAIN_OR:i,LEADING_PERIOD:".",GWT_UAID:["UA-33523145-1"],AGENCY:"",VISITOR_TIMEOUT:-1,CAMPAIGN_TIMEOUT:-1,VISIT_TIMEOUT:-1,ANONYMIZE_IP:true,YOUTUBE:true};var k={agency:{key:"Agency",slot:33,scope:3},sub_agency:{key:"Sub-Agency",slot:34,scope:3},version:{key:"Code Ver",slot:35,scope:3}};var j=function(){a();d.HOST_DOMAIN_OR=d.HOST_DOMAIN_OR.replace(/^www\./i,"");var n=e(d.HOST_DOMAIN_OR);d.LEADING_PERIOD=n[1];for(var m=0;m-1){_gaq.push(["_setSessionCookieTimeout",d.VISIT_TIMEOUT*1000*60])}if(d.VISITOR_TIMEOUT>-1){_gaq.push(["_setVisitorCookieTimeout",d.VISITOR_TIMEOUT*1000*60*60*24*30.416667])}if(d.CAMPAIGN_TIMEOUT>-1){_gaq.push(["_setCampaignCookieTimeout",d.CAMPAIGN_TIMEOUT*1000*60*60*24*30.416667])}};var f=function(n){n=n||i;n=n.match(/^(?:https?:\/\/)?([^\/:]+)/)[1];if(n.match(/(\d+\.){3}(\d+)/)||n.search(/\./)==-1){return n}try{if(/\.(gov|mil)$/i.test(n)){n=n.match(/\.([^.]+\.(gov|mil)$)/i)[1]}else{n=n.match(/(([^.\/]+\.[^.\/]{2,3}\.[^.\/]{2})|(([^.\/]+\.)[^.\/]{2,4}))(\/.*)?$/)[1]}}catch(m){}return n.toLowerCase()};var c=function(m){var o=function(p){return undefined==p||"-"==p||""==p};var n=function(t){var q=1,p=0,r,s;if(!o(t)){q=0;for(r=t.length-1;r>=0;r--){s=t.charCodeAt(r);q=(q<<6&268435455)+s+(s<<14);p=q&266338304;q=p!==0?q^p>>21:q}}return q};return n(m)};var e=function(n){var m=document.cookie.match(/__utma=[^.]+/g);var q=[false,""];if(!m){return q}h=c(n);for(var p=0;p0){this["tracker"]=H[0]}}};c.prototype.inArray=function(J,I){if(J&&J.length){for(var H=0;H=0){return}var r=i.document,y=Object.prototype.toString,m=Object.prototype.hasOwnProperty,g=Array.prototype.push,w=Array.prototype.slice,z=String.prototype.trim,E=String.prototype.indexOf,d=r.location.href,B=r.documentElement;function t(){var H=this;H.version="1.10.1";H._accounts={};H._accounts_length=0;H._queue=p;H._default_tracker="_gas1";H.gh={};H._hooks={_addHook:[H._addHook]};H.push(function(){H.gh=new c()})}t.prototype._addHook=function(I,H){if(typeof I==="string"&&typeof H==="function"){if(typeof _gas._hooks[I]==="undefined"){_gas._hooks[I]=[]}_gas._hooks[I].push(H)}return false};function h(H){return H===_gas._default_tracker?"":H+"."}function x(H){if(_gas.debug_mode){try{console.log(H)}catch(I){}}return i._gaq.push(H)}t.prototype._execute=function(){var O=w.call(arguments),R=this,H=O.shift(),M=true,K,P,Q,J,L,S=0;if(typeof H==="function"){return x((function(U,T){return function(){U.call(T)}}(H,R.gh)))}else{if(typeof H==="object"&&H.length>0){P=H.shift();if(E.call(P,".")>=0){J=P.split(".")[0];P=P.split(".")[1]}else{J=e}Q=R._hooks[P];if(Q&&Q.length>0){for(K=0;K0){H=L}}}catch(N){if(P!=="_trackException"){R.push(["_trackException",N])}}}}if(M===false){return 1}if(P==="_setAccount"){for(K in R._accounts){if(R._accounts[K]===H[0]){if(J===e){return 1}}}J=J||"_gas"+String(R._accounts_length+1);if(typeof R._accounts._gas1==="undefined"&&E.call(J,"_gas")!==-1){J="_gas1"}R._accounts[J]=H[0];R._accounts_length+=1;J=h(J);S=x([J+P,H[0]]);R.gh._setDummyTracker();return S}if(P==="_link"||P==="_linkByPost"||P==="_require"||P==="_anonymizeIp"){O=w.call(H);O.unshift(P);return x(O)}var I;if(J&&R._accounts[J]){I=h(J)+P;O=w.call(H);O.unshift(I);return x(O)}if(R._accounts_length>0){for(K in R._accounts){if(m.call(R._accounts,K)){I=h(K)+P;O=w.call(H);O.unshift(I);S+=x(O)}}}else{O=w.call(H);O.unshift(P);return x(O)}return S?1:0}}};t.prototype.push=function(){var H=this;var I=w.call(arguments);for(var J=0;J=1){J={extensions:J}}}}J.category=J.category||"Download";var I="xls,xlsx,doc,docx,ppt,pptx,pdf,txt,zip";I+=",rar,7z,gz,tgz,exe,wma,mov,avi,wmv,mp3,mp4,csv,tsv,mobi,epub,swf";I=I.split(",");J.extensions=J.extensions.concat(I);H._liveEvent("a","mousedown",function(M){var L=this;if(L.href){var K=s.call(H,L.href,J.extensions);if(K){_gas.push(["_trackEvent",J.category,K,L.href])}}});return false};_gas.push(["_addHook","_gasTrackDownloads",k]);_gas.push(["_addHook","_trackDownloads",k]);var q=function(I){if(!this._outboundTracked){this._outboundTracked=true}else{return}var H=this;if(!I){I={}}I.category=I.category||"Outbound";H._liveEvent("a","mousedown",function(M){var J=this;if((J.protocol==="http:"||J.protocol==="https:")&&E.call(J.hostname,r.location.hostname)===-1){var L=(J.pathname+J.search+""),K=E.call(L,"__utm");if(K!==-1){L=L.substring(0,K)}_gas.push(["_trackEvent",I.category,J.hostname,L])}})};_gas.push(["_addHook","_gasTrackOutboundLinks",q]);_gas.push(["_addHook","_trackOutboundLinks",q]);var G=function(H){if(!this._mailtoTracked){this._mailtoTracked=true}else{return}if(!H){H={}}H.category=H.category||"Mailto";this._liveEvent("a","mousedown",function(J){var I=J.target;if(I&&I.href&&I.href.toLowerCase&&E.call(I.href.toLowerCase(),"mailto:")===0){_gas.push(["_trackEvent",H.category,I.href.substr(7)])}});return false};_gas.push(["_addHook","_gasTrackMailto",G]);_gas.push(["_addHook","_trackMailto",G]);var f=[];var o;var l={};function v(K,J){if(l[J]===e||l[J].timeTriggers.length<=0){return false}var I=K.getCurrentTime()/K.getDuration()*100;if(I>=l[J].timeTriggers[0]){var H=l[J].timeTriggers.shift();_gas.push(["_trackEvent",o.category,H+"%",K.getVideoUrl()])}l[J].timer=setTimeout(v,1000,K,J)}function u(I){var H=I.getVideoUrl();if(l[H]&&l[H].timer){v(I,H);clearTimeout(l[H].timer)}}function j(I){if(f&&f.length){var H=I.getVideoUrl();if(l[H]){u(I)}else{l[H]={};l[H].timeTriggers=w.call(f)}l[H].timer=setTimeout(v,1000,I,H)}}function n(H){var I="";switch(H.data){case 0:I="finish";u(H.target);break;case 1:I="play";j(H.target);break;case 2:I="pause";u(H.target);break}if(I){_gas.push(["_trackEvent",o.category,I,H.target["getVideoUrl"]()])}}function A(H){_gas.push(["_trackEvent",o.category,"error ("+H.data+")",H.target["getVideoUrl"]()])}function D(){var M=r.getElementsByTagName("object");var J,N,L;var K=/(https?:\/\/www\.youtube(-nocookie)?\.com[^\/]*).*\/v\/([^&?]+)/;for(var I=0;I-1){if(E.call(L[K].src,"enablejsapi=1")<0){if(I){if(E.call(L[K].src,"?")<0){L[K].src+="?enablejsapi=1"}else{L[K].src+="&enablejsapi=1"}}else{continue}}O.push(L[K])}}if(O.length>0){if(J&&J.length){f=J}i.onYouTubePlayerAPIReady=function(){var S;for(var R=0;R0){_gas.push(_gas._queue.shift())}var a=C("display-advertising");function C(J){var I=r.getElementsByTagName("script");ThisScriptPath=I[I.length-1].src;J=J.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var H="[\\?&]"+J+"=([^&#]*)";var L=new RegExp(H);var K=L.exec(ThisScriptPath);if(K==null){return"Not Set"}else{return decodeURIComponent(K[1].replace(/\+/g," "))}}if(typeof i._gat==="undefined"){(function(){var I=r.createElement("script");I.type="text/javascript";I.async=true;if(a=="true"){I.src=("https:"===r.location.protocol?"https://":"http://")+"stats.g.doubleclick.net/dc.js"}else{I.src=("https:"===r.location.protocol?"https://ssl":"http://www")+".google-analytics.com/ga.js"}var H=r.getElementsByTagName("script")[0];H.parentNode.insertBefore(I,H)}())}})(window);_gas.push(function(){this._DOMReady(function(){try{var a=new GSA_CPwrapGA();if(!document._gsaDelayGA){a.onEveryPage()}}catch(b){try{console.log(b.message);console.log(b.stack.toString())}catch(b){}}})}); 30 | -------------------------------------------------------------------------------- /assets/js/scrollspy.js: -------------------------------------------------------------------------------- 1 | /* ======================================================================== 2 | * Bootstrap: scrollspy.js v3.2.0 3 | * http://getbootstrap.com/javascript/#scrollspy 4 | * ======================================================================== 5 | * Copyright 2011-2014 Twitter, Inc. 6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 7 | * ======================================================================== */ 8 | 9 | 10 | +function ($) { 11 | 'use strict'; 12 | 13 | // SCROLLSPY CLASS DEFINITION 14 | // ========================== 15 | 16 | function ScrollSpy(element, options) { 17 | var process = $.proxy(this.process, this) 18 | 19 | this.$body = $('body') 20 | this.$scrollElement = $(element).is('body') ? $(window) : $(element) 21 | this.options = $.extend({}, ScrollSpy.DEFAULTS, options) 22 | this.selector = (this.options.target || '') + ' .nav li > a' 23 | this.offsets = [] 24 | this.targets = [] 25 | this.activeTarget = null 26 | this.scrollHeight = 0 27 | 28 | this.$scrollElement.on('scroll.bs.scrollspy', process) 29 | this.refresh() 30 | this.process() 31 | } 32 | 33 | ScrollSpy.VERSION = '3.2.0' 34 | 35 | ScrollSpy.DEFAULTS = { 36 | offset: 10 37 | } 38 | 39 | ScrollSpy.prototype.getScrollHeight = function () { 40 | return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) 41 | } 42 | 43 | ScrollSpy.prototype.refresh = function () { 44 | var offsetMethod = 'offset' 45 | var offsetBase = 0 46 | 47 | if (!$.isWindow(this.$scrollElement[0])) { 48 | offsetMethod = 'position' 49 | offsetBase = this.$scrollElement.scrollTop() 50 | } 51 | 52 | this.offsets = [] 53 | this.targets = [] 54 | this.scrollHeight = this.getScrollHeight() 55 | 56 | var self = this 57 | this.$body 58 | .find(this.selector) 59 | .map(function () { 60 | var $el = $(this) 61 | var href = $el.data('target') || $el.attr('href') 62 | var $href = /^#./.test(href) && $(href) 63 | return ($href 64 | && $href.length 65 | // HACK - allow for invisible targets 66 | // && $href.is(':visible') 67 | && [[$href[offsetMethod]().top + offsetBase, href]]) || null 68 | }) 69 | .sort(function (a, b) { return a[0] - b[0] }) 70 | .each(function () { 71 | self.offsets.push(this[0]) 72 | self.targets.push(this[1]) 73 | }) 74 | } 75 | 76 | ScrollSpy.prototype.process = function () { 77 | var scrollTop = this.$scrollElement.scrollTop() + this.options.offset 78 | var scrollHeight = this.getScrollHeight() 79 | var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() 80 | var offsets = this.offsets 81 | var targets = this.targets 82 | var activeTarget = this.activeTarget 83 | var i 84 | 85 | if (this.scrollHeight != scrollHeight) { 86 | this.refresh() 87 | } 88 | 89 | if (scrollTop >= maxScroll) { 90 | return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) 91 | } 92 | 93 | if (activeTarget && scrollTop <= offsets[0]) { 94 | return activeTarget != (i = targets[0]) && this.activate(i) 95 | } 96 | 97 | for (i = offsets.length; i--;) { 98 | activeTarget != targets[i] 99 | && scrollTop >= offsets[i] 100 | && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) 101 | && this.activate(targets[i]) 102 | } 103 | } 104 | 105 | ScrollSpy.prototype.activate = function (target) { 106 | this.activeTarget = target 107 | 108 | $(this.selector) 109 | .parentsUntil(this.options.target, '.active') 110 | .removeClass('active') 111 | 112 | var selector = this.selector + 113 | '[data-target="' + target + '"],' + 114 | this.selector + '[href="' + target + '"]' 115 | 116 | var active = $(selector) 117 | .parents('li') 118 | .addClass('active') 119 | 120 | if (active.parent('.dropdown-menu').length) { 121 | active = active 122 | .closest('li.dropdown') 123 | .addClass('active') 124 | } 125 | 126 | active.trigger('activate.bs.scrollspy') 127 | } 128 | 129 | 130 | // SCROLLSPY PLUGIN DEFINITION 131 | // =========================== 132 | 133 | function Plugin(option) { 134 | return this.each(function () { 135 | var $this = $(this) 136 | var data = $this.data('bs.scrollspy') 137 | var options = typeof option == 'object' && option 138 | 139 | if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) 140 | if (typeof option == 'string') data[option]() 141 | }) 142 | } 143 | 144 | var old = $.fn.scrollspy 145 | 146 | $.fn.scrollspy = Plugin 147 | $.fn.scrollspy.Constructor = ScrollSpy 148 | 149 | 150 | // SCROLLSPY NO CONFLICT 151 | // ===================== 152 | 153 | $.fn.scrollspy.noConflict = function () { 154 | $.fn.scrollspy = old 155 | return this 156 | } 157 | 158 | 159 | // SCROLLSPY DATA-API 160 | // ================== 161 | 162 | $(window).on('load.bs.scrollspy.data-api', function () { 163 | $('[data-spy="scroll"]').each(function () { 164 | var $spy = $(this) 165 | Plugin.call($spy, $spy.data()) 166 | }) 167 | }) 168 | 169 | }(jQuery); 170 | -------------------------------------------------------------------------------- /assets/js/site.js: -------------------------------------------------------------------------------- 1 | $(function(){ 2 | 3 | var $navBar = $('#navigation_bar'); 4 | var showNavBarMinimum = $('#introduction').height() - $navBar.height(); 5 | 6 | var wasNavBarVisible = false; 7 | // change nav bar visibility on scroll 8 | function onScroll() { 9 | var isNavBarVisible = window.pageYOffset >= showNavBarMinimum; 10 | if ( isNavBarVisible != wasNavBarVisible ) { 11 | $navBar.toggleClass('show'); 12 | wasNavBarVisible = isNavBarVisible; 13 | } 14 | } 15 | // initial check 16 | onScroll(); 17 | 18 | // http://davidwalsh.name/function-debounce 19 | function debounce( fn, wait ) { 20 | var timeout; 21 | return function() { 22 | var _this = this; 23 | var args = arguments; 24 | var later = function() { 25 | timeout = null; 26 | fn.apply( _this, args ); 27 | }; 28 | clearTimeout( timeout ); 29 | timeout = setTimeout( later, wait || 100 ); 30 | }; 31 | } 32 | 33 | $(window).scroll( debounce( onScroll, 30 ) ); 34 | 35 | $('body').scrollspy({ target: '#navigation_bar' }); 36 | 37 | // Scroll Animations 38 | $('a[href*=#]:not([href=#])').click(function() { 39 | if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) { 40 | var target = $(this.hash); 41 | target = target.length ? target : $('[name=' + this.hash.slice(1) +']'); 42 | if (target.length) { 43 | $('html,body').animate({ 44 | scrollTop: target.offset().top 45 | }, 1000); 46 | return true; 47 | } 48 | } 49 | }); 50 | 51 | }); 52 | -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WhiteHouse/fitara/e1e460497f3c7e3d988612a134ca04fe61783f2c/favicon.ico -------------------------------------------------------------------------------- /schemaexamples/CSA_json_schema_fy16_august.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "version": 1, 4 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance", 5 | "name": "/", 6 | "title": "Realized Cost Savings and Avoidance Schema", 7 | "description": "Schema definition for describing the Realized Cost Savings and Avoidance data collection", 8 | "type": "object", 9 | "required": [ 10 | "strategies" 11 | ], 12 | "properties": { 13 | "strategies": { 14 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies", 15 | "name": "strategies", 16 | "title": "Strategies schema", 17 | "description": "A list of realized cost savings and avoidance strategies for this agency", 18 | "type": "array", 19 | "minItems": 1, 20 | "additionalItems": false, 21 | "required": [ 22 | "0" 23 | ], 24 | "items": { 25 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0", 26 | "name": "0", 27 | "title": "initiative 0 schema", 28 | "description": "Information about a particular initiative", 29 | "type": "object", 30 | "required": [ 31 | "strategyId", 32 | "strategyTitle", 33 | "decisionDate", 34 | "ombInitiative", 35 | "amountType", 36 | "fy2012", 37 | "fy2013", 38 | "fy2014", 39 | "fy2015", 40 | "fy2016" 41 | ], 42 | "properties": { 43 | "strategyId": { 44 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/strategyId", 45 | "name": "stratgeyId", 46 | "description": "Strategy identifier", 47 | "title": "strategyId schema", 48 | "type": "number", 49 | "minimum": 1, 50 | "maximum": 999, 51 | "multipleOf": 1 52 | }, 53 | "strategyTitle": { 54 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/strategyTitle", 55 | "name": "stratgeyTitle", 56 | "title": "strategyTitle schema", 57 | "description": "Strategy title", 58 | "type": "string", 59 | "minLength": 1, 60 | "maxLength": 100 61 | }, 62 | "useOfSavingsAvoidance": { 63 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/useOfSavingsAvoidance", 64 | "name": "useOfSavingsAvoidance", 65 | "title": "useOfSavingsAvoidance schema", 66 | "description": "Use of Savings Avoidance", 67 | "type": "string", 68 | "minLength": 1, 69 | "maxLength": 500 70 | }, 71 | "decisionDate": { 72 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/decisionDate", 73 | "name": "regex", 74 | "title": "decisionDate schema", 75 | "description": "Decision date (MM/DD/YYYY format)", 76 | "type": "string", 77 | "pattern": "^[0-9]{2}/[0-9]{2}/[0-9]{4}$" 78 | }, 79 | "ombInitiative": { 80 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/ombInitiative", 81 | "name": "ombInitiative", 82 | "title": "ombInitiative schema", 83 | "description": "OMB Initiative (Data Center, Digital Services, Commodity IT, PortfolioStat or Other)", 84 | "type": "string", 85 | "enum": [ 86 | "Data Center", 87 | "Digital Services", 88 | "Commodity IT", 89 | "PortfolioStat", 90 | "Software License Management", 91 | "Other" 92 | ] 93 | }, 94 | "amountType": { 95 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/properties/amountType", 96 | "name": "amountType", 97 | "title": "amountType schema", 98 | "description": "Amount Type (Cost-Savings, Cost-Avoidance or Both)", 99 | "type": "string", 100 | "enum": [ 101 | "Cost-Savings", 102 | "Cost-Avoidance", 103 | "Both" 104 | ] 105 | }, 106 | "relatedUIIs": { 107 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/relatedUIIs", 108 | "name": "relatedUIIs", 109 | "title": "relatedUIIs schema", 110 | "description": "Related UIIs", 111 | "type": "array", 112 | "minItems": 1, 113 | "additionalItems": false, 114 | "required": [ 115 | "0" 116 | ], 117 | "items": { 118 | "0": { 119 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/relatedUIIs/0", 120 | "name": "0", 121 | "title": "relatedUIIs 0 schema", 122 | "description": "Related UII", 123 | "type": "string", 124 | "pattern": "^[0-9]{3}-[0-9]{9}$" 125 | } 126 | } 127 | }, 128 | "fy2012": { 129 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2012", 130 | "name": "fy2012", 131 | "title": "fy2012 schema", 132 | "description": "Fiscal Year 2012", 133 | "type": "object", 134 | "required": [ 135 | "amount", 136 | "netOrGross" 137 | ], 138 | "properties": { 139 | "amount": { 140 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2012/properties/amount", 141 | "name": "amount", 142 | "title": "fy2012 amount schema", 143 | "description": "Fiscal Year 2012 Amount", 144 | "type": "number", 145 | "minimum": 0, 146 | "maximum": 1000 147 | }, 148 | "netOrGross": { 149 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2012/netOrGross", 150 | "name": "amount", 151 | "title": "fy2012 netOrGross schema", 152 | "description": "Fiscal Year 2012 Amount Type (Net or Gross)", 153 | "type": "string", 154 | "enum": [ 155 | "Net", 156 | "Gross" 157 | ] 158 | } 159 | } 160 | }, 161 | "fy2013": { 162 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2013", 163 | "name": "fy2013", 164 | "title": "fy2013 schema", 165 | "description": "Fiscal Year 2013", 166 | "type": "object", 167 | "required": [ 168 | "amount", 169 | "netOrGross" 170 | ], 171 | "properties": { 172 | "amount": { 173 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2013/properties/amount", 174 | "name": "amount", 175 | "title": "fy2013 amount schema", 176 | "description": "Fiscal Year 2013 Amount", 177 | "type": "number", 178 | "minimum": 0, 179 | "maximum": 1000 180 | }, 181 | "netOrGross": { 182 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2013/netOrGross", 183 | "name": "amount", 184 | "title": "fy2013 netOrGross schema", 185 | "description": "Fiscal Year 2013 Amount Type (Net or Gross)", 186 | "type": "string", 187 | "enum": [ 188 | "Net", 189 | "Gross" 190 | ] 191 | } 192 | } 193 | }, 194 | "fy2014": { 195 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2014", 196 | "name": "fy2014", 197 | "title": "fy2014 schema", 198 | "description": "Fiscal Year 2014", 199 | "type": "object", 200 | "required": [ 201 | "amount", 202 | "netOrGross" 203 | ], 204 | "properties": { 205 | "amount": { 206 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2014/properties/amount", 207 | "name": "amount", 208 | "title": "fy2014 amount schema", 209 | "description": "Fiscal Year 2014 Amount", 210 | "type": "number", 211 | "minimum": 0, 212 | "maximum": 1000 213 | }, 214 | "netOrGross": { 215 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2014/netOrGross", 216 | "name": "amount", 217 | "title": "fy2014 netOrGross schema", 218 | "description": "Fiscal Year 2014 Amount Type (Net or Gross)", 219 | "type": "string", 220 | "enum": [ 221 | "Net", 222 | "Gross" 223 | ] 224 | } 225 | } 226 | }, 227 | "fy2015": { 228 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2015", 229 | "name": "fy2015", 230 | "title": "fy2015 schema", 231 | "description": "Fiscal Year 2015", 232 | "type": "object", 233 | "required": [ 234 | "amount", 235 | "netOrGross" 236 | ], 237 | "properties": { 238 | "amount": { 239 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2015/properties/amount", 240 | "name": "amount", 241 | "title": "fy2015 amount schema", 242 | "description": "Fiscal Year 2015 Amount", 243 | "type": "number", 244 | "minimum": 0, 245 | "maximum": 1000 246 | }, 247 | "netOrGross": { 248 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2015/netOrGross", 249 | "name": "amount", 250 | "title": "fy2015 netOrGross schema", 251 | "description": "Fiscal Year 2015 Amount Type (Net or Gross)", 252 | "type": "string", 253 | "enum": [ 254 | "Net", 255 | "Gross" 256 | ] 257 | } 258 | } 259 | }, 260 | "fy2016": { 261 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2016", 262 | "name": "fy2016", 263 | "title": "fy2016 schema", 264 | "description": "Fiscal Year 2016", 265 | "type": "object", 266 | "required": [ 267 | "amount", 268 | "netOrGross" 269 | ], 270 | "properties": { 271 | "amount": { 272 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2016/properties/amount", 273 | "name": "amount", 274 | "title": "fy2016 amount schema", 275 | "description": "Fiscal Year 2016 Amount", 276 | "type": "number", 277 | "minimum": 0, 278 | "maximum": 1000 279 | }, 280 | "netOrGross": { 281 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2016/netOrGross", 282 | "name": "amount", 283 | "title": "fy2016 netOrGross schema", 284 | "description": "Fiscal Year 2016 Amount Type (Net or Gross)", 285 | "type": "string", 286 | "enum": [ 287 | "Net", 288 | "Gross" 289 | ] 290 | } 291 | } 292 | } 293 | } 294 | } 295 | } 296 | } 297 | } 298 | -------------------------------------------------------------------------------- /schemaexamples/FITARAMilestonesExample.json: -------------------------------------------------------------------------------- 1 | { 2 | "updatedDate": "2016/04/30", 3 | "milestones": [ 4 | { 5 | "milestoneID": 1, 6 | "milestoneDesc": "Finalize adoption of revised department-wide policy for IT Investment Review Boards", 7 | "milestoneTargetCompletionDate": "2016/09/01", 8 | "milestoneStatus": "InProgress", 9 | "milestoneStatusDesc": "The revised policy is currently under the review of general counsel, expected to clear this stage by the end of May 2016", 10 | "commonBaselineArea": "acquisition" 11 | }, 12 | { 13 | "milestoneID": 2, 14 | "milestoneDesc": "Conduct training for department budget officers to share new budget formulation rules including CIO staff", 15 | "milestoneTargetCompletionDate": "2016/02/01", 16 | "milestoneStatus": "Complete", 17 | "milestoneStatusDesc": "65 budget officer staff attended the training, including representatives from 12 agencies.", 18 | "commonBaselineArea": "budgetFormulation" 19 | } 20 | ] 21 | } 22 | 23 | -------------------------------------------------------------------------------- /schemaexamples/FITARA_milestones_schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "version": "April 2016 (v1)", 4 | "id": "https://management.cio.gov/schema", 5 | "name": "/", 6 | "title": "FITARA Milestones", 7 | "description": "Schema definition for the reporting the status of milestones implementing FITARA Common Baseline", 8 | "type": "object", 9 | "required": [ 10 | "updatedDate"], 11 | "properties": { 12 | "updatedDate": { 13 | "name": "regex", 14 | "title": "decisionDateYMD schema", 15 | "description": "Decision date (YYYY/MM/DD format)", 16 | "type": "string", 17 | "pattern": "^[0-9]{4}/[0-9]{2}/[0-9]{2}$" 18 | }, 19 | "milestones": { 20 | "type": "array", 21 | "title": "List of milestones", 22 | "name": "milestones", 23 | "items": { 24 | "type": "object", 25 | "description": "Information about a particular milestone.", 26 | "properties": { 27 | "milestoneID": { "type": "integer" }, 28 | "milestoneDesc": { "type": "string", "maxlength": 500}, 29 | "milestoneTargetCompletionDate": { 30 | "name": "regex", 31 | "title": "decisionDateYMD schema", 32 | "description": "Decision date (YYYY/MM/DD format)", 33 | "type": "string", 34 | "pattern": "^[0-9]{4}/[0-9]{2}/[0-9]{2}$" 35 | }, 36 | "milestoneStatus": {"type": "string", "enum": ["NotStarted", "InProgress", "Complete", "Deferred"]}, 37 | "milestoneStatusDesc": { "type": "string", "maxlength": 500}, 38 | "commonBaselineArea": {"type": "string", "enum": ["budgetFormulation", "budgetExecution", "acquisition", "organizationAndWorkforce"]} 39 | }, 40 | "required": [ 41 | "milestoneID", 42 | "milestoneDesc", 43 | "milestoneTargetCompletionDate", 44 | "milestoneStatus", 45 | "milestoneStatusDesc", 46 | "commonBaselineArea" ] 47 | } 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /schemaexamples/JSON User Guide_v5_04_25_16.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WhiteHouse/fitara/e1e460497f3c7e3d988612a134ca04fe61783f2c/schemaexamples/JSON User Guide_v5_04_25_16.pdf -------------------------------------------------------------------------------- /schemaexamples/boardsexample.json: -------------------------------------------------------------------------------- 1 | { 2 | "boards" : [ 3 | { 4 | "governanceBoardName" : "Committee for Naming Oversight", 5 | "programCodeFPI" : "005-001", 6 | "bureauCode" : "12", 7 | "cioInvolvementDescription" : "Optional Reviewing Official Title here. Max 500 characters" 8 | }, 9 | { 10 | "governanceBoardName" : "Committee of Planning", 11 | "bureauCode" : "10" 12 | } 13 | ] 14 | 15 | } 16 | -------------------------------------------------------------------------------- /schemaexamples/bureauITLeadershipSchema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "https://omb.max.gov/schemas/BureauITLeadership", 4 | "version" : 1.0, 5 | "type": "object", 6 | "title": "Bureau IT Leadership Directory Schema version 1.0", 7 | "description": "Schema definition for describing bureau IT leaders for an agency.", 8 | "name": "/", 9 | "properties": { 10 | "leaders": { 11 | "id": "https://omb.max.gov/schemas/BureauITLeadership/leaders", 12 | "type": "array", 13 | "title": "Leaders schema.", 14 | "description": "A directory of the bureau IT leaders for this agency", 15 | "name": "leaders", 16 | "items": { 17 | "id": "https://omb.max.gov/schemas/BureauITLeadership/leaders/0", 18 | "type": "object", 19 | "title": "0 schema.", 20 | "description": "Information about a particular leader.", 21 | "name": "0", 22 | "properties": { 23 | "bureauCode": { 24 | "id": "https://omb.max.gov/schemas/BureauITLeadership/leaders/0/bureauCode", 25 | "type": "string", 26 | "title": "BureauCode schema.", 27 | "description": "2 digit integer bureau code, per A-11 Appendix C: https://www.whitehouse.gov/sites/default/files/omb/assets/a11_current_year/app_c.pdf", 28 | "name": "bureauCode", 29 | "pattern": "^[0-9]{2}$" 30 | }, 31 | "firstName": { 32 | "id": "https://omb.max.gov/schemas/BureauITLeadership/leaders/0/firstName", 33 | "type": "string", 34 | "title": "FirstName schema.", 35 | "description": "Leader first name.", 36 | "name": "firstName", 37 | "minLength" : 1, 38 | "maxLength" : 50 39 | }, 40 | "lastName": { 41 | "id": "https://omb.max.gov/schemas/BureauITLeadership/leaders/0/lastName", 42 | "type": "string", 43 | "title": "LastName schema.", 44 | "description": "Leader last name.", 45 | "name": "lastName", 46 | "minLength": 1, 47 | "maxLength": 50 48 | }, 49 | "employmentType": { 50 | "id": "https://omb.max.gov/schemas/BureauITLeadership/leaders/0/employmentType", 51 | "type": "string", 52 | "title": "EmploymentType schema.", 53 | "description": "Employment type. One of GS, SES, SL, ST, or Other.", 54 | "name": "employmentType", 55 | "enum" : ["GS", "SES", "SL", "ST", "Other"] 56 | }, 57 | "employmentTypeOther": { 58 | "id": "https://omb.max.gov/schemas/BureauITLeadership/leaders/0/employmentTypeOther", 59 | "type": "string", 60 | "title": "EmploymentTypeOther schema.", 61 | "description": "When employtmentType Other was chosen, this field contains a description of the employment type.", 62 | "name": "employmentTypeOther", 63 | "minLength": 1, 64 | "maxLength": 500 65 | }, 66 | "typeOfAppointment": { 67 | "id": "https://omb.max.gov/schemas/BureauITLeadership/leaders/0/typeOfAppointment", 68 | "type": "string", 69 | "title": "TypeOfAppointment schema.", 70 | "description": "The type of appointment for this leader. Must be either career or political.", 71 | "name": "typeOfAppointment", 72 | "enum": ["career", "political"] 73 | 74 | }, 75 | "otherResponsibilities": { 76 | "id": "https://omb.max.gov/schemas/BureauITLeadership/leaders/0/otherResponsibilities", 77 | "type": "string", 78 | "title": "OtherResponsibilities schema.", 79 | "description": "Description of other responsibilities of this leader.", 80 | "name": "otherResponsibilities", 81 | "minLength": 1, 82 | "maxLength": 500 83 | }, 84 | "evaluationRatingOfficialTitle": { 85 | "id": "https://omb.max.gov/schemas/BureauITLeadership/leaders/0/evaluationRatingOfficialTitle", 86 | "type": "string", 87 | "title": "EvaluationRatingOfficialTitle schema.", 88 | "description": "The title of the leader's evaluation rating official.", 89 | "name": "evaluationRatingOfficialTitle", 90 | "minLength": 1, 91 | "maxLength": 500 92 | }, 93 | "evaluationReviewingOfficialTitle": { 94 | "id": "https://omb.max.gov/schemas/BureauITLeadership/leaders/0/evaluationReviewingOfficialTitle", 95 | "type": "string", 96 | "title": "EvaluationReviewingOfficialTitle schema.", 97 | "description": "The title of the leader's evaluation reviwing official..", 98 | "name": "evaluationReviewingOfficialTitle", 99 | "minLength": 1, 100 | "maxLength": 500 101 | }, 102 | "keyBureauCIO": { 103 | "id": "https://omb.max.gov/schemas/BureauITLeadership/leaders/0/keyBureauCIO", 104 | "type": "string", 105 | "title": "KeyBureauCIO schema.", 106 | "description": "Set this field to Yes if this leader a key bureau CIO.", 107 | "name": "keyBureauCIO", 108 | "enum": ["Yes", "No"] 109 | } 110 | }, 111 | "required": [ 112 | "bureauCode", 113 | "firstName", 114 | "lastName", 115 | "employmentType", 116 | "typeOfAppointment", 117 | "evaluationRatingOfficialTitle", 118 | "keyBureauCIO" 119 | ] 120 | }, 121 | "required": [ 122 | "0" 123 | ], 124 | "minItems": 1, 125 | "additionalItems": false 126 | } 127 | }, 128 | "required": [ 129 | "leaders" 130 | ] 131 | } -------------------------------------------------------------------------------- /schemaexamples/costSavingsAvoidanceSchema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "version": 1, 4 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance", 5 | "name": "/", 6 | "title": "Realized Cost Savings and Avoidance Schema", 7 | "description": "Schema definition for describing the Realized Cost Savings and Avoidance data collection", 8 | "type": "object", 9 | "required": [ 10 | "strategies" 11 | ], 12 | "properties": { 13 | "strategies": { 14 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies", 15 | "name": "strategies", 16 | "title": "Strategies schema", 17 | "description": "A list of realized cost savings and avoidance strategies for this agency", 18 | "type": "array", 19 | "minItems": 1, 20 | "additionalItems": false, 21 | "required": [ 22 | "0" 23 | ], 24 | "items": { 25 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0", 26 | "name": "0", 27 | "title": "initiative 0 schema", 28 | "description": "Information about a particular initiative", 29 | "type": "object", 30 | "required": [ 31 | "strategyId", 32 | "strategyTitle", 33 | "decisionDate", 34 | "ombInitiative", 35 | "amountType", 36 | "fy2012", 37 | "fy2013", 38 | "fy2014", 39 | "fy2015", 40 | "fy2016" 41 | ], 42 | "properties": { 43 | "strategyId": { 44 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/strategyId", 45 | "name": "stratgeyId", 46 | "description": "Strategy identifier", 47 | "title": "strategyId schema", 48 | "type": "number", 49 | "minimum": 1, 50 | "maximum": 999, 51 | "multipleOf": 1 52 | }, 53 | "strategyTitle": { 54 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/strategyTitle", 55 | "name": "stratgeyTitle", 56 | "title": "strategyTitle schema", 57 | "description": "Strategy title", 58 | "type": "string", 59 | "minLength": 1, 60 | "maxLength": 100 61 | }, 62 | "useOfSavingsAvoidance": { 63 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/useOfSavingsAvoidance", 64 | "name": "useOfSavingsAvoidance", 65 | "title": "useOfSavingsAvoidance schema", 66 | "description": "Use of Savings Avoidance", 67 | "type": "string", 68 | "minLength": 1, 69 | "maxLength": 500 70 | }, 71 | "decisionDate": { 72 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/decisionDate", 73 | "name": "regex", 74 | "title": "decisionDate schema", 75 | "description": "Decision date (MM/DD/YYYY format)", 76 | "type": "string", 77 | "pattern": "^[0-9]{2}/[0-9]{2}/[0-9]{4}$" 78 | }, 79 | "ombInitiative": { 80 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/ombInitiative", 81 | "name": "ombInitiative", 82 | "title": "ombInitiative schema", 83 | "description": "OMB Initiative (Data Center, Digital Services, Commodity IT, PortfolioStat or Other)", 84 | "type": "string", 85 | "enum": [ 86 | "Data Center", 87 | "Digital Services", 88 | "Commodity IT", 89 | "PortfolioStat", 90 | "Other" 91 | ] 92 | }, 93 | "amountType": { 94 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/properties/amountType", 95 | "name": "amountType", 96 | "title": "amountType schema", 97 | "description": "Amount Type (Cost-Savings, Cost-Avoidance or Both)", 98 | "type": "string", 99 | "enum": [ 100 | "Cost-Savings", 101 | "Cost-Avoidance", 102 | "Both" 103 | ] 104 | }, 105 | "relatedUIIs": { 106 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/relatedUIIs", 107 | "name": "relatedUIIs", 108 | "title": "relatedUIIs schema", 109 | "description": "Related UIIs", 110 | "type": "array", 111 | "minItems": 1, 112 | "additionalItems": false, 113 | "required": [ 114 | "0" 115 | ], 116 | "items": { 117 | "0": { 118 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/relatedUIIs/0", 119 | "name": "0", 120 | "title": "relatedUIIs 0 schema", 121 | "description": "Related UII", 122 | "type": "string", 123 | "pattern": "^[0-9]{3}-[0-9]{9}$" 124 | } 125 | } 126 | }, 127 | "fy2012": { 128 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2012", 129 | "name": "fy2012", 130 | "title": "fy2012 schema", 131 | "description": "Fiscal Year 2012", 132 | "type": "object", 133 | "required": [ 134 | "amount", 135 | "netOrGross" 136 | ], 137 | "properties": { 138 | "amount": { 139 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2012/properties/amount", 140 | "name": "amount", 141 | "title": "fy2012 amount schema", 142 | "description": "Fiscal Year 2012 Amount", 143 | "type": "number", 144 | "minimum": 0, 145 | "maximum": 1000 146 | }, 147 | "netOrGross": { 148 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2012/netOrGross", 149 | "name": "amount", 150 | "title": "fy2012 netOrGross schema", 151 | "description": "Fiscal Year 2012 Amount Type (Net or Gross)", 152 | "type": "string", 153 | "enum": [ 154 | "Net", 155 | "Gross" 156 | ] 157 | } 158 | } 159 | }, 160 | "fy2013": { 161 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2013", 162 | "name": "fy2013", 163 | "title": "fy2013 schema", 164 | "description": "Fiscal Year 2013", 165 | "type": "object", 166 | "required": [ 167 | "amount", 168 | "netOrGross" 169 | ], 170 | "properties": { 171 | "amount": { 172 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2013/properties/amount", 173 | "name": "amount", 174 | "title": "fy2013 amount schema", 175 | "description": "Fiscal Year 2013 Amount", 176 | "type": "number", 177 | "minimum": 0, 178 | "maximum": 1000 179 | }, 180 | "netOrGross": { 181 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2013/netOrGross", 182 | "name": "amount", 183 | "title": "fy2013 netOrGross schema", 184 | "description": "Fiscal Year 2013 Amount Type (Net or Gross)", 185 | "type": "string", 186 | "enum": [ 187 | "Net", 188 | "Gross" 189 | ] 190 | } 191 | } 192 | }, 193 | "fy2014": { 194 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2014", 195 | "name": "fy2014", 196 | "title": "fy2014 schema", 197 | "description": "Fiscal Year 2014", 198 | "type": "object", 199 | "required": [ 200 | "amount", 201 | "netOrGross" 202 | ], 203 | "properties": { 204 | "amount": { 205 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2014/properties/amount", 206 | "name": "amount", 207 | "title": "fy2014 amount schema", 208 | "description": "Fiscal Year 2014 Amount", 209 | "type": "number", 210 | "minimum": 0, 211 | "maximum": 1000 212 | }, 213 | "netOrGross": { 214 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2014/netOrGross", 215 | "name": "amount", 216 | "title": "fy2014 netOrGross schema", 217 | "description": "Fiscal Year 2014 Amount Type (Net or Gross)", 218 | "type": "string", 219 | "enum": [ 220 | "Net", 221 | "Gross" 222 | ] 223 | } 224 | } 225 | }, 226 | "fy2015": { 227 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2015", 228 | "name": "fy2015", 229 | "title": "fy2015 schema", 230 | "description": "Fiscal Year 2015", 231 | "type": "object", 232 | "required": [ 233 | "amount", 234 | "netOrGross" 235 | ], 236 | "properties": { 237 | "amount": { 238 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2015/properties/amount", 239 | "name": "amount", 240 | "title": "fy2015 amount schema", 241 | "description": "Fiscal Year 2015 Amount", 242 | "type": "number", 243 | "minimum": 0, 244 | "maximum": 1000 245 | }, 246 | "netOrGross": { 247 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2015/netOrGross", 248 | "name": "amount", 249 | "title": "fy2015 netOrGross schema", 250 | "description": "Fiscal Year 2015 Amount Type (Net or Gross)", 251 | "type": "string", 252 | "enum": [ 253 | "Net", 254 | "Gross" 255 | ] 256 | } 257 | } 258 | }, 259 | "fy2016": { 260 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2016", 261 | "name": "fy2016", 262 | "title": "fy2016 schema", 263 | "description": "Fiscal Year 2016", 264 | "type": "object", 265 | "required": [ 266 | "amount", 267 | "netOrGross" 268 | ], 269 | "properties": { 270 | "amount": { 271 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2016/properties/amount", 272 | "name": "amount", 273 | "title": "fy2016 amount schema", 274 | "description": "Fiscal Year 2016 Amount", 275 | "type": "number", 276 | "minimum": 0, 277 | "maximum": 1000 278 | }, 279 | "netOrGross": { 280 | "id": "https://omb.max.gov/schemas/CostSavingsAndAvoidance/strategies/0/fy2016/netOrGross", 281 | "name": "amount", 282 | "title": "fy2016 netOrGross schema", 283 | "description": "Fiscal Year 2016 Amount Type (Net or Gross)", 284 | "type": "string", 285 | "enum": [ 286 | "Net", 287 | "Gross" 288 | ] 289 | } 290 | } 291 | } 292 | } 293 | } 294 | } 295 | } 296 | } 297 | -------------------------------------------------------------------------------- /schemaexamples/leadersexample.json: -------------------------------------------------------------------------------- 1 | { 2 | "leaders" : [ 3 | { 4 | "bureauCode" : "12", 5 | "firstName" : "Jane", 6 | "lastName" : "Smith", 7 | "employmentType" : "GS", 8 | "typeOfAppointment" : "career", 9 | "otherResponsibilities": "Optional description of other responsibilities here. Max length is 500 characters.", 10 | "evaluationRatingOfficialTitle" : "CIO", 11 | "evaluationReviewingOfficialTitle" : "Optional Reviewing Official Title here. Max 500 characters", 12 | "keyBureauCIO" : "Yes" 13 | }, 14 | { 15 | "bureauCode": "33", 16 | "firstName": "John", 17 | "lastName": "Doe", 18 | "employmentType": "SES", 19 | "typeOfAppointment": "political", 20 | "evaluationRatingOfficialTitle": "CFO", 21 | "keyBureauCIO": "No" 22 | } 23 | ] 24 | 25 | } -------------------------------------------------------------------------------- /script/bootstrap: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | bundle install -------------------------------------------------------------------------------- /script/server: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | #kill _site folder 6 | echo "cleaning up..." 7 | rm -Rf _site 8 | 9 | #server 10 | echo "Spinnin' up the server..." 11 | bundle exec "jekyll serve -w -c _config.yml,_config_local.yml" --------------------------------------------------------------------------------