From 6d93b1af3f07f544ecdff414eda88ee81299b0d6 Mon Sep 17 00:00:00 2001 From: wizzdom Date: Sun, 4 Feb 2024 16:10:38 +0000 Subject: [PATCH 01/25] update nomad deploy docs (#25) --- docs/aperture/nomad.md | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/docs/aperture/nomad.md b/docs/aperture/nomad.md index 9efff28b..a92ef24f 100644 --- a/docs/aperture/nomad.md +++ b/docs/aperture/nomad.md @@ -1,6 +1,6 @@ # Nomad on Aperture - `distro`, `wizzdom` -> Adapted from the [redbrick/nomad repo's README](https://github.com/redbrick/nomad/README.md) +> Adapted from [redbrick/nomad README](https://github.com/redbrick/nomad/README.md) ## What is Nomad? @@ -16,7 +16,27 @@ All Nomad job related configurations are stored in the `nomad` directory. The terminology used here is explained [here](https://developer.hashicorp.com/nomad/tutorials/get-started/get-started-vocab). This is **required reading**. -All of the job files are stored in the `nomad` directory. To deploy a Nomad job manually, connect to a host and run +- Install Nomad on your machine [here](https://developer.hashicorp.com/nomad/docs/install) +- Clone this repo + +```bash +git clone git@github.com:redbrick/nomad.git +``` + +- Connect to the [admin VPN](vpn.md) +- Set the `NOMAD_ADDR` environment variable: + +```bash +export NOMAD_ADDR=http://:4646 +``` + +- Check you can connect to the nomad cluster: + +```bash +nomad status +``` + +- You should receive a list back of all jobs, now you are ready to start deploying! ```bash nomad job plan path/to/job/file.hcl @@ -42,22 +62,26 @@ This will plan and run the job file without the need for you to copy and paste t ## Restart a Nomad Job +- First, stop and purge the currently-running job + ```bash nomad job stop -purge name-of-running-job ``` +- Run a garbage collection of jobs, evaluations, allocations, and nodes ad reconcile summaries of all registered jobs. + ```bash nomad system gc -``` -```bash nomad system reconcile summaries -``` -```bash nomad system gc # (yes, again) ``` +- Plan and run the job + ```bash nomad job plan path/to/job/file.hcl + +nomad job run -check-index [id from last command] path/to/job/file.hcl ``` From d8672eee0e4ddeff6ba80a7fb348735fc00c0ee5 Mon Sep 17 00:00:00 2001 From: wizzdom Date: Mon, 19 Feb 2024 20:08:48 +0000 Subject: [PATCH 02/25] add plausible analytics (#27) * add plausible analytics * add plausible feedback buttons --- .github/workflows/ci.yml | 2 +- mkdocs.yml | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c8bac3e6..1677d602 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,5 +12,5 @@ jobs: - uses: actions/setup-python@v2 with: python-version: 3.x - - run: pip install mkdocs-material mkdocs-git-revision-date-localized-plugin mkdocs-awesome-pages-plugin mkdocs-callouts + - run: pip install mkdocs-material mkdocs-git-revision-date-localized-plugin mkdocs-awesome-pages-plugin mkdocs-callouts material-plausible-plugin - run: mkdocs gh-deploy --force diff --git a/mkdocs.yml b/mkdocs.yml index d17d3bd4..d3a14abc 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -32,6 +32,7 @@ plugins: - awesome-pages - callouts - search + - material-plausible - git-revision-date-localized: type: timeago @@ -48,6 +49,26 @@ markdown_extensions: extra: github_org: https://github.com/redbrick + analytics: + provider: plausible + domain: docs.redbrick.dcu.ie + src: "https://plausible.redbrick.dcu.ie/js/script.js" + feedback: + title: Was this page helpful? + ratings: + - icon: material/emoticon-happy-outline + name: This page was helpful + data: good + note: >- + Thanks for your feedback! + + - icon: material/emoticon-sad-outline + name: This page could be improved + data: bad + note: >- + Thanks for your feedback! Help us improve this page by + contacting us! + extra_css: - stylesheets/extra.css From 7a91dee0078d367da4566441013c837920d9fa10 Mon Sep 17 00:00:00 2001 From: wizzdom Date: Fri, 1 Mar 2024 21:17:25 +0000 Subject: [PATCH 03/25] refactor: split aperture section, styling changes (#26) * refactor: split aperture section, styling changes * mkdocs: update footer, fix codeblocks, add glightbox * remove aperture section, split contents across all sections * move ansible to procedures/ * add redirects for aperture/* links * ci: update pipeline to use latest actions * make footer name bold, remove whitespace from logo * refactor: add links to corresponding index pages * add a proper dark redbrick theme --- .github/workflows/ci.yml | 19 ++++- docs/.pages | 3 +- docs/aperture/.pages | 11 --- docs/aperture/images.md | 25 ------- docs/aperture/socs.md | 3 - docs/{ => hardware}/aperture/about.md | 8 +-- docs/hardware/aperture/chell.md | 2 +- docs/hardware/aperture/glados.md | 2 +- docs/hardware/aperture/images.md | 25 +++++++ docs/{ => hardware}/aperture/index.md | 4 +- docs/hardware/aperture/johnson.md | 4 +- docs/hardware/aperture/wheatley.md | 2 +- docs/hardware/index.md | 32 +++++---- docs/hardware/network/arse.md | 1 + docs/hardware/network/cerberus.md | 1 + .../network/mordor.md} | 4 +- docs/hardware/network/switches.md | 1 + docs/index.md | 2 + docs/overrides/main.html | 11 +++ docs/{aperture => procedures}/ansible.md | 0 docs/procedures/index.md | 4 ++ docs/{aperture => procedures}/vpn.md | 0 docs/res/logo.png | Bin 155059 -> 153179 bytes docs/{aperture => services}/bastion-vm.md | 2 +- docs/{aperture => services}/consul.md | 0 docs/services/exposed.md | 6 +- docs/{aperture => services}/icecast.md | 0 docs/services/index.md | 7 +- docs/{aperture => services}/nomad.md | 12 +++- docs/services/socs.md | 7 ++ docs/stylesheets/extra.css | 4 ++ mkdocs.yml | 68 +++++++++++++++--- 32 files changed, 185 insertions(+), 85 deletions(-) delete mode 100644 docs/aperture/.pages delete mode 100644 docs/aperture/images.md delete mode 100644 docs/aperture/socs.md rename docs/{ => hardware}/aperture/about.md (77%) create mode 100644 docs/hardware/aperture/images.md rename docs/{ => hardware}/aperture/index.md (86%) create mode 100644 docs/hardware/network/arse.md create mode 100644 docs/hardware/network/cerberus.md rename docs/{aperture/firewall.md => hardware/network/mordor.md} (93%) create mode 100644 docs/hardware/network/switches.md create mode 100644 docs/overrides/main.html rename docs/{aperture => procedures}/ansible.md (100%) rename docs/{aperture => procedures}/vpn.md (100%) rename docs/{aperture => services}/bastion-vm.md (81%) rename docs/{aperture => services}/consul.md (100%) rename docs/{aperture => services}/icecast.md (100%) rename docs/{aperture => services}/nomad.md (94%) create mode 100644 docs/services/socs.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1677d602..68eb583f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,13 +4,26 @@ on: branches: - master - main +permissions: + contents: write jobs: deploy: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 + - uses: actions/checkout@v4 + - name: Configure Git Credentials + run: | + git config user.name github-actions[bot] + git config user.email 41898282+github-actions[bot]@users.noreply.github.com + - uses: actions/setup-python@v5 with: python-version: 3.x - - run: pip install mkdocs-material mkdocs-git-revision-date-localized-plugin mkdocs-awesome-pages-plugin mkdocs-callouts material-plausible-plugin + - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV + - uses: actions/cache@v4 + with: + key: mkdocs-material-${{ env.cache_id }} + path: .cache + restore-keys: | + mkdocs-material- + - run: pip install mkdocs-material mkdocs-git-revision-date-localized-plugin mkdocs-awesome-pages-plugin mkdocs-callouts material-plausible-plugin mkdocs-glightbox mkdocs-redirects - run: mkdocs gh-deploy --force diff --git a/docs/.pages b/docs/.pages index b5ce5f03..91c0086d 100644 --- a/docs/.pages +++ b/docs/.pages @@ -1,8 +1,7 @@ nav: - index.md -- contact.md - procedures -- aperture - hardware - services +- contact.md diff --git a/docs/aperture/.pages b/docs/aperture/.pages deleted file mode 100644 index a0d8b67c..00000000 --- a/docs/aperture/.pages +++ /dev/null @@ -1,11 +0,0 @@ -nav: - -- index.md -- about.md -- ansible.md -- nomad.md -- bastion-vm.md -- firewall.md -- icecast.md -- vpn.md -- images.md diff --git a/docs/aperture/images.md b/docs/aperture/images.md deleted file mode 100644 index 5299b60c..00000000 --- a/docs/aperture/images.md +++ /dev/null @@ -1,25 +0,0 @@ -# Images - -## Servers - -![distro hanging cables](../res/distro-hanging-cables.jpg) - -![new installed servers](../res/new-installed-servers.jpg) - -![inside of server](../res/inside-of-server.jpg) - -## Networking - -![isengard](../res/isengard.jpg) - -![mordor and rivendell](../res/mordor-and-rivendell.jpg) - -![labelled cables for mordor and rivendell](../res/labelled-cables-for-mordor-and-rivendell.jpg) - -![labelled cables for isengard](../res/labelled-cables-for-isengard.jpg) - -![tidy cables for glados, wheatley and chell](../res/cables-glados-wheatley-chell.jpg) - -## Some Dancing for Good Measure - -[dancing.mp4](https://media.discordapp.net/attachments/846341782966632468/1004129108529254613/20220802_215014.mp4) diff --git a/docs/aperture/socs.md b/docs/aperture/socs.md deleted file mode 100644 index a05fc802..00000000 --- a/docs/aperture/socs.md +++ /dev/null @@ -1,3 +0,0 @@ -# Socs - -DCUfm - Icecast diff --git a/docs/aperture/about.md b/docs/hardware/aperture/about.md similarity index 77% rename from docs/aperture/about.md rename to docs/hardware/aperture/about.md index dbbc2353..be488e3a 100644 --- a/docs/aperture/about.md +++ b/docs/hardware/aperture/about.md @@ -4,7 +4,7 @@ Aperture is Redbrick's fleet of hardware that was installed in May 2022 by `dist It consists of: -- 3x Dell R6515 - [`glados`](../hardware/aperture/glados.md), [`wheatley`](../hardware/aperture/wheatley.md), [`chell`](../hardware/aperture/chell.md) +- 3x Dell R6515 - [`glados`](glados.md), [`wheatley`](wheatley.md), [`chell`](chell.md) | CPU | RAM | Storage | |:-----------------------------------------:|:---------------------------------:|:--------------------------------:| @@ -15,11 +15,11 @@ It consists of: ## Servers -The three servers are named [`glados`](../hardware/aperture/glados.md) , [`wheatley`](../hardware/aperture/wheatley.md) and [`chell`](../hardware/aperture/chell.md). +The three servers are named [`glados`](glados.md) , [`wheatley`](wheatley.md) and [`chell`](chell.md). ## Networks -The firewall is called [`mordor`](firewall.md), and the two 24-port switches are called [`rivendell` and `isengard`](switches.md). +The firewall is called [`mordor`](../network/mordor.md), and the two 24-port switches are called [`rivendell` and `isengard`](../network/switches.md). ## Networking @@ -41,7 +41,7 @@ The IP address range for the [`aperture`](index.md) subnet is `10.10.0.0/24`, wi `nexus` is the name of the KVM switch. It's internal IP address is `10.10.0.10`. -[`glados`](../hardware/aperture/glados.md) is connected on port 1, [`wheatley`](../hardware/aperture/wheatley.md) on port 2, and [`chell`](../hardware/aperture/chell.md) on port 3. +[`glados`](glados.md) is connected on port 1, [`wheatley`](wheatley.md) on port 2, and [`chell`](chell.md) on port 3. > [!WARNING] Note! > **Yellow** cables are used for **KVM network**. diff --git a/docs/hardware/aperture/chell.md b/docs/hardware/aperture/chell.md index dd8a77e9..49ceb2c5 100644 --- a/docs/hardware/aperture/chell.md +++ b/docs/hardware/aperture/chell.md @@ -8,7 +8,7 @@ - **RAM**: 2x 16GB RDIMM, 3200MT/s Dual Rank - **Storage**: 4x 2TB SATA HDDs (hardware RAID) -Part of [aperture](../../aperture/index.md) +Part of [aperture](index.md) ## Where to Find diff --git a/docs/hardware/aperture/glados.md b/docs/hardware/aperture/glados.md index 4084fcfb..c69a58fe 100644 --- a/docs/hardware/aperture/glados.md +++ b/docs/hardware/aperture/glados.md @@ -8,7 +8,7 @@ - **RAM**: 2x 16GB RDIMM, 3200MT/s Dual Rank - **Storage**: 4x 2TB SATA HDDs (hardware RAID) -Part of [aperture](../../aperture/index.md) +Part of [aperture](index.md) ## Where to Find diff --git a/docs/hardware/aperture/images.md b/docs/hardware/aperture/images.md new file mode 100644 index 00000000..85a70d15 --- /dev/null +++ b/docs/hardware/aperture/images.md @@ -0,0 +1,25 @@ +# Images + +## Servers + +![distro hanging cables](../../res/distro-hanging-cables.jpg) + +![new installed servers](../../res/new-installed-servers.jpg) + +![inside of server](../../res/inside-of-server.jpg) + +## Networking + +![isengard](../../res/isengard.jpg) + +![mordor and rivendell](../../res/mordor-and-rivendell.jpg) + +![labelled cables for mordor and rivendell](../../res/labelled-cables-for-mordor-and-rivendell.jpg) + +![labelled cables for isengard](../../res/labelled-cables-for-isengard.jpg) + +![tidy cables for glados, wheatley and chell](../../res/cables-glados-wheatley-chell.jpg) + +## Some Dancing for Good Measure + +[dancing.mp4](https://media.discordapp.net/attachments/846341782966632468/1004129108529254613/20220802_215014.mp4) diff --git a/docs/aperture/index.md b/docs/hardware/aperture/index.md similarity index 86% rename from docs/aperture/index.md rename to docs/hardware/aperture/index.md index 29ce7e82..41d3f4db 100644 --- a/docs/aperture/index.md +++ b/docs/hardware/aperture/index.md @@ -17,5 +17,5 @@ If you're a new admin, this is a cheat sheet for you. In order to get broadly up So, you've hit a problem. Here's some quicklinks to some common problems: -- [I can't connect to Aperture](vpn.md) -- [Ansible is running into an error](ansible.md#common-errors) +- [I can't connect to Aperture](../../procedures/vpn.md) +- [Ansible is running into an error](../../procedures/ansible.md#common-errors) diff --git a/docs/hardware/aperture/johnson.md b/docs/hardware/aperture/johnson.md index 0faa3a84..ab9d2d5f 100644 --- a/docs/hardware/aperture/johnson.md +++ b/docs/hardware/aperture/johnson.md @@ -14,7 +14,7 @@ Formerly `albus` (in a different life) - **Network**: 4x Onboard Ethernet, 802.3ad bonding - **iDRAC NIC**: Shared on port 1 -Part of [aperture](../../aperture/index.md) +Part of [aperture](index.md) ## Where to Find @@ -24,6 +24,6 @@ Part of [aperture](../../aperture/index.md) ## Services -- `NFS` for [aperture](../../aperture/index.md) +- `NFS` for [aperture](index.md) ![](../../res/johnson.png) diff --git a/docs/hardware/aperture/wheatley.md b/docs/hardware/aperture/wheatley.md index e45e0d6e..75d37ba1 100644 --- a/docs/hardware/aperture/wheatley.md +++ b/docs/hardware/aperture/wheatley.md @@ -8,7 +8,7 @@ - **RAM**: 2x 16GB RDIMM, 3200MT/s Dual Rank - **Storage**: 4x 2TB SATA HDDs (hardware RAID) -Part of [aperture](../../aperture/index.md) +Part of [aperture](index.md) ## Where to Find diff --git a/docs/hardware/index.md b/docs/hardware/index.md index c079163e..9b73e593 100644 --- a/docs/hardware/index.md +++ b/docs/hardware/index.md @@ -4,21 +4,29 @@ Here is a list of current hardware in Redbrick's suite of servers, switches and ## [Login](../services/servers.md#Logging%20in) Boxes -- [**azazel**](azazel.md) -- [**pygmalion**](pygmalion.md) +- [**`azazel`**](azazel.md) +- [**`pygmalion`**](pygmalion.md) ## [NixOS](../procedures/nixos.md) Boxes -- [**hardcase**](nix/hardcase.md) -- [**motherlode**](nix/motherlode.md) -- [**icarus**](nix/icarus.md) +- [**`hardcase`**](nix/hardcase.md) +- [**`motherlode`**](nix/motherlode.md) +- [**`icarus`**](nix/icarus.md) -- [**paphos**](paphos.md) -- [**zeus**](zeus.md) +- [**`paphos`**](paphos.md) +- [**`zeus`**](zeus.md) -## [Aperture](../aperture/index.md) +## [Aperture](aperture/index.md) -- [**glados**](aperture/glados.md) -- [**wheatley**](aperture/wheatley.md) -- [**chell**](aperture/chell.md) -- [**johnson**](aperture/johnson.md) +- [**`glados`**](aperture/glados.md) +- [**`wheatley`**](aperture/wheatley.md) +- [**`chell`**](aperture/chell.md) +- [**`johnson`**](aperture/johnson.md) +- [**`bastion-vm`**](../services/bastion-vm.md) + +## Network Hardware + +- [**`arse`**](network/arse.md) +- [**`cerberus`**](network/cerberus.md) +- [**`mordor`**](network/mordor.md) +- [**switches**](network/switches.md) diff --git a/docs/hardware/network/arse.md b/docs/hardware/network/arse.md new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/docs/hardware/network/arse.md @@ -0,0 +1 @@ + diff --git a/docs/hardware/network/cerberus.md b/docs/hardware/network/cerberus.md new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/docs/hardware/network/cerberus.md @@ -0,0 +1 @@ + diff --git a/docs/aperture/firewall.md b/docs/hardware/network/mordor.md similarity index 93% rename from docs/aperture/firewall.md rename to docs/hardware/network/mordor.md index be1f1f97..d8a58a08 100644 --- a/docs/aperture/firewall.md +++ b/docs/hardware/network/mordor.md @@ -1,4 +1,4 @@ -# Firewall +# Mordor @@ -36,7 +36,7 @@ The UDM Pro should be kept up to date at all times using the web interface. Plea SSH is enabled to allow for rollbacks in case of a bad update *(I warned you!)*. -Remote access is disabled as it should not be needed, the admin [`VPN`](./vpn.md) should provide enough access for you. If it is enabled in future, please update these docs with your reasons. +Remote access is disabled as it should not be needed, the admin [`VPN`](../../procedures/vpn.md) should provide enough access for you. If it is enabled in future, please update these docs with your reasons. ### Backups diff --git a/docs/hardware/network/switches.md b/docs/hardware/network/switches.md new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/docs/hardware/network/switches.md @@ -0,0 +1 @@ + diff --git a/docs/index.md b/docs/index.md index fe424cbc..498d2248 100644 --- a/docs/index.md +++ b/docs/index.md @@ -11,6 +11,8 @@ This is mostly intended for admins, future admins, webmasters, and everybody els - [Redbrick Website](https://redbrick.dcu.ie) - [SSH help](https://docs.redbrick.dcu.ie/services/servers/#logging-in) +## Webgroup + ## New Admins So, you want to become an admin. Brave of you. Here's some stuff you should probably read: diff --git a/docs/overrides/main.html b/docs/overrides/main.html new file mode 100644 index 00000000..3cf042d3 --- /dev/null +++ b/docs/overrides/main.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} + +{% block footer %} + +{% endblock %} diff --git a/docs/aperture/ansible.md b/docs/procedures/ansible.md similarity index 100% rename from docs/aperture/ansible.md rename to docs/procedures/ansible.md diff --git a/docs/procedures/index.md b/docs/procedures/index.md index 42ea5d72..9e9698f9 100644 --- a/docs/procedures/index.md +++ b/docs/procedures/index.md @@ -4,6 +4,10 @@ Here you can find a list of various procedures useful for the day-to-day running ### [New elected admins](new-admins.md) +### [Admin VPN](vpn.md) + +### [Ansible](ansible.md) + ### [Post-powercut Todo List](post-powercut.md) ### [NixOS](nixos.md) diff --git a/docs/aperture/vpn.md b/docs/procedures/vpn.md similarity index 100% rename from docs/aperture/vpn.md rename to docs/procedures/vpn.md diff --git a/docs/res/logo.png b/docs/res/logo.png index f04a1418ddfc918f26913db4ac4ea8033e2e7b41..2f0aff023b31052fcad6958691c20e6c98232ef9 100644 GIT binary patch literal 153179 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

G!m^ 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≪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 literal 155059 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 diff --git a/docs/aperture/bastion-vm.md b/docs/services/bastion-vm.md similarity index 81% rename from docs/aperture/bastion-vm.md rename to docs/services/bastion-vm.md index 5964b557..93813f76 100644 --- a/docs/aperture/bastion-vm.md +++ b/docs/services/bastion-vm.md @@ -2,7 +2,7 @@ This VM is an ephemeral machine that can be placed on any nomad client that has the qemu driver enabled. -It acts as the point of ingress for Aperture, with ISS and our [firewall](firewall.md) allowing traffic to reach it's IP address externally. The VM is configured as a Nomad client itself, in the `ingress` node pool to ensure that only ingress-type allocations are placed there (like [traefik](../services/traefik.md)). Those services can proxy requests from the Bastion VM to internal services using consul's service DNS resolution, it's service mesh, or by plain IP and port. +It acts as the point of ingress for Aperture, with ISS and our [mordor](../hardware/network/mordor.md) allowing traffic to reach it's IP address externally. The VM is configured as a Nomad client itself, in the `ingress` node pool to ensure that only ingress-type allocations are placed there (like [traefik](./traefik.md)). Those services can proxy requests from the Bastion VM to internal services using consul's service DNS resolution, it's service mesh, or by plain IP and port. `cloud-init` is given a static address during the initialisation phase to configure the interface. This ensures that, even if it is replanned, it will be able to accept traffic. diff --git a/docs/aperture/consul.md b/docs/services/consul.md similarity index 100% rename from docs/aperture/consul.md rename to docs/services/consul.md diff --git a/docs/services/exposed.md b/docs/services/exposed.md index 512b426d..6a23cdef 100644 --- a/docs/services/exposed.md +++ b/docs/services/exposed.md @@ -3,7 +3,7 @@ Firstly, it's important to mention that Redbrick is currently split in 2 parts: - Redbrick 2.0 *a.k.a. "old redbrick"* (on `136.206.15.0/24`) -- [Aperture](../aperture/index.md) *a.k.a. "new redbrick"* (on `136.206.16.0/24`) +- [Aperture](../hardware/aperture/index.md) *a.k.a. "new redbrick"* (on `136.206.16.0/24`) ## Old Redbrick @@ -47,9 +47,9 @@ Firstly, it's important to mention that Redbrick is currently split in 2 parts: - **Services**: - DNS ([bind](bind.md)) -## [Aperture](../aperture/index.md) +## [Aperture](../hardware/aperture/index.md) -In aperture, things are done a little differently than on the other network. Instead of having a single host per service, aperture is configured to allow services to be allocated dynamically across all 3 servers using [nomad](../aperture/nomad.md), [consul](../aperture/consul.md) and [traefik](traefik.md). +In aperture, things are done a little differently than on the other network. Instead of having a single host per service, aperture is configured to allow services to be allocated dynamically across all 3 servers using [nomad](nomad.md), [consul](consul.md) and [traefik](traefik.md). - [glados](../hardware/aperture/glados.md) - `136.206.16.4` - [wheatley](../hardware/aperture/wheatley.md) - `136.206.16.5` diff --git a/docs/aperture/icecast.md b/docs/services/icecast.md similarity index 100% rename from docs/aperture/icecast.md rename to docs/services/icecast.md diff --git a/docs/services/index.md b/docs/services/index.md index b131c81b..de224841 100644 --- a/docs/services/index.md +++ b/docs/services/index.md @@ -1,15 +1,16 @@ # Preface -Here you will find a list of all the services Redbrick runs, along with some configs and some important information - -surrounding them. +Here you will find a list of all the services Redbrick runs, along with some configs and some important information surrounding them. - [api](api.md) +- [bastion-vm](bastion-vm.md) - [bind](bind.md) - [codimd](codimd.md) +- [consul](consul.md) - [gitea](gitea.md) - [irc](irc.md) - [nfs](nfs.md) +- [nomad](nomad.md) - [traefik](traefik.md) - [znapzend](znapzend.md) diff --git a/docs/aperture/nomad.md b/docs/services/nomad.md similarity index 94% rename from docs/aperture/nomad.md rename to docs/services/nomad.md index a92ef24f..7d53aa54 100644 --- a/docs/aperture/nomad.md +++ b/docs/services/nomad.md @@ -1,3 +1,13 @@ +--- +title: Nomad on Aperture +author: +- distro +- wizzdom +tags: +- nomad +- aperture +--- + # Nomad on Aperture - `distro`, `wizzdom` > Adapted from [redbrick/nomad README](https://github.com/redbrick/nomad/README.md) @@ -23,7 +33,7 @@ The terminology used here is explained [here](https://developer.hashicorp.com/no git clone git@github.com:redbrick/nomad.git ``` -- Connect to the [admin VPN](vpn.md) +- Connect to the [admin VPN](../procedures/vpn.md) - Set the `NOMAD_ADDR` environment variable: ```bash diff --git a/docs/services/socs.md b/docs/services/socs.md new file mode 100644 index 00000000..ae6af893 --- /dev/null +++ b/docs/services/socs.md @@ -0,0 +1,7 @@ +# Socs Using Redbrick Infrastructure + +- MPS/DCUfm - [`icecast`](icecast.md) +- MPS/TheCollegeView - https://thecollegeview.ie - `wordpress` +- DCU Style - https://thelookonline.dcu.ie - `wordpress` +- DCU Solar Racing - https://solarracing.ie +- diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index ba65314a..47a055f4 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -5,3 +5,7 @@ --md-text-font: "Myriad Pro", sans-serif; --md-code-font: "Fira Code", monospace; } + +[data-md-color-scheme="slate"] * { + --md-typeset-a-color: #d62e2e; +} diff --git a/mkdocs.yml b/mkdocs.yml index d3a14abc..eef1deee 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -15,40 +15,93 @@ theme: - navigation.instant - navigation.tracking - navigation.indexes + - content.code.copy + - content.code.annotate palette: - # Palette toggle for dark mode - - scheme: slate + - media: "(prefers-color-scheme)" toggle: - icon: material/brightness-4 + icon: material/link name: Switch to light mode - - # Palette toggle for light mode - - scheme: default + - media: "(prefers-color-scheme: light)" + scheme: default + primary: indigo + accent: indigo toggle: - icon: material/brightness-7 + icon: material/toggle-switch name: Switch to dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + primary: black + accent: red + toggle: + icon: material/toggle-switch-off + name: Switch to system preference plugins: - awesome-pages - callouts + - glightbox - search - material-plausible - git-revision-date-localized: type: timeago + - redirects: + redirect_maps: + 'aperture/index.md': 'hardware/aperture/index.md' + 'aperture/about.md': 'hardware/aperture/about.md' + 'aperture/chell.md': 'hardware/aperture/chell.md' + 'aperture/glados.md': 'hardware/aperture/glados.md' + 'aperture/images.md': 'hardware/aperture/images.md' + 'aperture/johnson.md': 'hardware/aperture/johnson.md' + 'aperture/wheatley.md': 'hardware/aperture/wheatley.md' + 'aperture/vpn.md': 'procedures/vpn.md' + 'aperture/nomad.md': 'services/nomad.md' + 'aperture/bastion-vm.md': 'services/bastion-vm.md' + 'aperture/ansible.md': 'procedures/ansible.md' + 'aperture/firewall.md': 'hardware/network/mordor.md' + 'aperture/icecast.md': 'services/icecast.md' + markdown_extensions: - attr_list - abbr - nl2br + - meta - admonition - pymdownx.snippets - pymdownx.details - pymdownx.tabbed - pymdownx.superfences - pymdownx.tilde + - pymdownx.highlight: + anchor_linenums: true + line_spans: __span + pygments_lang_class: true + +copyright: Redbrick Docs extra: github_org: https://github.com/redbrick + manifest: manifest.webmanifest + social: + - icon: fontawesome/solid/globe + link: https://redbrick.dcu.ie + name: Redbrick Website + - icon: fontawesome/brands/github + link: https://github.redbrick.dcu.ie + name: Github + - icon: fontawesome/brands/x-twitter + link: https://twitter.redbrick.dcu.ie + name: Twitter + - icon: fontawesome/brands/instagram + link: https://instagram.redbrick.dcu.ie + name: Instagram + - icon: fontawesome/brands/linkedin + link: https://linkedin.redbrick.dcu.ie + name: LinkedIn + - icon: fontawesome/brands/discord + link: https://discord.redbrick.dcu.ie + name: Discord analytics: provider: plausible domain: docs.redbrick.dcu.ie @@ -69,6 +122,5 @@ extra: Thanks for your feedback! Help us improve this page by contacting us! - extra_css: - stylesheets/extra.css From 6aa2e383ccfbd4819402af4b137ee7d0ca1fa370 Mon Sep 17 00:00:00 2001 From: wizzdom Date: Wed, 13 Mar 2024 04:05:22 +0000 Subject: [PATCH 04/25] add docs from nomad git repo (#28) Co-authored-by: James Hackett --- docs/services/nomad.md | 13 +++++++ docs/services/user-vms.md | 77 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 docs/services/user-vms.md diff --git a/docs/services/nomad.md b/docs/services/nomad.md index 7d53aa54..e21e4c90 100644 --- a/docs/services/nomad.md +++ b/docs/services/nomad.md @@ -95,3 +95,16 @@ nomad job plan path/to/job/file.hcl nomad job run -check-index [id from last command] path/to/job/file.hcl ``` + +## Cluster Configuration + +[`nomad/cluster-config`](https://github.com/redbrick/nomad/tree/master/cluster-config) contains configuration relating to the configuration of the cluster including: + +- node pools +- agent config + +### Node Pools + +[Node pools](https://developer.hashicorp.com/nomad/docs/concepts/node-pools) are a way to group nodes together into logical groups which jobs can target that can be used to enforce where allocations are placed. + +e.g. [`ingress-pool.hcl`](https://github.com/redbrick/nomad/blob/master/cluster-config/ingress-pool.hcl) is a node pool that is used for ingress nodes such as the [bastion-vm](bastion-vm). Any jobs that are defined to use `node_pool = "ingress"` such as `traefik.hcl` and `gate-proxy.hcl` will only be assigned to one of the nodes in the `ingress` node pool (i.e. the [bastion VM](bastion-vm)) diff --git a/docs/services/user-vms.md b/docs/services/user-vms.md new file mode 100644 index 00000000..a87adb11 --- /dev/null +++ b/docs/services/user-vms.md @@ -0,0 +1,77 @@ +# User VMs + +User VMs are deployed on [`aperture`](../hardware/aperture/index.md) using [nomad](nomad.md)'s [QEMU driver](https://developer.hashicorp.com/nomad/docs/drivers/qemu). + +Each VM is configured with cloud-init. Those configuration files are served by [`wheatley`](../hardware/aperture/wheatley.md), but they can be served by any HTTP server. + +## Setting up Networking on the Host + +The host needs to be configured to allow the VMs to communicate with each other. This is done by creating a bridge and adding the VMs to it. + +### Create a Bridge + +To create a bridge that qemu can use to place the guest (vm) onto the same network as the host, follow the instructions listed [here](https://wiki.archlinux.org/title/Network_bridge#With_iproute2) for iproute2, summarised below. + +We need to create a bridge interface on the host. + +```bash +sudo ip link add name br0 type bridge +sudo ip link set dev br0 up +``` + +We'll be adding a physical interface to this bridge to allow it to communicate with the external ([UDM](../hardware/network/mordor.md)) network. + +```bash +sudo ip link set eno1 master br0 +``` + +You'll need to assign an IP address to the bridge interface. This will be used as the default address for the host. You can do this with DHCP or by assigning a static IP address. The best way to do this is to create a DHCP static lease on the UDM for the bridge interface MAC address. + +> [!NOTE] TODO +> TODO: Find out why connectivity seems to be lost when the bridge interface receives an address before the physical interface. +> If connectivity is lost, release the addresses from both the bridge and the physical interface (in that order) with `sudo dhclient -v -r ` and then run `sudo dhclient -v ` to assign the bridge interface an address. + +### Add the VMs to the Bridge + +The configuration of the qemu network options in the job file will create a new tap interface and add it to the bridge and the VM. I advise you for your own sanity to never touch the network options, they will only cause you pain. + +For others looking, this configuration is specific to QEMU only. + +```bash +qemu-system-x86_64 ... -netdev bridge,id=hn0 -device virtio-net-pci,netdev=hn0,id=nic1 +``` + +This will assign the VM an address on the external network. The VM will be able to communicate with the host and other VMs in the network. + +You must also add `allow br0` to `/etc/qemu/bridge.conf` to allow qemu to add the tap interfaces tothe bridge. [Source](https://wiki.qemu.org/Features/HelperNetworking) + +The VMs, once connected to the bridge, will be assigned an address via DHCP. You can assign a static IP address to the VMs by adding a DHCP static lease on the UDM for the VMs MAC address. You can get the address of a VM by checking the nomad alloc logs for that VM and searching for `ens3`. + +```bash +nomad job status distro-vm | grep "Node ID" -A 1 | tail -n 1 | cut -d " " -f 1 +# +nomad alloc logs | grep -E "ens3.*global" | cut -d "|" -f 4 | xargs +# cloud init... ens3: global +``` + +## Configuring the VMs + +The VMs are configured with cloud-init. Their docs are pretty good, so I won't repeat them here. The files can be served by any HTTP server, and the address is placed into the job file in the QEMU options. + +```hcl +... + args = [ + ... + "virtio-net-pci,netdev=hn0,id=nic1,mac=52:54:84:ba:49:22", + "-smbios", + "type=1,serial=ds=nocloud-net;s=http://136.206.16.5:8000/", + ] +... +``` + +> [!NOTE] Note! +> If you're running multiple VMS on the same host make sure to set different MAC addresses for each VM, otherwise you'll have a bad time. + +## Creating a New VM + +To create a new VM, you'll need to create a new job file and a cloud-init configuration file. Copy any of the existing job files and modify them to suit your needs. The cloud-init configuration files can be copied and changed based on the user also. **Remember to ensure the MAC addresses are unique!** From d71d83945c6eb4ecc09a045b6f52f5ace7d0a028 Mon Sep 17 00:00:00 2001 From: wizzdom Date: Wed, 13 Mar 2024 04:32:53 +0000 Subject: [PATCH 05/25] add hedgedoc docs (#30) --- docs/services/codimd.md | 11 ------ docs/services/md.md | 82 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 11 deletions(-) delete mode 100644 docs/services/codimd.md create mode 100644 docs/services/md.md diff --git a/docs/services/codimd.md b/docs/services/codimd.md deleted file mode 100644 index ee49779a..00000000 --- a/docs/services/codimd.md +++ /dev/null @@ -1,11 +0,0 @@ -# CodiMD - `distro` - -CodiMD lives on [`zeus`](../hardware/zeus.md) as a docker container. It is accessible through [md.redbrick.dcu.ie](https://md.redbrick.dcu.ie). - -CodiMD is built locally and is based on [codimd](https://github.com/hackmdio/CodiMD), the docs for which are [here](https://hackmd.io/c/codimd-documentation/%2Fs%2Fcodimd-docker-deployment). - -Hackmd auths against LDAP and its configuration is controlled from docker-compose. Go to `/etc/docker-compose/services/hackmd` on [`zeus`](../hardware/zeus.md) to find the configuration. - -See [CodiMD github](https://github.com/hackmdio/hackmd/#environment-variables-will-overwrite-other-server-configs) for more info on configuration. - -The important points are disabling anonymous users and the LDAP settings. diff --git a/docs/services/md.md b/docs/services/md.md new file mode 100644 index 00000000..77eb6b53 --- /dev/null +++ b/docs/services/md.md @@ -0,0 +1,82 @@ +--- +title: HedgeDoc +author: + - wizzdom +tags: + - aperture + - nomad + - docker +--- + +# HedgeDoc - `wizzdom` + +HedgeDoc is deployed with [nomad](nomad.md) on [`aperture`](../hardware/aperture/index.md) as a docker container. It is accessible through [md.redbrick.dcu.ie](https://md.redbrick.dcu.ie). + +HedgeDoc auths against LDAP and its configuration is available [here](https://github.com/redbrick/nomad/blob/master/jobs/services/hedgedoc.hcl) + +All sensitive variables are stored in the [`consul`](consul.md) KV store. + +The important points are as follows: + +- connecting to the database: + +```bash +CMD_DB_URL = "postgres://{{ key "hedgedoc/db/user" }}:{{ key "hedgedoc/db/password" }}@{{ env "NOMAD_ADDR_db" }}/{{ key "hedgedoc/db/name" }}" +``` + +- disabling anonymous users and email signup: + +```bash +CMD_ALLOW_EMAIL_REGISTER = "false" +CMD_ALLOW_ANONYMOUS = "false" +CMD_EMAIL = "false" +``` + +- LDAP configuration: + +```bash +CMD_LDAP_URL = "{{ key "hedgedoc/ldap/url" }}" +CMD_LDAP_SEARCHBASE = "ou=accounts,o=redbrick" +CMD_LDAP_SEARCHFILTER = "{{`(uid={{username}})`}}" +CMD_LDAP_PROVIDERNAME = "Redbrick" +CMD_LDAP_USERIDFIELD = "uidNumber" +CMD_LDAP_USERNAMEFIELD = "uid" +``` + +See the [HedgeDoc docs](https://docs.hedgedoc.org/configuration/) for more info on configuration. + +## Backups + +The HedgeDoc database is backed up periodically by a [nomad](nomad.md) job, the configuration for which is [here](https://github.com/redbrick/nomad/blob/master/jobs/services/hedgedoc-backup.hcl). + +The bulk of this job is this script which: +- grabs the `alloc_id` of the currently running HedgeDoc allocation from nomad +- execs into the container running `pg_dumpall` dumping the database into a file with the current date and time +- if the backup is unsuccessful the script notifies the admins on discord via a webhook. + +```bash +#!/bin/bash + +file=/storage/backups/nomad/postgres/hedgedoc/postgresql-hedgedoc-$(date +%Y-%m-%d_%H-%M-%S).sql + +mkdir -p /storage/backups/nomad/postgres/hedgedoc + +alloc_id=$(nomad job status hedgedoc | grep running | tail -n 1 | cut -d " " -f 1) + +job_name=$(echo ${NOMAD_JOB_NAME} | cut -d "/" -f 1) + +nomad alloc exec -task hedgedoc-db $alloc_id pg_dumpall -U {{ key "hedgedoc/db/user" }} > "${file}" + +find /storage/backups/nomad/postgres/hedgedoc/postgresql-hedgedoc* -ctime +3 -exec rm {} \; || true + +if [ -s "$file" ]; then # check if file exists and is not empty + echo "Backup successful" + exit 0 +else + rm $file + curl -H "Content-Type: application/json" -d \ + '{"content": "<@&585512338728419341> `PostgreSQL` backup for **'"${job_name}"'** has just **FAILED**\nFile name: `'"$file"'`\nDate: `'"$(TZ=Europe/Dublin date)"'`\nTurn off this script with `nomad job stop '"${job_name}"'` \n\n## Remember to restart this backup job when fixed!!!"}' \ + {{ key "postgres/webhook/discord" }} +fi +``` + From 43acb3bf76f0ec6ebafa33c4b8148d619b9406aa Mon Sep 17 00:00:00 2001 From: wizzdom Date: Wed, 13 Mar 2024 04:49:14 +0000 Subject: [PATCH 06/25] add QoL features: tags, social embed, better search, improved toc (#29) * mkdocs: add various quality of life features * add frontmatter, tags, fix links * fix excess newlines * tags.md: add comment on why it exists --- .github/workflows/ci.yml | 2 +- .gitignore | 2 ++ docs/hardware/aperture/about.md | 13 +++++++-- docs/hardware/aperture/chell.md | 9 ++++++ docs/hardware/aperture/glados.md | 9 ++++++ docs/hardware/aperture/images.md | 9 ++++++ docs/hardware/aperture/index.md | 8 ++++++ docs/hardware/aperture/johnson.md | 9 ++++++ docs/hardware/aperture/wheatley.md | 9 ++++++ docs/hardware/azazel.md | 10 +++++++ docs/hardware/nix/hardcase.md | 9 ++++++ docs/hardware/nix/icarus.md | 10 +++++++ docs/hardware/nix/motherlode.md | 11 ++++++++ docs/hardware/paphos.md | 11 ++++++++ docs/hardware/pygmalion.md | 9 ++++++ docs/hardware/zeus.md | 12 +++++++- docs/services/api.md | 7 +++++ docs/services/bastion-vm.md | 10 +++++++ docs/services/bind.md | 10 +++++++ docs/services/exposed.md | 11 +++++++- docs/services/index.md | 2 +- docs/services/irc.md | 44 ++++++++---------------------- docs/services/socs.md | 7 ++--- docs/stylesheets/extra.css | 12 ++++++++ docs/tags.md | 3 ++ mkdocs.yml | 12 ++++++++ requirements.txt | 8 ++++++ 27 files changed, 225 insertions(+), 43 deletions(-) create mode 100644 docs/tags.md create mode 100644 requirements.txt diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 68eb583f..30e00547 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,5 +25,5 @@ jobs: path: .cache restore-keys: | mkdocs-material- - - run: pip install mkdocs-material mkdocs-git-revision-date-localized-plugin mkdocs-awesome-pages-plugin mkdocs-callouts material-plausible-plugin mkdocs-glightbox mkdocs-redirects + - run: pip install -r requirements.txt - run: mkdocs gh-deploy --force diff --git a/.gitignore b/.gitignore index 9cb4c959..4ef0e600 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ site/ docs/.obsidian/workspace.json docs/.obsidian/graph.json +.cache/ +venv/ diff --git a/docs/hardware/aperture/about.md b/docs/hardware/aperture/about.md index be488e3a..ed539778 100644 --- a/docs/hardware/aperture/about.md +++ b/docs/hardware/aperture/about.md @@ -1,3 +1,10 @@ +--- +title: About Aperture +tags: + - aperture + - hardware +--- + # About Aperture Aperture is Redbrick's fleet of hardware that was installed in May 2022 by `distro`, `pints`, `skins`, `cawnj`, `ymacomp` and `arkues`. @@ -6,9 +13,9 @@ It consists of: - 3x Dell R6515 - [`glados`](glados.md), [`wheatley`](wheatley.md), [`chell`](chell.md) - | CPU | RAM | Storage | - |:-----------------------------------------:|:---------------------------------:|:--------------------------------:| - | AMD 7302P 3GHz, 16C/32T, 128M, 155W, 3200 | 2x 16GB RDIMM, 3200MT/s Dual Rank | 4x 2TB SATA HDDs (hardware RAID) | +| CPU | RAM | Storage | +| ----------------------------------------- | --------------------------------- | -------------------------------- | +| AMD 7302P 3GHz, 16C/32T, 128M, 155W, 3200 | 2x 16GB RDIMM, 3200MT/s Dual Rank | 4x 2TB SATA HDDs (hardware RAID) | - 2x Ubiquiti USW Pro - `rivendell`, `isengard` - 1x Ubiquiti UDM Pro - `mordor` diff --git a/docs/hardware/aperture/chell.md b/docs/hardware/aperture/chell.md index 49ceb2c5..6b468769 100644 --- a/docs/hardware/aperture/chell.md +++ b/docs/hardware/aperture/chell.md @@ -1,3 +1,12 @@ +--- +title: Chell +tags: + - hardware + - aperture + - chell + - details +--- + # Chell ## Details diff --git a/docs/hardware/aperture/glados.md b/docs/hardware/aperture/glados.md index c69a58fe..5baeaf10 100644 --- a/docs/hardware/aperture/glados.md +++ b/docs/hardware/aperture/glados.md @@ -1,3 +1,12 @@ +--- +title: Glados +tags: + - hardware + - aperture + - glados + - details +--- + # Glados ## Details diff --git a/docs/hardware/aperture/images.md b/docs/hardware/aperture/images.md index 85a70d15..f2f6259e 100644 --- a/docs/hardware/aperture/images.md +++ b/docs/hardware/aperture/images.md @@ -1,3 +1,12 @@ +--- +title: Images +tags: + - hardware + - aperture + - install + - images +--- + # Images ## Servers diff --git a/docs/hardware/aperture/index.md b/docs/hardware/aperture/index.md index 41d3f4db..3af9fb68 100644 --- a/docs/hardware/aperture/index.md +++ b/docs/hardware/aperture/index.md @@ -1,3 +1,11 @@ +--- +title: Aperture +tags: + - aperture + - details + - getting-started +--- + # Aperture ## What is Aperture? diff --git a/docs/hardware/aperture/johnson.md b/docs/hardware/aperture/johnson.md index ab9d2d5f..46b6d99f 100644 --- a/docs/hardware/aperture/johnson.md +++ b/docs/hardware/aperture/johnson.md @@ -1,3 +1,12 @@ +--- +title: Johnson +tags: + - aperture + - hardware + - johnson + - details +--- + # Johnson ## Details diff --git a/docs/hardware/aperture/wheatley.md b/docs/hardware/aperture/wheatley.md index 75d37ba1..8da637e9 100644 --- a/docs/hardware/aperture/wheatley.md +++ b/docs/hardware/aperture/wheatley.md @@ -1,3 +1,12 @@ +--- +title: Wheatley +tags: + - aperture + - hardware + - wheatley + - details +--- + # Wheatley ## Details diff --git a/docs/hardware/azazel.md b/docs/hardware/azazel.md index b56604d9..8a7809ec 100644 --- a/docs/hardware/azazel.md +++ b/docs/hardware/azazel.md @@ -1,3 +1,13 @@ +--- +title: Azazel +tags: + - login-box + - hardware + - azazel + - details + - debian +--- + # Azazel ## Details diff --git a/docs/hardware/nix/hardcase.md b/docs/hardware/nix/hardcase.md index 44962f6a..1b2a16d1 100644 --- a/docs/hardware/nix/hardcase.md +++ b/docs/hardware/nix/hardcase.md @@ -1,3 +1,12 @@ +--- +title: Hardcase +tags: + - nixos + - hardware + - details + - hardcase +--- + # Hardcase ## Details diff --git a/docs/hardware/nix/icarus.md b/docs/hardware/nix/icarus.md index 948d37c3..2ab4b0dc 100644 --- a/docs/hardware/nix/icarus.md +++ b/docs/hardware/nix/icarus.md @@ -1,3 +1,13 @@ +--- +title: Icarus +tags: + - nixos + - hardware + - icarus + - daedalus + - details +--- + # Icarus Daedalus and Icarus ~~are~~ were twins ~~and thus share documentation.~~ diff --git a/docs/hardware/nix/motherlode.md b/docs/hardware/nix/motherlode.md index 46c88251..44ea4a19 100644 --- a/docs/hardware/nix/motherlode.md +++ b/docs/hardware/nix/motherlode.md @@ -1,3 +1,14 @@ +--- +title: Motherlode +tags: + - nixos + - hardware + - motherlode + - details + - qemu + - libvirt +--- + # Motherlode ## Details diff --git a/docs/hardware/paphos.md b/docs/hardware/paphos.md index bd5e06e2..efea1bf2 100644 --- a/docs/hardware/paphos.md +++ b/docs/hardware/paphos.md @@ -1,3 +1,14 @@ +--- +title: Paphos +tags: + - hardware + - paphos + - details + - dns + - bind + - ubuntu +--- + # Paphos ## Details diff --git a/docs/hardware/pygmalion.md b/docs/hardware/pygmalion.md index 4509418e..c83c63ee 100644 --- a/docs/hardware/pygmalion.md +++ b/docs/hardware/pygmalion.md @@ -1,3 +1,12 @@ +--- +title: Pygmalion +tags: + - login-box + - hardware + - pygmalion + - ubuntu +--- + # Pygmalion ## Details diff --git a/docs/hardware/zeus.md b/docs/hardware/zeus.md index 070b5caa..95ab58f5 100644 --- a/docs/hardware/zeus.md +++ b/docs/hardware/zeus.md @@ -1,3 +1,13 @@ +--- +title: Zeus +tags: + - hardware + - zeus + - details + - docker + - ubuntu +--- + # Zeus ## Details @@ -21,5 +31,5 @@ - [Admin API](../services/api.md) at: [api.redbrick.dcu.ie](https://api.redbrick.dcu.ie) - brickbot2 - Secretary's email generator at: [generator.redbrick.dcu.ie](https://generator.redbrick.dcu.ie) -- [CodiMD](../services/codimd.md) at: [md.redbrick.dcu.ie](https://md.redbrick.dcu.ie) +- [CodiMD](../services/md.md) at: [md.redbrick.dcu.ie](https://md.redbrick.dcu.ie) - all of this is routed through [traefik](../services/traefik.md) as a reverse proxy diff --git a/docs/services/api.md b/docs/services/api.md index 406ee4bf..8772af2d 100644 --- a/docs/services/api.md +++ b/docs/services/api.md @@ -1,3 +1,10 @@ +--- +title: API +tags: + - services + - api +--- + # API ## Redbrick Administrator Web API diff --git a/docs/services/bastion-vm.md b/docs/services/bastion-vm.md index 93813f76..8b7b4914 100644 --- a/docs/services/bastion-vm.md +++ b/docs/services/bastion-vm.md @@ -1,3 +1,13 @@ +--- +title: Bastion VM +tags: + - aperture + - services + - nomad + - vm + - ingress +--- + # Bastion VM This VM is an ephemeral machine that can be placed on any nomad client that has the qemu driver enabled. diff --git a/docs/services/bind.md b/docs/services/bind.md index 87f1679a..191f50fb 100644 --- a/docs/services/bind.md +++ b/docs/services/bind.md @@ -1,3 +1,13 @@ +--- +title: Bind9 +tags: + - services + - dns +author: + - distro + - ylmcc +--- + # Bind9 - `distro`, `ylmcc` Bind9 is our DNS provider. Currently it runs on [`paphos`](../hardware/paphos.md), but this may change in the near future. diff --git a/docs/services/exposed.md b/docs/services/exposed.md index 6a23cdef..d5284e25 100644 --- a/docs/services/exposed.md +++ b/docs/services/exposed.md @@ -1,3 +1,12 @@ +--- +title: Services Exposed to the Internet +author: + - wizzdom +tags: + - services + - exposed +--- + # Services Exposed to the Internet - `wizzdom` Firstly, it's important to mention that Redbrick is currently split in 2 parts: @@ -40,7 +49,7 @@ Firstly, it's important to mention that Redbrick is currently split in 2 parts: - [Wetty](servers.md#Logging%20in%20to%20Wetty) at: [wetty.redbrick.dcu.ie](https://wetty.redbrick.dcu.ie) - [Admin API](api.md) at: [api.redbrick.dcu.ie](https://api.redbrick.dcu.ie) - Secretary's email generator at: [generator.redbrick.dcu.ie](https://generator.redbrick.dcu.ie) - - [CodiMD](codimd.md) at: [md.redbrick.dcu.ie](https://md.redbrick.dcu.ie) + - [CodiMD](md.md) at: [md.redbrick.dcu.ie](https://md.redbrick.dcu.ie) - all of this is routed through [traefik](traefik.md) as a reverse proxy - [paphos](../hardware/paphos.md) - `136.206.15.53` - **OS**: Ubuntu 14.04 LTS diff --git a/docs/services/index.md b/docs/services/index.md index de224841..6cf4cdbc 100644 --- a/docs/services/index.md +++ b/docs/services/index.md @@ -5,7 +5,7 @@ Here you will find a list of all the services Redbrick runs, along with some con - [api](api.md) - [bastion-vm](bastion-vm.md) - [bind](bind.md) -- [codimd](codimd.md) +- [md](md.md) - [consul](consul.md) - [gitea](gitea.md) - [irc](irc.md) diff --git a/docs/services/irc.md b/docs/services/irc.md index c82c66d6..758235bd 100644 --- a/docs/services/irc.md +++ b/docs/services/irc.md @@ -2,54 +2,37 @@ ## Redbrick InspIRCd -In 2016/2017 we began work to move to InspIRCd. This was due to the complications in ircd-hybrid and how old it was. -These complications stopped new netsocs joining us so we all agreed to move irc. $ 4 years later after multiple attempts -we had not migrated. Until TCD decided to shutdown their server breaking the network. +In 2016/2017 we began work to move to InspIRCd. This was due to the complications in ircd-hybrid and how old it was. These complications stopped new netsocs joining us so we all agreed to move irc. $ 4 years later after multiple attempts we had not migrated. Until TCD decided to shutdown their server breaking the network. We run Inspircd v3 on Metharme. InspIRCd's docs can be found [here](https://docs.inspircd.org/) for configuration specifics. -IRC is available at `irc.redbrick.dcu.ie` on port `6697`. SSL is required for connection, we do not support non-SSL. +IRC is available at `irc.redbrick.dcu.ie` on port `6697`. SSL is required for connection, we do not support non-SSL. When connecting from a redbrick server a user will be automatically logged in. If connecting from an external server a user must pass their password on login. -When connecting from a redbrick server a user will be automatically logged in. If connecting from an external server a -user must pass their password on login. - -For the purpose of external peering of other servers the port `7001` is expose as well. Similarly to clients we only -support SSL on this port. +For the purpose of external peering of other servers the port `7001` is exposed as well. Similarly to clients we only support SSL on this port. For docs on connecting and using an IRC client please refer to the [wiki](https://wiki.redbrick.dcu.ie/index.php/IRC). ## Installation -InspIRCd is installed with Nix. There is no Nix package for InspIRCd so we compile a specific git tag from source. See -[Nix package](https://github.com/redbrick/nix-configs/tree/master/packages/inspircd) for details on how it is compiled. - -Given we only support SSL and require LDAP, we need to enable both at compile time. +InspIRCd is installed with Nix. There is no Nix package for InspIRCd so we compile a specific git tag from source. See [Nix package](https://github.com/redbrick/nix-configs/tree/master/packages/inspircd) for details on how it is compiled. Given we only support SSL and require LDAP, we need to enable both at compile time. ## Configuration -InspIRCd's configuration is in Nix [here](https://github.com/redbrick/nix-configs/blob/master/services/ircd/inspircd/conf.nix). -This config will be converted to xml on disc. +InspIRCd's configuration is in Nix [here](https://github.com/redbrick/nix-configs/blob/master/services/ircd/inspircd/conf.nix). This config will be converted to xml on disc. ### Important Configuration -_oper_ is a list of admin users on the irc server. Their `OPER` password will need to be manually hashed with -`hmac-sha256`, and placed in a secret on the server to be read in by inspircd. - -_ldapwhitelist_ is a list of cidr addresses that do no require authentication. The list consists of Redbrick public and -private addresses as well as `oldsoc`. - -_link_ is a list of all servers we peer with including the anope services server that runs on the same box. +- _oper_ is a list of admin users on the irc server. Their `OPER` password will need to be manually hashed with `hmac-sha256`, and placed in a secret on the server to be read in by inspircd. +- _ldapwhitelist_ is a list of cidr addresses that do no require authentication. The list consists of Redbrick public and private addresses as well as `oldsoc`. +- _link_ is a list of all servers we peer with including the anope services server that runs on the same box. ### oldsoc.net -`oldsoc.net` is a server run by old TCD netsocers. All the users on it are the remaining TCD associates following the -shutdown of TCD IRCd. This server is maintained by its own users and has explicit permission to join IRC without LDAP auth. +`oldsoc.net` is a server run by old TCD netsocers. All the users on it are the remaining TCD associates following the shutdown of TCD IRCd. This server is maintained by its own users and has explicit permission to join IRC without LDAP auth. ## Anope -Redbrick runs Anope services for the entire network. As with -[inspircd we compile](https://github.com/redbrick/nix-configs/tree/master/packages/inspircd) from source. Refer to anopes -[github docs](https://github.com/anope/anope/tree/2.0/docs) for configuration specifics. +Redbrick runs Anope services for the entire network. As with [inspircd we compile](https://github.com/redbrick/nix-configs/tree/master/packages/inspircd) from source. Refer to anopes [github docs](https://github.com/anope/anope/tree/2.0/docs) for configuration specifics. Our current Anope is configured with standard mods of chanserv, nickserv and operserv. All config is in [here](https://github.com/redbrick/nix-configs/tree/master/services/ircd/anope/confs). @@ -57,9 +40,6 @@ Anope stores all info in a custom db file on disk. ## Discord Bridge - `butlerx` -We run a [bridge](https://github.com/qaisjp/go-discord-irc) between the Redbrick Discord and irc. The configuration for -this is [here](https://github.com/redbrick/nix-configs/tree/master/services/ircd/discord/conf.nix). +We run a [bridge](https://github.com/qaisjp/go-discord-irc) between the Redbrick Discord and irc. The configuration for this is [here](https://github.com/redbrick/nix-configs/tree/master/services/ircd/discord/conf.nix). -The bridge adds all users from discord with the suffix `_d2` and all irc users appear as them self but tagged as a bot -in discord. Not all discord channels are on IRC, the config above contains a mapping of irc channels to discord channels -id's. This needs to be manually updated to add more channels. +The bridge adds all users from discord with the suffix `_d2` and all irc users appear as them self but tagged as a bot in discord. Not all discord channels are on IRC, the config above contains a mapping of irc channels to discord channels id's. This needs to be manually updated to add more channels. diff --git a/docs/services/socs.md b/docs/services/socs.md index ae6af893..f275a2a5 100644 --- a/docs/services/socs.md +++ b/docs/services/socs.md @@ -1,7 +1,6 @@ # Socs Using Redbrick Infrastructure - MPS/DCUfm - [`icecast`](icecast.md) -- MPS/TheCollegeView - https://thecollegeview.ie - `wordpress` -- DCU Style - https://thelookonline.dcu.ie - `wordpress` -- DCU Solar Racing - https://solarracing.ie -- +- MPS/TheCollegeView - [TheCollegeView](https://thecollegeview.ie) - `wordpress` +- DCU Style - [The Look](https://thelookonline.dcu.ie) - `wordpress` +- DCU Solar Racing - [Solarracing.ie](https://solarracing.ie) diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index 47a055f4..1780dab2 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -9,3 +9,15 @@ [data-md-color-scheme="slate"] * { --md-typeset-a-color: #d62e2e; } + +@keyframes logo { + 0%, 40%, 80%, 100% { + transform: scale(1); + } + 20%, 60% { + transform: scale(1.5); + } +} +.md-logo { + animation: logo 1000ms 1; +} diff --git a/docs/tags.md b/docs/tags.md new file mode 100644 index 00000000..f8c2d7ef --- /dev/null +++ b/docs/tags.md @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index eef1deee..45a54b4e 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,5 +1,6 @@ site_name: Redbrick Docs site_url: https://docs.redbrick.dcu.ie/ +site_description: The home for all Redbrick technical documentation repo_url: https://github.com/redbrick/docs repo_name: redbrick/docs use_directory_urls: true @@ -17,6 +18,12 @@ theme: - navigation.indexes - content.code.copy - content.code.annotate + - search.highlight + - search.share + - search.suggest + - toc.follow + - toc.integrate + palette: - media: "(prefers-color-scheme)" toggle: @@ -42,7 +49,10 @@ plugins: - callouts - glightbox - search + - social - material-plausible + - tags: + tags_file: tags.md - git-revision-date-localized: type: timeago - redirects: @@ -77,6 +87,8 @@ markdown_extensions: anchor_linenums: true line_spans: __span pygments_lang_class: true + - toc: + permalink: true copyright: Redbrick Docs diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..4eb5d771 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,8 @@ +mkdocs-material +mkdocs-git-revision-date-localized-plugin +mkdocs-awesome-pages-plugin +mkdocs-callouts +material-plausible-plugin +mkdocs-glightbox +mkdocs-redirects +mkdocs-material[imaging] From 5808e3bb177cc03d190b8f246c78d46ae8663b85 Mon Sep 17 00:00:00 2001 From: wizzdom Date: Wed, 13 Mar 2024 06:04:42 +0000 Subject: [PATCH 07/25] add privatebin docs (#32) * add privatebin docs * Update docs/services/paste.md Co-authored-by: James Hackett --------- Co-authored-by: James Hackett --- docs/services/paste.md | 48 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 docs/services/paste.md diff --git a/docs/services/paste.md b/docs/services/paste.md new file mode 100644 index 00000000..a861ca1e --- /dev/null +++ b/docs/services/paste.md @@ -0,0 +1,48 @@ +--- +title: Pastebin +author: + - wizzdom +tags: + - aperture + - nomad + - docker +--- + +# Pastebin - `wizzdom` + +Redbrick currently uses [Privatebin](https://github.com/PrivateBin/PrivateBin) as a paste utility accessible at [paste.redbrick.dcu.ie](https://paste.redbrick.dcu.ie) and [paste.rb.dcu.ie](https://paste.rb.dcu.ie) + +## Privatebin + +The Privatebin instance is deployed with [nomad](nomad.md) on [`aperture`](../hardware/aperture/index.md). Its configuration is available [here](https://github.com/redbrick/nomad/blob/master/jobs/services/privatebin.hcl). Privatebin doesn't support full configuration via environment variables but instead uses a `conf.php` file. This is passed in using [nomad templates](https://developer.hashicorp.com/nomad/docs/job-specification/template). + +All sensitive variables are stored in the [`consul`](consul.md) KV store. + +The main points are as follows: + +- configure URL shortener ([`shlink`](shlink.md)) + +```php +urlshortener = "https://s.rb.dcu.ie/rest/v1/short-urls/shorten?apiKey={{ key "privatebin/shlink/api" }}&format=txt&longUrl=" +``` + +- enable file upload, set file size limit and enable compression + +```php +fileupload = true +sizelimit = 10485760 +compression = "zlib" +``` + +- Connect to PostgreSQL database + +```php +[model] +class = Database +[model_options] +dsn = "pgsql:host=postgres.service.consul;dbname={{ key "privatebin/db/name" }}" +tbl = "privatebin_" ; table prefix +usr = "{{ key "privatebin/db/user" }}" +pwd = "{{ key "privatebin/db/password" }}" +opt[12] = true ; PDO::ATTR_PERSISTENT ; use persistent connections - default +``` From 08b5a4a51bb0ec5571eb4a5a70c5c2a16dee5a52 Mon Sep 17 00:00:00 2001 From: wizzdom Date: Wed, 13 Mar 2024 06:05:10 +0000 Subject: [PATCH 08/25] =?UTF-8?q?cleanup:=20move/rename,=20remove=20old=20?= =?UTF-8?q?roadmap,=20add=20homepage=20links,=20redirec=E2=80=A6=20(#31)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * cleanup: move/rename, remove old roadmap, add homepage links, redirects, resize discord embed * change nomad title --- docs/contact.md | 2 +- docs/index.md | 4 +- docs/{services => procedures}/cheatsheet.md | 0 docs/procedures/index.md | 2 + docs/services/md.md | 2 +- docs/services/nomad.md | 12 +-- docs/services/roadmap.md | 105 -------------------- mkdocs.yml | 1 + 8 files changed, 14 insertions(+), 114 deletions(-) rename docs/{services => procedures}/cheatsheet.md (100%) delete mode 100644 docs/services/roadmap.md diff --git a/docs/contact.md b/docs/contact.md index ff4fa3b0..8bfeea29 100644 --- a/docs/contact.md +++ b/docs/contact.md @@ -2,4 +2,4 @@ If you have any questions or comments, please contact us at [elected-admins@redbrick.dcu.ie](mailto:elected-admins@redbrick.dcu.ie). Or you can join the [Discord server](https://discord.gg/MttnTq9UyK)! - + diff --git a/docs/index.md b/docs/index.md index 498d2248..d7b73785 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,6 +10,7 @@ This is mostly intended for admins, future admins, webmasters, and everybody els - [Redbrick Website](https://redbrick.dcu.ie) - [SSH help](https://docs.redbrick.dcu.ie/services/servers/#logging-in) +- [Aperture - Redbrick's new fleet of hardware](hardware/aperture/about.md) ## Webgroup @@ -18,5 +19,6 @@ This is mostly intended for admins, future admins, webmasters, and everybody els So, you want to become an admin. Brave of you. Here's some stuff you should probably read: - [Becoming an admin](procedures/new-admins.md) +- [Admin Cheatsheet](procedures/cheatsheet.md) - [Redbrick System Administrator Policies](procedures/policies.md) -- [Abuse at Redbrick](https://fucking.readthedocs.io/en/latest/procedures/abuse), and the committee's stance on it \ No newline at end of file +- [Abuse at Redbrick](https://fucking.readthedocs.io/en/latest/procedures/abuse), and the committee's stance on it diff --git a/docs/services/cheatsheet.md b/docs/procedures/cheatsheet.md similarity index 100% rename from docs/services/cheatsheet.md rename to docs/procedures/cheatsheet.md diff --git a/docs/procedures/index.md b/docs/procedures/index.md index 9e9698f9..0ccdd8fd 100644 --- a/docs/procedures/index.md +++ b/docs/procedures/index.md @@ -4,6 +4,8 @@ Here you can find a list of various procedures useful for the day-to-day running ### [New elected admins](new-admins.md) +### [Cheatsheet](cheatsheet.md) + ### [Admin VPN](vpn.md) ### [Ansible](ansible.md) diff --git a/docs/services/md.md b/docs/services/md.md index 77eb6b53..20ee8061 100644 --- a/docs/services/md.md +++ b/docs/services/md.md @@ -50,6 +50,7 @@ See the [HedgeDoc docs](https://docs.hedgedoc.org/configuration/) for more info The HedgeDoc database is backed up periodically by a [nomad](nomad.md) job, the configuration for which is [here](https://github.com/redbrick/nomad/blob/master/jobs/services/hedgedoc-backup.hcl). The bulk of this job is this script which: + - grabs the `alloc_id` of the currently running HedgeDoc allocation from nomad - execs into the container running `pg_dumpall` dumping the database into a file with the current date and time - if the backup is unsuccessful the script notifies the admins on discord via a webhook. @@ -79,4 +80,3 @@ else {{ key "postgres/webhook/discord" }} fi ``` - diff --git a/docs/services/nomad.md b/docs/services/nomad.md index e21e4c90..3f86e0f5 100644 --- a/docs/services/nomad.md +++ b/docs/services/nomad.md @@ -1,14 +1,14 @@ --- -title: Nomad on Aperture +title: Nomad author: -- distro -- wizzdom + - distro + - wizzdom tags: -- nomad -- aperture + - nomad + - aperture --- -# Nomad on Aperture - `distro`, `wizzdom` +# Nomad - `distro`, `wizzdom` > Adapted from [redbrick/nomad README](https://github.com/redbrick/nomad/README.md) diff --git a/docs/services/roadmap.md b/docs/services/roadmap.md deleted file mode 100644 index 57a27d1e..00000000 --- a/docs/services/roadmap.md +++ /dev/null @@ -1,105 +0,0 @@ -# Roadmap - -## Operating Systems Of Choice - -- NixOS -> Used on Motherlode -- Ubuntu -> Login boxes -- Debian -> Used for all other machines - -Why? - -- Sensible defaults (/etc/resolve.conf etc.) -- No snap -- Debian is as close to the most popular distribution as possible - -## Important (Core) Services - -_In order of priority._ - -- DNS - - Migrate to **Fred** - - Set up on new server - - Clean up the zone file -- /storage/ - - NFS, backups, database (from Icarus) and failover (from Daedalus) -- LDAP (Daedalus, Icarus read-only slave) -- pwsafe (look at changing to hashcorp vault/bitwarden) - ---- - -### -> Login Machines (Ubuntu) - -- Azazel -- Pygmalion -- Zeus (Non-login -> Designated Docker Host) - -### -> Multipurpose Machines (Debian) - -- Halfpint -- Paphos -- Daedalus -- Icarus -- Albus -- Clyde -- Hardcase -- Metharme -- Fred - -### -> Designated Nix Machine - -**Motherlode.** - -Why? - -- Clubs and Socs and other services like Mail are quite honestly easiest done using Nix configs (even though it can be disgusting). It is a viable choice to solve a hard problem. - -#### Services Using Nix to Be Moved to Motherlode - -- Mailman -- Certs -- Grafana **(X)** -- Httpd (Apache) -- ircd -- LDAP -- Postfix -- zfsquota -- bitlbee -- git -- glusterfs -- libvrt -- Loki **(X)** -- postgres -- prometheus **(X)** -- promtail -- rbbackup -- redis -- squid -- sshnix (ssh keys) -- thelounge **(X)** -- znapsend - -## Docs - -- Update [fucking.readthedocs.io](https://fucking.readthedocs.io) to new home, [docs.redbrick.dcu.ie](https://docs.redbrick.dcu.ie) - -## TODO - -In order of priority. - -- Update docs - - Material for MkDocs -- Make passwordsafe redundant - - Migrate to BitWarden - - Use Fred as a temporary host while we decide what to make it's permanent host -- Azazel needs to be functional - - Authentication missing local users -- Fred becomes new DNS host - - Remove DNS from Paphos -- Databases moved to Master/Redundancy Machines - - Databases are dependancies for the services to come - - Hardcase and Metharme -- Move all services to remain to Motherlode/Nix - - Remove redundant services (marked X) -- Firewall cleanup - - Assign IP's -- Stable Monitoring setup for all servers and services diff --git a/mkdocs.yml b/mkdocs.yml index 45a54b4e..7ed5344e 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -70,6 +70,7 @@ plugins: 'aperture/ansible.md': 'procedures/ansible.md' 'aperture/firewall.md': 'hardware/network/mordor.md' 'aperture/icecast.md': 'services/icecast.md' + 'services/codimd.md': 'services/md.md' markdown_extensions: From 0d25667990679e2f6ecec387043602f8399d1785 Mon Sep 17 00:00:00 2001 From: wizzdom Date: Wed, 13 Mar 2024 06:05:23 +0000 Subject: [PATCH 09/25] add ldap.md from old docs (#33) --- docs/services/ldap.md | 210 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 docs/services/ldap.md diff --git a/docs/services/ldap.md b/docs/services/ldap.md new file mode 100644 index 00000000..7bcb25b5 --- /dev/null +++ b/docs/services/ldap.md @@ -0,0 +1,210 @@ +--- +title: LDAP +author: + - m1cr0man +tags: + - ldap + - icarus + - daedalus +--- + +# LDAP - `m1cr0man` + +LDAP is our directory service. It stores usernames, passwords, UIDs, quotas, and other user specific info. + +LDAP's structure is different to most other database systems. If you are not familiar with it, I recommend investing some time into looking at how schemas and distinguished names work. + +## Deployment + +- OpenLDAP is deployed with Nix to Daedalus and Icarus +- Daedalus is the master, Icarus is slaved to it and can be used as a read only failover +- `ldap.internal` and `ldap2.internal` are slaved to Daedalus + Icarus respectively +- Both servers store their data in `/var/db/openldap` +- The ldap.secret, which should **ALWAYS** have permissions `400`, and owned by the openldap user, is stored in `/var/secrets`. It is not automatically created and must be copied when setting up new hosts +- `rb-ldap` and `useradm` are wrappers around LDAP that are custom built + +## Redbrick Special Notes + +- The root user password is in the passwordsafe +- The OID for most of the schema is [DCU's](http://www.oid-info.com/cgi-bin/display?oid=1.3.6.1.4.1.9736&submit=Display&action=display) +- The configs that exist for NixOS were mostly ported from our last + LDAP server ([`paphos`](../hardware/paphos.md)) to maintain compatibility +- At the time of writing, LDAP is not configured with TLS +- There are 2 scripts to manage quotas on /storage that run on the server serving NFS (`zfsquota` and `zfsquotaquery`). They are covered under the NFS documentation. +- There's a user in ldap called testing, for testing. The password is in `pwsafe`. + +## Operation + +The `ldap*` suite of commands can be used to manage LDAP. Their man pages are very well documented, but we've provided most common operations below. + +Note that the ldap.secret is a crypted file, and not equal to the actual password you need to run ldap commands. + +### Ldapsearch Recipes + +`ldapsearch` can be used with and without authenticating as root. Without root, some fields (such as the password hash, altmail) will be hidden. + +```bash +# Dump the entire LDAP database in LDIF form, which can be used as a form of backup +ldapsearch -b o=redbrick -xLLL -D cn=root,ou=ldap,o=redbrick -y /path/to/passwd.txt + +# Find a user by name, and print their altmail +ldapsearch -b o=redbrick -xLLL -D cn=root,ou=ldap,o=redbrick -y /path/to/passwd.txt uid=m1cr0man altmail + +# Find quotas for all users edited by m1cr0man +ldapsearch -b o=redbrick -xLLL updatedby=m1cr0man quota + +# Find all member's usernames +ldapsearch -b o=redbrick -xLLL objectClass=member uid + +# Find all expired users. Notice here that you can query by hidden fields, but you can't read them +ldapsearch -b o=redbrick -xLLL 'yearsPaid < 1' uid +``` + +### Ldapmodify Recipes + +You can instead pass a file with `-f` when necessary. + +To test a command add `-n` for no-op mode. + +Changing `updatedby` and `updated` is added to each command as good practise. + +```bash +# Add quota info to a user +ldapmodify -x -D cn=root,ou=ldap,o=redbrick -y /path/to/passwd.txt << EOF +dn: uid=testing,ou=accounts,o=redbrick +changetype: modify +add: quota +quota: 3G +- +replace: updatedby +updatedby: $USER +- +replace: updated +updated: $(date +'%F %X') +EOF + +# Change a user's shell +ldapmodify -x -D cn=root,ou=ldap,o=redbrick -y /path/to/passwd.txt << EOF +dn: uid=testing,ou=accounts,o=redbrick +changetype: modify +replace: loginShell +loginShell: /usr/local/shells/disusered +- +replace: updatedby +updatedby: $USER +- +replace: updated +updated: $(date +'%F %X') +EOF + +# Update yearsPaid +ldapmodify -x -D cn=root,ou=ldap,o=redbrick -y /path/to/passwd.txt << EOF +dn: uid=testing,ou=accounts,o=redbrick +changetype: modify +replace: yearsPaid +yearsPaid: 1 +- +replace: updatedby +updatedby: $USER +- +replace: updated +updated: $(date +'%F %X') +EOF +``` + +### Ldapadd Recipes + +Occasionally you'll need to add people or things to ldap manually, such as a user you're recreating from backups, or a reserved system name such as a new machine. This is where ldapadd comes in. + +```bash +# Create a file to read the new entry from +cat > add.ldif << EOF +dn: uid=redbrick,ou=reserved,o=redbrick +uid: redbrick +description: DNS entry +objectClass: reserved +objectClass: top +EOF + +# Import the ldif +ldapadd -x -D cn=root,ou=ldap,o=redbrick -y /path/to/passwd.txt -f add.ldif + +# Note if you are importing a full ldif onto a new server, use slapadd instead +# Ensure slapd is not running first +slapadd -v -l backup.ldif +``` + +### Other Recipes + +On a yearly basis, the `yearsPaid` fields must be incremented for every users, and last year's newbies need to be not newbies anymore. + +Remember to take off `-n` when you are ready to rock. + +Adding the `updated` and `updatedby` fields from above to these queries would be a good idea. + +```bash +# Decrement yearsPaid +# WARNING NOT IDEMPOTENT, RUN ONCE +ldapsearch -b o=redbrick -xLLL -D cn=root,ou=ldap,o=redbrick -y /path/to/passwd.txt objectClass=member yearsPaid |\ +tee yearsPaid-$(date +'%F').backup.ldif |\ +awk '/yearsPaid/ { print "changetype: modify\nreplace: yearsPaid\nyearsPaid: " $2 - 1 } ! /yearsPaid/ {print $0}' |\ +ldapmodify -x -D cn=root,ou=ldap,o=redbrick -y /path/to/passwd.txt -n + +# De-newbie last year's users +ldapsearch -b o=redbrick -xLLL -D cn=root,ou=ldap,o=redbrick -y /path/to/passwd.txt newbie=TRUE dn |\ +tee newbie-$(date +'%F').backup.ldif |\ +awk '/^dn/ {print $0"\nchangetype: modify\nreplace: newbie\nnewbie: FALSE\n"}' |\ +ldapmodify -x -D cn=root,ou=ldap,o=redbrick -y /path/to/passwd.txt -n + +# Set quotas of users without quotas +ldapsearch -b o=redbrick -xLLL '(&(objectClass=posixAccount)(!(quota=*)))' dn |\ +awk '/^dn/ {print $0"\nchangetype: modify\nadd: quota\nquota: 2G\n"}' |\ +ldapmodify -x -D cn=root,ou=ldap,o=redbrick -y /path/to/passwd.txt -n +``` + +## Troubleshooting + +First off, it's worth calling out that if you are coming here to find help with a client side issue, chances are the DNS rule applies: + +>It's probably not LDAP + +With that out of the way, here's some things to check - in order. + +### Check Reachability of LDAP + +Run from the master and also from the problem client. It should return `m1cr0man`'s details. If you get an `invalid credentials` or `object not found` check that the LDAP auth config hasn't changed. If you get a connection error then restart the service. + +```bash +ldapsearch -h ldap.internal -p 389 -xLLL -b o=redbrick uid=m1cr0man +``` + +### Verify LDAP Can Be Written to + +Get the password from the passwordsafe. Run this from the master. + +```bash +ldapmodify -D cn=root,ou=ldap,o=redbrick -x -y filewithpwd.txt << EOF +dn: uid=m1cr0man,ou=accounts,o=redbrick +changetype: modify +replace: quota +quota: 3G +EOF +``` + +Run the command from the first troubleshooting step to verify the value changed. + +If it fails with an auth issue, triple check your password file (it should contain the plain text password). If it fails with a non-auth issue, then check the service logs. + +### Enable Debug Logging + +OpenLDAP produces a nice set of logs when the `loglevel` is _not_ set. + +Remove `loglevel` from `extraConfig` in the Nix config and switch, then run this command to tail the logs: + +```bash +journalctl -fu openldap +``` + +### Re-syncing Secondary LDAP Server(s) + +In the event a secondary server becomes out of sync with the master, it can be synced by stopping the server, deleting its database files, then restarting the server. Do this after ensuring that `config.redbrick.ldapSlaveTo` is set correctly. From 25277530b394cff8456e6baa032f15c871e2ac35 Mon Sep 17 00:00:00 2001 From: wizzdom Date: Sun, 31 Mar 2024 18:48:31 +0100 Subject: [PATCH 10/25] api: refactor, add nomad docs (#34) --- docs/services/api.md | 80 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 64 insertions(+), 16 deletions(-) diff --git a/docs/services/api.md b/docs/services/api.md index 8772af2d..fb01da0f 100644 --- a/docs/services/api.md +++ b/docs/services/api.md @@ -3,33 +3,81 @@ title: API tags: - services - api + - ldap --- -# API - -## Redbrick Administrator Web API +# Redbrick Administrative Web API The source code for the API can be found [here](https://github.com/redbrick/api/). -The Redbrick web API serves as an easy interface to carry out administrator tasks (mainly LDAP related), and for use in automation. This saves time instead of accessing machines, and formulating and executing manual LDAP queries or scripts. +The Redbrick web API serves as an easy interface to carry out administrator tasks *(mainly LDAP related)*, and for use in automation. This saves time instead of accessing machines, and formulating and executing manual LDAP queries or scripts. + +The server code for the API is hosted on [`aperture`](../hardware/aperture/index.md) in a docker container deployed with [`nomad`](nomad.md), the job file for which is [here](https://github.com/redbrick/nomad/blob/master/jobs/services/api.hcl). It is written in Python with [FastAPI](https://fastapi.tiangolo.com/). This container is then served to the public using [`traefik`](traefik.md). + +## Nomad Job File + +The [nomad job for Redbrick's API](https://github.com/redbrick/nomad/blob/master/jobs/services/api.hcl) is similar to most other web servers for the most part. As always, all secrets are stored in [`consul`](consul.md). Some things to watch out for are: + +- The docker image on ghcr.io is private and therefore requires credentials to access. + +```hcl title="Nomad" +auth { + username = "${DOCKER_USER}" + password = "${DOCKER_PASS}" +} +``` + +```hcl title="Nomad" +template { + data = < Note that `USERNAME` can be used to refer to the user's web directory here since it is the name of the directory and doesn't refer to the user object. From 5bb9b83d488584a0c404e48be67bee7f03d85fe8 Mon Sep 17 00:00:00 2001 From: wizzdom Date: Tue, 2 Apr 2024 00:12:29 +0100 Subject: [PATCH 11/25] nomad: add exec docs, fixup links etc. (#36) --- docs/services/nomad.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/services/nomad.md b/docs/services/nomad.md index 3f86e0f5..0b989a1f 100644 --- a/docs/services/nomad.md +++ b/docs/services/nomad.md @@ -78,7 +78,7 @@ This will plan and run the job file without the need for you to copy and paste t nomad job stop -purge name-of-running-job ``` -- Run a garbage collection of jobs, evaluations, allocations, and nodes ad reconcile summaries of all registered jobs. +- Run a garbage collection of jobs, evaluations, allocations, nodes and reconcile summaries of all registered jobs. ```bash nomad system gc @@ -96,11 +96,25 @@ nomad job plan path/to/job/file.hcl nomad job run -check-index [id from last command] path/to/job/file.hcl ``` +## Exec into Container + +At times it is necessary to exec into a docker container to complete maintenance, perform tests or change configurations. The syntax to do this on nomad is similar to `docker exec` with some small additions: + +```bash +nomad alloc exec -i -t -task +``` + +Where: + +- `` is the name of the task you want to exec into *(only needed when there is more than one task in job)* +- `` is the id for the currently running allocation, obtained from the web UI, nomad CLI, or nomad API +- `` is the command you want to run. e.g. `sh`, `rcon-cli` + ## Cluster Configuration [`nomad/cluster-config`](https://github.com/redbrick/nomad/tree/master/cluster-config) contains configuration relating to the configuration of the cluster including: -- node pools +- [Node Pools](#node-pools) - agent config ### Node Pools From 01d927b0945d304241931e8d68909998af077145 Mon Sep 17 00:00:00 2001 From: wizzdom Date: Tue, 2 Apr 2024 00:12:41 +0100 Subject: [PATCH 12/25] cleanup: codeblocks, links (#35) * cleanup: codeblocks, links * mkdocs: more codeblocks formatting --- docs/services/bastion-vm.md | 2 ++ docs/services/index.md | 14 +++++++++++++- docs/services/md.md | 8 ++++---- docs/services/paste.md | 6 +++--- docs/services/socs.md | 5 +++++ docs/services/user-vms.md | 13 ++++++++++++- docs/tags.md | 2 +- mkdocs.yml | 6 ++++++ 8 files changed, 46 insertions(+), 10 deletions(-) diff --git a/docs/services/bastion-vm.md b/docs/services/bastion-vm.md index 8b7b4914..afc5b468 100644 --- a/docs/services/bastion-vm.md +++ b/docs/services/bastion-vm.md @@ -14,6 +14,8 @@ This VM is an ephemeral machine that can be placed on any nomad client that has It acts as the point of ingress for Aperture, with ISS and our [mordor](../hardware/network/mordor.md) allowing traffic to reach it's IP address externally. The VM is configured as a Nomad client itself, in the `ingress` node pool to ensure that only ingress-type allocations are placed there (like [traefik](./traefik.md)). Those services can proxy requests from the Bastion VM to internal services using consul's service DNS resolution, it's service mesh, or by plain IP and port. +![Ingress Topology with Bastion VM](../res/ingress-topology.png) + `cloud-init` is given a static address during the initialisation phase to configure the interface. This ensures that, even if it is replanned, it will be able to accept traffic. The base image that the VM uses is a Debian 12 qcow file. After all configuration was done, the size of the image is `~3.2GB`. The image can be used to create replicas of the ingress on other external IP addresses, creating more availability if needed. diff --git a/docs/services/index.md b/docs/services/index.md index 6cf4cdbc..d78e317c 100644 --- a/docs/services/index.md +++ b/docs/services/index.md @@ -18,11 +18,23 @@ Here you will find a list of all the services Redbrick runs, along with some con In order to add a new service, you will need to edit the [docs](https://github.com/redbrick/docs) repository. -Adding a new service is as easy as creating a new file in `docs/services/` with an appropriate name, and adding the reference to `mkdocs.yml` in the root of the repository. +Adding a new service is as easy as creating a new file in [`docs/services/`](https://github.com/redbrick/docs/tree/master/docs/services) with an appropriate name, and the page will be automatically added to the navigation pane. + +Try to keep file names short and concise, limited to one word if possible and avoid using spaces. The style guide for a service file should be as follows: ```md +--- +title: ServiceName +author: + - username +tags: + - relevant + - tags + +--- + # ServiceName - `username` Short description on how the service works and where it is running diff --git a/docs/services/md.md b/docs/services/md.md index 20ee8061..813903b8 100644 --- a/docs/services/md.md +++ b/docs/services/md.md @@ -1,5 +1,5 @@ --- -title: HedgeDoc +title: MD (HedgeDoc) author: - wizzdom tags: @@ -20,13 +20,13 @@ The important points are as follows: - connecting to the database: -```bash +```hcl title="Nomad" CMD_DB_URL = "postgres://{{ key "hedgedoc/db/user" }}:{{ key "hedgedoc/db/password" }}@{{ env "NOMAD_ADDR_db" }}/{{ key "hedgedoc/db/name" }}" ``` - disabling anonymous users and email signup: -```bash +```hcl title="Nomad" CMD_ALLOW_EMAIL_REGISTER = "false" CMD_ALLOW_ANONYMOUS = "false" CMD_EMAIL = "false" @@ -34,7 +34,7 @@ CMD_EMAIL = "false" - LDAP configuration: -```bash +```hcl title="Nomad" CMD_LDAP_URL = "{{ key "hedgedoc/ldap/url" }}" CMD_LDAP_SEARCHBASE = "ou=accounts,o=redbrick" CMD_LDAP_SEARCHFILTER = "{{`(uid={{username}})`}}" diff --git a/docs/services/paste.md b/docs/services/paste.md index a861ca1e..1b502123 100644 --- a/docs/services/paste.md +++ b/docs/services/paste.md @@ -22,13 +22,13 @@ The main points are as follows: - configure URL shortener ([`shlink`](shlink.md)) -```php +```php title="conf.php" urlshortener = "https://s.rb.dcu.ie/rest/v1/short-urls/shorten?apiKey={{ key "privatebin/shlink/api" }}&format=txt&longUrl=" ``` - enable file upload, set file size limit and enable compression -```php +```php title="conf.php" fileupload = true sizelimit = 10485760 compression = "zlib" @@ -36,7 +36,7 @@ compression = "zlib" - Connect to PostgreSQL database -```php +```php title="conf.php" [model] class = Database [model_options] diff --git a/docs/services/socs.md b/docs/services/socs.md index f275a2a5..524951a5 100644 --- a/docs/services/socs.md +++ b/docs/services/socs.md @@ -1,6 +1,11 @@ +--- +title: Socs using Redbrick Infrastructure +--- + # Socs Using Redbrick Infrastructure - MPS/DCUfm - [`icecast`](icecast.md) - MPS/TheCollegeView - [TheCollegeView](https://thecollegeview.ie) - `wordpress` - DCU Style - [The Look](https://thelookonline.dcu.ie) - `wordpress` - DCU Solar Racing - [Solarracing.ie](https://solarracing.ie) +- DCU Games Society - [`minecraft`](minecraft.md) diff --git a/docs/services/user-vms.md b/docs/services/user-vms.md index a87adb11..4b51052e 100644 --- a/docs/services/user-vms.md +++ b/docs/services/user-vms.md @@ -1,3 +1,14 @@ +--- +title: User VMs +author: + - distro + - wizzdom +tags: + - aperture + - nomad + - qemu +--- + # User VMs User VMs are deployed on [`aperture`](../hardware/aperture/index.md) using [nomad](nomad.md)'s [QEMU driver](https://developer.hashicorp.com/nomad/docs/drivers/qemu). @@ -58,7 +69,7 @@ nomad alloc logs | grep -E "ens3.*global" | cut -d "|" -f 4 | xargs The VMs are configured with cloud-init. Their docs are pretty good, so I won't repeat them here. The files can be served by any HTTP server, and the address is placed into the job file in the QEMU options. -```hcl +```hcl title="Nomad" ... args = [ ... diff --git a/docs/tags.md b/docs/tags.md index f8c2d7ef..c5430ffc 100644 --- a/docs/tags.md +++ b/docs/tags.md @@ -1,3 +1,3 @@ - \ No newline at end of file + diff --git a/mkdocs.yml b/mkdocs.yml index 7ed5344e..83d14713 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -84,10 +84,16 @@ markdown_extensions: - pymdownx.tabbed - pymdownx.superfences - pymdownx.tilde + - pymdownx.highlight + - pymdownx.inlinehilite - pymdownx.highlight: anchor_linenums: true line_spans: __span pygments_lang_class: true + auto_title: true + linenums: true + linenums_style: pymdownx-inline + anchor_linenums: true - toc: permalink: true From 1ff66e6aefc20e03287ba2c1fb6fefdb1d23d59e Mon Sep 17 00:00:00 2001 From: wizzdom Date: Tue, 2 Apr 2024 12:55:27 +0100 Subject: [PATCH 13/25] update exposed.md: remove zeus, add new aperture services (#37) --- docs/services/exposed.md | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/docs/services/exposed.md b/docs/services/exposed.md index d5284e25..7c1ca60c 100644 --- a/docs/services/exposed.md +++ b/docs/services/exposed.md @@ -14,6 +14,8 @@ Firstly, it's important to mention that Redbrick is currently split in 2 parts: - Redbrick 2.0 *a.k.a. "old redbrick"* (on `136.206.15.0/24`) - [Aperture](../hardware/aperture/index.md) *a.k.a. "new redbrick"* (on `136.206.16.0/24`) +![](../network-divorce.png) + ## Old Redbrick - [**azazel**](../hardware/azazel.md) - `136.206.15.24` @@ -36,21 +38,13 @@ Firstly, it's important to mention that Redbrick is currently split in 2 parts: - `apache httpd`: - websites from the webtree (including, but not limited to): - all user's websites `.redbrick.dcu.ie` - - [redbrick.dcu.ie](https://redbrick.dcu.ie) - other websites are mentioned in the [nix-configs repo](https://github.com/redbrick/nix-configs/blob/master/services/httpd/vhosts.nix) - legacy websites (pretty much anything that isn't dockerized) + - [thecollegeview.ie](https://thecollegeview.ie) + - [thelookonline.dcu.ie](https://thelookonline.dcu.ie) - email (`postfix` and `dovecot`) - mailing [lists](https://lists.redbrick.dcu.ie) (`mailman`) - `*.redbrick.dcu.ie` also points here -- [**zeus**](../hardware/zeus.md) - `136.206.15.31` - - **OS**: Ubuntu 18.04 LTS - - **Note**: this is a docker host, everything on here is in a container - - **Services**: - - [Wetty](servers.md#Logging%20in%20to%20Wetty) at: [wetty.redbrick.dcu.ie](https://wetty.redbrick.dcu.ie) - - [Admin API](api.md) at: [api.redbrick.dcu.ie](https://api.redbrick.dcu.ie) - - Secretary's email generator at: [generator.redbrick.dcu.ie](https://generator.redbrick.dcu.ie) - - [CodiMD](md.md) at: [md.redbrick.dcu.ie](https://md.redbrick.dcu.ie) - - all of this is routed through [traefik](traefik.md) as a reverse proxy - [paphos](../hardware/paphos.md) - `136.206.15.53` - **OS**: Ubuntu 14.04 LTS - **Services**: @@ -72,6 +66,14 @@ In aperture, things are done a little differently than on the other network. Ins - [chell](https://chell.redbrick.dcu.ie) - the [amikon.me](https://amikon.me) website for DCU AMS in an `nginx` container - [timetable.redbrick.dcu.ie](https://timetable.redbrick.dcu.ie) a timetable that actually works, 10x better than the [official DCU timetable](https://mytimetable.dcu.ie) + - Redbrick main site [redbrick.dcu.ie](https://redbrick.dcu.ie) + - [HedgeDoc](md.md) at: [md.redbrick.dcu.ie](https://md.redbrick.dcu.ie) + - [Admin API](api.md) at: [api.redbrick.dcu.ie](https://api.redbrick.dcu.ie) + - [Wetty](servers.md#Logging%20in%20to%20Wetty) at: [wetty.redbrick.dcu.ie](https://wetty.redbrick.dcu.ie) + - DCU Solar Racing Website [solarracing.ie](https://solarracing.ie) + - [Redbrick Password Vault](vault.md) (Vaultwarden) at: [vault.redbrick.dcu.ie](https://vault.redbrick.dcu.ie) + - [URL Shortener](shlink.md) + - [Plausible Analytics](plausible.md) at [plausible.redbrick.dcu.ie](https://plausible.redbrick.dcu.ie) - **Notes**: - all web traffic is routed through [traefik](traefik.md) - all new services will be deployed here From 96c5a88fe6540ae4ecd0a7619201d7902caea562 Mon Sep 17 00:00:00 2001 From: wizzdom Date: Wed, 3 Apr 2024 17:52:43 +0100 Subject: [PATCH 14/25] update bind.md: make changing DNS extremely clear (#38) --- docs/services/bind.md | 70 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 58 insertions(+), 12 deletions(-) diff --git a/docs/services/bind.md b/docs/services/bind.md index 191f50fb..09f8ae6d 100644 --- a/docs/services/bind.md +++ b/docs/services/bind.md @@ -1,22 +1,27 @@ --- -title: Bind9 +title: Bind9 (DNS) tags: - services - dns author: - distro - ylmcc + - wizzdom --- -# Bind9 - `distro`, `ylmcc` +# Bind9 - `distro`, `ylmcc`, `wizzdom` -Bind9 is our DNS provider. Currently it runs on [`paphos`](../hardware/paphos.md), but this may change in the near future. +`bind9` is our DNS provider. Currently it runs on [`paphos`](../hardware/paphos.md), but this **will** change in the near future. ## Configuration -The config files for bind are located in `/etc/bind/master/`. The most important file in this directory is the `db.Redbrick.dcu.ie` file. +The config files for bind are located in `/etc/bind/master/`. The most important files in this directory are: -> [!WARNING] Note +- `db.Redbrick.dcu.ie` +- `db.Rb.dcu.ie` +- various other files for other [`socs`](socs.md) and members + +> [!WARNING] > You must never update this file without following the steps below first! ## Updating DNS @@ -24,13 +29,54 @@ The config files for bind are located in `/etc/bind/master/`. The most important To update DNS: 1. Change directory to `/etc/bind/master` + +```bash +cd /etc/bind/master +``` + 2. Back up the `db.Redbrick.dcu.ie` file, usually to `db.Redbrick.dcu.ie.bak` -3. Run `rndc freeze redbrick.dcu.ie` - this stops changes to the file affecting DNS while you edit it + +```bash +cp db.Redbrick.dcu.ie{,.bak} +``` + +3. Stop changes to the file affecting DNS while you edit it + +```bash +rndc freeze redbrick.dcu.ie +``` + 4. Edit `db.Redbrick.dcu.ie` -5. Before changing any DNS entry in the file, you **must** edit the serial number on 4. You can increment it by one if -you want, or follow the format: `YYYYMMDDrev` where rev is revision -6. Once you are happy with your file, you can check it with `named-checkzone redbrick.dcu.ie db.Redbrick.dcu.ie` -7. If this returns no errors, you are free to run `rndc thaw redbrick.dcu.ie` -8. Check the status of `bind9` by running `service bind9 status` +5. Before changing any DNS entry in the file, you ***must*** edit the serial number on 4. You can increment it by one if +you want, or follow the format: `YYYYMMDDrev` where `rev` is revision. For example: + +```d title="db.Redbrick.dcu.ie" +2024033106 ; serial +``` + +6. Once you are happy with your file, you can check it with: + +```bash +named-checkzone redbrick.dcu.ie db.Redbrick.dcu.ie +``` + +7. If this returns no errors, you are free to thaw the DNS freeze: + +```bash +rndc thaw redbrick.dcu.ie +``` + +8. Check the status of `bind9`: + +```bash +service bind9 status +``` + +9. You can access more logs from `bind9` by checking `/var/log/named/default.log`: + +```bash +tail -n 20 /var/log/named/default.log +``` -You can access more logs from `bind9` by checking `/var/log/named/default.log`. +> [!NOTE] +> Once you have verified that everything is working properly. Add your changes and commit them to git. From 070ddd1740b2556624591f6caadb941bbbef8f96 Mon Sep 17 00:00:00 2001 From: wizzdom Date: Thu, 4 Apr 2024 18:04:58 +0100 Subject: [PATCH 15/25] user-vms.md: clarify some points, tidy up (#39) --- docs/services/user-vms.md | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/docs/services/user-vms.md b/docs/services/user-vms.md index 4b51052e..f72bfb2f 100644 --- a/docs/services/user-vms.md +++ b/docs/services/user-vms.md @@ -21,7 +21,7 @@ The host needs to be configured to allow the VMs to communicate with each other. ### Create a Bridge -To create a bridge that qemu can use to place the guest (vm) onto the same network as the host, follow the instructions listed [here](https://wiki.archlinux.org/title/Network_bridge#With_iproute2) for iproute2, summarised below. +To create a bridge that qemu can use to place the guest (VM) onto the same network as the host, follow the instructions listed [here](https://wiki.archlinux.org/title/Network_bridge#With_iproute2) for `iproute2`, summarised below. We need to create a bridge interface on the host. @@ -36,9 +36,9 @@ We'll be adding a physical interface to this bridge to allow it to communicate w sudo ip link set eno1 master br0 ``` -You'll need to assign an IP address to the bridge interface. This will be used as the default address for the host. You can do this with DHCP or by assigning a static IP address. The best way to do this is to create a DHCP static lease on the UDM for the bridge interface MAC address. +You'll need to assign an IP address to the bridge interface. This will be used as the default address for the host. You can do this with DHCP or by assigning a static IP address. The best way to do this is to create a DHCP static lease on the [UDM](../hardware/network/mordor.md) for the bridge interface MAC address. -> [!NOTE] TODO +> [!NOTE] > TODO: Find out why connectivity seems to be lost when the bridge interface receives an address before the physical interface. > If connectivity is lost, release the addresses from both the bridge and the physical interface (in that order) with `sudo dhclient -v -r ` and then run `sudo dhclient -v ` to assign the bridge interface an address. @@ -46,7 +46,7 @@ You'll need to assign an IP address to the bridge interface. This will be used a The configuration of the qemu network options in the job file will create a new tap interface and add it to the bridge and the VM. I advise you for your own sanity to never touch the network options, they will only cause you pain. -For others looking, this configuration is specific to QEMU only. +For others looking, this configuration is specific to *QEMU only*. ```bash qemu-system-x86_64 ... -netdev bridge,id=hn0 -device virtio-net-pci,netdev=hn0,id=nic1 @@ -54,9 +54,9 @@ qemu-system-x86_64 ... -netdev bridge,id=hn0 -device virtio-net-pci,netdev=hn0,i This will assign the VM an address on the external network. The VM will be able to communicate with the host and other VMs in the network. -You must also add `allow br0` to `/etc/qemu/bridge.conf` to allow qemu to add the tap interfaces tothe bridge. [Source](https://wiki.qemu.org/Features/HelperNetworking) +You must also add `allow br0` to `/etc/qemu/bridge.conf` to allow qemu to add the tap interfaces to the bridge. [Source](https://wiki.qemu.org/Features/HelperNetworking) -The VMs, once connected to the bridge, will be assigned an address via DHCP. You can assign a static IP address to the VMs by adding a DHCP static lease on the UDM for the VMs MAC address. You can get the address of a VM by checking the nomad alloc logs for that VM and searching for `ens3`. +The VMs, once connected to the bridge, will be assigned an address via DHCP. You can assign a static IP address to the VMs by adding a DHCP static lease on the [UDM](../hardware/network/mordor.md) for the VMs MAC address. You can get the address of a VM by checking the `nomad alloc logs` for that VM and searching for `ens3`. ```bash nomad job status distro-vm | grep "Node ID" -A 1 | tail -n 1 | cut -d " " -f 1 @@ -67,21 +67,26 @@ nomad alloc logs | grep -E "ens3.*global" | cut -d "|" -f 4 | xargs ## Configuring the VMs -The VMs are configured with cloud-init. Their docs are pretty good, so I won't repeat them here. The files can be served by any HTTP server, and the address is placed into the job file in the QEMU options. +The VMs are configured with cloud-init. Their [docs](https://cloudinit.readthedocs.io/en/latest/) are pretty good, so I won't repeat them here. The files can be served by any HTTP server, and the address is placed into the job file in the QEMU options. ```hcl title="Nomad" ... args = [ ... - "virtio-net-pci,netdev=hn0,id=nic1,mac=52:54:84:ba:49:22", + "virtio-net-pci,netdev=hn0,id=nic1,mac=52:54:84:ba:49:22", # make sure this MAC address is unique!! "-smbios", "type=1,serial=ds=nocloud-net;s=http://136.206.16.5:8000/", ] ... ``` -> [!NOTE] Note! -> If you're running multiple VMS on the same host make sure to set different MAC addresses for each VM, otherwise you'll have a bad time. +Here in the args block: + +- we define that the VM will have a network device using the `virtio` driver, we pass it an `id` and a random ***unique*** MAC address +- we tell it to use `smbios` type 1 and to grab its `cloud-init` configs from `http://136.206.16.5:8000/` + +> [!NOTE] +> If you're running multiple VMs on the same network make sure to set different MAC addresses for each VM, otherwise you'll have a bad time. ## Creating a New VM From f475fb3a8f84176ec306ecd3298f18b8d49b17bd Mon Sep 17 00:00:00 2001 From: Gavin Holahan <120053248+HypnoAnt@users.noreply.github.com> Date: Tue, 7 May 2024 00:23:58 +0100 Subject: [PATCH 16/25] Open Governance Tagging info (#40) * Open Governance Tagging info * cleanup structure * docs/procedures/Open-Governance-Tagging.md --------- Co-authored-by: wizzdom --- docs/procedures/Open-Governance-Tagging.md | 214 +++++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 docs/procedures/Open-Governance-Tagging.md diff --git a/docs/procedures/Open-Governance-Tagging.md b/docs/procedures/Open-Governance-Tagging.md new file mode 100644 index 00000000..b341578a --- /dev/null +++ b/docs/procedures/Open-Governance-Tagging.md @@ -0,0 +1,214 @@ +--- +title: Open Governance Tagging +tags: + - open-gov + - gpg + - tagging +author: + - hypnoant + - wizzdom +--- + +# Open Governance Tagging - `hypnoant`, `wizzdom` + +## 1. Before the Tagging Ceremony + +### Generating the Key + +To tag the Open Governance repo you will need to make a new PGP key on the behalf of redbrick committee. Below are the commands and the inputs for creating this key. + +```bash +gpg --full-generate-key +``` + +```title="Key Generation Menu" +Please select what kind of key you want: + (1) RSA and RSA + (2) DSA and Elgamal + (3) DSA (sign only) + (4) RSA (sign only) + (9) ECC (sign and encrypt) *default* + (10) ECC (sign only) + (14) Existing key from card +Your selection? 1 + +RSA keys may be between 1024 and 4096 bits long. +What keysize do you want? (3072) 4096 + +Please specify how long the key should be valid. + 0 = key does not expire + = key expires in n days + w = key expires in n weeks + m = key expires in n months + y = key expires in n years +Key is valid for? (0) {SET FOR DATE AFTER TAGGING CEREMONY} + +Key expires at {DATE AFTER TAGGING CEREMONY} IST +Is this correct? (y/N) y + +GnuPG needs to construct a user ID to identify your key. +Real name: Redbrick Committee +Email Address: committee@redbrick.dcu.ie +Comment: Redbrick Committee (Redbrick Open Governance {YEAR-MONTH-TYPE_OF_MEETING(AGM/EGM)}) + +Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O +``` + +### First Sign + +The signatory who has generated the key will then sign this key. + +```bash +gpg --sign-key {REDBRICK KEY-ID} +``` + +You will then publish this public key to a key-server *(e.g. `keyserver.ubuntu.com` or `keys.openpgp.org`)*. + +```bash +gpg --keyserver keyserver.ubuntu.com --send-key committee@redbrick.dcu.ie +``` + +### Second Sign + +The other signatory will pull the key from the key-server and will then sign this key and re-publish the key to the key-server. (You can use the more secure method below for general membership if you wish). + +```bash +gpg --keyserver keyserver.ubuntu.com --recv-key {REDBRICK KEY-ID} + +gpg --sign-key {REDBRICK KEY-ID} + +gpg --keyserver keyserver.ubuntu.com --send-keys {REDBRICK KEY-ID} +``` + +To verify this procedure has worked and that both signatories have signed it. We will have the first signatory pull the key back down and verify the signatures. + +```bash +gpg --keyserver-options no-self-sigs-only --keyserver keyserver.ubuntu.com --recv-key {REDBRICK KEY-ID} +``` + +### General Membership Sign + +The society now has the option to publish this key to the general membership for them to also sign this key if the current committee wishes to do so. The committee will have to release an email address or another service for the general membership to send files to. + +Below is the process for a member of the general membership to sign the key. + +```bash +gpg --recv-keys {REDBRICK KEY-ID} +gpg --sign-key {REDBRICK KEY-ID} +gpg --armor --export {REDBRICK KEY-ID} | gpg --encrypt -r {REDBRICK KEY-ID} --armor --output {REDBRICK KEY-ID}-signedBy-{OWNER KEY ID}.asc +``` + +They will then send this file to the signatories. + +The signatories will then use the following commands to import and publish their key with the new signature. This must be done before the + +```bash +gpg -d {REDBRICK KEY-ID}-signedBy-{OWNER KEY ID}.asc | gpg --import +gpg --send-key {REDBRICK KEY-ID} +``` + +## 2. During the Tagging Ceremony + +The first signatory shall tag the repository with the following command and styling. There shall be at least 2 witnesses separated by commas. + +```bash +git tag -as {YYYY-MM-TYPEOFMEETING} {COMMIT ID} +``` + +```title="Git Tag Message" +Co-authored-by: {Signatory 2} + +Witnessed-by: ~{WITNESS} + +See `knowledge/tagging.md` for more info. +``` + +They can then push this tag to the GitHub + +```bash +git push --tags origin +``` + +## 3. After the Tagging Ceremony + +### Verifying the Tag + +Clone the git repository + +```bash +git clone https://github.com/redbrick/open-governance.git +``` + +View the tag + +```bash +git tag -v {YYYY-MM-TYPEOFMEETING} +``` + +Import the key + +There should be a key signature at the bottom of the tag view. This should be imported into your key-ring. There may be a separate key-server used for the given years key so verify with committee that it is on the correct server for importing. + +```bash +gpg --keyserver-options no-self-sigs-only --keyserver keyserver.ubuntu.com --recv-key {REDBRICK KEY-ID} +``` + +Verify the tag + +```bash +git tag -v {YYYY-MM-TYPEOFMEETING} +``` + +Check the signatories + +```bash +gpg --list-sigs {REDBRICK KEY-ID} +``` + +Import the signatories keys + +```bash +gpg --list-sigs {REDBRICK KEY-ID} --keyid-format long | grep 'ID not found' | perl -nwe '/([0-9A-F]{16})/ && print "$1\n"' | xargs gpg --keyserver-options no-self-sigs-only --keyserver keyserver.ubuntu.com --recv-keys +``` + +Export their key + +```bash +gpg --export -a {SIGNATORY KEY-ID} +``` + +Their key should be available at their GitHub under `https://github.com/{USERNAME}.gpg` + +## Externally Hosted Repos + +### Uploading the Repo + +- First verify that the repo is correctly tagged and signed following the previous steps. +- Download the zip of the tag from GitHub webpage. (Or clone the repo, checkout the tag and zip the folder) +- Sign the Zip and verify it: + +```bash +gpg --sign {NAME OF ZIP}.zip +gpg --verify {NAME OF ZIP}.zip.gpg +``` + +- Export public key: + +```bash +gpg --export -a {KEY-ID} > {MYKEYID} +``` + +- Upload the `.zip.gpg` file and your public key + +### Users Verifying the Hosted Zip + +```bash +gpg --import {KEYID} +gpg --verify {NAME OF ZIP}.zip.gpg +``` + +- Exporting the zip file: + +```bash +gpg --output {NAME OF ZIP}.zip --decrypt {NAME OF ZIP}.zip.gpg +``` From 41dab137a2a1b4b0253ff010b9f63779f2afcbd9 Mon Sep 17 00:00:00 2001 From: wizzdom Date: Tue, 16 Jul 2024 23:41:06 +0100 Subject: [PATCH 17/25] update & clarify exposed services --- docs/services/exposed.md | 44 +++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/docs/services/exposed.md b/docs/services/exposed.md index 7c1ca60c..bbfcf4e9 100644 --- a/docs/services/exposed.md +++ b/docs/services/exposed.md @@ -1,10 +1,13 @@ --- -title: Services Exposed to the Internet -author: - - wizzdom +id: exposed +aliases: + - Services Exposed to the Internet - `wizzdom` tags: - services - exposed +author: + - wizzdom +title: Services Exposed to the Internet --- # Services Exposed to the Internet - `wizzdom` @@ -12,22 +15,12 @@ tags: Firstly, it's important to mention that Redbrick is currently split in 2 parts: - Redbrick 2.0 *a.k.a. "old redbrick"* (on `136.206.15.0/24`) -- [Aperture](../hardware/aperture/index.md) *a.k.a. "new redbrick"* (on `136.206.16.0/24`) +- New Redbrick which includes [Aperture](../hardware/aperture/index.md) (on `136.206.16.0/24`) ![](../network-divorce.png) ## Old Redbrick -- [**azazel**](../hardware/azazel.md) - `136.206.15.24` - - **OS**: Debian 10 - - **Services**: - - primary ssh login box for users (see [Logging in](servers.md#Logging%20in)) - - jump-box for admins -- [**pygmalion**](../hardware/pygmalion.md) - `136.206.15.25` - - **OS**: Ubuntu 18.04 LTS - - **Services**: - - secondary ssh login box for users (see [Logging in](servers.md#Logging%20in)) - - jump-box for admins - [**motherlode**](../hardware/nix/motherlode.md) - `136.206.15.250` - **OS**: NixOS 22.05 - **Services**: @@ -50,15 +43,28 @@ Firstly, it's important to mention that Redbrick is currently split in 2 parts: - **Services**: - DNS ([bind](bind.md)) -## [Aperture](../hardware/aperture/index.md) +## New Redbrick + +- [**azazel**](../hardware/azazel.md) - `136.206.16.24` + - **OS**: Debian 12 `bookworm` + - **Services**: + - primary ssh login box for users (see [Logging in](servers.md#Logging%20in)) + - jump-box for admins +- [**pygmalion**](../hardware/pygmalion.md) - `136.206.16.25` + - **OS**: Debian 12 `bookworm` + - **Services**: + - secondary ssh login box for users (see [Logging in](servers.md#Logging%20in)) + - jump-box for admins + +### [Aperture](../hardware/aperture/index.md) -In aperture, things are done a little differently than on the other network. Instead of having a single host per service, aperture is configured to allow services to be allocated dynamically across all 3 servers using [nomad](nomad.md), [consul](consul.md) and [traefik](traefik.md). +In aperture, things are done a little differently than on the other network. Instead of having a single host per service, aperture is configured to allow services to be allocated dynamically across all 3 servers using [nomad](nomad.md), [consul](consul.md) and [traefik](traefik.md). - [glados](../hardware/aperture/glados.md) - `136.206.16.4` - [wheatley](../hardware/aperture/wheatley.md) - `136.206.16.5` - [chell](../hardware/aperture/chell.md) - `136.206.16.6` - all 3 boxes are identical -- **OS**: Debian 11 +- **OS**: Debian 11 `bullseye` - **Services**: - simple `nginx` containers with the mascot of each server in aperture: - [glados](https://glados.redbrick.dcu.ie) @@ -75,7 +81,7 @@ In aperture, things are done a little differently than on the other network. Ins - [URL Shortener](shlink.md) - [Plausible Analytics](plausible.md) at [plausible.redbrick.dcu.ie](https://plausible.redbrick.dcu.ie) - **Notes**: - - all web traffic is routed through [traefik](traefik.md) - - all new services will be deployed here + - All web traffic is routed through [traefik](traefik.md) on the [bastion VM](./bastion-vm.md) + - All new services will be deployed here - Most services here are deployed as docker containers but there's no reason you couldn't use any of the other [nomad drivers](https://developer.hashicorp.com/nomad/docs/drivers) - For more information see redbrick's [Nomad repo](https://github.com/redbrick/nomad) From 7e8c0e427538303fadce4866a686077e4e2d8fb3 Mon Sep 17 00:00:00 2001 From: wizzdom Date: Fri, 19 Jul 2024 00:16:10 +0100 Subject: [PATCH 18/25] add wetty docs (#43) --- docs/services/wetty.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 docs/services/wetty.md diff --git a/docs/services/wetty.md b/docs/services/wetty.md new file mode 100644 index 00000000..ec93e646 --- /dev/null +++ b/docs/services/wetty.md @@ -0,0 +1,32 @@ +--- +title: Wetty +created: 2024-07-16T23:52:13 +modified: 2024-07-18T23:08:33 +tags: + - aperture + - nomad + - docker +author: + - wizzdom +--- + +# Wetty - `wizzdom` + +Redbrick uses [Wetty](https://github.com/butlerx/wetty) as our web terminal of choice. It is accessible at [wetty.redbrick.dcu.ie](https://wetty.redbrick.dcu.ie), [wetty.rb.dcu.ie](https://wetty.rb.dcu.ie),[term.redbrick.dcu.ie](https://term.redbrick.dcu.ie), [anyterm.redbrick.dcu.ie](https://anyterm.redbrick.dcu.ie) and [ajaxterm.redbrick.dcu.ie](https://ajaxterm.redbrick.dcu.ie). + +*Why all the different domains?* - ***For legacy reasons!*** + +The configuration is located [here](https://github.com/redbrick/nomad/blob/master/jobs/services/wetty.hcl) + +The configuration for Wetty is pretty straightforward: + +- `SSHHOST` - the host that Wetty will connect to (one of the [Login](servers.md#Logging%20in) boxes), defined in [`consul`](consul.md) +- `SSHPORT` - the port used for ssh +- `BASE` - the base path for Wetty (default is `/wetty`) + - *This isn't very well documented but trust the process. It works!!* + +```hcl title="Nomad" +SSHHOST={{ key "wetty/ssh/host" }} +SSHPORT=22 +BASE=/ +``` From 57b9ebb975c3fe59af8ff37c72b6bade934d6e6c Mon Sep 17 00:00:00 2001 From: Gavin Holahan <120053248+HypnoAnt@users.noreply.github.com> Date: Fri, 19 Jul 2024 00:31:49 +0100 Subject: [PATCH 19/25] Update to Resemble Open Governance Obsidian (#42) * Updated Obsidian Settings to Copy Open-Governance, Edited all Created Dates to Date of first commit, Edited all Modified Dates to date of last modified commit * oops left that in * remove obsidian plugins apart from configs * ignore plugins folder except for config data * remove themes * ignore themes and venv * fix nix times * Updated README --------- Co-authored-by: wizzdom --- .gitignore | 4 + README.md | 11 +- docs/.obsidian/app.json | 6 +- docs/.obsidian/appearance.json | 2 - docs/.obsidian/community-plugins.json | 4 +- docs/.obsidian/plugins/obsidian-git/data.json | 55 + .../plugins/obsidian-linter/data.json | 266 ++ .../obsidian-minimal-settings/data.json | 36 + .../plugins/table-editor-obsidian/data.json | 6 + docs/.obsidian/templates.json | 3 + docs/.obsidian/themes/Minimal/manifest.json | 8 - docs/.obsidian/themes/Minimal/theme.css | 2158 ----------------- docs/contact.md | 6 + docs/hardware/aperture/about.md | 4 +- docs/hardware/aperture/chell.md | 4 +- docs/hardware/aperture/glados.md | 4 +- docs/hardware/aperture/images.md | 4 +- docs/hardware/aperture/index.md | 4 +- docs/hardware/aperture/johnson.md | 4 +- docs/hardware/aperture/wheatley.md | 4 +- docs/hardware/azazel.md | 4 +- docs/hardware/index.md | 6 + docs/hardware/network/arse.md | 6 +- docs/hardware/network/cerberus.md | 6 +- docs/hardware/network/mordor.md | 6 + docs/hardware/network/switches.md | 6 +- docs/hardware/nix/hardcase.md | 4 +- docs/hardware/nix/icarus.md | 4 +- docs/hardware/nix/motherlode.md | 4 +- docs/hardware/paphos.md | 4 +- docs/hardware/pygmalion.md | 4 +- docs/hardware/zeus.md | 4 +- docs/index.md | 6 + docs/procedures/Open-Governance-Tagging.md | 4 +- docs/procedures/ansible.md | 6 + docs/procedures/cheatsheet.md | 6 + docs/procedures/handover.md | 6 + docs/procedures/index.md | 6 + docs/procedures/irc-ops.md | 6 + docs/procedures/new-admins.md | 6 + docs/procedures/nixos.md | 6 + docs/procedures/policies.md | 6 + docs/procedures/post-powercut.md | 6 + docs/procedures/update-wp-domain.md | 6 + docs/procedures/vpn.md | 6 + docs/services/api.md | 4 +- docs/services/bastion-vm.md | 4 +- docs/services/bind.md | 4 +- docs/services/consul.md | 6 + docs/services/exposed.md | 10 +- docs/services/gitea.md | 6 + docs/services/icecast.md | 6 + docs/services/index.md | 6 + docs/services/irc.md | 6 + docs/services/ldap.md | 8 +- docs/services/md.md | 8 +- docs/services/nfs.md | 6 + docs/services/nomad.md | 10 +- docs/services/paste.md | 8 +- docs/services/servers.md | 6 + docs/services/socs.md | 4 +- docs/services/traefik.md | 6 + docs/services/user-vms.md | 10 +- docs/services/znapzend.md | 6 + 64 files changed, 635 insertions(+), 2216 deletions(-) create mode 100644 docs/.obsidian/plugins/obsidian-git/data.json create mode 100644 docs/.obsidian/plugins/obsidian-linter/data.json create mode 100644 docs/.obsidian/plugins/obsidian-minimal-settings/data.json create mode 100644 docs/.obsidian/plugins/table-editor-obsidian/data.json create mode 100644 docs/.obsidian/templates.json delete mode 100644 docs/.obsidian/themes/Minimal/manifest.json delete mode 100644 docs/.obsidian/themes/Minimal/theme.css diff --git a/.gitignore b/.gitignore index 4ef0e600..a85799a1 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,7 @@ docs/.obsidian/workspace.json docs/.obsidian/graph.json .cache/ venv/ +.venv/ +docs/.obsidian/plugins/ +!docs/.obsidian/plugins/*/data.json +docs/.obsidian/themes/ diff --git a/README.md b/README.md index 65d35a00..ef29be77 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,12 @@ # Redbrick docs -The home for all Redbrick technical documentation +The home for all Redbrick technical documentation [docs.redbrick.dcu.ie](https://docs.redbrick.dcu.ie) + +## Obsidian +For use with obsidian we reccommend the following plugins. + - Advanced Tables by Tony Grosinger [Github](https://github.com/tgrosinger/advanced-tables-obsidian) [Obsidian](obsidian://show-plugin?id=table-editor-obsidian) + - Git by Vinzent, (Denis Olehov) [Github](https://github.com/Vinzent03/obsidian-git) [Obsidian](obsidian://show-plugin?id=obsidian-git) + - Minimal Theme Settings by @kepano [Github](https://github.com/kepano/obsidian-minimal-settings) [Obsidian](obsidian://show-plugin?id=obsidian-minimal-settings) + - Linter by Virctor Tao [Github](https://github.com/platers/obsidian-linter) [Obsidian](obsidian://show-plugin?id=obsidian-linter) + +To Enable these plugins go to Settings > Community Plugins > Turn On Community Plugins > Browse. Search, Install and Enable each of the plugins above. diff --git a/docs/.obsidian/app.json b/docs/.obsidian/app.json index 155091c1..48a75b16 100644 --- a/docs/.obsidian/app.json +++ b/docs/.obsidian/app.json @@ -1,7 +1,9 @@ { + "promptDelete": false, + "alwaysUpdateLinks": true, "useMarkdownLinks": true, "newLinkFormat": "relative", - "alwaysUpdateLinks": true, + "newFileLocation": "current", "showUnsupportedFiles": true, - "attachmentFolderPath": "assets" + "attachmentFolderPath": "res" } \ No newline at end of file diff --git a/docs/.obsidian/appearance.json b/docs/.obsidian/appearance.json index 2305a8d2..ceb8fbaf 100644 --- a/docs/.obsidian/appearance.json +++ b/docs/.obsidian/appearance.json @@ -1,7 +1,5 @@ { "accentColor": "#c53030", "cssTheme": "Minimal", - "nativeMenus": false, - "baseFontSize": 17, "theme": "obsidian" } \ No newline at end of file diff --git a/docs/.obsidian/community-plugins.json b/docs/.obsidian/community-plugins.json index 254524c1..37822eac 100644 --- a/docs/.obsidian/community-plugins.json +++ b/docs/.obsidian/community-plugins.json @@ -1,6 +1,6 @@ [ "table-editor-obsidian", + "obsidian-git", "obsidian-linter", - "obsidian-minimal-settings", - "obsidian-git" + "obsidian-minimal-settings" ] \ No newline at end of file diff --git a/docs/.obsidian/plugins/obsidian-git/data.json b/docs/.obsidian/plugins/obsidian-git/data.json new file mode 100644 index 00000000..4f38b64e --- /dev/null +++ b/docs/.obsidian/plugins/obsidian-git/data.json @@ -0,0 +1,55 @@ +{ + "commitMessage": "vault backup: {{date}}", + "commitDateFormat": "YYYY-MM-DD HH:mm:ss", + "autoSaveInterval": 0, + "autoPushInterval": 0, + "autoPullInterval": 0, + "autoPullOnBoot": false, + "disablePush": false, + "pullBeforePush": true, + "disablePopups": false, + "listChangedFilesInMessageBody": true, + "showStatusBar": true, + "updateSubmodules": false, + "syncMethod": "merge", + "customMessageOnAutoBackup": false, + "autoBackupAfterFileChange": false, + "treeStructure": true, + "refreshSourceControl": true, + "basePath": "", + "differentIntervalCommitAndPush": false, + "changedFilesInStatusBar": true, + "showedMobileNotice": true, + "refreshSourceControlTimer": 7000, + "showBranchStatusBar": true, + "setLastSaveToLastCommit": false, + "submoduleRecurseCheckout": false, + "gitDir": "", + "showFileMenu": true, + "lineAuthor": { + "show": false, + "followMovement": "inactive", + "authorDisplay": "initials", + "showCommitHash": false, + "dateTimeFormatOptions": "date", + "dateTimeFormatCustomString": "YYYY-MM-DD HH:mm", + "dateTimeTimezone": "viewer-local", + "coloringMaxAge": "1y", + "colorNew": { + "r": 255, + "g": 150, + "b": 150 + }, + "colorOld": { + "r": 120, + "g": 160, + "b": 255 + }, + "textColorCss": "var(--text-muted)", + "ignoreWhitespace": false, + "gutterSpacingFallbackLength": 5, + "lastShownAuthorDisplay": "initials", + "lastShownDateTimeFormatOptions": "date" + }, + "autoCommitMessage": "vault backup: {{date}}" +} \ No newline at end of file diff --git a/docs/.obsidian/plugins/obsidian-linter/data.json b/docs/.obsidian/plugins/obsidian-linter/data.json new file mode 100644 index 00000000..567652a6 --- /dev/null +++ b/docs/.obsidian/plugins/obsidian-linter/data.json @@ -0,0 +1,266 @@ +{ + "ruleConfigs": { + "add-blank-line-after-yaml": { + "enabled": true + }, + "escape-yaml-special-characters": { + "enabled": false, + "try-to-escape-single-line-arrays": false + }, + "force-yaml-escape": { + "enabled": false, + "force-yaml-escape-keys": "" + }, + "format-tags-in-yaml": { + "enabled": true + }, + "format-yaml-array": { + "enabled": false, + "alias-key": true, + "tag-key": true, + "default-array-style": "single-line", + "default-array-keys": true, + "force-single-line-array-style": "", + "force-multi-line-array-style": "" + }, + "insert-yaml-attributes": { + "enabled": false, + "text-to-insert": "aliases: \ntags: " + }, + "move-tags-to-yaml": { + "enabled": true, + "how-to-handle-existing-tags": "Nothing", + "tags-to-ignore": "" + }, + "remove-yaml-keys": { + "enabled": false, + "yaml-keys-to-remove": "" + }, + "yaml-key-sort": { + "enabled": true, + "yaml-key-priority-sort-order": "title\ncreated\nmodified\ntags", + "priority-keys-at-start-of-yaml": true, + "yaml-sort-order-for-other-keys": "Ascending Alphabetical" + }, + "yaml-timestamp": { + "enabled": true, + "date-created": true, + "date-created-key": "created", + "force-retention-of-create-value": true, + "date-modified": true, + "date-modified-key": "modified", + "format": "YYYY-MM-DDTHH:mm:ss" + }, + "yaml-title": { + "enabled": true, + "title-key": "title", + "mode": "filename" + }, + "yaml-title-alias": { + "enabled": false, + "preserve-existing-alias-section-style": true, + "keep-alias-that-matches-the-filename": false, + "use-yaml-key-to-keep-track-of-old-filename-or-heading": true + }, + "capitalize-headings": { + "enabled": true, + "style": "Title Case", + "ignore-case-words": true, + "ignore-words": "macOS, iOS, iPhone, iPad, JavaScript, TypeScript, AppleScript, I", + "lowercase-words": "a, an, the, aboard, about, abt., above, abreast, absent, across, after, against, along, aloft, alongside, amid, amidst, mid, midst, among, amongst, anti, apropos, around, round, as, aslant, astride, at, atop, ontop, bar, barring, before, B4, behind, below, beneath, neath, beside, besides, between, 'tween, beyond, but, by, chez, circa, c., ca., come, concerning, contra, counting, cum, despite, spite, down, during, effective, ere, except, excepting, excluding, failing, following, for, from, in, including, inside, into, less, like, minus, modulo, mod, near, nearer, nearest, next, notwithstanding, of, o', off, offshore, on, onto, opposite, out, outside, over, o'er, pace, past, pending, per, plus, post, pre, pro, qua, re, regarding, respecting, sans, save, saving, short, since, sub, than, through, thru, throughout, thruout, till, times, to, t', touching, toward, towards, under, underneath, unlike, until, unto, up, upon, versus, vs., v., via, vice, vis-à-vis, wanting, with, w/, w., c̄, within, w/i, without, 'thout, w/o, abroad, adrift, aft, afterward, afterwards, ahead, apart, ashore, aside, away, back, backward, backwards, beforehand, downhill, downstage, downstairs, downstream, downward, downwards, downwind, east, eastward, eastwards, forth, forward, forwards, heavenward, heavenwards, hence, henceforth, here, hereby, herein, hereof, hereto, herewith, home, homeward, homewards, indoors, inward, inwards, leftward, leftwards, north, northeast, northward, northwards, northwest, now, onward, onwards, outdoors, outward, outwards, overboard, overhead, overland, overseas, rightward, rightwards, seaward, seawards, skywards, skyward, south, southeast, southwards, southward, southwest, then, thence, thenceforth, there, thereby, therein, thereof, thereto, therewith, together, underfoot, underground, uphill, upstage, upstairs, upstream, upward, upwards, upwind, west, westward, westwards, when, whence, where, whereby, wherein, whereto, wherewith, although, because, considering, given, granted, if, lest, once, provided, providing, seeing, so, supposing, though, unless, whenever, whereas, wherever, while, whilst, ago, according to, as regards, counter to, instead of, owing to, pertaining to, at the behest of, at the expense of, at the hands of, at risk of, at the risk of, at variance with, by dint of, by means of, by virtue of, by way of, for the sake of, for sake of, for lack of, for want of, from want of, in accordance with, in addition to, in case of, in charge of, in compliance with, in conformity with, in contact with, in exchange for, in favor of, in front of, in lieu of, in light of, in the light of, in line with, in place of, in point of, in quest of, in relation to, in regard to, with regard to, in respect to, with respect to, in return for, in search of, in step with, in touch with, in terms of, in the name of, in view of, on account of, on behalf of, on grounds of, on the grounds of, on the part of, on top of, with a view to, with the exception of, à la, a la, as soon as, as well as, close to, due to, far from, in case, other than, prior to, pursuant to, regardless of, subsequent to, as long as, as much as, as far as, by the time, in as much as, inasmuch, in order to, in order that, even, provide that, if only, whether, whose, whoever, why, how, or not, whatever, what, both, and, or, not only, but also, either, neither, nor, just, rather, no sooner, such, that, yet, is, it" + }, + "file-name-heading": { + "enabled": false + }, + "header-increment": { + "enabled": false, + "start-at-h2": false + }, + "headings-start-line": { + "enabled": true + }, + "remove-trailing-punctuation-in-heading": { + "enabled": true, + "punctuation-to-remove": ".,;:!。,;:!" + }, + "footnote-after-punctuation": { + "enabled": true + }, + "move-footnotes-to-the-bottom": { + "enabled": true + }, + "re-index-footnotes": { + "enabled": true + }, + "auto-correct-common-misspellings": { + "enabled": false, + "ignore-words": "" + }, + "blockquote-style": { + "enabled": false, + "style": "space" + }, + "convert-bullet-list-markers": { + "enabled": false + }, + "default-language-for-code-fences": { + "enabled": false, + "default-language": "" + }, + "emphasis-style": { + "enabled": false, + "style": "consistent" + }, + "no-bare-urls": { + "enabled": false, + "no-bare-uris": false + }, + "ordered-list-style": { + "enabled": false, + "number-style": "ascending", + "list-end-style": "." + }, + "proper-ellipsis": { + "enabled": true + }, + "quote-style": { + "enabled": false, + "single-quote-enabled": true, + "single-quote-style": "''", + "double-quote-enabled": true, + "double-quote-style": "\"\"" + }, + "remove-consecutive-list-markers": { + "enabled": false + }, + "remove-empty-list-markers": { + "enabled": false + }, + "remove-hyphenated-line-breaks": { + "enabled": true + }, + "remove-multiple-spaces": { + "enabled": false + }, + "strong-style": { + "enabled": false, + "style": "consistent" + }, + "two-spaces-between-lines-with-content": { + "enabled": false + }, + "unordered-list-style": { + "enabled": false, + "list-style": "consistent" + }, + "compact-yaml": { + "enabled": true, + "inner-new-lines": false + }, + "consecutive-blank-lines": { + "enabled": true + }, + "convert-spaces-to-tabs": { + "enabled": false, + "tabsize": 4 + }, + "empty-line-around-blockquotes": { + "enabled": true + }, + "empty-line-around-code-fences": { + "enabled": true + }, + "empty-line-around-math-blocks": { + "enabled": true + }, + "empty-line-around-tables": { + "enabled": true + }, + "heading-blank-lines": { + "enabled": true, + "bottom": true, + "empty-line-after-yaml": true + }, + "line-break-at-document-end": { + "enabled": true + }, + "move-math-block-indicators-to-their-own-line": { + "enabled": false + }, + "paragraph-blank-lines": { + "enabled": true + }, + "remove-empty-lines-between-list-markers-and-checklists": { + "enabled": false + }, + "remove-link-spacing": { + "enabled": false + }, + "remove-space-around-characters": { + "enabled": false, + "include-fullwidth-forms": true, + "include-cjk-symbols-and-punctuation": true, + "include-dashes": true, + "other-symbols": "" + }, + "remove-space-before-or-after-characters": { + "enabled": false, + "characters-to-remove-space-before": ",!?;:).’”]", + "characters-to-remove-space-after": "¿¡‘“([" + }, + "space-after-list-markers": { + "enabled": true + }, + "space-between-chinese-japanese-or-korean-and-english-or-numbers": { + "enabled": false + }, + "trailing-spaces": { + "enabled": false, + "twp-space-line-break": false + }, + "add-blockquote-indentation-on-paste": { + "enabled": false + }, + "prevent-double-checklist-indicator-on-paste": { + "enabled": false + }, + "prevent-double-list-item-indicator-on-paste": { + "enabled": false + }, + "proper-ellipsis-on-paste": { + "enabled": false + }, + "remove-hyphens-on-paste": { + "enabled": false + }, + "remove-leading-or-trailing-whitespace-on-paste": { + "enabled": false + }, + "remove-leftover-footnotes-from-quote-on-paste": { + "enabled": false + }, + "remove-multiple-blank-lines-on-paste": { + "enabled": false + } + }, + "lintOnSave": true, + "recordLintOnSaveLogs": false, + "displayChanged": false, + "lintOnFileChange": false, + "displayLintOnFileChangeNotice": false, + "settingsConvertedToConfigKeyValues": true, + "foldersToIgnore": [ + "templates" + ], + "linterLocale": "system-default", + "logLevel": "ERROR", + "lintCommands": [], + "customRegexes": [], + "commonStyles": { + "aliasArrayStyle": "single-line", + "tagArrayStyle": "single-line", + "minimumNumberOfDollarSignsToBeAMathBlock": 2, + "escapeCharacter": "\"", + "removeUnnecessaryEscapeCharsForMultiLineArrays": false + } +} \ No newline at end of file diff --git a/docs/.obsidian/plugins/obsidian-minimal-settings/data.json b/docs/.obsidian/plugins/obsidian-minimal-settings/data.json new file mode 100644 index 00000000..3fa2288b --- /dev/null +++ b/docs/.obsidian/plugins/obsidian-minimal-settings/data.json @@ -0,0 +1,36 @@ +{ + "theme": "moonstone", + "lightStyle": "minimal-light", + "darkStyle": "minimal-dark", + "lightScheme": "minimal-flexoki-light", + "darkScheme": "minimal-flexoki-dark", + "editorFont": "", + "lineHeight": 1.5, + "lineWidth": 40, + "lineWidthWide": 50, + "maxWidth": 88, + "textNormal": 16, + "textSmall": 13, + "imgGrid": true, + "imgWidth": "img-default-width", + "tableWidth": "table-default-width", + "iframeWidth": "iframe-default-width", + "mapWidth": "map-default-width", + "chartWidth": "chart-default-width", + "colorfulHeadings": false, + "colorfulFrame": false, + "colorfulActiveStates": true, + "trimNames": true, + "labeledNav": true, + "fullWidthMedia": true, + "bordersToggle": true, + "minimalStatus": true, + "focusMode": true, + "underlineInternal": true, + "underlineExternal": true, + "useSystemTheme": false, + "folding": true, + "lineNumbers": false, + "readableLineLength": true, + "devBlockWidth": false +} \ No newline at end of file diff --git a/docs/.obsidian/plugins/table-editor-obsidian/data.json b/docs/.obsidian/plugins/table-editor-obsidian/data.json new file mode 100644 index 00000000..90094659 --- /dev/null +++ b/docs/.obsidian/plugins/table-editor-obsidian/data.json @@ -0,0 +1,6 @@ +{ + "formatType": "normal", + "showRibbonIcon": true, + "bindEnter": true, + "bindTab": true +} \ No newline at end of file diff --git a/docs/.obsidian/templates.json b/docs/.obsidian/templates.json new file mode 100644 index 00000000..cda2aca0 --- /dev/null +++ b/docs/.obsidian/templates.json @@ -0,0 +1,3 @@ +{ + "folder": "templates" +} \ No newline at end of file diff --git a/docs/.obsidian/themes/Minimal/manifest.json b/docs/.obsidian/themes/Minimal/manifest.json deleted file mode 100644 index 2f1dee29..00000000 --- a/docs/.obsidian/themes/Minimal/manifest.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "Minimal", - "version": "7.4.7", - "minAppVersion": "1.5.0", - "author": "@kepano", - "authorUrl": "https://twitter.com/kepano", - "fundingUrl": "https://www.buymeacoffee.com/kepano" -} diff --git a/docs/.obsidian/themes/Minimal/theme.css b/docs/.obsidian/themes/Minimal/theme.css deleted file mode 100644 index 31425834..00000000 --- a/docs/.obsidian/themes/Minimal/theme.css +++ /dev/null @@ -1,2158 +0,0 @@ -/* --------------------------------------------------------------------------- - -Minimal Theme by @kepano - -User interface replacement for Obsidian. - -Designed to be used with the Minimal Theme Settings -plugin and the Hider plugin. - -Sponsor my work: -https://www.buymeacoffee.com/kepano - -Readme: -https://github.com/kepano/obsidian-minimal - ------------------------------------------------------------------------------ - -MIT License - -Copyright (c) 2020-2023 Stephan Ango (@kepano) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -*/ -body{--font-editor-theme:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Inter,Ubuntu,sans-serif;--font-editor:var(--font-editor-override),var(--font-text-override),var(--font-editor-theme)}body{--blockquote-style:normal;--blockquote-color:var(--text-muted);--blockquote-border-thickness:1px;--blockquote-border-color:var(--quote-opening-modifier);--embed-block-shadow-hover:none;--font-ui-smaller:11px;--normal-weight:400;--bold-weight:600;--link-weight:inherit;--inline-title-margin-bottom:1rem;--h1-size:1.125em;--h2-size:1.05em;--h3-size:1em;--h4-size:0.90em;--h5-size:0.85em;--h6-size:0.85em;--h1-weight:600;--h2-weight:600;--h3-weight:500;--h4-weight:500;--h5-weight:500;--h6-weight:400;--h1-variant:normal;--h2-variant:normal;--h3-variant:normal;--h4-variant:normal;--h5-variant:small-caps;--h6-variant:small-caps;--h1-style:normal;--h2-style:normal;--h3-style:normal;--h4-style:normal;--h5-style:normal;--h6-style:normal;--line-width:40rem;--line-height:1.5;--line-height-normal:var(--line-height);--max-width:88%;--max-col-width:18em;--icon-muted:0.5;--nested-padding:1.1em;--folding-offset:32px;--list-edit-offset:0.5em;--list-indent:2em;--list-spacing:0.075em;--input-height:32px;--header-height:40px;--metadata-label-width:9rem;--metadata-label-font-size:var(--font-adaptive-small);--metadata-input-font-size:var(--font-adaptive-small);--mobile-left-sidebar-width:280pt;--mobile-right-sidebar-width:240pt;--top-left-padding-y:0px;--image-muted:0.7;--image-radius:4px;--heading-spacing:2em;--p-spacing:1.75rem;--border-width:1px;--table-border-width:var(--border-width);--table-selection:var(--text-selection);--table-selection-border-color:var(--text-accent);--table-selection-border-width:0px;--table-selection-border-radius:0px;--table-drag-handle-background-active:var(--text-selection);--table-drag-handle-color-active:var(--text-accent);--table-add-button-border-width:0px;--file-margins:var(--size-4-2) var(--size-4-12)}.mod-macos{--top-left-padding-y:24px}.is-phone{--metadata-label-font-size:var(--font-adaptive-smaller);--metadata-input-font-size:var(--font-adaptive-smaller)}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.is-phone{--border-width:0.75px}}body{--base-h:0;--base-s:0%;--base-l:96%;--accent-h:201;--accent-s:17%;--accent-l:50%}.theme-dark,.theme-light{--color-red-rgb:208,66,85;--color-orange-rgb:213,118,63;--color-yellow-rgb:229,181,103;--color-green-rgb:168,195,115;--color-cyan-rgb:115,187,178;--color-blue-rgb:108,153,187;--color-purple-rgb:158,134,200;--color-pink-rgb:176,82,121;--color-red:#d04255;--color-orange:#d5763f;--color-yellow:#e5b567;--color-green:#a8c373;--color-cyan:#73bbb2;--color-blue:#6c99bb;--color-purple:#9e86c8;--color-pink:#b05279}.theme-light,.theme-light.minimal-default-light,body .excalidraw{--bg1:white;--bg2:hsl( var(--base-h), var(--base-s), var(--base-l) );--bg3:hsla( var(--base-h), var(--base-s), calc(var(--base-l) - 50%), 0.12 );--ui1:hsl( var(--base-h), var(--base-s), calc(var(--base-l) - 6%) );--ui2:hsl( var(--base-h), var(--base-s), calc(var(--base-l) - 12%) );--ui3:hsl( var(--base-h), var(--base-s), calc(var(--base-l) - 20%) );--tx1:hsl( var(--base-h), var(--base-s), calc(var(--base-l) - 90%) );--tx2:hsl( var(--base-h), calc(var(--base-s) - 20%), calc(var(--base-l) - 45%) );--tx3:hsl( var(--base-h), calc(var(--base-s) - 10%), calc(var(--base-l) - 25%) );--tx4:hsl( var(--base-h), calc(var(--base-s) - 10%), calc(var(--base-l) - 60%) );--ax1:hsl( var(--accent-h), var(--accent-s), var(--accent-l) );--ax2:hsl( var(--accent-h), var(--accent-s), calc(var(--accent-l) - 8%) );--ax3:hsl( var(--accent-h), var(--accent-s), calc(var(--accent-l) + 6%) );--hl1:hsla( var(--accent-h), 50%, calc(var(--base-l) - 20%), 30% );--hl2:rgba(255, 225, 0, 0.5);--sp1:white}.excalidraw.theme--dark,.theme-dark,.theme-dark.minimal-default-dark,.theme-light.minimal-light-contrast .titlebar,.theme-light.minimal-light-contrast.minimal-status-off .status-bar{--accent-l:60%;--base-l:15%;--bg1:hsl( var(--base-h), var(--base-s), var(--base-l) );--bg2:hsl( var(--base-h), var(--base-s), calc(var(--base-l) - 2%) );--bg3:hsla( var(--base-h), var(--base-s), calc(var(--base-l) + 40%), 0.12 );--ui1:hsl( var(--base-h), var(--base-s), calc(var(--base-l) + 6%) );--ui2:hsl( var(--base-h), var(--base-s), calc(var(--base-l) + 12%) );--ui3:hsl( var(--base-h), var(--base-s), calc(var(--base-l) + 20%) );--tx1:hsl( var(--base-h), calc(var(--base-s) - 10%), calc(var(--base-l) + 67%) );--tx2:hsl( var(--base-h), calc(var(--base-s) - 20%), calc(var(--base-l) + 45%) );--tx3:hsl( var(--base-h), calc(var(--base-s) - 10%), calc(var(--base-l) + 20%) );--tx4:hsl( var(--base-h), calc(var(--base-s) - 10%), calc(var(--base-l) + 50%) );--ax1:hsl( var(--accent-h), var(--accent-s), var(--accent-l) );--ax2:hsl( var(--accent-h), var(--accent-s), calc(var(--accent-l) + 8%) );--ax3:hsl( var(--accent-h), var(--accent-s), calc(var(--accent-l) - 5%) );--hl1:hsla( var(--accent-h), 50%, 40%, 30% );--hl2:rgba(255, 177, 80, 0.3);--sp1:white}.theme-light.minimal-light-white{--background-primary:white;--background-secondary:white;--background-secondary-alt:white;--ribbon-background:white;--titlebar-background:white;--bg1:white}.theme-dark.minimal-dark-black{--base-d:0%;--titlebar-background:black;--background-primary:black;--background-secondary:black;--background-secondary-alt:black;--ribbon-background:black;--background-modifier-hover:hsl( var(--base-h), var(--base-s), calc(var(--base-d) + 10%));--tx1:hsl( var(--base-h), var(--base-s), calc(var(--base-d) + 75%) );--tx2:hsl( var(--base-h), var(--base-s), calc(var(--base-d) + 50%) );--tx3:hsl( var(--base-h), var(--base-s), calc(var(--base-d) + 25%) );--ui1:hsl( var(--base-h), var(--base-s), calc(var(--base-d) + 12%) );--ui2:hsl( var(--base-h), var(--base-s), calc(var(--base-d) + 20%) );--ui3:hsl( var(--base-h), var(--base-s), calc(var(--base-d) + 30%) )}.theme-light{--mono100:black;--mono0:white}.theme-dark{--mono100:white;--mono0:black}.theme-dark,.theme-light,.theme-light.minimal-light-contrast .titlebar,.theme-light.minimal-light-contrast.is-mobile .workspace-drawer.mod-left,.theme-light.minimal-light-contrast.minimal-status-off .status-bar{--background-modifier-accent:var(--ax3);--background-modifier-border-focus:var(--ui3);--background-modifier-border-hover:var(--ui2);--background-modifier-border:var(--ui1);--background-modifier-form-field-highlighted:var(--bg1);--background-modifier-form-field:var(--bg1);--background-modifier-success:var(--color-green);--background-modifier-hover:var(--bg3);--background-modifier-active-hover:var(--bg3);--background-primary:var(--bg1);--background-primary-alt:var(--bg2);--background-secondary:var(--bg2);--background-secondary-alt:var(--bg1);--background-table-rows:var(--bg2);--checkbox-color:var(--ax3);--code-normal:var(--tx1);--divider-color:var(--ui1);--frame-divider-color:var(--ui1);--icon-color-active:var(--tx1);--icon-color-focused:var(--tx1);--icon-color-hover:var(--tx2);--icon-color:var(--tx2);--icon-hex:var(--mono0);--interactive-accent-hover:var(--ax1);--interactive-accent:var(--ax3);--interactive-hover:var(--ui1);--list-marker-color:var(--tx3);--modal-border-color:var(--ui2);--nav-item-background-active:var(--bg3);--nav-item-background-hover:var(--bg3);--nav-item-color:var(--tx2);--nav-item-color-active:var(--tx1);--nav-item-color-hover:var(--tx1);--nav-collapse-icon-color:var(--tx2);--nav-collapse-icon-color-collapsed:var(--tx2);--nav-indentation-guide-color:var(--ui1);--prompt-border-color:var(--ui3);--quote-opening-modifier:var(--ui2);--ribbon-background:var(--bg2);--scrollbar-active-thumb-bg:var(--ui3);--scrollbar-bg:transparent;--scrollbar-thumb-bg:var(--ui1);--search-result-background:var(--bg1);--tab-text-color-focused-active:var(--tx1);--tab-outline-color:var(--ui1);--text-accent-hover:var(--ax2);--text-accent:var(--ax1);--text-blockquote:var(--tx2);--text-bold:var(--tx1);--text-code:var(--tx4);--text-error:var(--color-red);--text-faint:var(--tx3);--text-highlight-bg:var(--hl2);--text-italic:var(--tx1);--text-muted:var(--tx2);--text-normal:var(--tx1);--text-on-accent:var(--sp1);--text-selection:var(--hl1);--text-formatting:var(--tx3);--title-color-inactive:var(--tx2);--title-color:var(--tx1);--titlebar-background:var(--bg2);--titlebar-background-focused:var(--bg2);--titlebar-text-color-focused:var(--tx1);--workspace-background-translucent:hsla(var(--base-h),var(--base-s), var(--base-l), 0.7)}.theme-dark .view-actions,.theme-light .view-actions{--icon-color-active:var(--ax1)}.theme-light.minimal-light-contrast{--workspace-background-translucent:rgba(0,0,0,0.6)}.theme-light.minimal-light-contrast .theme-dark{--tab-container-background:var(--bg2);--ribbon-background-collapsed:var(--bg2)}.theme-light{--interactive-normal:var(--bg1);--interactive-accent-rgb:220,220,220;--active-line-bg:rgba(0,0,0,0.035);--background-modifier-cover:hsla(var(--base-h),calc(var(--base-s) - 70%),calc(var(--base-l) - 20%),0.5);--text-highlight-bg-active:rgba(0, 0, 0, 0.1);--background-modifier-error:rgba(255,0,0,0.14);--background-modifier-error-hover:rgba(255,0,0,0.08);--shadow-color:rgba(0, 0, 0, 0.1);--btn-shadow-color:rgba(0, 0, 0, 0.05)}.theme-dark{--interactive-normal:var(--bg3);--interactive-accent-rgb:66,66,66;--active-line-bg:rgba(255,255,255,0.04);--background-modifier-cover:hsla(var(--base-h),var(--base-s), calc(var(--base-l) - 12%), 0.5);--text-highlight-bg-active:rgba(255, 255, 255, 0.1);--background-modifier-error:rgba(255,20,20,0.12);--background-modifier-error-hover:rgba(255,20,20,0.18);--background-modifier-box-shadow:rgba(0, 0, 0, 0.3);--shadow-color:rgba(0, 0, 0, 0.3);--btn-shadow-color:rgba(0, 0, 0, 0.2)}.theme-light.minimal-light-white{--background-table-rows:var(--bg2)}.theme-light.minimal-light-tonal{--background-primary:var(--bg2);--background-primary-alt:var(--bg3);--background-table-rows:var(--bg3)}.theme-dark.minimal-dark-tonal{--ribbon-background:var(--bg1);--background-secondary:var(--bg1);--background-table-rows:var(--bg3)}.theme-dark.minimal-dark-black{--background-primary-alt:var(--bg3);--background-table-rows:var(--bg3);--modal-border:var(--ui2);--active-line-bg:rgba(255,255,255,0.085);--background-modifier-form-field:var(--bg3);--background-modifier-cover:hsla(var(--base-h),var(--base-s),calc(var(--base-d) + 8%),0.9);--background-modifier-box-shadow:rgba(0, 0, 0, 1)}body{--font-adaptive-normal:var(--font-text-size,var(--editor-font-size));--font-adaptive-small:calc(var(--font-ui-small) * 1.07);--font-adaptive-smaller:var(--font-ui-small);--font-adaptive-smallest:var(--font-ui-smaller);--line-width-wide:calc(var(--line-width) + 12.5%);--font-code:calc(var(--font-adaptive-normal) * 0.9);--table-text-size:calc(var(--font-adaptive-normal) * 0.875)}.minimal-dev-block-width .mod-root .workspace-leaf-content:after{display:flex;align-items:flex-end;content:"\00a0pane\00a0";font-size:12px;color:gray;font-family:var(--font-monospace);width:100%;max-width:100%;height:100vh;top:0;z-index:999;position:fixed;pointer-events:none}.minimal-dev-block-width.minimal-readable .mod-root .view-header:after{display:flex;align-items:flex-end;color:green;font-size:12px;font-family:var(--font-monospace);content:" ";width:var(--folding-offset);height:100vh;border-left:1px solid green;border-right:1px solid green;background-color:rgba(0,128,0,.1);top:0;left:max(calc(50% - var(--line-width)/ 2 - 1px),calc(50% - var(--max-width)/ 2 - 1px));z-index:999;position:fixed;pointer-events:none}.minimal-dev-block-width.minimal-readable-off .mod-root .view-header:after{display:flex;align-items:flex-end;color:green;font-size:12px;font-family:var(--font-monospace);content:" ";width:var(--folding-offset);height:100vh;border-left:1px solid green;border-right:1px solid green;background-color:rgba(0,128,0,.1);top:0;left:calc(50% - var(--max-width)/ 2 - 1px);z-index:999;position:fixed;pointer-events:none}.minimal-dev-block-width .mod-root .view-content:before{display:flex;align-items:flex-end;content:"\00a0max\00a0";font-size:12px;color:red;width:var(--max-width);height:100vh;border-left:1px solid red;border-right:1px solid red;top:0;left:50%;transform:translate(-50%,0);z-index:999;position:fixed;pointer-events:none}.minimal-dev-block-width.minimal-readable .mod-root .workspace-leaf-content:before{display:flex;align-items:flex-end;content:"\00a0wide\00a0";font-size:12px;color:orange;font-family:var(--font-monospace);width:var(--line-width-wide);max-width:var(--max-width);height:100vh;border-left:1px solid orange;border-right:1px solid orange;background-color:rgba(255,165,0,.05);top:0;left:50%;transform:translate(-50%,0);z-index:999;position:fixed;pointer-events:none}.minimal-dev-block-width.minimal-readable .mod-root .view-content:after{display:flex;align-items:flex-end;color:#00f;font-size:12px;font-family:var(--font-monospace);content:"\00a0normal";width:var(--line-width);max-width:var(--max-width);height:100vh;border-left:1px solid #00f;border-right:1px solid #00f;background-color:rgba(0,0,255,.08);top:0;left:50%;transform:translate(-50%,0);z-index:999;position:fixed;pointer-events:none}.CodeMirror-wrap>div>textarea{opacity:0}.markdown-source-view.mod-cm6 hr{border-width:2px}.mod-cm6 .cm-editor .cm-line{padding-left:0;padding-right:0}.cm-editor .cm-content{padding-top:.5em}.markdown-source-view{color:var(--text-normal)}.markdown-source-view.mod-cm6 .cm-sizer{display:block}.markdown-source-view.mod-cm6 .cm-scroller{padding-left:0;padding-right:0}.cm-s-obsidian .cm-line.HyperMD-header{padding-top:calc(var(--p-spacing)/ 2)}.markdown-rendered .mod-header+div>*{margin-block-start:0}body :not(.canvas-node) .markdown-source-view.mod-cm6 .cm-gutters{position:absolute!important;z-index:0;margin-inline-end:0}body :not(.canvas-node) .markdown-source-view.mod-cm6.is-rtl .cm-gutters{right:0}body{--line-number-color:var(--text-faint);--line-number-color-active:var(--text-muted)}.markdown-source-view.mod-cm6 .cm-gutters{color:var(--line-number-color)!important}.markdown-source-view.mod-cm6 .cm-editor .cm-gutterElement.cm-active .cm-heading-marker,.markdown-source-view.mod-cm6 .cm-editor .cm-lineNumbers .cm-gutterElement.cm-active{color:var(--line-number-color-active)}.cm-editor .cm-lineNumbers{background-color:var(--gutter-background)}.cm-editor .cm-lineNumbers .cm-gutterElement{min-width:var(--folding-offset);padding-inline-end:0.5em}.is-rtl .cm-editor .cm-lineNumbers .cm-gutterElement{text-align:left}@media (max-width:400pt){.cm-editor .cm-lineNumbers .cm-gutterElement{padding-inline-end:4px;padding-inline-start:8px}}.cm-editor .cm-lineNumbers .cm-gutterElement{font-variant-numeric:tabular-nums}.cm-editor .cm-gutterElement.cm-active .cm-heading-marker,.cm-editor .cm-lineNumbers .cm-gutterElement.cm-active{color:var(--text-muted)}.markdown-source-view.mod-cm6 .edit-block-button{cursor:var(--cursor);color:var(--text-faint);background-color:var(--background-primary);top:0;opacity:0;transition:opacity .2s;padding:4px 4px 4px 9px}.markdown-source-view.mod-cm6 .edit-block-button svg{margin:0!important}.markdown-source-view.mod-cm6.is-live-preview.is-readable-line-width .cm-embed-block>.edit-block-button{width:30px!important;padding-left:7px!important}.is-live-preview:not(.is-readable-line-width) .cm-embed-block>.edit-block-button{padding-left:0!important;margin-left:0!important;padding:4px}.markdown-source-view.mod-cm6 .edit-block-button:hover{background-color:var(--background-primary);color:var(--text-muted)}.markdown-source-view.mod-cm6 .edit-block-button svg{opacity:1}.markdown-source-view.mod-cm6 .edit-block-button:hover svg{opacity:1}.markdown-source-view.mod-cm6 .cm-embed-block{padding:0;border:0;border-radius:0}.markdown-source-view.mod-cm6 .cm-embed-block:hover{border:0}.metadata-container{--input-height:2rem}.markdown-source-view .metadata-container{transform:translateX(-4px)}body.metadata-heading-off .metadata-properties-heading{display:none}.metadata-add-property-off .mod-root .metadata-add-button{display:none}.metadata-dividers{--metadata-divider-width:1px;--metadata-gap:0px}.metadata-icons-off .workspace-leaf-content[data-type=all-properties] .tree-item-inner{margin-left:-16px}.metadata-icons-off .workspace-leaf-content[data-type=all-properties] .tree-item-icon{display:none}.metadata-icons-off .metadata-property-icon{display:none}figure{margin-inline-start:0;margin-inline-end:0}.markdown-preview-view .mod-highlighted{transition:background-color .3s ease;background-color:var(--text-selection);color:inherit}.inline-title{padding-top:16px}.minimal-status-off .status-bar{--status-bar-position:static;--status-bar-radius:0;--status-bar-border-width:1px 0 0 0;--status-bar-background:var(--background-secondary);--status-bar-border-color:var(--ui1)}body:not(.minimal-status-off) .status-bar{background-color:var(--background-primary);--status-bar-border-width:0}.status-bar{transition:color .2s linear;color:var(--text-faint);font-size:var(--font-adaptive-smallest)}.status-bar .sync-status-icon.mod-success,.status-bar .sync-status-icon.mod-working{color:var(--text-faint)}.status-bar:hover,.status-bar:hover .sync-status-icon.mod-success,.status-bar:hover .sync-status-icon.mod-working{color:var(--text-muted);transition:color .2s linear}.status-bar .plugin-sync:hover .sync-status-icon.mod-success,.status-bar .plugin-sync:hover .sync-status-icon.mod-working{color:var(--text-normal)}.status-bar .status-bar-item{cursor:var(--cursor)!important}.status-bar .status-bar-item.cMenu-statusbar-button:hover,.status-bar .status-bar-item.mod-clickable:hover,.status-bar .status-bar-item.plugin-editor-status:hover,.status-bar .status-bar-item.plugin-sync:hover{text-align:center;background-color:var(--background-modifier-hover)!important}.tab-stack-top-flipped{--tab-stacked-text-transform:rotate(180deg);--tab-stacked-text-align:right}.tab-stack-center{--tab-stacked-text-align:center}.tab-stack-center-flipped{--tab-stacked-text-transform:rotate(180deg);--tab-stacked-text-align:center}.tab-stack-bottom{--tab-stacked-text-transform:rotate(180deg)}.tab-stack-bottom-flipped{--tab-stacked-text-align:right}.view-header-title,.view-header-title-parent{text-overflow:ellipsis}.view-header-title-container:not(.mod-at-end):after{display:none}body:not(.is-mobile) .view-actions .view-action:last-child{margin-left:-1px}.minimal-focus-mode .workspace-ribbon:not(.is-collapsed)~.mod-root .view-header:hover .view-actions,.mod-right.is-collapsed~.mod-root .view-header:hover .view-actions,.view-action.is-active:hover,.workspace-ribbon.mod-left.is-collapsed~.mod-root .view-header:hover .view-actions,body:not(.minimal-focus-mode) .workspace-ribbon:not(.is-collapsed)~.mod-root .view-actions{opacity:1;transition:opacity .25s ease-in-out}.view-header-title-container{opacity:0;transition:opacity .1s ease-in-out}.view-header-title-container:focus-within{opacity:1;transition:opacity .1s ease-in-out}.view-header:hover .view-header-title-container,.workspace-tab-header-container:hover+.workspace-tab-container .view-header-title-container{opacity:1;transition:opacity .1s ease-in-out}.is-phone .view-header-title-container,.minimal-tab-title-visible .view-header-title-container{opacity:1}.minimal-tab-title-hidden .view-header-title-container{opacity:0}.minimal-tab-title-hidden .view-header-title-container:focus-within{opacity:1;transition:opacity .1s ease-in-out}.minimal-tab-title-hidden .view-header:hover .view-header-title-container,.minimal-tab-title-hidden .workspace-tab-header-container:hover+.workspace-tab-container .view-header-title-container{opacity:0}body.window-title-off .titlebar-text{display:none}.titlebar-button-container.mod-right{background-color:transparent!important}.is-hidden-frameless.theme-dark:not(.minimal-dark-black):not(.colorful-frame),.is-hidden-frameless.theme-light:not(.minimal-light-tonal):not(.colorful-frame):not(.minimal-light-white){--titlebar-background:var(--bg1)}.is-hidden-frameless.theme-dark:not(.minimal-dark-black):not(.colorful-frame).is-focused .sidebar-toggle-button.mod-right,.is-hidden-frameless.theme-dark:not(.minimal-dark-black):not(.colorful-frame).is-focused .workspace-ribbon.mod-left.is-collapsed,.is-hidden-frameless.theme-dark:not(.minimal-dark-black):not(.colorful-frame).is-focused .workspace-tabs.mod-top,.is-hidden-frameless.theme-light:not(.minimal-light-tonal):not(.colorful-frame):not(.minimal-light-white).is-focused .sidebar-toggle-button.mod-right,.is-hidden-frameless.theme-light:not(.minimal-light-tonal):not(.colorful-frame):not(.minimal-light-white).is-focused .workspace-ribbon.mod-left.is-collapsed,.is-hidden-frameless.theme-light:not(.minimal-light-tonal):not(.colorful-frame):not(.minimal-light-white).is-focused .workspace-tabs.mod-top{--titlebar-background-focused:var(--bg1)}.is-hidden-frameless.theme-dark:not(.minimal-dark-black):not(.colorful-frame):not(.minimal-dark-tonal):not(.minimal-light-white) .workspace-ribbon.mod-left:not(.is-collapsed),.is-hidden-frameless.theme-light:not(.minimal-light-tonal):not(.colorful-frame):not(.minimal-light-white):not(.minimal-dark-tonal):not(.minimal-light-white) .workspace-ribbon.mod-left:not(.is-collapsed){--titlebar-background:var(--bg2)}.mod-macos.is-hidden-frameless:not(.is-popout-window) .sidebar-toggle-button.mod-right{right:0;padding-right:var(--size-4-2)}body.is-focused{--titlebar-background-focused:var(--background-secondary)}.is-hidden-frameless:not(.colorful-frame) .mod-left-split .mod-top .workspace-tab-header-container{--tab-container-background:var(--background-secondary)}.mod-root .workspace-tab-header-status-icon{color:var(--text-muted)}.modal button:not(.mod-warning),.modal.mod-settings button:not(.mod-cta):not(.mod-warning),.modal.mod-settings button:not(.mod-warning){white-space:nowrap;transition:background-color .2s ease-out,border-color .2s ease-out}button.mod-warning{border:1px solid var(--background-modifier-error);color:var(--text-error);box-shadow:0 1px 1px 0 var(--btn-shadow-color);transition:background-color .2s ease-out}button.mod-warning:hover{border:1px solid var(--background-modifier-error);color:var(--text-error);box-shadow:0 2px 3px 0 var(--btn-shadow-color);transition:background-color .2s ease-out}.document-replace,.document-search{max-width:100%;padding:0}.document-search-container{margin:0 auto;max-width:var(--max-width);width:var(--line-width)}.is-mobile .CodeMirror-foldgutter-open:after,.is-mobile span[title="Fold line"]:after{transform:translateX(-2px)!important}body.is-mobile .CodeMirror-foldgutter-folded:after,body.is-mobile span[title="Unfold line"]:after{content:"›";font-family:sans-serif;transform:translateY(-2px);transform:rotate(-90deg) translateY(2px) translateX(-.45em)}body.is-mobile .CodeMirror-foldgutter-open:after,body.is-mobile span[title="Fold line"]:after{content:"›";font-family:sans-serif;transform:rotate(360deg)}.modal-button-container .mod-checkbox{--checkbox-radius:4px}.modal-container.mod-confirmation .modal{width:480px;min-width:0}body{--progress-outline:var(--background-modifier-border);--progress-complete:var(--text-accent)}.markdown-preview-view progress,.markdown-rendered progress,.markdown-source-view.is-live-preview progress{width:220px}.markdown-preview-view progress[value]::-webkit-progress-bar,.markdown-rendered progress[value]::-webkit-progress-bar,.markdown-source-view.is-live-preview progress[value]::-webkit-progress-bar{box-shadow:inset 0 0 0 var(--border-width) var(--progress-outline)}.markdown-preview-view progress[value^='1']::-webkit-progress-value,.markdown-preview-view progress[value^='2']::-webkit-progress-value,.markdown-preview-view progress[value^='3']::-webkit-progress-value,.markdown-rendered progress[value^='1']::-webkit-progress-value,.markdown-rendered progress[value^='2']::-webkit-progress-value,.markdown-rendered progress[value^='3']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^='1']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^='2']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^='3']::-webkit-progress-value{background-color:var(--color-red)}.markdown-preview-view progress[value^='4']::-webkit-progress-value,.markdown-preview-view progress[value^='5']::-webkit-progress-value,.markdown-rendered progress[value^='4']::-webkit-progress-value,.markdown-rendered progress[value^='5']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^='4']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^='5']::-webkit-progress-value{background-color:var(--color-orange)}.markdown-preview-view progress[value^='6']::-webkit-progress-value,.markdown-preview-view progress[value^='7']::-webkit-progress-value,.markdown-rendered progress[value^='6']::-webkit-progress-value,.markdown-rendered progress[value^='7']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^='6']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^='7']::-webkit-progress-value{background-color:var(--color-yellow)}.markdown-preview-view progress[value^='8']::-webkit-progress-value,.markdown-preview-view progress[value^='9']::-webkit-progress-value,.markdown-rendered progress[value^='8']::-webkit-progress-value,.markdown-rendered progress[value^='9']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^='8']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^='9']::-webkit-progress-value{background-color:var(--color-green)}.markdown-preview-view progress[value='1']::-webkit-progress-value,.markdown-preview-view progress[value='100']::-webkit-progress-value,.markdown-rendered progress[value='1']::-webkit-progress-value,.markdown-rendered progress[value='100']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='1']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='100']::-webkit-progress-value{background-color:var(--progress-complete)}.markdown-preview-view progress[value='0']::-webkit-progress-value,.markdown-preview-view progress[value='2']::-webkit-progress-value,.markdown-preview-view progress[value='3']::-webkit-progress-value,.markdown-preview-view progress[value='4']::-webkit-progress-value,.markdown-preview-view progress[value='5']::-webkit-progress-value,.markdown-preview-view progress[value='6']::-webkit-progress-value,.markdown-preview-view progress[value='7']::-webkit-progress-value,.markdown-preview-view progress[value='8']::-webkit-progress-value,.markdown-preview-view progress[value='9']::-webkit-progress-value,.markdown-rendered progress[value='0']::-webkit-progress-value,.markdown-rendered progress[value='2']::-webkit-progress-value,.markdown-rendered progress[value='3']::-webkit-progress-value,.markdown-rendered progress[value='4']::-webkit-progress-value,.markdown-rendered progress[value='5']::-webkit-progress-value,.markdown-rendered progress[value='6']::-webkit-progress-value,.markdown-rendered progress[value='7']::-webkit-progress-value,.markdown-rendered progress[value='8']::-webkit-progress-value,.markdown-rendered progress[value='9']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='0']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='2']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='3']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='4']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='5']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='6']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='7']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='8']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='9']::-webkit-progress-value{background-color:var(--color-red)}body:not(.hider-scrollbars).styled-scrollbars ::-webkit-scrollbar,body:not(.native-scrollbars) ::-webkit-scrollbar{width:11px;background-color:transparent}body:not(.hider-scrollbars).styled-scrollbars ::-webkit-scrollbar:horizontal,body:not(.native-scrollbars) ::-webkit-scrollbar:horizontal{height:11px}body:not(.hider-scrollbars).styled-scrollbars ::-webkit-scrollbar-corner,body:not(.native-scrollbars) ::-webkit-scrollbar-corner{background-color:transparent}body:not(.hider-scrollbars).styled-scrollbars ::-webkit-scrollbar-track,body:not(.native-scrollbars) ::-webkit-scrollbar-track{background-color:transparent}body:not(.hider-scrollbars).styled-scrollbars ::-webkit-scrollbar-thumb,body:not(.native-scrollbars) ::-webkit-scrollbar-thumb{background-clip:padding-box;border-radius:20px;border:3px solid transparent;background-color:var(--background-modifier-border);border-width:3px 3px 3px 3px;min-height:45px}body:not(.hider-scrollbars).styled-scrollbars .mod-left-split .workspace-tabs ::-webkit-scrollbar-thumb:hover,body:not(.hider-scrollbars).styled-scrollbars .modal .vertical-tab-header::-webkit-scrollbar-thumb:hover,body:not(.hider-scrollbars).styled-scrollbars ::-webkit-scrollbar-thumb:hover,body:not(.native-scrollbars) .mod-left-split .workspace-tabs ::-webkit-scrollbar-thumb:hover,body:not(.native-scrollbars) .modal .vertical-tab-header::-webkit-scrollbar-thumb:hover,body:not(.native-scrollbars) ::-webkit-scrollbar-thumb:hover{background-color:var(--background-modifier-border-hover)}body:not(.hider-scrollbars).styled-scrollbars .mod-left-split .workspace-tabs ::-webkit-scrollbar-thumb:active,body:not(.hider-scrollbars).styled-scrollbars .modal .vertical-tab-header::-webkit-scrollbar-thumb:active,body:not(.hider-scrollbars).styled-scrollbars ::-webkit-scrollbar-thumb:active,body:not(.native-scrollbars) .mod-left-split .workspace-tabs ::-webkit-scrollbar-thumb:active,body:not(.native-scrollbars) .modal .vertical-tab-header::-webkit-scrollbar-thumb:active,body:not(.native-scrollbars) ::-webkit-scrollbar-thumb:active{background-color:var(--background-modifier-border-focus)}.tooltip{transition:none;animation:none}.tooltip.mod-left,.tooltip.mod-right{animation:none}.tooltip.mod-error{color:var(--text-error)}.markdown-preview-view blockquote{padding:0 0 0 var(--nested-padding);font-size:var(--blockquote-size)}.markdown-source-view.mod-cm6 .HyperMD-quote,.markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote{font-size:var(--blockquote-size)}.is-live-preview .cm-hmd-indent-in-quote{color:var(--text-faint)}.is-live-preview.is-readable-line-width>.cm-callout .callout{max-width:var(--max-width);margin:0 auto}.callouts-outlined .callout .callout-title{background-color:var(--background-primary);margin-top:-24px;z-index:200;width:fit-content;padding:0 .5em;margin-left:-.75em;letter-spacing:.05em;font-variant-caps:all-small-caps}.callouts-outlined .callout{overflow:visible;--callout-border-width:1px;--callout-border-opacity:0.5;--callout-title-size:0.8em;--callout-blend-mode:normal;background-color:transparent}.callouts-outlined .cm-embed-block.cm-callout{padding-top:12px}.callouts-outlined .callout-content .callout{margin-top:18px}body{--checkbox-radius:50%;--checkbox-top:2px;--checkbox-left:0px;--checkbox-margin:0px 6px 0px -2em}.checkbox-square{--checkbox-size:calc(var(--font-text-size) * 0.85);--checkbox-radius:4px;--checkbox-top:1px;--checkbox-left:0px;--checkbox-margin:0px 8px 0px -2em}body.minimal-strike-lists{--checklist-done-decoration:line-through}body:not(.minimal-strike-lists){--checklist-done-decoration:none;--checklist-done-color:var(--text-normal)}.markdown-preview-section>.contains-task-list{padding-bottom:.5em}.mod-cm6 .HyperMD-task-line[data-task] .cm-formatting-list-ol~.task-list-label .task-list-item-checkbox{margin:1px}.markdown-preview-view .task-list-item-checkbox{position:relative;top:var(--checkbox-top);left:var(--checkbox-left);line-height:0}.markdown-preview-view ul>li.task-list-item{text-indent:0}.is-mobile .mod-cm6 .HyperMD-task-line[data-task] .task-list-item-checkbox{margin-inline-start:-.4em}.is-mobile .markdown-preview-view input[type=checkbox].task-list-item-checkbox{top:.2em}.minimal-code-scroll{--code-white-space:pre}.minimal-code-scroll .HyperMD-codeblock.HyperMD-codeblock-bg{overflow-y:scroll;white-space:pre}.minimal-code-scroll .cm-hmd-codeblock{white-space:pre!important}@media print{.print{--code-background:#eee!important}}body{--embed-max-height:none;--embed-decoration-style:solid;--embed-decoration-color:var(--background-modifier-border-hover)}.embed-strict{--embed-background:transparent;--embed-border-left:0;--embed-padding:0}.embed-strict .markdown-embed-content{--folding-offset:0px}.embed-strict .el-embed-heading.el-p>p{margin-block-start:0;margin-block-end:0}.embed-strict .internal-embed .markdown-embed,.embed-strict .markdown-preview-view .markdown-embed,.embed-strict.markdown-preview-view .markdown-embed{padding:0}.embed-strict .internal-embed .markdown-embed .markdown-embed-title,.embed-strict .markdown-embed-title{display:none}.embed-strict .internal-embed:not([src*="#^"]) .markdown-embed-link{width:24px;opacity:0}.embed-underline .internal-embed:not(.pdf-embed){text-decoration-line:underline;text-decoration-style:var(--embed-decoration-style);text-decoration-color:var(--embed-decoration-color)}.embed-hide-title .markdown-embed-title{display:none}.contextual-typography .embed-strict .internal-embed .markdown-preview-view .markdown-preview-sizer>div,.embed-strict.contextual-typography .internal-embed .markdown-preview-view .markdown-preview-sizer>div{margin:0;width:100%}.markdown-embed .markdown-preview-view .markdown-preview-sizer{padding-bottom:0!important}.markdown-preview-view.is-readable-line-width .markdown-embed .markdown-preview-sizer,.markdown-preview-view.markdown-embed .markdown-preview-sizer{max-width:100%;width:100%;min-height:0!important;padding-bottom:0!important}.markdown-embed .markdown-preview-section div:last-child p,.markdown-embed .markdown-preview-section div:last-child ul{margin-block-end:2px}.markdown-preview-view .markdown-embed{margin-top:var(--nested-padding);padding:0 calc(var(--nested-padding)/ 2) 0 var(--nested-padding)}.internal-embed:not([src*="#^"]) .markdown-embed-link{right:0;width:100%}.file-embed-link,.markdown-embed-link{top:0;right:0;text-align:right;justify-content:flex-end}.file-embed-link svg,.markdown-embed-link svg{width:16px;height:16px}.markdown-embed .file-embed-link,.markdown-embed .markdown-embed-link{opacity:.6;transition:opacity .1s linear}.markdown-embed .file-embed-link:hover,.markdown-embed .markdown-embed-link:hover{opacity:1}.markdown-embed .file-embed-link:hover:hover,.markdown-embed .markdown-embed-link:hover:hover{background-color:transparent;--icon-color:var(--text-accent)}.file-embed-link:hover,.markdown-embed-link:hover{color:var(--text-muted)}.markdown-embed .markdown-preview-view{padding:0}.internal-embed .markdown-embed{border:0;border-left:1px solid var(--quote-opening-modifier);border-radius:0}a[href*="obsidian://search"]{background-image:url("data:image/svg+xml,")}.theme-dark a[href*="obsidian://search"]{background-image:url("data:image/svg+xml,")}body{--adaptive-list-edit-offset:var(--list-edit-offset)}.is-rtl{--adaptive-list-edit-offset:calc(var(--list-edit-offset)*-1)}.markdown-preview-view ol>li,.markdown-preview-view ul>li,.markdown-source-view ol>li,.markdown-source-view ul>li,.mod-cm6 .HyperMD-list-line.cm-line{padding-top:var(--list-spacing);padding-bottom:var(--list-spacing)}.is-mobile ul>li:not(.task-list-item)::marker{font-size:.8em}.is-mobile .workspace-leaf-content:not([data-type=search]) .workspace-leaf-content[data-type=markdown] .nav-buttons-container{border-bottom:none;padding-top:5px}.is-mobile .mod-root .workspace-leaf-content[data-type=markdown] .search-input-container{width:calc(100% - 160px)}.embedded-backlinks .nav-header~.search-input-container{width:calc(100% - 140px);margin-top:12px}.embedded-backlinks .nav-buttons-container{position:absolute;right:0;top:14px}.embedded-backlinks .backlink-pane>.tree-item-self,.embedded-backlinks .backlink-pane>.tree-item-self:hover{text-transform:none;color:var(--text-normal);font-size:var(--font-adaptive-normal);font-weight:500;letter-spacing:unset}body{--pdf-dark-opacity:1}.theme-dark:not(.pdf-shadows-on),.theme-light:not(.pdf-shadows-on){--pdf-shadow:none;--pdf-thumbnail-shadow:none}.theme-dark:not(.pdf-shadows-on) .pdf-viewer .page,.theme-light:not(.pdf-shadows-on) .pdf-viewer .page{border:0}.theme-dark:not(.pdf-shadows-on) .pdf-sidebar-container .thumbnailSelectionRing,.theme-light:not(.pdf-shadows-on) .pdf-sidebar-container .thumbnailSelectionRing{padding:0}.theme-dark:not(.pdf-shadows-on) .pdf-sidebar-container .thumbnail::after,.theme-light:not(.pdf-shadows-on) .pdf-sidebar-container .thumbnail::after{right:var(--size-4-2);bottom:var(--size-4-2)}.theme-dark{--pdf-thumbnail-shadow:0 0 1px 0 rgba(0,0,0,0.6);--pdf-shadow:0 0 1px 0 rgba(0,0,0,0.6)}.theme-dark .pdf-viewer .canvasWrapper{opacity:var(--pdf-dark-opacity)}.theme-dark.pdf-invert-dark .workspace-leaf-content[data-type=pdf] .pdf-thumbnail-view .thumbnailImage,.theme-dark.pdf-invert-dark .workspace-leaf-content[data-type=pdf] .pdf-viewer .canvasWrapper{filter:invert(1) hue-rotate(180deg);mix-blend-mode:screen}.theme-light.pdf-blend-light .workspace-leaf-content[data-type=pdf] .pdf-thumbnail-view .thumbnailImage,.theme-light.pdf-blend-light .workspace-leaf-content[data-type=pdf] .pdf-viewer .canvasWrapper{mix-blend-mode:multiply}body{--table-header-border-width:0;--table-column-first-border-width:0;--table-column-last-border-width:0;--table-row-last-border-width:0;--table-edge-cell-padding-first:0;--table-edge-cell-padding-last:0;--table-cell-padding:4px 10px;--table-header-size:var(--table-text-size)}.markdown-source-view.mod-cm6 table{border-collapse:collapse}.markdown-rendered th{--table-header-size:var(--table-text-size)}.markdown-preview-view table,.markdown-source-view.mod-cm6 table{border:var(--border-width) solid var(--border-color);border-collapse:collapse}.markdown-preview-view td,.markdown-preview-view th,.markdown-source-view.mod-cm6 td,.markdown-source-view.mod-cm6 th{padding:var(--table-cell-padding)}.markdown-preview-view td:first-child,.markdown-preview-view th:first-child,.markdown-source-view.mod-cm6 td:first-child,.markdown-source-view.mod-cm6 th:first-child{padding-left:var(--table-edge-cell-padding-first)}.markdown-preview-view td:first-child .table-cell-wrapper,.markdown-preview-view th:first-child .table-cell-wrapper,.markdown-source-view.mod-cm6 td:first-child .table-cell-wrapper,.markdown-source-view.mod-cm6 th:first-child .table-cell-wrapper{padding-left:0}.markdown-preview-view td:last-child,.markdown-preview-view th:last-child,.markdown-source-view.mod-cm6 td:last-child,.markdown-source-view.mod-cm6 th:last-child{padding-right:var(--table-edge-cell-padding-last)}.markdown-preview-view td:last-child .table-cell-wrapper,.markdown-preview-view th:last-child .table-cell-wrapper,.markdown-source-view.mod-cm6 td:last-child .table-cell-wrapper,.markdown-source-view.mod-cm6 th:last-child .table-cell-wrapper{padding-right:0}.cm-embed-block.cm-table-widget.markdown-rendered{margin-top:-8px!important;padding:var(--table-drag-padding)}.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle{top:0;left:0!important}.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle{top:0!important;left:0}.markdown-preview-view th,.markdown-source-view.mod-cm6 .dataview.table-view-table thead.table-view-thead tr th,.table-view-table>thead>tr>th{padding:var(--table-cell-padding)}.markdown-preview-view th:first-child,.markdown-source-view.mod-cm6 .dataview.table-view-table thead.table-view-thead tr th:first-child,.table-view-table>thead>tr>th:first-child{padding-left:var(--table-edge-cell-padding-first)}.markdown-preview-view th:last-child,.markdown-source-view.mod-cm6 .dataview.table-view-table thead.table-view-thead tr th:last-child,.table-view-table>thead>tr>th:last-child{padding-right:var(--table-edge-cell-padding-last)}.is-live-preview .el-table{width:100%;max-width:100%}.cm-hmd-table-sep-dummy,.cm-s-obsidian .HyperMD-table-row span.cm-hmd-table-sep{color:var(--text-faint);font-weight:400}body.minimal-unstyled-tags{--tag-background:transparent;--tag-background-hover:transparent;--tag-border-width:0px;--tag-padding-x:0;--tag-padding-y:0;--tag-size:inherit;--tag-color-hover:var(--text-accent-hover)}body.minimal-unstyled-tags.is-mobile.theme-dark{--tag-background:transparent}body:not(.minimal-unstyled-tags){--tag-size:0.8em;--tag-padding-y:0.2em;--tag-background:transparent;--tag-background-hover:transparent;--tag-color:var(--text-muted);--tag-border-width:1px;--tag-border-color:var(--background-modifier-border);--tag-border-color-hover:var(--background-modifier-border-hover);--tag-color-hover:var(--text-normal)}body.is-mobile.theme-dark{--tag-background:transparent}h1,h2,h3,h4{letter-spacing:-.02em}body,button,input{font-family:var(--font-interface)}.cm-s-obsidian span.cm-error{color:var(--color-red)}.markdown-preview-view,.popover,.workspace-leaf-content[data-type=markdown]{font-family:var(--font-text)}.markdown-preview-view,.view-content>.cm-s-obsidian,.view-content>.markdown-source-view.mod-cm6.is-live-preview>.cm-scroller,body{font-size:var(--font-adaptive-normal);font-weight:var(--normal-weight)}.view-content>.cm-s-obsidian,.view-content>.markdown-source-view,.view-content>.markdown-source-view.mod-cm6 .cm-scroller{font-family:var(--font-editor)}.cm-formatting:not(.cm-formatting-code-block):not(.cm-formatting-hashtag){color:var(--text-formatting)}.hide-markdown .is-live-preview .cm-formatting.cm-formatting-code.cm-inline-code,.hide-markdown .is-live-preview .cm-formatting.cm-formatting-em,.hide-markdown .is-live-preview .cm-formatting.cm-formatting-highlight,.hide-markdown .is-live-preview .cm-formatting.cm-formatting-link,.hide-markdown .is-live-preview .cm-formatting.cm-formatting-strikethrough,.hide-markdown .is-live-preview .cm-formatting.cm-formatting-strong{display:none}.hide-markdown .is-live-preview .cm-formatting-quote{opacity:0}.hide-markdown .is-live-preview .cm-formatting-link,.hide-markdown .is-live-preview .cm-formatting:has(+.cm-header),.hide-markdown .is-live-preview .cm-hmd-internal-link.cm-link-has-alias,.hide-markdown .is-live-preview .cm-link-alias-pipe{display:none}.active-line-on .cm-line.cm-active,.active-line-on .markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote.cm-active{background-color:var(--active-line-bg);box-shadow:-25vw 0 var(--active-line-bg),25vw 0 var(--active-line-bg)}body{--content-margin:auto;--content-margin-start:max( calc(50% - var(--line-width)/2), calc(50% - var(--max-width)/2) );--content-line-width:min(var(--line-width), var(--max-width))}.markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer{max-width:100%;margin-inline:auto;width:100%}.markdown-source-view.mod-cm6.is-readable-line-width .cm-content,.markdown-source-view.mod-cm6.is-readable-line-width .cm-sizer{max-width:100%;width:100%}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div,.markdown-source-view.mod-cm6.is-readable-line-width .cm-sizer>.embedded-backlinks,.markdown-source-view.mod-cm6.is-readable-line-width .cm-sizer>.inline-title,.markdown-source-view.mod-cm6.is-readable-line-width .cm-sizer>.metadata-container{max-width:var(--max-width);width:var(--line-width);margin-inline:var(--content-margin)!important}.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>:not(div){max-width:var(--content-line-width);margin-inline-start:var(--content-margin-start)!important}.is-readable-line-width{--file-margins:1rem 0 0 0}.is-mobile .markdown-preview-view{--folding-offset:0}.minimal-line-nums .workspace-leaf-content[data-type=markdown]{--file-margins:var(--size-4-8) var(--size-4-8) var(--size-4-8) 48px}.minimal-line-nums .workspace-leaf-content[data-type=markdown].is-rtl{--file-margins:var(--size-4-8) 48px var(--size-4-8) var(--size-4-8)}.minimal-line-nums .workspace-leaf-content[data-type=markdown] .is-readable-line-width{--file-margins:1rem 0 0 var(--folding-offset)}.minimal-line-nums .workspace-leaf-content[data-type=markdown] .is-readable-line-width.is-rtl{--file-margins:1rem var(--folding-offset) 0 0}.minimal-line-nums .mod-left-split .markdown-preview-view,.minimal-line-nums .mod-left-split .markdown-source-view.mod-cm6 .cm-scroller,.minimal-line-nums .mod-right-split .markdown-preview-view,.minimal-line-nums .mod-right-split .markdown-source-view.mod-cm6 .cm-scroller{--file-margins:var(--size-4-5) var(--size-4-5) var(--size-4-5) 48px}.view-content .reader-mode-content.is-readable-line-width .markdown-preview-sizer{max-width:var(--max-width);width:var(--line-width)}.markdown-preview-view .inline-embed{--max-width:100%}body{--container-table-max-width:var(--max-width);--table-max-width:none;--table-width:auto;--table-margin:inherit;--table-wrapper-width:fit-content;--container-dataview-table-width:var(--line-width);--container-img-width:var(--line-width);--container-img-max-width:var(--max-width);--img-max-width:100%;--img-width:auto;--img-margin-start:var(--content-margin-start);--img-line-width:var(--content-line-width);--container-chart-width:var(--line-width);--container-chart-max-width:var(--max-width);--chart-max-width:none;--chart-width:auto;--container-map-width:var(--line-width);--container-map-max-width:var(--max-width);--map-max-width:none;--map-width:auto;--container-iframe-width:var(--line-width);--container-iframe-max-width:var(--max-width);--iframe-max-width:none;--iframe-width:auto}body .wide{--line-width:var(--line-width-wide);--container-table-width:var(--line-width-wide);--container-dataview-table-width:var(--line-width-wide);--container-img-width:var(--line-width-wide);--container-iframe-width:var(--line-width-wide);--container-map-width:var(--line-width-wide);--container-chart-width:var(--line-width-wide)}body .max{--line-width:var(--max-width);--container-table-width:var(--max-width);--container-dataview-table-width:var(--max-width);--container-img-width:var(--max-width);--container-iframe-width:var(--max-width);--container-map-width:var(--max-width);--container-chart-width:var(--max-width)}table.dataview{--table-min-width:min(var(--line-width),var(--max-width))}.cards table.dataview{--table-width:100%;--table-min-width:none}body{--table-drag-space:16px;--container-table-margin:calc(var(--content-margin-start) - var(--table-drag-space));--container-table-width:calc(var(--line-width) + var(--table-drag-space)*2);--table-drag-padding:var(--table-drag-space)}body:not(.table-100):not(.table-max):not(.table-wide) .markdown-preview-view{--container-table-margin:var(--content-margin-start)}.maximize-tables-auto{--container-table-max-width:100%;--container-table-width:100%;--container-dataview-table-width:100%;--container-table-margin:0;--table-drag-padding:var(--table-drag-space) 0;--table-max-width:100%;--table-margin:var(--content-margin-start) auto;--table-width:auto}.maximize-tables-auto .cards{--container-table-max-width:var(--max-width)}.maximize-tables-auto .cards .block-language-dataview{--table-margin:auto}.maximize-tables{--container-table-max-width:100%;--container-table-width:100%;--container-table-margin:0;--table-drag-padding:var(--table-drag-space) 0;--table-min-width:min(var(--line-width), var(--max-width));--table-max-width:100%;--table-margin:auto;--table-width:auto;--table-edge-cell-padding-first:8px;--table-edge-cell-padding-last:8px;--table-wrapper-width:auto}.table-100,.table-max,.table-wide{--table-max-width:100%;--table-width:100%}.table-wide{--container-table-width:var(--line-width-wide);--container-dataview-table-width:var(--line-width-wide);--container-table-margin:auto;--table-edge-cell-padding-first:0px}.table-max{--container-table-width:var(--max-width);--container-table-max-width:calc(var(--max-width) + var(--table-drag-space)*2);--container-dataview-table-width:var(--max-width);--container-table-margin:auto;--table-edge-cell-padding-first:0px;--table-margin:0}.table-100{--container-table-width:100%;--container-dataview-table-width:100%;--container-table-max-width:100%;--container-table-margin:auto;--table-edge-cell-padding-first:16px;--table-edge-cell-padding-last:16px;--table-margin:0;--table-drag-padding:var(--table-drag-space) 0}.table-100 .dataview.list-view-ul{max-width:var(--max-width);width:var(--line-width);margin-inline:auto}.img-100,.img-max,.img-wide{--img-max-width:100%;--img-width:100%}.img-wide{--container-img-width:var(--line-width-wide);--img-line-width:var(--line-width-wide);--img-margin-start:calc(50% - var(--line-width-wide)/2)}.img-max{--container-img-width:var(--max-width);--img-line-width:var(--max-width);--img-margin-start:calc(50% - var(--max-width)/2)}.img-100{--container-img-width:100%;--container-img-max-width:100%;--img-line-width:100%;--img-margin-start:0}.map-100,.map-max,.map-wide{--map-max-width:100%;--map-width:100%}.map-wide{--container-map-width:var(--line-width-wide)}.map-max{--container-map-width:var(--max-width)}.map-100{--container-map-width:100%;--container-map-max-width:100%}.chart-100,.chart-max,.chart-wide{--chart-max-width:100%;--chart-width:100%}.chart-wide{--container-chart-width:var(--line-width-wide)}.chart-max{--container-chart-width:var(--max-width)}.chart-100{--container-chart-width:100%;--container-chart-max-width:100%}.iframe-100,.iframe-max,.iframe-wide{--iframe-max-width:100%;--iframe-width:100%}.iframe-wide{--container-iframe-width:var(--line-width-wide)}.iframe-max{--container-iframe-width:var(--max-width)}.iframe-100{--container-iframe-width:100%;--container-iframe-max-width:100%}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer .cm-table-widget,.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div:has(>table),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content .cm-table-widget,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(>table){width:var(--container-table-width);max-width:var(--container-table-max-width);margin-inline:var(--container-table-margin)!important}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer .table-wrapper,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content .table-wrapper{width:var(--table-wrapper-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div:has(>.block-language-dataview>table),.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div:has(>.block-language-dataviewjs),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(>.block-language-dataview>table),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(>.block-language-dataviewjs){width:var(--container-dataview-table-width);max-width:var(--container-table-max-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer table,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content table{width:var(--table-width);max-width:var(--table-max-width);margin-inline:var(--table-margin);min-width:var(--table-min-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer .block-language-dataviewjs>:is(p,h1,h2,h3,h4,h5,h6),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content .block-language-dataviewjs>:is(p,h1,h2,h3,h4,h5,h6){width:var(--line-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer .block-language-dataviewjs>.dataview-error,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content .block-language-dataviewjs>.dataview-error{margin:0 auto;width:var(--content-line-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer .dataview.dataview-error-box,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content .dataview.dataview-error-box{margin-inline:var(--table-margin)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>.image-embed,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>.image-embed{padding-top:.25rem;padding-bottom:.25rem}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>.image-embed,.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div:has(.image-embed),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>.image-embed,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(.image-embed){width:var(--container-img-width);max-width:var(--container-img-max-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>.image-embed img,.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div:has(.image-embed) img,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>.image-embed img,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(.image-embed) img{max-width:var(--img-max-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>img,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>img{max-width:var(--img-line-width);margin-inline-start:var(--img-margin-start)!important}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.block-language-chart),.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.block-language-dataviewjs canvas),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.block-language-chart),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.block-language-dataviewjs canvas){width:var(--container-chart-width);max-width:var(--container-chart-max-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.block-language-chart) canvas,.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.block-language-dataviewjs canvas) canvas,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.block-language-chart) canvas,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.block-language-dataviewjs canvas) canvas{max-width:var(--map-chart-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.block-language-leaflet),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.block-language-leaflet){width:var(--container-map-width);max-width:var(--container-map-max-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.block-language-leaflet) iframe,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.block-language-leaflet) iframe{max-width:var(--map-max-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.cm-html-embed),.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div:has(>iframe),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.cm-html-embed),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(>iframe){width:var(--container-iframe-width);max-width:var(--container-iframe-max-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.cm-html-embed) iframe,.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div:has(>iframe) iframe,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.cm-html-embed) iframe,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(>iframe) iframe{max-width:var(--iframe-max-width);width:var(--iframe-width)}.borders-none{--divider-width:0px;--tab-outline-width:0px}body{--cards-min-width:180px;--cards-max-width:1fr;--cards-mobile-width:120px;--cards-image-height:400px;--cards-padding:1.2em;--cards-image-fit:contain;--cards-background:transparent;--cards-border-width:1px;--cards-aspect-ratio:auto;--cards-columns:repeat(auto-fit, minmax(var(--cards-min-width), var(--cards-max-width)))}@media (max-width:400pt){body{--cards-min-width:var(--cards-mobile-width)}}.cards.table-100 table.dataview tbody,.table-100 .cards table.dataview tbody{padding:.25rem .75rem}.cards table.dataview{--table-width:100%;--table-edge-cell-padding-first:calc(var(--cards-padding)/2);--table-edge-cell-padding-last:calc(var(--cards-padding)/2);--table-cell-padding:calc(var(--cards-padding)/3) calc(var(--cards-padding)/2);line-height:1.3}.cards table.dataview tbody{clear:both;padding:.5rem 0;display:grid;grid-template-columns:var(--cards-columns);grid-column-gap:0.75rem;grid-row-gap:0.75rem}.cards table.dataview>tbody>tr{background-color:var(--cards-background);border:var(--cards-border-width) solid var(--background-modifier-border);display:flex;flex-direction:column;margin:0;padding:0 0 calc(var(--cards-padding)/3) 0;border-radius:6px;overflow:hidden;transition:box-shadow .15s linear;max-width:var(--cards-max-width);height:auto}.cards table.dataview>tbody>tr:hover{border:var(--cards-border-width) solid var(--background-modifier-border-hover);box-shadow:0 4px 6px 0 rgba(0,0,0,.05),0 1px 3px 1px rgba(0,0,0,.025);transition:box-shadow .15s linear}.cards table.dataview tbody>tr>td:first-child{font-weight:var(--bold-weight);border:none}.cards table.dataview tbody>tr>td:first-child a{display:block}.cards table.dataview tbody>tr>td:last-child{border:none}.cards table.dataview tbody>tr>td:not(:first-child){font-size:calc(var(--table-text-size) * .9);color:var(--text-muted)}.cards table.dataview tbody>tr>td>*{padding:calc(var(--cards-padding)/3) 0}.cards table.dataview tbody>tr>td:not(:last-child):not(:first-child){padding:4px 0;border-bottom:1px solid var(--background-modifier-border);width:calc(100% - var(--cards-padding));margin:0 calc(var(--cards-padding)/2)}.cards table.dataview tbody>tr>td a{text-decoration:none}.cards table.dataview tbody>tr>td>button{width:100%;margin:calc(var(--cards-padding)/2) 0}.cards table.dataview tbody>tr>td:last-child>button{margin-bottom:calc(var(--cards-padding)/6)}.cards table.dataview tbody>tr>td>ul{width:100%;padding:.25em 0!important;margin:0 auto!important}.cards table.dataview tbody>tr>td:has(img){padding:0!important;background-color:var(--background-secondary);display:block;margin:0;width:100%}.cards table.dataview tbody>tr>td img{aspect-ratio:var(--cards-aspect-ratio);width:100%;object-fit:var(--cards-image-fit);max-height:var(--cards-image-height);background-color:var(--background-secondary);vertical-align:bottom}.markdown-source-view.mod-cm6.cards .dataview.table-view-table>tbody>tr>td,.trim-cols .cards table.dataview tbody>tr>td{white-space:normal}.links-int-on .cards table{--link-decoration:none}.markdown-source-view.mod-cm6.cards .edit-block-button{top:-1px;right:28px;opacity:1}.cards.table-100 table.dataview thead>tr,.table-100 .cards table.dataview thead>tr{right:.75rem}.cards.table-100 table.dataview thead:before,.table-100 .cards table.dataview thead:before{margin-right:.75rem}.cards table.dataview thead{user-select:none;width:180px;display:block;float:right;position:relative;text-align:right;height:24px;padding-bottom:0}.cards table.dataview thead:hover:after{background-color:var(--background-modifier-hover)}.cards table.dataview thead:hover:before{background-color:var(--text-muted)}.cards table.dataview thead:after,.cards table.dataview thead:before{content:'';position:absolute;right:0;top:0;width:10px;height:16px;cursor:var(--cursor);text-align:right;padding:var(--size-4-1) var(--size-4-2);margin-bottom:2px;border-radius:var(--radius-s);font-weight:500;font-size:var(--font-adaptive-small)}.cards table.dataview thead:before{background-color:var(--text-faint);-webkit-mask-repeat:no-repeat;-webkit-mask-size:16px;-webkit-mask-position:center center;-webkit-mask-image:url('data:image/svg+xml;utf8,')}.cards table.dataview thead>tr{top:-1px;position:absolute;display:none;z-index:9;border:1px solid var(--background-modifier-border-hover);background-color:var(--background-secondary);box-shadow:var(--shadow-s);padding:6px;border-radius:var(--radius-m);flex-direction:column;margin:24px 0 0 0;width:100%}.cards table.dataview thead:hover>tr{display:flex;height:auto}.cards table.dataview thead>tr>th{display:block;padding:3px 30px 3px 6px!important;border-radius:var(--radius-s);width:100%;font-weight:400;color:var(--text-normal);cursor:var(--cursor);border:none;font-size:var(--font-ui-small)}.cards table.dataview thead>tr>th[sortable-style=sortable-asc],.cards table.dataview thead>tr>th[sortable-style=sortable-desc]{color:var(--text-normal)}.cards table.dataview thead>tr>th:hover{color:var(--text-normal);background-color:var(--background-modifier-hover)}.list-cards.markdown-preview-view .list-bullet,.list-cards.markdown-preview-view .list-collapse-indicator,.list-cards.markdown-preview-view.markdown-rendered.show-indentation-guide li>ul::before{display:none}.list-cards.markdown-preview-view div>ul{display:grid;gap:.75rem;grid-template-columns:var(--cards-columns);padding:0;line-height:var(--line-height-tight)}.list-cards.markdown-preview-view div>ul>li{background-color:var(--cards-background);padding:calc(var(--cards-padding)/2);border-radius:var(--radius-s);border:var(--cards-border-width) solid var(--background-modifier-border);overflow:hidden}.list-cards.markdown-preview-view div>ul .image-embed{padding:0;display:block;background-color:var(--background-secondary);border-radius:var(--image-radius)}.list-cards.markdown-preview-view div>ul .image-embed img{aspect-ratio:var(--cards-aspect-ratio);object-fit:var(--cards-image-fit);max-height:var(--cards-image-height);background-color:var(--background-secondary);vertical-align:bottom}.list-cards.markdown-preview-view div>ul>li>a{--link-decoration:none;--link-external-decoration:none;font-weight:var(--bold-weight)}.list-cards.markdown-preview-view div ul>li:hover{border-color:var(--background-modifier-border-hover)}.list-cards.markdown-preview-view div ul ul{display:block;width:100%;color:var(--text-muted);font-size:var(--font-smallest);margin:calc(var(--cards-padding)/-4) 0;padding:calc(var(--cards-padding)/2) 0}.list-cards.markdown-preview-view div ul ul ul{padding-bottom:calc(var(--cards-padding)/4)}.list-cards.markdown-preview-view div ul ul>li{display:block}.cards.cards-16-9,.list-cards.cards-16-9{--cards-aspect-ratio:16/9}.cards.cards-1-1,.list-cards.cards-1-1{--cards-aspect-ratio:1/1}.cards.cards-2-1,.list-cards.cards-2-1{--cards-aspect-ratio:2/1}.cards.cards-2-3,.list-cards.cards-2-3{--cards-aspect-ratio:2/3}.cards.cards-cols-1,.list-cards.cards-cols-1{--cards-columns:repeat(1, minmax(0, 1fr))}.cards.cards-cols-2,.list-cards.cards-cols-2{--cards-columns:repeat(2, minmax(0, 1fr))}.cards.cards-cover,.list-cards.cards-cover{--cards-image-fit:cover}.cards.cards-align-bottom table.dataview tbody>tr>td:last-child,.list-cards.cards-align-bottom table.dataview tbody>tr>td:last-child{margin-top:auto}@media (max-width:400pt){.cards table.dataview tbody>tr>td:not(:first-child){font-size:80%}}@media (min-width:400pt){.cards-cols-3{--cards-columns:repeat(3, minmax(0, 1fr))}.cards-cols-4{--cards-columns:repeat(4, minmax(0, 1fr))}.cards-cols-5{--cards-columns:repeat(5, minmax(0, 1fr))}.cards-cols-6{--cards-columns:repeat(6, minmax(0, 1fr))}.cards-cols-7{--cards-columns:repeat(7, minmax(0, 1fr))}.cards-cols-8{--cards-columns:repeat(8, minmax(0, 1fr))}}.cm-formatting.cm-formatting-task.cm-property{font-family:var(--font-monospace);font-size:90%}input[data-task="!"]:checked,input[data-task="*"]:checked,input[data-task="-"]:checked,input[data-task="<"]:checked,input[data-task=">"]:checked,input[data-task="I"]:checked,input[data-task="b"]:checked,input[data-task="c"]:checked,input[data-task="d"]:checked,input[data-task="f"]:checked,input[data-task="k"]:checked,input[data-task="l"]:checked,input[data-task="p"]:checked,input[data-task="u"]:checked,input[data-task="w"]:checked,li[data-task="!"]>input:checked,li[data-task="!"]>p>input:checked,li[data-task="*"]>input:checked,li[data-task="*"]>p>input:checked,li[data-task="-"]>input:checked,li[data-task="-"]>p>input:checked,li[data-task="<"]>input:checked,li[data-task="<"]>p>input:checked,li[data-task=">"]>input:checked,li[data-task=">"]>p>input:checked,li[data-task="I"]>input:checked,li[data-task="I"]>p>input:checked,li[data-task="b"]>input:checked,li[data-task="b"]>p>input:checked,li[data-task="c"]>input:checked,li[data-task="c"]>p>input:checked,li[data-task="d"]>input:checked,li[data-task="d"]>p>input:checked,li[data-task="f"]>input:checked,li[data-task="f"]>p>input:checked,li[data-task="k"]>input:checked,li[data-task="k"]>p>input:checked,li[data-task="l"]>input:checked,li[data-task="l"]>p>input:checked,li[data-task="p"]>input:checked,li[data-task="p"]>p>input:checked,li[data-task="u"]>input:checked,li[data-task="u"]>p>input:checked,li[data-task="w"]>input:checked,li[data-task="w"]>p>input:checked{--checkbox-marker-color:transparent;border:none;border-radius:0;background-image:none;background-color:currentColor;-webkit-mask-size:var(--checkbox-icon);-webkit-mask-position:50% 50%}input[data-task=">"]:checked,li[data-task=">"]>input:checked,li[data-task=">"]>p>input:checked{color:var(--text-faint);transform:rotate(90deg);-webkit-mask-position:50% 100%;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M10.894 2.553a1 1 0 00-1.788 0l-7 14a1 1 0 001.169 1.409l5-1.429A1 1 0 009 15.571V11a1 1 0 112 0v4.571a1 1 0 00.725.962l5 1.428a1 1 0 001.17-1.408l-7-14z' /%3E%3C/svg%3E")}input[data-task="<"]:checked,li[data-task="<"]>input:checked,li[data-task="<"]>p>input:checked{color:var(--text-faint);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z' clip-rule='evenodd' /%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M6 2a1 1 0 00-1 1v1H4a2 2 0 00-2 2v10a2 2 0 002 2h12a2 2 0 002-2V6a2 2 0 00-2-2h-1V3a1 1 0 10-2 0v1H7V3a1 1 0 00-1-1zm0 5a1 1 0 000 2h8a1 1 0 100-2H6z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task="?"]:checked,li[data-task="?"]>input:checked,li[data-task="?"]>p>input:checked{--checkbox-marker-color:transparent;background-color:var(--color-yellow);border-color:var(--color-yellow);background-position:50% 50%;background-size:200% 90%;background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 16 16"%3E%3Cpath fill="white" fill-rule="evenodd" d="M4.475 5.458c-.284 0-.514-.237-.47-.517C4.28 3.24 5.576 2 7.825 2c2.25 0 3.767 1.36 3.767 3.215c0 1.344-.665 2.288-1.79 2.973c-1.1.659-1.414 1.118-1.414 2.01v.03a.5.5 0 0 1-.5.5h-.77a.5.5 0 0 1-.5-.495l-.003-.2c-.043-1.221.477-2.001 1.645-2.712c1.03-.632 1.397-1.135 1.397-2.028c0-.979-.758-1.698-1.926-1.698c-1.009 0-1.71.529-1.938 1.402c-.066.254-.278.461-.54.461h-.777ZM7.496 14c.622 0 1.095-.474 1.095-1.09c0-.618-.473-1.092-1.095-1.092c-.606 0-1.087.474-1.087 1.091S6.89 14 7.496 14Z"%2F%3E%3C%2Fsvg%3E')}.theme-dark input[data-task="?"]:checked,.theme-dark li[data-task="?"]>input:checked,.theme-dark li[data-task="?"]>p>input:checked{background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 16 16"%3E%3Cpath fill="black" fill-opacity="0.8" fill-rule="evenodd" d="M4.475 5.458c-.284 0-.514-.237-.47-.517C4.28 3.24 5.576 2 7.825 2c2.25 0 3.767 1.36 3.767 3.215c0 1.344-.665 2.288-1.79 2.973c-1.1.659-1.414 1.118-1.414 2.01v.03a.5.5 0 0 1-.5.5h-.77a.5.5 0 0 1-.5-.495l-.003-.2c-.043-1.221.477-2.001 1.645-2.712c1.03-.632 1.397-1.135 1.397-2.028c0-.979-.758-1.698-1.926-1.698c-1.009 0-1.71.529-1.938 1.402c-.066.254-.278.461-.54.461h-.777ZM7.496 14c.622 0 1.095-.474 1.095-1.09c0-.618-.473-1.092-1.095-1.092c-.606 0-1.087.474-1.087 1.091S6.89 14 7.496 14Z"%2F%3E%3C%2Fsvg%3E')}input[data-task="/"]:checked,li[data-task="/"]>input:checked,li[data-task="/"]>p>input:checked{background-image:none;background-color:transparent;position:relative;overflow:hidden}input[data-task="/"]:checked:after,li[data-task="/"]>input:checked:after,li[data-task="/"]>p>input:checked:after{top:0;left:0;content:" ";display:block;position:absolute;background-color:var(--background-modifier-accent);width:calc(50% - .5px);height:100%;-webkit-mask-image:none}input[data-task="!"]:checked,li[data-task="!"]>input:checked,li[data-task="!"]>p>input:checked{color:var(--color-orange);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task="\""]:checked,input[data-task="“"]:checked,li[data-task="\""]>input:checked,li[data-task="\""]>p>input:checked,li[data-task="“"]>input:checked,li[data-task="“"]>p>input:checked{--checkbox-marker-color:transparent;background-position:50% 50%;background-color:var(--color-cyan);border-color:var(--color-cyan);background-size:75%;background-repeat:no-repeat;background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"%3E%3Cpath fill="white" d="M6.5 10c-.223 0-.437.034-.65.065c.069-.232.14-.468.254-.68c.114-.308.292-.575.469-.844c.148-.291.409-.488.601-.737c.201-.242.475-.403.692-.604c.213-.21.492-.315.714-.463c.232-.133.434-.28.65-.35l.539-.222l.474-.197l-.485-1.938l-.597.144c-.191.048-.424.104-.689.171c-.271.05-.56.187-.882.312c-.318.142-.686.238-1.028.466c-.344.218-.741.4-1.091.692c-.339.301-.748.562-1.05.945c-.33.358-.656.734-.909 1.162c-.293.408-.492.856-.702 1.299c-.19.443-.343.896-.468 1.336c-.237.882-.343 1.72-.384 2.437c-.034.718-.014 1.315.028 1.747c.015.204.043.402.063.539l.025.168l.026-.006A4.5 4.5 0 1 0 6.5 10zm11 0c-.223 0-.437.034-.65.065c.069-.232.14-.468.254-.68c.114-.308.292-.575.469-.844c.148-.291.409-.488.601-.737c.201-.242.475-.403.692-.604c.213-.21.492-.315.714-.463c.232-.133.434-.28.65-.35l.539-.222l.474-.197l-.485-1.938l-.597.144c-.191.048-.424.104-.689.171c-.271.05-.56.187-.882.312c-.317.143-.686.238-1.028.467c-.344.218-.741.4-1.091.692c-.339.301-.748.562-1.05.944c-.33.358-.656.734-.909 1.162c-.293.408-.492.856-.702 1.299c-.19.443-.343.896-.468 1.336c-.237.882-.343 1.72-.384 2.437c-.034.718-.014 1.315.028 1.747c.015.204.043.402.063.539l.025.168l.026-.006A4.5 4.5 0 1 0 17.5 10z"%2F%3E%3C%2Fsvg%3E')}.theme-dark input[data-task="\""]:checked,.theme-dark input[data-task="“"]:checked,.theme-dark li[data-task="\""]>input:checked,.theme-dark li[data-task="\""]>p>input:checked,.theme-dark li[data-task="“"]>input:checked,.theme-dark li[data-task="“"]>p>input:checked{background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"%3E%3Cpath fill="black" fill-opacity="0.7" d="M6.5 10c-.223 0-.437.034-.65.065c.069-.232.14-.468.254-.68c.114-.308.292-.575.469-.844c.148-.291.409-.488.601-.737c.201-.242.475-.403.692-.604c.213-.21.492-.315.714-.463c.232-.133.434-.28.65-.35l.539-.222l.474-.197l-.485-1.938l-.597.144c-.191.048-.424.104-.689.171c-.271.05-.56.187-.882.312c-.318.142-.686.238-1.028.466c-.344.218-.741.4-1.091.692c-.339.301-.748.562-1.05.945c-.33.358-.656.734-.909 1.162c-.293.408-.492.856-.702 1.299c-.19.443-.343.896-.468 1.336c-.237.882-.343 1.72-.384 2.437c-.034.718-.014 1.315.028 1.747c.015.204.043.402.063.539l.025.168l.026-.006A4.5 4.5 0 1 0 6.5 10zm11 0c-.223 0-.437.034-.65.065c.069-.232.14-.468.254-.68c.114-.308.292-.575.469-.844c.148-.291.409-.488.601-.737c.201-.242.475-.403.692-.604c.213-.21.492-.315.714-.463c.232-.133.434-.28.65-.35l.539-.222l.474-.197l-.485-1.938l-.597.144c-.191.048-.424.104-.689.171c-.271.05-.56.187-.882.312c-.317.143-.686.238-1.028.467c-.344.218-.741.4-1.091.692c-.339.301-.748.562-1.05.944c-.33.358-.656.734-.909 1.162c-.293.408-.492.856-.702 1.299c-.19.443-.343.896-.468 1.336c-.237.882-.343 1.72-.384 2.437c-.034.718-.014 1.315.028 1.747c.015.204.043.402.063.539l.025.168l.026-.006A4.5 4.5 0 1 0 17.5 10z"%2F%3E%3C%2Fsvg%3E')}input[data-task="-"]:checked,li[data-task="-"]>input:checked,li[data-task="-"]>p>input:checked{color:var(--text-faint);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M3 10a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1z' clip-rule='evenodd' /%3E%3C/svg%3E")}body:not(.tasks) .markdown-preview-view ul li[data-task="-"].task-list-item.is-checked,body:not(.tasks) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task]:is([data-task="-"]),body:not(.tasks) li[data-task="-"].task-list-item.is-checked{color:var(--text-faint);text-decoration:line-through solid var(--text-faint) 1px}input[data-task="*"]:checked,li[data-task="*"]>input:checked,li[data-task="*"]>p>input:checked{color:var(--color-yellow);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z' /%3E%3C/svg%3E")}input[data-task="l"]:checked,li[data-task="l"]>input:checked,li[data-task="l"]>p>input:checked{color:var(--color-red);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M5.05 4.05a7 7 0 119.9 9.9L10 18.9l-4.95-4.95a7 7 0 010-9.9zM10 11a2 2 0 100-4 2 2 0 000 4z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task="i"]:checked,li[data-task="i"]>input:checked,li[data-task="i"]>p>input:checked{--checkbox-marker-color:transparent;background-color:var(--color-blue);border-color:var(--color-blue);background-position:50%;background-size:100%;background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 512 512"%3E%3Cpath fill="none" stroke="white" stroke-linecap="round" stroke-linejoin="round" stroke-width="40" d="M196 220h64v172"%2F%3E%3Cpath fill="none" stroke="white" stroke-linecap="round" stroke-miterlimit="10" stroke-width="40" d="M187 396h138"%2F%3E%3Cpath fill="white" d="M256 160a32 32 0 1 1 32-32a32 32 0 0 1-32 32Z"%2F%3E%3C%2Fsvg%3E')}.theme-dark input[data-task="i"]:checked,.theme-dark li[data-task="i"]>input:checked,.theme-dark li[data-task="i"]>p>input:checked{background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 512 512"%3E%3Cpath fill="none" stroke="black" stroke-opacity="0.8" stroke-linecap="round" stroke-linejoin="round" stroke-width="40" d="M196 220h64v172"%2F%3E%3Cpath fill="none" stroke="black" stroke-opacity="0.8" stroke-linecap="round" stroke-miterlimit="10" stroke-width="40" d="M187 396h138"%2F%3E%3Cpath fill="black" fill-opacity="0.8" d="M256 160a32 32 0 1 1 32-32a32 32 0 0 1-32 32Z"%2F%3E%3C%2Fsvg%3E')}input[data-task="S"]:checked,li[data-task="S"]>input:checked,li[data-task="S"]>p>input:checked{--checkbox-marker-color:transparent;border-color:var(--color-green);background-color:var(--color-green);background-size:100%;background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 48 48"%3E%3Cpath fill="white" fill-rule="evenodd" d="M26 8a2 2 0 1 0-4 0v2a8 8 0 1 0 0 16v8a4.002 4.002 0 0 1-3.773-2.666a2 2 0 0 0-3.771 1.332A8.003 8.003 0 0 0 22 38v2a2 2 0 1 0 4 0v-2a8 8 0 1 0 0-16v-8a4.002 4.002 0 0 1 3.773 2.666a2 2 0 0 0 3.771-1.332A8.003 8.003 0 0 0 26 10V8Zm-4 6a4 4 0 0 0 0 8v-8Zm4 12v8a4 4 0 0 0 0-8Z" clip-rule="evenodd"%2F%3E%3C%2Fsvg%3E')}.theme-dark input[data-task="S"]:checked,.theme-dark li[data-task="S"]>input:checked,.theme-dark li[data-task="S"]>p>input:checked{background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 48 48"%3E%3Cpath fill-opacity="0.8" fill="black" fill-rule="evenodd" d="M26 8a2 2 0 1 0-4 0v2a8 8 0 1 0 0 16v8a4.002 4.002 0 0 1-3.773-2.666a2 2 0 0 0-3.771 1.332A8.003 8.003 0 0 0 22 38v2a2 2 0 1 0 4 0v-2a8 8 0 1 0 0-16v-8a4.002 4.002 0 0 1 3.773 2.666a2 2 0 0 0 3.771-1.332A8.003 8.003 0 0 0 26 10V8Zm-4 6a4 4 0 0 0 0 8v-8Zm4 12v8a4 4 0 0 0 0-8Z" clip-rule="evenodd"%2F%3E%3C%2Fsvg%3E')}input[data-task="I"]:checked,li[data-task="I"]>input:checked,li[data-task="I"]>p>input:checked{color:var(--color-yellow);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M11 3a1 1 0 10-2 0v1a1 1 0 102 0V3zM15.657 5.757a1 1 0 00-1.414-1.414l-.707.707a1 1 0 001.414 1.414l.707-.707zM18 10a1 1 0 01-1 1h-1a1 1 0 110-2h1a1 1 0 011 1zM5.05 6.464A1 1 0 106.464 5.05l-.707-.707a1 1 0 00-1.414 1.414l.707.707zM5 10a1 1 0 01-1 1H3a1 1 0 110-2h1a1 1 0 011 1zM8 16v-1h4v1a2 2 0 11-4 0zM12 14c.015-.34.208-.646.477-.859a4 4 0 10-4.954 0c.27.213.462.519.476.859h4.002z' /%3E%3C/svg%3E")}input[data-task="f"]:checked,li[data-task="f"]>input:checked,li[data-task="f"]>p>input:checked{color:var(--color-red);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M12.395 2.553a1 1 0 00-1.45-.385c-.345.23-.614.558-.822.88-.214.33-.403.713-.57 1.116-.334.804-.614 1.768-.84 2.734a31.365 31.365 0 00-.613 3.58 2.64 2.64 0 01-.945-1.067c-.328-.68-.398-1.534-.398-2.654A1 1 0 005.05 6.05 6.981 6.981 0 003 11a7 7 0 1011.95-4.95c-.592-.591-.98-.985-1.348-1.467-.363-.476-.724-1.063-1.207-2.03zM12.12 15.12A3 3 0 017 13s.879.5 2.5.5c0-1 .5-4 1.25-4.5.5 1 .786 1.293 1.371 1.879A2.99 2.99 0 0113 13a2.99 2.99 0 01-.879 2.121z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task="k"]:checked,li[data-task="k"]>input:checked,li[data-task="k"]>p>input:checked{color:var(--color-yellow);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M18 8a6 6 0 01-7.743 5.743L10 14l-1 1-1 1H6v2H2v-4l4.257-4.257A6 6 0 1118 8zm-6-4a1 1 0 100 2 2 2 0 012 2 1 1 0 102 0 4 4 0 00-4-4z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task="u"]:checked,li[data-task="u"]>input:checked,li[data-task="u"]>p>input:checked{color:var(--color-green);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M12 7a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0V8.414l-4.293 4.293a1 1 0 01-1.414 0L8 10.414l-4.293 4.293a1 1 0 01-1.414-1.414l5-5a1 1 0 011.414 0L11 10.586 14.586 7H12z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task="d"]:checked,li[data-task="d"]>input:checked,li[data-task="d"]>p>input:checked{color:var(--color-red);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M12 13a1 1 0 100 2h5a1 1 0 001-1V9a1 1 0 10-2 0v2.586l-4.293-4.293a1 1 0 00-1.414 0L8 9.586 3.707 5.293a1 1 0 00-1.414 1.414l5 5a1 1 0 001.414 0L11 9.414 14.586 13H12z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task="w"]:checked,li[data-task="w"]>input:checked,li[data-task="w"]>p>input:checked{color:var(--color-purple);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M6 3a1 1 0 011-1h.01a1 1 0 010 2H7a1 1 0 01-1-1zm2 3a1 1 0 00-2 0v1a2 2 0 00-2 2v1a2 2 0 00-2 2v.683a3.7 3.7 0 011.055.485 1.704 1.704 0 001.89 0 3.704 3.704 0 014.11 0 1.704 1.704 0 001.89 0 3.704 3.704 0 014.11 0 1.704 1.704 0 001.89 0A3.7 3.7 0 0118 12.683V12a2 2 0 00-2-2V9a2 2 0 00-2-2V6a1 1 0 10-2 0v1h-1V6a1 1 0 10-2 0v1H8V6zm10 8.868a3.704 3.704 0 01-4.055-.036 1.704 1.704 0 00-1.89 0 3.704 3.704 0 01-4.11 0 1.704 1.704 0 00-1.89 0A3.704 3.704 0 012 14.868V17a1 1 0 001 1h14a1 1 0 001-1v-2.132zM9 3a1 1 0 011-1h.01a1 1 0 110 2H10a1 1 0 01-1-1zm3 0a1 1 0 011-1h.01a1 1 0 110 2H13a1 1 0 01-1-1z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task="p"]:checked,li[data-task="p"]>input:checked,li[data-task="p"]>p>input:checked{color:var(--color-green);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M2 10.5a1.5 1.5 0 113 0v6a1.5 1.5 0 01-3 0v-6zM6 10.333v5.43a2 2 0 001.106 1.79l.05.025A4 4 0 008.943 18h5.416a2 2 0 001.962-1.608l1.2-6A2 2 0 0015.56 8H12V4a2 2 0 00-2-2 1 1 0 00-1 1v.667a4 4 0 01-.8 2.4L6.8 7.933a4 4 0 00-.8 2.4z' /%3E%3C/svg%3E")}input[data-task="c"]:checked,li[data-task="c"]>input:checked,li[data-task="c"]>p>input:checked{color:var(--color-orange);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M18 9.5a1.5 1.5 0 11-3 0v-6a1.5 1.5 0 013 0v6zM14 9.667v-5.43a2 2 0 00-1.105-1.79l-.05-.025A4 4 0 0011.055 2H5.64a2 2 0 00-1.962 1.608l-1.2 6A2 2 0 004.44 12H8v4a2 2 0 002 2 1 1 0 001-1v-.667a4 4 0 01.8-2.4l1.4-1.866a4 4 0 00.8-2.4z' /%3E%3C/svg%3E")}input[data-task="b"]:checked,li[data-task="b"]>input:checked,li[data-task="b"]>p>input:checked{color:var(--color-orange);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M5 4a2 2 0 012-2h6a2 2 0 012 2v14l-5-2.5L5 18V4z' /%3E%3C/svg%3E")}.colorful-active .nav-files-container{--nav-item-background-active:var(--interactive-accent);--nav-item-color-active:var(--text-on-accent)}.colorful-active #calendar-container .active,.colorful-active #calendar-container .active.today,.colorful-active #calendar-container .active:hover,.colorful-active #calendar-container .day:active{background-color:var(--interactive-accent);color:var(--text-on-accent)}.colorful-active #calendar-container .active .dot,.colorful-active #calendar-container .day:active .dot,.colorful-active #calendar-container .today.active .dot{fill:var(--text-on-accent)}body:not(.colorful-active) .horizontal-tab-nav-item.is-active,body:not(.colorful-active) .vertical-tab-nav-item.is-active{background-color:var(--background-modifier-hover);color:var(--text-normal)}body{--frame-background:hsl( var(--frame-background-h), var(--frame-background-s), var(--frame-background-l));--frame-icon-color:var(--frame-muted-color)}.theme-light{--frame-background-h:var(--accent-h);--frame-background-s:var(--accent-s);--frame-background-l:calc(var(--accent-l) + 30%);--frame-outline-color:hsla( var(--frame-background-h), var(--frame-background-s), calc(var(--frame-background-l) - 6.5%), 1 );--frame-muted-color:hsl( var(--frame-background-h), calc(var(--frame-background-s) - 10%), calc(var(--frame-background-l) - 35%))}.theme-dark{--frame-background-h:var(--accent-h);--frame-background-s:var(--accent-s);--frame-background-l:calc(var(--accent-l) - 25%);--frame-outline-color:hsla( var(--frame-background-h), calc(var(--frame-background-s) - 2%), calc(var(--frame-background-l) + 6.5%), 1 );--frame-muted-color:hsl( var(--frame-background-h), calc(var(--frame-background-s) - 10%), calc(var(--frame-background-l) + 25%))}.colorful-frame.theme-dark{--tab-outline-width:0px}.colorful-frame,.colorful-frame.is-focused{--frame-divider-color:var(--frame-outline-color);--titlebar-background:var(--frame-background);--titlebar-background-focused:var(--frame-background);--titlebar-text-color:var(--frame-muted-color);--minimal-tab-text-color:var(--frame-muted-color)}.colorful-frame .workspace-tabs:not(.mod-stacked),.colorful-frame.is-focused .workspace-tabs:not(.mod-stacked){--tab-text-color:var(--minimal-tab-text-color);--tab-text-color-focused:var(--minimal-tab-text-color)}.colorful-frame .mod-top .workspace-tab-header-container,.colorful-frame .titlebar,.colorful-frame .workspace-ribbon.mod-left:before,.colorful-frame.is-focused .mod-top .workspace-tab-header-container,.colorful-frame.is-focused .titlebar,.colorful-frame.is-focused .workspace-ribbon.mod-left:before{--tab-outline-color:var(--frame-outline-color);--tab-divider-color:var(--frame-outline-color)}.colorful-frame .mod-root .workspace-tab-header .workspace-tab-header-inner-icon,.colorful-frame.is-focused .mod-root .workspace-tab-header .workspace-tab-header-inner-icon{--icon-color:var(--minimal-tab-text-color-active);--icon-color-hover:var(--minimal-tab-text-color-active);--icon-color-active:var(--minimal-tab-text-color-active);--icon-color-focused:var(--minimal-tab-text-color-active)}.colorful-frame .mod-left-split .mod-top .workspace-tab-header,.colorful-frame .mod-right-split .mod-top .workspace-tab-header,.colorful-frame .sidebar-toggle-button,.colorful-frame .workspace-tab-header-new-tab,.colorful-frame .workspace-tab-header-tab-list,.colorful-frame .workspace-tab-header:not(.is-active),.colorful-frame.is-focused .mod-left-split .mod-top .workspace-tab-header,.colorful-frame.is-focused .mod-right-split .mod-top .workspace-tab-header,.colorful-frame.is-focused .sidebar-toggle-button,.colorful-frame.is-focused .workspace-tab-header-new-tab,.colorful-frame.is-focused .workspace-tab-header-tab-list,.colorful-frame.is-focused .workspace-tab-header:not(.is-active){--background-modifier-hover:var(--frame-outline-color);--icon-color:var(--frame-icon-color);--icon-color-hover:var(--frame-icon-color);--icon-color-active:var(--frame-icon-color);--icon-color-focused:var(--frame-icon-color);--icon-color-focus:var(--frame-icon-color)}.colorful-frame .mod-left-split .mod-top .workspace-tab-header.is-active .workspace-tab-header-inner-icon,.colorful-frame .mod-right-split .mod-top .workspace-tab-header.is-active .workspace-tab-header-inner-icon,.colorful-frame.is-focused .mod-left-split .mod-top .workspace-tab-header.is-active .workspace-tab-header-inner-icon,.colorful-frame.is-focused .mod-right-split .mod-top .workspace-tab-header.is-active .workspace-tab-header-inner-icon{color:var(--frame-icon-color)}.workspace-leaf-resize-handle{transition:none}.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-left-split>.workspace-leaf-resize-handle,.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-right-split>.workspace-leaf-resize-handle,.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-vertical>*>.workspace-leaf-resize-handle{-webkit-app-region:no-drag;border:0;z-index:15}.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-left-split>.workspace-leaf-resize-handle:after,.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-right-split>.workspace-leaf-resize-handle:after,.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-vertical>*>.workspace-leaf-resize-handle:after{content:"";height:100%;width:1px;background:linear-gradient(180deg,var(--frame-outline-color) var(--header-height),var(--divider-color) var(--header-height));top:0;position:absolute}.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-left-split>.workspace-leaf-resize-handle:hover:after,.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-right-split>.workspace-leaf-resize-handle:hover:after,.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-vertical>*>.workspace-leaf-resize-handle:hover:after{background:var(--divider-color-hover)}.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-right-split>.workspace-leaf-resize-handle:after{left:0}.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-left-split>.workspace-leaf-resize-handle:after,.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-vertical>*>.workspace-leaf-resize-handle:after{right:0}body.colorful-headings{--h1-color:var(--color-red);--h2-color:var(--color-orange);--h3-color:var(--color-yellow);--h4-color:var(--color-green);--h5-color:var(--color-blue);--h6-color:var(--color-purple)}body.colorful-headings .modal{--h1-color:var(--text-normal);--h2-color:var(--text-normal);--h3-color:var(--text-normal);--h4-color:var(--text-normal);--h5-color:var(--text-normal);--h6-color:var(--text-normal)}.is-mobile .tree-item-self .collapse-icon{width:20px}body:not(.minimal-icons-off) svg.calendar-day,body:not(.minimal-icons-off) svg.excalidraw-icon,body:not(.minimal-icons-off) svg.globe,body:not(.minimal-icons-off) svg.longform,body:not(.minimal-icons-off) svg.obsidian-leaflet-plugin-icon-map{background-color:currentColor}body:not(.minimal-icons-off) svg.excalidraw-icon path{display:none}body:not(.minimal-icons-off) svg.bar-graph{-webkit-mask-image:url('data:image/svg+xml;utf8,')}body:not(.minimal-icons-off) svg.excalidraw-icon{-webkit-mask-image:url('data:image/svg+xml;utf8,')}body:not(.minimal-icons-off) svg.longform{-webkit-mask-image:url('data:image/svg+xml;utf8,')}.workspace-ribbon.mod-left{border-left:0;transition:none}.minimal-focus-mode.is-translucent .workspace-ribbon.mod-left.is-collapsed,.minimal-focus-mode.is-translucent .workspace-ribbon.mod-left.is-collapsed:before{background-color:var(--background-primary)!important}.minimal-focus-mode .workspace-ribbon.mod-left{transition:background-color 0s linear 0s}.minimal-focus-mode .workspace-ribbon.mod-left.is-collapsed{border-color:transparent;background-color:var(--background-primary)}.minimal-focus-mode .workspace-ribbon.mod-left.is-collapsed:before{background-color:var(--background-primary);border-color:transparent}.minimal-focus-mode .workspace-ribbon.mod-left.is-collapsed .side-dock-actions,.minimal-focus-mode .workspace-ribbon.mod-left.is-collapsed .side-dock-settings{opacity:0;transition:opacity .1s ease-in-out .1s}.minimal-focus-mode .workspace-ribbon.mod-left.is-collapsed:hover .side-dock-actions,.minimal-focus-mode .workspace-ribbon.mod-left.is-collapsed:hover .side-dock-settings{opacity:1;transition:opacity .1s ease-in-out .1s}.minimal-focus-mode.borders-title .workspace-ribbon.mod-left.is-collapsed{border-right:none}.minimal-focus-mode .mod-top-right-space .sidebar-toggle-button.mod-right{opacity:0}.minimal-focus-mode:not(.minimal-status-off) .status-bar{opacity:0;transition:opacity .2s ease-in-out}.minimal-focus-mode .status-bar:hover{opacity:1;transition:opacity .2s ease-in-out}.minimal-focus-mode .mod-root .workspace-tabs{position:relative}.minimal-focus-mode .mod-root .workspace-tabs:before:hover{background-color:#00f}.minimal-focus-mode .mod-root .workspace-tab-header-container{height:0;transition:all .1s linear .6s;--tab-outline-width:0px}.minimal-focus-mode .mod-root .workspace-tab-header-container .workspace-tab-header-container-inner,.minimal-focus-mode .mod-root .workspace-tab-header-container .workspace-tab-header-new-tab,.minimal-focus-mode .mod-root .workspace-tab-header-container .workspace-tab-header-tab-list{opacity:0;transition:opacity .1s linear .6s}.minimal-focus-mode .mod-root .workspace-tab-header-container .workspace-tab-header-spacer:before{width:100%;content:" ";background-color:transparent;height:15px;position:absolute;z-index:100;top:0;left:0}.minimal-focus-mode .mod-root .workspace-tab-header-container:hover{height:var(--header-height);--tab-outline-width:1px;transition:all .1s linear 50ms}.minimal-focus-mode .mod-root .workspace-tab-header-container:hover .workspace-tab-header-container-inner,.minimal-focus-mode .mod-root .workspace-tab-header-container:hover .workspace-tab-header-new-tab,.minimal-focus-mode .mod-root .workspace-tab-header-container:hover .workspace-tab-header-tab-list{opacity:1;transition:opacity .1s linear 50ms}.minimal-focus-mode.mod-macos:not(.is-fullscreen) .workspace:not(.is-left-sidedock-open) .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner{padding-top:30px}body.show-view-header .app-container .workspace-split.mod-root>.workspace-leaf .view-header{transition:height .1s linear .1s}body.minimal-focus-mode.show-view-header .mod-root .workspace-leaf .view-header{height:0;transition:all .1s linear .5s}body.minimal-focus-mode.show-view-header .view-header::after{width:100%;content:" ";background-color:transparent;height:40px;position:absolute;z-index:-9;top:0}body.minimal-focus-mode.show-view-header .view-actions,body.minimal-focus-mode.show-view-header .view-header-nav-buttons,body.minimal-focus-mode.show-view-header .view-header-title-container{opacity:0;transition:all .1s linear .5s}body.minimal-focus-mode.show-view-header .mod-root .workspace-leaf .view-header:focus-within,body.minimal-focus-mode.show-view-header .mod-root .workspace-leaf .view-header:hover,body.minimal-focus-mode.show-view-header .mod-root .workspace-tab-header-container:hover~.workspace-tab-container .view-header{height:calc(var(--header-height) + 2px);transition:all .1s linear .1s}body.minimal-focus-mode.show-view-header .mod-root .workspace-tab-header-container:hover~.workspace-tab-container .view-header .view-actions,body.minimal-focus-mode.show-view-header .mod-root .workspace-tab-header-container:hover~.workspace-tab-container .view-header .view-header-nav-buttons,body.minimal-focus-mode.show-view-header .mod-root .workspace-tab-header-container:hover~.workspace-tab-container .view-header .view-header-title-container,body.minimal-focus-mode.show-view-header .view-header:focus-within .view-actions,body.minimal-focus-mode.show-view-header .view-header:focus-within .view-header-nav-buttons,body.minimal-focus-mode.show-view-header .view-header:focus-within .view-header-title-container,body.minimal-focus-mode.show-view-header .view-header:hover .view-actions,body.minimal-focus-mode.show-view-header .view-header:hover .view-header-nav-buttons,body.minimal-focus-mode.show-view-header .view-header:hover .view-header-title-container{opacity:1;transition:all .1s linear .1s}body.minimal-focus-mode.show-view-header .view-content{height:100%}.full-width-media{--iframe-width:100%}.full-width-media .markdown-preview-view .external-embed,.full-width-media .markdown-preview-view .image-embed img:not(.link-favicon):not(.emoji):not([width]),.full-width-media .markdown-preview-view audio,.full-width-media .markdown-preview-view img:not(.link-favicon):not(.emoji):not([width]),.full-width-media .markdown-preview-view p:has(.external-embed),.full-width-media .markdown-preview-view video,.full-width-media .markdown-source-view .external-embed,.full-width-media .markdown-source-view .image-embed img:not(.link-favicon):not(.emoji):not([width]),.full-width-media .markdown-source-view audio,.full-width-media .markdown-source-view img:not(.link-favicon):not(.emoji):not([width]),.full-width-media .markdown-source-view p:has(.external-embed),.full-width-media .markdown-source-view video{width:100%}.markdown-rendered img:not(.emoji),.markdown-rendered video,.markdown-source-view img:not(.emoji),.markdown-source-view video{border-radius:var(--image-radius)}.table-small table:not(.calendar){--table-text-size:85%}.table-tiny table:not(.calendar){--table-text-size:75%}.row-hover{--table-edge-cell-padding-first:8px;--table-edge-cell-padding-last:8px}.row-alt{--table-row-alt-background:var(--background-table-rows);--table-edge-cell-padding-first:8px;--table-edge-cell-padding-last:8px}.col-alt .markdown-rendered:not(.cards){--table-column-alt-background:var(--background-table-rows)}.table-tabular table:not(.calendar){font-variant-numeric:tabular-nums}.table-lines{--table-border-width:var(--border-width);--table-header-border-width:var(--border-width);--table-column-first-border-width:var(--border-width);--table-column-last-border-width:var(--border-width);--table-row-last-border-width:var(--border-width);--table-edge-cell-padding:8px;--table-edge-cell-padding-first:8px;--table-edge-cell-padding-last:8px;--table-add-button-border-width:1px}.table-nowrap{--table-white-space:nowrap}.table-nowrap .table-wrap,.trim-cols{--table-white-space:normal}.table-numbers{--table-numbers-padding-right:0.5em}.table-numbers table:not(.calendar){counter-reset:section}.table-numbers table:not(.calendar)>thead>tr>th:first-child{white-space:nowrap}.table-numbers table:not(.calendar)>thead>tr>th:first-child::before{content:" ";padding-right:var(--table-numbers-padding-right);display:inline-block;min-width:2em}.table-numbers table:not(.calendar)>thead>tr>th:first-child .cm-s-obsidian,.table-numbers table:not(.calendar)>thead>tr>th:first-child .table-cell-wrapper{display:inline-block;min-width:10px}.table-numbers table:not(.calendar).table-editor>tbody>tr>td:first-child .table-cell-wrapper,.table-numbers table:not(.calendar):not(.table-editor)>tbody>tr>td:first-child{white-space:nowrap}.table-numbers table:not(.calendar).table-editor>tbody>tr>td:first-child .table-cell-wrapper::before,.table-numbers table:not(.calendar):not(.table-editor)>tbody>tr>td:first-child::before{counter-increment:section;content:counter(section) " ";text-align:center;padding-right:var(--table-numbers-padding-right);display:inline-block;min-width:2em;color:var(--text-faint);font-variant-numeric:tabular-nums}.table-numbers table:not(.calendar).table-editor>tbody>tr>td:first-child .table-cell-wrapper .cm-s-obsidian,.table-numbers table:not(.calendar):not(.table-editor)>tbody>tr>td:first-child .cm-s-obsidian{display:inline-block;min-width:10px}.table-numbers .table-editor{--table-numbers-padding-right:0}.row-lines-off{--table-row-last-border-width:0}.row-lines-off .table-view-table>tbody>tr>td,.row-lines-off table:not(.calendar) tbody>tr:last-child>td,.row-lines-off table:not(.calendar) tbody>tr>td{border-bottom:none}.row-lines:not(.table-lines) .markdown-preview-view:not(.cards),.row-lines:not(.table-lines) .markdown-source-view:not(.cards){--table-row-last-border-width:0px}.row-lines:not(.table-lines) .markdown-preview-view:not(.cards) .table-view-table>tbody>tr:not(:last-child)>td,.row-lines:not(.table-lines) .markdown-preview-view:not(.cards) table:not(.calendar) tbody>tr:not(:last-child)>td,.row-lines:not(.table-lines) .markdown-source-view:not(.cards) .table-view-table>tbody>tr:not(:last-child)>td,.row-lines:not(.table-lines) .markdown-source-view:not(.cards) table:not(.calendar) tbody>tr:not(:last-child)>td{border-bottom:var(--table-border-width) solid var(--table-border-color)}.col-lines .table-view-table thead>tr>th:not(:last-child),.col-lines .table-view-table>tbody>tr>td:not(:last-child),.col-lines table:not(.calendar) tbody>tr>td:not(:last-child){border-right:var(--table-border-width) solid var(--background-modifier-border)}.row-hover{--table-row-background-hover:hsla( var(--accent-h), 50%, 80%, 20% )}.theme-dark .row-hover,.theme-dark.row-hover{--table-row-background-hover:hsla( var(--accent-h), 30%, 40%, 20% )}:root{--image-mix:normal}.image-blend-light{--image-mix:multiply}.theme-dark .markdown-preview-view img,.theme-dark .markdown-source-view img{opacity:var(--image-muted);transition:opacity .25s linear}@media print{body{--image-muted:1}}.theme-dark .markdown-preview-view img:hover,.theme-dark .markdown-source-view img:hover,.theme-dark .print-preview img{opacity:1;transition:opacity .25s linear}.theme-light img{mix-blend-mode:var(--image-mix)}div[src$="#invert"],div[src$="#multiply"]{background-color:var(--background-primary)}.theme-dark div[src$="#invert"] img,.theme-dark img[src$="#invert"],.theme-dark span[src$="#invert"] img{filter:invert(1) hue-rotate(180deg);mix-blend-mode:screen}.theme-dark div[src$="#multiply"] img,.theme-dark img[src$="#multiply"],.theme-dark span[src$="#multiply"] img{mix-blend-mode:screen}.theme-light div[src$="#multiply"] img,.theme-light img[src$="#multiply"],.theme-light span[src$="#multiply"] img{mix-blend-mode:multiply}.theme-light div[src$="#invertW"] img,.theme-light img[src$="#invertW"],.theme-light span[src$=invertW] img{filter:invert(1) hue-rotate(180deg)}img[src$="#circle"],span[src$="#circle"] img,span[src$="#round"] img{border-radius:50%;aspect-ratio:1/1}img[src$="#outline"],span[src$="#outline"] img{border:1px solid var(--ui1)}img[src$="#interface"],span[src$="#interface"] img{border:1px solid var(--ui1);box-shadow:0 .5px .9px rgba(0,0,0,.021),0 1.3px 2.5px rgba(0,0,0,.03),0 3px 6px rgba(0,0,0,.039),0 10px 20px rgba(0,0,0,.06);margin-top:10px;margin-bottom:15px;border-radius:var(--radius-m)}body{--image-grid-fit:cover;--image-grid-background:transparent;--img-grid-gap:0.5rem}@media (max-width:400pt){body{--img-grid-gap:0.25rem}}.img-grid-ratio{--image-grid-fit:contain}.img-grid .image-embed.is-loaded{line-height:0}.img-grid .image-embed.is-loaded img{background-color:var(--image-grid-background)}.img-grid .image-embed.is-loaded img:active{background-color:transparent}.img-grid .markdown-preview-section>div:has(.image-embed)>p{display:grid;margin-block-start:var(--img-grid-gap);margin-block-end:var(--img-grid-gap);grid-column-gap:var(--img-grid-gap);grid-row-gap:0;grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.img-grid .markdown-preview-section>div:has(.image-embed)>p>br{display:none}.img-grid .markdown-preview-section>div:has(.image-embed)>p>img{object-fit:var(--image-grid-fit);align-self:stretch}.img-grid .markdown-preview-section>div:has(.image-embed)>p>.internal-embed img{object-fit:var(--image-grid-fit);height:100%;align-self:center}body:not(.zoom-off) .view-content div:not(.canvas-node-content) img{max-width:100%;cursor:zoom-in}body:not(.zoom-off) .view-content img:active{cursor:zoom-out}body:not(.zoom-off) .view-content .markdown-preview-view img[referrerpolicy=no-referrer]:active{background-color:var(--background-primary);padding:10px}body:not(.zoom-off) .view-content .image-embed:not(.canvas-node-content):active,body:not(.zoom-off) .view-content .markdown-preview-view img[referrerpolicy=no-referrer]:active{--container-img-width:100%;--container-img-max-width:100%;aspect-ratio:unset;cursor:zoom-out;display:block;z-index:200;position:fixed;max-height:calc(100% + 1px);max-width:100%;height:calc(100% + 1px);width:100%;object-fit:contain;margin:-.5px auto 0!important;text-align:center;padding:0;left:0;right:0;bottom:0}body:not(.zoom-off) .view-content .image-embed:not(.canvas-node-content):active:after{background-color:var(--background-primary);opacity:.9;content:" ";height:calc(100% + 1px);width:100%;position:fixed;left:0;right:1px;z-index:0}body:not(.zoom-off) .view-content .image-embed:not(.canvas-node-content):active img{aspect-ratio:unset;top:50%;z-index:99;transform:translateY(-50%);padding:0;margin:0 auto;width:calc(100% - 20px);max-height:95vh;object-fit:contain;left:0;right:0;bottom:0;position:absolute;opacity:1}body:not(.zoom-off) .view-content .markdown-source-view.mod-cm6 .cm-content>[contenteditable=false]:has(.image-embed:not(.canvas-node-content):active){contain:unset!important}.labeled-nav.is-fullscreen:not(.colorful-frame),.labeled-nav.mod-windows{--labeled-nav-top-margin:0}.labeled-nav{--labeled-nav-top-margin:var(--header-height)}.labeled-nav.is-translucent .mod-left-split .mod-top .workspace-tab-header-container .workspace-tab-header-container-inner{background-color:transparent}.labeled-nav.is-hidden-frameless:not(.is-fullscreen) .mod-left-split .workspace-tabs.mod-top-left-space .workspace-tab-header-container{padding-left:0}.labeled-nav.mod-macos .mod-left-split .mod-top .workspace-tab-header-container:before,.labeled-nav.mod-macos.is-hidden-frameless:not(.is-fullscreen) .mod-left-split .mod-top .workspace-tab-header-container:before{-webkit-app-region:drag;position:absolute;width:calc(100% - var(--divider-width));height:calc(var(--header-height) - var(--tab-outline-width));border-bottom:0 solid var(--tab-outline-color)}.labeled-nav.mod-macos.is-hidden-frameless:not(.is-fullscreen) .workspace-ribbon.mod-left:not(.is-collapsed){border:none;--tab-outline-width:0px}.labeled-nav.colorful-frame.is-hidden-frameless:not(.is-fullscreen) .mod-left-split .mod-top .workspace-tab-header-container:before,.labeled-nav.mod-macos:not(.hider-ribbon) .mod-left-split .mod-top .workspace-tab-header-container:before,.labeled-nav:not(.is-hidden-frameless) .mod-left-split .mod-top .workspace-tab-header-container:before{border-bottom:var(--tab-outline-width) solid var(--tab-outline-color)}.labeled-nav.colorful-frame.is-hidden-frameless:not(.is-fullscreen) .workspace-ribbon.mod-left:not(.is-collapsed),.labeled-nav.mod-macos:not(.hider-ribbon) .workspace-ribbon.mod-left:not(.is-collapsed),.labeled-nav:not(.is-hidden-frameless) .workspace-ribbon.mod-left:not(.is-collapsed){--tab-outline-width:1px}.labeled-nav:not(.is-hidden-frameless) .mod-left-split .mod-top .workspace-tab-header-container:before{position:absolute;top:0;content:" "}.labeled-nav.hider-ribbon.mod-macos.is-hidden-frameless:not(.is-fullscreen):not(.is-popout-window) .mod-left-split:not(.is-sidedock-collapsed) .workspace-tabs.mod-top-left-space .workspace-tab-header-container{padding-left:0}.labeled-nav .mod-left-split .mod-top .workspace-tab-header-spacer{display:none}.labeled-nav .mod-left-split .mod-top .workspace-tab-header-inner-title{display:inline-block;font-weight:500;font-size:var(--font-adaptive-smaller)}.labeled-nav .mod-left-split .mod-top .workspace-tab-header-container{position:relative;flex-direction:column-reverse!important;height:auto;width:100%}.labeled-nav .mod-left-split .mod-top .workspace-tab-header-container .sidebar-toggle-button.mod-left{position:absolute;justify-content:flex-end;padding-right:var(--size-4-2);top:0;right:0}.labeled-nav .mod-left-split .mod-top .workspace-tab-header-container .workspace-tab-header-container-inner{padding-top:var(--size-4-2);margin-top:var(--labeled-nav-top-margin);flex-direction:column!important;background-color:var(--background-secondary)}.labeled-nav .mod-left-split .mod-top .workspace-tab-header-container .workspace-tab-container-inner{flex-grow:1;gap:0;padding:var(--size-4-2) var(--size-4-3)}.labeled-nav .mod-left-split .mod-top .workspace-tab-header{--icon-color:var(--text-muted);--tab-text-color:var(--text-muted);--tab-text-color-focused:var(--text-muted);padding:0;margin-bottom:2px;border:none;height:auto}.labeled-nav .mod-left-split .mod-top .workspace-tab-header.is-active:not(:hover){background-color:transparent}.labeled-nav .mod-left-split .mod-top .workspace-tab-header.is-active,.labeled-nav .mod-left-split .mod-top .workspace-tab-header:hover{opacity:1;--tab-text-color-active:var(--text-normal);--tab-text-color-focused:var(--text-normal);--tab-text-color-focused-active:var(--text-normal);--tab-text-color-focused-active-current:var(--text-normal);--icon-color:var(--text-normal)}.labeled-nav .mod-left-split .mod-top .workspace-tab-header .workspace-tab-header-inner{gap:var(--size-2-3);padding:var(--size-4-1) var(--size-4-2);box-shadow:none;border:none}.labeled-nav .mod-left-split .mod-top .workspace-tab-header.has-active-menu:hover,.labeled-nav .mod-left-split .mod-top .workspace-tab-header.is-active:hover{background-color:transparent}.labeled-nav .mod-left-split .mod-top .workspace-tab-header.is-active:hover .workspace-tab-header-inner,.labeled-nav .mod-left-split .mod-top .workspace-tab-header:not(.is-active):hover .workspace-tab-header-inner{background-color:var(--nav-item-background-hover)}.labeled-nav .mod-left-split .mod-top .workspace-tab-header.is-active .workspace-tab-header-inner-icon,.labeled-nav .mod-left-split .mod-top .workspace-tab-header:hover .workspace-tab-header-inner-icon{color:var(--icon-color-active)}.labeled-nav .mod-left-split .mod-top .workspace-tab-header-container{border:none;padding:0}body:not(.links-int-on){--link-decoration:none}body:not(.links-ext-on){--link-external-decoration:none}body:not(.sidebar-color) .mod-right-split{--background-secondary:var(--background-primary)}body:not(.sidebar-color) .mod-right-split :not(.mod-top) .workspace-tab-header-container{--tab-container-background:var(--background-primary)}body{--minimal-tab-text-color:var(--text-muted);--minimal-tab-text-color-active:var(--text-normal)}.workspace-tabs:not(.mod-stacked){--tab-text-color:var(--minimal-tab-text-color);--tab-text-color-focused:var(--minimal-tab-text-color);--tab-text-color-active:var(--minimal-tab-text-color-active);--tab-text-color-focused-active:var(--minimal-tab-text-color-active);--tab-text-color-focused-active-current:var(--minimal-tab-text-color-active)}.tabs-plain-square .mod-root{--tab-curve:0;--tab-radius:0;--tab-radius-active:0}.tabs-plain-square .mod-root .workspace-tab-header-container{padding-right:0}.tabs-plain-square .mod-root .workspace-tab-header-container-inner{margin-top:-1px;margin-left:-15px}.tabs-plain-square .mod-root .workspace-tab-header{padding:0}.tabs-plain-square .mod-root .workspace-tab-header-inner{padding:0 8px}.tabs-square .mod-root{--tab-curve:0;--tab-radius:0;--tab-radius-active:0}.tabs-underline .mod-root{--tab-curve:0;--tab-radius:0;--tab-radius-active:0;--tab-outline-width:0px;--tab-background-active:transparent}.tabs-underline .mod-root .workspace-tab-header-container{border-bottom:1px solid var(--divider-color)}.tabs-underline .mod-root .workspace-tab-header{border-bottom:2px solid transparent}.tabs-underline .mod-root .workspace-tab-header:hover{border-bottom:2px solid var(--ui2)}.tabs-underline .mod-root .workspace-tab-header:hover .workspace-tab-header-inner{background-color:transparent}.tabs-underline .mod-root .workspace-tab-header.is-active{border-bottom:2px solid var(--ax3)}.tabs-underline .mod-root .workspace-tab-header-inner:hover{background-color:transparent}body:not(.sidebar-tabs-underline):not(.sidebar-tabs-index):not(.sidebar-tabs-square) .workspace>.workspace-split:not(.mod-root) .workspace-tabs:not(.mod-top) .workspace-tab-header-container{--tab-outline-width:0}.tabs-modern.colorful-frame .mod-root .mod-top.workspace-tabs:not(.mod-stacked){--tab-background:var(--frame-outline-color);--tab-outline-width:1px}.tabs-modern.colorful-frame .mod-root .mod-top.workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active .workspace-tab-header-inner-close-button,.tabs-modern.colorful-frame .mod-root .mod-top.workspace-tabs:not(.mod-stacked) .workspace-tab-header:hover .workspace-tab-header-inner-close-button{color:var(--minimal-tab-text-color-active)}.tabs-modern.minimal-focus-mode .mod-root .workspace-tab-header-container:hover{--tab-outline-width:0px}.tabs-modern .mod-root{--tab-container-background:var(--background-primary)}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked){--tab-background:var(--background-modifier-hover);--tab-height:calc(var(--header-height) - 14px);--tab-outline-width:0px}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header-inner::after,.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header::after,.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header::before{display:none}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header-container-inner{align-items:center;margin:0;padding:2px var(--size-4-2) 0 var(--size-4-1)}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header-inner-title{text-overflow:ellipsis;-webkit-mask-image:none}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header{background:0 0;border-radius:5px;border:none;box-shadow:none;height:var(--tab-height);margin-left:var(--size-4-1);padding:0}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active .workspace-tab-header-inner-title{color:var(--tab-text-color-active)}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active.mod-active,.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:hover{opacity:1;background-color:var(--tab-background)}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header-new-tab{margin-right:0}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header-inner{padding:0 var(--size-4-1) 0 var(--size-4-2);border:1px solid transparent}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:not(.is-active):hover .workspace-tab-header-inner{background-color:transparent}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active:not(.mod-active) .workspace-tab-header-inner,.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:not(:hover):not(.mod-active) .workspace-tab-header-inner{border:1px solid var(--tab-outline-color)}.tabs-modern.sidebar-tabs-default .mod-right-split,.tabs-modern.sidebar-tabs-wide .mod-right-split{--tab-outline-width:0}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-spacer,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-spacer,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-spacer{display:none}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container{padding-right:0}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container-inner,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container-inner,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container-inner{padding:0;margin:0;flex-grow:1;gap:0}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header{flex-grow:1;border-radius:0;max-width:100px}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header.is-active,.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header:hover,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header.is-active,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header:hover,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header.is-active,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header:hover{background-color:transparent}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner,.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header:hover .workspace-tab-header-inner,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header:hover .workspace-tab-header-inner,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header:hover .workspace-tab-header-inner{background-color:transparent}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header .workspace-tab-header-inner,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header .workspace-tab-header-inner,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header .workspace-tab-header-inner{border-bottom:2px solid transparent;border-radius:0}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header .workspace-tab-header-inner:hover,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header .workspace-tab-header-inner:hover,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header .workspace-tab-header-inner:hover{border-color:var(--ui2)}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner{border-color:var(--ax3);padding-top:1px}.sidebar-tabs-square .mod-left-split,.sidebar-tabs-square .mod-right-split{--tab-radius:0px}.sidebar-tabs-index.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top),.sidebar-tabs-index:not(.labeled-nav) .mod-left-split,.sidebar-tabs-square.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top),.sidebar-tabs-square:not(.labeled-nav) .mod-left-split{--tab-background-active:var(--background-secondary)}.sidebar-tabs-index .mod-right-split .workspace-tab-header-container-inner,.sidebar-tabs-index.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container-inner,.sidebar-tabs-index:not(.labeled-nav) .mod-left-split .workspace-tab-header-container-inner,.sidebar-tabs-square .mod-right-split .workspace-tab-header-container-inner,.sidebar-tabs-square.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container-inner,.sidebar-tabs-square:not(.labeled-nav) .mod-left-split .workspace-tab-header-container-inner{padding:1px var(--size-4-2) 0;margin:6px 0 calc(var(--tab-outline-width) * -1);flex-grow:1}.sidebar-tabs-index .mod-right-split .workspace-tab-header,.sidebar-tabs-index.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header,.sidebar-tabs-index:not(.labeled-nav) .mod-left-split .workspace-tab-header,.sidebar-tabs-square .mod-right-split .workspace-tab-header,.sidebar-tabs-square.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header,.sidebar-tabs-square:not(.labeled-nav) .mod-left-split .workspace-tab-header{flex-grow:1;max-width:100px;border-radius:var(--tab-radius) var(--tab-radius) 0 0}.sidebar-tabs-index .mod-right-split .workspace-tab-header.is-active,.sidebar-tabs-index.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header.is-active,.sidebar-tabs-index:not(.labeled-nav) .mod-left-split .workspace-tab-header.is-active,.sidebar-tabs-square .mod-right-split .workspace-tab-header.is-active,.sidebar-tabs-square.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header.is-active,.sidebar-tabs-square:not(.labeled-nav) .mod-left-split .workspace-tab-header.is-active{box-shadow:0 0 0 var(--tab-outline-width) var(--tab-outline-color);color:var(--tab-text-color-active);background-color:var(--tab-background-active)}.sidebar-tabs-wide .mod-right-split .workspace-tab-header-container-inner,.sidebar-tabs-wide.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container-inner,.sidebar-tabs-wide:not(.labeled-nav) .mod-left-split .workspace-tab-header-container-inner{flex-grow:1;border:1px solid var(--tab-outline-color);padding:3px;margin:6px 8px 6px;border-radius:4px}.sidebar-tabs-wide .mod-right-split .workspace-tab-header,.sidebar-tabs-wide.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header,.sidebar-tabs-wide:not(.labeled-nav) .mod-left-split .workspace-tab-header{flex-grow:1}.sidebar-tabs-wide .mod-right-split .workspace-tab-header.is-active,.sidebar-tabs-wide.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header.is-active,.sidebar-tabs-wide:not(.labeled-nav) .mod-left-split .workspace-tab-header.is-active{border-color:transparent}.sidebar-tabs-wide .mod-right-split .workspace-tab-header-container,.sidebar-tabs-wide.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container,.sidebar-tabs-wide:not(.labeled-nav) .mod-left-split .workspace-tab-header-container{padding-right:0}.sidebar-tabs-wide .mod-right-split .workspace-tab-header-spacer,.sidebar-tabs-wide.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-spacer,.sidebar-tabs-wide:not(.labeled-nav) .mod-left-split .workspace-tab-header-spacer{display:none}.full-file-names{--nav-item-white-space:normal}body:not(.full-file-names){--nav-item-white-space:nowrap}body:not(.full-file-names) .tree-item-self{white-space:nowrap}body:not(.full-file-names) .tree-item-inner{text-overflow:ellipsis;overflow:hidden}.theme-dark,.theme-light{--h1l:var(--ui1);--h2l:var(--ui1);--h3l:var(--ui1);--h4l:var(--ui1);--h5l:var(--ui1);--h6l:var(--ui1)}.h1-l .markdown-reading-view h1:not(.embedded-note-title),.h1-l .mod-cm6 .cm-editor .HyperMD-header-1{border-bottom:1px solid var(--h1l);padding-bottom:.4em;margin-block-end:0.6em}.h2-l .markdown-reading-view h2,.h2-l .mod-cm6 .cm-editor .HyperMD-header-2{border-bottom:1px solid var(--h2l);padding-bottom:.4em;margin-block-end:0.6em}.h3-l .markdown-reading-view h3,.h3-l .mod-cm6 .cm-editor .HyperMD-header-3{border-bottom:1px solid var(--h3l);padding-bottom:.4em;margin-block-end:0.6em}.h4-l .markdown-reading-view h4,.h4-l .mod-cm6 .cm-editor .HyperMD-header-4{border-bottom:1px solid var(--h4l);padding-bottom:.4em;margin-block-end:0.6em}.h5-l .markdown-reading-view h5,.h5-l .mod-cm6 .cm-editor .HyperMD-header-5{border-bottom:1px solid var(--h5l);padding-bottom:.4em;margin-block-end:0.6em}.h6-l .markdown-reading-view h6,.h6-l .mod-cm6 .cm-editor .HyperMD-header-6{border-bottom:1px solid var(--h6l);padding-bottom:.4em;margin-block-end:0.6em}.is-tablet .workspace-drawer{padding-top:0}.is-tablet .workspace-drawer:not(.is-pinned){margin:30px 16px 0;height:calc(100vh - 48px);border-radius:15px;border:none}.is-tablet .workspace-drawer-ribbon{background-color:var(--background-primary);border-right:1px solid var(--background-modifier-border)}.is-tablet .workspace-drawer-header,.is-tablet .workspace-drawer.is-pinned .workspace-drawer-header{padding-top:var(--size-4-4)}.is-mobile{--font-bold:600;--font-ui-medium:var(--font-adaptive-small);--interactive-normal:var(--background-secondary);--background-modifier-form-field:var(--background-secondary);--background-modifier-form-field-highlighted:var(--background-secondary)}.is-mobile .markdown-source-view.mod-cm6 .cm-gutters{margin-left:0}.is-mobile .workspace-drawer.mod-left.is-pinned{max-width:var(--mobile-left-sidebar-width);min-width:150pt}.is-mobile .workspace-drawer.mod-right.is-pinned{max-width:var(--mobile-right-sidebar-width);min-width:150pt}.backlink-pane>.tree-item-self,.backlink-pane>.tree-item-self:hover,.outgoing-link-pane>.tree-item-self,.outgoing-link-pane>.tree-item-self:hover{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:var(--font-adaptive-smallest);font-weight:500}body{--canvas-dot-pattern:var(--background-modifier-border-hover)}.canvas-node-label{font-size:var(--font-adaptive-small)}.canvas-edges :not(.is-themed) path.canvas-display-path{stroke:var(--background-modifier-border-focus)}.canvas-edges :not(.is-themed) polyline.canvas-path-end{stroke:var(--background-modifier-border-focus);fill:var(--background-modifier-border-focus)}.canvas-node-container{border:1.5px solid var(--background-modifier-border-focus)}.node-insert-event.mod-inside-iframe{--max-width:100%;--folding-offset:0px}.node-insert-event.mod-inside-iframe .cm-editor .cm-content{padding-top:0}.is-mobile .nav-folder.mod-root>.nav-folder-title .nav-folder-title-content{display:none}body:not(.is-mobile) .nav-folder.mod-root>.nav-folder-title .nav-folder-title-content{font-weight:500;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);font-size:var(--font-adaptive-smallest)}.nav-buttons-container{justify-content:flex-start}.nav-file-tag{padding-top:.2em;background-color:transparent;color:var(--text-faint)}.nav-file .is-active .nav-file-tag,.nav-file:hover .nav-file-tag{color:var(--text-muted)}input.prompt-input,input.prompt-input:focus,input.prompt-input:focus-visible,input.prompt-input:hover{border-color:rgba(var(--mono-rgb-100),.05)}.is-mobile .mod-publish .modal-content{display:unset;padding:10px 10px 10px;margin-bottom:120px;overflow-x:hidden}.is-mobile .mod-publish .button-container,.is-mobile .modal.mod-publish .modal-button-container{padding:10px 15px 30px;margin-left:0;left:0}.is-mobile .modal.mod-publish .modal-title{padding:10px 20px;margin:0 -10px;border-bottom:1px solid var(--background-modifier-border)}.is-mobile .publish-site-settings-container{margin-right:0;padding:0}.is-mobile .modal.mod-publish .modal-content .publish-sections-container{margin-right:0;padding-right:0}@media (max-width:400pt){.is-mobile .publish-changes-info,.is-mobile .publish-section-header{flex-wrap:wrap;border:none}.is-mobile .publish-changes-info .publish-changes-add-linked-btn{flex-basis:100%;margin-top:10px}.is-mobile .publish-section-header-text{flex-basis:100%;margin-bottom:10px;margin-left:20px;margin-top:-8px}.is-mobile .publish-section{background:var(--background-secondary);border-radius:10px;padding:12px 12px 1px}.is-mobile .publish-changes-switch-site{flex-grow:0;margin-right:10px}}.release-notes-view .cm-scroller.is-readable-line-width{width:var(--line-width);max-width:var(--max-width);margin:0 auto}.search-results-info{border-bottom:none}@media (max-width:400pt){.is-mobile .modal.mod-sync-log{width:100vw;height:100vh;max-height:calc(100vh - 32px);box-shadow:0 -32px 0 32px var(--background-primary);bottom:0;padding-bottom:10px}}.obsidian-banner.solid{border-bottom:var(--divider-width) solid var(--divider-color)}.contextual-typography .markdown-preview-view div.has-banner-icon.obsidian-banner-wrapper{overflow:visible}.theme-dark .markdown-preview-view img.emoji{opacity:1}body.theme-dark .button-default,body.theme-light .button-default{border:none;box-shadow:none;height:var(--input-height);background:var(--background-modifier-hover);color:var(--text-normal);font-size:revert;font-weight:500;transform:none;transition:all .1s linear;padding:0 20px}body.theme-dark .button-default:hover,body.theme-light .button-default:hover{border:none;background:var(--background-modifier-border-hover);box-shadow:none;transform:none;transition:all .1s linear}body.theme-dark .button-default:active,body.theme-dark .button-default:focus,body.theme-light .button-default:active,body.theme-light .button-default:focus{box-shadow:none}body .button-default.blue{background-color:var(--color-blue)!important}.button-default.red{background-color:var(--color-red)!important}.button-default.green{background-color:var(--color-green)!important}.button-default.yellow{background-color:var(--color-yellow)!important}.button-default.purple{background-color:var(--color-purple)!important}.workspace-leaf-content[data-type=calendar] .view-content{padding:5px 0 0 0}.mod-root #calendar-container{width:var(--line-width);max-width:var(--max-width);margin:0 auto;padding:0}body{--calendar-dot-active:var(--text-faint);--calendar-dot-today:var(--text-accent)}#calendar-container{padding:0 var(--size-4-4) var(--size-4-1);--color-background-day-empty:var(--background-secondary-alt);--color-background-day-active:var(--background-modifier-hover);--color-background-day-hover:var(--background-modifier-hover);--color-dot:var(--text-faint);--calendar-text-active:inherit;--color-text-title:var(--text-normal);--color-text-heading:var(--text-muted);--color-text-day:var(--text-normal);--color-text-today:var(--text-normal);--color-arrow:var(--text-faint);--color-background-day-empty:transparent}#calendar-container .table{border-collapse:separate;table-layout:fixed}#calendar-container h2{font-weight:400;font-size:var(--h2)}#calendar-container .arrow{cursor:var(--cursor);width:22px;border-radius:4px;padding:3px 7px}#calendar-container .arrow svg{width:12px;height:12px;color:var(--text-faint);opacity:.7}#calendar-container .arrow:hover{fill:var(--text-muted);color:var(--text-muted);background-color:var(--background-modifier-hover)}#calendar-container .arrow:hover svg{color:var(--text-muted);opacity:1}#calendar-container tr th{padding:2px 0 4px;font-weight:500;letter-spacing:.1em;font-size:var(--font-adaptive-smallest)}#calendar-container tr th:first-child{padding-left:0!important}#calendar-container tr td{padding:2px 0 0 0;border-radius:var(--radius-m);cursor:var(--cursor);border:1px solid transparent;transition:none}#calendar-container tr td:first-child{padding-left:0!important}#calendar-container .nav{padding:0;margin:var(--size-4-2) var(--size-4-1)}#calendar-container .dot{margin:0}#calendar-container .month,#calendar-container .title,#calendar-container .year{font-size:calc(var(--font-adaptive-small) + 2px);font-weight:400;color:var(--text-normal)}#calendar-container .today,#calendar-container .today.active{color:var(--text-accent);font-weight:600}#calendar-container .today .dot,#calendar-container .today.active .dot{fill:var(--calendar-dot-today)}#calendar-container .active .task{stroke:var(--text-faint)}#calendar-container .active{color:var(--text-normal)}#calendar-container .reset-button{text-transform:none;letter-spacing:0;font-size:var(--font-adaptive-smaller);font-weight:500;color:var(--text-muted);border-radius:4px;margin:0;padding:2px 8px}#calendar-container .reset-button:hover{color:var(--text-normal);background-color:var(--background-modifier-hover)}#calendar-container .day,#calendar-container .reset-button,#calendar-container .week-num{cursor:var(--cursor)}#calendar-container .day.adjacent-month{color:var(--text-faint);opacity:1}#calendar-container .day{padding:2px 4px 4px}#calendar-container .day,#calendar-container .week-num{font-size:calc(var(--font-adaptive-smaller) + 5%)}#calendar-container .active,#calendar-container .active.today,#calendar-container .day:hover,#calendar-container .week-num:hover{background-color:var(--color-background-day-active);color:var(--calendar-text-active)}#calendar-container .active .dot{fill:var(--calendar-dot-active)}#calendar-container .active .task{stroke:var(--text-faint)}.block-language-chart canvas,.block-language-dataviewjs canvas{margin:1em 0}.theme-dark,.theme-light{--chart-color-1:var(--color-blue);--chart-color-2:var(--color-red);--chart-color-3:var(--color-yellow);--chart-color-4:var(--color-green);--chart-color-5:var(--color-orange);--chart-color-6:var(--color-purple);--chart-color-7:var(--color-cyan);--chart-color-8:var(--color-pink)}.checklist-plugin-main .group .classic,.checklist-plugin-main .group .compact,.checklist-plugin-main .group .page,.checklist-plugin-main .group svg{cursor:var(--cursor)}.workspace .view-content .checklist-plugin-main{padding:10px 10px 15px 15px;--todoList-togglePadding--compact:2px;--todoList-listItemMargin--compact:2px}.checklist-plugin-main .title{font-weight:400;color:var(--text-muted);font-size:var(--font-adaptive-small)}.checklist-plugin-main .group svg{fill:var(--text-faint)}.checklist-plugin-main .group svg:hover{fill:var(--text-normal)}.checklist-plugin-main .group .title:hover{color:var(--text-normal)}.checklist-plugin-main .group:not(:last-child){border-bottom:1px solid var(--background-modifier-border)}.checklist-plugin-main .group{padding:0 0 2px 0}.checklist-plugin-main .group .classic:last-child,.checklist-plugin-main .group .compact:last-child{margin-bottom:10px}.checklist-plugin-main .group .classic,.checklist-plugin-main .group .compact{font-size:var(--font-adaptive-small)}.checklist-plugin-main .group .classic,.checklist-plugin-main .group .compact{background:0 0;border-radius:0;margin:1px auto;padding:0}.checklist-plugin-main .group .classic .content{padding:0}.checklist-plugin-main .group .classic:hover,.checklist-plugin-main .group .compact:hover{background:0 0}.markdown-preview-view.checklist-plugin-main ul>li:not(.task-list-item)::before{display:none}.checklist-plugin-main .group .compact>.toggle .checked{background:var(--text-accent);top:-1px;left:-1px;height:18px;width:18px}.checklist-plugin-main .compact .toggle:hover{opacity:1!important}.checklist-plugin-main .group .count{font-size:var(--font-adaptive-smaller);padding:0;background:0 0;font-weight:400;color:var(--text-faint)}.checklist-plugin-main .group .group-header:hover .count{color:var(--text-muted)}.checklist-plugin-main .group .checkbox{border:1px solid var(--background-modifier-border-hover);min-height:18px;min-width:18px;height:18px;width:18px}.checklist-plugin-main .group .checkbox:hover{border:1px solid var(--background-modifier-border-focus)}.checklist-plugin-main button:active,.checklist-plugin-main button:focus,.checklist-plugin-main button:hover{box-shadow:none!important}.checklist-plugin-main button.collapse{padding:0}body:not(.is-mobile) .checklist-plugin-main button.collapse svg{width:18px;height:18px}.is-mobile .checklist-plugin-main .group-header .title{flex-grow:1;flex-shrink:0}.is-mobile .checklist-plugin-main button{width:auto}.is-mobile .checklist-plugin-main.markdown-preview-view ul{padding-inline-start:0}.is-mobile .workspace .view-content .checklist-plugin-main{padding-bottom:50px}body #cMenuModalBar{box-shadow:0 2px 20px var(--shadow-color)}body #cMenuModalBar .cMenuCommandItem{cursor:var(--cursor)}body #cMenuModalBar button.cMenuCommandItem:hover{background-color:var(--background-modifier-hover)}.MiniSettings-statusbar-button{padding-top:0;padding-bottom:0}.dataview-inline-lists .markdown-preview-view .dataview-ul,.dataview-inline-lists .markdown-source-view .dataview-ul{--list-spacing:0}.dataview-inline-lists .markdown-preview-view .dataview-ul li:not(:last-child):after,.dataview-inline-lists .markdown-source-view .dataview-ul li:not(:last-child):after{content:", "}.dataview-inline-lists .markdown-preview-view ul.dataview-ul>li::before,.dataview-inline-lists .markdown-source-view ul.dataview-ul>li::before{display:none}.dataview-inline-lists .markdown-preview-view .dataview-ul li,.dataview-inline-lists .markdown-source-view .dataview-ul li{display:inline-block;padding-right:.25em}.markdown-rendered table.dataview{margin-block-start:0;margin-block-end:0}.markdown-preview-view .table-view-table>thead>tr>th,body .table-view-table>thead>tr>th{font-weight:400;font-size:var(--table-text-size);color:var(--text-muted);border-bottom:var(--table-border-width) solid var(--table-border-color);cursor:var(--cursor)}table.dataview ul.dataview-ul{list-style:none;padding-inline-start:0;margin-block-start:0em!important;margin-block-end:0em!important}.markdown-preview-view:not(.cards) .table-view-table>tbody>tr>td,.markdown-source-view.mod-cm6:not(.cards) .table-view-table>tbody>tr>td{max-width:var(--max-col-width)}body .dataview.small-text{color:var(--text-faint)}body:not(.row-hover) .dataview.task-list-basic-item:hover,body:not(.row-hover) .dataview.task-list-item:hover,body:not(.row-hover) .table-view-table>tbody>tr:hover{background-color:transparent!important;box-shadow:none}body.row-hover .dataview.task-list-basic-item:hover,body.row-hover .dataview.task-list-item:hover,body.row-hover .table-view-table>tbody>tr:hover{background-color:var(--table-row-background-hover)!important}body .dataview-error{background-color:transparent}.dataview.dataview-error,.markdown-source-view.mod-cm6 .cm-content .dataview.dataview-error{color:var(--text-muted)}body div.dataview-error-box{min-height:0;border:none;background-color:transparent;font-size:var(--table-text-size);border-radius:var(--radius-m);padding:15px 0;justify-content:flex-start}body div.dataview-error-box p{margin-block-start:0;margin-block-end:0;color:var(--text-faint)}.block-language-dataviewjs:has(.dataview-error-box) table.dataview{display:none}.trim-cols .markdown-preview-view .table-view-table>tbody>tr>td,.trim-cols .markdown-source-view.mod-cm6 .table-view-table>tbody>tr>td,.trim-cols .markdown-source-view.mod-cm6 .table-view-table>thead>tr>th{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}ul .dataview .task-list-basic-item:hover,ul .dataview .task-list-item:hover{background-color:transparent;box-shadow:none}body .dataview.result-group{padding-left:0}body .dataview .inline-field-standalone-value,body .dataview.inline-field-key,body .dataview.inline-field-value{font-family:var(--font-text);font-size:calc(var(--font-adaptive-normal) - 2px);background:0 0;color:var(--text-muted)}body .dataview.inline-field-key{padding:0}body .dataview .inline-field-standalone-value{padding:0}body .dataview.inline-field-key::after{margin-left:3px;content:"|";color:var(--background-modifier-border)}body .dataview.inline-field-value{padding:0 1px 0 3px}.markdown-preview-view .block-language-dataview table.calendar th{border:none;cursor:default;background-image:none}.markdown-preview-view .block-language-dataview table.calendar .day{font-size:var(--font-adaptive-small)}.database-plugin__navbar,.database-plugin__scroll-container,.database-plugin__table{width:100%}.dbfolder-table-container{--font-adaptive-normal:var(--table-text-size);--font-size-text:12px}.database-plugin__cell_size_wide .database-plugin__td{padding:.15rem}.database-plugin__table{border-spacing:0!important}.MuiAppBar-root{background-color:transparent!important}.workspace-leaf-content .view-content.dictionary-view-content{padding:0}div[data-type=dictionary-view] .contents{padding-bottom:2rem}div[data-type=dictionary-view] .results>.container{background-color:transparent;margin-top:0;max-width:none;padding:0 10px}div[data-type=dictionary-view] .error,div[data-type=dictionary-view] .errorDescription{text-align:left;font-size:var(--font-adaptive-small);padding:10px 12px 0;margin:0}div[data-type=dictionary-view] .results>.container h3{text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);font-size:var(--font-adaptive-smallest);font-weight:500;padding:5px 7px 0 2px;margin-bottom:6px}div[data-type=dictionary-view] .container .main{border-radius:0;background-color:transparent;font-size:var(--font-adaptive-smaller);line-height:1.3;color:var(--text-muted);padding:5px 0 0}div[data-type=dictionary-view] .main .definition{padding:10px;border:1px solid var(--background-modifier-border);border-radius:5px;margin:10px 0 5px;background-color:var(--background-primary)}div[data-type=dictionary-view] .main .definition:last-child{border:1px solid var(--background-modifier-border)}div[data-type=dictionary-view] .main .synonyms{padding:10px 0 0}div[data-type=dictionary-view] .main .synonyms p{margin:0}div[data-type=dictionary-view] .main .definition>blockquote{margin:0}div[data-type=dictionary-view] .main .label{color:var(--text-normal);margin-bottom:2px;font-size:var(--font-adaptive-smaller);font-weight:500}div[data-type=dictionary-view] .main .mark{color:var(--text-normal);background-color:var(--text-selection);box-shadow:none}div[data-type=dictionary-view] .main>.opener{font-size:var(--font-adaptive-small);color:var(--text-normal);padding-left:5px}body .excalidraw,body .excalidraw.theme--dark{--color-primary-light:var(--text-selection);--color-primary:var(--interactive-accent);--color-primary-darker:var(--interactive-accent-hover);--color-primary-darkest:var(--interactive-accent-hover);--ui-font:var(--font-interface);--island-bg-color:var(--background-secondary);--icon-fill-color:var(--text-normal);--button-hover:var(--background-modifier-hover);--button-gray-1:var(--background-modifier-hover);--button-gray-2:var(--background-modifier-hover);--focus-highlight-color:var(--background-modifier-border-focus);--default-bg-color:var(--background-primary);--default-border-color:var(--background-modifier-border);--input-border-color:var(--background-modifier-border);--link-color:var(--text-accent);--overlay-bg-color:rgba(255, 255, 255, 0.88);--text-primary-color:var(--text-normal)}.git-view-body .opener{text-transform:uppercase;letter-spacing:.05em;font-size:var(--font-adaptive-smallest);font-weight:500;padding:5px 7px 5px 10px;margin-bottom:6px}.git-view-body .file-view .opener{text-transform:none;letter-spacing:normal;font-size:var(--font-adaptive-smallest);font-weight:400;padding:initial;margin-bottom:0}.git-view-body .file-view .opener .collapse-icon{display:flex!important;margin-left:-7px}.git-view-body{margin-top:6px}.git-view-body .file-view{margin-left:4px}.git-view-body .file-view main:hover{color:var(--text-normal)}.git-view-body .file-view .tools .type{display:none!important}.git-view-body .file-view .tools{opacity:0;transition:opacity .1s}.git-view-body .file-view main:hover>.tools{opacity:1}.git-view-body .staged{margin-bottom:12px}.git-view-body .opener.open{color:var(--text-normal)}div[data-type=git-view] .search-input-container{margin-left:0;width:100%}.git-view-body .opener .collapse-icon{display:none!important}.git-view-body main{background-color:var(--background-primary)!important;width:initial!important}.git-view-body .file-view>main:not(.topLevel){margin-left:7px}div[data-type=git-view] .commit-msg{min-height:2.5em!important;height:2.5em!important;padding:6.5px 8px!important}div[data-type=git-view] .search-input-clear-button{bottom:5.5px}.mod-macos.hider-frameless .workspace-ribbon{border:none}.is-tablet.hider-ribbon{--ribbon-width:0px}.is-tablet.hider-ribbon .side-dock-ribbon{display:none}.hider-ribbon .workspace-ribbon{padding:0}:root{--hider-ribbon-display:none}.ribbon-bottom-left-hover:not(.is-mobile){--hider-ribbon-display:flex}.hider-vault .nav-folder.mod-root>.nav-folder-title{height:4px}.hider-ribbon .workspace-ribbon-collapse-btn{display:none}.hider-ribbon .workspace-ribbon.mod-right{pointer-events:none}.hider-ribbon .workspace-ribbon.mod-left{position:absolute;border-right:0px;margin:0;height:var(--header-height);overflow:visible;flex-basis:0;bottom:0;top:auto;display:var(--hider-ribbon-display)!important;flex-direction:row;z-index:17;opacity:0;transition:opacity .25s ease-in-out;filter:drop-shadow(2px 10px 30px rgba(0,0,0,.2));gap:0}.hider-ribbon .side-dock-actions,.hider-ribbon .side-dock-settings{flex-direction:row;display:var(--hider-ribbon-display);border-top:var(--border-width) solid var(--background-modifier-border);background:var(--background-secondary);margin:0;position:relative;gap:var(--size-2-2)}.hider-ribbon .side-dock-actions{padding-left:8px}.hider-ribbon .side-dock-settings{border-right:var(--border-width) solid var(--background-modifier-border);border-top-right-radius:var(--radius-m);padding:0 var(--size-2-2)}.hider-ribbon .workspace-ribbon.mod-left .side-dock-ribbon-action{display:var(--hider-ribbon-display);margin:7px 0 8px}.hider-ribbon .workspace-ribbon.mod-left:hover{opacity:1;transition:opacity .25s ease-in-out}.hider-ribbon .workspace-ribbon.mod-left .workspace-ribbon-collapse-btn{opacity:0}.hider-ribbon .workspace-split.mod-left-split{margin:0}.hider-ribbon .workspace-leaf-content .item-list{padding-bottom:40px}.popover.hover-editor{--folding-offset:10px}.theme-dark,.theme-light{--he-title-bar-inactive-bg:var(--background-secondary);--he-title-bar-inactive-pinned-bg:var(--background-secondary);--he-title-bar-active-pinned-bg:var(--background-secondary);--he-title-bar-active-bg:var(--background-secondary);--he-title-bar-inactive-fg:var(--text-muted);--he-title-bar-active-fg:var(--text-normal);--he-title-bar-font-size:14px}.theme-light{--popover-shadow:0px 2.7px 3.1px rgba(0, 0, 0, 0.032),0px 5.9px 8.7px rgba(0, 0, 0, 0.052),0px 10.4px 18.1px rgba(0, 0, 0, 0.071),0px 20px 40px rgba(0, 0, 0, 0.11)}.theme-dark{--popover-shadow:0px 2.7px 3.1px rgba(0, 0, 0, 0.081),0px 5.9px 8.7px rgba(0, 0, 0, 0.131),0px 10.4px 18.1px rgba(0, 0, 0, 0.18),0px 20px 40px rgba(0, 0, 0, 0.28)}.popover.hover-editor:not(.snap-to-viewport){--max-width:92%}.popover.hover-editor:not(.snap-to-viewport) .markdown-preview-view,.popover.hover-editor:not(.snap-to-viewport) .markdown-source-view .cm-content{font-size:90%}body .popover.hover-editor:not(.is-loaded){box-shadow:var(--popover-shadow)}body .popover.hover-editor:not(.is-loaded) .markdown-preview-view{padding:15px 0 0 0}body .popover.hover-editor:not(.is-loaded) .view-content{height:100%;background-color:var(--background-primary)}body .popover.hover-editor:not(.is-loaded) .view-actions{height:auto}body .popover.hover-editor:not(.is-loaded) .popover-content{border:1px solid var(--background-modifier-border-hover)}body .popover.hover-editor:not(.is-loaded) .popover-titlebar{padding:0 4px}body .popover.hover-editor:not(.is-loaded) .popover-titlebar .popover-title{padding-left:4px;letter-spacing:-.02em;font-weight:var(--title-weight)}body .popover.hover-editor:not(.is-loaded) .markdown-embed{height:auto;font-size:unset;line-height:unset}body .popover.hover-editor:not(.is-loaded) .markdown-embed .markdown-preview-view{padding:0}body .popover.hover-editor:not(.is-loaded).show-navbar .popover-titlebar{border-bottom:var(--border-width) solid var(--background-modifier-border)}body .popover.hover-editor:not(.is-loaded) .popover-action,body .popover.hover-editor:not(.is-loaded) .popover-header-icon{cursor:var(--cursor);margin:4px 0;padding:4px 3px;border-radius:var(--radius-m);color:var(--icon-color)}body .popover.hover-editor:not(.is-loaded) .popover-action.mod-pin-popover,body .popover.hover-editor:not(.is-loaded) .popover-header-icon.mod-pin-popover{padding:4px 2px}body .popover.hover-editor:not(.is-loaded) .popover-action svg,body .popover.hover-editor:not(.is-loaded) .popover-header-icon svg{opacity:var(--icon-muted)}body .popover.hover-editor:not(.is-loaded) .popover-action:hover,body .popover.hover-editor:not(.is-loaded) .popover-header-icon:hover{background-color:var(--background-modifier-hover);color:var(--icon-color-hover)}body .popover.hover-editor:not(.is-loaded) .popover-action:hover svg,body .popover.hover-editor:not(.is-loaded) .popover-header-icon:hover svg{opacity:1;transition:opacity .1s ease-in-out}body .popover.hover-editor:not(.is-loaded) .popover-action.is-active,body .popover.hover-editor:not(.is-loaded) .popover-header-icon.is-active{color:var(--icon-color)}body.minimal-dark-black.theme-dark,body.minimal-dark-tonal.theme-dark,body.minimal-light-tonal.theme-light,body.minimal-light-white.theme-light,body.theme-dark{--kanban-border:0px}body:not(.is-mobile) .kanban-plugin__grow-wrap>textarea:focus{box-shadow:none}body:not(.minimal-icons-off) .kanban-plugin svg.cross{height:14px;width:14px}body .kanban-plugin__icon>svg,body .kanban-plugin__lane-settings-button svg{width:18px;height:18px}body .kanban-plugin{--kanban-border:var(--border-width);--interactive-accent:var(--text-selection);--interactive-accent-hover:var(--background-modifier-hover);--text-on-accent:var(--text-normal);background-color:var(--background-primary)}body .kanban-plugin__markdown-preview-view{font-family:var(--font-text)}body .kanban-plugin__board>div{margin:0 auto}body .kanban-plugin__checkbox-label{color:var(--text-muted)}body .kanban-plugin__item-markdown ul{margin:0}body .kanban-plugin__item-content-wrapper{box-shadow:none}body .kanban-plugin__grow-wrap::after,body .kanban-plugin__grow-wrap>textarea{padding:0;border:0;border-radius:0}body .kanban-plugin__grow-wrap::after,body .kanban-plugin__grow-wrap>textarea,body .kanban-plugin__item-title p,body .kanban-plugin__markdown-preview-view{font-size:var(--font-ui-medium);line-height:1.3}body .kanban-plugin__item{background-color:var(--background-primary)}body .kanban-plugin__item-title-wrapper{align-items:center}body .kanban-plugin__lane-form-wrapper{border:1px solid var(--background-modifier-border)}body .kanban-plugin__lane-header-wrapper{border-bottom:0}body .kanban-plugin__lane-header-wrapper .kanban-plugin__grow-wrap>textarea,body .kanban-plugin__lane-input-wrapper .kanban-plugin__grow-wrap>textarea,body .kanban-plugin__lane-title p{background:0 0;color:var(--text-normal);font-size:var(--font-ui-medium);font-weight:500}body .kanban-plugin__item-input-wrapper .kanban-plugin__grow-wrap>textarea{padding:0;border-radius:0;height:auto}body .kanban-plugin__item-form .kanban-plugin__grow-wrap{background-color:var(--background-primary)}body .kanban-plugin__item-input-wrapper .kanban-plugin__grow-wrap>textarea::placeholder{color:var(--text-faint)}body .kanban-plugin__item .kanban-plugin__item-edit-archive-button,body .kanban-plugin__item button.kanban-plugin__item-edit-button,body .kanban-plugin__item-settings-actions>button,body .kanban-plugin__lane button.kanban-plugin__lane-settings-button,body .kanban-plugin__lane button.kanban-plugin__lane-settings-button.is-enabled,body .kanban-plugin__lane-action-wrapper>button{background:0 0;transition:color .1s ease-in-out}body .kanban-plugin__item .kanban-plugin__item-edit-archive-button:hover,body .kanban-plugin__item button.kanban-plugin__item-edit-button.is-enabled,body .kanban-plugin__item button.kanban-plugin__item-edit-button:hover,body .kanban-plugin__lane button.kanban-plugin__lane-settings-button.is-enabled,body .kanban-plugin__lane button.kanban-plugin__lane-settings-button:hover{color:var(--text-normal);transition:color .1s ease-in-out;background:0 0}body .kanban-plugin__new-lane-button-wrapper{position:fixed;bottom:30px}body .kanban-plugin__lane-items>.kanban-plugin__placeholder:only-child{border:1px dashed var(--background-modifier-border);height:2em}body .kanban-plugin__item-postfix-button-wrapper{align-self:flex-start}body .kanban-plugin__item button.kanban-plugin__item-postfix-button.is-enabled,body .kanban-plugin__item button.kanban-plugin__item-prefix-button.is-enabled,body .kanban-plugin__lane button.kanban-plugin__lane-settings-button.is-enabled{color:var(--text-muted)}body .kanban-plugin button{box-shadow:none;cursor:var(--cursor);height:auto}body .kanban-plugin__item button.kanban-plugin__item-postfix-button:hover,body .kanban-plugin__item button.kanban-plugin__item-prefix-button:hover,body .kanban-plugin__lane button.kanban-plugin__lane-settings-button:hover{background-color:var(--background-modifier-hover)}body .kanban-plugin__item-button-wrapper>button{color:var(--text-muted);font-weight:400;background:0 0;min-height:calc(var(--input-height) + 8px)}body .kanban-plugin__item-button-wrapper>button:hover{color:var(--text-normal);background:var(--background-modifier-hover)}body .kanban-plugin__item-button-wrapper>button:focus{box-shadow:none}body .kanban-plugin__item-button-wrapper{padding:1px 6px 5px;border-top:none}body .kanban-plugin__lane-setting-wrapper>div:last-child{border:none;margin:0}body .kanban-plugin.something-is-dragging{cursor:grabbing;cursor:-webkit-grabbing}body .kanban-plugin__item.is-dragging{box-shadow:0 5px 30px rgba(0,0,0,.15),0 0 0 2px var(--text-selection)}body .kanban-plugin__lane-items{border:var(--kanban-border) solid var(--background-modifier-border);padding:0 4px;margin:0;background-color:var(--background-secondary)}body .kanban-plugin__lane{background:0 0;padding:0;border:var(--border-width) solid transparent}body .kanban-plugin__lane.is-dragging{box-shadow:0 5px 30px rgba(0,0,0,.15);border:1px solid var(--background-modifier-border)}body .kanban-plugin__lane .kanban-plugin__item-button-wrapper{border-top-left-radius:8px;border-top-right-radius:8px;border-top:1px solid var(--background-modifier-border);border-bottom-width:0;padding:4px 4px 0 4px}body .kanban-plugin__lane.will-prepend .kanban-plugin__lane-items{border-radius:8px}body .kanban-plugin__lane.will-prepend .kanban-plugin__item-form{border-top:1px solid var(--background-modifier-border);border-radius:8px 8px 0 0;padding:4px 4px 0;border-bottom-width:0}body .kanban-plugin__lane.will-prepend .kanban-plugin__item-form+.kanban-plugin__lane-items{border-top-width:0;border-radius:0 0 8px 8px}body .kanban-plugin__lane.will-prepend .kanban-plugin__item-button-wrapper+.kanban-plugin__lane-items{border-top-width:0;border-radius:0 0 8px 8px}body .kanban-plugin__lane:not(.will-prepend) .kanban-plugin__item-button-wrapper,body .kanban-plugin__lane:not(.will-prepend) .kanban-plugin__item-form{border-top:none;border-radius:0 0 8px 8px}body .kanban-plugin__lane:not(.will-prepend) .kanban-plugin__item-button-wrapper{padding:0 4px 4px 4px;border-bottom-width:1px}body .kanban-plugin__lane:not(.will-prepend) .kanban-plugin__lane-items{border-bottom:none;border-top-width:1px;border-radius:8px 8px 0 0}body .kanban-plugin__item-form .kanban-plugin__item-input-wrapper{min-height:calc(var(--input-height) + 8px);display:flex;justify-content:center}body .kanban-plugin__item-button-wrapper,body .kanban-plugin__item-form{background-color:var(--background-secondary);border:var(--kanban-border) solid var(--background-modifier-border)}body .kanban-plugin__item-form{padding:0 4px 5px}body .kanban-plugin__markdown-preview-view ol,body .kanban-plugin__markdown-preview-view ol.contains-task-list .contains-task-list,body .kanban-plugin__markdown-preview-view ul,body .kanban-plugin__markdown-preview-view ul.contains-task-list .contains-task-list{padding-inline-start:1.8em!important}@media (max-width:400pt){.kanban-plugin__board{flex-direction:column!important}.kanban-plugin__lane{width:100%!important;margin-bottom:1rem!important}}body .cm-heading-marker{cursor:var(--cursor);padding-left:10px}.theme-light{--leaflet-buttons:var(--bg1);--leaflet-borders:rgba(0,0,0,0.1)}.theme-dark{--leaflet-buttons:var(--bg2);--leaflet-borders:rgba(255,255,255,0.1)}.leaflet-top{transition:top .1s linear}.mod-macos.minimal-focus-mode .mod-root .map-100 .markdown-preview-sizer.markdown-preview-section .el-lang-leaflet:nth-child(3) .leaflet-top{top:calc(18px + var(--ewt-traffic-light-y));transition:top .1s linear}body .leaflet-container{background-color:var(--background-secondary);font-family:var(--font-interface)}.map-100 .markdown-preview-sizer.markdown-preview-section .el-lang-leaflet:nth-child(3){margin-top:-16px}.leaflet-control-attribution{display:none}.leaflet-popup-content{margin:10px}.block-language-leaflet{border-radius:var(--radius-m);overflow:hidden;border:var(--border-width) solid var(--background-modifier-border)}.map-wide .block-language-leaflet{border-radius:var(--radius-l)}.map-max .block-language-leaflet{border-radius:var(--radius-xl)}.workspace-leaf-content[data-type=obsidian-leaflet-map-view] .block-language-leaflet{border-radius:0;border:none}.map-100 .block-language-leaflet{border-radius:0;border-left:none;border-right:none}.block-language-leaflet .leaflet-control-expandable-list .input-container .input-item>input{appearance:none}body .block-language-leaflet .leaflet-bar.disabled>a{background-color:transparent;opacity:.3}body .leaflet-touch .leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}body .leaflet-touch .leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}body .leaflet-control-layers-toggle{border-radius:4px}body .block-language-leaflet .leaflet-control-expandable,body .block-language-leaflet .leaflet-control-has-actions .control-actions.expanded,body .block-language-leaflet .leaflet-distance-control,body .leaflet-bar,body .leaflet-bar a,body .leaflet-control-layers-expanded,body .leaflet-control-layers-toggle{background-color:var(--leaflet-buttons);color:var(--text-muted);border:none;user-select:none}body .leaflet-bar a.leaflet-disabled,body .leaflet-bar a.leaflet-disabled:hover{background-color:var(--leaflet-buttons);color:var(--text-faint);opacity:.6;cursor:not-allowed}body .leaflet-control a{cursor:var(--cursor);color:var(--text-normal)}body .leaflet-bar a:hover{background-color:var(--background-modifier-hover);color:var(--text-normal);border:none}body .leaflet-touch .leaflet-control-layers{background-color:var(--leaflet-buttons)}body .leaflet-touch .leaflet-bar,body .leaflet-touch .leaflet-control-layers{border-radius:5px;box-shadow:2px 0 8px 0 rgba(0,0,0,.1);border:1px solid var(--ui1)}body .block-language-leaflet .leaflet-control-has-actions .control-actions{box-shadow:0;border:1px solid var(--ui1)}body .leaflet-control-expandable-list .leaflet-bar{box-shadow:none;border-radius:0}body .block-language-leaflet .leaflet-distance-control{padding:4px 10px;height:auto;cursor:var(--cursor)!important}body .block-language-leaflet .leaflet-marker-link-popup>.leaflet-popup-content-wrapper>*{font-size:var(--font-adaptive-small);font-family:var(--font-interface)}body .block-language-leaflet .leaflet-marker-link-popup>.leaflet-popup-content-wrapper{padding:4px 10px!important}.leaflet-marker-icon svg path{stroke:var(--background-primary);stroke-width:18px}.map-view-marker-name{font-weight:400}.workspace-leaf-content[data-type=map] .graph-controls{background-color:var(--background-primary)}body:not(.is-mobile):not(.plugin-sliding-panes-rotate-header) .workspace-split.mod-root .workspace-leaf-content[data-type=map] .view-header{position:fixed;background:0 0!important;width:100%;z-index:99}body:not(.plugin-sliding-panes-rotate-header) .workspace-leaf-content[data-type=map] .view-header-title{display:none}body:not(.is-mobile):not(.plugin-sliding-panes-rotate-header) .workspace-leaf-content[data-type=map] .view-actions{background:0 0}body:not(.is-mobile):not(.plugin-sliding-panes-rotate-header) .workspace-leaf-content[data-type=map] .view-content{height:100%}body:not(.is-mobile):not(.plugin-sliding-panes-rotate-header) .workspace-leaf-content[data-type=map] .leaflet-top.leaflet-right{top:var(--header-height)}.obsidian-metatable{--metatable-font-size:calc(var(--font-adaptive-normal) - 2px);--metatable-font-family:var(--font-interface);--metatable-background:transparent;--metatable-foreground:var(--text-faint);--metatable-key-background:transparent;--metatable-key-border-width:0;--metatable-key-border-color:transparent;--metatable-value-background:transparent;padding-bottom:.5rem}.obsidian-metatable::part(key),.obsidian-metatable::part(value){border-bottom:0 solid var(--background-modifier-border);padding:.1rem 0;text-overflow:ellipsis;overflow:hidden}.obsidian-metatable::part(key){font-weight:400;color:var(--tx3);font-size:calc(var(--font-adaptive-normal) - 2px)}.obsidian-metatable::part(value){font-size:calc(var(--font-adaptive-normal) - 2px);color:var(--tx1)}body .NLT__header-menu-header-container{font-size:85%}body .NLT__button{background:0 0;box-shadow:none;color:var(--text-muted)}body .NLT__button:active,body .NLT__button:focus,body .NLT__button:hover{background:0 0;color:var(--text-normal);box-shadow:none}.NLT__app .NLT__button{background:0 0;border:1px solid var(--background-modifier-border);box-shadow:0 .5px 1px 0 var(--btn-shadow-color);color:var(--text-muted);padding:2px 8px}.NLT__app .NLT__button:active,.NLT__app .NLT__button:focus,.NLT__app .NLT__button:hover{background:0 0;border-color:var(--background-modifier-border-hover);color:var(--text-normal);box-shadow:0 .5px 1px 0 var(--btn-shadow-color)}.NLT__td:nth-last-child(2),.NLT__th:nth-last-child(2){border-right:0}.NLT__app .NLT__td:last-child,.NLT__app .NLT__th:last-child{padding-right:0}.NLT__app .NLT__th{background-image:none!important}.NLT__app th.NLT__selectable:hover{background-color:transparent;cursor:var(--cursor)}.NLT__menu .NLT__menu-container{background-color:var(--background-secondary)}.NLT__menu .NLT__header-menu-item{font-size:var(--font-adaptive-small)}.NLT__menu .NLT__header-menu{padding:6px 4px}.NLT__menu .NLT__drag-menu{font-size:var(--font-adaptive-small);padding:6px 4px}.NLT__menu svg{color:var(--text-faint);margin-right:6px}.NLT__menu .NLT__selectable:hover,.NLT__menu .NLT__selected{background:0 0}.NLT__menu .NLT__selected>.NLT__selectable{background-color:var(--background-modifier-hover)}.NLT__menu .NLT__selectable{cursor:var(--cursor)}.NLT__menu div.NLT__selectable{min-width:110px;border-radius:var(--radius-m);padding:3px 8px 3px 4px;margin:1px 2px 1px;cursor:var(--cursor);height:auto;line-height:20px}.NLT__menu div.NLT__selectable:hover{background-color:var(--background-modifier-hover)}.NLT__menu .NLT__textarea{font-size:var(--table-text-size)}.NLT__tfoot tr:hover td{background-color:transparent}.modal .quickAddPrompt>h1,.modal .quickAddYesNoPrompt h1{margin-top:0;text-align:left!important;font-size:var(--h1);font-weight:600}.modal .quickAddYesNoPrompt p{text-align:left!important}.modal .quickAddYesNoPrompt button{font-size:var(--font-ui-small)}.modal .yesNoPromptButtonContainer{font-size:var(--font-ui-small);justify-content:flex-end}.quickAddModal .modal-content{padding:20px 2px 5px}div#quick-explorer{display:flex}div#quick-explorer span.explorable{align-items:center;color:var(--text-muted);display:flex;font-size:var(--font-adaptive-smaller);line-height:16px}div#quick-explorer span.explorable:last-of-type{font-size:var(--font-adaptive-smaller)}div#quick-explorer span.explorable.selected,div#quick-explorer span.explorable:hover{background-color:unset!important}div#quick-explorer span.explorable.selected .explorable-name,div#quick-explorer span.explorable:hover .explorable-name{color:var(--text-normal)}div#quick-explorer span.explorable.selected .explorable-separator,div#quick-explorer span.explorable:hover .explorable-separator{color:var(--text-normal)}div#quick-explorer .explorable-name{padding:0 4px;border-radius:4px}div#quick-explorer .explorable-separator::before{content:"\00a0›"!important;font-size:1.3em;font-weight:400;margin:0}body:not(.colorful-active) .qe-popup-menu .menu-item:not(.is-disabled):not(.is-label).selected,body:not(.colorful-active) .qe-popup-menu .menu-item:not(.is-disabled):not(.is-label):hover{background-color:var(--background-modifier-hover);color:var(--text-normal)}body:not(.colorful-active) .qe-popup-menu .menu-item:not(.is-disabled):not(.is-label).selected .menu-item-icon,body:not(.colorful-active) .qe-popup-menu .menu-item:not(.is-disabled):not(.is-label):hover .menu-item-icon{color:var(--text-normal)}.workspace-leaf-content[data-type=recent-files] .view-content{padding-top:10px}.mod-root .workspace-leaf-content[data-type=reminder-list] main{max-width:var(--max-width);margin:0 auto;padding:0}.modal .reminder-actions .later-select{font-size:var(--font-settings-small);vertical-align:bottom;margin-left:3px}.modal .reminder-actions .icon{line-height:1}:not(.mod-root) .workspace-leaf-content[data-type=reminder-list] main{margin:0 auto;padding:15px}:not(.mod-root) .workspace-leaf-content[data-type=reminder-list] main .group-name{font-weight:500;color:var(--text-muted);font-size:var(--font-adaptive-small);padding-bottom:.5em;border-bottom:1px solid var(--background-modifier-border)}:not(.mod-root) .workspace-leaf-content[data-type=reminder-list] main .reminder-group .reminder-list-item{line-height:1.3;font-size:var(--font-adaptive-small)}:not(.mod-root) .workspace-leaf-content[data-type=reminder-list] main .reminder-group .no-reminders{color:var(--text-faint)}:not(.mod-root) .workspace-leaf-content[data-type=reminder-list] main .reminder-group .reminder-time{font-family:var(--font-text);font-size:var(--font-adaptive-small)}:not(.mod-root) .workspace-leaf-content[data-type=reminder-list] main .reminder-group .reminder-file{color:var(--text-faint)}body .modal .dtchooser{background-color:transparent}body .modal .dtchooser .reminder-calendar .year-month{font-weight:400;font-size:var(--font-adaptive-normal);padding-bottom:10px}body .modal .dtchooser .reminder-calendar .year-month .month,body .modal .dtchooser .reminder-calendar .year-month .year{color:var(--text-normal)}body .modal .dtchooser .reminder-calendar .year-month .month-nav:first-child{background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z' clip-rule='evenodd' /%3E%3C/svg%3E")}body .modal .dtchooser .reminder-calendar .year-month .month-nav:last-child{background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd' /%3E%3C/svg%3E")}body .modal .dtchooser .reminder-calendar .year-month .month-nav{-webkit-mask-size:20px 20px;-webkit-mask-repeat:no-repeat;-webkit-mask-position:50% 50%;color:var(--text-faint);cursor:var(--cursor);border-radius:var(--radius-m);padding:0;width:30px;display:inline-block}body .modal .dtchooser .reminder-calendar .year-month .month-nav:hover{color:var(--text-muted)}body .modal .dtchooser .reminder-calendar th{padding:.5em 0;font-size:var(--font-adaptive-smallest);font-weight:500;text-transform:uppercase;letter-spacing:.1em}body .modal .dtchooser .reminder-calendar .calendar-date{transition:background-color .1s ease-in;padding:.3em 0;border-radius:var(--radius-m)}body .modal .dtchooser .reminder-calendar .calendar-date.is-selected,body .modal .dtchooser .reminder-calendar .calendar-date:hover{transition:background-color .1s ease-in;background-color:var(--background-modifier-hover)!important}body .modal .dtchooser .reminder-calendar .calendar-date.is-selected{font-weight:var(--bold-weight);color:var(--text-accent)!important}body .markdown-preview-view th,body .markdown-source-view.mod-cm6 .dataview.table-view-table thead.table-view-thead tr th,body .table-view-table>thead>tr>th{cursor:var(--cursor);background-image:none}.markdown-source-view.mod-cm6 th{background-repeat:no-repeat;background-position:right}.style-settings-container[data-level="2"]{background:var(--background-secondary);border:1px solid var(--ui1);border-radius:5px;padding:10px 20px;margin:2px 0 2px -20px}.workspace-leaf-content[data-type=style-settings] div[data-id=instructions] .setting-item-name{display:none}.workspace-leaf-content[data-type=style-settings] div[data-id=instructions] .setting-item-description{color:var(--text-normal);font-size:var(--font-adaptive-smaller);padding-bottom:.5em}.workspace-leaf-content[data-type=style-settings] .view-content{padding:var(--size-4-4) 0}.workspace-leaf-content[data-type=style-settings] .view-content>div{width:var(--line-width);max-width:var(--max-width);margin:0 auto}.workspace-leaf-content[data-type=style-settings] .style-settings-heading[data-level="0"] .setting-item-name{padding-left:17px}.workspace-leaf-content[data-type=style-settings] .setting-item{max-width:100%;margin:0 auto}.workspace-leaf-content[data-type=style-settings] .setting-item-name{position:relative}.workspace-leaf-content[data-type=style-settings] .style-settings-collapse-indicator{position:absolute;left:0}.setting-item-heading.style-settings-heading,.style-settings-container .style-settings-heading{cursor:var(--cursor)}.modal.mod-settings .setting-item .pickr button.pcr-button{box-shadow:none;border-radius:40px;height:24px;width:24px}.setting-item .pickr .pcr-button:after,.setting-item .pickr .pcr-button:before{border-radius:40px;box-shadow:none;border:none}.setting-item.setting-item-heading.style-settings-heading.is-collapsed{border-bottom:1px solid var(--background-modifier-border)}.setting-item.setting-item-heading.style-settings-heading{border:0;padding:10px 0 5px;margin-bottom:0}.setting-item .style-settings-export,.setting-item .style-settings-import{text-decoration:none;font-size:var(--font-ui-small);font-weight:500;color:var(--text-muted);margin:0;padding:2px 8px;border-radius:5px;cursor:var(--cursor)}.setting-item .style-settings-export:hover,.setting-item .style-settings-import:hover{background-color:var(--background-modifier-hover);color:var(--text-normal);cursor:var(--cursor)}.mod-root .workspace-leaf-content[data-type=style-settings] .style-settings-container .setting-item:not(.setting-item-heading){flex-direction:row;align-items:center;padding:.5em 0}.workspace-split:not(.mod-root) .workspace-leaf-content[data-type=style-settings] .setting-item-name{font-size:var(--font-adaptive-smaller)}.themed-color-wrapper>div+div{margin-top:0;margin-left:6px}.theme-light .themed-color-wrapper>.theme-light{background-color:transparent}.theme-light .themed-color-wrapper>.theme-dark{background-color:rgba(0,0,0,.8)}.theme-dark .themed-color-wrapper>.theme-dark{background-color:transparent}@media (max-width:400pt){.workspace-leaf-content[data-type=style-settings] .setting-item-name{font-size:var(--font-adaptive-small)}.workspace-leaf-content[data-type=style-settings] .setting-item-info:has(.search-input-container){width:100%;margin-right:0}}body .todoist-query-title{display:inline;font-size:var(--h4);font-variant:var(--h4-variant);letter-spacing:.02em;color:var(--h4-color);font-weight:var(--h4-weight);font-style:var(--h4-style)}body .is-live-preview .block-language-todoist{padding-left:0}ul.todoist-task-list>li.task-list-item .task-list-item-checkbox{margin:0}body .todoist-refresh-button{display:inline;float:right;background:0 0;padding:5px 6px 0;margin-right:0}body .is-live-preview .todoist-refresh-button{margin-right:30px}body .todoist-refresh-button:hover{box-shadow:none;background-color:var(--background-modifier-hover)}.todoist-refresh-button svg{width:15px;height:15px;opacity:var(--icon-muted)}ul.todoist-task-list{margin-left:-.25em}.is-live-preview ul.todoist-task-list{padding-left:0;margin-left:.5em;margin-block-start:0;margin-block-end:0}.contains-task-list.todoist-task-list .task-metadata{font-size:var(--font-adaptive-small);display:flex;color:var(--text-muted);justify-content:space-between;margin-left:.1em;margin-bottom:.25rem}.is-live-preview .contains-task-list.todoist-task-list .task-metadata{padding-left:calc(var(--checkbox-size) + .6em)}.todoist-task-list .task-date.task-overdue{color:var(--color-orange)}body .todoist-p1>input[type=checkbox]{border:1px solid var(--color-red)}body .todoist-p1>input[type=checkbox]:hover{opacity:.8}body .todoist-p2>input[type=checkbox]{border:1px solid var(--color-yellow)}body .todoist-p2>input[type=checkbox]:hover{opacity:.8}body .todoist-p3>input[type=checkbox]{border:1px solid var(--color-blue)}body .todoist-p3>input[type=checkbox]:hover{opacity:.8}body.theme-light{--color-axis-label:var(--tx1);--color-tick-label:var(--tx2);--color-dot-fill:var(--ax1);--color-line:var(--ui1)}.tracker-axis-label{font-family:var(--font-interface)}.tracker-axis{color:var(--ui2)}.tabs-manager .chat-view{--assistant-message-color:var(--background-primary);--padding-md:var(--size-4-2) var(--size-4-3);--padding-lg:var(--size-4-3) var(--size-4-3);--chat-box-color:var(--background-primary)}.tabs-manager .chat-view .ow-dialogue-timeline{padding:var(--size-4-4) var(--size-4-3) var(--size-4-8)}.tabs-manager .chat-view .ow-dialogue-timeline .ow-message-bubble .ow-content-wrapper{box-shadow:none;border-color:var(--background-modifier-border);border-radius:var(--radius-m)}.tabs-manager .chat-view .ow-dialogue-timeline .ow-message-bubble.ow-user-bubble .ow-content-wrapper{border-width:0;background-color:var(--interactive-accent)}.tabs-manager .chat-view .input-area .input-form .chat-box{border-radius:0;box-shadow:none;grid-row:1;grid-column:1/3;height:100px;border:none;padding:var(--size-4-3) var(--size-4-4) var(--size-4-2)}.tabs-manager .chat-view .input-area .input-form .chat-box:hover{height:100px}.tabs-manager .chat-view .input-area{padding:0;gap:0}.tabs-manager .chat-view .header{border-bottom:1px solid var(--background-modifier-border)}.tabs-manager .chat-view .input-form{border-top:1px solid var(--background-modifier-border)}.tabs-manager .chat-view .input-area .input-form .chat-box .info-bar span{color:var(--text-faint)}.tabs-manager .chat-view .input-area .input-form .btn-new-chat{display:none}.zoom-plugin-header{--link-color:var(--text-normal);--link-decoration:none;font-size:var(--font-ui-small);padding:0;justify-content:center;margin:var(--size-4-2) auto;max-width:var(--max-width)}.zoom-plugin-header>.zoom-plugin-title{text-decoration:none;max-width:15em;overflow:hidden}.zoom-plugin-header>.zoom-plugin-delimiter{color:var(--text-faint);padding:0 var(--size-4-1)}.theme-dark.minimal-atom-dark{--color-red-rgb:225,109,118;--color-orange-rgb:209,154,102;--color-yellow-rgb:206,193,103;--color-green-rgb:152,195,121;--color-cyan-rgb:88,182,194;--color-blue-rgb:98,175,239;--color-purple-rgb:198,120,222;--color-pink-rgb:225,109,118;--color-red:#e16d76;--color-orange:#d19a66;--color-yellow:#cec167;--color-green:#98c379;--color-cyan:#58b6c2;--color-blue:#62afef;--color-purple:#c678de;--color-pink:#e16d76}.theme-light.minimal-atom-light{--color-red-rgb:228,87,73;--color-orange-rgb:183,107,2;--color-yellow-rgb:193,131,2;--color-green-rgb:80,161,80;--color-cyan-rgb:13,151,179;--color-blue-rgb:98,175,239;--color-purple-rgb:166,38,164;--color-pink-rgb:228,87,73;--color-red:#e45749;--color-orange:#b76b02;--color-yellow:#c18302;--color-green:#50a150;--color-cyan:#0d97b3;--color-blue:#62afef;--color-purple:#a626a4;--color-pink:#e45749}.theme-light.minimal-atom-light{--base-h:106;--base-s:0%;--base-l:98%;--accent-h:231;--accent-s:76%;--accent-l:62%;--bg1:#fafafa;--bg2:#eaeaeb;--bg3:rgba(0,0,0,.1);--ui1:#dbdbdc;--ui2:#d8d8d9;--tx1:#232324;--tx2:#8e8e90;--tx3:#a0a1a8;--hl1:rgba(180,180,183,0.3);--hl2:rgba(209,154,102,0.35)}.theme-light.minimal-atom-light.minimal-light-white{--bg3:#eaeaeb}.theme-dark.minimal-atom-dark,.theme-light.minimal-atom-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-atom-light.minimal-light-contrast .titlebar,.theme-light.minimal-atom-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-atom-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-atom-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:220;--base-s:12%;--base-l:18%;--accent-h:220;--accent-s:86%;--accent-l:65%;--bg1:#282c34;--bg2:#21252c;--bg3:#3a3f4b;--divider-color:#181a1f;--tab-outline-color:#181a1f;--tx1:#d8dae1;--tx2:#898f9d;--tx3:#5d6370;--hl1:rgba(114,123,141,0.3);--hl2:rgba(209,154,102,0.3);--sp1:#fff}.theme-dark.minimal-atom-dark.minimal-dark-black{--base-d:5%;--bg3:#282c34;--divider-color:#282c34;--tab-outline-color:#282c34}.theme-light.minimal-ayu-light{--color-red-rgb:230,80,80;--color-orange-rgb:250,141,62;--color-yellow-rgb:242,174,73;--color-green-rgb:108,191,67;--color-cyan-rgb:76,191,153;--color-blue-rgb:57,158,230;--color-purple-rgb:163,122,204;--color-pink-rgb:255,115,131;--color-red:#e65050;--color-orange:#fa8d3e;--color-yellow:#f2ae49;--color-green:#6CBF43;--color-cyan:#4cbf99;--color-blue:#399ee6;--color-purple:#a37acc;--color-pink:#ff7383}.theme-dark.minimal-ayu-dark{--color-red-rgb:255,102,102;--color-orange-rgb:250,173,102;--color-yellow-rgb:255,209,55;--color-green-rgb:135,217,108;--color-cyan-rgb:149,230,203;--color-blue-rgb:115,208,255;--color-purple-rgb:223,191,255;--color-pink-rgb:242,121,131;--color-red:#ff6666;--color-orange:#ffad66;--color-yellow:#ffd137;--color-green:#87D96C;--color-cyan:#95e6cb;--color-blue:#73d0ff;--color-purple:#dfbfff;--color-pink:#f27983}.theme-light.minimal-ayu-light{--base-h:210;--base-s:17%;--base-l:98%;--accent-h:36;--accent-s:100%;--accent-l:50%;--bg1:#fff;--bg2:#f8f9fa;--bg3:rgba(209,218,224,0.5);--ui1:#E6EAED;--tx1:#5C6165;--tx2:#8A9199;--tx3:#AAAEB0;--hl1:rgba(3,91,214,0.15)}.theme-dark.minimal-ayu-dark,.theme-light.minimal-ayu-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-ayu-light.minimal-light-contrast .titlebar,.theme-light.minimal-ayu-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-ayu-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-ayu-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:222;--base-s:22%;--base-l:15%;--accent-h:35;--accent-s:100%;--accent-l:60%;--bg1:#232937;--bg2:#1E2431;--bg3:rgba(51,61,80,0.5);--ui1:#333C4A;--ui2:#333C4A;--ui3:#333C4A;--tx1:#cccac2;--tx2:#707A8C;--tx3:#495063;--hl1:rgba(64,159,255,0.25)}.theme-dark.minimal-ayu-dark.minimal-dark-black{--accent-h:40;--accent-s:75%;--accent-l:61%;--bg3:#0E1017;--tx1:#BFBDB6;--divider-color:#11151C;--tab-outline-color:#11151C}.theme-light.minimal-catppuccin-light{--color-red-rgb:230,69,83;--color-orange-rgb:254,100,12;--color-yellow-rgb:223,142,29;--color-green-rgb:64,160,43;--color-cyan-rgb:23,146,154;--color-blue-rgb:33,102,246;--color-purple-rgb:137,56,239;--color-pink-rgb:234,119,203;--color-red:#E64553;--color-orange:#FE640C;--color-yellow:#DF8E1D;--color-green:#40A02B;--color-cyan:#17929A;--color-blue:#2166F6;--color-purple:#8938EF;--color-pink:#EA77CB}.theme-dark.minimal-catppuccin-dark{--color-red-rgb:235,153,156;--color-orange-rgb:239,160,118;--color-yellow-rgb:229,200,144;--color-green-rgb:166,209,138;--color-cyan-rgb:129,200,190;--color-blue-rgb:140,170,238;--color-purple-rgb:202,158,230;--color-pink-rgb:244,185,229;--color-red:#EB999C;--color-orange:#EFA076;--color-yellow:#E5C890;--color-green:#A6D18A;--color-cyan:#81C8BE;--color-blue:#8CAAEE;--color-purple:#CA9EE6;--color-pink:#F4B9E5}.theme-light.minimal-catppuccin-light{--base-h:228;--base-s:20%;--base-l:95%;--accent-h:11;--accent-s:59%;--accent-l:67%;--bg1:#F0F1F5;--bg2:#DCE0E8;--bg3:hsla(228,11%,65%,.25);--ui1:#CCD0DA;--ui2:#BCC0CC;--ui3:#ACB0BE;--tx1:#4D4F69;--tx2:#5D5F77;--tx3:#8D8FA2;--hl1:rgba(172,176,190,.3);--hl2:rgba(223,142,29,.3)}.theme-light.minimal-catppuccin-light.minimal-light-tonal{--bg2:#DCE0E8}.theme-light.minimal-catppuccin-light.minimal-light-white{--bg3:#F0F1F5;--ui1:#DCE0E8}.theme-dark.minimal-catppuccin-dark,.theme-light.minimal-catppuccin-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-catppuccin-light.minimal-light-contrast .titlebar,.theme-light.minimal-catppuccin-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-catppuccin-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-catppuccin-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:229;--base-s:19%;--base-l:23%;--accent-h:10;--accent-s:57%;--accent-l:88%;--bg1:#303446;--bg2:#242634;--bg3:hsla(229,13%,52%,0.25);--ui1:#41455A;--ui2:#51576D;--ui3:#626880;--tx1:#C6D0F5;--tx2:#A6ADCE;--tx3:#848BA7;--sp1:#242634;--hl1:rgba(98,104,128,.5);--hl2:rgba(223,142,29,.4)}.theme-dark.minimal-catppuccin-dark.minimal-dark-black{--ui1:#303446;--hl2:rgba(223,142,29,.5)}.theme-dark.minimal-dracula-dark{--color-red-rgb:255,85,85;--color-orange-rgb:255,184,108;--color-yellow-rgb:241,250,140;--color-green-rgb:80,250,123;--color-cyan-rgb:139,233,253;--color-blue-rgb:98,114,164;--color-purple-rgb:189,147,249;--color-pink-rgb:255,121,198;--color-red:#ff5555;--color-orange:#ffb86c;--color-yellow:#f1fa8c;--color-green:#50fa7b;--color-cyan:#8be9fd;--color-blue:#6272a4;--color-purple:#bd93f9;--color-pink:#ff79c6}.theme-dark.minimal-dracula-dark,.theme-light.minimal-dracula-light.minimal-light-contrast .titlebar,.theme-light.minimal-dracula-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-dracula-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:232;--base-s:16%;--base-l:19%;--accent-h:265;--accent-s:89%;--accent-l:78%;--bg1:#282a37;--bg2:#21222c;--ui2:#44475a;--ui3:#6272a4;--tx1:#f8f8f2;--tx2:#949FBE;--tx3:#6272a4;--hl1:rgba(134, 140, 170, 0.3);--hl2:rgba(189, 147, 249, 0.35)}.theme-dark.minimal-dracula-dark.minimal-dark-black{--ui1:#282a36}.theme-dark.minimal-eink-dark,.theme-light.minimal-eink-light{--collapse-icon-color:var(--text-normal);--icon-color-active:var(--bg1);--icon-color-hover:var(--bg1);--icon-color-focused:var(--bg1);--icon-opacity:1;--indentation-guide-color:var(--tx1);--indentation-guide-color-active:var(--tx1);--indentation-guide-width-active:3px;--interactive-normal:var(--bg1);--input-shadow:0 0 0 1px var(--tx1);--link-unresolved-opacity:1;--link-unresolved-decoration-style:dashed;--link-unresolved-decoration-color:var(--tx1);--metadata-label-background-active:var(--bg1);--metadata-input-background-active:var(--bg1);--modal-border-color:var(--tx1);--modal-border-width:2px;--nav-item-color-hover:var(--bg1);--nav-item-color-active:var(--bg1);--prompt-border-color:var(--tx1);--prompt-border-width:2px;--calendar-dot-active:var(--bg1);--calendar-dot-today:var(--bg1);--calendar-text-active:var(--bg1);--tag-border-width:1.25px;--tag-background:transparent;--tag-background-hover:transparent;--tag-border-color:var(--tx1);--tag-border-color-hover:var(--tx1);--text-on-accent:var(--bg1);--text-on-accent-inverted:var(--bg1)}.theme-dark.minimal-eink-dark.tabs-modern,.theme-light.minimal-eink-light.tabs-modern{--minimal-tab-text-color-active:var(--bg1);--tab-text-color-focused-active-current:var(--bg1)}.theme-dark.minimal-eink-dark .suggestion-container,.theme-light.minimal-eink-light .suggestion-container{border-width:3px}.theme-dark.minimal-eink-dark .cm-s-obsidian span.cm-inline-code,.theme-dark.minimal-eink-dark .markdown-rendered code,.theme-light.minimal-eink-light .cm-s-obsidian span.cm-inline-code,.theme-light.minimal-eink-light .markdown-rendered code{font-weight:600}.theme-dark.minimal-eink-dark .metadata-property-icon,.theme-light.minimal-eink-light .metadata-property-icon{--icon-color-focused:var(--tx1)}.theme-dark.minimal-eink-dark .checkbox-container,.theme-light.minimal-eink-light .checkbox-container{background-color:var(--bg1);box-shadow:0 0 0 1px var(--tx1);--toggle-thumb-color:var(--tx1)}.theme-dark.minimal-eink-dark .checkbox-container.is-enabled,.theme-light.minimal-eink-light .checkbox-container.is-enabled{background-color:var(--tx1);--toggle-thumb-color:var(--bg1)}.theme-dark.minimal-eink-dark .cm-s-obsidian span.cm-formatting-highlight,.theme-dark.minimal-eink-dark .cm-s-obsidian span.cm-highlight,.theme-dark.minimal-eink-dark .community-item .suggestion-highlight,.theme-dark.minimal-eink-dark .dropdown:hover,.theme-dark.minimal-eink-dark .horizontal-tab-nav-item:hover,.theme-dark.minimal-eink-dark .markdown-rendered mark,.theme-dark.minimal-eink-dark .status-bar .plugin-sync:hover .sync-status-icon.mod-success,.theme-dark.minimal-eink-dark .status-bar .plugin-sync:hover .sync-status-icon.mod-working,.theme-dark.minimal-eink-dark .status-bar-item.mod-clickable:hover,.theme-dark.minimal-eink-dark .suggestion-item.is-selected,.theme-dark.minimal-eink-dark .text-icon-button:hover,.theme-dark.minimal-eink-dark .vertical-tab-nav-item:hover,.theme-dark.minimal-eink-dark button,.theme-dark.minimal-eink-dark select:hover,.theme-dark.minimal-eink-dark:not(.colorful-active) .horizontal-tab-nav-item.is-active,.theme-dark.minimal-eink-dark:not(.colorful-active) .vertical-tab-nav-item.is-active,.theme-light.minimal-eink-light .cm-s-obsidian span.cm-formatting-highlight,.theme-light.minimal-eink-light .cm-s-obsidian span.cm-highlight,.theme-light.minimal-eink-light .community-item .suggestion-highlight,.theme-light.minimal-eink-light .dropdown:hover,.theme-light.minimal-eink-light .horizontal-tab-nav-item:hover,.theme-light.minimal-eink-light .markdown-rendered mark,.theme-light.minimal-eink-light .status-bar .plugin-sync:hover .sync-status-icon.mod-success,.theme-light.minimal-eink-light .status-bar .plugin-sync:hover .sync-status-icon.mod-working,.theme-light.minimal-eink-light .status-bar-item.mod-clickable:hover,.theme-light.minimal-eink-light .suggestion-item.is-selected,.theme-light.minimal-eink-light .text-icon-button:hover,.theme-light.minimal-eink-light .vertical-tab-nav-item:hover,.theme-light.minimal-eink-light button,.theme-light.minimal-eink-light select:hover,.theme-light.minimal-eink-light:not(.colorful-active) .horizontal-tab-nav-item.is-active,.theme-light.minimal-eink-light:not(.colorful-active) .vertical-tab-nav-item.is-active{color:var(--bg1)}.theme-light.minimal-eink-light{--base-h:0;--base-s:0%;--base-l:100%;--accent-h:0;--accent-s:0%;--accent-l:0%;--ax3:#000;--bg1:#fff;--bg2:#fff;--bg3:#000;--ui1:#000;--ui2:#000;--ui3:#000;--tx1:#000;--tx2:#000;--tx3:#000;--hl1:#000;--hl2:#000;--sp1:#fff;--text-on-accent:#fff;--background-modifier-cover:rgba(235,235,235,1)}.theme-light.minimal-eink-light.minimal-light-white{--bg3:#fff}.theme-dark.minimal-eink-dark,.theme-light.minimal-eink-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-eink-light.minimal-light-contrast .titlebar,.theme-light.minimal-eink-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-eink-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-eink-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:0;--base-s:0%;--base-l:0%;--accent-h:0;--accent-s:0%;--accent-l:100%;--ax3:#fff;--bg1:#000;--bg2:#000;--bg3:#fff;--ui1:#fff;--ui2:#fff;--ui3:#fff;--tx1:#fff;--tx2:#fff;--tx3:#fff;--hl1:#fff;--hl2:#fff;--sp1:#000;--background-modifier-cover:rgba(20,20,20,1)}.theme-light.minimal-eink-light.minimal-light-tonal{--bg3:#bbb;--ui1:#bbb;--modal-border-color:var(--ui1);--prompt-border-color:var(--ui1)}.theme-dark.minimal-eink-dark.minimal-dark-tonal{--bg3:#444;--ui1:#444;--modal-border-color:var(--ui1);--prompt-border-color:var(--ui1)}.theme-light.minimal-everforest-light{--color-red-rgb:248,85,82;--color-orange-rgb:245,125,38;--color-yellow-rgb:223,160,0;--color-green-rgb:141,161,1;--color-cyan-rgb:53,167,124;--color-blue-rgb:56,148,196;--color-purple-rgb:223,105,186;--color-pink-rgb:223,105,186;--color-red:#f85552;--color-orange:#f57d26;--color-yellow:#dfa000;--color-green:#8da101;--color-cyan:#35a77c;--color-blue:#3795C5;--color-purple:#df69ba;--color-pink:#df69ba}.theme-dark.minimal-everforest-dark{--color-red-rgb:230,126,128;--color-orange-rgb:230,152,117;--color-yellow-rgb:219,188,127;--color-green-rgb:167,192,128;--color-cyan-rgb:131,192,146;--color-blue-rgb:127,187,179;--color-purple-rgb:223,105,186;--color-pink-rgb:223,105,186;--color-red:#e67e80;--color-orange:#e69875;--color-yellow:#dbbc7f;--color-green:#a7c080;--color-cyan:#83c092;--color-blue:#7fbbb3;--color-purple:#d699b6;--color-pink:#d699b6}.theme-light.minimal-everforest-light{--base-h:44;--base-s:87%;--base-l:94%;--accent-h:83;--accent-s:36%;--accent-l:53%;--bg1:#fdf6e3;--bg2:#efebd4;--bg3:rgba(226,222,198,.5);--ui1:#e0dcc7;--ui2:#bec5b2;--ui3:#bec5b2;--tx1:#5C6A72;--tx2:#829181;--tx3:#a6b0a0;--hl1:rgba(198,214,152,.4);--hl2:rgba(222,179,51,.3)}.theme-light.minimal-everforest-light.minimal-light-tonal{--bg2:#fdf6e3}.theme-light.minimal-everforest-light.minimal-light-white{--bg3:#f3efda;--ui1:#edead5}.theme-dark.minimal-everforest-dark,.theme-light.minimal-everforest-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-everforest-light.minimal-light-contrast .titlebar,.theme-light.minimal-everforest-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-everforest-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-everforest-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:203;--base-s:15%;--base-l:23%;--accent-h:81;--accent-s:34%;--accent-l:63%;--bg1:#2d353b;--bg2:#232a2e;--bg3:rgba(71,82,88,0.5);--ui1:#475258;--ui2:#4f585e;--ui3:#525c62;--tx1:#d3c6aa;--tx2:#9da9a0;--tx3:#7a8478;--hl1:rgba(134,70,93,.5);--hl2:rgba(147,185,96,.3)}.theme-dark.minimal-everforest-dark.minimal-dark-black{--hl1:rgba(134,70,93,.4);--ui1:#2b3339}.theme-light.minimal-flexoki-light{--color-red-rgb:175,48,41;--color-orange-rgb:188,82,21;--color-yellow-rgb:173,131,1;--color-green-rgb:102,128,11;--color-cyan-rgb:36,131,123;--color-blue-rgb:32,94,166;--color-purple-rgb:94,64,157;--color-pink-rgb:160,47,111;--color-red:#AF3029;--color-orange:#BC5215;--color-yellow:#AD8301;--color-green:#66800B;--color-cyan:#24837B;--color-blue:#205EA6;--color-purple:#5E409D;--color-pink:#A02F6F}.theme-dark.minimal-flexoki-dark{--color-red-rgb:209,77,65;--color-orange-rgb:218,112,44;--color-yellow-rgb:208,162,21;--color-green-rgb:135,154,57;--color-cyan-rgb:58,169,159;--color-blue-rgb:67,133,190;--color-purple-rgb:139,126,200;--color-pink-rgb:206,93,151;--color-red:#D14D41;--color-orange:#DA702C;--color-yellow:#D0A215;--color-green:#879A39;--color-cyan:#3AA99F;--color-blue:#4385BE;--color-purple:#8B7EC8;--color-pink:#CE5D97}.theme-light.minimal-flexoki-light{--base-h:48;--base-s:100%;--base-l:97%;--accent-h:175;--accent-s:57%;--accent-l:33%;--bg1:#FFFCF0;--bg2:#F2F0E5;--bg3:rgba(16,15,15,0.05);--ui1:#E6E4D9;--ui2:#DAD8CE;--ui3:#CECDC3;--tx1:#100F0F;--tx2:#6F6E69;--tx3:#B7B5AC;--hl1:rgba(187,220,206,0.3);--hl2:rgba(247,209,61,0.3)}.theme-light.minimal-flexoki-light.minimal-light-tonal{--bg2:#FFFCF0}.theme-dark.minimal-flexoki-dark,.theme-light.minimal-flexoki-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-flexoki-light.minimal-light-contrast .titlebar,.theme-light.minimal-flexoki-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-flexoki-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-flexoki-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:360;--base-s:3%;--base-l:6%;--accent-h:175;--accent-s:49%;--accent-l:45%;--bg1:#100F0F;--bg2:#1C1B1A;--bg3:rgba(254,252,240,0.05);--ui1:#282726;--ui2:#343331;--ui3:#403E3C;--tx1:#CECDC3;--tx2:#878580;--tx3:#575653;--hl1:rgba(30,95,91,0.3);--hl2:rgba(213,159,17,0.3)}.theme-dark.minimal-flexoki-dark.minimal-dark-black{--ui1:#1C1B1A}.theme-dark.minimal-gruvbox-dark,.theme-light.minimal-gruvbox-light{--color-red-rgb:204,36,29;--color-orange-rgb:214,93,14;--color-yellow-rgb:215,153,33;--color-green-rgb:152,151,26;--color-cyan-rgb:104,157,106;--color-blue-rgb:69,133,136;--color-purple-rgb:177,98,134;--color-pink-rgb:177,98,134;--color-red:#cc241d;--color-orange:#d65d0e;--color-yellow:#d79921;--color-green:#98971a;--color-cyan:#689d6a;--color-blue:#458588;--color-purple:#b16286;--color-pink:#b16286}.theme-light.minimal-gruvbox-light{--base-h:49;--base-s:92%;--base-l:89%;--accent-h:24;--accent-s:88%;--accent-l:45%;--bg1:#fcf2c7;--bg2:#f2e6bd;--bg3:#ebd9b3;--ui1:#ebdbb2;--ui2:#d5c4a1;--ui3:#bdae93;--tx1:#282828;--tx2:#7c7065;--tx3:#a89a85;--hl1:rgba(192,165,125,.3);--hl2:rgba(215,153,33,.4)}.theme-light.minimal-gruvbox-light.minimal-light-tonal{--bg2:#fcf2c7}.theme-light.minimal-gruvbox-light.minimal-light-white{--bg3:#faf5d7;--ui1:#f2e6bd}.theme-dark.minimal-gruvbox-dark,.theme-light.minimal-gruvbox-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-gruvbox-light.minimal-light-contrast .titlebar,.theme-light.minimal-gruvbox-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-gruvbox-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-gruvbox-light.minimal-light-contrast.minimal-status-off .status-bar{--accent-h:24;--accent-s:88%;--accent-l:45%;--bg1:#282828;--bg2:#1e2021;--bg3:#3d3836;--bg3:rgba(62,57,55,0.5);--ui1:#3c3836;--ui2:#504945;--ui3:#665c54;--tx1:#fbf1c7;--tx2:#bdae93;--tx3:#7c6f64;--hl1:rgba(173,149,139,0.3);--hl2:rgba(215,153,33,.4)}.theme-dark.minimal-gruvbox-dark.minimal-dark-black{--hl1:rgba(173,149,139,0.4);--ui1:#282828}.theme-dark.minimal-macos-dark,.theme-light.minimal-macos-light{--color-red-rgb:255,59,49;--color-orange-rgb:255,149,2;--color-yellow-rgb:255,204,0;--color-green-rgb:42,205,65;--color-cyan-rgb:2,199,190;--color-blue-rgb:2,122,255;--color-purple-rgb:176,81,222;--color-pink-rgb:255,46,85;--color-red:#ff3b31;--color-orange:#ff9502;--color-yellow:#ffcc00;--color-green:#2acd41;--color-cyan:#02c7be;--color-blue:#027aff;--color-purple:#b051de;--color-pink:#ff2e55}.theme-light.minimal-macos-light{--base-h:106;--base-s:0%;--base-l:94%;--accent-h:212;--accent-s:100%;--accent-l:50%;--bg1:#fff;--bg2:#f0f0f0;--bg3:rgba(0,0,0,.1);--ui1:#e7e7e7;--tx1:#454545;--tx2:#808080;--tx3:#b0b0b0;--hl1:#b3d7ff}.theme-light.minimal-macos-light.minimal-light-tonal{--bg1:#f0f0f0;--bg2:#f0f0f0}.theme-dark.minimal-macos-dark,.theme-light.minimal-macos-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-macos-light.minimal-light-contrast .titlebar,.theme-light.minimal-macos-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-macos-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-macos-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:106;--base-s:0%;--base-l:12%;--accent-h:212;--accent-s:100%;--accent-l:50%;--bg1:#1e1e1e;--bg2:#282828;--bg3:rgba(255,255,255,0.11);--divider-color:#000;--tab-outline-color:#000;--ui1:#373737;--ui2:#515151;--ui3:#595959;--tx1:#dcdcdc;--tx2:#8c8c8c;--tx3:#686868;--hl1:rgba(98,169,252,0.5);--sp1:#fff}.theme-dark.minimal-macos-dark.minimal-dark-black{--divider-color:#1e1e1e;--tab-outline-color:#1e1e1e}.theme-dark.minimal-nord-dark,.theme-light.minimal-nord-light{--color-red-rgb:191,97,106;--color-orange-rgb:208,138,112;--color-yellow-rgb:235,203,139;--color-green-rgb:163,190,140;--color-cyan-rgb:136,192,208;--color-blue-rgb:129,161,193;--color-purple-rgb:180,142,173;--color-pink-rgb:180,142,173;--color-red:#BF616A;--color-orange:#D08770;--color-yellow:#EBCB8B;--color-green:#A3BE8C;--color-cyan:#88C0D0;--color-blue:#81A1C1;--color-purple:#B48EAD;--color-pink:#B48EAD}.theme-light.minimal-nord-light{--base-h:221;--base-s:27%;--base-l:94%;--accent-h:213;--accent-s:32%;--accent-l:52%;--bg1:#fff;--bg2:#eceff4;--bg3:rgba(157,174,206,0.25);--ui1:#d8dee9;--ui2:#BBCADC;--ui3:#81a1c1;--tx1:#2e3440;--tx2:#7D8697;--tx3:#ADB1B8;--hl2:rgba(208, 135, 112, 0.35)}.theme-dark.minimal-nord-dark,.theme-light.minimal-nord-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-nord-light.minimal-light-contrast .titlebar,.theme-light.minimal-nord-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-nord-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-nord-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:220;--base-s:16%;--base-l:22%;--accent-h:213;--accent-s:32%;--accent-l:52%;--bg1:#2e3440;--bg2:#3b4252;--bg3:rgba(135,152,190,0.15);--ui1:#434c5e;--ui2:#58647b;--ui3:#58647b;--tx1:#d8dee9;--tx2:#9eafcc;--tx3:#4c566a;--hl1:rgba(129,142,180,0.3);--hl2:rgba(208, 135, 112, 0.35)}.theme-dark.minimal-nord-dark.minimal-dark-black{--ui1:#2e3440}.theme-light.minimal-notion-light{--base-h:39;--base-s:18%;--base-d:96%;--accent-h:197;--accent-s:71%;--accent-l:52%;--bg2:#f7f6f4;--bg3:#e8e7e4;--ui1:#ededec;--ui2:#dbdbda;--ui3:#aaa9a5;--tx1:#37352f;--tx2:#72706c;--tx3:#aaa9a5;--hl1:rgba(131,201,229,0.3);--link-weight:500}.theme-dark.minimal-notion-dark,.theme-light.minimal-notion-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-notion-light.minimal-light-contrast .titlebar,.theme-light.minimal-notion-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-notion-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-notion-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:203;--base-s:8%;--base-d:20%;--accent-h:197;--accent-s:71%;--accent-l:52%;--bg1:#2f3437;--bg2:#373c3f;--bg3:#4b5053;--ui1:#3e4245;--ui2:#585d5f;--ui3:#585d5f;--tx1:#ebebeb;--tx2:#909295;--tx3:#585d5f;--hl1:rgba(57,134,164,0.3);--link-weight:500}.theme-dark.minimal-notion-dark.minimal-dark-black{--base-d:5%;--bg3:#232729;--ui1:#2f3437}.theme-light.minimal-rose-pine-light{--color-red-rgb:180,99,122;--color-orange-rgb:215,130,125;--color-yellow-rgb:234,157,53;--color-green-rgb:40,105,131;--color-cyan-rgb:87,147,159;--color-blue-rgb:87,147,159;--color-purple-rgb:144,122,169;--color-pink-rgb:144,122,169;--color-red:#b4637a;--color-orange:#d7827e;--color-yellow:#ea9d34;--color-green:#286983;--color-cyan:#56949f;--color-blue:#56949f;--color-purple:#907aa9;--color-pink:#907aa9}.theme-dark.minimal-rose-pine-dark{--color-red-rgb:234,111,146;--color-orange-rgb:233,155,151;--color-yellow-rgb:246,193,119;--color-green-rgb:47,116,143;--color-cyan-rgb:157,207,215;--color-blue-rgb:157,207,215;--color-purple-rgb:196,167,231;--color-pink-rgb:196,167,231;--color-red:#eb6f92;--color-orange:#ea9a97;--color-yellow:#f6c177;--color-green:#31748f;--color-cyan:#9ccfd8;--color-blue:#9ccfd8;--color-purple:#c4a7e7;--color-pink:#c4a7e7}.theme-light.minimal-rose-pine-light{--base-h:32;--base-s:57%;--base-l:95%;--accent-h:3;--accent-s:53%;--accent-l:67%;--bg1:#fffaf3;--bg2:#faf4ed;--bg3:rgba(233,223,218,0.5);--ui1:#EAE3E1;--ui2:#dfdad9;--ui3:#cecacd;--tx1:#575279;--tx2:#797593;--tx3:#9893a5;--hl1:rgba(191,180,181,0.35)}.theme-dark.minimal-rose-pine-dark,.theme-light.minimal-rose-pine-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-rose-pine-light.minimal-light-contrast .titlebar,.theme-light.minimal-rose-pine-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-rose-pine-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-rose-pine-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:247;--base-s:23%;--base-l:15%;--accent-h:2;--accent-s:55%;--accent-l:83%;--bg1:#1f1d2e;--bg2:#191724;--bg3:rgba(68,66,86,0.5);--ui1:#312F41;--ui2:#403d52;--ui3:#524f67;--tx1:#e0def4;--tx2:#908caa;--tx3:#6e6a86;--hl1:rgba(126,121,155,0.35)}.theme-dark.minimal-rose-pine-dark.minimal-dark-black{--ui1:#21202e}.theme-dark.minimal-solarized-dark,.theme-light.minimal-solarized-light{--color-red-rgb:220,50,47;--color-orange-rgb:203,77,22;--color-yellow-rgb:181,137,0;--color-green-rgb:133,153,0;--color-cyan-rgb:42,161,152;--color-blue-rgb:38,139,210;--color-purple-rgb:108,113,196;--color-pink-rgb:211,54,130;--color-red:#dc322f;--color-orange:#cb4b16;--color-yellow:#b58900;--color-green:#859900;--color-cyan:#2aa198;--color-blue:#268bd2;--color-purple:#6c71c4;--color-pink:#d33682}.theme-light.minimal-solarized-light{--base-h:44;--base-s:87%;--base-l:94%;--accent-h:205;--accent-s:70%;--accent-l:48%;--bg1:#fdf6e3;--bg2:#eee8d5;--bg3:rgba(0,0,0,0.062);--ui1:#e9e1c8;--ui2:#d0cab8;--ui3:#d0cab8;--tx1:#073642;--tx2:#586e75;--tx3:#ABB2AC;--tx4:#586e75;--hl1:rgba(202,197,182,0.3);--hl2:rgba(203,75,22,0.3)}.theme-light.minimal-solarized-light.minimal-light-tonal{--bg2:#fdf6e3}.theme-dark.minimal-solarized-dark,.theme-light.minimal-solarized-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-solarized-light.minimal-light-contrast .titlebar,.theme-light.minimal-solarized-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-solarized-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-solarized-light.minimal-light-contrast.minimal-status-off .status-bar{--accent-h:205;--accent-s:70%;--accent-l:48%;--base-h:193;--base-s:98%;--base-l:11%;--bg1:#002b36;--bg2:#073642;--bg3:rgba(255,255,255,0.062);--ui1:#19414B;--ui2:#274850;--ui3:#31535B;--tx1:#93a1a1;--tx2:#657b83;--tx3:#31535B;--tx4:#657b83;--hl1:rgba(15,81,98,0.3);--hl2:rgba(203, 75, 22, 0.35)}.theme-dark.minimal-solarized-dark.minimal-dark-black{--hl1:rgba(15,81,98,0.55);--ui1:#002b36}.theme-dark.minimal-things-dark,.theme-light.minimal-things-light{--color-red-rgb:255,48,108;--color-orange-rgb:255,149,2;--color-yellow-rgb:255,213,0;--color-green-rgb:75,191,94;--color-cyan-rgb:73,174,164;--color-purple-rgb:176,81,222;--color-pink-rgb:255,46,85;--color-red:#FF306C;--color-orange:#ff9502;--color-yellow:#FFD500;--color-green:#4BBF5E;--color-cyan:#49AEA4;--color-purple:#b051de;--color-pink:#ff2e55}.theme-light.minimal-things-light{--color-blue-rgb:27,97,194;--color-blue:#1b61c2}.theme-dark.minimal-things-dark{--color-blue-rgb:77,149,247;--color-blue:#4d95f7}.theme-light.minimal-things-light{--accent-h:215;--accent-s:76%;--accent-l:43%;--bg1:white;--bg2:#f5f6f8;--bg3:rgba(162,177,187,0.25);--ui1:#eef0f4;--ui2:#D8DADD;--ui3:#c1c3c6;--tx1:#26272b;--tx2:#7D7F84;--tx3:#a9abb0;--hl1:#cae2ff}.theme-light.minimal-things-light.minimal-light-tonal{--ui1:#e6e8ec}.theme-light.minimal-things-light.minimal-light-white{--bg3:#f5f6f8}.theme-dark.minimal-things-dark,.theme-light.minimal-things-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-things-light.minimal-light-contrast .titlebar,.theme-light.minimal-things-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-things-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-things-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:218;--base-s:9%;--base-l:15%;--accent-h:215;--accent-s:91%;--accent-l:64%;--bg1:#24262a;--bg2:#202225;--bg3:#3d3f41;--divider-color:#17191c;--tab-outline-color:#17191c;--ui1:#3A3B3F;--ui2:#45464a;--ui3:#6c6e70;--tx1:#fbfbfb;--tx2:#CBCCCD;--tx3:#6c6e70;--hl1:rgba(40,119,236,0.35);--sp1:#fff}.theme-dark.minimal-things-dark.minimal-dark-black{--base-d:5%;--bg3:#24262a;--divider-color:#24262a;--tab-outline-color:#24262a} -/* Plugin compatibility */ - -/* @plugins -core: -- backlink -- command-palette -- daily-notes -- file-explorer -- file-recovery -- global-search -- graph -- outgoing-link -- outline -- page-preview -- publish -- random-note -- starred -- switcher -- sync -- tag-pane -- word-count -community: -- buttons -- dataview -- calendar -- obsidian-charts -- obsidian-checklist-plugin -- obsidian-codemirror-options -- obsidian-dictionary-plugin -- obsidian-embedded-note-titles -- obsidian-excalidraw-plugin -- obsidian-git -- obsidian-hider -- obsidian-hover-editor -- obsidian-kanban -- obsidian-metatable -- obsidian-minimal-settings -- obsidian-outliner -- obsidian-system-dark-mode -- obsidian-style-settings -- quickadd -- sliding-panes-obsidian -- todoist-sync-plugin -*/ -/* @settings - -name: Minimal -id: minimal-style -settings: - - - id: instructions - title: Documentation - type: heading - level: 2 - collapsed: true - description: Use the Minimal Theme Settings plugin to set hotkeys, adjust features, select fonts, and choose from preset color schemes. Use the settings below for more granular customization. Go to https://minimal.guide for documentation. - - - id: interface - title: Interface colors - type: heading - level: 2 - collapsed: true - - - id: base - title: Base color - description: Defines all background and border colors unless overridden in more granular settings - type: variable-themed-color - format: hsl-split - default-light: '#' - default-dark: '#' - - - id: bg1 - title: Primary background - description: Background color for the main window - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: bg2 - title: Secondary background - description: Background color for left sidebar and menus - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: bg3 - title: Active background - description: Background color for hovered buttons and currently selected file - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: ui1 - title: Border color - type: variable-themed-color - description: For buttons, divider lines, and outlined elements - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: ui2 - title: Highlighted border color - description: Used when hovering over buttons, dividers, and outlined elements - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: ui3 - title: Active border color - description: Used when clicking buttons and outlined elements - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: accent-color - title: Accent color - type: heading - level: 2 - collapsed: true - - - id: ax1 - title: Accent color - type: variable-themed-color - description: Used primarily for links - format: hex - default-light: '#' - default-dark: '#' - - - id: ax2 - title: Accent color (hover) - type: variable-themed-color - description: Used primarily for hovered links - format: hex - default-light: '#' - default-dark: '#' - - - id: ax3 - title: Accent color interactive - type: variable-themed-color - description: Used for buttons, checklists, toggles - format: hex - default-light: '#' - default-dark: '#' - - - id: sp1 - title: Text on accent - type: variable-themed-color - description: Used primarily for text on accented buttons - format: hex - default-light: '#' - default-dark: '#' - - - id: extended-palette - title: Extended colors - type: heading - level: 2 - collapsed: true - - - id: color-red - title: Red - description: Extended palette colors are defaults used for progress bar status, syntax highlighting, colorful headings, and graph nodes - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: color-orange - title: Orange - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: color-yellow - title: Yellow - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: color-green - title: Green - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: color-cyan - title: Cyan - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: color-blue - title: Blue - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: color-purple - title: Purple - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: color-pink - title: Pink - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: blockquotes - title: Blockquotes - type: heading - level: 2 - collapsed: true - - - id: blockquote-color - title: Blockquote text color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: blockquote-background-color - title: Blockquote background color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: blockquote-border-color - title: Blockquote border color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: blockquote-border-thickness - title: Blockquote border thickness - type: variable-number-slider - format: px - default: 1 - min: 0 - max: 5 - step: 1 - - - id: blockquote-size - title: Blockquote font size - description: Accepts any CSS font-size value - type: variable-text - default: '' - - - id: blockquote-font-style - title: Blockquote font style - type: variable-select - allowEmpty: false - default: normal - options: - - - label: Normal - value: normal - - - label: Italic - value: italic - - - id: callouts - title: Callouts - type: heading - level: 2 - collapsed: true - - - id: callouts-style - title: Callout style - type: class-select - allowEmpty: false - default: callouts-default - options: - - - label: Filled - value: callouts-default - - - label: Outlined - value: callouts-outlined - - - id: callout-blend-mode - title: Color blending - description: Blend the color of nested callouts - type: variable-select - allowEmpty: false - default: var(--highlight-mix-blend-mode) - options: - - - label: On - value: var(--highlight-mix-blend-mode) - - - label: Off - value: normal - - - id: canvas - title: Canvas - type: heading - level: 2 - collapsed: true - - - id: canvas-dot-pattern - title: Canvas dot pattern - description: Color for background dot pattern - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: code-blocks - title: Code blocks - type: heading - level: 2 - collapsed: true - - - id: code-size - title: Code font size - description: Accepts any CSS font-size value - type: variable-text - default: 13px - - - id: minimal-code-scroll - title: Scroll long lines - description: Turns off line wrap for code - type: class-toggle - default: false - - - id: code-background - title: Code background color - description: Background for code blocks - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: code-normal - title: Code text color - description: Color of code when syntax highlighting is not present - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: syntax-highlighting - title: Syntax highlighting - type: heading - level: 3 - collapsed: false - - - id: code-comment - title: "Syntax: comments" - description: Syntax highlighting for comments - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: code-function - title: "Syntax: functions" - description: Syntax highlighting for functions - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: code-keyword - title: "Syntax: keywords" - description: Syntax highlighting for keywords - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: code-important - title: "Syntax: important" - description: Syntax highlighting for important text - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: code-operator - title: "Syntax: operators" - description: Syntax highlighting for operators - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: code-property - title: "Syntax: properties" - description: Syntax highlighting for properties - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: code-punctuation - title: "Syntax: punctuation" - description: Syntax highlighting for punctuation - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: code-string - title: "Syntax: strings" - description: Syntax highlighting for strings - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: code-tag - title: "Syntax: tags" - description: Syntax highlighting for tags - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: code-value - title: "Syntax: values" - description: Syntax highlighting for values - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: dataview - title: Dataview - type: heading - level: 2 - collapsed: true - - - id: trim-cols - title: Trim Dataview columns - description: Disables word wrapping in table cells, and trims long text - type: class-toggle - default: true - - - id: dataview-inline-lists - title: Force tables lists inline - description: Makes lists inside of table cells inline and comma separated - type: class-toggle - default: false - - - id: max-col-width - title: Dataview maximum column width - description: Maximum width for Dataview columns, accepts any CSS width value - type: variable-text - default: 18em - - - id: embed-blocks - title: Embeds and transclusions - type: heading - level: 2 - collapsed: true - - - id: embed-strict - title: Use strict embed style globally - description: Transclusions appear seamlessly in the flow of text. Can be enabled per file using the embed-strict helper class - type: class-toggle - default: false - - - id: embed-hide-title - title: Hide embed titles - description: Hide title of the transcluded file (if strict embed is off) - type: class-toggle - default: false - - - id: embed-underline - title: Underline embedded text - description: Transcluded text is underlined. Can be enabled per file using the embed-underline helper class - type: class-toggle - default: false - - - id: embed-max-height - title: Maximum height of embeds - type: variable-text - description: For transcluded text, accepts valid CSS units - default: '' - - - id: embed-decoration-style - title: Embedded text underline style - type: variable-select - description: Requires underlines to be enabled - allowEmpty: true - default: solid - options: - - - label: Solid - value: solid - - - label: Dashed - value: dashed - - - label: Dotted - value: dotted - - - label: Double - value: double - - - label: Wavy - value: wavy - - - id: embed-decoration-color - title: Embedded text underline color - type: variable-themed-color - description: Requires underlines to be enabled - format: hex - default-light: '#' - default-dark: '#' - - - id: embed-background - title: Embed background - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: graphs - title: Graphs - type: heading - level: 2 - collapsed: true - - - id: graph-line - title: Line color - description: Changing graph colors requires closing and reopening graph panes or restarting Obsidian - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: graph-node - title: Node color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: graph-node-focused - title: Active node color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: graph-node-tag - title: Tag node color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: graph-node-attachment - title: Attachment node color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: graph-node-unresolved - title: Unresolved node color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: headings - title: Headings - type: heading - level: 2 - collapsed: true - - - id: level-1-headings - title: Level 1 Headings - type: heading - level: 3 - collapsed: true - - - id: h1-font - title: H1 font - description: Name of the font as it appears on your system - type: variable-text - default: '' - - - id: h1-size - title: H1 font size - description: Accepts any CSS font-size value - type: variable-text - default: 1.125em - - - id: h1-weight - title: H1 font weight - type: variable-number-slider - default: 600 - min: 100 - max: 900 - step: 100 - - - id: h1-color - title: H1 text color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: h1-variant - title: H1 font variant - type: variable-select - allowEmpty: false - default: normal - options: - - - label: Normal - value: normal - - - label: Small caps - value: small-caps - - - label: All small caps - value: all-small-caps - - - id: h1-style - title: H1 font style - type: variable-select - allowEmpty: false - default: normal - options: - - - label: Normal - value: normal - - - label: Italic - value: italic - - - id: h1-l - title: H1 divider line - description: Adds a border below the heading - type: class-toggle - default: false - - - id: level-2-headings - title: Level 2 Headings - type: heading - level: 3 - collapsed: true - - - id: h2-font - title: H2 font - description: Name of the font as it appears on your system - type: variable-text - default: '' - - - id: h2-size - title: H2 font size - description: Accepts any CSS font-size value - type: variable-text - default: 1em - - - id: h2-weight - title: H2 font weight - type: variable-number-slider - default: 600 - min: 100 - max: 900 - step: 100 - - - id: h2-color - title: H2 text color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: h2-variant - title: H2 font variant - type: variable-select - allowEmpty: false - default: normal - options: - - - label: Normal - value: normal - - - label: Small caps - value: small-caps - - - label: All small caps - value: all-small-caps - - - id: h2-style - title: H2 font style - type: variable-select - allowEmpty: false - default: normal - options: - - - label: Normal - value: normal - - - label: Italic - value: italic - - - id: h2-l - title: H2 divider line - description: Adds a border below the heading - type: class-toggle - default: false - - - id: level-3-headings - title: Level 3 Headings - type: heading - level: 3 - collapsed: true - - - id: h3-font - title: H3 font - description: Name of the font as it appears on your system - type: variable-text - default: '' - - - id: h3-size - title: H3 font size - description: Accepts any CSS font-size value - type: variable-text - default: 1em - - - id: h3-weight - title: H3 font weight - type: variable-number-slider - default: 600 - min: 100 - max: 900 - step: 100 - - - id: h3-color - title: H3 text color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: h3-variant - title: H3 font variant - type: variable-select - allowEmpty: false - default: normal - options: - - - label: Normal - value: normal - - - label: Small caps - value: small-caps - - - label: All small caps - value: all-small-caps - - - id: h3-style - title: H3 font style - type: variable-select - allowEmpty: false - default: normal - options: - - - label: Normal - value: normal - - - label: Italic - value: italic - - - id: h3-l - title: H3 divider line - description: Adds a border below the heading - type: class-toggle - default: false - - - id: level-4-headings - title: Level 4 Headings - type: heading - level: 3 - collapsed: true - - - id: h4-font - title: H4 font - description: Name of the font as it appears on your system - type: variable-text - default: '' - - - id: h4-size - title: H4 font size - description: Accepts any CSS font-size value - type: variable-text - default: 0.9em - - - id: h4-weight - title: H4 font weight - type: variable-number-slider - default: 500 - min: 100 - max: 900 - step: 100 - - - id: h4-color - title: H4 text color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: h4-variant - title: H4 font variant - type: variable-select - allowEmpty: false - default: small-caps - options: - - - label: Normal - value: normal - - - label: Small caps - value: small-caps - - - label: All small caps - value: all-small-caps - - - id: h4-style - title: H4 font style - type: variable-select - allowEmpty: false - default: normal - options: - - - label: Normal - value: normal - - - label: Italic - value: italic - - - id: h4-l - title: H4 divider line - description: Adds a border below the heading - type: class-toggle - default: false - - - id: level-5-headings - title: Level 5 Headings - type: heading - level: 3 - collapsed: true - - - id: h5-font - title: H5 font - description: Name of the font as it appears on your system - type: variable-text - default: '' - - - id: h5-size - title: H5 font size - description: Accepts any CSS font-size value - type: variable-text - default: 0.85em - - - id: h5-weight - title: H5 font weight - type: variable-number-slider - default: 500 - min: 100 - max: 900 - step: 100 - - - id: h5-color - title: H5 text color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: h5-variant - title: H5 font variant - type: variable-select - allowEmpty: false - default: small-caps - options: - - - label: Normal - value: normal - - - label: Small caps - value: small-caps - - - label: All small caps - value: all-small-caps - - - id: h5-style - title: H5 font style - type: variable-select - allowEmpty: false - default: normal - options: - - - label: Normal - value: normal - - - label: Italic - value: italic - - - id: h5-l - title: H5 divider line - description: Adds a border below the heading - type: class-toggle - default: false - - - id: level-6-headings - title: Level 6 Headings - type: heading - level: 3 - collapsed: true - - - id: h6-font - title: H6 font - description: Name of the font as it appears on your system - type: variable-text - default: '' - - - id: h6-size - title: H6 font size - description: Accepts any CSS font-size value - type: variable-text - default: 0.85em - - - id: h6-weight - title: H6 font weight - type: variable-number-slider - default: 400 - min: 100 - max: 900 - step: 100 - - - id: h6-color - title: H6 text color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: h6-variant - title: H6 font variant - type: variable-select - allowEmpty: false - default: small-caps - options: - - - label: Normal - value: normal - - - label: Small caps - value: small-caps - - - label: All small caps - value: all-small-caps - - - id: h6-style - title: H6 font style - type: variable-select - allowEmpty: false - default: normal - options: - - - label: Normal - value: normal - - - label: Italic - value: italic - - - id: h6-l - title: H6 divider line - type: class-toggle - description: Adds a border below the heading - default: false - - - id: icons - title: Icons - type: heading - level: 2 - collapsed: true - - - id: icon-muted - title: Icon opacity (inactive) - type: variable-number-slider - default: 0.5 - min: 0.25 - max: 1 - step: 0.05 - - - id: icon-color - title: Icon color - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: icon-color-hover - title: Icon color (hover) - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: icon-color-active - title: Icon color (active) - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: icon-color-focused - title: Icon color (focused) - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: images - title: Images - type: heading - level: 2 - collapsed: true - - - id: image-muted - title: Image opacity in dark mode - description: Level of fading for images in dark mode. Hover over images to display at full brightness. - type: variable-number-slider - default: 0.7 - min: 0.25 - max: 1 - step: 0.05 - - - id: image-radius - title: Image radius - description: Rounded corners for images - type: variable-number-slider - default: 4 - min: 0 - max: 16 - step: 1 - format: px - - - id: image-blend-light - title: Blend images in light mode - description: Allow images to blend into the color scheme background color - type: class-toggle - default: false - - - id: zoom-off - title: Disable image zoom - description: Turns off click + hold to zoom images - type: class-toggle - - - id: image-grid-fit - title: Image grid crop - description: Sets how images get cropped in a grid - type: variable-select - default: cover - options: - - - label: Crop to fit - value: cover - - - label: Show full image - value: contain - - - id: image-grid-background - title: Image grid background - description: Background of images in cells, useful when images are not cropped to fit - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: indentation-guides - title: Indentation guides - type: heading - level: 2 - collapsed: true - - - id: ig-adjust-reading - title: Horizontal adjustment in reading mode - type: variable-number-slider - default: -0.65 - min: -1.2 - max: 0 - step: 0.05 - format: em - - - id: ig-adjust-edit - title: Horizontal adjustment in edit mode - type: variable-number-slider - default: -1 - min: -10 - max: 10 - step: 1 - format: px - - - id: indentation-guide-color - title: Indentation guide color - type: variable-themed-color - format: hex - opacity: true - default-light: '#' - default-dark: '#' - - - id: indentation-guide-color-active - title: Indentation guide color (active) - type: variable-themed-color - format: hex - opacity: true - default-light: '#' - default-dark: '#' - - - id: links - title: Links - type: heading - level: 2 - collapsed: true - - - id: links-internal - title: Internal links - type: heading - level: 3 - collapsed: true - - - id: link-color - title: Internal link color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: link-color-hover - title: Internal link color (hover) - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: link-unresolved-opacity - title: Unresolved link opacity - type: variable-number-slider - default: 0.7 - min: 0.25 - max: 1 - step: 0.05 - - - id: link-unresolved-color - title: Unresolved link color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: link-unresolved-decoration-color - title: Unresolved link underline color - type: variable-themed-color - format: hex - opacity: true - default-light: '#' - default-dark: '#' - - - id: links-external - title: External links - type: heading - level: 3 - collapsed: true - - - id: link-external-color - title: External link color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: link-external-color-hover - title: External link color (hover) - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: active-line - title: Line numbers - type: heading - level: 2 - collapsed: true - - - id: active-line-on - title: Highlight active line - description: Adds a background to current line in editor - type: class-toggle - default: false - - - id: folding-offset - title: Gutter offset - description: Width of the file margin used for gutter - type: variable-number-slider - default: 32 - min: 0 - max: 60 - step: 1 - format: px - - - id: gutter-background - title: Gutter background - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: line-number-color - title: Line number color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: line-number-color-active - title: Active line number color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: active-line-bg - title: Active line background - description: Using a low opacity color is recommended to avoid conflicting with highlights - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: lists - title: Lists and tasks - type: heading - level: 2 - collapsed: true - - - id: checkbox-color - title: Checkbox color - description: Background color for completed tasks - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: checkbox-shape - title: Checkbox shape - type: class-select - allowEmpty: false - default: checkbox-circle - options: - - - label: Circle - value: checkbox-circle - - - label: Square - value: checkbox-square - - - id: minimal-strike-lists - title: Strike completed tasks - description: Adds strikethrough line and greyed text for completed tasks - type: class-toggle - default: false - - - id: list-spacing - title: List item spacing - description: Vertical space between list items in em units - type: variable-number-slider - default: 0.075 - min: 0 - max: 0.3 - step: 0.005 - format: em - - - id: list-indent - title: Nested list indentation - description: Horizontal space from left in em units - type: variable-number-slider - default: 2 - min: 1 - max: 3.5 - step: 0.1 - format: em - - - id: pdf - title: PDFs - type: heading - level: 2 - collapsed: true - - - id: pdf-page-style - title: PDF page style - description: Borders and shadows around pages - type: class-select - allowEmpty: false - default: pdf-seamless-on - options: - - - label: Seamless - value: pdf-seamless-on - - - label: Shadows - value: pdf-shadows-on - - - id: pdf-invert-dark - title: Invert PDFs in dark mode - description: Best for working with black text on white pages - type: class-toggle - default: true - - - id: pdf-blend-light - title: Blend PDFs in light mode - description: Allow PDFs to blend into the color scheme background color - type: class-toggle - default: true - - - id: pdf-dark-opacity - title: PDF opacity in dark mode - description: Fade PDF pages in dark mode - type: variable-number-slider - default: 1 - min: 0.25 - max: 1 - step: 0.05 - - - id: progress - title: Progress bars - type: heading - level: 2 - collapsed: true - - - id: progress-complete - title: Completed progress bar color - description: Defaults to your accent color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: properties - title: Properties - type: heading - level: 2 - collapsed: true - - - id: metadata-heading-off - title: Hide properties heading - description: Hide "Properties" heading above properties - type: class-toggle - default: false - - - id: metadata-add-property-off - title: Hide "Add property" button - description: Hide "Add property" button below properties - type: class-toggle - default: false - - - id: metadata-icons-off - title: Hide property icons - description: Hide icons next to property names - type: class-toggle - default: false - - - id: metadata-dividers - title: Property row lines - description: Display borders between properties - type: class-toggle - default: false - - - id: metadata-label-width - title: Property name width - description: Width for the name of the property - type: variable-number-slider - format: rem - default: 8 - min: 4 - max: 12 - step: 0.25 - - - id: sidebars - title: Sidebars - type: heading - level: 2 - collapsed: true - - - id: sidebar-lines-off - title: Hide sidebar relationship lines - description: Turns off lines in file navigation - type: class-toggle - - - id: sidebar-tabs-style - title: Sidebar tab style - type: class-select - allowEmpty: false - default: sidebar-tabs-default - options: - - - label: Index round - value: sidebar-tabs-index - - - label: Index square - value: sidebar-tabs-square - - - label: Modern compact - value: sidebar-tabs-default - - - label: Modern wide - value: sidebar-tabs-wide - - - label: Underline - value: sidebar-tabs-underline - - - - id: mobile-left-sidebar-width - title: Mobile left sidebar width - description: Maximum width for pinned left sidebar on mobile - type: variable-number - default: 280 - format: pt - - - id: mobile-right-sidebar-width - title: Mobile right sidebar width - description: Maximum width for pinned right sidebar on mobile - type: variable-number - default: 240 - format: pt - - - id: ribbon - title: Ribbon - type: heading - level: 2 - collapsed: true - - - id: ribbon-style - title: Ribbon style - description: Ribbon menu can be hidden using the Hider plugin - type: class-select - allowEmpty: false - default: ribbon-hidden - options: - - - label: Default - value: ribbon-hidden - - - label: Bottom left hover - value: ribbon-bottom-left-hover - - - id: tables - title: Tables - type: heading - level: 2 - collapsed: true - - - id: table-text-size - title: Table font size - description: All of the following settings apply to all tables globally. To turn on these features on a per-note basis use helper classes. See documentation. - type: variable-text - default: 1em - - - id: table-column-min-width - title: Minimum column width - type: variable-text - default: 6ch - - - id: table-column-max-width - title: Maximum column width - type: variable-text - default: none - - - id: maximize-tables-off - title: Maximize table width - description: Determines how wide tables should behave when they become wider than the line width - type: class-select - allowEmpty: false - default: maximize-tables-off - options: - - - label: Fit to line width - value: maximize-tables-off - - - label: Overflow line width - value: maximize-tables-auto - - - label: Always fill - value: maximize-tables - - - id: row-lines - title: Row lines - description: Display borders between table rows globally - type: class-toggle - default: false - - - id: col-lines - title: Column lines - description: Display borders between table columns globally - type: class-toggle - default: false - - - id: table-lines - title: Cell lines - description: Display borders around all table cells globally - type: class-toggle - default: false - - - id: row-alt - title: Striped rows - description: Display striped background in alternating table rows globally - type: class-toggle - default: false - - - id: col-alt - title: Striped columns - description: Display striped background in alternating table columns globally - type: class-toggle - default: false - - - id: table-tabular - title: Tabular figures - description: Use fixed width numbers in tables globally - type: class-toggle - default: false - - - id: table-numbers - title: Row numbers - description: Display row numbers in tables globally - type: class-toggle - default: false - - - id: table-nowrap - title: Disable line wrap - description: Turn off line wrapping in table cells globally - type: class-toggle - default: false - - - id: row-hover - title: Highlight active row - description: Highlight rows on hover - type: class-toggle - default: false - - - id: table-row-background-hover - title: Active row background - description: Background color for hovered tables rows - type: variable-themed-color - format: hex - opacity: true - default-light: '#' - default-dark: '#' - - - id: tabs - title: Tabs - type: heading - level: 2 - collapsed: true - - - id: header-height - title: Tab bar height - type: variable-text - default: 40px - - - id: tabs-style - title: Tab style - type: class-select - allowEmpty: false - default: tabs-default - options: - - - label: Index round - value: tabs-default - - - label: Index square - value: tabs-square - - - label: Modern - value: tabs-modern - - - label: Square - value: tabs-plain-square - - - label: Underline - value: tabs-underline - - - id: minimal-tab-text-color - title: Tab text color - type: variable-themed-color - format: hex - opacity: true - default-light: '#' - default-dark: '#' - - - id: minimal-tab-text-color-active - title: Tab text color (active) - type: variable-themed-color - format: hex - opacity: true - default-light: '#' - default-dark: '#' - - - id: tab-stacks - title: Tab stacks - type: heading - level: 2 - collapsed: true - - - id: tab-stacked-pane-width - title: Stacked width - type: variable-number - description: Width of a stacked tab in pixels - default: 700 - format: px - - - id: tab-stacked-header-width - title: Spine width - type: variable-number - description: Width of the spine in pixels - default: 40 - format: px - - - id: tab-stacked-spine-orientation - title: Spine text orientation - type: class-select - default: tab-stack-top - options: - - - label: Top - value: tab-stack-top - - - label: Top flipped - value: tab-stack-top-flipped - - - label: Bottom - value: tab-stack-bottom - - - label: Bottom flipped - value: tab-stack-bottom-flipped - - - label: Center - value: tab-stack-center - - - label: Center flipped - value: tab-stack-center-flipped - - - id: tags - title: Tags - type: heading - level: 2 - collapsed: true - - - id: minimal-unstyled-tags - title: Plain tags - description: Tags will render as normal text, overrides settings below - type: class-toggle - default: false - - - id: tag-radius - title: Tag shape - type: variable-select - default: 14px - options: - - - label: Pill - value: 14px - - - label: Rounded - value: 4px - - - label: Square - value: 0px - - - id: tag-border-width - title: Tag border width - type: variable-select - default: 1px - options: - - - label: None - value: 0 - - - label: Thin - value: 1px - - - label: Thick - value: 2px - - - id: tag-color - title: Tag text color - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: tag-background - title: Tag background color - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: tag-background-hover - title: Tag background color (hover) - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: text - title: Text - type: heading - level: 2 - collapsed: true - - - id: tx1 - title: Normal text color - type: variable-themed-color - description: Primary text color used by default across all elements - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: hl1 - title: Selected text background - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: hl2 - title: Highlighted text background - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: tx2 - title: Muted text color - description: Secondary text such as sidebar note titles and table headings - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: tx3 - title: Faint text color - description: tertiary text such as input placeholders, empty checkboxes, and disabled statuses - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: text-formatting - title: Markdown syntax color - description: Markdown formatting syntax text color - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: italic-color - title: Italic text color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: bold-color - title: Bold text color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: bold-weight - title: Bold text weight - type: variable-number-slider - default: 600 - min: 100 - max: 900 - step: 100 - - - id: p-spacing - title: Paragraph spacing - description: Space between paragraphs in reading mode (Obsidian 1.3.7+) - type: variable-text - default: 1.75rem - - - id: heading-spacing - title: Heading spacing - description: Space between paragraphs and headings in reading mode (Obsidian 1.3.7+) - type: variable-text - default: 2em - - - id: titles - title: Titles - type: heading - level: 2 - collapsed: true - - - id: tab-title-bar - title: Tab title bar - description: Tab title bar must be turned on in Appearance settings - type: heading - level: 3 - collapsed: true - - - id: file-header-visibility - title: Tab title visibility - description: Visibility of the tab title text - type: class-select - default: minimal-tab-title-hover - options: - - - label: Hover only - value: minimal-tab-title-hover - - - label: Hidden - value: minimal-tab-title-hidden - - - label: Visible - value: minimal-tab-title-visible - - - id: file-header-font-size - title: Tab title font size - description: Accepts any CSS font-size value - type: variable-text - default: 0.9em - - - id: file-header-font-weight - title: Tab title font weight - type: variable-number-slider - default: 400 - min: 100 - max: 900 - step: 100 - - - id: file-header-justify - title: Tab title alignment - type: variable-select - default: center - options: - - - label: Center - value: center - - - label: Left - value: left - - - id: title-color - title: Tab title text color (active) - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: title-color-inactive - title: Tab title text color (inactive) - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: inline-title - title: Inline title - description: Inline titles must be turned on in Appearance settings - type: heading - level: 3 - collapsed: true - - - id: inline-title-font - title: Inline title font - description: Name of the font as it appears on your system - type: variable-text - default: '' - - - id: inline-title-size - title: Inline title font size - description: Accepts any CSS font-size value - type: variable-text - default: 1.125em - - - id: inline-title-weight - title: Inline title font weight - type: variable-number-slider - default: 600 - min: 100 - max: 900 - step: 100 - - - id: inline-title-color - title: Inline title text color (active) - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: translucency - title: Translucency - type: heading - level: 2 - collapsed: true - - - id: workspace-background-translucent - title: Translucent background color - type: variable-themed-color - opacity: true - format: hex - default-light: '#' - default-dark: '#' - - - id: window-frame - title: Window frame - type: heading - level: 2 - collapsed: true - - - id: window-title-off - title: Hide window frame title - description: Hide title in the custom title bar - type: class-toggle - - - id: frame-background - title: Frame background - description: Requires colorful window frame - type: variable-themed-color - opacity: true - format: hsl-split - default-light: '#' - default-dark: '#' - - - id: frame-icon-color - title: Frame icon color - description: Requires colorful frame - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: titlebar-text-color-focused - title: Frame title color (focused) - description: Requires custom title bar - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: titlebar-text-color - title: Frame title color (inactive) - description: Requires custom title bar - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - - - id: titlebar-text-weight - title: Frame title font weight - description: Requires custom title bar - type: variable-number-slider - default: 600 - min: 100 - max: 900 - step: 100 -*/ - -/* @settings -name: Minimal Cards -id: minimal-cards-style -settings: - - - id: cards-min-width - title: Card minimum width - type: variable-text - default: 180px - - - id: cards-max-width - title: Card maximum width - description: Default fills the available width, accepts valid CSS units - type: variable-text - default: 1fr - - - id: cards-mobile-width - title: Card minimum width on mobile - type: variable-text - default: 120px - - - id: cards-padding - title: Card padding - type: variable-text - default: 1.2em - - - id: cards-image-height - title: Card maximum image height - type: variable-text - default: 400px - - - id: cards-border-width - title: Card border width - type: variable-text - default: 1px - - - id: cards-background - title: Card background color - type: variable-themed-color - format: hex - default-light: '#' - default-dark: '#' - -*/ - -/* @settings -name: Minimal Mobile -id: minimal-mobile -settings: - - - id: mobile-toolbar-off - title: Disable toolbar - description: Turns off mobile toolbar - type: class-toggle -*/ - -/* @settings -name: Minimal Advanced Settings -id: minimal-advanced -settings: - - - id: hide-markdown - title: Hide Markdown syntax - description: (EXPERIMENTAL) Warning, this can be confusing because the characters still exist they are just hidden. - type: class-toggle - - - id: styled-scrollbars - title: Styled scrollbars - description: Use styled scrollbars (replaces native scrollbars) - type: class-toggle - - - id: cursor - title: Cursor style - description: The cursor style for UI elements - type: variable-select - default: default - options: - - - label: Default - value: default - - - label: Pointer - value: pointer - - - label: Crosshair - value: crosshair - - - id: font-ui-small - title: Small font size - description: Font size in px of smaller text - type: variable-number - default: 13 - format: px - - - id: font-ui-smaller - title: Smaller font size - description: Font size in px of smallest text - type: variable-number - default: 11 - format: px - -*/ diff --git a/docs/contact.md b/docs/contact.md index 8bfeea29..5ad879e8 100644 --- a/docs/contact.md +++ b/docs/contact.md @@ -1,3 +1,9 @@ +--- +title: contact +created: 2022-11-08T04:34:34 +modified: 2024-03-13T06:05:10 +--- + # Contact Us If you have any questions or comments, please contact us at [elected-admins@redbrick.dcu.ie](mailto:elected-admins@redbrick.dcu.ie). Or you can join the [Discord server](https://discord.gg/MttnTq9UyK)! diff --git a/docs/hardware/aperture/about.md b/docs/hardware/aperture/about.md index ed539778..3e6b19f2 100644 --- a/docs/hardware/aperture/about.md +++ b/docs/hardware/aperture/about.md @@ -1,5 +1,7 @@ --- -title: About Aperture +title: about +created: 2022-05-16T01:44:40 +modified: 2024-03-13T04:49:14 tags: - aperture - hardware diff --git a/docs/hardware/aperture/chell.md b/docs/hardware/aperture/chell.md index 6b468769..bb586b54 100644 --- a/docs/hardware/aperture/chell.md +++ b/docs/hardware/aperture/chell.md @@ -1,5 +1,7 @@ --- -title: Chell +title: chell +created: 2023-12-04T22:28:41 +modified: 2024-03-13T04:49:14 tags: - hardware - aperture diff --git a/docs/hardware/aperture/glados.md b/docs/hardware/aperture/glados.md index 5baeaf10..6128ca82 100644 --- a/docs/hardware/aperture/glados.md +++ b/docs/hardware/aperture/glados.md @@ -1,5 +1,7 @@ --- -title: Glados +title: glados +created: 2023-12-04T22:28:41 +modified: 2024-03-13T04:49:14 tags: - hardware - aperture diff --git a/docs/hardware/aperture/images.md b/docs/hardware/aperture/images.md index f2f6259e..5bdd20fb 100644 --- a/docs/hardware/aperture/images.md +++ b/docs/hardware/aperture/images.md @@ -1,5 +1,7 @@ --- -title: Images +title: images +created: 2024-03-01T21:17:25 +modified: 2024-03-13T04:49:14 tags: - hardware - aperture diff --git a/docs/hardware/aperture/index.md b/docs/hardware/aperture/index.md index 3af9fb68..0bf14f84 100644 --- a/docs/hardware/aperture/index.md +++ b/docs/hardware/aperture/index.md @@ -1,5 +1,7 @@ --- -title: Aperture +title: index +created: 2022-05-16T01:44:40 +modified: 2024-03-13T04:49:14 tags: - aperture - details diff --git a/docs/hardware/aperture/johnson.md b/docs/hardware/aperture/johnson.md index 46b6d99f..b8e41f66 100644 --- a/docs/hardware/aperture/johnson.md +++ b/docs/hardware/aperture/johnson.md @@ -1,5 +1,7 @@ --- -title: Johnson +title: johnson +created: 2023-12-06T01:22:03 +modified: 2024-03-13T04:49:14 tags: - aperture - hardware diff --git a/docs/hardware/aperture/wheatley.md b/docs/hardware/aperture/wheatley.md index 8da637e9..d4c805c7 100644 --- a/docs/hardware/aperture/wheatley.md +++ b/docs/hardware/aperture/wheatley.md @@ -1,5 +1,7 @@ --- -title: Wheatley +title: wheatley +created: 2023-12-04T22:28:41 +modified: 2024-03-13T04:49:14 tags: - aperture - hardware diff --git a/docs/hardware/azazel.md b/docs/hardware/azazel.md index 8a7809ec..32b87eb1 100644 --- a/docs/hardware/azazel.md +++ b/docs/hardware/azazel.md @@ -1,5 +1,7 @@ --- -title: Azazel +title: azazel +created: 2023-12-02T14:18:51 +modified: 2024-03-13T04:49:14 tags: - login-box - hardware diff --git a/docs/hardware/index.md b/docs/hardware/index.md index 9b73e593..8d3d6127 100644 --- a/docs/hardware/index.md +++ b/docs/hardware/index.md @@ -1,3 +1,9 @@ +--- +title: index +created: 2023-12-04T22:35:50 +modified: 2024-03-01T21:17:25 +--- + # Hardware Here is a list of current hardware in Redbrick's suite of servers, switches and other bits. diff --git a/docs/hardware/network/arse.md b/docs/hardware/network/arse.md index 8b137891..1228d92b 100644 --- a/docs/hardware/network/arse.md +++ b/docs/hardware/network/arse.md @@ -1 +1,5 @@ - +--- +title: arse +created: 2024-03-01T21:17:25 +modified: 2024-03-01T21:17:25 +--- diff --git a/docs/hardware/network/cerberus.md b/docs/hardware/network/cerberus.md index 8b137891..6537cf81 100644 --- a/docs/hardware/network/cerberus.md +++ b/docs/hardware/network/cerberus.md @@ -1 +1,5 @@ - +--- +title: cerberus +created: 2024-03-01T21:17:25 +modified: 2024-03-01T21:17:25 +--- diff --git a/docs/hardware/network/mordor.md b/docs/hardware/network/mordor.md index d8a58a08..231110d2 100644 --- a/docs/hardware/network/mordor.md +++ b/docs/hardware/network/mordor.md @@ -1,3 +1,9 @@ +--- +title: mordor +created: 2022-05-16T02:53:25 +modified: 2024-03-01T21:17:25 +--- + # Mordor diff --git a/docs/hardware/network/switches.md b/docs/hardware/network/switches.md index 8b137891..f7c644d5 100644 --- a/docs/hardware/network/switches.md +++ b/docs/hardware/network/switches.md @@ -1 +1,5 @@ - +--- +title: switches +created: 2024-03-01T21:17:25 +modified: 2024-03-01T21:17:25 +--- diff --git a/docs/hardware/nix/hardcase.md b/docs/hardware/nix/hardcase.md index 1b2a16d1..99ffa04a 100644 --- a/docs/hardware/nix/hardcase.md +++ b/docs/hardware/nix/hardcase.md @@ -1,5 +1,7 @@ --- -title: Hardcase +title: hardcase +created: 2023-12-04T22:28:41 +modified: 2024-03-13T04:49:14 tags: - nixos - hardware diff --git a/docs/hardware/nix/icarus.md b/docs/hardware/nix/icarus.md index 2ab4b0dc..751ddbed 100644 --- a/docs/hardware/nix/icarus.md +++ b/docs/hardware/nix/icarus.md @@ -1,5 +1,7 @@ --- -title: Icarus +title: icarus +created: 2021-06-28T23:17:10 +modified: 2024-03-13T04:49:14 tags: - nixos - hardware diff --git a/docs/hardware/nix/motherlode.md b/docs/hardware/nix/motherlode.md index 44ea4a19..d86656ca 100644 --- a/docs/hardware/nix/motherlode.md +++ b/docs/hardware/nix/motherlode.md @@ -1,5 +1,7 @@ --- -title: Motherlode +title: motherlode +created: 2023-12-04T22:28:41 +modified: 2024-03-13T04:49:14 tags: - nixos - hardware diff --git a/docs/hardware/paphos.md b/docs/hardware/paphos.md index efea1bf2..08cb035c 100644 --- a/docs/hardware/paphos.md +++ b/docs/hardware/paphos.md @@ -1,5 +1,7 @@ --- -title: Paphos +title: paphos +created: 2023-12-02T14:18:51 +modified: 2024-03-13T04:49:14 tags: - hardware - paphos diff --git a/docs/hardware/pygmalion.md b/docs/hardware/pygmalion.md index c83c63ee..b95cf3dc 100644 --- a/docs/hardware/pygmalion.md +++ b/docs/hardware/pygmalion.md @@ -1,5 +1,7 @@ --- -title: Pygmalion +title: pygmalion +created: 2023-12-02T14:18:51 +modified: 2024-03-13T04:49:14 tags: - login-box - hardware diff --git a/docs/hardware/zeus.md b/docs/hardware/zeus.md index 95ab58f5..a53ad8b7 100644 --- a/docs/hardware/zeus.md +++ b/docs/hardware/zeus.md @@ -1,5 +1,7 @@ --- -title: Zeus +title: zeus +created: 2023-12-02T14:18:51 +modified: 2024-03-13T04:49:14 tags: - hardware - zeus diff --git a/docs/index.md b/docs/index.md index d7b73785..3346227d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,3 +1,9 @@ +--- +title: index +created: 2021-06-28T22:38:22 +modified: 2024-03-13T06:05:10 +--- + # Home ## Redbrick Docs diff --git a/docs/procedures/Open-Governance-Tagging.md b/docs/procedures/Open-Governance-Tagging.md index b341578a..e82cb829 100644 --- a/docs/procedures/Open-Governance-Tagging.md +++ b/docs/procedures/Open-Governance-Tagging.md @@ -1,5 +1,7 @@ --- -title: Open Governance Tagging +title: Open-Governance-Tagging +created: 2024-05-07T00:23:58 +modified: 2024-05-07T00:23:58 tags: - open-gov - gpg diff --git a/docs/procedures/ansible.md b/docs/procedures/ansible.md index 1935c1bb..7c40a8b8 100644 --- a/docs/procedures/ansible.md +++ b/docs/procedures/ansible.md @@ -1,3 +1,9 @@ +--- +title: ansible +created: 2022-11-08T04:34:34 +modified: 2024-03-01T21:17:25 +--- + # Ansible Redbrick uses ansible to manage its infrastructure. This document describes the procedures and some tips to get the most out of it. diff --git a/docs/procedures/cheatsheet.md b/docs/procedures/cheatsheet.md index 4ed8d430..96df838a 100644 --- a/docs/procedures/cheatsheet.md +++ b/docs/procedures/cheatsheet.md @@ -1,3 +1,9 @@ +--- +title: cheatsheet +created: 2021-06-28T23:17:10 +modified: 2024-03-13T06:05:10 +--- + # Cheatsheet ## LDAP diff --git a/docs/procedures/handover.md b/docs/procedures/handover.md index ac3aeec5..c650bfe6 100644 --- a/docs/procedures/handover.md +++ b/docs/procedures/handover.md @@ -1,3 +1,9 @@ +--- +title: handover +created: 2022-05-16T00:59:20 +modified: 2024-01-30T01:31:37 +--- + # Committee Handover When a new committee is elected, there are many things to hand over. This is a list of those things. diff --git a/docs/procedures/index.md b/docs/procedures/index.md index 0ccdd8fd..47c2c5db 100644 --- a/docs/procedures/index.md +++ b/docs/procedures/index.md @@ -1,3 +1,9 @@ +--- +title: index +created: 2023-12-05T01:36:11 +modified: 2024-03-13T06:05:10 +--- + # Procedures Here you can find a list of various procedures useful for the day-to-day running of Redbrick diff --git a/docs/procedures/irc-ops.md b/docs/procedures/irc-ops.md index 10866103..d97d7e97 100644 --- a/docs/procedures/irc-ops.md +++ b/docs/procedures/irc-ops.md @@ -1,3 +1,9 @@ +--- +title: irc-ops +created: 2023-12-05T01:36:11 +modified: 2024-01-31T08:23:37 +--- + # IRC Ops This is a mirror of: diff --git a/docs/procedures/new-admins.md b/docs/procedures/new-admins.md index 7bc9872e..6510d7e3 100644 --- a/docs/procedures/new-admins.md +++ b/docs/procedures/new-admins.md @@ -1,3 +1,9 @@ +--- +title: new-admins +created: 2023-12-05T01:36:11 +modified: 2024-01-31T08:23:37 +--- + # New Elected Admins The chronological process of becoming an admin usually looks very similar each year. There are some important things you should know. diff --git a/docs/procedures/nixos.md b/docs/procedures/nixos.md index 2a476c34..45792947 100644 --- a/docs/procedures/nixos.md +++ b/docs/procedures/nixos.md @@ -1,3 +1,9 @@ +--- +title: nixos +created: 2023-12-05T01:36:11 +modified: 2024-01-31T08:23:37 +--- + # NixOS Familiarise yourself with the layout of the following. Bookmarking the page is also a good shout. diff --git a/docs/procedures/policies.md b/docs/procedures/policies.md index eec02d08..40216755 100644 --- a/docs/procedures/policies.md +++ b/docs/procedures/policies.md @@ -1,3 +1,9 @@ +--- +title: policies +created: 2023-12-05T01:36:11 +modified: 2024-01-30T01:31:37 +--- + # Redbrick System Administrator Policies The purpose of this is to brief new Redbrick system administrators on the current setup, policies and practices in place and to serve as the place to record all such information for current and future administrators. diff --git a/docs/procedures/post-powercut.md b/docs/procedures/post-powercut.md index 2a8b4d39..40fb863f 100644 --- a/docs/procedures/post-powercut.md +++ b/docs/procedures/post-powercut.md @@ -1,3 +1,9 @@ +--- +title: post-powercut +created: 2023-12-05T01:36:11 +modified: 2024-01-31T08:23:37 +--- + # Post-powercut Todo List A list of things that should be done/checked immediately after a power cut: diff --git a/docs/procedures/update-wp-domain.md b/docs/procedures/update-wp-domain.md index 7d708da5..ded6dbeb 100644 --- a/docs/procedures/update-wp-domain.md +++ b/docs/procedures/update-wp-domain.md @@ -1,3 +1,9 @@ +--- +title: update-wp-domain +created: 2024-01-25T04:31:32 +modified: 2024-01-31T08:23:37 +--- + # Update a WordPress Domain - `wizzdom`, `distro` Redbrick hosts a variety of services and websites for various clubs and societies in DCU. Oftentimes these websites hosted for societies run on WordPress due to it's ease of use. diff --git a/docs/procedures/vpn.md b/docs/procedures/vpn.md index 3d818d00..afae2534 100644 --- a/docs/procedures/vpn.md +++ b/docs/procedures/vpn.md @@ -1,3 +1,9 @@ +--- +title: vpn +created: 2022-09-05T04:00:22 +modified: 2024-03-01T21:17:25 +--- + # Admin VPN The admin VPN is set up to allow admins to access the network from outside of DCU, giving them an IP address on the internal network for troubleshooting, testing and integrating. diff --git a/docs/services/api.md b/docs/services/api.md index fb01da0f..6758f3e3 100644 --- a/docs/services/api.md +++ b/docs/services/api.md @@ -1,5 +1,7 @@ --- -title: API +title: api +created: 2021-08-13T23:28:49 +modified: 2024-03-31T18:48:31 tags: - services - api diff --git a/docs/services/bastion-vm.md b/docs/services/bastion-vm.md index afc5b468..b2dd5591 100644 --- a/docs/services/bastion-vm.md +++ b/docs/services/bastion-vm.md @@ -1,5 +1,7 @@ --- -title: Bastion VM +title: bastion-vm +created: 2024-01-23T15:43:40 +modified: 2024-04-02T00:12:41 tags: - aperture - services diff --git a/docs/services/bind.md b/docs/services/bind.md index 09f8ae6d..7057213e 100644 --- a/docs/services/bind.md +++ b/docs/services/bind.md @@ -1,5 +1,7 @@ --- -title: Bind9 (DNS) +title: bind +created: 2021-06-29T04:44:29 +modified: 2024-04-03T17:52:43 tags: - services - dns diff --git a/docs/services/consul.md b/docs/services/consul.md index 054723eb..546ae866 100644 --- a/docs/services/consul.md +++ b/docs/services/consul.md @@ -1 +1,7 @@ +--- +title: consul +created: 2023-12-07T12:00:14 +modified: 2024-03-01T21:17:25 +--- + # Consul diff --git a/docs/services/exposed.md b/docs/services/exposed.md index bbfcf4e9..b16a24ca 100644 --- a/docs/services/exposed.md +++ b/docs/services/exposed.md @@ -1,13 +1,15 @@ --- -id: exposed -aliases: - - Services Exposed to the Internet - `wizzdom` +title: exposed +created: 2023-12-02T14:11:33 +modified: 2024-07-16T23:41:06 tags: - services - exposed +aliases: + - Services Exposed to the Internet - `wizzdom` author: - wizzdom -title: Services Exposed to the Internet +id: exposed --- # Services Exposed to the Internet - `wizzdom` diff --git a/docs/services/gitea.md b/docs/services/gitea.md index e9b89674..0a24dfcc 100644 --- a/docs/services/gitea.md +++ b/docs/services/gitea.md @@ -1,3 +1,9 @@ +--- +title: gitea +created: 2021-06-29T04:44:29 +modified: 2024-01-31T08:23:37 +--- + # Gitea Redbrick uses [Gitea](https://gitea.io/en-US/) as an open source git host. diff --git a/docs/services/icecast.md b/docs/services/icecast.md index a50b0eaf..ac5ffe09 100644 --- a/docs/services/icecast.md +++ b/docs/services/icecast.md @@ -1,3 +1,9 @@ +--- +title: icecast +created: 2022-11-08T04:34:34 +modified: 2024-03-01T21:17:25 +--- + # Icecast Icecast is a streaming server that we currently host on aperture. diff --git a/docs/services/index.md b/docs/services/index.md index d78e317c..001794c4 100644 --- a/docs/services/index.md +++ b/docs/services/index.md @@ -1,3 +1,9 @@ +--- +title: index +created: 2021-06-29T04:44:29 +modified: 2024-04-02T00:12:41 +--- + # Preface Here you will find a list of all the services Redbrick runs, along with some configs and some important information surrounding them. diff --git a/docs/services/irc.md b/docs/services/irc.md index 758235bd..df01b917 100644 --- a/docs/services/irc.md +++ b/docs/services/irc.md @@ -1,3 +1,9 @@ +--- +title: irc +created: 2021-06-29T04:44:29 +modified: 2024-03-13T04:49:14 +--- + # IRC ## Redbrick InspIRCd diff --git a/docs/services/ldap.md b/docs/services/ldap.md index 7bcb25b5..3160b4bc 100644 --- a/docs/services/ldap.md +++ b/docs/services/ldap.md @@ -1,11 +1,13 @@ --- -title: LDAP -author: - - m1cr0man +title: ldap +created: 2024-03-13T06:05:23 +modified: 2024-03-13T06:05:23 tags: - ldap - icarus - daedalus +author: + - m1cr0man --- # LDAP - `m1cr0man` diff --git a/docs/services/md.md b/docs/services/md.md index 813903b8..d56e94e8 100644 --- a/docs/services/md.md +++ b/docs/services/md.md @@ -1,11 +1,13 @@ --- -title: MD (HedgeDoc) -author: - - wizzdom +title: md +created: 2024-03-13T04:32:53 +modified: 2024-04-02T00:12:41 tags: - aperture - nomad - docker +author: + - wizzdom --- # HedgeDoc - `wizzdom` diff --git a/docs/services/nfs.md b/docs/services/nfs.md index 9113eb15..580e4d78 100644 --- a/docs/services/nfs.md +++ b/docs/services/nfs.md @@ -1,3 +1,9 @@ +--- +title: nfs +created: 2021-06-29T04:44:29 +modified: 2024-01-31T08:23:37 +--- + # NFS / Network File Storage NFS is used to serve the notorious `/storage` directory on Icarus to all of Redbrick's machines, which in turn serves `/home`, `/webtree` and some other critical folders. diff --git a/docs/services/nomad.md b/docs/services/nomad.md index 0b989a1f..04dfb3b3 100644 --- a/docs/services/nomad.md +++ b/docs/services/nomad.md @@ -1,11 +1,13 @@ --- -title: Nomad -author: - - distro - - wizzdom +title: nomad +created: 2023-10-11T02:53:18 +modified: 2024-04-02T00:12:29 tags: - nomad - aperture +author: + - distro + - wizzdom --- # Nomad - `distro`, `wizzdom` diff --git a/docs/services/paste.md b/docs/services/paste.md index 1b502123..c5847b2e 100644 --- a/docs/services/paste.md +++ b/docs/services/paste.md @@ -1,11 +1,13 @@ --- -title: Pastebin -author: - - wizzdom +title: paste +created: 2024-03-13T06:04:42 +modified: 2024-04-02T00:12:41 tags: - aperture - nomad - docker +author: + - wizzdom --- # Pastebin - `wizzdom` diff --git a/docs/services/servers.md b/docs/services/servers.md index 3e490240..4a2628f5 100644 --- a/docs/services/servers.md +++ b/docs/services/servers.md @@ -1,3 +1,9 @@ +--- +title: servers +created: 2021-08-14T23:47:50 +modified: 2024-01-31T08:23:37 +--- + # Servers Redbrick provides two main servers ([Azazel](../hardware/azazel.md) and [Pygmalion](../hardware/pygmalion.md)) for it's members to use for various use cases, for example running applications or user programs. diff --git a/docs/services/socs.md b/docs/services/socs.md index 524951a5..99c6ce89 100644 --- a/docs/services/socs.md +++ b/docs/services/socs.md @@ -1,5 +1,7 @@ --- -title: Socs using Redbrick Infrastructure +title: socs +created: 2024-03-01T21:17:25 +modified: 2024-04-02T00:12:41 --- # Socs Using Redbrick Infrastructure diff --git a/docs/services/traefik.md b/docs/services/traefik.md index 8cc0b721..6810286a 100644 --- a/docs/services/traefik.md +++ b/docs/services/traefik.md @@ -1 +1,7 @@ +--- +title: traefik +created: 2023-12-02T14:18:51 +modified: 2023-12-07T12:00:14 +--- + # Traefik diff --git a/docs/services/user-vms.md b/docs/services/user-vms.md index f72bfb2f..89357371 100644 --- a/docs/services/user-vms.md +++ b/docs/services/user-vms.md @@ -1,12 +1,14 @@ --- -title: User VMs -author: - - distro - - wizzdom +title: user-vms +created: 2024-03-13T04:05:22 +modified: 2024-04-04T18:04:58 tags: - aperture - nomad - qemu +author: + - distro + - wizzdom --- # User VMs diff --git a/docs/services/znapzend.md b/docs/services/znapzend.md index ed941b56..a8b8c835 100644 --- a/docs/services/znapzend.md +++ b/docs/services/znapzend.md @@ -1,3 +1,9 @@ +--- +title: znapzend +created: 2021-06-29T04:44:29 +modified: 2024-01-31T08:23:37 +--- + # ZnapZend ## Overview From 75d6dff428f948d15b0d4047594737fa350e1e34 Mon Sep 17 00:00:00 2001 From: wizzdom Date: Fri, 26 Jul 2024 23:49:13 +0100 Subject: [PATCH 20/25] fix: frontmatter, update: hardcase, pyg, azazel (#44) --- docs/contact.md | 6 +++++- docs/hardware/aperture/about.md | 9 ++++++--- docs/hardware/aperture/chell.md | 9 ++++++--- docs/hardware/aperture/glados.md | 12 ++++++++---- docs/hardware/aperture/images.md | 12 ++++++++---- docs/hardware/aperture/index.md | 9 ++++++--- docs/hardware/aperture/johnson.md | 9 ++++++--- docs/hardware/aperture/wheatley.md | 9 ++++++--- docs/hardware/azazel.md | 11 +++++++---- docs/hardware/index.md | 6 +++++- docs/hardware/network/arse.md | 5 ++++- docs/hardware/network/cerberus.md | 8 +++++++- docs/hardware/network/index.md | 9 +++++++++ docs/hardware/network/mordor.md | 8 ++++++-- docs/hardware/network/switches.md | 5 ++++- docs/hardware/nix/hardcase.md | 14 +++++++++----- docs/hardware/nix/icarus.md | 9 ++++++--- docs/hardware/nix/motherlode.md | 9 ++++++--- docs/hardware/paphos.md | 11 +++++++---- docs/hardware/pygmalion.md | 12 ++++++++---- docs/hardware/zeus.md | 9 ++++++--- docs/index.md | 6 +++++- docs/procedures/ansible.md | 6 +++++- docs/procedures/cheatsheet.md | 6 +++++- docs/procedures/handover.md | 6 +++++- docs/procedures/index.md | 6 +++++- docs/procedures/irc-ops.md | 6 +++++- docs/procedures/new-admins.md | 6 +++++- docs/procedures/nixos.md | 6 +++++- ...nance-Tagging.md => open-governance-tagging.md} | 9 ++++++--- docs/procedures/policies.md | 6 +++++- docs/procedures/post-powercut.md | 6 +++++- docs/procedures/update-wp-domain.md | 8 ++++++-- docs/procedures/vpn.md | 6 +++++- docs/services/api.md | 13 ++++++++----- docs/services/bastion-vm.md | 9 ++++++--- docs/services/bind.md | 9 ++++++--- docs/services/consul.md | 6 +++++- docs/services/exposed.md | 12 ++++++------ docs/services/gitea.md | 6 +++++- docs/services/icecast.md | 6 +++++- docs/services/index.md | 6 +++++- docs/services/irc.md | 6 +++++- docs/services/ldap.md | 9 ++++++--- docs/services/md.md | 13 ++++++++----- docs/services/nfs.md | 6 +++++- docs/services/nomad.md | 9 ++++++--- docs/services/paste.md | 11 +++++++---- docs/services/servers.md | 12 ++++++++---- docs/services/socs.md | 6 +++++- docs/services/traefik.md | 6 +++++- docs/services/user-vms.md | 11 +++++++---- docs/services/wetty.md | 11 +++++++---- docs/services/znapzend.md | 6 +++++- 54 files changed, 322 insertions(+), 125 deletions(-) create mode 100644 docs/hardware/network/index.md rename docs/procedures/{Open-Governance-Tagging.md => open-governance-tagging.md} (97%) diff --git a/docs/contact.md b/docs/contact.md index 5ad879e8..eb0b63db 100644 --- a/docs/contact.md +++ b/docs/contact.md @@ -1,7 +1,11 @@ --- -title: contact +id: contact +aliases: + - Contact Us +tags: [] created: 2022-11-08T04:34:34 modified: 2024-03-13T06:05:10 +title: Contact Us --- # Contact Us diff --git a/docs/hardware/aperture/about.md b/docs/hardware/aperture/about.md index 3e6b19f2..ffe29a92 100644 --- a/docs/hardware/aperture/about.md +++ b/docs/hardware/aperture/about.md @@ -1,10 +1,13 @@ --- -title: about -created: 2022-05-16T01:44:40 -modified: 2024-03-13T04:49:14 +id: about +aliases: + - About Aperture tags: - aperture - hardware +created: 2022-05-16T01:44:40 +modified: 2024-03-13T04:49:14 +title: About Aperture --- # About Aperture diff --git a/docs/hardware/aperture/chell.md b/docs/hardware/aperture/chell.md index bb586b54..0870eeb2 100644 --- a/docs/hardware/aperture/chell.md +++ b/docs/hardware/aperture/chell.md @@ -1,12 +1,15 @@ --- -title: chell -created: 2023-12-04T22:28:41 -modified: 2024-03-13T04:49:14 +id: chell +aliases: + - Chell tags: - hardware - aperture - chell - details +created: 2023-12-04T22:28:41 +modified: 2024-03-13T04:49:14 +title: Chell --- # Chell diff --git a/docs/hardware/aperture/glados.md b/docs/hardware/aperture/glados.md index 6128ca82..a741d569 100644 --- a/docs/hardware/aperture/glados.md +++ b/docs/hardware/aperture/glados.md @@ -1,15 +1,19 @@ --- -title: glados -created: 2023-12-04T22:28:41 -modified: 2024-03-13T04:49:14 +id: glados +aliases: + - Glados + - GlaDOS tags: - hardware - aperture - glados - details +created: 2023-12-04T22:28:41 +modified: 2024-03-13T04:49:14 +title: GlaDOS --- -# Glados +# GlaDOS ## Details diff --git a/docs/hardware/aperture/images.md b/docs/hardware/aperture/images.md index 5bdd20fb..33d96ffc 100644 --- a/docs/hardware/aperture/images.md +++ b/docs/hardware/aperture/images.md @@ -1,15 +1,19 @@ --- -title: images -created: 2024-03-01T21:17:25 -modified: 2024-03-13T04:49:14 +id: images +aliases: + - Images + - Aperture Images tags: - hardware - aperture - install - images +created: 2024-03-01T21:17:25 +modified: 2024-03-13T04:49:14 +title: Aperture Images --- -# Images +# Aperture Images ## Servers diff --git a/docs/hardware/aperture/index.md b/docs/hardware/aperture/index.md index 0bf14f84..b10da44b 100644 --- a/docs/hardware/aperture/index.md +++ b/docs/hardware/aperture/index.md @@ -1,11 +1,14 @@ --- -title: index -created: 2022-05-16T01:44:40 -modified: 2024-03-13T04:49:14 +id: index +aliases: + - Aperture tags: - aperture - details - getting-started +created: 2022-05-16T01:44:40 +modified: 2024-03-13T04:49:14 +title: Aperture --- # Aperture diff --git a/docs/hardware/aperture/johnson.md b/docs/hardware/aperture/johnson.md index b8e41f66..251c1b38 100644 --- a/docs/hardware/aperture/johnson.md +++ b/docs/hardware/aperture/johnson.md @@ -1,12 +1,15 @@ --- -title: johnson -created: 2023-12-06T01:22:03 -modified: 2024-03-13T04:49:14 +id: johnson +aliases: + - Johnson tags: - aperture - hardware - johnson - details +created: 2023-12-06T01:22:03 +modified: 2024-03-13T04:49:14 +title: Johnson --- # Johnson diff --git a/docs/hardware/aperture/wheatley.md b/docs/hardware/aperture/wheatley.md index d4c805c7..bc1af761 100644 --- a/docs/hardware/aperture/wheatley.md +++ b/docs/hardware/aperture/wheatley.md @@ -1,12 +1,15 @@ --- -title: wheatley -created: 2023-12-04T22:28:41 -modified: 2024-03-13T04:49:14 +id: wheatley +aliases: + - Wheatley tags: - aperture - hardware - wheatley - details +created: 2023-12-04T22:28:41 +modified: 2024-03-13T04:49:14 +title: Wheatley --- # Wheatley diff --git a/docs/hardware/azazel.md b/docs/hardware/azazel.md index 32b87eb1..c1527031 100644 --- a/docs/hardware/azazel.md +++ b/docs/hardware/azazel.md @@ -1,13 +1,16 @@ --- -title: azazel -created: 2023-12-02T14:18:51 -modified: 2024-03-13T04:49:14 +id: azazel +aliases: + - Azazel tags: - login-box - hardware - azazel - details - debian +created: 2023-12-02T14:18:51 +modified: 2024-03-13T04:49:14 +title: Azazel --- # Azazel @@ -15,7 +18,7 @@ tags: ## Details - **Type**: Dell PowerEdge R515 -- **OS**: Debian 10 +- **OS**: Debian 12 `bookworm` - **CPU**: 2 x AMD Opteron 4180 @ 2.6Ghz - **RAM**: 16GB - **Storage**: Dell PERC H200 Integrated RAID Controller diff --git a/docs/hardware/index.md b/docs/hardware/index.md index 8d3d6127..18c4a9d9 100644 --- a/docs/hardware/index.md +++ b/docs/hardware/index.md @@ -1,7 +1,11 @@ --- -title: index +id: index +aliases: + - Hardware +tags: [] created: 2023-12-04T22:35:50 modified: 2024-03-01T21:17:25 +title: Hardware --- # Hardware diff --git a/docs/hardware/network/arse.md b/docs/hardware/network/arse.md index 1228d92b..783a196d 100644 --- a/docs/hardware/network/arse.md +++ b/docs/hardware/network/arse.md @@ -1,5 +1,8 @@ --- -title: arse +id: arse +aliases: [] +tags: [] created: 2024-03-01T21:17:25 modified: 2024-03-01T21:17:25 +title: Arse --- diff --git a/docs/hardware/network/cerberus.md b/docs/hardware/network/cerberus.md index 6537cf81..0af41a3f 100644 --- a/docs/hardware/network/cerberus.md +++ b/docs/hardware/network/cerberus.md @@ -1,5 +1,11 @@ --- -title: cerberus +id: cerberus +aliases: + - cerberus + - srx + - SRX +tags: [] created: 2024-03-01T21:17:25 modified: 2024-03-01T21:17:25 +title: Cerberus (SRX) --- diff --git a/docs/hardware/network/index.md b/docs/hardware/network/index.md new file mode 100644 index 00000000..d69bbb43 --- /dev/null +++ b/docs/hardware/network/index.md @@ -0,0 +1,9 @@ +--- +id: index +aliases: + - Redbrick Network Architecture +tags: [] +title: Redbrick Network Architecture +--- + +# Redbrick Network Architecture diff --git a/docs/hardware/network/mordor.md b/docs/hardware/network/mordor.md index 231110d2..da614ae9 100644 --- a/docs/hardware/network/mordor.md +++ b/docs/hardware/network/mordor.md @@ -1,7 +1,11 @@ --- -title: mordor +id: mordor +aliases: + - Mordor +tags: [] created: 2022-05-16T02:53:25 modified: 2024-03-01T21:17:25 +title: Mordor --- # Mordor @@ -35,7 +39,7 @@ There is a "super admin" account that can be used for **local access only**, det The UDM Pro should be kept up to date at all times using the web interface. Please ensure there are no breaking changes before updating. > [!ERROR] AUTO UPDATES SHOULD NEVER BE ENABLED! -> This is to prevent a bad update from breaking the UDM Pro and thus the entire network. +> This is to prevent a bad update from breaking the UDM Pro and thus the entire network. > If you are confident that Unifi can produce stable updates, you may turn it on, however please let the next admins know that you have done this (and update these docs with a comment!). ### Advanced Settings diff --git a/docs/hardware/network/switches.md b/docs/hardware/network/switches.md index f7c644d5..58134882 100644 --- a/docs/hardware/network/switches.md +++ b/docs/hardware/network/switches.md @@ -1,5 +1,8 @@ --- -title: switches +id: switches +aliases: [] +tags: [] created: 2024-03-01T21:17:25 modified: 2024-03-01T21:17:25 +title: switches --- diff --git a/docs/hardware/nix/hardcase.md b/docs/hardware/nix/hardcase.md index 99ffa04a..a928e153 100644 --- a/docs/hardware/nix/hardcase.md +++ b/docs/hardware/nix/hardcase.md @@ -1,12 +1,15 @@ --- -title: hardcase -created: 2023-12-04T22:28:41 -modified: 2024-03-13T04:49:14 +id: hardcase +aliases: + - Hardcase tags: - nixos - hardware - details - hardcase +created: 2023-12-04T22:28:41 +modified: 2024-03-13T04:49:14 +title: Hardcase --- # Hardcase @@ -34,7 +37,8 @@ tags: ## Services - postgreSQL -- ~~git~~ - apache -- [pastebin](https://paste.redbrick.dcu.ie) - ~~monitoring~~ +- postfix (SMTP) +- dovecot (IMAP) +- mailman - mailing lists diff --git a/docs/hardware/nix/icarus.md b/docs/hardware/nix/icarus.md index 751ddbed..8b1d1bf9 100644 --- a/docs/hardware/nix/icarus.md +++ b/docs/hardware/nix/icarus.md @@ -1,13 +1,16 @@ --- -title: icarus -created: 2021-06-28T23:17:10 -modified: 2024-03-13T04:49:14 +id: icarus +aliases: + - Icarus tags: - nixos - hardware - icarus - daedalus - details +created: 2021-06-28T23:17:10 +modified: 2024-03-13T04:49:14 +title: Icarus --- # Icarus diff --git a/docs/hardware/nix/motherlode.md b/docs/hardware/nix/motherlode.md index d86656ca..73743b00 100644 --- a/docs/hardware/nix/motherlode.md +++ b/docs/hardware/nix/motherlode.md @@ -1,7 +1,7 @@ --- -title: motherlode -created: 2023-12-04T22:28:41 -modified: 2024-03-13T04:49:14 +id: motherlode +aliases: + - Motherlode tags: - nixos - hardware @@ -9,6 +9,9 @@ tags: - details - qemu - libvirt +created: 2023-12-04T22:28:41 +modified: 2024-03-13T04:49:14 +title: Motherlode --- # Motherlode diff --git a/docs/hardware/paphos.md b/docs/hardware/paphos.md index 08cb035c..f193ddeb 100644 --- a/docs/hardware/paphos.md +++ b/docs/hardware/paphos.md @@ -1,7 +1,7 @@ --- -title: paphos -created: 2023-12-02T14:18:51 -modified: 2024-03-13T04:49:14 +id: paphos +aliases: + - Paphos tags: - hardware - paphos @@ -9,6 +9,9 @@ tags: - dns - bind - ubuntu +created: 2023-12-02T14:18:51 +modified: 2024-03-13T04:49:14 +title: Paphos --- # Paphos @@ -16,7 +19,7 @@ tags: ## Details - **Type**: Dell PowerEdge R710 -- **OS**: Ubuntu 14.04.5 LTS +- **OS**: Ubuntu 14.04.5 LTS 😭 - **CPU**: 2 x Intel Xeon CPU E5620 @ 2.40Ghz - **RAM**: 16GB - **Drives**: Internal SATA DVD±RW diff --git a/docs/hardware/pygmalion.md b/docs/hardware/pygmalion.md index b95cf3dc..e2469631 100644 --- a/docs/hardware/pygmalion.md +++ b/docs/hardware/pygmalion.md @@ -1,12 +1,16 @@ --- -title: pygmalion -created: 2023-12-02T14:18:51 -modified: 2024-03-13T04:49:14 +id: pygmalion +aliases: + - Pygmalion + - pyg tags: - login-box - hardware - pygmalion - ubuntu +created: 2023-12-02T14:18:51 +modified: 2024-03-13T04:49:14 +title: Pygmalion --- # Pygmalion @@ -14,7 +18,7 @@ tags: ## Details - **Type**: Intel(R) Xeon (R) -- **OS**: Ubuntu 18.04 +- **OS**: Debian 12 `bookworm` - **CPU**: 2x Intel (R) Xeon (R) E5620 2.46GHz - **RAM**: 16GB - **Network**: 4x Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet diff --git a/docs/hardware/zeus.md b/docs/hardware/zeus.md index a53ad8b7..10125477 100644 --- a/docs/hardware/zeus.md +++ b/docs/hardware/zeus.md @@ -1,13 +1,16 @@ --- -title: zeus -created: 2023-12-02T14:18:51 -modified: 2024-03-13T04:49:14 +id: zeus +aliases: + - Zeus tags: - hardware - zeus - details - docker - ubuntu +created: 2023-12-02T14:18:51 +modified: 2024-03-13T04:49:14 +title: Zeus --- # Zeus diff --git a/docs/index.md b/docs/index.md index 3346227d..f0a23884 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,7 +1,11 @@ --- -title: index +id: index +aliases: + - Home +tags: [] created: 2021-06-28T22:38:22 modified: 2024-03-13T06:05:10 +title: Home --- # Home diff --git a/docs/procedures/ansible.md b/docs/procedures/ansible.md index 7c40a8b8..5c6d2f90 100644 --- a/docs/procedures/ansible.md +++ b/docs/procedures/ansible.md @@ -1,7 +1,11 @@ --- -title: ansible +id: ansible +aliases: + - Ansible +tags: [] created: 2022-11-08T04:34:34 modified: 2024-03-01T21:17:25 +title: Ansible --- # Ansible diff --git a/docs/procedures/cheatsheet.md b/docs/procedures/cheatsheet.md index 96df838a..e99f2e9b 100644 --- a/docs/procedures/cheatsheet.md +++ b/docs/procedures/cheatsheet.md @@ -1,7 +1,11 @@ --- -title: cheatsheet +id: cheatsheet +aliases: + - Cheatsheet +tags: [] created: 2021-06-28T23:17:10 modified: 2024-03-13T06:05:10 +title: Cheatsheet --- # Cheatsheet diff --git a/docs/procedures/handover.md b/docs/procedures/handover.md index c650bfe6..9c8ad436 100644 --- a/docs/procedures/handover.md +++ b/docs/procedures/handover.md @@ -1,7 +1,11 @@ --- -title: handover +id: handover +aliases: + - Committee Handover +tags: [] created: 2022-05-16T00:59:20 modified: 2024-01-30T01:31:37 +title: Handover --- # Committee Handover diff --git a/docs/procedures/index.md b/docs/procedures/index.md index 47c2c5db..ce3beb19 100644 --- a/docs/procedures/index.md +++ b/docs/procedures/index.md @@ -1,7 +1,11 @@ --- -title: index +id: index +aliases: + - Procedures +tags: [] created: 2023-12-05T01:36:11 modified: 2024-03-13T06:05:10 +title: Procedures --- # Procedures diff --git a/docs/procedures/irc-ops.md b/docs/procedures/irc-ops.md index d97d7e97..1d5d47f7 100644 --- a/docs/procedures/irc-ops.md +++ b/docs/procedures/irc-ops.md @@ -1,7 +1,11 @@ --- -title: irc-ops +id: irc-ops +aliases: + - IRC Ops +tags: [] created: 2023-12-05T01:36:11 modified: 2024-01-31T08:23:37 +title: IRC Ops --- # IRC Ops diff --git a/docs/procedures/new-admins.md b/docs/procedures/new-admins.md index 6510d7e3..c88af92d 100644 --- a/docs/procedures/new-admins.md +++ b/docs/procedures/new-admins.md @@ -1,7 +1,11 @@ --- -title: new-admins +id: new-admins +aliases: + - New Elected Admins +tags: [] created: 2023-12-05T01:36:11 modified: 2024-01-31T08:23:37 +title: New Elected Admins --- # New Elected Admins diff --git a/docs/procedures/nixos.md b/docs/procedures/nixos.md index 45792947..8f94a0ca 100644 --- a/docs/procedures/nixos.md +++ b/docs/procedures/nixos.md @@ -1,7 +1,11 @@ --- -title: nixos +id: nixos +aliases: + - NixOS +tags: [] created: 2023-12-05T01:36:11 modified: 2024-01-31T08:23:37 +title: NixOS --- # NixOS diff --git a/docs/procedures/Open-Governance-Tagging.md b/docs/procedures/open-governance-tagging.md similarity index 97% rename from docs/procedures/Open-Governance-Tagging.md rename to docs/procedures/open-governance-tagging.md index e82cb829..fc46159f 100644 --- a/docs/procedures/Open-Governance-Tagging.md +++ b/docs/procedures/open-governance-tagging.md @@ -1,7 +1,7 @@ --- -title: Open-Governance-Tagging -created: 2024-05-07T00:23:58 -modified: 2024-05-07T00:23:58 +id: open-governance-tagging +aliases: + - Open Governance Tagging - `hypnoant`, `wizzdom` tags: - open-gov - gpg @@ -9,6 +9,9 @@ tags: author: - hypnoant - wizzdom +created: 2024-05-07T00:23:58 +modified: 2024-05-07T00:23:58 +title: Open Governance Tagging --- # Open Governance Tagging - `hypnoant`, `wizzdom` diff --git a/docs/procedures/policies.md b/docs/procedures/policies.md index 40216755..83612239 100644 --- a/docs/procedures/policies.md +++ b/docs/procedures/policies.md @@ -1,7 +1,11 @@ --- -title: policies +id: policies +aliases: + - Redbrick System Administrator Policies +tags: [] created: 2023-12-05T01:36:11 modified: 2024-01-30T01:31:37 +title: Systems Administrator Policies --- # Redbrick System Administrator Policies diff --git a/docs/procedures/post-powercut.md b/docs/procedures/post-powercut.md index 40fb863f..856905a3 100644 --- a/docs/procedures/post-powercut.md +++ b/docs/procedures/post-powercut.md @@ -1,7 +1,11 @@ --- -title: post-powercut +id: post-powercut +aliases: + - Post-powercut Todo List +tags: [] created: 2023-12-05T01:36:11 modified: 2024-01-31T08:23:37 +title: Post-Powercut Todo List --- # Post-powercut Todo List diff --git a/docs/procedures/update-wp-domain.md b/docs/procedures/update-wp-domain.md index ded6dbeb..bdd1fbf5 100644 --- a/docs/procedures/update-wp-domain.md +++ b/docs/procedures/update-wp-domain.md @@ -1,12 +1,16 @@ --- -title: update-wp-domain +id: update-wp-domain +aliases: + - Update a WordPress Domain - `wizzdom`, `distro` +tags: [] created: 2024-01-25T04:31:32 modified: 2024-01-31T08:23:37 +title: Update a WordPress Domain --- # Update a WordPress Domain - `wizzdom`, `distro` -Redbrick hosts a variety of services and websites for various clubs and societies in DCU. Oftentimes these websites hosted for societies run on WordPress due to it's ease of use. +Redbrick hosts a variety of services and websites for various clubs and societies in DCU. Oftentimes these websites hosted for societies run on WordPress due to it's ease of use. However, what happens when you no longer have access to the domain? You can change the domain on the webserver however WordPress will redirect you to the old domain. In this case you must update the database to change the domain. This happened with TheCollegeView in 2023, you can read more about that [here](https://github.com/redbrick/open-governance/tree/master/admin/) diff --git a/docs/procedures/vpn.md b/docs/procedures/vpn.md index afae2534..aaeb5a84 100644 --- a/docs/procedures/vpn.md +++ b/docs/procedures/vpn.md @@ -1,7 +1,11 @@ --- -title: vpn +id: vpn +aliases: + - Admin VPN +tags: [] created: 2022-09-05T04:00:22 modified: 2024-03-01T21:17:25 +title: Admin VPN --- # Admin VPN diff --git a/docs/services/api.md b/docs/services/api.md index 6758f3e3..4191557b 100644 --- a/docs/services/api.md +++ b/docs/services/api.md @@ -1,11 +1,14 @@ --- -title: api -created: 2021-08-13T23:28:49 -modified: 2024-03-31T18:48:31 +id: api +aliases: + - Redbrick Administrative Web API tags: - services - api - ldap +created: 2021-08-13T23:28:49 +modified: 2024-03-31T18:48:31 +title: Admin API --- # Redbrick Administrative Web API @@ -120,7 +123,7 @@ print(response.text) As the FastAPI server for the API is hosted inside of a Docker container, there are limitations to the commands we can execute that affect the "outside" world. -*This is especially important with commands that rely on LDAP.* +*This is especially important with commands that rely on LDAP.* For example inside the `ldap-register.sh` script used by the `/register` endpoint. @@ -130,7 +133,7 @@ For example inside the `ldap-register.sh` script used by the `/register` endpoin *How do we fix this?* -Instead of relying on using users/group names for the `chown` command, it is advisable to instead use their unique id's. +Instead of relying on using users/group names for the `chown` command, it is advisable to instead use their unique id's. ```bash # For example, the following commands are equivalent. diff --git a/docs/services/bastion-vm.md b/docs/services/bastion-vm.md index b2dd5591..e56172aa 100644 --- a/docs/services/bastion-vm.md +++ b/docs/services/bastion-vm.md @@ -1,13 +1,16 @@ --- -title: bastion-vm -created: 2024-01-23T15:43:40 -modified: 2024-04-02T00:12:41 +id: bastion-vm +aliases: + - Bastion VM tags: - aperture - services - nomad - vm - ingress +created: 2024-01-23T15:43:40 +modified: 2024-04-02T00:12:41 +title: Bastion VM --- # Bastion VM diff --git a/docs/services/bind.md b/docs/services/bind.md index 7057213e..757f1204 100644 --- a/docs/services/bind.md +++ b/docs/services/bind.md @@ -1,7 +1,7 @@ --- -title: bind -created: 2021-06-29T04:44:29 -modified: 2024-04-03T17:52:43 +id: bind +aliases: + - Bind9 - `distro`, `ylmcc`, `wizzdom` tags: - services - dns @@ -9,6 +9,9 @@ author: - distro - ylmcc - wizzdom +created: 2021-06-29T04:44:29 +modified: 2024-04-03T17:52:43 +title: Bind (DNS) --- # Bind9 - `distro`, `ylmcc`, `wizzdom` diff --git a/docs/services/consul.md b/docs/services/consul.md index 546ae866..3b3a6582 100644 --- a/docs/services/consul.md +++ b/docs/services/consul.md @@ -1,7 +1,11 @@ --- -title: consul +id: consul +aliases: + - Consul +tags: [] created: 2023-12-07T12:00:14 modified: 2024-03-01T21:17:25 +title: Consul --- # Consul diff --git a/docs/services/exposed.md b/docs/services/exposed.md index b16a24ca..da467b27 100644 --- a/docs/services/exposed.md +++ b/docs/services/exposed.md @@ -1,15 +1,15 @@ --- -title: exposed -created: 2023-12-02T14:11:33 -modified: 2024-07-16T23:41:06 +id: exposed +aliases: + - Services Exposed to the Internet - `wizzdom` tags: - services - exposed -aliases: - - Services Exposed to the Internet - `wizzdom` author: - wizzdom -id: exposed +created: 2023-12-02T14:11:33 +modified: 2024-07-16T23:41:06 +title: Services Exposed to the Internet --- # Services Exposed to the Internet - `wizzdom` diff --git a/docs/services/gitea.md b/docs/services/gitea.md index 0a24dfcc..1e43a2a5 100644 --- a/docs/services/gitea.md +++ b/docs/services/gitea.md @@ -1,7 +1,11 @@ --- -title: gitea +id: gitea +aliases: + - Gitea +tags: [] created: 2021-06-29T04:44:29 modified: 2024-01-31T08:23:37 +title: Gitea --- # Gitea diff --git a/docs/services/icecast.md b/docs/services/icecast.md index ac5ffe09..6a284906 100644 --- a/docs/services/icecast.md +++ b/docs/services/icecast.md @@ -1,7 +1,11 @@ --- -title: icecast +id: icecast +aliases: + - Icecast +tags: [] created: 2022-11-08T04:34:34 modified: 2024-03-01T21:17:25 +title: Icecast --- # Icecast diff --git a/docs/services/index.md b/docs/services/index.md index 001794c4..0fde14f1 100644 --- a/docs/services/index.md +++ b/docs/services/index.md @@ -1,7 +1,11 @@ --- -title: index +id: index +aliases: + - Preface +tags: [] created: 2021-06-29T04:44:29 modified: 2024-04-02T00:12:41 +title: Services --- # Preface diff --git a/docs/services/irc.md b/docs/services/irc.md index df01b917..094f9695 100644 --- a/docs/services/irc.md +++ b/docs/services/irc.md @@ -1,7 +1,11 @@ --- -title: irc +id: irc +aliases: + - IRC +tags: [] created: 2021-06-29T04:44:29 modified: 2024-03-13T04:49:14 +title: IRC --- # IRC diff --git a/docs/services/ldap.md b/docs/services/ldap.md index 3160b4bc..ecb41b58 100644 --- a/docs/services/ldap.md +++ b/docs/services/ldap.md @@ -1,13 +1,16 @@ --- -title: ldap -created: 2024-03-13T06:05:23 -modified: 2024-03-13T06:05:23 +id: ldap +aliases: + - LDAP - `m1cr0man` tags: - ldap - icarus - daedalus author: - m1cr0man +created: 2024-03-13T06:05:23 +modified: 2024-03-13T06:05:23 +title: LDAP --- # LDAP - `m1cr0man` diff --git a/docs/services/md.md b/docs/services/md.md index d56e94e8..f3f8ddbd 100644 --- a/docs/services/md.md +++ b/docs/services/md.md @@ -1,13 +1,16 @@ --- -title: md -created: 2024-03-13T04:32:53 -modified: 2024-04-02T00:12:41 +id: md +aliases: + - HedgeDoc - `wizzdom` tags: - aperture - nomad - docker author: - wizzdom +created: 2024-03-13T04:32:53 +modified: 2024-04-02T00:12:41 +title: MD (HedgeDoc) --- # HedgeDoc - `wizzdom` @@ -16,7 +19,7 @@ HedgeDoc is deployed with [nomad](nomad.md) on [`aperture`](../hardware/aperture HedgeDoc auths against LDAP and its configuration is available [here](https://github.com/redbrick/nomad/blob/master/jobs/services/hedgedoc.hcl) -All sensitive variables are stored in the [`consul`](consul.md) KV store. +All sensitive variables are stored in the [`consul`](consul.md) KV store. The important points are as follows: @@ -45,7 +48,7 @@ CMD_LDAP_USERIDFIELD = "uidNumber" CMD_LDAP_USERNAMEFIELD = "uid" ``` -See the [HedgeDoc docs](https://docs.hedgedoc.org/configuration/) for more info on configuration. +See the [HedgeDoc docs](https://docs.hedgedoc.org/configuration/) for more info on configuration. ## Backups diff --git a/docs/services/nfs.md b/docs/services/nfs.md index 580e4d78..40f24fca 100644 --- a/docs/services/nfs.md +++ b/docs/services/nfs.md @@ -1,7 +1,11 @@ --- -title: nfs +id: nfs +aliases: + - NFS / Network File Storage +tags: [] created: 2021-06-29T04:44:29 modified: 2024-01-31T08:23:37 +title: NFS --- # NFS / Network File Storage diff --git a/docs/services/nomad.md b/docs/services/nomad.md index 04dfb3b3..d9d9f3f7 100644 --- a/docs/services/nomad.md +++ b/docs/services/nomad.md @@ -1,13 +1,16 @@ --- -title: nomad -created: 2023-10-11T02:53:18 -modified: 2024-04-02T00:12:29 +id: nomad +aliases: + - Nomad - `distro`, `wizzdom` tags: - nomad - aperture author: - distro - wizzdom +created: 2023-10-11T02:53:18 +modified: 2024-04-02T00:12:29 +title: Nomad --- # Nomad - `distro`, `wizzdom` diff --git a/docs/services/paste.md b/docs/services/paste.md index c5847b2e..8e7861aa 100644 --- a/docs/services/paste.md +++ b/docs/services/paste.md @@ -1,13 +1,16 @@ --- -title: paste -created: 2024-03-13T06:04:42 -modified: 2024-04-02T00:12:41 +id: paste +aliases: + - Pastebin - `wizzdom` tags: - aperture - nomad - docker author: - wizzdom +created: 2024-03-13T06:04:42 +modified: 2024-04-02T00:12:41 +title: Pastebin --- # Pastebin - `wizzdom` @@ -18,7 +21,7 @@ Redbrick currently uses [Privatebin](https://github.com/PrivateBin/PrivateBin) a The Privatebin instance is deployed with [nomad](nomad.md) on [`aperture`](../hardware/aperture/index.md). Its configuration is available [here](https://github.com/redbrick/nomad/blob/master/jobs/services/privatebin.hcl). Privatebin doesn't support full configuration via environment variables but instead uses a `conf.php` file. This is passed in using [nomad templates](https://developer.hashicorp.com/nomad/docs/job-specification/template). -All sensitive variables are stored in the [`consul`](consul.md) KV store. +All sensitive variables are stored in the [`consul`](consul.md) KV store. The main points are as follows: diff --git a/docs/services/servers.md b/docs/services/servers.md index 4a2628f5..eb681e71 100644 --- a/docs/services/servers.md +++ b/docs/services/servers.md @@ -1,7 +1,11 @@ --- -title: servers +id: servers +aliases: + - Servers +tags: [] created: 2021-08-14T23:47:50 modified: 2024-01-31T08:23:37 +title: Servers --- # Servers @@ -10,7 +14,7 @@ Redbrick provides two main servers ([Azazel](../hardware/azazel.md) and [Pygmali ## Entrypoints -The main login server used in Redbrick is [Azazel](../hardware/azazel.md). You may also log in to [Pygmalion](../hardware/pygmalion.md) if you wish at `pyg.redbrick.dcu.ie` +The main login server used in Redbrick is [Azazel](../hardware/azazel.md). You may also log in to [Pygmalion](../hardware/pygmalion.md) if you wish at `pyg.redbrick.dcu.ie` **2 Factor Authentication is required to log in to Redbrick servers.** This is done via an SSH key and your Redbrick username/password combination. For more information on how to create an SSH key, and configure your account for 2FA, please read below. @@ -86,7 +90,7 @@ This key is saved under .ssh under your User directory. (i.e `C:\Users\Bob\.ssh\ ### 3. Copying the Public Key to the Server -In this step we store our **public** key on the server we intend to log in to. This key will be used against our secret private key to authenticate our login. +In this step we store our **public** key on the server we intend to log in to. This key will be used against our secret private key to authenticate our login. For the purposes of this tutorial we will be using [Pygmalion](../hardware/pygmalion.md) (`pyg.redbrick.dcu.ie`) as our server. @@ -133,7 +137,7 @@ This command will append your public key to the end of the `authorized_keys` fil nano ~/.ssh/authorized_keys ``` -Congratulations! If you've made it this far, [you're ready to login](#logging-in) now. +Congratulations! If you've made it this far, [you're ready to login](#logging-in) now. ## Forgot Your Password? diff --git a/docs/services/socs.md b/docs/services/socs.md index 99c6ce89..d551bd2e 100644 --- a/docs/services/socs.md +++ b/docs/services/socs.md @@ -1,7 +1,11 @@ --- -title: socs +id: socs +aliases: + - Socs Using Redbrick Infrastructure +tags: [] created: 2024-03-01T21:17:25 modified: 2024-04-02T00:12:41 +title: Socs using Redbrick Infrastructure --- # Socs Using Redbrick Infrastructure diff --git a/docs/services/traefik.md b/docs/services/traefik.md index 6810286a..2185e573 100644 --- a/docs/services/traefik.md +++ b/docs/services/traefik.md @@ -1,7 +1,11 @@ --- -title: traefik +id: traefik +aliases: + - Traefik +tags: [] created: 2023-12-02T14:18:51 modified: 2023-12-07T12:00:14 +title: Traefik --- # Traefik diff --git a/docs/services/user-vms.md b/docs/services/user-vms.md index 89357371..34d95fad 100644 --- a/docs/services/user-vms.md +++ b/docs/services/user-vms.md @@ -1,7 +1,7 @@ --- -title: user-vms -created: 2024-03-13T04:05:22 -modified: 2024-04-04T18:04:58 +id: user-vms +aliases: + - User VMs tags: - aperture - nomad @@ -9,11 +9,14 @@ tags: author: - distro - wizzdom +created: 2024-03-13T04:05:22 +modified: 2024-04-04T18:04:58 +title: User VMs --- # User VMs -User VMs are deployed on [`aperture`](../hardware/aperture/index.md) using [nomad](nomad.md)'s [QEMU driver](https://developer.hashicorp.com/nomad/docs/drivers/qemu). +User VMs are deployed on [`aperture`](../hardware/aperture/index.md) using [nomad](nomad.md)'s [QEMU driver](https://developer.hashicorp.com/nomad/docs/drivers/qemu). Each VM is configured with cloud-init. Those configuration files are served by [`wheatley`](../hardware/aperture/wheatley.md), but they can be served by any HTTP server. diff --git a/docs/services/wetty.md b/docs/services/wetty.md index ec93e646..51abb35e 100644 --- a/docs/services/wetty.md +++ b/docs/services/wetty.md @@ -1,20 +1,23 @@ --- -title: Wetty -created: 2024-07-16T23:52:13 -modified: 2024-07-18T23:08:33 +id: wetty +aliases: + - Wetty - `wizzdom` tags: - aperture - nomad - docker author: - wizzdom +created: 2024-07-16T23:52:13 +modified: 2024-07-18T23:08:33 +title: Wetty --- # Wetty - `wizzdom` Redbrick uses [Wetty](https://github.com/butlerx/wetty) as our web terminal of choice. It is accessible at [wetty.redbrick.dcu.ie](https://wetty.redbrick.dcu.ie), [wetty.rb.dcu.ie](https://wetty.rb.dcu.ie),[term.redbrick.dcu.ie](https://term.redbrick.dcu.ie), [anyterm.redbrick.dcu.ie](https://anyterm.redbrick.dcu.ie) and [ajaxterm.redbrick.dcu.ie](https://ajaxterm.redbrick.dcu.ie). -*Why all the different domains?* - ***For legacy reasons!*** +*Why all the different domains?* - ***For legacy reasons!*** The configuration is located [here](https://github.com/redbrick/nomad/blob/master/jobs/services/wetty.hcl) diff --git a/docs/services/znapzend.md b/docs/services/znapzend.md index a8b8c835..a13979bb 100644 --- a/docs/services/znapzend.md +++ b/docs/services/znapzend.md @@ -1,7 +1,11 @@ --- -title: znapzend +id: znapzend +aliases: + - ZnapZend +tags: [] created: 2021-06-29T04:44:29 modified: 2024-01-31T08:23:37 +title: ZnapZend --- # ZnapZend From 2c72153f06f66494696aefcaecb646a50e4e8f64 Mon Sep 17 00:00:00 2001 From: wizzdom Date: Fri, 27 Sep 2024 14:19:29 +0100 Subject: [PATCH 21/25] procedures: update post-powercut doc (#45) --- docs/procedures/post-powercut.md | 31 ++++++++++++++++++++----------- docs/services/user-vms.md | 2 +- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/docs/procedures/post-powercut.md b/docs/procedures/post-powercut.md index 856905a3..3e9d67f2 100644 --- a/docs/procedures/post-powercut.md +++ b/docs/procedures/post-powercut.md @@ -2,24 +2,33 @@ id: post-powercut aliases: - Post-powercut Todo List -tags: [] +tags: + - powercut + - todo created: 2023-12-05T01:36:11 -modified: 2024-01-31T08:23:37 -title: Post-Powercut Todo List +modified: 2024-09-27T13:35:28 +title: post-powercut --- # Post-powercut Todo List A list of things that should be done/checked immediately after a power cut: -- Check KVM, hit ctrl+D on minerva to make sure it boots. -- Check KVM, hit F1 on sprout to make sure it boots -- Check KVM, sometimes you need to press F1 on carbon for it to boot -- Stop Exim on the mail server (Morpheus) until minerva (NFS) is online. -- If LDAP is down, you'll need to use the ALOM to do the next step. -- Check that ldapclient started (svcs -xv). If it didn't, run svcadm clear ldap/client to make it start. This usually happens because murphy comes back before morpheus does, and the LDAP client won't start due to lack of an LDAP server. -- Apache on [hardcase](../hardware/nix/hardcase.md) sometimes tries to start before networking is finished starting. To fix it, disable/re-enable it a few times. This usually makes it turn on. -- [paphos](../hardware/paphos.md) is old and sometimes its time will become out of sync. To make sure its time is accurate, run: +- Ensure the [`aperture`](../hardware/aperture/index.md) servers have the correct IP addresses: + - `eno1` should have the internal IP address (`10.10.0.0/24`) - this should be reserved by DHCP on [`mordor`](../hardware/network/mordor.md) + - `eno2` should have *no IP address* + - `br0` should have the external IP address (`136.206.16.0/24`) - this should also be reserved by DHCP on [`mordor`](../hardware/network/mordor.md) +- If the [`bastion-vm`](../services/bastion-vm.md) fails to start, check: + - `/storage` is mounted `rw` on each [`aperture`](docs/hardware/aperture/index.md) server + - `br0` is present and configured on each [`aperture`](docs/hardware/aperture/index.md) server + - `vm-resources.service.consul` is running and `http://vm-resources.service.consul:8000/bastion/bastion-vm-latest.qcow2` is accessible + - if the `latest` symlink points to a corrupted image, `ln -sf` it to an earlier one +- All the [`nixos`](docs/procedures/nixos.md) boxes rely on [`DNS`](docs/services/bind.md) for [`ldap`](docs/services/ldap.md) and [`nfs`](docs/services/nfs.md): + - Make sure bind is running on [`paphos`](docs/hardware/paphos.md) + - mount `/storage` + - `systemctl restart` `httpd`, `php-fpm-rbusers-*` and `ldap` +- Apache on [`hardcase`](../hardware/nix/hardcase.md) sometimes tries to start before networking is finished starting. To fix it, disable/re-enable it a few times. This usually makes it turn on. +- [`paphos`](../hardware/paphos.md) is old and sometimes its time will become out of sync. To make sure its time is accurate, run: ```bash sudo service ntp restart diff --git a/docs/services/user-vms.md b/docs/services/user-vms.md index 34d95fad..774206f3 100644 --- a/docs/services/user-vms.md +++ b/docs/services/user-vms.md @@ -38,7 +38,7 @@ sudo ip link set dev br0 up We'll be adding a physical interface to this bridge to allow it to communicate with the external ([UDM](../hardware/network/mordor.md)) network. ```bash -sudo ip link set eno1 master br0 +sudo ip link set eno2 master br0 ``` You'll need to assign an IP address to the bridge interface. This will be used as the default address for the host. You can do this with DHCP or by assigning a static IP address. The best way to do this is to create a DHCP static lease on the [UDM](../hardware/network/mordor.md) for the bridge interface MAC address. From eab288592684f9a86fe46f1e065f0c10f2ae99ae Mon Sep 17 00:00:00 2001 From: wizzdom Date: Fri, 27 Sep 2024 14:36:18 +0100 Subject: [PATCH 22/25] indent --- docs/procedures/post-powercut.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/procedures/post-powercut.md b/docs/procedures/post-powercut.md index 3e9d67f2..31ce85d9 100644 --- a/docs/procedures/post-powercut.md +++ b/docs/procedures/post-powercut.md @@ -24,9 +24,9 @@ A list of things that should be done/checked immediately after a power cut: - `vm-resources.service.consul` is running and `http://vm-resources.service.consul:8000/bastion/bastion-vm-latest.qcow2` is accessible - if the `latest` symlink points to a corrupted image, `ln -sf` it to an earlier one - All the [`nixos`](docs/procedures/nixos.md) boxes rely on [`DNS`](docs/services/bind.md) for [`ldap`](docs/services/ldap.md) and [`nfs`](docs/services/nfs.md): - - Make sure bind is running on [`paphos`](docs/hardware/paphos.md) - - mount `/storage` - - `systemctl restart` `httpd`, `php-fpm-rbusers-*` and `ldap` + - Make sure bind is running on [`paphos`](docs/hardware/paphos.md) + - mount `/storage` + - `systemctl restart` `httpd`, `php-fpm-rbusers-*` and `ldap` - Apache on [`hardcase`](../hardware/nix/hardcase.md) sometimes tries to start before networking is finished starting. To fix it, disable/re-enable it a few times. This usually makes it turn on. - [`paphos`](../hardware/paphos.md) is old and sometimes its time will become out of sync. To make sure its time is accurate, run: From 06608db7f88bf25810299a5f37ebf6931c11d78f Mon Sep 17 00:00:00 2001 From: wizzdom Date: Mon, 30 Sep 2024 19:31:25 +0100 Subject: [PATCH 23/25] post-powercut: add mailman note --- docs/procedures/post-powercut.md | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/docs/procedures/post-powercut.md b/docs/procedures/post-powercut.md index 31ce85d9..95f2e09f 100644 --- a/docs/procedures/post-powercut.md +++ b/docs/procedures/post-powercut.md @@ -6,8 +6,8 @@ tags: - powercut - todo created: 2023-12-05T01:36:11 -modified: 2024-09-27T13:35:28 -title: post-powercut +modified: 2024-09-30T19:24:57 +title: Post-powercut Todo List --- # Post-powercut Todo List @@ -19,15 +19,21 @@ A list of things that should be done/checked immediately after a power cut: - `eno2` should have *no IP address* - `br0` should have the external IP address (`136.206.16.0/24`) - this should also be reserved by DHCP on [`mordor`](../hardware/network/mordor.md) - If the [`bastion-vm`](../services/bastion-vm.md) fails to start, check: - - `/storage` is mounted `rw` on each [`aperture`](docs/hardware/aperture/index.md) server - - `br0` is present and configured on each [`aperture`](docs/hardware/aperture/index.md) server + - `/storage` is mounted `rw` on each [`aperture`](../hardware/aperture/index.md) server + - `br0` is present and configured on each [`aperture`](../hardware/aperture/index.md) server - `vm-resources.service.consul` is running and `http://vm-resources.service.consul:8000/bastion/bastion-vm-latest.qcow2` is accessible - if the `latest` symlink points to a corrupted image, `ln -sf` it to an earlier one -- All the [`nixos`](docs/procedures/nixos.md) boxes rely on [`DNS`](docs/services/bind.md) for [`ldap`](docs/services/ldap.md) and [`nfs`](docs/services/nfs.md): - - Make sure bind is running on [`paphos`](docs/hardware/paphos.md) +- All the [`nixos`](..//procedures/nixos.md) boxes rely on [`DNS`](..//services/bind.md) for [`LDAP`](../services/ldap.md) and [`NFS`](../services/nfs.md): + - Make sure bind is running on [`paphos`](../hardware/paphos.md) - mount `/storage` - `systemctl restart` `httpd`, `php-fpm-rbusers-*` and `ldap` - Apache on [`hardcase`](../hardware/nix/hardcase.md) sometimes tries to start before networking is finished starting. To fix it, disable/re-enable it a few times. This usually makes it turn on. +- Mailman on [`hardcase`](../hardware/nix/hardcase.md) has a lock file at `/var/lib/mailman/lock/master.lck`. If it doesn't shut down correctly, this lock file will block mailman from starting up. Remove it with: + +```bash +rm /var/lib/mailman/lock/master.lck +``` + - [`paphos`](../hardware/paphos.md) is old and sometimes its time will become out of sync. To make sure its time is accurate, run: ```bash From 1d07eccf53543c846f50eee5a567087efe199430 Mon Sep 17 00:00:00 2001 From: nova Date: Wed, 9 Oct 2024 13:06:13 +0100 Subject: [PATCH 24/25] Update blockbot docs --- docs/webgroup/blockbot.md | 38 +++++++++++++++++++++----------------- docs/webgroup/index.md | 4 ++-- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/docs/webgroup/blockbot.md b/docs/webgroup/blockbot.md index 32c0551f..36dc1713 100644 --- a/docs/webgroup/blockbot.md +++ b/docs/webgroup/blockbot.md @@ -1,38 +1,46 @@ # Blockbot - `magma` -Blockbot is a Discord bot, written in Python, that is maintained by the Redbrick Webgroup. This project uses [`hikari`](https://github.com/hikari-py/hikari/), an opinionated microframework, to interface with the Discord API. [`hikari-arc`](https://github.com/hypergonial/hikari-arc) is the command handler of choice. +Blockbot is a Discord bot, written in Python, that is maintained by the Redbrick Webgroup. This project uses [`hikari`](https://github.com/hikari-py/hikari/), an opinionated microframework, to interface with the Discord API. [`hikari-arc`](https://github.com/hypergonial/hikari-arc) is the command handler and [`hikari-miru`](https://github.com/hypergonial/hikari-miru) is the component handler of choice. ## Resources - [`hikari` Documentation](https://docs.hikari-py.dev/en/latest/) +- [`hikari` Examples](https://github.com/hikari-py/hikari/tree/master/examples) - [`hikari-arc` Documentation](https://arc.hypergonial.com/) -- [Examples](https://github.com/hypergonial/hikari-arc/tree/main/examples/gateway) +- [`hikari-arc` Examples](https://github.com/hypergonial/hikari-arc/tree/main/examples/gateway) +- [`hikari-miru` Documentation](https://miru.hypergonial.com/) +- [`hikari-miru` Examples](https://github.com/hypergonial/hikari-miru/tree/main/examples) ## File Structure +All bot files are under `src/`. + - `bot.py` - - This is the file that contains the bot configuration and instantiation, while also being responsible for loading the bot extensions. + - Contains the bot configuration and instantiation (e.g. loading the bot extensions). - `extensions/` - - This directory is home to the custom extensions (known as cogs in `discord.py`, or command groups) that are loaded when the bot is started. Extensions are classes that encapsulate command logic and can be dynamically loaded/unloaded. In `hikari-arc`, an intuitive [plugin system](https://arc.hypergonial.com/guides/plugins_extensions/) is used. + - Contains extensions (files) that are loaded when the bot is started. Extensions are a way to split bot logic across multiple files, commonly used to group different features. Extensions can contain plugins, command, event listeners and other logic. [Read more](https://arc.hypergonial.com/guides/plugins_extensions/). +- `hello_world/` + - Contains example extensions for commands, components and more as reference for developers. - `config.py` - Configuration secrets and important constants (such as identifiers) are stored here. The secrets are loaded from environment variables, so you can set them in your shell or in a `.env` file. - `utils.py` - - Simple utility functions are stored here, that can be reused across the codebase. + - Utility functions are stored here, that can be reused across the codebase. ## Installation ### Discord Developer Portal -As a prerequisite, you need to have a bot application registered on the Discord developer portal. +As a prerequisite, you need to have an application registered on the Discord developer portal. -1. Create a Discord bot application [here](https://discord.com/developers/applications/). -2. When you have a bot application, register it for slash commands: -3. Go to *"OAuth2 > URL Generator"* on the left sidebar, select the `bot` and `applications.commands` scopes, scroll down & select the bot permissions you need (for development, you can select `Administator`). -4. Copy and visit the generated URL at the bottom of the page to invite it to the desired server. +1. Create a Discord application [here](https://discord.com/developers/applications/). +2. Go to *"OAuth2 > URL Generator"* on the left sidebar, select the `bot` and `applications.commands` scopes, and then select the bot permissions you need (for development, you can select `Administrator`). +3. Go to the generated URL and invite it to the desired server. #### Bot Token -- Go to the Discord developer portal and under *"Bot"* on the left sidebar, click `Reset Token`. Copy the generated token. +1. Open the application on the Discord developer portal. +2. Go to *"Bot"* on the left sidebar, click `Reset Token`. +3. Copy the newly generated token. ### Source Code @@ -44,15 +52,11 @@ python3 -m venv .venv source .venv/bin/activate ``` -3. Create a new file called `.env` inside the repo folder and paste your bot token into the file as such: +3. Rename `.env.sample` to `.env` inside the repo folder and fill in the environment variables with your secrets. e.g.: ``` TOKEN= ``` 4. Run `pip install -r requirements.txt` to install the required packages. -5. Once that's done, start the bot by running `python3 -m src`. - -## FAQ - -- If you get errors related to missing token environment variables, run `source .env`. +5. Start the bot by running `python3 -m src`. diff --git a/docs/webgroup/index.md b/docs/webgroup/index.md index c3957084..5f0c47af 100644 --- a/docs/webgroup/index.md +++ b/docs/webgroup/index.md @@ -1,8 +1,8 @@ # Webgroup -The webgroup is a subgroup of Redbrick consisting of volunteers who work with the webmaster on a number of projects including but not limited to: [Blockbot](https://github.com/redbrick/blockbot), the [Redbrick website](https://github.com/redbrick/11ty-website), and various other projects. +The webgroup is a subgroup of Redbrick consisting of volunteers who work with the webmaster on a number of projects including but not limited to: [Blockbot](https://github.com/redbrick/blockbot), the [Redbrick website](https://github.com/redbrick/atlas), and various other projects. -Read more about how the webgroup operates in [open governance](https://beta.redbrick.dcu.ie/open-governance/webgroup/webgroup/). +Read more about how the webgroup operates in [open governance](https://redbrick.dcu.ie/open-governance/webgroup/webgroup.html). ## Webgroup Projects From 2a81d81f673129d4581bc47d85a1326f25b16911 Mon Sep 17 00:00:00 2001 From: nova Date: Wed, 16 Oct 2024 10:51:18 +0100 Subject: [PATCH 25/25] Update wording & formatting --- docs/.pages | 1 + docs/index.md | 2 ++ docs/webgroup/blockbot.md | 34 +++++++++++++++++----------------- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/docs/.pages b/docs/.pages index 91c0086d..6935a28c 100644 --- a/docs/.pages +++ b/docs/.pages @@ -4,4 +4,5 @@ nav: - procedures - hardware - services +- webgroup - contact.md diff --git a/docs/index.md b/docs/index.md index f0a23884..af37f14f 100644 --- a/docs/index.md +++ b/docs/index.md @@ -24,6 +24,8 @@ This is mostly intended for admins, future admins, webmasters, and everybody els ## Webgroup +The webgroup is a subgroup of Redbrick consisting of volunteers who work with the webmaster on a number of projects. + ## New Admins So, you want to become an admin. Brave of you. Here's some stuff you should probably read: diff --git a/docs/webgroup/blockbot.md b/docs/webgroup/blockbot.md index 36dc1713..a0a25f63 100644 --- a/docs/webgroup/blockbot.md +++ b/docs/webgroup/blockbot.md @@ -1,4 +1,4 @@ -# Blockbot - `magma` +# Blockbot Blockbot is a Discord bot, written in Python, that is maintained by the Redbrick Webgroup. This project uses [`hikari`](https://github.com/hikari-py/hikari/), an opinionated microframework, to interface with the Discord API. [`hikari-arc`](https://github.com/hypergonial/hikari-arc) is the command handler and [`hikari-miru`](https://github.com/hypergonial/hikari-miru) is the component handler of choice. @@ -16,15 +16,15 @@ Blockbot is a Discord bot, written in Python, that is maintained by the Redbrick All bot files are under `src/`. - `bot.py` - - Contains the bot configuration and instantiation (e.g. loading the bot extensions). + - Contains the bot configuration and instantiation (e.g. loading the bot extensions). - `extensions/` - - Contains extensions (files) that are loaded when the bot is started. Extensions are a way to split bot logic across multiple files, commonly used to group different features. Extensions can contain plugins, command, event listeners and other logic. [Read more](https://arc.hypergonial.com/guides/plugins_extensions/). -- `hello_world/` - - Contains example extensions for commands, components and more as reference for developers. + - Contains extensions (files) that are loaded when the bot is started. Extensions are a way to split bot logic across multiple files, commonly used to group different features. Extensions can contain plugins, command, event listeners and other logic. [Read more](https://arc.hypergonial.com/guides/plugins_extensions/). +- `examples/` + - Contains example extensions with commands, components and more as reference for developers. - `config.py` - - Configuration secrets and important constants (such as identifiers) are stored here. The secrets are loaded from environment variables, so you can set them in your shell or in a `.env` file. + - Configuration secrets and important constants (such as identifiers) are stored here. The secrets are loaded from environment variables, so you can set them in your shell or in a `.env` file. - `utils.py` - - Utility functions are stored here, that can be reused across the codebase. + - Utility functions are stored here, that can be reused across the codebase. ## Installation @@ -34,7 +34,7 @@ As a prerequisite, you need to have an application registered on the Discord dev 1. Create a Discord application [here](https://discord.com/developers/applications/). 2. Go to *"OAuth2 > URL Generator"* on the left sidebar, select the `bot` and `applications.commands` scopes, and then select the bot permissions you need (for development, you can select `Administrator`). -3. Go to the generated URL and invite it to the desired server. +3. Go to the generated URL and invite the application to the desired server. #### Bot Token @@ -44,19 +44,19 @@ As a prerequisite, you need to have an application registered on the Discord dev ### Source Code -1. `git clone` and `cd` into this repository. -2. It's generally advised to work in a Python [virtual environment](https://docs.python.org/3/library/venv.html): +1. `git clone` and `cd` into the [blockbot repository](https://github.com/redbrick/blockbot). +2. It is generally advised to work in a Python [virtual environment](https://docs.python.org/3/library/venv.html): -```sh -python3 -m venv .venv -source .venv/bin/activate -``` + ```sh + python3 -m venv .venv + source .venv/bin/activate + ``` 3. Rename `.env.sample` to `.env` inside the repo folder and fill in the environment variables with your secrets. e.g.: -``` -TOKEN= -``` + ``` + TOKEN= + ``` 4. Run `pip install -r requirements.txt` to install the required packages. 5. Start the bot by running `python3 -m src`.