├── .bowerrc ├── .gitignore ├── .ruby-version ├── COMMANDS.md ├── CONTRIBUTING.md ├── Gemfile ├── Gemfile.lock ├── Gruntfile.js ├── INSTALL.md ├── README.md ├── _app ├── _academy-lite │ ├── 01-cartocss.md │ └── 02-map-baltimores-economic-info.md ├── _beginners-course │ ├── 01-making-your-first-map.md │ ├── 02-your-first-choropleth-map.md │ ├── 03-thematic-maps-with-point-data.md │ ├── 04-animated-maps-with-point-data.md │ └── 05-multilayer-visualizations.md ├── _cartojs-and-external-apis │ ├── 01-google-streetview.md │ └── 02-google-driving.md ├── _cartojs-ground-up │ ├── 01-createvis-vs-createlayer.md │ ├── 02-creating-basic-map-apps.md │ ├── 03-basic-interactivity.md │ ├── 04-torquejs.md │ └── 05-named-maps.md ├── _community │ ├── 01-odyssey-introduction.md │ ├── 02-torque-bird-tracking.md │ └── 03-earthquake-risk.md ├── _data │ └── menu.yml ├── _design-for-beginners │ ├── 01-getting-started.md │ ├── 02-colors-truth-insights.md │ ├── 03-invisible-and-visible-data.md │ └── 04-placing-your-labels.md ├── _includes │ ├── css │ │ └── hubspot.css │ ├── footer.html │ ├── head.html │ ├── mailchimp.html │ ├── navigation.html │ ├── sitemap.html │ └── vendor_scripts.html ├── _intermediate-design │ ├── 01-which-kind-of-map-should-i-make.md │ ├── 02-how-to-choose-colors-part-1.md │ ├── 03-how-to-choose-colors-part-2.md │ └── 04-use-composite-operations.md ├── _js │ ├── app.js │ ├── components │ │ ├── dropdown.js │ │ └── navbar.js │ ├── lesson.js │ ├── main.js │ └── vendor │ │ ├── cookies.js │ │ ├── stickyfill.js │ │ └── waypoints.js ├── _layouts │ ├── community.html │ ├── course.html │ ├── default.html │ ├── lesson.html │ └── page.html ├── _scss │ ├── _academy.scss │ ├── _base.scss │ ├── _components.scss │ ├── _mixins.scss │ ├── _utilities.scss │ ├── _variables.scss │ ├── _vendor.scss │ ├── components │ │ ├── _breadcrumbs.scss │ │ ├── _buttons.scss │ │ ├── _cards.scss │ │ ├── _circles.scss │ │ ├── _content.scss │ │ ├── _dropdown.scss │ │ ├── _features.scss │ │ ├── _footer.scss │ │ ├── _grid.scss │ │ ├── _header.scss │ │ ├── _icons.scss │ │ ├── _icons_carto.scss │ │ ├── _lists.scss │ │ ├── _logo.scss │ │ ├── _navbar.scss │ │ ├── _offcanvas.scss │ │ ├── _progress.scss │ │ ├── _sections.scss │ │ ├── _separator.scss │ │ ├── _sidebar.scss │ │ ├── _sidemenu.scss │ │ ├── _subheader.scss │ │ └── _titles.scss │ ├── main.scss │ ├── mixins │ │ ├── _button.scss │ │ ├── _clearfix.scss │ │ ├── _cover.scss │ │ ├── _ellipsis.scss │ │ └── _retina-background.scss │ └── vendor │ │ ├── _reset.scss │ │ └── _syntax-highlighting.scss ├── _sql-postgis │ ├── 01-intro-to-sql-and-postgis.md │ ├── 02-postgis-in-cartodb.md │ └── 03-joining-tables.md ├── about.md ├── courses │ ├── academy-lite.md │ ├── beginners-course.md │ ├── cartojs-and-external-apis.md │ ├── cartojs-ground-up.md │ ├── community.md │ ├── design-for-beginners.md │ ├── intermediate-design.md │ └── sql-postgis.md ├── d │ ├── 1.0_month.csv │ ├── 1.0_month.geojson.zip │ ├── academy_torque_stork.zip │ ├── all_month.csv.zip │ ├── counties.zip │ ├── highway_61.geojson │ ├── mississippi_blues_musicians.geojson │ └── tornadoes.zip ├── favicon.ico ├── fonts │ ├── carto-icons.eot │ ├── carto-icons.svg │ ├── carto-icons.ttf │ └── carto-icons.woff ├── google776764e6f35123b2.html ├── img │ ├── backgrounds │ │ ├── academy.png │ │ └── academy.svg │ ├── course1 │ │ └── lesson2 │ │ │ ├── choropleth.png │ │ │ ├── infowindow.png │ │ │ ├── newtableURL.jpg │ │ │ ├── newtableURL.png │ │ │ └── polygonfill.png │ ├── course2 │ │ ├── lesson1 │ │ │ └── badmap.png │ │ ├── lesson2 │ │ │ ├── customizecss.png │ │ │ ├── dataimport.png │ │ │ ├── hexvalue.jpg │ │ │ ├── multiply.png │ │ │ └── styledmap.png │ │ ├── lesson3 │ │ │ ├── alltogether.gif │ │ │ ├── bubbleviz.png │ │ │ ├── mag.png │ │ │ ├── stamen.gif │ │ │ ├── time.png │ │ │ └── together1.png │ │ └── lesson4 │ │ │ ├── addlabels.png │ │ │ └── labelsize.png │ ├── course3 │ │ ├── lesson1 │ │ │ ├── example-map.png │ │ │ ├── json-view.png │ │ │ └── share-panel.png │ │ ├── lesson3 │ │ │ └── cartocss-simple.png │ │ └── lesson5 │ │ │ └── img1.png │ ├── course4 │ │ ├── lesson1 │ │ │ ├── filters-sql.png │ │ │ ├── filters.png │ │ │ └── select-columns.png │ │ ├── lesson2 │ │ │ ├── buffer-demo.png │ │ │ ├── buffer-example.png │ │ │ ├── makeline.png │ │ │ └── stdistance.png │ │ └── lesson3 │ │ │ ├── img1.png │ │ │ ├── img2.png │ │ │ └── img3.png │ ├── course5 │ │ └── data-observatory-baltimore │ │ │ └── obs_search_with_gini_index.png │ ├── course6 │ │ ├── lesson1 │ │ │ ├── australia_cat.png │ │ │ ├── bubble.gif │ │ │ ├── cluster_zoom.gif │ │ │ ├── cluster_zoom_2.gif │ │ │ ├── cluster_zoom_3.gif │ │ │ ├── crime_incidents.png │ │ │ ├── crime_rate.png │ │ │ ├── density_labels.gif │ │ │ ├── divergent.png │ │ │ ├── earthquakes.png │ │ │ ├── earthquakes_1.png │ │ │ ├── earthquakes_2.png │ │ │ ├── equal_int.png │ │ │ ├── filter.png │ │ │ ├── green_cyan.png │ │ │ ├── heatmap.gif │ │ │ ├── intensity.gif │ │ │ ├── larger.png │ │ │ ├── larger_center.png │ │ │ ├── line_layer.png │ │ │ ├── oneclick.png │ │ │ ├── point_layer.png │ │ │ ├── polygon_layer.png │ │ │ ├── popup.png │ │ │ ├── rainbow.png │ │ │ ├── seq_color.png │ │ │ ├── storm_density.png │ │ │ ├── storms_usa_2014.png │ │ │ ├── storms_usa_2014_2.png │ │ │ ├── torque.gif │ │ │ ├── torque_cat.gif │ │ │ └── torque_cu.gif │ │ ├── lesson2 │ │ │ ├── brightness.png │ │ │ ├── color1-rgTxt-fix_2.png │ │ │ ├── color1-rgTxt.png │ │ │ ├── color_wheel_itten.png │ │ │ ├── handle.png │ │ │ ├── hue.png │ │ │ ├── lighter_red.png │ │ │ ├── lighter_red_2.png │ │ │ ├── lighter_red_3.png │ │ │ ├── low_contrast.png │ │ │ ├── reduction1.png │ │ │ ├── reduction2.png │ │ │ ├── saturation_brightness0.png │ │ │ ├── saturation_brightness100.png │ │ │ ├── saturation_brightness50.png │ │ │ ├── sim_cnt_1.png │ │ │ ├── sim_cnt_2.png │ │ │ ├── simultaneous_contrast.png │ │ │ ├── size_contrast.png │ │ │ └── size_contrast2.png │ │ ├── lesson3 │ │ │ ├── abel_picker.png │ │ │ ├── blue_33.png │ │ │ ├── blue_full.png │ │ │ ├── cdb_rb_divergent.png │ │ │ ├── cdb_seq_green.png │ │ │ ├── color_brewer_red_blue.png │ │ │ ├── color_wheel_itten.png │ │ │ ├── divergent_default.png │ │ │ ├── editor_default.png │ │ │ ├── editor_lighten.png │ │ │ ├── perceptual_rainbow.png │ │ │ ├── rainbow_brighter.png │ │ │ ├── rb_divergent.png │ │ │ ├── red_66.png │ │ │ ├── red_blue.png │ │ │ ├── red_full.png │ │ │ ├── red_green.png │ │ │ ├── uneven_rainbow.png │ │ │ ├── valencia_lighten.png │ │ │ └── valencia_value_15.png │ │ └── lesson4 │ │ │ ├── clear.png │ │ │ ├── color-burn.png │ │ │ ├── color-dodge.png │ │ │ ├── color.png │ │ │ ├── color_burn.png │ │ │ ├── color_dodge.png │ │ │ ├── contrast.png │ │ │ ├── darken-use-case.png │ │ │ ├── darken.png │ │ │ ├── difference.png │ │ │ ├── dst-atop.png │ │ │ ├── dst-in.png │ │ │ ├── dst-out.png │ │ │ ├── dst-over.png │ │ │ ├── dst.png │ │ │ ├── exclusion.png │ │ │ ├── grain-extract.png │ │ │ ├── grain-merge.png │ │ │ ├── hard-light.png │ │ │ ├── hue.png │ │ │ ├── invert-rgb.png │ │ │ ├── invert.png │ │ │ ├── lighten.png │ │ │ ├── london_crime_incidents.png │ │ │ ├── minus.png │ │ │ ├── multiply.png │ │ │ ├── multiply_anim.gif │ │ │ ├── overlay-use-case-1.png │ │ │ ├── overlay-use-case-2.png │ │ │ ├── overlay.png │ │ │ ├── plus.png │ │ │ ├── saturation.png │ │ │ ├── screen-use-case.png │ │ │ ├── screen.png │ │ │ ├── soft-light.png │ │ │ ├── src-atop.png │ │ │ ├── src-in.png │ │ │ ├── src-out.png │ │ │ ├── src-over.png │ │ │ ├── src.png │ │ │ ├── value.png │ │ │ └── xor.png │ └── icons │ │ ├── academy-lite.png │ │ ├── academy-lite.svg │ │ ├── beginners-course.png │ │ ├── beginners-course.svg │ │ ├── cartojs-and-external-apis.png │ │ ├── cartojs-and-external-apis.svg │ │ ├── cartojs-ground-up.png │ │ ├── cartojs-ground-up.svg │ │ ├── community.png │ │ ├── community.svg │ │ ├── design-for-beginners.png │ │ ├── design-for-beginners.svg │ │ ├── intermediate-design.png │ │ ├── intermediate-design.svg │ │ ├── sql-postgis.png │ │ └── sql-postgis.svg ├── index.html ├── sitemap.xml └── t │ ├── 03-cartodbjs-ground-up │ ├── lesson-1 │ │ ├── CartoDB-js-lesson1-template.html │ │ └── jsfiddle_demo │ │ │ ├── demo.css │ │ │ ├── demo.details │ │ │ ├── demo.html │ │ │ └── demo.js │ ├── lesson-2 │ │ ├── CartoDB-js-lesson2-layercontrols.html │ │ ├── CartoDB-js-lesson2-multilayer.html │ │ ├── CartoDB-js-lesson2-ondone.html │ │ ├── CartoDB-js-lesson2-template.html │ │ ├── CartoDB-js-lesson2-toggles-and-slider.html │ │ ├── jsfiddle_demo_layercontrols │ │ │ ├── demo.css │ │ │ ├── demo.details │ │ │ ├── demo.html │ │ │ └── demo.js │ │ ├── jsfiddle_demo_multilayer │ │ │ ├── demo.css │ │ │ ├── demo.details │ │ │ ├── demo.html │ │ │ └── demo.js │ │ ├── jsfiddle_demo_ondone │ │ │ ├── demo.css │ │ │ ├── demo.details │ │ │ ├── demo.html │ │ │ └── demo.js │ │ └── jsfiddle_demo_toggles_and_slider │ │ │ ├── demo.css │ │ │ ├── demo.details │ │ │ ├── demo.html │ │ │ └── demo.js │ ├── lesson-3 │ │ ├── CartoDB-js-lesson3-template.html │ │ ├── cartocss-and-sql-hosted.html │ │ ├── cartocss-and-sql.html │ │ ├── cartocss-string.html │ │ ├── cartocss-style-hosted.html │ │ ├── cartocss-style.html │ │ ├── jsfiddle_demo_cartocss │ │ │ ├── demo.css │ │ │ ├── demo.details │ │ │ ├── demo.html │ │ │ └── demo.js │ │ └── jsfiddle_demo_cartocss_sql │ │ │ ├── demo.css │ │ │ ├── demo.details │ │ │ ├── demo.html │ │ │ └── demo.js │ ├── lesson-4 │ │ ├── bonus-header-map.html │ │ ├── bonus.html │ │ ├── checkpoint-hosted.html │ │ ├── checkpoint.html │ │ ├── template.html │ │ ├── torque-sql-hosted.html │ │ └── torque-sql.html │ └── lesson-5 │ │ ├── named-maps-example.html │ │ └── named-maps-template.html │ ├── 06-intermediate-design │ └── lesson-2 │ │ ├── color1-rgTxt-fix.png │ │ ├── color1-rgTxt.png │ │ ├── handle.png │ │ ├── imgslider-2.0.1-min.css │ │ ├── index.html │ │ └── jquery.beforeafter-1.4.js │ └── 07-cartojs-and-external-apis │ ├── lesson-1 │ ├── index.html │ └── template.html │ └── lesson-2 │ ├── index.html │ └── template.html ├── _config-prod.yml ├── _config-staging.yml ├── _config.yml ├── bower.json ├── grunt-aws.development.json ├── package.json ├── robots.production.txt └── robots.staging.txt /.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "bower_components" 3 | } 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .tmp/ 3 | .sass-cache/ 4 | _site/ 5 | .jekyll-metadata 6 | node_modules/ 7 | bower_components/ 8 | grunt-aws.* 9 | !grunt-aws.development.json 10 | .ruby-version 11 | -------------------------------------------------------------------------------- /.ruby-version: -------------------------------------------------------------------------------- 1 | 2.3.0 -------------------------------------------------------------------------------- /COMMANDS.md: -------------------------------------------------------------------------------- 1 | # Commands 2 | 3 | There are many commands available to help you build and test sites. Here are a few highlights to get started with. 4 | 5 | 6 | ## Run locally 7 | 8 | ``` 9 | grunt serve 10 | ``` 11 | 12 | This will have Jekyll build the site, run a static server, and watch for changes to site files. Every change will cause Jekyll to rebuild the affected files. 13 | 14 | Also, you can run The Map Academy website locally as if it was on staging with `grunt serve --target=staging` 15 | 16 | 17 | ## Build & Optimize 18 | 19 | ``` 20 | grunt build 21 | ``` 22 | 23 | Build and optimize the current site, ready for deployment. This includes image, script, stylesheet and HTML optimization and minification. 24 | 25 | 26 | ## Deploy 27 | 28 | ``` 29 | grunt deploy --target=ENV 30 | ``` 31 | 32 | Compress assets and upload them to the corrsponding S3 bucket, as well as the HTML files generated by Jekyll. 33 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'jekyll', '3.1.2' 4 | gem 'jekyll-redirect-from' 5 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | colorator (0.1) 5 | ffi (1.9.10) 6 | jekyll (3.1.2) 7 | colorator (~> 0.1) 8 | jekyll-sass-converter (~> 1.0) 9 | jekyll-watch (~> 1.1) 10 | kramdown (~> 1.3) 11 | liquid (~> 3.0) 12 | mercenary (~> 0.3.3) 13 | rouge (~> 1.7) 14 | safe_yaml (~> 1.0) 15 | jekyll-redirect-from (0.9.1) 16 | jekyll (>= 2.0) 17 | jekyll-sass-converter (1.4.0) 18 | sass (~> 3.4) 19 | jekyll-watch (1.3.1) 20 | listen (~> 3.0) 21 | kramdown (1.9.0) 22 | liquid (3.0.6) 23 | listen (3.0.6) 24 | rb-fsevent (>= 0.9.3) 25 | rb-inotify (>= 0.9.7) 26 | mercenary (0.3.5) 27 | rb-fsevent (0.9.7) 28 | rb-inotify (0.9.7) 29 | ffi (>= 0.5.0) 30 | rouge (1.10.1) 31 | safe_yaml (1.0.4) 32 | sass (3.4.21) 33 | 34 | PLATFORMS 35 | ruby 36 | 37 | DEPENDENCIES 38 | jekyll (= 3.1.2) 39 | jekyll-redirect-from 40 | 41 | BUNDLED WITH 42 | 1.11.2 43 | -------------------------------------------------------------------------------- /INSTALL.md: -------------------------------------------------------------------------------- 1 | # Installation 2 | 3 | Install the dependencies if you don't already have them. 4 | 5 | 6 | ## Dependencies 7 | 8 | The dependencies are: 9 | 10 | * [Ruby](https://www.ruby-lang.org/) 11 | * [Node.js](https://nodejs.org) 12 | * [Grunt](http://gruntjs.com/) 13 | * [Bower](http://bower.io/) 14 | * [gulp.js](http://gulpjs.com) 15 | 16 | 17 | 1. Install [XCode Command Line Tools](https://developer.apple.com/xcode/downloads/) 18 | 1. Install [Homebrew](http://brew.sh/) 19 | * `ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"` 20 | 1. Install [nodejs.org](https://nodejs.org/) 0.10.x 21 | * `brew install node` 22 | 1. Install [ruby-install](https://github.com/postmodern/ruby-install) 23 | * `brew install ruby-install` 24 | 1. Install [Ruby](https://www.ruby-lang.org/) 25 | * `ruby-install ruby 2.4.0` 26 | 1. Install [chruby](https://github.com/postmodern/chruby) 27 | * `brew install chruby` 28 | 29 | Add the following to the ~/.bashrc or ~/.zshrc file: 30 | 31 | * `source /usr/local/share/chruby/chruby.sh` 32 | 33 | 1. Install [bundler](http://bundler.io) 34 | * `gem install bundle` 35 | 1. Set Ruby version to 2.3.0 36 | * `echo '2.3.0' > .ruby-version` 37 | 1. Install [RubyGems](https://rubygems.org/) dependencies ([Jekyll](http://jekyllrb.com/)(http://jekyllrb.com/)) 38 | * `bundle install` 39 | 1. Install the [Grunt CLI](http://gruntjs.com/) 40 | * `npm install -g grunt-cli` 41 | 1. Install [Bower](http://bower.io/) 42 | * `npm install -g bower` 43 | 1. Install [npm](https://www.npmjs.org) dependencies 44 | * `npm install` 45 | 1. Install [Bower](http://bower.io/) dependencies 46 | * `bower install` 47 | 48 | That's it! You should now have everything needed to use The Map Academy website. 49 | 50 | 51 | ## Getting the code 52 | 53 | Once you have all of the dependencies installed, you only need to [get the code](https://github.com/CartoDB/academy/). 54 | 55 | 56 | ## Running the site 57 | 58 | You may want to get used to some of the [COMMANDS](COMMANDS.md) available. 59 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # The Map Academy 2 | 3 | ## About 4 | 5 | The Map Academy is an online resource to learn all things digital maps, data visualization, and geospatial analysis. We'll go on publishing courses to tackle different challenges in online mapping, from introductory courses to advanced ones. It's an open project in which anyone can contribute. 6 | 7 | [More about The Map Academy](https://carto.com/academy/about/) 8 | 9 | The Map Academy website can be found here [https://carto.com/academy](https://carto.com/academy). The Map Academy website is built on top of [Jekyll](http://jekyllrb.com/), a simple content management system for static sites. 10 | 11 | 12 | ## Develop 13 | 14 | Be sure to look over the [installation guide](INSTALL.md) to verify your environment is prepared to run the website. Once you have verified that your system can run the website, check out the [commands](COMMANDS.md) available to get started. 15 | 16 | 17 | ## Contributing 18 | 19 | Contributions, questions and comments are all welcome and encouraged. For code contributions to The Map Academy website, please see our [Contribution guide](CONTRIBUTING.md) before submitting a pull request. [CARTO](https://carto.com/) related issues should be filed on the [CARTO](https://github.com/CartoDB/cartodb) issue tracker. 20 | 21 | 22 | ## Deploy 23 | 24 | **DEPLOY IS CURRENTLY DISABLED** 25 | -------------------------------------------------------------------------------- /_app/_beginners-course/01-making-your-first-map.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Online Mapping for Beginners — Making your First Map" 3 | redirect_from: /courses/01-beginners-course/lesson-1.html 4 | permalink: /courses/beginners-course/making-your-first-map/ 5 | permalink_next: /courses/beginners-course/your-first-choropleth-map/ 6 | --- 7 | -------------------------------------------------------------------------------- /_app/_beginners-course/03-thematic-maps-with-point-data.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Online Mapping for Beginners — Thematic Maps with Point Data" 3 | redirect_from: /courses/01-beginners-course/lesson-3.html 4 | permalink: /courses/beginners-course/thematic-maps-with-point-data/ 5 | permalink_next: /courses/beginners-course/animated-maps-with-point-data/ 6 | --- 7 | -------------------------------------------------------------------------------- /_app/_beginners-course/04-animated-maps-with-point-data.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Online Mapping for Beginners — Animated Maps with Point Data" 3 | redirect_from: /courses/01-beginners-course/lesson-4.html 4 | permalink: /courses/beginners-course/animated-maps-with-point-data/ 5 | permalink_next: /courses/beginners-course/multilayer-visualizations/ 6 | --- 7 | -------------------------------------------------------------------------------- /_app/_beginners-course/05-multilayer-visualizations.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Online Mapping for Beginners — Multilayer Visualizations" 3 | redirect_from: /courses/01-beginners-course/lesson-5.html 4 | permalink: /courses/beginners-course/multilayer-visualizations/ 5 | --- 6 | -------------------------------------------------------------------------------- /_app/_cartojs-ground-up/02-creating-basic-map-apps.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "CARTO.js from the ground up — Creating basic map apps" 3 | redirect_from: /courses/03-cartojs-ground-up/lesson-2.html 4 | permalink: /courses/cartojs-ground-up/creating-basic-map-apps/ 5 | permalink_next: /courses/cartojs-ground-up/basic-interactivity/ 6 | --- 7 | -------------------------------------------------------------------------------- /_app/_community/01-odyssey-introduction.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Community — Odyssey.js: An in-depth introduction to maps with narratives" 3 | permalink: /courses/community/odyssey-introduction/ 4 | permalink_next: /courses/community/torque-bird-tracking/ 5 | --- 6 | 7 |
CARTO's Odyssey by Stace Maples
8 | 9 |
10 |

