├── .gitignore ├── blog ├── contents │ ├── archive.json │ ├── feed.json │ ├── authors │ │ ├── steve.json │ │ └── ashley.json │ ├── articles │ │ ├── hello-world │ │ │ └── index.md │ │ ├── twii1 │ │ │ └── index.md │ │ ├── twii3 │ │ │ └── index.md │ │ └── twii2 │ │ │ └── index.md │ ├── about.md │ └── css │ │ └── main.css ├── readme.md ├── package.json ├── templates │ ├── author.jade │ ├── article.jade │ ├── index.jade │ ├── feed.jade │ ├── archive.jade │ └── layout.jade ├── config.json ├── plugins │ └── paginator.coffee └── css │ └── main.css ├── public ├── images │ ├── logo.png │ └── rhizome.jpg ├── vendor │ └── Skeleton-2.0.4 │ │ ├── images │ │ └── favicon.png │ │ ├── index.html │ │ └── css │ │ ├── normalize.css │ │ └── skeleton.css └── styles │ └── custom.css ├── .travis.yml ├── deploy.sh ├── package.json ├── README.md ├── resources.html ├── index.html └── code-of-conduct.html /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | blog/**/*.html 3 | blog/*.xml 4 | -------------------------------------------------------------------------------- /blog/contents/archive.json: -------------------------------------------------------------------------------- 1 | { 2 | "template": "archive.jade" 3 | } 4 | -------------------------------------------------------------------------------- /blog/contents/feed.json: -------------------------------------------------------------------------------- 1 | { 2 | "template": "feed.jade", 3 | "filename": "feed.xml" 4 | } 5 | -------------------------------------------------------------------------------- /public/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intermezzOS/intermezzOS.github.io/HEAD/public/images/logo.png -------------------------------------------------------------------------------- /blog/contents/authors/steve.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Steve Klabnik", 3 | "email": "steve@steveklabnik.com" 4 | } 5 | -------------------------------------------------------------------------------- /blog/readme.md: -------------------------------------------------------------------------------- 1 | 2 | # Blog 3 | 4 | The default [wintersmith](https://github.com/jnordberg/wintersmith) template 5 | -------------------------------------------------------------------------------- /blog/contents/authors/ashley.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Ashley Williams", 3 | "email": "ashley666ashley@gmail.com" 4 | } 5 | -------------------------------------------------------------------------------- /public/images/rhizome.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intermezzOS/intermezzOS.github.io/HEAD/public/images/rhizome.jpg -------------------------------------------------------------------------------- /public/vendor/Skeleton-2.0.4/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/intermezzOS/intermezzOS.github.io/HEAD/public/vendor/Skeleton-2.0.4/images/favicon.png -------------------------------------------------------------------------------- /blog/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "moment": "2.3.x", 4 | "underscore": "1.4.x", 5 | "typogr": "0.5.x" 6 | }, 7 | "private": "true" 8 | } 9 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | script: 3 | - npm install 4 | - npm run build:blog 5 | after_success: 6 | - test $TRAVIS_PULL_REQUEST == "false" && test $TRAVIS_BRANCH == "dev" && bash deploy.sh 7 | -------------------------------------------------------------------------------- /blog/templates/author.jade: -------------------------------------------------------------------------------- 1 | 2 | mixin author(authorName) 3 | - var author = contents.authors[authorName + '.json']; 4 | span.author 5 | if author 6 | a(href='mailto:' + author.metadata.email)= author.metadata.name 7 | else 8 | = authorName 9 | -------------------------------------------------------------------------------- /blog/contents/articles/hello-world/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Hello, world! 3 | author: steve 4 | date: 2016-04-29 5 | template: article.jade 6 | --- 7 | 8 | We now have a basic blog going! Keep your eyes peeled for news about intermezzOS’s development. 9 | 10 | Thanks to [@ashleygwilliams](https://github.com/ashleygwilliams) for 11 | [implementing the 12 | blog](https://github.com/intermezzOS/intermezzOS.github.io/pull/23)! 13 | -------------------------------------------------------------------------------- /blog/contents/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | view: none 3 | --- 4 | 5 | 16 | -------------------------------------------------------------------------------- /blog/templates/article.jade: -------------------------------------------------------------------------------- 1 | 2 | extends layout 3 | 4 | block append vars 5 | - bodyclass = 'article-detail' 6 | 7 | block prepend title 8 | | #{ page.title + ' - '} 9 | 10 | block header 11 | include author 12 | h1= page.title 13 | p.author 14 | | #{ 'Written by ' } 15 | mixin author(page.metadata.author) 16 | 17 | block content 18 | article.article 19 | section.content!= typogr(page.html).typogrify() 20 | 21 | block prepend footer 22 | div.nav 23 | a(href=contents.index.url) « Full blog 24 | -------------------------------------------------------------------------------- /deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit -o nounset 4 | 5 | rev=$(git rev-parse --short HEAD) 6 | 7 | git init 8 | git config user.name "Steve Klabnik" 9 | git config user.email "steve@steveklabnik.com" 10 | 11 | git remote add upstream "https://$GH_TOKEN@github.com/intermezzOS/intermezzOS.github.io" 12 | git fetch upstream 13 | git reset upstream/master 14 | 15 | touch . 16 | 17 | echo "node_modules" > .gitignore 18 | 19 | git add -A . 20 | git commit -m "rebuild pages at ${rev}" 21 | git push -q upstream HEAD:master 22 | -------------------------------------------------------------------------------- /blog/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "locals": { 3 | "url": "/blog", 4 | "name": "The intermezzOS Blog", 5 | "owner": "Steve" 6 | }, 7 | "plugins": [ 8 | "./plugins/paginator.coffee" 9 | ], 10 | "require": { 11 | "moment": "moment", 12 | "_": "underscore", 13 | "typogr": "typogr" 14 | }, 15 | "jade": { 16 | "pretty": true 17 | }, 18 | "markdown": { 19 | "smartLists": true, 20 | "smartypants": true 21 | }, 22 | "paginator": { 23 | "perPage": 3 24 | }, 25 | "output": "./", 26 | "baseUrl": "/blog" 27 | } 28 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "intermezzOS.github.io", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "scripts": { 6 | "start": "npm run build:blog && live-server ./", 7 | "install": "cd blog && npm install", 8 | "build:blog": "cd blog && wintersmith build" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/intermezzOS/intermezzOS.github.io.git" 13 | }, 14 | "keywords": [], 15 | "author": "ag_dubs", 16 | "license": "ISC", 17 | "bugs": { 18 | "url": "https://github.com/intermezzOS/intermezzOS.github.io/issues" 19 | }, 20 | "homepage": "https://github.com/intermezzOS/intermezzOS.github.io", 21 | "devDependencies": { 22 | "live-server": "^0.9.0", 23 | "wintersmith": "^2.3.1" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /blog/templates/index.jade: -------------------------------------------------------------------------------- 1 | 2 | extends layout 3 | 4 | block content 5 | include author 6 | each article in articles 7 | article.article.intro 8 | header 9 | p.date 10 | span= moment.utc(article.date).format('DD MM YYYY') 11 | h2 12 | a(href=article.url)= article.title 13 | section.content 14 | if article.intro.length > 0 15 | != typogr(article.intro).typogrify() 16 | if article.hasMore 17 | p.more 18 | a(href=article.url) more 19 | 20 | block prepend footer 21 | div.nav 22 | if prevPage 23 | a(href=prevPage.url) « Newer 24 | else 25 | a(href='/blog/archive.html') « Archives 26 | if nextPage 27 | a(href=nextPage.url) Next page » 28 | -------------------------------------------------------------------------------- /blog/templates/feed.jade: -------------------------------------------------------------------------------- 1 | doctype xml 2 | rss(version='2.0', 3 | xmlns:content='http://purl.org/rss/1.0/modules/content/', 4 | xmlns:wfw='http://wellformedweb.org/CommentAPI/', 5 | xmlns:dc='http://purl.org/dc/elements/1.1/' 6 | xmlns:atom='http://www.w3.org/2005/Atom') 7 | channel 8 | - var articles = env.helpers.getArticles(contents); 9 | title= locals.name 10 | atom:link(href=locals.url + '/feed.xml', rel='self', type='application/rss+xml') 11 | link= locals.url 12 | description= locals.description 13 | pubDate= articles[0].rfc822date 14 | generator Wintersmith - https://github.com/jnordberg/wintersmith 15 | language en 16 | each article in articles 17 | - var permalink = locals.url + article.url; 18 | item 19 | title= article.title 20 | link= permalink 21 | pubDate= article.rfc822date 22 | guid(isPermaLink='true')= permalink 23 | author= article.author 24 | //- passing locals.url resolves all relative urls to absolute 25 | description= article.getHtml(locals.url) 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # intermezzos.github.io 2 | > The website for intermezzOS | https://intermezzos.github.io 3 | 4 | `intermezzos.github.io` is a static site, using [Skeleton CSS], 5 | served by [GitHub Pages]. It uses [Wintersmith], a [`Node.js`] templating 6 | framework, for the blog. 7 | 8 | ## Development 9 | 10 | `intermezzos.github.io` is a static site, so you can use whatever 11 | development environment you prefer to edit the static html files. 12 | 13 | A `package.json` has been included for collaborators that would like 14 | to use [`Node.JS`] and [`npm`] for development. 15 | 16 | To install development dependencies, run: 17 | 18 | ``` 19 | $ npm install 20 | ``` 21 | 22 | To start a server with auto-reload and file-watching (using [`live-server`]), run: 23 | 24 | ``` 25 | $ npm start 26 | ``` 27 | 28 | ## Blog 29 | 30 | To contribute to the blog, you must have a [`Node.JS`] environment as 31 | [Wintersmith] depends on it. 32 | 33 | To build the blog: 34 | ``` 35 | $ npm run build:blog 36 | ``` 37 | 38 | [Code of Conduct] 39 | 40 | 41 | [Hexo]: https://hexo.io/ 42 | [Skeleton CSS]: http://getskeleton.com/ 43 | [GitHub Pages]: https://pages.github.com/ 44 | [`Node.js`]: https://nodejs.org/en/ 45 | [`npm`]: https://www.npmjs.com/ 46 | [`live-server`]: https://github.com/tapio/live-server 47 | [Code of Conduct]: http://intermezzos.github.io/code-of-conduct.html 48 | [Wintersmith]: http://wintersmith.io/ 49 | -------------------------------------------------------------------------------- /public/styles/custom.css: -------------------------------------------------------------------------------- 1 | @import url(https://fonts.googleapis.com/css?family=Open+Sans:400,800,700,300,300italic,600,400italic,600italic,700italic,800italic); 2 | 3 | html, body { 4 | font-family: "Open Sans", sans-serif; 5 | color: #333; 6 | } 7 | 8 | header { 9 | text-align: center; 10 | } 11 | 12 | header h1 { 13 | margin: 0; 14 | } 15 | 16 | header { 17 | margin-top: 40px; 18 | margin-bottom: 40px; 19 | } 20 | 21 | nav { 22 | margin-top: 20px; 23 | margin-bottom: 20px; 24 | } 25 | 26 | nav img { 27 | width: 48px; 28 | } 29 | 30 | nav h4 { 31 | display: inline; 32 | position: relative; 33 | bottom: 12px; 34 | padding-left: 10px; 35 | } 36 | 37 | nav .button:last-child { 38 | margin-right: 20px; 39 | } 40 | 41 | img { 42 | max-width: 497px; 43 | width: 100%; 44 | } 45 | 46 | a { 47 | color: #400AA7; 48 | } 49 | 50 | a:hover { 51 | color: #0c0221; 52 | text-decoration: underline; 53 | } 54 | 55 | a { 56 | text-decoration: none; 57 | } 58 | 59 | section { 60 | margin-top: 20px; 61 | } 62 | 63 | .subtitle { 64 | color: #949494; 65 | } 66 | 67 | .center { 68 | text-align: center; 69 | } 70 | 71 | .button.button-primary { 72 | background: #400AA7; 73 | border: #400AA7; 74 | } 75 | 76 | .button.button-primary:hover { 77 | background: #260664; 78 | border: #260664; 79 | } 80 | 81 | .footer { 82 | padding: 20px 0; 83 | } 84 | 85 | .footer .subtitle { 86 | color: #767676; 87 | } 88 | -------------------------------------------------------------------------------- /resources.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | intermezzOS: a little OS 9 | 10 | 11 |
12 | 22 |
23 |

External Resources

24 |
25 |
26 | 34 |
35 |
36 | 37 | 38 | -------------------------------------------------------------------------------- /blog/templates/archive.jade: -------------------------------------------------------------------------------- 1 | 2 | extends layout 3 | //- this logic should be moved to a view at some point 4 | 5 | block content 6 | - var lineHeight = 2.2; 7 | - var archives = _.chain(env.helpers.getArticles(contents)).groupBy(function(item) { 8 | - return item.date.getFullYear(); 9 | - }).value(); 10 | - for (var archive in archives) { 11 | - archives[archive] = _.groupBy(archives[archive], function(item) { return item.date.getMonth(); }); 12 | - } 13 | - var month_names = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] 14 | section.archive 15 | h2 Archive 16 | ul 17 | - var yearsK = _.chain(archives).keys().reverse().value(); 18 | each yearK in yearsK 19 | - var months = archives[yearK]; 20 | - var yearHeight = lineHeight * _.reduce(months, function(memo,month) { return memo + month.length; }, 0); 21 | li 22 | span.year-label(style='line-height:' + yearHeight + 'em')= yearK 23 | ul(style='margin-left:4em') 24 | - var monthsK = _.chain(months).keys().reverse().value(); 25 | each monthK in monthsK 26 | - var monthHeight = lineHeight * months[monthK].length; 27 | li 28 | span.month-label(style='line-height:' + monthHeight + 'em')= month_names[monthK] 29 | ul(style='margin-left:7em') 30 | each item in months[monthK] 31 | li(style='height:'+ lineHeight + 'em;line-height:' + lineHeight + 'em') 32 | a(href=item.url)= item.title 33 | -------------------------------------------------------------------------------- /public/vendor/Skeleton-2.0.4/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | Your page title here :) 9 | 10 | 11 | 12 | 14 | 15 | 16 | 18 | 19 | 20 | 22 | 23 | 24 | 25 | 27 | 28 | 29 | 30 | 31 | 32 | 34 |
35 |
36 |
37 |

Basic Page

38 |

This index.html page is a placeholder with the CSS, font and favicon. It's just waiting for you to add some content! If you need some help hit up the Skeleton documentation.

39 |
40 |
41 |
42 | 43 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | intermezzOS: a little OS 9 | 10 | 11 |
12 | 16 |
17 | rhizome 18 |

intermezzOS, (a little OS)

19 |
20 |
21 |

intermezzOS is a teaching operating system, specifically focused on introducing systems programming concepts to experienced developers from other areas of programming.

22 |
23 |
24 | Read the Code 25 | Read the Book 26 |
27 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /blog/templates/layout.jade: -------------------------------------------------------------------------------- 1 | doctype html 2 | block vars 3 | - var bodyclass = null; 4 | html(lang='en') 5 | head 6 | block head 7 | meta(charset='utf-8') 8 | meta(http-equiv='X-UA-Compatible', content='IE=edge,chrome=1') 9 | meta(name='viewport', content='width=device-width') 10 | title 11 | block title 12 | = locals.name 13 | link(rel='alternate', href=locals.url+'/feed.xml', type='application/rss+xml', title=locals.description) 14 | link(rel="stylesheet", href="/../../public/vendor/Skeleton-2.0.4/css/normalize.css") 15 | link(rel="stylesheet", href="/../../public/vendor/Skeleton-2.0.4/css/skeleton.css") 16 | link(rel='stylesheet', href=contents.css['main.css'].url) 17 | link(rel='stylesheet', href="/../../public/styles/custom.css") 18 | body(class=bodyclass) 19 | div.container 20 | nav.u-cf.u-full-width 21 | div.u-pull-left 22 | a(href="/") 23 | img(src="/public/images/logo.png", alt="logo") 24 | h4(class="title") intermezz 25 | strong OS 26 | span(class="subtitle") (a little OS) 27 | a.u-pull-right.button(href="https://discord.gg/BkKMQh7") Chat on Discord 28 | header.header 29 | div.content-wrap 30 | block header 31 | div.logo 32 | h1 33 | a(href=locals.url)= locals.name 34 | p.description= locals.description 35 | div#content 36 | div.content-wrap 37 | block content 38 | h2 Welcome to zombocom! 39 | footer 40 | div.content-wrap 41 | block footer 42 | section.about 43 | !=contents['about.md'].html 44 | section.copy 45 | p © #{ new Date().getFullYear() } #{ locals.owner } — powered by  46 | a(href='https://github.com/jnordberg/wintersmith') Wintersmith 47 | //- please leave the "powered by" if you use the design 48 | -------------------------------------------------------------------------------- /blog/contents/articles/twii1/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: This week in intermezzOS 1 3 | author: steve 4 | date: 2016-04-30 5 | template: article.jade 6 | --- 7 | 8 | Hello and welcome to the first issue of This Week in intermezzOS! intermezzOS 9 | is a learning operating system with a companion book, written in Rust for the 10 | `x86_64` platform. This is a weekly(ish) summary of its progress and community. 11 | For other news about the project, you can [follow us on Twitter: 12 | @intermezzOSrs](https://twitter.com/intermezzosrs). 13 | 14 | This week’s edition was edited by: steveklabnik. 15 | 16 | ## Updates to the book 17 | 18 | Repository for the book: [https://github.com/intermezzOS/book](https://github.com/intermezzOS/book) 19 | 20 | Today, the latest chapter of the book was merged: the start of [Chapter 4]: 21 | Transitioning to Long Mode. We’re almost done with assembly code and almost on 22 | to Rust, finally! 23 | 24 | [Chapter 4]: http://intermezzos.github.io/book/transitioning-to-long-mode.html 25 | 26 | ## Updates to the kernel 27 | 28 | Repository for the kernel: [https://github.com/intermezzOS/kernel](https://github.com/intermezzOS/kernel) 29 | 30 | The kernel hasn’t seen a ton of work as of late, since it’s farther ahead than 31 | the book, but there’s been a few small things: 32 | 33 | * [Users no longer need to build their own 34 | libcore.](https://github.com/intermezzOS/kernel/commit/b294480f404b1fccbf745ea53affca9b48b9e482) 35 | This is a pretty big usability improvement to the build system 36 | * [A new make target, 37 | distclean.](https://github.com/intermezzOS/kernel/pull/27). Building on top 38 | of the new libcore work, we don’t want to have to re-build it every single 39 | time. So where previously, `clean` cleaned everything, now `clean` will only 40 | clean the kernel code, and `distclean` will clean everything as though you 41 | freshly downloaded the source. 42 | * [`kmain()` was marked as divergent](https://github.com/intermezzOS/kernel/pull/28). 43 | I had shared an anecdote about a bug; the bug happened because `kmain()` could 44 | return. It shouldn’t be able to, though, so this is more correct. 45 | 46 | ## RFCs 47 | 48 | Repository for RFCs: [https://github.com/intermezzOS/rfcs](https://github.com/intermezzOS/rfcs) 49 | 50 | We haven’t had any new RFCs lately. 51 | 52 | ## Other news 53 | 54 | UPenn is using Rust for a class of theirs: CIS 198. Steve dropped by and did a 55 | guest lecture on intermezzOS, which you can [watch on 56 | YouTube](https://www.youtube.com/watch?v=iTSx-8qK4Hw&feature=youtu.be). 57 | -------------------------------------------------------------------------------- /blog/contents/articles/twii3/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: These weeks in intermezzOS 3 3 | author: steve 4 | date: 2016-09-25 5 | template: article.jade 6 | --- 7 | 8 | It's been... quite a long time since TWII2. A lot of stuff has happened! There 9 | were also some long periods of stuff not happening as well. We'll try to be a 10 | bit more frequent in the future! Read on for more! 11 | 12 | For other news about the project, you can [follow us on Twitter: 13 | @intermezzOSrs](https://twitter.com/intermezzosrs). 14 | 15 | This week’s edition was edited by: steve. 16 | 17 | ## Updates to the book 18 | 19 | Repository for the book: [https://github.com/intermezzOS/book](https://github.com/intermezzOS/book) 20 | 21 | - Many typo and clarification fixes by `@chrisccerami`, `@thommay`, `@kraai`, 22 | `@Ketsuban`, `@Seeker14491`, `@the-all`, and `@roneesh`. 23 | - [Better instructions for Arch Linux](https://github.com/intermezzOS/book/pull/139) 24 | - [Instructions for Fedora](https://github.com/intermezzOS/book/pull/142) 25 | - [Big improvements to the OSX install scripts for cross-compiling tools](https://github.com/intermezzOS/book/pull/127) 26 | - [Some reminder text for those on OSX, who have cross-compiled](https://github.com/intermezzOS/book/pull/144) 27 | - [We now use xargo instead of a manually cross-compiled libcore](https://github.com/intermezzOS/book/pull/146) 28 | 29 | The book hasn't had new text lately because we've been working on improving the 30 | code for the next sections. The VGA chapter should happen soon! 31 | 32 | ## Updates to the kernel 33 | 34 | Repository for the kernel: [https://github.com/intermezzOS/kernel](https://github.com/intermezzOS/kernel) 35 | 36 | - [Some experimental refactorings, and a PIC crate](https://github.com/intermezzOS/kernel/pull/40) 37 | - [Improvements to text mode!](https://github.com/intermezzOS/kernel/pull/39) 38 | - [A keymap for keys, including shift](https://github.com/intermezzOS/kernel/pull/47) 39 | - [A complete re-write of the way interrupts are handled](https://github.com/intermezzOS/kernel/pull/31) 40 | - [Improvements on that, using `naked fn`](https://github.com/intermezzOS/kernel/pull/49) 41 | - [The VGA driver has been completely re-written in a TDD style](https://github.com/intermezzOS/kernel/pull/60) 42 | - [xargo is now used instead of a manually cross-compiled libcore](https://github.com/intermezzOS/kernel/pull/62) 43 | 44 | 45 | ## RFCs 46 | 47 | Repository for RFCs: [https://github.com/intermezzOS/rfcs](https://github.com/intermezzOS/rfcs) 48 | 49 | We haven’t had any new RFCs lately. As we get more into the design of the 50 | kernel, this will be a big deal! 51 | 52 | ## Other news 53 | 54 | `@ashleygwilliams` gave a talk about intermezzOS at 55 | [RustFest](http://www.rustfest.eu/)! Slides are 56 | [here](https://github.com/intermezzOS/rustfest2016) 57 | 58 | In preparation for the workshop at [Rust Belt 59 | Rust](http://www.rust-belt-rust.com/), `@steveklabnik` and `@ashleygwilliams` 60 | have re-done the VGA code, with tests. It's linked above in the kernel section. 61 | However, this will become a big exercise during the workshop, and so it has 62 | [its own repository](https://github.com/intermezzOS/vga) as well. 63 | 64 | Now that we don't need our own fork of libcore, 65 | [https://github.com/intermezzos/libcore](https://github.com/intermezzos/libcore) 66 | is no longer needed, and will be deleted soon. 67 | -------------------------------------------------------------------------------- /blog/plugins/paginator.coffee: -------------------------------------------------------------------------------- 1 | 2 | module.exports = (env, callback) -> 3 | ### Paginator plugin. Defaults can be overridden in config.json 4 | e.g. "paginator": {"perPage": 10} ### 5 | 6 | defaults = 7 | template: 'index.jade' # template that renders pages 8 | articles: 'articles' # directory containing contents to paginate 9 | first: 'index.html' # filename/url for first page 10 | filename: 'page/%d/index.html' # filename for rest of pages 11 | perPage: 2 # number of articles per page 12 | 13 | # assign defaults any option not set in the config file 14 | options = env.config.paginator or {} 15 | for key, value of defaults 16 | options[key] ?= defaults[key] 17 | 18 | getArticles = (contents) -> 19 | # helper that returns a list of articles found in *contents* 20 | # note that each article is assumed to have its own directory in the articles directory 21 | articles = contents[options.articles]._.directories.map (item) -> item.index 22 | # skip articles that does not have a template associated 23 | articles = articles.filter (item) -> item.template isnt 'none' 24 | # sort article by date 25 | articles.sort (a, b) -> b.date - a.date 26 | return articles 27 | 28 | class PaginatorPage extends env.plugins.Page 29 | ### A page has a number and a list of articles ### 30 | 31 | constructor: (@pageNum, @articles) -> 32 | 33 | getFilename: -> 34 | if @pageNum is 1 35 | options.first 36 | else 37 | options.filename.replace '%d', @pageNum 38 | 39 | getView: -> (env, locals, contents, templates, callback) -> 40 | # simple view to pass articles and pagenum to the paginator template 41 | # note that this function returns a funciton 42 | 43 | # get the pagination template 44 | template = templates[options.template] 45 | if not template? 46 | return callback new Error "unknown paginator template '#{ options.template }'" 47 | 48 | # setup the template context 49 | ctx = {@articles, @pageNum, @prevPage, @nextPage} 50 | 51 | # extend the template context with the enviroment locals 52 | env.utils.extend ctx, locals 53 | 54 | # finally render the template 55 | template.render ctx, callback 56 | 57 | # register a generator, 'paginator' here is the content group generated content will belong to 58 | # i.e. contents._.paginator 59 | env.registerGenerator 'paginator', (contents, callback) -> 60 | 61 | # find all articles 62 | articles = getArticles contents 63 | 64 | # populate pages 65 | numPages = Math.ceil articles.length / options.perPage 66 | pages = [] 67 | for i in [0...numPages] 68 | pageArticles = articles.slice i * options.perPage, (i + 1) * options.perPage 69 | pages.push new PaginatorPage i + 1, pageArticles 70 | 71 | # add references to prev/next to each page 72 | for page, i in pages 73 | page.prevPage = pages[i - 1] 74 | page.nextPage = pages[i + 1] 75 | 76 | # create the object that will be merged with the content tree (contents) 77 | # do _not_ modify the tree directly inside a generator, consider it read-only 78 | rv = {pages:{}} 79 | for page in pages 80 | rv.pages["#{ page.pageNum }.page"] = page # file extension is arbitrary 81 | rv['index.page'] = pages[0] # alias for first page 82 | rv['last.page'] = pages[(numPages-1)] # alias for last page 83 | 84 | # callback with the generated contents 85 | callback null, rv 86 | 87 | # add the article helper to the environment so we can use it later 88 | env.helpers.getArticles = getArticles 89 | 90 | # tell the plugin manager we are done 91 | callback() 92 | -------------------------------------------------------------------------------- /code-of-conduct.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | intermezzOS: a little OS 9 | 10 | 11 |
12 | 22 |
23 |

Contributor Code of Conduct

24 |
25 |

As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.

26 |

We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality.

27 |

Examples of unacceptable behavior by participants include:

28 | 36 |

Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.

37 |

By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team.

38 |

This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community.

39 |

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting a project maintainer at steve@steveklabnik.com. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. Maintainers are obligated to maintain confidentiality with regard to the reporter of an incident.

40 |

This Code of Conduct is adapted from the Contributor Covenant, version 1.3.0, available at http://contributor-covenant.org/version/1/3/0/

41 |
42 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /blog/contents/articles/twii2/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: This week in intermezzOS 2 3 | author: ashley 4 | date: 2016-05-31 5 | template: article.jade 6 | --- 7 | 8 | It's been a whole month since our last weekly(-ISH) update- and we've 9 | had a lot of great contributions and new contributors. Highlights include 10 | a new chapter, "Jumping into Long Mode", native support on Windows 11 | machines thanks to Bash on Ubuntu on Windows, and an awesome fix to a 12 | bug in the scrolling implementation. Read on for more! 13 | 14 | For other news about the project, you can [follow us on Twitter: 15 | @intermezzOSrs](https://twitter.com/intermezzosrs). 16 | 17 | This week’s edition was edited by: [ashleygwilliams]. 18 | 19 | ## Updates to the book 20 | 21 | Repository for the book: [https://github.com/intermezzOS/book](https://github.com/intermezzOS/book) 22 | 23 | - Added a new section, "Paging", to a new chapter, "Jumping into Long Mode". 24 | Thanks to everyone for the great comments during the review of this large PR! 25 | ([#91], [steveklabnik]) 26 | - Added a `git clone` step to the `README`. ([#92], [dleve123]) 27 | - Improved the table formatting in the Paging section, and added a comment 28 | to a code sample. ([#93], [steveklabnik]) 29 | - Added a section to `windows.md` that provided specific instructions to 30 | Windows 10 Insider Preview users who want to use Bash on Ubuntu on Windows. 31 | This allows them to natively run intermezzOS- no VM requried! ([#96], 32 | [DJSundog]) 33 | - Updated Rust installation instructions to use `rustup`. ([#95], [DJSundog]) 34 | - Fixed a typo in the Paging section. ([#97], [smaximov]) 35 | - Corrected a mistake in the explanation of left-shift. ([#98], [dhardy]) 36 | - Added a new section, "Setting Up a GDT", to the "Jumping into Long Mode" 37 | chapter. ([#94], [steveklabnik]) 38 | - Fixed another typo in the Paging section. ([#102], [Razican]) 39 | - Elaborated on and improved the introduction of the Paging section thanks to 40 | [LaylConway]'s feedback. ([#101], [rylev]) 41 | - Fix a lingering mention of `multi-rust` to mention `rust up`. ([#107], 42 | fixes [#106], [moosingin3space]) 43 | - Clarify that `mul` takes just one argument in the Paging section. ([#109], 44 | [Digipom]) 45 | - Fix a typo in the "Running in QEMU" section. ([#111], [jdanford]) 46 | - Fix a type in the "Hello World" section. ([#112], [jdanford]) 47 | 48 | ## Updates to the kernel 49 | 50 | - Fixed a bug in the implementation of scrolling that incorrectly calculated 51 | the position index if it was the same size as the buffer. Also reduced the 52 | size of the buffer. ([#30], fixes [#3], [WilsonGiese]) 53 | 54 | - UPCOMING: Large refactor of the interrupt table. ([`interrupt_refactor`] branch, 55 | [steveklabnik]) 56 | 57 | ## RFCs 58 | 59 | Repository for RFCs: [https://github.com/intermezzOS/rfcs](https://github.com/intermezzOS/rfcs) 60 | 61 | We haven’t had any new RFCs lately. 62 | 63 | ## Other news 64 | 65 | - [steveklabnik] gave a talk about intermezzOS at [Boston Rust] last Wednesday, 25 May 2016 66 | 67 | [#91]: https://github.com/intermezzOS/book/pull/91 68 | [steveklabnik]: https://github.com/steveklabnik 69 | [#92]: https://github.com/intermezzOS/book/pull/92 70 | [dleve123]: https://github.com/dleve123 71 | [#93]: https://github.com/intermezzOS/book/pull/93 72 | [#96]: https://github.com/intermezzOS/book/pull/96 73 | [DJSundog]: https://github.com/DJSundog 74 | [#95]: https://github.com/intermezzOS/book/pull/95 75 | [#97]: https://github.com/intermezzOS/book/pull/97 76 | [smaximov]: https://github.com/smaximov 77 | [#98]: https://github.com/intermezzOS/book/pull/98 78 | [dhardy]: https://github.com/dhardy 79 | [#94]: https://github.com/intermezzOS/book/pull/94 80 | [#102]: https://github.com/intermezzOS/book/pull/102 81 | [Razican]: https://github.com/Razican 82 | [#101]: https://github.com/intermezzOS/book/pull/101 83 | [rylev]: https://github.com/rylev 84 | [#107]: https://github.com/intermezzOS/book/pull/107 85 | [moosingin3space]: https://github.com/moosingin3space 86 | [#106]: https://github.com/intermezzOS/book/issues/106 87 | [#109]: https://github.com/intermezzOS/book/pull/109 88 | [Digipom]: https://github.com/Digipom 89 | [#111]: https://github.com/intermezzOS/book/pull/111 90 | [jdanford]: https://github.com/jdanford 91 | [#112]: https://github.com/intermezzOS/book/pull/112 92 | [LaylConway]: https://github.com/LaylConway 93 | [#30]: https://github.com/intermezzOS/kernel/pull/30 94 | [WilsonGiese]: https://github.com/WilsonGiese 95 | [#3]: https://github.com/intermezzOS/kernel/issues/3 96 | [`interrupt_refactor`]: https://github.com/intermezzOS/kernel/tree/interrupt_refactor 97 | [ashleygwilliams]: https://github.com/ashleygwilliams 98 | [Boston Rust]: http://www.meetup.com/BostonRust/events/230419544/ 99 | -------------------------------------------------------------------------------- /blog/css/main.css: -------------------------------------------------------------------------------- 1 | 2 | h1, h2, h3, h4, h5, h6, p, body, a, img, ul, ol, blockquote, pre { 3 | margin: 0; padding: 0; border: 0; 4 | } 5 | 6 | body { 7 | font-size: 21px; 8 | line-height: 1.52; 9 | text-rendering: optimizeLegibility; 10 | } 11 | 12 | .content-wrap { 13 | width: 34em; 14 | margin: 0 auto; 15 | } 16 | 17 | a:hover { 18 | text-decoration: underline; 19 | } 20 | 21 | p { 22 | margin-bottom: 1.52em; 23 | } 24 | 25 | pre { 26 | font-size: 0.9em; 27 | overflow: auto; 28 | background: #fff; 29 | border: 1px dashed #d2d2d2; 30 | border-radius: 0.25em; 31 | margin-bottom: 1.8em; 32 | padding: 1em; 33 | } 34 | 35 | h1 { 36 | font-size: 2em; 37 | margin-bottom: 1em; 38 | } 39 | 40 | h2 { 41 | font-size: 1.2em; 42 | font-weight: 400; 43 | line-height: 1.43; 44 | margin-bottom: 1.35em; 45 | } 46 | 47 | h3 { 48 | font-style: italic; 49 | text-align: center; 50 | font-weight: 400; 51 | font-size: 1.4em; 52 | margin-top: 1.8em; 53 | margin-bottom: 0.8em; 54 | } 55 | 56 | ol, ul { 57 | margin: 0 1.4em 1.4em 4em; 58 | } 59 | 60 | li { 61 | margin-bottom: 0.5em; 62 | } 63 | 64 | blockquote { 65 | margin: 1.2em 3em; 66 | padding-left: 1em; 67 | font-style: italic; 68 | } 69 | 70 | hr { 71 | border: 0; 72 | border-top: 1px dashed #d2d2d2; 73 | height: 0; 74 | margin: 1.6em 0; 75 | } 76 | 77 | /* page header */ 78 | 79 | .header { 80 | margin: 3em 0 5em; 81 | } 82 | 83 | .header h1 { 84 | font-size: 2.6em; 85 | text-align: center; 86 | font-weight: 700; 87 | margin: 0; 88 | } 89 | 90 | .header a, .header a:hover { 91 | text-decoration: none; 92 | } 93 | 94 | .header .author { 95 | font-family: 'Open Sans', sans-serif; 96 | font-variant: small-caps; 97 | text-transform: lowercase; 98 | text-rendering: auto; 99 | text-align: center; 100 | font-weight: 400; 101 | letter-spacing: 1px; 102 | } 103 | 104 | .header .description { 105 | font-size: 1.2em; 106 | font-style: italic; 107 | text-align: center; 108 | margin-top: -0.3em; 109 | } 110 | 111 | body.article-detail > header h1 { 112 | font-size: 2.5em; 113 | font-style: italic; 114 | font-weight: 400; 115 | margin-bottom: -0.2em; 116 | } 117 | 118 | body.article-detail > header { 119 | margin-bottom: 3em; 120 | } 121 | 122 | /* page footer */ 123 | 124 | footer { 125 | margin: 3em 0; 126 | } 127 | 128 | footer .nav { 129 | text-align: center; 130 | margin-top: 5em; 131 | margin-bottom: 3.5em; 132 | } 133 | 134 | footer .nav a { 135 | padding: 0 0.5em; 136 | font-size: 1.2em; 137 | text-decoration: none; 138 | } 139 | 140 | footer .about { 141 | border-top: 1px dashed #d2d2d2; 142 | padding: 2.2em 3em; 143 | font-size: 0.7em; 144 | } 145 | 146 | footer .copy { 147 | text-align: center; 148 | font-size: 0.7em; 149 | font-style: italic; 150 | margin-top: 1em; 151 | } 152 | 153 | footer .copy, footer .copy a { 154 | color: #8e8e8e; 155 | } 156 | 157 | /* article */ 158 | 159 | .article { 160 | margin: 3em 0 4em; 161 | } 162 | 163 | .article header { 164 | border-top: 1px dashed #d2d2d2; 165 | } 166 | 167 | .article header h2 { 168 | font-style: italic; 169 | text-align: center; 170 | font-weight: 400; 171 | margin: 0.8em 0; 172 | font-size: 1.4em; 173 | } 174 | 175 | .article header h2 a { 176 | text-decoration: none; 177 | } 178 | 179 | .article header .date { 180 | text-align: center; 181 | font-size: 0.8em; 182 | margin-top: -0.7em; 183 | } 184 | 185 | .article header .date span { 186 | background-color: #f8f8f8; 187 | padding: 0 0.7em; 188 | } 189 | 190 | .article.intro .content p { 191 | display: inline; 192 | } 193 | 194 | .article.intro .content .more { 195 | text-decoration: underline; 196 | font-weight: 700; 197 | padding-left: 0.3em; 198 | } 199 | 200 | .article .content img { 201 | display: block; 202 | width: 100%; 203 | } 204 | 205 | .more, .date { 206 | font-family: 'Open Sans', sans-serif; 207 | font-variant: small-caps; 208 | text-transform: lowercase; 209 | font-weight: 400; 210 | text-rendering: auto; 211 | letter-spacing: 1px; 212 | } 213 | 214 | /* archive */ 215 | 216 | .archive { 217 | width: 32em; 218 | margin: 5em auto 6em; 219 | padding-left: 2em; 220 | } 221 | 222 | .archive h2 { 223 | font-size: 2em; 224 | margin: 0; 225 | margin-left: 6.1em; 226 | margin-bottom: 0.5em; 227 | font-style: italic; 228 | } 229 | 230 | .archive a, .archive span{ 231 | display: block; 232 | float: left; 233 | margin-bottom: -1px; 234 | text-decoration: none; 235 | } 236 | .archive li:not(:last-child) { 237 | border-bottom: 1px solid #d2d2d2; 238 | margin-bottom: -1px; 239 | } 240 | 241 | .archive a.last, .archive span.last { 242 | border: 0; 243 | margin-bottom: 0; 244 | } 245 | 246 | .archive a { 247 | width: 21em; 248 | text-indent: 1em; 249 | white-space: nowrap; 250 | } 251 | 252 | .archive .year-label, 253 | .archive .month-label{ 254 | width: 4em; 255 | font-family: 'Merriweather', serif; 256 | font-variant: small-caps; 257 | text-transform: lowercase; 258 | font-weight: 400; 259 | text-rendering: auto; 260 | letter-spacing: 1px; 261 | text-align: center; 262 | } 263 | 264 | .archive .month-label { 265 | width: 7em; 266 | } 267 | 268 | .archive ul { 269 | list-style: none; 270 | margin: 0; 271 | } 272 | 273 | .archive ul li { 274 | margin: 0; 275 | } 276 | 277 | /* code styling */ 278 | 279 | code { 280 | font-family: 'Anonymous Pro', monospace; 281 | font-size: 0.85em; 282 | color: #000; 283 | } 284 | 285 | pre code { 286 | display: block; 287 | line-height: 1.1; 288 | } 289 | 290 | p code { 291 | padding: 0.1em 0.3em 0.2em; 292 | border-radius: 0.3em; 293 | position: relative; 294 | background: #fffff3; 295 | 296 | white-space: nowrap; 297 | } 298 | 299 | /* syntax hl stuff */ 300 | 301 | code.lang-markdown { 302 | color: #424242; 303 | } 304 | 305 | code.lang-markdown .header, 306 | code.lang-markdown .strong { 307 | font-weight: bold; 308 | } 309 | 310 | code.lang-markdown .emphasis { 311 | font-style: italic; 312 | } 313 | 314 | code.lang-markdown .horizontal_rule, 315 | code.lang-markdown .link_label, 316 | code.lang-markdown .code, 317 | code.lang-markdown .header, 318 | code.lang-markdown .link_url { 319 | color: #555; 320 | } 321 | 322 | code.lang-markdown .blockquote, 323 | code.lang-markdown .bullet { 324 | color: #bbb; 325 | } 326 | 327 | /* Tomorrow Theme */ 328 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 329 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 330 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 331 | .tomorrow-comment, pre .comment, pre .title { 332 | color: #8e908c; 333 | } 334 | 335 | .tomorrow-red, pre .variable, pre .attribute, pre .tag, pre .regexp, pre .ruby .constant, pre .xml .tag .title, pre .xml .pi, pre .xml .doctype, pre .html .doctype, pre .css .id, pre .css .class, pre .css .pseudo { 336 | color: #c82829; 337 | } 338 | 339 | .tomorrow-orange, pre .number, pre .preprocessor, pre .built_in, pre .literal, pre .params, pre .constant { 340 | color: #f5871f; 341 | } 342 | 343 | .tomorrow-yellow, pre .class, pre .ruby .class .title, pre .css .rules .attribute { 344 | color: #eab700; 345 | } 346 | 347 | .tomorrow-green, pre .string, pre .value, pre .inheritance, pre .header, pre .ruby .symbol, pre .xml .cdata { 348 | color: #718c00; 349 | } 350 | 351 | .tomorrow-aqua, pre .css .hexcolor { 352 | color: #3e999f; 353 | } 354 | 355 | .tomorrow-blue, pre .function, pre .python .decorator, pre .python .title, pre .ruby .function .title, pre .ruby .title .keyword, pre .perl .sub, pre .javascript .title, pre .coffeescript .title { 356 | color: #4271ae; 357 | } 358 | 359 | .tomorrow-purple, pre .keyword, pre .javascript .function { 360 | color: #8959a8; 361 | } 362 | 363 | /* media queries */ 364 | 365 | @media (min-width: 1600px) { 366 | body { font-size: 26px; } 367 | } 368 | 369 | @media (max-width: 900px) { 370 | body { font-size: 18px; } 371 | } 372 | 373 | @media (max-width: 690px) { 374 | .content-wrap { 375 | width: auto; 376 | padding: 0 1em; 377 | } 378 | .header { 379 | margin: 1em 0; 380 | } 381 | .header h1 { 382 | font-size: 1.4em; 383 | margin-bottom: 0.6em; 384 | } 385 | .header .description { 386 | font-size: 1em; 387 | } 388 | .article { 389 | margin: 1em 0 2.5em; 390 | } 391 | .archive { 392 | width: 80%; 393 | margin: 0 auto; 394 | } 395 | .archive * { 396 | float: none !important; 397 | line-height: 1.6 !important; 398 | width: auto !important; 399 | height: auto !important; 400 | text-align: left !important; 401 | border: 0 !important; 402 | margin: 0 !important; 403 | } 404 | footer .nav { 405 | margin: 1em 0; 406 | } 407 | footer .about { 408 | padding: 0; 409 | font-size: 0.9em; 410 | padding-top: 1.6em; 411 | -webkit-column-count: 1; 412 | -moz-column-count: 1; 413 | -ms-column-count: 1; 414 | column-count: 1; 415 | } 416 | footer .about p { 417 | margin-bottom: 1em; 418 | } 419 | } 420 | -------------------------------------------------------------------------------- /blog/contents/css/main.css: -------------------------------------------------------------------------------- 1 | 2 | h1, h2, h3, h4, h5, h6, p, body, a, img, ul, ol, blockquote, pre { 3 | margin: 0; padding: 0; border: 0; 4 | } 5 | 6 | body { 7 | font-size: 21px; 8 | line-height: 1.52; 9 | text-rendering: optimizeLegibility; 10 | } 11 | 12 | .content-wrap { 13 | width: 34em; 14 | margin: 0 auto; 15 | } 16 | 17 | a:hover { 18 | text-decoration: underline; 19 | } 20 | 21 | p { 22 | margin-bottom: 1.52em; 23 | } 24 | 25 | pre { 26 | font-size: 0.9em; 27 | overflow: auto; 28 | background: #fff; 29 | border: 1px dashed #d2d2d2; 30 | border-radius: 0.25em; 31 | margin-bottom: 1.8em; 32 | padding: 1em; 33 | } 34 | 35 | h1 { 36 | font-size: 2em; 37 | margin-bottom: 1em; 38 | } 39 | 40 | h2 { 41 | font-size: 1.2em; 42 | font-weight: 400; 43 | line-height: 1.43; 44 | margin-bottom: 1.35em; 45 | } 46 | 47 | h3 { 48 | font-style: italic; 49 | text-align: center; 50 | font-weight: 400; 51 | font-size: 1.4em; 52 | margin-top: 1.8em; 53 | margin-bottom: 0.8em; 54 | } 55 | 56 | ol, ul { 57 | margin: 0 1.4em 1.4em 4em; 58 | } 59 | 60 | li { 61 | margin-bottom: 0.5em; 62 | } 63 | 64 | blockquote { 65 | margin: 1.2em 3em; 66 | padding-left: 1em; 67 | font-style: italic; 68 | } 69 | 70 | hr { 71 | border: 0; 72 | border-top: 1px dashed #d2d2d2; 73 | height: 0; 74 | margin: 1.6em 0; 75 | } 76 | 77 | /* page header */ 78 | 79 | .header { 80 | margin: 3em 0 5em; 81 | } 82 | 83 | .header h1 { 84 | font-size: 2.6em; 85 | text-align: center; 86 | font-weight: 700; 87 | margin: 0; 88 | } 89 | 90 | .header a, .header a:hover { 91 | text-decoration: none; 92 | } 93 | 94 | .header .author { 95 | font-family: 'Open Sans', sans-serif; 96 | font-variant: small-caps; 97 | text-transform: lowercase; 98 | text-rendering: auto; 99 | text-align: center; 100 | font-weight: 400; 101 | letter-spacing: 1px; 102 | } 103 | 104 | .header .description { 105 | font-size: 1.2em; 106 | font-style: italic; 107 | text-align: center; 108 | margin-top: -0.3em; 109 | } 110 | 111 | body.article-detail > header h1 { 112 | font-size: 2.5em; 113 | font-style: italic; 114 | font-weight: 400; 115 | margin-bottom: -0.2em; 116 | } 117 | 118 | body.article-detail > header { 119 | margin-bottom: 3em; 120 | } 121 | 122 | /* page footer */ 123 | 124 | footer { 125 | margin: 3em 0; 126 | } 127 | 128 | footer .nav { 129 | text-align: center; 130 | margin-top: 5em; 131 | margin-bottom: 3.5em; 132 | } 133 | 134 | footer .nav a { 135 | padding: 0 0.5em; 136 | font-size: 1.2em; 137 | text-decoration: none; 138 | } 139 | 140 | footer .about { 141 | border-top: 1px dashed #d2d2d2; 142 | padding: 2.2em 3em; 143 | font-size: 0.7em; 144 | } 145 | 146 | footer .copy { 147 | text-align: center; 148 | font-size: 0.7em; 149 | font-style: italic; 150 | margin-top: 1em; 151 | } 152 | 153 | footer .copy, footer .copy a { 154 | color: #8e8e8e; 155 | } 156 | 157 | /* article */ 158 | 159 | .article { 160 | margin: 3em 0 4em; 161 | } 162 | 163 | .article header { 164 | border-top: 1px dashed #d2d2d2; 165 | } 166 | 167 | .article header h2 { 168 | font-style: italic; 169 | text-align: center; 170 | font-weight: 400; 171 | margin: 0.8em 0; 172 | font-size: 1.4em; 173 | } 174 | 175 | .article header h2 a { 176 | text-decoration: none; 177 | } 178 | 179 | .article header .date { 180 | text-align: center; 181 | font-size: 0.8em; 182 | margin-top: -0.7em; 183 | } 184 | 185 | .article header .date span { 186 | background-color: #f8f8f8; 187 | padding: 0 0.7em; 188 | } 189 | 190 | .article.intro .content p { 191 | display: inline; 192 | } 193 | 194 | .article.intro .content .more { 195 | text-decoration: underline; 196 | font-weight: 700; 197 | padding-left: 0.3em; 198 | } 199 | 200 | .article .content img { 201 | display: block; 202 | width: 100%; 203 | } 204 | 205 | .more, .date { 206 | font-family: 'Open Sans', sans-serif; 207 | font-variant: small-caps; 208 | text-transform: lowercase; 209 | font-weight: 400; 210 | text-rendering: auto; 211 | letter-spacing: 1px; 212 | } 213 | 214 | /* archive */ 215 | 216 | .archive { 217 | width: 32em; 218 | margin: 5em auto 6em; 219 | padding-left: 2em; 220 | } 221 | 222 | .archive h2 { 223 | font-size: 2em; 224 | margin: 0; 225 | margin-left: 6.1em; 226 | margin-bottom: 0.5em; 227 | font-style: italic; 228 | } 229 | 230 | .archive a, .archive span{ 231 | display: block; 232 | float: left; 233 | margin-bottom: -1px; 234 | text-decoration: none; 235 | } 236 | .archive li:not(:last-child) { 237 | border-bottom: 1px solid #d2d2d2; 238 | margin-bottom: -1px; 239 | } 240 | 241 | .archive a.last, .archive span.last { 242 | border: 0; 243 | margin-bottom: 0; 244 | } 245 | 246 | .archive a { 247 | width: 21em; 248 | text-indent: 1em; 249 | white-space: nowrap; 250 | } 251 | 252 | .archive .year-label, 253 | .archive .month-label{ 254 | width: 4em; 255 | font-family: 'Merriweather', serif; 256 | font-variant: small-caps; 257 | text-transform: lowercase; 258 | font-weight: 400; 259 | text-rendering: auto; 260 | letter-spacing: 1px; 261 | text-align: center; 262 | } 263 | 264 | .archive .month-label { 265 | width: 7em; 266 | } 267 | 268 | .archive ul { 269 | list-style: none; 270 | margin: 0; 271 | } 272 | 273 | .archive ul li { 274 | margin: 0; 275 | } 276 | 277 | /* code styling */ 278 | 279 | code { 280 | font-family: 'Anonymous Pro', monospace; 281 | font-size: 0.85em; 282 | color: #000; 283 | } 284 | 285 | pre code { 286 | display: block; 287 | line-height: 1.1; 288 | } 289 | 290 | p code { 291 | padding: 0.1em 0.3em 0.2em; 292 | border-radius: 0.3em; 293 | position: relative; 294 | background: #fffff3; 295 | 296 | white-space: nowrap; 297 | } 298 | 299 | /* syntax hl stuff */ 300 | 301 | code.lang-markdown { 302 | color: #424242; 303 | } 304 | 305 | code.lang-markdown .header, 306 | code.lang-markdown .strong { 307 | font-weight: bold; 308 | } 309 | 310 | code.lang-markdown .emphasis { 311 | font-style: italic; 312 | } 313 | 314 | code.lang-markdown .horizontal_rule, 315 | code.lang-markdown .link_label, 316 | code.lang-markdown .code, 317 | code.lang-markdown .header, 318 | code.lang-markdown .link_url { 319 | color: #555; 320 | } 321 | 322 | code.lang-markdown .blockquote, 323 | code.lang-markdown .bullet { 324 | color: #bbb; 325 | } 326 | 327 | /* Tomorrow Theme */ 328 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 329 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 330 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 331 | .tomorrow-comment, pre .comment, pre .title { 332 | color: #8e908c; 333 | } 334 | 335 | .tomorrow-red, pre .variable, pre .attribute, pre .tag, pre .regexp, pre .ruby .constant, pre .xml .tag .title, pre .xml .pi, pre .xml .doctype, pre .html .doctype, pre .css .id, pre .css .class, pre .css .pseudo { 336 | color: #c82829; 337 | } 338 | 339 | .tomorrow-orange, pre .number, pre .preprocessor, pre .built_in, pre .literal, pre .params, pre .constant { 340 | color: #f5871f; 341 | } 342 | 343 | .tomorrow-yellow, pre .class, pre .ruby .class .title, pre .css .rules .attribute { 344 | color: #eab700; 345 | } 346 | 347 | .tomorrow-green, pre .string, pre .value, pre .inheritance, pre .header, pre .ruby .symbol, pre .xml .cdata { 348 | color: #718c00; 349 | } 350 | 351 | .tomorrow-aqua, pre .css .hexcolor { 352 | color: #3e999f; 353 | } 354 | 355 | .tomorrow-blue, pre .function, pre .python .decorator, pre .python .title, pre .ruby .function .title, pre .ruby .title .keyword, pre .perl .sub, pre .javascript .title, pre .coffeescript .title { 356 | color: #4271ae; 357 | } 358 | 359 | .tomorrow-purple, pre .keyword, pre .javascript .function { 360 | color: #8959a8; 361 | } 362 | 363 | /* media queries */ 364 | 365 | @media (min-width: 1600px) { 366 | body { font-size: 26px; } 367 | } 368 | 369 | @media (max-width: 900px) { 370 | body { font-size: 18px; } 371 | } 372 | 373 | @media (max-width: 690px) { 374 | .content-wrap { 375 | width: auto; 376 | padding: 0 1em; 377 | } 378 | .header { 379 | margin: 1em 0; 380 | } 381 | .header h1 { 382 | font-size: 1.4em; 383 | margin-bottom: 0.6em; 384 | } 385 | .header .description { 386 | font-size: 1em; 387 | } 388 | .article { 389 | margin: 1em 0 2.5em; 390 | } 391 | .archive { 392 | width: 80%; 393 | margin: 0 auto; 394 | } 395 | .archive * { 396 | float: none !important; 397 | line-height: 1.6 !important; 398 | width: auto !important; 399 | height: auto !important; 400 | text-align: left !important; 401 | border: 0 !important; 402 | margin: 0 !important; 403 | } 404 | footer .nav { 405 | margin: 1em 0; 406 | } 407 | footer .about { 408 | padding: 0; 409 | font-size: 0.9em; 410 | padding-top: 1.6em; 411 | -webkit-column-count: 1; 412 | -moz-column-count: 1; 413 | -ms-column-count: 1; 414 | column-count: 1; 415 | } 416 | footer .about p { 417 | margin-bottom: 1em; 418 | } 419 | } 420 | -------------------------------------------------------------------------------- /public/vendor/Skeleton-2.0.4/css/normalize.css: -------------------------------------------------------------------------------- 1 | /*! normalize.css v3.0.2 | MIT License | git.io/normalize */ 2 | 3 | /** 4 | * 1. Set default font family to sans-serif. 5 | * 2. Prevent iOS text size adjust after orientation change, without disabling 6 | * user zoom. 7 | */ 8 | 9 | html { 10 | font-family: sans-serif; /* 1 */ 11 | -ms-text-size-adjust: 100%; /* 2 */ 12 | -webkit-text-size-adjust: 100%; /* 2 */ 13 | } 14 | 15 | /** 16 | * Remove default margin. 17 | */ 18 | 19 | body { 20 | margin: 0; 21 | } 22 | 23 | /* HTML5 display definitions 24 | ========================================================================== */ 25 | 26 | /** 27 | * Correct `block` display not defined for any HTML5 element in IE 8/9. 28 | * Correct `block` display not defined for `details` or `summary` in IE 10/11 29 | * and Firefox. 30 | * Correct `block` display not defined for `main` in IE 11. 31 | */ 32 | 33 | article, 34 | aside, 35 | details, 36 | figcaption, 37 | figure, 38 | footer, 39 | header, 40 | hgroup, 41 | main, 42 | menu, 43 | nav, 44 | section, 45 | summary { 46 | display: block; 47 | } 48 | 49 | /** 50 | * 1. Correct `inline-block` display not defined in IE 8/9. 51 | * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. 52 | */ 53 | 54 | audio, 55 | canvas, 56 | progress, 57 | video { 58 | display: inline-block; /* 1 */ 59 | vertical-align: baseline; /* 2 */ 60 | } 61 | 62 | /** 63 | * Prevent modern browsers from displaying `audio` without controls. 64 | * Remove excess height in iOS 5 devices. 65 | */ 66 | 67 | audio:not([controls]) { 68 | display: none; 69 | height: 0; 70 | } 71 | 72 | /** 73 | * Address `[hidden]` styling not present in IE 8/9/10. 74 | * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. 75 | */ 76 | 77 | [hidden], 78 | template { 79 | display: none; 80 | } 81 | 82 | /* Links 83 | ========================================================================== */ 84 | 85 | /** 86 | * Remove the gray background color from active links in IE 10. 87 | */ 88 | 89 | a { 90 | background-color: transparent; 91 | } 92 | 93 | /** 94 | * Improve readability when focused and also mouse hovered in all browsers. 95 | */ 96 | 97 | a:active, 98 | a:hover { 99 | outline: 0; 100 | } 101 | 102 | /* Text-level semantics 103 | ========================================================================== */ 104 | 105 | /** 106 | * Address styling not present in IE 8/9/10/11, Safari, and Chrome. 107 | */ 108 | 109 | abbr[title] { 110 | border-bottom: 1px dotted; 111 | } 112 | 113 | /** 114 | * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. 115 | */ 116 | 117 | b, 118 | strong { 119 | font-weight: bold; 120 | } 121 | 122 | /** 123 | * Address styling not present in Safari and Chrome. 124 | */ 125 | 126 | dfn { 127 | font-style: italic; 128 | } 129 | 130 | /** 131 | * Address variable `h1` font-size and margin within `section` and `article` 132 | * contexts in Firefox 4+, Safari, and Chrome. 133 | */ 134 | 135 | h1 { 136 | font-size: 2em; 137 | margin: 0.67em 0; 138 | } 139 | 140 | /** 141 | * Address styling not present in IE 8/9. 142 | */ 143 | 144 | mark { 145 | background: #ff0; 146 | color: #000; 147 | } 148 | 149 | /** 150 | * Address inconsistent and variable font size in all browsers. 151 | */ 152 | 153 | small { 154 | font-size: 80%; 155 | } 156 | 157 | /** 158 | * Prevent `sub` and `sup` affecting `line-height` in all browsers. 159 | */ 160 | 161 | sub, 162 | sup { 163 | font-size: 75%; 164 | line-height: 0; 165 | position: relative; 166 | vertical-align: baseline; 167 | } 168 | 169 | sup { 170 | top: -0.5em; 171 | } 172 | 173 | sub { 174 | bottom: -0.25em; 175 | } 176 | 177 | /* Embedded content 178 | ========================================================================== */ 179 | 180 | /** 181 | * Remove border when inside `a` element in IE 8/9/10. 182 | */ 183 | 184 | img { 185 | border: 0; 186 | } 187 | 188 | /** 189 | * Correct overflow not hidden in IE 9/10/11. 190 | */ 191 | 192 | svg:not(:root) { 193 | overflow: hidden; 194 | } 195 | 196 | /* Grouping content 197 | ========================================================================== */ 198 | 199 | /** 200 | * Address margin not present in IE 8/9 and Safari. 201 | */ 202 | 203 | figure { 204 | margin: 1em 40px; 205 | } 206 | 207 | /** 208 | * Address differences between Firefox and other browsers. 209 | */ 210 | 211 | hr { 212 | -moz-box-sizing: content-box; 213 | box-sizing: content-box; 214 | height: 0; 215 | } 216 | 217 | /** 218 | * Contain overflow in all browsers. 219 | */ 220 | 221 | pre { 222 | overflow: auto; 223 | } 224 | 225 | /** 226 | * Address odd `em`-unit font size rendering in all browsers. 227 | */ 228 | 229 | code, 230 | kbd, 231 | pre, 232 | samp { 233 | font-family: monospace, monospace; 234 | font-size: 1em; 235 | } 236 | 237 | /* Forms 238 | ========================================================================== */ 239 | 240 | /** 241 | * Known limitation: by default, Chrome and Safari on OS X allow very limited 242 | * styling of `select`, unless a `border` property is set. 243 | */ 244 | 245 | /** 246 | * 1. Correct color not being inherited. 247 | * Known issue: affects color of disabled elements. 248 | * 2. Correct font properties not being inherited. 249 | * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. 250 | */ 251 | 252 | button, 253 | input, 254 | optgroup, 255 | select, 256 | textarea { 257 | color: inherit; /* 1 */ 258 | font: inherit; /* 2 */ 259 | margin: 0; /* 3 */ 260 | } 261 | 262 | /** 263 | * Address `overflow` set to `hidden` in IE 8/9/10/11. 264 | */ 265 | 266 | button { 267 | overflow: visible; 268 | } 269 | 270 | /** 271 | * Address inconsistent `text-transform` inheritance for `button` and `select`. 272 | * All other form control elements do not inherit `text-transform` values. 273 | * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. 274 | * Correct `select` style inheritance in Firefox. 275 | */ 276 | 277 | button, 278 | select { 279 | text-transform: none; 280 | } 281 | 282 | /** 283 | * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` 284 | * and `video` controls. 285 | * 2. Correct inability to style clickable `input` types in iOS. 286 | * 3. Improve usability and consistency of cursor style between image-type 287 | * `input` and others. 288 | */ 289 | 290 | button, 291 | html input[type="button"], /* 1 */ 292 | input[type="reset"], 293 | input[type="submit"] { 294 | -webkit-appearance: button; /* 2 */ 295 | cursor: pointer; /* 3 */ 296 | } 297 | 298 | /** 299 | * Re-set default cursor for disabled elements. 300 | */ 301 | 302 | button[disabled], 303 | html input[disabled] { 304 | cursor: default; 305 | } 306 | 307 | /** 308 | * Remove inner padding and border in Firefox 4+. 309 | */ 310 | 311 | button::-moz-focus-inner, 312 | input::-moz-focus-inner { 313 | border: 0; 314 | padding: 0; 315 | } 316 | 317 | /** 318 | * Address Firefox 4+ setting `line-height` on `input` using `!important` in 319 | * the UA stylesheet. 320 | */ 321 | 322 | input { 323 | line-height: normal; 324 | } 325 | 326 | /** 327 | * It's recommended that you don't attempt to style these elements. 328 | * Firefox's implementation doesn't respect box-sizing, padding, or width. 329 | * 330 | * 1. Address box sizing set to `content-box` in IE 8/9/10. 331 | * 2. Remove excess padding in IE 8/9/10. 332 | */ 333 | 334 | input[type="checkbox"], 335 | input[type="radio"] { 336 | box-sizing: border-box; /* 1 */ 337 | padding: 0; /* 2 */ 338 | } 339 | 340 | /** 341 | * Fix the cursor style for Chrome's increment/decrement buttons. For certain 342 | * `font-size` values of the `input`, it causes the cursor style of the 343 | * decrement button to change from `default` to `text`. 344 | */ 345 | 346 | input[type="number"]::-webkit-inner-spin-button, 347 | input[type="number"]::-webkit-outer-spin-button { 348 | height: auto; 349 | } 350 | 351 | /** 352 | * 1. Address `appearance` set to `searchfield` in Safari and Chrome. 353 | * 2. Address `box-sizing` set to `border-box` in Safari and Chrome 354 | * (include `-moz` to future-proof). 355 | */ 356 | 357 | input[type="search"] { 358 | -webkit-appearance: textfield; /* 1 */ 359 | -moz-box-sizing: content-box; 360 | -webkit-box-sizing: content-box; /* 2 */ 361 | box-sizing: content-box; 362 | } 363 | 364 | /** 365 | * Remove inner padding and search cancel button in Safari and Chrome on OS X. 366 | * Safari (but not Chrome) clips the cancel button when the search input has 367 | * padding (and `textfield` appearance). 368 | */ 369 | 370 | input[type="search"]::-webkit-search-cancel-button, 371 | input[type="search"]::-webkit-search-decoration { 372 | -webkit-appearance: none; 373 | } 374 | 375 | /** 376 | * Define consistent border, margin, and padding. 377 | */ 378 | 379 | fieldset { 380 | border: 1px solid #c0c0c0; 381 | margin: 0 2px; 382 | padding: 0.35em 0.625em 0.75em; 383 | } 384 | 385 | /** 386 | * 1. Correct `color` not being inherited in IE 8/9/10/11. 387 | * 2. Remove padding so people aren't caught out if they zero out fieldsets. 388 | */ 389 | 390 | legend { 391 | border: 0; /* 1 */ 392 | padding: 0; /* 2 */ 393 | } 394 | 395 | /** 396 | * Remove default vertical scrollbar in IE 8/9/10/11. 397 | */ 398 | 399 | textarea { 400 | overflow: auto; 401 | } 402 | 403 | /** 404 | * Don't inherit the `font-weight` (applied by a rule above). 405 | * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. 406 | */ 407 | 408 | optgroup { 409 | font-weight: bold; 410 | } 411 | 412 | /* Tables 413 | ========================================================================== */ 414 | 415 | /** 416 | * Remove most spacing between table cells. 417 | */ 418 | 419 | table { 420 | border-collapse: collapse; 421 | border-spacing: 0; 422 | } 423 | 424 | td, 425 | th { 426 | padding: 0; 427 | } -------------------------------------------------------------------------------- /public/vendor/Skeleton-2.0.4/css/skeleton.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skeleton V2.0.4 3 | * Copyright 2014, Dave Gamache 4 | * www.getskeleton.com 5 | * Free to use under the MIT license. 6 | * http://www.opensource.org/licenses/mit-license.php 7 | * 12/29/2014 8 | */ 9 | 10 | 11 | /* Table of contents 12 | –––––––––––––––––––––––––––––––––––––––––––––––––– 13 | - Grid 14 | - Base Styles 15 | - Typography 16 | - Links 17 | - Buttons 18 | - Forms 19 | - Lists 20 | - Code 21 | - Tables 22 | - Spacing 23 | - Utilities 24 | - Clearing 25 | - Media Queries 26 | */ 27 | 28 | 29 | /* Grid 30 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 31 | .container { 32 | position: relative; 33 | width: 100%; 34 | max-width: 960px; 35 | margin: 0 auto; 36 | padding: 0 20px; 37 | box-sizing: border-box; } 38 | .column, 39 | .columns { 40 | width: 100%; 41 | float: left; 42 | box-sizing: border-box; } 43 | 44 | /* For devices larger than 400px */ 45 | @media (min-width: 400px) { 46 | .container { 47 | width: 85%; 48 | padding: 0; } 49 | } 50 | 51 | /* For devices larger than 550px */ 52 | @media (min-width: 550px) { 53 | .container { 54 | width: 80%; } 55 | .column, 56 | .columns { 57 | margin-left: 4%; } 58 | .column:first-child, 59 | .columns:first-child { 60 | margin-left: 0; } 61 | 62 | .one.column, 63 | .one.columns { width: 4.66666666667%; } 64 | .two.columns { width: 13.3333333333%; } 65 | .three.columns { width: 22%; } 66 | .four.columns { width: 30.6666666667%; } 67 | .five.columns { width: 39.3333333333%; } 68 | .six.columns { width: 48%; } 69 | .seven.columns { width: 56.6666666667%; } 70 | .eight.columns { width: 65.3333333333%; } 71 | .nine.columns { width: 74.0%; } 72 | .ten.columns { width: 82.6666666667%; } 73 | .eleven.columns { width: 91.3333333333%; } 74 | .twelve.columns { width: 100%; margin-left: 0; } 75 | 76 | .one-third.column { width: 30.6666666667%; } 77 | .two-thirds.column { width: 65.3333333333%; } 78 | 79 | .one-half.column { width: 48%; } 80 | 81 | /* Offsets */ 82 | .offset-by-one.column, 83 | .offset-by-one.columns { margin-left: 8.66666666667%; } 84 | .offset-by-two.column, 85 | .offset-by-two.columns { margin-left: 17.3333333333%; } 86 | .offset-by-three.column, 87 | .offset-by-three.columns { margin-left: 26%; } 88 | .offset-by-four.column, 89 | .offset-by-four.columns { margin-left: 34.6666666667%; } 90 | .offset-by-five.column, 91 | .offset-by-five.columns { margin-left: 43.3333333333%; } 92 | .offset-by-six.column, 93 | .offset-by-six.columns { margin-left: 52%; } 94 | .offset-by-seven.column, 95 | .offset-by-seven.columns { margin-left: 60.6666666667%; } 96 | .offset-by-eight.column, 97 | .offset-by-eight.columns { margin-left: 69.3333333333%; } 98 | .offset-by-nine.column, 99 | .offset-by-nine.columns { margin-left: 78.0%; } 100 | .offset-by-ten.column, 101 | .offset-by-ten.columns { margin-left: 86.6666666667%; } 102 | .offset-by-eleven.column, 103 | .offset-by-eleven.columns { margin-left: 95.3333333333%; } 104 | 105 | .offset-by-one-third.column, 106 | .offset-by-one-third.columns { margin-left: 34.6666666667%; } 107 | .offset-by-two-thirds.column, 108 | .offset-by-two-thirds.columns { margin-left: 69.3333333333%; } 109 | 110 | .offset-by-one-half.column, 111 | .offset-by-one-half.columns { margin-left: 52%; } 112 | 113 | } 114 | 115 | 116 | /* Base Styles 117 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 118 | /* NOTE 119 | html is set to 62.5% so that all the REM measurements throughout Skeleton 120 | are based on 10px sizing. So basically 1.5rem = 15px :) */ 121 | html { 122 | font-size: 62.5%; } 123 | body { 124 | font-size: 1.5em; /* currently ems cause chrome bug misinterpreting rems on body element */ 125 | line-height: 1.6; 126 | font-weight: 400; 127 | font-family: "Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; 128 | color: #222; } 129 | 130 | 131 | /* Typography 132 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 133 | h1, h2, h3, h4, h5, h6 { 134 | margin-top: 0; 135 | margin-bottom: 2rem; 136 | font-weight: 300; } 137 | h1 { font-size: 4.0rem; line-height: 1.2; letter-spacing: -.1rem;} 138 | h2 { font-size: 3.6rem; line-height: 1.25; letter-spacing: -.1rem; } 139 | h3 { font-size: 3.0rem; line-height: 1.3; letter-spacing: -.1rem; } 140 | h4 { font-size: 2.4rem; line-height: 1.35; letter-spacing: -.08rem; } 141 | h5 { font-size: 1.8rem; line-height: 1.5; letter-spacing: -.05rem; } 142 | h6 { font-size: 1.5rem; line-height: 1.6; letter-spacing: 0; } 143 | 144 | /* Larger than phablet */ 145 | @media (min-width: 550px) { 146 | h1 { font-size: 5.0rem; } 147 | h2 { font-size: 4.2rem; } 148 | h3 { font-size: 3.6rem; } 149 | h4 { font-size: 3.0rem; } 150 | h5 { font-size: 2.4rem; } 151 | h6 { font-size: 1.5rem; } 152 | } 153 | 154 | p { 155 | margin-top: 0; } 156 | 157 | 158 | /* Links 159 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 160 | a { 161 | color: #1EAEDB; } 162 | a:hover { 163 | color: #0FA0CE; } 164 | 165 | 166 | /* Buttons 167 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 168 | .button, 169 | button, 170 | input[type="submit"], 171 | input[type="reset"], 172 | input[type="button"] { 173 | display: inline-block; 174 | height: 38px; 175 | padding: 0 30px; 176 | color: #555; 177 | text-align: center; 178 | font-size: 11px; 179 | font-weight: 600; 180 | line-height: 38px; 181 | letter-spacing: .1rem; 182 | text-transform: uppercase; 183 | text-decoration: none; 184 | white-space: nowrap; 185 | background-color: transparent; 186 | border-radius: 4px; 187 | border: 1px solid #bbb; 188 | cursor: pointer; 189 | box-sizing: border-box; } 190 | .button:hover, 191 | button:hover, 192 | input[type="submit"]:hover, 193 | input[type="reset"]:hover, 194 | input[type="button"]:hover, 195 | .button:focus, 196 | button:focus, 197 | input[type="submit"]:focus, 198 | input[type="reset"]:focus, 199 | input[type="button"]:focus { 200 | color: #333; 201 | border-color: #888; 202 | outline: 0; } 203 | .button.button-primary, 204 | button.button-primary, 205 | input[type="submit"].button-primary, 206 | input[type="reset"].button-primary, 207 | input[type="button"].button-primary { 208 | color: #FFF; 209 | background-color: #33C3F0; 210 | border-color: #33C3F0; } 211 | .button.button-primary:hover, 212 | button.button-primary:hover, 213 | input[type="submit"].button-primary:hover, 214 | input[type="reset"].button-primary:hover, 215 | input[type="button"].button-primary:hover, 216 | .button.button-primary:focus, 217 | button.button-primary:focus, 218 | input[type="submit"].button-primary:focus, 219 | input[type="reset"].button-primary:focus, 220 | input[type="button"].button-primary:focus { 221 | color: #FFF; 222 | background-color: #1EAEDB; 223 | border-color: #1EAEDB; } 224 | 225 | 226 | /* Forms 227 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 228 | input[type="email"], 229 | input[type="number"], 230 | input[type="search"], 231 | input[type="text"], 232 | input[type="tel"], 233 | input[type="url"], 234 | input[type="password"], 235 | textarea, 236 | select { 237 | height: 38px; 238 | padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */ 239 | background-color: #fff; 240 | border: 1px solid #D1D1D1; 241 | border-radius: 4px; 242 | box-shadow: none; 243 | box-sizing: border-box; } 244 | /* Removes awkward default styles on some inputs for iOS */ 245 | input[type="email"], 246 | input[type="number"], 247 | input[type="search"], 248 | input[type="text"], 249 | input[type="tel"], 250 | input[type="url"], 251 | input[type="password"], 252 | textarea { 253 | -webkit-appearance: none; 254 | -moz-appearance: none; 255 | appearance: none; } 256 | textarea { 257 | min-height: 65px; 258 | padding-top: 6px; 259 | padding-bottom: 6px; } 260 | input[type="email"]:focus, 261 | input[type="number"]:focus, 262 | input[type="search"]:focus, 263 | input[type="text"]:focus, 264 | input[type="tel"]:focus, 265 | input[type="url"]:focus, 266 | input[type="password"]:focus, 267 | textarea:focus, 268 | select:focus { 269 | border: 1px solid #33C3F0; 270 | outline: 0; } 271 | label, 272 | legend { 273 | display: block; 274 | margin-bottom: .5rem; 275 | font-weight: 600; } 276 | fieldset { 277 | padding: 0; 278 | border-width: 0; } 279 | input[type="checkbox"], 280 | input[type="radio"] { 281 | display: inline; } 282 | label > .label-body { 283 | display: inline-block; 284 | margin-left: .5rem; 285 | font-weight: normal; } 286 | 287 | 288 | /* Lists 289 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 290 | ul { 291 | list-style: circle inside; } 292 | ol { 293 | list-style: decimal inside; } 294 | ol, ul { 295 | padding-left: 0; 296 | margin-top: 0; } 297 | ul ul, 298 | ul ol, 299 | ol ol, 300 | ol ul { 301 | margin: 1.5rem 0 1.5rem 3rem; 302 | font-size: 90%; } 303 | li { 304 | margin-bottom: 1rem; } 305 | 306 | 307 | /* Code 308 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 309 | code { 310 | padding: .2rem .5rem; 311 | margin: 0 .2rem; 312 | font-size: 90%; 313 | white-space: nowrap; 314 | background: #F1F1F1; 315 | border: 1px solid #E1E1E1; 316 | border-radius: 4px; } 317 | pre > code { 318 | display: block; 319 | padding: 1rem 1.5rem; 320 | white-space: pre; } 321 | 322 | 323 | /* Tables 324 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 325 | th, 326 | td { 327 | padding: 12px 15px; 328 | text-align: left; 329 | border-bottom: 1px solid #E1E1E1; } 330 | th:first-child, 331 | td:first-child { 332 | padding-left: 0; } 333 | th:last-child, 334 | td:last-child { 335 | padding-right: 0; } 336 | 337 | 338 | /* Spacing 339 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 340 | button, 341 | .button { 342 | margin-bottom: 1rem; } 343 | input, 344 | textarea, 345 | select, 346 | fieldset { 347 | margin-bottom: 1.5rem; } 348 | pre, 349 | blockquote, 350 | dl, 351 | figure, 352 | table, 353 | p, 354 | ul, 355 | ol, 356 | form { 357 | margin-bottom: 2.5rem; } 358 | 359 | 360 | /* Utilities 361 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 362 | .u-full-width { 363 | width: 100%; 364 | box-sizing: border-box; } 365 | .u-max-full-width { 366 | max-width: 100%; 367 | box-sizing: border-box; } 368 | .u-pull-right { 369 | float: right; } 370 | .u-pull-left { 371 | float: left; } 372 | 373 | 374 | /* Misc 375 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 376 | hr { 377 | margin-top: 3rem; 378 | margin-bottom: 3.5rem; 379 | border-width: 0; 380 | border-top: 1px solid #E1E1E1; } 381 | 382 | 383 | /* Clearing 384 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 385 | 386 | /* Self Clearing Goodness */ 387 | .container:after, 388 | .row:after, 389 | .u-cf { 390 | content: ""; 391 | display: table; 392 | clear: both; } 393 | 394 | 395 | /* Media Queries 396 | –––––––––––––––––––––––––––––––––––––––––––––––––– */ 397 | /* 398 | Note: The best way to structure the use of media queries is to create the queries 399 | near the relevant code. For example, if you wanted to change the styles for buttons 400 | on small devices, paste the mobile query code up in the buttons section and style it 401 | there. 402 | */ 403 | 404 | 405 | /* Larger than mobile */ 406 | @media (min-width: 400px) {} 407 | 408 | /* Larger than phablet (also point when grid becomes active) */ 409 | @media (min-width: 550px) {} 410 | 411 | /* Larger than tablet */ 412 | @media (min-width: 750px) {} 413 | 414 | /* Larger than desktop */ 415 | @media (min-width: 1000px) {} 416 | 417 | /* Larger than Desktop HD */ 418 | @media (min-width: 1200px) {} 419 | --------------------------------------------------------------------------------