diff --git a/docs/Community/CODE_OF_CONDUCT.md b/docs/Community/CODE_OF_CONDUCT.md index fed50819..500fddb5 100644 --- a/docs/Community/CODE_OF_CONDUCT.md +++ b/docs/Community/CODE_OF_CONDUCT.md @@ -60,7 +60,7 @@ representative at an online or offline event. Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at -contact@formingworlds.space. +dev@proteus-framework.org. All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the diff --git a/docs/Community/contact.md b/docs/Community/contact.md index 0b09d534..85def315 100644 --- a/docs/Community/contact.md +++ b/docs/Community/contact.md @@ -4,6 +4,6 @@ We encourage you to reach out! Choose the most appropriate channel below. | Channel | Use for | |---------|---------| -| [Forming Worlds Discussions](https://github.com/orgs/FormingWorlds/discussions) | Questions, installation help, feature suggestions | +| [GitHub Discussions](https://github.com/orgs/FormingWorlds/discussions) | Questions, installation help, feature suggestions | | [GitHub Issues](https://github.com/FormingWorlds/SPIDER/issues) | Bug reports, specific feature requests | -| [proteus_dev@formingworlds.space](mailto:proteus_dev@formingworlds.space) | General enquiries | +| [dev@proteus-framework.org](mailto:dev@proteus-framework.org) | General enquiries | diff --git a/docs/assets/PROTEUS_black_on_white_logo_only.png b/docs/assets/PROTEUS_black_on_white_logo_only.png deleted file mode 100644 index fe490485..00000000 Binary files a/docs/assets/PROTEUS_black_on_white_logo_only.png and /dev/null differ diff --git a/docs/assets/PROTEUS_white_on_black.png b/docs/assets/PROTEUS_white_on_black.png deleted file mode 100644 index 14e5d75f..00000000 Binary files a/docs/assets/PROTEUS_white_on_black.png and /dev/null differ diff --git a/docs/assets/PROTEUS_white_on_black_logo_only.png b/docs/assets/PROTEUS_white_on_black_logo_only.png deleted file mode 100644 index fbd6d489..00000000 Binary files a/docs/assets/PROTEUS_white_on_black_logo_only.png and /dev/null differ diff --git a/docs/assets/favicon-light.png b/docs/assets/favicon-light.png new file mode 100644 index 00000000..6db0ca63 Binary files /dev/null and b/docs/assets/favicon-light.png differ diff --git a/docs/assets/favicon.png b/docs/assets/favicon.png new file mode 100644 index 00000000..e1872976 Binary files /dev/null and b/docs/assets/favicon.png differ diff --git a/docs/assets/favicon.svg b/docs/assets/favicon.svg new file mode 100644 index 00000000..d61ea98d --- /dev/null +++ b/docs/assets/favicon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/docs/assets/glyph_phase_dark.png b/docs/assets/glyph_phase_dark.png new file mode 100644 index 00000000..f42b5356 Binary files /dev/null and b/docs/assets/glyph_phase_dark.png differ diff --git a/docs/index.md b/docs/index.md index 50948372..d8643c5a 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,21 +1,17 @@ # SPIDER -

- SPIDER logo -

+[![License](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) +[![Docs](https://img.shields.io/github/actions/workflow/status/FormingWorlds/SPIDER/docs.yaml?branch=main&label=Docs)](https://proteus-framework.org/SPIDER/) +[![Coverage](https://img.shields.io/codecov/c/github/FormingWorlds/SPIDER?label=coverage&logo=codecov)](https://app.codecov.io/gh/FormingWorlds/SPIDER) +[![Unit Tests](https://img.shields.io/github/actions/workflow/status/FormingWorlds/SPIDER/ci.yml?branch=main&label=Unit%20Tests)](https://github.com/FormingWorlds/SPIDER/actions/workflows/ci.yml) +[![Integration Tests](https://img.shields.io/github/actions/workflow/status/FormingWorlds/SPIDER/nightly.yml?branch=main&label=Integration%20Tests)](https://github.com/FormingWorlds/SPIDER/actions/workflows/nightly.yml) + +**SPIDER** is the interior dynamics module of the [PROTEUS](https://proteus-framework.org/PROTEUS) coupled atmosphere-interior evolution framework, simulating planetary interior dynamics with extreme rheology. It is a 1-D parameterised interior dynamics code for rocky planets with molten and/or solid interiors, with support for volatile cycling, redox reactions, and radiative transfer in the atmosphere.

- License - Docs - codecov - Unit Tests - Integration Tests + SPIDER logo

-**Simulating Planetary Interior Dynamics with Extreme Rheology** - -SPIDER is a 1-D parameterised interior dynamics code for rocky planets with molten and/or solid interiors and support for volatile cycling, redox reactions, and radiative transfer in the atmosphere. - !!! note This documentation describes the version of SPIDER as part of the [PROTEUS Framework](https://proteus-framework.org/PROTEUS). For the original SPIDER code, see [djbower/SPIDER](https://github.com/djbower/spider). diff --git a/docs/javascripts/header-links.js b/docs/javascripts/header-links.js index 7f1f768b..9d976cf1 100644 --- a/docs/javascripts/header-links.js +++ b/docs/javascripts/header-links.js @@ -1,22 +1,21 @@ -console.log("header-links.js loaded"); - function wire() { const homepage = "https://proteus-framework.org/"; const logo = document.querySelector(".md-header__button.md-logo"); - if (logo) logo.href = homepage; + let docsHome = location.origin + "/"; + if (logo) { + // The theme points the logo at this site's own home page. Remember that + // before repointing the logo at the framework home, so the title can use + // it and no page has to know its own name. + if (!logo.dataset.docsHome) logo.dataset.docsHome = logo.href; + docsHome = logo.dataset.docsHome; + logo.href = homepage; + } const title = document.querySelector(".md-header__title[data-md-component='header-title']"); - if (title && !title.dataset.spiderWired) { - title.dataset.spiderWired = "1"; + if (title && !title.dataset.titleWired) { + title.dataset.titleWired = "1"; title.style.cursor = "pointer"; - - // always go to /SPIDER/ when hosted there, else "/" (mkdocs serve) - const href = location.href; - const docsHome = href.includes("/SPIDER/") - ? href.split("/SPIDER/")[0] + "/SPIDER/" - : location.origin + "/"; - title.addEventListener("click", (e) => { if (e.target.closest("a, button, input, label")) return; window.location.assign(docsHome); diff --git a/docs/overrides/main.html b/docs/overrides/main.html index be8f24d8..62674901 100644 --- a/docs/overrides/main.html +++ b/docs/overrides/main.html @@ -5,11 +5,11 @@ + + {% endblock %} diff --git a/docs/overrides/partials/extrahead.html b/docs/overrides/partials/extrahead.html deleted file mode 100644 index 31c41706..00000000 --- a/docs/overrides/partials/extrahead.html +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/proteus_framework.md b/docs/proteus_framework.md index 4290fada..bcec799f 100644 --- a/docs/proteus_framework.md +++ b/docs/proteus_framework.md @@ -1,8 +1,8 @@

- - + PROTEUS + PROTEUS

diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index af97b0d7..49cdb28f 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -1,20 +1,225 @@ -.mod-diagram { - width: 100%; - height: auto; - aspect-ratio: 12.1 / 9; /* specific aspect ratio for the module diagram */ - display: none; -} -/* Light mode: show light diagram */ -[data-md-color-scheme="default"] .mod-diagram--light { - display: block; +/* ============================================================ + PROTEUS — Thermocline theme for zensical / Material for MkDocs + Drop-in: docs/stylesheets/extra.css + ------------------------------------------------------------ + mkdocs.yml: + theme: + name: zensical # or material + palette: + - media: "(prefers-color-scheme: dark)" + scheme: slate # dark-first + toggle: { icon: material/brightness-7, name: Light mode } + - media: "(prefers-color-scheme: light)" + scheme: default + toggle: { icon: material/brightness-4, name: Dark mode } + font: false # fonts loaded below + logo: assets/glyph_phase_dark.png + favicon: assets/favicon.svg + extra_css: + - stylesheets/extra.css + Copy logo/glyph/glyph_phase_dark.png (+ _light) and + logo/favicon/favicon.svg into docs/assets/, + and from this repo's fonts/ folder copy fonts.css, OFL.txt, and the + three family folders into docs/stylesheets/fonts/ (the import below + loads them; no third-party font requests). Leave fonts/README.md + behind so mkdocs does not render it as a page. + ============================================================ */ + +@import url("fonts/fonts.css"); + +:root { + /* brand */ + --pt-magma: #E23D28; + --pt-mantle: #8E1F12; + --pt-crimson: #C2362B; + --pt-ocean: #1B6FA8; + --pt-abyss: #14406B; + --pt-azure: #4FA3D9; + --pt-ice: #A8D4E8; + --pt-void: #05070B; + --pt-basalt: #0E131B; + --pt-line-d: #1A2230; + + /* accents: sporadic highlight and extra data-series range. Solar is the + bright tone for dark surfaces; the light block below swaps in the deep + one, which is also available by name for a mark that must stay deep. */ + --pt-solar: #E0A32E; + --pt-solar-deep: #C8860F; + --pt-verdant: #57A05C; + + /* module domains: one hue per physical domain, identical in every artifact + of the ecosystem, so a reader who learns the mapping on one page carries + it to the next. A module takes the colour of the domain it acts on. */ + --pt-dom-interior: #E23D28; /* SPIDER, Aragog, Zalmoxis */ + --pt-dom-outgassing: #A03123; /* CALLIOPE, Atmodeller */ + --pt-dom-tidal: #593E74; /* LovePy, Obliqua */ + --pt-dom-chem: #1B6FA8; /* VULCAN, ZEPHYRUS */ + --pt-dom-atmos: #4FA3D9; /* AGNI, JANUS */ + --pt-dom-stellar: #E0A32E; /* MORS; deepens on light, see the light block */ + --pt-dom-accretion: #A38F7A; /* Morrigan */ + + /* phase ramp, magma through void to ocean, for data running molten to + frozen. Ordered, so an index maps to a position along the ramp. */ + --pt-p1: #E23D28; + --pt-p2: #8E1F12; + --pt-p3: #3A120C; + --pt-p4: #05070B; + --pt-p5: #0E2A45; + --pt-p6: #14406B; + --pt-p7: #1B6FA8; + --pt-p8: #4FA3D9; + --pt-p9: #A8D4E8; + + /* status, held apart from the domain hues so a red module and a failure + never have to be told apart by colour alone */ + --pt-positive: #2E8B57; + --pt-warning: #C77726; + --pt-danger: #C2362B; + --pt-info: #1B6FA8; + + --md-text-font: "Instrument Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; + --md-code-font: "Spline Sans Mono", ui-monospace, "SF Mono", Menlo, monospace; +} + +/* ---------- DARK (scheme: slate) — the primary mode ---------- */ +[data-md-color-scheme="slate"] { + --md-default-bg-color: var(--pt-void); + --md-default-fg-color: #E9EEF2; + --md-default-fg-color--light: #9FB0BE; + --md-default-fg-color--lighter: #5A6B7A; + --md-default-fg-color--lightest: #1A2230; + + --md-primary-fg-color: var(--pt-void); + --md-primary-bg-color: #E9EEF2; + --md-accent-fg-color: var(--pt-ice); + + --md-typeset-color: #C6D0D9; + --md-typeset-a-color: var(--pt-azure); + + --md-code-bg-color: #04060A; + --md-code-fg-color: #B8C6D2; + --md-code-hl-keyword-color: var(--pt-magma); + --md-code-hl-string-color: var(--pt-azure); + --md-code-hl-number-color: var(--pt-ice); + --md-code-hl-comment-color: #5A6B7A; + --md-code-hl-function-color: var(--pt-ice); + --md-code-hl-name-color: #C6D0D9; + + --md-admonition-bg-color: var(--pt-basalt); + --md-footer-bg-color: var(--pt-basalt); + --md-footer-bg-color--dark: var(--pt-void); +} + +/* ---------- LIGHT (scheme: default) — the mirror ---------- */ +[data-md-color-scheme="default"] { + --md-default-bg-color: #F2F5F7; + --md-default-fg-color: #10151B; + --md-default-fg-color--light: #3E4A55; + --md-default-fg-color--lighter: #7A8894; + --md-default-fg-color--lightest: #D2DAE1; + + --md-primary-fg-color: #10151B; /* header bar stays ink on light */ + --md-primary-bg-color: #F2F5F7; + --md-accent-fg-color: var(--pt-abyss); + + --md-typeset-color: #2A343D; + --md-typeset-a-color: var(--pt-ocean); + + --md-code-bg-color: #E9EEF3; + --md-code-fg-color: #22303B; + --md-code-hl-keyword-color: var(--pt-crimson); + --md-code-hl-string-color: var(--pt-abyss); + --md-code-hl-number-color: var(--pt-ocean); + --md-code-hl-comment-color: #7A8894; + + /* the one domain colour that differs by scheme: the bright tone reaches + only 2.0:1 on Paper, and deepening lifts it to 2.8:1 */ + --pt-solar: #C8860F; + --pt-dom-stellar: #C8860F; +} + +/* ---------- typography ---------- */ +.md-typeset h1, .md-typeset h2, .md-typeset h3 { + font-family: "Sora", var(--md-text-font); + font-weight: 700; + letter-spacing: -0.02em; +} +.md-typeset h1 { font-weight: 800; } +.md-header__topic, .md-header__title { + font-family: "Sora", var(--md-text-font); + font-weight: 800; + letter-spacing: 0.02em; +} + +/* tracked mono labels for nav sections */ +.md-nav__title, .md-nav--secondary .md-nav__title { + font-family: var(--md-code-font); + font-size: 0.62rem; + letter-spacing: 0.18em; + text-transform: uppercase; +} + +/* ---------- structure: hairlines, active ticks ---------- */ +.md-header { border-bottom: 1px solid var(--pt-line-d); } +[data-md-color-scheme="default"] .md-header { border-bottom-color: #D2DAE1; } + +.md-nav__item .md-nav__link--active { + color: var(--pt-azure); + border-left: 2px solid var(--pt-magma); + padding-left: 0.5rem; + margin-left: -0.6rem; + background: linear-gradient(90deg, rgba(226,61,40,0.06), transparent); +} +[data-md-color-scheme="default"] .md-nav__item .md-nav__link--active { + color: var(--pt-ocean); + border-left-color: var(--pt-crimson); +} + +.md-typeset h2 { border-top: 1px solid var(--pt-line-d); padding-top: 0.8em; } +[data-md-color-scheme="default"] .md-typeset h2 { border-top-color: #D2DAE1; } + +/* code blocks: magma spine */ +.md-typeset pre > code { border-radius: 4px; } +.md-typeset pre { border-left: 3px solid var(--pt-magma); border-radius: 4px; } + +/* tabs: active = magma underline */ +.md-tabs__link--active { border-bottom: 2px solid var(--pt-magma); } + +/* admonitions: flat, mono titles */ +.md-typeset .admonition, .md-typeset details { + border-width: 1px; + border-radius: 4px; + box-shadow: none; +} +.md-typeset .admonition-title, .md-typeset summary { + font-family: var(--md-code-font); + font-size: 0.62rem; + letter-spacing: 0.14em; + text-transform: uppercase; +} +.md-typeset .admonition.note, .md-typeset .admonition.info { + border-color: rgba(27,111,168,0.4); +} +.md-typeset .admonition.warning, .md-typeset .admonition.danger { + border-color: rgba(226,61,40,0.4); +} + +/* tables */ +.md-typeset table:not([class]) th { + font-family: var(--md-code-font); + font-size: 0.62rem; + letter-spacing: 0.12em; + text-transform: uppercase; } -/* Dark mode: show dark diagram (Material's default dark scheme is "slate") */ -[data-md-color-scheme="slate"] .mod-diagram--dark { +/* footer phase band */ +.md-footer-meta { position: relative; } +.md-footer-meta::before { + content: ""; display: block; + height: 5px; + background: linear-gradient(90deg, #E23D28, #8E1F12 25%, #05070B 50%, #14406B 75%, #4FA3D9 92%, #A8D4E8); } -/* Remove underline from links that contain only an image */ -.md-typeset p a:has(> img) { - text-decoration: none; -} \ No newline at end of file +/* focus */ +:focus-visible { outline: 2px solid var(--pt-magma); outline-offset: 2px; } diff --git a/docs/stylesheets/fonts/OFL.txt b/docs/stylesheets/fonts/OFL.txt new file mode 100644 index 00000000..a270166a --- /dev/null +++ b/docs/stylesheets/fonts/OFL.txt @@ -0,0 +1,95 @@ +Copyright 2019 The Sora Project Authors (https://github.com/sora-xor/sora-font) +Copyright 2022 The Instrument Sans Project Authors (https://github.com/Instrument/instrument-sans) +Copyright 2022 The Spline Sans Mono Project Authors (https://github.com/SorkinType/SplineSansMono) + +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/stylesheets/fonts/fonts.css b/docs/stylesheets/fonts/fonts.css new file mode 100644 index 00000000..ee64b9de --- /dev/null +++ b/docs/stylesheets/fonts/fonts.css @@ -0,0 +1,68 @@ +/* ============================================================ + PROTEUS FRAMEWORK — THERMOCLINE SELF-HOSTED FONTS + Sora (display) · Instrument Sans (body/UI) · Spline Sans Mono + All faces are SIL OFL 1.1; see OFL.txt in this folder. + Family names match the stacks in ../tokens/tokens.css. + ============================================================ */ + +/* ——— Sora — display ——— */ +@font-face { + font-family: "Sora"; + src: url("sora/Sora-SemiBold.woff2") format("woff2"), url("sora/Sora-SemiBold.ttf") format("truetype"); + font-weight: 600; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "Sora"; + src: url("sora/Sora-Bold.woff2") format("woff2"), url("sora/Sora-Bold.ttf") format("truetype"); + font-weight: 700; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "Sora"; + src: url("sora/Sora-ExtraBold.woff2") format("woff2"), url("sora/Sora-ExtraBold.ttf") format("truetype"); + font-weight: 800; + font-style: normal; + font-display: swap; +} + +/* ——— Instrument Sans — body / UI ——— */ +@font-face { + font-family: "Instrument Sans"; + src: url("instrument-sans/InstrumentSans-Regular.woff2") format("woff2"), url("instrument-sans/InstrumentSans-Regular.ttf") format("truetype"); + font-weight: 400; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "Instrument Sans"; + src: url("instrument-sans/InstrumentSans-Medium.woff2") format("woff2"), url("instrument-sans/InstrumentSans-Medium.ttf") format("truetype"); + font-weight: 500; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "Instrument Sans"; + src: url("instrument-sans/InstrumentSans-SemiBold.woff2") format("woff2"), url("instrument-sans/InstrumentSans-SemiBold.ttf") format("truetype"); + font-weight: 600; + font-style: normal; + font-display: swap; +} + +/* ——— Spline Sans Mono — code, labels, metadata ——— */ +@font-face { + font-family: "Spline Sans Mono"; + src: url("spline-sans-mono/SplineSansMono-Regular.woff2") format("woff2"), url("spline-sans-mono/SplineSansMono-Regular.ttf") format("truetype"); + font-weight: 400; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "Spline Sans Mono"; + src: url("spline-sans-mono/SplineSansMono-Medium.woff2") format("woff2"), url("spline-sans-mono/SplineSansMono-Medium.ttf") format("truetype"); + font-weight: 500; + font-style: normal; + font-display: swap; +} diff --git a/docs/stylesheets/fonts/instrument-sans/InstrumentSans-Medium.ttf b/docs/stylesheets/fonts/instrument-sans/InstrumentSans-Medium.ttf new file mode 100644 index 00000000..7454de37 Binary files /dev/null and b/docs/stylesheets/fonts/instrument-sans/InstrumentSans-Medium.ttf differ diff --git a/docs/stylesheets/fonts/instrument-sans/InstrumentSans-Medium.woff2 b/docs/stylesheets/fonts/instrument-sans/InstrumentSans-Medium.woff2 new file mode 100644 index 00000000..cfe7c813 Binary files /dev/null and b/docs/stylesheets/fonts/instrument-sans/InstrumentSans-Medium.woff2 differ diff --git a/docs/stylesheets/fonts/instrument-sans/InstrumentSans-Regular.ttf b/docs/stylesheets/fonts/instrument-sans/InstrumentSans-Regular.ttf new file mode 100644 index 00000000..538b6bf2 Binary files /dev/null and b/docs/stylesheets/fonts/instrument-sans/InstrumentSans-Regular.ttf differ diff --git a/docs/stylesheets/fonts/instrument-sans/InstrumentSans-Regular.woff2 b/docs/stylesheets/fonts/instrument-sans/InstrumentSans-Regular.woff2 new file mode 100644 index 00000000..7acf92b7 Binary files /dev/null and b/docs/stylesheets/fonts/instrument-sans/InstrumentSans-Regular.woff2 differ diff --git a/docs/stylesheets/fonts/instrument-sans/InstrumentSans-SemiBold.ttf b/docs/stylesheets/fonts/instrument-sans/InstrumentSans-SemiBold.ttf new file mode 100644 index 00000000..525fdb23 Binary files /dev/null and b/docs/stylesheets/fonts/instrument-sans/InstrumentSans-SemiBold.ttf differ diff --git a/docs/stylesheets/fonts/instrument-sans/InstrumentSans-SemiBold.woff2 b/docs/stylesheets/fonts/instrument-sans/InstrumentSans-SemiBold.woff2 new file mode 100644 index 00000000..dfaa2ea2 Binary files /dev/null and b/docs/stylesheets/fonts/instrument-sans/InstrumentSans-SemiBold.woff2 differ diff --git a/docs/stylesheets/fonts/sora/Sora-Bold.ttf b/docs/stylesheets/fonts/sora/Sora-Bold.ttf new file mode 100644 index 00000000..ffd347bf Binary files /dev/null and b/docs/stylesheets/fonts/sora/Sora-Bold.ttf differ diff --git a/docs/stylesheets/fonts/sora/Sora-Bold.woff2 b/docs/stylesheets/fonts/sora/Sora-Bold.woff2 new file mode 100644 index 00000000..d398e91d Binary files /dev/null and b/docs/stylesheets/fonts/sora/Sora-Bold.woff2 differ diff --git a/docs/stylesheets/fonts/sora/Sora-ExtraBold.ttf b/docs/stylesheets/fonts/sora/Sora-ExtraBold.ttf new file mode 100644 index 00000000..c4a3f7f8 Binary files /dev/null and b/docs/stylesheets/fonts/sora/Sora-ExtraBold.ttf differ diff --git a/docs/stylesheets/fonts/sora/Sora-ExtraBold.woff2 b/docs/stylesheets/fonts/sora/Sora-ExtraBold.woff2 new file mode 100644 index 00000000..bd1f2068 Binary files /dev/null and b/docs/stylesheets/fonts/sora/Sora-ExtraBold.woff2 differ diff --git a/docs/stylesheets/fonts/sora/Sora-SemiBold.ttf b/docs/stylesheets/fonts/sora/Sora-SemiBold.ttf new file mode 100644 index 00000000..98984f67 Binary files /dev/null and b/docs/stylesheets/fonts/sora/Sora-SemiBold.ttf differ diff --git a/docs/stylesheets/fonts/sora/Sora-SemiBold.woff2 b/docs/stylesheets/fonts/sora/Sora-SemiBold.woff2 new file mode 100644 index 00000000..fccedb13 Binary files /dev/null and b/docs/stylesheets/fonts/sora/Sora-SemiBold.woff2 differ diff --git a/docs/stylesheets/fonts/spline-sans-mono/SplineSansMono-Medium.ttf b/docs/stylesheets/fonts/spline-sans-mono/SplineSansMono-Medium.ttf new file mode 100644 index 00000000..198cfe00 Binary files /dev/null and b/docs/stylesheets/fonts/spline-sans-mono/SplineSansMono-Medium.ttf differ diff --git a/docs/stylesheets/fonts/spline-sans-mono/SplineSansMono-Medium.woff2 b/docs/stylesheets/fonts/spline-sans-mono/SplineSansMono-Medium.woff2 new file mode 100644 index 00000000..49535c12 Binary files /dev/null and b/docs/stylesheets/fonts/spline-sans-mono/SplineSansMono-Medium.woff2 differ diff --git a/docs/stylesheets/fonts/spline-sans-mono/SplineSansMono-Regular.ttf b/docs/stylesheets/fonts/spline-sans-mono/SplineSansMono-Regular.ttf new file mode 100644 index 00000000..d24102d4 Binary files /dev/null and b/docs/stylesheets/fonts/spline-sans-mono/SplineSansMono-Regular.ttf differ diff --git a/docs/stylesheets/fonts/spline-sans-mono/SplineSansMono-Regular.woff2 b/docs/stylesheets/fonts/spline-sans-mono/SplineSansMono-Regular.woff2 new file mode 100644 index 00000000..4424ba75 Binary files /dev/null and b/docs/stylesheets/fonts/spline-sans-mono/SplineSansMono-Regular.woff2 differ diff --git a/docs/stylesheets/layout.css b/docs/stylesheets/layout.css new file mode 100644 index 00000000..08588ce6 --- /dev/null +++ b/docs/stylesheets/layout.css @@ -0,0 +1,172 @@ +/* Site-specific overrides. stylesheets/extra.css is a verbatim copy of the + shared theme and is never edited; everything a page needs on top of it + belongs here. + + The first section is the correction set the module documentation sites + share, so it stays identical across them and a change to it applies + everywhere. Not every rule in it fires on every site, since the sites do not + all use the same page furniture; a rule that matches nothing here is still + carried so the section stays comparable. Rules that only this site uses go + in the second section. */ + +/* ========================================================= + Shared across the PROTEUS module documentation sites + ========================================================= */ + +/* Remove underline from links that contain only an image */ +.md-typeset p a:has(> img) { + text-decoration: none; +} + +/* Figure captions: justified, full width, slightly smaller */ +.md-typeset figcaption { + text-align: justify; + max-width: 100%; + font-size: 0.85em; + line-height: 1.5; +} + +/* Paired light/dark images: show the one matching the active scheme */ +.logo-dark { display: none; } +[data-md-color-scheme="slate"] .logo-light { display: none; } +[data-md-color-scheme="slate"] .logo-dark { display: inline; } + +/* Modules diagram: size and show light/dark versions based on color scheme. + Every module site embeds the same schematic, and the aspect ratio matches + its source viewBox, so the box reserved while the SVG loads is the box it + ends up occupying. */ +.mod-diagram { + width: 100%; + height: auto; + aspect-ratio: 670 / 509; + display: none; +} +[data-md-color-scheme="default"] .mod-diagram--light { + display: block; +} +[data-md-color-scheme="slate"] .mod-diagram--dark { + display: block; +} +.mod-diagram:focus, +.mod-diagram:focus-visible { + outline: none !important; +} + +/* Grid cards: make the last paragraph in each card stick to the bottom of the card */ +.md-typeset .grid.cards > ul > li { + display: flex; + flex-direction: column; +} + +.md-typeset .grid.cards > ul > li > p:last-child { + margin-top: auto; +} + +/* Active top tab: magma underline (the theme targets a link class that + this template does not emit, so the marker is set on the item) */ +.md-tabs__item--active { + border-bottom-color: var(--pt-magma); +} + +/* Headings that follow an explicit horizontal rule keep the rule as their + only separator instead of doubling it with the heading border */ +.md-typeset hr + h2 { + border-top: none; + padding-top: 0; +} + +/* Admonitions: tint the box with its signal color (set directly, since the + theme hardcodes its own background on the admonition element) */ +.md-typeset .admonition.note, +.md-typeset details.note, +.md-typeset .admonition.info, +.md-typeset details.info { + --md-admonition-bg-color: rgba(27, 111, 168, 0.10); + background-color: rgba(27, 111, 168, 0.10); +} + +.md-typeset .note > .admonition-title::before, +.md-typeset .note > summary::before, +.md-typeset .info > .admonition-title::before, +.md-typeset .info > summary::before { + background-color: #1B6FA8; +} + +/* the fold chevron of collapsible admonitions draws in currentColor */ +.md-typeset .note > summary::after, +.md-typeset .info > summary::after { + color: #1B6FA8; +} + +.md-typeset .admonition.warning, +.md-typeset details.warning, +.md-typeset .admonition.danger, +.md-typeset details.danger { + --md-admonition-bg-color: rgba(226, 61, 40, 0.10); + background-color: rgba(226, 61, 40, 0.10); +} + +.md-typeset .warning > .admonition-title::before, +.md-typeset .warning > summary::before, +.md-typeset .danger > .admonition-title::before, +.md-typeset .danger > summary::before { + background-color: #E23D28; +} + +.md-typeset .warning > summary::after, +.md-typeset .danger > summary::after { + color: #E23D28; +} + +/* Table headers containing math keep normal typography: the tracked + uppercase mono header style would mangle symbols and units */ +.md-typeset table:not([class]) th:has(.arithmatex, mjx-container) { + font-family: inherit; + font-size: inherit; + letter-spacing: normal; + text-transform: none; +} + +/* Primary buttons: the dark scheme reuses the primary color as the page + background, so the pill inverts to the light foreground tone there. */ +[data-md-color-scheme="slate"] .md-typeset .md-button--primary { + background-color: var(--md-primary-bg-color); + border-color: var(--md-primary-bg-color); + color: var(--pt-void); +} +[data-md-color-scheme="slate"] .md-typeset .md-button--primary:hover, +[data-md-color-scheme="slate"] .md-typeset .md-button--primary:focus { + background-color: var(--pt-ice); + border-color: var(--pt-ice); + color: var(--pt-void); +} + +/* Footer: no underline on copyright and meta links */ +.md-footer-copyright a, +.md-footer-meta a { + text-decoration: none !important; +} + +/* Front-page subtitle: the line under the module name, a size down and in the + muted foreground so it reads as a caption rather than a second heading */ +.md-typeset .subtitle { + font-size: 1.0rem; + color: var(--md-default-fg-color--light); + margin-top: -0.1rem; +} + +/* Header title doubles as a home link (see javascripts/header-links.js) */ +.md-header__title[data-md-component="header-title"] { + cursor: pointer; + transition: opacity 0.15s ease; +} + +.md-header__title[data-md-component="header-title"]:hover { + opacity: 0.7; +} + +/* ========================================================= + SPIDER + ========================================================= */ + +/* Nothing here yet: this site needs no rules beyond the shared set above. */ diff --git a/docs/stylesheets/proteus_theme.css b/docs/stylesheets/proteus_theme.css deleted file mode 100644 index 83c5b8f0..00000000 --- a/docs/stylesheets/proteus_theme.css +++ /dev/null @@ -1,250 +0,0 @@ -/* ========================================================= - PROTEUS theme variables - ========================================================= */ - -/* Be careful when changing these, as they affect multiple elements across the site. */ - -[data-md-color-scheme="default"], -[data-md-color-scheme="slate"] { - --md-primary-fg-color: #1c2b4b; - --md-primary-fg-color--light: #2a3d69; - --md-primary-fg-color--dark: #14203a; - - --proteus-highlight-color: #ff6e40; - --proteus-highlight-bg-soft: rgba(255, 109, 64, 0.093); - - --md-accent-fg-color: var(--proteus-highlight-color); - - --md-typeset-a-color: #3b6193; -} - -/* Softer slate background + more muted link color */ -[data-md-color-scheme="slate"] { - --md-default-bg-color: #0f172ad2; - --md-default-bg-color--light: #1e293b; - --md-default-bg-color--lighter: #334155; - --md-default-bg-color--lightest: #475569; - - --md-typeset-a-color: #8fa8c9; -} - -/* ========================================================= - Header + tabs - ========================================================= */ - -[data-md-color-scheme="default"] .md-header, -[data-md-color-scheme="default"] .md-tabs, -[data-md-color-scheme="slate"] .md-header, -[data-md-color-scheme="slate"] .md-tabs { - background-color: var(--md-primary-fg-color); -} - -[data-md-color-scheme="default"] .md-header *, -[data-md-color-scheme="default"] .md-tabs *, -[data-md-color-scheme="slate"] .md-header *, -[data-md-color-scheme="slate"] .md-tabs * { - color: #fff !important; - fill: #fff !important; -} - -/* ========================================================= - Expanded search - ========================================================= */ - -[data-md-color-scheme="default"] .md-search__form, -[data-md-color-scheme="slate"] .md-search__form { - background-color: rgba(255, 255, 255, 0.12) !important; - border-radius: 0.2rem !important; - box-shadow: none !important; -} - -[data-md-color-scheme="default"] .md-search__form:hover, -[data-md-color-scheme="default"] .md-search__form:focus-within, -[data-md-color-scheme="slate"] .md-search__form:hover, -[data-md-color-scheme="slate"] .md-search__form:focus-within { - background-color: rgba(255, 255, 255, 0.16) !important; -} - -[data-md-color-scheme="default"] .md-search__input, -[data-md-color-scheme="slate"] .md-search__input { - color: #fff !important; - -webkit-text-fill-color: #fff !important; - caret-color: #fff !important; - background: transparent !important; - -webkit-appearance: none; - appearance: none; -} - -[data-md-color-scheme="default"] .md-search__input::placeholder, -[data-md-color-scheme="slate"] .md-search__input::placeholder { - color: rgba(255, 255, 255, 0.75) !important; - -webkit-text-fill-color: rgba(255, 255, 255, 0.75) !important; - opacity: 1 !important; -} - -/* Hide browser-native search decorations */ -.md-search__input::-webkit-search-decoration, -.md-search__input::-webkit-search-cancel-button, -.md-search__input::-webkit-search-results-button, -.md-search__input::-webkit-search-results-decoration { - -webkit-appearance: none; - appearance: none; - display: none; -} - -/* Expanded search icons */ -[data-md-color-scheme="default"] .md-search__icon, -[data-md-color-scheme="default"] .md-search__icon svg, -[data-md-color-scheme="default"] .md-search__icon svg *, -[data-md-color-scheme="default"] .md-search__label, -[data-md-color-scheme="default"] .md-search__label svg, -[data-md-color-scheme="default"] .md-search__label svg *, -[data-md-color-scheme="slate"] .md-search__icon, -[data-md-color-scheme="slate"] .md-search__icon svg, -[data-md-color-scheme="slate"] .md-search__icon svg *, -[data-md-color-scheme="slate"] .md-search__label, -[data-md-color-scheme="slate"] .md-search__label svg, -[data-md-color-scheme="slate"] .md-search__label svg * { - color: #fff !important; - fill: #fff !important; - stroke: #fff !important; - opacity: 1 !important; -} - -/* ========================================================= - Collapsed search trigger in header - ========================================================= */ - -[data-md-color-scheme="default"] .md-search__button, -[data-md-color-scheme="slate"] .md-search__button { - color: #fff !important; - background-color: rgba(255, 255, 255, 0.12) !important; - border-radius: 0.6rem !important; -} - -[data-md-color-scheme="default"] .md-search__button:hover, -[data-md-color-scheme="default"] .md-search__button:focus, -[data-md-color-scheme="slate"] .md-search__button:hover, -[data-md-color-scheme="slate"] .md-search__button:focus { - background-color: rgba(255, 255, 255, 0.16) !important; -} - -/* Collapsed magnifier */ -[data-md-color-scheme="default"] .md-search__button::before, -[data-md-color-scheme="slate"] .md-search__button::before { - color: #fff !important; - -webkit-text-fill-color: #fff !important; - filter: brightness(0) invert(1) !important; - opacity: 1 !important; -} - -/* If an inner SVG is used in some states */ -[data-md-color-scheme="default"] .md-search__button svg, -[data-md-color-scheme="default"] .md-search__button svg *, -[data-md-color-scheme="slate"] .md-search__button svg, -[data-md-color-scheme="slate"] .md-search__button svg * { - fill: #fff !important; - stroke: #fff !important; - color: #fff !important; -} - -/* Shortcut badge */ -[data-md-color-scheme="default"] .md-search__button kbd, -[data-md-color-scheme="default"] .md-search__button .md-search__kbd, -[data-md-color-scheme="slate"] .md-search__button kbd, -[data-md-color-scheme="slate"] .md-search__button .md-search__kbd { - color: rgba(255, 255, 255, 0.9) !important; - background-color: rgba(255, 255, 255, 0.18) !important; - border: none !important; - box-shadow: none !important; -} - -/* Badge drawn as pseudo-element in some versions */ -[data-md-color-scheme="default"] .md-search__button::after, -[data-md-color-scheme="slate"] .md-search__button::after { - background-color: rgba(255, 255, 255, 0.12) !important; - border: none !important; - box-shadow: none !important; - color: rgba(255, 255, 255, 0.9) !important; -} - -/* ========================================================= - Top tabs - ========================================================= */ - -/* All tab labels white by default */ -[data-md-color-scheme="default"] .md-tabs__link, -[data-md-color-scheme="slate"] .md-tabs__link { - color: #fff !important; - opacity: 0.9 !important; - transition: color 0.15s ease, opacity 0.15s ease !important; -} - -/* Hover state */ -[data-md-color-scheme="default"] .md-tabs__link:hover, -[data-md-color-scheme="slate"] .md-tabs__link:hover { - color: var(--proteus-highlight-color) !important; - opacity: 0.8 !important; -} - -/* Active tab text only, no underline */ -[data-md-color-scheme="default"] .md-tabs__item--active, -[data-md-color-scheme="default"] .md-tabs__link--active, -[data-md-color-scheme="default"] .md-tabs__item--active .md-tabs__link, -[data-md-color-scheme="slate"] .md-tabs__item--active, -[data-md-color-scheme="slate"] .md-tabs__link--active, -[data-md-color-scheme="slate"] .md-tabs__item--active .md-tabs__link { - color: var(--proteus-highlight-color) !important; - box-shadow: none !important; - border-bottom: none !important; - text-decoration: none !important; -} - -/* Remove any underline/pseudo-element indicator */ -[data-md-color-scheme="default"] .md-tabs__item--active::after, -[data-md-color-scheme="default"] .md-tabs__link--active::after, -[data-md-color-scheme="default"] .md-tabs__item--active .md-tabs__link::after, -[data-md-color-scheme="slate"] .md-tabs__item--active::after, -[data-md-color-scheme="slate"] .md-tabs__link--active::after, -[data-md-color-scheme="slate"] .md-tabs__item--active .md-tabs__link::after { - content: none !important; - display: none !important; - background: none !important; -} - -/* ========================================================= - Sidebar navigation - ========================================================= */ - -/* Style only active leaf page links */ -[data-md-color-scheme="default"] .md-nav__item .md-nav__link--active:not(.md-nav__link--passed), -[data-md-color-scheme="slate"] .md-nav__item .md-nav__link--active:not(.md-nav__link--passed) { - background-color: var(--proteus-highlight-bg-soft) !important; - border-radius: 1rem !important; - color: var(--proteus-highlight-color) !important; - padding-left: 1rem; - padding-right: 1rem; -} - -/* ========================================================= - Footer - ========================================================= */ - -/* Remove underline from footer copyright link */ -.md-footer-copyright a, -.md-footer-meta a { - text-decoration: none !important; -} - -/* ========================================================= - Make header title look clickable and add hover effect - ========================================================= */ - -.md-header__title[data-md-component="header-title"] { - cursor: pointer; - transition: opacity 0.15s ease !important; -} - -.md-header__title[data-md-component="header-title"]:hover { - opacity: 0.7 !important; -} diff --git a/mkdocs.yml b/mkdocs.yml index 45603edd..012ed85d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -94,35 +94,34 @@ theme: - content.code.copy - content.tabs.link - # Default assets (used unless overridden per palette below) - favicon: assets/PROTEUS_black_on_white_logo_only.png - logo: assets/PROTEUS_white_on_black.png + # Fonts are self-hosted via stylesheets/fonts/fonts.css + font: false + # Default assets (the header stays dark in both schemes, so one glyph serves both) + favicon: assets/favicon.svg + logo: assets/glyph_phase_dark.png + + # The toggle icon shows the current mode, matching the project website palette: - # Auto: follow system preference (and show a toggle) - - media: "(prefers-color-scheme: light)" - scheme: default + - media: "(prefers-color-scheme: dark)" + scheme: slate primary: custom accent: custom - favicon: assets/PROTEUS_black_on_white_logo_only.png - logo: assets/PROTEUS_white_on_black.png toggle: icon: lucide/moon - name: Switch to dark mode + name: Switch to light mode - - media: "(prefers-color-scheme: dark)" - scheme: slate - primary: black - accent: deep orange - favicon: assets/PROTEUS_white_on_black_logo_only.png - logo: assets/PROTEUS_white_on_black.png + - media: "(prefers-color-scheme: light)" + scheme: default + primary: custom + accent: custom toggle: icon: lucide/sun - name: Switch to light mode + name: Switch to dark mode extra_css: - - stylesheets/proteus_theme.css - stylesheets/extra.css + - stylesheets/layout.css - stylesheets/footnotes.css markdown_extensions: @@ -155,7 +154,7 @@ extra: link: https://proteus-framework.org/ name: PROTEUS website - icon: material/email - link: mailto:proteus_dev@formingworlds.space + link: mailto:dev@proteus-framework.org name: Mail PROTEUS developers - icon: fontawesome/brands/python link: https://pypi.org/project/fwl-proteus/