This tutorial was written by Stace Maples, the Geospatial Manager at The Stanford Geospatial Center, Stanford University and the former GIS Specialist & Instruction Coordinator for Yale University. He provides support and collaboration to the Stanford research community in capturing and making sense of the "where" of their work. His work mapping the research interests of scholars has taken him from the beaches of Martha's Vineyard, to Kurdish Northeastern Syria, to the most remote areas of the Mongolian/Chinese border.

11 |

An archaeologist by training and a technologist by temperament, he is interested in all aspects of mapping, from the aerial imaging of archaeological sites using kites and balloons, to the development of platforms for the gathering of volunteer geographic information. He has over 18 years of experience using Geographic Information Systems and Geotechnology for research and teaching.

12 |
13 | -------------------------------------------------------------------------------- /_app/_community/02-torque-bird-tracking.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Community — Visualizing bird tracking data" 3 | permalink: /courses/community/torque-bird-tracking/ 4 | permalink_next: /courses/community/earthquake-risk/ 5 | --- 6 | 7 |
Use CARTO to visualize Bird Tracking Data, by Peter Desmet
8 | 9 |
10 |

This tutorial was written by Peter Desmet for LifeWatch INBO and is being released under the CC BY 4.0 license. It originally appeared on the LifeWatch INBO blog on September 1, 2015.

11 | 12 |

Peter is an open data and visualization geek working as team coordinator at LifeWatch INBO. He's been working in biodiversity informatics since 2006. His recent projects involve bird tracking and weather radars. He also makes amazing data visualizations, such as the one in the banner.

13 |
14 | -------------------------------------------------------------------------------- /_app/_community/03-earthquake-risk.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Community — Identify schools at risk from Oklahoma's earthquakes" 3 | permalink: /courses/community/earthquake-risk/ 4 | --- 5 | 6 |
Using PostGIS, SQL, and CARTO to identify schools at risk from Oklahoma's earthquakes, by Dan Nguyen
7 | 8 |
9 |

This tutorial was written by Dan Nguyen. Dan was most recently the Head of Data for Skift in New York. He was previously a news application developer at the non-profit investigative newsroom, ProPublica, where he led the development of several of ProPublica’s most well-known online projects, including Dollars for Docs and the Bailout Tracker. Before joining ProPublica, he was an education reporter and the first newsroom developer in the Sacramento Bee’s multimedia department.

10 | 11 |

Dan's areas of expertise include public affairs journalism, programming, and visual design. He has self-published several books and guides on programming and journalism and taught data journalism at New York University.

12 | 13 |

Find him on Twitter @dancow.

