summaryrefslogtreecommitdiff
path: root/lib/graphite
diff options
context:
space:
mode:
authorFuwn <[email protected]>2022-02-04 17:38:04 -0800
committerFuwn <[email protected]>2025-06-09 00:43:14 -0700
commit8a78f62e4cb0890cd0ed9c663a21f809013b959e (patch)
treebe25df618590569d62f3279a1c2cdffd7ddeeb08 /lib/graphite
downloaddocumentation-8a78f62e4cb0890cd0ed9c663a21f809013b959e.tar.xz
documentation-8a78f62e4cb0890cd0ed9c663a21f809013b959e.zip
feat: setup documentation
Diffstat (limited to 'lib/graphite')
-rw-r--r--lib/graphite/license.txt24
-rw-r--r--lib/graphite/readme.md37
-rw-r--r--lib/graphite/resources/assets/fonts.css72
-rw-r--r--lib/graphite/resources/assets/fonts/CrimsonText-Bold.ttfbin0 -> 93768 bytes
-rw-r--r--lib/graphite/resources/assets/fonts/CrimsonText-Bold.woff2bin0 -> 13172 bytes
-rw-r--r--lib/graphite/resources/assets/fonts/CrimsonText-BoldItalic.ttfbin0 -> 75680 bytes
-rw-r--r--lib/graphite/resources/assets/fonts/CrimsonText-BoldItalic.woff2bin0 -> 14196 bytes
-rw-r--r--lib/graphite/resources/assets/fonts/CrimsonText-Italic.ttfbin0 -> 99800 bytes
-rw-r--r--lib/graphite/resources/assets/fonts/CrimsonText-Italic.woff2bin0 -> 14648 bytes
-rw-r--r--lib/graphite/resources/assets/fonts/CrimsonText-Regular.ttfbin0 -> 189596 bytes
-rw-r--r--lib/graphite/resources/assets/fonts/CrimsonText-Regular.woff2bin0 -> 13612 bytes
-rw-r--r--lib/graphite/resources/assets/fonts/CrimsonText-SemiBold.ttfbin0 -> 77596 bytes
-rw-r--r--lib/graphite/resources/assets/fonts/CrimsonText-SemiBold.woff2bin0 -> 14200 bytes
-rw-r--r--lib/graphite/resources/assets/fonts/CrimsonText-SemiBoldItalic.ttfbin0 -> 75580 bytes
-rw-r--r--lib/graphite/resources/assets/fonts/CrimsonText-SemiBoldItalic.woff2bin0 -> 14388 bytes
-rw-r--r--lib/graphite/resources/assets/fonts/OFL.txt93
-rw-r--r--lib/graphite/resources/assets/graphite.css685
-rw-r--r--lib/graphite/resources/assets/pygments.css76
-rw-r--r--lib/graphite/templates/node.ibis46
19 files changed, 1033 insertions, 0 deletions
diff --git a/lib/graphite/license.txt b/lib/graphite/license.txt
new file mode 100644
index 0000000..53261fe
--- /dev/null
+++ b/lib/graphite/license.txt
@@ -0,0 +1,24 @@
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+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 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.
+
+For more information, please refer to <http://unlicense.org/>.
diff --git a/lib/graphite/readme.md b/lib/graphite/readme.md
new file mode 100644
index 0000000..0f131cb
--- /dev/null
+++ b/lib/graphite/readme.md
@@ -0,0 +1,37 @@
+# Graphite
+
+[1]: https://github.com/dmulholl/ivy
+[2]: https://fonts.google.com/specimen/Crimson+Text
+
+A simple [Ivy][1] theme designed for generating project documentation.
+
+This theme will display the following attributes from the site's `config.py` file in the site header:
+
+* `title`
+* `tagline`
+
+It supports the following includes:
+
+* `menu`
+
+ This file will be used to construct the theme's main menu. It should contain
+ a list of links, optionally with nested sub-lists.
+
+* `head`
+
+ If a `head.html` file is present in the includes folder its content will be
+ included at the end of each page's `<head>` section. This file can be used
+ to add custom CSS or JavaScript to a site without directly editing the
+ theme's template files.
+
+* `foot`
+
+ If a `foot.html` file is present in the includes folder its content will
+ be included at the end of each page's `<body>` section. This file can be
+ used to add custom JavaScript to a site without directly editing the
+ theme's template files.
+
+This theme is distributed under the following license:
+
+* All code has been placed in the public domain.
+* The bundled [Crimson Text][2] font is distributed under the SIL Open Font License.
diff --git a/lib/graphite/resources/assets/fonts.css b/lib/graphite/resources/assets/fonts.css
new file mode 100644
index 0000000..33f9cfa
--- /dev/null
+++ b/lib/graphite/resources/assets/fonts.css
@@ -0,0 +1,72 @@
+/**
+ * -------------------------------------------------------------------------
+ * Google fonts served locally.
+ * -------------------------------------------------------------------------
+ */
+
+@font-face {
+ font-family: 'Crimson Text';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Crimson Text Regular'),
+ local('CrimsonText-Regular'),
+ url(fonts/CrimsonText-Regular.woff2) format('woff2'),
+ url(fonts/CrimsonText-Regular.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Crimson Text';
+ font-style: italic;
+ font-weight: 400;
+ src: local('Crimson Text Italic'),
+ local('CrimsonText-Italic'),
+ url(fonts/CrimsonText-Italic.woff2) format('woff2'),
+ url(fonts/CrimsonText-Italic.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Crimson Text';
+ font-style: normal;
+ font-weight: 700;
+ src: local('Crimson Text Bold'),
+ local('CrimsonText-Bold'),
+ url(fonts/CrimsonText-Bold.woff2) format('woff2'),
+ url(fonts/CrimsonText-Bold.ttf) format('truetype');
+}
+
+/*
+ The fonts below are packaged with the theme and can be uncommented
+ if needed.
+ */
+
+/*
+@font-face {
+ font-family: 'Crimson Text';
+ font-style: italic;
+ font-weight: 700;
+ src: local('Crimson Text Bold Italic'),
+ local('CrimsonText-BoldItalic'),
+ url(fonts/CrimsonText-BoldItalic.woff2) format('woff2'),
+ url(fonts/CrimsonText-BoldItalic.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Crimson Text';
+ font-style: normal;
+ font-weight: 600;
+ src: local('Crimson Text SemiBold'),
+ local('CrimsonText-SemiBold'),
+ url(fonts/CrimsonText-SemiBold.woff2) format('woff2'),
+ url(fonts/CrimsonText-SemiBold.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Crimson Text';
+ font-style: italic;
+ font-weight: 600;
+ src: local('Crimson Text SemiBold Italic'),
+ local('CrimsonText-SemiBoldItalic'),
+ url(fonts/CrimsonText-SemiBoldItalic.woff2) format('woff2'),
+ url(fonts/CrimsonText-SemiBoldItalic.ttf) format('truetype');
+}
+*/
diff --git a/lib/graphite/resources/assets/fonts/CrimsonText-Bold.ttf b/lib/graphite/resources/assets/fonts/CrimsonText-Bold.ttf
new file mode 100644
index 0000000..7e2772c
--- /dev/null
+++ b/lib/graphite/resources/assets/fonts/CrimsonText-Bold.ttf
Binary files differ
diff --git a/lib/graphite/resources/assets/fonts/CrimsonText-Bold.woff2 b/lib/graphite/resources/assets/fonts/CrimsonText-Bold.woff2
new file mode 100644
index 0000000..d691718
--- /dev/null
+++ b/lib/graphite/resources/assets/fonts/CrimsonText-Bold.woff2
Binary files differ
diff --git a/lib/graphite/resources/assets/fonts/CrimsonText-BoldItalic.ttf b/lib/graphite/resources/assets/fonts/CrimsonText-BoldItalic.ttf
new file mode 100644
index 0000000..b71ae01
--- /dev/null
+++ b/lib/graphite/resources/assets/fonts/CrimsonText-BoldItalic.ttf
Binary files differ
diff --git a/lib/graphite/resources/assets/fonts/CrimsonText-BoldItalic.woff2 b/lib/graphite/resources/assets/fonts/CrimsonText-BoldItalic.woff2
new file mode 100644
index 0000000..abc06a5
--- /dev/null
+++ b/lib/graphite/resources/assets/fonts/CrimsonText-BoldItalic.woff2
Binary files differ
diff --git a/lib/graphite/resources/assets/fonts/CrimsonText-Italic.ttf b/lib/graphite/resources/assets/fonts/CrimsonText-Italic.ttf
new file mode 100644
index 0000000..7d86331
--- /dev/null
+++ b/lib/graphite/resources/assets/fonts/CrimsonText-Italic.ttf
Binary files differ
diff --git a/lib/graphite/resources/assets/fonts/CrimsonText-Italic.woff2 b/lib/graphite/resources/assets/fonts/CrimsonText-Italic.woff2
new file mode 100644
index 0000000..8c1c635
--- /dev/null
+++ b/lib/graphite/resources/assets/fonts/CrimsonText-Italic.woff2
Binary files differ
diff --git a/lib/graphite/resources/assets/fonts/CrimsonText-Regular.ttf b/lib/graphite/resources/assets/fonts/CrimsonText-Regular.ttf
new file mode 100644
index 0000000..4dda4ed
--- /dev/null
+++ b/lib/graphite/resources/assets/fonts/CrimsonText-Regular.ttf
Binary files differ
diff --git a/lib/graphite/resources/assets/fonts/CrimsonText-Regular.woff2 b/lib/graphite/resources/assets/fonts/CrimsonText-Regular.woff2
new file mode 100644
index 0000000..e9ce880
--- /dev/null
+++ b/lib/graphite/resources/assets/fonts/CrimsonText-Regular.woff2
Binary files differ
diff --git a/lib/graphite/resources/assets/fonts/CrimsonText-SemiBold.ttf b/lib/graphite/resources/assets/fonts/CrimsonText-SemiBold.ttf
new file mode 100644
index 0000000..5e24039
--- /dev/null
+++ b/lib/graphite/resources/assets/fonts/CrimsonText-SemiBold.ttf
Binary files differ
diff --git a/lib/graphite/resources/assets/fonts/CrimsonText-SemiBold.woff2 b/lib/graphite/resources/assets/fonts/CrimsonText-SemiBold.woff2
new file mode 100644
index 0000000..91bbb5d
--- /dev/null
+++ b/lib/graphite/resources/assets/fonts/CrimsonText-SemiBold.woff2
Binary files differ
diff --git a/lib/graphite/resources/assets/fonts/CrimsonText-SemiBoldItalic.ttf b/lib/graphite/resources/assets/fonts/CrimsonText-SemiBoldItalic.ttf
new file mode 100644
index 0000000..50b3f44
--- /dev/null
+++ b/lib/graphite/resources/assets/fonts/CrimsonText-SemiBoldItalic.ttf
Binary files differ
diff --git a/lib/graphite/resources/assets/fonts/CrimsonText-SemiBoldItalic.woff2 b/lib/graphite/resources/assets/fonts/CrimsonText-SemiBoldItalic.woff2
new file mode 100644
index 0000000..077f178
--- /dev/null
+++ b/lib/graphite/resources/assets/fonts/CrimsonText-SemiBoldItalic.woff2
Binary files differ
diff --git a/lib/graphite/resources/assets/fonts/OFL.txt b/lib/graphite/resources/assets/fonts/OFL.txt
new file mode 100644
index 0000000..ed4fea1
--- /dev/null
+++ b/lib/graphite/resources/assets/fonts/OFL.txt
@@ -0,0 +1,93 @@
+Copyright (c) 2010, Sebastian Kosch ([email protected]),
+with Reserved Font Name "Crimson" and "Crimson Text".
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/lib/graphite/resources/assets/graphite.css b/lib/graphite/resources/assets/graphite.css
new file mode 100644
index 0000000..e1b5a8c
--- /dev/null
+++ b/lib/graphite/resources/assets/graphite.css
@@ -0,0 +1,685 @@
+/**
+ * -------------------------------------------------------------------------
+ * Micro Reset
+ * -------------------------------------------------------------------------
+ */
+
+*, *:before, *:after {
+ box-sizing: inherit;
+}
+
+html {
+ box-sizing: border-box;
+ font-size: 100%;
+ -webkit-text-size-adjust: none;
+ text-size-adjust: none;
+}
+
+body {
+ margin: 0;
+ padding: 0;
+}
+
+form, fieldset, legend {
+ margin: 0;
+ padding: 0;
+}
+
+button, input, select, textarea, label {
+ margin: 0;
+ padding: 0;
+ font-family: inherit;
+ font-size: inherit;
+}
+
+img {
+ border: 0;
+ max-width: 100%;
+}
+
+/**
+ * -------------------------------------------------------------------------
+ * Typography
+ * -------------------------------------------------------------------------
+ */
+
+body {
+ font-size: 17px;
+ color: black;
+ font-family: 'Crimson Text', Georgia, serif;
+ line-height: 1.75;
+}
+
+h1 {
+ padding: 0;
+ margin: 80px 0 30px;
+ line-height: 1.25;
+ text-align: center;
+ font-size: 32px;
+ font-weight: normal;
+}
+
+h2 {
+ padding: 0;
+ margin: 80px 0 30px;
+ line-height: 1.25;
+ text-align: center;
+ font-size: 22px;
+ font-weight: bold;
+}
+
+h2.underline {
+ padding: 0;
+ margin: 80px 0 35px;
+ line-height: 1.25;
+ text-align: left;
+ font-size: 22px;
+ font-weight: bold;
+ padding-bottom: 5px;
+ border-bottom: 1px solid #ccc;
+}
+
+h3, h4, h5, h6 {
+ padding: 0;
+ margin: 80px 0 30px;
+ line-height: 1.25;
+ text-align: left;
+ font-size: 19px;
+ font-weight: bold;
+}
+
+p {
+ margin: 25px 0;
+ padding: 0;
+ overflow-wrap: break-word;
+}
+
+blockquote {
+ margin: 40px 0px;
+ padding: 0 20px;
+ border-left: 3px solid #ddd;
+ font-style: italic;
+}
+
+.blockquote-caption {
+ margin: -10px 20px 40px;
+ text-align: right;
+}
+
+abbr[title] {
+ border-bottom: 1px dotted;
+ cursor: help;
+}
+
+sup, sub {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ bottom: 1.5ex;
+ padding: 0 0.5ex;
+}
+
+sub {
+ top: .5ex;
+}
+
+/**
+ * Code
+ */
+
+pre, code {
+ font-size: 13px;
+ font-family: Consolas, monospace;
+}
+
+code {
+ margin: 0 2px;
+ padding: 1px 5px;
+ white-space: nowrap;
+ border: 1px solid #e8e8e8;
+ border-radius: 3px;
+ background-color: #f8f8f8;
+}
+
+pre {
+ margin: 40px 0;
+ padding: 16px 20px;
+ border-top: 1px dotted #bbb;
+ border-bottom: 1px dotted #bbb;
+ background-color: #f8f8f8;
+ overflow: auto;
+ line-height: 1.4;
+}
+
+h1 code {
+ font-size: 28px;
+}
+
+/**
+ * Lists
+ */
+
+ul, ol {
+ margin: 35px 0;
+ padding: 0 0 0 20px;
+}
+
+ul ul, ol ol, ul ol, ol ul {
+ margin: 10px 10px;
+}
+
+li {
+ margin: 4px 0;
+ padding: 0;
+}
+
+dl {
+ margin: 40px 0;
+ padding: 0;
+}
+
+dt {
+ margin: 45px 0 25px;
+ padding: 0;
+ font-weight: bold;
+}
+
+dd {
+ margin: 25px 0px;
+ padding: 0 25px;
+ border-left: 1px solid #ddd;
+}
+
+/**
+ * Links
+ */
+
+a {
+ color: black;
+ text-decoration: none;
+ padding-bottom: 2px;
+ border-bottom: 1px solid;
+}
+
+sup a {
+ border-bottom: none;
+}
+
+/**
+ * Miscellanea
+ */
+
+hr {
+ display: block;
+ height: 1px;
+ border: 0;
+ border-top: 1px solid;
+ margin: 60px auto;
+ padding: 0;
+ max-width: 300px;
+}
+
+img {
+ margin: 40px auto;
+ display: block;
+}
+
+/**
+ * -------------------------------------------------------------------------
+ * Layout
+ * -------------------------------------------------------------------------
+ */
+
+body {
+ width: 960px;
+ margin: 0 auto;
+ padding: 40px 0;
+}
+
+.masthead {
+ width: 360px;
+ padding: 20px 50px;
+ float: left;
+}
+
+.main {
+ width: 600px;
+ padding: 32px 50px 40px 50px;
+ margin-left: 360px;
+ border-left: 3px solid black;
+ min-height: calc(100vh - 80px);
+}
+
+/**
+ * -------------------------------------------------------------------------
+ * Masthead
+ * -------------------------------------------------------------------------
+ */
+
+.masthead h1 {
+ margin-top: 0;
+ margin-bottom: 34px;
+ padding: 0;
+ text-align: right;
+ font-size: 46px;
+ line-height: 58px;
+}
+
+.masthead h1 a {
+ border-bottom: none;
+}
+
+.masthead .tagline {
+ font-style: italic;
+ text-align: right;
+}
+
+.masthead .version {
+ font-style: italic;
+ text-align: right;
+}
+
+.masthead .menu {
+ margin-right: 20px;
+ direction: rtl;
+}
+
+.masthead .menu a {
+ direction: ltr;
+}
+
+.masthead .menu ul ul {
+ list-style: none;
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+.masthead .menu li li::before {
+ content: "•\00a\000a0\00a0"
+}
+
+#menu-check {
+ display: none;
+}
+
+#menu-label {
+ display: none;
+}
+
+/**
+ * -------------------------------------------------------------------------
+ * Main
+ * -------------------------------------------------------------------------
+ */
+
+.main .title h1 {
+ margin-top: 0;
+ margin-bottom: 40px;
+}
+
+.main .title .subtitle {
+ font-style: italic;
+ text-align: center;
+}
+
+.main .title hr {
+ margin: 50px auto 60px;
+}
+
+.main > :last-child {
+ margin-bottom: 0;
+}
+
+/**
+ * Info Boxes
+ */
+
+.infobox, .alertbox {
+ margin: 40px 20px;
+ border: 1px solid;
+ padding: 0 25px;
+ border-radius: 3px;
+ border-color: #bbb;
+ background-color: #f8f8f8;
+}
+
+.infobox.blue, .alertbox.info {
+ border-color: #bac6d3;
+ background-color: #e2eef9;
+}
+
+.infobox.yellow, .alertbox.warning {
+ border-color: #dfd8c2;
+ background-color: #fff9ea;
+}
+
+.infobox.red, .alertbox.error {
+ border-color: #d2b2b2;
+ background-color: #fcdede;
+}
+
+.infobox.green, .alertbox.success {
+ border-color: #B2C2AB;
+ background-color: #DEF2D6;
+}
+
+/**
+ * Footnotes
+ */
+
+ .footnote a::before {
+ content: "[";
+ }
+
+ .footnote a::after {
+ content: "]";
+ }
+
+ .footnote a {
+ border: none;
+ }
+
+ .footnotes dt {
+ display: table-cell;
+ width: 30px;
+ text-align: right;
+ font-weight: normal;
+ }
+
+ .footnotes dt a {
+ padding: 0;
+ border: none;
+ }
+
+ .footnotes dt a::before {
+ content: "[";
+ }
+
+ .footnotes dt a::after {
+ content: "]";
+ }
+
+ .footnotes dd {
+ display: table-cell;
+ padding-left: 20px;
+ padding-right: 0px;
+ border: none
+ }
+
+ .footnotes dd :first-child {
+ margin-top: 0;
+ }
+
+ .footnotes div:last-child dd :last-child {
+ margin-bottom: 0;
+ }
+
+ .footnotes pre {
+ margin: 30px 0;
+ }
+
+/**
+ * Tables
+ */
+
+table {
+ font-size: 16px;
+ border-collapse: collapse;
+ border-spacing: 0;
+ margin: 50px 0px;
+ width: 100%;
+}
+
+thead, tfoot {
+ background-color: #f8f8f8;
+}
+
+th, td {
+ border: 1px solid #ccc;
+ padding: 14px 20px;
+ text-align: left;
+}
+
+/**
+ * Utility Styles
+ */
+
+.small {
+ font-size: 16px;
+}
+
+.left {
+ text-align: left;
+}
+
+.right {
+ text-align: right;
+}
+
+.center {
+ text-align: center;
+}
+
+.justify {
+ text-align: justify;
+}
+
+.bold {
+ font-weight: bold;
+}
+
+.italic {
+ font-style: italic;
+}
+
+.indent {
+ padding-left: 30px;
+ padding-right: 30px;
+}
+
+.unselectable {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+/**
+ * Custom Classes
+ */
+
+body.extra-deflist-vspace dt {
+ margin-top: 80px;
+}
+
+/**
+ * -------------------------------------------------------------------------
+ * Media Queries
+ * -------------------------------------------------------------------------
+ */
+
+/* Tablet screens and smaller. */
+
+@media screen and (max-width: 960px) {
+
+ body {
+ width: auto;
+ max-width: 680px;
+ padding-top: 60px;
+ }
+
+ .masthead {
+ width: auto;
+ float: none;
+ padding: 60px 20px 60px 20px;
+ text-align: center;
+ margin-left: 40px;
+ margin-right: 40px;
+ border-top: 3px solid black;
+ border-bottom: 3px solid black;
+ }
+
+ .main {
+ width: auto;
+ padding: 40px 40px;
+ margin-left: 0;
+ border-left: none;
+ min-height: auto;
+ }
+
+ .masthead h1 {
+ text-align: center;
+ }
+
+ .masthead .tagline {
+ text-align: center;
+ max-width: 450px;
+ margin-left: auto;
+ margin-right: auto;
+ display: none;
+ }
+
+ .homepage .masthead .tagline {
+ display: block;
+ }
+
+ .masthead .version {
+ text-align: center;
+ }
+
+ .masthead .menu {
+ direction: ltr;
+ max-width: 300px;
+ margin-left: auto;
+ margin-right: auto;
+ }
+
+ .masthead .menu ul {
+ text-align: left;
+ margin: 0;
+ padding: 0;
+ }
+
+ .masthead .menu ul ul {
+ margin: 0;
+ }
+
+ .masthead .menu li {
+ border-bottom: 1px solid;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ }
+
+ .masthead .menu li:first-child {
+ border-top: 1px solid;
+ }
+
+ .masthead .menu li li:last-child {
+ border-bottom: none;
+ }
+
+ .masthead .menu a {
+ display: block;
+ padding: 15px 20px;
+ border-bottom: none;
+ }
+
+ .masthead .menu li li a {
+ padding-left: 30px;
+ }
+
+ .masthead .menu li li::before {
+ content: none;
+ }
+
+ .masthead .menu li li a::before {
+ content: "•\00a0\00a0\00a0";
+ }
+
+ #menu-label {
+ display: inline-block;
+ padding: 0 20px;
+ height: 50px;
+ border: 1px solid #ddd;
+ cursor: pointer;
+ line-height: 50px;
+ color: #333;
+ font-size: 20px;
+ margin-top: 10px;
+ }
+
+ #menu-label:hover, #menu-label:focus {
+ border: 1px solid #888;
+ }
+
+ #menu-label .icon {
+ padding-right: 8px;
+ width: 30px;
+ }
+
+ #menu-check ~ label .close-icon {
+ display: none;
+ }
+
+ #menu-check ~ label .open-icon {
+ display: inline-block;
+ }
+
+ #menu-check:checked ~ label .close-icon {
+ display: inline-block;
+ }
+
+ #menu-check:checked ~ label .open-icon {
+ display: none;
+ }
+
+ #menu-check ~ ul {
+ display: none;
+ }
+
+ #menu-check:checked ~ ul {
+ display: block;
+ margin-top: 50px;
+ margin-bottom: 0;
+ }
+}
+
+/* Landscape phone screens and smaller. */
+
+@media screen and (max-width: 720px) {
+}
+
+/* Portrait phone screens. */
+
+@media screen and (max-width: 480px) {
+
+ body {
+ font-size: 16px;
+ padding-top: 40px;
+ }
+
+ h1 {
+ font-size: 28px;
+ }
+
+ h2 {
+ font-size: 18px;
+ }
+
+ h3, h4, h5, h6 {
+ font-size: 16px;
+ }
+
+ pre, code {
+ font-size: 12px;
+ }
+
+ .small {
+ font-size: 15px;
+ }
+}
diff --git a/lib/graphite/resources/assets/pygments.css b/lib/graphite/resources/assets/pygments.css
new file mode 100644
index 0000000..2df111c
--- /dev/null
+++ b/lib/graphite/resources/assets/pygments.css
@@ -0,0 +1,76 @@
+/**
+ * -------------------------------------------------------------------------
+ * Pygments Theme
+ * -------------------------------------------------------------------------
+ */
+
+pre .bp { color: #3465a4 } /* Name.Builtin.Pseudo */
+pre .c { color: #8f5902 } /* Comment */
+pre .c1 { color: #8f5902 } /* Comment.Single */
+pre .cm { color: #8f5902 } /* Comment.Multiline */
+pre .cp { color: #540e8a; font-weight: bold } /* Comment.Preproc */
+pre .cs { color: #8f5902 } /* Comment.Special */
+pre .g { color: #222222 } /* Generic */
+pre .gd { color: #a40000 } /* Generic.Deleted */
+pre .ge { color: #222222 } /* Generic.Emph */
+pre .gr { color: #ef2929 } /* Generic.Error */
+pre .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+pre .gi { color: #00A000 } /* Generic.Inserted */
+pre .go { color: #222222 } /* Generic.Output */
+pre .gp { color: #8f5902 } /* Generic.Prompt */
+pre .gs { color: #222222; font-weight: bold } /* Generic.Strong */
+pre .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+pre .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */
+pre .il { color: #000088 } /* Literal.Number.Integer.Long */
+pre .k { color: #204a87; font-weight: bold } /* Keyword */
+pre .kc { color: #204a87; font-weight: bold } /* Keyword.Constant */
+pre .kd { color: #204a87; font-weight: bold } /* Keyword.Declaration */
+pre .kn { color: #540e8a; font-weight: bold } /* Keyword.Namespace */
+pre .kp { color: #204a87; font-weight: bold } /* Keyword.Pseudo */
+pre .kr { color: #204a87; font-weight: bold } /* Keyword.Reserved */
+pre .kt { color: #204a87; font-weight: bold } /* Keyword.Type */
+pre .l { color: #222222 } /* Literal */
+pre .ld { color: #222222 } /* Literal.Date */
+pre .m { color: #000088 } /* Literal.Number */
+pre .mf { color: #000088 } /* Literal.Number.Float */
+pre .mh { color: #000088 } /* Literal.Number.Hex */
+pre .mi { color: #000088 } /* Literal.Number.Integer */
+pre .mo { color: #000088 } /* Literal.Number.Oct */
+pre .mb { color: #000088 } /* Literal.Number.Bin */
+pre .n { color: #222222 } /* Name */
+pre .na { color: #8f5902 } /* Name.Attribute */
+pre .nb { color: #204a87 } /* Name.Builtin */
+pre .nc { color: #222222 } /* Name.Class */
+pre .no { color: #222222 } /* Name.Constant */
+pre .nd { color: #000088 } /* Name.Decorator */
+pre .ni { color: #ce5c00 } /* Name.Entity */
+pre .ne { color: #cc0000; font-weight: bold } /* Name.Exception */
+pre .nf { color: #222222 } /* Name.Function */
+pre .nl { color: #880000 } /* Name.Label */
+pre .nn { color: #222222 } /* Name.Namespace */
+pre .nt { color: #204a87; font-weight: bold } /* Name.Tag */
+pre .nv { color: #222222 } /* Name.Variable */
+pre .nx { color: #222222 } /* Name.Other */
+pre .o { color: #000088 } /* Operator */
+pre .ow { color: #204a87; font-weight: bold } /* Operator.Word */
+pre .p { color: #222222 } /* Punctuation */
+pre .py { color: #222222 } /* Name.Property */
+pre .s { color: #880000 } /* Literal.String */
+pre .s1 { color: #880000 } /* Literal.String.Single */
+pre .s2 { color: #880000 } /* Literal.String.Double */
+pre .sb { color: #880000 } /* Literal.String.Backtick */
+pre .sc { color: #880000 } /* Literal.String.Char */
+pre .sd { color: #880000 } /* Literal.String.Doc */
+pre .se { color: #880000 } /* Literal.String.Escape */
+pre .sh { color: #880000 } /* Literal.String.Heredoc */
+pre .si { color: #880000 } /* Literal.String.Interpol */
+pre .sr { color: #880000 } /* Literal.String.Regex */
+pre .ss { color: #880000 } /* Literal.String.Symbol */
+pre .sx { color: #880000 } /* Literal.String.Other */
+pre .vc { color: #222222 } /* Name.Variable.Class */
+pre .vg { color: #222222 } /* Name.Variable.Global */
+pre .vi { color: #222222 } /* Name.Variable.Instance */
+pre .x { color: #222222 } /* Other */
+
+pre .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */
+pre .err { color: #a40000; border: 1px solid #ef2929 } /* Error */
diff --git a/lib/graphite/templates/node.ibis b/lib/graphite/templates/node.ibis
new file mode 100644
index 0000000..bf0a85a
--- /dev/null
+++ b/lib/graphite/templates/node.ibis
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>{{ node.meta_title || node.title || site.title }}</title>
+ <link rel="stylesheet" href="@root/assets/fonts.css">
+ <link rel="stylesheet" href="@root/assets/graphite.css">
+ <link rel="stylesheet" href="@root/assets/pygments.css">
+ {% if node.meta_description %}
+ <meta name="description" content="{$ node.meta_description.strip() $}">
+ {% endif %}
+ {{ inc.head }}
+ </head>
+ <body class="{$ classes|join(' ') $}">
+ <header class="masthead">
+ <h1><a href="@root/">{{ site.title || "Site Title" }}</a></h1>
+ {% if site.tagline %}
+ <p class="tagline">{{ site.tagline.strip() }}</p>
+ {% endif %}
+ {% if site.version %}
+ <p class="version">{{ site.version.strip() }}</p>
+ {% endif %}
+ <nav class="menu">
+ <input id="menu-check" type="checkbox"/>
+ <label id="menu-label" for="menu-check" class="unselectable">
+ <span class="icon close-icon">✕</span>
+ <span class="icon open-icon">☰</span>
+ <span class="text">Menu</span>
+ </label>
+ {{ inc.menu || automenu }}
+ </nav>
+ </header>
+ <article class="main">
+ <header class="title">
+ <h1>{{ node.title }}</h1>
+ {% if node.subtitle %}
+ <p class="subtitle">{{ node.subtitle }}</p>
+ {% endif %}
+ <hr>
+ </header>
+ {{ node.html }}
+ </article>
+ {{ inc.foot }}
+ </body>
+</html>