├── .gitignore ├── README.md ├── analysis └── toshiakit │ ├── README.md │ └── survey-reveals-diversity-in-the-learn-to-code-movement.m ├── clean-data ├── 2016-FCC-New-Coders-Survey-Data.csv ├── README.md ├── clean-data.R ├── example-age.png └── survey-data-dictionary.md ├── data ├── 2016-New-Coder-Survey-Data-Summary.csv ├── maps-data-min.json ├── maps-data.json └── world-geo3-min.json ├── images ├── FCC-favicon-32x32.png └── FCC-favicon-96x96.png ├── index.html ├── javascript ├── barcharts.js ├── main.js └── maps.js ├── raw-data ├── 2016 New Coders Part 2.csv ├── 2016 New Coders Survey Part 1.csv └── survey-questions.txt └── stylesheets ├── bar-charts.scss ├── base.scss ├── bourbon ├── _bourbon-deprecated-upcoming.scss ├── _bourbon.scss ├── addons │ ├── _border-color.scss │ ├── _border-radius.scss │ ├── _border-style.scss │ ├── _border-width.scss │ ├── _buttons.scss │ ├── _clearfix.scss │ ├── _ellipsis.scss │ ├── _font-stacks.scss │ ├── _hide-text.scss │ ├── _margin.scss │ ├── _padding.scss │ ├── _position.scss │ ├── _prefixer.scss │ ├── _retina-image.scss │ ├── _size.scss │ ├── _text-inputs.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 │ ├── _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 │ ├── _selection.scss │ ├── _text-decoration.scss │ ├── _transform.scss │ ├── _transition.scss │ └── _user-select.scss ├── functions │ ├── _assign-inputs.scss │ ├── _contains-falsy.scss │ ├── _contains.scss │ ├── _is-length.scss │ ├── _is-light.scss │ ├── _is-number.scss │ ├── _is-size.scss │ ├── _modular-scale.scss │ ├── _px-to-em.scss │ ├── _px-to-rem.scss │ ├── _shade.scss │ ├── _strip-units.scss │ ├── _tint.scss │ ├── _transition-property-name.scss │ └── _unpack.scss ├── helpers │ ├── _convert-units.scss │ ├── _directional-values.scss │ ├── _font-source-declaration.scss │ ├── _gradient-positions-parser.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 │ ├── _asset-pipeline.scss │ ├── _prefixer.scss │ └── _px-to-em.scss ├── chart.scss ├── footer.scss ├── header.scss ├── maps.scss ├── neat ├── _neat-helpers.scss ├── _neat.scss ├── functions │ ├── _new-breakpoint.scss │ └── _private.scss ├── grid │ ├── _box-sizing.scss │ ├── _direction-context.scss │ ├── _display-context.scss │ ├── _fill-parent.scss │ ├── _media.scss │ ├── _omega.scss │ ├── _outer-container.scss │ ├── _pad.scss │ ├── _private.scss │ ├── _row.scss │ ├── _shift.scss │ ├── _span-columns.scss │ ├── _to-deprecate.scss │ └── _visual-grid.scss └── settings │ ├── _disable-warnings.scss │ ├── _grid.scss │ └── _visual-grid.scss ├── popup.scss ├── style.css ├── style.css.map ├── style.min.css ├── style.min.css.map ├── style.scss └── stylesheets /.gitignore: -------------------------------------------------------------------------------- 1 | .sass-cache/ 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # The 2016 New Coder Survey 2 | 3 | We announced on [March 29th, 4 | 2016](https://twitter.com/FreeCodeCamp/status/714930182721679360) that we'd like to better understand new coders using a survey. 5 | 6 | Survey development was lead by [Quincy Larson](https://twitter.com/ossia) with Free Code Camp and [Saron Yitbarek](https://twitter.com/saronyitbarek) with Code Newbie. For more about why we made this survey: ["How we crafted a survey for thousands of people who are learning to code"](https://medium.freecodecamp.com/we-just-launched-the-biggest-ever-survey-of-people-learning-to-code-cac81dadf1ea#.8g9ts8gm5). 7 | 8 | ## Table of Contents 9 | 10 | - [About the Data](#about-the-data) 11 | - [How to Contribute](#how-to-contribute) 12 | - [Analysis of this data](#analysis-of-this-data) 13 | - [Analysis of other relevant recent data](#analysis-of-other-relevant-recent-data) 14 | - [Acknowledgement](#acknowledgement) 15 | - [License](#license) 16 | 17 | ## About the Data 18 | 19 | The raw survey results are located in the [`raw-data/`](raw-data/) directory, in `.csv` format. 20 | 21 | We have cleaned and combined the data for convenience of downstream analyses and visualizations. The cleaned data is located in the [`clean-data/`](clean-data/) directory. 22 | 23 | ## How to Contribute 24 | 25 | - Fork this repository and checkout the [issues](https://github.com/FreeCodeCamp/2016-new-coder-survey/issues/41) for questions that you can help us answer with d3.js data visualizations. 26 | - Come up with your own questions and [add them as new issues](https://github.com/FreeCodeCamp/2016-new-coder-survey/issues/new). 27 | 28 | ## Analysis of this data 29 | 30 | - [Kaggle](https://www.kaggle.com/freecodecamp/2016-new-coder-survey-/kernels) 31 | - [Toshiaki Takeuchi](http://blogs.mathworks.com/loren/2016/06/27/survey-reveals-diversity-in-the-learn-to-code-movement/) 32 | - [SamAI](https://github.com/FreeCodeCamp/2016-new-coder-survey/issues/40) 33 | - [evaristoc](http://evaristoc.github.io/viz_exer/chartandpie/) 34 | 35 | ## Analysis of other relevant recent data 36 | 37 | - [Stack Overflow's 2016 Developer Survey](https://medium.freecodecamp.com/2-out-of-3-developers-are-self-taught-and-other-insights-from-stack-overflow-s-2016-survey-of-50-8cf0ee5d4c21#.yhlo2k5oz) 38 | - [O'Reilly's 2016 Developer Salary Survey](https://medium.freecodecamp.com/5-000-developers-talk-about-their-salaries-d13ddbb17fb8#.umwcssab4) 39 | 40 | 41 | ## Acknowledgement 42 | 43 | We want to thanks all the people who participated in this project. Particular thanks to the members of the Free Code Camp Gitter [DataScience chatroom](https://gitter.im/FreeCodeCamp/DataScience) and more specially to the team formed by [@erictleung](https://github.com/erictleung), [@SamAI-Software](https://github.com/SamAI-Software), [@krisgesling](https://github.com/krisgesling) and [@evaristoc](https://github.com/evaristoc). 44 | 45 | [@erictleung](https://github.com/erictleung) championed the preparation of the clean dataset, [@SamAI-Software](https://github.com/SamAI-Software) worked on the coordination, analysis and final presentation of the charts, [@krisgesling](https://github.com/krisgesling) prepared the map and helped with the final touches of the presentation, and [@evaristoc](https://github.com/evaristoc) coordinated the DataScience room and supported the activities of the members of team. 46 | 47 | Extended thanks to all the members of the room who also contributed before and after the fieldwork of this survey by providing observations, finding and hightlighting discrepancies, suggesting ideas for charts, etc. Thanks to all of you. 48 | 49 | ## License 50 | 51 | This 2016 New Coder Survey is made available under the Open Database License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in individual contents of the database are licensed under the Database Contents License: http://opendatacommons.org/licenses/dbcl/1.0/ 52 | -------------------------------------------------------------------------------- /analysis/toshiakit/README.md: -------------------------------------------------------------------------------- 1 | # Survey Reveals Diversity in the “Learn to Code” Movement 2 | 3 | Posted by Loren Shure, June 27, 2016 4 | 5 | Do you use any free "learn to code" website to teach yourself programming? You may already know how to program in MATLAB, but you may very well be learning other skills on [MOOCs](https://en.wikipedia.org/wiki/Massive_open_online_course). 6 | 7 | Today's guest blogger, Toshi, analyzed a publicly available survey data to understand the demographic of self-taught coders. 8 | 9 | ## Contents 10 | 11 | - [Load Data](http://blogs.mathworks.com/loren/2016/06/27/survey-reveals-diversity-in-the-learn-to-code-movement/#d93d69a7-bbe1-4d71-9199-04667a401710) 12 | - [Higher Female Representation Than Expected](http://blogs.mathworks.com/loren/2016/06/27/survey-reveals-diversity-in-the-learn-to-code-movement/#bfddaa56-0b3a-42c8-baff-9dab7527b7b0) 13 | - [Mostly Studying in Countries of Citizenship](http://blogs.mathworks.com/loren/2016/06/27/survey-reveals-diversity-in-the-learn-to-code-movement/#3640d862-a498-4e79-a43e-dedde1a3f715) 14 | - [Ethnically Diverse English Speakers in US](http://blogs.mathworks.com/loren/2016/06/27/survey-reveals-diversity-in-the-learn-to-code-movement/#c105553c-1bb2-4250-aa57-76b7a685c7e1) 15 | - and [more](http://blogs.mathworks.com/loren/2016/06/27/survey-reveals-diversity-in-the-learn-to-code-movement/) 16 | 17 | ## About the Data 18 | 19 | I came across a Techcrunch article, [Free Code Camp survey reveals demographics of self-taught coders](http://techcrunch.com/2016/05/04/free-code-camp-survey-reveals-demographics-of-self-taught-coders/), and I got curious because a lot of people seem to interested in learning how to code, and industry and government are also encouraging this trend. But programming is hard. Who exactly are the kind of people who have taken the plunge? Our own free interactive online programming classes on [MATLAB Academy](https://matlabacademy.mathworks.com/) or gamified [MATLAB Cody](https://www.mathworks.com/matlabcentral/about/cody/) are also gaining popularity and I would like to understand what motivates this interest. 20 | 21 | The survey was conducted anonymously and published on the web and promoted via social media from March 28 through May 2, 2016, targeting people who are relatively new to programming. 22 | 23 | The following analysis shows significant diversity in gender and ethnic mix among self-taught coders and the possible impact of MOOCs in opening up access for under-served populations by traditional STEM education paths. 24 | 25 | I first downloaded the [2016 New Coder Survey result from Github](https://github.com/FreeCodeCamp/2016-new-coder-survey). I then unzipped the CSV files into my current folder. There are two files - part 1 and part 2 - and we will read them into separate tables. We could perhaps merge them using [innerjoin](http://www.mathworks.com/help/matlab/ref/innerjoin.html), but in this case I am primarily interested in part 2 only and we will be discarding at least 1000 responses from part 1, given the differences in number of responses. 26 | 27 | (see the [blog post](http://blogs.mathworks.com/loren/2016/06/27/survey-reveals-diversity-in-the-learn-to-code-movement/) for further reading) 28 | -------------------------------------------------------------------------------- /clean-data/README.md: -------------------------------------------------------------------------------- 1 | # Cleaning and Combine Free Code Camp Survey Data 2 | 3 | ## Table of Contents 4 | 5 | 6 | 7 | 8 | 9 | - [Introduction](#introduction) 10 | - [Prerequisites to Rerun Data Manipulations](#prerequisites-to-rerun-data-manipulations) 11 | - [Reproduce Cleaning and Combining of Data](#reproduce-cleaning-and-combining-of-data) 12 | - [Notable Data Transformations](#notable-data-transformations) 13 | - [Obvious Outliers](#obvious-outliers) 14 | - [Numeric Ranges](#numeric-ranges) 15 | - [Years to Months](#years-to-months) 16 | - [Normalization of Answers](#normalization-of-answers) 17 | - [Getting Started Analyzing Data with R](#getting-started-analyzing-data-with-r) 18 | - [Loading Data](#loading-data) 19 | - [Example: Age](#example-age) 20 | - [Changelog](#changelog) 21 | 22 | 23 | 24 | ## Introduction 25 | 26 | The survey data was broken up into two parts and need to be combined into one 27 | for ease of future downstream analyses. Additionally, these two data sets need 28 | to be cleaned up a bit because of the nature of survey data. 29 | 30 | ## Prerequisites to Rerun Data Manipulations 31 | 32 | - [R][RProj] (>= 3.3.0) 33 | - [dplyr][dplyrGH] (>= 0.5.0) [CRAN][dplyrCRAN] 34 | - [Rcpp][RcppGH] (>= 0.12.6) [CRAN][RcppCRAN] 35 | 36 | [RProj]: https://www.r-project.org/ 37 | [dplyrGH]: https://github.com/hadley/dplyr 38 | [RcppGH]: https://github.com/RcppCore/Rcpp 39 | [dplyrCRAN]: https://cran.r-project.org/web/packages/dplyr/index.html 40 | [RcppCRAN]: https://cran.r-project.org/web/packages/Rcpp/index.html 41 | 42 | 43 | ## Reproduce Cleaning and Combining of Data 44 | 45 | Running the following script will create a new file 46 | `2016-FCC-New-Coders-Survey-Data.csv` file in this directory `clean-data/`. 47 | 48 | ```shell 49 | git clone https://github.com/FreeCodeCamp/2016-new-coder-survey.git 50 | cd clean-data 51 | Rscript clean-data.R 52 | ``` 53 | 54 | 55 | ## Notable Data Transformations 56 | 57 | ### Obvious Outliers 58 | 59 | In some of the numeric free text answers, numeric values were filtered out if it 60 | was beyond a reasonable threshold. For example, an answer saying you've coded 61 | for 100,000 months would be removed. 62 | 63 | ### Numeric Ranges 64 | 65 | Some answers were given as ranges. For example, a range of "9-10" months of 66 | programming might have been answer to a question. The average of this range was 67 | taken when possible. 68 | 69 | ### Years to Months 70 | 71 | Some answers to a question asking about months were given in years. These were 72 | converted to months if possible. 73 | 74 | ### Normalization of Answers 75 | 76 | Some of the free text answers were very similar to each other, with the 77 | exception of a space or two. These will register as different answers if you 78 | aren't looking for them. Answers like "Cybersecurity" and "Cyber Security" are 79 | the same and were changed to a consistent manner. There may have been some 80 | missed. 81 | 82 | 83 | ## Getting Started Analyzing Data with R 84 | 85 | ### Loading Data 86 | 87 | For an initial look at the data, you can load the data into R with the 88 | following commands. 89 | 90 | ```r 91 | > library(dplyr) # Used for each of use and manipulation of data 92 | > setwd("directory-where-clean-survey-data-is") # Change this to your path 93 | > survey <- read.csv(file = "2016-FCC-New-Coders-Survey-Data.csv", 94 | + header = TRUE, 95 | + na.strings = NA, 96 | + stringsAsFactors = FALSE) %>% tbl_df() 97 | ``` 98 | 99 | 100 | ### Example: Age 101 | 102 | ```r 103 | > survey %>% select(Age) %>% filter(!is.na(Age)) %>% summary() 104 | # Age 105 | # Min. :10.00 106 | # 1st Qu.:23.00 107 | # Median :27.00 108 | # Mean :29.18 109 | # 3rd Qu.:33.00 110 | # Max. :86.00 111 | > library(ggplot2) # Use for data visualizations 112 | > survey %>% filter(!is.na(Age)) %>% 113 | + ggplot(aes(x = Age)) + geom_histogram(binwidth = 5) 114 | ``` 115 | 116 | ![Age distribution](example-age.png) 117 | 118 | 119 | ## Changelog 120 | 121 | - 2016 Aug 1st 122 | - Set minimum commute time to 300 minutes 123 | - Set minimum home mortgage to $1000 and maximum home mortgage to $1000000 124 | - Set minimum student debt to $1000 and maximum student debt to $500000 125 | - Check for consistent answers for number of children and yes/no to having 126 | childen i.e. if you answered yes to having children, you should have a 127 | number for number of children 128 | - Fix spelling mistake in `IsReceiveDisabilitiesBenefits` (original: 129 | IsReceiveDiabilitiesBenefits) 130 | - Update R and R package versions 131 | - 2016 May 18th 132 | - Initial dataset combine and cleaning 133 | -------------------------------------------------------------------------------- /clean-data/example-age.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/freeCodeCamp/2016-new-coder-survey/c7eaf6b3da8e874e94d71960b6812a3e0ced0704/clean-data/example-age.png -------------------------------------------------------------------------------- /data/2016-New-Coder-Survey-Data-Summary.csv: -------------------------------------------------------------------------------- 1 | Number,Age,AgePpl,AgePerc,BootcampYesNo,BootcampYesNoPpl,BootcampYesNoPerc,BootcampFinish,BootcampFinishPpl,BootcampFinishPerc,BootcampFullJobAfter,BootcampFullJobAfterPpl,BootcampFullJobAfterPerc,BootcampLoan,BootcampLoanPpl,BootcampLoanPerc,BootcampMonthsAgo,BootcampMonthsAgoPpl,BootcampMonthsAgoPerc,BootcampName,BootcampNamePpl,BootcampNamePerc,BootcampPostSalary,BootcampPostSalaryPpl,BootcampPostSalaryPerc,BootcampRecommend,BootcampRecommendPpl,BootcampRecommendPerc,ChildrenNumber,ChildrenNumberPpl,ChildrenNumberPerc,CityPopulation,CityPopulationPpl,CityPopulationPerc,CodeEvent,CodeEventPpl,CodeEventPerc,CommuteTime,CommuteTimePpl,CommuteTimePerc,CountryCitizen,CountryCitizenPpl,CountryCitizenPerc,CountryLive,CountryLivePpl,CountryLivePerc,EmploymentField,EmploymentFieldPpl,EmploymentFieldPerc,EmploymentStatus,EmploymentStatusPpl,EmploymentStatusPerc,ExpectedEarning,ExpectedEarningPpl,ExpectedEarningPerc,FinanciallySupporting,FinanciallySupportingPpl,FinanciallySupportingPerc,Gender,GenderPpl,GenderPerc,HasChildren,HasChildrenPpl,HasChildrenPerc,HasDebt,HasDebtPpl,HasDebtPerc,HasFinancialDependents,HasFinancialDependentsPpl,HasFinancialDependentsPerc,HasHighSpdInternet,HasHighSpdInternetPpl,HasHighSpdInternetPerc,HasHomeMortgage,HasHomeMortgagePpl,HasHomeMortgagePerc,HasServedInMilitary,HasServedInMilitaryPpl,HasServedInMilitaryPerc,HasStudentDebt,HasStudentDebtPpl,HasStudentDebtPerc,HomeMortgageOwe,HomeMortgageOwePpl,HomeMortgageOwePerc,HoursLearning,HoursLearningPpl,HoursLearningPerc,Income,IncomePpl,IncomePerc,IsEthnicMinority,IsEthnicMinorityPpl,IsEthnicMinorityPerc,IsReceiveDiabilitiesBenefits,IsReceiveDiabilitiesBenefitsPpl,IsReceiveDiabilitiesBenefitsPerc,IsSoftwareDev,IsSoftwareDevPpl,IsSoftwareDevPerc,IsUnderEmployed,IsUnderEmployedPpl,IsUnderEmployedPerc,JobApplyWhen,JobApplyWhenPpl,JobApplyWhenPerc,JobPref,JobPrefPpl,JobPrefPerc,JobRelocateYesNo,JobRelocateYesNoPpl,JobRelocateYesNoPerc,JobRoleInterest,JobRoleInterestPpl,JobRoleInterestPerc,JobWherePref,JobWherePrefPpl,JobWherePrefPerc,LanguageAtHome,LanguageAtHomePpl,LanguageAtHomePerc,MaritalStatus,MaritalStatusPpl,MaritalStatusPerc,MoneyForLearning,MoneyForLearningPpl,MoneyForLearningPerc,MonthsProgramming,MonthsProgrammingPpl,MonthsProgrammingPerc,Podcast,PodcastPpl,PodcastPerc,Resources,ResourcesPpl,ResourcesPerc,SchoolDegree,SchoolDegreePpl,SchoolDegreePerc,SchoolMajor,SchoolMajorPpl,SchoolMajorPerc,StudentDebtOwe,StudentDebtOwePpl,StudentDebtOwePerc 2 | 1,under 25,4581,0.336516565,No,14427,0.938036411,Yes,643,0.689174705,Yes,371,0.584251969,No,623,0.667023555,< 3 months,149,0.236133122,General Assembly,90,0.100558659,>120k,9,0.027272727,Yes,736,0.785485592,1,1067,0.417776038,more than 1 million,5558,0.407776963,conferences,2898,0.18553137,60,1120,0.13430867,United States of America,5976,0.437673942,United States of America,6265,0.460323292,software development and IT,4483,0.589248,Employed for wages,7201,0.558044017,>120k,166,0.02731611,No,3210,0.803303303,Male,10766,0.783209661,Yes,2579,0.642821535,No,7204,0.529316679,No,9609,0.704472141,Yes,11981,0.87933945,No,4586,0.719824203,No,12517,0.923763838,Yes,3756,0.589546382,> 200k,479,0.319120586,0-9 hours,5704,0.384703581,>120k,342,0.046663938,No,10392,0.761597655,No,13220,0.977087953,No,11234,0.723048208,No,4999,0.578253326,Within the next 6 months,2038,0.302060175,medium-sized company,3281,0.293234427,Yes,4036,0.735556771,Full-Stack Web Developer,2571,0.39535599,in an office with other developers,3830,0.568333581,English,7419,0.546237668,married or partnership,2915,0.726932668,0,6587,0.44873629,0-11 months,7945,0.529172772,Code Newbie,1878,0.127408412,Free Code Camp,10937,0.700192061,bachelor's degree,5644,0.41260326,Computer Science,1387,0.164142012,> 120k,130,0.036994878 3 | 2,25-29,3661,0.268934107,Yes,953,0.061963589,No,290,0.310825295,No,264,0.415748031,Yes,311,0.332976445,3-6 months,142,0.22503962,Flatiron School,54,0.060335196,100k - 120k,23,0.06969697,No,201,0.214514408,2,961,0.376272514,"between 100,000 and 1 million",4917,0.360748349,hackathons,2422,0.155057618,0,957,0.114761962,India,1154,0.084517358,India,981,0.072079353,education,610,0.080178759,Not working but looking for work,2626,0.20350279,100k - 120k,227,0.037353958,Yes,786,0.196696697,Female,2840,0.206605558,No,1433,0.357178465,Yes,6406,0.470683321,Yes,4031,0.295527859,No,1644,0.12066055,Yes,1785,0.280175797,Yes,1033,0.076236162,No,2615,0.410453618,150k - 200k,208,0.138574284,10-29 hours,6729,0.453834221,100k - 120k,218,0.029744849,Yes,3253,0.238402345,Yes,310,0.022912047,Yes,4303,0.276951792,Yes,3646,0.421746674,I haven't decided,1344,0.199199644,freelance,2261,0.202073465,No,1451,0.264443229,Front-End Web Developer,1379,0.212055974,no preference,1694,0.251372607,Spanish,771,0.056766308,single,1095,0.273067,< 1k,5848,0.398392261,12-59 months,5538,0.368855735,JavaScript Jabber,1356,0.091994573,Codecademy,9586,0.613700384,"some college credit, no degree",2268,0.165801594,Information Technology,408,0.048284024,80k - 120k,181,0.051508253 4 | 3,30-39,3641,0.267464923,,,,,,,,,,,,,6-12 months,147,0.23296355,Dev Bootcamp,48,0.053631285,80k - 100k,47,0.142424242,,,,3+,350,0.205951,"less than 100,000",3155,0.231474688,coffe-and-codes,2077,0.132970551,30,918,0.110085142,United Kingdom,542,0.039695327,United Kingdom,618,0.045407788,"arts, media, sports",416,0.054679285,Self-employed freelancer,1099,0.08516739,80k - 100k,555,0.091327958,,,,Other,140,0.010184,,,,,,,,,,,,,,,,,,,,,,100k - 150k,301,0.200532978,30+ hours,2394,0.161462197,80k - 100k,384,0.052394597,,,,,,,,,,,,,Within 7 to 12 months,1195,0.177115755,start your own business,2234,0.199660381,,,,Back-End Web Developer,704,0.108257727,from home,1215,0.180293812,Russian,547,0.040273892,,,,1k - 5k,1337,0.091082499,60+ months,1531,0.101971493,Software Engineering Daily,775,0.052578019,Coursera,4844,0.310115237,master's degree (non-professional),1445,0.105636377,Electrical Engineering (EEE),384,0.045443786,40k - 80k,707,0.201195219 5 | 4,40+,1730,0.127084405,,,,,,,,,,,,,>12 months,193,0.305863708,The Iron Yard,40,0.044692737,60k - 80k,109,0.33030303,,,,,,,,,,Other,921,0.058962868,120,614,0.073629932,Canada,495,0.036253113,Canada,542,0.039823659,office and admin support,414,0.054416404,"Not working, not looking",708,0.054866708,60k - 80k,1739,0.286160935,,,,,,,,,,,,,,,,,,,,,,,,,,,,50k - 100k,255,0.169886742,,,,60k - 80k,949,0.129485605,,,,,,,,,,,,,I'm already applying,1179,0.174744331,startup,2031,0.181517562,,,,Data Scientist / Data Engineer,646,0.099338767,,,,Hindi,453,0.033352967,,,,5k - 10k,353,0.02404796,,,,The Changelog,583,0.039552239,Udemy,4130,0.264404609,high school or equivalent,1356,0.099130053,Business Administration,284,0.033609467,20k - 40k,985,0.280307342 6 | 5,,,,,,,,,,,,,,,,,,,Prime Digital Academy,30,0.033519553,40k - 60k,97,0.293939394,,,,,,,,,,Startup Weekend,743,0.047567222,20,568,0.068113683,Brazil,299,0.021898345,Brazil,269,0.019764879,sales,335,0.044032597,Self-employed business owner,495,0.038360198,40k - 60k,1755,0.288793813,,,,,,,,,,,,,,,,,,,,,,,,,,,,< 50k,258,0.17188541,,,,40k - 60k,1642,0.224041479,,,,,,,,,,,,,more than 12 months from now,991,0.146880095,multinational corporation,1382,0.123514166,,,,Mobile Developer,414,0.063662925,,,,Portuguese,394,0.029008982,,,,> 10k,554,0.037740991,,,,ShopTalk,83,0.005630936,KhanAcademy,3746,0.239820743,some high school,764,0.055852036,Economics,252,0.029822485,< 20k,1511,0.429994308 7 | 6,,,,,,,,,,,,,,,,,,,Hack Reactor,29,0.032402235,20k - 40k,32,0.096969697,,,,,,,,,,Women Who Code,711,0.045518566,40,479,0.05744094,Russia,268,0.019627948,Australia,263,0.019324026,food and beverage,279,0.036671924,Doing an unpaid internship,256,0.01983881,20k - 40k,910,0.14974494,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,20k - 40k,2097,0.286123619,,,,,,,,,,,,,,,,,,,,,,User Experience Designer,275,0.042288175,,,,Polish,245,0.01803858,,,,,,,,,,Developer Tea,80,0.005427408,PluralSight,3565,0.228233035,"professional (MBA, MD, JD)",692,0.050588493,English,204,0.024142012,,, 8 | 7,,,,,,,,,,,,,,,,,,,Turing,27,0.030167598,<20k,13,0.039393939,,,,,,,,,,Girl Develop It,558,0.035723431,90,382,0.04580885,Ukraine,254,0.018602607,Germany,255,0.018736223,finance,274,0.036014721,"Stay-at-home parent, homemaker",221,0.017126472,<20k,725,0.119302287,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<20k,1697,0.231545913,,,,,,,,,,,,,,,,,,,,,,DevOps / SysAdmin,219,0.033676765,,,,French,235,0.017302312,,,,,,,,,,The Ruby Rogues,79,0.005359566,EdX,3472,0.222279129,associate's degree,649,0.047444989,Psychology,187,0.022130178,,, 9 | 8,,,,,,,,,,,,,,,,,,,App Academy,22,0.024581006,,,,,,,,,,,,,NodeSchool,480,0.030729834,10,370,0.044369829,Poland,239,0.017504028,Russia,251,0.018442322,health care,264,0.034700315,Unable to work,200,0.01549907,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Product Manager,191,0.02937106,,,,German,216,0.015903402,,,,,,,,,,Talk Python to Me,41,0.002781547,Udacity,3306,0.211651729,"trade, technical, vocational",443,0.032385408,Software Engineering,159,0.018816568,,, 10 | 9,,,,,,,,,,,,,,,,,,,Hackbright Academy,22,0.024581006,,,,,,,,,,,,,Meetup,313,0.020038412,15,343,0.04113203,Australia,232,0.016991358,Ukraine,224,0.016458486,"architecture, physical eng",150,0.019716088,Military,60,0.004649721,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Quality Assurance Engineer,104,0.015992619,,,,Arabic,175,0.0128847,,,,,,,,,,Programming Throwdown,34,0.002306649,Other,2093,0.133994878,no high school (secondary school),258,0.018861028,Liberal Arts,157,0.018579882,,, 11 | 10,,,,,,,,,,,,,,,,,,,Bloc.io,21,0.023463687,,,,,,,,,,,,,RailsBridge,255,0.016325224,45,308,0.036934884,Germany,208,0.015233631,Poland,202,0.014842028,transportation,149,0.019584648,Retired,38,0.002944823,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Romanian,164,0.012074805,,,,,,,,,,JavaScript Air,29,0.001967436,OdinProj,1687,0.108002561,Ph.D.,160,0.011696761,Engineering,148,0.017514793,,, 12 | 11,,,,,,,,,,,,,,,,,,,Code Fellows,21,0.023463687,,,,,,,,,,,,,Workshop,23,0.001472471,50,236,0.028300755,Romania,160,0.011718178,Spain,144,0.010580456,construction and extraction,118,0.015509989,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Dutch,146,0.010749521,,,,,,,,,,Hanselminutes,19,0.001289009,CodeWars,1563,0.10006402,,,,Computer Programming,147,0.01739645,,, 13 | 12,,,,,,,,,,,,,,,,,,,Galvanize,20,0.022346369,,,,,,,,,,,,,Game Jam,22,0.001408451,80,196,0.023504017,France,151,0.01105903,Netherlands,137,0.010066128,legal,68,0.00893796,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Chinese,131,0.009645119,,,,,,,,,,DotNetRocks,18,0.001221167,DevTips,968,0.061971831,,,,Mechanical Engineering,141,0.016686391,,, 14 | 13,,,,,,,,,,,,,,,,,,,MakerSquare,20,0.022346369,,,,,,,,,,,,,Django Girls,18,0.001152369,100,172,0.020625974,Spain,144,0.01054636,France,134,0.009845702,"police, fire, rescue",29,0.003811777,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Telugu,131,0.009645119,,,,,,,,,,Coding Blocks,16,0.001085482,Treehouse,422,0.027016645,,,,Physics,132,0.015621302,,, 15 | 14,,,,,,,,,,,,,,,,,,,NY Code+Design Academy,20,0.022346369,,,,,,,,,,,,,RailsGirls,14,0.000896287,5,153,0.018347524,Mexico,139,0.010180167,Romania,131,0.009625276,"farming, fishing, and forestry",19,0.002497371,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Tamil,129,0.009497865,,,,,,,,,,The Web Ahead,15,0.001017639,StackOverflow,191,0.012227913,,,,,,,,, 16 | 15,,,,,,,,,,,,,,,,,,,Coding Dojo,18,0.020111732,,,,,,,,,,,,,,,,180,152,0.018227605,Italy,133,0.009740735,Italy,118,0.008670096,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Italian,120,0.008835223,,,,,,,,,,,,,Lynda,150,0.009603073,,,,,,,,, 17 | 16,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 18 | -------------------------------------------------------------------------------- /images/FCC-favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/freeCodeCamp/2016-new-coder-survey/c7eaf6b3da8e874e94d71960b6812a3e0ced0704/images/FCC-favicon-32x32.png -------------------------------------------------------------------------------- /images/FCC-favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/freeCodeCamp/2016-new-coder-survey/c7eaf6b3da8e874e94d71960b6812a3e0ced0704/images/FCC-favicon-96x96.png -------------------------------------------------------------------------------- /javascript/barcharts.js: -------------------------------------------------------------------------------- 1 | // Author: SamAI (@SamAI-Software) 2 | // http://samai-software.github.io/ 3 | 4 | var renderBarCharts = (function(data, place, totalWidth, leftMargin, rightMargin, topic, format, totalBars, xColumn, yColumn, special) { 5 | 6 | /////////////////////////////// 7 | // -------- FORMATS -------- // 8 | /////////////////////////////// 9 | var formats = { 10 | // H4 - labels & titles outside the bar (for short bars) 11 | H4: { 12 | name: "H4", 13 | //bar value 14 | labels: { 15 | color: "black", // #006400 #008400 #7ED321 16 | position: { 17 | x: 5, 18 | y: 5, 19 | anchor: "" //"end" //"middle" //"" 20 | } 21 | }, 22 | //bar name 23 | titles: { 24 | color: "black", 25 | position: { 26 | x: -5, 27 | y: 5, 28 | anchor: "end" //"end" //"middle" //"" 29 | } 30 | } 31 | }, 32 | 33 | // H4d - same as H4, but with decimal number (for very short bars) 34 | H4d: { 35 | name: "H4d", 36 | //bar value 37 | labels: { 38 | color: "black", // #006400 #008400 #7ED321 39 | position: { 40 | x: 5, 41 | y: 5, 42 | anchor: "" //"end" //"middle" //"" 43 | }, 44 | format: d3.format(".1%") 45 | }, 46 | //bar name 47 | titles: { 48 | color: "black", 49 | position: { 50 | x: -5, 51 | y: 5, 52 | anchor: "end" //"end" //"middle" //"" 53 | } 54 | } 55 | }, 56 | 57 | // H5 - labels & titles inside the bar (for long bars) 58 | H5: { 59 | name: "H5", 60 | // bar value 61 | labels: { 62 | color: "white", 63 | position: { 64 | x: -5, 65 | y: 5, 66 | anchor: "end" //"end" //"middle" //"" 67 | } 68 | }, 69 | //bar name 70 | titles: { 71 | color: "white", 72 | position: { 73 | x: 5, 74 | y: 5, 75 | anchor: "" //"end" //"middle" //"" 76 | } 77 | } 78 | } 79 | }; 80 | 81 | //////////////////////////////////////// 82 | // ------------ SETTINGS ------------ // 83 | //////////////////////////////////////// 84 | // -These are configurable variables -// 85 | // -------- GENERAL SETTINGS -------- // 86 | var format = formats[format]; 87 | 88 | var bars = { 89 | total: totalBars + 1, // n + 1 blank bar //(5) = 6 90 | height: 25, // can be changed without problems 91 | padding: 5, // can be changed, but Y axis (left) might drift if displayed, so use it cautiously 92 | animation: { 93 | duration: 2000, 94 | delay: 50 95 | } 96 | }; 97 | 98 | // -------- SPECIFIC SETTINGS ------- // 99 | var margin = { 100 | top: 20, 101 | right: rightMargin, // rightMargin is passed value 102 | bottom: 0, 103 | left: leftMargin // leftMargin is passed value 104 | }, 105 | width = totalWidth - margin.left - margin.right, // totalWidth is passed value 106 | // width = "100%", //can't use "100%" because of left titles with const px size 107 | height = 20 - margin.top - margin.bottom + bars.total * (bars.height + bars.padding); //height generates automatically 108 | 109 | var yAxisLabel = ""; // CSS .y.axis { display: none } 110 | 111 | var formatPercent = format.labels.format? format.labels.format : d3.format(".0%"); 112 | 113 | var y = d3.scale.ordinal() 114 | .rangeRoundBands([height + 0, 0]); 115 | 116 | var x = d3.scale.linear() 117 | .range([0, width]); 118 | 119 | var xAxis = d3.svg.axis() 120 | .scale(x) 121 | .orient("bottom") 122 | .outerTickSize(0) 123 | .tickFormat(formatPercent); 124 | 125 | var yAxis = d3.svg.axis() 126 | .scale(y) 127 | .orient("left"); 128 | 129 | // preloader() sets all containers to their expected height 130 | // so they don't change size on scroll when render bar charts 131 | function preloader(place) { 132 | // console.log("renderBarCharts.preloader() called"); 133 | // +24 to fix bug, not sure where it comes from 134 | $(place).height(height+24); 135 | } 136 | 137 | function render() { 138 | // console.log("renderBarCharts.render() called"); 139 | 140 | // height "auto" to rewrite preloader to avoid bugs 141 | $(place).height("auto"); 142 | 143 | var svg = d3.select(place).append("svg") 144 | .attr("width", "100%") 145 | .attr("height", height + margin.top + margin.bottom) 146 | .attr("class", format.name) 147 | .append("g") 148 | .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); 149 | 150 | d3.csv(data, type, function(error, data) { 151 | // console.log("d3.csv called"); 152 | 153 | // Hide Y ticks labels if the value is 0 and Y axis is displayed 154 | yAxis.tickFormat(function(d) { 155 | var val = 0; 156 | data.forEach(function(item) { 157 | if (item[yColumn] == d) val = item[xColumn]; 158 | }); 159 | return val == 0 ? "" : d; // '=== 0' doesn't work, coz val might be not int 160 | }); 161 | 162 | y.domain(data.map(function(d) { 163 | return d[yColumn]; 164 | }).reverse()); 165 | x.domain([0, d3.max(data, function(d) { 166 | return d[xColumn]; 167 | })]); 168 | 169 | svg.append("g") 170 | .attr("class", "x axis") 171 | .attr("transform", "translate(0," + height + ")") 172 | .call(xAxis); 173 | 174 | svg.append("g") 175 | .attr("class", "y axis") 176 | .call(yAxis) 177 | .append("text") 178 | .attr("transform", "rotate(-90)") 179 | .attr("x", -5) 180 | .attr("y", -20) 181 | .attr("dy", ".71em") 182 | .style("text-anchor", "end") 183 | .text(yAxisLabel); 184 | 185 | svg.selectAll(".bar") 186 | .data(data) 187 | .enter() 188 | .append("rect") 189 | .attr("width", 0) 190 | .attr("x", 0) 191 | // .attr("x", 800) // for fancy animation 192 | .transition().duration(bars.animation.duration) 193 | .delay(function(d, i) { 194 | return i * bars.animation.delay; 195 | }) 196 | .attr("class", "bar") 197 | // .attr("x", 0) // for fancy animation 198 | .attr("width", function(d) { 199 | return ((x(d[xColumn])) / totalWidth) * 100 + "%"; 200 | }) 201 | .attr("y", function(d) { 202 | return (y(d[yColumn]) + bars.padding); 203 | }) 204 | .attr("height", bars.height) 205 | .filter(function(d) { 206 | return d[xColumn] == 0; // '=== 0' doesn't work, coz xColumn not int 207 | }).remove(); 208 | 209 | // Bar labels 210 | svg.selectAll(".text") 211 | .data(data) 212 | .enter() 213 | .append("text") 214 | .attr("class", "barLabel") 215 | .style("fill", "white") // fill: white; is not a good approach coz bckgr can be not white //NEED FIX 216 | .transition() 217 | .duration(300) 218 | .delay(function(d, i) { 219 | return i * bars.animation.delay + bars.animation.duration - 400; 220 | }) 221 | .text(function(d, i) { 222 | return formatPercent(d[xColumn]); 223 | }) 224 | .attr('x', function(d) { 225 | return ((x(d[xColumn]) + format.labels.position.x) / totalWidth) * 100 + "%"; 226 | }) 227 | .attr('y', function(d) { 228 | return y(d[yColumn]) + bars.height / 2 + format.labels.position.y + bars.padding; 229 | }) 230 | .style("fill", format.labels.color) 231 | .style("display", function(d) { 232 | if (!x(d[xColumn])) { 233 | return "none"; 234 | } 235 | }) 236 | .style("text-anchor", format.labels.position.anchor) 237 | .filter(function(d) { 238 | return d[xColumn] == 0; // '=== 0' doesn't work, coz xColumn not int 239 | }).remove(); 240 | 241 | // Bar titles 242 | svg.selectAll(".text") 243 | .data(data) 244 | .enter() 245 | .append('text') 246 | .attr('class', 'barTitle') 247 | .text(function(d) { 248 | return d[yColumn]; 249 | }) 250 | .attr('x', function(d) { 251 | return format.titles.position.x; 252 | }) 253 | .attr('y', function(d) { 254 | return y(d[yColumn]) + bars.height / 2 + format.titles.position.y + bars.padding; 255 | }) 256 | .style("fill", format.titles.color) 257 | .style("text-anchor", format.titles.position.anchor) 258 | .filter(function(d) { 259 | return d[xColumn] == 0; // '=== 0' doesn't work, coz xColumn not int 260 | }).remove(); 261 | 262 | }); 263 | 264 | function type(d) { 265 | // d.Age = +d.Age; 266 | return d; 267 | } 268 | } 269 | 270 | if (special == "preloader") { 271 | preloader(place); 272 | } else { 273 | render(place); 274 | } 275 | 276 | return { 277 | //API 278 | }; 279 | 280 | }); 281 | 282 | var allBarCharts = { 283 | 284 | init: function(ID) { 285 | this[ID] = false; 286 | }, 287 | 288 | preloader: function(ID) { 289 | if (!this[ID]) { 290 | prepareBarCharts(ID, "preloader") 291 | } 292 | }, 293 | 294 | check: function(ID) { 295 | if (!this[ID]) { 296 | this[ID] = true; 297 | prepareBarCharts(ID); 298 | } 299 | }, 300 | 301 | resize: function(ID) { 302 | if (this[ID]) { 303 | setTimeout(function() { 304 | //clean previous bar charts and render new 305 | $("#"+ID).html(""); 306 | prepareBarCharts(ID); 307 | }, 1000); 308 | } 309 | } 310 | }; 311 | 312 | // prepareBarCharts() prepares all variables to be passed into renderBarCharts() 313 | var prepareBarCharts = (function(topic, special) { 314 | 315 | // List of variables and settings 316 | // topic: [totalBars, format, leftMargin, rightMargin] 317 | var listOfTopics = { 318 | Age: [4, "H4", "70", "45"],//4, 319 | BootcampFinish: [2, "H4", "35", "45"], //2 320 | BootcampFullJobAfter: [2, "H4", "35", "45"], 321 | BootcampLoan: [2, "H4", "35", "45"], //2 322 | BootcampMonthsAgo: [4, "H4", "100", "45"], //4 323 | BootcampName: [15, "H4d", "200", "60"], 324 | BootcampPostSalary: [7, "H4", "95", "45"], //5 325 | BootcampRecommend: [2, "H4", "35", "45"], 326 | BootcampYesNo: [2, "H4", "35", "45"], //2 //AttendedBootcamp 327 | ChildrenNumber: [3, "H4", "35", "45"], 328 | CityPopulation: [3, "H4", "200", "45"], //3 329 | CodeEvent: [14, "H4d", "175", "60"], //15 330 | CountryLive: [15, "H4d", "165", "60"], //15 331 | EmploymentField: [15, "H4d", "190", "60"], //15 332 | EmploymentStatus: [10, "H4d", "220", "60"], //10 333 | ExpectedEarning: [7, "H4", "95", "45"], //5 334 | FinanciallySupporting: [2, "H4", "35", "45"], //2 335 | Gender: [3, "H4", "70", "45"], 336 | HasChildren: [2, "H4", "35", "45"], 337 | HasDebt: [2, "H4", "35", "45"], //2 338 | HasFinancialDependents: [2, "H4", "35", "45"], //2 339 | HasHighSpdInternet: [2, "H4", "35", "45"], //2 340 | HasHomeMortgage: [2, "H4", "35", "45"], //2 341 | HasServedInMilitary: [2, "H4", "35", "45"], 342 | HasStudentDebt: [2, "H4", "35", "45"], //2 343 | HomeMortgageOwe: [5, "H4", "95", "45"], //5 344 | HoursLearning: [3, "H4", "95", "45"], //3 345 | Income: [7, "H4", "95", "45"], //5 346 | IsEthnicMinority: [2, "H4", "35", "45"], //2 347 | IsReceiveDiabilitiesBenefits: [2, "H4", "35", "45"], 348 | IsSoftwareDev: [2, "H4", "35", "45"], //2 349 | IsUnderEmployed: [2, "H4", "35", "45"], //2 350 | JobApplyWhen: [5, "H4", "210", "45"], //5 351 | JobPref: [5, "H4", "170", "45"], 352 | JobRelocateYesNo: [2, "H4", "35", "45"], //2 353 | JobRoleInterest: [9, "H4", "195", "50"], 354 | JobWherePref: [3, "H4", "180", "45"], //3 355 | LanguageAtHome: [15, "H4d", "95", "60"], //15 356 | MaritalStatus: [2, "H4", "165", "45"], 357 | MoneyForLearning: [5, "H4", "70", "45"], //5 358 | MonthsProgramming: [3, "H4", "110", "45"], //3 359 | Podcast: [14, "H4d", "175", "60"], //14 360 | Resources: [15, "H4", "175", "45"], //15 361 | SchoolDegree: [10, "H4d", "225", "60"], 362 | SchoolMajor: [14, "H4d", "225", "60"], 363 | StudentDebtOwe: [5, "H4", "90", "45"], //5 364 | }; 365 | 366 | /////////////////////////////////////////////////////////// 367 | // renderBarCharts(data, place, totalWidth, // 368 | // leftMargin, rightMargin, topic, format, // 369 | // totalBars, xColumn, yColumn, special); // 370 | /////////////////////////////////////////////////////////// 371 | 372 | //place - DOM container //e.g. "#JobPref" 373 | //totalWidth - width of a DOM container //e.g. "500" 374 | //leftMargin - adjust left titles in H4 //e.g. "200" 375 | //rightMargin - adjust right labels in H4 //e.g. "40" 376 | //topic - column name in .csv file //e.g. "JobPref" 377 | //format - "H4"/"H4d"/"H5" 378 | //https://files.gitter.im/SamAI-Software/UO6O/BarChartsHorizontal_H5H4.jpg 379 | //special - define if call is preloader 380 | 381 | var dataBC = './data/2016-New-Coder-Survey-Data-Summary.csv', 382 | place = "#" + topic, 383 | totalWidth = $("#" + topic).width(), 384 | xColumn = topic + "Perc", // + "Perc" because of special format of a current .csv file 385 | yColumn = topic, 386 | totalBars = listOfTopics[topic][0], 387 | format = listOfTopics[topic][1], 388 | leftMargin = listOfTopics[topic][2], 389 | rightMargin = listOfTopics[topic][3], 390 | special = special; 391 | 392 | renderBarCharts(dataBC, place, totalWidth, 393 | leftMargin, rightMargin, topic, format, 394 | totalBars, xColumn, yColumn, special); 395 | 396 | }); -------------------------------------------------------------------------------- /javascript/main.js: -------------------------------------------------------------------------------- 1 | $("document").ready(function(){ 2 | $(".raw-data").hide(); 3 | var stickyNav = $("nav").offset().top; 4 | $(window).scroll(function() { 5 | if ($(window).scrollTop() > stickyNav){ 6 | $("nav").addClass("sticky"); 7 | $("body").css("padding-top", $("nav").height()); 8 | } 9 | else { 10 | $("nav").removeClass("sticky"); 11 | $("body").css("padding-top", "0"); 12 | } 13 | }); 14 | $(".moveTo").on("click", function(){ 15 | var clicked = $(this).attr('href'); 16 | scrolling(clicked); 17 | return false; 18 | }); 19 | function scrolling(clicked) { 20 | $('html, body').animate({ 21 | scrollTop: $(clicked).offset().top - 80 22 | }, 100); 23 | } 24 | 25 | $(".get-raw-data").on("click", function(){ 26 | $(".raw-data").fadeIn(); 27 | return false; 28 | }); 29 | $(".close").on("click", function(){ 30 | $(".raw-data").fadeOut(); 31 | return false; 32 | }); 33 | 34 | // ---- For Bar Charts ---- // 35 | // ---------SCROLL--------- // 36 | (function($) { 37 | /** 38 | * Copyright 2012, Digital Fusion 39 | * Licensed under the MIT license. 40 | * http://teamdf.com/jquery-plugins/license/ 41 | * 42 | * @author Sam Sehnert 43 | * @desc A small plugin that checks whether elements are within 44 | * the user visible viewport of a web browser. 45 | * only accounts for vertical position, not horizontal. 46 | */ 47 | $.fn.visible = function(partial) { 48 | 49 | var $t = $(this), 50 | $w = $(window), 51 | viewTop = $w.scrollTop(), 52 | viewBottom = viewTop + $w.height(), 53 | _top = $t.offset().top+150, //+150 coz of css offset for nav 54 | _bottom = _top + $t.height()-100, //-100 coz of css offset for nav 55 | compareTop = partial === true ? _bottom : _top, 56 | compareBottom = partial === true ? _top : _bottom; 57 | 58 | return ((compareBottom <= viewBottom) && (compareTop >= viewTop)); 59 | 60 | }; 61 | 62 | })(jQuery); 63 | 64 | var win = $(window); 65 | 66 | var allMods = $(".chart-graphic"); 67 | 68 | // PRELOADER 69 | // preloader(ID) sets all containers to their expected height 70 | // so they don't change size on scroll when render bar charts 71 | allMods.each(function(i, el) { 72 | var ID = $(el).attr('id'); 73 | allBarCharts.init(ID); 74 | allBarCharts.preloader(ID); 75 | }); 76 | //preloaderMap sets the height of the map so DOM if fixed 77 | //for proper anchor when share links like https://.../#Podcast 78 | preloaderMap(); 79 | 80 | // CHECK 81 | // render bar charts when they appear on screen 82 | win.scroll(function(event) { 83 | allMods.each(function(i, el) { 84 | var el = $(el); 85 | if (el.visible(true)) { 86 | var ID = $(el).attr('id'); 87 | allBarCharts.check(ID); 88 | } 89 | }); 90 | }); 91 | // ---------SCROLL-END----- // 92 | 93 | // RESIZE 94 | // rerender bar charts on window.resize 95 | win.resize(function() { 96 | preloaderMap(); 97 | allMods.each(function(i, el) { 98 | var ID = $(el).attr('id'); 99 | allBarCharts.resize(ID); 100 | }); 101 | }); 102 | 103 | (function(i,s,o,g,r,a,m){ i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 104 | (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 105 | m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 106 | })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 107 | ga('create', 'UA-55446531-1', 'auto'); 108 | ga('require', 'displayfeatures'); 109 | ga('send', 'pageview'); 110 | }); 111 | -------------------------------------------------------------------------------- /stylesheets/bar-charts.scss: -------------------------------------------------------------------------------- 1 | /* toDO: barcharts.scss*/ 2 | /* This shows the small ticks on Y axis */ 3 | .axis path, 4 | .axis line { 5 | fill: none; 6 | } 7 | 8 | .x.axis { 9 | display: none; 10 | } 11 | 12 | .y.axis { 13 | display: none; 14 | font-size: 16px; 15 | } 16 | 17 | .y.axis path { 18 | display: none; 19 | } 20 | /*#006400 #008400 #7ED321*/ 21 | .bar { 22 | position: absolute; 23 | fill: $very-dark-green; 24 | stroke: $very-dark-green; 25 | } 26 | 27 | .bar:hover { 28 | fill: $green; 29 | stroke: $green; 30 | } 31 | 32 | .barLabel { 33 | font-size: 16px; 34 | /*font-weight: bold;*/ 35 | } 36 | 37 | .barTitle { 38 | font-size: 16px; 39 | } 40 | 41 | #SchoolDegree .barTitle, 42 | #SchoolMajor .barTitle, 43 | #JobPref .barTitle, 44 | #JobRoleInterest .barTitle, 45 | #CountryLive .barTitle, 46 | #EmploymentStatus .barTitle, 47 | #EmploymentField .barTitle, 48 | #CityPopulation .barTitle, 49 | #JobWherePref .barTitle, 50 | #Podcast .barTitle, 51 | #JobApplyWhen .barTitle 52 | { 53 | font-size: 14px; 54 | } 55 | -------------------------------------------------------------------------------- /stylesheets/base.scss: -------------------------------------------------------------------------------- 1 | $green:#7ED321; //#7ED321 2 | $dark-green: #417505; //#417505 3 | $very-dark-green: #006400; //#006400 4 | $gray: #F6F6F6; //#F6F6F6 5 | $dark-gray: #D8D8D8; //#D8D8D8 6 | @mixin article($bg-color:$gray) { 7 | width: 100%; 8 | background: $bg-color; 9 | padding: 30px 10px; 10 | h3 { margin-top: 0px; } 11 | 12 | @media screen and (min-width: 800px) { 13 | width: 33.333%; 14 | padding: 30px 50px; 15 | display: table-cell; 16 | } 17 | } 18 | 19 | body { 20 | padding-top: 0; 21 | margin: 0; 22 | font-family: "Roboto", "sans serif"; 23 | a { 24 | color: black; 25 | text-decoration: none; 26 | } 27 | .footnote:before { 28 | display: block; 29 | content: " "; 30 | margin-left: 2px; 31 | width: 12em; 32 | border-top: 1px solid black; 33 | opacity: 0.4; 34 | } 35 | .footnote { 36 | margin: 0 0 0 0.15em; 37 | font-size: 0.8em; 38 | font-style: italic; 39 | opacity: 0.8; 40 | } 41 | img { width: 100%; } 42 | } 43 | 44 | @import "header"; 45 | @import "popup"; 46 | @import "chart"; 47 | @import "footer"; 48 | 49 | section { 50 | header { 51 | background: $gray; 52 | border: $dark-gray solid 2px; 53 | padding: 30px 50px; 54 | } 55 | header { 56 | color: black; 57 | text-align: left; 58 | h2 { 59 | text-transform: uppercase; 60 | padding-right: 10px; 61 | } 62 | h2, p { 63 | display: inline; 64 | vertical-align: middle; 65 | } 66 | } 67 | 68 | .tag-sections, { 69 | display: table; 70 | width: 100%; 71 | } 72 | 73 | article.tags { 74 | @include article(); 75 | border: $dark-gray solid 2px; 76 | border-left: none; 77 | border-top: none; 78 | 79 | .tag { 80 | display: inline-block; 81 | margin-bottom: 20px; 82 | a { 83 | border: $dark-gray solid 2px; 84 | padding: 5px 10px; 85 | color: $very-dark-green; 86 | background: white; 87 | &:hover { 88 | background: $very-dark-green; 89 | color: white; 90 | border-color: $very-dark-green; 91 | } 92 | } 93 | } 94 | } 95 | } 96 | 97 | @import "bar-charts"; 98 | @import "maps"; 99 | -------------------------------------------------------------------------------- /stylesheets/bourbon/_bourbon.scss: -------------------------------------------------------------------------------- 1 | // Bourbon 4.2.7 2 | // http://bourbon.io 3 | // Copyright 2011-2015 thoughtbot, inc. 4 | // MIT License 5 | 6 | @import "settings/prefixer"; 7 | @import "settings/px-to-em"; 8 | @import "settings/asset-pipeline"; 9 | 10 | @import "functions/assign-inputs"; 11 | @import "functions/contains"; 12 | @import "functions/contains-falsy"; 13 | @import "functions/is-length"; 14 | @import "functions/is-light"; 15 | @import "functions/is-number"; 16 | @import "functions/is-size"; 17 | @import "functions/px-to-em"; 18 | @import "functions/px-to-rem"; 19 | @import "functions/shade"; 20 | @import "functions/strip-units"; 21 | @import "functions/tint"; 22 | @import "functions/transition-property-name"; 23 | @import "functions/unpack"; 24 | @import "functions/modular-scale"; 25 | 26 | @import "helpers/convert-units"; 27 | @import "helpers/directional-values"; 28 | @import "helpers/font-source-declaration"; 29 | @import "helpers/gradient-positions-parser"; 30 | @import "helpers/linear-angle-parser"; 31 | @import "helpers/linear-gradient-parser"; 32 | @import "helpers/linear-positions-parser"; 33 | @import "helpers/linear-side-corner-parser"; 34 | @import "helpers/radial-arg-parser"; 35 | @import "helpers/radial-positions-parser"; 36 | @import "helpers/radial-gradient-parser"; 37 | @import "helpers/render-gradients"; 38 | @import "helpers/shape-size-stripper"; 39 | @import "helpers/str-to-num"; 40 | 41 | @import "css3/animation"; 42 | @import "css3/appearance"; 43 | @import "css3/backface-visibility"; 44 | @import "css3/background"; 45 | @import "css3/background-image"; 46 | @import "css3/border-image"; 47 | @import "css3/calc"; 48 | @import "css3/columns"; 49 | @import "css3/filter"; 50 | @import "css3/flex-box"; 51 | @import "css3/font-face"; 52 | @import "css3/font-feature-settings"; 53 | @import "css3/hidpi-media-query"; 54 | @import "css3/hyphens"; 55 | @import "css3/image-rendering"; 56 | @import "css3/keyframes"; 57 | @import "css3/linear-gradient"; 58 | @import "css3/perspective"; 59 | @import "css3/placeholder"; 60 | @import "css3/radial-gradient"; 61 | @import "css3/selection"; 62 | @import "css3/text-decoration"; 63 | @import "css3/transform"; 64 | @import "css3/transition"; 65 | @import "css3/user-select"; 66 | 67 | @import "addons/border-color"; 68 | @import "addons/border-radius"; 69 | @import "addons/border-style"; 70 | @import "addons/border-width"; 71 | @import "addons/buttons"; 72 | @import "addons/clearfix"; 73 | @import "addons/ellipsis"; 74 | @import "addons/font-stacks"; 75 | @import "addons/hide-text"; 76 | @import "addons/margin"; 77 | @import "addons/padding"; 78 | @import "addons/position"; 79 | @import "addons/prefixer"; 80 | @import "addons/retina-image"; 81 | @import "addons/size"; 82 | @import "addons/text-inputs"; 83 | @import "addons/timing-functions"; 84 | @import "addons/triangle"; 85 | @import "addons/word-wrap"; 86 | 87 | @import "bourbon-deprecated-upcoming"; 88 | -------------------------------------------------------------------------------- /stylesheets/bourbon/addons/_border-color.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Provides a quick method for targeting `border-color` on specific sides of a box. Use a `null` value to “skip” a side. 4 | /// 5 | /// @param {Arglist} $vals 6 | /// List of arguments 7 | /// 8 | /// @example scss - Usage 9 | /// .element { 10 | /// @include border-color(#a60b55 #76cd9c null #e8ae1a); 11 | /// } 12 | /// 13 | /// @example css - CSS Output 14 | /// .element { 15 | /// border-left-color: #e8ae1a; 16 | /// border-right-color: #76cd9c; 17 | /// border-top-color: #a60b55; 18 | /// } 19 | /// 20 | /// @require {mixin} directional-property 21 | /// 22 | /// @output `border-color` 23 | 24 | @mixin border-color($vals...) { 25 | @include directional-property(border, color, $vals...); 26 | } 27 | -------------------------------------------------------------------------------- /stylesheets/bourbon/addons/_border-radius.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Provides a quick method for targeting `border-radius` on both corners on the side of a box. 4 | /// 5 | /// @param {Number} $radii 6 | /// List of arguments 7 | /// 8 | /// @example scss - Usage 9 | /// .element-one { 10 | /// @include border-top-radius(5px); 11 | /// } 12 | /// 13 | /// .element-two { 14 | /// @include border-left-radius(3px); 15 | /// } 16 | /// 17 | /// @example css - CSS Output 18 | /// .element-one { 19 | /// border-top-left-radius: 5px; 20 | /// border-top-right-radius: 5px; 21 | /// } 22 | /// 23 | /// .element-two { 24 | /// border-bottom-left-radius: 3px; 25 | /// border-top-left-radius: 3px; 26 | /// } 27 | /// 28 | /// @output `border-radius` 29 | 30 | @mixin border-top-radius($radii) { 31 | border-top-left-radius: $radii; 32 | border-top-right-radius: $radii; 33 | } 34 | 35 | @mixin border-right-radius($radii) { 36 | border-bottom-right-radius: $radii; 37 | border-top-right-radius: $radii; 38 | } 39 | 40 | @mixin border-bottom-radius($radii) { 41 | border-bottom-left-radius: $radii; 42 | border-bottom-right-radius: $radii; 43 | } 44 | 45 | @mixin border-left-radius($radii) { 46 | border-bottom-left-radius: $radii; 47 | border-top-left-radius: $radii; 48 | } 49 | -------------------------------------------------------------------------------- /stylesheets/bourbon/addons/_border-style.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Provides a quick method for targeting `border-style` on specific sides of a box. Use a `null` value to “skip” a side. 4 | /// 5 | /// @param {Arglist} $vals 6 | /// List of arguments 7 | /// 8 | /// @example scss - Usage 9 | /// .element { 10 | /// @include border-style(dashed null solid); 11 | /// } 12 | /// 13 | /// @example css - CSS Output 14 | /// .element { 15 | /// border-bottom-style: solid; 16 | /// border-top-style: dashed; 17 | /// } 18 | /// 19 | /// @require {mixin} directional-property 20 | /// 21 | /// @output `border-style` 22 | 23 | @mixin border-style($vals...) { 24 | @include directional-property(border, style, $vals...); 25 | } 26 | -------------------------------------------------------------------------------- /stylesheets/bourbon/addons/_border-width.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Provides a quick method for targeting `border-width` on specific sides of a box. Use a `null` value to “skip” a side. 4 | /// 5 | /// @param {Arglist} $vals 6 | /// List of arguments 7 | /// 8 | /// @example scss - Usage 9 | /// .element { 10 | /// @include border-width(1em null 20px); 11 | /// } 12 | /// 13 | /// @example css - CSS Output 14 | /// .element { 15 | /// border-bottom-width: 20px; 16 | /// border-top-width: 1em; 17 | /// } 18 | /// 19 | /// @require {mixin} directional-property 20 | /// 21 | /// @output `border-width` 22 | 23 | @mixin border-width($vals...) { 24 | @include directional-property(border, width, $vals...); 25 | } 26 | -------------------------------------------------------------------------------- /stylesheets/bourbon/addons/_buttons.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Generates variables for all buttons. Please note that you must use interpolation on the variable: `#{$all-buttons}`. 4 | /// 5 | /// @example scss - Usage 6 | /// #{$all-buttons} { 7 | /// background-color: #f00; 8 | /// } 9 | /// 10 | /// #{$all-buttons-focus}, 11 | /// #{$all-buttons-hover} { 12 | /// background-color: #0f0; 13 | /// } 14 | /// 15 | /// #{$all-buttons-active} { 16 | /// background-color: #00f; 17 | /// } 18 | /// 19 | /// @example css - CSS Output 20 | /// button, 21 | /// input[type="button"], 22 | /// input[type="reset"], 23 | /// input[type="submit"] { 24 | /// background-color: #f00; 25 | /// } 26 | /// 27 | /// button:focus, 28 | /// input[type="button"]:focus, 29 | /// input[type="reset"]:focus, 30 | /// input[type="submit"]:focus, 31 | /// button:hover, 32 | /// input[type="button"]:hover, 33 | /// input[type="reset"]:hover, 34 | /// input[type="submit"]:hover { 35 | /// background-color: #0f0; 36 | /// } 37 | /// 38 | /// button:active, 39 | /// input[type="button"]:active, 40 | /// input[type="reset"]:active, 41 | /// input[type="submit"]:active { 42 | /// background-color: #00f; 43 | /// } 44 | /// 45 | /// @require assign-inputs 46 | /// 47 | /// @type List 48 | /// 49 | /// @todo Remove double assigned variables (Lines 59–62) in v5.0.0 50 | 51 | $buttons-list: 'button', 52 | 'input[type="button"]', 53 | 'input[type="reset"]', 54 | 'input[type="submit"]'; 55 | 56 | $all-buttons: assign-inputs($buttons-list); 57 | $all-buttons-active: assign-inputs($buttons-list, active); 58 | $all-buttons-focus: assign-inputs($buttons-list, focus); 59 | $all-buttons-hover: assign-inputs($buttons-list, hover); 60 | 61 | $all-button-inputs: $all-buttons; 62 | $all-button-inputs-active: $all-buttons-active; 63 | $all-button-inputs-focus: $all-buttons-focus; 64 | $all-button-inputs-hover: $all-buttons-hover; 65 | -------------------------------------------------------------------------------- /stylesheets/bourbon/addons/_clearfix.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Provides an easy way to include a clearfix for containing floats. 4 | /// 5 | /// @link http://cssmojo.com/latest_new_clearfix_so_far/ 6 | /// 7 | /// @example scss - Usage 8 | /// .element { 9 | /// @include clearfix; 10 | /// } 11 | /// 12 | /// @example css - CSS Output 13 | /// .element::after { 14 | /// clear: both; 15 | /// content: ""; 16 | /// display: table; 17 | /// } 18 | 19 | @mixin clearfix { 20 | &::after { 21 | clear: both; 22 | content: ""; 23 | display: table; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /stylesheets/bourbon/addons/_ellipsis.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Truncates text and adds an ellipsis to represent overflow. 4 | /// 5 | /// @param {Number} $width [100%] 6 | /// Max-width for the string to respect before being truncated 7 | /// 8 | /// @example scss - Usage 9 | /// .element { 10 | /// @include ellipsis; 11 | /// } 12 | /// 13 | /// @example css - CSS Output 14 | /// .element { 15 | /// display: inline-block; 16 | /// max-width: 100%; 17 | /// overflow: hidden; 18 | /// text-overflow: ellipsis; 19 | /// white-space: nowrap; 20 | /// word-wrap: normal; 21 | /// } 22 | 23 | @mixin ellipsis($width: 100%) { 24 | display: inline-block; 25 | max-width: $width; 26 | overflow: hidden; 27 | text-overflow: ellipsis; 28 | white-space: nowrap; 29 | word-wrap: normal; 30 | } 31 | -------------------------------------------------------------------------------- /stylesheets/bourbon/addons/_font-stacks.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Georgia font stack. 4 | /// 5 | /// @type List 6 | 7 | $georgia: "Georgia", "Cambria", "Times New Roman", "Times", serif; 8 | 9 | /// Helvetica font stack. 10 | /// 11 | /// @type List 12 | 13 | $helvetica: "Helvetica Neue", "Helvetica", "Roboto", "Arial", sans-serif; 14 | 15 | /// Lucida Grande font stack. 16 | /// 17 | /// @type List 18 | 19 | $lucida-grande: "Lucida Grande", "Tahoma", "Verdana", "Arial", sans-serif; 20 | 21 | /// Monospace font stack. 22 | /// 23 | /// @type List 24 | 25 | $monospace: "Bitstream Vera Sans Mono", "Consolas", "Courier", monospace; 26 | 27 | /// Verdana font stack. 28 | /// 29 | /// @type List 30 | 31 | $verdana: "Verdana", "Geneva", sans-serif; 32 | -------------------------------------------------------------------------------- /stylesheets/bourbon/addons/_hide-text.scss: -------------------------------------------------------------------------------- 1 | /// Hides the text in an element, commonly used to show an image. Some elements will need block-level styles applied. 2 | /// 3 | /// @link http://zeldman.com/2012/03/01/replacing-the-9999px-hack-new-image-replacement 4 | /// 5 | /// @example scss - Usage 6 | /// .element { 7 | /// @include hide-text; 8 | /// } 9 | /// 10 | /// @example css - CSS Output 11 | /// .element { 12 | /// overflow: hidden; 13 | /// text-indent: 101%; 14 | /// white-space: nowrap; 15 | /// } 16 | /// 17 | /// @todo Remove height argument in v5.0.0 18 | 19 | @mixin hide-text($height: null) { 20 | overflow: hidden; 21 | text-indent: 101%; 22 | white-space: nowrap; 23 | 24 | @if $height { 25 | @warn "The `hide-text` mixin has changed and no longer requires a height. The height argument will no longer be accepted in v5.0.0"; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /stylesheets/bourbon/addons/_margin.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Provides a quick method for targeting `margin` on specific sides of a box. Use a `null` value to “skip” a side. 4 | /// 5 | /// @param {Arglist} $vals 6 | /// List of arguments 7 | /// 8 | /// @example scss - Usage 9 | /// .element { 10 | /// @include margin(null 10px 3em 20vh); 11 | /// } 12 | /// 13 | /// @example css - CSS Output 14 | /// .element { 15 | /// margin-bottom: 3em; 16 | /// margin-left: 20vh; 17 | /// margin-right: 10px; 18 | /// } 19 | /// 20 | /// @require {mixin} directional-property 21 | /// 22 | /// @output `margin` 23 | 24 | @mixin margin($vals...) { 25 | @include directional-property(margin, false, $vals...); 26 | } 27 | -------------------------------------------------------------------------------- /stylesheets/bourbon/addons/_padding.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Provides a quick method for targeting `padding` on specific sides of a box. Use a `null` value to “skip” a side. 4 | /// 5 | /// @param {Arglist} $vals 6 | /// List of arguments 7 | /// 8 | /// @example scss - Usage 9 | /// .element { 10 | /// @include padding(12vh null 10px 5%); 11 | /// } 12 | /// 13 | /// @example css - CSS Output 14 | /// .element { 15 | /// padding-bottom: 10px; 16 | /// padding-left: 5%; 17 | /// padding-top: 12vh; 18 | /// } 19 | /// 20 | /// @require {mixin} directional-property 21 | /// 22 | /// @output `padding` 23 | 24 | @mixin padding($vals...) { 25 | @include directional-property(padding, false, $vals...); 26 | } 27 | -------------------------------------------------------------------------------- /stylesheets/bourbon/addons/_position.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Provides a quick method for setting an element’s position. Use a `null` value to “skip” a side. 4 | /// 5 | /// @param {Position} $position [relative] 6 | /// A CSS position value 7 | /// 8 | /// @param {Arglist} $coordinates [null null null null] 9 | /// List of values that correspond to the 4-value syntax for the edges of a box 10 | /// 11 | /// @example scss - Usage 12 | /// .element { 13 | /// @include position(absolute, 0 null null 10em); 14 | /// } 15 | /// 16 | /// @example css - CSS Output 17 | /// .element { 18 | /// left: 10em; 19 | /// position: absolute; 20 | /// top: 0; 21 | /// } 22 | /// 23 | /// @require {function} is-length 24 | /// @require {function} unpack 25 | 26 | @mixin position($position: relative, $coordinates: null null null null) { 27 | @if type-of($position) == list { 28 | $coordinates: $position; 29 | $position: relative; 30 | } 31 | 32 | $coordinates: unpack($coordinates); 33 | 34 | $offsets: ( 35 | top: nth($coordinates, 1), 36 | right: nth($coordinates, 2), 37 | bottom: nth($coordinates, 3), 38 | left: nth($coordinates, 4) 39 | ); 40 | 41 | position: $position; 42 | 43 | @each $offset, $value in $offsets { 44 | @if is-length($value) { 45 | #{$offset}: $value; 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /stylesheets/bourbon/addons/_prefixer.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// A mixin for generating vendor prefixes on non-standardized properties. 4 | /// 5 | /// @param {String} $property 6 | /// Property to prefix 7 | /// 8 | /// @param {*} $value 9 | /// Value to use 10 | /// 11 | /// @param {List} $prefixes 12 | /// Prefixes to define 13 | /// 14 | /// @example scss - Usage 15 | /// .element { 16 | /// @include prefixer(border-radius, 10px, webkit ms spec); 17 | /// } 18 | /// 19 | /// @example css - CSS Output 20 | /// .element { 21 | /// -webkit-border-radius: 10px; 22 | /// -moz-border-radius: 10px; 23 | /// border-radius: 10px; 24 | /// } 25 | /// 26 | /// @require {variable} $prefix-for-webkit 27 | /// @require {variable} $prefix-for-mozilla 28 | /// @require {variable} $prefix-for-microsoft 29 | /// @require {variable} $prefix-for-opera 30 | /// @require {variable} $prefix-for-spec 31 | 32 | @mixin prefixer($property, $value, $prefixes) { 33 | @each $prefix in $prefixes { 34 | @if $prefix == webkit { 35 | @if $prefix-for-webkit { 36 | -webkit-#{$property}: $value; 37 | } 38 | } @else if $prefix == moz { 39 | @if $prefix-for-mozilla { 40 | -moz-#{$property}: $value; 41 | } 42 | } @else if $prefix == ms { 43 | @if $prefix-for-microsoft { 44 | -ms-#{$property}: $value; 45 | } 46 | } @else if $prefix == o { 47 | @if $prefix-for-opera { 48 | -o-#{$property}: $value; 49 | } 50 | } @else if $prefix == spec { 51 | @if $prefix-for-spec { 52 | #{$property}: $value; 53 | } 54 | } @else { 55 | @warn "Unrecognized prefix: #{$prefix}"; 56 | } 57 | } 58 | } 59 | 60 | @mixin disable-prefix-for-all() { 61 | $prefix-for-webkit: false !global; 62 | $prefix-for-mozilla: false !global; 63 | $prefix-for-microsoft: false !global; 64 | $prefix-for-opera: false !global; 65 | $prefix-for-spec: false !global; 66 | } 67 | -------------------------------------------------------------------------------- /stylesheets/bourbon/addons/_retina-image.scss: -------------------------------------------------------------------------------- 1 | @mixin retina-image($filename, $background-size, $extension: png, $retina-filename: null, $retina-suffix: _2x, $asset-pipeline: $asset-pipeline) { 2 | @if $asset-pipeline { 3 | background-image: image-url("#{$filename}.#{$extension}"); 4 | } @else { 5 | background-image: url("#{$filename}.#{$extension}"); 6 | } 7 | 8 | @include hidpi { 9 | @if $asset-pipeline { 10 | @if $retina-filename { 11 | background-image: image-url("#{$retina-filename}.#{$extension}"); 12 | } @else { 13 | background-image: image-url("#{$filename}#{$retina-suffix}.#{$extension}"); 14 | } 15 | } @else { 16 | @if $retina-filename { 17 | background-image: url("#{$retina-filename}.#{$extension}"); 18 | } @else { 19 | background-image: url("#{$filename}#{$retina-suffix}.#{$extension}"); 20 | } 21 | } 22 | 23 | background-size: $background-size; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /stylesheets/bourbon/addons/_size.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Sets the `width` and `height` of the element. 4 | /// 5 | /// @param {List} $size 6 | /// A list of at most 2 size values. 7 | /// 8 | /// If there is only a single value in `$size` it is used for both width and height. All units are supported. 9 | /// 10 | /// @example scss - Usage 11 | /// .first-element { 12 | /// @include size(2em); 13 | /// } 14 | /// 15 | /// .second-element { 16 | /// @include size(auto 10em); 17 | /// } 18 | /// 19 | /// @example css - CSS Output 20 | /// .first-element { 21 | /// width: 2em; 22 | /// height: 2em; 23 | /// } 24 | /// 25 | /// .second-element { 26 | /// width: auto; 27 | /// height: 10em; 28 | /// } 29 | /// 30 | /// @todo Refactor in 5.0.0 to use a comma-separated argument 31 | 32 | @mixin size($value) { 33 | $width: nth($value, 1); 34 | $height: $width; 35 | 36 | @if length($value) > 1 { 37 | $height: nth($value, 2); 38 | } 39 | 40 | @if is-size($height) { 41 | height: $height; 42 | } @else { 43 | @warn "`#{$height}` is not a valid length for the `$height` parameter in the `size` mixin."; 44 | } 45 | 46 | @if is-size($width) { 47 | width: $width; 48 | } @else { 49 | @warn "`#{$width}` is not a valid length for the `$width` parameter in the `size` mixin."; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /stylesheets/bourbon/addons/_text-inputs.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Generates variables for all text-based inputs. Please note that you must use interpolation on the variable: `#{$all-text-inputs}`. 4 | /// 5 | /// @example scss - Usage 6 | /// #{$all-text-inputs} { 7 | /// border: 1px solid #f00; 8 | /// } 9 | /// 10 | /// #{$all-text-inputs-focus}, 11 | /// #{$all-text-inputs-hover} { 12 | /// border: 1px solid #0f0; 13 | /// } 14 | /// 15 | /// #{$all-text-inputs-active} { 16 | /// border: 1px solid #00f; 17 | /// } 18 | /// 19 | /// @example css - CSS Output 20 | /// input[type="color"], 21 | /// input[type="date"], 22 | /// input[type="datetime"], 23 | /// input[type="datetime-local"], 24 | /// input[type="email"], 25 | /// input[type="month"], 26 | /// input[type="number"], 27 | /// input[type="password"], 28 | /// input[type="search"], 29 | /// input[type="tel"], 30 | /// input[type="text"], 31 | /// input[type="time"], 32 | /// input[type="url"], 33 | /// input[type="week"], 34 | /// textarea { 35 | /// border: 1px solid #f00; 36 | /// } 37 | /// 38 | /// input[type="color"]:focus, 39 | /// input[type="date"]:focus, 40 | /// input[type="datetime"]:focus, 41 | /// input[type="datetime-local"]:focus, 42 | /// input[type="email"]:focus, 43 | /// input[type="month"]:focus, 44 | /// input[type="number"]:focus, 45 | /// input[type="password"]:focus, 46 | /// input[type="search"]:focus, 47 | /// input[type="tel"]:focus, 48 | /// input[type="text"]:focus, 49 | /// input[type="time"]:focus, 50 | /// input[type="url"]:focus, 51 | /// input[type="week"]:focus, 52 | /// textarea:focus, 53 | /// input[type="color"]:hover, 54 | /// input[type="date"]:hover, 55 | /// input[type="datetime"]:hover, 56 | /// input[type="datetime-local"]:hover, 57 | /// input[type="email"]:hover, 58 | /// input[type="month"]:hover, 59 | /// input[type="number"]:hover, 60 | /// input[type="password"]:hover, 61 | /// input[type="search"]:hover, 62 | /// input[type="tel"]:hover, 63 | /// input[type="text"]:hover, 64 | /// input[type="time"]:hover, 65 | /// input[type="url"]:hover, 66 | /// input[type="week"]:hover, 67 | /// textarea:hover { 68 | /// border: 1px solid #0f0; 69 | /// } 70 | /// 71 | /// input[type="color"]:active, 72 | /// input[type="date"]:active, 73 | /// input[type="datetime"]:active, 74 | /// input[type="datetime-local"]:active, 75 | /// input[type="email"]:active, 76 | /// input[type="month"]:active, 77 | /// input[type="number"]:active, 78 | /// input[type="password"]:active, 79 | /// input[type="search"]:active, 80 | /// input[type="tel"]:active, 81 | /// input[type="text"]:active, 82 | /// input[type="time"]:active, 83 | /// input[type="url"]:active, 84 | /// input[type="week"]:active, 85 | /// textarea:active { 86 | /// border: 1px solid #00f; 87 | /// } 88 | /// 89 | /// @require assign-inputs 90 | /// 91 | /// @type List 92 | 93 | $text-inputs-list: 'input[type="color"]', 94 | 'input[type="date"]', 95 | 'input[type="datetime"]', 96 | 'input[type="datetime-local"]', 97 | 'input[type="email"]', 98 | 'input[type="month"]', 99 | 'input[type="number"]', 100 | 'input[type="password"]', 101 | 'input[type="search"]', 102 | 'input[type="tel"]', 103 | 'input[type="text"]', 104 | 'input[type="time"]', 105 | 'input[type="url"]', 106 | 'input[type="week"]', 107 | 'input:not([type])', 108 | 'textarea'; 109 | 110 | $all-text-inputs: assign-inputs($text-inputs-list); 111 | $all-text-inputs-active: assign-inputs($text-inputs-list, active); 112 | $all-text-inputs-focus: assign-inputs($text-inputs-list, focus); 113 | $all-text-inputs-hover: assign-inputs($text-inputs-list, hover); 114 | -------------------------------------------------------------------------------- /stylesheets/bourbon/addons/_timing-functions.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// CSS cubic-bezier timing functions. Timing functions courtesy of jquery.easie (github.com/jaukia/easie) 4 | /// 5 | /// Timing functions are the same as demoed here: http://jqueryui.com/resources/demos/effect/easing.html 6 | /// 7 | /// @type cubic-bezier 8 | 9 | $ease-in-quad: cubic-bezier(0.550, 0.085, 0.680, 0.530); 10 | $ease-in-cubic: cubic-bezier(0.550, 0.055, 0.675, 0.190); 11 | $ease-in-quart: cubic-bezier(0.895, 0.030, 0.685, 0.220); 12 | $ease-in-quint: cubic-bezier(0.755, 0.050, 0.855, 0.060); 13 | $ease-in-sine: cubic-bezier(0.470, 0.000, 0.745, 0.715); 14 | $ease-in-expo: cubic-bezier(0.950, 0.050, 0.795, 0.035); 15 | $ease-in-circ: cubic-bezier(0.600, 0.040, 0.980, 0.335); 16 | $ease-in-back: cubic-bezier(0.600, -0.280, 0.735, 0.045); 17 | 18 | $ease-out-quad: cubic-bezier(0.250, 0.460, 0.450, 0.940); 19 | $ease-out-cubic: cubic-bezier(0.215, 0.610, 0.355, 1.000); 20 | $ease-out-quart: cubic-bezier(0.165, 0.840, 0.440, 1.000); 21 | $ease-out-quint: cubic-bezier(0.230, 1.000, 0.320, 1.000); 22 | $ease-out-sine: cubic-bezier(0.390, 0.575, 0.565, 1.000); 23 | $ease-out-expo: cubic-bezier(0.190, 1.000, 0.220, 1.000); 24 | $ease-out-circ: cubic-bezier(0.075, 0.820, 0.165, 1.000); 25 | $ease-out-back: cubic-bezier(0.175, 0.885, 0.320, 1.275); 26 | 27 | $ease-in-out-quad: cubic-bezier(0.455, 0.030, 0.515, 0.955); 28 | $ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1.000); 29 | $ease-in-out-quart: cubic-bezier(0.770, 0.000, 0.175, 1.000); 30 | $ease-in-out-quint: cubic-bezier(0.860, 0.000, 0.070, 1.000); 31 | $ease-in-out-sine: cubic-bezier(0.445, 0.050, 0.550, 0.950); 32 | $ease-in-out-expo: cubic-bezier(1.000, 0.000, 0.000, 1.000); 33 | $ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.150, 0.860); 34 | $ease-in-out-back: cubic-bezier(0.680, -0.550, 0.265, 1.550); 35 | -------------------------------------------------------------------------------- /stylesheets/bourbon/addons/_triangle.scss: -------------------------------------------------------------------------------- 1 | @mixin triangle($size, $color, $direction) { 2 | $width: nth($size, 1); 3 | $height: nth($size, length($size)); 4 | $foreground-color: nth($color, 1); 5 | $background-color: if(length($color) == 2, nth($color, 2), transparent); 6 | height: 0; 7 | width: 0; 8 | 9 | @if ($direction == up) or ($direction == down) or ($direction == right) or ($direction == left) { 10 | $width: $width / 2; 11 | $height: if(length($size) > 1, $height, $height/2); 12 | 13 | @if $direction == up { 14 | border-bottom: $height solid $foreground-color; 15 | border-left: $width solid $background-color; 16 | border-right: $width solid $background-color; 17 | } @else if $direction == right { 18 | border-bottom: $width solid $background-color; 19 | border-left: $height solid $foreground-color; 20 | border-top: $width solid $background-color; 21 | } @else if $direction == down { 22 | border-left: $width solid $background-color; 23 | border-right: $width solid $background-color; 24 | border-top: $height solid $foreground-color; 25 | } @else if $direction == left { 26 | border-bottom: $width solid $background-color; 27 | border-right: $height solid $foreground-color; 28 | border-top: $width solid $background-color; 29 | } 30 | } @else if ($direction == up-right) or ($direction == up-left) { 31 | border-top: $height solid $foreground-color; 32 | 33 | @if $direction == up-right { 34 | border-left: $width solid $background-color; 35 | } @else if $direction == up-left { 36 | border-right: $width solid $background-color; 37 | } 38 | } @else if ($direction == down-right) or ($direction == down-left) { 39 | border-bottom: $height solid $foreground-color; 40 | 41 | @if $direction == down-right { 42 | border-left: $width solid $background-color; 43 | } @else if $direction == down-left { 44 | border-right: $width solid $background-color; 45 | } 46 | } @else if ($direction == inset-up) { 47 | border-color: $background-color $background-color $foreground-color; 48 | border-style: solid; 49 | border-width: $height $width; 50 | } @else if ($direction == inset-down) { 51 | border-color: $foreground-color $background-color $background-color; 52 | border-style: solid; 53 | border-width: $height $width; 54 | } @else if ($direction == inset-right) { 55 | border-color: $background-color $background-color $background-color $foreground-color; 56 | border-style: solid; 57 | border-width: $width $height; 58 | } @else if ($direction == inset-left) { 59 | border-color: $background-color $foreground-color $background-color $background-color; 60 | border-style: solid; 61 | border-width: $width $height; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /stylesheets/bourbon/addons/_word-wrap.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Provides an easy way to change the `word-wrap` property. 4 | /// 5 | /// @param {String} $wrap [break-word] 6 | /// Value for the `word-break` property. 7 | /// 8 | /// @example scss - Usage 9 | /// .wrapper { 10 | /// @include word-wrap(break-word); 11 | /// } 12 | /// 13 | /// @example css - CSS Output 14 | /// .wrapper { 15 | /// overflow-wrap: break-word; 16 | /// word-break: break-all; 17 | /// word-wrap: break-word; 18 | /// } 19 | 20 | @mixin word-wrap($wrap: break-word) { 21 | overflow-wrap: $wrap; 22 | word-wrap: $wrap; 23 | 24 | @if $wrap == break-word { 25 | word-break: break-all; 26 | } @else { 27 | word-break: $wrap; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /stylesheets/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 | @mixin animation($animations...) { 5 | @include prefixer(animation, $animations, webkit moz spec); 6 | } 7 | 8 | @mixin animation-name($names...) { 9 | @include prefixer(animation-name, $names, webkit moz spec); 10 | } 11 | 12 | @mixin animation-duration($times...) { 13 | @include prefixer(animation-duration, $times, webkit moz spec); 14 | } 15 | 16 | @mixin animation-timing-function($motions...) { 17 | // ease | linear | ease-in | ease-out | ease-in-out 18 | @include prefixer(animation-timing-function, $motions, webkit moz spec); 19 | } 20 | 21 | @mixin animation-iteration-count($values...) { 22 | // infinite | 23 | @include prefixer(animation-iteration-count, $values, webkit moz spec); 24 | } 25 | 26 | @mixin animation-direction($directions...) { 27 | // normal | alternate 28 | @include prefixer(animation-direction, $directions, webkit moz spec); 29 | } 30 | 31 | @mixin animation-play-state($states...) { 32 | // running | paused 33 | @include prefixer(animation-play-state, $states, webkit moz spec); 34 | } 35 | 36 | @mixin animation-delay($times...) { 37 | @include prefixer(animation-delay, $times, webkit moz spec); 38 | } 39 | 40 | @mixin animation-fill-mode($modes...) { 41 | // none | forwards | backwards | both 42 | @include prefixer(animation-fill-mode, $modes, webkit moz spec); 43 | } 44 | -------------------------------------------------------------------------------- /stylesheets/bourbon/css3/_appearance.scss: -------------------------------------------------------------------------------- 1 | @mixin appearance($value) { 2 | @include prefixer(appearance, $value, webkit moz ms o spec); 3 | } 4 | -------------------------------------------------------------------------------- /stylesheets/bourbon/css3/_backface-visibility.scss: -------------------------------------------------------------------------------- 1 | @mixin backface-visibility($visibility) { 2 | @include prefixer(backface-visibility, $visibility, webkit spec); 3 | } 4 | -------------------------------------------------------------------------------- /stylesheets/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, 1, 3); 16 | $gradient-type: str-slice($image, 1, 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 | -------------------------------------------------------------------------------- /stylesheets/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 $background-type == list { 16 | $background-str: if($background-type == list, nth($background, 1), $background); 17 | 18 | $url-str: str-slice($background-str, 1, 3); 19 | $gradient-type: str-slice($background-str, 1, 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 | -------------------------------------------------------------------------------- /stylesheets/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, 1, 3); 14 | $gradient-type: str-slice($border-str, 1, 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 | -------------------------------------------------------------------------------- /stylesheets/bourbon/css3/_calc.scss: -------------------------------------------------------------------------------- 1 | @mixin calc($property, $value) { 2 | #{$property}: -webkit-calc(#{$value}); 3 | #{$property}: calc(#{$value}); 4 | } 5 | -------------------------------------------------------------------------------- /stylesheets/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 | -------------------------------------------------------------------------------- /stylesheets/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 | -------------------------------------------------------------------------------- /stylesheets/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 | -------------------------------------------------------------------------------- /stylesheets/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(#{$pos}#{$shape-size}#{$full}); 38 | background-image: radial-gradient(#{$shape-size-spec}#{$pos-spec}#{$full}); 39 | } 40 | -------------------------------------------------------------------------------- /stylesheets/bourbon/css3/_selection.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Outputs the spec and prefixed versions of the `::selection` pseudo-element. 4 | /// 5 | /// @param {Bool} $current-selector [false] 6 | /// If set to `true`, it takes the current element into consideration. 7 | /// 8 | /// @example scss - Usage 9 | /// .element { 10 | /// @include selection(true) { 11 | /// background-color: #ffbb52; 12 | /// } 13 | /// } 14 | /// 15 | /// @example css - CSS Output 16 | /// .element::-moz-selection { 17 | /// background-color: #ffbb52; 18 | /// } 19 | /// 20 | /// .element::selection { 21 | /// background-color: #ffbb52; 22 | /// } 23 | 24 | @mixin selection($current-selector: false) { 25 | @if $current-selector { 26 | &::-moz-selection { 27 | @content; 28 | } 29 | 30 | &::selection { 31 | @content; 32 | } 33 | } @else { 34 | ::-moz-selection { 35 | @content; 36 | } 37 | 38 | ::selection { 39 | @content; 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /stylesheets/bourbon/css3/_text-decoration.scss: -------------------------------------------------------------------------------- 1 | @mixin text-decoration($value) { 2 | // || || 3 | @include prefixer(text-decoration, $value, moz); 4 | } 5 | 6 | @mixin text-decoration-line($line: none) { 7 | // none || underline || overline || line-through 8 | @include prefixer(text-decoration-line, $line, moz); 9 | } 10 | 11 | @mixin text-decoration-style($style: solid) { 12 | // solid || double || dotted || dashed || wavy 13 | @include prefixer(text-decoration-style, $style, moz webkit); 14 | } 15 | 16 | @mixin text-decoration-color($color: currentColor) { 17 | // currentColor || 18 | @include prefixer(text-decoration-color, $color, moz); 19 | } 20 | -------------------------------------------------------------------------------- /stylesheets/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 | -------------------------------------------------------------------------------- /stylesheets/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 | } @else { 34 | $webkit: append($webkit, $list, comma); 35 | $moz: append($moz, $list, comma); 36 | $spec: append($spec, $list, comma); 37 | } 38 | } 39 | 40 | @if $needs-prefixes { 41 | -webkit-transition: $webkit; 42 | -moz-transition: $moz; 43 | transition: $spec; 44 | } @else { 45 | @if length($properties) >= 1 { 46 | @include prefixer(transition, $properties, webkit moz spec); 47 | } @else { 48 | $properties: all 0.15s ease-out 0s; 49 | @include prefixer(transition, $properties, webkit moz spec); 50 | } 51 | } 52 | } 53 | 54 | @mixin transition-property($properties...) { 55 | -webkit-transition-property: transition-property-names($properties, "webkit"); 56 | -moz-transition-property: transition-property-names($properties, "moz"); 57 | transition-property: transition-property-names($properties, false); 58 | } 59 | 60 | @mixin transition-duration($times...) { 61 | @include prefixer(transition-duration, $times, webkit moz spec); 62 | } 63 | 64 | @mixin transition-timing-function($motions...) { 65 | // ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier() 66 | @include prefixer(transition-timing-function, $motions, webkit moz spec); 67 | } 68 | 69 | @mixin transition-delay($times...) { 70 | @include prefixer(transition-delay, $times, webkit moz spec); 71 | } 72 | -------------------------------------------------------------------------------- /stylesheets/bourbon/css3/_user-select.scss: -------------------------------------------------------------------------------- 1 | @mixin user-select($value: none) { 2 | @include prefixer(user-select, $value, webkit moz ms spec); 3 | } 4 | -------------------------------------------------------------------------------- /stylesheets/bourbon/functions/_assign-inputs.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 | } 12 | -------------------------------------------------------------------------------- /stylesheets/bourbon/functions/_contains-falsy.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Checks if a list does not contains a value. 4 | /// 5 | /// @access private 6 | /// 7 | /// @param {List} $list 8 | /// The list to check against. 9 | /// 10 | /// @return {Bool} 11 | 12 | @function contains-falsy($list) { 13 | @each $item in $list { 14 | @if not $item { 15 | @return true; 16 | } 17 | } 18 | 19 | @return false; 20 | } 21 | -------------------------------------------------------------------------------- /stylesheets/bourbon/functions/_contains.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Checks if a list contains a value(s). 4 | /// 5 | /// @access private 6 | /// 7 | /// @param {List} $list 8 | /// The list to check against. 9 | /// 10 | /// @param {List} $values 11 | /// A single value or list of values to check for. 12 | /// 13 | /// @example scss - Usage 14 | /// contains($list, $value) 15 | /// 16 | /// @return {Bool} 17 | 18 | @function contains($list, $values...) { 19 | @each $value in $values { 20 | @if type-of(index($list, $value)) != "number" { 21 | @return false; 22 | } 23 | } 24 | 25 | @return true; 26 | } 27 | -------------------------------------------------------------------------------- /stylesheets/bourbon/functions/_is-length.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Checks for a valid CSS length. 4 | /// 5 | /// @param {String} $value 6 | 7 | @function is-length($value) { 8 | @return type-of($value) != "null" and (str-slice($value + "", 1, 4) == "calc" 9 | or index(auto inherit initial 0, $value) 10 | or (type-of($value) == "number" and not(unitless($value)))); 11 | } 12 | -------------------------------------------------------------------------------- /stylesheets/bourbon/functions/_is-light.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Programatically determines whether a color is light or dark. 4 | /// 5 | /// @link http://robots.thoughtbot.com/closer-look-color-lightness 6 | /// 7 | /// @param {Color (Hex)} $color 8 | /// 9 | /// @example scss - Usage 10 | /// is-light($color) 11 | /// 12 | /// @return {Bool} 13 | 14 | @function is-light($hex-color) { 15 | $-local-red: red(rgba($hex-color, 1)); 16 | $-local-green: green(rgba($hex-color, 1)); 17 | $-local-blue: blue(rgba($hex-color, 1)); 18 | $-local-lightness: ($-local-red * 0.2126 + $-local-green * 0.7152 + $-local-blue * 0.0722) / 255; 19 | 20 | @return $-local-lightness > 0.6; 21 | } 22 | -------------------------------------------------------------------------------- /stylesheets/bourbon/functions/_is-number.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Checks for a valid number. 4 | /// 5 | /// @param {Number} $value 6 | /// 7 | /// @require {function} contains 8 | 9 | @function is-number($value) { 10 | @return contains("0" "1" "2" "3" "4" "5" "6" "7" "8" "9" 0 1 2 3 4 5 6 7 8 9, $value); 11 | } 12 | -------------------------------------------------------------------------------- /stylesheets/bourbon/functions/_is-size.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Checks for a valid CSS size. 4 | /// 5 | /// @param {String} $value 6 | /// 7 | /// @require {function} contains 8 | /// @require {function} is-length 9 | 10 | @function is-size($value) { 11 | @return is-length($value) 12 | or contains("fill" "fit-content" "min-content" "max-content", $value); 13 | } 14 | -------------------------------------------------------------------------------- /stylesheets/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 | $modular-scale-ratio: $perfect-fourth !default; 21 | $modular-scale-base: em($em-base) !default; 22 | 23 | @function modular-scale($increment, $value: $modular-scale-base, $ratio: $modular-scale-ratio) { 24 | $v1: nth($value, 1); 25 | $v2: nth($value, length($value)); 26 | $value: $v1; 27 | 28 | // scale $v2 to just above $v1 29 | @while $v2 > $v1 { 30 | $v2: ($v2 / $ratio); // will be off-by-1 31 | } 32 | @while $v2 < $v1 { 33 | $v2: ($v2 * $ratio); // will fix off-by-1 34 | } 35 | 36 | // check AFTER scaling $v2 to prevent double-counting corner-case 37 | $double-stranded: $v2 > $v1; 38 | 39 | @if $increment > 0 { 40 | @for $i from 1 through $increment { 41 | @if $double-stranded and ($v1 * $ratio) > $v2 { 42 | $value: $v2; 43 | $v2: ($v2 * $ratio); 44 | } @else { 45 | $v1: ($v1 * $ratio); 46 | $value: $v1; 47 | } 48 | } 49 | } 50 | 51 | @if $increment < 0 { 52 | // adjust $v2 to just below $v1 53 | @if $double-stranded { 54 | $v2: ($v2 / $ratio); 55 | } 56 | 57 | @for $i from $increment through -1 { 58 | @if $double-stranded and ($v1 / $ratio) < $v2 { 59 | $value: $v2; 60 | $v2: ($v2 / $ratio); 61 | } @else { 62 | $v1: ($v1 / $ratio); 63 | $value: $v1; 64 | } 65 | } 66 | } 67 | 68 | @return $value; 69 | } 70 | -------------------------------------------------------------------------------- /stylesheets/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 | -------------------------------------------------------------------------------- /stylesheets/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 | -------------------------------------------------------------------------------- /stylesheets/bourbon/functions/_shade.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Mixes a color with black. 4 | /// 5 | /// @param {Color} $color 6 | /// 7 | /// @param {Number (Percentage)} $percent 8 | /// The amount of black to be mixed in. 9 | /// 10 | /// @example scss - Usage 11 | /// .element { 12 | /// background-color: shade(#ffbb52, 60%); 13 | /// } 14 | /// 15 | /// @example css - CSS Output 16 | /// .element { 17 | /// background-color: #664a20; 18 | /// } 19 | /// 20 | /// @return {Color} 21 | 22 | @function shade($color, $percent) { 23 | @return mix(#000, $color, $percent); 24 | } 25 | -------------------------------------------------------------------------------- /stylesheets/bourbon/functions/_strip-units.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Strips the unit from a number. 4 | /// 5 | /// @param {Number (With Unit)} $value 6 | /// 7 | /// @example scss - Usage 8 | /// $dimension: strip-units(10em); 9 | /// 10 | /// @example css - CSS Output 11 | /// $dimension: 10; 12 | /// 13 | /// @return {Number (Unitless)} 14 | 15 | @function strip-units($value) { 16 | @return ($value / ($value * 0 + 1)); 17 | } 18 | -------------------------------------------------------------------------------- /stylesheets/bourbon/functions/_tint.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Mixes a color with white. 4 | /// 5 | /// @param {Color} $color 6 | /// 7 | /// @param {Number (Percentage)} $percent 8 | /// The amount of white to be mixed in. 9 | /// 10 | /// @example scss - Usage 11 | /// .element { 12 | /// background-color: tint(#6ecaa6, 40%); 13 | /// } 14 | /// 15 | /// @example css - CSS Output 16 | /// .element { 17 | /// background-color: #a8dfc9; 18 | /// } 19 | /// 20 | /// @return {Color} 21 | 22 | @function tint($color, $percent) { 23 | @return mix(#fff, $color, $percent); 24 | } 25 | -------------------------------------------------------------------------------- /stylesheets/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 | } 23 | -------------------------------------------------------------------------------- /stylesheets/bourbon/functions/_unpack.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Converts shorthand to the 4-value syntax. 4 | /// 5 | /// @param {List} $shorthand 6 | /// 7 | /// @example scss - Usage 8 | /// .element { 9 | /// margin: unpack(1em 2em); 10 | /// } 11 | /// 12 | /// @example css - CSS Output 13 | /// .element { 14 | /// margin: 1em 2em 1em 2em; 15 | /// } 16 | 17 | @function unpack($shorthand) { 18 | @if length($shorthand) == 1 { 19 | @return nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1); 20 | } @else if length($shorthand) == 2 { 21 | @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 1) nth($shorthand, 2); 22 | } @else if length($shorthand) == 3 { 23 | @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 3) nth($shorthand, 2); 24 | } @else { 25 | @return $shorthand; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /stylesheets/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 | 15 | @if type-of($number) != "number" { 16 | @warn "`#{$number} is not a number`"; 17 | @return false; 18 | } 19 | 20 | @return $number * nth($units, $index); 21 | } 22 | -------------------------------------------------------------------------------- /stylesheets/bourbon/helpers/_directional-values.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Directional-property mixins are shorthands for writing properties like the following 4 | /// 5 | /// @ignore You can also use `false` instead of `null`. 6 | /// 7 | /// @param {List} $vals 8 | /// List of directional values 9 | /// 10 | /// @example scss - Usage 11 | /// .element { 12 | /// @include border-style(dotted null); 13 | /// @include margin(null 0 10px); 14 | /// } 15 | /// 16 | /// @example css - CSS Output 17 | /// .element { 18 | /// border-bottom-style: dotted; 19 | /// border-top-style: dotted; 20 | /// margin-bottom: 10px; 21 | /// margin-left: 0; 22 | /// margin-right: 0; 23 | /// } 24 | /// 25 | /// @require {function} contains-falsy 26 | /// 27 | /// @return {List} 28 | 29 | @function collapse-directionals($vals) { 30 | $output: null; 31 | 32 | $a: nth($vals, 1); 33 | $b: if(length($vals) < 2, $a, nth($vals, 2)); 34 | $c: if(length($vals) < 3, $a, nth($vals, 3)); 35 | $d: if(length($vals) < 2, $a, nth($vals, if(length($vals) < 4, 2, 4))); 36 | 37 | @if $a == 0 { $a: 0; } 38 | @if $b == 0 { $b: 0; } 39 | @if $c == 0 { $c: 0; } 40 | @if $d == 0 { $d: 0; } 41 | 42 | @if $a == $b and $a == $c and $a == $d { $output: $a; } 43 | @else if $a == $c and $b == $d { $output: $a $b; } 44 | @else if $b == $d { $output: $a $b $c; } 45 | @else { $output: $a $b $c $d; } 46 | 47 | @return $output; 48 | } 49 | 50 | /// Output directional properties, for instance `margin`. 51 | /// 52 | /// @access private 53 | /// 54 | /// @param {String} $pre 55 | /// Prefix to use 56 | /// @param {String} $suf 57 | /// Suffix to use 58 | /// @param {List} $vals 59 | /// List of values 60 | /// 61 | /// @require {function} collapse-directionals 62 | /// @require {function} contains-falsy 63 | 64 | @mixin directional-property($pre, $suf, $vals) { 65 | // Property Names 66 | $top: $pre + "-top" + if($suf, "-#{$suf}", ""); 67 | $bottom: $pre + "-bottom" + if($suf, "-#{$suf}", ""); 68 | $left: $pre + "-left" + if($suf, "-#{$suf}", ""); 69 | $right: $pre + "-right" + if($suf, "-#{$suf}", ""); 70 | $all: $pre + if($suf, "-#{$suf}", ""); 71 | 72 | $vals: collapse-directionals($vals); 73 | 74 | @if contains-falsy($vals) { 75 | @if nth($vals, 1) { #{$top}: nth($vals, 1); } 76 | 77 | @if length($vals) == 1 { 78 | @if nth($vals, 1) { #{$right}: nth($vals, 1); } 79 | } @else { 80 | @if nth($vals, 2) { #{$right}: nth($vals, 2); } 81 | } 82 | 83 | @if length($vals) == 2 { 84 | @if nth($vals, 1) { #{$bottom}: nth($vals, 1); } 85 | @if nth($vals, 2) { #{$left}: nth($vals, 2); } 86 | } @else if length($vals) == 3 { 87 | @if nth($vals, 3) { #{$bottom}: nth($vals, 3); } 88 | @if nth($vals, 2) { #{$left}: nth($vals, 2); } 89 | } @else if length($vals) == 4 { 90 | @if nth($vals, 3) { #{$bottom}: nth($vals, 3); } 91 | @if nth($vals, 4) { #{$left}: nth($vals, 4); } 92 | } 93 | } @else { 94 | #{$all}: $vals; 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /stylesheets/bourbon/helpers/_font-source-declaration.scss: -------------------------------------------------------------------------------- 1 | // Used for creating the source string for fonts using @font-face 2 | // Reference: http://goo.gl/Ru1bKP 3 | 4 | @function font-url-prefixer($asset-pipeline) { 5 | @if $asset-pipeline == true { 6 | @return font-url; 7 | } @else { 8 | @return url; 9 | } 10 | } 11 | 12 | @function font-source-declaration( 13 | $font-family, 14 | $file-path, 15 | $asset-pipeline, 16 | $file-formats, 17 | $font-url) { 18 | 19 | $src: (); 20 | 21 | $formats-map: ( 22 | eot: "#{$file-path}.eot?#iefix" format("embedded-opentype"), 23 | woff2: "#{$file-path}.woff2" format("woff2"), 24 | woff: "#{$file-path}.woff" format("woff"), 25 | ttf: "#{$file-path}.ttf" format("truetype"), 26 | svg: "#{$file-path}.svg##{$font-family}" format("svg") 27 | ); 28 | 29 | @each $key, $values in $formats-map { 30 | @if contains($file-formats, $key) { 31 | $file-path: nth($values, 1); 32 | $font-format: nth($values, 2); 33 | 34 | @if $asset-pipeline == true { 35 | $src: append($src, font-url($file-path) $font-format, comma); 36 | } @else { 37 | $src: append($src, url($file-path) $font-format, comma); 38 | } 39 | } 40 | } 41 | 42 | @return $src; 43 | } 44 | -------------------------------------------------------------------------------- /stylesheets/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 | -------------------------------------------------------------------------------- /stylesheets/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 | -------------------------------------------------------------------------------- /stylesheets/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, 1, $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-number(str-slice($first-val, 1, 1)); 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 | -------------------------------------------------------------------------------- /stylesheets/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 compatibility 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 compatibility 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 | -------------------------------------------------------------------------------- /stylesheets/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, 1, $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, 1, $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 | -------------------------------------------------------------------------------- /stylesheets/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 | -------------------------------------------------------------------------------- /stylesheets/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, 1, $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 | -------------------------------------------------------------------------------- /stylesheets/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 | -------------------------------------------------------------------------------- /stylesheets/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 | -------------------------------------------------------------------------------- /stylesheets/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 | -------------------------------------------------------------------------------- /stylesheets/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 | -------------------------------------------------------------------------------- /stylesheets/bourbon/settings/_asset-pipeline.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// A global setting to enable or disable the `$asset-pipeline` variable for all functions that accept it. 4 | /// 5 | /// @type Bool 6 | 7 | $asset-pipeline: false !default; 8 | -------------------------------------------------------------------------------- /stylesheets/bourbon/settings/_prefixer.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Global variables to enable or disable vendor prefixes 4 | 5 | $prefix-for-webkit: true !default; 6 | $prefix-for-mozilla: true !default; 7 | $prefix-for-microsoft: true !default; 8 | $prefix-for-opera: true !default; 9 | $prefix-for-spec: true !default; 10 | -------------------------------------------------------------------------------- /stylesheets/bourbon/settings/_px-to-em.scss: -------------------------------------------------------------------------------- 1 | $em-base: 16px !default; 2 | -------------------------------------------------------------------------------- /stylesheets/chart.scss: -------------------------------------------------------------------------------- 1 | .charts { 2 | @include clearfix; 3 | padding: 0px 10px 5px; 4 | p { height: 1.4em; } 5 | .chart { 6 | @include span-columns(12); 7 | margin-bottom: 9%; 8 | } 9 | 10 | @media screen and (min-width: 800px) { 11 | padding: 55px 50px 5px; 12 | .chart { margin-bottom: 0; } 13 | &.medium .chart { @include span-columns(6); } 14 | &.small .chart { @include span-columns(4); } 15 | } 16 | &:last-child { padding-bottom: 50px; } 17 | } 18 | 19 | @media screen and (min-width: 800px) { 20 | .large { 21 | padding-right: 35.5%; 22 | } 23 | } 24 | 25 | .chart { 26 | .chart-graphic { 27 | width: 100%; 28 | height: auto; 29 | min-height: 110px; 30 | } 31 | 32 | @media screen and (min-width: 800px) { 33 | display: table-cell; 34 | } 35 | } 36 | 37 | /*For proper offsetTop when anchor*/ 38 | .chart .chart-graphic[id] { 39 | padding-top: 9.5em; 40 | margin-top: -9.5em; 41 | } 42 | .chart .chart-graphic[id]:before { 43 | display: block; 44 | content: " "; 45 | padding-top: 9.5em; 46 | margin-top: -9.5em; 47 | visibility: hidden; 48 | } -------------------------------------------------------------------------------- /stylesheets/footer.scss: -------------------------------------------------------------------------------- 1 | footer { 2 | @include clearfix; 3 | padding: 30px 50px; 4 | border: solid $dark-gray 1px; 5 | background: $gray; 6 | h2 { 7 | font-size: 1.17em; 8 | color: $very-dark-green; 9 | } 10 | div { 11 | &:last-child h2 { text-transform: uppercase;} 12 | @media screen and (min-width: 700px) { 13 | @include span-columns(6); 14 | } 15 | } 16 | 17 | .question { 18 | font-weight: 900; 19 | margin-bottom: 0; 20 | } 21 | 22 | .answer, p { margin-top: 0; } 23 | p { 24 | a { 25 | font-weight: 600; 26 | } 27 | } 28 | h3 { 29 | a { color: black; } 30 | margin-bottom: 0; 31 | } 32 | a:hover { 33 | text-decoration: underline; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /stylesheets/header.scss: -------------------------------------------------------------------------------- 1 | header { 2 | background: $very-dark-green; 3 | color: white; 4 | p.description { 5 | color: white; 6 | font-family: "Georgia", "serif"; 7 | font-size: modular-scale(2); 8 | } 9 | h1 { font-size: modular-scale(4);} 10 | a { 11 | color: white; 12 | &:hover { text-decoration: underline; } 13 | } 14 | text-align: center; 15 | padding: 50px 20px 0px; 16 | } 17 | nav { 18 | text-align: center; 19 | background: $very-dark-green; 20 | color: white; 21 | padding: 1px 0px; 22 | z-index: 100; 23 | ul { padding-left: 0px; } 24 | ul li { 25 | list-style-type: none; 26 | display: inline; 27 | a { 28 | text-decoration: none; 29 | color: white; 30 | &:hover { text-decoration: underline; } 31 | } 32 | &::after { 33 | content: " "; // " •" 34 | padding: 0px 10px; 35 | } 36 | &:last-child::after { 37 | content: ""; 38 | padding: 0px; 39 | } 40 | } 41 | } 42 | .sticky { 43 | position: fixed; 44 | top: 0; 45 | left: 0; 46 | width: 100%; 47 | } 48 | -------------------------------------------------------------------------------- /stylesheets/maps.scss: -------------------------------------------------------------------------------- 1 | .container { 2 | display: flex; 3 | flex-direction: column; 4 | margin-top: 10px; 5 | } 6 | @media (min-width: 900px) { 7 | .container { 8 | margin: 0 20%; 9 | } 10 | } 11 | @media (min-width: 1400px) { 12 | .container { 13 | margin: 0 30%; 14 | } 15 | } 16 | .tab-set { 17 | display: flex; 18 | justify-content: space-around; 19 | flex-wrap: nowrap; 20 | } 21 | .tab { 22 | padding: 10px; 23 | width: 100%; 24 | text-align: center; 25 | border: none; 26 | border-radius: 5px 5px 0 0; 27 | font-weight: 700; 28 | cursor: pointer; 29 | transition: background-color 0.3s; 30 | } 31 | .tab#active-tab { 32 | background-color: $very-dark-green; 33 | color: white; 34 | } 35 | .tab:hover { 36 | background-color: $very-dark-green; 37 | color: white; 38 | } 39 | .overlay { 40 | fill: none; 41 | pointer-events: all; 42 | } 43 | #tooltip { 44 | position: fixed; 45 | visibility: visible; 46 | pointer-events: none; 47 | opacity: 1; 48 | transition: visibility 0s, opacity 0.3s linear; 49 | background-color: rgba(255, 255, 255, 0.8); 50 | color: black; 51 | padding: 0 15px 15px; 52 | border-radius: 5px; 53 | max-width: 400px; 54 | } 55 | #tooltip.hidden { 56 | visibility: hidden; 57 | opacity: 0; 58 | transition: visibility 0s, opacity 0.3s linear; 59 | } 60 | #tooltip .inner-cont { 61 | display: flex; 62 | flex-direction: column; 63 | } 64 | #tooltip .inner-cont div { 65 | display: flex; 66 | flex-direction: row; 67 | } 68 | #tooltip .inner-cont div:nth-last-child(n+2) { 69 | margin-bottom: 1em; 70 | } 71 | #tooltip .tooltip-graph { 72 | margin-right: 10px; 73 | } 74 | #tooltip .tooltip-data { 75 | width: 12em; 76 | } 77 | #tooltip .tooltip-data p, #tooltip .tooltip-data ul { 78 | margin: -1em 0 !important; 79 | } 80 | #tooltip .tooltip-data ul { 81 | list-style: square; 82 | background-color: rgba(0, 0, 0, 0.8); 83 | padding: 10px 10px 0.2em 30px; 84 | border-radius: 3px; 85 | } 86 | #tooltip .tooltip-data ul span { 87 | color: white; 88 | } 89 | #tooltip .tooltip-data ul li { 90 | margin-bottom: 0.3em; 91 | } 92 | .map-legend { 93 | background: transparent; 94 | max-width: 100%; 95 | margin-top: -2em; 96 | } 97 | .map-legend p, .map-legend .legend-colors { 98 | display: flex; 99 | flex-wrap: wrap; 100 | justify-content: flex-end; 101 | } 102 | .map-legend p.footnote { 103 | display: block; 104 | } 105 | .map-legend .legend-colors div { 106 | display: flex; 107 | justify-content: center; 108 | align-items: center; 109 | padding: 0.4em 0.6em; 110 | min-width: 4.5em; 111 | font-weight: 500; 112 | color: black; 113 | } 114 | @media (max-width: 600px) { 115 | .map-legend { 116 | margin-top: -1.9em; 117 | } 118 | .map-legend .legend-colors div { 119 | font-size: 0.9em; 120 | } 121 | } 122 | @media (max-width: 400px) { 123 | .map-legend { 124 | margin-top: -1.8em; 125 | } 126 | .map-legend .legend-colors div { 127 | font-size: 0.8em; 128 | } 129 | } 130 | @media (max-width: 330px) { 131 | .map-legend { 132 | margin-top: -1.6em; 133 | } 134 | .map-legend .legend-colors div { 135 | font-size: 0.6em; 136 | } 137 | } 138 | @media (max-width: 260px) { 139 | .map-legend { 140 | margin-top: -1.5em; 141 | } 142 | .map-legend .legend-colors div { 143 | font-size: 0.5em; 144 | } 145 | } 146 | .map-legend .legend-colors div:nth-child(4) { 147 | color: #eee; 148 | } 149 | .map-legend .legend-colors div:nth-child(5) { 150 | color: #eee; 151 | } 152 | #Map #all-map-svg, #Map #all-map-legend { 153 | display: block; 154 | } 155 | #gender-map-svg, #gender-map-legend, #ethnicity-map-svg, #ethnicity-map-legend, #age-map-svg, #age-map-legend { 156 | display: none; 157 | } 158 | -------------------------------------------------------------------------------- /stylesheets/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 | @import "settings/disable-warnings"; 9 | -------------------------------------------------------------------------------- /stylesheets/neat/_neat.scss: -------------------------------------------------------------------------------- 1 | // Neat 1.7.4 2 | // http://neat.bourbon.io 3 | // Copyright 2012-2015 thoughtbot, inc. 4 | // MIT License 5 | 6 | // Helpers 7 | @import "neat-helpers"; 8 | 9 | // Grid 10 | @import "grid/private"; 11 | @import "grid/box-sizing"; 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 | @import "grid/display-context"; 23 | @import "grid/direction-context"; 24 | -------------------------------------------------------------------------------- /stylesheets/neat/functions/_new-breakpoint.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Returns a media context (media query / grid context) that can be stored in a variable and passed to `media()` as a single-keyword argument. Media contexts defined using `new-breakpoint` are used by the visual grid, as long as they are defined before importing Neat. 4 | /// 5 | /// @param {List} $query 6 | /// A list of media query features and values. Each `$feature` should have a corresponding `$value`. 7 | /// 8 | /// If there is only a single `$value` in `$query`, `$default-feature` is going to be used. 9 | /// 10 | /// The number of total columns in the grid can be set by passing `$columns` at the end of the list (overrides `$total-columns`). For a list of valid values for `$feature`, click [here](http://www.w3.org/TR/css3-mediaqueries/#media1). 11 | /// 12 | /// @param {Number (unitless)} $total-columns [$grid-columns] 13 | /// - Number of columns to use in the new grid context. Can be set as a shorthand in the first parameter. 14 | /// 15 | /// @example scss - Usage 16 | /// $mobile: new-breakpoint(max-width 480px 4); 17 | /// 18 | /// .element { 19 | /// @include media($mobile) { 20 | /// @include span-columns(4); 21 | /// } 22 | /// } 23 | /// 24 | /// @example css - CSS Output 25 | /// @media screen and (max-width: 480px) { 26 | /// .element { 27 | /// display: block; 28 | /// float: left; 29 | /// margin-right: 7.42297%; 30 | /// width: 100%; 31 | /// } 32 | /// .element:last-child { 33 | /// margin-right: 0; 34 | /// } 35 | /// } 36 | 37 | @function new-breakpoint($query: $feature $value $columns, $total-columns: $grid-columns) { 38 | @if length($query) == 1 { 39 | $query: $default-feature nth($query, 1) $total-columns; 40 | } @else if is-even(length($query)) { 41 | $query: append($query, $total-columns); 42 | } 43 | 44 | @if is-not(belongs-to($query, $visual-grid-breakpoints)) { 45 | $visual-grid-breakpoints: append($visual-grid-breakpoints, $query, comma) !global; 46 | } 47 | 48 | @return $query; 49 | } 50 | -------------------------------------------------------------------------------- /stylesheets/neat/functions/_private.scss: -------------------------------------------------------------------------------- 1 | // Not function for Libsass compatibility 2 | // https://github.com/sass/libsass/issues/368 3 | @function is-not($value) { 4 | @return if($value, false, true); 5 | } 6 | 7 | // Checks if a number is even 8 | @function is-even($int) { 9 | @return $int % 2 == 0; 10 | } 11 | 12 | // Checks if an element belongs to a list or not 13 | @function belongs-to($tested-item, $list) { 14 | @return is-not(not-belongs-to($tested-item, $list)); 15 | } 16 | 17 | @function not-belongs-to($tested-item, $list) { 18 | @return is-not(index($list, $tested-item)); 19 | } 20 | 21 | // Contains display value 22 | @function contains-display-value($query) { 23 | @return belongs-to(table, $query) 24 | or belongs-to(block, $query) 25 | or belongs-to(inline-block, $query) 26 | or belongs-to(inline, $query); 27 | } 28 | 29 | // Parses the first argument of span-columns() 30 | @function container-span($span: $span) { 31 | @if length($span) == 3 { 32 | $container-columns: nth($span, 3); 33 | @return $container-columns; 34 | } @else if length($span) == 2 { 35 | $container-columns: nth($span, 2); 36 | @return $container-columns; 37 | } 38 | 39 | @return $grid-columns; 40 | } 41 | 42 | @function container-shift($shift: $shift) { 43 | $parent-columns: $grid-columns !default !global; 44 | 45 | @if length($shift) == 3 { 46 | $container-columns: nth($shift, 3); 47 | @return $container-columns; 48 | } @else if length($shift) == 2 { 49 | $container-columns: nth($shift, 2); 50 | @return $container-columns; 51 | } 52 | 53 | @return $parent-columns; 54 | } 55 | 56 | // Generates a striped background 57 | @function gradient-stops($grid-columns, $color: $visual-grid-color) { 58 | $transparent: transparent; 59 | 60 | $column-width: flex-grid(1, $grid-columns); 61 | $gutter-width: flex-gutter($grid-columns); 62 | $column-offset: $column-width; 63 | 64 | $values: ($transparent 0, $color 0); 65 | 66 | @for $i from 1 to $grid-columns*2 { 67 | @if is-even($i) { 68 | $values: append($values, $transparent $column-offset, comma); 69 | $values: append($values, $color $column-offset, comma); 70 | $column-offset: $column-offset + $column-width; 71 | } @else { 72 | $values: append($values, $color $column-offset, comma); 73 | $values: append($values, $transparent $column-offset, comma); 74 | $column-offset: $column-offset + $gutter-width; 75 | } 76 | } 77 | 78 | @return $values; 79 | } 80 | 81 | // Layout direction 82 | @function get-direction($layout, $default) { 83 | $direction: null; 84 | 85 | @if to-upper-case($layout) == "LTR" or to-upper-case($layout) == "RTL" { 86 | $direction: direction-from-layout($layout); 87 | } @else { 88 | $direction: direction-from-layout($default); 89 | } 90 | 91 | @return $direction; 92 | } 93 | 94 | @function direction-from-layout($layout) { 95 | $direction: null; 96 | 97 | @if to-upper-case($layout) == "LTR" { 98 | $direction: right; 99 | } @else { 100 | $direction: left; 101 | } 102 | 103 | @return $direction; 104 | } 105 | 106 | @function get-opposite-direction($direction) { 107 | $opposite-direction: left; 108 | 109 | @if $direction == "left" { 110 | $opposite-direction: right; 111 | } 112 | 113 | @return $opposite-direction; 114 | } 115 | -------------------------------------------------------------------------------- /stylesheets/neat/grid/_box-sizing.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | @if $border-box-sizing == true { 4 | html { // http://bit.ly/1qk2tVR 5 | box-sizing: border-box; 6 | } 7 | 8 | * { 9 | &, 10 | &::after, 11 | &::before { 12 | box-sizing: inherit; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /stylesheets/neat/grid/_direction-context.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Changes the direction property used by other mixins called in the code block argument. 4 | /// 5 | /// @param {String} $direction [left-to-right] 6 | /// Layout direction to be used within the block. Can be `left-to-right` or `right-to-left`. 7 | /// 8 | /// @example scss - Usage 9 | /// @include direction-context(right-to-left) { 10 | /// .right-to-left-block { 11 | /// @include span-columns(6); 12 | /// } 13 | /// } 14 | /// 15 | /// @example css - CSS Output 16 | /// .right-to-left-block { 17 | /// float: right; 18 | /// ... 19 | /// } 20 | 21 | @mixin direction-context($direction: left-to-right) { 22 | $scope-direction: $layout-direction; 23 | 24 | @if to-lower-case($direction) == "left-to-right" { 25 | $layout-direction: LTR !global; 26 | } @else if to-lower-case($direction) == "right-to-left" { 27 | $layout-direction: RTL !global; 28 | } 29 | 30 | @content; 31 | 32 | $layout-direction: $scope-direction !global; 33 | } 34 | -------------------------------------------------------------------------------- /stylesheets/neat/grid/_display-context.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Changes the display property used by other mixins called in the code block argument. 4 | /// 5 | /// @param {String} $display [block] 6 | /// Display value to be used within the block. Can be `table` or `block`. 7 | /// 8 | /// @example scss 9 | /// @include display-context(table) { 10 | /// .display-table { 11 | /// @include span-columns(6); 12 | /// } 13 | /// } 14 | /// 15 | /// @example css 16 | /// .display-table { 17 | /// display: table-cell; 18 | /// ... 19 | /// } 20 | 21 | @mixin display-context($display: block) { 22 | $scope-display: $container-display-table; 23 | $container-display-table: $display == table !global; 24 | 25 | @content; 26 | 27 | $container-display-table: $scope-display !global; 28 | } 29 | -------------------------------------------------------------------------------- /stylesheets/neat/grid/_fill-parent.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Forces the element to fill its parent container. 4 | /// 5 | /// @example scss - Usage 6 | /// .element { 7 | /// @include fill-parent; 8 | /// } 9 | /// 10 | /// @example css - CSS Output 11 | /// .element { 12 | /// width: 100%; 13 | /// box-sizing: border-box; 14 | /// } 15 | 16 | @mixin fill-parent() { 17 | width: 100%; 18 | 19 | @if $border-box-sizing == false { 20 | box-sizing: border-box; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /stylesheets/neat/grid/_media.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Outputs a media-query block with an optional grid context (the total number of columns used in the grid). 4 | /// 5 | /// @param {List} $query 6 | /// A list of media query features and values, where each `$feature` should have a corresponding `$value`. 7 | /// For a list of valid values for `$feature`, click [here](http://www.w3.org/TR/css3-mediaqueries/#media1). 8 | /// 9 | /// If there is only a single `$value` in `$query`, `$default-feature` is going to be used. 10 | /// 11 | /// The number of total columns in the grid can be set by passing `$columns` at the end of the list (overrides `$total-columns`). 12 | /// 13 | /// 14 | /// @param {Number (unitless)} $total-columns [$grid-columns] 15 | /// - Number of columns to use in the new grid context. Can be set as a shorthand in the first parameter. 16 | /// 17 | /// @example scss - Usage 18 | /// .responsive-element { 19 | /// @include media(769px) { 20 | /// @include span-columns(6); 21 | /// } 22 | /// } 23 | /// 24 | /// .new-context-element { 25 | /// @include media(min-width 320px max-width 480px, 6) { 26 | /// @include span-columns(6); 27 | /// } 28 | /// } 29 | /// 30 | /// @example css - CSS Output 31 | /// @media screen and (min-width: 769px) { 32 | /// .responsive-element { 33 | /// display: block; 34 | /// float: left; 35 | /// margin-right: 2.35765%; 36 | /// width: 48.82117%; 37 | /// } 38 | /// 39 | /// .responsive-element:last-child { 40 | /// margin-right: 0; 41 | /// } 42 | /// } 43 | /// 44 | /// @media screen and (min-width: 320px) and (max-width: 480px) { 45 | /// .new-context-element { 46 | /// display: block; 47 | /// float: left; 48 | /// margin-right: 4.82916%; 49 | /// width: 100%; 50 | /// } 51 | /// 52 | /// .new-context-element:last-child { 53 | /// margin-right: 0; 54 | /// } 55 | /// } 56 | 57 | @mixin media($query: $feature $value $columns, $total-columns: $grid-columns) { 58 | @if length($query) == 1 { 59 | @media screen and ($default-feature: nth($query, 1)) { 60 | $default-grid-columns: $grid-columns; 61 | $grid-columns: $total-columns !global; 62 | @content; 63 | $grid-columns: $default-grid-columns !global; 64 | } 65 | } @else { 66 | $loop-to: length($query); 67 | $media-query: "screen and "; 68 | $default-grid-columns: $grid-columns; 69 | $grid-columns: $total-columns !global; 70 | 71 | @if is-not(is-even(length($query))) { 72 | $grid-columns: nth($query, $loop-to) !global; 73 | $loop-to: $loop-to - 1; 74 | } 75 | 76 | $i: 1; 77 | @while $i <= $loop-to { 78 | $media-query: $media-query + "(" + nth($query, $i) + ": " + nth($query, $i + 1) + ") "; 79 | 80 | @if ($i + 1) != $loop-to { 81 | $media-query: $media-query + "and "; 82 | } 83 | 84 | $i: $i + 2; 85 | } 86 | 87 | @media #{$media-query} { 88 | @content; 89 | $grid-columns: $default-grid-columns !global; 90 | } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /stylesheets/neat/grid/_omega.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Removes the element's gutter margin, regardless of its position in the grid hierarchy or display property. It can target a specific element, or every `nth-child` occurrence. Works only with `block` layouts. 4 | /// 5 | /// @param {List} $query [block] 6 | /// List of arguments. Supported arguments are `nth-child` selectors (targets a specific pseudo element) and `auto` (targets `last-child`). 7 | /// 8 | /// When passed an `nth-child` argument of type `*n` with `block` display, the omega mixin automatically adds a clear to the `*n+1` th element. Note that composite arguments such as `2n+1` do not support this feature. 9 | /// 10 | /// **Deprecation warning**: The omega mixin will no longer take a `$direction` argument. To change the layout direction, use `row($direction)` or set `$default-layout-direction` instead. 11 | /// 12 | /// @example scss - Usage 13 | /// .element { 14 | /// @include omega; 15 | /// } 16 | /// 17 | /// .nth-element { 18 | /// @include omega(4n); 19 | /// } 20 | /// 21 | /// @example css - CSS Output 22 | /// .element { 23 | /// margin-right: 0; 24 | /// } 25 | /// 26 | /// .nth-element:nth-child(4n) { 27 | /// margin-right: 0; 28 | /// } 29 | /// 30 | /// .nth-element:nth-child(4n+1) { 31 | /// clear: left; 32 | /// } 33 | 34 | @mixin omega($query: block, $direction: default) { 35 | $table: belongs-to(table, $query); 36 | $auto: belongs-to(auto, $query); 37 | 38 | @if $direction != default { 39 | @include -neat-warn("The omega mixin will no longer take a $direction argument. To change the layout direction, use the direction(){...} mixin."); 40 | } @else { 41 | $direction: get-direction($layout-direction, $default-layout-direction); 42 | } 43 | 44 | @if $table { 45 | @include -neat-warn("The omega mixin no longer removes padding in table layouts."); 46 | } 47 | 48 | @if length($query) == 1 { 49 | @if $auto { 50 | &:last-child { 51 | margin-#{$direction}: 0; 52 | } 53 | } 54 | 55 | @else if contains-display-value($query) and $table == false { 56 | margin-#{$direction}: 0; 57 | } 58 | 59 | @else { 60 | @include nth-child($query, $direction); 61 | } 62 | } @else if length($query) == 2 { 63 | @if $auto { 64 | &:last-child { 65 | margin-#{$direction}: 0; 66 | } 67 | } @else { 68 | @include nth-child(nth($query, 1), $direction); 69 | } 70 | } @else { 71 | @include -neat-warn("Too many arguments passed to the omega() mixin."); 72 | } 73 | } 74 | 75 | @mixin nth-child($query, $direction) { 76 | $opposite-direction: get-opposite-direction($direction); 77 | 78 | &:nth-child(#{$query}) { 79 | margin-#{$direction}: 0; 80 | } 81 | 82 | @if type-of($query) == number and unit($query) == "n" { 83 | &:nth-child(#{$query}+1) { 84 | clear: $opposite-direction; 85 | } 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /stylesheets/neat/grid/_outer-container.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Makes an element a outer container by centering it in the viewport, clearing its floats, and setting its `max-width`. 4 | /// Although optional, using `outer-container` is recommended. The mixin can be called on more than one element per page, as long as they are not nested. 5 | /// 6 | /// @param {Number [unit]} $local-max-width [$max-width] 7 | /// Max width to be applied to the element. Can be a percentage or a measure. 8 | /// 9 | /// @example scss - Usage 10 | /// .element { 11 | /// @include outer-container(100%); 12 | /// } 13 | /// 14 | /// @example css - CSS Output 15 | /// .element { 16 | /// *zoom: 1; 17 | /// max-width: 100%; 18 | /// margin-left: auto; 19 | /// margin-right: auto; 20 | /// } 21 | /// 22 | /// .element:before, .element:after { 23 | /// content: " "; 24 | /// display: table; 25 | /// } 26 | /// 27 | /// .element:after { 28 | /// clear: both; 29 | /// } 30 | 31 | @mixin outer-container($local-max-width: $max-width) { 32 | @include clearfix; 33 | max-width: $local-max-width; 34 | margin: { 35 | left: auto; 36 | right: auto; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /stylesheets/neat/grid/_pad.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Adds padding to the element. 4 | /// 5 | /// @param {List} $padding [flex-gutter()] 6 | /// A list of padding value(s) to use. Passing `default` in the list will result in using the gutter width as a padding value. 7 | /// 8 | /// @example scss - Usage 9 | /// .element { 10 | /// @include pad(30px -20px 10px default); 11 | /// } 12 | /// 13 | /// @example css - CSS Output 14 | /// .element { 15 | /// padding: 30px -20px 10px 2.35765%; 16 | /// } 17 | 18 | @mixin pad($padding: flex-gutter()) { 19 | $padding-list: null; 20 | @each $value in $padding { 21 | $value: if($value == 'default', flex-gutter(), $value); 22 | $padding-list: join($padding-list, $value); 23 | } 24 | padding: $padding-list; 25 | } 26 | -------------------------------------------------------------------------------- /stylesheets/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: LTR !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 | @return $container-is-display-table == true or $display == table; 35 | } 36 | -------------------------------------------------------------------------------- /stylesheets/neat/grid/_row.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Designates the element as a row of columns in the grid layout. It clears the floats on the element and sets its display property. Rows can't be nested, but there can be more than one row element—with different display properties—per layout. 4 | /// 5 | /// @param {String} $display [default] 6 | /// Sets the display property of the element and the display context that will be used by its children. Can be `block` or `table`. 7 | /// 8 | /// @param {String} $direction [$default-layout-direction] 9 | /// Sets the layout direction. Can be `LTR` (left-to-right) or `RTL` (right-to-left). 10 | /// 11 | /// @example scss - Usage 12 | /// .element { 13 | /// @include row(); 14 | /// } 15 | /// 16 | /// @example css - CSS Output 17 | /// .element { 18 | /// *zoom: 1; 19 | /// display: block; 20 | /// } 21 | /// 22 | /// .element:before, .element:after { 23 | /// content: " "; 24 | /// display: table; 25 | /// } 26 | /// 27 | /// .element:after { 28 | /// clear: both; 29 | /// } 30 | 31 | @mixin row($display: default, $direction: $default-layout-direction) { 32 | @if $direction != $default-layout-direction { 33 | @include -neat-warn("The $direction argument will be deprecated in future versions in favor of the direction(){...} mixin."); 34 | } 35 | 36 | $layout-direction: $direction !global; 37 | 38 | @if $display != default { 39 | @include -neat-warn("The $display argument will be deprecated in future versions in favor of the display(){...} mixin."); 40 | } 41 | 42 | @if $display == table { 43 | display: table; 44 | @include fill-parent; 45 | table-layout: fixed; 46 | $container-display-table: true !global; 47 | } @else { 48 | @include clearfix; 49 | display: block; 50 | $container-display-table: false !global; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /stylesheets/neat/grid/_shift.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Translates an element horizontally by a number of columns. Positive arguments shift the element to the active layout direction, while negative ones shift it to the opposite direction. 4 | /// 5 | /// @param {Number (unitless)} $n-columns [1] 6 | /// Number of columns by which the element shifts. 7 | /// 8 | /// @example scss - Usage 9 | /// .element { 10 | /// @include shift(-3); 11 | /// } 12 | /// 13 | /// @example css - CSS output 14 | /// .element { 15 | /// margin-left: -25.58941%; 16 | /// } 17 | 18 | @mixin shift($n-columns: 1) { 19 | @include shift-in-context($n-columns); 20 | } 21 | 22 | /// Translates an element horizontally by a number of columns, in a specific nesting context. 23 | /// 24 | /// @param {List} $shift 25 | /// A list containing the number of columns to shift (`$columns`) and the number of columns of the parent element (`$container-columns`). 26 | /// 27 | /// The two values can be separated with any string such as `of`, `/`, etc. 28 | /// 29 | /// @example scss - Usage 30 | /// .element { 31 | /// @include shift(-3 of 6); 32 | /// } 33 | /// 34 | /// @example css - CSS output 35 | /// .element { 36 | /// margin-left: -52.41458%; 37 | /// } 38 | 39 | @mixin shift-in-context($shift: $columns of $container-columns) { 40 | $n-columns: nth($shift, 1); 41 | $parent-columns: container-shift($shift) !global; 42 | 43 | $direction: get-direction($layout-direction, $default-layout-direction); 44 | $opposite-direction: get-opposite-direction($direction); 45 | 46 | margin-#{$opposite-direction}: $n-columns * flex-grid(1, $parent-columns) + $n-columns * flex-gutter($parent-columns); 47 | 48 | // Reset nesting context 49 | $parent-columns: $grid-columns !global; 50 | } 51 | -------------------------------------------------------------------------------- /stylesheets/neat/grid/_span-columns.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Specifies the number of columns an element should span. If the selector is nested the number of columns of its parent element should be passed as an argument as well. 4 | /// 5 | /// @param {List} $span 6 | /// A list containing `$columns`, the unitless number of columns the element spans (required), and `$container-columns`, the number of columns the parent element spans (optional). 7 | /// 8 | /// If only one value is passed, it is assumed that it's `$columns` and that that `$container-columns` is equal to `$grid-columns`, the total number of columns in the grid. 9 | /// 10 | /// The values can be separated with any string such as `of`, `/`, etc. 11 | /// 12 | /// `$columns` also accepts decimals for when it's necessary to break out of the standard grid. E.g. Passing `2.4` in a standard 12 column grid will divide the row into 5 columns. 13 | /// 14 | /// @param {String} $display [block] 15 | /// Sets the display property of the element. By default it sets the display property of the element to `block`. 16 | /// 17 | /// If passed `block-collapse`, it also removes the margin gutter by adding it to the element width. 18 | /// 19 | /// If passed `table`, it sets the display property to `table-cell` and calculates the width of the element without taking gutters into consideration. The result does not align with the block-based grid. 20 | /// 21 | /// @example scss - Usage 22 | /// .element { 23 | /// @include span-columns(6); 24 | /// 25 | /// .nested-element { 26 | /// @include span-columns(2 of 6); 27 | /// } 28 | /// } 29 | /// 30 | /// @example css - CSS Output 31 | /// .element { 32 | /// display: block; 33 | /// float: left; 34 | /// margin-right: 2.35765%; 35 | /// width: 48.82117%; 36 | /// } 37 | /// 38 | /// .element:last-child { 39 | /// margin-right: 0; 40 | /// } 41 | /// 42 | /// .element .nested-element { 43 | /// display: block; 44 | /// float: left; 45 | /// margin-right: 4.82916%; 46 | /// width: 30.11389%; 47 | /// } 48 | /// 49 | /// .element .nested-element:last-child { 50 | /// margin-right: 0; 51 | /// } 52 | 53 | @mixin span-columns($span: $columns of $container-columns, $display: block) { 54 | $columns: nth($span, 1); 55 | $container-columns: container-span($span); 56 | 57 | $parent-columns: get-parent-columns($container-columns) !global; 58 | 59 | $direction: get-direction($layout-direction, $default-layout-direction); 60 | $opposite-direction: get-opposite-direction($direction); 61 | 62 | $display-table: is-display-table($container-display-table, $display); 63 | 64 | @if $display-table { 65 | display: table-cell; 66 | width: percentage($columns / $container-columns); 67 | } @else { 68 | float: #{$opposite-direction}; 69 | 70 | @if $display != no-display { 71 | display: block; 72 | } 73 | 74 | @if $display == collapse { 75 | @include -neat-warn("The 'collapse' argument will be deprecated. Use 'block-collapse' instead."); 76 | } 77 | 78 | @if $display == collapse or $display == block-collapse { 79 | width: flex-grid($columns, $container-columns) + flex-gutter($container-columns); 80 | 81 | &:last-child { 82 | width: flex-grid($columns, $container-columns); 83 | } 84 | 85 | } @else { 86 | margin-#{$direction}: flex-gutter($container-columns); 87 | width: flex-grid($columns, $container-columns); 88 | 89 | &:last-child { 90 | margin-#{$direction}: 0; 91 | } 92 | } 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /stylesheets/neat/grid/_to-deprecate.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | @mixin breakpoint($query:$feature $value $columns, $total-columns: $grid-columns) { 4 | @include -neat-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."); 5 | 6 | @if length($query) == 1 { 7 | @media screen and ($default-feature: nth($query, 1)) { 8 | $default-grid-columns: $grid-columns; 9 | $grid-columns: $total-columns; 10 | @content; 11 | $grid-columns: $default-grid-columns; 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 | } @else if length($query) == 3 { 21 | @media screen and (nth($query, 1): nth($query, 2)) { 22 | $default-grid-columns: $grid-columns; 23 | $grid-columns: nth($query, 3); 24 | @content; 25 | $grid-columns: $default-grid-columns; 26 | } 27 | } @else if length($query) == 4 { 28 | @media screen and (nth($query, 1): nth($query, 2)) and (nth($query, 3): nth($query, 4)) { 29 | $default-grid-columns: $grid-columns; 30 | $grid-columns: $total-columns; 31 | @content; 32 | $grid-columns: $default-grid-columns; 33 | } 34 | } @else if length($query) == 5 { 35 | @media screen and (nth($query, 1): nth($query, 2)) and (nth($query, 3): nth($query, 4)) { 36 | $default-grid-columns: $grid-columns; 37 | $grid-columns: nth($query, 5); 38 | @content; 39 | $grid-columns: $default-grid-columns; 40 | } 41 | } @else { 42 | @include -neat-warn("Wrong number of arguments for breakpoint(). Read the documentation for more details."); 43 | } 44 | } 45 | 46 | @mixin nth-omega($nth, $display: block, $direction: default) { 47 | @include -neat-warn("The nth-omega() mixin is deprecated. Please use omega() instead."); 48 | @include omega($nth $display, $direction); 49 | } 50 | 51 | /// Resets the active display property to `block`. Particularly useful when changing the display property in a single row. 52 | /// 53 | /// @example scss - Usage 54 | /// .element { 55 | /// @include row(table); 56 | /// // Context changed to table display 57 | /// } 58 | /// 59 | /// @include reset-display; 60 | /// // Context is reset to block display 61 | 62 | @mixin reset-display { 63 | $container-display-table: false !global; 64 | @include -neat-warn("Resetting $display will be deprecated in future versions in favor of the display(){...} mixin."); 65 | } 66 | 67 | /// Resets the active layout direction to the default value set in `$default-layout-direction`. Particularly useful when changing the layout direction in a single row. 68 | /// 69 | /// @example scss - Usage 70 | /// .element { 71 | /// @include row($direction: RTL); 72 | /// // Context changed to right-to-left 73 | /// } 74 | /// 75 | /// @include reset-layout-direction; 76 | /// // Context is reset to left-to-right 77 | 78 | @mixin reset-layout-direction { 79 | $layout-direction: $default-layout-direction !global; 80 | @include -neat-warn("Resetting $direction will be deprecated in future versions in favor of the direction(){...} mixin."); 81 | } 82 | 83 | /// Resets both the active layout direction and the active display property. 84 | /// 85 | /// @example scss - Usage 86 | /// .element { 87 | /// @include row(table, RTL); 88 | /// // Context changed to table table and right-to-left 89 | /// } 90 | /// 91 | /// @include reset-all; 92 | /// // Context is reset to block display and left-to-right 93 | 94 | @mixin reset-all { 95 | @include reset-display; 96 | @include reset-layout-direction; 97 | } 98 | -------------------------------------------------------------------------------- /stylesheets/neat/grid/_visual-grid.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | @mixin grid-column-gradient($values...) { 4 | background-image: -webkit-linear-gradient(left, $values); 5 | background-image: -moz-linear-gradient(left, $values); 6 | background-image: -ms-linear-gradient(left, $values); 7 | background-image: -o-linear-gradient(left, $values); 8 | background-image: unquote("linear-gradient(to left, #{$values})"); 9 | } 10 | 11 | @if $visual-grid == true or $visual-grid == yes { 12 | body:before { 13 | @include grid-column-gradient(gradient-stops($grid-columns)); 14 | content: ""; 15 | display: inline-block; 16 | height: 100%; 17 | left: 0; 18 | margin: 0 auto; 19 | max-width: $max-width; 20 | opacity: $visual-grid-opacity; 21 | pointer-events: none; 22 | position: fixed; 23 | right: 0; 24 | width: 100%; 25 | 26 | @if $visual-grid-index == back { 27 | z-index: -1; 28 | } 29 | 30 | @else if $visual-grid-index == front { 31 | z-index: 9999; 32 | } 33 | 34 | @each $breakpoint in $visual-grid-breakpoints { 35 | @if $breakpoint { 36 | @include media($breakpoint) { 37 | @include grid-column-gradient(gradient-stops($grid-columns)); 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /stylesheets/neat/settings/_disable-warnings.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Disable all deprecation warnings. Defaults to `false`. Set with a `!global` flag. 4 | /// 5 | /// @type Bool 6 | 7 | $disable-warnings: false !default; 8 | 9 | @mixin -neat-warn($message) { 10 | @if $disable-warnings == false { 11 | @warn "#{$message}"; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /stylesheets/neat/settings/_grid.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Sets the relative width of a single grid column. The unit used should be the same one used to define `$gutter`. To learn more about `modular-scale()` see [Bourbon docs](http://bourbon.io/docs/#modular-scale). Set with a `!global` flag. 4 | /// 5 | /// @type Number (Unit) 6 | 7 | $column: modular-scale(3, 1em, $golden) !default; 8 | 9 | /// Sets the relative width of a single grid gutter. The unit used should be the same one used to define `$column`. To learn more about `modular-scale()` see [Bourbon docs](http://bourbon.io/docs/#modular-scale). Set with the `!global` flag. 10 | /// 11 | /// @type Number (Unit) 12 | 13 | $gutter: modular-scale(1, 1em, $golden) !default; 14 | 15 | /// Sets the total number of columns in the grid. Its value can be overridden inside a media query using the `media()` mixin. Set with the `!global` flag. 16 | /// 17 | /// @type Number (Unitless) 18 | 19 | $grid-columns: 12 !default; 20 | 21 | /// Sets the max-width property of the element that includes `outer-container()`. Set with the `!global` flag. 22 | /// 23 | /// @type Number (Unit) 24 | /// 25 | $max-width: 1200px !default; 26 | 27 | /// When set to true, it sets the box-sizing property of all elements to `border-box`. Set with a `!global` flag. 28 | /// 29 | /// @type Bool 30 | /// 31 | /// @example css - CSS Output 32 | /// html { 33 | /// box-sizing: border-box; } 34 | /// 35 | /// *, *::after, *::before { 36 | /// box-sizing: inherit; 37 | /// } 38 | 39 | $border-box-sizing: true !default; 40 | 41 | /// Sets the default [media feature](http://www.w3.org/TR/css3-mediaqueries/#media) that `media()` and `new-breakpoint()` revert to when only a breakpoint value is passed. Set with a `!global` flag. 42 | /// 43 | /// @type String 44 | 45 | $default-feature: min-width; // Default @media feature for the breakpoint() mixin 46 | 47 | ///Sets the default layout direction of the grid. Can be `LTR` or `RTL`. Set with a `!global` flag. 48 | /// 49 | ///@type String 50 | 51 | $default-layout-direction: LTR !default; 52 | -------------------------------------------------------------------------------- /stylesheets/neat/settings/_visual-grid.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /// Displays the visual grid when set to true. The overlaid grid may be few pixels off depending on the browser's rendering engine and pixel rounding algorithm. Set with the `!global` flag. 4 | /// 5 | /// @type Bool 6 | 7 | $visual-grid: false !default; 8 | 9 | /// Sets the visual grid color. Set with `!global` flag. 10 | /// 11 | /// @type Color 12 | 13 | $visual-grid-color: #eee !default; 14 | 15 | /// Sets the `z-index` property of the visual grid. Can be `back` (behind content) or `front` (in front of content). Set with `!global` flag. 16 | /// 17 | /// @type String 18 | 19 | $visual-grid-index: back !default; 20 | 21 | /// Sets the opacity property of the visual grid. Set with `!global` flag. 22 | /// 23 | /// @type Number (unitless) 24 | 25 | $visual-grid-opacity: 0.4 !default; 26 | 27 | $visual-grid-breakpoints: () !default; 28 | -------------------------------------------------------------------------------- /stylesheets/popup.scss: -------------------------------------------------------------------------------- 1 | .raw-data { 2 | a { 3 | font-weight: 600; 4 | } 5 | .close { 6 | color: $very-dark-green; 7 | position: absolute; 8 | top: 10px; 9 | right: 30px; 10 | font-size: 20px; 11 | } 12 | background: white; 13 | font-size: modular-scale(1); 14 | border: 15px solid $gray; 15 | padding: 10px 30px; 16 | position: fixed; 17 | top: 80px; 18 | @media screen and (max-width: 699px) { 19 | width: 90%; 20 | left: 5%; 21 | } 22 | @media screen and (min-width: 700px) { 23 | width: 50%; 24 | left: 25%; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /stylesheets/style.css: -------------------------------------------------------------------------------- 1 | html { 2 | box-sizing: border-box; } 3 | 4 | *, *::after, *::before { 5 | box-sizing: inherit; } 6 | 7 | body { 8 | padding-top: 0; 9 | margin: 0; 10 | font-family: "Roboto", "sans serif"; } 11 | body a { 12 | color: black; 13 | text-decoration: none; } 14 | body .footnote:before { 15 | display: block; 16 | content: " "; 17 | margin-left: 2px; 18 | width: 12em; 19 | border-top: 1px solid black; 20 | opacity: 0.4; } 21 | body .footnote { 22 | margin: 0 0 0 0.15em; 23 | font-size: 0.8em; 24 | font-style: italic; 25 | opacity: 0.8; } 26 | body img { 27 | width: 100%; } 28 | 29 | header { 30 | background: #006400; 31 | color: white; 32 | text-align: center; 33 | padding: 50px 20px 0px; } 34 | header p.description { 35 | color: white; 36 | font-family: "Georgia", "serif"; 37 | font-size: 1.77689em; } 38 | header h1 { 39 | font-size: 3.15733em; } 40 | header a { 41 | color: white; } 42 | header a:hover { 43 | text-decoration: underline; } 44 | 45 | nav { 46 | text-align: center; 47 | background: #006400; 48 | color: white; 49 | padding: 1px 0px; 50 | z-index: 100; } 51 | nav ul { 52 | padding-left: 0px; } 53 | nav ul li { 54 | list-style-type: none; 55 | display: inline; } 56 | nav ul li a { 57 | text-decoration: none; 58 | color: white; } 59 | nav ul li a:hover { 60 | text-decoration: underline; } 61 | nav ul li::after { 62 | content: " "; 63 | padding: 0px 10px; } 64 | nav ul li:last-child::after { 65 | content: ""; 66 | padding: 0px; } 67 | 68 | .sticky { 69 | position: fixed; 70 | top: 0; 71 | left: 0; 72 | width: 100%; } 73 | 74 | .raw-data { 75 | background: white; 76 | font-size: 1.333em; 77 | border: 15px solid #F6F6F6; 78 | padding: 10px 30px; 79 | position: fixed; 80 | top: 80px; } 81 | .raw-data a { 82 | font-weight: 600; } 83 | .raw-data .close { 84 | color: #006400; 85 | position: absolute; 86 | top: 10px; 87 | right: 30px; 88 | font-size: 20px; } 89 | @media screen and (max-width: 699px) { 90 | .raw-data { 91 | width: 90%; 92 | left: 5%; } } 93 | @media screen and (min-width: 700px) { 94 | .raw-data { 95 | width: 50%; 96 | left: 25%; } } 97 | 98 | .charts { 99 | padding: 0px 10px 5px; } 100 | .charts::after { 101 | clear: both; 102 | content: ""; 103 | display: table; } 104 | .charts p { 105 | height: 1.4em; } 106 | .charts .chart { 107 | float: left; 108 | display: block; 109 | margin-right: 2.35765%; 110 | width: 100%; 111 | margin-bottom: 9%; } 112 | .charts .chart:last-child { 113 | margin-right: 0; } 114 | @media screen and (min-width: 800px) { 115 | .charts { 116 | padding: 55px 50px 5px; } 117 | .charts .chart { 118 | margin-bottom: 0; } 119 | .charts.medium .chart { 120 | float: left; 121 | display: block; 122 | margin-right: 2.35765%; 123 | width: 48.82117%; } 124 | .charts.medium .chart:last-child { 125 | margin-right: 0; } 126 | .charts.small .chart { 127 | float: left; 128 | display: block; 129 | margin-right: 2.35765%; 130 | width: 31.76157%; } 131 | .charts.small .chart:last-child { 132 | margin-right: 0; } } 133 | .charts:last-child { 134 | padding-bottom: 50px; } 135 | 136 | @media screen and (min-width: 800px) { 137 | .large { 138 | padding-right: 35.5%; } } 139 | .chart .chart-graphic { 140 | width: 100%; 141 | height: auto; 142 | min-height: 110px; } 143 | @media screen and (min-width: 800px) { 144 | .chart { 145 | display: table-cell; } } 146 | 147 | /*For proper offsetTop when anchor*/ 148 | .chart .chart-graphic[id] { 149 | padding-top: 9.5em; 150 | margin-top: -9.5em; } 151 | 152 | .chart .chart-graphic[id]:before { 153 | display: block; 154 | content: " "; 155 | padding-top: 9.5em; 156 | margin-top: -9.5em; 157 | visibility: hidden; } 158 | 159 | footer { 160 | padding: 30px 50px; 161 | border: solid #D8D8D8 1px; 162 | background: #F6F6F6; } 163 | footer::after { 164 | clear: both; 165 | content: ""; 166 | display: table; } 167 | footer h2 { 168 | font-size: 1.17em; 169 | color: #006400; } 170 | footer div:last-child h2 { 171 | text-transform: uppercase; } 172 | @media screen and (min-width: 700px) { 173 | footer div { 174 | float: left; 175 | display: block; 176 | margin-right: 2.35765%; 177 | width: 48.82117%; } 178 | footer div:last-child { 179 | margin-right: 0; } } 180 | footer .question { 181 | font-weight: 900; 182 | margin-bottom: 0; } 183 | footer .answer, footer p { 184 | margin-top: 0; } 185 | footer p a { 186 | font-weight: 600; } 187 | footer h3 { 188 | margin-bottom: 0; } 189 | footer h3 a { 190 | color: black; } 191 | footer a:hover { 192 | text-decoration: underline; } 193 | 194 | section header { 195 | background: #F6F6F6; 196 | border: #D8D8D8 solid 2px; 197 | padding: 30px 50px; } 198 | section header { 199 | color: black; 200 | text-align: left; } 201 | section header h2 { 202 | text-transform: uppercase; 203 | padding-right: 10px; } 204 | section header h2, section header p { 205 | display: inline; 206 | vertical-align: middle; } 207 | section .tag-sections { 208 | display: table; 209 | width: 100%; } 210 | section article.tags { 211 | width: 100%; 212 | background: #F6F6F6; 213 | padding: 30px 10px; 214 | border: #D8D8D8 solid 2px; 215 | border-left: none; 216 | border-top: none; } 217 | section article.tags h3 { 218 | margin-top: 0px; } 219 | @media screen and (min-width: 800px) { 220 | section article.tags { 221 | width: 33.333%; 222 | padding: 30px 50px; 223 | display: table-cell; } } 224 | section article.tags .tag { 225 | display: inline-block; 226 | margin-bottom: 20px; } 227 | section article.tags .tag a { 228 | border: #D8D8D8 solid 2px; 229 | padding: 5px 10px; 230 | color: #006400; 231 | background: white; } 232 | section article.tags .tag a:hover { 233 | background: #006400; 234 | color: white; 235 | border-color: #006400; } 236 | 237 | /* toDO: barcharts.scss*/ 238 | /* This shows the small ticks on Y axis */ 239 | .axis path, 240 | .axis line { 241 | fill: none; } 242 | 243 | .x.axis { 244 | display: none; } 245 | 246 | .y.axis { 247 | display: none; 248 | font-size: 16px; } 249 | 250 | .y.axis path { 251 | display: none; } 252 | 253 | /*#006400 #008400 #7ED321*/ 254 | .bar { 255 | position: absolute; 256 | fill: #006400; 257 | stroke: #006400; } 258 | 259 | .bar:hover { 260 | fill: #7ED321; 261 | stroke: #7ED321; } 262 | 263 | .barLabel { 264 | font-size: 16px 265 | /*font-weight: bold;*/ } 266 | 267 | .barTitle { 268 | font-size: 16px; } 269 | 270 | #SchoolDegree .barTitle, 271 | #SchoolMajor .barTitle, 272 | #JobPref .barTitle, 273 | #JobRoleInterest .barTitle, 274 | #CountryLive .barTitle, 275 | #EmploymentStatus .barTitle, 276 | #EmploymentField .barTitle, 277 | #CityPopulation .barTitle, 278 | #JobWherePref .barTitle, 279 | #Podcast .barTitle, 280 | #JobApplyWhen .barTitle { 281 | font-size: 14px; } 282 | 283 | .container { 284 | display: -webkit-box; 285 | display: -webkit-flex; 286 | display: -ms-flexbox; 287 | display: flex; 288 | -webkit-box-orient: vertical; 289 | -webkit-box-direction: normal; 290 | -webkit-flex-direction: column; 291 | -ms-flex-direction: column; 292 | flex-direction: column; 293 | margin-top: 10px; } 294 | 295 | @media (min-width: 900px) { 296 | .container { 297 | margin: 0 20%; } } 298 | @media (min-width: 1400px) { 299 | .container { 300 | margin: 0 30%; } } 301 | .tab-set { 302 | display: -webkit-box; 303 | display: -webkit-flex; 304 | display: -ms-flexbox; 305 | display: flex; 306 | -webkit-justify-content: space-around; 307 | -ms-flex-pack: distribute; 308 | justify-content: space-around; 309 | -webkit-flex-wrap: nowrap; 310 | -ms-flex-wrap: nowrap; 311 | flex-wrap: nowrap; } 312 | 313 | .tab { 314 | padding: 10px; 315 | width: 100%; 316 | text-align: center; 317 | border: none; 318 | border-radius: 5px 5px 0 0; 319 | font-weight: 700; 320 | cursor: pointer; 321 | -webkit-transition: background-color 0.3s; 322 | transition: background-color 0.3s; } 323 | 324 | .tab#active-tab { 325 | background-color: #006400; 326 | color: white; } 327 | 328 | .tab:hover { 329 | background-color: #006400; 330 | color: white; } 331 | 332 | .overlay { 333 | fill: none; 334 | pointer-events: all; } 335 | 336 | #tooltip { 337 | position: fixed; 338 | visibility: visible; 339 | pointer-events: none; 340 | opacity: 1; 341 | -webkit-transition: visibility 0s, opacity 0.3s linear; 342 | transition: visibility 0s, opacity 0.3s linear; 343 | background-color: rgba(255, 255, 255, 0.8); 344 | color: black; 345 | padding: 0 15px 15px; 346 | border-radius: 5px; 347 | max-width: 400px; } 348 | 349 | #tooltip.hidden { 350 | visibility: hidden; 351 | opacity: 0; 352 | -webkit-transition: visibility 0s, opacity 0.3s linear; 353 | transition: visibility 0s, opacity 0.3s linear; } 354 | 355 | #tooltip .inner-cont { 356 | display: -webkit-box; 357 | display: -webkit-flex; 358 | display: -ms-flexbox; 359 | display: flex; 360 | -webkit-box-orient: vertical; 361 | -webkit-box-direction: normal; 362 | -webkit-flex-direction: column; 363 | -ms-flex-direction: column; 364 | flex-direction: column; } 365 | 366 | #tooltip .inner-cont div { 367 | display: -webkit-box; 368 | display: -webkit-flex; 369 | display: -ms-flexbox; 370 | display: flex; 371 | -webkit-box-orient: horizontal; 372 | -webkit-box-direction: normal; 373 | -webkit-flex-direction: row; 374 | -ms-flex-direction: row; 375 | flex-direction: row; } 376 | 377 | #tooltip .inner-cont div:nth-last-child(n+2) { 378 | margin-bottom: 1em; } 379 | 380 | #tooltip .tooltip-graph { 381 | margin-right: 10px; } 382 | 383 | #tooltip .tooltip-data { 384 | width: 12em; } 385 | 386 | #tooltip .tooltip-data p, #tooltip .tooltip-data ul { 387 | margin: -1em 0 !important; } 388 | 389 | #tooltip .tooltip-data ul { 390 | list-style: square; 391 | background-color: rgba(0, 0, 0, 0.8); 392 | padding: 10px 10px 0.2em 30px; 393 | border-radius: 3px; } 394 | 395 | #tooltip .tooltip-data ul span { 396 | color: white; } 397 | 398 | #tooltip .tooltip-data ul li { 399 | margin-bottom: 0.3em; } 400 | 401 | .map-legend { 402 | background: transparent; 403 | max-width: 100%; 404 | margin-top: -2em; } 405 | 406 | .map-legend p, .map-legend .legend-colors { 407 | display: -webkit-box; 408 | display: -webkit-flex; 409 | display: -ms-flexbox; 410 | display: flex; 411 | -webkit-flex-wrap: wrap; 412 | -ms-flex-wrap: wrap; 413 | flex-wrap: wrap; 414 | -webkit-box-pack: end; 415 | -webkit-justify-content: flex-end; 416 | -ms-flex-pack: end; 417 | justify-content: flex-end; } 418 | 419 | .map-legend p.footnote { 420 | display: block; } 421 | 422 | .map-legend .legend-colors div { 423 | display: -webkit-box; 424 | display: -webkit-flex; 425 | display: -ms-flexbox; 426 | display: flex; 427 | -webkit-box-pack: center; 428 | -webkit-justify-content: center; 429 | -ms-flex-pack: center; 430 | justify-content: center; 431 | -webkit-box-align: center; 432 | -webkit-align-items: center; 433 | -ms-flex-align: center; 434 | align-items: center; 435 | padding: 0.4em 0.6em; 436 | min-width: 4.5em; 437 | font-weight: 500; 438 | color: black; } 439 | 440 | @media (max-width: 600px) { 441 | .map-legend { 442 | margin-top: -1.9em; } 443 | 444 | .map-legend .legend-colors div { 445 | font-size: 0.9em; } } 446 | @media (max-width: 400px) { 447 | .map-legend { 448 | margin-top: -1.8em; } 449 | 450 | .map-legend .legend-colors div { 451 | font-size: 0.8em; } } 452 | @media (max-width: 330px) { 453 | .map-legend { 454 | margin-top: -1.6em; } 455 | 456 | .map-legend .legend-colors div { 457 | font-size: 0.6em; } } 458 | @media (max-width: 260px) { 459 | .map-legend { 460 | margin-top: -1.5em; } 461 | 462 | .map-legend .legend-colors div { 463 | font-size: 0.5em; } } 464 | .map-legend .legend-colors div:nth-child(4) { 465 | color: #eee; } 466 | 467 | .map-legend .legend-colors div:nth-child(5) { 468 | color: #eee; } 469 | 470 | #Map #all-map-svg, #Map #all-map-legend { 471 | display: block; } 472 | 473 | #gender-map-svg, #gender-map-legend, #ethnicity-map-svg, #ethnicity-map-legend, #age-map-svg, #age-map-legend { 474 | display: none; } 475 | 476 | /*# sourceMappingURL=style.css.map */ -------------------------------------------------------------------------------- /stylesheets/style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "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", 4 | "sources": ["neat/grid/_box-sizing.scss","base.scss","header.scss","bourbon/functions/_modular-scale.scss","popup.scss","chart.scss","bourbon/addons/_clearfix.scss","neat/grid/_span-columns.scss","footer.scss","bar-charts.scss","maps.scss"], 5 | "names": [], 6 | "file": "style.css" 7 | } 8 | -------------------------------------------------------------------------------- /stylesheets/style.min.css: -------------------------------------------------------------------------------- 1 | html{box-sizing:border-box}*,*::after,*::before{box-sizing:inherit}body{padding-top:0;margin:0;font-family:"Roboto", "sans serif"}body a{color:black;text-decoration:none}body .footnote:before{display:block;content:" ";margin-left:2px;width:12em;border-top:1px solid black;opacity:0.4}body .footnote{margin:0 0 0 0.15em;font-size:0.8em;font-style:italic;opacity:0.8}body img{width:100%}header{background:#006400;color:white;text-align:center;padding:50px 20px 0px}header p.description{color:white;font-family:"Georgia", "serif";font-size:1.77689em}header h1{font-size:3.15733em}header a{color:white}header a:hover{text-decoration:underline}nav{text-align:center;background:#006400;color:white;padding:1px 0px;z-index:100}nav ul{padding-left:0px}nav ul li{list-style-type:none;display:inline}nav ul li a{text-decoration:none;color:white}nav ul li a:hover{text-decoration:underline}nav ul li::after{content:" ";padding:0px 10px}nav ul li:last-child::after{content:"";padding:0px}.sticky{position:fixed;top:0;left:0;width:100%}.raw-data{background:white;font-size:1.333em;border:15px solid #F6F6F6;padding:10px 30px;position:fixed;top:80px}.raw-data a{font-weight:600}.raw-data .close{color:#006400;position:absolute;top:10px;right:30px;font-size:20px}@media screen and (max-width: 699px){.raw-data{width:90%;left:5%}}@media screen and (min-width: 700px){.raw-data{width:50%;left:25%}}.charts{padding:0px 10px 5px}.charts::after{clear:both;content:"";display:table}.charts p{height:1.4em}.charts .chart{float:left;display:block;margin-right:2.35765%;width:100%;margin-bottom:9%}.charts .chart:last-child{margin-right:0}@media screen and (min-width: 800px){.charts{padding:55px 50px 5px}.charts .chart{margin-bottom:0}.charts.medium .chart{float:left;display:block;margin-right:2.35765%;width:48.82117%}.charts.medium .chart:last-child{margin-right:0}.charts.small .chart{float:left;display:block;margin-right:2.35765%;width:31.76157%}.charts.small .chart:last-child{margin-right:0}}.charts:last-child{padding-bottom:50px}@media screen and (min-width: 800px){.large{padding-right:35.5%}}.chart .chart-graphic{width:100%;height:auto;min-height:110px}@media screen and (min-width: 800px){.chart{display:table-cell}}.chart .chart-graphic[id]{padding-top:9.5em;margin-top:-9.5em}.chart .chart-graphic[id]:before{display:block;content:" ";padding-top:9.5em;margin-top:-9.5em;visibility:hidden}footer{padding:30px 50px;border:solid #D8D8D8 1px;background:#F6F6F6}footer::after{clear:both;content:"";display:table}footer h2{font-size:1.17em;color:#006400}footer div:last-child h2{text-transform:uppercase}@media screen and (min-width: 700px){footer div{float:left;display:block;margin-right:2.35765%;width:48.82117%}footer div:last-child{margin-right:0}}footer .question{font-weight:900;margin-bottom:0}footer .answer,footer p{margin-top:0}footer p a{font-weight:600}footer h3{margin-bottom:0}footer h3 a{color:black}footer a:hover{text-decoration:underline}section header{background:#F6F6F6;border:#D8D8D8 solid 2px;padding:30px 50px}section header{color:black;text-align:left}section header h2{text-transform:uppercase;padding-right:10px}section header h2,section header p{display:inline;vertical-align:middle}section .tag-sections{display:table;width:100%}section article.tags{width:100%;background:#F6F6F6;padding:30px 10px;border:#D8D8D8 solid 2px;border-left:none;border-top:none}section article.tags h3{margin-top:0px}@media screen and (min-width: 800px){section article.tags{width:33.333%;padding:30px 50px;display:table-cell}}section article.tags .tag{display:inline-block;margin-bottom:20px}section article.tags .tag a{border:#D8D8D8 solid 2px;padding:5px 10px;color:#006400;background:white}section article.tags .tag a:hover{background:#006400;color:white;border-color:#006400}.axis path,.axis line{fill:none}.x.axis{display:none}.y.axis{display:none;font-size:16px}.y.axis path{display:none}.bar{position:absolute;fill:#006400;stroke:#006400}.bar:hover{fill:#7ED321;stroke:#7ED321}.barLabel{font-size:16px}.barTitle{font-size:16px}#SchoolDegree .barTitle,#SchoolMajor .barTitle,#JobPref .barTitle,#JobRoleInterest .barTitle,#CountryLive .barTitle,#EmploymentStatus .barTitle,#EmploymentField .barTitle,#CityPopulation .barTitle,#JobWherePref .barTitle,#Podcast .barTitle,#JobApplyWhen .barTitle{font-size:14px}.container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;margin-top:10px}@media (min-width: 900px){.container{margin:0 20%}}@media (min-width: 1400px){.container{margin:0 30%}}.tab-set{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.tab{padding:10px;width:100%;text-align:center;border:none;border-radius:5px 5px 0 0;font-weight:700;cursor:pointer;-webkit-transition:background-color 0.3s;transition:background-color 0.3s}.tab#active-tab{background-color:#006400;color:white}.tab:hover{background-color:#006400;color:white}.overlay{fill:none;pointer-events:all}#tooltip{position:fixed;visibility:visible;pointer-events:none;opacity:1;-webkit-transition:visibility 0s, opacity 0.3s linear;transition:visibility 0s, opacity 0.3s linear;background-color:rgba(255,255,255,0.8);color:black;padding:0 15px 15px;border-radius:5px;max-width:400px}#tooltip.hidden{visibility:hidden;opacity:0;-webkit-transition:visibility 0s, opacity 0.3s linear;transition:visibility 0s, opacity 0.3s linear}#tooltip .inner-cont{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}#tooltip .inner-cont div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}#tooltip .inner-cont div:nth-last-child(n+2){margin-bottom:1em}#tooltip .tooltip-graph{margin-right:10px}#tooltip .tooltip-data{width:12em}#tooltip .tooltip-data p,#tooltip .tooltip-data ul{margin:-1em 0 !important}#tooltip .tooltip-data ul{list-style:square;background-color:rgba(0,0,0,0.8);padding:10px 10px 0.2em 30px;border-radius:3px}#tooltip .tooltip-data ul span{color:white}#tooltip .tooltip-data ul li{margin-bottom:0.3em}.map-legend{background:transparent;max-width:100%;margin-top:-2em}.map-legend p,.map-legend .legend-colors{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.map-legend p.footnote{display:block}.map-legend .legend-colors div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:0.4em 0.6em;min-width:4.5em;font-weight:500;color:black}@media (max-width: 600px){.map-legend{margin-top:-1.9em}.map-legend .legend-colors div{font-size:0.9em}}@media (max-width: 400px){.map-legend{margin-top:-1.8em}.map-legend .legend-colors div{font-size:0.8em}}@media (max-width: 330px){.map-legend{margin-top:-1.6em}.map-legend .legend-colors div{font-size:0.6em}}@media (max-width: 260px){.map-legend{margin-top:-1.5em}.map-legend .legend-colors div{font-size:0.5em}}.map-legend .legend-colors div:nth-child(4){color:#eee}.map-legend .legend-colors div:nth-child(5){color:#eee}#Map #all-map-svg,#Map #all-map-legend{display:block}#gender-map-svg,#gender-map-legend,#ethnicity-map-svg,#ethnicity-map-legend,#age-map-svg,#age-map-legend{display:none} 2 | 3 | /*# sourceMappingURL=style.min.css.map */ -------------------------------------------------------------------------------- /stylesheets/style.min.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "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", 4 | "sources": ["neat/grid/_box-sizing.scss","base.scss","header.scss","bourbon/functions/_modular-scale.scss","popup.scss","chart.scss","bourbon/addons/_clearfix.scss","neat/grid/_span-columns.scss","footer.scss","bar-charts.scss","maps.scss"], 5 | "names": [], 6 | "file": "style.min.css" 7 | } 8 | -------------------------------------------------------------------------------- /stylesheets/style.scss: -------------------------------------------------------------------------------- 1 | @import "bourbon/bourbon"; 2 | @import "neat/neat"; 3 | @import "base"; 4 | -------------------------------------------------------------------------------- /stylesheets/stylesheets: -------------------------------------------------------------------------------- 1 | /* 2 | Errno::ENOENT: No such file or directory @ rb_sysopen - stylesheets/sass 3 | 4 | Backtrace: 5 | /usr/local/rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/plugin/compiler.rb:484:in `read' 6 | /usr/local/rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/plugin/compiler.rb:484:in `update_stylesheet' 7 | /usr/local/rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/plugin/compiler.rb:215:in `block in update_stylesheets' 8 | /usr/local/rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/plugin/compiler.rb:209:in `each' 9 | /usr/local/rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/plugin/compiler.rb:209:in `update_stylesheets' 10 | /usr/local/rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/plugin/compiler.rb:294:in `watch' 11 | /usr/local/rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/plugin.rb:109:in `method_missing' 12 | /usr/local/rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/exec/sass_scss.rb:360:in `watch_or_update' 13 | /usr/local/rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/exec/sass_scss.rb:51:in `process_result' 14 | /usr/local/rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/exec/base.rb:52:in `parse' 15 | /usr/local/rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/exec/base.rb:19:in `parse!' 16 | /usr/local/rvm/gems/ruby-2.3.0/gems/sass-3.4.22/bin/sass:13:in `' 17 | /usr/local/rvm/gems/ruby-2.3.0/bin/sass:23:in `load' 18 | /usr/local/rvm/gems/ruby-2.3.0/bin/sass:23:in `
' 19 | /usr/local/rvm/gems/ruby-2.3.0/bin/ruby_executable_hooks:15:in `eval' 20 | /usr/local/rvm/gems/ruby-2.3.0/bin/ruby_executable_hooks:15:in `
' 21 | */ 22 | body:before { 23 | white-space: pre; 24 | font-family: monospace; 25 | content: "Errno::ENOENT: No such file or directory @ rb_sysopen - stylesheets/sass"; } 26 | --------------------------------------------------------------------------------