14 |
15 | -------------------------------------------------------------------------------- /_app/_data/menu.yml: -------------------------------------------------------------------------------- 1 | product: 2 | - title: Builder 3 | url: /builder/ 4 | - title: Engine 5 | url: /engine/ 6 | - title: Mobile 7 | url: /mobile/ 8 | - title: Location Data Services 9 | url: /location-data-services/ 10 | - title: Data Observatory 11 | url: /data-observatory/ 12 | solutions: 13 | - title: Banking & Finance 14 | url: '/solutions/banking-and-finance/' 15 | - title: BI & Analytics 16 | url: '/solutions/business-intelligence-and-analytics/' 17 | - title: Government 18 | url: '/solutions/government/' 19 | - title: Real Estate 20 | url: '/solutions/real-estate/' 21 | - title: Web & mobile development 22 | title_short: Web Development 23 | url: '/solutions/web-mobile/' 24 | - title: Journalism 25 | title_short: Journalism 26 | url: '/solutions/journalism/' 27 | - title: Natural Resources 28 | url: '/solutions/natural-resources/' 29 | - title: Earth Observation & Space 30 | title_short: Earth Observation 31 | url: '/solutions/earth-observation-and-space/' 32 | - title: Non-Profits 33 | url: '/solutions/non-profits/' 34 | - title: Education & Research 35 | title_short: Education 36 | url: '/solutions/education-and-research/' 37 | discover: 38 | - title: Map Gallery 39 | url: '/gallery/' 40 | - title: Explore 41 | url: '/explore/' 42 | cartodbfor: 43 | - title: Dropbox 44 | url: '/connectors/dropbox/' 45 | - title: Google Drive 46 | url: '/connectors/google-drive/' 47 | - title: Twitter Maps 48 | url: '/connectors/twitter-maps/' 49 | - title: MailChimp 50 | url: '/connectors/mailchimp/' 51 | - title: Excel Data 52 | url: '/connectors/excel/' 53 | - title: ArcGIS™ 54 | url: '/connectors/arcgis/' 55 | - title: Satellite Imagery 56 | url: '/connectors/satellite-imagery/' 57 | - title: Qlik® 58 | url: '/connectors/qlik/' 59 | - title: Splunk 60 | url: '/connectors/splunk/' 61 | - title: Alteryx 62 | url: '/connectors/alteryx/' 63 | learn: 64 | - title: Documentation 65 | url: 'https://carto.com/docs' 66 | - title: The Map Academy 67 | url: 'https://carto.com/academy' 68 | - title: Resources Center 69 | url: 'https://carto.com/resources/' 70 | - title: Webinars 71 | url: 'https://carto.com/webinars/' 72 | - title: Blog 73 | url: 'https://carto.com/blog' 74 | -------------------------------------------------------------------------------- /_app/_includes/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {% if page.title_meta %}{{ page.title_meta }} — {{ site.title }}{% elsif page.title %}{{ page.title }} — {{ site.title }}{% else %}{{ site.title }}{% endif %} 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | {% if page.cartodb.js %} 18 | 19 | {% endif %} 20 | 21 | 22 | -------------------------------------------------------------------------------- /_app/_includes/mailchimp.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 |
9 |
10 |
11 | 12 |
13 | 14 | 15 |
16 |
17 | 18 | 19 |
20 |
21 |
22 |
23 |
24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /_app/_includes/sitemap.html: -------------------------------------------------------------------------------- 1 | {% unless page.sitemap == false %} 2 | 3 | {{ site.url }}{{ page.url | remove: "index.html" }} 4 | {% if page.sitemap.lastmod %} 5 | {{ page.sitemap.lastmod | date: "%Y-%m-%d" }} 6 | {% else %} 7 | {{ site.time | date_to_xmlschema }} 8 | {% endif %} 9 | {% if page.sitemap.changefreq %} 10 | {{ page.sitemap.changefreq }} 11 | {% else %} 12 | monthly 13 | {% endif %} 14 | {% if page.sitemap.priority %} 15 | {{ page.sitemap.priority }} 16 | {% else %} 17 | 0.8 18 | {% endif %} 19 | 20 | {% endunless %} -------------------------------------------------------------------------------- /_app/_includes/vendor_scripts.html: -------------------------------------------------------------------------------- 1 | {% if site.analytics_property_id %} 2 | 14 | {% endif %} 15 | 16 | {% if site.hubspot_id %} 17 | 25 | {% endif %} 26 | 27 | {% if site.inspectlet_id %} 28 | 29 | 37 | 38 | {% endif %} 39 | 40 | {% if page.cartodb.js %} 41 | 42 | {% endif %} 43 | -------------------------------------------------------------------------------- /_app/_js/app.js: -------------------------------------------------------------------------------- 1 | window.App = { 2 | Models: {}, 3 | Collections: {}, 4 | Views: {}, 5 | Routers: {} 6 | }; 7 | -------------------------------------------------------------------------------- /_app/_js/components/dropdown.js: -------------------------------------------------------------------------------- 1 | App.Views.Dropdown = Backbone.View.extend({ 2 | 3 | events: { 4 | 'click': '_onClickDropdown', 5 | 'click .js-Dropdown-target': '_onClickDropdownLink' 6 | }, 7 | 8 | initialize: function() { 9 | this.$dropdown = this.$('.js-Dropdown-inner'); 10 | 11 | this.model = new Backbone.Model({ hidden: true }); 12 | 13 | this.model.on("change:hidden", this._toggleDropdown, this); 14 | }, 15 | 16 | _onClickDropdown: function(e) { 17 | if (!$(e.target).hasClass('js-Dropdown-link')) { 18 | e.preventDefault(); 19 | e.stopPropagation(); 20 | } 21 | }, 22 | 23 | close: function() { 24 | if (!this.model.get('hidden')) { 25 | this.model.set('hidden', true); 26 | } 27 | }, 28 | 29 | _onClickDropdownLink: function(e) { 30 | e.preventDefault(); 31 | 32 | if (this.model.get('hidden')) { 33 | this.trigger('onclickdropdownlink'); 34 | } 35 | 36 | this.model.set('hidden', !this.model.get('hidden')); 37 | }, 38 | 39 | _toggleDropdown: function() { 40 | this.$dropdown.toggleClass('is-active', !this.model.get('hidden')); 41 | } 42 | }); 43 | -------------------------------------------------------------------------------- /_app/_js/components/navbar.js: -------------------------------------------------------------------------------- 1 | App.Views.Navbar = Backbone.View.extend({ 2 | 3 | el: '.js-Offcanvas-inner', 4 | 5 | events: { 6 | 'click .js-Navbar-button': '_onClickNavbarButton' 7 | }, 8 | 9 | initialize: function() { 10 | this.model = new Backbone.Model({ hidden: true }); 11 | 12 | this.model.on("change:hidden", this._toggleNavbar, this); 13 | }, 14 | 15 | _onClickNavbarButton: function(e) { 16 | e.preventDefault(); 17 | 18 | this.model.set('hidden', !this.model.get('hidden')); 19 | }, 20 | 21 | _toggleNavbar: function() { 22 | if (this.model.get('hidden')) { 23 | this.$el.removeClass('is-active'); 24 | } else { 25 | this.$el.addClass('is-active'); 26 | } 27 | } 28 | }); 29 | -------------------------------------------------------------------------------- /_app/_js/main.js: -------------------------------------------------------------------------------- 1 | App.Views.Main = Backbone.View.extend({ 2 | 3 | el: 'body', 4 | 5 | events: { 6 | 'click': '_closeDropdowns', 7 | 'keydown': '_onKeyDown', 8 | 'click .js-Action--NAVbuilder': '_onClickNAVbuilder', 9 | 'click .js-Action--NAVengine': '_onClickNAVengine', 10 | 'click .js-Action--NAVsolutions': '_onClickNAVsolutions', 11 | 'click .js-Action--NAVpricing': '_onClickNAVpricing', 12 | 'click .js-Action--NAVblog': '_onClickNAVblog', 13 | 'click .js-Action--NAVlogin': '_onClickNAVlogin', 14 | 'click .js-Action--NAVcontact': '_onClickNAVcontact', 15 | }, 16 | 17 | _onClickNAVbuilder: function () { 18 | ga('send', 'event', 'NAVbuilder', 'click', 'Builder') 19 | }, 20 | 21 | _onClickNAVengine: function () { 22 | ga('send', 'event', 'NAVengine', 'click', 'Builder') 23 | }, 24 | 25 | _onClickNAVsolutions: function () { 26 | ga('send', 'event', 'NAVsolutions', 'click', 'Builder') 27 | }, 28 | 29 | _onClickNAVpricing: function () { 30 | ga('send', 'event', 'NAVpricing', 'click', 'Builder') 31 | }, 32 | 33 | _onClickNAVblog: function () { 34 | ga('send', 'event', 'NAVblog', 'click', 'Builder') 35 | }, 36 | 37 | _onClickNAVlogin: function () { 38 | ga('send', 'event', 'NAVlogin', 'click', 'Builder') 39 | }, 40 | 41 | _onClickNAVcontact: function () { 42 | ga('send', 'event', 'NAVcontact', 'click', 'Builder') 43 | }, 44 | 45 | initialize: function() { 46 | this._initViews(); 47 | }, 48 | 49 | _initViews: function() { 50 | this._initDropdowns(); 51 | var navbar = new App.Views.Navbar(); 52 | this._initHighlights(); 53 | }, 54 | 55 | _initHighlights: function() { 56 | _.each(this.$('.language-bash'), function(el) { 57 | $(el).closest('pre').addClass('Console'); 58 | }); 59 | }, 60 | 61 | _onKeyDown: function(e) { 62 | switch (e.which) { 63 | // esc 64 | case 27 : 65 | this._closeDropdowns(); 66 | break; 67 | } 68 | }, 69 | 70 | _closeDropdowns: function() { 71 | this.trigger('closedropdowns'); 72 | }, 73 | 74 | _initDropdowns: function() { 75 | var _this = this; 76 | 77 | _.each(this.$('.js-Dropdown'), function(el) { 78 | var dropdown = new App.Views.Dropdown({ 79 | el: $(el) 80 | }); 81 | 82 | dropdown.bind('onclickdropdownlink', function() { 83 | _this._closeDropdowns(); 84 | }); 85 | 86 | _this.bind('closedropdowns', function() { 87 | dropdown.close(); 88 | }); 89 | }); 90 | }, 91 | 92 | }); 93 | 94 | $(function() { 95 | window.main = new App.Views.Main(); 96 | }); 97 | -------------------------------------------------------------------------------- /_app/_js/vendor/cookies.js: -------------------------------------------------------------------------------- 1 | /*\ 2 | |*| 3 | |*| :: cookies.js :: 4 | |*| 5 | |*| A complete cookies reader/writer framework with full unicode support. 6 | |*| 7 | |*| Revision #1 - September 4, 2014 8 | |*| 9 | |*| https://developer.mozilla.org/en-US/docs/Web/API/document.cookie 10 | |*| 11 | |*| This framework is released under the GNU Public License, version 3 or later. 12 | |*| http://www.gnu.org/licenses/gpl-3.0-standalone.html 13 | |*| 14 | |*| Syntaxes: 15 | |*| 16 | |*| * docCookies.setItem(name, value[, end[, path[, domain[, secure]]]]) 17 | |*| * docCookies.getItem(name) 18 | |*| * docCookies.removeItem(name[, path[, domain]]) 19 | |*| * docCookies.hasItem(name) 20 | |*| * docCookies.keys() 21 | |*| 22 | \*/ 23 | 24 | var docCookies = { 25 | getItem: function (sKey) { 26 | if (!sKey) { return null; } 27 | return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null; 28 | }, 29 | setItem: function (sKey, sValue, vEnd, sPath, sDomain, bSecure) { 30 | if (!sKey || /^(?:expires|max\-age|path|domain|secure)$/i.test(sKey)) { return false; } 31 | var sExpires = ""; 32 | if (vEnd) { 33 | switch (vEnd.constructor) { 34 | case Number: 35 | sExpires = vEnd === Infinity ? "; expires=Fri, 31 Dec 9999 23:59:59 GMT" : "; max-age=" + vEnd; 36 | break; 37 | case String: 38 | sExpires = "; expires=" + vEnd; 39 | break; 40 | case Date: 41 | sExpires = "; expires=" + vEnd.toUTCString(); 42 | break; 43 | } 44 | } 45 | document.cookie = encodeURIComponent(sKey) + "=" + encodeURIComponent(sValue) + sExpires + (sDomain ? "; domain=" + sDomain : "") + (sPath ? "; path=" + sPath : "") + (bSecure ? "; secure" : ""); 46 | return true; 47 | }, 48 | removeItem: function (sKey, sPath, sDomain) { 49 | if (!this.hasItem(sKey)) { return false; } 50 | document.cookie = encodeURIComponent(sKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT" + (sDomain ? "; domain=" + sDomain : "") + (sPath ? "; path=" + sPath : ""); 51 | return true; 52 | }, 53 | hasItem: function (sKey) { 54 | if (!sKey) { return false; } 55 | return (new RegExp("(?:^|;\\s*)" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(document.cookie); 56 | }, 57 | keys: function () { 58 | var aKeys = document.cookie.replace(/((?:^|\s*;)[^\=]+)(?=;|$)|^\s*|\s*(?:\=[^;]*)?(?:\1|$)/g, "").split(/\s*(?:\=[^;]*)?;\s*/); 59 | for (var nLen = aKeys.length, nIdx = 0; nIdx < nLen; nIdx++) { aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]); } 60 | return aKeys; 61 | } 62 | }; 63 | -------------------------------------------------------------------------------- /_app/_layouts/course.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | {% assign collection = false %} 5 | 6 | {% for collection_item in site.collections %} 7 | {% if collection_item.label == page.collection %} 8 | {% assign collection = collection_item %} 9 | {% endif %} 10 | {% endfor %} 11 | 12 |
13 | {% include navigation.html %} 14 |
15 | 16 |
17 | 38 |
39 | 40 |
41 |
42 |
43 |
44 |
45 | 56 |
57 | 58 |
59 |
60 | 61 | {{ content }} 62 | 63 |
64 | 65 |
    66 | {% assign start_course = "#" %} 67 | 68 | {% for collection_item in collection.docs %} 69 | {% if forloop.first %} 70 | {% assign start_course = collection_item.url %} 71 | {% endif %} 72 | 73 |
  • 74 | {{ collection_item.title }} 75 |
  • 76 | {% endfor %} 77 |
78 | 79 |

80 | 81 | Start course 82 | 83 |

84 |
85 |
86 |
87 |
88 |
89 | 90 | {% comment %} 91 | {% include mailchimp.html %} 92 | {% endcomment %} 93 | -------------------------------------------------------------------------------- /_app/_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% include head.html %} 5 | 6 | 7 | 10 | 11 |
12 |
13 | {{ content }} 14 | 15 | {% include footer.html %} 16 |
17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | {% include vendor_scripts.html %} 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /_app/_layouts/page.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 |
5 | {% include navigation.html %} 6 |
7 | 8 |
9 | 30 |
31 | 32 |
33 |
34 |
35 |
36 |
37 | 54 |
55 | 56 |
57 |
58 | 59 | {{ content }} 60 | 61 |
62 |
63 |
64 |
65 |
66 |
67 | 68 | {% comment %} 69 | {% include mailchimp.html %} 70 | {% endcomment %} 71 | -------------------------------------------------------------------------------- /_app/_scss/_academy.scss: -------------------------------------------------------------------------------- 1 | // Academy 2 | // -------------------------------------------------- 3 | 4 | .Lesson-footer { 5 | margin-top: $spacing-unit * 3; 6 | padding-top: $spacing-unit * 3; 7 | border-top: 1px solid #eee; 8 | color: $grey9; 9 | } 10 | -------------------------------------------------------------------------------- /_app/_scss/_base.scss: -------------------------------------------------------------------------------- 1 | * { 2 | box-sizing: border-box; 3 | } 4 | html, 5 | body { 6 | height: 100%; 7 | } 8 | body { 9 | background-color: $background-color; 10 | text-rendering: optimizeLegibility; 11 | -webkit-text-rendering: optimizeLegibility; 12 | -webkit-font-smoothing: antialiased; 13 | color: $text-color; 14 | font-weight: $font-weight-base; 15 | font-size: $font-size-base; 16 | line-height: $line-height-base; 17 | font-family: $font-family-base; 18 | } 19 | a { 20 | color: $blue1; 21 | text-decoration: none; 22 | 23 | &:hover { 24 | text-decoration: underline; 25 | } 26 | } 27 | strong { 28 | font-weight: 600; 29 | } 30 | em { 31 | font-style: italic; 32 | } 33 | abbr { 34 | border-bottom: 1px dotted #ddd; 35 | } 36 | button { 37 | margin: 0; 38 | border: 0; 39 | outline: none; 40 | cursor: pointer; 41 | font-family: $font-family-base; 42 | } 43 | img { 44 | max-width: 100%; 45 | vertical-align: bottom; 46 | } 47 | li { 48 | > ul, 49 | > ol { 50 | margin-bottom: 0; 51 | } 52 | } 53 | pre, 54 | code { 55 | font-family: 'PT Mono', monospace; 56 | border: 1px solid #ddd; 57 | border-radius: 3px; 58 | background-color: #f9f9f9; 59 | } 60 | code { 61 | padding: 1px 5px; 62 | 63 | &.language-bash { 64 | background-color: #292C34; 65 | } 66 | } 67 | 68 | pre { 69 | padding: 14px 18px; 70 | line-height: 19px; 71 | overflow-x: scroll; 72 | 73 | > code { 74 | border: 0; 75 | padding-right: 0; 76 | padding-left: 0; 77 | } 78 | } 79 | .Code-title--dark, 80 | .Code-body--dark pre, 81 | .Code-body--dark code, 82 | .Console { 83 | background: #292C34; 84 | color: #999; 85 | } 86 | .Code-title--dark, 87 | .Code-body--dark pre { 88 | border-color: #3C4048; 89 | } 90 | -------------------------------------------------------------------------------- /_app/_scss/_components.scss: -------------------------------------------------------------------------------- 1 | // Components 2 | // -------------------------------------------------- 3 | 4 | @import 5 | "components/grid", 6 | "components/sections", 7 | "components/buttons", 8 | "components/icons_carto", 9 | "components/icons", 10 | "components/titles", 11 | "components/header", 12 | "components/navbar", 13 | "components/breadcrumbs", 14 | "components/dropdown", 15 | "components/offcanvas", 16 | "components/logo", 17 | "components/lists", 18 | "components/sidebar", 19 | "components/content", 20 | "components/features", 21 | "components/separator", 22 | "components/cards", 23 | "components/footer" 24 | ; 25 | 26 | @import 27 | "components/circles", 28 | "components/subheader", 29 | "components/progress" 30 | ; 31 | -------------------------------------------------------------------------------- /_app/_scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------------------------------- 3 | 4 | @import 5 | "mixins/clearfix", 6 | "mixins/button", 7 | "mixins/ellipsis", 8 | "mixins/cover", 9 | "mixins/retina-background" 10 | ; 11 | -------------------------------------------------------------------------------- /_app/_scss/_variables.scss: -------------------------------------------------------------------------------- 1 | // Variables 2 | // -------------------------------------------------- 3 | 4 | // Layout 5 | $layout-xxxl: 1960px; 6 | $layout-xxl: 1280px; 7 | $layout-xl: 1480px; 8 | $layout-l: 980px; 9 | $layout-m: 750px; 10 | $layout-s: 400px; 11 | $layout-s--landscape: 520px; 12 | $layout-s--portrait: 360px; 13 | $spacing-unit: 20px; 14 | 15 | // Font 16 | $font-weight-base: 400; 17 | $font-size-base: 13px; 18 | $line-height-base: 22px; 19 | $font-family-base: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; 20 | $text-color: #636D72; 21 | $background-color: #fff; 22 | 23 | // Colors 24 | $blue1: #3AA9E3; 25 | $blue2: #147BBF; 26 | $grey9: #979EA1; 27 | $grey6: #636D72; 28 | $grey2: #2E3C43; 29 | 30 | $orange1: #F19243; 31 | $orange2: #F99C4E; 32 | 33 | $green1: #85C77C; 34 | $green2: #1C9C9A; 35 | $green3: #397568; 36 | $green4: #8BBB71; 37 | 38 | $purple1: #373E66; 39 | $purple2: #812F87; 40 | $purple3: #34658A; 41 | 42 | $twitter: #55ACEE; 43 | $facebook: #3A5999; 44 | $linkedin: #007BB6; 45 | -------------------------------------------------------------------------------- /_app/_scss/_vendor.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | // Vendor 4 | @import 5 | "vendor/reset", 6 | "vendor/syntax-highlighting" 7 | ; 8 | -------------------------------------------------------------------------------- /_app/_scss/components/_breadcrumbs.scss: -------------------------------------------------------------------------------- 1 | // Breadcrumb 2 | // -------------------------------------------------- 3 | 4 | .Breadcrumbs-item { 5 | margin-left: $spacing-unit; 6 | font-size: 13px; 7 | 8 | @media (max-width: $layout-m) { 9 | width: 100%; 10 | margin-left: 0; 11 | } 12 | } 13 | .Breadcrumbs-link { 14 | color: $grey9; 15 | 16 | &:hover, 17 | &.is-active { 18 | color: $grey2; 19 | } 20 | } 21 | .Breadcrumb-arrow { 22 | position: relative; 23 | top: -1px; 24 | margin-left: $spacing-unit; 25 | color: #CBCED0; 26 | } 27 | -------------------------------------------------------------------------------- /_app/_scss/components/_buttons.scss: -------------------------------------------------------------------------------- 1 | // Buttons 2 | // -------------------------------------------------- 3 | 4 | .Button { 5 | display: inline-block; 6 | border-width: 2px; 7 | border-style: solid; 8 | text-align: center; 9 | white-space: nowrap; 10 | font-weight: 600; 11 | font-size: 12px; 12 | line-height: 1; 13 | border-radius: 50px; 14 | transition: all .3s; 15 | outline: none; 16 | 17 | &:hover { 18 | text-decoration: none; 19 | } 20 | 21 | > span { 22 | display: inline-block; 23 | } 24 | } 25 | .Button--responsive { 26 | width: 100%; 27 | 28 | > span { 29 | max-width: 100%; 30 | } 31 | } 32 | 33 | .Button--long { 34 | > span { 35 | min-width: 140px; 36 | } 37 | } 38 | 39 | // Sizes 40 | .Button--sSmall { 41 | > span { 42 | padding: 8px $spacing-unit; 43 | } 44 | } 45 | .Button--sMedium { 46 | > span { 47 | padding: $spacing-unit / 2 $spacing-unit; 48 | } 49 | } 50 | .Button--sLarge { 51 | > span { 52 | padding: 12px $spacing-unit; 53 | } 54 | } 55 | .Button--sXlarge { 56 | > span { 57 | padding: 14px $spacing-unit * 2; 58 | } 59 | } 60 | 61 | // Colors 62 | .Button--cWhite { 63 | @include button(#fff, $green1); 64 | 65 | &.is-highlight--dark { 66 | color: $grey2; 67 | } 68 | 69 | &.is-highlight--purple { 70 | color: $purple1; 71 | } 72 | } 73 | .Button--cBlue { 74 | @include button($blue1, #fff); 75 | 76 | &.is-highlight--fb { 77 | background: $facebook; 78 | border-color: $facebook; 79 | 80 | &:hover { 81 | background: darken($facebook, 5%); 82 | border-color: darken($facebook, 5%); 83 | } 84 | } 85 | 86 | &.is-highlight--tw { 87 | background: $twitter; 88 | border: 2px solid $twitter; 89 | 90 | &:hover { 91 | background: darken($twitter, 5%); 92 | border-color: darken($twitter, 5%); 93 | } 94 | } 95 | 96 | &.is-highlight--li { 97 | background: $linkedin; 98 | border: 2px solid $linkedin; 99 | 100 | &:hover { 101 | background: darken($linkedin, 5%); 102 | border-color: darken($linkedin, 5%); 103 | } 104 | } 105 | 106 | } 107 | .Button--cGrey { 108 | @include button($grey2, #fff); 109 | 110 | &.is-hover--dark { 111 | &:hover { 112 | color: #fff; 113 | } 114 | } 115 | } 116 | .Button--cGreen { 117 | @include button($green1, #fff); 118 | } 119 | .Button--cOrange { 120 | @include button($orange1, #fff); 121 | } 122 | -------------------------------------------------------------------------------- /_app/_scss/components/_cards.scss: -------------------------------------------------------------------------------- 1 | // Cards 2 | // -------------------------------------------------- 3 | 4 | .Card { 5 | min-height: 244px; 6 | } 7 | .Card--tall { 8 | min-height: 308px; 9 | } 10 | @media (max-width: $layout-m) { 11 | .Card { 12 | min-height: auto; 13 | } 14 | } 15 | .Card-inner { 16 | @include clearfix; 17 | padding: $spacing-unit; 18 | background: #fff; 19 | } 20 | .Card-picture { 21 | display: block; 22 | border-bottom: 1px solid rgba(#000, .1); 23 | width: 100%; 24 | padding: $spacing-unit; 25 | text-align: center; 26 | background-color: #f9f9f9; 27 | background-position: center; 28 | background-repeat: no-repeat; 29 | } 30 | .Card-picture--withpicture { 31 | height: 140px; 32 | background-size: cover; 33 | } 34 | .Card-title { 35 | font-size: 16px; 36 | color: $grey2; 37 | } 38 | .Card-title--withlink { 39 | a { 40 | color: $grey2; 41 | } 42 | } 43 | .Card-item { 44 | display: inline-block; 45 | font-size: 13px; 46 | color: $grey9; 47 | 48 | @media (max-width: $layout-m) { 49 | width: 100%; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /_app/_scss/components/_circles.scss: -------------------------------------------------------------------------------- 1 | // Circles 2 | // -------------------------------------------------- 3 | 4 | .Circle { 5 | display: inline-block; 6 | width: $spacing-unit * 2; 7 | height: $spacing-unit * 2; 8 | border: 1px solid #DDD; 9 | font-size: 18px; 10 | line-height: 22px; 11 | text-align: center; 12 | color: #DDD; 13 | border-radius: 50%; 14 | transition: .2s all; 15 | } 16 | .Circle--fat { 17 | border-width: 2px; 18 | border-radius: 8px; 19 | } 20 | .Circle--square { 21 | border-radius: 8px; 22 | } 23 | .Circle--withlink { 24 | &:hover { 25 | text-decoration: none; 26 | border-color: #CCC; 27 | color: #CCC; 28 | } 29 | } 30 | .Circle--sep { 31 | position: absolute; 32 | z-index: 6; 33 | width: 80px; 34 | height: 80px; 35 | top: 50%; 36 | left: 50%; 37 | margin-left: -40px; 38 | margin-top: -40px; 39 | } 40 | // Sizes 41 | .Circle--sLarge { 42 | width: $spacing-unit * 3; 43 | height: $spacing-unit * 3; 44 | } 45 | 46 | // Colors 47 | .Circle--cBlue { 48 | border-color: $blue1; 49 | color: $blue1; 50 | } 51 | .Circle--cOrange { 52 | border-color: $orange1; 53 | color: $orange1; 54 | } 55 | .Circle--cGreen { 56 | border-color: $green1; 57 | color: $green1; 58 | } 59 | .Circle--cBlack { 60 | border-color: #0B161A; 61 | color: #0B161A; 62 | 63 | &.is-highlight { 64 | background: #0B161A; 65 | color: #fff; 66 | } 67 | } 68 | 69 | .Circle-inner--left { 70 | margin-left: -4px; 71 | } 72 | .Circle-inner--right { 73 | margin-right: -4px; 74 | } -------------------------------------------------------------------------------- /_app/_scss/components/_content.scss: -------------------------------------------------------------------------------- 1 | // Content 2 | // -------------------------------------------------- 3 | .Content { 4 | position: relative; 5 | background: $background-color; 6 | padding-bottom: $spacing-unit * 3; 7 | } 8 | .Content--withpadding { 9 | padding-top: $spacing-unit * 3; 10 | } 11 | .Content--cWhite { 12 | background: #fff; 13 | } 14 | .Content-inner { 15 | margin-top: $spacing-unit * 3; 16 | 17 | h1, h2, h3, 18 | p, blockquote, pre, 19 | ul, ol, dl, figure { 20 | margin-bottom: $spacing-unit; 21 | } 22 | p, blockquote, pre, 23 | ul, ol, dl, figure { 24 | &:last-child { 25 | margin-bottom: 0; 26 | } 27 | } 28 | // .Title 29 | h1, h2, h3, h4, h5, h6 { 30 | font-weight: 600; 31 | color: $grey2; 32 | 33 | &:hover { 34 | .Title-link { 35 | opacity: 1; 36 | } 37 | } 38 | } 39 | h1, h2, h3 { 40 | margin-top: $spacing-unit * 2; 41 | } 42 | h3, h4 { 43 | em { 44 | color: $grey9; 45 | } 46 | } 47 | h1 { 48 | margin-top: 0; 49 | margin-bottom: $spacing-unit; 50 | font-size: 22px; 51 | line-height: 30px; 52 | } 53 | h2 { 54 | margin-bottom: $spacing-unit / 2; 55 | font-size: 18px; 56 | line-height: 24px; 57 | } 58 | h3 { 59 | margin-bottom: 12px; 60 | font-size: 14px; 61 | line-height: 22px; 62 | } 63 | h4 { 64 | margin-top: $spacing-unit; 65 | margin-bottom: 8px; 66 | } 67 | h2 + h3 { 68 | margin-top: 0; 69 | } 70 | img { 71 | border-radius: 3px; 72 | } 73 | p + .highlight { 74 | margin-top: $spacing-unit; 75 | } 76 | ul, ol { 77 | margin-left: $spacing-unit; 78 | } 79 | li { 80 | margin-bottom: $spacing-unit / 2; 81 | 82 | &:last-child { 83 | margin-bottom: 0; 84 | } 85 | > p, > ul, > ol, table { 86 | margin-top: $spacing-unit / 2; 87 | margin-bottom: 0; 88 | 89 | + p { 90 | margin-top: $spacing-unit / 2; 91 | } 92 | } 93 | } 94 | ul { 95 | list-style-type: disc; 96 | } 97 | ol { 98 | list-style-type: decimal; 99 | } 100 | table { 101 | width: 100%; 102 | margin-bottom: $spacing-unit; 103 | 104 | + table { 105 | margin-top: -$spacing-unit - 1; 106 | 107 | thead { 108 | background: #fcfcfc; 109 | } 110 | 111 | th { 112 | font-weight: 400; 113 | } 114 | } 115 | thead { 116 | background: #f9f9f9; 117 | } 118 | th { 119 | font-weight: 600; 120 | font-family: $font-family-base; 121 | text-align: left; 122 | } 123 | th, td { 124 | padding: 13px 20px; 125 | border: 1px solid #ddd; 126 | } 127 | th, td:first-child { 128 | vertical-align: top; 129 | color: #333; 130 | } 131 | td { 132 | &:first-child { 133 | width: 30%; 134 | } 135 | 136 | code { 137 | word-break: break-word; 138 | } 139 | } 140 | } 141 | } 142 | .Content-inner--withsubheader { 143 | @media (min-width: $layout-m) { 144 | margin-top: $spacing-unit * 3 + 77px; 145 | } 146 | } 147 | .Content-inner--withlist { 148 | // margin-top: 0; 149 | margin-bottom: $spacing-unit * 2; 150 | 151 | h2 { 152 | margin-top: 0; 153 | } 154 | } 155 | .Content-inner--afterlist { 156 | margin-top: 0; 157 | } 158 | .Content-meta { 159 | color: $grey9; 160 | } 161 | -------------------------------------------------------------------------------- /_app/_scss/components/_dropdown.scss: -------------------------------------------------------------------------------- 1 | // Dropdown 2 | // -------------------------------------------------- 3 | 4 | .Dropdown { 5 | position: relative; 6 | } 7 | .Dropdown-arrow { 8 | vertical-align: middle; 9 | } 10 | .Dropdown-inner { 11 | display: none; 12 | position: absolute; 13 | z-index: 10; 14 | top: 32px; 15 | right: -114px; 16 | min-width: 220px; 17 | background: #fff; 18 | box-shadow: 0 1px 3px rgba(#000, .2); 19 | border-radius: 4px; 20 | transition: all .3s; 21 | z-index: 30; 22 | 23 | &:before { 24 | content: ""; 25 | position: absolute; 26 | width: 0; 27 | height: 0; 28 | left: 50%; 29 | margin-left: -14px; 30 | top: -16px; 31 | border: 8px solid transparent; 32 | border-bottom: 8px solid rgba(#000, .1); 33 | } 34 | 35 | &:after { 36 | content: ""; 37 | position: absolute; 38 | width: 0; 39 | height: 0; 40 | left: 50%; 41 | margin-left: -12px; 42 | top: -12px; 43 | border: 6px solid transparent; 44 | border-bottom: 6px solid #fff; 45 | } 46 | 47 | &.is-active { 48 | display: block; 49 | } 50 | } 51 | .Dropdown-content { 52 | padding: 12px 20px; 53 | } 54 | .Dropdown-item { 55 | line-height: 26px; 56 | font-size: 13px; 57 | 58 | &.is-active { 59 | .Dropdown-link { 60 | color: $grey2; 61 | border-radius: 3px; 62 | } 63 | } 64 | } 65 | .Dropdown-link { 66 | display: inline-block; 67 | color: $blue1; 68 | transition: color .2s ease; 69 | 70 | &:hover { 71 | text-decoration: none; 72 | color: $grey2; 73 | } 74 | } 75 | @media (max-width: $layout-m) { 76 | .Dropdown-item { 77 | &.is-active { 78 | .Dropdown-link { 79 | color: lighten($grey9, 5%); 80 | } 81 | } 82 | } 83 | .Dropdown-link { 84 | color: $grey9; 85 | 86 | &:hover { 87 | color: lighten($grey9, 5%); 88 | } 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /_app/_scss/components/_features.scss: -------------------------------------------------------------------------------- 1 | // Features 2 | // -------------------------------------------------- 3 | 4 | .Feature-item { 5 | display: block; 6 | padding: 0 $spacing-unit; 7 | width: 100%; 8 | margin-bottom: $spacing-unit * 3; 9 | color: $grey9; 10 | 11 | &.is-active { 12 | .Feature-inner--withlink { 13 | transition: all .2s; 14 | 15 | &:hover { 16 | .Feature-circle { 17 | border-color: #2ca8e1; 18 | color: #2ca8e1; 19 | } 20 | 21 | .Feature-text { 22 | color: $grey2; 23 | } 24 | } 25 | 26 | .Feature-circle { 27 | border-color: #2ca8e1; 28 | color: #2ca8e1; 29 | } 30 | 31 | .Feature-text { 32 | color: $grey2; 33 | } 34 | } 35 | } 36 | 37 | @media (max-width: $layout-m) { 38 | margin-bottom: $spacing-unit; 39 | } 40 | } 41 | .Feature-item--short { 42 | margin-bottom: $spacing-unit; 43 | } 44 | .Feature-inner { 45 | display: block; 46 | } 47 | .Feature-inner--withlink { 48 | transition: all .2s; 49 | 50 | &:hover { 51 | text-decoration: none; 52 | 53 | .Feature-text { 54 | color: $grey6; 55 | } 56 | 57 | .Feature-circle { 58 | border-color: #ccc; 59 | color: #ccc; 60 | } 61 | } 62 | 63 | .Feature-text { 64 | color: $grey9; 65 | } 66 | } 67 | .Feature-inner--withborder { 68 | transition: all .2s; 69 | border: 1px solid #ddd; 70 | border-radius: 4px; 71 | overflow: hidden; 72 | 73 | &.Feature-inner--withlink { 74 | &:hover { 75 | border: 1px solid #ccc; 76 | } 77 | } 78 | } 79 | .Feature-media { 80 | width: 48px; 81 | height: 48px; 82 | margin-bottom: $spacing-unit * 2; 83 | } 84 | .Feature-text { 85 | font-size: 15px; 86 | line-height: 26px; 87 | color: $grey6; 88 | transition: all .2s; 89 | } 90 | .Feature-text--cWhite { 91 | color: #fff; 92 | } 93 | 94 | @media (max-width: $layout-m) { 95 | .Features { 96 | margin-bottom: 40px; 97 | } 98 | 99 | .Feature-media, 100 | .Feature-content { 101 | float: left; 102 | } 103 | .Feature-media { 104 | margin-bottom: 0; 105 | margin-right: $spacing-unit; 106 | } 107 | .Feature-content { 108 | width: calc(100% - 68px); 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /_app/_scss/components/_footer.scss: -------------------------------------------------------------------------------- 1 | // Footer 2 | // -------------------------------------------------- 3 | 4 | .Footer { 5 | background: #fff; 6 | padding-top: 120px; 7 | 8 | @media (max-width: $layout-l) { 9 | padding-top: 60px; 10 | } 11 | } 12 | .Footer--cGrey { 13 | background: #f9f9f9; 14 | } 15 | .Footer-column { 16 | padding-bottom: 40px; 17 | } 18 | .Footer-column--mobile { 19 | border-top: 1px solid #eee; 20 | } 21 | .Footer-title { 22 | font-weight: 600; 23 | color: $grey2; 24 | } 25 | .Footer-item { 26 | position: relative; 27 | margin-bottom: 6px; 28 | } 29 | .Footer-social { 30 | line-height: 40px; 31 | 32 | @media (max-width: $layout-m) { 33 | margin-top: 20px; 34 | } 35 | } 36 | .Newsletter { 37 | position: relative; 38 | 39 | .hs-form { 40 | margin-right: 0 !important; 41 | padding-left: 0; 42 | 43 | .input { 44 | margin-right: 0; 45 | margin-bottom: 0; 46 | } 47 | 48 | .hs-input { 49 | padding-right: 88px; 50 | } 51 | } 52 | } 53 | .hs-newsletter { 54 | position: absolute; 55 | top: 0px; 56 | right: 0; 57 | bottom: 0px; 58 | width: 100px; 59 | border: 0; 60 | font: 400 13px $font-family-base; 61 | text-transform: uppercase; 62 | background: #3AA9E3; 63 | color: #fff; 64 | border-radius: 0 4px 4px 0; 65 | transition: all .15s; 66 | cursor: pointer; 67 | outline: none; 68 | text-transform: none; 69 | 70 | &:hover { 71 | background: darken($blue1, 5%); 72 | color: #fff; 73 | } 74 | } 75 | .Footer-item--mobile { 76 | border-bottom: 1px solid #eee; 77 | display: block; 78 | padding: 13px 0; 79 | margin-bottom: 0; 80 | 81 | .Footer-link { 82 | display: block; 83 | } 84 | } 85 | .Footer-link { 86 | transition: color .2s ease; 87 | 88 | &:hover { 89 | color: $grey2; 90 | text-decoration: none; 91 | } 92 | } 93 | .Footer-logo, 94 | .Footer-credits { 95 | display: inline-block; 96 | vertical-align: middle; 97 | } 98 | .Footer-credits { 99 | line-height: 18px; 100 | text-align: left; 101 | color: $grey9; 102 | } 103 | .Colophon { 104 | padding-top: 13px; 105 | text-align: right; 106 | 107 | @media (max-width: $layout-m) { 108 | padding-top: 0; 109 | text-align: left; 110 | } 111 | } 112 | .Colophon-item { 113 | display: inline-block; 114 | } 115 | .Footer-arrow { 116 | position: absolute; 117 | right: 0; 118 | top: 18px; 119 | color: #ddd; 120 | } 121 | -------------------------------------------------------------------------------- /_app/_scss/components/_grid.scss: -------------------------------------------------------------------------------- 1 | // Grid 2 | // 3 | // - max-width is needed for IE 4 | // 5 | // -------------------------------------------------- 6 | 7 | .Grid { 8 | display: flex; 9 | } 10 | .Grid-inner { 11 | display: flex; 12 | flex-wrap: wrap; 13 | flex: 1; 14 | max-width: calc(100% + 40px); 15 | margin-right: -$spacing-unit; 16 | margin-left: -$spacing-unit; 17 | } 18 | .Grid-inner--hcenter { 19 | justify-content: center; 20 | } 21 | .Grid-inner--vcenter { 22 | align-items: center; 23 | } 24 | .Grid-inner--between { 25 | align-items: center; 26 | justify-content: space-between; 27 | } 28 | .Grid-cell { 29 | padding-right: $spacing-unit; 30 | padding-left: $spacing-unit; 31 | } 32 | .Grid-cell--padding { 33 | padding-top: $spacing-unit * 2; 34 | padding-bottom: $spacing-unit * 2; 35 | } 36 | .Grid-inner--nopadding { 37 | margin-right: 0; 38 | margin-left: 0; 39 | 40 | > .Grid-cell { 41 | padding-left: 0; 42 | padding-right: 0; 43 | } 44 | } 45 | .Grid-inner--shortpadding { 46 | margin-right: -$spacing-unit / 2; 47 | margin-left: -$spacing-unit / 2; 48 | 49 | > .Grid-cell { 50 | padding-right: $spacing-unit / 2; 51 | padding-left: $spacing-unit / 2; 52 | } 53 | } 54 | .Grid-cell--col1 { 55 | flex: 0 0 8.3334%; 56 | max-width: 8.3334%; 57 | } 58 | .Grid-cell--col2 { 59 | flex: 0 0 16.6667%; 60 | max-width: 16.6667%; 61 | } 62 | .Grid-cell--col3 { 63 | flex: 0 0 25%; 64 | max-width: 25%; 65 | } 66 | .Grid-cell--col4 { 67 | flex: 0 0 33.3334%; 68 | max-width: 33.3334%; 69 | } 70 | .Grid-cell--col5 { 71 | flex: 0 0 41.6665%; 72 | max-width: 41.6665%; 73 | } 74 | .Grid-cell--col6 { 75 | flex: 0 0 50%; 76 | max-width: 50%; 77 | } 78 | .Grid-cell--col7 { 79 | flex: 0 0 58.3331%; 80 | max-width: 58.331%; 81 | } 82 | .Grid-cell--col8 { 83 | flex: 0 0 66.6666%; 84 | max-width: 66.6666%; 85 | } 86 | .Grid-cell--col9 { 87 | flex: 0 0 75%; 88 | max-width: 75%; 89 | } 90 | .Grid-cell--col10 { 91 | flex: 0 0 83.333%; 92 | max-width: 83.33%; 93 | } 94 | .Grid-cell--col11 { 95 | flex: 0 0 91.6666%; 96 | max-width: 91.6666%; 97 | } 98 | .Grid-cell--col12 { 99 | flex: 0 0 100%; 100 | max-width: 100%; 101 | } 102 | 103 | @media (max-width: $layout-l) { 104 | .Grid-cell--col4--tablet { 105 | flex: 0 0 33.3334%; 106 | max-width: 33.3334%; 107 | } 108 | .Grid-cell--col6--tablet { 109 | flex: 0 0 50%; 110 | max-width: 50%; 111 | } 112 | .Grid-cell--col8--tablet { 113 | flex: 0 0 66.6666%; 114 | max-width: 66.6666%; 115 | } 116 | .Grid-cell--col12--tablet { 117 | flex: 0 0 100%; 118 | max-width: 100%; 119 | } 120 | } 121 | @media (max-width: $layout-m) { 122 | .Grid-cell--col6--mobile { 123 | flex: 0 0 50%; 124 | max-width: 50%; 125 | } 126 | .Grid-cell--col12--mobile { 127 | flex: 0 0 100%; 128 | max-width: 100%; 129 | } 130 | } 131 | @media (max-width: $layout-s) { 132 | .Grid-cell--col6--mobile { 133 | flex: 0 0 100%; 134 | max-width: 100%; 135 | } 136 | } 137 | -------------------------------------------------------------------------------- /_app/_scss/components/_header.scss: -------------------------------------------------------------------------------- 1 | // Header 2 | // -------------------------------------------------- 3 | 4 | .Header { 5 | display: flex; 6 | flex-direction: column; 7 | position: relative; 8 | min-height: 500px; 9 | background: $blue1; 10 | } 11 | 12 | // Sizes 13 | .Header--short { 14 | min-height: 0; 15 | } 16 | .Header--tall { 17 | min-height: 550px; 18 | } 19 | .Header--full80 { 20 | height: 80vh; 21 | } 22 | .Header--full100 { 23 | height: 100vh; 24 | } 25 | .Header--withbrands { 26 | height: calc(100vh - 86px); 27 | } 28 | 29 | // Colors 30 | .Header--dark { 31 | background: $grey2; 32 | } 33 | .Header--cGreen { 34 | background: $green1; 35 | } 36 | .Header--cBlue { 37 | background: $blue1; 38 | } 39 | .Header--cWhite { 40 | background: #f9f9f9; 41 | } 42 | .Header--gBlue { 43 | background-image: linear-gradient(-45deg, $blue1 0%, $blue2 100%); 44 | } 45 | .Header--gSkyBlue { 46 | background-image: linear-gradient(-45deg, $blue2 0%, $green2 100%); 47 | } 48 | .Header--gPurple { 49 | background-image: linear-gradient(135deg, $purple1 0%, $purple2 100%); 50 | } 51 | .Header--gGreen { 52 | background-image: linear-gradient(135deg, $green3 0%, $green4 100%); 53 | } 54 | .Header-background { 55 | @include cover; 56 | } 57 | .Header-background--cover { 58 | background-size: cover; 59 | background-position: center; 60 | } 61 | .Header-background--academy { 62 | background: url("../img/backgrounds/academy.svg") center 77px repeat-x; 63 | opacity: .25; 64 | 65 | .no-svg { 66 | background-image: url("../img/backgrounds/academy.png"); 67 | } 68 | } 69 | .Header-inner { 70 | padding: $spacing-unit * 4 0; 71 | } 72 | .Header-inner--vcenter { 73 | display: flex; 74 | flex-grow: 1; 75 | align-items: center; 76 | margin-top: -31px; 77 | } 78 | -------------------------------------------------------------------------------- /_app/_scss/components/_icons.scss: -------------------------------------------------------------------------------- 1 | // Icons 2 | // -------------------------------------------------- 3 | 4 | // Sizes 5 | $sizes: (3, 5, 6, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 36, 48, 60); 6 | 7 | @each $size in $sizes { 8 | .Icon--s#{$size} { 9 | font-size: #{$size}px; 10 | } 11 | } 12 | 13 | // Colors 14 | .Icon--cWhite { 15 | color: #FFF; 16 | } 17 | .Icon--cBlue { 18 | color: #3AA9E3; 19 | } 20 | .Icon--cGreen { 21 | color: #9CCC65; 22 | } 23 | .Icon--cGrey { 24 | color: #ccc; 25 | } 26 | .Icon--cGrey2 { 27 | color: $grey2; 28 | } 29 | .Icon--cGrey9 { 30 | color: $grey9; 31 | } 32 | 33 | // Shame 34 | .Icon--close { 35 | position: relative; 36 | top: -6px; 37 | } 38 | .Icon--twitter, 39 | .Icon--facebook, 40 | .Icon--linkedin { 41 | position: relative; 42 | top: -2px; 43 | } 44 | -------------------------------------------------------------------------------- /_app/_scss/components/_lists.scss: -------------------------------------------------------------------------------- 1 | // Lists 2 | // -------------------------------------------------- 3 | 4 | .List { 5 | margin-bottom: $spacing-unit * 2; 6 | 7 | &:last-child { 8 | margin-bottom: 0; 9 | } 10 | } 11 | .List-item { 12 | border-top: 1px solid #EEE; 13 | 14 | &:last-child { 15 | border-bottom: 1px solid #EEE; 16 | } 17 | } 18 | .List-link { 19 | @include clearfix; 20 | display: block; 21 | line-height: 58px; 22 | transition: all .2s; 23 | 24 | &:hover { 25 | text-decoration: none; 26 | color: $grey2; 27 | } 28 | } 29 | .List-icon { 30 | position: relative; 31 | top: -2px; 32 | margin-right: $spacing-unit; 33 | vertical-align: middle; 34 | } 35 | .List-content { 36 | @include ellipsis; 37 | float: left; 38 | width: calc(100% - 130px); 39 | overflow: hidden; 40 | } 41 | .List-info { 42 | float: right; 43 | width: 80px; 44 | text-align: right; 45 | color: $grey9; 46 | } 47 | -------------------------------------------------------------------------------- /_app/_scss/components/_logo.scss: -------------------------------------------------------------------------------- 1 | // Logo 2 | // -------------------------------------------------- 3 | 4 | .Logo { 5 | display: inline-block; 6 | width: 96px; 7 | height: 36px; 8 | line-height: 40px; 9 | text-align: center; 10 | border-radius: 4px; 11 | } 12 | .Logo--light { 13 | color: #FFF; 14 | } 15 | .Logo--dark { 16 | color: $grey2; 17 | } 18 | .Logo--header { 19 | margin-right: $spacing-unit * 2; 20 | 21 | @media (max-width: $layout-l) { 22 | margin-right: $spacing-unit; 23 | } 24 | } 25 | .Logo--footer { 26 | margin-right: $spacing-unit; 27 | } 28 | -------------------------------------------------------------------------------- /_app/_scss/components/_navbar.scss: -------------------------------------------------------------------------------- 1 | // Navbar 2 | // -------------------------------------------------- 3 | .Navbar, 4 | .Breadcrumbs { 5 | @include clearfix; 6 | position: relative; 7 | z-index: 30; 8 | padding: $spacing-unit 0; 9 | font-size: 13px; 10 | line-height: 14px; 11 | } 12 | .Navbar-header { 13 | float: left; 14 | 15 | @media (max-width: $layout-m) { 16 | width: 100%; 17 | } 18 | } 19 | .Navbar-item, 20 | .Breadcrumbs-item { 21 | position: relative; 22 | display: inline-block; 23 | 24 | &:first-child { 25 | margin-left: 0; 26 | } 27 | } 28 | .Navbar-item { 29 | margin-left: $spacing-unit * 2; 30 | font-size: 13px; 31 | 32 | @media (max-width: $layout-l) { 33 | margin-left: $spacing-unit; 34 | } 35 | } 36 | .Breadcrumbs-item { 37 | margin-left: $spacing-unit; 38 | font-size: 13px; 39 | font-weight: 500; 40 | 41 | @media (max-width: $layout-m) { 42 | width: 100%; 43 | margin-left: 0; 44 | } 45 | } 46 | .Navbar-link, 47 | .Breadcrumbs-link { 48 | display: inline-block; 49 | line-height: 1; 50 | color: #fff; 51 | transition: all .2s; 52 | 53 | &:hover { 54 | text-decoration: none; 55 | color: rgba(#fff, .6); 56 | } 57 | 58 | span { 59 | display: inline-block; 60 | padding-bottom: 12px; 61 | padding-top: 12px; 62 | } 63 | } 64 | .Navbar-link { font-weight: 600; } 65 | 66 | .Navbar-button, 67 | .Navbar-signup { 68 | display: none; 69 | float: right; 70 | 71 | @media (max-width: $layout-m) { 72 | display: block; 73 | } 74 | } 75 | .Navbar-button { 76 | margin-top: 8px; 77 | } 78 | .Navbar-inner--left, 79 | .Breadcrumbs-inner--left { 80 | float: left; 81 | } 82 | .Navbar-inner--right, 83 | .Breadcrumbs-inner--right { 84 | float: right; 85 | 86 | @media (max-width: $layout-m) { 87 | float: left; 88 | } 89 | } 90 | .Navbar--cWhite { 91 | .Logo--header { 92 | color: $grey2; 93 | } 94 | .Navbar-link { 95 | color: $grey2; 96 | 97 | &:hover { 98 | color: rgba($grey2, .6); 99 | } 100 | 101 | &.is-hover--dark { 102 | &:hover { 103 | color: #fff; 104 | } 105 | } 106 | } 107 | } 108 | 109 | // Navbar fixed 110 | .Navbar--fixed { 111 | position: fixed; 112 | top: -80px; 113 | z-index: 30; 114 | width: 100%; 115 | border-bottom: 1px solid #eee; 116 | background: #fff; 117 | opacity: 0; 118 | transition: all .2s; 119 | 120 | &.is-active { 121 | top: 0; 122 | opacity: 1; 123 | } 124 | 125 | @media (max-width: $layout-m) { 126 | .Navbar-collapse { 127 | display: none; 128 | } 129 | } 130 | } 131 | 132 | @media (max-width: $layout-m) { 133 | .Navbar-collapse { 134 | position: absolute; 135 | top: 0; 136 | right: -80%; 137 | width: 80%; 138 | padding: 0 $spacing-unit; 139 | } 140 | .Navbar-inner { 141 | display: none; 142 | } 143 | .Navbar-button { 144 | display: block; 145 | } 146 | .Navbar-header { 147 | float: none; 148 | } 149 | .Navbar-inner--button { 150 | border-bottom: 1px solid rgba(#fff, .1); 151 | margin-bottom: 10px; 152 | padding-bottom: 18px; 153 | } 154 | .Navbar-item--menu { 155 | display: block; 156 | margin: 0 0 $spacing-unit; 157 | } 158 | .Navbar-item--button { 159 | float: left; 160 | width: 50%; 161 | margin-left: 0; 162 | } 163 | .Navbar-link--button { 164 | display: block; 165 | text-align: center; 166 | } 167 | } 168 | -------------------------------------------------------------------------------- /_app/_scss/components/_offcanvas.scss: -------------------------------------------------------------------------------- 1 | // Offcanvas 2 | // -------------------------------------------------- 3 | .Offcanvas { 4 | background-color: $grey2; 5 | } 6 | @media (max-width: $layout-m) { 7 | .Offcanvas-inner { 8 | position: relative; 9 | right: 0; 10 | width: 100%; 11 | transition: all .2s ease-out; 12 | 13 | &.is-active { 14 | right: 80%; 15 | 16 | .Navbar--cWhite { 17 | .Button--cGrey { 18 | border-color: rgba(#fff, .3); 19 | 20 | &:hover { 21 | background: #fff; 22 | } 23 | } 24 | .Navbar-link { 25 | color: #fff; 26 | 27 | &:hover { 28 | color: rgba(#fff, .6); 29 | } 30 | 31 | &.is-hover--dark { 32 | &:hover { 33 | color: $grey2; 34 | } 35 | } 36 | } 37 | } 38 | .Navbar-inner { 39 | display: block; 40 | width: 100%; 41 | } 42 | .Navbar-inner--buttons { 43 | border-bottom: 1px solid rgba(#fff, .1); 44 | margin-bottom: 10px; 45 | padding-bottom: 18px; 46 | } 47 | .Dropdown-inner { 48 | display: block; 49 | position: relative; 50 | top: 0; 51 | right: 0; 52 | min-width: 0; 53 | background: transparent; 54 | box-shadow: none; 55 | border-radius: 0; 56 | 57 | &:before, 58 | &:after { 59 | display: none; 60 | } 61 | } 62 | .Dropdown-content { 63 | padding: 0; 64 | } 65 | .Dropdown-arrow { 66 | display: none; 67 | } 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /_app/_scss/components/_progress.scss: -------------------------------------------------------------------------------- 1 | // Progress 2 | // -------------------------------------------------- 3 | 4 | .Progress, 5 | .Progress-inner { 6 | height: 4px; 7 | } 8 | .Progress { 9 | display: inline-block; 10 | width: 220px; 11 | margin-right: 12px; 12 | vertical-align: middle; 13 | background: #DDD; 14 | border-radius: 4px; 15 | overflow:hidden; 16 | } 17 | .Progress-inner { 18 | background: #85C77C; 19 | } -------------------------------------------------------------------------------- /_app/_scss/components/_sections.scss: -------------------------------------------------------------------------------- 1 | // Sections 2 | // -------------------------------------------------- 3 | 4 | .Section { 5 | position: relative; 6 | padding: $spacing-unit * 6 0; 7 | background: #fff; 8 | overflow: hidden; 9 | 10 | @media (max-width: $layout-m) { 11 | padding: $spacing-unit * 3 0; 12 | } 13 | } 14 | .Section--short { 15 | padding: $spacing-unit * 3 0 $spacing-unit * 6; 16 | } 17 | .Section--sLarge { 18 | min-height: 720px; 19 | } 20 | .Section--sMedium { 21 | min-height: 480px; 22 | } 23 | .Section--withFeatures { 24 | padding-bottom: $spacing-unit * 3; 25 | 26 | @media (max-width: $layout-m) { 27 | padding-bottom: $spacing-unit * 2; 28 | } 29 | } 30 | .Section--withoutBottom { 31 | padding-bottom: 0; 32 | } 33 | .Section--nopadding { 34 | padding-top: 0; 35 | } 36 | 37 | // Sizes 38 | .Section--brands { 39 | padding: $spacing-unit 0; 40 | } 41 | 42 | // Colors 43 | .Section--cDark { 44 | background: $grey2; 45 | } 46 | .Section--cGrey { 47 | background: #f9f9f9; 48 | } 49 | .Section--gMap { 50 | background-image: url('../img/backgrounds/signup/map.svg'), linear-gradient(0deg, #3BA9E2 0%, #2A7BBF 100%); 51 | background-size: cover; 52 | background-position: center; 53 | } 54 | .Section-background { 55 | @include cover; 56 | } 57 | .Section-text { 58 | font-size: 18px; 59 | line-height: 32px; 60 | color: $grey6; 61 | } 62 | .Section-list { 63 | list-style-type: disc; 64 | margin-left: 20px; 65 | } 66 | .Section-text--cWhite { 67 | color: #fff; 68 | } 69 | .Section-sep { 70 | height: 1px; 71 | background: #ddd; 72 | } 73 | .Section-offset--left { 74 | transform: translateX(-80px); 75 | } 76 | .Section-offset--left--double { 77 | transform: translateX(-160px); 78 | } 79 | .Section-offset--left--triple { 80 | transform: translateX(-320px); 81 | } 82 | .Section-offset--right { 83 | transform: translateX(80px); 84 | } 85 | .Section-offset--right--double { 86 | transform: translateX(160px); 87 | } 88 | .Section-offset--right--triple { 89 | transform: translateX(320px); 90 | } 91 | 92 | @media (max-width: $layout-l) { 93 | .Section-offset--left, 94 | .Section-offset--right, 95 | .Section-offset--left--double, 96 | .Section-offset--right--double, 97 | .Section-offset--left--triple, 98 | .Section-offset--right--triple { 99 | transform: none; 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /_app/_scss/components/_separator.scss: -------------------------------------------------------------------------------- 1 | // Separator 2 | // -------------------------------------------------- 3 | 4 | hr, .Sep { 5 | display: block; 6 | border: 0; 7 | height: 1px; 8 | background: #eee; 9 | margin-top: 40px; 10 | margin-bottom: 0; 11 | } 12 | -------------------------------------------------------------------------------- /_app/_scss/components/_sidebar.scss: -------------------------------------------------------------------------------- 1 | // Sidebar 2 | // -------------------------------------------------- 3 | 4 | .Sidebar { 5 | padding-top: $spacing-unit * 3; 6 | } 7 | .Sidebar.Sidebar--withsubheader { 8 | @media (min-width: $layout-m) { 9 | padding-top: $spacing-unit * 3 + 77px; 10 | } 11 | } 12 | .Sidebar-title { 13 | margin-top: $spacing-unit; 14 | 15 | @media (max-width: $layout-m) { 16 | margin-top: 0; 17 | } 18 | } 19 | .Sidebar-content { 20 | margin-bottom: $spacing-unit * 2; 21 | } 22 | .Sidebar-media { 23 | margin-bottom: $spacing-unit; 24 | } 25 | .Sidebar-icon { 26 | margin-right: $spacing-unit / 2; 27 | } 28 | .Sidebar-item { 29 | &.is-active { 30 | > .Sidebar-link { 31 | color: $grey2; 32 | } 33 | } 34 | } 35 | .Sidebar-link { 36 | @include ellipsis; 37 | display: block; 38 | transition: all .2s; 39 | 40 | &:hover { 41 | text-decoration: none; 42 | color: $grey2; 43 | } 44 | } 45 | .Sidebar-link.Sidebar-link--folder { 46 | font-weight: 600; 47 | margin-bottom: $spacing-unit / 2; 48 | } 49 | .Sidebar-list { 50 | margin-bottom: $spacing-unit * 2; 51 | 52 | &:last-child { 53 | margin-bottom: 0; 54 | } 55 | } 56 | .Sidebar-list--notitle { 57 | padding-top: 8px; 58 | } 59 | .Subsidebar { 60 | margin-left: $spacing-unit; 61 | margin-top: $spacing-unit / 2; 62 | margin-bottom: $spacing-unit / 2; 63 | } 64 | .Subsidebar-list { 65 | display: none; 66 | margin-left: $spacing-unit; 67 | margin-top: $spacing-unit / 2; 68 | margin-bottom: $spacing-unit / 2; 69 | 70 | &.is-active { 71 | display: block; 72 | } 73 | } 74 | // https://github.com/wilddeer/stickyfill 75 | .sticky { 76 | position: -webkit-sticky; 77 | position: sticky; 78 | top: 0; 79 | } 80 | -------------------------------------------------------------------------------- /_app/_scss/components/_sidemenu.scss: -------------------------------------------------------------------------------- 1 | // Sidemenu 2 | // -------------------------------------------------- 3 | 4 | .Sidemenu-title, 5 | .Sidemenu-itemLink { 6 | font-size: 12px; 7 | font-weight: 300; 8 | text-transform: uppercase; 9 | } 10 | 11 | .Sidemenu-title { 12 | color: #333; 13 | margin-top: 40px; 14 | } 15 | 16 | .Sidemenu-itemLink { 17 | padding: 10px 0; 18 | text-decoration: none; 19 | 20 | &:hover { 21 | color: #3992C0; 22 | text-decoration: none; 23 | } 24 | } -------------------------------------------------------------------------------- /_app/_scss/components/_subheader.scss: -------------------------------------------------------------------------------- 1 | // Header 2 | // -------------------------------------------------- 3 | 4 | .Subheader { 5 | position: relative; 6 | z-index: 20; 7 | border-bottom: 1px solid #EEE; 8 | background: #F9F9F9; 9 | } 10 | .Subheader.Subheader--fixed { 11 | @media (min-width: $layout-m) { 12 | position: absolute; 13 | top: 0; 14 | width: 100%; 15 | 16 | &.is-fixed { 17 | position: fixed; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /_app/_scss/components/_titles.scss: -------------------------------------------------------------------------------- 1 | // Titles 2 | // -------------------------------------------------- 3 | 4 | .Title { 5 | color: $grey2; 6 | 7 | span { 8 | font-weight: 300; 9 | color: $grey9; 10 | } 11 | } 12 | 13 | // Sizes 14 | .Title--header { 15 | font-size: 44px; 16 | line-height: 56px; 17 | letter-spacing: 1px; 18 | color: #fff; 19 | 20 | @media (max-width: $layout-l) { 21 | font-size: 32px; 22 | line-height: 48px; 23 | } 24 | } 25 | .Title--sectionLarge { 26 | font-size: 32px; 27 | line-height: 48px; 28 | 29 | @media (max-width: $layout-l) { 30 | font-size: 24px; 31 | line-height: 36px; 32 | } 33 | } 34 | .Title--sectionMedium { 35 | margin-bottom: $spacing-unit; 36 | font-size: 24px; 37 | line-height: 36px; 38 | } 39 | .Title--feature { 40 | margin-bottom: $spacing-unit / 2; 41 | font-size: 18px; 42 | line-height: 26px; 43 | } 44 | .Title--card { 45 | font-size: 16px; 46 | line-height: 24px; 47 | 48 | // @media (max-width: $layout-l) { 49 | // font-size: 13px; 50 | // line-height: 20px; 51 | // } 52 | } 53 | .Title--small { 54 | font-size: 13px; 55 | line-height: 19px; 56 | letter-spacing: 1px; 57 | color: rgba(#fff, .6); 58 | text-transform: uppercase; 59 | } 60 | .Title-link { 61 | color: $grey2; 62 | transition: all .2s; 63 | 64 | &:hover { 65 | text-decoration: none; 66 | color: darken($grey2, 5%); 67 | } 68 | } 69 | .Title--quote { 70 | font-weight: 300; 71 | font-style: italic; 72 | } 73 | // Colors 74 | .Title--cWhite { 75 | color: #fff; 76 | } 77 | .Title--cGrey9 { 78 | color: $grey9; 79 | } 80 | .Title--cGrey2 { 81 | color: $grey2; 82 | } 83 | .Title-permalink { 84 | position: relative; 85 | left: .5em; 86 | opacity: 0; 87 | font-size: 12px; 88 | transition: opacity .2s ease-in-out .1s; 89 | } 90 | -------------------------------------------------------------------------------- /_app/_scss/main.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | // Non-rendering scss 4 | @import 5 | "variables", 6 | "mixins" 7 | ; 8 | 9 | // Layout 10 | @import 11 | "vendor", 12 | "base", 13 | "components", 14 | "academy" 15 | ; 16 | 17 | // Utilities 18 | @import "utilities"; 19 | -------------------------------------------------------------------------------- /_app/_scss/mixins/_button.scss: -------------------------------------------------------------------------------- 1 | // Button 2 | // -------------------------------------------------- 3 | 4 | @mixin button($color1, $color2) { 5 | color: $color1; 6 | border-color: rgba($color1, .3); 7 | 8 | &:hover { 9 | border-color: rgba($color1, .4); 10 | } 11 | 12 | &.is-highlight { 13 | background: $color1; 14 | color: $color2; 15 | 16 | &:hover { 17 | opacity: .9; 18 | } 19 | } 20 | 21 | &.is-hover { 22 | &:hover { 23 | background: $color1; 24 | color: $color2; 25 | } 26 | } 27 | 28 | &.is-hover--dark { 29 | &:hover { 30 | color: $grey2; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /_app/_scss/mixins/_clearfix.scss: -------------------------------------------------------------------------------- 1 | // Clearfix 2 | // -------------------------------------------------- 3 | 4 | @mixin clearfix { 5 | &:after { 6 | content: ""; 7 | display: table; 8 | clear: both; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /_app/_scss/mixins/_cover.scss: -------------------------------------------------------------------------------- 1 | // Cover 2 | // -------------------------------------------------- 3 | 4 | @mixin cover { 5 | position: absolute; 6 | top: 0; 7 | right: 0; 8 | bottom: 0; 9 | left: 0; 10 | } 11 | -------------------------------------------------------------------------------- /_app/_scss/mixins/_ellipsis.scss: -------------------------------------------------------------------------------- 1 | // Ellipsis 2 | // -------------------------------------------------- 3 | 4 | @mixin ellipsis { 5 | white-space: nowrap; 6 | overflow: hidden; 7 | text-overflow: ellipsis; 8 | } 9 | -------------------------------------------------------------------------------- /_app/_scss/mixins/_retina-background.scss: -------------------------------------------------------------------------------- 1 | // Retina background 2 | // -------------------------------------------------- 3 | 4 | @mixin retina-background($image) { 5 | @media (min--moz-device-pixel-ratio: 1.3), 6 | (-o-min-device-pixel-ratio: 2.6/2), 7 | (-webkit-min-device-pixel-ratio: 1.3), 8 | (min-device-pixel-ratio: 1.3), 9 | (min-resolution: 1.3dppx) { 10 | background-image: url($image); 11 | } 12 | } 13 | 14 | @mixin retina-background-size($image, $width, $height) { 15 | @media (min--moz-device-pixel-ratio: 1.3), 16 | (-o-min-device-pixel-ratio: 2.6/2), 17 | (-webkit-min-device-pixel-ratio: 1.3), 18 | (min-device-pixel-ratio: 1.3), 19 | (min-resolution: 1.3dppx) { 20 | background-image: url($image); 21 | background-size: $width $height; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /_app/_scss/vendor/_reset.scss: -------------------------------------------------------------------------------- 1 | /* http://meyerweb.com/eric/tools/css/reset/ 2 | v2.0 | 20110126 3 | License: none (public domain) 4 | */ 5 | 6 | html, body, div, span, applet, object, iframe, 7 | h1, h2, h3, h4, h5, h6, p, blockquote, pre, 8 | a, abbr, acronym, address, big, cite, code, 9 | del, dfn, em, img, ins, kbd, q, s, samp, 10 | small, strike, strong, sub, sup, tt, var, 11 | b, u, i, center, 12 | dl, dt, dd, ol, ul, li, 13 | fieldset, form, label, legend, 14 | table, caption, tbody, tfoot, thead, tr, th, td, 15 | article, aside, canvas, details, embed, 16 | figure, figcaption, footer, header, hgroup, 17 | menu, nav, output, ruby, section, summary, 18 | time, mark, audio, video { 19 | margin: 0; 20 | padding: 0; 21 | border: 0; 22 | font-size: 100%; 23 | font: inherit; 24 | vertical-align: baseline; 25 | } 26 | /* HTML5 display-role reset for older browsers */ 27 | article, aside, details, figcaption, figure, 28 | footer, header, hgroup, menu, nav, section { 29 | display: block; 30 | } 31 | body { 32 | line-height: 1; 33 | } 34 | ol, ul { 35 | list-style: none; 36 | } 37 | blockquote, q { 38 | quotes: none; 39 | } 40 | blockquote:before, blockquote:after, 41 | q:before, q:after { 42 | content: ''; 43 | content: none; 44 | } 45 | table { 46 | border-collapse: collapse; 47 | border-spacing: 0; 48 | } 49 | -------------------------------------------------------------------------------- /_app/_scss/vendor/_syntax-highlighting.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Syntax highlighting styles 3 | */ 4 | .highlight { 5 | background: #fff; 6 | margin-bottom: $spacing-unit; 7 | 8 | .c { color: #998; font-style: italic } // Comment 9 | .err { color: #a61717; background-color: #e3d2d2 } // Error 10 | .k { font-weight: bold } // Keyword 11 | .o { font-weight: bold } // Operator 12 | .cm { color: #998; font-style: italic } // Comment.Multiline 13 | .cp { color: #999; font-weight: bold } // Comment.Preproc 14 | .c1 { color: #998; font-style: italic } // Comment.Single 15 | .cs { color: #999; font-weight: bold; font-style: italic } // Comment.Special 16 | .gd { color: #000; background-color: #fdd } // Generic.Deleted 17 | .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific 18 | .ge { font-style: italic } // Generic.Emph 19 | .gr { color: #a00 } // Generic.Error 20 | .gh { color: #999 } // Generic.Heading 21 | .gi { color: #000; background-color: #dfd } // Generic.Inserted 22 | .gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific 23 | .go { color: #888 } // Generic.Output 24 | .gp { color: #555 } // Generic.Prompt 25 | .gs { font-weight: bold } // Generic.Strong 26 | .gu { color: #aaa } // Generic.Subheading 27 | .gt { color: #a00 } // Generic.Traceback 28 | .kc { font-weight: bold } // Keyword.Constant 29 | .kd { font-weight: bold } // Keyword.Declaration 30 | .kp { font-weight: bold } // Keyword.Pseudo 31 | .kr { font-weight: bold } // Keyword.Reserved 32 | .kt { color: #458; font-weight: bold } // Keyword.Type 33 | .m { color: #099 } // Literal.Number 34 | .s { color: #d14 } // Literal.String 35 | .na { color: #008080 } // Name.Attribute 36 | .nb { color: #0086B3 } // Name.Builtin 37 | .nc { color: #458; font-weight: bold } // Name.Class 38 | .no { color: #008080 } // Name.Constant 39 | .ni { color: #800080 } // Name.Entity 40 | .ne { color: #900; font-weight: bold } // Name.Exception 41 | .nf { color: #900; font-weight: bold } // Name.Function 42 | .nn { color: #555 } // Name.Namespace 43 | .nt { color: #000080 } // Name.Tag 44 | .nv { color: #008080 } // Name.Variable 45 | .ow { font-weight: bold } // Operator.Word 46 | .w { color: #bbb } // Text.Whitespace 47 | .mf { color: #099 } // Literal.Number.Float 48 | .mh { color: #099 } // Literal.Number.Hex 49 | .mi { color: #099 } // Literal.Number.Integer 50 | .mo { color: #099 } // Literal.Number.Oct 51 | .sb { color: #d14 } // Literal.String.Backtick 52 | .sc { color: #d14 } // Literal.String.Char 53 | .sd { color: #d14 } // Literal.String.Doc 54 | .s2 { color: #d14 } // Literal.String.Double 55 | .se { color: #d14 } // Literal.String.Escape 56 | .sh { color: #d14 } // Literal.String.Heredoc 57 | .si { color: #d14 } // Literal.String.Interpol 58 | .sx { color: #d14 } // Literal.String.Other 59 | .sr { color: #009926 } // Literal.String.Regex 60 | .s1 { color: #d14 } // Literal.String.Single 61 | .ss { color: #990073 } // Literal.String.Symbol 62 | .bp { color: #999 } // Name.Builtin.Pseudo 63 | .vc { color: #008080 } // Name.Variable.Class 64 | .vg { color: #008080 } // Name.Variable.Global 65 | .vi { color: #008080 } // Name.Variable.Instance 66 | .il { color: #099 } // Literal.Number.Integer.Long 67 | } 68 | -------------------------------------------------------------------------------- /_app/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | redirect_from: /about.html 4 | title: "About the Map Academy" 5 | --- 6 | ## What is this? 7 | 8 | The Map Academy is an open source project, which serves as a resource for people creating maps on the web. Being open source means that the content that is here, will be free for everyone to access and build upon. 9 | 10 | Although is an initiative of [CARTO](https://carto.com), it is not only a guide to this specific software. While we do think that CARTO is a great tool to start learning online mapping, it is only one part of a growing network of mapping tools. It is our hope that as the program expands, you will find more and more content that is not related directly with CARTO, and that will allow you to build your skills as a mapper. This means that at the Map Academy we will start to teach you skills you can use in other technologies such as ESRI, Google Maps, or Mapbox. 11 | 12 | The Map Academy is designed for self-learners, but can also be used in traditional teaching environments. Since it's open source, re-publication, adaptations into product manuals, and any other creative usage of the Map Academy is permitted. When possible, we appreciate attribution to the Map Academy. 13 | 14 | 15 | ## How can I contribute? 16 | 17 | Contributing on the Map Academy is easy. The content on the Map Academy is written in the Markdown and is rendered into a full interactive website. This means that you can add any link or even code to your content. 18 | 19 | The structure of the website is defined by folders on the "courses" folder. For each course there is a .md file (named with a number and the short name of the course), and a folder which contains the different lessons of the course. The structure of the lessons is defined by headings, which are h2 or h3. 20 | 21 | We highly recommend to use any of the existing courses as a template when preparing a new course and reading the [contributing guide](http://github.com/CartoDB/academy/blob/master/CONTRIBUTING.md) before starting to work on the content. 22 | 23 | 24 | ## Why should I contribute? 25 | 26 | Maps are a very powerful tool for understanding and changing the world. Map users and creators include everyone from big corporations to individuals, international organizations and research institutions. Each day, more and more people sit in front of their computer with great ideas and the objective of creating a web map. We believe that helping them in the process of learning is key for a better and a more informed world. Through your contributions to the Map Academy, you can help build a body of knowledge to empower mappers - from beginners to experts - around the world. We are sure that you have plenty of ideas and tricks than you can share with the community, so don't be shy. Spread the word! 27 | -------------------------------------------------------------------------------- /_app/courses/academy-lite.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: course 3 | title: "Academy Lite" 4 | redirect_from: /courses/05-academy-lite.html 5 | collection: academy-lite 6 | mailchimp_id: 6ae533ab3c 7 | --- 8 | # Academy Lite 9 | 10 | These quick-start lessons will give you the basic skills needed for creating maps in CARTO. 11 | -------------------------------------------------------------------------------- /_app/courses/beginners-course.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: course 3 | title: "Online Mapping for Beginners" 4 | redirect_from: /courses/01-beginners-course.html 5 | collection: beginners-course 6 | mailchimp_id: 39c07c0ec2 7 | --- 8 | # Online Mapping for Beginners 9 | 10 | In this lesson, you will learn how to work with datasets to create interactive map visualizations. You will 11 | explore styling your map, adding multiple datasets, and experimenting with different ways to display your data, 12 | including animated maps. You'll learn how to share your new visualizations with friends, family, and the world. 13 | -------------------------------------------------------------------------------- /_app/courses/cartojs-and-external-apis.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: course 3 | collection: cartojs-and-external-apis 4 | mailchimp_id: 62856bf9d1 5 | --- 6 | # CARTO.js and External APIs 7 | 8 | This course shows how to use CARTO's JavaScript library CARTO.js with external libraries and APIs. 9 | -------------------------------------------------------------------------------- /_app/courses/cartojs-ground-up.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: course 3 | title: "CARTO.js from the ground up" 4 | redirect_from: /courses/03-cartojs-ground-up.html 5 | collection: cartojs-ground-up 6 | mailchimp_id: 62856bf9d1 7 | --- 8 | # CARTO.js from the ground up 9 | 10 | This introduction to CARTO.js from the ground up will take you through the common uses of the library. You'll start out by pulling your maps from CARTO with only a few lines of code. Later you'll customize your maps with JavaScript, interact with the data, add custom SQL queries, integrate other features, and much more. 11 | -------------------------------------------------------------------------------- /_app/courses/community.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: community 3 | title: "Community lessons and tutorials" 4 | collection: community 5 | mailchimp_id: eb9ddf4108 6 | --- 7 | # Community lessons and tutorials 8 | 9 | There are countless lessons and tutorials written for CARTO. Here we collect some contributed by the community or ones we found and want to include. **See the stellar list of entries below.** 10 | -------------------------------------------------------------------------------- /_app/courses/design-for-beginners.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: course 3 | title: "Introduction to Map Design" 4 | redirect_from: /courses/02-design-for-beginners.html 5 | collection: design-for-beginners 6 | mailchimp_id: 9f65372776 7 | --- 8 | # Introduction to Map Design 9 | 10 | In this lesson, you will start learning the basics of design with data and maps. You will begin to explore map design by learning about the use of colors, data, and labels. When you finish the course, you will have developed a set of tools that you can use in any map visualization. 11 | -------------------------------------------------------------------------------- /_app/courses/intermediate-design.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: course 3 | title: "Intermediate Map Design" 4 | redirect_from: /courses/06-intermediate-design.html 5 | collection: intermediate-design 6 | mailchimp_id: 7b12ebacde 7 | --- 8 | # Intermediate Map Design 9 | 10 | In this lesson you'll learn how to choose the type of thematic map that communicates your dataset's information best. You'll also learn how to use color and typography to make it beautiful! When you have finished this course, you will have built upon the skills you gained in Introduction to Map Design. 11 | -------------------------------------------------------------------------------- /_app/courses/sql-postgis.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: course 3 | title: "SQL and PostGIS in CARTO" 4 | redirect_from: /courses/04-sql-postgis.html 5 | collection: sql-postgis 6 | mailchimp_id: eb9ddf4108 7 | --- 8 | # SQL and PostGIS in CARTO 9 | 10 | CARTO is a great tool for introducing the power of SQL and PostGIS. You will be walked through the basics of these languages, building towards more and more complex data analysis and manipulation that will allow you to tell even more powerful stories with your maps. 11 | -------------------------------------------------------------------------------- /_app/d/1.0_month.geojson.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/d/1.0_month.geojson.zip -------------------------------------------------------------------------------- /_app/d/academy_torque_stork.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/d/academy_torque_stork.zip -------------------------------------------------------------------------------- /_app/d/all_month.csv.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/d/all_month.csv.zip -------------------------------------------------------------------------------- /_app/d/counties.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/d/counties.zip -------------------------------------------------------------------------------- /_app/d/tornadoes.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/d/tornadoes.zip -------------------------------------------------------------------------------- /_app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/favicon.ico -------------------------------------------------------------------------------- /_app/fonts/carto-icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/fonts/carto-icons.eot -------------------------------------------------------------------------------- /_app/fonts/carto-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/fonts/carto-icons.ttf -------------------------------------------------------------------------------- /_app/fonts/carto-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/fonts/carto-icons.woff -------------------------------------------------------------------------------- /_app/google776764e6f35123b2.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/google776764e6f35123b2.html -------------------------------------------------------------------------------- /_app/img/backgrounds/academy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/backgrounds/academy.png -------------------------------------------------------------------------------- /_app/img/course1/lesson2/choropleth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course1/lesson2/choropleth.png -------------------------------------------------------------------------------- /_app/img/course1/lesson2/infowindow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course1/lesson2/infowindow.png -------------------------------------------------------------------------------- /_app/img/course1/lesson2/newtableURL.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course1/lesson2/newtableURL.jpg -------------------------------------------------------------------------------- /_app/img/course1/lesson2/newtableURL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course1/lesson2/newtableURL.png -------------------------------------------------------------------------------- /_app/img/course1/lesson2/polygonfill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course1/lesson2/polygonfill.png -------------------------------------------------------------------------------- /_app/img/course2/lesson1/badmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course2/lesson1/badmap.png -------------------------------------------------------------------------------- /_app/img/course2/lesson2/customizecss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course2/lesson2/customizecss.png -------------------------------------------------------------------------------- /_app/img/course2/lesson2/dataimport.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course2/lesson2/dataimport.png -------------------------------------------------------------------------------- /_app/img/course2/lesson2/hexvalue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course2/lesson2/hexvalue.jpg -------------------------------------------------------------------------------- /_app/img/course2/lesson2/multiply.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course2/lesson2/multiply.png -------------------------------------------------------------------------------- /_app/img/course2/lesson2/styledmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course2/lesson2/styledmap.png -------------------------------------------------------------------------------- /_app/img/course2/lesson3/alltogether.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course2/lesson3/alltogether.gif -------------------------------------------------------------------------------- /_app/img/course2/lesson3/bubbleviz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course2/lesson3/bubbleviz.png -------------------------------------------------------------------------------- /_app/img/course2/lesson3/mag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course2/lesson3/mag.png -------------------------------------------------------------------------------- /_app/img/course2/lesson3/stamen.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course2/lesson3/stamen.gif -------------------------------------------------------------------------------- /_app/img/course2/lesson3/time.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course2/lesson3/time.png -------------------------------------------------------------------------------- /_app/img/course2/lesson3/together1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course2/lesson3/together1.png -------------------------------------------------------------------------------- /_app/img/course2/lesson4/addlabels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course2/lesson4/addlabels.png -------------------------------------------------------------------------------- /_app/img/course2/lesson4/labelsize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course2/lesson4/labelsize.png -------------------------------------------------------------------------------- /_app/img/course3/lesson1/example-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course3/lesson1/example-map.png -------------------------------------------------------------------------------- /_app/img/course3/lesson1/json-view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course3/lesson1/json-view.png -------------------------------------------------------------------------------- /_app/img/course3/lesson1/share-panel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course3/lesson1/share-panel.png -------------------------------------------------------------------------------- /_app/img/course3/lesson3/cartocss-simple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course3/lesson3/cartocss-simple.png -------------------------------------------------------------------------------- /_app/img/course3/lesson5/img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course3/lesson5/img1.png -------------------------------------------------------------------------------- /_app/img/course4/lesson1/filters-sql.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course4/lesson1/filters-sql.png -------------------------------------------------------------------------------- /_app/img/course4/lesson1/filters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course4/lesson1/filters.png -------------------------------------------------------------------------------- /_app/img/course4/lesson1/select-columns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course4/lesson1/select-columns.png -------------------------------------------------------------------------------- /_app/img/course4/lesson2/buffer-demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course4/lesson2/buffer-demo.png -------------------------------------------------------------------------------- /_app/img/course4/lesson2/buffer-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course4/lesson2/buffer-example.png -------------------------------------------------------------------------------- /_app/img/course4/lesson2/makeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course4/lesson2/makeline.png -------------------------------------------------------------------------------- /_app/img/course4/lesson2/stdistance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course4/lesson2/stdistance.png -------------------------------------------------------------------------------- /_app/img/course4/lesson3/img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course4/lesson3/img1.png -------------------------------------------------------------------------------- /_app/img/course4/lesson3/img2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course4/lesson3/img2.png -------------------------------------------------------------------------------- /_app/img/course4/lesson3/img3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course4/lesson3/img3.png -------------------------------------------------------------------------------- /_app/img/course5/data-observatory-baltimore/obs_search_with_gini_index.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course5/data-observatory-baltimore/obs_search_with_gini_index.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/australia_cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/australia_cat.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/bubble.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/bubble.gif -------------------------------------------------------------------------------- /_app/img/course6/lesson1/cluster_zoom.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/cluster_zoom.gif -------------------------------------------------------------------------------- /_app/img/course6/lesson1/cluster_zoom_2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/cluster_zoom_2.gif -------------------------------------------------------------------------------- /_app/img/course6/lesson1/cluster_zoom_3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/cluster_zoom_3.gif -------------------------------------------------------------------------------- /_app/img/course6/lesson1/crime_incidents.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/crime_incidents.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/crime_rate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/crime_rate.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/density_labels.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/density_labels.gif -------------------------------------------------------------------------------- /_app/img/course6/lesson1/divergent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/divergent.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/earthquakes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/earthquakes.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/earthquakes_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/earthquakes_1.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/earthquakes_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/earthquakes_2.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/equal_int.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/equal_int.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/filter.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/green_cyan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/green_cyan.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/heatmap.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/heatmap.gif -------------------------------------------------------------------------------- /_app/img/course6/lesson1/intensity.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/intensity.gif -------------------------------------------------------------------------------- /_app/img/course6/lesson1/larger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/larger.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/larger_center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/larger_center.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/line_layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/line_layer.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/oneclick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/oneclick.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/point_layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/point_layer.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/polygon_layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/polygon_layer.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/popup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/popup.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/rainbow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/rainbow.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/seq_color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/seq_color.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/storm_density.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/storm_density.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/storms_usa_2014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/storms_usa_2014.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/storms_usa_2014_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/storms_usa_2014_2.png -------------------------------------------------------------------------------- /_app/img/course6/lesson1/torque.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/torque.gif -------------------------------------------------------------------------------- /_app/img/course6/lesson1/torque_cat.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/torque_cat.gif -------------------------------------------------------------------------------- /_app/img/course6/lesson1/torque_cu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson1/torque_cu.gif -------------------------------------------------------------------------------- /_app/img/course6/lesson2/brightness.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson2/brightness.png -------------------------------------------------------------------------------- /_app/img/course6/lesson2/color1-rgTxt-fix_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson2/color1-rgTxt-fix_2.png -------------------------------------------------------------------------------- /_app/img/course6/lesson2/color1-rgTxt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson2/color1-rgTxt.png -------------------------------------------------------------------------------- /_app/img/course6/lesson2/color_wheel_itten.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson2/color_wheel_itten.png -------------------------------------------------------------------------------- /_app/img/course6/lesson2/handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson2/handle.png -------------------------------------------------------------------------------- /_app/img/course6/lesson2/hue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson2/hue.png -------------------------------------------------------------------------------- /_app/img/course6/lesson2/lighter_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson2/lighter_red.png -------------------------------------------------------------------------------- /_app/img/course6/lesson2/lighter_red_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson2/lighter_red_2.png -------------------------------------------------------------------------------- /_app/img/course6/lesson2/lighter_red_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson2/lighter_red_3.png -------------------------------------------------------------------------------- /_app/img/course6/lesson2/low_contrast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson2/low_contrast.png -------------------------------------------------------------------------------- /_app/img/course6/lesson2/reduction1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson2/reduction1.png -------------------------------------------------------------------------------- /_app/img/course6/lesson2/reduction2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson2/reduction2.png -------------------------------------------------------------------------------- /_app/img/course6/lesson2/saturation_brightness0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson2/saturation_brightness0.png -------------------------------------------------------------------------------- /_app/img/course6/lesson2/saturation_brightness100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson2/saturation_brightness100.png -------------------------------------------------------------------------------- /_app/img/course6/lesson2/saturation_brightness50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson2/saturation_brightness50.png -------------------------------------------------------------------------------- /_app/img/course6/lesson2/sim_cnt_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson2/sim_cnt_1.png -------------------------------------------------------------------------------- /_app/img/course6/lesson2/sim_cnt_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson2/sim_cnt_2.png -------------------------------------------------------------------------------- /_app/img/course6/lesson2/simultaneous_contrast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson2/simultaneous_contrast.png -------------------------------------------------------------------------------- /_app/img/course6/lesson2/size_contrast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson2/size_contrast.png -------------------------------------------------------------------------------- /_app/img/course6/lesson2/size_contrast2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson2/size_contrast2.png -------------------------------------------------------------------------------- /_app/img/course6/lesson3/abel_picker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson3/abel_picker.png -------------------------------------------------------------------------------- /_app/img/course6/lesson3/blue_33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson3/blue_33.png -------------------------------------------------------------------------------- /_app/img/course6/lesson3/blue_full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson3/blue_full.png -------------------------------------------------------------------------------- /_app/img/course6/lesson3/cdb_rb_divergent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson3/cdb_rb_divergent.png -------------------------------------------------------------------------------- /_app/img/course6/lesson3/cdb_seq_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson3/cdb_seq_green.png -------------------------------------------------------------------------------- /_app/img/course6/lesson3/color_brewer_red_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson3/color_brewer_red_blue.png -------------------------------------------------------------------------------- /_app/img/course6/lesson3/color_wheel_itten.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson3/color_wheel_itten.png -------------------------------------------------------------------------------- /_app/img/course6/lesson3/divergent_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson3/divergent_default.png -------------------------------------------------------------------------------- /_app/img/course6/lesson3/editor_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson3/editor_default.png -------------------------------------------------------------------------------- /_app/img/course6/lesson3/editor_lighten.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson3/editor_lighten.png -------------------------------------------------------------------------------- /_app/img/course6/lesson3/perceptual_rainbow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson3/perceptual_rainbow.png -------------------------------------------------------------------------------- /_app/img/course6/lesson3/rainbow_brighter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson3/rainbow_brighter.png -------------------------------------------------------------------------------- /_app/img/course6/lesson3/rb_divergent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson3/rb_divergent.png -------------------------------------------------------------------------------- /_app/img/course6/lesson3/red_66.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson3/red_66.png -------------------------------------------------------------------------------- /_app/img/course6/lesson3/red_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson3/red_blue.png -------------------------------------------------------------------------------- /_app/img/course6/lesson3/red_full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson3/red_full.png -------------------------------------------------------------------------------- /_app/img/course6/lesson3/red_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson3/red_green.png -------------------------------------------------------------------------------- /_app/img/course6/lesson3/uneven_rainbow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson3/uneven_rainbow.png -------------------------------------------------------------------------------- /_app/img/course6/lesson3/valencia_lighten.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson3/valencia_lighten.png -------------------------------------------------------------------------------- /_app/img/course6/lesson3/valencia_value_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson3/valencia_value_15.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/clear.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/color-burn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/color-burn.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/color-dodge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/color-dodge.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/color.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/color_burn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/color_burn.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/color_dodge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/color_dodge.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/contrast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/contrast.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/darken-use-case.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/darken-use-case.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/darken.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/darken.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/difference.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/difference.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/dst-atop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/dst-atop.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/dst-in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/dst-in.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/dst-out.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/dst-out.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/dst-over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/dst-over.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/dst.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/dst.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/exclusion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/exclusion.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/grain-extract.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/grain-extract.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/grain-merge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/grain-merge.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/hard-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/hard-light.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/hue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/hue.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/invert-rgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/invert-rgb.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/invert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/invert.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/lighten.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/lighten.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/london_crime_incidents.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/london_crime_incidents.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/minus.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/multiply.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/multiply.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/multiply_anim.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/multiply_anim.gif -------------------------------------------------------------------------------- /_app/img/course6/lesson4/overlay-use-case-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/overlay-use-case-1.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/overlay-use-case-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/overlay-use-case-2.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/overlay.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/plus.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/saturation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/saturation.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/screen-use-case.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/screen-use-case.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/screen.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/soft-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/soft-light.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/src-atop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/src-atop.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/src-in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/src-in.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/src-out.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/src-out.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/src-over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/src-over.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/src.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/src.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/value.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/value.png -------------------------------------------------------------------------------- /_app/img/course6/lesson4/xor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/course6/lesson4/xor.png -------------------------------------------------------------------------------- /_app/img/icons/academy-lite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/icons/academy-lite.png -------------------------------------------------------------------------------- /_app/img/icons/academy-lite.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 4 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /_app/img/icons/beginners-course.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/icons/beginners-course.png -------------------------------------------------------------------------------- /_app/img/icons/beginners-course.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /_app/img/icons/cartojs-and-external-apis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/icons/cartojs-and-external-apis.png -------------------------------------------------------------------------------- /_app/img/icons/cartojs-and-external-apis.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /_app/img/icons/cartojs-ground-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/icons/cartojs-ground-up.png -------------------------------------------------------------------------------- /_app/img/icons/cartojs-ground-up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /_app/img/icons/community.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/icons/community.png -------------------------------------------------------------------------------- /_app/img/icons/community.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /_app/img/icons/design-for-beginners.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/icons/design-for-beginners.png -------------------------------------------------------------------------------- /_app/img/icons/design-for-beginners.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 2 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /_app/img/icons/intermediate-design.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/icons/intermediate-design.png -------------------------------------------------------------------------------- /_app/img/icons/intermediate-design.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /_app/img/icons/sql-postgis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/img/icons/sql-postgis.png -------------------------------------------------------------------------------- /_app/img/icons/sql-postgis.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 3 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /_app/sitemap.xml: -------------------------------------------------------------------------------- 1 | --- 2 | layout: null 3 | sitemap: false 4 | --- 5 | 6 | 7 | 10 | 11 | {% for page in site.pages %} 12 | {% include sitemap.html %} 13 | {% endfor %} 14 | {% for collection in site.collections %} 15 | {% capture label %}{{ collection.label }}{% endcapture %} 16 | {% for page in site[label] %} 17 | {% include sitemap.html %} 18 | {% endfor %} 19 | {% endfor %} 20 | 21 | -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-1/CartoDB-js-lesson1-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Lesson 1 | CARTO.js | CartoDB 5 | 6 | 7 | 8 | 9 | 10 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-1/jsfiddle_demo/demo.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | width: 100%; 3 | margin: 0; 4 | padding: 0; 5 | } 6 | 7 | #map { 8 | border: 1px solid black; 9 | height: 480px; 10 | margin: 25px auto; 11 | width: 600px; 12 | } 13 | -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-1/jsfiddle_demo/demo.details: -------------------------------------------------------------------------------- 1 | --- 2 | name: CARTO.js Lesson 1 3 | description: First map using createLayer 4 | authors: 5 | - Andy Eschbacher 6 | resources: 7 | - http://libs.cartocdn.com/cartodb.js/v3/3.14/cartodb.js 8 | - http://libs.cartocdn.com/cartodb.js/v3/3.14/themes/css/cartodb.css 9 | normalize_css: no 10 | wrap: b 11 | ... 12 | -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-1/jsfiddle_demo/demo.html: -------------------------------------------------------------------------------- 1 |
-------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-1/jsfiddle_demo/demo.js: -------------------------------------------------------------------------------- 1 | window.onload = function() { 2 | var vizjson = 'https://documentation.carto.com/api/v2/viz/23f2abd6-481b-11e4-8fb1-0e4fddd5de28/viz.json'; 3 | 4 | // Choose center and zoom level 5 | var options = { 6 | center: [41.8369, -87.6847], // Chicago 7 | zoom: 7 8 | } 9 | 10 | // Instantiate map on specified DOM element 11 | var map_object = new L.Map('map', options); 12 | 13 | // Add a basemap to the map object just created 14 | L.tileLayer('http://tile.stamen.com/toner/{z}/{x}/{y}.png', { 15 | attribution: 'Stamen' 16 | }).addTo(map_object); 17 | 18 | // Add CartoDB data layers 19 | cartodb.createLayer(map_object,vizjson) 20 | .addTo(map_object); 21 | } 22 | -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-2/CartoDB-js-lesson2-multilayer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Lesson 2 | CARTO.js | CartoDB 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 |
53 |
54 |

CARTO.js from the ground up, Lesson 2

55 |
56 | 57 | 58 | 59 | 60 | 61 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-2/CartoDB-js-lesson2-ondone.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Lesson 2 | CARTO.js | CartoDB 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 |
53 |
54 |

CARTO.js from the ground up, Lesson 2

55 |
56 | 57 | 58 | 59 | 60 | 61 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-2/CartoDB-js-lesson2-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Lesson 2 | CARTO.js | CartoDB 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 |
53 |
54 |

CARTO.js from the ground up, Lesson 2

55 |
56 | 57 | 58 | 59 | 60 | 61 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-2/jsfiddle_demo_layercontrols/demo.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | width: 100%; 3 | margin: 0; 4 | padding: 0; 5 | } 6 | 7 | #map { 8 | height: 480px; 9 | margin: 25px auto; 10 | width: 600px; 11 | } -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-2/jsfiddle_demo_layercontrols/demo.details: -------------------------------------------------------------------------------- 1 | --- 2 | name: CARTO.js Lesson 2 3 | description: Layer controls using .hide() and .show() 4 | authors: 5 | - Andy Eschbacher 6 | resources: 7 | - https://carto.com/academy/css/cdbui.css 8 | - http://libs.cartocdn.com/cartodb.js/v3/3.14/cartodb.js 9 | - http://libs.cartocdn.com/cartodb.js/v3/3.14/themes/css/cartodb.css 10 | normalize_css: no 11 | wrap: b 12 | ... 13 | -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-2/jsfiddle_demo_layercontrols/demo.html: -------------------------------------------------------------------------------- 1 |
2 |

Layer controls

3 |
4 | 5 | 6 |
-------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-2/jsfiddle_demo_layercontrols/demo.js: -------------------------------------------------------------------------------- 1 | window.onload = function() { 2 | // Instantiate new map object, place it in 'map' element 3 | var map_object = new L.Map('map', { 4 | center: [43,0], // Southern France 5 | zoom: 3 6 | }); 7 | 8 | // Put layer data into a JS object 9 | var layerSource = { 10 | user_name: 'documentation', 11 | type: 'cartodb', 12 | sublayers: [{ 13 | sql: "SELECT * FROM africa_adm0", // African countries 14 | cartocss: '#africa_adm0{polygon-fill:#FF6600;polygon-opacity:0.7;line-color:#FFF;line-width:1;line-opacity:1;}' 15 | }, 16 | { 17 | sql: "SELECT * FROM ne_50m_lakes", // Natural and artificial lakes 18 | cartocss: '#ne_50m_lakes {polygon-fill:#0000FF;}' 19 | }] 20 | } 21 | 22 | // For storing the sublayers 23 | var sublayers = []; 24 | 25 | // Pull tiles from OpenStreetMap 26 | L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { 27 | attribution: '© OpenStreetMap contributors' 28 | }).addTo(map_object); 29 | 30 | // Add data layer to your map 31 | cartodb.createLayer(map_object,layerSource) 32 | .addTo(map_object) 33 | .done(function(layer) { 34 | for (var i = 0; i < layer.getSubLayerCount(); i++) { 35 | sublayers[i] = layer.getSubLayer(i); 36 | alert("Congrats, you added sublayer #" + i + "!"); 37 | } 38 | }) 39 | .error(function(err) { 40 | console.log("error: " + err); 41 | }); 42 | 43 | var sublayer0Shown = true; 44 | $("#sublayer0").on('click', function() { 45 | if (sublayer0Shown) { 46 | sublayers[0].hide(); 47 | } else { 48 | sublayers[0].show(); 49 | } 50 | sublayer0Shown = !sublayer0Shown; 51 | }); 52 | 53 | var sublayer1Shown = true; 54 | $("#sublayer1").on('click', function() { 55 | if (sublayer1Shown) { 56 | sublayers[1].hide(); 57 | } else { 58 | sublayers[1].show(); 59 | } 60 | sublayer1Shown = !sublayer1Shown; 61 | }); 62 | } 63 | -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-2/jsfiddle_demo_multilayer/demo.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | width: 100%; 3 | margin: 0; 4 | padding: 0; 5 | } 6 | 7 | #map { 8 | height: 480px; 9 | margin: 25px auto; 10 | width: 600px; 11 | } -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-2/jsfiddle_demo_multilayer/demo.details: -------------------------------------------------------------------------------- 1 | --- 2 | name: CARTO.js Lesson 2 3 | description: Testing out multiple layer maps in CARTO.js 4 | authors: 5 | - Andy Eschbacher 6 | resources: 7 | - http://libs.cartocdn.com/cartodb.js/v3/3.14/cartodb.js 8 | - http://libs.cartocdn.com/cartodb.js/v3/3.14/themes/css/cartodb.css 9 | normalize_css: no 10 | wrap: b 11 | ... 12 | -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-2/jsfiddle_demo_multilayer/demo.html: -------------------------------------------------------------------------------- 1 |
-------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-2/jsfiddle_demo_multilayer/demo.js: -------------------------------------------------------------------------------- 1 | window.onload = function() { 2 | // Instantiate new map object, place it in 'map' element 3 | var map_object = new L.Map('map', { 4 | center: [43,0], // Southern France 5 | zoom: 3 6 | }); 7 | 8 | // Put layer data into a JS object 9 | var layerSource = { 10 | user_name: 'documentation', 11 | type: 'cartodb', 12 | sublayers: [{ 13 | sql: "SELECT * FROM africa_adm0", // African countries 14 | cartocss: '#africa_adm0{polygon-fill:#FF6600;polygon-opacity:0.7;line-color:#FFF;line-width:1;line-opacity:1;}' 15 | }, 16 | { 17 | sql: "SELECT * FROM ne_50m_lakes", // Natural and artificial lakes 18 | cartocss: '#ne_50m_lakes {polygon-fill: #0000FF;}' 19 | }] 20 | } 21 | 22 | // For storing the sublayers 23 | var sublayers = []; 24 | 25 | // Pull tiles from OpenStreetMap 26 | L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { 27 | attribution: '© OpenStreetMap contributors' 28 | }).addTo(map_object); 29 | 30 | // Add data layer to your map 31 | cartodb.createLayer(map_object,layerSource) 32 | .addTo(map_object) 33 | .done(function(layer) { 34 | for (var i = 0; i < layer.getSubLayerCount(); i++) { 35 | sublayers[i] = layer.getSubLayer(i); 36 | alert("Congrats, you added sublayer #" + i + "!"); 37 | } 38 | }) 39 | .error(function(err) { 40 | console.log("error: " + err); 41 | }); 42 | } 43 | -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-2/jsfiddle_demo_ondone/demo.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | width: 100%; 3 | margin: 0; 4 | padding: 0; 5 | } 6 | 7 | #map { 8 | border: 1px solid black; 9 | height: 480px; 10 | margin: 25px auto; 11 | width: 600px; 12 | } -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-2/jsfiddle_demo_ondone/demo.details: -------------------------------------------------------------------------------- 1 | --- 2 | name: CARTO.js Lesson 2 | .ondone demo 3 | description: Testing out .done and .error 4 | authors: 5 | - Andy Eschbacher 6 | resources: 7 | - http://libs.cartocdn.com/cartodb.js/v3/3.14/cartodb.js 8 | - http://libs.cartocdn.com/cartodb.js/v3/3.14/themes/css/cartodb.css 9 | normalize_css: no 10 | wrap: b 11 | ... 12 | -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-2/jsfiddle_demo_ondone/demo.html: -------------------------------------------------------------------------------- 1 |
-------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-2/jsfiddle_demo_ondone/demo.js: -------------------------------------------------------------------------------- 1 | window.onload = function() { 2 | var vizjson_url = 'https://documentation.carto.com/api/v2/viz/23f2abd6-481b-11e4-8fb1-0e4fddd5de28/viz.json'; 3 | 4 | cartodb.createVis('map', vizjson_url) 5 | .done(function(vis, layers) { 6 | // do stuff 7 | alert("Layers has " + layers.length + " layers."); 8 | }) 9 | .error(function(err) { 10 | // report error 11 | console.log("An error occurred: " + err); 12 | }); 13 | } 14 | -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-2/jsfiddle_demo_toggles_and_slider/demo.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | width: 100%; 3 | margin: 0; 4 | padding: 0; 5 | } 6 | 7 | #map { 8 | height: 480px; 9 | margin: 25px auto; 10 | width: 600px; 11 | } -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-2/jsfiddle_demo_toggles_and_slider/demo.details: -------------------------------------------------------------------------------- 1 | --- 2 | name: CARTO.js Lesson 2 3 | description: Opacity Slider and Layer Toggles 4 | authors: 5 | - Andy Eschbacher 6 | resources: 7 | - http://libs.cartocdn.com/cartodb.js/v3/3.14/themes/css/cartodb.css 8 | - http://code.jquery.com/ui/1.11.1/themes/smoothness/jquery-ui.css 9 | - https://carto.com/academy/css/cdbui.css 10 | - http://libs.cartocdn.com/cartodb.js/v3/3.14/cartodb.js 11 | - http://code.jquery.com/jquery-1.10.2.js 12 | - http://code.jquery.com/ui/1.11.1/jquery-ui.js 13 | normalize_css: no 14 | wrap: b 15 | ... 16 | -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-2/jsfiddle_demo_toggles_and_slider/demo.html: -------------------------------------------------------------------------------- 1 |
2 |

Layer controls

3 |
4 | 5 | 6 |
7 |
8 |

9 | 10 | 11 |

12 | 13 |
14 |
-------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-2/jsfiddle_demo_toggles_and_slider/demo.js: -------------------------------------------------------------------------------- 1 | window.onload = function() { 2 | // Instantiate new map object, place it in 'map' element 3 | var map_object = new L.Map('map', { 4 | center: [43,0], // Southern France 5 | zoom: 3 6 | }); 7 | 8 | // Put layer data into a JS object 9 | var layerSource = { 10 | user_name: 'documentation', 11 | type: 'cartodb', 12 | sublayers: [{ 13 | sql: "SELECT * FROM africa_adm0", // African countries 14 | cartocss: '#africa_adm0{polygon-fill:#FF6600;polygon-opacity:0.7;line-color:#FFF;line-width:1;line-opacity:1;}' 15 | }, 16 | { 17 | sql: "SELECT * FROM ne_50m_lakes", // Natural and artificial lakes 18 | cartocss: '#ne_50m_lakes {polygon-fill:#0000FF;}' 19 | }] 20 | } 21 | 22 | // For storing the sublayers 23 | var sublayers = []; 24 | 25 | // Pull tiles from OpenStreetMap 26 | L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { 27 | attribution: '© OpenStreetMap contributors' 28 | }).addTo(map_object); 29 | 30 | // Add data layer to your map 31 | cartodb.createLayer(map_object,layerSource) 32 | .addTo(map_object) 33 | .done(function(layer) { 34 | for (var i = 0; i < layer.getSubLayerCount(); i++) { 35 | sublayers[i] = layer.getSubLayer(i); 36 | alert("Congrats, you added sublayer #" + i + "!"); 37 | } 38 | var op = 0.7; 39 | layer.setOpacity(op); 40 | 41 | $(function() { 42 | $( "#slider-range-min" ).slider({ 43 | range: "min", 44 | value: 70, 45 | min: 0, 46 | max: 100, 47 | slide: function( event, ui ) { 48 | $( "#amount" ).val(ui.value + "%" ); 49 | // scale to [0,1] from [0,100] 50 | op = $( "#slider-range-min" ).slider( "value" ) / 100; 51 | layer.setOpacity(op); 52 | } 53 | }); 54 | $( "#amount" ).val( $( "#slider-range-min" ).slider( "value" ) + "%"); 55 | }); 56 | }) 57 | .error(function(err) { 58 | console.log("error: " + err); 59 | }); 60 | 61 | var sublayer0Shown = true; 62 | $("#sublayer0").on('click', function() { 63 | if (sublayer0Shown) { 64 | sublayers[0].hide(); 65 | } else { 66 | sublayers[0].show(); 67 | } 68 | sublayer0Shown = !sublayer0Shown; 69 | }); 70 | 71 | var sublayer1Shown = true; 72 | $("#sublayer1").on('click', function() { 73 | if (sublayer1Shown) { 74 | sublayers[1].hide(); 75 | } else { 76 | sublayers[1].show(); 77 | } 78 | sublayer1Shown = !sublayer1Shown; 79 | }); 80 | } 81 | -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-3/CartoDB-js-lesson3-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Lesson 3 | CARTO.js | CartoDB 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 68 | 69 | 72 | 73 | 74 |
75 | 76 | 77 | 78 | 79 | 80 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-3/jsfiddle_demo_cartocss/demo.css: -------------------------------------------------------------------------------- 1 | html, body, #map { 2 | height: 100%; 3 | padding: 0; 4 | margin: 0; 5 | } 6 | #cartocss { 7 | position: absolute; 8 | top: 20px; 9 | right: 20px; 10 | } 11 | #sql { 12 | position: absolute; 13 | top: 20px; 14 | right: 292px; 15 | } 16 | .layer_selector { 17 | background: rgba(255,255,255,0.9); 18 | border-radius: 5px; 19 | padding: 0; 20 | border: 1px solid #999; 21 | width: 250px; 22 | } 23 | 24 | .layer_selector > p { 25 | padding: 15px 30px; 26 | border-bottom: 1px solid #999; 27 | } 28 | 29 | .layer_selector ul { 30 | padding: 0; margin: 0; 31 | list-style-type: none; 32 | } 33 | .layer_selector li { 34 | padding: 15px 30px; 35 | font-family: Helvetica, Arial; 36 | font-size: 13px; 37 | color: #444; 38 | cursor: pointer; 39 | } 40 | .layer_selector li:not(:last-child) { 41 | border-bottom: 1px solid #999; 42 | } 43 | .layer_selector li:hover { 44 | background-color: #F0F0F0; 45 | cursor: pointer; 46 | } 47 | .layer_selector li.sql_selected, 48 | .layer_selector li.cartocss_selected { 49 | background-color: #A6CEE3; 50 | } -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-3/jsfiddle_demo_cartocss/demo.details: -------------------------------------------------------------------------------- 1 | --- 2 | name: CARTO.js Lesson 3 | CartoCSS Demo 3 | description: Changing CartoCSS in CARTO.js 4 | authors: 5 | - Andy Eschbacher 6 | resources: 7 | - http://libs.cartocdn.com/cartodb.js/v3/3.14/cartodb.js 8 | - http://libs.cartocdn.com/cartodb.js/v3/3.14/themes/css/cartodb.css 9 | normalize_css: no 10 | wrap: b 11 | ... 12 | -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-3/jsfiddle_demo_cartocss/demo.js: -------------------------------------------------------------------------------- 1 | window.onload = function() { 2 | 3 | var tableName = "earthquakes_cdbjs_lesson3"; 4 | 5 | var layerSource = { 6 | user_name: 'documentation', 7 | type: 'cartodb', 8 | sublayers: [{ 9 | sql: "SELECT * FROM " + tableName, // Earthquake data 10 | cartocss: $("#simple").html() // Simple visualization 11 | }] 12 | } 13 | 14 | // Instantiate new map object, place it in 'map' element 15 | var map_object = new L.Map('map', { 16 | center: [37.7741154,-122.4437914], // San Francisco 17 | zoom: 2 18 | }); 19 | 20 | // Create layer selector 21 | function createSelector(layer) { 22 | var cartocss = ""; 23 | var $options = $(".layer_selector").find("li"); 24 | $options.click(function(e) { 25 | var $li = $(e.target); 26 | var selected = $li.attr('data'); 27 | 28 | $options.removeClass('cartocss_selected'); 29 | $li.addClass('cartocss_selected'); 30 | 31 | cartocss = $('#'+selected).text(); 32 | 33 | layer.setCartoCSS(cartocss); 34 | }); 35 | } 36 | 37 | // Pull tiles from CartoDB's basemaps 38 | L.tileLayer('http://{s}.basemaps.cartocdn.com/dark_nolabels/{z}/{x}/{y}.png', { 39 | attribution: '© OpenStreetMap<\/a> contributors' 40 | }).addTo(map_object); 41 | 42 | // for storing sublayer outside of createlayer 43 | var sublayers; 44 | 45 | // Add data layer to your map 46 | cartodb.createLayer(map_object,layerSource) 47 | .addTo(map_object) 48 | .done(function(layer) { 49 | sublayer = layer.getSubLayer(0); 50 | createSelector(sublayer); 51 | }) 52 | .error(function(err) { 53 | console.log("error: " + err); 54 | }); 55 | } -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-3/jsfiddle_demo_cartocss_sql/demo.css: -------------------------------------------------------------------------------- 1 | html, body, #map { 2 | height: 100%; 3 | padding: 0; 4 | margin: 0; 5 | } 6 | #cartocss { 7 | position: absolute; 8 | top: 20px; 9 | right: 20px; 10 | } 11 | #sql { 12 | position: absolute; 13 | top: 20px; 14 | right: 292px; 15 | } 16 | .layer_selector { 17 | background: rgba(255,255,255,0.9); 18 | border-radius: 5px; 19 | padding: 0; 20 | border: 1px solid #999; 21 | width: 250px; 22 | } 23 | 24 | .layer_selector > p { 25 | padding: 15px 30px; 26 | border-bottom: 1px solid #999; 27 | } 28 | 29 | .layer_selector ul { 30 | padding: 0; margin: 0; 31 | list-style-type: none; 32 | } 33 | .layer_selector li { 34 | padding: 15px 30px; 35 | font-family: Helvetica, Arial; 36 | font-size: 13px; 37 | color: #444; 38 | cursor: pointer; 39 | } 40 | .layer_selector li:not(:last-child) { 41 | border-bottom: 1px solid #999; 42 | } 43 | .layer_selector li:hover { 44 | background-color: #F0F0F0; 45 | cursor: pointer; 46 | } 47 | .layer_selector li.sql_selected, 48 | .layer_selector li.cartocss_selected { 49 | background-color: #A6CEE3; 50 | } -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-3/jsfiddle_demo_cartocss_sql/demo.details: -------------------------------------------------------------------------------- 1 | --- 2 | name: CARTO.js Lesson 3 | CartoCSS Demo 3 | description: Changing CartoCSS in CARTO.js 4 | authors: 5 | - Andy Eschbacher 6 | resources: 7 | - http://libs.cartocdn.com/cartodb.js/v3/3.14/cartodb.js 8 | - http://libs.cartocdn.com/cartodb.js/v3/3.14/themes/css/cartodb.css 9 | normalize_css: no 10 | wrap: b 11 | ... 12 | -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-3/jsfiddle_demo_cartocss_sql/demo.js: -------------------------------------------------------------------------------- 1 | window.onload = function() { 2 | 3 | var tableName = "earthquakes_cdbjs_lesson3"; 4 | 5 | var layerSource = { 6 | user_name: 'documentation', 7 | type: 'cartodb', 8 | sublayers: [{ 9 | sql: "SELECT * FROM " + tableName, // Earthquake data 10 | cartocss: $("#simple").html() // Simple visualization 11 | }] 12 | } 13 | 14 | // Instantiate new map object, place it in 'map' element 15 | var map_object = new L.Map('map', { 16 | center: [37.7741154,-122.4437914], // San Francisco 17 | zoom: 2 18 | }); 19 | 20 | // Create layer selector 21 | function createSelector(layer) { 22 | var condition = ""; 23 | var $options = $(".layer_selector").find("li"); 24 | $options.click(function(e) { 25 | var $li = $(e.target); 26 | var selected = $li.attr('data'); 27 | var type = $li.data('type'); 28 | 29 | if (type === "cartocss") { 30 | $options.removeClass('cartocss_selected'); 31 | if (selected !== "simple") { 32 | $li.addClass('cartocss_selected'); 33 | } 34 | condition = $('#'+selected).text(); 35 | layer.setCartoCSS(condition); 36 | } else { 37 | $options.removeClass('sql_selected'); 38 | if (selected !== "") { 39 | $li.addClass('sql_selected'); 40 | } 41 | if (selected.indexOf('guinea') !== -1) { 42 | map_object.setView(L.latLng([-9.5, 147.116667]),6); 43 | } else { 44 | map_object.setView(L.latLng([37.7741154,-122.4437914]),2); 45 | } 46 | layer.setSQL("SELECT * FROM " + tableName + selected); 47 | } 48 | }); 49 | } 50 | 51 | // Pull tiles from CartoDB's basemaps 52 | L.tileLayer('http://{s}.basemaps.cartocdn.com/dark_nolabels/{z}/{x}/{y}.png', { 53 | attribution: '© OpenStreetMap<\/a> contributors' 54 | }).addTo(map_object); 55 | 56 | // for storing sublayer outside of createlayer 57 | var sublayers; 58 | 59 | // Add data layer to your map 60 | cartodb.createLayer(map_object,layerSource) 61 | .addTo(map_object) 62 | .done(function(layer) { 63 | sublayer = layer.getSubLayer(0); 64 | createSelector(sublayer); 65 | }) 66 | .error(function(err) { 67 | console.log("error: " + err); 68 | }); 69 | } -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-4/template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Map Academy | CARTO.js & Torque.js 5 | 6 | 7 | 8 | 61 | 62 | 63 | 64 | 65 |
66 | 67 | 68 | 69 | 70 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-5/named-maps-example.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Named Maps Tutorial | CartoDB 5 | 6 | 7 | 8 | 9 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /_app/t/03-cartodbjs-ground-up/lesson-5/named-maps-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Named Maps Tutorial | CartoDB 5 | 6 | 7 | 8 | 9 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /_app/t/06-intermediate-design/lesson-2/color1-rgTxt-fix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/t/06-intermediate-design/lesson-2/color1-rgTxt-fix.png -------------------------------------------------------------------------------- /_app/t/06-intermediate-design/lesson-2/color1-rgTxt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/t/06-intermediate-design/lesson-2/color1-rgTxt.png -------------------------------------------------------------------------------- /_app/t/06-intermediate-design/lesson-2/handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CartoDB/academy/dc9db2e0c0d8b9de36dea5c2e10f394bdb089c35/_app/t/06-intermediate-design/lesson-2/handle.png -------------------------------------------------------------------------------- /_app/t/06-intermediate-design/lesson-2/imgslider-2.0.1-min.css: -------------------------------------------------------------------------------- 1 | .slider{width:100%;height:auto;padding:0;position:relative}.slider .right.image{position:absolute;z-index:1;top:0;left:0}.slider .left.image{position:relative;z-index:2;border-right:3px solid #fff;margin-right:-5px;overflow:hidden}.slider .instruction{position:absolute;top:50%;z-index:1000;width:95%}.slider .instruction p{background:#fff;display:inline;padding:1%;font-size:1em;text-transform:uppercase} -------------------------------------------------------------------------------- /_app/t/06-intermediate-design/lesson-2/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Slider Test 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 |
17 |
18 | 19 |
20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /_app/t/07-cartojs-and-external-apis/lesson-1/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Google Street View 5 | 6 | 7 | 8 | 9 | 33 | 34 | 35 | 36 |
37 | 38 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /_app/t/07-cartojs-and-external-apis/lesson-1/template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CARTO.js | Google Street View 5 | 6 | 7 | 8 | 9 | 33 | 34 | 35 |
36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /_app/t/07-cartojs-and-external-apis/lesson-2/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Driving directions to clicked point | CARTO.js 5 | 6 | 7 | 8 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /_app/t/07-cartojs-and-external-apis/lesson-2/template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CARTO.js | Google Driving Directions 5 | 6 | 7 | 8 | 9 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /_config-prod.yml: -------------------------------------------------------------------------------- 1 | baseurl: '/academy' 2 | url: 'https://carto.com' 3 | 4 | analytics_property_id: UA-20934186-25 5 | hubspot_id: 474999 6 | -------------------------------------------------------------------------------- /_config-staging.yml: -------------------------------------------------------------------------------- 1 | baseurl: '/academy' 2 | url: 'https://carto-staging.com' 3 | 4 | cartodb-baseurl: 'https://carto-staging.com' 5 | blog-baseurl: 'https://carto-staging.com/blog' 6 | github-baseurl: 'http://github.com/CartoDB/academy' 7 | 8 | analytics_property_id: '' 9 | hubspot_id: '' 10 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cartodb-docs", 3 | "private": true, 4 | "devDependencies": { 5 | "modernizr": "~2.8.3", 6 | "jquery": "~2.1.4", 7 | "underscore": "~1.8.3", 8 | "backbone": "~1.2.3" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /grunt-aws.development.json: -------------------------------------------------------------------------------- 1 | { 2 | "accessKeyId": "...", 3 | "secretAccessKey": "...", 4 | "bucket": "...", 5 | "fastly": "..." 6 | } 7 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cartodb-academy", 3 | "version": "0.1.0", 4 | "author": "Carlos Matallín", 5 | "dependencies": { 6 | "autoprefixer": "^6.0.3", 7 | "grunt": "^0.4.5", 8 | "grunt-aws-s3": "^0.14.0", 9 | "grunt-babel": "^5.0.3", 10 | "grunt-browser-sync": "^2.1.3", 11 | "grunt-concurrent": "^2.0.3", 12 | "grunt-contrib-clean": "^0.6.0", 13 | "grunt-contrib-compress": "^0.13.0", 14 | "grunt-contrib-concat": "^0.5.1", 15 | "grunt-contrib-copy": "^0.8.1", 16 | "grunt-contrib-cssmin": "^0.14.0", 17 | "grunt-contrib-htmlmin": "^0.5.0", 18 | "grunt-contrib-imagemin": "^0.9.4", 19 | "grunt-contrib-uglify": "^0.9.2", 20 | "grunt-contrib-watch": "^0.6.1", 21 | "grunt-filerev": "^2.3.1", 22 | "grunt-modernizr": "^1.0.0", 23 | "grunt-postcss": "^0.6.0", 24 | "grunt-sass": "^1.0.0", 25 | "grunt-shell": "^1.1.2", 26 | "grunt-svgmin": "^2.0.1", 27 | "grunt-usemin": "^3.1.1", 28 | "jit-grunt": "^0.9.1", 29 | "time-grunt": "^1.2.1" 30 | }, 31 | "scripts": { 32 | "build": "grunt build --target=${NODE_ENV:=production} && echo ${NODE_ENV}" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /robots.production.txt: -------------------------------------------------------------------------------- 1 | # https://support.google.com/webmasters/answer/6062608 2 | 3 | User-agent: * 4 | Disallow: 5 | 6 | Sitemap: https://carto.com/academy/sitemap.xml 7 | -------------------------------------------------------------------------------- /robots.staging.txt: -------------------------------------------------------------------------------- 1 | # https://support.google.com/webmasters/answer/6062608 2 | 3 | User-agent: * 4 | Disallow: / 5 | --------------------------------------------------------------------------------