diff --git a/docs/_static/custom.css b/docs/_static/custom.css
index b73b908c5..bff734e82 100644
--- a/docs/_static/custom.css
+++ b/docs/_static/custom.css
@@ -1,4 +1,588 @@
-/* Fix DataTables display in Sphinx RTD Theme */
+/*
+ * ros2_medkit docs in the selfpatch.ai look, on top of sphinx_rtd_theme.
+ *
+ * Same layout and navigation as the stock theme; only the surface changes:
+ * Oxanium for headings, Inter for reading, IBM Plex Mono for code, a graphite
+ * sidebar, forest links, chalk panels, hairline tables. No shadows, no
+ * uppercase labels. Fonts are self-hosted under _static/fonts (SIL OFL):
+ * Inter and Oxanium carry no Reserved Font Name, and IBM Plex Mono is
+ * IBM's own unmodified file from @ibm/plex-mono, as its "Plex" reservation
+ * requires.
+ */
+
+@font-face {
+ font-family: Inter;
+ font-weight: 100 900;
+ font-display: swap;
+ src: url("fonts/inter-latin.woff2") format("woff2");
+}
+@font-face {
+ font-family: Oxanium;
+ font-weight: 200 800;
+ font-display: swap;
+ src: url("fonts/oxanium-latin.woff2") format("woff2");
+}
+@font-face {
+ font-family: "IBM Plex Mono";
+ font-weight: 400;
+ font-display: swap;
+ src: url("fonts/IBMPlexMono-Regular.woff2") format("woff2");
+}
+
+:root {
+ --sp-ink: #121413;
+ --sp-body: #363a37;
+ --sp-muted: #5d645e;
+ --sp-accent: #2f6b3f;
+ --sp-acid: #c8ff3e;
+ --sp-chalk: #eeeeea;
+ --sp-chalk-soft: #f6f6f3;
+ --sp-line: rgb(18 20 19 / 0.1);
+ --sp-line-strong: rgb(18 20 19 / 0.22);
+ --sp-graphite: #121413;
+ --sp-side-raised: #1d201e;
+ --sp-side-text: #c9cdc4;
+ --sp-side-muted: #8b948b;
+ --sp-sans: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
+ --sp-display: Oxanium, var(--sp-sans);
+ --sp-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
+}
+
+/* -- Ground and type ------------------------------------------------------ */
+
+body,
+.wy-body-for-nav,
+.wy-nav-content-wrap,
+.wy-nav-content {
+ background: #ffffff;
+}
+
+body,
+.rst-content,
+.wy-menu-vertical,
+.wy-side-nav-search input[type="text"],
+.btn,
+input,
+select,
+textarea {
+ font-family: var(--sp-sans);
+}
+
+.rst-content {
+ color: var(--sp-body);
+ font-size: 16px;
+ line-height: 1.65;
+}
+
+.rst-content p,
+.rst-content li {
+ line-height: 1.65;
+}
+
+h1, h2, h3, h4, h5, h6,
+.rst-content .toctree-wrapper > p.caption,
+legend {
+ font-family: var(--sp-display);
+ font-weight: 700;
+ color: var(--sp-ink);
+ letter-spacing: -0.03em;
+}
+
+.rst-content h1 { font-size: 2.4rem; line-height: 1.1; letter-spacing: -0.04em; margin-bottom: 1.25rem; }
+.rst-content h2 { font-size: 1.75rem; line-height: 1.15; letter-spacing: -0.04em; margin-top: 2.25rem; }
+.rst-content h3 { font-size: 1.3rem; line-height: 1.2; margin-top: 1.75rem; }
+.rst-content h4 { font-size: 1.1rem; }
+
+.rst-content hr,
+.wy-nav-content hr {
+ border-top: 1px solid var(--sp-line);
+}
+
+/* -- Links ----------------------------------------------------------------- */
+
+a,
+a:visited,
+.rst-content a,
+.rst-content a:visited {
+ color: var(--sp-accent);
+}
+
+a:hover,
+.rst-content a:hover {
+ color: var(--sp-ink);
+ text-decoration: underline;
+ text-underline-offset: 3px;
+}
+
+/* -- Sidebar: the graphite act ---------------------------------------------- */
+
+.wy-nav-side,
+.wy-side-scroll {
+ background: var(--sp-graphite);
+}
+
+.wy-side-nav-search {
+ background: var(--sp-graphite);
+ padding: 22px 18px 18px;
+ border-bottom: 1px solid rgb(255 255 255 / 0.08);
+ text-align: left;
+}
+
+/* Wordmark above the project name, no house icon. a.icon matches the
+ theme's own selector, which would otherwise keep this a block. */
+.wy-side-nav-search > a,
+.wy-side-nav-search > a.icon {
+ display: flex;
+ flex-direction: column-reverse;
+ align-items: flex-start;
+ gap: 14px;
+ color: #f4f5f1;
+ font-family: var(--sp-display);
+ font-size: 24px;
+ font-weight: 700;
+ letter-spacing: -0.04em;
+ margin: 0;
+ padding: 0;
+}
+
+.wy-side-nav-search > a:hover,
+.wy-side-nav-search > a.icon:hover {
+ background: transparent;
+ text-decoration: none;
+ color: #ffffff;
+}
+
+.wy-side-nav-search > a.icon-home::before {
+ display: none;
+}
+
+.wy-side-nav-search > a img.logo,
+.wy-side-nav-search .wy-dropdown > a img.logo {
+ height: 20px;
+ width: auto;
+ max-width: 100%;
+ margin: 0;
+ padding: 0;
+ background: transparent;
+}
+
+.wy-side-nav-search > div.version,
+.wy-side-nav-search > div.switch-menus {
+ color: var(--sp-side-muted);
+ text-align: left;
+}
+
+.wy-side-nav-search input[type="text"] {
+ background: var(--sp-side-raised);
+ border: 1px solid rgb(255 255 255 / 0.12);
+ border-radius: 8px;
+ box-shadow: none;
+ color: #f4f5f1;
+ font-size: 14px;
+ padding: 8px 12px;
+ margin-top: 16px;
+}
+
+.wy-side-nav-search input[type="text"]::placeholder {
+ color: var(--sp-side-muted);
+}
+
+.wy-side-nav-search input[type="text"]:focus {
+ border-color: rgb(255 255 255 / 0.3);
+ outline: none;
+}
+
+/* Section labels: sentence case, muted, never uppercase */
+.wy-menu-vertical p.caption,
+.wy-menu-vertical header {
+ color: var(--sp-side-muted);
+ font-family: var(--sp-sans);
+ font-size: 13px;
+ font-weight: 500;
+ text-transform: none;
+ letter-spacing: 0;
+ margin-top: 18px;
+ padding: 0 1.25em;
+ line-height: 32px;
+}
+
+.wy-menu-vertical .caption-text {
+ color: inherit;
+ text-transform: none;
+}
+
+.wy-menu-vertical a,
+.wy-menu-vertical li.current a,
+.wy-menu-vertical li.toctree-l2.current > a,
+.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a,
+.wy-menu-vertical li.toctree-l3.current > a,
+.wy-menu-vertical li.toctree-l3.current li.toctree-l4 > a {
+ color: var(--sp-side-text);
+ background: transparent;
+ border: 0;
+ font-size: 14px;
+ line-height: 1.45;
+}
+
+.wy-menu-vertical a {
+ padding-top: 0.45em;
+ padding-bottom: 0.45em;
+}
+
+.wy-menu-vertical a:hover,
+.wy-menu-vertical li.current a:hover,
+.wy-menu-vertical li.toctree-l2.current > a:hover,
+.wy-menu-vertical li.toctree-l3.current > a:hover {
+ background: var(--sp-side-raised);
+ color: #ffffff;
+}
+
+.wy-menu-vertical li.current,
+.wy-menu-vertical li.toctree-l2.current,
+.wy-menu-vertical li.toctree-l3.current,
+.wy-menu-vertical li.toctree-l2.current > a,
+.wy-menu-vertical li.toctree-l3.current > a {
+ background: transparent;
+}
+
+/* The open section sits on a slightly raised panel; the page you are on is acid */
+.wy-menu-vertical li.toctree-l1.current {
+ background: var(--sp-side-raised);
+}
+
+.wy-menu-vertical li.toctree-l1.current > a {
+ color: #ffffff;
+ font-weight: 600;
+ border: 0;
+}
+
+.wy-menu-vertical li.current > a.current,
+.wy-menu-vertical a.current,
+.wy-menu-vertical li.on a {
+ color: var(--sp-acid);
+ background: transparent;
+}
+
+.wy-menu-vertical li button.toctree-expand,
+.wy-menu-vertical li.current > a button.toctree-expand,
+.wy-menu-vertical li.on a button.toctree-expand {
+ color: var(--sp-side-muted);
+}
+
+.wy-menu-vertical li.current > a:hover button.toctree-expand,
+.wy-menu-vertical a:hover button.toctree-expand {
+ color: #ffffff;
+}
+
+/* Mobile top bar */
+.wy-nav-top {
+ background: var(--sp-graphite);
+ font-family: var(--sp-display);
+ font-weight: 700;
+}
+
+.wy-nav-top a,
+.wy-nav-top a:visited {
+ color: #f4f5f1;
+}
+
+/* -- Breadcrumbs, buttons, footer ----------------------------------------- */
+
+.wy-breadcrumbs,
+.wy-breadcrumbs li a,
+.wy-breadcrumbs-aside a {
+ color: var(--sp-muted);
+ font-size: 14px;
+}
+
+.wy-breadcrumbs li a:hover,
+.wy-breadcrumbs-aside a:hover {
+ color: var(--sp-ink);
+}
+
+.btn,
+.btn-neutral,
+.btn-neutral:visited {
+ background: #ffffff !important;
+ color: var(--sp-ink) !important;
+ border: 1px solid var(--sp-line-strong);
+ border-radius: 8px;
+ box-shadow: none;
+ font-weight: 500;
+ font-size: 14px;
+ padding: 9px 16px;
+}
+
+.btn:hover,
+.btn-neutral:hover {
+ border-color: var(--sp-ink);
+ background: #ffffff !important;
+ color: var(--sp-ink) !important;
+}
+
+footer,
+footer p,
+footer span.commit code,
+.rst-content footer {
+ color: var(--sp-muted);
+ font-size: 14px;
+}
+
+/* -- Code ------------------------------------------------------------------- */
+
+.rst-content pre,
+.rst-content code,
+.rst-content tt,
+.rst-content kbd,
+.rst-content samp,
+code,
+pre {
+ font-family: var(--sp-mono);
+}
+
+.rst-content div[class^="highlight"],
+.rst-content pre.literal-block {
+ background: var(--sp-chalk-soft);
+ border: 1px solid var(--sp-line);
+ border-radius: 12px;
+ overflow: hidden;
+}
+
+.rst-content div[class^="highlight"] div[class^="highlight"],
+.rst-content .highlight {
+ background: transparent;
+ border: 0;
+}
+
+.rst-content div[class^="highlight"] pre,
+.rst-content pre.literal-block {
+ font-size: 13.5px;
+ line-height: 1.6;
+ padding: 14px 18px;
+}
+
+/* Inline code: ink on chalk, not the theme's red on white */
+.rst-content code.literal,
+.rst-content tt.literal,
+.rst-content code,
+.rst-content tt {
+ color: var(--sp-ink);
+ background: var(--sp-chalk);
+ border: 0;
+ border-radius: 5px;
+ padding: 1px 5px;
+ font-size: 0.875em;
+ white-space: normal;
+}
+
+.rst-content a code.literal,
+.rst-content a tt.literal,
+.rst-content code.xref,
+.rst-content tt.xref,
+.rst-content a code.xref {
+ color: var(--sp-accent);
+ font-weight: 400;
+}
+
+.rst-content div[class^="highlight"] pre code,
+.rst-content pre code {
+ background: transparent;
+ padding: 0;
+}
+
+/* -- Admonitions: soft panels, the type in the title ------------------------ */
+
+.rst-content .admonition,
+.rst-content .note,
+.rst-content .seealso,
+.rst-content .tip,
+.rst-content .hint,
+.rst-content .important,
+.rst-content .attention,
+.rst-content .caution,
+.rst-content .warning,
+.rst-content .danger,
+.rst-content .error {
+ background: var(--sp-chalk-soft);
+ border-radius: 12px;
+ padding: 16px 20px;
+ margin-bottom: 24px;
+}
+
+.rst-content .admonition .admonition-title,
+.rst-content .note .admonition-title,
+.rst-content .seealso .admonition-title,
+.rst-content .tip .admonition-title,
+.rst-content .hint .admonition-title,
+.rst-content .important .admonition-title,
+.rst-content .attention .admonition-title,
+.rst-content .caution .admonition-title,
+.rst-content .warning .admonition-title,
+.rst-content .danger .admonition-title,
+.rst-content .error .admonition-title {
+ background: transparent;
+ color: var(--sp-ink);
+ font-family: var(--sp-sans);
+ font-weight: 600;
+ font-size: 15px;
+ margin: 0 0 6px;
+ padding: 0;
+}
+
+.rst-content .admonition .admonition-title::before,
+.rst-content .note .admonition-title::before,
+.rst-content .seealso .admonition-title::before,
+.rst-content .tip .admonition-title::before,
+.rst-content .hint .admonition-title::before,
+.rst-content .important .admonition-title::before {
+ color: var(--sp-accent);
+}
+
+.rst-content .admonition > :last-child {
+ margin-bottom: 0;
+}
+
+.rst-content .tip,
+.rst-content .hint {
+ background: #eef5ec;
+}
+
+.rst-content .important {
+ background: #eef3f0;
+}
+
+.rst-content .attention,
+.rst-content .caution,
+.rst-content .warning {
+ background: #fbf5e6;
+}
+
+.rst-content .attention .admonition-title::before,
+.rst-content .caution .admonition-title::before,
+.rst-content .warning .admonition-title::before {
+ color: #9a6700;
+}
+
+.rst-content .danger,
+.rst-content .error {
+ background: #fcefed;
+}
+
+.rst-content .danger .admonition-title::before,
+.rst-content .error .admonition-title::before {
+ color: #b42318;
+}
+
+/* -- Tables: hairline rows, no zebra --------------------------------------- */
+
+.rst-content table.docutils,
+.wy-table-bordered-all,
+.rst-content table.field-list {
+ border: 0;
+}
+
+.rst-content table.docutils td,
+.rst-content table.docutils th,
+html.writer-html5 .rst-content table.docutils td,
+html.writer-html5 .rst-content table.docutils th,
+.wy-table-bordered-all td,
+.wy-table-bordered-all th {
+ border: 0;
+ border-bottom: 1px solid var(--sp-line);
+ background: transparent;
+ font-size: 15px;
+ padding: 10px 14px;
+}
+
+.rst-content table.docutils thead th,
+html.writer-html5 .rst-content table.docutils thead th,
+.wy-table thead th {
+ border-bottom: 1px solid var(--sp-line-strong);
+ color: var(--sp-ink);
+ font-weight: 600;
+ text-align: left;
+}
+
+.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,
+.wy-table-backed,
+.wy-table-odd td,
+.wy-table-striped tr:nth-child(2n-1) td {
+ background: transparent;
+}
+
+.rst-content table.docutils caption {
+ color: var(--sp-muted);
+ font-size: 14px;
+}
+
+/* -- sphinx-design: tabs and buttons in ink and forest, not the default blue */
+
+:root {
+ --sd-color-primary: var(--sp-accent);
+ --sd-color-primary-highlight: var(--sp-ink);
+ --sd-color-primary-text: #ffffff;
+ --sd-color-tabs-label-active: var(--sp-ink);
+ --sd-color-tabs-label-hover: var(--sp-ink);
+ --sd-color-tabs-label-inactive: var(--sp-muted);
+ --sd-color-tabs-underline-active: var(--sp-ink);
+ --sd-color-tabs-underline-hover: var(--sp-line-strong);
+ --sd-color-tabs-underline-inactive: transparent;
+ --sd-color-tabs-underline: var(--sp-line);
+ --sd-color-tabs-overline: var(--sp-line);
+ --sd-color-card-border: transparent;
+ --sd-color-card-border-hover: transparent;
+}
+
+.sd-tab-set > label {
+ font-family: var(--sp-sans);
+ font-weight: 500;
+}
+
+/* -- Cards (sphinx-design): chalk panels, no shadow ------------------------ */
+
+/* Grids line up with the text, code blocks and headings around them */
+.rst-content .sd-container-fluid {
+ padding-left: 0;
+ padding-right: 0;
+}
+
+.sd-card {
+ background: var(--sp-chalk);
+ border: 0;
+ border-radius: 16px;
+ box-shadow: none !important;
+}
+
+.sd-card-hover:hover {
+ transform: none;
+ background: #e6e6e1;
+ border-color: transparent;
+}
+
+.sd-card-body {
+ padding: 22px 24px;
+}
+
+.sd-card-title {
+ font-family: var(--sp-display);
+ font-weight: 700;
+ font-size: 1.15rem;
+ letter-spacing: -0.03em;
+ color: var(--sp-ink);
+}
+
+.sd-card-text {
+ color: var(--sp-body);
+}
+
+.sd-shadow-sm,
+.sd-shadow-md,
+.sd-shadow-lg {
+ box-shadow: none !important;
+}
+
+/* -- DataTables (sphinx-needs): fit the page and match the tables above ---- */
+
.dataTables_wrapper {
width: 100%;
overflow-x: auto;
@@ -33,50 +617,36 @@ table.dataTable td {
max-width: 100%;
}
-/* Inspiration from Furo / Sphinx-Needs modern styling */
:root {
- --sn-color-need-border: #e0e0e0;
- --sn-color-need-row-border: #f5f5f5;
- --sn-color-need-bg: #fafafa;
- --sn-color-need-bg-head: #f0f0f0;
- --sn-color-datatable-label: #666;
- --sn-color-datatable-btn-border: #ccc;
+ --sn-color-need-border: var(--sp-line-strong);
+ --sn-color-need-row-border: var(--sp-line);
+ --sn-color-need-bg: var(--sp-chalk-soft);
+ --sn-color-need-bg-head: var(--sp-chalk);
+ --sn-color-datatable-label: var(--sp-muted);
+ --sn-color-datatable-btn-border: var(--sp-line-strong);
}
-/* Apply these variables to the DataTable if Sphinx-Needs uses them,
- or manually apply them to match the look */
-
table.dataTable thead th {
- background-color: #f0f0f0; /* Fallback */
- background-color: var(--sn-color-need-bg-head);
- border-bottom: 2px solid #e0e0e0;
- border-bottom: 2px solid var(--sn-color-need-border);
- color: #333;
- font-weight: bold;
+ background-color: transparent;
+ border-bottom: 1px solid var(--sp-line-strong);
+ color: var(--sp-ink);
+ font-weight: 600;
padding: 10px !important;
}
table.dataTable tbody td {
- border-bottom: 1px solid #f5f5f5;
- border-bottom: 1px solid var(--sn-color-need-row-border);
+ border-bottom: 1px solid var(--sp-line);
padding: 8px !important;
}
table.dataTable.no-footer {
- border-bottom: 1px solid #e0e0e0;
- border-bottom: 1px solid var(--sn-color-need-border);
-}
-
-/* Improve search/filter inputs in DataTables */
-.dataTables_filter input {
- border: 1px solid #ccc;
- border-radius: 4px;
- padding: 4px 8px;
+ border-bottom: 1px solid var(--sp-line-strong);
}
+/* Search/filter inputs in DataTables */
+.dataTables_filter input,
.dataTables_length select {
- border: 1px solid #ccc;
- border-radius: 4px;
- padding: 4px;
+ border: 1px solid var(--sp-line-strong);
+ border-radius: 8px;
+ padding: 4px 8px;
}
-
diff --git a/docs/_static/favicon.svg b/docs/_static/favicon.svg
new file mode 100644
index 000000000..cc1dc6ae3
--- /dev/null
+++ b/docs/_static/favicon.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/docs/_static/fonts/IBMPlexMono-Regular.woff2 b/docs/_static/fonts/IBMPlexMono-Regular.woff2
new file mode 100644
index 000000000..8bdb4c4b3
Binary files /dev/null and b/docs/_static/fonts/IBMPlexMono-Regular.woff2 differ
diff --git a/docs/_static/fonts/OFL-IBMPlexMono.txt b/docs/_static/fonts/OFL-IBMPlexMono.txt
new file mode 100644
index 000000000..670c6c04e
--- /dev/null
+++ b/docs/_static/fonts/OFL-IBMPlexMono.txt
@@ -0,0 +1,93 @@
+Copyright © 2017 IBM Corp. with Reserved Font Name "Plex"
+
+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/docs/_static/fonts/OFL-Inter.txt b/docs/_static/fonts/OFL-Inter.txt
new file mode 100644
index 000000000..9b2ca37b3
--- /dev/null
+++ b/docs/_static/fonts/OFL-Inter.txt
@@ -0,0 +1,92 @@
+Copyright (c) 2016 The Inter Project Authors (https://github.com/rsms/inter)
+
+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 AND 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/docs/_static/fonts/OFL-Oxanium.txt b/docs/_static/fonts/OFL-Oxanium.txt
new file mode 100644
index 000000000..38913c094
--- /dev/null
+++ b/docs/_static/fonts/OFL-Oxanium.txt
@@ -0,0 +1,93 @@
+Copyright 2019 The Oxanium Project Authors (https://github.com/sevmeyer/oxanium)
+
+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:
+https://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/docs/_static/fonts/inter-latin.woff2 b/docs/_static/fonts/inter-latin.woff2
new file mode 100644
index 000000000..91dc3e852
Binary files /dev/null and b/docs/_static/fonts/inter-latin.woff2 differ
diff --git a/docs/_static/fonts/oxanium-latin.woff2 b/docs/_static/fonts/oxanium-latin.woff2
new file mode 100644
index 000000000..fed0eb7af
Binary files /dev/null and b/docs/_static/fonts/oxanium-latin.woff2 differ
diff --git a/docs/_static/selfpatch-wordmark.svg b/docs/_static/selfpatch-wordmark.svg
new file mode 100644
index 000000000..c5c08c748
--- /dev/null
+++ b/docs/_static/selfpatch-wordmark.svg
@@ -0,0 +1,216 @@
+
\ No newline at end of file
diff --git a/docs/conf.py b/docs/conf.py
index 5338c8482..f6703420a 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -128,6 +128,9 @@
html_static_path = ['_static']
html_css_files = ['custom.css']
html_title = f'{project} Documentation'
+# The selfpatch.ai wordmark and app icon; custom.css carries the rest of the look
+html_logo = '_static/selfpatch-wordmark.svg'
+html_favicon = '_static/favicon.svg'
html_theme_options = {
'prev_next_buttons_location': 'bottom',
diff --git a/docs/index.rst b/docs/index.rst
index 1adf85ec5..128cbecf1 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -17,6 +17,7 @@ Quick Links
-----------
.. grid:: 2
+ :gutter: 4
.. grid-item-card:: 🚀 Getting Started
:link: getting_started