Use new template for the website
This commit is contained in:
parent
6a9337597c
commit
f54ea7342e
|
@ -1,43 +1,22 @@
|
||||||
# Ignore docs files
|
# Files generated by Jekyll
|
||||||
_gh_pages
|
_site/
|
||||||
_site
|
.sass-cache/
|
||||||
.ruby-version
|
.jekyll-cache/
|
||||||
.sass-cache
|
.jekyll-metadata
|
||||||
.jekyll-cache
|
|
||||||
|
|
||||||
# Numerous always-ignore extensions
|
# Files generated by Bundler
|
||||||
*.diff
|
.bundle/
|
||||||
*.err
|
vendor/
|
||||||
*.orig
|
Gemfile.lock
|
||||||
*.log
|
|
||||||
*.rej
|
|
||||||
*.swo
|
|
||||||
*.swp
|
|
||||||
*.zip
|
|
||||||
*.vi
|
|
||||||
*~
|
|
||||||
|
|
||||||
# OS or Editor folders
|
# Gems
|
||||||
|
*.gem
|
||||||
|
|
||||||
|
# Files generated by OS
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
.DS_Store?
|
||||||
._*
|
._*
|
||||||
|
.Spotlight-V100
|
||||||
|
.Trashes
|
||||||
|
ehthumbs.db
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
.cache
|
|
||||||
.project
|
|
||||||
.settings
|
|
||||||
.tmproj
|
|
||||||
*.esproj
|
|
||||||
nbproject
|
|
||||||
*.sublime-project
|
|
||||||
*.sublime-workspace
|
|
||||||
.idea
|
|
||||||
|
|
||||||
# Komodo
|
|
||||||
*.komodoproject
|
|
||||||
.komodotools
|
|
||||||
|
|
||||||
# grunt-html-validation
|
|
||||||
validation-status.json
|
|
||||||
validation-report.json
|
|
||||||
|
|
||||||
# Folders to ignore
|
|
||||||
node_modules
|
|
||||||
|
|
26
404.html
26
404.html
|
@ -1,10 +1,24 @@
|
||||||
---
|
---
|
||||||
layout: default
|
layout: base
|
||||||
title: "404: Page not found"
|
|
||||||
permalink: 404.html
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<div class="page">
|
<style type="text/css" media="screen">
|
||||||
<h1 class="page-title">404: Page not found</h1>
|
.container {
|
||||||
<p class="lead">Sorry, we've misplaced that URL or it's pointing to something that doesn't exist. <a href="{{ site.baseurl }}/">Head back home</a> to try finding it again.</p>
|
margin: 10px auto;
|
||||||
|
max-width: 600px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
margin: 30px 0;
|
||||||
|
font-size: 4em;
|
||||||
|
line-height: 1;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<h1>404</h1>
|
||||||
|
|
||||||
|
<p><strong>Page not found :(</strong></p>
|
||||||
|
<p>The requested page could not be found.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
In the interest of fostering an open and welcoming environment, we as
|
||||||
|
contributors and maintainers pledge to making participation in our project and
|
||||||
|
our community a harassment-free experience for everyone, regardless of age, body
|
||||||
|
size, disability, ethnicity, gender identity and expression, level of experience,
|
||||||
|
nationality, personal appearance, race, religion, or sexual identity and
|
||||||
|
orientation.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to creating a positive environment
|
||||||
|
include:
|
||||||
|
|
||||||
|
* Using welcoming and inclusive language
|
||||||
|
* Being respectful of differing viewpoints and experiences
|
||||||
|
* Gracefully accepting constructive criticism
|
||||||
|
* Focusing on what is best for the community
|
||||||
|
* Showing empathy towards other community members
|
||||||
|
|
||||||
|
Examples of unacceptable behavior by participants include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||||
|
advances
|
||||||
|
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing others' private information, such as a physical or electronic
|
||||||
|
address, without explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a
|
||||||
|
professional setting
|
||||||
|
|
||||||
|
## Our Responsibilities
|
||||||
|
|
||||||
|
Project maintainers are responsible for clarifying the standards of acceptable
|
||||||
|
behavior and are expected to take appropriate and fair corrective action in
|
||||||
|
response to any instances of unacceptable behavior.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies both within project spaces and in public spaces
|
||||||
|
when an individual is representing the project or its community. Examples of
|
||||||
|
representing a project or community include using an official project e-mail
|
||||||
|
address, posting via an official social media account, or acting as an appointed
|
||||||
|
representative at an online or offline event. Representation of a project may be
|
||||||
|
further defined and clarified by project maintainers.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported by contacting the project team at parkrmoore@gmail.com. All
|
||||||
|
complaints will be reviewed and investigated and will result in a response that
|
||||||
|
is deemed necessary and appropriate to the circumstances. The project team is
|
||||||
|
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||||
|
Further details of specific enforcement policies may be posted separately.
|
||||||
|
|
||||||
|
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||||
|
faith may face temporary or permanent repercussions as determined by other
|
||||||
|
members of the project's leadership.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||||
|
available at [http://contributor-covenant.org/version/1/4][version]
|
||||||
|
|
||||||
|
[homepage]: http://contributor-covenant.org
|
||||||
|
[version]: http://contributor-covenant.org/version/1/4/
|
11
Gemfile
11
Gemfile
|
@ -1,6 +1,7 @@
|
||||||
source "https://rubygems.org"
|
# frozen_string_literal: true
|
||||||
|
|
||||||
gem "jekyll"
|
source "https://rubygems.org"
|
||||||
gem "jekyll-gist"
|
gemspec
|
||||||
gem "jekyll-paginate"
|
|
||||||
gem "jekyll-seo-tag"
|
gem "jekyll", ENV["JEKYLL_VERSION"] if ENV["JEKYLL_VERSION"]
|
||||||
|
gem "kramdown-parser-gfm" if ENV["JEKYLL_VERSION"] == "~> 3.9"
|
||||||
|
|
48
Gemfile.lock
48
Gemfile.lock
|
@ -1,7 +1,15 @@
|
||||||
|
PATH
|
||||||
|
remote: .
|
||||||
|
specs:
|
||||||
|
minima (3.0.0.dev)
|
||||||
|
jekyll (>= 3.5, < 5.0)
|
||||||
|
jekyll-feed (~> 0.9)
|
||||||
|
jekyll-seo-tag (~> 2.1)
|
||||||
|
|
||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
addressable (2.8.4)
|
addressable (2.8.5)
|
||||||
public_suffix (>= 2.0.2, < 6.0)
|
public_suffix (>= 2.0.2, < 6.0)
|
||||||
colorator (1.1.0)
|
colorator (1.1.0)
|
||||||
concurrent-ruby (1.2.2)
|
concurrent-ruby (1.2.2)
|
||||||
|
@ -9,13 +17,9 @@ GEM
|
||||||
eventmachine (>= 0.12.9)
|
eventmachine (>= 0.12.9)
|
||||||
http_parser.rb (~> 0)
|
http_parser.rb (~> 0)
|
||||||
eventmachine (1.2.7)
|
eventmachine (1.2.7)
|
||||||
faraday (2.7.7)
|
ffi (1.16.3)
|
||||||
faraday-net_http (>= 2.0, < 3.1)
|
|
||||||
ruby2_keywords (>= 0.0.4)
|
|
||||||
faraday-net_http (3.0.2)
|
|
||||||
ffi (1.15.5)
|
|
||||||
forwardable-extended (2.6.0)
|
forwardable-extended (2.6.0)
|
||||||
google-protobuf (3.23.3-x86_64-darwin)
|
google-protobuf (3.25.0-x86_64-darwin)
|
||||||
http_parser.rb (0.8.0)
|
http_parser.rb (0.8.0)
|
||||||
i18n (1.14.1)
|
i18n (1.14.1)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
|
@ -35,9 +39,8 @@ GEM
|
||||||
safe_yaml (~> 1.0)
|
safe_yaml (~> 1.0)
|
||||||
terminal-table (>= 1.8, < 4.0)
|
terminal-table (>= 1.8, < 4.0)
|
||||||
webrick (~> 1.7)
|
webrick (~> 1.7)
|
||||||
jekyll-gist (1.5.0)
|
jekyll-feed (0.17.0)
|
||||||
octokit (~> 4.2)
|
jekyll (>= 3.7, < 5.0)
|
||||||
jekyll-paginate (1.1.0)
|
|
||||||
jekyll-sass-converter (3.0.0)
|
jekyll-sass-converter (3.0.0)
|
||||||
sass-embedded (~> 1.54)
|
sass-embedded (~> 1.54)
|
||||||
jekyll-seo-tag (2.8.0)
|
jekyll-seo-tag (2.8.0)
|
||||||
|
@ -53,37 +56,28 @@ GEM
|
||||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||||
rb-inotify (~> 0.9, >= 0.9.10)
|
rb-inotify (~> 0.9, >= 0.9.10)
|
||||||
mercenary (0.4.0)
|
mercenary (0.4.0)
|
||||||
octokit (4.25.1)
|
|
||||||
faraday (>= 1, < 3)
|
|
||||||
sawyer (~> 0.9)
|
|
||||||
pathutil (0.16.2)
|
pathutil (0.16.2)
|
||||||
forwardable-extended (~> 2.6)
|
forwardable-extended (~> 2.6)
|
||||||
public_suffix (5.0.1)
|
public_suffix (5.0.3)
|
||||||
rb-fsevent (0.11.2)
|
rb-fsevent (0.11.2)
|
||||||
rb-inotify (0.10.1)
|
rb-inotify (0.10.1)
|
||||||
ffi (~> 1.0)
|
ffi (~> 1.0)
|
||||||
rexml (3.2.5)
|
rexml (3.2.6)
|
||||||
rouge (4.1.2)
|
rouge (4.2.0)
|
||||||
ruby2_keywords (0.0.5)
|
|
||||||
safe_yaml (1.0.5)
|
safe_yaml (1.0.5)
|
||||||
sass-embedded (1.63.4-x86_64-darwin)
|
sass-embedded (1.69.5-x86_64-darwin)
|
||||||
google-protobuf (~> 3.23)
|
google-protobuf (~> 3.23)
|
||||||
sawyer (0.9.2)
|
|
||||||
addressable (>= 2.3.5)
|
|
||||||
faraday (>= 0.17.3, < 3)
|
|
||||||
terminal-table (3.0.2)
|
terminal-table (3.0.2)
|
||||||
unicode-display_width (>= 1.1.1, < 3)
|
unicode-display_width (>= 1.1.1, < 3)
|
||||||
unicode-display_width (2.4.2)
|
unicode-display_width (2.5.0)
|
||||||
webrick (1.8.1)
|
webrick (1.8.1)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
x86_64-darwin-22
|
x86_64-darwin-22
|
||||||
|
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
jekyll
|
bundler
|
||||||
jekyll-gist
|
minima!
|
||||||
jekyll-paginate
|
|
||||||
jekyll-seo-tag
|
|
||||||
|
|
||||||
BUNDLED WITH
|
BUNDLED WITH
|
||||||
2.4.14
|
2.4.22
|
||||||
|
|
|
@ -0,0 +1,262 @@
|
||||||
|
## HEAD
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
* Forward port v2.5.1 release (#399)
|
||||||
|
* Docs: remove Google+ (#373)
|
||||||
|
* Update README section on adding favicons to site (#438)
|
||||||
|
* Fix custom-styles.scss name in README (#610)
|
||||||
|
* Improve the msg to enable disqus in README (#627)
|
||||||
|
* Make docs consistent with code (#657)
|
||||||
|
* Highlight that the base branch is v3 (#719)
|
||||||
|
|
||||||
|
### Minor Enhancements
|
||||||
|
|
||||||
|
* Add Keybase to social links (#400)
|
||||||
|
* Solarized skins (#404)
|
||||||
|
* Add a placeholder of favicons (#433)
|
||||||
|
* fix: make page.list_title optional (#303)
|
||||||
|
* Add stackoverflow to social media list (#443)
|
||||||
|
* Add social support for dev.to (#410)
|
||||||
|
* Add GitLab to social (#352)
|
||||||
|
* Support mutiple authors on post layout (#348)
|
||||||
|
* Re-implement site footer markup and styles (#448)
|
||||||
|
* Support pagination through posts in home layout (#450)
|
||||||
|
* Show the last modified date of posts (#432)
|
||||||
|
* Set margins of hr to improve readability (#461)
|
||||||
|
* Export a variable to let users to custom the font family of code (#462)
|
||||||
|
* Set margin-bottom of pagination (#458)
|
||||||
|
* Adjust margins of headings to make sections clear (#467)
|
||||||
|
* Rename favicons.html to custom-head.html (#468)
|
||||||
|
* Remove RSS icon from the social media list (#470)
|
||||||
|
* Improve the readablility of blockquotes (#481)
|
||||||
|
* Extract more color rules into skins (#452)
|
||||||
|
* Introduce "Dark Minima" skin (#335)
|
||||||
|
* Reduce spacing in the three largest headers (#538)
|
||||||
|
* Add `auto` skin which honors the `prefers-color-scheme` media query (#634)
|
||||||
|
* Add google scholar. (#673)
|
||||||
|
* Add `x` social icon (#756)
|
||||||
|
|
||||||
|
### Major Enhancements
|
||||||
|
|
||||||
|
* Allow skins to be defined and customized easily (#336)
|
||||||
|
* Drop support for scalar 'author' configuration (#384)
|
||||||
|
* Place skins in `minima/skins` to clarify purpose (#479)
|
||||||
|
* Add adaptive skin: `solarized` (#594)
|
||||||
|
* Generate social iconsheet during build (#686)
|
||||||
|
* Rename `default` layout to `base` (#690)
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Add missing rel=me attributes to social links (#386)
|
||||||
|
* Set the border radius of highlight (#426)
|
||||||
|
* Removed unnecessary whitespace-controls (#390)
|
||||||
|
* fix: overflow auto for tables (#296)
|
||||||
|
* Add `overflow-wrap: break-word` to body tag (#321)
|
||||||
|
* Use "rem" unit in relative-font-size mixin (#436)
|
||||||
|
* Assign static value to variable outside forloop (#437)
|
||||||
|
* Add font-size styles for elements h5 and h6 (#441)
|
||||||
|
* Stop prefixing CSS calc with `-webkit-` (#445)
|
||||||
|
* Improve readability of post titles with diacritics (#449)
|
||||||
|
* Fix a bug of incorrect parsing of page.modified_date (#455)
|
||||||
|
* Specify the font size of the root element (#485)
|
||||||
|
* Fix script used for Google Analytics (#596)
|
||||||
|
* Open social links in new tabs (#625)
|
||||||
|
* change base-font-family sequence (#654)
|
||||||
|
* Fix responsiveness of social SVG sprites (#677)
|
||||||
|
* Improve "Subscribe" link in footer (#698)
|
||||||
|
* Fix deprecation warnings from Dart Sass (#700)
|
||||||
|
* Fix reference to base layout in `404.html` (#713)
|
||||||
|
|
||||||
|
### Development Fixes
|
||||||
|
|
||||||
|
* Ignore .jekyll-cache (#439)
|
||||||
|
* Clean up and optimize .gitignore (#475)
|
||||||
|
* [chore] Normalize Travis CI builds (#480)
|
||||||
|
* chore(deps): bump Ruby version (#510)
|
||||||
|
* Conditionally load GFM-parser gem in CI builds (#535)
|
||||||
|
* Improve CI workflow configuration (#609)
|
||||||
|
* Migrate from TravisCI to GitHub Actions (#633)
|
||||||
|
* Build and deploy demo site via GH Action workflow (#636)
|
||||||
|
* Improve readability of config file (#703)
|
||||||
|
* Trigger demo-site build manually (#714)
|
||||||
|
|
||||||
|
## 2.5.1
|
||||||
|
|
||||||
|
### Minor Enhancements
|
||||||
|
|
||||||
|
* Allow use and testing with Jekyll 4.x (#398)
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Footer overlapping issue (Support Microsoft Explorer 11) (#248)
|
||||||
|
* Update multiline config comment. (#346)
|
||||||
|
|
||||||
|
### Development Fixes
|
||||||
|
|
||||||
|
* remove deprecated `sudo: false` in .travis.yml (#347)
|
||||||
|
|
||||||
|
## 2.5.0
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Add `jekyll-feed` plugin in config (#228)
|
||||||
|
|
||||||
|
### Minor Enhancements
|
||||||
|
|
||||||
|
* Stick footer for short posts (#223)
|
||||||
|
* Consolidate trigger SVG paths (#148)
|
||||||
|
|
||||||
|
## 2.4.1
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Reintroduce removed social includes for backwards compatibility (#217)
|
||||||
|
|
||||||
|
## 2.4.0
|
||||||
|
|
||||||
|
### Minor Enhancements
|
||||||
|
|
||||||
|
* Add better system fonts (#205)
|
||||||
|
* Remove whitespace due to Liquid tags in generated HTML (#202)
|
||||||
|
* Adding Mastodon to the social networks (#198)
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* social icons should resolve baseurl properly (#201)
|
||||||
|
* fix: styling main element in IE 11 (#199)
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
* Improve thw wording in index.md (#175)
|
||||||
|
* Update config description comment (#203)
|
||||||
|
|
||||||
|
## 2.3.0
|
||||||
|
|
||||||
|
* Add option to show excerpts on the homepage (#90)
|
||||||
|
* Handle RSS feed with jekyll-feed (#183)
|
||||||
|
* Test build with Ruby 2.4 on CI (#184)
|
||||||
|
* Document how to customize navigation links (#192)
|
||||||
|
|
||||||
|
## 2.2.1
|
||||||
|
|
||||||
|
* Revert social_sites hash for retrocompatibility (#190)
|
||||||
|
|
||||||
|
## 2.2.0
|
||||||
|
|
||||||
|
### Minor Enhancements
|
||||||
|
|
||||||
|
* handling content outside of posts (#88)
|
||||||
|
* Add default table styles (#144)
|
||||||
|
* Add `jekyll-seo-tag` dependency (#139)
|
||||||
|
* Add Microformats markup (#160)
|
||||||
|
* Add more social links (#141)
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
* Docs: clarification about page title (#142)
|
||||||
|
|
||||||
|
## 2.1.1 / 2017-04-13
|
||||||
|
|
||||||
|
### Minor Enhancements
|
||||||
|
|
||||||
|
* Close #55: Improve mobile user experience (#62)
|
||||||
|
* Remove incomplete status from spec summary (#63)
|
||||||
|
* Use date_format if set in configuration (#70)
|
||||||
|
* Corrected misspelled word (#72)
|
||||||
|
* Scale headings relative to base-font-size (#78)
|
||||||
|
* Remove 2.0 post-install message (#82)
|
||||||
|
* Fixes #115 - Only include the nav tag if there are pages to be displayed in the menu (#116)
|
||||||
|
* Fixes #80, #106. Make the hamburger work with pure CSS. (#111)
|
||||||
|
* add `header_pages` config to link only specific files in header (#52)
|
||||||
|
* More easily customizable CSS (#117)
|
||||||
|
* Use relative size for fonts and line-height (#103)
|
||||||
|
* Add 404 page from jekyll `master` (#121)
|
||||||
|
|
||||||
|
### Development Fixes
|
||||||
|
|
||||||
|
* Remove duplicate .sass-cache (#71)
|
||||||
|
* Demo minima on GitHub Pages (#76)
|
||||||
|
* Remove the Rakefile (#118)
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
* Update README with theme content description (#91)
|
||||||
|
* Update default local URL (#120)
|
||||||
|
|
||||||
|
## 2.1.0 / 2016-11-15
|
||||||
|
|
||||||
|
### Minor Enhancements
|
||||||
|
|
||||||
|
* Update gemspec to require at least Jekyll 3.3 (#59)
|
||||||
|
* Use `absolute_url` filter for disqus (#66)
|
||||||
|
* replace `example/index.html` with `example/index.md` (#58)
|
||||||
|
|
||||||
|
### Development Fixes
|
||||||
|
|
||||||
|
* Example should require Jekyll 3.3 (#61)
|
||||||
|
|
||||||
|
## 2.0.0 / 2016-10-06
|
||||||
|
|
||||||
|
### Minor Enhancements
|
||||||
|
|
||||||
|
* priority to site.url when site.github.url is available (#46)
|
||||||
|
* Move contents of the index.html page to the 'home' layout (#48)
|
||||||
|
* Use new `absolute_url` and `relative_url` filters in minima (#57)
|
||||||
|
|
||||||
|
### Development Fixes
|
||||||
|
|
||||||
|
* Use standardized tab size of 2 spaces (#44)
|
||||||
|
|
||||||
|
### Major Enhancements
|
||||||
|
|
||||||
|
* move `css/` directory from jekyll into `assets/` (#43)
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Fix html proofer errors (#49)
|
||||||
|
* Update gem regex to include new `assets` directory (#54)
|
||||||
|
|
||||||
|
## 1.2.0 / 2016-09-12
|
||||||
|
|
||||||
|
### Minor Enhancements
|
||||||
|
|
||||||
|
* Look to site.url when available (#35)
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
* Move instruction for CSS in install section (#37)
|
||||||
|
|
||||||
|
## 1.1.0 / 2016-09-07
|
||||||
|
|
||||||
|
### Major Enhancements
|
||||||
|
|
||||||
|
* Add support to Disqus (#21)
|
||||||
|
* Google analytics support (#26)
|
||||||
|
* Look for `site.github.url` if it exists (#25)
|
||||||
|
|
||||||
|
### Minor Enhancements
|
||||||
|
|
||||||
|
* Fixed Flash Of Unstyled SVG (#12)
|
||||||
|
* Added "author" in footer instead of double title (#22)
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
* Document how to link to the theme styles (#18)
|
||||||
|
* Update Example to resemble Default site (#24)
|
||||||
|
|
||||||
|
### Development Enhancements
|
||||||
|
|
||||||
|
* Use upstream gemspec file matcher (#9)
|
||||||
|
* Fix gemspec regex (#31)
|
||||||
|
* Add Travis and a basic smoke test (#33)
|
||||||
|
|
||||||
|
## 1.0.1 / 2016-07-28
|
||||||
|
|
||||||
|
* include `_layouts`, `_includes`, and `_sass` dir in gem (#6)
|
||||||
|
|
||||||
|
## 1.0.0 / 2016-07-27
|
||||||
|
|
||||||
|
* default layout: html `lang` attribute should allow user customization (#3)
|
||||||
|
* Use `normalize_whitespace` filter for meta description (#4)
|
||||||
|
* Fix repo's URL in contributing (#5)
|
|
@ -1,9 +0,0 @@
|
||||||
# Released under MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2013 Mark Otto.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2016-present Parker Moore and the minima contributors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
394
README.md
394
README.md
|
@ -1,92 +1,374 @@
|
||||||
# Poole
|
<div align="center">
|
||||||
|
<p><em><strong>Disclaimer:</strong> The information here may vary depending on the version you're using.<br/>
|
||||||
|
Please refer to the <code>README.md</code> bundled within the theme-gem for information specific to your version or by pointing
|
||||||
|
your browser to the Git tag corresponding to your version. e.g. https://github.com/jekyll/minima/blob/v2.5.0/README.md.<br/>
|
||||||
|
Running <code>bundle show minima</code> will provide you with the local path to your current theme version.</em></p>
|
||||||
|
<img src="/readme_banner.svg"/>
|
||||||
|
<p>It's Jekyll's default (and first) theme. It's what you get when you run <code>jekyll new</code>.</p>
|
||||||
|
<p><a href="https://jekyll.github.io/minima/">Theme preview</a></p>
|
||||||
|
<p><img src="/screenshot.png"/></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
*The Strange Case of Dr. Jekyll and Mr. Hyde* tells the story of a lawyer investigating the connection of two persons, Dr. Henry Jekyll and Mr. Edward Hyde. Chief among the novel's supporting cast is a man by the name of Mr. Poole, Dr. Jekyll's loyal butler.
|
## Installation
|
||||||
|
|
||||||
-----
|
Add this line to your Jekyll site's Gemfile:
|
||||||
|
|
||||||
Poole is the butler for [Jekyll](http://jekyllrb.com), the static site generator. It's designed and developed by [@mdo](https://twitter.com/mdo) to provide a clear and concise foundational setup for any Jekyll site. It does so by furnishing a full vanilla Jekyll install with example templates, pages, posts, and styles.
|
```ruby
|
||||||
|
gem "minima"
|
||||||
|
```
|
||||||
|
|
||||||

|
And then execute:
|
||||||
|
|
||||||
See Poole in action with [the demo site](https://demo.getpoole.com).
|
$ bundle
|
||||||
|
|
||||||
There are currently two official themes built on Poole:
|
|
||||||
|
|
||||||
* [Hyde](https://hyde.getpoole.com)
|
|
||||||
* [Lanyon](https://lanyon.getpoole.com)
|
|
||||||
|
|
||||||
Individual theme feedback and bug reports should be submitted to the theme's individual repository.
|
|
||||||
|
|
||||||
|
|
||||||
## Contents
|
## Contents At-A-Glance
|
||||||
|
|
||||||
- [Usage](#usage)
|
Minima has been scaffolded by the `jekyll new-theme` command and therefore has all the necessary files and directories to have a new Jekyll site up and running with zero-configuration.
|
||||||
- [Development](#development)
|
|
||||||
- [Author](#author)
|
### Layouts
|
||||||
- [License](#license)
|
|
||||||
|
Refers to files within the `_layouts` directory, that define the markup for your theme.
|
||||||
|
|
||||||
|
- `base.html` — The base layout that lays the foundation for subsequent layouts. The derived layouts inject their
|
||||||
|
contents into this file at the line that says ` {{ content }} ` and are linked to this file via
|
||||||
|
[FrontMatter](https://jekyllrb.com/docs/frontmatter/) declaration `layout: base`.
|
||||||
|
- `home.html` — The layout for your landing-page / home-page / index-page. [[More Info.](#home-layout)]
|
||||||
|
- `page.html` — The layout for your documents that contain FrontMatter, but are not posts.
|
||||||
|
- `post.html` — The layout for your posts.
|
||||||
|
|
||||||
|
#### Base Layout
|
||||||
|
|
||||||
|
From Minima v3 onwards, the base layout is named **`base.html`** instead of `default.html` to avoid confusing new users into
|
||||||
|
assuming that name holds special status.
|
||||||
|
|
||||||
|
Users migrating from older versions with customized `_layouts/default.html` are advised to rename their copy to
|
||||||
|
`_layouts/base.html`. Migrating users with additional customized layouts may either update front matter references to former
|
||||||
|
`default.html` layout or create a new `default.html` layout referencing the current `base.html`, whichever route being the
|
||||||
|
easiest:
|
||||||
|
|
||||||
|
```
|
||||||
|
---
|
||||||
|
# new `_layouts/default.html` for backwards-compatibility when multiple
|
||||||
|
# layouts have been customized.
|
||||||
|
|
||||||
|
layout: base
|
||||||
|
---
|
||||||
|
|
||||||
|
{{ content }}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Home Layout
|
||||||
|
|
||||||
|
`home.html` is a flexible HTML layout for the site's landing-page / home-page / index-page. <br/>
|
||||||
|
|
||||||
|
##### *Main Heading and Content-injection*
|
||||||
|
|
||||||
|
From Minima v2.2 onwards, the *home* layout will inject all content from your `index.md` / `index.html` **before** the **`Posts`** heading. This will allow you to include non-posts related content to be published on the landing page under a dedicated heading. *We recommended that you title this section with a Heading2 (`##`)*.
|
||||||
|
|
||||||
|
Usually the `site.title` itself would suffice as the implicit 'main-title' for a landing-page. But, if your landing-page would like a heading to be explicitly displayed, then simply define a `title` variable in the document's front matter and it will be rendered with an `<h1>` tag.
|
||||||
|
|
||||||
|
##### *Post Listing*
|
||||||
|
|
||||||
|
This section is optional from Minima v2.2 onwards.<br/>
|
||||||
|
It will be automatically included only when your site contains one or more valid posts or drafts (if the site is configured to `show_drafts`).
|
||||||
|
|
||||||
|
The title for this section is `Posts` by default and rendered with an `<h2>` tag. You can customize this heading by defining a `list_title` variable in the document's front matter.
|
||||||
|
|
||||||
|
|
||||||
|
### Includes
|
||||||
|
|
||||||
|
Refers to snippets of code within the `_includes` directory that can be inserted in multiple layouts (and another include-file as well) within the same theme-gem.
|
||||||
|
|
||||||
|
- `disqus_comments.html` — Code to markup disqus comment box.
|
||||||
|
- `footer.html` — Defines the site's footer section.
|
||||||
|
- `google-analytics.html` — Inserts Google Analytics module (active only in production environment).
|
||||||
|
- `head.html` — Code-block that defines the `<head></head>` in *default* layout.
|
||||||
|
- `custom-head.html` — Placeholder to allow users to add more metadata to `<head />`.
|
||||||
|
- `header.html` — Defines the site's main header section. By default, pages with a defined `title` attribute will have links displayed here.
|
||||||
|
- `social.html` — Renders social-media icons based on the `minima:social_links` data in the config file.
|
||||||
|
- `social-item.html` — Template to render individual list-item containing graphic link to configured social-profile.
|
||||||
|
- `social-links/*.svg` — SVG markup components of supported social-icons.
|
||||||
|
|
||||||
|
|
||||||
|
### Sass
|
||||||
|
|
||||||
|
Refers to `.scss` files within the `_sass` directory that define the theme's styles.
|
||||||
|
|
||||||
|
- `minima/skins/classic.scss` — The "classic" skin of the theme. *Used by default.*
|
||||||
|
- `minima/initialize.scss` — A component that defines the theme's *skin-agnostic* variable defaults and sass partials.
|
||||||
|
It imports the following components (in the following order):
|
||||||
|
- `minima/custom-variables.scss` — A hook that allows overriding variable defaults and mixins. (*Note: Cannot override styles*)
|
||||||
|
- `minima/_base.scss` — Sass partial for resets and defines base styles for various HTML elements.
|
||||||
|
- `minima/_layout.scss` — Sass partial that defines the visual style for various layouts.
|
||||||
|
- `minima/custom-styles.scss` — A hook that allows overriding styles defined above. (*Note: Cannot override variables*)
|
||||||
|
|
||||||
|
Refer the [skins](#skins) section for more details.
|
||||||
|
|
||||||
|
|
||||||
|
### Assets
|
||||||
|
|
||||||
|
Refers to various asset files within the `assets` directory.
|
||||||
|
|
||||||
|
- `assets/css/style.scss` — Imports sass files from within the `_sass` directory and gets processed into the theme's
|
||||||
|
stylesheet: `assets/css/styles.css`.
|
||||||
|
- `assets/minima-social-icons.html` — Imports enabled social-media icon graphic and gets processed into a composite SVG file.
|
||||||
|
Refer [section on social networks](#social-networks) for its usage.
|
||||||
|
|
||||||
|
|
||||||
|
### Plugins
|
||||||
|
|
||||||
|
Minima comes with [`jekyll-seo-tag`](https://github.com/jekyll/jekyll-seo-tag) plugin preinstalled to make sure your website gets the most useful meta tags. See [usage](https://github.com/jekyll/jekyll-seo-tag#usage) to know how to set it up.
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
### 1. Install dependencies
|
Have the following line in your config file:
|
||||||
|
|
||||||
Poole is built on Jekyll and uses its built-in SCSS compiler to generate our CSS. Before getting started, you'll need to install the Jekyll gem and related dependencies:
|
```yaml
|
||||||
|
theme: minima
|
||||||
```bash
|
|
||||||
$ gem install jekyll jekyll-gist jekyll-sitemap jekyll-seo-tag
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**Windows users:** Windows users have a bit more work to do, but luckily [@juthilo](https://github.com/juthilo) has your back with his [Run Jekyll on Windows](https://github.com/juthilo/run-jekyll-on-windows) guide.
|
|
||||||
|
|
||||||
**Need syntax highlighting?** Poole includes support for Pygments or Rouge, so install your gem of choice to make use of the built-in styling. Read more about this in the [Jekyll docs](https://jekyllrb.com/docs/liquid/tags/#code-snippet-highlighting).
|
### Customizing templates
|
||||||
|
|
||||||
### 2a. Quick start
|
To override the default structure and style of minima, simply create the concerned directory at the root of your site, copy the file you wish to customize to that directory, and then edit the file.
|
||||||
|
e.g., to override the [`_includes/head.html `](_includes/head.html) file to specify a custom style path, create an `_includes` directory, copy `_includes/head.html` from minima gem folder to `<yoursite>/_includes` and start editing that file.
|
||||||
|
|
||||||
To help anyone with any level of familiarity with Jekyll quickly get started, Poole includes everything you need for a basic Jekyll site. To that end, just download Poole and start up Jekyll.
|
The site's default CSS has now moved to a new place within the gem itself, [`assets/css/style.scss`](assets/css/style.scss).
|
||||||
|
|
||||||
### 2b. Roll your own Jekyll site
|
In Minima 3.0, if you only need to customize the colors of the theme, refer to the subsequent section on skins. To have your
|
||||||
|
*CSS overrides* in sync with upstream changes released in future versions, you can collect all your overrides for the Sass
|
||||||
|
variables and mixins inside a sass file placed at `_sass/minima/custom-variables.scss` and all other overrides inside a sass file
|
||||||
|
placed at path `_sass/minima/custom-styles.scss`.
|
||||||
|
|
||||||
Folks wishing to use Jekyll's templates and styles can do so with a little bit of manual labor. Download Poole and then copy what you need (likely `_layouts/`, `*.html` files, `atom.xml` for RSS, and `assets/` for CSS, JS, etc.).
|
You need not maintain entire partial(s) at the site's source just to override a few styles. However, your stylesheet's primary
|
||||||
|
source (`assets/css/style.scss`) should contain the following:
|
||||||
|
|
||||||
### 3. Running locally
|
- Front matter dashes at the very beginning (can be empty).
|
||||||
|
- Directive to import a skin.
|
||||||
|
- Directive to import the base styles (automatically loads overrides when available).
|
||||||
|
|
||||||
To see your Jekyll site with Poole applied, start a Jekyll server. In Terminal, from `/poole` (or whatever your Jekyll site's root directory is named):
|
Therefore, your `assets/css/style.scss` should contain the following at minimum:
|
||||||
|
|
||||||
```bash
|
```sass
|
||||||
$ jekyll serve
|
---
|
||||||
|
---
|
||||||
|
|
||||||
|
@import
|
||||||
|
"minima/skins/{{ site.minima.skin | default: 'classic' }}",
|
||||||
|
"minima/initialize";
|
||||||
```
|
```
|
||||||
|
|
||||||
Open <http://localhost:4000> in your browser, and voilà.
|
#### Skins
|
||||||
|
|
||||||
### 4. Serving it up
|
Minima 3.0 supports defining and switching between multiple color-palettes (or *skins*).
|
||||||
|
|
||||||
If you host your code on GitHub, you can use [GitHub Pages](https://pages.github.com) to host your project.
|
```
|
||||||
|
.
|
||||||
|
├── minima.scss
|
||||||
|
└── minima
|
||||||
|
└── _syntax-highlighting.scss
|
||||||
|
```
|
||||||
|
|
||||||
1. Fork this repo and switch to the `gh-pages` branch.
|
|
||||||
1. If you're [using a custom domain name](https://help.github.com/articles/setting-up-a-custom-domain-with-github-pages), modify the `CNAME` file to point to your new domain.
|
|
||||||
2. If you're not using a custom domain name, **modify the `baseurl` in `_config.yml`** to point to your GitHub Pages URL. Example: for a repo at `github.com/username/poole`, use `http://username.github.io/poole/`. **Be sure to include the trailing slash.**
|
|
||||||
3. Done! Head to your GitHub Pages URL or custom domain.
|
|
||||||
|
|
||||||
No matter your production or hosting setup, be sure to verify the `baseurl` option file and `CNAME` settings. Not applying this correctly can mean broken styles on your site.
|
A skin is a Sass file placed in the directory `_sass/minima/skins` and it defines the variable defaults related to the "color"
|
||||||
|
aspect of the theme. It also embeds the Sass rules related to syntax-highlighting since that is primarily related to color and
|
||||||
|
has to be adjusted in harmony with the current skin.
|
||||||
|
|
||||||
|
The default color palette for Minima is defined within `_sass/minima/skins/classic.scss`. To switch to another available skin,
|
||||||
|
simply declare it in the site's config file. For example, to activate `_sass/minima/skins/dark.scss` as the skin, the setting
|
||||||
|
would be:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
minima:
|
||||||
|
skin: dark
|
||||||
|
```
|
||||||
|
|
||||||
|
As part of the migration to support skins, some existing Sass variables have been retired and some **have been redefined** as
|
||||||
|
summarized in the following table:
|
||||||
|
|
||||||
|
Minima 2.0 | Minima 3.0
|
||||||
|
--------------- | ----------
|
||||||
|
`$brand-color` | `$link-base-color`
|
||||||
|
`$grey-*` | `$brand-*`
|
||||||
|
`$orange-color` | *has been removed*
|
||||||
|
|
||||||
|
##### Available skins
|
||||||
|
|
||||||
|
Skin setting | Description
|
||||||
|
--------------- | -----------
|
||||||
|
classic | Default, light color scheme.
|
||||||
|
dark | Dark variant of the classic skin.
|
||||||
|
auto | *Adaptive skin* based on the default classic and dark skins.
|
||||||
|
solarized | *Adaptive skin* for [solarized](https://github.com/solarized) color scheme skins.
|
||||||
|
solarized-light | Light variant of solarized color scheme.
|
||||||
|
solarized-dark | Dark variant of solarized color scheme.
|
||||||
|
|
||||||
|
*:bulb: Adaptive skins switch between the "light" and "dark" variants based on the user's operating system setting or browser setting
|
||||||
|
(via CSS Media Query [prefers-color-scheme](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme)).*
|
||||||
|
|
||||||
|
### Customize navigation links
|
||||||
|
|
||||||
|
This allows you to set which pages you want to appear in the navigation area and configure order of the links.
|
||||||
|
|
||||||
|
For instance, to only link to the `about` and the `portfolio` page, add the following to your `_config.yml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
header_pages:
|
||||||
|
- about.md
|
||||||
|
- portfolio.md
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Change default date format
|
||||||
|
|
||||||
|
You can change the default date format by specifying `site.minima.date_format`
|
||||||
|
in `_config.yml`.
|
||||||
|
|
||||||
|
```
|
||||||
|
# Minima date format
|
||||||
|
# refer to http://shopify.github.io/liquid/filters/date/ if you want to customize this
|
||||||
|
minima:
|
||||||
|
date_format: "%b %-d, %Y"
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Extending the `<head />`
|
||||||
|
|
||||||
|
You can *add* custom metadata to the `<head />` of your layouts by creating a file `_includes/custom-head.html` in your source directory. For example, to add favicons:
|
||||||
|
|
||||||
|
1. Head over to [https://realfavicongenerator.net/](https://realfavicongenerator.net/) to add your own favicons.
|
||||||
|
2. [Customize](#customization) default `_includes/custom-head.html` in your source directory and insert the given code snippet.
|
||||||
|
|
||||||
|
|
||||||
|
### Enabling comments (via Disqus)
|
||||||
|
|
||||||
|
Optionally, if you have a Disqus account, you can tell Jekyll to use it to show a comments section below each post.
|
||||||
|
|
||||||
|
:warning: `url`, e.g. `https://example.com`, must be set in you config file for Disqus to work.
|
||||||
|
|
||||||
|
To enable it, after setting the url field, you also need to add the following lines to your Jekyll site:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
disqus:
|
||||||
|
shortname: my_disqus_shortname
|
||||||
|
```
|
||||||
|
|
||||||
|
You can find out more about Disqus' shortnames [here](https://help.disqus.com/installation/whats-a-shortname).
|
||||||
|
|
||||||
|
Comments are enabled by default and will only appear in production, i.e., `JEKYLL_ENV=production`
|
||||||
|
|
||||||
|
If you don't want to display comments for a particular post you can disable them by adding `comments: false` to that post's YAML Front Matter.
|
||||||
|
|
||||||
|
### Author Metadata
|
||||||
|
|
||||||
|
From `Minima-3.0` onwards, `site.author` is expected to be a mapping of attributes instead of a simple scalar value:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
author:
|
||||||
|
name: John Smith
|
||||||
|
email: "john.smith@foobar.com"
|
||||||
|
```
|
||||||
|
|
||||||
|
To migrate existing metadata, update your config file and any reference to the object in your layouts and includes as summarized below:
|
||||||
|
|
||||||
|
Minima 2.x | Minima 3.0
|
||||||
|
------------- | -------------------
|
||||||
|
`site.author` | `site.author.name`
|
||||||
|
`site.email` | `site.author.email`
|
||||||
|
|
||||||
|
|
||||||
|
### Social networks
|
||||||
|
|
||||||
|
You can add links to the accounts you have on other sites, with respective icon as an SVG graphic, via the config file.
|
||||||
|
From `Minima-3.0` onwards, the social media data is sourced from config key `minima.social_links`. It is a list of key-value pairs, each entry
|
||||||
|
corresponding to a link rendered in the footer. For example, to render links to Jekyll GitHub repository and twitter account, one should have:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
minima:
|
||||||
|
social_links:
|
||||||
|
- { platform: github, user_url: "https://github.com/jekyll/jekyll" }
|
||||||
|
- { platform: twitter, user_url: "https://twitter.com/jekyllrb" }
|
||||||
|
```
|
||||||
|
|
||||||
|
Apart from the necessary keys illustrated above, `title` may also be defined to render a custom link-title. By default, the title is the same
|
||||||
|
as `platform`. The `platform` key corresponds to the SVG id of the sprite in the composite file at URL `/assets/minima-social-icons.svg`.
|
||||||
|
|
||||||
|
The theme ships with an icon for `rss` and icons of select social-media platforms:
|
||||||
|
|
||||||
|
- `devto`
|
||||||
|
- `dribbble`
|
||||||
|
- `facebook`
|
||||||
|
- `flickr`
|
||||||
|
- `github`
|
||||||
|
- `google_scholar`
|
||||||
|
- `instagram`
|
||||||
|
- `keybase`
|
||||||
|
- `linkedin`
|
||||||
|
- `microdotblog`
|
||||||
|
- `pinterest`
|
||||||
|
- `stackoverflow`
|
||||||
|
- `telegram`
|
||||||
|
- `twitter`
|
||||||
|
- `youtube`
|
||||||
|
|
||||||
|
To render a link to a platform not listed above, one should first create a file at path `_includes/social-icons/<PLATFORM>.svg` comprised of
|
||||||
|
graphic markup **without the top-level `<svg></svg>`**. The icon is expected to be centered within a viewbox of `"0 0 16 16"`. Then, make an
|
||||||
|
entry under key `minima.social_links`.
|
||||||
|
|
||||||
|
For example, to render a link to an account of user `john.doe` at platform `deviantart.com`, the steps to follow would be:
|
||||||
|
- Get DeviantArt logo in SVG format.
|
||||||
|
- Using a text-editor, open the downloaded file to inspect if the `viewBox` attribute is defined on the `<svg>` element and is set
|
||||||
|
as `"0 0 16 16" (or similar "square" dimension)`.
|
||||||
|
- If the `viewBox` attribute is non-square or undefined, the graphic *may optionally need* to be edited in a vector graphic editor such as
|
||||||
|
*Inkscape* or *Adobe Illustrator* for properly aligned render on page.
|
||||||
|
- Edit the SVG file in text-editor to delete everything **except** what is contained between `<svg></svg>` and save it into the Jekyll
|
||||||
|
project at path `_includes/social-icons/deviantart.svg`.
|
||||||
|
- Finally, edit the Jekyll config file to enable loading of new icon graphic with:
|
||||||
|
```yaml
|
||||||
|
minima:
|
||||||
|
social_links:
|
||||||
|
- platform: deviantart # same as SVG filename.
|
||||||
|
user_url: "https://www.deviantart.com/john.doe" # URL of profile page.
|
||||||
|
title: My profile at DeviantArt.com # Optional. Text displayed on hovering over link.
|
||||||
|
```
|
||||||
|
|
||||||
|
**Notes:**
|
||||||
|
- The list of social-links is declarative. List-items are rendered in the order declared in the downstream configuration file and not merged
|
||||||
|
with entries from upstream config file(s) such as theme-config-file or prior local config files.
|
||||||
|
- The `user_url` is rendered as given without handling any special characters within.
|
||||||
|
|
||||||
|
|
||||||
|
### Enabling Google Analytics
|
||||||
|
|
||||||
|
To enable Google Analytics, add the following lines to your Jekyll site:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
google_analytics: UA-NNNNNNNN-N
|
||||||
|
```
|
||||||
|
|
||||||
|
Google Analytics will only appear in production, i.e., `JEKYLL_ENV=production`
|
||||||
|
|
||||||
|
### Enabling Excerpts on the Home Page
|
||||||
|
|
||||||
|
To display post-excerpts on the Home Page, simply add the following to your `_config.yml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
show_excerpts: true
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Bug reports and pull requests are welcome on GitHub at https://github.com/jekyll/minima. 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.
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
Poole has two branches, but only one is used for active development.
|
To set up your environment to develop this theme, run `script/bootstrap`.
|
||||||
|
|
||||||
- `master` for development. **All pull requests should be to submitted against `master`.**
|
|
||||||
- `gh-pages` for our hosted site, which includes our analytics tracking code. **Please avoid using this branch.**
|
|
||||||
|
|
||||||
CSS is handled via Jeykll's built-in Sass compiler. Source Sass files are located in `_sass/`, included into `styles.scss`, and compile to `styles.css`.
|
|
||||||
|
|
||||||
## Author
|
|
||||||
|
|
||||||
**Mark Otto**
|
|
||||||
- <https://github.com/mdo>
|
|
||||||
- <https://twitter.com/mdo>
|
|
||||||
|
|
||||||
|
To test your theme, run `script/server` (or `bundle exec jekyll serve`) and open your browser at `http://localhost:4000`. This starts a Jekyll server using your theme and the contents. As you make modifications, your site will regenerate and you should see the changes in the browser after a refresh.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Open sourced under the [MIT license](LICENSE.md).
|
The theme is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
||||||
|
|
||||||
<3
|
|
||||||
|
|
83
_config.yml
83
_config.yml
|
@ -1,41 +1,58 @@
|
||||||
# Setup
|
title: vLLM Blog
|
||||||
title: ""
|
author:
|
||||||
tagline: ""
|
name: © 2023. vLLM Team. All rights reserved.
|
||||||
url: https://vllm.ai
|
email: https://github.com/vllm-project/vllm
|
||||||
paginate: 1
|
google_analytics: G-9C5R3JR3QS
|
||||||
baseurl: ""
|
|
||||||
permalink: pretty
|
# The `>` after `description:` means to ignore line-breaks until next key.
|
||||||
|
# If you want to omit the line-break after the end of text, use `>-` instead.
|
||||||
|
# description: >
|
||||||
|
# Write an awesome description for your new site here. You can edit this line
|
||||||
|
# in _config.yml. It will appear in your document head meta (for Google search
|
||||||
|
# results) and in your feed.xml site description.
|
||||||
|
|
||||||
|
# Build settings
|
||||||
|
|
||||||
|
theme: minima
|
||||||
|
|
||||||
# Gems
|
|
||||||
plugins:
|
plugins:
|
||||||
- jekyll-gist
|
- jekyll-feed
|
||||||
- jekyll-paginate
|
|
||||||
- jekyll-seo-tag
|
- jekyll-seo-tag
|
||||||
|
|
||||||
# Optimize Jekyll
|
# Theme-specific settings
|
||||||
exclude:
|
|
||||||
- .editorconfig
|
|
||||||
- .git
|
|
||||||
- .jekyll-cache
|
|
||||||
- Gemfile
|
|
||||||
- Gemfile.lock
|
|
||||||
- LICENSE.md
|
|
||||||
- README.md
|
|
||||||
|
|
||||||
sass:
|
minima:
|
||||||
sass_dir: _sass
|
# Minima date format.
|
||||||
style: :compressed
|
# Refer to https://shopify.github.io/liquid/filters/date/ if you want to customize this.
|
||||||
|
#
|
||||||
|
# date_format: "%b %-d, %Y"
|
||||||
|
|
||||||
# Options
|
# Generate social links in footer.
|
||||||
|
#
|
||||||
|
# social_links:
|
||||||
|
# - { platform: devto, user_url: "https://dev.to/jekyll" }
|
||||||
|
# - { platform: dribbble, user_url: "https://dribbble.com/jekyll" }
|
||||||
|
# - { platform: facebook, user_url: "https://www.facebook.com/jekyll" }
|
||||||
|
# - { platform: flickr, user_url: "https://www.flickr.com/photos/jekyll" }
|
||||||
|
# - { platform: github, user_url: "https://github.com/jekyll/minima" }
|
||||||
|
# - { platform: google_scholar, user_url: "https://scholar.google.com/citations?user=qc6CJjYAAAAJ" }
|
||||||
|
# - { platform: instagram, user_url: "https://www.instagram.com/jekyll" }
|
||||||
|
# - { platform: keybase, user_url: "https://keybase.io/jekyll" }
|
||||||
|
# - { platform: linkedin, user_url: "https://www.linkedin.com/in/jekyll" }
|
||||||
|
# - { platform: microdotblog, user_url: "https://micro.blog/jekyll" }
|
||||||
|
# - { platform: pinterest, user_url: "https://www.pinterest.com/jekyll" }
|
||||||
|
# - { platform: stackoverflow, user_url: "https://stackoverflow.com/users/1234567/jekyll" }
|
||||||
|
# - { platform: telegram, user_url: "https://t.me/jekyll" }
|
||||||
|
# - { platform: twitter, user_url: "https://twitter.com/jekyllrb" }
|
||||||
|
# - { platform: x, user_url: "https://x.com/jekyllrb" }
|
||||||
|
# - { platform: youtube, user_url: "https://www.youtube.com/jekyll" }
|
||||||
|
|
||||||
# Replace this value and uncomment to enable Google Analytics tracking
|
# If you want to link only specific pages in your header, uncomment this and add the path to the pages in
|
||||||
# ga_analytics: UA-000000-0
|
# order as they should show up.
|
||||||
|
#
|
||||||
|
# header_pages:
|
||||||
|
# - about.md
|
||||||
|
|
||||||
# Specify the author for blog posts
|
# Set to `true` to show excerpts on the homepage.
|
||||||
author:
|
#
|
||||||
name: vLLM Team
|
# show_excerpts: false
|
||||||
url: https://github.com/vllm-project/vllm
|
|
||||||
email: vllm.proj@gmail.com
|
|
||||||
|
|
||||||
# Custom vars
|
|
||||||
version: 3.0.0
|
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
{% comment %}
|
||||||
|
Placeholder to allow defining custom head, in principle, you can add anything here, e.g. favicons:
|
||||||
|
|
||||||
|
1. Head over to https://realfavicongenerator.net/ to add your own favicons.
|
||||||
|
2. Customize default _includes/custom-head.html in your source directory and insert the given code snippet.
|
||||||
|
{% endcomment %}
|
|
@ -0,0 +1,20 @@
|
||||||
|
{%- if page.comments != false and jekyll.environment == "production" -%}
|
||||||
|
|
||||||
|
<div id="disqus_thread"></div>
|
||||||
|
<script>
|
||||||
|
var disqus_config = function () {
|
||||||
|
this.page.url = '{{ page.url | absolute_url }}';
|
||||||
|
this.page.identifier = '{{ page.url | absolute_url }}';
|
||||||
|
};
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var d = document, s = d.createElement('script');
|
||||||
|
|
||||||
|
s.src = 'https://{{ site.disqus.shortname }}.disqus.com/embed.js';
|
||||||
|
|
||||||
|
s.setAttribute('data-timestamp', +new Date());
|
||||||
|
(d.head || d.body).appendChild(s);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript>
|
||||||
|
{%- endif -%}
|
|
@ -1,5 +0,0 @@
|
||||||
<div id="html" markdown="0">
|
|
||||||
<p align="center" markdown="0">
|
|
||||||
<img alt="vLLM" src="assets/figures/perf_a100_n1_light.png" width=55%>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
<footer class="site-footer h-card">
|
||||||
|
<data class="u-url" href="{{ "/" | relative_url }}"></data>
|
||||||
|
|
||||||
|
<div class="wrapper">
|
||||||
|
|
||||||
|
<div class="footer-col-wrapper">
|
||||||
|
<div class="footer-col">
|
||||||
|
<!-- <p class="feed-subscribe">
|
||||||
|
<a href="{{ site.feed.path | default: 'feed.xml' | absolute_url }}">
|
||||||
|
<svg class="svg-icon orange">
|
||||||
|
<use xlink:href="{{ 'assets/minima-social-icons.svg#rss' | relative_url }}"></use>
|
||||||
|
</svg><span>Subscribe</span>
|
||||||
|
</a>
|
||||||
|
</p> -->
|
||||||
|
{%- if site.author %}
|
||||||
|
<ul class="contact-list">
|
||||||
|
{% if site.author.name -%}
|
||||||
|
<li class="p-name">{{ site.author.name | escape }}</li>
|
||||||
|
{% endif -%}
|
||||||
|
{% if site.author.email -%}
|
||||||
|
<li><a class="u-email" href="mailto:{{ site.author.email }}">{{ site.author.email }}</a></li>
|
||||||
|
{%- endif %}
|
||||||
|
</ul>
|
||||||
|
{%- endif %}
|
||||||
|
</div>
|
||||||
|
<div class="footer-col">
|
||||||
|
<p>{{ site.description | escape }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="social-links">
|
||||||
|
{%- include social.html -%}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<script async src="https://www.googletagmanager.com/gtag/js?id={{ site.google_analytics }}"></script>
|
||||||
|
<script>
|
||||||
|
window['ga-disable-{{ site.google_analytics }}'] = window.doNotTrack === "1" || navigator.doNotTrack === "1" || navigator.doNotTrack === "yes" || navigator.msDoNotTrack === "1";
|
||||||
|
window.dataLayer = window.dataLayer || [];
|
||||||
|
function gtag(){window.dataLayer.push(arguments);}
|
||||||
|
gtag('js', new Date());
|
||||||
|
|
||||||
|
gtag('config', '{{ site.google_analytics }}');
|
||||||
|
</script>
|
|
@ -1,17 +1,14 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="twitter:image" content="https://vllm.ai/assets/logos/vllm-logo-text-light.png">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<meta name="twitter:image:alt" content={vLLM}>
|
{%- seo -%}
|
||||||
|
<link rel="stylesheet" href="{{ "/assets/css/style.css" | relative_url }}">
|
||||||
|
{%- feed_meta -%}
|
||||||
|
{%- if jekyll.environment == 'production' and site.google_analytics -%}
|
||||||
|
{%- include google-analytics.html -%}
|
||||||
|
{%- endif -%}
|
||||||
|
|
||||||
<title>
|
{%- include custom-head.html -%}
|
||||||
{{ page.title }}
|
|
||||||
</title>
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="{{ 'styles.css' | relative_url }}">
|
|
||||||
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="{{ '/assets/apple-touch-icon-precomposed.png' | relative_url }}">
|
|
||||||
<link rel="shortcut icon" href="{{ '/assets/favicon.ico' | relative_url }}">
|
|
||||||
<link rel="alternate" type="application/atom+xml" title="{{ site.title }}" href="{{ 'atom.xml' | relative_url }}">
|
|
||||||
|
|
||||||
{% seo title=false %}
|
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
<header class="site-header">
|
||||||
|
|
||||||
|
<div class="wrapper">
|
||||||
|
{%- assign default_paths = site.pages | map: "path" -%}
|
||||||
|
{%- assign page_paths = site.header_pages | default: default_paths -%}
|
||||||
|
{%- assign titles_size = site.pages | map: 'title' | join: '' | size -%}
|
||||||
|
<a class="site-title" rel="author" href="{{ "/" | relative_url }}">{{ site.title | escape }}</a>
|
||||||
|
|
||||||
|
{%- if titles_size > 0 -%}
|
||||||
|
<nav class="site-nav">
|
||||||
|
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
|
||||||
|
<label for="nav-trigger">
|
||||||
|
<span class="menu-icon">
|
||||||
|
<svg viewBox="0 0 18 15" width="18px" height="15px">
|
||||||
|
<path d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.032C17.335,0,18,0.665,18,1.484L18,1.484z M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.032C17.335,6.031,18,6.696,18,7.516L18,7.516z M18,13.516C18,14.335,17.335,15,16.516,15H1.484 C0.665,15,0,14.335,0,13.516l0,0c0-0.82,0.665-1.483,1.484-1.483h15.032C17.335,12.031,18,12.695,18,13.516L18,13.516z"/>
|
||||||
|
</svg>
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<div class="trigger">
|
||||||
|
{%- for path in page_paths -%}
|
||||||
|
{%- assign my_page = site.pages | where: "path", path | first -%}
|
||||||
|
{%- if my_page.title -%}
|
||||||
|
<a class="page-link" href="{{ my_page.url | relative_url }}">{{ my_page.title | escape }}</a>
|
||||||
|
{%- endif -%}
|
||||||
|
{%- endfor -%}
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
{%- endif -%}
|
||||||
|
</div>
|
||||||
|
</header>
|
|
@ -0,0 +1 @@
|
||||||
|
<path d="M4.548,6.415C4.419,6.318,4.29,6.271,4.161,6.271h-0.58v3.471h0.58c0.129,0,0.258-0.049,0.387-0.145 C4.677,9.5,4.742,9.355,4.742,9.163V6.85C4.741,6.656,4.676,6.511,4.548,6.415z M13.981,0.559H2.016 c-0.804,0-1.457,0.65-1.458,1.455v11.973c0.002,0.805,0.655,1.455,1.458,1.455h11.968c0.805,0,1.457-0.65,1.459-1.455V2.014 C15.438,1.209,14.786,0.559,13.981,0.559z M5.68,9.169c0,0.625-0.386,1.572-1.605,1.569H2.532V5.242h1.573 c1.179,0,1.573,0.945,1.574,1.57V9.169z M9.024,6.225h-1.77V7.5h1.082v0.982H7.255v1.275h1.771v0.982H6.959 c-0.371,0.009-0.679-0.283-0.688-0.654V5.931c-0.008-0.37,0.285-0.679,0.655-0.688h2.099V6.225z M12.47,10.055 c-0.438,1.021-1.226,0.817-1.576,0l-1.28-4.812h1.081l0.988,3.778l0.981-3.778h1.082L12.47,10.055z"/>
|
|
@ -0,0 +1 @@
|
||||||
|
<path d="M8 16c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm6.747-6.905c-.234-.074-2.115-.635-4.257-.292.894 2.456 1.258 4.456 1.328 4.872 1.533-1.037 2.624-2.68 2.93-4.58zM10.67 14.3c-.102-.6-.5-2.688-1.46-5.18l-.044.014C5.312 10.477 3.93 13.15 3.806 13.4c1.158.905 2.614 1.444 4.194 1.444.947 0 1.85-.194 2.67-.543zm-7.747-1.72c.155-.266 2.03-3.37 5.555-4.51.09-.03.18-.056.27-.08-.173-.39-.36-.778-.555-1.16-3.413 1.02-6.723.977-7.023.97l-.003.208c0 1.755.665 3.358 1.756 4.57zM1.31 6.61c.307.005 3.122.017 6.318-.832-1.132-2.012-2.353-3.705-2.533-3.952-1.912.902-3.34 2.664-3.784 4.785zM6.4 1.368c.188.253 1.43 1.943 2.548 4 2.43-.91 3.46-2.293 3.582-2.468C11.323 1.827 9.736 1.176 8 1.176c-.55 0-1.087.066-1.6.19zm6.89 2.322c-.145.194-1.29 1.662-3.816 2.694.16.325.31.656.453.99.05.117.1.235.147.352 2.274-.286 4.533.172 4.758.22-.015-1.613-.59-3.094-1.543-4.257z"/>
|
|
@ -0,0 +1 @@
|
||||||
|
<path d="M15.117 0H.883C.395 0 0 .395 0 .883v14.234c0 .488.395.883.883.883h7.663V9.804H6.46V7.39h2.086V5.607c0-2.066 1.262-3.19 3.106-3.19.883 0 1.642.064 1.863.094v2.16h-1.28c-1 0-1.195.48-1.195 1.18v1.54h2.39l-.31 2.42h-2.08V16h4.077c.488 0 .883-.395.883-.883V.883C16 .395 15.605 0 15.117 0"/>
|
|
@ -0,0 +1 @@
|
||||||
|
<path d="M0 8c0 2.05 1.662 3.71 3.71 3.71 2.05 0 3.713-1.66 3.713-3.71S5.76 4.29 3.71 4.29C1.663 4.29 0 5.95 0 8zm8.577 0c0 2.05 1.662 3.71 3.712 3.71C14.33 11.71 16 10.05 16 8s-1.662-3.71-3.71-3.71c-2.05 0-3.713 1.66-3.713 3.71z"/>
|
|
@ -0,0 +1 @@
|
||||||
|
<path d="M8 0C3.58 0 0 3.582 0 8c0 3.535 2.292 6.533 5.47 7.59.4.075.547-.172.547-.385 0-.19-.007-.693-.01-1.36-2.226.483-2.695-1.073-2.695-1.073-.364-.924-.89-1.17-.89-1.17-.725-.496.056-.486.056-.486.803.056 1.225.824 1.225.824.714 1.223 1.873.87 2.33.665.072-.517.278-.87.507-1.07-1.777-.2-3.644-.888-3.644-3.953 0-.873.31-1.587.823-2.147-.09-.202-.36-1.015.07-2.117 0 0 .67-.215 2.2.82.64-.178 1.32-.266 2-.27.68.004 1.36.092 2 .27 1.52-1.035 2.19-.82 2.19-.82.43 1.102.16 1.915.08 2.117.51.56.82 1.274.82 2.147 0 3.073-1.87 3.75-3.65 3.947.28.24.54.73.54 1.48 0 1.07-.01 1.93-.01 2.19 0 .21.14.46.55.38C13.71 14.53 16 11.53 16 8c0-4.418-3.582-8-8-8"/>
|
|
@ -0,0 +1 @@
|
||||||
|
<path d="M1.07,6.337L8,15.219L0.405,9.706C0.3,9.63,0.227,9.529,0.186,9.404c-0.041-0.125-0.041-0.25,0-0.372L1.07,6.337z M5.112,6.337h5.775L8,15.219L5.112,6.337z M3.38,0.982l1.732,5.355H1.07l1.732-5.355c0.047-0.134,0.143-0.201,0.289-0.201 S3.333,0.848,3.38,0.982z M14.93,6.337l0.884,2.695c0.041,0.123,0.041,0.247,0,0.372S15.7,9.63,15.595,9.706L8,15.219L14.93,6.337z M14.93,6.337h-4.042l1.733-5.355c0.046-0.134,0.143-0.201,0.288-0.201c0.146,0,0.243,0.067,0.289,0.201L14.93,6.337z"/>
|
|
@ -0,0 +1 @@
|
||||||
|
<circle opacity="0.7" cx="8.036" cy="11.08" r="4.3"/><path opacity="0.75" d="M0.585,6.505l7.42-5.885L8.03,6.582 C5.305,6.632,4.139,8.729,3.913,9.13L0.585,6.505z"/><path d="M15.415,6.509l-7.42-5.886L7.97,6.585c2.725,0.05,3.891,2.147,4.117,2.548L15.415,6.509z"/>
|
|
@ -0,0 +1 @@
|
||||||
|
<path d="M8 0C5.827 0 5.555.01 4.702.048 3.85.088 3.27.222 2.76.42c-.526.204-.973.478-1.417.923-.445.444-.72.89-.923 1.417-.198.51-.333 1.09-.372 1.942C.008 5.555 0 5.827 0 8s.01 2.445.048 3.298c.04.852.174 1.433.372 1.942.204.526.478.973.923 1.417.444.445.89.72 1.417.923.51.198 1.09.333 1.942.372.853.04 1.125.048 3.298.048s2.445-.01 3.298-.048c.852-.04 1.433-.174 1.942-.372.526-.204.973-.478 1.417-.923.445-.444.72-.89.923-1.417.198-.51.333-1.09.372-1.942.04-.853.048-1.125.048-3.298s-.01-2.445-.048-3.298c-.04-.852-.174-1.433-.372-1.942-.204-.526-.478-.973-.923-1.417-.444-.445-.89-.72-1.417-.923-.51-.198-1.09-.333-1.942-.372C10.445.008 10.173 0 8 0zm0 1.44c2.136 0 2.39.01 3.233.048.78.036 1.203.166 1.485.276.374.145.64.318.92.598.28.28.453.546.598.92.11.282.24.705.276 1.485.038.844.047 1.097.047 3.233s-.01 2.39-.05 3.233c-.04.78-.17 1.203-.28 1.485-.15.374-.32.64-.6.92-.28.28-.55.453-.92.598-.28.11-.71.24-1.49.276-.85.038-1.1.047-3.24.047s-2.39-.01-3.24-.05c-.78-.04-1.21-.17-1.49-.28-.38-.15-.64-.32-.92-.6-.28-.28-.46-.55-.6-.92-.11-.28-.24-.71-.28-1.49-.03-.84-.04-1.1-.04-3.23s.01-2.39.04-3.24c.04-.78.17-1.21.28-1.49.14-.38.32-.64.6-.92.28-.28.54-.46.92-.6.28-.11.7-.24 1.48-.28.85-.03 1.1-.04 3.24-.04zm0 2.452c-2.27 0-4.108 1.84-4.108 4.108 0 2.27 1.84 4.108 4.108 4.108 2.27 0 4.108-1.84 4.108-4.108 0-2.27-1.84-4.108-4.108-4.108zm0 6.775c-1.473 0-2.667-1.194-2.667-2.667 0-1.473 1.194-2.667 2.667-2.667 1.473 0 2.667 1.194 2.667 2.667 0 1.473-1.194 2.667-2.667 2.667zm5.23-6.937c0 .53-.43.96-.96.96s-.96-.43-.96-.96.43-.96.96-.96.96.43.96.96z"/>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<path d="M10.34,13.58c-0.298,0-0.54,0.242-0.54,0.54s0.242,0.54,0.54,0.54c0.298,0,0.54-0.242,0.54-0.54S10.638,13.58,10.34,13.58 L10.34,13.58z M6.38,13.58c-0.298,0-0.54,0.242-0.54,0.54s0.242,0.54,0.54,0.54c0.298,0,0.54-0.242,0.54-0.54 S6.678,13.58,6.38,13.58z"/>
|
||||||
|
<path fill="none" stroke="#000000" stroke-width="0.72" stroke-linecap="round" stroke-miterlimit="10" d="M1.58,13.22 c0.104,0.771,0.344,1.497,0.688,2.16 M5.93,3.86H4.31c-0.149,0-0.27-0.121-0.27-0.27V1.97c0-0.149,0.121-0.27,0.27-0.27h1.62 c0.149,0,0.27,0.121,0.27,0.27v1.08"/>
|
||||||
|
<path d="M8.18,7.46c-1.489,0-2.7-1.211-2.7-2.7c0-2.471,2.012-4.329,2.098-4.407c0.125-0.113,0.309-0.125,0.447-0.029 s0.191,0.273,0.129,0.429C8,1.142,7.861,1.791,8.002,1.999C8.015,2.018,8.044,2.06,8.18,2.06c1.489,0,2.7,1.211,2.7,2.7 C10.88,6.249,9.669,7.46,8.18,7.46z"/>
|
||||||
|
<path d="M15.178,11.759c-0.174-2.216-1.372-4.173-3.196-5.341c-0.015-0.009-0.029-0.02-0.044-0.029 c-0.121-0.076-0.245-0.147-0.371-0.217c-0.044-0.024-0.088-0.049-0.133-0.073c-0.029-0.016-0.061-0.029-0.09-0.043 c-0.228,0.551-0.594,1.03-1.056,1.394l1.206,1.207c0.141,0.141,0.141,0.368,0,0.509c-0.07,0.07-0.162,0.105-0.254,0.105 s-0.185-0.035-0.255-0.105l-0.301-0.301l-0.65,0.651C9.963,9.585,9.871,9.62,9.779,9.62c-0.092,0-0.184-0.035-0.254-0.105 c-0.141-0.141-0.141-0.369,0-0.509l0.651-0.651L9.8,7.979L9.334,8.445c-0.07,0.07-0.162,0.105-0.254,0.105S8.896,8.516,8.826,8.445 C8.74,8.36,8.714,8.245,8.73,8.135C8.552,8.164,8.368,8.18,8.18,8.18c-1.452,0-2.692-0.911-3.188-2.19 C2.318,7.245,0.8,10.089,0.8,13.94v1.08l0.648-0.864c0.669-0.893,1.483-1.789,2.256-2.502c-0.19,0.508-0.318,1.016-0.381,1.521 l-0.113,0.905l0.701-0.585c0.021-0.017,2.087-1.716,4.449-1.716c1.159,0,1.792,0.107,2.352,0.202 c0.479,0.081,0.931,0.157,1.609,0.157c1.115,0,1.727-0.57,1.993-1.254c0.071,0.304,0.121,0.614,0.146,0.931 c0.013,0.167,0.021,0.334,0.021,0.504c0,1.015-0.238,1.987-0.709,2.895c-0.092,0.176-0.022,0.394,0.154,0.485 c0.053,0.027,0.109,0.04,0.165,0.04c0.13,0,0.256-0.07,0.32-0.194c0.523-1.01,0.789-2.095,0.789-3.226 C15.2,12.132,15.192,11.944,15.178,11.759z"/>
|
|
@ -0,0 +1 @@
|
||||||
|
<path d="M13.632 13.635h-2.37V9.922c0-.886-.018-2.025-1.234-2.025-1.235 0-1.424.964-1.424 1.96v3.778h-2.37V6H8.51v1.04h.03c.318-.6 1.092-1.233 2.247-1.233 2.4 0 2.845 1.58 2.845 3.637v4.188zM3.558 4.955c-.762 0-1.376-.617-1.376-1.377 0-.758.614-1.375 1.376-1.375.76 0 1.376.617 1.376 1.375 0 .76-.617 1.377-1.376 1.377zm1.188 8.68H2.37V6h2.376v7.635zM14.816 0H1.18C.528 0 0 .516 0 1.153v13.694C0 15.484.528 16 1.18 16h13.635c.652 0 1.185-.516 1.185-1.153V1.153C16 .516 15.467 0 14.815 0z"/>
|
|
@ -0,0 +1 @@
|
||||||
|
<path d="M15.195,5.352c0-3.347-2.193-4.328-2.193-4.328c-1.104-0.508-3.004-0.721-4.977-0.737H7.977 c-1.973,0.016-3.87,0.229-4.976,0.737c0,0-2.193,0.981-2.193,4.328c0,0.766-0.015,1.683,0.009,2.654c0.08,3.272,0.6,6.499,3.626,7.3 c1.396,0.369,2.594,0.446,3.559,0.394c1.75-0.097,2.732-0.624,2.732-0.624l-0.058-1.27c0,0-1.25,0.395-2.655,0.346 c-1.391-0.047-2.86-0.149-3.085-1.857c-0.021-0.15-0.031-0.312-0.031-0.479c0,0,1.365,0.334,3.096,0.413 c1.059,0.049,2.051-0.062,3.059-0.182c1.934-0.231,3.616-1.422,3.828-2.51C15.224,7.821,15.195,5.352,15.195,5.352z M12.609,9.664 h-1.606V5.73c0-0.83-0.349-1.25-1.047-1.25c-0.772,0-1.158,0.5-1.158,1.486V8.12H7.202V5.966c0-0.987-0.387-1.486-1.158-1.486 c-0.698,0-1.046,0.421-1.046,1.25v3.933H3.391V5.611c0-0.829,0.211-1.487,0.634-1.974c0.437-0.487,1.009-0.736,1.719-0.736 c0.822,0,1.444,0.315,1.855,0.947L8,4.519l0.4-0.67c0.412-0.632,1.033-0.947,1.855-0.947c0.71,0,1.282,0.25,1.72,0.736 c0.423,0.487,0.635,1.145,0.635,1.974V9.664z"/>
|
|
@ -0,0 +1 @@
|
||||||
|
<path d="M13.778,12.215c-0.102,0.218-0.171,0.385-0.212,0.498c-0.143,0.399-0.188,0.719-0.202,0.922 c-0.068,1.015,0.388,1.615,0.496,1.776c0.16,0.239,0.227,0.373,0.195,0.404c-0.059,0.104-0.241,0.104-0.546,0 c-0.457-0.157-1.72-0.647-2.196-1.338c-0.191-0.28-0.313-0.398-0.389-0.44C10.021,14.372,9.034,14.556,8,14.556 c-4.33,0-7.84-3.234-7.84-7.224c0-3.99,3.51-7.225,7.84-7.225s7.84,3.234,7.84,7.225C15.84,9.214,15.059,10.929,13.778,12.215z M7.944,9.692c1.542,0.999,2.38,1.439,2.513,1.322c0.133-0.117-0.027-1.051-0.479-2.799c1.436-1.092,2.114-1.753,2.033-1.981 c-0.082-0.229-1.018-0.365-2.81-0.408C8.607,4.13,8.188,3.28,7.944,3.28c-0.244,0-0.663,0.85-1.256,2.546 c-1.795,0.053-2.731,0.188-2.81,0.408c-0.078,0.219,0.6,0.88,2.033,1.981c-0.491,1.689-0.65,2.622-0.48,2.799 C5.602,11.19,6.44,10.75,7.944,9.692z"/>
|
|
@ -0,0 +1 @@
|
||||||
|
<path d="M8 0C3.582 0 0 3.582 0 8c0 3.39 2.108 6.285 5.084 7.45-.07-.633-.133-1.604.028-2.295.146-.625.938-3.977.938-3.977s-.24-.48-.24-1.188c0-1.11.646-1.943 1.448-1.943.683 0 1.012.513 1.012 1.127 0 .687-.436 1.713-.662 2.664-.19.797.4 1.445 1.185 1.445 1.42 0 2.514-1.498 2.514-3.662 0-1.91-1.376-3.25-3.342-3.25-2.276 0-3.61 1.71-3.61 3.47 0 .69.263 1.43.593 1.83.066.08.075.15.057.23-.06.25-.196.8-.223.91-.035.15-.115.18-.268.11C3.516 10.46 2.89 9 2.89 7.82c0-2.52 1.834-4.84 5.287-4.84 2.774 0 4.932 1.98 4.932 4.62 0 2.76-1.74 4.98-4.16 4.98-.81 0-1.57-.42-1.84-.92l-.5 1.9c-.18.698-.67 1.57-1 2.1.75.23 1.54.357 2.37.357 4.41 0 8-3.58 8-8s-3.59-8-8-8z"/>
|
|
@ -0,0 +1 @@
|
||||||
|
<path d="M12.8 16C12.8 8.978 7.022 3.2 0 3.2V0c8.777 0 16 7.223 16 16h-3.2zM2.194 11.61c1.21 0 2.195.985 2.195 2.196 0 1.21-.99 2.194-2.2 2.194C.98 16 0 15.017 0 13.806c0-1.21.983-2.195 2.194-2.195zM10.606 16h-3.11c0-4.113-3.383-7.497-7.496-7.497v-3.11c5.818 0 10.606 4.79 10.606 10.607z"/>
|
|
@ -0,0 +1 @@
|
||||||
|
<path d="M12.566,14.12v-4.08h1.359v5.44H1.686v-5.44h1.36v4.08H12.566z M10.336,0.52L9.269,1.315l3.978,5.358l1.068-0.803 L10.336,0.52z M4.406,12.76h6.8V11.4h-6.8V12.76z M12.158,7.945L7.03,3.675l0.851-1.02l5.128,4.271L12.158,7.945z M5.357,6.646 l6.053,2.815l0.558-1.21L5.916,5.437L5.357,6.64V6.646z M11.227,10.91L4.494,9.774l0.272-1.306l6.549,1.306L11.227,10.91z"/>
|
|
@ -0,0 +1 @@
|
||||||
|
<path d="M10.563,11.596l1.286-6.063c0.053-0.256,0.022-0.44-0.092-0.551c-0.113-0.111-0.264-0.131-0.45-0.061l-7.56,2.914 C3.579,7.897,3.463,7.971,3.402,8.052C3.34,8.134,3.333,8.211,3.38,8.284s0.14,0.13,0.28,0.171l1.934,0.604l4.489-2.826 c0.123-0.082,0.216-0.099,0.28-0.053c0.041,0.029,0.029,0.073-0.035,0.131L6.696,9.592l-0.14,1.996c0.134,0,0.265-0.064,0.394-0.193 l0.945-0.91l1.96,1.444C10.229,12.139,10.465,12.027,10.563,11.596z M15.84,8c0,1.062-0.207,2.077-0.621,3.045 c-0.414,0.969-0.972,1.803-1.671,2.503c-0.7,0.699-1.534,1.257-2.503,1.671C10.077,15.633,9.062,15.84,8,15.84 s-2.077-0.207-3.045-0.621c-0.969-0.414-1.803-0.972-2.502-1.671c-0.7-0.7-1.257-1.534-1.671-2.503C0.367,10.077,0.16,9.062,0.16,8 s0.207-2.077,0.621-3.045c0.414-0.969,0.971-1.803,1.671-2.502c0.7-0.7,1.534-1.257,2.502-1.671C5.923,0.367,6.938,0.16,8,0.16 s2.077,0.207,3.045,0.621c0.969,0.414,1.803,0.971,2.503,1.671c0.699,0.7,1.257,1.534,1.671,2.502C15.633,5.923,15.84,6.938,15.84,8 z"/>
|
|
@ -0,0 +1 @@
|
||||||
|
<path d="M16 3.038c-.59.26-1.22.437-1.885.517.677-.407 1.198-1.05 1.443-1.816-.634.37-1.337.64-2.085.79-.598-.64-1.45-1.04-2.396-1.04-1.812 0-3.282 1.47-3.282 3.28 0 .26.03.51.085.75-2.728-.13-5.147-1.44-6.766-3.42C.83 2.58.67 3.14.67 3.75c0 1.14.58 2.143 1.46 2.732-.538-.017-1.045-.165-1.487-.41v.04c0 1.59 1.13 2.918 2.633 3.22-.276.074-.566.114-.865.114-.21 0-.41-.02-.61-.058.42 1.304 1.63 2.253 3.07 2.28-1.12.88-2.54 1.404-4.07 1.404-.26 0-.52-.015-.78-.045 1.46.93 3.18 1.474 5.04 1.474 6.04 0 9.34-5 9.34-9.33 0-.14 0-.28-.01-.42.64-.46 1.2-1.04 1.64-1.7z"/>
|
|
@ -0,0 +1,3 @@
|
||||||
|
<path
|
||||||
|
d="M 9.5237333,6.7756869 15.481067,0 h -1.4112 L 8.8949333,5.8820316 4.7648,0 H 0 L 6.2469333,8.8955204 0,16 H 1.4112 L 6.8725333,9.7870441 11.2352,16 H 16 M 1.9205333,1.0412656 h 2.168 L 14.0688,15.009892 h -2.168533"
|
||||||
|
style="stroke-width:0.0533111" />
|
|
@ -0,0 +1 @@
|
||||||
|
<path d="M0 7.345c0-1.294.16-2.59.16-2.59s.156-1.1.636-1.587c.608-.637 1.408-.617 1.764-.684C3.84 2.36 8 2.324 8 2.324s3.362.004 5.6.166c.314.038.996.04 1.604.678.48.486.636 1.588.636 1.588S16 6.05 16 7.346v1.258c0 1.296-.16 2.59-.16 2.59s-.156 1.102-.636 1.588c-.608.638-1.29.64-1.604.678-2.238.162-5.6.166-5.6.166s-4.16-.037-5.44-.16c-.356-.067-1.156-.047-1.764-.684-.48-.487-.636-1.587-.636-1.587S0 9.9 0 8.605v-1.26zm6.348 2.73V5.58l4.323 2.255-4.32 2.24z"/>
|
|
@ -0,0 +1,7 @@
|
||||||
|
<li>{% assign entry = include.item %}
|
||||||
|
<a {% unless entry.platform == 'rss' %}rel="me" {% endunless %}href="{{ entry.user_url }}" target="_blank" title="{{ entry.title | default: entry.platform }}">
|
||||||
|
<svg class="svg-icon grey">
|
||||||
|
<use xlink:href="{{ '/assets/minima-social-icons.svg#' | append: entry.platform | relative_url }}"></use>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
</li>
|
|
@ -0,0 +1,5 @@
|
||||||
|
<ul class="social-media-list">
|
||||||
|
{%- for entry in site.minima.social_links -%}
|
||||||
|
{%- include social-item.html item = entry -%}
|
||||||
|
{%- endfor -%}
|
||||||
|
</ul>
|
|
@ -0,0 +1,3 @@
|
||||||
|
<symbol id="{{ include.key }}" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" viewBox="0 0 16 16">
|
||||||
|
{%- include social-icons/{{ include.key }}.svg -%}
|
||||||
|
</symbol>
|
|
@ -0,0 +1,20 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="{{ page.lang | default: site.lang | default: "en" }}">
|
||||||
|
|
||||||
|
{%- include head.html -%}
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
{%- include header.html -%}
|
||||||
|
|
||||||
|
<main class="page-content" aria-label="Content">
|
||||||
|
<div class="wrapper">
|
||||||
|
{{ content }}
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
{%- include footer.html -%}
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -1,33 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
|
|
||||||
{% include head.html %}
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div class="container content">
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
<main>
|
|
||||||
{{ content }}
|
|
||||||
</main>
|
|
||||||
|
|
||||||
<footer class="footer">
|
|
||||||
<small>
|
|
||||||
© <time datetime="{{ site.time | date_to_xmlschema }}">{{ site.time | date: '%Y' }}</time>. vLLM Team. All rights reserved.
|
|
||||||
</small>
|
|
||||||
</footer>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% if site.ga_analytics %}
|
|
||||||
<script>
|
|
||||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
|
||||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
|
||||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
|
||||||
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
|
||||||
ga('create', '{{ site.ga_analytics }}', 'auto');
|
|
||||||
ga('send', 'pageview');
|
|
||||||
</script>
|
|
||||||
{% endif %}
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
---
|
||||||
|
layout: base
|
||||||
|
---
|
||||||
|
|
||||||
|
<div class="home">
|
||||||
|
{%- if page.title -%}
|
||||||
|
<h1 class="page-heading">{{ page.title }}</h1>
|
||||||
|
{%- endif -%}
|
||||||
|
|
||||||
|
{{ content }}
|
||||||
|
|
||||||
|
|
||||||
|
{% if site.paginate %}
|
||||||
|
{% assign posts = paginator.posts %}
|
||||||
|
{% else %}
|
||||||
|
{% assign posts = site.posts %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
{%- if posts.size > 0 -%}
|
||||||
|
{%- if page.list_title -%}
|
||||||
|
<h2 class="post-list-heading">{{ page.list_title }}</h2>
|
||||||
|
{%- endif -%}
|
||||||
|
<ul class="post-list">
|
||||||
|
{%- assign date_format = site.minima.date_format | default: "%b %-d, %Y" -%}
|
||||||
|
{%- for post in posts -%}
|
||||||
|
<li>
|
||||||
|
<span class="post-meta">{{ post.date | date: date_format }}</span>
|
||||||
|
<h3>
|
||||||
|
<a class="post-link" href="{{ post.url | relative_url }}">
|
||||||
|
{{ post.title | escape }}
|
||||||
|
</a>
|
||||||
|
</h3>
|
||||||
|
{%- if site.show_excerpts -%}
|
||||||
|
{{ post.excerpt }}
|
||||||
|
{%- endif -%}
|
||||||
|
</li>
|
||||||
|
{%- endfor -%}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
{% if site.paginate %}
|
||||||
|
<div class="pager">
|
||||||
|
<ul class="pagination">
|
||||||
|
{%- if paginator.previous_page %}
|
||||||
|
<li><a href="{{ paginator.previous_page_path | relative_url }}" class="previous-page">{{ paginator.previous_page }}</a></li>
|
||||||
|
{%- else %}
|
||||||
|
<li><div class="pager-edge">•</div></li>
|
||||||
|
{%- endif %}
|
||||||
|
<li><div class="current-page">{{ paginator.page }}</div></li>
|
||||||
|
{%- if paginator.next_page %}
|
||||||
|
<li><a href="{{ paginator.next_page_path | relative_url }}" class="next-page">{{ paginator.next_page }}</a></li>
|
||||||
|
{%- else %}
|
||||||
|
<li><div class="pager-edge">•</div></li>
|
||||||
|
{%- endif %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
{%- endif -%}
|
||||||
|
|
||||||
|
</div>
|
|
@ -1,8 +1,14 @@
|
||||||
---
|
---
|
||||||
layout: default
|
layout: base
|
||||||
---
|
---
|
||||||
|
<article class="post">
|
||||||
|
|
||||||
|
<header class="post-header">
|
||||||
|
<h1 class="post-title">{{ page.title | escape }}</h1>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div class="post-content">
|
||||||
|
{{ content }}
|
||||||
|
</div>
|
||||||
|
|
||||||
<article class="page">
|
|
||||||
<h1 class="page-title">{{ page.title }}</h1>
|
|
||||||
{{ content }}
|
|
||||||
</article>
|
</article>
|
||||||
|
|
|
@ -1,25 +1,40 @@
|
||||||
---
|
---
|
||||||
layout: default
|
layout: base
|
||||||
---
|
---
|
||||||
|
<article class="post h-entry" itemscope itemtype="http://schema.org/BlogPosting">
|
||||||
|
{%- if page.extra -%}
|
||||||
|
{{ page.extra }}
|
||||||
|
{%- endif -%}
|
||||||
|
<header class="post-header">
|
||||||
|
<h1 class="post-title p-name" itemprop="name headline">{{ page.title | escape }}</h1>
|
||||||
|
<p class="post-meta">
|
||||||
|
{%- assign date_format = site.minima.date_format | default: "%b %-d, %Y" -%}
|
||||||
|
<time class="dt-published" datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">
|
||||||
|
{{ page.date | date: date_format }}
|
||||||
|
</time>
|
||||||
|
{%- if page.modified_date -%}
|
||||||
|
~
|
||||||
|
{%- assign mdate = page.modified_date | date_to_xmlschema -%}
|
||||||
|
<time class="dt-modified" datetime="{{ mdate }}" itemprop="dateModified">
|
||||||
|
{{ mdate | date: date_format }}
|
||||||
|
</time>
|
||||||
|
{%- endif -%}
|
||||||
|
{%- if page.author -%}
|
||||||
|
• {% for author in page.author %}
|
||||||
|
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
|
||||||
|
<span class="p-author h-card" itemprop="name">{{ author }}</span></span>
|
||||||
|
{%- if forloop.last == false %}, {% endif -%}
|
||||||
|
{% endfor %}
|
||||||
|
{%- endif -%}</p>
|
||||||
|
</header>
|
||||||
|
|
||||||
<article class="post">
|
<div class="post-content e-content" itemprop="articleBody">
|
||||||
<h1 class="post-title">{{ page.title }}</h1>
|
{{ content }}
|
||||||
<time datetime="{{ page.date | date_to_xmlschema }}" class="post-date">{{ page.date | date_to_string }}</time>
|
</div>
|
||||||
{{ content }}
|
|
||||||
|
{%- if site.disqus.shortname -%}
|
||||||
|
{%- include disqus_comments.html -%}
|
||||||
|
{%- endif -%}
|
||||||
|
|
||||||
|
<a class="u-url" href="{{ page.url | relative_url }}" hidden></a>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
{% if site.related_posts != empty %}
|
|
||||||
<aside class="related">
|
|
||||||
<h3>Related posts</h3>
|
|
||||||
<ul class="related-posts">
|
|
||||||
{% for post in site.related_posts limit:3 %}
|
|
||||||
<li>
|
|
||||||
<a href="{{ site.baseurl }}{{ post.url }}">
|
|
||||||
{{ post.title }}
|
|
||||||
<small><time datetime="{{ post.date | date_to_xmlschema }}">{{ post.date | date_to_string }}</time></small>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
</aside>
|
|
||||||
{% endif %}
|
|
||||||
|
|
|
@ -1,52 +1,42 @@
|
||||||
---
|
---
|
||||||
layout: post
|
layout: post
|
||||||
title: "vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttention"
|
title: "vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttention"
|
||||||
|
author: "Woosuk Kwon*, Zhuohan Li*, Siyuan Zhuang, Ying Sheng, Lianmin Zheng, Cody Yu, Joey Gonzalez, Hao Zhang, and Ion Stoica (* Equal Contribution)"
|
||||||
|
extra: "<br><p align=\"center\"><picture><img src=\"/assets/logos/vllm-logo-text-light.png\" width=\"65%\"></picture></p><br>"
|
||||||
---
|
---
|
||||||
|
<p align="center" style="margin-top:-15px">
|
||||||
<p align="center">
|
|
||||||
<picture>
|
|
||||||
<img src="assets/logos/vllm-logo-text-light.png" width="65%">
|
|
||||||
</picture>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
# *vLLM:* Easy, Fast, and Cheap LLM Serving with PagedAttention
|
|
||||||
|
|
||||||
*By Woosuk Kwon\*, Zhuohan Li\*, Siyuan Zhuang, Ying Sheng, Lianmin Zheng, Cody Yu, Joey Gonzalez, Hao Zhang, and Ion Stoica (\* Equal Contribution). June 20th, 2023*
|
|
||||||
|
|
||||||
<p align="left">
|
|
||||||
<a href="https://github.com/vllm-project/vllm"><b>GitHub</b></a> | <a href="https://vllm.readthedocs.io/en/latest/"><b>Documentation</b></a> | <a href="https://arxiv.org/pdf/2309.06180.pdf"><b>Paper</b></a>
|
<a href="https://github.com/vllm-project/vllm"><b>GitHub</b></a> | <a href="https://vllm.readthedocs.io/en/latest/"><b>Documentation</b></a> | <a href="https://arxiv.org/pdf/2309.06180.pdf"><b>Paper</b></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
LLMs promise to fundamentally change how we use AI across all industries. However, actually serving these models is challenging and can be surprisingly slow even on expensive hardware. Today we are excited to introduce vLLM, an open-source library for fast LLM inference and serving. vLLM utilizes **PagedAttention**, our new attention algorithm that effectively manages attention keys and values. vLLM equipped with PagedAttention redefines the new state of the art in LLM serving: it delivers up to 24x higher throughput than HuggingFace Transformers, without requiring any model architecture changes.
|
LLMs promise to fundamentally change how we use AI across all industries. However, actually serving these models is challenging and can be surprisingly slow even on expensive hardware. Today we are excited to introduce vLLM, an open-source library for fast LLM inference and serving. vLLM utilizes **PagedAttention**, our new attention algorithm that effectively manages attention keys and values. vLLM equipped with PagedAttention redefines the new state of the art in LLM serving: it delivers up to 24x higher throughput than HuggingFace Transformers, without requiring any model architecture changes.
|
||||||
|
|
||||||
vLLM has been developed at UC Berkeley and deployed at [Chatbot Arena and Vicuna Demo](https://chat.lmsys.org) for the past two months. It is the core technology that makes LLM serving affordable even for a small research team like LMSYS with limited compute resources. Try out vLLM now with a single command at our [GitHub repository](https://github.com/vllm-project/vllm).
|
vLLM has been developed at UC Berkeley and deployed at [Chatbot Arena and Vicuna Demo](https://chat.lmsys.org) for the past two months. It is the core technology that makes LLM serving affordable even for a small research team like LMSYS with limited compute resources. Try out vLLM now with a single command at our [GitHub repository](https://github.com/vllm-project/vllm).
|
||||||
|
|
||||||
|
|
||||||
## Beyond State-of-the-art Performance
|
### Beyond State-of-the-art Performance
|
||||||
|
|
||||||
We compare the throughput of vLLM with [HuggingFace Transformers (HF)](https://huggingface.co/docs/transformers/main_classes/text_generation), the most popular LLM library and [HuggingFace Text Generation Inference (TGI)](https://github.com/huggingface/text-generation-inference), the previous state of the art. We evaluate in two settings: LLaMA-7B on an NVIDIA A10G GPU and LLaMA-13B on an NVIDIA A100 GPU (40GB). We sample the requests’ input/output lengths from the ShareGPT dataset. In our experiments, vLLM achieves up to **24x** higher throughput compared to HF and up to **3.5x** higher throughput than TGI.
|
We compare the throughput of vLLM with [HuggingFace Transformers (HF)](https://huggingface.co/docs/transformers/main_classes/text_generation), the most popular LLM library and [HuggingFace Text Generation Inference (TGI)](https://github.com/huggingface/text-generation-inference), the previous state of the art. We evaluate in two settings: LLaMA-7B on an NVIDIA A10G GPU and LLaMA-13B on an NVIDIA A100 GPU (40GB). We sample the requests’ input/output lengths from the ShareGPT dataset. In our experiments, vLLM achieves up to **24x** higher throughput compared to HF and up to **3.5x** higher throughput than TGI.
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<picture>
|
<picture>
|
||||||
<img src="assets/figures/perf_a100_n1_light.png" width="45%">
|
<img src="/assets/figures/perf_a100_n1_light.png" width="45%">
|
||||||
</picture><picture>
|
</picture><picture>
|
||||||
<img src="assets/figures/perf_a10g_n1_light.png" width="45%">
|
<img src="/assets/figures/perf_a10g_n1_light.png" width="45%">
|
||||||
</picture><br>
|
</picture><br>
|
||||||
Serving throughput when each request asks for <em> one output completion</em>. vLLM achieves 14x - 24x higher throughput than HF and 2.2x - 2.5x higher throughput than TGI.
|
Serving throughput when each request asks for <em> one output completion</em>. vLLM achieves 14x - 24x higher throughput than HF and 2.2x - 2.5x higher throughput than TGI.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<picture>
|
<picture>
|
||||||
<img src="assets/figures/perf_a100_n3_light.png" width="45%">
|
<img src="/assets/figures/perf_a100_n3_light.png" width="45%">
|
||||||
</picture><picture>
|
</picture><picture>
|
||||||
<img src="assets/figures/perf_a10g_n3_light.png" width="45%">
|
<img src="/assets/figures/perf_a10g_n3_light.png" width="45%">
|
||||||
</picture>
|
</picture>
|
||||||
<br>Serving throughput when each request asks for <em>three parallel output completions</em>. vLLM achieves 8.5x - 15x higher throughput than HF and 3.3x - 3.5x higher throughput than TGI.
|
<br>Serving throughput when each request asks for <em>three parallel output completions</em>. vLLM achieves 8.5x - 15x higher throughput than HF and 3.3x - 3.5x higher throughput than TGI.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## The Secret Sauce: PagedAttention
|
### The Secret Sauce: PagedAttention
|
||||||
|
|
||||||
In vLLM, we identify that the performance of LLM serving is bottlenecked by memory. In the autoregressive decoding process, all the input tokens to the LLM produce their attention key and value tensors, and these tensors are kept in GPU memory to generate next tokens. These cached key and value tensors are often referred to as KV cache. The KV cache is
|
In vLLM, we identify that the performance of LLM serving is bottlenecked by memory. In the autoregressive decoding process, all the input tokens to the LLM produce their attention key and value tensors, and these tensors are kept in GPU memory to generate next tokens. These cached key and value tensors are often referred to as KV cache. The KV cache is
|
||||||
- *Large:* Takes up to 1.7GB for a single sequence in LLaMA-13B.
|
- *Large:* Takes up to 1.7GB for a single sequence in LLaMA-13B.
|
||||||
|
@ -57,7 +47,7 @@ To address this problem, we introduce **PagedAttention**, an attention algorithm
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<picture>
|
<picture>
|
||||||
<img src="assets/figures/annimation0.gif" width="80%">
|
<img src="/assets/figures/annimation0.gif" width="80%">
|
||||||
</picture>
|
</picture>
|
||||||
<br>
|
<br>
|
||||||
<em>PagedAttention:</em> KV Cache are partitioned into blocks. Blocks do not need to be contiguous in memory space.
|
<em>PagedAttention:</em> KV Cache are partitioned into blocks. Blocks do not need to be contiguous in memory space.
|
||||||
|
@ -67,7 +57,7 @@ Because the blocks do not need to be contiguous in memory, we can manage the key
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<picture>
|
<picture>
|
||||||
<img src="assets/figures/annimation1.gif" width="100%">
|
<img src="/assets/figures/annimation1.gif" width="100%">
|
||||||
</picture>
|
</picture>
|
||||||
<br>
|
<br>
|
||||||
Example generation process for a request with PagedAttention.
|
Example generation process for a request with PagedAttention.
|
||||||
|
@ -79,7 +69,7 @@ PagedAttention has another key advantage: efficient memory sharing. For example,
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<picture>
|
<picture>
|
||||||
<img src="assets/figures/annimation2.gif" width="80%">
|
<img src="/assets/figures/annimation2.gif" width="80%">
|
||||||
</picture>
|
</picture>
|
||||||
<br>
|
<br>
|
||||||
Example of parallel sampling.
|
Example of parallel sampling.
|
||||||
|
@ -89,7 +79,7 @@ PagedAttention naturally enables memory sharing through its block table. Similar
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<picture>
|
<picture>
|
||||||
<img src="assets/figures/annimation3.gif" width="100%">
|
<img src="/assets/figures/annimation3.gif" width="100%">
|
||||||
</picture>
|
</picture>
|
||||||
<br>
|
<br>
|
||||||
Example generation process for a request that samples multiple outputs.
|
Example generation process for a request that samples multiple outputs.
|
||||||
|
@ -99,7 +89,7 @@ PageAttention’s memory sharing greatly reduces the memory overhead of complex
|
||||||
|
|
||||||
PagedAttention is the core technology behind vLLM, our LLM inference and serving engine that supports a variety of models with high performance and an easy-to-use interface. For more technical details about vLLM and PagedAttention, check out our [GitHub repo](https://github.com/vllm-project/vllm) and stay tuned for our paper.
|
PagedAttention is the core technology behind vLLM, our LLM inference and serving engine that supports a variety of models with high performance and an easy-to-use interface. For more technical details about vLLM and PagedAttention, check out our [GitHub repo](https://github.com/vllm-project/vllm) and stay tuned for our paper.
|
||||||
|
|
||||||
## The Silent Hero Behind LMSYS Vicuna and Chatbot Arena
|
### The Silent Hero Behind LMSYS Vicuna and Chatbot Arena
|
||||||
|
|
||||||
This April, [LMSYS](https://lmsys.org) developed the popular Vicuna chatbot models and made them publicly available. Since then, Vicuna has been served in [Chatbot Arena](https://arena.lmsys.org/) for millions of users. Initially, LMSYS FastChat adopted a HF Transformers based [serving backend](https://github.com/lm-sys/FastChat/blob/main/fastchat/serve/model_worker.py) to serve the chat demo. As the demo became more popular, the peak traffic ramped up several times, making the HF backend a significant bottleneck. The LMSYS and vLLM team have worked together and soon developed the FastChat-vLLM integration to use vLLM [as the new backend](https://github.com/lm-sys/FastChat/blob/main/fastchat/serve/vllm_worker.py) in order to support the growing demands (up to 5x more traffic). In an early [internal micro-benchmark](https://github.com/lm-sys/FastChat/blob/main/fastchat/serve/test_throughput.py) by LMSYS, the vLLM serving backend can **achieve up to 30x higher throughput than an initial HF backend.**
|
This April, [LMSYS](https://lmsys.org) developed the popular Vicuna chatbot models and made them publicly available. Since then, Vicuna has been served in [Chatbot Arena](https://arena.lmsys.org/) for millions of users. Initially, LMSYS FastChat adopted a HF Transformers based [serving backend](https://github.com/lm-sys/FastChat/blob/main/fastchat/serve/model_worker.py) to serve the chat demo. As the demo became more popular, the peak traffic ramped up several times, making the HF backend a significant bottleneck. The LMSYS and vLLM team have worked together and soon developed the FastChat-vLLM integration to use vLLM [as the new backend](https://github.com/lm-sys/FastChat/blob/main/fastchat/serve/vllm_worker.py) in order to support the growing demands (up to 5x more traffic). In an early [internal micro-benchmark](https://github.com/lm-sys/FastChat/blob/main/fastchat/serve/test_throughput.py) by LMSYS, the vLLM serving backend can **achieve up to 30x higher throughput than an initial HF backend.**
|
||||||
|
|
||||||
|
@ -107,7 +97,7 @@ Since mid-April, the most popular models such as Vicuna, Koala, and LLaMA, have
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<picture>
|
<picture>
|
||||||
<img src="assets/figures/lmsys_traffic.png" width="100%">
|
<img src="/assets/figures/lmsys_traffic.png" width="100%">
|
||||||
</picture>
|
</picture>
|
||||||
<br>
|
<br>
|
||||||
Requests served by FastChat-vLLM integration in the Chatbot Arena between April to May. Indeed, more than half of the requests to Chatbot Arena use vLLM as the inference backend.
|
Requests served by FastChat-vLLM integration in the Chatbot Arena between April to May. Indeed, more than half of the requests to Chatbot Arena use vLLM as the inference backend.
|
||||||
|
@ -115,7 +105,7 @@ Requests served by FastChat-vLLM integration in the Chatbot Arena between April
|
||||||
|
|
||||||
This utilization of vLLM has also significantly reduced operational costs. With vLLM, LMSYS was able to cut the number of GPUs used for serving the above traffic by 50%. vLLM has been handling an average of 30K requests daily and a peak of 60K, which is a clear demonstration of vLLM’s robustness.
|
This utilization of vLLM has also significantly reduced operational costs. With vLLM, LMSYS was able to cut the number of GPUs used for serving the above traffic by 50%. vLLM has been handling an average of 30K requests daily and a peak of 60K, which is a clear demonstration of vLLM’s robustness.
|
||||||
|
|
||||||
## Get started with vLLM
|
### Get started with vLLM
|
||||||
|
|
||||||
Install vLLM with the following command (check out our [installation guide](https://vllm.readthedocs.io/en/latest/getting_started/installation.html) for more):
|
Install vLLM with the following command (check out our [installation guide](https://vllm.readthedocs.io/en/latest/getting_started/installation.html) for more):
|
||||||
|
|
||||||
|
@ -158,4 +148,4 @@ For more ways to use vLLM, please check out the [quickstart guide](https://vllm.
|
||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
*Blog written by Woosuk Kwon and Zhuohan Li (UC Berkeley). Special thanks to Hao Zhang for the integration of vLLM and FastChat and for writing the corresponding section. We thank the entire team — Siyuan Zhuang, Ying Sheng, Lianmin Zheng (UC Berkeley), Cody Yu (Independent Researcher), Joey Gonzalez (UC Berkeley), Hao Zhang (UC Berkeley & UCSD), and Ion Stoica (UC Berkeley).*
|
*Blog written by Woosuk Kwon and Zhuohan Li (UC Berkeley). Special thanks to Hao Zhang for the integration of vLLM and FastChat and for writing the corresponding section. We thank the entire team — Siyuan Zhuang, Ying Sheng, Lianmin Zheng (UC Berkeley), Cody Yu (Independent Researcher), Joey Gonzalez (UC Berkeley), Hao Zhang (UC Berkeley & UCSD), and Ion Stoica (UC Berkeley).*
|
|
@ -0,0 +1,67 @@
|
||||||
|
---
|
||||||
|
layout: post
|
||||||
|
title: "Notes on vLLM v.s. DeepSpeed"
|
||||||
|
author: "vLLM Team"
|
||||||
|
---
|
||||||
|
|
||||||
|
---
|
||||||
|
**TL;DR:**
|
||||||
|
- vLLM is as fast as DeepSpeed in common scenarios and faster than Deepspeed when outputs are long.
|
||||||
|
- DeepSpeed only outperforms vLLM in long prompt, short output use cases due to its Dynamic SplitFuse optimization. This optimization is on vLLM’s roadmap.
|
||||||
|
- vLLM’s mission is to build the fastest and easiest-to-use open-source LLM inference and serving engine. It is Apache 2.0 and community-owned with broad model and optimization support.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Recently, the DeepSpeed team published [a blog](https://github.com/microsoft/DeepSpeed/tree/master/blogs/deepspeed-fastgen) claiming 2x throughput improvement over vLLM by utilizing the Dynamic Splitfuse technique. We are happy to see the technology advancements from the open-source community. In this blog, we clarify the workloads that benefit from the Dynamic SplitFuse enhancement, which are quite narrow. For most workloads, vLLM is on par with or faster than DeepSpeed MII.
|
||||||
|
|
||||||
|
In this post, we will discuss the difference between the two systems, share our benchmarks, and discuss future steps.
|
||||||
|
|
||||||
|
### Performance Benchmark
|
||||||
|
|
||||||
|
In terms of performance optimization, we believe there are 2 key differences between vLLM and DeepSpeed:
|
||||||
|
DeepSpeed uses a conservative/suboptimal memory allocation scheme, which wastes memory when output lengths are large.
|
||||||
|
DeepSpeed uses Dynamic SplitFuse scheduling which gives speedup only when prompt lengths are much greater than output lengths.
|
||||||
|
|
||||||
|
Consequently, DeepSpeed wins when the workload is consistently long prompt and short output. In other cases, vLLM wins.
|
||||||
|
|
||||||
|
#### Scenario 1: Long Prompt Length, Short Output
|
||||||
|
In this scenario, we expect DeepSpeed to perform well due to Dynamic SplitFuse. However, the benefit we observe is not as significant as 2x.
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<picture>
|
||||||
|
<img src="/assets/figures/notes-vllm-vs-deepspeed/s1.png" width="50%">
|
||||||
|
</picture>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
#### Scenario 2: All other cases
|
||||||
|
In this scenario, we observe vLLM perform better or on par with DeepSpeed.
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<picture>
|
||||||
|
<img src="/assets/figures/notes-vllm-vs-deepspeed/s2.png" width="50%">
|
||||||
|
</picture>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
### vLLM’s Future: A True Community Project
|
||||||
|
We are committed to making vLLM the best open-source project incorporating the community’s best models, optimizations, and hardware. Coming out of UC Berkeley Sky Computing Lab, we are building vLLM truly in open source with the Apache 2.0 license.
|
||||||
|
|
||||||
|
The vLLM team prioritizes collaborations and we strive to keep the codebase with high quality code and easy to contribute. We are actively working on system performance; as well as new features like LoRA, Speculative Decoding, and better Quantization Support. Additionally, we are collaborating with hardware vendors like AMD, AWS Inferenetia, and Intel Habana to bring LLM to the broadest community.
|
||||||
|
|
||||||
|
Specifically for the Dynamic SplitFuse optimization, we are actively investigating the proper integration. If you have any questions and suggestions, please feel free to contact us on [GitHub](https://github.com/vllm-project/vllm). We also published the benchmark code [here](https://github.com/vllm-project/vllm/pull/1649).
|
||||||
|
|
||||||
|
### Appendix: Feature Comparison
|
||||||
|
DeepSpeed currently supports only basic functionalities. For example, it only supports 3 types of models and does not support popular features like stop strings and parallel sampling (beam search). We do expect the DeepSpeed open source are eager to catch up and we welcome the creative innovation in the market!
|
||||||
|
|
||||||
|
| | vLLM | DeepSpeed |
|
||||||
|
|----------------------------|:---------------------------------------:|:-----------------------------------------------:|
|
||||||
|
| Runtime | Python/PyTorch | Python/PyTorch |
|
||||||
|
| Model implementation | HuggingFace Transformers | Custom implementation + converter for HF models |
|
||||||
|
| Server frontend | Simple FastAPI server for demo purposes | Custom gRPC-based server |
|
||||||
|
| Scheduling | Continuous batching | Dynamic SplitFuse |
|
||||||
|
| Attention kernel | PagedAttention & FlashAttention | PagedAttention & FlashAttention |
|
||||||
|
| Custom kernels (for LLaMA) | Attention, RoPE, RMS, SILU | Attention, RoPE, RMS, SILU, Embedding |
|
||||||
|
| KV Cache allocation | Near-optimal | Suboptimal/conservative |
|
||||||
|
| Supported models | 16 different architectures | LLaMA, Mistral, OPT |
|
||||||
|
| Sampling methods | Random, parallel, beam search | Random |
|
||||||
|
| Stop criterion | Stop strings, stop tokens, EOS | EOS |
|
|
@ -1,70 +0,0 @@
|
||||||
// Body resets
|
|
||||||
//
|
|
||||||
// Update the foundational and global aspects of the page.
|
|
||||||
|
|
||||||
* {
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
font-family: var(--body-font);
|
|
||||||
font-size: var(--body-font-size);
|
|
||||||
line-height: var(--body-line-height);
|
|
||||||
color: var(--body-color);
|
|
||||||
background-color: var(--body-bg);
|
|
||||||
-webkit-text-size-adjust: 100%;
|
|
||||||
-ms-text-size-adjust: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
// No `:visited` state is required by default (browsers will use `a`)
|
|
||||||
a {
|
|
||||||
color: var(--link-color);
|
|
||||||
|
|
||||||
// `:focus` is linked to `:hover` for basic accessibility
|
|
||||||
&:hover,
|
|
||||||
&:focus {
|
|
||||||
color: var(--link-hover-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
strong {
|
|
||||||
color: inherit;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
// display: block;
|
|
||||||
max-width: 100%;
|
|
||||||
margin-bottom: var(--spacer);
|
|
||||||
border-radius: var(--border-radius);
|
|
||||||
}
|
|
||||||
|
|
||||||
table {
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
width: 100%;
|
|
||||||
border: 0 solid var(--border-color);
|
|
||||||
border-collapse: collapse;
|
|
||||||
}
|
|
||||||
|
|
||||||
td,
|
|
||||||
th {
|
|
||||||
padding: .25rem .5rem;
|
|
||||||
border-color: inherit;
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 0;
|
|
||||||
border-bottom-width: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
th {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
thead th {
|
|
||||||
border-bottom-color: currentColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
mark {
|
|
||||||
padding: .15rem;
|
|
||||||
background-color: var(--yellow-100);
|
|
||||||
border-radius: .125rem;
|
|
||||||
}
|
|
|
@ -1,58 +0,0 @@
|
||||||
// Code
|
|
||||||
//
|
|
||||||
// Inline and block-level code snippets. Includes tweaks to syntax highlighted
|
|
||||||
// snippets from Pygments/Rouge and Gist embeds.
|
|
||||||
|
|
||||||
code,
|
|
||||||
pre {
|
|
||||||
font-family: var(--code-font);
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
font-size: 85%;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre {
|
|
||||||
display: block;
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: var(--spacer-3);
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.highlight {
|
|
||||||
padding: var(--spacer);
|
|
||||||
margin-bottom: var(--spacer);
|
|
||||||
background-color: var(--code-bg);
|
|
||||||
border-radius: var(--border-radius);
|
|
||||||
|
|
||||||
pre {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Triple backticks (code fencing) doubles the .highlight elements
|
|
||||||
.highlight {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.rouge-table {
|
|
||||||
margin-bottom: 0;
|
|
||||||
font-size: 100%;
|
|
||||||
|
|
||||||
&,
|
|
||||||
td,
|
|
||||||
th {
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.gutter {
|
|
||||||
vertical-align: top;
|
|
||||||
user-select: none;
|
|
||||||
opacity: .25;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gist via GitHub Pages
|
|
||||||
.gist .markdown-body {
|
|
||||||
padding: 15px !important;
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
// Layout
|
|
||||||
//
|
|
||||||
// Styles for managing the structural hierarchy of the site.
|
|
||||||
|
|
||||||
.container {
|
|
||||||
max-width: 50rem;
|
|
||||||
padding-left: var(--spacer-2);
|
|
||||||
padding-right: var(--spacer-2);
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
footer {
|
|
||||||
margin-top: var(--spacer-3);
|
|
||||||
margin-bottom: var(--spacer-3);
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
// Masthead
|
|
||||||
//
|
|
||||||
// Super small header above the content for site name and short description.
|
|
||||||
|
|
||||||
.masthead {
|
|
||||||
padding-top: var(--spacer);
|
|
||||||
padding-bottom: var(--spacer);
|
|
||||||
margin-bottom: var(--spacer-3);
|
|
||||||
}
|
|
||||||
|
|
||||||
.masthead-title {
|
|
||||||
margin-bottom: 0;
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: inherit;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
small {
|
|
||||||
font-weight: 400;
|
|
||||||
opacity: .5;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
// Messages
|
|
||||||
//
|
|
||||||
// Show alert messages to users. You may add it to single elements like a `<p>`,
|
|
||||||
// or to a parent if there are multiple elements to show.
|
|
||||||
|
|
||||||
.message {
|
|
||||||
padding: var(--spacer);
|
|
||||||
margin-bottom: var(--spacer);
|
|
||||||
color: var(--gray-900);
|
|
||||||
background-color: var(--yellow-100);
|
|
||||||
border-radius: var(--border-radius);
|
|
||||||
}
|
|
|
@ -1,52 +0,0 @@
|
||||||
// Pagination
|
|
||||||
//
|
|
||||||
// Super lightweight (HTML-wise) blog pagination. `span`s are provide for when
|
|
||||||
// there are no more previous or next posts to show.
|
|
||||||
|
|
||||||
.pagination {
|
|
||||||
display: flex;
|
|
||||||
margin: 0 -1.5rem var(--spacer);
|
|
||||||
color: var(--gray-500);
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Pagination items can be `span`s or `a`s
|
|
||||||
.pagination-item {
|
|
||||||
display: block;
|
|
||||||
padding: var(--spacer);
|
|
||||||
text-decoration: none;
|
|
||||||
border: solid var(--border-color);
|
|
||||||
border-width: 1px 0;
|
|
||||||
|
|
||||||
&:first-child {
|
|
||||||
margin-bottom: -1px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only provide a hover state for linked pagination items
|
|
||||||
a.pagination-item:hover {
|
|
||||||
background-color: var(--border-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 30em) {
|
|
||||||
.pagination {
|
|
||||||
margin: var(--spacer-3) 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination-item {
|
|
||||||
float: left;
|
|
||||||
width: 50%;
|
|
||||||
border-width: 1px;
|
|
||||||
|
|
||||||
&:first-child {
|
|
||||||
margin-bottom: 0;
|
|
||||||
border-top-left-radius: var(--border-radius);
|
|
||||||
border-bottom-left-radius: var(--border-radius);
|
|
||||||
}
|
|
||||||
&:last-child {
|
|
||||||
margin-left: -1px;
|
|
||||||
border-top-right-radius: var(--border-radius);
|
|
||||||
border-bottom-right-radius: var(--border-radius);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,67 +0,0 @@
|
||||||
// Posts and pages
|
|
||||||
//
|
|
||||||
// Each post is wrapped in `.post` and is used on default and post layouts. Each
|
|
||||||
// page is wrapped in `.page` and is only used on the page layout.
|
|
||||||
|
|
||||||
.page,
|
|
||||||
.post {
|
|
||||||
margin-bottom: 4em;
|
|
||||||
|
|
||||||
li + li {
|
|
||||||
margin-top: .25rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Blog post or page title
|
|
||||||
.page-title,
|
|
||||||
.post-title {
|
|
||||||
color: var(--heading-color);
|
|
||||||
}
|
|
||||||
.page-title,
|
|
||||||
.post-title {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
.post-title a {
|
|
||||||
color: inherit;
|
|
||||||
text-decoration: none;
|
|
||||||
|
|
||||||
&:hover,
|
|
||||||
&:focus {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Meta data line below post title
|
|
||||||
.post-date {
|
|
||||||
display: block;
|
|
||||||
margin-top: -.5rem;
|
|
||||||
margin-bottom: var(--spacer);
|
|
||||||
color: var(--gray-600);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Related posts
|
|
||||||
.related {
|
|
||||||
padding-top: var(--spacer-2);
|
|
||||||
padding-bottom: var(--spacer-2);
|
|
||||||
margin-bottom: var(--spacer-2);
|
|
||||||
border-top: 1px solid var(--border-color);
|
|
||||||
border-bottom: 1px solid var(--border-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.related-posts {
|
|
||||||
padding-left: 0;
|
|
||||||
list-style: none;
|
|
||||||
|
|
||||||
h3 {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
text-decoration: none;
|
|
||||||
|
|
||||||
small {
|
|
||||||
color: var(--gray-600);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,65 +0,0 @@
|
||||||
.highlight .hll { background-color: #ffc; }
|
|
||||||
.highlight .c { color: #999; } /* Comment */
|
|
||||||
.highlight .err { color: #a00; background-color: #faa } /* Error */
|
|
||||||
.highlight .k { color: #069; } /* Keyword */
|
|
||||||
.highlight .o { color: #555 } /* Operator */
|
|
||||||
.highlight .cm { color: #09f; font-style: italic } /* Comment.Multiline */
|
|
||||||
.highlight .cp { color: #099 } /* Comment.Preproc */
|
|
||||||
.highlight .c1 { color: #999; } /* Comment.Single */
|
|
||||||
.highlight .cs { color: #999; } /* Comment.Special */
|
|
||||||
.highlight .gd { background-color: #fcc; border: 1px solid #c00 } /* Generic.Deleted */
|
|
||||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
|
||||||
.highlight .gr { color: #f00 } /* Generic.Error */
|
|
||||||
.highlight .gh { color: #030; } /* Generic.Heading */
|
|
||||||
.highlight .gi { background-color: #cfc; border: 1px solid #0c0 } /* Generic.Inserted */
|
|
||||||
.highlight .go { color: #aaa } /* Generic.Output */
|
|
||||||
.highlight .gp { color: #009; } /* Generic.Prompt */
|
|
||||||
.highlight .gs { } /* Generic.Strong */
|
|
||||||
.highlight .gu { color: #030; } /* Generic.Subheading */
|
|
||||||
.highlight .gt { color: #9c6 } /* Generic.Traceback */
|
|
||||||
.highlight .kc { color: #069; } /* Keyword.Constant */
|
|
||||||
.highlight .kd { color: #069; } /* Keyword.Declaration */
|
|
||||||
.highlight .kn { color: #069; } /* Keyword.Namespace */
|
|
||||||
.highlight .kp { color: #069 } /* Keyword.Pseudo */
|
|
||||||
.highlight .kr { color: #069; } /* Keyword.Reserved */
|
|
||||||
.highlight .kt { color: #078; } /* Keyword.Type */
|
|
||||||
.highlight .m { color: #f60 } /* Literal.Number */
|
|
||||||
.highlight .s { color: #d44950 } /* Literal.String */
|
|
||||||
.highlight .na { color: #4f9fcf } /* Name.Attribute */
|
|
||||||
.highlight .nb { color: #366 } /* Name.Builtin */
|
|
||||||
.highlight .nc { color: #0a8; } /* Name.Class */
|
|
||||||
.highlight .no { color: #360 } /* Name.Constant */
|
|
||||||
.highlight .nd { color: #99f } /* Name.Decorator */
|
|
||||||
.highlight .ni { color: #999; } /* Name.Entity */
|
|
||||||
.highlight .ne { color: #c00; } /* Name.Exception */
|
|
||||||
.highlight .nf { color: #c0f } /* Name.Function */
|
|
||||||
.highlight .nl { color: #99f } /* Name.Label */
|
|
||||||
.highlight .nn { color: #0cf; } /* Name.Namespace */
|
|
||||||
.highlight .nt { color: #2f6f9f; } /* Name.Tag */
|
|
||||||
.highlight .nv { color: #033 } /* Name.Variable */
|
|
||||||
.highlight .ow { color: #000; } /* Operator.Word */
|
|
||||||
.highlight .w { color: #bbb } /* Text.Whitespace */
|
|
||||||
.highlight .mf { color: #f60 } /* Literal.Number.Float */
|
|
||||||
.highlight .mh { color: #f60 } /* Literal.Number.Hex */
|
|
||||||
.highlight .mi { color: #f60 } /* Literal.Number.Integer */
|
|
||||||
.highlight .mo { color: #f60 } /* Literal.Number.Oct */
|
|
||||||
.highlight .sb { color: #c30 } /* Literal.String.Backtick */
|
|
||||||
.highlight .sc { color: #c30 } /* Literal.String.Char */
|
|
||||||
.highlight .sd { color: #c30; font-style: italic } /* Literal.String.Doc */
|
|
||||||
.highlight .s2 { color: #c30 } /* Literal.String.Double */
|
|
||||||
.highlight .se { color: #c30; } /* Literal.String.Escape */
|
|
||||||
.highlight .sh { color: #c30 } /* Literal.String.Heredoc */
|
|
||||||
.highlight .si { color: #a00 } /* Literal.String.Interpol */
|
|
||||||
.highlight .sx { color: #c30 } /* Literal.String.Other */
|
|
||||||
.highlight .sr { color: #3aa } /* Literal.String.Regex */
|
|
||||||
.highlight .s1 { color: #c30 } /* Literal.String.Single */
|
|
||||||
.highlight .ss { color: #fc3 } /* Literal.String.Symbol */
|
|
||||||
.highlight .bp { color: #366 } /* Name.Builtin.Pseudo */
|
|
||||||
.highlight .vc { color: #033 } /* Name.Variable.Class */
|
|
||||||
.highlight .vg { color: #033 } /* Name.Variable.Global */
|
|
||||||
.highlight .vi { color: #033 } /* Name.Variable.Instance */
|
|
||||||
.highlight .il { color: #f60 } /* Literal.Number.Integer.Long */
|
|
||||||
|
|
||||||
.css .o,
|
|
||||||
.css .o + .nt,
|
|
||||||
.css .nt + .nt { color: #999; }
|
|
|
@ -1,16 +0,0 @@
|
||||||
// Table of Contents
|
|
||||||
|
|
||||||
#markdown-toc {
|
|
||||||
padding: var(--spacer-2) var(--spacer-3);
|
|
||||||
margin-bottom: var(--spacer-2);
|
|
||||||
border: solid var(--border-color);
|
|
||||||
border-width: 1px 0;
|
|
||||||
|
|
||||||
&::before {
|
|
||||||
display: block;
|
|
||||||
margin-left: calc(var(--spacer-3) * -1);
|
|
||||||
content: "Contents";
|
|
||||||
font-size: 85%;
|
|
||||||
font-weight: 500;
|
|
||||||
}
|
|
||||||
}
|
|
117
_sass/_type.scss
117
_sass/_type.scss
|
@ -1,117 +0,0 @@
|
||||||
// Typography
|
|
||||||
//
|
|
||||||
// Headings, body text, lists, and other misc typographic elements.
|
|
||||||
|
|
||||||
h1, h2, h3, h4, h5, h6 {
|
|
||||||
margin-bottom: .5rem;
|
|
||||||
font-weight: 600;
|
|
||||||
line-height: 1.25;
|
|
||||||
color: var(--heading-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size: 2rem;
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
margin-top: 2rem;
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
font-size: 1.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
h3 {
|
|
||||||
margin-top: 1.5rem;
|
|
||||||
font-size: 1.25rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
h4, h5, h6 {
|
|
||||||
margin-top: 1rem;
|
|
||||||
font-size: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
p {
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul, ol, dl {
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
dt {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
dd {
|
|
||||||
margin-bottom: .5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr {
|
|
||||||
position: relative;
|
|
||||||
margin: var(--spacer-2) 0;
|
|
||||||
border: 0;
|
|
||||||
border-top: 1px solid var(--border-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
abbr {
|
|
||||||
font-size: 85%;
|
|
||||||
font-weight: bold;
|
|
||||||
color: var(--gray-600);
|
|
||||||
text-transform: uppercase;
|
|
||||||
|
|
||||||
&[title] {
|
|
||||||
cursor: help;
|
|
||||||
border-bottom: 1px dotted var(--border-color);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote {
|
|
||||||
padding: .5rem 1rem;
|
|
||||||
margin: .8rem 0;
|
|
||||||
color: var(--gray-500);
|
|
||||||
border-left: .25rem solid var(--border-color);
|
|
||||||
|
|
||||||
p:last-child {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 30em) {
|
|
||||||
padding-right: 5rem;
|
|
||||||
padding-left: 1.25rem;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
figure {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Markdown footnotes
|
|
||||||
//
|
|
||||||
// See the example content post for an example.
|
|
||||||
|
|
||||||
// Footnote number within body text
|
|
||||||
a[href^="#fn:"],
|
|
||||||
// Back to footnote link
|
|
||||||
a[href^="#fnref:"] {
|
|
||||||
display: inline-block;
|
|
||||||
margin-left: .1rem;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
// List of footnotes
|
|
||||||
.footnotes {
|
|
||||||
margin-top: 2rem;
|
|
||||||
font-size: 85%;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Custom type
|
|
||||||
//
|
|
||||||
// Extend paragraphs with `.lead` for larger introductory text.
|
|
||||||
|
|
||||||
.lead {
|
|
||||||
font-size: 1.25rem;
|
|
||||||
font-weight: 300;
|
|
||||||
}
|
|
|
@ -1,66 +0,0 @@
|
||||||
:root {
|
|
||||||
--gray-000: #f8f9fa;
|
|
||||||
--gray-100: #f1f3f5;
|
|
||||||
--gray-200: #e9ecef;
|
|
||||||
--gray-300: #dee2e6;
|
|
||||||
--gray-400: #ced4da;
|
|
||||||
--gray-500: #adb5bd;
|
|
||||||
--gray-600: #868e96;
|
|
||||||
--gray-700: #495057;
|
|
||||||
--gray-800: #343a40;
|
|
||||||
--gray-900: #212529;
|
|
||||||
|
|
||||||
--red: #fa5252;
|
|
||||||
--pink: #e64980;
|
|
||||||
--grape: #be4bdb;
|
|
||||||
--purple: #7950f2;
|
|
||||||
--indigo: #4c6ef5;
|
|
||||||
--blue: #228be6;
|
|
||||||
--cyan: #15aabf;
|
|
||||||
--teal: #12b886;
|
|
||||||
--green: #40c057;
|
|
||||||
--yellow: #fab005;
|
|
||||||
--orange: #fd7e14;
|
|
||||||
|
|
||||||
--blue-300: #74c0fc;
|
|
||||||
--blue-400: #4dabf7;
|
|
||||||
--yellow-100: #fff3bf;
|
|
||||||
|
|
||||||
--body-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
||||||
--body-font-size: 18px;
|
|
||||||
--body-line-height: 1.5;
|
|
||||||
--body-color: var(--gray-700);
|
|
||||||
--body-bg: #fff;
|
|
||||||
|
|
||||||
--link-color: var(--blue);
|
|
||||||
--link-hover-color: #1c7ed6;
|
|
||||||
|
|
||||||
--heading-color: var(--gray-900);
|
|
||||||
|
|
||||||
--border-color: var(--gray-300);
|
|
||||||
--border-radius: .25rem;
|
|
||||||
|
|
||||||
--code-font: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
||||||
--code-color: var(--grape);
|
|
||||||
--code-bg: var(--gray-000);
|
|
||||||
|
|
||||||
--spacer: 1rem;
|
|
||||||
--spacer-2: calc(var(--spacer) * 1.5);
|
|
||||||
--spacer-3: calc(var(--spacer) * 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
// @media (prefers-color-scheme: dark) {
|
|
||||||
// :root {
|
|
||||||
// --body-color: var(--gray-300);
|
|
||||||
// --body-bg: var(--gray-800);
|
|
||||||
|
|
||||||
// --heading-color: #fff;
|
|
||||||
|
|
||||||
// --link-color: var(--blue-300);
|
|
||||||
// --link-hover-color: var(--blue-400);
|
|
||||||
|
|
||||||
// --border-color: rgba(255,255,255,.15);
|
|
||||||
|
|
||||||
// --code-bg: var(--gray-900);
|
|
||||||
// }
|
|
||||||
// }
|
|
|
@ -0,0 +1,281 @@
|
||||||
|
html {
|
||||||
|
font-size: $base-font-size;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reset some basic elements
|
||||||
|
*/
|
||||||
|
body, h1, h2, h3, h4, h5, h6,
|
||||||
|
p, blockquote, pre, hr,
|
||||||
|
dl, dd, ol, ul, figure {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Basic styling
|
||||||
|
*/
|
||||||
|
body {
|
||||||
|
font: $base-font-weight #{$base-font-size}/#{$base-line-height} $base-font-family;
|
||||||
|
color: $text-color;
|
||||||
|
background-color: $background-color;
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
-webkit-font-feature-settings: "kern" 1;
|
||||||
|
-moz-font-feature-settings: "kern" 1;
|
||||||
|
-o-font-feature-settings: "kern" 1;
|
||||||
|
font-feature-settings: "kern" 1;
|
||||||
|
font-kerning: normal;
|
||||||
|
display: flex;
|
||||||
|
min-height: 100vh;
|
||||||
|
flex-direction: column;
|
||||||
|
overflow-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set `margin-bottom` to maintain vertical rhythm
|
||||||
|
*/
|
||||||
|
h1, h2, h3, h4, h5, h6,
|
||||||
|
p, blockquote, pre,
|
||||||
|
ul, ol, dl, figure,
|
||||||
|
%vertical-rhythm {
|
||||||
|
margin-bottom: $spacing-unit * .5;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
margin-top: $spacing-unit;
|
||||||
|
margin-bottom: $spacing-unit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* `main` element
|
||||||
|
*/
|
||||||
|
main {
|
||||||
|
display: block; /* Default value of `display` of `main` element is 'inline' in IE 11. */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Images
|
||||||
|
*/
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Figures
|
||||||
|
*/
|
||||||
|
figure > img {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
figcaption {
|
||||||
|
font-size: $small-font-size;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lists
|
||||||
|
*/
|
||||||
|
ul, ol {
|
||||||
|
margin-left: $spacing-unit;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
> ul,
|
||||||
|
> ol {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Headings
|
||||||
|
*/
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
font-weight: $base-font-weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Links
|
||||||
|
*/
|
||||||
|
a {
|
||||||
|
color: $link-base-color;
|
||||||
|
text-decoration: none;
|
||||||
|
|
||||||
|
&:visited {
|
||||||
|
color: $link-visited-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: $link-hover-color;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.social-media-list &:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
|
||||||
|
.username {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Blockquotes
|
||||||
|
*/
|
||||||
|
blockquote {
|
||||||
|
color: $brand-color;
|
||||||
|
border-left: 4px solid $border-color-01;
|
||||||
|
padding-left: $spacing-unit * .5;
|
||||||
|
@include relative-font-size(1.125);
|
||||||
|
font-style: italic;
|
||||||
|
|
||||||
|
> :last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
i, em {
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Code formatting
|
||||||
|
*/
|
||||||
|
pre,
|
||||||
|
code {
|
||||||
|
font-family: $code-font-family;
|
||||||
|
font-size: 0.9375em;
|
||||||
|
border: 1px solid $border-color-01;
|
||||||
|
border-radius: 3px;
|
||||||
|
background-color: $code-background-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
padding: 1px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
padding: 8px 12px;
|
||||||
|
overflow-x: auto;
|
||||||
|
|
||||||
|
> code {
|
||||||
|
border: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.highlight {
|
||||||
|
border-radius: 3px;
|
||||||
|
background: $code-background-color;
|
||||||
|
@extend %vertical-rhythm;
|
||||||
|
|
||||||
|
.highlighter-rouge & {
|
||||||
|
background: $code-background-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wrapper
|
||||||
|
*/
|
||||||
|
.wrapper {
|
||||||
|
max-width: calc(#{$content-width} - (#{$spacing-unit}));
|
||||||
|
margin-right: auto;
|
||||||
|
margin-left: auto;
|
||||||
|
padding-right: $spacing-unit * .5;
|
||||||
|
padding-left: $spacing-unit * .5;
|
||||||
|
@extend %clearfix;
|
||||||
|
|
||||||
|
@media screen and (min-width: $on-large) {
|
||||||
|
max-width: calc(#{$content-width} - (#{$spacing-unit} * 2));
|
||||||
|
padding-right: $spacing-unit;
|
||||||
|
padding-left: $spacing-unit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clearfix
|
||||||
|
*/
|
||||||
|
%clearfix:after {
|
||||||
|
content: "";
|
||||||
|
display: table;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Icons
|
||||||
|
*/
|
||||||
|
|
||||||
|
.orange {
|
||||||
|
color: #f66a0a;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grey {
|
||||||
|
color: #828282;
|
||||||
|
}
|
||||||
|
|
||||||
|
.svg-icon {
|
||||||
|
width: 1.25em;
|
||||||
|
height: 1.25em;
|
||||||
|
display: inline-block;
|
||||||
|
fill: currentColor;
|
||||||
|
vertical-align: text-bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tables
|
||||||
|
*/
|
||||||
|
table {
|
||||||
|
margin-bottom: $spacing-unit;
|
||||||
|
width: 100%;
|
||||||
|
text-align: $table-text-align;
|
||||||
|
color: $table-text-color;
|
||||||
|
border-collapse: collapse;
|
||||||
|
border: 1px solid $table-border-color;
|
||||||
|
tr {
|
||||||
|
&:nth-child(even) {
|
||||||
|
background-color: $table-zebra-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
th, td {
|
||||||
|
padding: ($spacing-unit * 33.3333333333 * .01) ($spacing-unit * .5);
|
||||||
|
}
|
||||||
|
th {
|
||||||
|
background-color: $table-header-bg-color;
|
||||||
|
border: 1px solid $table-header-border;
|
||||||
|
}
|
||||||
|
td {
|
||||||
|
border: 1px solid $table-border-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-query($on-laptop) {
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
|
-ms-overflow-style: -ms-autohiding-scrollbar;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,341 @@
|
||||||
|
/**
|
||||||
|
* Site header
|
||||||
|
*/
|
||||||
|
.site-header {
|
||||||
|
border-top: 5px solid $border-color-03;
|
||||||
|
border-bottom: 1px solid $border-color-01;
|
||||||
|
min-height: $spacing-unit * 1.865;
|
||||||
|
line-height: $base-line-height * $base-font-size * 2.25;
|
||||||
|
|
||||||
|
// Positioning context for the mobile navigation icon
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.site-title {
|
||||||
|
@include relative-font-size(1.625);
|
||||||
|
font-weight: 300;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
float: left;
|
||||||
|
|
||||||
|
@include media-query($on-palm) {
|
||||||
|
padding-right: 45px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&,
|
||||||
|
&:visited {
|
||||||
|
color: $site-title-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.site-nav {
|
||||||
|
position: absolute;
|
||||||
|
top: 9px;
|
||||||
|
right: $spacing-unit * .5;
|
||||||
|
background-color: $background-color;
|
||||||
|
border: 1px solid $border-color-01;
|
||||||
|
border-radius: 5px;
|
||||||
|
text-align: right;
|
||||||
|
|
||||||
|
.nav-trigger {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-icon {
|
||||||
|
float: right;
|
||||||
|
width: 36px;
|
||||||
|
height: 26px;
|
||||||
|
line-height: 0;
|
||||||
|
padding-top: 10px;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
> svg path {
|
||||||
|
fill: $border-color-03;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
label[for="nav-trigger"] {
|
||||||
|
display: block;
|
||||||
|
float: right;
|
||||||
|
width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
z-index: 2;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
input ~ .trigger {
|
||||||
|
clear: both;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:checked ~ .trigger {
|
||||||
|
display: block;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-link {
|
||||||
|
color: $text-color;
|
||||||
|
line-height: $base-line-height;
|
||||||
|
display: block;
|
||||||
|
padding: 5px 10px;
|
||||||
|
|
||||||
|
// Gaps between nav items, but not on the last one
|
||||||
|
&:not(:last-child) {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
margin-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (min-width: $on-medium) {
|
||||||
|
position: static;
|
||||||
|
float: right;
|
||||||
|
border: none;
|
||||||
|
background-color: inherit;
|
||||||
|
|
||||||
|
label[for="nav-trigger"] {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-icon {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input ~ .trigger {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-link {
|
||||||
|
display: inline;
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
&:not(:last-child) {
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Site footer
|
||||||
|
*/
|
||||||
|
.site-footer {
|
||||||
|
// border-top: 1px solid $border-color-01;
|
||||||
|
padding: $spacing-unit 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-heading {
|
||||||
|
@include relative-font-size(1.125);
|
||||||
|
margin-bottom: $spacing-unit * .5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.feed-subscribe .svg-icon {
|
||||||
|
padding: 5px 5px 2px 0
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-list,
|
||||||
|
.social-media-list {
|
||||||
|
list-style: none;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-col-wrapper,
|
||||||
|
.social-links {
|
||||||
|
@include relative-font-size(0.9375);
|
||||||
|
color: $brand-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-col {
|
||||||
|
margin-bottom: $spacing-unit * .5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-col-1,
|
||||||
|
.footer-col-2 {
|
||||||
|
width: calc(50% - (#{$spacing-unit} / 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-col-3 {
|
||||||
|
width: calc(100% - (#{$spacing-unit} / 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (min-width: $on-large) {
|
||||||
|
.footer-col-1 {
|
||||||
|
width: calc(35% - (#{$spacing-unit} / 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-col-2 {
|
||||||
|
width: calc(20% - (#{$spacing-unit} / 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-col-3 {
|
||||||
|
width: calc(45% - (#{$spacing-unit} / 2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (min-width: $on-medium) {
|
||||||
|
.footer-col-wrapper {
|
||||||
|
display: flex
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-col {
|
||||||
|
width: calc(100% - (#{$spacing-unit} / 2));
|
||||||
|
padding: 0 ($spacing-unit * .5);
|
||||||
|
|
||||||
|
&:first-child {
|
||||||
|
padding-right: $spacing-unit * .5;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
padding-right: 0;
|
||||||
|
padding-left: $spacing-unit * .5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Page content
|
||||||
|
*/
|
||||||
|
.page-content {
|
||||||
|
padding: $spacing-unit 0;
|
||||||
|
flex: 1 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-heading {
|
||||||
|
@include relative-font-size(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-list-heading {
|
||||||
|
@include relative-font-size(1.75);
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-list {
|
||||||
|
margin-left: 0;
|
||||||
|
list-style: none;
|
||||||
|
|
||||||
|
> li {
|
||||||
|
margin-bottom: $spacing-unit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-meta {
|
||||||
|
font-size: $small-font-size;
|
||||||
|
color: $brand-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-link {
|
||||||
|
display: block;
|
||||||
|
@include relative-font-size(1.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Posts
|
||||||
|
*/
|
||||||
|
.post-header {
|
||||||
|
margin-bottom: $spacing-unit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-title,
|
||||||
|
.post-content h1 {
|
||||||
|
@include relative-font-size(2.625);
|
||||||
|
letter-spacing: -1px;
|
||||||
|
line-height: 1.15;
|
||||||
|
|
||||||
|
@media screen and (min-width: $on-large) {
|
||||||
|
@include relative-font-size(2.625);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content {
|
||||||
|
margin-bottom: $spacing-unit;
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6 { margin-top: $spacing-unit }
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
@include relative-font-size(1.75);
|
||||||
|
|
||||||
|
@media screen and (min-width: $on-large) {
|
||||||
|
@include relative-font-size(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
@include relative-font-size(1.375);
|
||||||
|
|
||||||
|
@media screen and (min-width: $on-large) {
|
||||||
|
@include relative-font-size(1.625);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
@include relative-font-size(1.25);
|
||||||
|
}
|
||||||
|
|
||||||
|
h5 {
|
||||||
|
@include relative-font-size(1.125);
|
||||||
|
}
|
||||||
|
h6 {
|
||||||
|
@include relative-font-size(1.0625);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.social-media-list {
|
||||||
|
display: table;
|
||||||
|
margin: 0 auto;
|
||||||
|
li {
|
||||||
|
float: left;
|
||||||
|
margin: 5px 10px 5px 0;
|
||||||
|
&:last-of-type { margin-right: 0 }
|
||||||
|
a {
|
||||||
|
display: block;
|
||||||
|
padding: 10px 12px;
|
||||||
|
border: 1px solid $border-color-01;
|
||||||
|
&:hover { border-color: $border-color-02 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pagination navbar
|
||||||
|
*/
|
||||||
|
.pagination {
|
||||||
|
margin-bottom: $spacing-unit;
|
||||||
|
@extend .social-media-list;
|
||||||
|
li {
|
||||||
|
a, div {
|
||||||
|
min-width: 41px;
|
||||||
|
text-align: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
div {
|
||||||
|
display: block;
|
||||||
|
padding: $spacing-unit * .25;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
|
||||||
|
&.pager-edge {
|
||||||
|
color: $border-color-01;
|
||||||
|
border: 1px dashed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Grid helpers
|
||||||
|
*/
|
||||||
|
@media screen and (min-width: $on-large) {
|
||||||
|
.one-half {
|
||||||
|
width: calc(50% - (#{$spacing-unit} / 2));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
// Placeholder to allow defining custom styles that override everything else.
|
||||||
|
// (Use `_sass/minima/custom-variables.scss` to override variable defaults)
|
|
@ -0,0 +1 @@
|
||||||
|
// Placeholder to allow overriding predefined variables smoothly.
|
|
@ -0,0 +1,50 @@
|
||||||
|
@charset "utf-8";
|
||||||
|
|
||||||
|
// Define defaults for each variable.
|
||||||
|
|
||||||
|
$base-font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Segoe UI Emoji", "Segoe UI Symbol", "Apple Color Emoji", Roboto, Helvetica, Arial, sans-serif !default;
|
||||||
|
$code-font-family: "Menlo", "Inconsolata", "Consolas", "Roboto Mono", "Ubuntu Mono", "Liberation Mono", "Courier New", monospace;
|
||||||
|
$base-font-size: 16px !default;
|
||||||
|
$base-font-weight: 400 !default;
|
||||||
|
$small-font-size: $base-font-size * 0.875 !default;
|
||||||
|
$base-line-height: 1.5 !default;
|
||||||
|
|
||||||
|
$spacing-unit: 30px !default;
|
||||||
|
|
||||||
|
$table-text-align: left !default;
|
||||||
|
|
||||||
|
// Width of the content area
|
||||||
|
$content-width: 800px !default;
|
||||||
|
|
||||||
|
$on-palm: 600px !default;
|
||||||
|
$on-laptop: 800px !default;
|
||||||
|
|
||||||
|
$on-medium: $on-palm !default;
|
||||||
|
$on-large: $on-laptop !default;
|
||||||
|
|
||||||
|
// Use media queries like this:
|
||||||
|
// @include media-query($on-palm) {
|
||||||
|
// .wrapper {
|
||||||
|
// padding-right: $spacing-unit / 2;
|
||||||
|
// padding-left: $spacing-unit / 2;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// Notice the following mixin uses max-width, in a deprecated, desktop-first
|
||||||
|
// approach, whereas media queries used elsewhere now use min-width.
|
||||||
|
@mixin media-query($device) {
|
||||||
|
@media screen and (max-width: $device) {
|
||||||
|
@content;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin relative-font-size($ratio) {
|
||||||
|
font-size: #{$ratio}rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Import pre-styling-overrides hook and style-partials.
|
||||||
|
@import
|
||||||
|
"minima/custom-variables", // Hook to override predefined variables.
|
||||||
|
"minima/base", // Defines element resets.
|
||||||
|
"minima/layout", // Defines structure and style based on CSS selectors.
|
||||||
|
"minima/custom-styles" // Hook to override existing styles.
|
||||||
|
;
|
|
@ -0,0 +1,361 @@
|
||||||
|
@charset "utf-8";
|
||||||
|
|
||||||
|
// Default color scheme settings
|
||||||
|
// These are overridden in classic.css and dark.scss
|
||||||
|
|
||||||
|
$color-scheme-auto: true !default;
|
||||||
|
$color-scheme-dark: false !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Light mode
|
||||||
|
// ----------
|
||||||
|
|
||||||
|
$lm-brand-color: #828282 !default;
|
||||||
|
$lm-brand-color-light: lighten($lm-brand-color, 40%) !default;
|
||||||
|
$lm-brand-color-dark: darken($lm-brand-color, 25%) !default;
|
||||||
|
|
||||||
|
$lm-site-title-color: $lm-brand-color-dark !default;
|
||||||
|
|
||||||
|
$lm-text-color: #111111 !default;
|
||||||
|
$lm-background-color: #fdfdfd !default;
|
||||||
|
$lm-code-background-color: #eeeeff !default;
|
||||||
|
|
||||||
|
$lm-link-base-color: #2a7ae2 !default;
|
||||||
|
$lm-link-visited-color: darken($lm-link-base-color, 15%) !default;
|
||||||
|
$lm-link-hover-color: $lm-text-color !default;
|
||||||
|
|
||||||
|
$lm-border-color-01: $lm-brand-color-light !default;
|
||||||
|
$lm-border-color-02: lighten($lm-brand-color, 35%) !default;
|
||||||
|
$lm-border-color-03: $lm-brand-color-dark !default;
|
||||||
|
|
||||||
|
$lm-table-text-color: lighten($lm-text-color, 18%) !default;
|
||||||
|
$lm-table-zebra-color: lighten($lm-brand-color, 46%) !default;
|
||||||
|
$lm-table-header-bg-color: lighten($lm-brand-color, 43%) !default;
|
||||||
|
$lm-table-header-border: lighten($lm-brand-color, 37%) !default;
|
||||||
|
$lm-table-border-color: $lm-border-color-01 !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Syntax highlighting styles should be adjusted appropriately for every "skin"
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@mixin lm-highlight {
|
||||||
|
.highlight {
|
||||||
|
.c { color: #998; font-style: italic } // Comment
|
||||||
|
.err { color: #a61717; background-color: #e3d2d2 } // Error
|
||||||
|
.k { font-weight: bold } // Keyword
|
||||||
|
.o { font-weight: bold } // Operator
|
||||||
|
.cm { color: #998; font-style: italic } // Comment.Multiline
|
||||||
|
.cp { color: #999; font-weight: bold } // Comment.Preproc
|
||||||
|
.c1 { color: #998; font-style: italic } // Comment.Single
|
||||||
|
.cs { color: #999; font-weight: bold; font-style: italic } // Comment.Special
|
||||||
|
.gd { color: #000; background-color: #fdd } // Generic.Deleted
|
||||||
|
.gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific
|
||||||
|
.ge { font-style: italic } // Generic.Emph
|
||||||
|
.gr { color: #a00 } // Generic.Error
|
||||||
|
.gh { color: #999 } // Generic.Heading
|
||||||
|
.gi { color: #000; background-color: #dfd } // Generic.Inserted
|
||||||
|
.gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific
|
||||||
|
.go { color: #888 } // Generic.Output
|
||||||
|
.gp { color: #555 } // Generic.Prompt
|
||||||
|
.gs { font-weight: bold } // Generic.Strong
|
||||||
|
.gu { color: #aaa } // Generic.Subheading
|
||||||
|
.gt { color: #a00 } // Generic.Traceback
|
||||||
|
.kc { font-weight: bold } // Keyword.Constant
|
||||||
|
.kd { font-weight: bold } // Keyword.Declaration
|
||||||
|
.kp { font-weight: bold } // Keyword.Pseudo
|
||||||
|
.kr { font-weight: bold } // Keyword.Reserved
|
||||||
|
.kt { color: #458; font-weight: bold } // Keyword.Type
|
||||||
|
.m { color: #099 } // Literal.Number
|
||||||
|
.s { color: #d14 } // Literal.String
|
||||||
|
.na { color: #008080 } // Name.Attribute
|
||||||
|
.nb { color: #0086B3 } // Name.Builtin
|
||||||
|
.nc { color: #458; font-weight: bold } // Name.Class
|
||||||
|
.no { color: #008080 } // Name.Constant
|
||||||
|
.ni { color: #800080 } // Name.Entity
|
||||||
|
.ne { color: #900; font-weight: bold } // Name.Exception
|
||||||
|
.nf { color: #900; font-weight: bold } // Name.Function
|
||||||
|
.nn { color: #555 } // Name.Namespace
|
||||||
|
.nt { color: #000080 } // Name.Tag
|
||||||
|
.nv { color: #008080 } // Name.Variable
|
||||||
|
.ow { font-weight: bold } // Operator.Word
|
||||||
|
.w { color: #bbb } // Text.Whitespace
|
||||||
|
.mf { color: #099 } // Literal.Number.Float
|
||||||
|
.mh { color: #099 } // Literal.Number.Hex
|
||||||
|
.mi { color: #099 } // Literal.Number.Integer
|
||||||
|
.mo { color: #099 } // Literal.Number.Oct
|
||||||
|
.sb { color: #d14 } // Literal.String.Backtick
|
||||||
|
.sc { color: #d14 } // Literal.String.Char
|
||||||
|
.sd { color: #d14 } // Literal.String.Doc
|
||||||
|
.s2 { color: #d14 } // Literal.String.Double
|
||||||
|
.se { color: #d14 } // Literal.String.Escape
|
||||||
|
.sh { color: #d14 } // Literal.String.Heredoc
|
||||||
|
.si { color: #d14 } // Literal.String.Interpol
|
||||||
|
.sx { color: #d14 } // Literal.String.Other
|
||||||
|
.sr { color: #009926 } // Literal.String.Regex
|
||||||
|
.s1 { color: #d14 } // Literal.String.Single
|
||||||
|
.ss { color: #990073 } // Literal.String.Symbol
|
||||||
|
.bp { color: #999 } // Name.Builtin.Pseudo
|
||||||
|
.vc { color: #008080 } // Name.Variable.Class
|
||||||
|
.vg { color: #008080 } // Name.Variable.Global
|
||||||
|
.vi { color: #008080 } // Name.Variable.Instance
|
||||||
|
.il { color: #099 } // Literal.Number.Integer.Long
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Dark mode
|
||||||
|
// ---------
|
||||||
|
|
||||||
|
$dm-brand-color: #999999 !default;
|
||||||
|
$dm-brand-color-light: lighten($dm-brand-color, 5%) !default;
|
||||||
|
$dm-brand-color-dark: darken($dm-brand-color, 35%) !default;
|
||||||
|
|
||||||
|
$dm-site-title-color: $dm-brand-color-light !default;
|
||||||
|
|
||||||
|
$dm-text-color: #bbbbbb !default;
|
||||||
|
$dm-background-color: #181818 !default;
|
||||||
|
$dm-code-background-color: #212121 !default;
|
||||||
|
|
||||||
|
$dm-link-base-color: #79b8ff !default;
|
||||||
|
$dm-link-visited-color: $dm-link-base-color !default;
|
||||||
|
$dm-link-hover-color: $dm-text-color !default;
|
||||||
|
|
||||||
|
$dm-border-color-01: $dm-brand-color-dark !default;
|
||||||
|
$dm-border-color-02: $dm-brand-color-light !default;
|
||||||
|
$dm-border-color-03: $dm-brand-color !default;
|
||||||
|
|
||||||
|
$dm-table-text-color: $dm-text-color !default;
|
||||||
|
$dm-table-zebra-color: lighten($dm-background-color, 4%) !default;
|
||||||
|
$dm-table-header-bg-color: lighten($dm-background-color, 10%) !default;
|
||||||
|
$dm-table-header-border: lighten($dm-background-color, 21%) !default;
|
||||||
|
$dm-table-border-color: $dm-border-color-01 !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Syntax highlighting styles should be adjusted appropriately for every "skin"
|
||||||
|
// List of tokens: https://github.com/rouge-ruby/rouge/wiki/List-of-tokens
|
||||||
|
// Some colors come from Material Theme Darker:
|
||||||
|
// https://github.com/material-theme/vsc-material-theme/blob/master/scripts/generator/settings/specific/darker-hc.ts
|
||||||
|
// https://github.com/material-theme/vsc-material-theme/blob/master/scripts/generator/color-set.ts
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@mixin dm-highlight {
|
||||||
|
.highlight {
|
||||||
|
.c { color: #545454; font-style: italic } // Comment
|
||||||
|
.err { color: #f07178; background-color: #e3d2d2 } // Error
|
||||||
|
.k { color: #89DDFF; font-weight: bold } // Keyword
|
||||||
|
.o { font-weight: bold } // Operator
|
||||||
|
.cm { color: #545454; font-style: italic } // Comment.Multiline
|
||||||
|
.cp { color: #545454; font-weight: bold } // Comment.Preproc
|
||||||
|
.c1 { color: #545454; font-style: italic } // Comment.Single
|
||||||
|
.cs { color: #545454; font-weight: bold; font-style: italic } // Comment.Special
|
||||||
|
.gd { color: #000; background-color: #fdd } // Generic.Deleted
|
||||||
|
.gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific
|
||||||
|
.ge { font-style: italic } // Generic.Emph
|
||||||
|
.gr { color: #f07178 } // Generic.Error
|
||||||
|
.gh { color: #999 } // Generic.Heading
|
||||||
|
.gi { color: #000; background-color: #dfd } // Generic.Inserted
|
||||||
|
.gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific
|
||||||
|
.go { color: #888 } // Generic.Output
|
||||||
|
.gp { color: #555 } // Generic.Prompt
|
||||||
|
.gs { font-weight: bold } // Generic.Strong
|
||||||
|
.gu { color: #aaa } // Generic.Subheading
|
||||||
|
.gt { color: #f07178 } // Generic.Traceback
|
||||||
|
.kc { font-weight: bold } // Keyword.Constant
|
||||||
|
.kd { font-weight: bold } // Keyword.Declaration
|
||||||
|
.kp { font-weight: bold } // Keyword.Pseudo
|
||||||
|
.kr { font-weight: bold } // Keyword.Reserved
|
||||||
|
.kt { color: #FFCB6B; font-weight: bold } // Keyword.Type
|
||||||
|
.m { color: #F78C6C } // Literal.Number
|
||||||
|
.s { color: #C3E88D } // Literal.String
|
||||||
|
.na { color: #008080 } // Name.Attribute
|
||||||
|
.nb { color: #EEFFFF } // Name.Builtin
|
||||||
|
.nc { color: #FFCB6B; font-weight: bold } // Name.Class
|
||||||
|
.no { color: #008080 } // Name.Constant
|
||||||
|
.ni { color: #800080 } // Name.Entity
|
||||||
|
.ne { color: #900; font-weight: bold } // Name.Exception
|
||||||
|
.nf { color: #82AAFF; font-weight: bold } // Name.Function
|
||||||
|
.nn { color: #555 } // Name.Namespace
|
||||||
|
.nt { color: #FFCB6B } // Name.Tag
|
||||||
|
.nv { color: #EEFFFF } // Name.Variable
|
||||||
|
.ow { font-weight: bold } // Operator.Word
|
||||||
|
.w { color: #EEFFFF } // Text.Whitespace
|
||||||
|
.mf { color: #F78C6C } // Literal.Number.Float
|
||||||
|
.mh { color: #F78C6C } // Literal.Number.Hex
|
||||||
|
.mi { color: #F78C6C } // Literal.Number.Integer
|
||||||
|
.mo { color: #F78C6C } // Literal.Number.Oct
|
||||||
|
.sb { color: #C3E88D } // Literal.String.Backtick
|
||||||
|
.sc { color: #C3E88D } // Literal.String.Char
|
||||||
|
.sd { color: #C3E88D } // Literal.String.Doc
|
||||||
|
.s2 { color: #C3E88D } // Literal.String.Double
|
||||||
|
.se { color: #EEFFFF } // Literal.String.Escape
|
||||||
|
.sh { color: #C3E88D } // Literal.String.Heredoc
|
||||||
|
.si { color: #C3E88D } // Literal.String.Interpol
|
||||||
|
.sx { color: #C3E88D } // Literal.String.Other
|
||||||
|
.sr { color: #C3E88D } // Literal.String.Regex
|
||||||
|
.s1 { color: #C3E88D } // Literal.String.Single
|
||||||
|
.ss { color: #C3E88D } // Literal.String.Symbol
|
||||||
|
.bp { color: #999 } // Name.Builtin.Pseudo
|
||||||
|
.vc { color: #FFCB6B } // Name.Variable.Class
|
||||||
|
.vg { color: #EEFFFF } // Name.Variable.Global
|
||||||
|
.vi { color: #EEFFFF } // Name.Variable.Instance
|
||||||
|
.il { color: #F78C6C } // Literal.Number.Integer.Long
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Mode selection
|
||||||
|
// --------------
|
||||||
|
|
||||||
|
|
||||||
|
// Classic skin (always light mode)
|
||||||
|
// Assign outside of the if construct to establish global variable scope
|
||||||
|
|
||||||
|
$brand-color: $lm-brand-color;
|
||||||
|
$brand-color-light: $lm-brand-color-light;
|
||||||
|
$brand-color-dark: $lm-brand-color-dark;
|
||||||
|
|
||||||
|
$site-title-color: $lm-site-title-color;
|
||||||
|
|
||||||
|
$text-color: $lm-text-color;
|
||||||
|
$background-color: $lm-background-color;
|
||||||
|
$code-background-color: $lm-code-background-color;
|
||||||
|
|
||||||
|
$link-base-color: $lm-link-base-color;
|
||||||
|
$link-visited-color: $lm-link-visited-color;
|
||||||
|
$link-hover-color: $lm-link-hover-color;
|
||||||
|
|
||||||
|
$border-color-01: $lm-border-color-01;
|
||||||
|
$border-color-02: $lm-border-color-02;
|
||||||
|
$border-color-03: $lm-border-color-03;
|
||||||
|
|
||||||
|
$table-text-color: $lm-table-text-color;
|
||||||
|
$table-zebra-color: $lm-table-zebra-color;
|
||||||
|
$table-header-bg-color: $lm-table-header-bg-color;
|
||||||
|
$table-header-border: $lm-table-header-border;
|
||||||
|
$table-border-color: $lm-table-border-color;
|
||||||
|
|
||||||
|
|
||||||
|
@if $color-scheme-auto {
|
||||||
|
|
||||||
|
// Auto mode
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--minima-brand-color: #{$lm-brand-color};
|
||||||
|
--minima-brand-color-light: #{$lm-brand-color-light};
|
||||||
|
--minima-brand-color-dark: #{$lm-brand-color-dark};
|
||||||
|
|
||||||
|
--minima-site-title-color: #{$lm-site-title-color};
|
||||||
|
|
||||||
|
--minima-text-color: #{$lm-text-color};
|
||||||
|
--minima-background-color: #{$lm-background-color};
|
||||||
|
--minima-code-background-color: #{$lm-code-background-color};
|
||||||
|
|
||||||
|
--minima-link-base-color: #{$lm-link-base-color};
|
||||||
|
--minima-link-visited-color: #{$lm-link-visited-color};
|
||||||
|
--minima-link-hover-color: #{$lm-link-hover-color};
|
||||||
|
|
||||||
|
--minima-border-color-01: #{$lm-border-color-01};
|
||||||
|
--minima-border-color-02: #{$lm-border-color-02};
|
||||||
|
--minima-border-color-03: #{$lm-border-color-03};
|
||||||
|
|
||||||
|
--minima-table-text-color: #{$lm-table-text-color};
|
||||||
|
--minima-table-zebra-color: #{$lm-table-zebra-color};
|
||||||
|
--minima-table-header-bg-color: #{$lm-table-header-bg-color};
|
||||||
|
--minima-table-header-border: #{$lm-table-header-border};
|
||||||
|
--minima-table-border-color: #{$lm-table-border-color};
|
||||||
|
}
|
||||||
|
|
||||||
|
@include lm-highlight;
|
||||||
|
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
:root {
|
||||||
|
--minima-brand-color: #{$dm-brand-color};
|
||||||
|
--minima-brand-color-light: #{$dm-brand-color-light};
|
||||||
|
--minima-brand-color-dark: #{$dm-brand-color-dark};
|
||||||
|
|
||||||
|
--minima-site-title-color: #{$dm-site-title-color};
|
||||||
|
|
||||||
|
--minima-text-color: #{$dm-text-color};
|
||||||
|
--minima-background-color: #{$dm-background-color};
|
||||||
|
--minima-code-background-color: #{$dm-code-background-color};
|
||||||
|
|
||||||
|
--minima-link-base-color: #{$dm-link-base-color};
|
||||||
|
--minima-link-visited-color: #{$dm-link-visited-color};
|
||||||
|
--minima-link-hover-color: #{$dm-link-hover-color};
|
||||||
|
|
||||||
|
--minima-border-color-01: #{$dm-border-color-01};
|
||||||
|
--minima-border-color-02: #{$dm-border-color-02};
|
||||||
|
--minima-border-color-03: #{$dm-border-color-03};
|
||||||
|
|
||||||
|
--minima-table-text-color: #{$dm-table-text-color};
|
||||||
|
--minima-table-zebra-color: #{$dm-table-zebra-color};
|
||||||
|
--minima-table-header-bg-color: #{$dm-table-header-bg-color};
|
||||||
|
--minima-table-header-border: #{$dm-table-header-border};
|
||||||
|
--minima-table-border-color: #{$dm-table-border-color};
|
||||||
|
}
|
||||||
|
|
||||||
|
@include dm-highlight;
|
||||||
|
}
|
||||||
|
|
||||||
|
$brand-color: var(--minima-brand-color);
|
||||||
|
$brand-color-light: var(--minima-brand-color-light);
|
||||||
|
$brand-color-dark: var(--minima-brand-color-dark);
|
||||||
|
|
||||||
|
$site-title-color: var(--minima-site-title-color);
|
||||||
|
|
||||||
|
$text-color: var(--minima-text-color);
|
||||||
|
$background-color: var(--minima-background-color);
|
||||||
|
$code-background-color: var(--minima-code-background-color);
|
||||||
|
|
||||||
|
$link-base-color: var(--minima-link-base-color);
|
||||||
|
$link-visited-color: var(--minima-link-visited-color);
|
||||||
|
$link-hover-color: var(--minima-link-hover-color);
|
||||||
|
|
||||||
|
$border-color-01: var(--minima-border-color-01);
|
||||||
|
$border-color-02: var(--minima-border-color-02);
|
||||||
|
$border-color-03: var(--minima-border-color-03);
|
||||||
|
|
||||||
|
$table-text-color: var(--minima-table-text-color);
|
||||||
|
$table-zebra-color: var(--minima-table-zebra-color);
|
||||||
|
$table-header-bg-color: var(--minima-table-header-bg-color);
|
||||||
|
$table-header-border: var(--minima-table-header-border);
|
||||||
|
$table-border-color: var(--minima-table-border-color);
|
||||||
|
|
||||||
|
|
||||||
|
} @else if $color-scheme-dark {
|
||||||
|
|
||||||
|
// Dark skin (always dark mode)
|
||||||
|
|
||||||
|
$brand-color: $dm-brand-color;
|
||||||
|
$brand-color-light: $dm-brand-color-light;
|
||||||
|
$brand-color-dark: $dm-brand-color-dark;
|
||||||
|
|
||||||
|
$site-title-color: $dm-site-title-color;
|
||||||
|
|
||||||
|
$text-color: $dm-text-color;
|
||||||
|
$background-color: $dm-background-color;
|
||||||
|
$code-background-color: $dm-code-background-color;
|
||||||
|
|
||||||
|
$link-base-color: $dm-link-base-color;
|
||||||
|
$link-visited-color: $dm-link-visited-color;
|
||||||
|
$link-hover-color: $dm-link-hover-color;
|
||||||
|
|
||||||
|
$border-color-01: $dm-border-color-01;
|
||||||
|
$border-color-02: $dm-border-color-02;
|
||||||
|
$border-color-03: $dm-border-color-03;
|
||||||
|
|
||||||
|
$table-text-color: $dm-table-text-color;
|
||||||
|
$table-zebra-color: $dm-table-zebra-color;
|
||||||
|
$table-header-bg-color: $dm-table-header-bg-color;
|
||||||
|
$table-header-border: $dm-table-header-border;
|
||||||
|
$table-border-color: $dm-table-border-color;
|
||||||
|
|
||||||
|
@include dm-highlight;
|
||||||
|
|
||||||
|
|
||||||
|
} @else {
|
||||||
|
|
||||||
|
// Classic skin syntax highlighting
|
||||||
|
@include lm-highlight;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
@charset "utf-8";
|
||||||
|
|
||||||
|
$color-scheme-auto: false;
|
||||||
|
$color-scheme-dark: false;
|
||||||
|
@import "minima/skins/auto";
|
|
@ -0,0 +1,5 @@
|
||||||
|
@charset "utf-8";
|
||||||
|
|
||||||
|
$color-scheme-auto: false;
|
||||||
|
$color-scheme-dark: true;
|
||||||
|
@import "minima/skins/auto";
|
|
@ -0,0 +1,5 @@
|
||||||
|
@charset "utf-8";
|
||||||
|
|
||||||
|
$sol-is-auto: false;
|
||||||
|
$sol-is-dark: true;
|
||||||
|
@import "minima/skins/solarized";
|
|
@ -0,0 +1,4 @@
|
||||||
|
@charset "utf-8";
|
||||||
|
|
||||||
|
$sol-is-auto: false;
|
||||||
|
@import "minima/skins/solarized";
|
|
@ -0,0 +1,201 @@
|
||||||
|
@charset "utf-8";
|
||||||
|
|
||||||
|
// Solarized skin
|
||||||
|
// ==============
|
||||||
|
// Created by Sander Voerman <mailto:sander@savoerman.nl> using the Solarized
|
||||||
|
// color scheme by Ethan Schoonover <https://ethanschoonover.com/solarized>.
|
||||||
|
|
||||||
|
// This style sheet implements three options for the minima.skin setting:
|
||||||
|
// "solarized-light" for light mode, "solarized-dark" for dark mode, and
|
||||||
|
// "solarized" for light or dark mode depending on user preference.
|
||||||
|
$sol-is-auto: true !default;
|
||||||
|
$sol-is-dark: false !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Color scheme
|
||||||
|
// ------------
|
||||||
|
// The inline comments show the canonical L*a*b values for each color.
|
||||||
|
|
||||||
|
$sol-base03: #002b36; // 15 -12 -12
|
||||||
|
$sol-base02: #073642; // 20 -12 -12
|
||||||
|
$sol-base01: #586e75; // 45 -07 -07
|
||||||
|
$sol-base00: #657b83; // 50 -07 -07
|
||||||
|
$sol-base0: #839496; // 60 -06 -03
|
||||||
|
$sol-base1: #93a1a1; // 65 -05 -02
|
||||||
|
$sol-base2: #eee8d5; // 92 -00 10
|
||||||
|
$sol-base3: #fdf6e3; // 97 00 10
|
||||||
|
$sol-yellow: #b58900; // 60 10 65
|
||||||
|
$sol-orange: #cb4b16; // 50 50 55
|
||||||
|
$sol-red: #dc322f; // 50 65 45
|
||||||
|
$sol-magenta: #d33682; // 50 65 -05
|
||||||
|
$sol-violet: #6c71c4; // 50 15 -45
|
||||||
|
$sol-blue: #268bd2; // 55 -10 -45
|
||||||
|
$sol-cyan: #2aa198; // 60 -35 -05
|
||||||
|
$sol-green: #859900; // 60 -20 65
|
||||||
|
|
||||||
|
|
||||||
|
// Mixed colors
|
||||||
|
// ------------
|
||||||
|
// While not part of the original Solarized base tones, these derived tones
|
||||||
|
// are meant to replicate the visual style of the classic skin. They should
|
||||||
|
// not be used in cases where sufficiently contrasting colors are needed.
|
||||||
|
|
||||||
|
$sol-light-mix1: mix($sol-base1, $sol-base3);
|
||||||
|
$sol-light-mix2: mix($sol-blue, $sol-base00);
|
||||||
|
$sol-light-mix3: mix($sol-base2, $sol-base3);
|
||||||
|
$sol-dark-mix1: mix($sol-base01, $sol-base03);
|
||||||
|
$sol-dark-mix2: mix($sol-blue, $sol-base0);
|
||||||
|
$sol-dark-mix3: mix($sol-base02, $sol-base03);
|
||||||
|
|
||||||
|
|
||||||
|
// Mode selection
|
||||||
|
// --------------
|
||||||
|
|
||||||
|
$sol-mono3: $sol-base3;
|
||||||
|
$sol-mono2: $sol-base2;
|
||||||
|
$sol-mono1: $sol-base1;
|
||||||
|
$sol-mono00: $sol-base00;
|
||||||
|
$sol-mono01: $sol-base01;
|
||||||
|
$sol-mix1: $sol-light-mix1;
|
||||||
|
$sol-mix2: $sol-light-mix2;
|
||||||
|
$sol-mix3: $sol-light-mix3;
|
||||||
|
|
||||||
|
@if $sol-is-dark {
|
||||||
|
$sol-mono3: $sol-base03;
|
||||||
|
$sol-mono2: $sol-base02;
|
||||||
|
$sol-mono1: $sol-base01;
|
||||||
|
$sol-mono00: $sol-base0;
|
||||||
|
$sol-mono01: $sol-base1;
|
||||||
|
$sol-mix1: $sol-dark-mix1;
|
||||||
|
$sol-mix2: $sol-dark-mix2;
|
||||||
|
$sol-mix3: $sol-dark-mix3;
|
||||||
|
}
|
||||||
|
|
||||||
|
@if $sol-is-auto {
|
||||||
|
:root {
|
||||||
|
--solarized-mono3: #{$sol-base3};
|
||||||
|
--solarized-mono2: #{$sol-base2};
|
||||||
|
--solarized-mono1: #{$sol-base1};
|
||||||
|
--solarized-mono00: #{$sol-base00};
|
||||||
|
--solarized-mono01: #{$sol-base01};
|
||||||
|
--solarized-mix1: #{$sol-light-mix1};
|
||||||
|
--solarized-mix2: #{$sol-light-mix2};
|
||||||
|
--solarized-mix3: #{$sol-light-mix3};
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
:root {
|
||||||
|
--solarized-mono3: #{$sol-base03};
|
||||||
|
--solarized-mono2: #{$sol-base02};
|
||||||
|
--solarized-mono1: #{$sol-base01};
|
||||||
|
--solarized-mono00: #{$sol-base0};
|
||||||
|
--solarized-mono01: #{$sol-base1};
|
||||||
|
--solarized-mix1: #{$sol-dark-mix1};
|
||||||
|
--solarized-mix2: #{$sol-dark-mix2};
|
||||||
|
--solarized-mix3: #{$sol-dark-mix3};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$sol-mono3: var(--solarized-mono3);
|
||||||
|
$sol-mono2: var(--solarized-mono2);
|
||||||
|
$sol-mono1: var(--solarized-mono1);
|
||||||
|
$sol-mono00: var(--solarized-mono00);
|
||||||
|
$sol-mono01: var(--solarized-mono01);
|
||||||
|
$sol-mix1: var(--solarized-mix1);
|
||||||
|
$sol-mix2: var(--solarized-mix2);
|
||||||
|
$sol-mix3: var(--solarized-mix3);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Minima color variables
|
||||||
|
// ----------------------
|
||||||
|
|
||||||
|
$brand-color: $sol-mono1 !default;
|
||||||
|
$brand-color-light: $sol-mix1 !default;
|
||||||
|
$brand-color-dark: $sol-mono00 !default;
|
||||||
|
|
||||||
|
$site-title-color: $sol-mono00 !default;
|
||||||
|
|
||||||
|
$text-color: $sol-mono01 !default;
|
||||||
|
$background-color: $sol-mono3 !default;
|
||||||
|
$code-background-color: $sol-mono2 !default;
|
||||||
|
|
||||||
|
$link-base-color: $sol-blue !default;
|
||||||
|
$link-visited-color: $sol-mix2 !default;
|
||||||
|
$link-hover-color: $sol-mono00 !default;
|
||||||
|
|
||||||
|
$border-color-01: $brand-color-light !default;
|
||||||
|
$border-color-02: $sol-mono1 !default;
|
||||||
|
$border-color-03: $sol-mono00 !default;
|
||||||
|
|
||||||
|
$table-text-color: $sol-mono00 !default;
|
||||||
|
$table-zebra-color: $sol-mix3 !default;
|
||||||
|
$table-header-bg-color: $sol-mono2 !default;
|
||||||
|
$table-header-border: $sol-mono1 !default;
|
||||||
|
$table-border-color: $sol-mono1 !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Syntax highlighting styles
|
||||||
|
// --------------------------
|
||||||
|
|
||||||
|
.highlight {
|
||||||
|
.c { color: $sol-mono1; font-style: italic } // Comment
|
||||||
|
.err { color: $sol-red } // Error
|
||||||
|
.k { color: $sol-mono01; font-weight: bold } // Keyword
|
||||||
|
.o { color: $sol-mono01; font-weight: bold } // Operator
|
||||||
|
.cm { color: $sol-mono1; font-style: italic } // Comment.Multiline
|
||||||
|
.cp { color: $sol-mono1; font-weight: bold } // Comment.Preproc
|
||||||
|
.c1 { color: $sol-mono1; font-style: italic } // Comment.Single
|
||||||
|
.cs { color: $sol-mono1; font-weight: bold; font-style: italic } // Comment.Special
|
||||||
|
.gd { color: $sol-red } // Generic.Deleted
|
||||||
|
.gd .x { color: $sol-red } // Generic.Deleted.Specific
|
||||||
|
.ge { color: $sol-mono00; font-style: italic } // Generic.Emph
|
||||||
|
.gr { color: $sol-red } // Generic.Error
|
||||||
|
.gh { color: $sol-mono1 } // Generic.Heading
|
||||||
|
.gi { color: $sol-green } // Generic.Inserted
|
||||||
|
.gi .x { color: $sol-green } // Generic.Inserted.Specific
|
||||||
|
.go { color: $sol-mono00 } // Generic.Output
|
||||||
|
.gp { color: $sol-mono00 } // Generic.Prompt
|
||||||
|
.gs { color: $sol-mono01; font-weight: bold } // Generic.Strong
|
||||||
|
.gu { color: $sol-mono1 } // Generic.Subheading
|
||||||
|
.gt { color: $sol-red } // Generic.Traceback
|
||||||
|
.kc { color: $sol-mono01; font-weight: bold } // Keyword.Constant
|
||||||
|
.kd { color: $sol-mono01; font-weight: bold } // Keyword.Declaration
|
||||||
|
.kp { color: $sol-mono01; font-weight: bold } // Keyword.Pseudo
|
||||||
|
.kr { color: $sol-mono01; font-weight: bold } // Keyword.Reserved
|
||||||
|
.kt { color: $sol-violet; font-weight: bold } // Keyword.Type
|
||||||
|
.m { color: $sol-cyan } // Literal.Number
|
||||||
|
.s { color: $sol-magenta } // Literal.String
|
||||||
|
.na { color: $sol-cyan } // Name.Attribute
|
||||||
|
.nb { color: $sol-blue } // Name.Builtin
|
||||||
|
.nc { color: $sol-violet; font-weight: bold } // Name.Class
|
||||||
|
.no { color: $sol-cyan } // Name.Constant
|
||||||
|
.ni { color: $sol-violet } // Name.Entity
|
||||||
|
.ne { color: $sol-violet; font-weight: bold } // Name.Exception
|
||||||
|
.nf { color: $sol-blue; font-weight: bold } // Name.Function
|
||||||
|
.nn { color: $sol-mono00 } // Name.Namespace
|
||||||
|
.nt { color: $sol-blue } // Name.Tag
|
||||||
|
.nv { color: $sol-cyan } // Name.Variable
|
||||||
|
.ow { color: $sol-mono01; font-weight: bold } // Operator.Word
|
||||||
|
.w { color: $sol-mono1 } // Text.Whitespace
|
||||||
|
.mf { color: $sol-cyan } // Literal.Number.Float
|
||||||
|
.mh { color: $sol-cyan } // Literal.Number.Hex
|
||||||
|
.mi { color: $sol-cyan } // Literal.Number.Integer
|
||||||
|
.mo { color: $sol-cyan } // Literal.Number.Oct
|
||||||
|
.sb { color: $sol-magenta } // Literal.String.Backtick
|
||||||
|
.sc { color: $sol-magenta } // Literal.String.Char
|
||||||
|
.sd { color: $sol-magenta } // Literal.String.Doc
|
||||||
|
.s2 { color: $sol-magenta } // Literal.String.Double
|
||||||
|
.se { color: $sol-magenta } // Literal.String.Escape
|
||||||
|
.sh { color: $sol-magenta } // Literal.String.Heredoc
|
||||||
|
.si { color: $sol-magenta } // Literal.String.Interpol
|
||||||
|
.sx { color: $sol-magenta } // Literal.String.Other
|
||||||
|
.sr { color: $sol-green } // Literal.String.Regex
|
||||||
|
.s1 { color: $sol-magenta } // Literal.String.Single
|
||||||
|
.ss { color: $sol-magenta } // Literal.String.Symbol
|
||||||
|
.bp { color: $sol-mono1 } // Name.Builtin.Pseudo
|
||||||
|
.vc { color: $sol-cyan } // Name.Variable.Class
|
||||||
|
.vg { color: $sol-cyan } // Name.Variable.Global
|
||||||
|
.vi { color: $sol-cyan } // Name.Variable.Instance
|
||||||
|
.il { color: $sol-cyan } // Literal.Number.Integer.Long
|
||||||
|
}
|
33
about.md
33
about.md
|
@ -1,29 +1,18 @@
|
||||||
---
|
<!-- ---
|
||||||
layout: page
|
layout: page
|
||||||
title: About
|
title: About
|
||||||
---
|
permalink: /about/
|
||||||
|
--- -->
|
||||||
|
|
||||||
<p class="message">
|
This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](https://jekyllrb.com/)
|
||||||
Hey there! This page is included as an example. Feel free to customize it for your own use upon downloading. Carry on!
|
|
||||||
</p>
|
|
||||||
|
|
||||||
In the novel, *The Strange Case of Dr. Jekyll and Mr. Hyde*, Mr. Poole is Dr. Jekyll's virtuous and loyal butler. Similarly, Poole is an upstanding and effective butler that helps you build Jekyll themes. It's made by [@mdo](https://twitter.com/mdo).
|
You can find the source code for Minima at GitHub:
|
||||||
|
[jekyll][jekyll-organization] /
|
||||||
|
[minima](https://github.com/jekyll/minima)
|
||||||
|
|
||||||
There are currently two themes built on Poole:
|
You can find the source code for Jekyll at GitHub:
|
||||||
|
[jekyll][jekyll-organization] /
|
||||||
|
[jekyll](https://github.com/jekyll/jekyll)
|
||||||
|
|
||||||
- [Hyde](https://hyde.getpoole.com)
|
|
||||||
- [Lanyon](https://lanyon.getpoole.com)
|
|
||||||
|
|
||||||
Learn more and contribute on [GitHub](https://github.com/poole).
|
[jekyll-organization]: https://github.com/jekyll
|
||||||
|
|
||||||
## Setup
|
|
||||||
|
|
||||||
Some fun facts about the setup of this project include:
|
|
||||||
|
|
||||||
- Built for [Jekyll](https://jekyllrb.com)
|
|
||||||
- Developed on GitHub and hosted for free on [GitHub Pages](https://pages.github.com)
|
|
||||||
- Coded with [Atom](https://atom.io), an amazing open source code editor
|
|
||||||
|
|
||||||
Have questions or suggestions? Feel free to [open an issue on GitHub](https://github.com/poole/poole/issues/new) or [ask me on Twitter](https://twitter.com/mdo).
|
|
||||||
|
|
||||||
Thanks for reading!
|
|
||||||
|
|
18
archive.md
18
archive.md
|
@ -1,18 +0,0 @@
|
||||||
---
|
|
||||||
layout: default
|
|
||||||
title: Archive
|
|
||||||
---
|
|
||||||
|
|
||||||
# Archive
|
|
||||||
|
|
||||||
Browse all posts by month and year.
|
|
||||||
|
|
||||||
{% assign postsByYearMonth = site.posts | group_by_exp: "post", "post.date | date: '%B %Y'" %}
|
|
||||||
{% for yearMonth in postsByYearMonth %}
|
|
||||||
<h2>{{ yearMonth.name }}</h2>
|
|
||||||
<ul>
|
|
||||||
{% for post in yearMonth.items %}
|
|
||||||
<li><a href="{{ post.url }}">{{ post.title }}</a></li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
{% endfor %}
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
---
|
||||||
|
# Only the main Sass file needs front matter (the dashes are enough)
|
||||||
|
---
|
||||||
|
|
||||||
|
@import
|
||||||
|
"minima/skins/{{ site.minima.skin | default: 'classic' }}",
|
||||||
|
"minima/initialize";
|
Binary file not shown.
After Width: | Height: | Size: 39 KiB |
Binary file not shown.
After Width: | Height: | Size: 34 KiB |
|
@ -0,0 +1,18 @@
|
||||||
|
---
|
||||||
|
permalink: /assets/minima-social-icons.svg
|
||||||
|
---
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
{% comment %}
|
||||||
|
Iterate through {{ site.minima.social_links }} and render platform related SVG-symbol
|
||||||
|
unless the platform is "rss" because we need the "rss" symbol for the `Subscribe` link
|
||||||
|
in the footer and therefore inject the "rss" icon outside the iteration loop.
|
||||||
|
{% endcomment %}
|
||||||
|
{% for entry in site.minima.social_links %}
|
||||||
|
{%- assign symbol_id = entry.platform -%}
|
||||||
|
{%- unless symbol_id == "rss" -%}
|
||||||
|
{%- include svg_symbol.html key = symbol_id -%}
|
||||||
|
{% endunless %}
|
||||||
|
{%- endfor -%}
|
||||||
|
{%- include svg_symbol.html key = "rss" -%}
|
||||||
|
</svg>
|
28
atom.xml
28
atom.xml
|
@ -1,28 +0,0 @@
|
||||||
---
|
|
||||||
layout: null
|
|
||||||
---
|
|
||||||
|
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<feed xmlns="http://www.w3.org/2005/Atom">
|
|
||||||
|
|
||||||
<title>{{ site.title }}</title>
|
|
||||||
<link href="{{ '/atom.xml' | relative_url }}" rel="self"/>
|
|
||||||
<link href="{{ site.url }}{{ site.baseurl }}/"/>
|
|
||||||
<updated>{{ site.time | date_to_xmlschema }}</updated>
|
|
||||||
<id>{{ site.url }}</id>
|
|
||||||
<author>
|
|
||||||
<name>{{ site.author.name }}</name>
|
|
||||||
<email>{{ site.author.email }}</email>
|
|
||||||
</author>
|
|
||||||
|
|
||||||
{% for post in site.posts %}
|
|
||||||
<entry>
|
|
||||||
<title>{{ post.title | xml_escape }}</title>
|
|
||||||
<link href="{{ site.url }}{{ site.baseurl }}{{ post.url }}"/>
|
|
||||||
<updated>{{ post.date | date_to_xmlschema }}</updated>
|
|
||||||
<id>{{ site.url }}{{ post.id }}</id>
|
|
||||||
<content type="html">{{ post.content | xml_escape }}</content>
|
|
||||||
</entry>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
</feed>
|
|
Binary file not shown.
23
index.html
23
index.html
|
@ -1,23 +0,0 @@
|
||||||
---
|
|
||||||
layout: default
|
|
||||||
title: "vLLM: Easy, Fast, and Cheap LLM Serving with PagedAttention"
|
|
||||||
---
|
|
||||||
|
|
||||||
{% for post in paginator.posts %}
|
|
||||||
<article class="post">
|
|
||||||
{{ post.content }}
|
|
||||||
</article>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
<!-- <div class="pagination">
|
|
||||||
{% if paginator.next_page %}
|
|
||||||
<a class="pagination-item older" href="{{ paginator.next_page_path | relative_url }}">Older</a>
|
|
||||||
{% else %}
|
|
||||||
<span class="pagination-item older">Older</span>
|
|
||||||
{% endif %}
|
|
||||||
{% if paginator.previous_page %}
|
|
||||||
<a class="pagination-item newer" href="{{ paginator.previous_page_path | prepend: relative_url }}">Newer</a>
|
|
||||||
{% else %}
|
|
||||||
<span class="pagination-item newer">Newer</span>
|
|
||||||
{% endif %}
|
|
||||||
</div> -->
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
---
|
||||||
|
#
|
||||||
|
# By default, content added below the "---" mark will appear in the home page
|
||||||
|
# between the top bar and the list of recent posts.
|
||||||
|
# To change the home page layout, edit the _layouts/home.html file.
|
||||||
|
# See: https://jekyllrb.com/docs/themes/#overriding-theme-defaults
|
||||||
|
#
|
||||||
|
layout: home
|
||||||
|
---
|
|
@ -0,0 +1,24 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
Gem::Specification.new do |spec|
|
||||||
|
spec.name = "minima"
|
||||||
|
spec.version = "3.0.0.dev"
|
||||||
|
spec.authors = ["Joel Glovier"]
|
||||||
|
spec.email = ["jglovier@github.com"]
|
||||||
|
|
||||||
|
spec.summary = "A beautiful, minimal theme for Jekyll."
|
||||||
|
spec.homepage = "https://github.com/jekyll/minima"
|
||||||
|
spec.license = "MIT"
|
||||||
|
|
||||||
|
spec.metadata["plugin_type"] = "theme"
|
||||||
|
|
||||||
|
spec.files = `git ls-files -z`.split("\x0").select do |f|
|
||||||
|
f.match(%r!^(assets|_(includes|layouts|sass)/|(LICENSE|README)((\.(txt|md|markdown)|$)))!i)
|
||||||
|
end
|
||||||
|
|
||||||
|
spec.add_runtime_dependency "jekyll", ">= 3.5", "< 5.0"
|
||||||
|
spec.add_runtime_dependency "jekyll-feed", "~> 0.9"
|
||||||
|
spec.add_runtime_dependency "jekyll-seo-tag", "~> 2.1"
|
||||||
|
|
||||||
|
spec.add_development_dependency "bundler"
|
||||||
|
end
|
|
@ -1,19 +0,0 @@
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
Gem::Specification.new do |spec|
|
|
||||||
spec.name = "poole-for-jekyll"
|
|
||||||
spec.version = "3.0.0"
|
|
||||||
spec.authors = ["Mark Otto"]
|
|
||||||
spec.email = ["markdotto@gmail.com"]
|
|
||||||
|
|
||||||
spec.summary = "The Jekyll Butler. A no frills responsive Jekyll blog theme."
|
|
||||||
spec.homepage = "https://getpoole.com"
|
|
||||||
spec.license = "MIT"
|
|
||||||
|
|
||||||
spec.files = `git ls-files -z`.split("\x0").select { |f| f.match(%r!^(assets|_layouts|_includes|_sass|LICENSE|README)!i) }
|
|
||||||
|
|
||||||
spec.add_runtime_dependency "jekyll", "~> 4.0"
|
|
||||||
|
|
||||||
spec.add_development_dependency "bundler", "~> 1.16"
|
|
||||||
spec.add_development_dependency "rake", "~> 12.0"
|
|
||||||
end
|
|
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 26 KiB |
Binary file not shown.
After Width: | Height: | Size: 94 KiB |
|
@ -0,0 +1,6 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
gem install bundler
|
||||||
|
bundle install
|
|
@ -0,0 +1,6 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "Building the example site..."
|
||||||
|
bundle exec jekyll build
|
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
script/build
|
||||||
|
|
||||||
|
if test -e "./_site/index.html";then
|
||||||
|
echo "It builds!"
|
||||||
|
rm -Rf _site
|
||||||
|
else
|
||||||
|
echo "Huh. That's odd. The example site doesn't seem to build."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
gem build minima.gemspec
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
bundle exec jekyll serve
|
47
styles.scss
47
styles.scss
|
@ -1,47 +0,0 @@
|
||||||
---
|
|
||||||
# Use a comment to ensure Jekyll reads the file to be transformed into CSS later
|
|
||||||
# only main files contain this front matter, not partials.
|
|
||||||
---
|
|
||||||
|
|
||||||
//
|
|
||||||
// ___
|
|
||||||
// /\_ \
|
|
||||||
// _____ ___ ___\//\ \ __
|
|
||||||
// /\ '__`\ / __`\ / __`\\ \ \ /'__`\
|
|
||||||
// \ \ \_\ \/\ \_\ \/\ \_\ \\_\ \_/\ __/
|
|
||||||
// \ \ ,__/\ \____/\ \____//\____\ \____\
|
|
||||||
// \ \ \/ \/___/ \/___/ \/____/\/____/
|
|
||||||
// \ \_\
|
|
||||||
// \/_/
|
|
||||||
//
|
|
||||||
// Designed, built, and released under MIT license by @mdo. Learn more at
|
|
||||||
// https://github.com/poole/poole.
|
|
||||||
|
|
||||||
@import "variables";
|
|
||||||
@import "base";
|
|
||||||
@import "type";
|
|
||||||
@import "syntax";
|
|
||||||
@import "code";
|
|
||||||
@import "layout";
|
|
||||||
@import "masthead";
|
|
||||||
@import "posts";
|
|
||||||
@import "pagination";
|
|
||||||
@import "message";
|
|
||||||
@import "toc";
|
|
||||||
|
|
||||||
// Sass for creating the swatches
|
|
||||||
.colors {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: max-content 1fr;
|
|
||||||
|
|
||||||
dt {
|
|
||||||
width: 3rem;
|
|
||||||
height: 3rem;
|
|
||||||
border-radius: var(--border-radius);
|
|
||||||
box-shadow: inset 0 0 0 1px rgba(255,255,255,.15);
|
|
||||||
}
|
|
||||||
|
|
||||||
dd {
|
|
||||||
margin-left: var(--spacer);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue