├── .gitignore ├── Gemfile ├── LICENSE.txt ├── README.md ├── _data └── academic_i18n.yml ├── _includes ├── _i18n │ ├── date.html │ ├── i18n.html │ ├── lang_selector.html │ ├── last_modified_at.html │ ├── link.html │ └── sitetitle.html ├── _icons │ ├── email.html │ ├── email.svg │ ├── file.html │ ├── file.svg │ ├── github.html │ ├── github.svg │ ├── keybase.html │ ├── keybase.svg │ ├── linkedin.html │ ├── linkedin.svg │ ├── rss.html │ ├── rss.svg │ ├── twitter.html │ ├── twitter.svg │ ├── website.html │ └── website.svg ├── calltoaction.html ├── contactlist.html ├── footer.html ├── head.html ├── header.html ├── image.html ├── nav_menu.html ├── piwik.html ├── post-li.html ├── post-ul.html └── sitemap-url.html ├── _layouts ├── about.html ├── archive.html ├── default.html ├── home.html ├── page.html ├── pagenotfound.html ├── post.html └── sitemap.html ├── _sass ├── academic.scss └── academic │ ├── _base.scss │ ├── _layout.scss │ └── _syntax-highlighting.scss ├── academic.gemspec ├── assets ├── main.scss └── opensans │ ├── OpenSans-Bold.ttf │ ├── OpenSans-Italic.ttf │ └── OpenSans-Regular.ttf ├── screenshot.png └── sitemaps.xml /.gitignore: -------------------------------------------------------------------------------- 1 | *.gem 2 | *.sh 3 | assets/img 4 | assets/favicons 5 | .bundle 6 | .sass-cache 7 | _site 8 | _posts 9 | _config.yml 10 | *.md 11 | !README.md 12 | Gemfile.lock 13 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | gemspec 3 | gem 'jekyll-feed' 4 | gem 'redcarpet' 5 | 6 | group :jekyll_plugins do 7 | gem 'jekyll-livereload' 8 | gem 'jekyll-last-modified-at' 9 | end 10 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 batlab 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # academic 2 | 3 | Academic is a [Jekyll](http://jekyllrb.com/) theme with a focus on simplicity, typography and flexibility. 4 | I originally designed it for my personal blog during my PhD thesis. 5 | 6 | Check out my [personal website](https://gaalcaras.com) or my [blog](https://sociologs.com) to get a better feel for the Academic theme. 7 | 8 | ![Academic screenshot](screenshot.png) 9 | 10 | **Simplicity**: both in design and configuration, Academic aims to let the writer and its readers focus on the content. 11 | Almost all of the theme configuration happens in the `_config.yml` file. 12 | 13 | **Typography**: the goal of Academic is to let the author write very long and detailed posts, while being kind to its readers' eyes. 14 | 15 | **Flexibility**: Academic can be used to generate different layouts while keeping the same look and feel. 16 | All features require you to *opt in*, which means that you can either use a very lean `_config.yml` or a very detailed one if you want to use more features. 17 | 18 | --- 19 | 20 | Table of contents: 21 | 22 | 23 | * [Features](#features) 24 | * [Installation](#installation) 25 | * [Usage](#usage) 26 | * [Change the brand color](#change-the-brand-color) 27 | * [Setup your `_config.yml` file](#setup-your-_config-yml-file) 28 | * [General settings](#general-settings) 29 | * [Author](#author) 30 | * [Navigation menu](#navigation-menu) 31 | * [Multilingual and i18n support](#multilingual-and-i18n-support) 32 | * [Plugins](#plugins) 33 | * [Layouts](#layouts) 34 | * [Post layout](#post-layout) 35 | * [Page layout](#page-layout) 36 | * [About layout](#about-layout) 37 | * [Archive layout](#archive-layout) 38 | * [404 layout](#404-layout) 39 | * [Sitemap layout](#sitemap-layout) 40 | * [Contributing](#contributing) 41 | * [Release log](#release-log) 42 | * [License](#license) 43 | 44 | ## Features 45 | 46 | + **Responsive design** on every page 47 | + Designed with **typography best practices** (and my own tastes) in mind: 48 | + Simple but elegant fonts, with modular scale 49 | + High contrast colors and backgrounds as much as possible ([read more](http://contrastrebellion.com/), [and more](https://backchannel.com/how-the-web-became-unreadable-a781ddc711b6)) 50 | + Comfortable line length (around 66 characters, [read more](http://webtypography.net/2.1.2)) 51 | + Attention to vertical rhythm, law of proximity and so on ([read more](http://typographyhandbook.com/)) 52 | + If you'd like a **multilingual** website, Academic has basic **i18n** support (no plugin required): 53 | + *Supported languages* : English, French 54 | + Lang selector to change languages automatically added in header and footer 55 | + Basic SEO support for multilingual pages (sitemap and ``) 56 | + Posts layout allows you to: 57 | + Add an **image thumbnail** and a **summary** 58 | + Use mathematical notations with **MathJax** (loaded only on posts) 59 | + **Tables and footnotes** styled by default (with the `redcarpet` markdown engine) 60 | + Add your name and a shortbio at the end of each post 61 | + Easily add a "call to action" (RSS feed, Twitter, etc.) at the end of each post and on your homepage 62 | + **Add a Creative Commons license** to your website directly from your `_config.yml` file 63 | + **Sitemap** and **404 page** layout 64 | + Piwik tracking 65 | + **About page** layout: 66 | + Responsive two-columns layout 67 | + Just fill out your usernames for Twitter, Github, LinkedIn, Keybase ; contact email or personal website ; link to your curriculum vitae. 68 | + Academic automatically loads your Github profile picture. 69 | + Choose between a **navigation menu** at the top or a **short pitch** for your blog 70 | + Navigation menu: 71 | + Hide pages from the navigation menu 72 | + Add external links in the menu from the `_config.yml` file 73 | 74 | ## Installation 75 | 76 | Add this line to your Jekyll site's Gemfile: 77 | 78 | ```ruby 79 | gem "academic" 80 | ``` 81 | 82 | And add this line to your Jekyll site's `_config.yml`: 83 | 84 | ```yaml 85 | theme: academic 86 | ``` 87 | 88 | And then execute: 89 | 90 | ``` 91 | $ bundle 92 | ``` 93 | 94 | Or install it yourself as: 95 | 96 | ``` 97 | $ gem install academic 98 | ``` 99 | 100 | Then add the `jekyll-data` plugin to your `Gemfile` ([see also](https://github.com/ashmaroli/jekyll-data#installation)): 101 | 102 | ```ruby 103 | group :jekyll_plugins do 104 | gem 'jekyll-data' 105 | end 106 | ``` 107 | 108 | I suggest you install and use `redcarpet` to generate your markdown ([read more](http://jekyllrb.com/docs/configuration/#redcarpet)). 109 | 110 | ## Usage 111 | 112 | ### Change the brand color 113 | 114 | Academic uses 4 shades of grey (very dark grey for the main content, ligther greys to lessen the emphasis on some elements) and a single "brand" color. 115 | 116 | By default, the brand color is `#d33682` (purple). If it's not to your taste, you can easily change it by overriding the `$brand-color` variable in `/assets/styles.scss`. 117 | 118 | ```scss 119 | $brand-color: red; 120 | ``` 121 | 122 | ### Setup your `_config.yml` file 123 | 124 | #### General settings 125 | 126 | `title_html`: [optional] you can style the title of your website with html elements. 127 | 128 | Example: 129 | 130 | ```html 131 | title_html: "helloworld" 132 | ``` 133 | 134 | `pitch`: [optional] a small sentence or motto to quickly describe your blog. If no pitch is detected, Academic will fill the top bar with a navigation menu. If you want to display a short pitch in the top bar, Academic will put thput the navigation menu in the footer. Please note that `pitch` is only used in the top bar ; it is different from the `description` field (used in the footer and the meta tags for search engines). 135 | 136 | `description`: [recommended] short description for search engines. It's displayed in the footer of every page. Not to be confused with `pitch`. 137 | 138 | `cc`: [optional] choose among the [Creative Commons](https://creativecommons.org/licenses/) licenses (v4). Accepted values are : `by`, `by-sa`, `by-nd`, `by-nc`, `by-nc-sa`, `by-nc-nd`. Defining the `cc` variable will add a small sentence in the footer. If no value is given, a small copyright is added instead. 139 | 140 | `nb_posts_page`: [optional] number of posts to display on the homepage. By default, all posts are listed. Note that you should create a page with the archive layout. 141 | 142 | `archive_permalink`: [optional] permalink of the archive page. Set to `"/archive"` by default. 143 | 144 | `repo`: [optional] link to your website repo. If defined, it's added in the footer. Nothing is displayed otherwise. 145 | 146 | `piwik`: [optional] 147 | 148 | + `url`: [mandatory] URL of your Piwik Instance without a trailing slash (like `mywebsite.com/piwik`) 149 | + `site_id`: [mandatory] The ID of your website in your Piwik instance 150 | 151 | #### Author 152 | 153 | `email`: [optional] add email address in about layout. 154 | 155 | `curriculum`: [optional] 156 | 157 | + `name`: [optional] text of the link. Default : Curriculum Vitae. 158 | + `url`: [mandatory] url of the curriculum file. 159 | 160 | `shortbio`: [optional] describe yourself in a sentence or two. If `shortbio` is defined, a small element is added at the end of the post to introduce the author to the readers. 161 | 162 | `author_display`: [optional] if `true`, the author's name (and `author_website`) is added in the footer. `false` by default. 163 | 164 | `author_website`: [optional] url to the external website of the author. If `author_website` exists, it is added in the about layout and in the footer (if `author_display` is `true`). 165 | 166 | `twitter_username`: [optional] your Twitter username. If it exists, your account will be linked in the "call to action" boxes (homepage and posts), in the footer and on the about page. 167 | 168 | `github_username`: [optional] your Github username. If it exists, your account will be linked in the footer and on the about page. 169 | 170 | `keybase_username`: [optional] your Keybase username. If it exists, your account will be linked on the about page. 171 | 172 | `linkedin_username`: [optional] your LinkedIn username. If it exists, your account will be linked on the about page. 173 | 174 | #### Navigation menu 175 | 176 | `nav_ext_links`: [optional] you can choose to add external links in the top bar. Each item has two attributes: 177 | 178 | + `name`: [mandatory] text for the link 179 | + `url`: [mandatory] url 180 | 181 | Example: 182 | 183 | ```yaml 184 | nav_ext_links: 185 | - name: Link 1 186 | url: http://jupiterbroadcasting.com/ 187 | - name: Link 2 188 | url: http://wallabag.org/ 189 | ``` 190 | 191 | #### Multilingual and i18n support 192 | 193 | Academic works perfectly well as a single language website. 194 | By default, Academic is in English. 195 | You can easily switch to another supported language : 196 | 197 | ```yaml 198 | langs: ["fr"] 199 | ``` 200 | 201 | If you need to translate part of your pages or posts, Academic also supports basic i18n and multilingual features. 202 | 203 | To enable multilingual mode, just add the following to your `_config.yml`: 204 | 205 | ```yaml 206 | langs: ["fr", "en"] 207 | defaults: 208 | - scope: 209 | path: "" 210 | values: 211 | lang: "fr" 212 | ``` 213 | 214 | The `langs` variable should be an array containing your languages. 215 | Important: the first item should be your "default" language (ie the language that you translate posts from or/and that has the largest content available). 216 | The double quotes around the language *do* matter. 217 | 218 | Don't forget to define a default lang for your whole website. 219 | 220 | If you want to translate some of the variables in your `_config.yml`, you can just do this: 221 | 222 | ```yaml 223 | title: 224 | fr: "Nom du site en Français" 225 | en: "English name of the website" 226 | ``` 227 | 228 | Translating posts and pages is very easy. 229 | Let's say my default lang is `fr` and I want to translate `_posts/billet-au-hasard.md` to English. 230 | 231 | ```yaml 232 | --- 233 | layout: post 234 | title: "Billet au hasard" 235 | permalink: /fr/billet-au-hasard/ 236 | date: 2017-02-14 15:32:29 +0100 237 | --- 238 | ``` 239 | 240 | First, I'll create a new file named `_posts/billet-au-hasard.en.md`. 241 | Both files have to share the *exact same name before the first extension* (`.md` or `.en.md`) in order to signal to Academic that these posts are translations of eachother. 242 | 243 | Then, in `_posts/billet-au-hasard.en.md`, add the lang and change the permalink in your frontmatter: 244 | 245 | ```yaml 246 | layout: post 247 | title: "Random post" 248 | permalink: /en/random-post 249 | date: 2017-02-14 15:32:29 +0100 250 | lang: en 251 | ``` 252 | 253 | That's it! 254 | Academic will handle the lang selector and will add `` to the `` section to improve SEO. 255 | 256 | Note that you have to handle the permalinks manually. 257 | I recommend that you use the subdirectory `/lang/` naming convention everywhere, as exemplified above. 258 | You should at least take care of your homepage URL. 259 | 260 | If you'd like Academic to support more languages, please contribute by adding the appropriate translations in `/_data/i18n_academic.yml`. 261 | 262 | #### Plugins 263 | 264 | Academic is compatible with the `jekyll-last-modified-at` plugin ([repo](https://github.com/gjtorikian/jekyll-last-modified-at)). If installed, the last modified date will be (discretely) displayed in the posts lists and in the post layout. 265 | 266 | If you specified a Github `repo`, the last modified date will point to the revision history of the file. 267 | 268 | ### Layouts 269 | 270 | #### Post layout 271 | 272 | In the yaml header, you can add some tags to help Academic. 273 | 274 | `summary`: [optional] a short text or abstract. Used in the posts lists and on the post page. 275 | 276 | `thumbnail`: [optional] relative path to image or absolute url to an image that describes your post. Used in the posts lists and on the post page. 277 | 278 | #### Page layout 279 | 280 | In the yaml header, you can add some tags to help Academic. 281 | 282 | `invisible`: [optional] if `true`, then this page will not be listed in the navigation menu. 283 | 284 | #### About layout 285 | 286 | Will automatically put the content of the page on the right column. The left column will automatically be filled with the author info provided in the `_config.yml`. 287 | 288 | #### Archive layout 289 | 290 | Create a `archive.md` page, choose the "archive" layout. You don't need to write anything in this file, all posts published will be listed in reverse chronological order. 291 | 292 | #### 404 layout 293 | 294 | Create a `404.md` page, set the layout: 295 | 296 | ``` 297 | layout: pagenotfound 298 | ``` 299 | 300 | The content of the page will be used in the 404 page. 301 | 302 | #### Sitemap layout 303 | 304 | Create a `sitemap.xml` page, set the layout: 305 | 306 | ``` 307 | layout: sitemap 308 | ``` 309 | 310 | You now have a sitemap you can feed to the search engines. 311 | 312 | ### Includes 313 | 314 | Sometimes you need to use figures and images in your posts, with detailed captions and maybe even the source of the image. 315 | The `image.html` allows you to do just that without all the HTML markup. 316 | 317 | ``` 318 | {% include image.html src="/assets/img/zotero-archives-numeriques/screencast.gif" 319 | caption="Notre solution en action" 320 | desc="Screencast de capture Zotero" 321 | source="Google" 322 | href="http://google.com"%} 323 | ``` 324 | 325 | ## Contributing 326 | 327 | Bug reports and pull requests are welcome on GitHub at https://github.com/gaalcaras/academic. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct. 328 | 329 | ## Release log 330 | 331 | + 0.1.3 [2016-12]: design refinements (page and about layouts) 332 | + 0.1.2 [2016-12]: bug fixes (footer, assets and gemfile cleaning) + `repo` var 333 | + 0.1.1 [2016-12]: bug fixes (404 page layout, footer, posts list) 334 | + 0.1.0 [2016-12]: first release of the theme. 335 | 336 | ## License 337 | 338 | The theme is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT). 339 | -------------------------------------------------------------------------------- /_data/academic_i18n.yml: -------------------------------------------------------------------------------- 1 | months: 2 | fr: ["janvier", "février", "mars", "avril", "mai", "juin", 3 | "juillet", "août", "septembre", "octobre", "novembre", "décembre"] 4 | dateformat: 5 | fr: "%e %B %Y" 6 | en: "%b %-d, %Y" 7 | lastupdated: 8 | fr: "mis à jour le" 9 | en: "last updated on" 10 | revhistory: 11 | fr: "Voir l'historique des révisions de ce billet" 12 | en: "See the revision history for this post" 13 | cta: 14 | like: 15 | fr: "Le blog vous intéresse ?" 16 | en: "Do you enjoy the blog?" 17 | post: 18 | fr: "Le post vous a plu ?" 19 | en: "Did you like that post?" 20 | rss: 21 | fr: ["Vous pouvez vous abonner au", "fil RSS", "du blog"] 22 | en: ["You can suscribe to the", "RSS feed", ""] 23 | twitter: 24 | fr: ["ou suivre", "sur Twitter"] 25 | en: ["or follow", "on Twitter"] 26 | links: 27 | fr: "Liens :" 28 | en: "Links :" 29 | by: 30 | fr: "par" 31 | en: "by" 32 | legal: 33 | fr: ["par", "est placé sous licence"] 34 | en: ["by", "is available under the license"] 35 | feed: 36 | fr: "flux RSS" 37 | en: "RSS feed" 38 | menu: 39 | fr: "Menu :" 40 | en: "Menu:" 41 | archive: 42 | fr: "Bienvenue dans les archives de ce blog. Vous trouverez ci-dessous la liste complète des billets publiés, ordonnés du plus récent au plus ancien." 43 | en: "Welcome to the archives of this blog. Below, you will find all published posts listed in reverse chronological order." 44 | all_posts: 45 | fr: ["Voir", "tous les articles publiés"] 46 | en: ["See", "all published posts"] 47 | notfound: 48 | fr: "Cette page a probablement déménagé vers une nouvelle adresse..." 49 | en: "I guess this page has moved somewhere else..." 50 | versions: 51 | fr: "Version française :" 52 | en: "English version:" 53 | no_versions: 54 | fr: "La version française de cette page n'existe pas encore :(" 55 | en: "The English version of this page doesn't exist yet :(" 56 | langs_avail: 57 | fr: "Langues :" 58 | en: "Languages:" 59 | cv: 60 | fr: "Curriculum Vitae" 61 | en: "Curriculum" 62 | -------------------------------------------------------------------------------- /_includes/_i18n/date.html: -------------------------------------------------------------------------------- 1 | {% assign plang = page.lang | default: site.langs[0] | default: "en" %} 2 | {% if plang != "en" %} 3 | {% assign dateformat = site.data.academic_i18n.dateformat[plang] %} 4 | {% assign date = include.date | date: dateformat %} 5 | {% assign eng_month = include.date | date: "%B" %} 6 | {% assign num_month = include.date | date: "%m" | minus: 1 %} 7 | 8 | {{ date | replace:eng_month, site.data.academic_i18n.months[plang][num_month] }} 9 | {% else %} 10 | {{ include.date | date: site.data.academic_i18n.dateformat[plang] }} 11 | {% endif %} 12 | -------------------------------------------------------------------------------- /_includes/_i18n/i18n.html: -------------------------------------------------------------------------------- 1 | {% capture text %} 2 | {% assign plang = page.lang | default: site.langs[0] | default: "en" %} 3 | {% assign val = include.value %} 4 | 5 | {% if val[plang] %} 6 | {% assign v = val[plang] %} 7 | {% else %} 8 | {% assign v = val %} 9 | {% endif %} 10 | 11 | {% if include.escape %} 12 | {{ v | escape | strip_newlines }} 13 | {% else %} 14 | {{ v | strip_newlines }} 15 | {% endif %} 16 | {% endcapture %} 17 | {{ text | strip_newlines }} 18 | -------------------------------------------------------------------------------- /_includes/_i18n/lang_selector.html: -------------------------------------------------------------------------------- 1 | {% assign plang = page.lang | default: site.langs[0] | default: "en" %} 2 | {% assign pagename = page.path | split:"." | first %} 3 | {% assign versions = site.data.academic_i18n.versions %} 4 | {% assign no_versions = site.data.academic_i18n.no_versions %} 5 | 6 | {% if page.layout == "post" %} 7 | {% assign i18n_posts = site.posts | where_exp:"p","p.path contains pagename" %} 8 | {% else %} 9 | {% assign i18n_posts = site.pages | where_exp:"p","p.path contains pagename" %} 10 | {% endif %} 11 | 12 | 43 | -------------------------------------------------------------------------------- /_includes/_i18n/last_modified_at.html: -------------------------------------------------------------------------------- 1 | {% assign plang = page.lang | default: site.langs[0] | default: "en" %} 2 | {% assign object = include.object %} 3 | 4 | {% if object.last_modified_at %} 5 | 6 | 7 | {% assign last = object.last_modified_at | date: '%Y%m%d' %} 8 | {% assign created = object.date | date: '%Y%m%d' %} 9 | 10 | {% if last != created %} 11 | · 12 | 13 | {% if site.repo %} 14 | 16 | {% endif %} 17 | 18 | {{ site.data.academic_i18n.lastupdated[plang] }} 19 | {% include _i18n/date.html date=object.last_modified_at %} 20 | 21 | {% if site.repo %} 22 | 23 | {% endif %} 24 | 25 | 26 | {% endif %} 27 | 28 | 29 | {% endif %} 30 | -------------------------------------------------------------------------------- /_includes/_i18n/link.html: -------------------------------------------------------------------------------- 1 | {% assign plang = page.lang | default: site.langs[0] | default: "en" %} 2 | {% assign nblangs = site.langs | size %} 3 | {% assign objects = site.pages | where_exp:"p","p.path contains include.path" %} 4 | 5 | {% if nblangs > 1 %} 6 | {% assign object = objects | where:"lang",plang | first %} 7 | {% else %} 8 | {% assign object = objects | first %} 9 | {% endif %} 10 | {{ object.url }} 11 | -------------------------------------------------------------------------------- /_includes/_i18n/sitetitle.html: -------------------------------------------------------------------------------- 1 | {% if include.class %} 2 | {% if site.pitch %} 3 | {% assign title_class = "site-title with-pitch" %} 4 | {% else %} 5 | {% assign title_class = "site-title" %} 6 | {% endif %} 7 | {% else %} 8 | {% assign title_class = "" %} 9 | {% endif %} 10 | 11 | {% capture title %} 12 | {% if site.title_html %} 13 | {% include _i18n/i18n.html value=site.title_html escape=false %} 14 | {% else %} 15 | {% include _i18n/i18n.html value=site.title %} 16 | {% endif %} 17 | {% endcapture %} 18 | 19 | {{ title }} 20 | -------------------------------------------------------------------------------- /_includes/_icons/email.html: -------------------------------------------------------------------------------- 1 | {% include _icons/email.svg %}contact 2 | -------------------------------------------------------------------------------- /_includes/_icons/email.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /_includes/_icons/file.html: -------------------------------------------------------------------------------- 1 | {% assign plang = page.lang | default: site.langs[0] | default: "en" %} 2 | {% include _icons/file.svg %} 3 | 4 | {% if include.curriculum.name %} 5 | {% include _i18n/i18n.html value=include.curriculum.name %} 6 | {% else %} 7 | {{ site.data.academic_i18n.cv[plang] }} 8 | {% endif %} 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /_includes/_icons/file.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /_includes/_icons/github.html: -------------------------------------------------------------------------------- 1 | {% include _icons/github.svg %}{{ include.username }} 2 | -------------------------------------------------------------------------------- /_includes/_icons/github.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /_includes/_icons/keybase.html: -------------------------------------------------------------------------------- 1 | {% include _icons/keybase.svg %}{{ include.username }} 2 | -------------------------------------------------------------------------------- /_includes/_icons/keybase.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /_includes/_icons/linkedin.html: -------------------------------------------------------------------------------- 1 | {% include _icons/linkedin.svg %}{{ include.username }} 2 | -------------------------------------------------------------------------------- /_includes/_icons/linkedin.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /_includes/_icons/rss.html: -------------------------------------------------------------------------------- 1 | {% assign plang = page.lang | default: site.langs[0] | default: "en" %} 2 | {% include _icons/rss.svg %} 3 | 4 | {{ site.data.academic_i18n.feed[plang] }} 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /_includes/_icons/rss.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /_includes/_icons/twitter.html: -------------------------------------------------------------------------------- 1 | {% include _icons/twitter.svg %}{{ include.username }} 2 | -------------------------------------------------------------------------------- /_includes/_icons/twitter.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /_includes/_icons/website.html: -------------------------------------------------------------------------------- 1 | {% capture url %}{% include _i18n/i18n.html value=include.url %}{% endcapture %} 2 | {% include _icons/website.svg %}{{ url | replace:'https://','' | replace: 'http://','' }} 3 | -------------------------------------------------------------------------------- /_includes/_icons/website.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /_includes/calltoaction.html: -------------------------------------------------------------------------------- 1 | {% assign plang = page.lang | default: site.langs[0] | default: "en" %} 2 |
3 | {% assign cta = site.data.academic_i18n.cta %} 4 | {% if page.layout == "home" or page.layout == "archive" %} 5 | {{ cta.like[plang] | escape }} 6 | {% else if page.layout == "post" %} 7 | {{ cta.post[plang] | escape }} 8 | {% else %} 9 | {% endif %} 10 | 11 | {{ cta.rss[plang][0] }} 12 | {{ cta.rss[plang][1] }} 13 | {{ cat.rss[plang][2]}} 14 | 15 | {% if site.twitter_username %} 16 | {{ cta.twitter[plang][0] }} 17 | @{{ site.twitter_username }} 18 | {{ cta.twitter[plang][1] }} 19 | {% endif %}. 20 |
21 | -------------------------------------------------------------------------------- /_includes/contactlist.html: -------------------------------------------------------------------------------- 1 | {% assign plang = page.lang | default: site.langs[0] | default: "en" %} 2 | 3 | {{ site.data.academic_i18n.links[plang] }} 4 | 5 | 35 | -------------------------------------------------------------------------------- /_includes/footer.html: -------------------------------------------------------------------------------- 1 | {% assign plang = page.lang | default: site.langs[0] | default: "en" %} 2 | {% assign i18n = site.data.academic_i18n %} 3 | 74 | 75 | {% if page.layout == "post" %} 76 | 79 | {% endif %} 80 | 81 | -------------------------------------------------------------------------------- /_includes/head.html: -------------------------------------------------------------------------------- 1 | {% assign plang = page.lang | default: site.langs[0] | default: "en" %} 2 | 3 | 4 | 5 | 6 | 7 | {% if page.seo.title %} 8 | {{ page.seo.title }} 9 | {% else %} 10 | {{ page.title | append: " | " | default:"" }}{% include _i18n/i18n.html value=site.title %} 11 | {% endif %} 12 | 13 | {% if page.seo.description %} 14 | 15 | {% elsif page.summary %} 16 | 17 | {% else %} 18 | 19 | {% endif %} 20 | 21 | 22 | 23 | 24 | 25 | {% capture favicons %} 26 | {% for file in site.static_files %} 27 | {% if file.path contains "apple-touch-icon.png" %} 28 | 29 | {% endif %} 30 | 31 | {% if file.path contains "favicon-16x16.png" %} 32 | 33 | {% endif %} 34 | 35 | {% if file.path contains "favicon-32x32.png" %} 36 | 37 | {% endif %} 38 | 39 | {% if file.path contains "manifest.json" %} 40 | 41 | {% endif %} 42 | 43 | {% if file.path contains "safari-pinned-tab.svg" %} 44 | 45 | {% endif %} 46 | 47 | {% endfor %} 48 | {% endcapture %} 49 | {{ favicons | strip_newlines | lstrip }} 50 | 51 | 52 | {% assign pagename = page.path | split:"." | first %} 53 | 54 | {% if page.layout == "post" %} 55 | {% assign i18n_posts = site.posts | where_exp:"p","p.path contains pagename" %} 56 | {% else %} 57 | {% assign i18n_posts = site.pages | where_exp:"p","p.path contains pagename" %} 58 | {% endif %} 59 | 60 | {% for t_lang in site.langs %} 61 | {% unless t_lang == plang %} 62 | {% assign t = i18n_posts | where:"lang",t_lang | first %} 63 | 64 | {% if t %} 65 | 66 | {% endif %} 67 | {% endunless %} 68 | {% endfor %} 69 | 70 | {% if site.piwik %} 71 | {% include piwik.html %} 72 | {% endif %} 73 | 74 | {% if jekyll.environment == 'production' %} 75 | {% endif %} 76 | 77 | 78 | -------------------------------------------------------------------------------- /_includes/header.html: -------------------------------------------------------------------------------- 1 | 36 | -------------------------------------------------------------------------------- /_includes/image.html: -------------------------------------------------------------------------------- 1 |
2 | {{ include.desc }} 3 |
{{ include.caption }}{% if include.source %} @ 4 | {% if include.href %}{% endif %} 5 | {{ include.source }} 6 | {% if include.href %}{% endif %} 7 | {% endif %} 8 |
9 |
10 | -------------------------------------------------------------------------------- /_includes/nav_menu.html: -------------------------------------------------------------------------------- 1 | {% assign plang = page.lang | default: site.langs[0] | default: "en" %} 2 | {% assign nblangs = site.langs | size %} 3 | {{ site.data.academic_i18n.menu[plang] }} 4 | 27 | -------------------------------------------------------------------------------- /_includes/piwik.html: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | -------------------------------------------------------------------------------- /_includes/post-li.html: -------------------------------------------------------------------------------- 1 |
  • 2 |

    3 | {{ post.title | escape }} 4 |

    5 | 6 | 7 | {% include _i18n/date.html date=post.date %} 8 | {% include _i18n/last_modified_at.html object=post %} 9 | 10 | 11 | 12 | {% if post.thumbnail %} 13 |
    14 | {{ post.title | escape }} 15 |
    16 | {% endif %} 17 | 18 |

    {{ post.summary }}

    19 |
  • 20 | -------------------------------------------------------------------------------- /_includes/post-ul.html: -------------------------------------------------------------------------------- 1 | {% assign plang = page.lang | default: site.langs[0] | default: "none" %} 2 | {% assign nblang = site.langs | size %} 3 | {% if include.limit %} 4 | {% assign limit = site.nb_posts_page %} 5 | {% else %} 6 | {% assign limit = 1000000 %} 7 | {% endif %} 8 | 9 | 20 | -------------------------------------------------------------------------------- /_includes/sitemap-url.html: -------------------------------------------------------------------------------- 1 | {% assign p_done = "404" %} 2 | {% for p in include.objects %} 3 | {% unless p.path contains ".xml" %} 4 | {% unless p.path contains ".scss" %} 5 | {% assign pname = p.path | split:"." | first %} 6 | {% assign p_done_arr = p_done | split:"," %} 7 | {% unless p_done_arr contains pname %} 8 | 9 | {{ site.url }}{{ p.url | url_escape }} 10 | {% assign versions = include.objects | where_exp:"p","p.path contains pname" %} 11 | {% for v in versions %} 12 | 17 | {% endfor %} 18 | {% assign p_done = p_done | append:"," | append:pname %} 19 | {% if p.layout == "post" %} 20 | {{ p.last_modified_at | default:p.date | date_to_xmlschema }} 21 | {% endif %} 22 | weekly 23 | {% if p.layout == "home" %} 24 | 1 25 | {% endif %} 26 | 27 | {% endunless %} 28 | {% endunless %} 29 | {% endunless %} 30 | {% endfor %} 31 | -------------------------------------------------------------------------------- /_layouts/about.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
    6 |
    7 | 8 | {% if site.github_username %} 9 | {{ site.author }} 10 | {% endif %} 11 | 12 | 25 | 26 | 33 | 34 | {% include contactlist.html %} 35 | 36 |
    37 |
    38 | 39 |

    {{ page.title }}

    40 | 41 |
    42 | {{ content }} 43 |
    44 | 45 |
    46 |
    47 | -------------------------------------------------------------------------------- /_layouts/archive.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 | {% assign plang = page.lang | default: site.langs[0] | default: "en" %} 6 |
    7 |
    8 | {{ site.data.academic_i18n.archive[plang] }} 9 |
    10 | 11 | {{ content }} 12 | 13 | {% include post-ul.html %} 14 | 15 | {% include calltoaction.html %} 16 | 17 |
    18 | -------------------------------------------------------------------------------- /_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% include head.html %} 5 | 6 | 7 | 8 | {% include header.html %} 9 | 10 | {% if page.layout == "post" %} 11 |
    12 | {% else %} 13 |
    14 | {% endif %} 15 |
    16 | {{ content }} 17 |
    18 |
    19 | 20 | {% include footer.html %} 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /_layouts/home.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 | {% assign plang = page.lang | default: site.langs[0] | default: "en" %} 6 | {% if site.pitch == null %} 7 | {% assign div_class = "home" %} 8 | {% else %} 9 | {% assign div_class = "home pitch" %} 10 | {% endif %} 11 | 12 |
    13 | {% unless site.pitch %} 14 |

    {% include _i18n/i18n.html value=site.description %}

    15 | {% endunless %} 16 | 17 | {{ content }} 18 | 19 | {% include post-ul.html limit=true %} 20 | 21 | {% include calltoaction.html %} 22 | 23 | {% assign nb_posts = site.posts | size %} 24 | 25 | {% if nb_posts > site.nb_posts_page %} 26 |
    27 | {{ site.data.academic_i18n.all_posts[plang][0] }} 28 | {{ site.data.academic_i18n.all_posts[plang][1] }}.
    29 | {% endif %} 30 | 31 |
    32 | -------------------------------------------------------------------------------- /_layouts/page.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |

    {{ page.title | escape }}

    6 | 7 | {{ content }} 8 | -------------------------------------------------------------------------------- /_layouts/pagenotfound.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 | {% assign plang = page.lang | default: site.langs[0] | default: "en" %} 6 |
    7 |
    404
    8 |
    {{ site.data.academic_i18n.notfound[plang] }}
    9 |
    10 | 11 | {{ page.content }} 12 | -------------------------------------------------------------------------------- /_layouts/post.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 |
    5 | 6 | {% if page.thumbnail %} 7 |
    8 | {% else %} 9 |
    10 | {% endif %} 11 | {% if page.thumbnail %} 12 | {{ page.title | escape }} 13 | {% endif %} 14 |
    15 |

    {{ page.title | escape }}

    16 | 25 |

    {{ page.summary }}

    26 |
    27 |
    28 | 29 |
    30 | {{ content }} 31 |
    32 | 33 | {% include calltoaction.html %} 34 | 35 | {% if site.shortbio %} 36 | 49 | {% endif %} 50 | 51 |
    52 | -------------------------------------------------------------------------------- /_layouts/sitemap.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {% include sitemap-url.html objects=site.pages %} 4 | {% include sitemap-url.html objects=site.posts %} 5 | 6 | -------------------------------------------------------------------------------- /_sass/academic.scss: -------------------------------------------------------------------------------- 1 | // Define defaults for each variable. 2 | 3 | $type-scale-large: ( 4 | h1: 2.941rem, 5 | h2: 2.111rem, 6 | h3: 1.663rem, 7 | h4: 1.333rem, 8 | p: 1.25rem, 9 | small: 1.15rem, 10 | vsmall: 1rem, 11 | ); 12 | 13 | $type-scale-medium: ( 14 | h1: 2.441rem, 15 | h2: 1.653em, 16 | h3: 1.563rem, 17 | h4: 1.333rem, 18 | p: 1.25rem, 19 | small: 1.15rem, 20 | vsmall: 1rem, 21 | ); 22 | 23 | $type-scale-small: ( 24 | h1: 2.148rem, 25 | h2: 1.719rem, 26 | h3: 1.375rem, 27 | h4: 1.233rem, 28 | p: 1.1rem, 29 | small: 0.95rem, 30 | vsmall: 0.85rem, 31 | ); 32 | 33 | $type-line-large: ( 34 | h1: map-get($type-scale-large, h1)*1.1, 35 | h2: map-get($type-scale-large, h2)*1.2, 36 | h3: map-get($type-scale-large, h3)*1.2, 37 | h4: map-get($type-scale-large, h4)*1.2, 38 | p: map-get($type-scale-large, p)*1.6, 39 | small: map-get($type-scale-large, small)*1.6, 40 | vsmall: map-get($type-scale-large, vsmall)*1.6, 41 | ); 42 | 43 | $type-line-medium: ( 44 | h1: map-get($type-scale-medium, h1)*1.1, 45 | h2: map-get($type-scale-medium, h2)*0.8, 46 | h3: map-get($type-scale-medium, h3)*1.3, 47 | h4: map-get($type-scale-medium, h4)*1.3, 48 | p: map-get($type-scale-medium, p)*1.6, 49 | small: map-get($type-scale-medium, small)*1.6, 50 | vsmall: map-get($type-scale-medium, vsmall)*1.6, 51 | ); 52 | 53 | $type-line-small: ( 54 | h1: map-get($type-scale-small, h1)*1.1, 55 | h2: map-get($type-scale-small, h2), 56 | h3: map-get($type-scale-small, h3)*0.9, 57 | h4: map-get($type-scale-small, h4)*0.9, 58 | p: map-get($type-scale-small, p)*1.6, 59 | small: map-get($type-scale-small, small)*1.6, 60 | vsmall: map-get($type-scale-small, vsmall)*1.6, 61 | ); 62 | 63 | 64 | $breakpoint-medium: 75em; 65 | $breakpoint-small: 45em; 66 | 67 | @mixin size($level) { 68 | font-size: map-get($type-scale-large, $level); 69 | line-height: map-get($type-line-large, $level); 70 | 71 | @media (max-width: $breakpoint-medium) { 72 | font-size: map-get($type-scale-medium, $level); 73 | line-height: map-get($type-line-medium, $level); 74 | } 75 | @media (max-width: $breakpoint-small) { 76 | font-size: map-get($type-scale-small, $level); 77 | line-height: map-get($type-line-medium, $level); 78 | } 79 | } 80 | 81 | $base-font-family: "PT Serif", serif !default; 82 | $base-font-size: 16px !default; 83 | $base-font-weight: 400 !default; 84 | $small-font-size: $base-font-size * 0.875 !default; 85 | 86 | $alt-font-family: "Open Sans", sans-serif !default; 87 | $alt-font-weight: bold !default; 88 | 89 | $spacing-unit: 50px !default; 90 | 91 | $text-color: #111 !default; 92 | $background-color: #fdfdfd !default; 93 | $brand-color: #d33682 !default; 94 | 95 | $grey-color: #3F3F3F !default; 96 | $grey-color-light: lighten($grey-color, 50%) !default; 97 | $grey-color-lighter: lighten($grey-color, 90%) !default; 98 | $grey-color-dark: darken($grey-color, 25%) !default; 99 | 100 | // Width of the content area 101 | $content-width: 700px; 102 | 103 | $on-palm: 600px !default; 104 | $on-laptop: 800px !default; 105 | 106 | // Use media queries like this: 107 | // @include media-query($on-palm) { 108 | // .wrapper { 109 | // padding-right: $spacing-unit / 2; 110 | // padding-left: $spacing-unit / 2; 111 | // } 112 | // } 113 | @mixin media-query($device) { 114 | @media screen and (max-width: $device) { 115 | @content; 116 | } 117 | } 118 | 119 | // Import partials. 120 | @import 121 | "academic/base", 122 | "academic/layout", 123 | "academic/syntax-highlighting" 124 | ; 125 | -------------------------------------------------------------------------------- /_sass/academic/_base.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Reset some basic elements 3 | */ 4 | body, h1, h2, h3, h4, h5, h6, 5 | p, blockquote, pre, hr, 6 | dl, dd, ol, ul, figure { 7 | margin: 0; 8 | padding: 0; 9 | } 10 | 11 | 12 | 13 | /** 14 | * Basic styling 15 | */ 16 | body { 17 | font-family: $base-font-family; 18 | @include size(p); 19 | font-weight: $base-font-weight; 20 | color: $text-color; 21 | background-color: $background-color; 22 | -webkit-text-size-adjust: 100%; 23 | -webkit-font-feature-settings: "kern" 1; 24 | -moz-font-feature-settings: "kern" 1; 25 | -o-font-feature-settings: "kern" 1; 26 | font-feature-settings: "kern" 1; 27 | font-kerning: normal; 28 | font-variant-ligatures: common-ligatures contextual; 29 | -moz-font-feature-settings: "kern", "liga", "clig", "calt"; 30 | -ms-font-feature-settings: "kern", "liga", "clig", "alt"; 31 | -webkit-font-feature-settings: "kern", "liga", "clig", "calt"; 32 | font-feature-settings: "kern", "liga", "clig", "calt"; 33 | overflow-x: hidden; 34 | } 35 | 36 | 37 | 38 | /** 39 | * Set `margin-bottom` to maintain vertical rhythm 40 | */ 41 | p, blockquote, pre, 42 | ul, ol, dl, figure, 43 | %vertical-rhythm { 44 | margin-bottom: $spacing-unit / 2; 45 | } 46 | 47 | h1, h2, h3, h4, h5, h6, 48 | %vertical-rhythm { 49 | margin-top: $spacing-unit; 50 | } 51 | 52 | h1, 53 | %vertical-rhythm { 54 | margin-bottom: $spacing-unit / 7; 55 | } 56 | 57 | h4, h5, h6, 58 | %vertical-rhythm { 59 | margin-bottom: $spacing-unit / 7; 60 | } 61 | 62 | h1 + h2, h2 + h3, h3 + h4, 63 | h1 + h3, h1 + h4, h2 + h4 { 64 | margin-top: $spacing-unit /2; 65 | } 66 | 67 | 68 | 69 | /** 70 | * Images 71 | */ 72 | // img { 73 | // position: relative; 74 | // max-width: 60vw; 75 | // left: calc(-20vw + 20%); 76 | // vertical-align: middle; 77 | // } 78 | 79 | figure { 80 | text-align: center; 81 | 82 | figcaption { 83 | margin-top: 5px; 84 | font-style: italic; 85 | @include size(vsmall); 86 | } 87 | } 88 | 89 | img { 90 | vertical-align: middle; 91 | max-width: 100%; 92 | } 93 | 94 | /** 95 | * Figures 96 | */ 97 | figure > img { 98 | display: block; 99 | } 100 | 101 | figcaption { 102 | font-size: $small-font-size; 103 | } 104 | 105 | 106 | 107 | /** 108 | * Lists 109 | */ 110 | ul, ol { 111 | margin-left: $spacing-unit; 112 | } 113 | 114 | li { 115 | > ul, 116 | > ol { 117 | margin-bottom: 0; 118 | } 119 | } 120 | 121 | 122 | 123 | /** 124 | * Headings 125 | */ 126 | 127 | h1,h2,h3,h4,h5,h6 { 128 | font-kerning: normal; 129 | font-variant-ligatures: common-ligatures contextual; 130 | -moz-font-feature-settings: "kern", "liga", "clig", "calt"; 131 | -ms-font-feature-settings: "kern", "liga", "clig", "alt"; 132 | -webkit-font-feature-settings: "kern", "liga", "clig", "calt"; 133 | font-feature-settings: "kern", "liga", "clig", "calt"; 134 | } 135 | 136 | h1,h2 { 137 | letter-spacing: -1px; 138 | font-family: $alt-font-family; 139 | @include size(h1); 140 | font-weight: $alt-font-weight; 141 | } 142 | 143 | h2 { 144 | @include size(h2); 145 | } 146 | 147 | h3 { 148 | font-family: $base-font-family; 149 | } 150 | 151 | h3, h4{ 152 | font-weight: normal; 153 | } 154 | 155 | h3 { 156 | font-weight:bold; 157 | @include size(h3); 158 | } 159 | 160 | h4 { 161 | @include size(h4); 162 | } 163 | 164 | 165 | 166 | /** 167 | * Links 168 | */ 169 | a { 170 | color: $brand-color; 171 | text-decoration: none; 172 | 173 | &:visited { 174 | color: darken($brand-color, 5%); 175 | } 176 | 177 | &:hover { 178 | color: $text-color; 179 | text-decoration: underline; 180 | } 181 | } 182 | 183 | 184 | 185 | /** 186 | * Blockquotes 187 | */ 188 | 189 | blockquote { 190 | color: $grey-color; 191 | padding-left: $spacing-unit / 2; 192 | padding-right: $spacing-unit; 193 | @include size(small); 194 | 195 | > :last-child { 196 | margin-bottom: 0; 197 | } 198 | } 199 | 200 | 201 | 202 | /** 203 | * Code formatting 204 | */ 205 | 206 | p code, 207 | li code { 208 | @include size(vsmall); 209 | } 210 | 211 | pre { 212 | display: block; 213 | padding-top: $spacing-unit / 3; 214 | padding-bottom: $spacing-unit / 3; 215 | padding-left: 10px; 216 | overflow-x: auto; 217 | @include size(vsmall); 218 | } 219 | 220 | /** 221 | * Table 222 | */ 223 | 224 | table { 225 | margin: auto; 226 | border-collapse: collapse; 227 | @include size(small); 228 | 229 | 230 | th { 231 | border-bottom: 1px solid $text-color; 232 | padding: 5px; 233 | } 234 | 235 | td { 236 | padding: 5px; 237 | } 238 | } 239 | 240 | h1 + table, h2 + table, 241 | h3 + table, h4 + table, 242 | h5 + table, h6 + table { 243 | margin-top: $spacing-unit / 2; 244 | } 245 | 246 | /** 247 | * Hr 248 | */ 249 | 250 | hr { 251 | color: $grey-color; 252 | margin: $spacing-unit auto $spacing-unit / 2 auto; 253 | width: 100%; 254 | padding-left: 10%; 255 | border: none; 256 | border-top: 1px dashed $grey-color; 257 | @include size(small); 258 | } 259 | 260 | 261 | /** 262 | * Wrapper 263 | */ 264 | .wrapper { 265 | max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2)); 266 | max-width: calc(#{$content-width} - (#{$spacing-unit} * 2)); 267 | margin-right: auto; 268 | margin-left: auto; 269 | padding-right: $spacing-unit; 270 | padding-left: $spacing-unit; 271 | @extend %clearfix; 272 | 273 | @include media-query($on-laptop) { 274 | max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit})); 275 | max-width: calc(#{$content-width} - (#{$spacing-unit})); 276 | padding-right: $spacing-unit / 2; 277 | padding-left: $spacing-unit / 2; 278 | } 279 | } 280 | 281 | 282 | 283 | /** 284 | * Clearfix 285 | */ 286 | %clearfix:after { 287 | content: ""; 288 | display: table; 289 | clear: both; 290 | } 291 | 292 | 293 | 294 | /** 295 | * Icons 296 | */ 297 | .icon > svg { 298 | display: inline-block; 299 | vertical-align: middle; 300 | 301 | circle, 302 | path:last-of-type { 303 | fill: $grey-color; 304 | } 305 | } 306 | 307 | /** 308 | * Footnotes 309 | */ 310 | 311 | .footnotes { 312 | @include size(small); 313 | color: $grey-color; 314 | } 315 | 316 | /** 317 | * Forms 318 | */ 319 | 320 | form { 321 | 322 | input { 323 | @include size(small); 324 | color: $grey-color; 325 | font-family: $alt-font-family; 326 | background: $background-color; 327 | border: 1px solid $grey-color; 328 | padding: $spacing-unit / 6; 329 | 330 | &[type=email] { 331 | &:focus { 332 | border-color: $brand-color; 333 | } 334 | } 335 | 336 | &[type=submit] { 337 | &:hover { 338 | color: $background-color; 339 | background: $grey-color; 340 | } 341 | 342 | &:active { 343 | background: $brand-color; 344 | } 345 | } 346 | } 347 | } 348 | -------------------------------------------------------------------------------- /_sass/academic/_layout.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Site header 3 | */ 4 | .site-header { 5 | border-top: 5px solid $grey-color; 6 | border-bottom: 1px solid $grey-color-light; 7 | 8 | @include media-query($on-laptop) { 9 | min-height: 100px; 10 | } 11 | 12 | // Positioning context for the mobile navigation icon 13 | position: relative; 14 | 15 | .site-header-float { 16 | min-height: 60px; 17 | } 18 | 19 | .lang-selector { 20 | position: absolute; 21 | z-index: 900; 22 | top: 0px; 23 | right: 0px; 24 | width: 30px; 25 | text-align: center; 26 | margin-right: 10px; 27 | padding: 10px; 28 | 29 | .lang-intro { 30 | display: none; 31 | } 32 | 33 | .lang { 34 | font-variant: small-caps; 35 | text-transform: capitalize; 36 | list-style: none; 37 | line-height: 40px; 38 | 39 | &:nth-child(n+3) { 40 | display: none; 41 | padding: 10px 0 10px 0; 42 | } 43 | 44 | &:nth-child(2) { 45 | padding-bottom: 10px; 46 | } 47 | 48 | a { 49 | color: $grey-color-light; 50 | } 51 | 52 | } 53 | 54 | &:hover { 55 | padding-bottom: 0px; 56 | background: $grey-color; 57 | 58 | .lang:first-child { 59 | padding-bottom: 10px; 60 | } 61 | 62 | .lang a { 63 | color: $brand-color; 64 | 65 | &:hover { 66 | text-decoration: none; 67 | color: $grey-color-light; 68 | } 69 | } 70 | 71 | .lang:nth-child(n+3) { 72 | border-top: 1px solid $grey-color-light; 73 | display: block; 74 | } 75 | } 76 | 77 | @include media-query($on-laptop) { 78 | position: relative; 79 | left: 0; 80 | width: auto; 81 | clear: both; 82 | margin: 0 -$spacing-unit/2 0 -$spacing-unit/2; 83 | padding: 5px 5px 5px $spacing-unit/2; 84 | background: $grey-color-lighter; 85 | text-align: left; 86 | @include size(small); 87 | 88 | .lang-intro { 89 | display: inline-block; 90 | } 91 | 92 | .lang:nth-child(n+1) { 93 | padding: 5px 5px 5px 0; 94 | line-height: normal; 95 | display: inline-block; 96 | 97 | a { 98 | color: $grey-color-dark; 99 | 100 | &:hover { 101 | text-decoration: underline 102 | } 103 | } 104 | } 105 | 106 | .lang:nth-child(n+3):before { 107 | content: "| "; 108 | } 109 | 110 | &:hover { 111 | background: $grey-color-lighter; 112 | padding: 5px 5px 5px $spacing-unit/2; 113 | 114 | .lang:nth-child(n+1) { 115 | padding: 5px 5px 5px 0; 116 | display: inline-block; 117 | border: none; 118 | 119 | a { color: $grey-color-dark; } 120 | } 121 | } 122 | 123 | @include media-query($on-palm) { 124 | margin-top: 0px; 125 | } 126 | } 127 | } 128 | } 129 | 130 | .site-title { 131 | display: inline-block; 132 | font-size: 26px; 133 | font-weight: 300; 134 | line-height: 55px; 135 | letter-spacing: -1px; 136 | margin-bottom: -5px; 137 | 138 | &, 139 | &:visited { 140 | color: $grey-color-dark; 141 | } 142 | &:hover { 143 | text-decoration: none; 144 | border-bottom: 5px $brand-color solid; 145 | } 146 | 147 | b { 148 | font-weight: 600; 149 | } 150 | } 151 | 152 | .with-pitch { 153 | &:hover { 154 | border-bottom: none; 155 | color: $brand-color; 156 | } 157 | } 158 | 159 | .site-pitch { 160 | display: inline-block; 161 | clear: both; 162 | line-height: 60px; 163 | padding-left: 10px; 164 | color: $grey-color; 165 | 166 | &:before { 167 | content: " | " 168 | } 169 | 170 | @include media-query($on-palm) { 171 | display: block; 172 | padding-left: 0; 173 | padding-bottom: 15px; 174 | line-height: initial; 175 | color: $grey-color-light; 176 | 177 | &:before { 178 | content: "" 179 | } 180 | } 181 | } 182 | 183 | 184 | .site-nav { 185 | float: right; 186 | line-height: 60px; 187 | z-index: 1000; 188 | 189 | .menu-icon { 190 | display: none; 191 | } 192 | 193 | .nav-list-title { 194 | display: none; 195 | } 196 | 197 | 198 | .nav-list { 199 | list-style: none; 200 | margin: 0; 201 | 202 | li { 203 | display: inline-block; 204 | height: 55px; 205 | 206 | .page-link { 207 | color: $text-color; 208 | 209 | &:hover { 210 | text-decoration: none; 211 | } 212 | } 213 | 214 | // Gaps between nav items, but not on the last one 215 | &:not(:last-child) { 216 | margin-right: 15px; 217 | } 218 | 219 | &:hover { 220 | border-bottom: 5px $grey-color solid; 221 | } 222 | 223 | @include media-query($on-palm) { 224 | height: auto; 225 | line-height: normal; 226 | 227 | &:nth-child(n+0) { 228 | margin: 0; 229 | height: auto; 230 | padding: 0 10px 0px; 231 | } 232 | 233 | a { 234 | margin: 0px; 235 | padding: 0px; 236 | } 237 | 238 | } 239 | 240 | } 241 | } 242 | 243 | @include media-query($on-palm) { 244 | position: absolute; 245 | top: 9px; 246 | right: $spacing-unit / 2; 247 | background-color: $background-color; 248 | border: 1px solid $grey-color-light; 249 | border-radius: 5px; 250 | text-align: right; 251 | margin-left: 20px; 252 | 253 | .menu-icon { 254 | display: block; 255 | float: right; 256 | width: 36px; 257 | height: 26px; 258 | line-height: 0; 259 | padding-top: 10px; 260 | text-align: center; 261 | 262 | > svg path { 263 | fill: $grey-color-dark; 264 | } 265 | } 266 | 267 | .trigger { 268 | clear: both; 269 | display: none; 270 | } 271 | 272 | &:hover .trigger { 273 | display: block; 274 | padding-bottom: 5px; 275 | } 276 | 277 | .nav-list { 278 | .page-link:hover { 279 | color: $brand-color; 280 | } 281 | 282 | li:hover { 283 | border: none; 284 | } 285 | } 286 | 287 | .page-link { 288 | display: block; 289 | padding: 5px 10px; 290 | 291 | &:not(:last-child) { 292 | margin-right: 0; 293 | } 294 | margin-left: 20px; 295 | } 296 | } 297 | } 298 | 299 | /** 300 | * Site footer 301 | */ 302 | 303 | .site-footer { 304 | @include size(vsmall); 305 | border-top: 1px solid $grey-color-light; 306 | color: $grey-color; 307 | 308 | a { 309 | color: $grey-color; 310 | } 311 | 312 | .footer-col { 313 | list-style: none; 314 | margin-left: 0; 315 | margin-top: $spacing-unit/2; 316 | margin-bottom: $spacing-unit; 317 | 318 | .author, .author a { 319 | color: $grey-color-light; 320 | } 321 | } 322 | 323 | .footer-col-1 { 324 | width: -webkit-calc(65% - (#{$spacing-unit} / 2)); 325 | width: calc(65% - (#{$spacing-unit} / 2)); 326 | float: left; 327 | } 328 | 329 | .footer-col-2 { 330 | width: -webkit-calc(35% - (#{$spacing-unit} / 2)); 331 | width: calc(35% - (#{$spacing-unit} / 2)); 332 | float: right; 333 | } 334 | 335 | .single-col { 336 | clear: both; 337 | list-style: none; 338 | margin: 0; 339 | text-align: center; 340 | 341 | li { 342 | display: inline-block; 343 | margin-left: 5px; 344 | margin-right: 5px; 345 | } 346 | 347 | .username { 348 | display: none; 349 | } 350 | 351 | svg { 352 | width: 20px; 353 | height: 20px; 354 | } 355 | 356 | .icon { 357 | &:hover { 358 | circle, 359 | path:last-of-type { 360 | fill: $text-color; 361 | } 362 | } 363 | } 364 | } 365 | 366 | .nav-list-title, 367 | .contact-list-title { 368 | display: none; 369 | } 370 | 371 | .contact-list { 372 | a .username:hover { 373 | text-decoration: underline; 374 | } 375 | 376 | @include media-query($on-palm) { 377 | margin-bottom: $spacing-unit / 2; 378 | } 379 | } 380 | 381 | .bottom { 382 | color: $grey-color-light; 383 | width: 100%; 384 | clear: both; 385 | float: none; 386 | text-align: center; 387 | margin-top: $spacing-unit; 388 | margin-bottom: $spacing-unit; 389 | 390 | @include media-query($on-palm) { 391 | margin-top: 0px; 392 | } 393 | 394 | a { 395 | color: $grey-color-light; 396 | } 397 | 398 | .cc-licence { 399 | text-transform: uppercase; 400 | } 401 | 402 | .lang-selector { 403 | display: inline-block; 404 | list-style: none; 405 | color: $grey-color; 406 | margin: $spacing-unit / 4 0 0 0; 407 | padding: 10px; 408 | 409 | @include media-query($on-palm) { 410 | text-align: left; 411 | padding-left: 0px; 412 | margin: 0px 0px $spacing-unit/2 0px; 413 | 414 | .lang-intro { 415 | font-weight: bold; 416 | } 417 | } 418 | 419 | .lang { 420 | display: inline-block; 421 | text-transform: lowercase; 422 | 423 | a { 424 | color: $grey-color; 425 | } 426 | 427 | &:nth-child(n+3) { 428 | &:before { 429 | content:"|" 430 | } 431 | } 432 | } 433 | } 434 | } 435 | 436 | } 437 | 438 | @include media-query($on-laptop) { 439 | .site-footer { 440 | @include size(small); 441 | } 442 | } 443 | 444 | @include media-query($on-palm) { 445 | .site-footer { 446 | .footer-col-1, 447 | .footer-col-2 { 448 | width:100%; 449 | float: none; 450 | } 451 | 452 | .nav-list-title, 453 | .contact-list-title { 454 | display: inline; 455 | font-weight: bold; 456 | } 457 | 458 | .nav-list { 459 | margin-top: 0; 460 | } 461 | 462 | .contact-list { 463 | text-align: left; 464 | margin-top: 0; 465 | 466 | li { 467 | display: block; 468 | } 469 | 470 | .username { 471 | display: inline; 472 | } 473 | } 474 | 475 | .bottom { 476 | text-align: left; 477 | } 478 | } 479 | 480 | } 481 | 482 | /** 483 | * Page content 484 | */ 485 | .page-content { 486 | padding: $spacing-unit 0 $spacing-unit / 2 0; 487 | } 488 | 489 | .post-content { 490 | padding-bottom: $spacing-unit; 491 | } 492 | 493 | .page-heading { 494 | margin-top: 0; 495 | } 496 | 497 | .pitch { 498 | h2:first-of-type { 499 | margin-top: 0; 500 | } 501 | } 502 | 503 | .archive { 504 | margin-top: $spacing-unit; 505 | } 506 | 507 | .post-list { 508 | margin-left: 0; 509 | list-style: none; 510 | 511 | .last-update { 512 | display: none; 513 | color: $grey-color-light; 514 | a { 515 | color: $grey-color-light; 516 | } 517 | } 518 | 519 | > li { 520 | margin-bottom: $spacing-unit; 521 | 522 | &:hover .last-update { 523 | display: inline-block; 524 | } 525 | } 526 | 527 | .post-link { 528 | &:hover { 529 | text-decoration: none; 530 | } 531 | } 532 | 533 | .post-meta { 534 | font-size: $small-font-size; 535 | font-family: $alt-font-family; 536 | font-weight: 200; 537 | color: $grey-color; 538 | } 539 | 540 | .post-thumbnail-wrapper { 541 | width: 100%; 542 | max-height: 200px; 543 | overflow-y: hidden; 544 | margin-top: $spacing-unit / 4; 545 | margin-bottom: $spacing-unit / 4; 546 | } 547 | 548 | .post-thumbnail { 549 | margin-top: -20%; 550 | } 551 | } 552 | 553 | /** 554 | * Posts 555 | */ 556 | 557 | .post-header { 558 | position: relative; 559 | width: 100vw; 560 | left: calc(-50vw + 50%); 561 | margin-bottom: $spacing-unit; 562 | overflow-y: hidden; 563 | 564 | @include media-query($on-laptop) { 565 | .post-meta { 566 | margin-bottom: $spacing-unit / 6; 567 | } 568 | } 569 | 570 | .last-update { 571 | color: $grey-color; 572 | a { color: inherit } 573 | } 574 | 575 | .post-thumbnail { 576 | position: absolute; 577 | z-index: -1; 578 | min-height: 100%; 579 | 580 | @include media-query($on-palm) { 581 | position: relative; 582 | width: 100%; 583 | } 584 | } 585 | 586 | .wrapper { 587 | background: rgba(255, 255, 255, 0.9); 588 | margin-top: $spacing-unit; 589 | padding-bottom: 0; 590 | padding-top: 0; 591 | 592 | @include media-query($on-laptop) { 593 | margin-top: $spacing-unit / 1.5; 594 | } 595 | 596 | } 597 | } 598 | 599 | .with-thumbnail { 600 | @include media-query($on-laptop) { 601 | margin-bottom: $spacing-unit / 2; 602 | } 603 | 604 | @include media-query($on-palm) { 605 | margin-bottom: 0; 606 | } 607 | 608 | .wrapper { 609 | padding-bottom: $spacing-unit / 2; 610 | padding-top: $spacing-unit / 2; 611 | margin-bottom: $spacing-unit; 612 | 613 | @include media-query($on-palm) { 614 | margin: 0px; 615 | } 616 | } 617 | } 618 | 619 | .post-title { 620 | margin-top: 0; 621 | color: $brand-color; 622 | } 623 | 624 | .post-summary { 625 | margin-top: 0; 626 | } 627 | 628 | .post-content { 629 | padding-bottom: $spacing-unit / 2; 630 | 631 | .footnotes { 632 | @include size(small); 633 | margin-top: $spacing-unit / 6; 634 | padding-top: $spacing-unit / 2; 635 | 636 | @include media-query($on-laptop) { 637 | p { 638 | margin-bottom: $spacing-unit / 4; 639 | } 640 | } 641 | 642 | @include media-query($on-palm) { 643 | margin-top: 0; 644 | } 645 | 646 | hr { 647 | margin-top: 0; 648 | } 649 | } 650 | } 651 | 652 | .post-author { 653 | @include size(vsmall); 654 | padding: 5%; 655 | margin-top: $spacing-unit / 2; 656 | 657 | .user-picture { 658 | float: left; 659 | width: 20%; 660 | margin-right: 5%; 661 | } 662 | 663 | .user-info { 664 | width: 75%; 665 | list-style: none; 666 | } 667 | 668 | .user-shortbio { 669 | color: grey; 670 | } 671 | } 672 | 673 | .colored-block { 674 | @include size(small); 675 | background: $grey-color-lighter; 676 | padding: 5%; 677 | } 678 | 679 | /** 680 | * About 681 | */ 682 | 683 | .about-col-wrapper { 684 | @extend %clearfix; 685 | } 686 | 687 | .about-col { 688 | float: left; 689 | 690 | @include media-query($on-palm) { 691 | float: none; 692 | 693 | .contact-list { 694 | text-align: center; 695 | 696 | &:last-of-type { 697 | margin-bottom: $spacing-unit / 2; 698 | } 699 | } 700 | } 701 | 702 | } 703 | 704 | .contact-list-title { 705 | display: none; 706 | } 707 | 708 | .contact-list { 709 | list-style: none; 710 | margin-left: 0; 711 | margin-top: $spacing-unit / 2; 712 | text-transform: lowercase; 713 | 714 | a:hover { 715 | text-decoration: none; 716 | } 717 | } 718 | 719 | .user-picture { 720 | border-radius: 50%; 721 | max-width: calc(85%); 722 | } 723 | 724 | .about-col-1 { 725 | @include size(vsmall); 726 | padding-right: $spacing-unit / 2; 727 | width: -webkit-calc(35% - (#{$spacing-unit} / 4)); 728 | width: calc(35% - (#{$spacing-unit} / 4)); 729 | 730 | 731 | .user-picture { 732 | margin-bottom: $spacing-unit / 2; 733 | } 734 | 735 | } 736 | 737 | .about-col-2 { 738 | @include size(small); 739 | width: -webkit-calc(65% - (#{$spacing-unit} / 4)); 740 | width: calc(65% - (#{$spacing-unit} / 4)); 741 | 742 | h1 { 743 | margin-top: 0; 744 | } 745 | } 746 | 747 | @include media-query($on-laptop) { 748 | .about-col { 749 | @include size(p); 750 | } 751 | } 752 | 753 | @include media-query($on-palm) { 754 | .about-col { 755 | @include size(p); 756 | padding: 0; 757 | float: none; 758 | width: auto; 759 | } 760 | 761 | .about-col-1 { 762 | padding: 5%; 763 | max-width: 200px; 764 | margin: auto; 765 | } 766 | 767 | .contact-list { 768 | margin: 0; 769 | } 770 | 771 | .user-picture { 772 | max-width: 200px; 773 | } 774 | } 775 | 776 | .msg-404 { 777 | margin-bottom: $spacing-unit; 778 | 779 | .title { 780 | @include size(h1); 781 | font-family: $alt-font-family; 782 | color: $brand-color; 783 | } 784 | 785 | .description { 786 | @include size(h2); 787 | font-family: $base-font-family; 788 | } 789 | } 790 | 791 | .no-version { 792 | cursor: default; 793 | } 794 | 795 | .invisible { 796 | display: none; 797 | } 798 | -------------------------------------------------------------------------------- /_sass/academic/_syntax-highlighting.scss: -------------------------------------------------------------------------------- 1 | .highlight .hll { background-color: #ffffcc } 2 | .highlight .c { color: #999988; font-style: italic } /* Comment */ 3 | .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ 4 | .highlight .k { color: #000000; font-weight: bold } /* Keyword */ 5 | .highlight .o { color: #000000; font-weight: bold } /* Operator */ 6 | .highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */ 7 | .highlight .cp { color: #999999; font-weight: bold; font-style: italic } /* Comment.Preproc */ 8 | .highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */ 9 | .highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */ 10 | .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ 11 | .highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */ 12 | .highlight .gr { color: #aa0000 } /* Generic.Error */ 13 | .highlight .gh { color: #999999 } /* Generic.Heading */ 14 | .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ 15 | .highlight .go { color: #888888 } /* Generic.Output */ 16 | .highlight .gp { color: #555555 } /* Generic.Prompt */ 17 | .highlight .gs { font-weight: bold } /* Generic.Strong */ 18 | .highlight .gu { color: #aaaaaa } /* Generic.Subheading */ 19 | .highlight .gt { color: #aa0000 } /* Generic.Traceback */ 20 | .highlight .kc { color: #000000; font-weight: bold } /* Keyword.Constant */ 21 | .highlight .kd { color: #000000; font-weight: bold } /* Keyword.Declaration */ 22 | .highlight .kn { color: #000000; font-weight: bold } /* Keyword.Namespace */ 23 | .highlight .kp { color: #000000; font-weight: bold } /* Keyword.Pseudo */ 24 | .highlight .kr { color: #000000; font-weight: bold } /* Keyword.Reserved */ 25 | .highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */ 26 | .highlight .m { color: #009999 } /* Literal.Number */ 27 | .highlight .s { color: #d01040 } /* Literal.String */ 28 | .highlight .na { color: #008080 } /* Name.Attribute */ 29 | .highlight .nb { color: #0086B3 } /* Name.Builtin */ 30 | .highlight .nc { color: #445588; font-weight: bold } /* Name.Class */ 31 | .highlight .no { color: #008080 } /* Name.Constant */ 32 | .highlight .nd { color: #3c5d5d; font-weight: bold } /* Name.Decorator */ 33 | .highlight .ni { color: #800080 } /* Name.Entity */ 34 | .highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */ 35 | .highlight .nf { color: #990000; font-weight: bold } /* Name.Function */ 36 | .highlight .nl { color: #990000; font-weight: bold } /* Name.Label */ 37 | .highlight .nn { color: #555555 } /* Name.Namespace */ 38 | .highlight .nt { color: #000080 } /* Name.Tag */ 39 | .highlight .nv { color: #008080 } /* Name.Variable */ 40 | .highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ 41 | .highlight .w { color: #bbbbbb } /* Text.Whitespace */ 42 | .highlight .mf { color: #009999 } /* Literal.Number.Float */ 43 | .highlight .mh { color: #009999 } /* Literal.Number.Hex */ 44 | .highlight .mi { color: #009999 } /* Literal.Number.Integer */ 45 | .highlight .mo { color: #009999 } /* Literal.Number.Oct */ 46 | .highlight .sb { color: #d01040 } /* Literal.String.Backtick */ 47 | .highlight .sc { color: #d01040 } /* Literal.String.Char */ 48 | .highlight .sd { color: #d01040 } /* Literal.String.Doc */ 49 | .highlight .s2 { color: #d01040 } /* Literal.String.Double */ 50 | .highlight .se { color: #d01040 } /* Literal.String.Escape */ 51 | .highlight .sh { color: #d01040 } /* Literal.String.Heredoc */ 52 | .highlight .si { color: #d01040 } /* Literal.String.Interpol */ 53 | .highlight .sx { color: #d01040 } /* Literal.String.Other */ 54 | .highlight .sr { color: #009926 } /* Literal.String.Regex */ 55 | .highlight .s1 { color: #d01040 } /* Literal.String.Single */ 56 | .highlight .ss { color: #990073 } /* Literal.String.Symbol */ 57 | .highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */ 58 | .highlight .vc { color: #008080 } /* Name.Variable.Class */ 59 | .highlight .vg { color: #008080 } /* Name.Variable.Global */ 60 | .highlight .vi { color: #008080 } /* Name.Variable.Instance */ 61 | .highlight .il { color: #009999 } /* Literal.Number.Integer.Long */ 62 | -------------------------------------------------------------------------------- /academic.gemspec: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | Gem::Specification.new do |spec| 4 | spec.name = "academic" 5 | spec.version = "0.5.8" 6 | spec.authors = ["gaalcaras"] 7 | spec.email = ["gaby.alcaras@gmail.com"] 8 | 9 | spec.summary = %q{Academic is a Jekyll theme with a focus on simplicity, typography and flexibility.} 10 | spec.homepage = "https://github.com/gaalcaras/academic" 11 | spec.license = "MIT" 12 | 13 | spec.files = `git ls-files -z`.split("\x0").select { |f| f.match(%r{^(assets|_layouts|_data|_includes|_sass|LICENSE|README)}i) } 14 | 15 | spec.add_runtime_dependency "jekyll-data", '~> 1.0' 16 | 17 | spec.add_development_dependency "jekyll", "~> 3.3" 18 | spec.add_development_dependency "bundler", "~> 1.12" 19 | spec.add_development_dependency "rake", "~> 10.0" 20 | end 21 | -------------------------------------------------------------------------------- /assets/main.scss: -------------------------------------------------------------------------------- 1 | --- 2 | # Only the main Sass file needs front matter (the dashes are enough) 3 | --- 4 | @charset "utf-8"; 5 | 6 | @import url('https://fonts.googleapis.com/css?family=Open+Sans:800|PT+Serif'); 7 | 8 | // Our variables 9 | // $base-font-family: "Open Sans", sans-serif; 10 | $base-font-family: "PT Serif", serif; 11 | $base-font-size: 20px; 12 | $base-font-weight: 400; 13 | $small-font-size: $base-font-size * 0.95; 14 | $base-line-height: 1.5; 15 | 16 | $alt-font-family: "Open Sans", sans-serif; 17 | $alt-font-weight: bold; 18 | 19 | $spacing-unit: 50px; 20 | 21 | $text-color: #111; 22 | $background-color: #fdfdfd; 23 | $brand-color: #d33682; 24 | 25 | $grey-color: #3F3F3F; 26 | $grey-color-light: lighten($grey-color, 50%); 27 | $grey-color-lighter: lighten($grey-color, 70%); 28 | $grey-color-dark: darken($grey-color, 25%); 29 | 30 | // Width of the content area 31 | $content-width: 700px; 32 | 33 | $on-palm: 500px; 34 | $on-laptop: 700px; 35 | 36 | // Minima also includes a mixin for defining media queries. 37 | // Use media queries like this: 38 | // @include media-query($on-palm) { 39 | // .wrapper { 40 | // padding-right: $spacing-unit / 2; 41 | // padding-left: $spacing-unit / 2; 42 | // } 43 | // } 44 | 45 | // Import partials from the `minima` theme. 46 | @import "academic"; 47 | -------------------------------------------------------------------------------- /assets/opensans/OpenSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaalcaras/academic/cb9351592c1e0b3b81ad16c214d923877b84ade7/assets/opensans/OpenSans-Bold.ttf -------------------------------------------------------------------------------- /assets/opensans/OpenSans-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaalcaras/academic/cb9351592c1e0b3b81ad16c214d923877b84ade7/assets/opensans/OpenSans-Italic.ttf -------------------------------------------------------------------------------- /assets/opensans/OpenSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaalcaras/academic/cb9351592c1e0b3b81ad16c214d923877b84ade7/assets/opensans/OpenSans-Regular.ttf -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaalcaras/academic/cb9351592c1e0b3b81ad16c214d923877b84ade7/screenshot.png -------------------------------------------------------------------------------- /sitemaps.xml: -------------------------------------------------------------------------------- 1 | --- 2 | layout: sitemap 3 | --- 4 | --------------------------------------------------------------------------------