Compare commits

...

No commits in common. "deploy" and "main" have entirely different histories.
deploy ... main

322 changed files with 6327 additions and 536 deletions

3
.editorconfig Normal file

@ -0,0 +1,3 @@
[*]
indent_size = 2
indent_style = space

@ -0,0 +1,41 @@
name: Deploy
on:
push:
branches:
- "main"
jobs:
deploy:
runs-on: ubuntu-22.04
steps:
- uses: https://gitea.com/actions/checkout@v4
with:
token: '${{ secrets.btfash }}'
submodules: true
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
- name: Build Link Index
uses: https://github.com/jackyzha0/hugo-obsidian@v2.20
with:
index: true
input: content
output: assets/indices
root: .
- name: Setup Hugo
uses: https://github.com/peaceiris/actions-hugo@v2
with:
hugo-version: '0.112.4'
extended: true
- name: Build
run: hugo --minify
- name: Deploy
uses: https://github.com/peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITEA_TOKEN }}
publish_dir: ./public
publish_branch: deploy # deploying branch
cname: tablet.sh

1
.github/FUNDING.yml vendored Normal file

@ -0,0 +1 @@
github: [64bitpandas]

32
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file

@ -0,0 +1,32 @@
---
name: Bug report
about: Something about Amethyst isn't working the way you expect
title: ''
labels: bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
**Additional context**
Add any other context about the problem here.

@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea or improvement for Amethyst
title: ''
labels: enhancement
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

39
.github/workflows/deploy.yaml vendored Normal file

@ -0,0 +1,39 @@
name: Deploy to GitHub Pages
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
- name: Build Link Index
uses: jackyzha0/hugo-obsidian@v2.18
with:
index: true
input: content
output: assets/indices
root: .
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: '0.96.0'
extended: true
- name: Build
run: hugo --minify
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./public
publish_branch: deploy # deploying branch
cname: amethyst.bencuan.me

7
.gitignore vendored Normal file

@ -0,0 +1,7 @@
public/
exampleSite/public/
.DS_Store
.hugo_build.lock
.history/
.vscode/
!.gitkeep

50
.gitlab-ci.yml Normal file

@ -0,0 +1,50 @@
variables:
GIT_SUBMODULE_STRATEGY: none
include:
- project: 'templates/hugo-obsidian'
file: '/action.yml'
inputs:
index: "true"
input: content
output: assets/indices
root: "."
- local: "/.gitlab/hugo.template.yml"
inputs:
root: content
theme: hugo-book
stages:
- index
- setup-hugo
- deploy
deploy:
stage: deploy
tags:
- shell
script:
- cp -r ${CI_PROJECT_DIR}/public/* ${DEPLOY_PATH}
clone:
variables:
GIT_SUBMODULE_STRATEGY: none
stage: .pre
tags:
- shell
before_script:
- set -x
- sed -E "s,git@(git.tablet.sh):,https://gitlab-ci-token:${CI_JOB_TOKEN}@\1/," -i .gitmodules
##- git config --local submodule.content.url "https://deployer:${DEPLOY_TOKEN}@git.tablet.sh/the-btfash-foundation/tablet.sh"
script:
- git submodule sync
- git remote -v
- git submodule sync
- git submodule status
- git submodule update --remote --init --recursive
- git submodule init
- ls -l themes
artifacts:
paths:
- content
- themes

30
.gitlab/hugo.template.yml Normal file

@ -0,0 +1,30 @@
spec:
inputs:
theme:
default: hugo-book
root:
default: content
---
variables:
GIT_SUBMODULE_STRATEGY: recursive
HUGO_ENV: production
setup-hugo:
tags:
- docker
stage: setup-hugo
image: registry.gitlab.com/pages/hugo/hugo_extended:latest
script:
- cd ${CI_PROJECT_DIR}
- ls -l $[[ inputs.root ]]
- ls -l themes/$[[ inputs.theme ]]
- hugo --minify -t $[[ inputs.theme ]] -c $[[ inputs.root ]]
artifacts:
paths:
- public
# runs:
# using: 'node16'
# main: 'lib/index.js'
# branding:
# icon: 'package'
# color: 'yellow'

7
.gitmodules vendored Normal file

@ -0,0 +1,7 @@
[submodule "content"]
path = content
url = git@git.tablet.sh:the-btfash-foundation/tablet.sh
[submodule "theme"]
path = themes/hugo-book
url = https://github.com/alex-shpak/hugo-book.git

@ -1,3 +0,0 @@
<!doctype html><html lang=en><head><meta property="og:title" content="404 Page not found"><meta property="og:description" content="Art, Metal, Code, and Creativity.
hosted by Tablet !
"><meta property="og:type" content="website"><meta property="og:url" content="https://tablet.sh/404.html"><meta property="og:site_name" content="tablet's place. 🌸"><title>404 Page not found | tablet's place. 🌸</title><link rel=manifest href=/manifest.json><link rel=icon href=/favicon.png type=image/x-icon><link rel=stylesheet href=/book.min.75fcdfd936adf96a20d23cab3f90d865e499434c01ab08de0f2f09ab8885316a.css integrity="sha256-dfzf2Tat+Wog0jyrP5DYZeSZQ0wBqwjeDy8Jq4iFMWo=" crossorigin=anonymous><style>.not-found{text-align:center}.not-found h1{margin:.25em 0 0;opacity:.25;font-size:40vmin}</style></head><body><main class="flex justify-center not-found"><div><h1>404</h1><h2>Page Not Found</h2><h3><a href=/>tablet's place. 🌸</a></h3></div></main></body></html>

1
CNAME

@ -1 +0,0 @@
tablet.sh

20
LICENSE Normal file

@ -0,0 +1,20 @@
The MIT License (MIT)
Copyright (c) 2022 Ben Cuan
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.

24
Makefile Normal file

@ -0,0 +1,24 @@
.DEFAULT_GOAL := serve
help: ## Show all Makefile targets
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
update: ## Update Quartz to the latest version on Github
go install github.com/jackyzha0/hugo-obsidian@latest
@git remote show upstream || (echo "remote 'upstream' not present, setting 'upstream'" && git remote add upstream https://github.com/jackyzha0/quartz.git)
git fetch upstream
git log --oneline --decorate --graph ..upstream/hugo
git checkout -p upstream/hugo -- layouts .github Makefile assets/js assets/styles/base.scss assets/styles/darkmode.scss config.toml data
update-force: ## Forcefully pull all changes and don't ask to patch
go install github.com/jackyzha0/hugo-obsidian@latest
@git remote show upstream || (echo "remote 'upstream' not present, setting 'upstream'" && git remote add upstream https://github.com/jackyzha0/quartz.git)
git fetch upstream
git checkout upstream/hugo -- layouts .github Makefile assets/js assets/styles/base.scss assets/styles/darkmode.scss config.toml data
serve: ## Serve Quartz locally
hugo-obsidian -input=content -output=assets/indices -index -root=.
hugo server --enableGitInfo --minify --bind=$(or $(HUGO_BIND),0.0.0.0) --baseURL=$(or $(HUGO_BASEURL),http://localhost) --port=$(or $(HUGO_PORT),1313) --appendPort=$(or $(HUGO_APPENDPORT),true)
docker: ## Serve locally using Docker
docker run -it --volume=$(shell pwd):/quartz -p 1313:1313 ghcr.io/jackyzha0/quartz:hugo

153
README.md Normal file

@ -0,0 +1,153 @@
# Amethyst Hugo Theme
[![Hugo](https://img.shields.io/badge/hugo-0.96-blue.svg)](https://gohugo.io)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
Amethyst combines the navigational features of [hugo-book](https://github.com/alex-shpak/hugo-book) with the Obsidian integrations of [quartz](https://github.com/jackyzha0/quartz) to provide a hassle-free place to store and host personal notes or documentation.
![amethyst screenshot](content/setup/images/amethyst-screenshot.png)
## Features
- Most of the features of the original themes (Quartz and Book)
- Mobile-friendly
- Multi-language support
- Customizable
- Dark Mode
- LaTeX support
- Obsidian-style back/forward links and page previews
- Interactive graph view
- Tab cards for practice problems
## Documentation
If you just want to use Amethyst for your own notes hosting, go to [amethyst.bencuan.me](https://amethyst.bencuan.me) for a demo and documentation on how to use it.
Keep reading if you want to help develop Amethyst, or make changes to the code base for your own needs.
## Requirements
- **Go 1.16 or higher**: [installation instructions](https://golang.org/doc/install)
- **Hugo 0.93 or higher:** [installation instructions](https://gohugo.io/getting-started/installing/)
- If installing on Ubuntu/Debian-based systems, this is a higher version than is available in apt at the time of writing. Install the extended version from the [releases page](https://github.com/gohugoio/hugo/releases) instead.
- **Hugo-obsidian:** Run `go install github.com/jackyzha0/hugo-obsidian@latest`.
- If you're getting a `command not found` error, [ensure that your PATH is configured properly so that binaries in the GOPATH can be executed](https://stackoverflow.com/questions/21001387/how-do-i-set-the-gopath-environment-variable-on-ubuntu-what-file-must-i-edit).
## Live Server
Start the live server using `make serve`. Content will be served to `localhost:1313` by default.
The server will need to be restarted to preview changes to navigation (internal links and sidebar menu).
## Configuration
### Site Configuration
Most configuration can be done by creating a `config.yaml` file in the root directory and editing the parameters. You can start by copying the example [here](https://github.com/64bitpandas/amethyst/blob/main/config.yaml).
Graph-specific configuration can be added to `data/graphConfig.yaml`. (Example [here](https://github.com/64bitpandas/amethyst/blob/main/data/graphConfig.yaml))
### Multi-Language Support
Theme supports Hugo's [multilingual mode](https://gohugo.io/content-management/multilingual/), just follow configuration guide there. You can also tweak search indexing configuration per language in `i18n` folder.
### Page Configuration
You can specify additional params in the front matter of individual pages:
```toml
# Set type to 'docs' if you want to render page outside of configured section or if you render section other than 'docs'
type = 'docs'
# Set page weight to re-arrange items in file-tree menu (if BookMenuBundle not set)
weight = 10
# (Optional) Set to 'true' to mark page as flat section in file-tree menu (if BookMenuBundle not set)
bookFlatSection = false
# (Optional) Set to hide nested sections or pages at that level. Works only with file-tree menu mode
bookCollapseSection = true
# (Optional) Set true to hide page or section from side menu (if BookMenuBundle not set)
bookHidden = false
# (Optional) Set 'false' to hide ToC from page
bookToC = true
# (Optional) If you have enabled BookComments for the site, you can disable it for specific pages.
bookComments = true
# (Optional) Set to 'false' to exclude page from search index.
bookSearchExclude = true
# (Optional) Set explicit href attribute for this page in a menu (if BookMenuBundle not set)
bookHref = ''
```
### Partials
There are layout partials available for you to easily override components of the theme in `layouts/partials/`.
In addition to this, there are several empty partials you can override to easily add/inject code.
| Empty Partial | Placement |
| -------------------------------------------------- | ------------------------------------------- |
| `layouts/partials/docs/inject/head.html` | Before closing `<head>` tag |
| `layouts/partials/docs/inject/body.html` | Before closing `<body>` tag |
| `layouts/partials/docs/inject/footer.html` | After page footer content |
| `layouts/partials/docs/inject/menu-before.html` | At the beginning of `<nav>` menu block |
| `layouts/partials/docs/inject/menu-after.html` | At the end of `<nav>` menu block |
| `layouts/partials/docs/inject/content-before.html` | Before page content |
| `layouts/partials/docs/inject/content-after.html` | After page content |
| `layouts/partials/docs/inject/toc-before.html` | At the beginning of table of contents block |
| `layouts/partials/docs/inject/toc-after.html` | At the end of table of contents block |
### Extra Customisation
| File | Description |
| ------------------------ | ------------------------------------------------------------------------------------- |
| `static/favicon.png` | Override default favicon |
| `assets/_custom.scss` | Customise or override scss styles |
| `assets/_variables.scss` | Override default SCSS variables |
| `assets/_fonts.scss` | Replace default font with custom fonts (e.g. local files or remote like google fonts) |
| `assets/_colors.scss` | Change the default color schemes |
| `assets/mermaid.json` | Replace Mermaid initialization config |
### Plugins
There are a few features implemented as plugable `scss` styles. Usually these are features that don't make it to the core but can still be useful.
| Plugin | Description |
| --------------------------------- | ----------------------------------------------------------- |
| `assets/plugins/_numbered.scss` | Makes headings in markdown numbered, e.g. `1.1`, `1.2` |
| `assets/plugins/_scrollbars.scss` | Overrides scrollbar styles to look similar across platforms |
To enable plugins, add `@import "plugins/{name}";` to `assets/_custom.scss` in your website root.
### Hugo Internal Templates
There are a few hugo templates inserted in `<head>`
- [Google Analytics](https://gohugo.io/templates/internal/#google-analytics)
- [Open Graph](https://gohugo.io/templates/internal/#open-graph)
To disable Open Graph inclusion you can create your own empty file `\layouts\_internal\opengraph.html`.
In fact almost empty not quite empty because an empty file looks like absent for HUGO. For example:
```
<!-- -->
```
## Versioning
This theme follows a simple incremental versioning. e.g. `v1`, `v2` and so on. There might be breaking changes between versions.
If you want lower maintenance, use one of the released versions. If you want to live on the bleeding edge of changes, you can use the `main` branch and update your website when needed.
## Contributing
Contributions are welcome! Please make an issue or pull request if there are any changes you'd like to see.
## Credits
A large portion of Amethyst's code base can be derived from the following two projects. Original attribution goes to the creators of these projects; I just put them together, squashed all the bugs, and customized the styles to fit my needs for Amethyst.
- [Hugo Book](https://github.com/alex-shpak/hugo-book)
- [Quartz](https://github.com/jackyzha0/quartz)

10
archetypes/docs.md Normal file

@ -0,0 +1,10 @@
---
title: "{{ .Name | humanize | title }}"
weight: 1
# bookFlatSection: false
# bookToc: true
# bookHidden: false
# bookCollapseSection: false
# bookComments: false
# bookSearchExclude: false
---

6
archetypes/posts.md Normal file

@ -0,0 +1,6 @@
---
title: "{{ .Name | humanize | title }}"
date: {{ .Date }}
# bookComments: false
# bookSearchExclude: false
---

10
archetypes/writing.md Normal file

@ -0,0 +1,10 @@
---
title: "{{ .Name | humanize | title }}"
date: {{ .Date }}
summary: ""
words: 0
type: writing
fandom: ""
# bookComments: false
# bookSearchExclude: false
---

@ -1,20 +0,0 @@
<!doctype html><html lang=en dir=ltr><head><meta property="og:title" content><meta property="og:description" content="Art, Metal, Code, and Creativity.
hosted by Tablet !
"><meta property="og:type" content="website"><meta property="og:url" content="https://tablet.sh/art/animation/"><meta property="og:site_name" content="tablet's place. 🌸"><title>Animation | tablet's place. 🌸</title><link rel=manifest href=/manifest.json><link rel=icon href=/favicon.png type=image/x-icon><link rel=stylesheet href=/book.min.75fcdfd936adf96a20d23cab3f90d865e499434c01ab08de0f2f09ab8885316a.css integrity="sha256-dfzf2Tat+Wog0jyrP5DYZeSZQ0wBqwjeDy8Jq4iFMWo=" crossorigin=anonymous><link rel=alternate type=application/rss+xml href=https://tablet.sh/art/animation/index.xml title><meta charset=utf-8><meta name=description content><title>tablet's place. 🌸</title><meta name=viewport content="width=device-width,initial-scale=1">/static/favicon.svg
<link href=https://tablet.sh/styles.acef3beecd7d4386af9dd5a555741f14.min.css rel=stylesheet><link href=https://tablet.sh/quartz/styles/_light_syntax.86a48a52faebeaaf42158b72922b1c90.min.css rel=stylesheet id=theme-link><link rel=preload href=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.css as=style onload='this.onload=null,this.rel="stylesheet"' integrity=sha384-R4558gYOUz8mP9YWpZJjofhk+zx0AS11p36HnD2ZKj/6JR5z27gSSULCNHIRReVs crossorigin=anonymous><script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.js integrity=sha384-z1fJDqw8ZApjGO3/unPWUPsIymfsJmyrDVWC8Tv/a1HeOtGmkwNd/7xUS0Xcnvsx crossorigin=anonymous></script>
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/contrib/auto-render.min.js integrity=sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR crossorigin=anonymous></script>
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/copy-tex.min.js integrity=sha384-ww/583aHhxWkz5DEVn6OKtNiIaLi2iBRNZXfJRiY1Ai7tnJ9UXpEsyvOITVpTl4A crossorigin=anonymous></script>
<script src=https://tablet.sh/quartz/js/darkmode.28fb245b04b633307edf3c5e2aea4b01.min.js></script>
<script src=https://tablet.sh/quartz/js/util.c69e233dc1cc331a30b0f670e657b425.min.js></script>
<script async src=https://unpkg.com/@floating-ui/core@0.7.3></script>
<script async src=https://unpkg.com/@floating-ui/dom@0.5.4></script>
<script src=https://tablet.sh/quartz/js/popover.f03552ccb84d99ca615d1cfb9abde59e.min.js></script>
<script defer src=https://tablet.sh/quartz/js/code-title.ce4a43f09239a9efb48fee342e8ef2df.min.js></script>
<script defer src=https://tablet.sh/quartz/js/clipboard.2913da76d3cb21c5deaa4bae7da38c9f.min.js></script>
<script defer src=https://tablet.sh/quartz/js/callouts.7723cac461d613d118ee8bb8216b9838.min.js></script>
<script>const SEARCH_ENABLED=!1,LATEX_ENABLED=!0,PRODUCTION=!0,BASE_URL="https://tablet.sh/",fetchData=Promise.all([fetch("https://tablet.sh/indices/linkIndex.68b59064bbe21a2354fe660da0c0b930.min.json").then(e=>e.json()).then(e=>({index:e.index,links:e.links})),fetch("https://tablet.sh/indices/contentIndex.2753d17841f071531fd8a8ef323a0345.min.json").then(e=>e.json())]).then(([{index:e,links:t},n])=>({index:e,links:t,content:n})),render=()=>{const e=new URL(BASE_URL),t=e.pathname,n=window.location.pathname,o=t==n;addCopyButtons(),addCollapsibleCallouts(),initPopover("https://tablet.sh",!0);var s=document.getElementsByClassName("mermaid");s.length>0&&import("https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs").then(e=>{e.default.init()})},init=(e=document)=>{addCopyButtons(),addTitleToCodeBlocks(),renderMathInElement(e.body,{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1}],macros:{"":"'"},throwOnError:!1})}</script><script>window.Million={navigate:e=>window.location.href=e,prefetch:()=>{}},window.addEventListener("DOMContentLoaded",()=>{init(),render()})</script></head><div id=search-container><div id=search-space><input autocomplete=off id=search-bar name=search type=text aria-label=Search placeholder="Search for something..."><div id=results-container></div></div></div><script src=https://cdn.jsdelivr.net/npm/flexsearch@0.7.21/dist/flexsearch.bundle.js integrity="sha256-i3A0NZGkhsKjVMzFxv3ksk0DZh3aXqu0l49Bbh0MdjE=" crossorigin=anonymous defer></script>
<script defer src=https://tablet.sh/quartz/js/full-text-search.e6e2e0c213187ca0c703d6e2c7a77fcd.min.js></script><header class=book-header><label for=menu-control><img src=/svg/menu.svg class=book-icon alt=Menu></label><h1 id=page-title><a href=https://tablet.sh/>tablet's place. 🌸</a></h1><div class=spacer></div><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div><div class=darkmode><input class=toggle id=darkmode-toggle type=checkbox tabindex=-1>
<label id=toggle-label-light for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="dayIcon" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35"><title>Light Mode</title><path d="M6 17.5C6 16.672 5.328 16 4.5 16h-3C.672 16 0 16.672.0 17.5S.672 19 1.5 19h3C5.328 19 6 18.328 6 17.5zM7.5 26c-.414.0-.789.168-1.061.439l-2 2C4.168 28.711 4 29.086 4 29.5 4 30.328 4.671 31 5.5 31c.414.0.789-.168 1.06-.44l2-2C8.832 28.289 9 27.914 9 27.5 9 26.672 8.329 26 7.5 26zm10-20C18.329 6 19 5.328 19 4.5v-3C19 .672 18.329.0 17.5.0S16 .672 16 1.5v3C16 5.328 16.671 6 17.5 6zm10 3c.414.0.789-.168 1.06-.439l2-2C30.832 6.289 31 5.914 31 5.5 31 4.672 30.329 4 29.5 4c-.414.0-.789.168-1.061.44l-2 2C26.168 6.711 26 7.086 26 7.5 26 8.328 26.671 9 27.5 9zM6.439 8.561C6.711 8.832 7.086 9 7.5 9 8.328 9 9 8.328 9 7.5c0-.414-.168-.789-.439-1.061l-2-2C6.289 4.168 5.914 4 5.5 4 4.672 4 4 4.672 4 5.5c0 .414.168.789.439 1.06l2 2.001zM33.5 16h-3c-.828.0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5h3c.828.0 1.5-.672 1.5-1.5S34.328 16 33.5 16zM28.561 26.439C28.289 26.168 27.914 26 27.5 26c-.828.0-1.5.672-1.5 1.5.0.414.168.789.439 1.06l2 2C28.711 30.832 29.086 31 29.5 31c.828.0 1.5-.672 1.5-1.5.0-.414-.168-.789-.439-1.061l-2-2zM17.5 29c-.829.0-1.5.672-1.5 1.5v3c0 .828.671 1.5 1.5 1.5s1.5-.672 1.5-1.5v-3C19 29.672 18.329 29 17.5 29zm0-22C11.71 7 7 11.71 7 17.5S11.71 28 17.5 28 28 23.29 28 17.5 23.29 7 17.5 7zm0 18c-4.136.0-7.5-3.364-7.5-7.5s3.364-7.5 7.5-7.5 7.5 3.364 7.5 7.5S21.636 25 17.5 25z"/></svg></label><label id=toggle-label-dark for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="nightIcon" viewBox="0 0 100 100" style="enable-background='new 0 0 100 100'"><title>Dark Mode</title><path d="M96.76 66.458c-.853-.852-2.15-1.064-3.23-.534-6.063 2.991-12.858 4.571-19.655 4.571C62.022 70.495 50.88 65.88 42.5 57.5 29.043 44.043 25.658 23.536 34.076 6.47c.532-1.08.318-2.379-.534-3.23-.851-.852-2.15-1.064-3.23-.534-4.918 2.427-9.375 5.619-13.246 9.491-9.447 9.447-14.65 22.008-14.65 35.369.0 13.36 5.203 25.921 14.65 35.368s22.008 14.65 35.368 14.65c13.361.0 25.921-5.203 35.369-14.65 3.872-3.871 7.064-8.328 9.491-13.246C97.826 68.608 97.611 67.309 96.76 66.458z"/></svg></label></div></header><body dir=ltr><input type=checkbox class="hidden toggle" id=menu-control><main class=flex><aside class=book-menu><div class=book-menu-content><nav><div class=menu-search><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div></div><ul><li><a href=/portfolio/>✑ my portfolio</a><ul><li><a href=/portfolio/animation/>Animation</a><ul></ul></li><li><a href=/portfolio/storyboards/>Storyboards</a><ul></ul></li></ul></li><li><span class=book-menu-title>✏ art</span><ul><li><a href=/art/drawings target=_blank rel=noopener>Drawings</a><ul><li><span class=book-menu-title>Diamond Head</span><ul><li><a href=/art/drawings/diamond-head/another-given-title-lol/>another given title lol</a></li><li><a href=/art/drawings/diamond-head/title-given-to-you/>title given to you</a></li></ul></li></ul></li><li><span class=book-menu-title>Animation</span><ul></ul></li><li><span class=book-menu-title>Comics</span><ul></ul></li><li><a href=/art/test/>Test</a></li></ul></li><li><input type=checkbox id=section-a16074696a2e072964041e9ad7cd8fd5 class=toggle>
<label for=section-a16074696a2e072964041e9ad7cd8fd5 class="flex justify-between"><a role=button class=book-collapse-toggle>writing</a></label><ul><li><input type=checkbox id=section-7ffcfa1a8c6611e17d1ae558fd094325 class=toggle>
<label for=section-7ffcfa1a8c6611e17d1ae558fd094325 class="flex justify-between"><a role=button class=book-collapse-toggle>fanfiction</a></label><ul><li><a href=/writing/fanfiction/bed-of-razors/>Bed of Razors</a></li></ul></li></ul></li><li><input type=checkbox id=section-0fd35236fb14ce8757c710cca55be827 class=toggle>
<label for=section-0fd35236fb14ce8757c710cca55be827 class="flex justify-between"><a href=/miscellany/ class=book-collapse-toggle>miscellaneous</a></label><ul><li><a href=/miscellany/test/>test</a></li><li><a href=/miscellany/two/>twoooo</a></li></ul></li></ul></nav><script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script></div></aside><div class="book-page container"><article class=markdown><h1 class=title>Animation</h1><hr><div id=contact_buttons><footer><p>Made with <a href=https://github.com/64bitpandas/amethyst>Amethyst</a>, © 2024 The Tablet ❀ GamerGirlandCo (Corinthe)</p><ul><li><a href=https://instagram.com/i.am.the.tablet>instagram</a></li><li><a href=mailto:i.am.the.tablet@proton.me>say hi</a></li><li><a href=https://git.tablet.sh/the-btfash-foundation>and remember to stick it to Brian Tatler!</a></li></ul></footer></div></article><label for=menu-control class="hidden book-menu-overlay"></label></div><aside class=book-toc><div class=book-toc-content><div id=tabs-post-meta><div class=big-meta><div class="book-columns flex flex-wrap"></div></div><span class=post-date>Monday, 1 January 0001 @ 12:00:00AM</span><div><div class=tags-heading><h3 class=small-caps>tags</h3></div><div class=tag-container></div></div></div><nav id=TableOfContents></nav></div></aside></main></body></html>

@ -1 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title/><link>https://tablet.sh/art/animation/</link><description>Recent content on</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://tablet.sh/art/animation/index.xml" rel="self" type="application/rss+xml"/></channel></rss>

@ -1,20 +0,0 @@
<!doctype html><html lang=en dir=ltr><head><meta property="og:title" content><meta property="og:description" content="Art, Metal, Code, and Creativity.
hosted by Tablet !
"><meta property="og:type" content="website"><meta property="og:url" content="https://tablet.sh/art/comics/"><meta property="og:site_name" content="tablet's place. 🌸"><title>Comics | tablet's place. 🌸</title><link rel=manifest href=/manifest.json><link rel=icon href=/favicon.png type=image/x-icon><link rel=stylesheet href=/book.min.75fcdfd936adf96a20d23cab3f90d865e499434c01ab08de0f2f09ab8885316a.css integrity="sha256-dfzf2Tat+Wog0jyrP5DYZeSZQ0wBqwjeDy8Jq4iFMWo=" crossorigin=anonymous><link rel=alternate type=application/rss+xml href=https://tablet.sh/art/comics/index.xml title><meta charset=utf-8><meta name=description content><title>tablet's place. 🌸</title><meta name=viewport content="width=device-width,initial-scale=1">/static/favicon.svg
<link href=https://tablet.sh/styles.acef3beecd7d4386af9dd5a555741f14.min.css rel=stylesheet><link href=https://tablet.sh/quartz/styles/_light_syntax.86a48a52faebeaaf42158b72922b1c90.min.css rel=stylesheet id=theme-link><link rel=preload href=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.css as=style onload='this.onload=null,this.rel="stylesheet"' integrity=sha384-R4558gYOUz8mP9YWpZJjofhk+zx0AS11p36HnD2ZKj/6JR5z27gSSULCNHIRReVs crossorigin=anonymous><script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.js integrity=sha384-z1fJDqw8ZApjGO3/unPWUPsIymfsJmyrDVWC8Tv/a1HeOtGmkwNd/7xUS0Xcnvsx crossorigin=anonymous></script>
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/contrib/auto-render.min.js integrity=sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR crossorigin=anonymous></script>
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/copy-tex.min.js integrity=sha384-ww/583aHhxWkz5DEVn6OKtNiIaLi2iBRNZXfJRiY1Ai7tnJ9UXpEsyvOITVpTl4A crossorigin=anonymous></script>
<script src=https://tablet.sh/quartz/js/darkmode.28fb245b04b633307edf3c5e2aea4b01.min.js></script>
<script src=https://tablet.sh/quartz/js/util.c69e233dc1cc331a30b0f670e657b425.min.js></script>
<script async src=https://unpkg.com/@floating-ui/core@0.7.3></script>
<script async src=https://unpkg.com/@floating-ui/dom@0.5.4></script>
<script src=https://tablet.sh/quartz/js/popover.f03552ccb84d99ca615d1cfb9abde59e.min.js></script>
<script defer src=https://tablet.sh/quartz/js/code-title.ce4a43f09239a9efb48fee342e8ef2df.min.js></script>
<script defer src=https://tablet.sh/quartz/js/clipboard.2913da76d3cb21c5deaa4bae7da38c9f.min.js></script>
<script defer src=https://tablet.sh/quartz/js/callouts.7723cac461d613d118ee8bb8216b9838.min.js></script>
<script>const SEARCH_ENABLED=!1,LATEX_ENABLED=!0,PRODUCTION=!0,BASE_URL="https://tablet.sh/",fetchData=Promise.all([fetch("https://tablet.sh/indices/linkIndex.68b59064bbe21a2354fe660da0c0b930.min.json").then(e=>e.json()).then(e=>({index:e.index,links:e.links})),fetch("https://tablet.sh/indices/contentIndex.2753d17841f071531fd8a8ef323a0345.min.json").then(e=>e.json())]).then(([{index:e,links:t},n])=>({index:e,links:t,content:n})),render=()=>{const e=new URL(BASE_URL),t=e.pathname,n=window.location.pathname,o=t==n;addCopyButtons(),addCollapsibleCallouts(),initPopover("https://tablet.sh",!0);var s=document.getElementsByClassName("mermaid");s.length>0&&import("https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs").then(e=>{e.default.init()})},init=(e=document)=>{addCopyButtons(),addTitleToCodeBlocks(),renderMathInElement(e.body,{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1}],macros:{"":"'"},throwOnError:!1})}</script><script>window.Million={navigate:e=>window.location.href=e,prefetch:()=>{}},window.addEventListener("DOMContentLoaded",()=>{init(),render()})</script></head><div id=search-container><div id=search-space><input autocomplete=off id=search-bar name=search type=text aria-label=Search placeholder="Search for something..."><div id=results-container></div></div></div><script src=https://cdn.jsdelivr.net/npm/flexsearch@0.7.21/dist/flexsearch.bundle.js integrity="sha256-i3A0NZGkhsKjVMzFxv3ksk0DZh3aXqu0l49Bbh0MdjE=" crossorigin=anonymous defer></script>
<script defer src=https://tablet.sh/quartz/js/full-text-search.e6e2e0c213187ca0c703d6e2c7a77fcd.min.js></script><header class=book-header><label for=menu-control><img src=/svg/menu.svg class=book-icon alt=Menu></label><h1 id=page-title><a href=https://tablet.sh/>tablet's place. 🌸</a></h1><div class=spacer></div><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div><div class=darkmode><input class=toggle id=darkmode-toggle type=checkbox tabindex=-1>
<label id=toggle-label-light for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="dayIcon" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35"><title>Light Mode</title><path d="M6 17.5C6 16.672 5.328 16 4.5 16h-3C.672 16 0 16.672.0 17.5S.672 19 1.5 19h3C5.328 19 6 18.328 6 17.5zM7.5 26c-.414.0-.789.168-1.061.439l-2 2C4.168 28.711 4 29.086 4 29.5 4 30.328 4.671 31 5.5 31c.414.0.789-.168 1.06-.44l2-2C8.832 28.289 9 27.914 9 27.5 9 26.672 8.329 26 7.5 26zm10-20C18.329 6 19 5.328 19 4.5v-3C19 .672 18.329.0 17.5.0S16 .672 16 1.5v3C16 5.328 16.671 6 17.5 6zm10 3c.414.0.789-.168 1.06-.439l2-2C30.832 6.289 31 5.914 31 5.5 31 4.672 30.329 4 29.5 4c-.414.0-.789.168-1.061.44l-2 2C26.168 6.711 26 7.086 26 7.5 26 8.328 26.671 9 27.5 9zM6.439 8.561C6.711 8.832 7.086 9 7.5 9 8.328 9 9 8.328 9 7.5c0-.414-.168-.789-.439-1.061l-2-2C6.289 4.168 5.914 4 5.5 4 4.672 4 4 4.672 4 5.5c0 .414.168.789.439 1.06l2 2.001zM33.5 16h-3c-.828.0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5h3c.828.0 1.5-.672 1.5-1.5S34.328 16 33.5 16zM28.561 26.439C28.289 26.168 27.914 26 27.5 26c-.828.0-1.5.672-1.5 1.5.0.414.168.789.439 1.06l2 2C28.711 30.832 29.086 31 29.5 31c.828.0 1.5-.672 1.5-1.5.0-.414-.168-.789-.439-1.061l-2-2zM17.5 29c-.829.0-1.5.672-1.5 1.5v3c0 .828.671 1.5 1.5 1.5s1.5-.672 1.5-1.5v-3C19 29.672 18.329 29 17.5 29zm0-22C11.71 7 7 11.71 7 17.5S11.71 28 17.5 28 28 23.29 28 17.5 23.29 7 17.5 7zm0 18c-4.136.0-7.5-3.364-7.5-7.5s3.364-7.5 7.5-7.5 7.5 3.364 7.5 7.5S21.636 25 17.5 25z"/></svg></label><label id=toggle-label-dark for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="nightIcon" viewBox="0 0 100 100" style="enable-background='new 0 0 100 100'"><title>Dark Mode</title><path d="M96.76 66.458c-.853-.852-2.15-1.064-3.23-.534-6.063 2.991-12.858 4.571-19.655 4.571C62.022 70.495 50.88 65.88 42.5 57.5 29.043 44.043 25.658 23.536 34.076 6.47c.532-1.08.318-2.379-.534-3.23-.851-.852-2.15-1.064-3.23-.534-4.918 2.427-9.375 5.619-13.246 9.491-9.447 9.447-14.65 22.008-14.65 35.369.0 13.36 5.203 25.921 14.65 35.368s22.008 14.65 35.368 14.65c13.361.0 25.921-5.203 35.369-14.65 3.872-3.871 7.064-8.328 9.491-13.246C97.826 68.608 97.611 67.309 96.76 66.458z"/></svg></label></div></header><body dir=ltr><input type=checkbox class="hidden toggle" id=menu-control><main class=flex><aside class=book-menu><div class=book-menu-content><nav><div class=menu-search><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div></div><ul><li><a href=/portfolio/>✑ my portfolio</a><ul><li><a href=/portfolio/animation/>Animation</a><ul></ul></li><li><a href=/portfolio/storyboards/>Storyboards</a><ul></ul></li></ul></li><li><span class=book-menu-title>✏ art</span><ul><li><a href=/art/drawings target=_blank rel=noopener>Drawings</a><ul><li><span class=book-menu-title>Diamond Head</span><ul><li><a href=/art/drawings/diamond-head/another-given-title-lol/>another given title lol</a></li><li><a href=/art/drawings/diamond-head/title-given-to-you/>title given to you</a></li></ul></li></ul></li><li><span class=book-menu-title>Animation</span><ul></ul></li><li><span class=book-menu-title>Comics</span><ul></ul></li><li><a href=/art/test/>Test</a></li></ul></li><li><input type=checkbox id=section-a16074696a2e072964041e9ad7cd8fd5 class=toggle>
<label for=section-a16074696a2e072964041e9ad7cd8fd5 class="flex justify-between"><a role=button class=book-collapse-toggle>writing</a></label><ul><li><input type=checkbox id=section-7ffcfa1a8c6611e17d1ae558fd094325 class=toggle>
<label for=section-7ffcfa1a8c6611e17d1ae558fd094325 class="flex justify-between"><a role=button class=book-collapse-toggle>fanfiction</a></label><ul><li><a href=/writing/fanfiction/bed-of-razors/>Bed of Razors</a></li></ul></li></ul></li><li><input type=checkbox id=section-0fd35236fb14ce8757c710cca55be827 class=toggle>
<label for=section-0fd35236fb14ce8757c710cca55be827 class="flex justify-between"><a href=/miscellany/ class=book-collapse-toggle>miscellaneous</a></label><ul><li><a href=/miscellany/test/>test</a></li><li><a href=/miscellany/two/>twoooo</a></li></ul></li></ul></nav><script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script></div></aside><div class="book-page container"><article class=markdown><h1 class=title>Comics</h1><hr><div id=contact_buttons><footer><p>Made with <a href=https://github.com/64bitpandas/amethyst>Amethyst</a>, © 2024 The Tablet ❀ GamerGirlandCo (Corinthe)</p><ul><li><a href=https://instagram.com/i.am.the.tablet>instagram</a></li><li><a href=mailto:i.am.the.tablet@proton.me>say hi</a></li><li><a href=https://git.tablet.sh/the-btfash-foundation>and remember to stick it to Brian Tatler!</a></li></ul></footer></div></article><label for=menu-control class="hidden book-menu-overlay"></label></div><aside class=book-toc><div class=book-toc-content><div id=tabs-post-meta><div class=big-meta><div class="book-columns flex flex-wrap"></div></div><span class=post-date>Monday, 1 January 0001 @ 12:00:00AM</span><div><div class=tags-heading><h3 class=small-caps>tags</h3></div><div class=tag-container></div></div></div><nav id=TableOfContents></nav></div></aside></main></body></html>

@ -1 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title/><link>https://tablet.sh/art/comics/</link><description>Recent content on</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://tablet.sh/art/comics/index.xml" rel="self" type="application/rss+xml"/></channel></rss>

@ -1,19 +0,0 @@
<!doctype html><html lang=en dir=ltr><head><meta property="og:title" content="another given title lol"><meta property="og:description" content="this is a short summary. it&rsquo;ll be kept short."><meta property="og:type" content="article"><meta property="og:url" content="https://tablet.sh/art/drawings/diamond-head/another-given-title-lol/"><meta property="article:section" content="art"><meta property="article:published_time" content="2023-01-08T00:00:00+00:00"><meta property="article:modified_time" content="2023-01-08T00:00:00+00:00"><meta property="og:site_name" content="tablet's place. 🌸"><title>another given title lol | tablet's place. 🌸</title><link rel=manifest href=/manifest.json><link rel=icon href=/favicon.png type=image/x-icon><link rel=stylesheet href=/book.min.75fcdfd936adf96a20d23cab3f90d865e499434c01ab08de0f2f09ab8885316a.css integrity="sha256-dfzf2Tat+Wog0jyrP5DYZeSZQ0wBqwjeDy8Jq4iFMWo=" crossorigin=anonymous><meta charset=utf-8><meta name=description content="this is a short summary. it&rsquo;ll be kept short."><title>another given title lol</title><meta name=viewport content="width=device-width,initial-scale=1">/static/favicon.svg
<link href=https://tablet.sh/styles.acef3beecd7d4386af9dd5a555741f14.min.css rel=stylesheet><link href=https://tablet.sh/quartz/styles/_light_syntax.86a48a52faebeaaf42158b72922b1c90.min.css rel=stylesheet id=theme-link><link rel=preload href=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.css as=style onload='this.onload=null,this.rel="stylesheet"' integrity=sha384-R4558gYOUz8mP9YWpZJjofhk+zx0AS11p36HnD2ZKj/6JR5z27gSSULCNHIRReVs crossorigin=anonymous><script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.js integrity=sha384-z1fJDqw8ZApjGO3/unPWUPsIymfsJmyrDVWC8Tv/a1HeOtGmkwNd/7xUS0Xcnvsx crossorigin=anonymous></script>
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/contrib/auto-render.min.js integrity=sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR crossorigin=anonymous></script>
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/copy-tex.min.js integrity=sha384-ww/583aHhxWkz5DEVn6OKtNiIaLi2iBRNZXfJRiY1Ai7tnJ9UXpEsyvOITVpTl4A crossorigin=anonymous></script>
<script src=https://tablet.sh/quartz/js/darkmode.28fb245b04b633307edf3c5e2aea4b01.min.js></script>
<script src=https://tablet.sh/quartz/js/util.c69e233dc1cc331a30b0f670e657b425.min.js></script>
<script async src=https://unpkg.com/@floating-ui/core@0.7.3></script>
<script async src=https://unpkg.com/@floating-ui/dom@0.5.4></script>
<script src=https://tablet.sh/quartz/js/popover.f03552ccb84d99ca615d1cfb9abde59e.min.js></script>
<script defer src=https://tablet.sh/quartz/js/code-title.ce4a43f09239a9efb48fee342e8ef2df.min.js></script>
<script defer src=https://tablet.sh/quartz/js/clipboard.2913da76d3cb21c5deaa4bae7da38c9f.min.js></script>
<script defer src=https://tablet.sh/quartz/js/callouts.7723cac461d613d118ee8bb8216b9838.min.js></script>
<script>const SEARCH_ENABLED=!1,LATEX_ENABLED=!0,PRODUCTION=!0,BASE_URL="https://tablet.sh/",fetchData=Promise.all([fetch("https://tablet.sh/indices/linkIndex.68b59064bbe21a2354fe660da0c0b930.min.json").then(e=>e.json()).then(e=>({index:e.index,links:e.links})),fetch("https://tablet.sh/indices/contentIndex.2753d17841f071531fd8a8ef323a0345.min.json").then(e=>e.json())]).then(([{index:e,links:t},n])=>({index:e,links:t,content:n})),render=()=>{const e=new URL(BASE_URL),t=e.pathname,n=window.location.pathname,o=t==n;addCopyButtons(),addCollapsibleCallouts(),initPopover("https://tablet.sh",!0);var s=document.getElementsByClassName("mermaid");s.length>0&&import("https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs").then(e=>{e.default.init()})},init=(e=document)=>{addCopyButtons(),addTitleToCodeBlocks(),renderMathInElement(e.body,{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1}],macros:{"":"'"},throwOnError:!1})}</script><script>window.Million={navigate:e=>window.location.href=e,prefetch:()=>{}},window.addEventListener("DOMContentLoaded",()=>{init(),render()})</script></head><div id=search-container><div id=search-space><input autocomplete=off id=search-bar name=search type=text aria-label=Search placeholder="Search for something..."><div id=results-container></div></div></div><script src=https://cdn.jsdelivr.net/npm/flexsearch@0.7.21/dist/flexsearch.bundle.js integrity="sha256-i3A0NZGkhsKjVMzFxv3ksk0DZh3aXqu0l49Bbh0MdjE=" crossorigin=anonymous defer></script>
<script defer src=https://tablet.sh/quartz/js/full-text-search.e6e2e0c213187ca0c703d6e2c7a77fcd.min.js></script><header class=book-header><label for=menu-control><img src=/svg/menu.svg class=book-icon alt=Menu></label><h1 id=page-title><a href=https://tablet.sh/>tablet's place. 🌸</a></h1><div class=spacer></div><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div><div class=darkmode><input class=toggle id=darkmode-toggle type=checkbox tabindex=-1>
<label id=toggle-label-light for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="dayIcon" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35"><title>Light Mode</title><path d="M6 17.5C6 16.672 5.328 16 4.5 16h-3C.672 16 0 16.672.0 17.5S.672 19 1.5 19h3C5.328 19 6 18.328 6 17.5zM7.5 26c-.414.0-.789.168-1.061.439l-2 2C4.168 28.711 4 29.086 4 29.5 4 30.328 4.671 31 5.5 31c.414.0.789-.168 1.06-.44l2-2C8.832 28.289 9 27.914 9 27.5 9 26.672 8.329 26 7.5 26zm10-20C18.329 6 19 5.328 19 4.5v-3C19 .672 18.329.0 17.5.0S16 .672 16 1.5v3C16 5.328 16.671 6 17.5 6zm10 3c.414.0.789-.168 1.06-.439l2-2C30.832 6.289 31 5.914 31 5.5 31 4.672 30.329 4 29.5 4c-.414.0-.789.168-1.061.44l-2 2C26.168 6.711 26 7.086 26 7.5 26 8.328 26.671 9 27.5 9zM6.439 8.561C6.711 8.832 7.086 9 7.5 9 8.328 9 9 8.328 9 7.5c0-.414-.168-.789-.439-1.061l-2-2C6.289 4.168 5.914 4 5.5 4 4.672 4 4 4.672 4 5.5c0 .414.168.789.439 1.06l2 2.001zM33.5 16h-3c-.828.0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5h3c.828.0 1.5-.672 1.5-1.5S34.328 16 33.5 16zM28.561 26.439C28.289 26.168 27.914 26 27.5 26c-.828.0-1.5.672-1.5 1.5.0.414.168.789.439 1.06l2 2C28.711 30.832 29.086 31 29.5 31c.828.0 1.5-.672 1.5-1.5.0-.414-.168-.789-.439-1.061l-2-2zM17.5 29c-.829.0-1.5.672-1.5 1.5v3c0 .828.671 1.5 1.5 1.5s1.5-.672 1.5-1.5v-3C19 29.672 18.329 29 17.5 29zm0-22C11.71 7 7 11.71 7 17.5S11.71 28 17.5 28 28 23.29 28 17.5 23.29 7 17.5 7zm0 18c-4.136.0-7.5-3.364-7.5-7.5s3.364-7.5 7.5-7.5 7.5 3.364 7.5 7.5S21.636 25 17.5 25z"/></svg></label><label id=toggle-label-dark for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="nightIcon" viewBox="0 0 100 100" style="enable-background='new 0 0 100 100'"><title>Dark Mode</title><path d="M96.76 66.458c-.853-.852-2.15-1.064-3.23-.534-6.063 2.991-12.858 4.571-19.655 4.571C62.022 70.495 50.88 65.88 42.5 57.5 29.043 44.043 25.658 23.536 34.076 6.47c.532-1.08.318-2.379-.534-3.23-.851-.852-2.15-1.064-3.23-.534-4.918 2.427-9.375 5.619-13.246 9.491-9.447 9.447-14.65 22.008-14.65 35.369.0 13.36 5.203 25.921 14.65 35.368s22.008 14.65 35.368 14.65c13.361.0 25.921-5.203 35.369-14.65 3.872-3.871 7.064-8.328 9.491-13.246C97.826 68.608 97.611 67.309 96.76 66.458z"/></svg></label></div></header><body dir=ltr><input type=checkbox class="hidden toggle" id=menu-control><main class=flex><aside class=book-menu><div class=book-menu-content><nav><div class=menu-search><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div></div><ul><li><a href=/portfolio/>✑ my portfolio</a><ul><li><a href=/portfolio/animation/>Animation</a><ul></ul></li><li><a href=/portfolio/storyboards/>Storyboards</a><ul></ul></li></ul></li><li><span class=book-menu-title>✏ art</span><ul><li><a href=/art/drawings target=_blank rel=noopener>Drawings</a><ul><li><span class=book-menu-title>Diamond Head</span><ul><li><a href=/art/drawings/diamond-head/another-given-title-lol/ class=active>another given title lol</a></li><li><a href=/art/drawings/diamond-head/title-given-to-you/>title given to you</a></li></ul></li></ul></li><li><span class=book-menu-title>Animation</span><ul></ul></li><li><span class=book-menu-title>Comics</span><ul></ul></li><li><a href=/art/test/>Test</a></li></ul></li><li><input type=checkbox id=section-a16074696a2e072964041e9ad7cd8fd5 class=toggle>
<label for=section-a16074696a2e072964041e9ad7cd8fd5 class="flex justify-between"><a role=button class=book-collapse-toggle>writing</a></label><ul><li><input type=checkbox id=section-7ffcfa1a8c6611e17d1ae558fd094325 class=toggle>
<label for=section-7ffcfa1a8c6611e17d1ae558fd094325 class="flex justify-between"><a role=button class=book-collapse-toggle>fanfiction</a></label><ul><li><a href=/writing/fanfiction/bed-of-razors/>Bed of Razors</a></li></ul></li></ul></li><li><input type=checkbox id=section-0fd35236fb14ce8757c710cca55be827 class=toggle>
<label for=section-0fd35236fb14ce8757c710cca55be827 class="flex justify-between"><a href=/miscellany/ class=book-collapse-toggle>miscellaneous</a></label><ul><li><a href=/miscellany/test/>test</a></li><li><a href=/miscellany/two/>twoooo</a></li></ul></li></ul></nav><script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script></div></aside><div class="book-page container"><article class=markdown><h1 class=title>another given title lol</h1><h1 id=another-given-title-lol>another given title lol
<a class=anchor href=#another-given-title-lol>#</a></h1><p><img src=https://tablet.sh//img/1673214810.png width=auto alt=/img/1673214810.png></p><hr><div id=contact_buttons><footer><p>Made with <a href=https://github.com/64bitpandas/amethyst>Amethyst</a>, © 2024 The Tablet ❀ GamerGirlandCo (Corinthe)</p><ul><li><a href=https://instagram.com/i.am.the.tablet>instagram</a></li><li><a href=mailto:i.am.the.tablet@proton.me>say hi</a></li><li><a href=https://git.tablet.sh/the-btfash-foundation>and remember to stick it to Brian Tatler!</a></li></ul></footer></div></article><div class=book-comments></div><label for=menu-control class="hidden book-menu-overlay"></label></div><aside class=book-toc><div class=book-toc-content><div id=tabs-post-meta><div class=big-meta><div class="book-columns flex flex-wrap"></div></div><span class=post-date>Sunday, 8 January 2023 @ 12:00:00AM</span><div><div class=tags-heading><h3 class=small-caps>tags</h3></div><div class=tag-container></div></div></div><nav id=TableOfContents><ul><li><a href=#another-given-title-lol>another given title lol</a></li></ul></nav></div></aside></main></body></html>

@ -1,20 +0,0 @@
<!doctype html><html lang=en dir=ltr><head><meta property="og:title" content><meta property="og:description" content="Art, Metal, Code, and Creativity.
hosted by Tablet !
"><meta property="og:type" content="website"><meta property="og:url" content="https://tablet.sh/art/drawings/diamond-head/"><meta property="og:site_name" content="tablet's place. 🌸"><title>Diamond Head | tablet's place. 🌸</title><link rel=manifest href=/manifest.json><link rel=icon href=/favicon.png type=image/x-icon><link rel=stylesheet href=/book.min.75fcdfd936adf96a20d23cab3f90d865e499434c01ab08de0f2f09ab8885316a.css integrity="sha256-dfzf2Tat+Wog0jyrP5DYZeSZQ0wBqwjeDy8Jq4iFMWo=" crossorigin=anonymous><link rel=alternate type=application/rss+xml href=https://tablet.sh/art/drawings/diamond-head/index.xml title><meta charset=utf-8><meta name=description content><title>tablet's place. 🌸</title><meta name=viewport content="width=device-width,initial-scale=1">/static/favicon.svg
<link href=https://tablet.sh/styles.acef3beecd7d4386af9dd5a555741f14.min.css rel=stylesheet><link href=https://tablet.sh/quartz/styles/_light_syntax.86a48a52faebeaaf42158b72922b1c90.min.css rel=stylesheet id=theme-link><link rel=preload href=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.css as=style onload='this.onload=null,this.rel="stylesheet"' integrity=sha384-R4558gYOUz8mP9YWpZJjofhk+zx0AS11p36HnD2ZKj/6JR5z27gSSULCNHIRReVs crossorigin=anonymous><script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.js integrity=sha384-z1fJDqw8ZApjGO3/unPWUPsIymfsJmyrDVWC8Tv/a1HeOtGmkwNd/7xUS0Xcnvsx crossorigin=anonymous></script>
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/contrib/auto-render.min.js integrity=sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR crossorigin=anonymous></script>
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/copy-tex.min.js integrity=sha384-ww/583aHhxWkz5DEVn6OKtNiIaLi2iBRNZXfJRiY1Ai7tnJ9UXpEsyvOITVpTl4A crossorigin=anonymous></script>
<script src=https://tablet.sh/quartz/js/darkmode.28fb245b04b633307edf3c5e2aea4b01.min.js></script>
<script src=https://tablet.sh/quartz/js/util.c69e233dc1cc331a30b0f670e657b425.min.js></script>
<script async src=https://unpkg.com/@floating-ui/core@0.7.3></script>
<script async src=https://unpkg.com/@floating-ui/dom@0.5.4></script>
<script src=https://tablet.sh/quartz/js/popover.f03552ccb84d99ca615d1cfb9abde59e.min.js></script>
<script defer src=https://tablet.sh/quartz/js/code-title.ce4a43f09239a9efb48fee342e8ef2df.min.js></script>
<script defer src=https://tablet.sh/quartz/js/clipboard.2913da76d3cb21c5deaa4bae7da38c9f.min.js></script>
<script defer src=https://tablet.sh/quartz/js/callouts.7723cac461d613d118ee8bb8216b9838.min.js></script>
<script>const SEARCH_ENABLED=!1,LATEX_ENABLED=!0,PRODUCTION=!0,BASE_URL="https://tablet.sh/",fetchData=Promise.all([fetch("https://tablet.sh/indices/linkIndex.68b59064bbe21a2354fe660da0c0b930.min.json").then(e=>e.json()).then(e=>({index:e.index,links:e.links})),fetch("https://tablet.sh/indices/contentIndex.2753d17841f071531fd8a8ef323a0345.min.json").then(e=>e.json())]).then(([{index:e,links:t},n])=>({index:e,links:t,content:n})),render=()=>{const e=new URL(BASE_URL),t=e.pathname,n=window.location.pathname,o=t==n;addCopyButtons(),addCollapsibleCallouts(),initPopover("https://tablet.sh",!0);var s=document.getElementsByClassName("mermaid");s.length>0&&import("https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs").then(e=>{e.default.init()})},init=(e=document)=>{addCopyButtons(),addTitleToCodeBlocks(),renderMathInElement(e.body,{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1}],macros:{"":"'"},throwOnError:!1})}</script><script>window.Million={navigate:e=>window.location.href=e,prefetch:()=>{}},window.addEventListener("DOMContentLoaded",()=>{init(),render()})</script></head><div id=search-container><div id=search-space><input autocomplete=off id=search-bar name=search type=text aria-label=Search placeholder="Search for something..."><div id=results-container></div></div></div><script src=https://cdn.jsdelivr.net/npm/flexsearch@0.7.21/dist/flexsearch.bundle.js integrity="sha256-i3A0NZGkhsKjVMzFxv3ksk0DZh3aXqu0l49Bbh0MdjE=" crossorigin=anonymous defer></script>
<script defer src=https://tablet.sh/quartz/js/full-text-search.e6e2e0c213187ca0c703d6e2c7a77fcd.min.js></script><header class=book-header><label for=menu-control><img src=/svg/menu.svg class=book-icon alt=Menu></label><h1 id=page-title><a href=https://tablet.sh/>tablet's place. 🌸</a></h1><div class=spacer></div><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div><div class=darkmode><input class=toggle id=darkmode-toggle type=checkbox tabindex=-1>
<label id=toggle-label-light for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="dayIcon" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35"><title>Light Mode</title><path d="M6 17.5C6 16.672 5.328 16 4.5 16h-3C.672 16 0 16.672.0 17.5S.672 19 1.5 19h3C5.328 19 6 18.328 6 17.5zM7.5 26c-.414.0-.789.168-1.061.439l-2 2C4.168 28.711 4 29.086 4 29.5 4 30.328 4.671 31 5.5 31c.414.0.789-.168 1.06-.44l2-2C8.832 28.289 9 27.914 9 27.5 9 26.672 8.329 26 7.5 26zm10-20C18.329 6 19 5.328 19 4.5v-3C19 .672 18.329.0 17.5.0S16 .672 16 1.5v3C16 5.328 16.671 6 17.5 6zm10 3c.414.0.789-.168 1.06-.439l2-2C30.832 6.289 31 5.914 31 5.5 31 4.672 30.329 4 29.5 4c-.414.0-.789.168-1.061.44l-2 2C26.168 6.711 26 7.086 26 7.5 26 8.328 26.671 9 27.5 9zM6.439 8.561C6.711 8.832 7.086 9 7.5 9 8.328 9 9 8.328 9 7.5c0-.414-.168-.789-.439-1.061l-2-2C6.289 4.168 5.914 4 5.5 4 4.672 4 4 4.672 4 5.5c0 .414.168.789.439 1.06l2 2.001zM33.5 16h-3c-.828.0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5h3c.828.0 1.5-.672 1.5-1.5S34.328 16 33.5 16zM28.561 26.439C28.289 26.168 27.914 26 27.5 26c-.828.0-1.5.672-1.5 1.5.0.414.168.789.439 1.06l2 2C28.711 30.832 29.086 31 29.5 31c.828.0 1.5-.672 1.5-1.5.0-.414-.168-.789-.439-1.061l-2-2zM17.5 29c-.829.0-1.5.672-1.5 1.5v3c0 .828.671 1.5 1.5 1.5s1.5-.672 1.5-1.5v-3C19 29.672 18.329 29 17.5 29zm0-22C11.71 7 7 11.71 7 17.5S11.71 28 17.5 28 28 23.29 28 17.5 23.29 7 17.5 7zm0 18c-4.136.0-7.5-3.364-7.5-7.5s3.364-7.5 7.5-7.5 7.5 3.364 7.5 7.5S21.636 25 17.5 25z"/></svg></label><label id=toggle-label-dark for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="nightIcon" viewBox="0 0 100 100" style="enable-background='new 0 0 100 100'"><title>Dark Mode</title><path d="M96.76 66.458c-.853-.852-2.15-1.064-3.23-.534-6.063 2.991-12.858 4.571-19.655 4.571C62.022 70.495 50.88 65.88 42.5 57.5 29.043 44.043 25.658 23.536 34.076 6.47c.532-1.08.318-2.379-.534-3.23-.851-.852-2.15-1.064-3.23-.534-4.918 2.427-9.375 5.619-13.246 9.491-9.447 9.447-14.65 22.008-14.65 35.369.0 13.36 5.203 25.921 14.65 35.368s22.008 14.65 35.368 14.65c13.361.0 25.921-5.203 35.369-14.65 3.872-3.871 7.064-8.328 9.491-13.246C97.826 68.608 97.611 67.309 96.76 66.458z"/></svg></label></div></header><body dir=ltr><input type=checkbox class="hidden toggle" id=menu-control><main class=flex><aside class=book-menu><div class=book-menu-content><nav><div class=menu-search><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div></div><ul><li><a href=/portfolio/>✑ my portfolio</a><ul><li><a href=/portfolio/animation/>Animation</a><ul></ul></li><li><a href=/portfolio/storyboards/>Storyboards</a><ul></ul></li></ul></li><li><span class=book-menu-title>✏ art</span><ul><li><a href=/art/drawings target=_blank rel=noopener>Drawings</a><ul><li><span class=book-menu-title>Diamond Head</span><ul><li><a href=/art/drawings/diamond-head/another-given-title-lol/>another given title lol</a></li><li><a href=/art/drawings/diamond-head/title-given-to-you/>title given to you</a></li></ul></li></ul></li><li><span class=book-menu-title>Animation</span><ul></ul></li><li><span class=book-menu-title>Comics</span><ul></ul></li><li><a href=/art/test/>Test</a></li></ul></li><li><input type=checkbox id=section-a16074696a2e072964041e9ad7cd8fd5 class=toggle>
<label for=section-a16074696a2e072964041e9ad7cd8fd5 class="flex justify-between"><a role=button class=book-collapse-toggle>writing</a></label><ul><li><input type=checkbox id=section-7ffcfa1a8c6611e17d1ae558fd094325 class=toggle>
<label for=section-7ffcfa1a8c6611e17d1ae558fd094325 class="flex justify-between"><a role=button class=book-collapse-toggle>fanfiction</a></label><ul><li><a href=/writing/fanfiction/bed-of-razors/>Bed of Razors</a></li></ul></li></ul></li><li><input type=checkbox id=section-0fd35236fb14ce8757c710cca55be827 class=toggle>
<label for=section-0fd35236fb14ce8757c710cca55be827 class="flex justify-between"><a href=/miscellany/ class=book-collapse-toggle>miscellaneous</a></label><ul><li><a href=/miscellany/test/>test</a></li><li><a href=/miscellany/two/>twoooo</a></li></ul></li></ul></nav><script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script></div></aside><div class="book-page container"><article class=markdown><h1 class=title>Diamond Head</h1><hr><div id=contact_buttons><footer><p>Made with <a href=https://github.com/64bitpandas/amethyst>Amethyst</a>, © 2024 The Tablet ❀ GamerGirlandCo (Corinthe)</p><ul><li><a href=https://instagram.com/i.am.the.tablet>instagram</a></li><li><a href=mailto:i.am.the.tablet@proton.me>say hi</a></li><li><a href=https://git.tablet.sh/the-btfash-foundation>and remember to stick it to Brian Tatler!</a></li></ul></footer></div></article><label for=menu-control class="hidden book-menu-overlay"></label></div><aside class=book-toc><div class=book-toc-content><div id=tabs-post-meta><div class=big-meta><div class="book-columns flex flex-wrap"></div></div><span class=post-date>Sunday, 8 January 2023 @ 12:00:00AM</span><div><div class=tags-heading><h3 class=small-caps>tags</h3></div><div class=tag-container></div></div></div><nav id=TableOfContents></nav></div></aside></main></body></html>

@ -1 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title/><link>https://tablet.sh/art/drawings/diamond-head/</link><description>Recent content on</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sun, 08 Jan 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://tablet.sh/art/drawings/diamond-head/index.xml" rel="self" type="application/rss+xml"/><item><title>another given title lol</title><link>https://tablet.sh/art/drawings/diamond-head/another-given-title-lol/</link><pubDate>Sun, 08 Jan 2023 00:00:00 +0000</pubDate><guid>https://tablet.sh/art/drawings/diamond-head/another-given-title-lol/</guid><description>this is a short summary. it&amp;rsquo;ll be kept short.</description></item><item><title>title given to you</title><link>https://tablet.sh/art/drawings/diamond-head/title-given-to-you/</link><pubDate>Thu, 05 Jan 2023 00:00:00 +0000</pubDate><guid>https://tablet.sh/art/drawings/diamond-head/title-given-to-you/</guid><description>a short summary?</description></item></channel></rss>

@ -1,20 +0,0 @@
<!doctype html><html lang=en dir=ltr><head><meta property="og:title" content="title given to you"><meta property="og:description" content="a short summary?"><meta property="og:type" content="article"><meta property="og:url" content="https://tablet.sh/art/drawings/diamond-head/title-given-to-you/"><meta property="article:section" content="art"><meta property="article:published_time" content="2023-01-05T00:00:00+00:00"><meta property="article:modified_time" content="2023-01-05T00:00:00+00:00"><meta property="og:site_name" content="tablet's place. 🌸"><title>title given to you | tablet's place. 🌸</title><link rel=manifest href=/manifest.json><link rel=icon href=/favicon.png type=image/x-icon><link rel=stylesheet href=/book.min.75fcdfd936adf96a20d23cab3f90d865e499434c01ab08de0f2f09ab8885316a.css integrity="sha256-dfzf2Tat+Wog0jyrP5DYZeSZQ0wBqwjeDy8Jq4iFMWo=" crossorigin=anonymous><meta charset=utf-8><meta name=description content="a short summary?"><title>title given to you</title><meta name=viewport content="width=device-width,initial-scale=1">/static/favicon.svg
<link href=https://tablet.sh/styles.acef3beecd7d4386af9dd5a555741f14.min.css rel=stylesheet><link href=https://tablet.sh/quartz/styles/_light_syntax.86a48a52faebeaaf42158b72922b1c90.min.css rel=stylesheet id=theme-link><link rel=preload href=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.css as=style onload='this.onload=null,this.rel="stylesheet"' integrity=sha384-R4558gYOUz8mP9YWpZJjofhk+zx0AS11p36HnD2ZKj/6JR5z27gSSULCNHIRReVs crossorigin=anonymous><script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.js integrity=sha384-z1fJDqw8ZApjGO3/unPWUPsIymfsJmyrDVWC8Tv/a1HeOtGmkwNd/7xUS0Xcnvsx crossorigin=anonymous></script>
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/contrib/auto-render.min.js integrity=sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR crossorigin=anonymous></script>
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/copy-tex.min.js integrity=sha384-ww/583aHhxWkz5DEVn6OKtNiIaLi2iBRNZXfJRiY1Ai7tnJ9UXpEsyvOITVpTl4A crossorigin=anonymous></script>
<script src=https://tablet.sh/quartz/js/darkmode.28fb245b04b633307edf3c5e2aea4b01.min.js></script>
<script src=https://tablet.sh/quartz/js/util.c69e233dc1cc331a30b0f670e657b425.min.js></script>
<script async src=https://unpkg.com/@floating-ui/core@0.7.3></script>
<script async src=https://unpkg.com/@floating-ui/dom@0.5.4></script>
<script src=https://tablet.sh/quartz/js/popover.f03552ccb84d99ca615d1cfb9abde59e.min.js></script>
<script defer src=https://tablet.sh/quartz/js/code-title.ce4a43f09239a9efb48fee342e8ef2df.min.js></script>
<script defer src=https://tablet.sh/quartz/js/clipboard.2913da76d3cb21c5deaa4bae7da38c9f.min.js></script>
<script defer src=https://tablet.sh/quartz/js/callouts.7723cac461d613d118ee8bb8216b9838.min.js></script>
<script>const SEARCH_ENABLED=!1,LATEX_ENABLED=!0,PRODUCTION=!0,BASE_URL="https://tablet.sh/",fetchData=Promise.all([fetch("https://tablet.sh/indices/linkIndex.68b59064bbe21a2354fe660da0c0b930.min.json").then(e=>e.json()).then(e=>({index:e.index,links:e.links})),fetch("https://tablet.sh/indices/contentIndex.2753d17841f071531fd8a8ef323a0345.min.json").then(e=>e.json())]).then(([{index:e,links:t},n])=>({index:e,links:t,content:n})),render=()=>{const e=new URL(BASE_URL),t=e.pathname,n=window.location.pathname,o=t==n;addCopyButtons(),addCollapsibleCallouts(),initPopover("https://tablet.sh",!0);var s=document.getElementsByClassName("mermaid");s.length>0&&import("https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs").then(e=>{e.default.init()})},init=(e=document)=>{addCopyButtons(),addTitleToCodeBlocks(),renderMathInElement(e.body,{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1}],macros:{"":"'"},throwOnError:!1})}</script><script>window.Million={navigate:e=>window.location.href=e,prefetch:()=>{}},window.addEventListener("DOMContentLoaded",()=>{init(),render()})</script></head><div id=search-container><div id=search-space><input autocomplete=off id=search-bar name=search type=text aria-label=Search placeholder="Search for something..."><div id=results-container></div></div></div><script src=https://cdn.jsdelivr.net/npm/flexsearch@0.7.21/dist/flexsearch.bundle.js integrity="sha256-i3A0NZGkhsKjVMzFxv3ksk0DZh3aXqu0l49Bbh0MdjE=" crossorigin=anonymous defer></script>
<script defer src=https://tablet.sh/quartz/js/full-text-search.e6e2e0c213187ca0c703d6e2c7a77fcd.min.js></script><header class=book-header><label for=menu-control><img src=/svg/menu.svg class=book-icon alt=Menu></label><h1 id=page-title><a href=https://tablet.sh/>tablet's place. 🌸</a></h1><div class=spacer></div><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div><div class=darkmode><input class=toggle id=darkmode-toggle type=checkbox tabindex=-1>
<label id=toggle-label-light for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="dayIcon" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35"><title>Light Mode</title><path d="M6 17.5C6 16.672 5.328 16 4.5 16h-3C.672 16 0 16.672.0 17.5S.672 19 1.5 19h3C5.328 19 6 18.328 6 17.5zM7.5 26c-.414.0-.789.168-1.061.439l-2 2C4.168 28.711 4 29.086 4 29.5 4 30.328 4.671 31 5.5 31c.414.0.789-.168 1.06-.44l2-2C8.832 28.289 9 27.914 9 27.5 9 26.672 8.329 26 7.5 26zm10-20C18.329 6 19 5.328 19 4.5v-3C19 .672 18.329.0 17.5.0S16 .672 16 1.5v3C16 5.328 16.671 6 17.5 6zm10 3c.414.0.789-.168 1.06-.439l2-2C30.832 6.289 31 5.914 31 5.5 31 4.672 30.329 4 29.5 4c-.414.0-.789.168-1.061.44l-2 2C26.168 6.711 26 7.086 26 7.5 26 8.328 26.671 9 27.5 9zM6.439 8.561C6.711 8.832 7.086 9 7.5 9 8.328 9 9 8.328 9 7.5c0-.414-.168-.789-.439-1.061l-2-2C6.289 4.168 5.914 4 5.5 4 4.672 4 4 4.672 4 5.5c0 .414.168.789.439 1.06l2 2.001zM33.5 16h-3c-.828.0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5h3c.828.0 1.5-.672 1.5-1.5S34.328 16 33.5 16zM28.561 26.439C28.289 26.168 27.914 26 27.5 26c-.828.0-1.5.672-1.5 1.5.0.414.168.789.439 1.06l2 2C28.711 30.832 29.086 31 29.5 31c.828.0 1.5-.672 1.5-1.5.0-.414-.168-.789-.439-1.061l-2-2zM17.5 29c-.829.0-1.5.672-1.5 1.5v3c0 .828.671 1.5 1.5 1.5s1.5-.672 1.5-1.5v-3C19 29.672 18.329 29 17.5 29zm0-22C11.71 7 7 11.71 7 17.5S11.71 28 17.5 28 28 23.29 28 17.5 23.29 7 17.5 7zm0 18c-4.136.0-7.5-3.364-7.5-7.5s3.364-7.5 7.5-7.5 7.5 3.364 7.5 7.5S21.636 25 17.5 25z"/></svg></label><label id=toggle-label-dark for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="nightIcon" viewBox="0 0 100 100" style="enable-background='new 0 0 100 100'"><title>Dark Mode</title><path d="M96.76 66.458c-.853-.852-2.15-1.064-3.23-.534-6.063 2.991-12.858 4.571-19.655 4.571C62.022 70.495 50.88 65.88 42.5 57.5 29.043 44.043 25.658 23.536 34.076 6.47c.532-1.08.318-2.379-.534-3.23-.851-.852-2.15-1.064-3.23-.534-4.918 2.427-9.375 5.619-13.246 9.491-9.447 9.447-14.65 22.008-14.65 35.369.0 13.36 5.203 25.921 14.65 35.368s22.008 14.65 35.368 14.65c13.361.0 25.921-5.203 35.369-14.65 3.872-3.871 7.064-8.328 9.491-13.246C97.826 68.608 97.611 67.309 96.76 66.458z"/></svg></label></div></header><body dir=ltr><input type=checkbox class="hidden toggle" id=menu-control><main class=flex><aside class=book-menu><div class=book-menu-content><nav><div class=menu-search><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div></div><ul><li><a href=/portfolio/>✑ my portfolio</a><ul><li><a href=/portfolio/animation/>Animation</a><ul></ul></li><li><a href=/portfolio/storyboards/>Storyboards</a><ul></ul></li></ul></li><li><span class=book-menu-title>✏ art</span><ul><li><a href=/art/drawings target=_blank rel=noopener>Drawings</a><ul><li><span class=book-menu-title>Diamond Head</span><ul><li><a href=/art/drawings/diamond-head/another-given-title-lol/>another given title lol</a></li><li><a href=/art/drawings/diamond-head/title-given-to-you/ class=active>title given to you</a></li></ul></li></ul></li><li><span class=book-menu-title>Animation</span><ul></ul></li><li><span class=book-menu-title>Comics</span><ul></ul></li><li><a href=/art/test/>Test</a></li></ul></li><li><input type=checkbox id=section-a16074696a2e072964041e9ad7cd8fd5 class=toggle>
<label for=section-a16074696a2e072964041e9ad7cd8fd5 class="flex justify-between"><a role=button class=book-collapse-toggle>writing</a></label><ul><li><input type=checkbox id=section-7ffcfa1a8c6611e17d1ae558fd094325 class=toggle>
<label for=section-7ffcfa1a8c6611e17d1ae558fd094325 class="flex justify-between"><a role=button class=book-collapse-toggle>fanfiction</a></label><ul><li><a href=/writing/fanfiction/bed-of-razors/>Bed of Razors</a></li></ul></li></ul></li><li><input type=checkbox id=section-0fd35236fb14ce8757c710cca55be827 class=toggle>
<label for=section-0fd35236fb14ce8757c710cca55be827 class="flex justify-between"><a href=/miscellany/ class=book-collapse-toggle>miscellaneous</a></label><ul><li><a href=/miscellany/test/>test</a></li><li><a href=/miscellany/two/>twoooo</a></li></ul></li></ul></nav><script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script></div></aside><div class="book-page container"><article class=markdown><h1 class=title>title given to you</h1><h1 id=title-given-to-you>title given to you
<a class=anchor href=#title-given-to-you>#</a></h1><p><img src=https://tablet.sh//img/1672981700.png width=auto alt=/img/1672981700.png></p><hr><blockquote class=outline-callout><p>hi hello nice
i want a thing</p></blockquote><hr><div id=contact_buttons><footer><p>Made with <a href=https://github.com/64bitpandas/amethyst>Amethyst</a>, © 2024 The Tablet ❀ GamerGirlandCo (Corinthe)</p><ul><li><a href=https://instagram.com/i.am.the.tablet>instagram</a></li><li><a href=mailto:i.am.the.tablet@proton.me>say hi</a></li><li><a href=https://git.tablet.sh/the-btfash-foundation>and remember to stick it to Brian Tatler!</a></li></ul></footer></div></article><div class=book-comments></div><label for=menu-control class="hidden book-menu-overlay"></label></div><aside class=book-toc><div class=book-toc-content><div id=tabs-post-meta><div class=big-meta><div class="book-columns flex flex-wrap"></div></div><span class=post-date>Thursday, 5 January 2023 @ 12:00:00AM</span><div><div class=tags-heading><h3 class=small-caps>tags</h3></div><div class=tag-container></div></div></div><nav id=TableOfContents><ul><li><a href=#title-given-to-you>title given to you</a></li></ul></nav></div></aside></main></body></html>

@ -1,20 +0,0 @@
<!doctype html><html lang=en dir=ltr><head><meta http-equiv=refresh content="0; url='/art/drawings'"><meta property="og:title" content><meta property="og:description" content="Art, Metal, Code, and Creativity.
hosted by Tablet !
"><meta property="og:type" content="website"><meta property="og:url" content="https://tablet.sh/art/drawings/"><meta property="og:site_name" content="tablet's place. 🌸"><title>Drawings | tablet's place. 🌸</title><link rel=manifest href=/manifest.json><link rel=icon href=/favicon.png type=image/x-icon><link rel=stylesheet href=/book.min.75fcdfd936adf96a20d23cab3f90d865e499434c01ab08de0f2f09ab8885316a.css integrity="sha256-dfzf2Tat+Wog0jyrP5DYZeSZQ0wBqwjeDy8Jq4iFMWo=" crossorigin=anonymous><link rel=alternate type=application/rss+xml href=https://tablet.sh/art/drawings/index.xml title><meta charset=utf-8><meta name=description content><title>tablet's place. 🌸</title><meta name=viewport content="width=device-width,initial-scale=1">/static/favicon.svg
<link href=https://tablet.sh/styles.acef3beecd7d4386af9dd5a555741f14.min.css rel=stylesheet><link href=https://tablet.sh/quartz/styles/_light_syntax.86a48a52faebeaaf42158b72922b1c90.min.css rel=stylesheet id=theme-link><link rel=preload href=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.css as=style onload='this.onload=null,this.rel="stylesheet"' integrity=sha384-R4558gYOUz8mP9YWpZJjofhk+zx0AS11p36HnD2ZKj/6JR5z27gSSULCNHIRReVs crossorigin=anonymous><script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.js integrity=sha384-z1fJDqw8ZApjGO3/unPWUPsIymfsJmyrDVWC8Tv/a1HeOtGmkwNd/7xUS0Xcnvsx crossorigin=anonymous></script>
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/contrib/auto-render.min.js integrity=sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR crossorigin=anonymous></script>
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/copy-tex.min.js integrity=sha384-ww/583aHhxWkz5DEVn6OKtNiIaLi2iBRNZXfJRiY1Ai7tnJ9UXpEsyvOITVpTl4A crossorigin=anonymous></script>
<script src=https://tablet.sh/quartz/js/darkmode.28fb245b04b633307edf3c5e2aea4b01.min.js></script>
<script src=https://tablet.sh/quartz/js/util.c69e233dc1cc331a30b0f670e657b425.min.js></script>
<script async src=https://unpkg.com/@floating-ui/core@0.7.3></script>
<script async src=https://unpkg.com/@floating-ui/dom@0.5.4></script>
<script src=https://tablet.sh/quartz/js/popover.f03552ccb84d99ca615d1cfb9abde59e.min.js></script>
<script defer src=https://tablet.sh/quartz/js/code-title.ce4a43f09239a9efb48fee342e8ef2df.min.js></script>
<script defer src=https://tablet.sh/quartz/js/clipboard.2913da76d3cb21c5deaa4bae7da38c9f.min.js></script>
<script defer src=https://tablet.sh/quartz/js/callouts.7723cac461d613d118ee8bb8216b9838.min.js></script>
<script>const SEARCH_ENABLED=!1,LATEX_ENABLED=!0,PRODUCTION=!0,BASE_URL="https://tablet.sh/",fetchData=Promise.all([fetch("https://tablet.sh/indices/linkIndex.68b59064bbe21a2354fe660da0c0b930.min.json").then(e=>e.json()).then(e=>({index:e.index,links:e.links})),fetch("https://tablet.sh/indices/contentIndex.2753d17841f071531fd8a8ef323a0345.min.json").then(e=>e.json())]).then(([{index:e,links:t},n])=>({index:e,links:t,content:n})),render=()=>{const e=new URL(BASE_URL),t=e.pathname,n=window.location.pathname,o=t==n;addCopyButtons(),addCollapsibleCallouts(),initPopover("https://tablet.sh",!0);var s=document.getElementsByClassName("mermaid");s.length>0&&import("https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs").then(e=>{e.default.init()})},init=(e=document)=>{addCopyButtons(),addTitleToCodeBlocks(),renderMathInElement(e.body,{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1}],macros:{"":"'"},throwOnError:!1})}</script><script>window.Million={navigate:e=>window.location.href=e,prefetch:()=>{}},window.addEventListener("DOMContentLoaded",()=>{init(),render()})</script></head><div id=search-container><div id=search-space><input autocomplete=off id=search-bar name=search type=text aria-label=Search placeholder="Search for something..."><div id=results-container></div></div></div><script src=https://cdn.jsdelivr.net/npm/flexsearch@0.7.21/dist/flexsearch.bundle.js integrity="sha256-i3A0NZGkhsKjVMzFxv3ksk0DZh3aXqu0l49Bbh0MdjE=" crossorigin=anonymous defer></script>
<script defer src=https://tablet.sh/quartz/js/full-text-search.e6e2e0c213187ca0c703d6e2c7a77fcd.min.js></script><header class=book-header><label for=menu-control><img src=/svg/menu.svg class=book-icon alt=Menu></label><h1 id=page-title><a href=https://tablet.sh/>tablet's place. 🌸</a></h1><div class=spacer></div><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div><div class=darkmode><input class=toggle id=darkmode-toggle type=checkbox tabindex=-1>
<label id=toggle-label-light for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="dayIcon" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35"><title>Light Mode</title><path d="M6 17.5C6 16.672 5.328 16 4.5 16h-3C.672 16 0 16.672.0 17.5S.672 19 1.5 19h3C5.328 19 6 18.328 6 17.5zM7.5 26c-.414.0-.789.168-1.061.439l-2 2C4.168 28.711 4 29.086 4 29.5 4 30.328 4.671 31 5.5 31c.414.0.789-.168 1.06-.44l2-2C8.832 28.289 9 27.914 9 27.5 9 26.672 8.329 26 7.5 26zm10-20C18.329 6 19 5.328 19 4.5v-3C19 .672 18.329.0 17.5.0S16 .672 16 1.5v3C16 5.328 16.671 6 17.5 6zm10 3c.414.0.789-.168 1.06-.439l2-2C30.832 6.289 31 5.914 31 5.5 31 4.672 30.329 4 29.5 4c-.414.0-.789.168-1.061.44l-2 2C26.168 6.711 26 7.086 26 7.5 26 8.328 26.671 9 27.5 9zM6.439 8.561C6.711 8.832 7.086 9 7.5 9 8.328 9 9 8.328 9 7.5c0-.414-.168-.789-.439-1.061l-2-2C6.289 4.168 5.914 4 5.5 4 4.672 4 4 4.672 4 5.5c0 .414.168.789.439 1.06l2 2.001zM33.5 16h-3c-.828.0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5h3c.828.0 1.5-.672 1.5-1.5S34.328 16 33.5 16zM28.561 26.439C28.289 26.168 27.914 26 27.5 26c-.828.0-1.5.672-1.5 1.5.0.414.168.789.439 1.06l2 2C28.711 30.832 29.086 31 29.5 31c.828.0 1.5-.672 1.5-1.5.0-.414-.168-.789-.439-1.061l-2-2zM17.5 29c-.829.0-1.5.672-1.5 1.5v3c0 .828.671 1.5 1.5 1.5s1.5-.672 1.5-1.5v-3C19 29.672 18.329 29 17.5 29zm0-22C11.71 7 7 11.71 7 17.5S11.71 28 17.5 28 28 23.29 28 17.5 23.29 7 17.5 7zm0 18c-4.136.0-7.5-3.364-7.5-7.5s3.364-7.5 7.5-7.5 7.5 3.364 7.5 7.5S21.636 25 17.5 25z"/></svg></label><label id=toggle-label-dark for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="nightIcon" viewBox="0 0 100 100" style="enable-background='new 0 0 100 100'"><title>Dark Mode</title><path d="M96.76 66.458c-.853-.852-2.15-1.064-3.23-.534-6.063 2.991-12.858 4.571-19.655 4.571C62.022 70.495 50.88 65.88 42.5 57.5 29.043 44.043 25.658 23.536 34.076 6.47c.532-1.08.318-2.379-.534-3.23-.851-.852-2.15-1.064-3.23-.534-4.918 2.427-9.375 5.619-13.246 9.491-9.447 9.447-14.65 22.008-14.65 35.369.0 13.36 5.203 25.921 14.65 35.368s22.008 14.65 35.368 14.65c13.361.0 25.921-5.203 35.369-14.65 3.872-3.871 7.064-8.328 9.491-13.246C97.826 68.608 97.611 67.309 96.76 66.458z"/></svg></label></div></header><body dir=ltr><input type=checkbox class="hidden toggle" id=menu-control><main class=flex><aside class=book-menu><div class=book-menu-content><nav><div class=menu-search><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div></div><ul><li><a href=/portfolio/>✑ my portfolio</a><ul><li><a href=/portfolio/animation/>Animation</a><ul></ul></li><li><a href=/portfolio/storyboards/>Storyboards</a><ul></ul></li></ul></li><li><span class=book-menu-title>✏ art</span><ul><li><a href=/art/drawings class=active target=_blank rel=noopener>Drawings</a><ul><li><span class=book-menu-title>Diamond Head</span><ul><li><a href=/art/drawings/diamond-head/another-given-title-lol/>another given title lol</a></li><li><a href=/art/drawings/diamond-head/title-given-to-you/>title given to you</a></li></ul></li></ul></li><li><span class=book-menu-title>Animation</span><ul></ul></li><li><span class=book-menu-title>Comics</span><ul></ul></li><li><a href=/art/test/>Test</a></li></ul></li><li><input type=checkbox id=section-a16074696a2e072964041e9ad7cd8fd5 class=toggle>
<label for=section-a16074696a2e072964041e9ad7cd8fd5 class="flex justify-between"><a role=button class=book-collapse-toggle>writing</a></label><ul><li><input type=checkbox id=section-7ffcfa1a8c6611e17d1ae558fd094325 class=toggle>
<label for=section-7ffcfa1a8c6611e17d1ae558fd094325 class="flex justify-between"><a role=button class=book-collapse-toggle>fanfiction</a></label><ul><li><a href=/writing/fanfiction/bed-of-razors/>Bed of Razors</a></li></ul></li></ul></li><li><input type=checkbox id=section-0fd35236fb14ce8757c710cca55be827 class=toggle>
<label for=section-0fd35236fb14ce8757c710cca55be827 class="flex justify-between"><a href=/miscellany/ class=book-collapse-toggle>miscellaneous</a></label><ul><li><a href=/miscellany/test/>test</a></li><li><a href=/miscellany/two/>twoooo</a></li></ul></li></ul></nav><script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script></div></aside><div class="book-page container"><article class=markdown><h1 class=title>Drawings</h1><hr><div id=contact_buttons><footer><p>Made with <a href=https://github.com/64bitpandas/amethyst>Amethyst</a>, © 2024 The Tablet ❀ GamerGirlandCo (Corinthe)</p><ul><li><a href=https://instagram.com/i.am.the.tablet>instagram</a></li><li><a href=mailto:i.am.the.tablet@proton.me>say hi</a></li><li><a href=https://git.tablet.sh/the-btfash-foundation>and remember to stick it to Brian Tatler!</a></li></ul></footer></div></article><label for=menu-control class="hidden book-menu-overlay"></label></div><aside class=book-toc><div class=book-toc-content><div id=tabs-post-meta><div class=big-meta><div class="book-columns flex flex-wrap"></div></div><span class=post-date>Sunday, 8 January 2023 @ 12:00:00AM</span><div><div class=tags-heading><h3 class=small-caps>tags</h3></div><div class=tag-container></div></div></div><nav id=TableOfContents></nav></div></aside></main></body></html>

@ -1 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title/><link>https://tablet.sh/art/drawings/</link><description>Recent content on</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sun, 08 Jan 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://tablet.sh/art/drawings/index.xml" rel="self" type="application/rss+xml"/></channel></rss>

@ -1,20 +0,0 @@
<!doctype html><html lang=en dir=ltr><head><meta property="og:title" content="✏ art"><meta property="og:description" content="Art, Metal, Code, and Creativity.
hosted by Tablet !
"><meta property="og:type" content="website"><meta property="og:url" content="https://tablet.sh/art/"><meta property="og:site_name" content="tablet's place. 🌸"><title>✏ art | tablet's place. 🌸</title><link rel=manifest href=/manifest.json><link rel=icon href=/favicon.png type=image/x-icon><link rel=stylesheet href=/book.min.75fcdfd936adf96a20d23cab3f90d865e499434c01ab08de0f2f09ab8885316a.css integrity="sha256-dfzf2Tat+Wog0jyrP5DYZeSZQ0wBqwjeDy8Jq4iFMWo=" crossorigin=anonymous><link rel=alternate type=application/rss+xml href=https://tablet.sh/art/index.xml title><meta charset=utf-8><meta name=description content><title>✏ art</title><meta name=viewport content="width=device-width,initial-scale=1">/static/favicon.svg
<link href=https://tablet.sh/styles.acef3beecd7d4386af9dd5a555741f14.min.css rel=stylesheet><link href=https://tablet.sh/quartz/styles/_light_syntax.86a48a52faebeaaf42158b72922b1c90.min.css rel=stylesheet id=theme-link><link rel=preload href=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.css as=style onload='this.onload=null,this.rel="stylesheet"' integrity=sha384-R4558gYOUz8mP9YWpZJjofhk+zx0AS11p36HnD2ZKj/6JR5z27gSSULCNHIRReVs crossorigin=anonymous><script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.js integrity=sha384-z1fJDqw8ZApjGO3/unPWUPsIymfsJmyrDVWC8Tv/a1HeOtGmkwNd/7xUS0Xcnvsx crossorigin=anonymous></script>
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/contrib/auto-render.min.js integrity=sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR crossorigin=anonymous></script>
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/copy-tex.min.js integrity=sha384-ww/583aHhxWkz5DEVn6OKtNiIaLi2iBRNZXfJRiY1Ai7tnJ9UXpEsyvOITVpTl4A crossorigin=anonymous></script>
<script src=https://tablet.sh/quartz/js/darkmode.28fb245b04b633307edf3c5e2aea4b01.min.js></script>
<script src=https://tablet.sh/quartz/js/util.c69e233dc1cc331a30b0f670e657b425.min.js></script>
<script async src=https://unpkg.com/@floating-ui/core@0.7.3></script>
<script async src=https://unpkg.com/@floating-ui/dom@0.5.4></script>
<script src=https://tablet.sh/quartz/js/popover.f03552ccb84d99ca615d1cfb9abde59e.min.js></script>
<script defer src=https://tablet.sh/quartz/js/code-title.ce4a43f09239a9efb48fee342e8ef2df.min.js></script>
<script defer src=https://tablet.sh/quartz/js/clipboard.2913da76d3cb21c5deaa4bae7da38c9f.min.js></script>
<script defer src=https://tablet.sh/quartz/js/callouts.7723cac461d613d118ee8bb8216b9838.min.js></script>
<script>const SEARCH_ENABLED=!1,LATEX_ENABLED=!0,PRODUCTION=!0,BASE_URL="https://tablet.sh/",fetchData=Promise.all([fetch("https://tablet.sh/indices/linkIndex.68b59064bbe21a2354fe660da0c0b930.min.json").then(e=>e.json()).then(e=>({index:e.index,links:e.links})),fetch("https://tablet.sh/indices/contentIndex.2753d17841f071531fd8a8ef323a0345.min.json").then(e=>e.json())]).then(([{index:e,links:t},n])=>({index:e,links:t,content:n})),render=()=>{const e=new URL(BASE_URL),t=e.pathname,n=window.location.pathname,o=t==n;addCopyButtons(),addCollapsibleCallouts(),initPopover("https://tablet.sh",!0);var s=document.getElementsByClassName("mermaid");s.length>0&&import("https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs").then(e=>{e.default.init()})},init=(e=document)=>{addCopyButtons(),addTitleToCodeBlocks(),renderMathInElement(e.body,{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1}],macros:{"":"'"},throwOnError:!1})}</script><script>window.Million={navigate:e=>window.location.href=e,prefetch:()=>{}},window.addEventListener("DOMContentLoaded",()=>{init(),render()})</script></head><div id=search-container><div id=search-space><input autocomplete=off id=search-bar name=search type=text aria-label=Search placeholder="Search for something..."><div id=results-container></div></div></div><script src=https://cdn.jsdelivr.net/npm/flexsearch@0.7.21/dist/flexsearch.bundle.js integrity="sha256-i3A0NZGkhsKjVMzFxv3ksk0DZh3aXqu0l49Bbh0MdjE=" crossorigin=anonymous defer></script>
<script defer src=https://tablet.sh/quartz/js/full-text-search.e6e2e0c213187ca0c703d6e2c7a77fcd.min.js></script><header class=book-header><label for=menu-control><img src=/svg/menu.svg class=book-icon alt=Menu></label><h1 id=page-title><a href=https://tablet.sh/>tablet's place. 🌸</a></h1><div class=spacer></div><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div><div class=darkmode><input class=toggle id=darkmode-toggle type=checkbox tabindex=-1>
<label id=toggle-label-light for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="dayIcon" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35"><title>Light Mode</title><path d="M6 17.5C6 16.672 5.328 16 4.5 16h-3C.672 16 0 16.672.0 17.5S.672 19 1.5 19h3C5.328 19 6 18.328 6 17.5zM7.5 26c-.414.0-.789.168-1.061.439l-2 2C4.168 28.711 4 29.086 4 29.5 4 30.328 4.671 31 5.5 31c.414.0.789-.168 1.06-.44l2-2C8.832 28.289 9 27.914 9 27.5 9 26.672 8.329 26 7.5 26zm10-20C18.329 6 19 5.328 19 4.5v-3C19 .672 18.329.0 17.5.0S16 .672 16 1.5v3C16 5.328 16.671 6 17.5 6zm10 3c.414.0.789-.168 1.06-.439l2-2C30.832 6.289 31 5.914 31 5.5 31 4.672 30.329 4 29.5 4c-.414.0-.789.168-1.061.44l-2 2C26.168 6.711 26 7.086 26 7.5 26 8.328 26.671 9 27.5 9zM6.439 8.561C6.711 8.832 7.086 9 7.5 9 8.328 9 9 8.328 9 7.5c0-.414-.168-.789-.439-1.061l-2-2C6.289 4.168 5.914 4 5.5 4 4.672 4 4 4.672 4 5.5c0 .414.168.789.439 1.06l2 2.001zM33.5 16h-3c-.828.0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5h3c.828.0 1.5-.672 1.5-1.5S34.328 16 33.5 16zM28.561 26.439C28.289 26.168 27.914 26 27.5 26c-.828.0-1.5.672-1.5 1.5.0.414.168.789.439 1.06l2 2C28.711 30.832 29.086 31 29.5 31c.828.0 1.5-.672 1.5-1.5.0-.414-.168-.789-.439-1.061l-2-2zM17.5 29c-.829.0-1.5.672-1.5 1.5v3c0 .828.671 1.5 1.5 1.5s1.5-.672 1.5-1.5v-3C19 29.672 18.329 29 17.5 29zm0-22C11.71 7 7 11.71 7 17.5S11.71 28 17.5 28 28 23.29 28 17.5 23.29 7 17.5 7zm0 18c-4.136.0-7.5-3.364-7.5-7.5s3.364-7.5 7.5-7.5 7.5 3.364 7.5 7.5S21.636 25 17.5 25z"/></svg></label><label id=toggle-label-dark for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="nightIcon" viewBox="0 0 100 100" style="enable-background='new 0 0 100 100'"><title>Dark Mode</title><path d="M96.76 66.458c-.853-.852-2.15-1.064-3.23-.534-6.063 2.991-12.858 4.571-19.655 4.571C62.022 70.495 50.88 65.88 42.5 57.5 29.043 44.043 25.658 23.536 34.076 6.47c.532-1.08.318-2.379-.534-3.23-.851-.852-2.15-1.064-3.23-.534-4.918 2.427-9.375 5.619-13.246 9.491-9.447 9.447-14.65 22.008-14.65 35.369.0 13.36 5.203 25.921 14.65 35.368s22.008 14.65 35.368 14.65c13.361.0 25.921-5.203 35.369-14.65 3.872-3.871 7.064-8.328 9.491-13.246C97.826 68.608 97.611 67.309 96.76 66.458z"/></svg></label></div></header><body dir=ltr><input type=checkbox class="hidden toggle" id=menu-control><main class=flex><aside class=book-menu><div class=book-menu-content><nav><div class=menu-search><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div></div><ul><li><a href=/portfolio/>✑ my portfolio</a><ul><li><a href=/portfolio/animation/>Animation</a><ul></ul></li><li><a href=/portfolio/storyboards/>Storyboards</a><ul></ul></li></ul></li><li><span class=book-menu-title>✏ art</span><ul><li><a href=/art/drawings target=_blank rel=noopener>Drawings</a><ul><li><span class=book-menu-title>Diamond Head</span><ul><li><a href=/art/drawings/diamond-head/another-given-title-lol/>another given title lol</a></li><li><a href=/art/drawings/diamond-head/title-given-to-you/>title given to you</a></li></ul></li></ul></li><li><span class=book-menu-title>Animation</span><ul></ul></li><li><span class=book-menu-title>Comics</span><ul></ul></li><li><a href=/art/test/>Test</a></li></ul></li><li><input type=checkbox id=section-a16074696a2e072964041e9ad7cd8fd5 class=toggle>
<label for=section-a16074696a2e072964041e9ad7cd8fd5 class="flex justify-between"><a role=button class=book-collapse-toggle>writing</a></label><ul><li><input type=checkbox id=section-7ffcfa1a8c6611e17d1ae558fd094325 class=toggle>
<label for=section-7ffcfa1a8c6611e17d1ae558fd094325 class="flex justify-between"><a role=button class=book-collapse-toggle>fanfiction</a></label><ul><li><a href=/writing/fanfiction/bed-of-razors/>Bed of Razors</a></li></ul></li></ul></li><li><input type=checkbox id=section-0fd35236fb14ce8757c710cca55be827 class=toggle>
<label for=section-0fd35236fb14ce8757c710cca55be827 class="flex justify-between"><a href=/miscellany/ class=book-collapse-toggle>miscellaneous</a></label><ul><li><a href=/miscellany/test/>test</a></li><li><a href=/miscellany/two/>twoooo</a></li></ul></li></ul></nav><script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script></div></aside><div class="book-page container"><article class=markdown><h1 class=title>✏ art</h1><hr><div id=contact_buttons><footer><p>Made with <a href=https://github.com/64bitpandas/amethyst>Amethyst</a>, © 2024 The Tablet ❀ GamerGirlandCo (Corinthe)</p><ul><li><a href=https://instagram.com/i.am.the.tablet>instagram</a></li><li><a href=mailto:i.am.the.tablet@proton.me>say hi</a></li><li><a href=https://git.tablet.sh/the-btfash-foundation>and remember to stick it to Brian Tatler!</a></li></ul></footer></div></article><label for=menu-control class="hidden book-menu-overlay"></label></div><aside class=book-toc><div class=book-toc-content><div id=tabs-post-meta><div class=big-meta><div class="book-columns flex flex-wrap"></div></div><span class=post-date>Sunday, 8 January 2023 @ 12:00:00AM</span><div><div class=tags-heading><h3 class=small-caps>tags</h3></div><div class=tag-container></div></div></div><nav id=TableOfContents></nav></div></aside></main></body></html>

@ -1 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>✏ art on</title><link>https://tablet.sh/art/</link><description>Recent content in ✏ art on</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sun, 08 Jan 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://tablet.sh/art/index.xml" rel="self" type="application/rss+xml"/><item><title/><link>https://tablet.sh/art/test/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://tablet.sh/art/test/</guid><description> hello universe #</description></item></channel></rss>

@ -1,19 +0,0 @@
<!doctype html><html lang=en dir=ltr><head><meta property="og:title" content><meta property="og:description" content=" hello universe # "><meta property="og:type" content="article"><meta property="og:url" content="https://tablet.sh/art/test/"><meta property="article:section" content="art"><meta property="og:site_name" content="tablet's place. 🌸"><title>Test | tablet's place. 🌸</title><link rel=manifest href=/manifest.json><link rel=icon href=/favicon.png type=image/x-icon><link rel=stylesheet href=/book.min.75fcdfd936adf96a20d23cab3f90d865e499434c01ab08de0f2f09ab8885316a.css integrity="sha256-dfzf2Tat+Wog0jyrP5DYZeSZQ0wBqwjeDy8Jq4iFMWo=" crossorigin=anonymous><meta charset=utf-8><meta name=description content=" hello universe # "><title>tablet's place. 🌸</title><meta name=viewport content="width=device-width,initial-scale=1">/static/favicon.svg
<link href=https://tablet.sh/styles.acef3beecd7d4386af9dd5a555741f14.min.css rel=stylesheet><link href=https://tablet.sh/quartz/styles/_light_syntax.86a48a52faebeaaf42158b72922b1c90.min.css rel=stylesheet id=theme-link><link rel=preload href=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.css as=style onload='this.onload=null,this.rel="stylesheet"' integrity=sha384-R4558gYOUz8mP9YWpZJjofhk+zx0AS11p36HnD2ZKj/6JR5z27gSSULCNHIRReVs crossorigin=anonymous><script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/katex.min.js integrity=sha384-z1fJDqw8ZApjGO3/unPWUPsIymfsJmyrDVWC8Tv/a1HeOtGmkwNd/7xUS0Xcnvsx crossorigin=anonymous></script>
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.1/dist/contrib/auto-render.min.js integrity=sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR crossorigin=anonymous></script>
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.16.2/dist/contrib/copy-tex.min.js integrity=sha384-ww/583aHhxWkz5DEVn6OKtNiIaLi2iBRNZXfJRiY1Ai7tnJ9UXpEsyvOITVpTl4A crossorigin=anonymous></script>
<script src=https://tablet.sh/quartz/js/darkmode.28fb245b04b633307edf3c5e2aea4b01.min.js></script>
<script src=https://tablet.sh/quartz/js/util.c69e233dc1cc331a30b0f670e657b425.min.js></script>
<script async src=https://unpkg.com/@floating-ui/core@0.7.3></script>
<script async src=https://unpkg.com/@floating-ui/dom@0.5.4></script>
<script src=https://tablet.sh/quartz/js/popover.f03552ccb84d99ca615d1cfb9abde59e.min.js></script>
<script defer src=https://tablet.sh/quartz/js/code-title.ce4a43f09239a9efb48fee342e8ef2df.min.js></script>
<script defer src=https://tablet.sh/quartz/js/clipboard.2913da76d3cb21c5deaa4bae7da38c9f.min.js></script>
<script defer src=https://tablet.sh/quartz/js/callouts.7723cac461d613d118ee8bb8216b9838.min.js></script>
<script>const SEARCH_ENABLED=!1,LATEX_ENABLED=!0,PRODUCTION=!0,BASE_URL="https://tablet.sh/",fetchData=Promise.all([fetch("https://tablet.sh/indices/linkIndex.68b59064bbe21a2354fe660da0c0b930.min.json").then(e=>e.json()).then(e=>({index:e.index,links:e.links})),fetch("https://tablet.sh/indices/contentIndex.2753d17841f071531fd8a8ef323a0345.min.json").then(e=>e.json())]).then(([{index:e,links:t},n])=>({index:e,links:t,content:n})),render=()=>{const e=new URL(BASE_URL),t=e.pathname,n=window.location.pathname,o=t==n;addCopyButtons(),addCollapsibleCallouts(),initPopover("https://tablet.sh",!0);var s=document.getElementsByClassName("mermaid");s.length>0&&import("https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs").then(e=>{e.default.init()})},init=(e=document)=>{addCopyButtons(),addTitleToCodeBlocks(),renderMathInElement(e.body,{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1}],macros:{"":"'"},throwOnError:!1})}</script><script>window.Million={navigate:e=>window.location.href=e,prefetch:()=>{}},window.addEventListener("DOMContentLoaded",()=>{init(),render()})</script></head><div id=search-container><div id=search-space><input autocomplete=off id=search-bar name=search type=text aria-label=Search placeholder="Search for something..."><div id=results-container></div></div></div><script src=https://cdn.jsdelivr.net/npm/flexsearch@0.7.21/dist/flexsearch.bundle.js integrity="sha256-i3A0NZGkhsKjVMzFxv3ksk0DZh3aXqu0l49Bbh0MdjE=" crossorigin=anonymous defer></script>
<script defer src=https://tablet.sh/quartz/js/full-text-search.e6e2e0c213187ca0c703d6e2c7a77fcd.min.js></script><header class=book-header><label for=menu-control><img src=/svg/menu.svg class=book-icon alt=Menu></label><h1 id=page-title><a href=https://tablet.sh/>tablet's place. 🌸</a></h1><div class=spacer></div><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div><div class=darkmode><input class=toggle id=darkmode-toggle type=checkbox tabindex=-1>
<label id=toggle-label-light for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="dayIcon" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35"><title>Light Mode</title><path d="M6 17.5C6 16.672 5.328 16 4.5 16h-3C.672 16 0 16.672.0 17.5S.672 19 1.5 19h3C5.328 19 6 18.328 6 17.5zM7.5 26c-.414.0-.789.168-1.061.439l-2 2C4.168 28.711 4 29.086 4 29.5 4 30.328 4.671 31 5.5 31c.414.0.789-.168 1.06-.44l2-2C8.832 28.289 9 27.914 9 27.5 9 26.672 8.329 26 7.5 26zm10-20C18.329 6 19 5.328 19 4.5v-3C19 .672 18.329.0 17.5.0S16 .672 16 1.5v3C16 5.328 16.671 6 17.5 6zm10 3c.414.0.789-.168 1.06-.439l2-2C30.832 6.289 31 5.914 31 5.5 31 4.672 30.329 4 29.5 4c-.414.0-.789.168-1.061.44l-2 2C26.168 6.711 26 7.086 26 7.5 26 8.328 26.671 9 27.5 9zM6.439 8.561C6.711 8.832 7.086 9 7.5 9 8.328 9 9 8.328 9 7.5c0-.414-.168-.789-.439-1.061l-2-2C6.289 4.168 5.914 4 5.5 4 4.672 4 4 4.672 4 5.5c0 .414.168.789.439 1.06l2 2.001zM33.5 16h-3c-.828.0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5h3c.828.0 1.5-.672 1.5-1.5S34.328 16 33.5 16zM28.561 26.439C28.289 26.168 27.914 26 27.5 26c-.828.0-1.5.672-1.5 1.5.0.414.168.789.439 1.06l2 2C28.711 30.832 29.086 31 29.5 31c.828.0 1.5-.672 1.5-1.5.0-.414-.168-.789-.439-1.061l-2-2zM17.5 29c-.829.0-1.5.672-1.5 1.5v3c0 .828.671 1.5 1.5 1.5s1.5-.672 1.5-1.5v-3C19 29.672 18.329 29 17.5 29zm0-22C11.71 7 7 11.71 7 17.5S11.71 28 17.5 28 28 23.29 28 17.5 23.29 7 17.5 7zm0 18c-4.136.0-7.5-3.364-7.5-7.5s3.364-7.5 7.5-7.5 7.5 3.364 7.5 7.5S21.636 25 17.5 25z"/></svg></label><label id=toggle-label-dark for=darkmode-toggle tabindex=-1><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="nightIcon" viewBox="0 0 100 100" style="enable-background='new 0 0 100 100'"><title>Dark Mode</title><path d="M96.76 66.458c-.853-.852-2.15-1.064-3.23-.534-6.063 2.991-12.858 4.571-19.655 4.571C62.022 70.495 50.88 65.88 42.5 57.5 29.043 44.043 25.658 23.536 34.076 6.47c.532-1.08.318-2.379-.534-3.23-.851-.852-2.15-1.064-3.23-.534-4.918 2.427-9.375 5.619-13.246 9.491-9.447 9.447-14.65 22.008-14.65 35.369.0 13.36 5.203 25.921 14.65 35.368s22.008 14.65 35.368 14.65c13.361.0 25.921-5.203 35.369-14.65 3.872-3.871 7.064-8.328 9.491-13.246C97.826 68.608 97.611 67.309 96.76 66.458z"/></svg></label></div></header><body dir=ltr><input type=checkbox class="hidden toggle" id=menu-control><main class=flex><aside class=book-menu><div class=book-menu-content><nav><div class=menu-search><div id=search-icon class=quartz-search><p>Search</p><svg tabindex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search Icon</title><desc id="desc">Icon to open search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"/><circle cx="8" cy="8" r="7"/></g></svg></div></div><ul><li><a href=/portfolio/>✑ my portfolio</a><ul><li><a href=/portfolio/animation/>Animation</a><ul></ul></li><li><a href=/portfolio/storyboards/>Storyboards</a><ul></ul></li></ul></li><li><span class=book-menu-title>✏ art</span><ul><li><a href=/art/drawings target=_blank rel=noopener>Drawings</a><ul><li><span class=book-menu-title>Diamond Head</span><ul><li><a href=/art/drawings/diamond-head/another-given-title-lol/>another given title lol</a></li><li><a href=/art/drawings/diamond-head/title-given-to-you/>title given to you</a></li></ul></li></ul></li><li><span class=book-menu-title>Animation</span><ul></ul></li><li><span class=book-menu-title>Comics</span><ul></ul></li><li><a href=/art/test/ class=active>Test</a></li></ul></li><li><input type=checkbox id=section-a16074696a2e072964041e9ad7cd8fd5 class=toggle>
<label for=section-a16074696a2e072964041e9ad7cd8fd5 class="flex justify-between"><a role=button class=book-collapse-toggle>writing</a></label><ul><li><input type=checkbox id=section-7ffcfa1a8c6611e17d1ae558fd094325 class=toggle>
<label for=section-7ffcfa1a8c6611e17d1ae558fd094325 class="flex justify-between"><a role=button class=book-collapse-toggle>fanfiction</a></label><ul><li><a href=/writing/fanfiction/bed-of-razors/>Bed of Razors</a></li></ul></li></ul></li><li><input type=checkbox id=section-0fd35236fb14ce8757c710cca55be827 class=toggle>
<label for=section-0fd35236fb14ce8757c710cca55be827 class="flex justify-between"><a href=/miscellany/ class=book-collapse-toggle>miscellaneous</a></label><ul><li><a href=/miscellany/test/>test</a></li><li><a href=/miscellany/two/>twoooo</a></li></ul></li></ul></nav><script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script></div></aside><div class="book-page container"><article class=markdown><h1 class=title>Test</h1><h1 id=hello-universe>hello universe
<a class=anchor href=#hello-universe>#</a></h1><hr><div id=contact_buttons><footer><p>Made with <a href=https://github.com/64bitpandas/amethyst>Amethyst</a>, © 2024 The Tablet ❀ GamerGirlandCo (Corinthe)</p><ul><li><a href=https://instagram.com/i.am.the.tablet>instagram</a></li><li><a href=mailto:i.am.the.tablet@proton.me>say hi</a></li><li><a href=https://git.tablet.sh/the-btfash-foundation>and remember to stick it to Brian Tatler!</a></li></ul></footer></div></article><div class=book-comments></div><label for=menu-control class="hidden book-menu-overlay"></label></div><aside class=book-toc><div class=book-toc-content><div id=tabs-post-meta><div class=big-meta><div class="book-columns flex flex-wrap"></div></div><span class=post-date>Monday, 1 January 0001 @ 12:00:00AM</span><div><div class=tags-heading><h3 class=small-caps>tags</h3></div><div class=tag-container></div></div></div><nav id=TableOfContents><ul><li><a href=#hello-universe>hello universe</a></li></ul></nav></div></aside></main></body></html>

132
assets/_amethyst.scss Normal file

@ -0,0 +1,132 @@
$header-height: 80px;
header {
position: fixed;
width: 100%;
padding: 0px 80px;
z-index: 9999;
background-color: var(--header);
margin: 0 !important;
height: $header-height;
}
.book-menu,
.book-menu-content,
.book-toc-content,
.book-page {
margin-top: $header-height;
}
.book-header {
display: flex;
padding: 30px;
}
#page-title a {
color: var(--dark);
}
@media screen and (max-width: $mobile-breakpoint) {
.book-header {
justify-content: space-between;
}
#page-title {
text-align: center;
width: 100%;
padding: 0;
}
.menu-search {
display: block;
#search-icon {
width: 100%;
justify-content: space-between;
}
}
header #search-icon {
display: none !important;
}
}
@media screen and (min-width: $mobile-breakpoint) {
.book-icon {
display: none;
}
.menu-search {
display: none !important;
}
header #search-icon {
display: block;
margin-right: 20px;
}
}
.book-toc-content::-webkit-scrollbar,
.book-menu-content::-webkit-scrollbar {
width: 10px;
height: 16px;
}
pre::-webkit-scrollbar {
width: 8px;
height: 10px;
}
.book-toc-content::-webkit-scrollbar-thumb,
.book-menu-content::-webkit-scrollbar-thumb {
background: var(--scrollbar);
border-radius: 8px;
// box-shadow: inset 2px 2px 2px hsla(0,0%,100%,.25),inset -2px -2px 2px rgba(0,0,0,.25);
}
.book-toc-content::-webkit-scrollbar-track,
.book-menu-content::-webkit-scrollbar-track {
// background: linear-gradient(90deg,#434343,#434343 1px,#111 0,#111);
background-color: var(--scrollbar-track);
}
.markdown h1,
.markdown h2,
.markdown h3 {
font-weight: bold;
}
.title {
color: var(--title);
font-size: 3rem;
padding-bottom: 1rem;
}
.book-toc-content {
font-weight: normal;
}
.book-menu-content a:hover,
.book-toc-content a:hover {
opacity: 100%;
}
.book-menu-title {
font-weight: bolder;
color: var(--title);
opacity: 1;
}
.book-menu input.toggle+label::after {
font-size: 150%;
}
.book-menu input.toggle+label:hover {
color: var(--secondary);
}
.markdown-inner,
.book-tabs {
font-family: var(--font-body);
color: var(--dark);
}

34
assets/_colors.scss Normal file

@ -0,0 +1,34 @@
:root {
--light: #faf8f8;
--dark: #141021;
--secondary: #00e7e3;
--tertiary: #ff85b6;
--visited: #afbfc9;
--primary: #00e7e3;
--gray: #3f3f3f;
--lightgray: #f0f0f0;
--outlinegray: #dadada;
--million-progress-bar-color: var(--secondary);
--highlighted: #00e7e388;
--header: #00e7e3d1;
--title: #00e7e3
--scrollbar: gray;
--scrollbar-track: #DDD;
}
[saved-theme="dark"] {
--light: #1e1e21 !important;
--dark: #f7f2fa !important;
--secondary: #00e7e3 !important;
--visited: #7cbbd0 !important;
--tertiary: #ff85b6 !important;
--primary: #00e7e3 !important;
--gray: #d4d4d4 !important;
--lightgray: #292633 !important;
--outlinegray: #343434 !important;
--highlighted: #00e7e388;
--header: #00b3ba;
--title: #74f4fd;
--scrollbar: #00e7e3;
--scrollbar-track: rgb(51, 51, 51);
}

3
assets/_custom.scss Normal file

@ -0,0 +1,3 @@
/* You can add custom styles here. */
// @import "plugins/numbered";

66
assets/_defaults.scss Normal file

@ -0,0 +1,66 @@
// Used in layout
$padding-1: 1px !default;
$padding-4: 0.25rem !default;
$padding-8: 0.5rem !default;
$padding-16: 1rem !default;
$font-size-base: 16px !default;
$font-size-12: 0.75rem !default;
$font-size-14: 0.875rem !default;
$font-size-16: 1rem !default;
$border-radius: $padding-4 !default;
$body-font-weight: normal !default;
$body-min-width: 20rem !default;
$container-max-width: 65rem !default;
$header-height: 3.5rem !default;
$menu-width: 16rem !default;
$toc-width: 12rem !default;
$mobile-breakpoint: $menu-width + $body-min-width * 1.2 + $toc-width !default;
$hint-colors: (
info: #6bf,
warning: #fd6,
danger: #f66,
) !default;
// Themes: USE QUARTZ INSTEAD
// @mixin theme-light {
// --gray-100: #f8f9fa;
// --gray-200: #e9ecef;
// --gray-500: #adb5bd;
// --color-link: #0055bb;
// --color-visited-link: #8440f1;
// --body-background: white;
// --body-font-color: black;
// --icon-filter: none;
// --hint-color-info: #6bf;
// --hint-color-warning: #fd6;
// --hint-color-danger: #f66;
// }
// @mixin theme-dark {
// --gray-100: rgba(255, 255, 255, 0.1);
// --gray-200: rgba(255, 255, 255, 0.2);
// --gray-500: rgba(255, 255, 255, 0.5);
// --color-link: #84b2ff;
// --color-visited-link: #b88dff;
// --body-background: #343a40;
// --body-font-color: #e9ecef;
// --icon-filter: brightness(0) invert(1);
// --hint-color-info: #6bf;
// --hint-color-warning: #fd6;
// --hint-color-danger: #f66;
// }

25
assets/_fonts.scss Normal file

@ -0,0 +1,25 @@
// Replace this with your own font imports!
@import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;700&family=Source+Sans+Pro:wght@400;600&display=swap');
:root {
--font-body: "BaBulletJournal", sans-serif;
--font-header: "Braveheart";
--font-mono: "PP Fraktion Mono", "Fira Code", monospace;
font-synthesis: weight style small-caps;
}
@font-face {
font-family: "Braveheart";
src: url('fonts/Braveheart.ttf');
}
@font-face {
font-family: "BaBulletJournal";
src: url('fonts/BaBulletJournal.ttf');
}
@font-face {
font-family: "AaBobble";
src: url('fonts/AaBOBBLE_L.ttf');
}

369
assets/_main.scss Normal file

@ -0,0 +1,369 @@
html {
font-size: $font-size-base;
scroll-behavior: smooth;
touch-action: manipulation;
& *::selection {
background-color: rgb(133, 25, 81);
border-radius: 1.5em;
}
}
body {
min-width: $body-min-width;
color: var(--body-font-color);
background: var(--body-background);
letter-spacing: 0.33px;
font-weight: $body-font-weight;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
box-sizing: border-box;
* {
box-sizing: inherit;
}
}
h1,
h2,
h3,
h4,
h5 {
font-weight: $body-font-weight;
}
a {
text-decoration: none;
color: var(--color-link);
}
img {
vertical-align: baseline;
}
// :focus {
// @include outline;
// }
aside nav ul {
padding: 0;
margin: 0;
list-style: none;
li {
margin: 1em 0;
position: relative;
}
a {
display: block;
}
a:hover {
opacity: 0.5;
}
ul {
padding-inline-start: $padding-16;
}
}
ul.pagination {
display: flex;
justify-content: center;
list-style-type: none;
padding-inline-start: 0px;
.page-item a {
padding: $padding-16;
}
}
.container {
max-width: $container-max-width;
margin: 0 auto;
}
.book-icon {
filter: var(--icon-filter);
}
.book-brand {
margin-top: 0;
margin-bottom: $padding-16;
img {
height: 1.5em;
width: 1.5em;
margin-inline-end: $padding-8;
}
}
.book-menu {
flex: 0 0 $menu-width;
font-size: $font-size-14;
.book-menu-content {
width: $menu-width;
padding: $padding-16;
background: var(--light);
@include fixed;
}
a,
label {
color: inherit;
cursor: pointer;
word-wrap: break-word;
}
a.active {
color: var(--tertiary);
text-decoration: underline;
}
input.toggle + label + ul {
display: none;
}
input.toggle:checked + label + ul {
display: block;
}
input.toggle + label::after {
content: "";
}
input.toggle:checked + label::after {
content: "";
}
}
// for RTL support
body[dir="rtl"] .book-menu {
input.toggle + label::after {
content: "";
}
input.toggle:checked + label::after {
content: "";
}
}
.book-section-flat {
margin: $padding-16 0;
> a,
> span,
> label {
font-weight: bolder;
}
> ul {
padding-inline-start: 0;
}
}
.book-page {
min-width: $body-min-width;
flex-grow: 1;
padding: $padding-16;
}
.book-post {
margin-bottom: $padding-16 * 3;
}
// .book-header {
// display: none;
// margin-bottom: $padding-16;
// label {
// line-height: 0;
// }
// img.book-icon {
// height: 1.5em;
// width: 1.5em;
// }
// }
.book-search {
position: relative;
margin: $padding-16 0;
border-bottom: 1px solid transparent;
input {
width: 100%;
padding: $padding-8;
border: 0;
border-radius: $border-radius;
background: var(--gray-100);
color: var(--body-font-color);
&:required + .book-search-spinner {
display: block;
}
}
.book-search-spinner {
position: absolute;
top: 0;
margin: $padding-8;
margin-inline-start: calc(100% - #{$padding-16 + $padding-8});
width: $padding-16;
height: $padding-16;
border: $padding-1 solid transparent;
border-top-color: var(--body-font-color);
border-radius: 50%;
@include spin(1s);
}
small {
opacity: 0.5;
}
}
.book-toc {
flex: 0 0 $toc-width;
font-size: $font-size-12;
.book-toc-content {
width: $toc-width;
padding: $padding-16;
@include fixed;
}
img {
height: 1em;
width: 1em;
}
nav > ul > li:first-child {
margin-top: 0;
}
}
.book-footer {
padding-top: $padding-16;
font-size: $font-size-14;
img {
height: 1em;
width: 1em;
margin-inline-end: $padding-8;
}
}
.book-comments {
margin-top: $padding-16;
}
.book-languages {
margin-block-end: $padding-16 * 2;
.book-icon {
height: 1em;
width: 1em;
margin-inline-end: .5em;
}
ul {
padding-inline-start: 1.5em;
}
}
// Responsive styles
.book-menu-content,
.book-toc-content,
.book-page,
.book-header aside,
.markdown {
transition: 0.2s ease-in-out;
transition-property: transform, margin, opacity, visibility;
will-change: transform, margin, opacity;
}
@media screen and (max-width: $mobile-breakpoint) {
#menu-control,
#toc-control {
display: inline;
}
.book-menu {
visibility: hidden;
margin-inline-start: -$menu-width;
font-size: $font-size-base;
z-index: 1;
}
.book-toc {
display: none;
}
.book-header {
display: block;
}
#menu-control:focus ~ main label[for="menu-control"] {
@include outline;
}
#menu-control:checked ~ main {
.book-menu {
visibility: initial;
}
.book-menu .book-menu-content {
transform: translateX($menu-width);
box-shadow: 0 0 $padding-8 rgba(0, 0, 0, 0.1);
}
.book-page {
opacity: 0.25;
}
.book-menu-overlay {
display: block;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
}
#toc-control:focus ~ main label[for="toc-control"] {
@include outline;
}
#toc-control:checked ~ main {
.book-header aside {
display: block;
}
}
// for RTL support
body[dir="rtl"] #menu-control:checked ~ main {
.book-menu .book-menu-content {
transform: translateX(-$menu-width);
}
}
}
// Extra space for big screens
@media screen and (min-width: $container-max-width) {
.book-page,
.book-menu .book-menu-content,
.book-toc .book-toc-content {
padding: $padding-16 * 2 $padding-16;
}
}

206
assets/_markdown.scss Normal file

@ -0,0 +1,206 @@
@import "variables";
.markdown {
line-height: 1.6;
// remove padding at the beginning of page
> :first-child {
margin-top: 0;
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-weight: normal;
line-height: 1;
margin-top: 1.5em;
margin-bottom: $padding-16;
a.anchor {
opacity: 0;
font-size: 0.75em;
vertical-align: middle;
text-decoration: none;
}
&:hover a.anchor,
a.anchor:focus {
opacity: initial;
}
}
h1 {
-webkit-text-stroke: 2px currentColor;
}
h2 {
-webkit-text-stroke: 1.7px currentColor;
}
h4,
h5,
h6 {
font-weight: bolder;
}
h5 {
font-size: 0.875em;
}
h6 {
font-size: 0.75em;
}
b,
optgroup,
strong {
font-weight: bolder;
}
a {
text-decoration: none;
&:hover {
text-decoration: underline;
}
// &:visited {
// color: var(--color-visited-link);
// }
}
img {
max-width: 100%;
height: auto;
}
code {
padding: 0 $padding-4;
background: var(--gray-200);
border-radius: $border-radius;
font-size: 0.875em;
}
pre {
padding: $padding-16;
background: var(--gray-100);
border-radius: $border-radius;
overflow-x: auto;
code {
padding: 0;
background: none;
}
}
p {
word-wrap:break-word;
}
// blockquote {
// margin: $padding-16 0;
// padding: $padding-8 $padding-16 $padding-8 ($padding-16 - $padding-4); //to keep total left space 16dp
// border-inline-start: $padding-4 solid var(--gray-200);
// border-radius: $border-radius;
// :first-child {
// margin-top: 0;
// }
// :last-child {
// margin-bottom: 0;
// }
// }
table {
overflow: auto;
display: block;
border-spacing: 0;
border-collapse: collapse;
margin-top: $padding-16;
margin-bottom: $padding-16;
tr th,
tr td {
padding: $padding-8 $padding-16;
border: $padding-1 solid var(--gray-200);
}
tr:nth-child(2n) {
background: var(--gray-100);
}
}
hr {
height: $padding-1;
border: none;
background: var(--gray);
}
ul,
ol {
padding-inline-start: $padding-16 * 2;
}
dl {
dt {
font-weight: bolder;
margin-top: $padding-16;
}
dd {
margin-inline-start: 0;
margin-bottom: $padding-16;
}
}
// Special case for highlighted code with line numbers
.highlight table tr {
td:nth-child(1) pre {
margin: 0;
padding-inline-end: 0;
}
td:nth-child(2) pre {
margin: 0;
padding-inline-start: 0;
}
}
details {
padding: $padding-16;
border: none !important;
font-family: var(--font-body);
font-weight: bold;
color: var(--dark);
// border: $padding-1 solid var(--gray-200);
// border-radius: $border-radius;
summary {
line-height: 1;
padding: $padding-16;
margin: -$padding-16;
cursor: pointer;
}
&[open] summary {
margin-bottom: 0;
}
}
figure {
margin: $padding-16 0;
figcaption p {
margin-top: 0;
}
}
}
.markdown-inner {
// Util class to remove extra margin in nested markdown content
> :first-child {
margin-top: 0;
}
> :last-child {
margin-bottom: 0;
}
}

17
assets/_print.scss Normal file

@ -0,0 +1,17 @@
@media print {
.book-menu,
.book-footer,
.book-toc {
display: none;
}
.book-header,
.book-header aside {
display: block;
}
main {
// Fix for https://bugzilla.mozilla.org/show_bug.cgi?id=939897
display: block !important;
}
}

113
assets/_shortcodes.scss Normal file

@ -0,0 +1,113 @@
.markdown {
// {{< expand "Label" "icon" >}}
.book-expand {
margin-top: $padding-16;
margin-bottom: $padding-16;
border: 2px solid var(--secondary);
border-radius: $border-radius;
overflow: hidden;
.book-expand-head {
color: var(--secondary);
font-family: var(--font-body);
padding: $padding-8 $padding-16;
cursor: pointer;
font-weight: bold;
}
.book-expand-content {
display: none;
padding: $padding-16;
}
input[type="checkbox"]:checked+.book-expand-content {
display: block;
}
}
// {{< tabs >}}
.book-tabs {
margin-top: $padding-16;
margin-bottom: $padding-16;
border: $padding-1 solid var(--dark);
border-radius: $border-radius;
overflow: hidden;
display: flex;
flex-wrap: wrap;
label {
display: inline-block;
padding: $padding-8 $padding-16;
border-bottom: $padding-1 transparent;
cursor: pointer;
}
.book-tabs-content {
order: 999; //Move content blocks to the end
width: 100%;
// border-top: $padding-1 solid var(--dark);
padding: $padding-16;
display: none;
}
input[type="radio"]:checked+label {
border-bottom: $padding-1 * 2 solid var(--secondary);
color: var(--secondary);
font-weight: bold;
}
input[type="radio"]:checked+label+.book-tabs-content {
display: block;
}
// input[type="radio"]:focus+label {
// @include outline;
// }
}
// {{< columns >}}
.book-columns {
margin-left: -$padding-16;
margin-right: -$padding-16;
>div {
margin: $padding-16 0;
min-width: $body-min-width / 2;
padding: 0 $padding-16;
}
}
// {{< button >}}
a.book-btn {
display: inline-block;
font-size: $font-size-14;
color: var(--secondary);
line-height: $padding-16 * 2;
padding: 0 $padding-16;
border: $padding-1 solid var(--secondary);
border-radius: $border-radius;
cursor: pointer;
&:hover {
text-decoration: none;
}
}
// {{< hint >}}
.book-hint {
@each $name,
$color in $hint-colors {
&.#{$name} {
border-color: $color;
background-color: rgba($color, 0.1);
}
}
}
}

92
assets/_utils.scss Normal file

@ -0,0 +1,92 @@
.flex {
display: flex;
}
.flex-auto {
flex: 1 1 auto;
}
.flex-even {
flex: 1 1;
}
.flex-wrap {
flex-wrap: wrap;
}
.justify-start {
justify-content: flex-start;
}
.justify-end {
justify-content: flex-end;
}
.justify-center {
justify-content: center;
}
.justify-between {
justify-content: space-between;
}
.align-center {
align-items: center;
}
.mx-auto {
margin: 0 auto;
}
.text-center {
text-align: center;
}
.text-left {
text-align: left;
}
.text-right {
text-align: right;
}
.hidden {
display: none;
}
input.toggle {
height: 0;
width: 0;
overflow: hidden;
opacity: 0;
position: absolute;
}
.clearfix::after {
content: "";
display: table;
clear: both;
}
@mixin spin($duration) {
animation: spin $duration ease infinite;
@keyframes spin {
100% {
transform: rotate(360deg);
}
}
}
@mixin fixed {
position: fixed;
top: 0;
bottom: 0;
overflow-x: hidden;
overflow-y: auto;
}
@mixin outline {
outline-style: auto;
outline-color: currentColor;
outline-color: -webkit-focus-ring-color;
}

3
assets/_variables.scss Normal file

@ -0,0 +1,3 @@
/* You can override SASS variables here. */
// @import "plugins/dark";

17
assets/book.scss Normal file

@ -0,0 +1,17 @@
@import "defaults";
@import "variables";
// @import "themes/{{ default "light" .Site.Params.BookTheme }}";
@import "normalize";
@import "utils";
@import "main";
@import "fonts";
@import "print";
@import "markdown";
@import "shortcodes";
// Custom defined styles
@import "colors";
@import "amethyst";
@import "custom";

24
assets/clipboard.js Normal file

@ -0,0 +1,24 @@
(function () {
function select(element) {
const selection = window.getSelection();
const range = document.createRange();
range.selectNodeContents(element);
selection.removeAllRanges();
selection.addRange(range);
}
document.querySelectorAll("pre code").forEach(code => {
code.addEventListener("click", function (event) {
if (window.getSelection().toString()) {
return;
}
select(code.parentElement);
if (navigator.clipboard) {
navigator.clipboard.writeText(code.parentElement.textContent);
}
});
});
})();

File diff suppressed because one or more lines are too long

@ -0,0 +1,46 @@
{
"index": {
"links": {
"/portfolio/": [
{
"source": "/portfolio/",
"target": "/portfolio/animation",
"text": "animation"
},
{
"source": "/portfolio/",
"target": "/portfolio/storyboards",
"text": "storyboarding"
}
]
},
"backlinks": {
"/portfolio/animation": [
{
"source": "/portfolio/",
"target": "/portfolio/animation",
"text": "animation"
}
],
"/portfolio/storyboards": [
{
"source": "/portfolio/",
"target": "/portfolio/storyboards",
"text": "storyboarding"
}
]
}
},
"links": [
{
"source": "/portfolio/",
"target": "/portfolio/animation",
"text": "animation"
},
{
"source": "/portfolio/",
"target": "/portfolio/storyboards",
"text": "storyboarding"
}
]
}

15
assets/manifest.json Normal file

@ -0,0 +1,15 @@
{
"name": "{{ .Site.Params.Title }}",
"short_name": "{{ .Site.Params.Title }}",
"start_url": "{{ "/" | relURL }}",
"scope": "{{ "/" | relURL }}",
"display": "standalone",
"background_color": "#000000",
"theme_color": "#000000",
"icons": [
{
"src": "{{ "/favicon.png" | relURL }}",
"sizes": "1024x1024"
}
]
}

7
assets/menu-reset.js Normal file

@ -0,0 +1,7 @@
(function() {
var menu = document.querySelector("aside .book-menu-content");
addEventListener("beforeunload", function(event) {
localStorage.setItem("menu.scrollTop", menu.scrollTop);
});
menu.scrollTop = localStorage.getItem("menu.scrollTop");
})();

6
assets/mermaid.json Normal file

@ -0,0 +1,6 @@
{
"flowchart": {
"useMaxWidth":true
},
"theme": "default"
}

349
assets/normalize.css vendored Normal file

@ -0,0 +1,349 @@
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
/* Document
========================================================================== */
/**
* 1. Correct the line height in all browsers.
* 2. Prevent adjustments of font size after orientation changes in iOS.
*/
html {
line-height: 1.15; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/* Sections
========================================================================== */
/**
* Remove the margin in all browsers.
*/
body {
margin: 0;
}
/**
* Render the `main` element consistently in IE.
*/
main {
display: block;
}
/**
* Correct the font size and margin on `h1` elements within `section` and
* `article` contexts in Chrome, Firefox, and Safari.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/* Grouping content
========================================================================== */
/**
* 1. Add the correct box sizing in Firefox.
* 2. Show the overflow in Edge and IE.
*/
hr {
box-sizing: content-box; /* 1 */
height: 0; /* 1 */
overflow: visible; /* 2 */
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
pre {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/* Text-level semantics
========================================================================== */
/**
* Remove the gray background on active links in IE 10.
*/
a {
background-color: transparent;
}
/**
* 1. Remove the bottom border in Chrome 57-
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
*/
abbr[title] {
border-bottom: none; /* 1 */
text-decoration: underline; /* 2 */
text-decoration: underline dotted; /* 2 */
}
/**
* Add the correct font weight in Chrome, Edge, and Safari.
*/
b,
strong {
font-weight: bolder;
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
code,
kbd,
samp {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/**
* Add the correct font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` elements from affecting the line height in
* all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/* Embedded content
========================================================================== */
/**
* Remove the border on images inside links in IE 10.
*/
img {
border-style: none;
}
/* Forms
========================================================================== */
/**
* 1. Change the font styles in all browsers.
* 2. Remove the margin in Firefox and Safari.
*/
button,
input,
optgroup,
select,
textarea {
font-family: inherit; /* 1 */
font-size: 100%; /* 1 */
line-height: 1.15; /* 1 */
margin: 0; /* 2 */
}
/**
* Show the overflow in IE.
* 1. Show the overflow in Edge.
*/
button,
input { /* 1 */
overflow: visible;
}
/**
* Remove the inheritance of text transform in Edge, Firefox, and IE.
* 1. Remove the inheritance of text transform in Firefox.
*/
button,
select { /* 1 */
text-transform: none;
}
/**
* Correct the inability to style clickable types in iOS and Safari.
*/
button,
[type="button"],
[type="reset"],
[type="submit"] {
-webkit-appearance: button;
}
/**
* Remove the inner border and padding in Firefox.
*/
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
border-style: none;
padding: 0;
}
/**
* Restore the focus styles unset by the previous rule.
*/
button:-moz-focusring,
[type="button"]:-moz-focusring,
[type="reset"]:-moz-focusring,
[type="submit"]:-moz-focusring {
outline: 1px dotted ButtonText;
}
/**
* Correct the padding in Firefox.
*/
fieldset {
padding: 0.35em 0.75em 0.625em;
}
/**
* 1. Correct the text wrapping in Edge and IE.
* 2. Correct the color inheritance from `fieldset` elements in IE.
* 3. Remove the padding so developers are not caught out when they zero out
* `fieldset` elements in all browsers.
*/
legend {
box-sizing: border-box; /* 1 */
color: inherit; /* 2 */
display: table; /* 1 */
max-width: 100%; /* 1 */
padding: 0; /* 3 */
white-space: normal; /* 1 */
}
/**
* Add the correct vertical alignment in Chrome, Firefox, and Opera.
*/
progress {
vertical-align: baseline;
}
/**
* Remove the default vertical scrollbar in IE 10+.
*/
textarea {
overflow: auto;
}
/**
* 1. Add the correct box sizing in IE 10.
* 2. Remove the padding in IE 10.
*/
[type="checkbox"],
[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* Correct the cursor style of increment and decrement buttons in Chrome.
*/
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
height: auto;
}
/**
* 1. Correct the odd appearance in Chrome and Safari.
* 2. Correct the outline style in Safari.
*/
[type="search"] {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}
/**
* Remove the inner padding in Chrome and Safari on macOS.
*/
[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* 1. Correct the inability to style clickable types in iOS and Safari.
* 2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
}
/* Interactive
========================================================================== */
/*
* Add the correct display in Edge, IE 10+, and Firefox.
*/
details {
display: block;
}
/*
* Add the correct display in all browsers.
*/
summary {
display: list-item;
}
/* Misc
========================================================================== */
/**
* Add the correct display in IE 10+.
*/
template {
display: none;
}
/**
* Add the correct display in IE 10.
*/
[hidden] {
display: none;
}

@ -0,0 +1,36 @@
$startLevel: 1;
$endLevel: 6;
.book-page .markdown {
@for $currentLevel from $startLevel through $endLevel {
> h#{$currentLevel} {
counter-increment: h#{$currentLevel};
counter-reset: h#{$currentLevel + 1};
$content: "";
@for $n from $startLevel through $currentLevel {
$content: $content + 'counter(h#{$n})"."';
}
&::before {
content: unquote($content) " ";
}
}
}
}
.book-toc nav ul {
li {
counter-increment: item;
&:first-child {
counter-reset: item;
}
&:before {
content: counters(item, ".") ". ";
float: left;
margin-inline-end: $padding-4;
}
}
}

@ -0,0 +1,26 @@
@import "defaults";
@import "variables";
// Webkit
::-webkit-scrollbar {
width: $padding-8;
}
::-webkit-scrollbar-thumb {
background: transparent;
border-radius: $padding-8;
}
:hover::-webkit-scrollbar-thumb {
background: var(--gray-500);
}
// MS
body {
-ms-overflow-style: -ms-autohiding-scrollbar;
}
// Future
.book-menu nav {
scrollbar-color: transparent var(--gray-500);
}

@ -0,0 +1,6 @@
const addCollapsibleCallouts = () => {
const collapsibleCallouts = document.querySelectorAll("blockquote.callout-collapsible");
collapsibleCallouts.forEach(el => el.addEventListener('click', event => {
event.currentTarget.classList.toggle("callout-collapsed");
}));
}

@ -0,0 +1,45 @@
const svgCopy =
'<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true"><path fill-rule="evenodd" d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"></path><path fill-rule="evenodd" d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"></path></svg>';
const svgCheck =
'<svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true"><path fill-rule="evenodd" fill="rgb(63, 185, 80)" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path></svg>';
const addCopyButtons = () => {
let els = document.getElementsByClassName("highlight");
// for each highlight
for (let i = 0; i < els.length; i++) {
try {
if (els[i].getElementsByClassName("clipboard-button").length) continue;
// find pre > code inside els[i]
let codeBlocks = els[i].getElementsByTagName("code");
// line numbers are inside first code block
let lastCodeBlock = codeBlocks[codeBlocks.length - 1];
const button = document.createElement("button");
button.className = "clipboard-button";
button.type = "button";
button.innerHTML = svgCopy;
button.ariaLabel = "opy the shown code";
// remove every second newline from lastCodeBlock.innerText
button.addEventListener("click", () => {
navigator.clipboard.writeText(lastCodeBlock.innerText.replace(/\n\n/g, "\n")).then(
() => {
button.blur();
button.innerHTML = svgCheck;
setTimeout(() => {
button.innerHTML = svgCopy
button.style.borderColor = ""
}, 2000);
},
(error) => (button.innerHTML = "Error")
);
});
// find chroma inside els[i]
let chroma = els[i].getElementsByClassName("chroma")[0];
els[i].insertBefore(button, chroma);
} catch(error) {
console.debug(error);
}
}
}

@ -0,0 +1,17 @@
function addTitleToCodeBlocks() {
const els = document.getElementsByClassName("highlight");
for (let i = 0; i < els.length; i++) {
try {
if (els[i].title.length) {
let div = document.createElement("div");
if (els[i].getElementsByClassName("code-title").length) continue;
div.textContent = els[i].title;
div.classList.add("code-title")
els[i].insertBefore(div, els[i].firstChild);
}
} catch (error) {
console.debug(error);
}
}
}

@ -0,0 +1,37 @@
const userPref = window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark'
const currentTheme = localStorage.getItem('theme') ?? userPref
const syntaxTheme = document.querySelector("#theme-link");
{{ $darkSyntax := resources.Get "quartz/styles/_dark_syntax.scss" | resources.ToCSS (dict "outputStyle" "compressed") | resources.Fingerprint "md5" | resources.Minify }}
{{ $lightSyntax := resources.Get "quartz/styles/_light_syntax.scss" | resources.ToCSS (dict "outputStyle" "compressed") | resources.Fingerprint "md5" | resources.Minify }}
if (currentTheme) {
document.documentElement.setAttribute('saved-theme', currentTheme);
syntaxTheme.href = currentTheme === 'dark' ? '{{ $darkSyntax.Permalink }}' : '{{ $lightSyntax.Permalink }}';
}
const switchTheme = (e) => {
if (e.target.checked) {
document.documentElement.setAttribute('saved-theme', 'dark');
localStorage.setItem('theme', 'dark');
syntaxTheme.href = '{{ $darkSyntax.Permalink }}';
}
else {
document.documentElement.setAttribute('saved-theme', 'light')
localStorage.setItem('theme', 'light')
syntaxTheme.href = '{{ $lightSyntax.Permalink }}';
}
}
window.addEventListener('DOMContentLoaded', () => {
// Darkmode toggle
const toggleSwitch = document.querySelector('#darkmode-toggle')
// listen for toggle
toggleSwitch.addEventListener('change', switchTheme, false)
if (currentTheme === 'dark') {
toggleSwitch.checked = true
}
})

@ -0,0 +1,61 @@
; (async function() {
const encoder = (str) => str.toLowerCase().split(/([^a-z]|[^\x00-\x7F])/)
const contentIndex = new FlexSearch.Document({
cache: true,
charset: "latin:extra",
optimize: true,
index: [
{
field: "content",
tokenize: "reverse",
encode: encoder,
},
{
field: "title",
tokenize: "forward",
encode: encoder,
},
],
})
const { content } = await fetchData
for (const [key, value] of Object.entries(content)) {
contentIndex.add({
id: key,
title: value.title,
content: removeMarkdown(value.content),
})
}
const formatForDisplay = (id) => ({
id,
url: id,
title: content[id].title,
content: content[id].content,
})
registerHandlers((e) => {
const term = e.target.value
const searchResults = contentIndex.search(term, [
{
field: "content",
limit: 10,
},
{
field: "title",
limit: 5,
},
])
const getByField = (field) => {
const results = searchResults.filter((x) => x.field === field)
if (results.length === 0) {
return []
} else {
return [...results[0].result]
}
}
const allIds = new Set([...getByField("title"), ...getByField("content")])
const finalResults = [...allIds].map(formatForDisplay)
displayResults(term, finalResults, true)
})
})()

269
assets/quartz/js/graph.js Normal file

@ -0,0 +1,269 @@
async function drawGraph(baseUrl, isHome, pathColors, graphConfig) {
let {
depth,
enableDrag,
enableLegend,
enableZoom,
opacityScale,
scale,
repelForce,
fontSize} = graphConfig;
const container = document.getElementById("graph-container")
const { index, links, content } = await fetchData
// Use .pathname to remove hashes / searchParams / text fragments
const cleanUrl = window.location.origin + window.location.pathname
const curPage = cleanUrl.replace(/\/$/g, "").replace(baseUrl, "")
const parseIdsFromLinks = (links) => [
...new Set(links.flatMap((link) => [link.source, link.target])),
]
// Links is mutated by d3. We want to use links later on, so we make a copy and pass that one to d3
// Note: shallow cloning does not work because it copies over references from the original array
const copyLinks = JSON.parse(JSON.stringify(links))
const neighbours = new Set()
const wl = [curPage || "/", "__SENTINEL"]
if (depth >= 0) {
while (depth >= 0 && wl.length > 0) {
// compute neighbours
const cur = wl.shift()
if (cur === "__SENTINEL") {
depth--
wl.push("__SENTINEL")
} else {
neighbours.add(cur)
const outgoing = index.links[cur] || []
const incoming = index.backlinks[cur] || []
wl.push(...outgoing.map((l) => l.target), ...incoming.map((l) => l.source))
}
}
} else {
parseIdsFromLinks(copyLinks).forEach((id) => neighbours.add(id))
}
const data = {
nodes: [...neighbours].map((id) => ({ id })),
links: copyLinks.filter((l) => neighbours.has(l.source) && neighbours.has(l.target)),
}
const color = (d) => {
if (d.id === curPage || (d.id === "/" && curPage === "")) {
return "var(--g-node-active)"
}
for (const pathColor of pathColors) {
const path = Object.keys(pathColor)[0]
const colour = pathColor[path]
if (d.id.startsWith(path)) {
return colour
}
}
return "var(--g-node)"
}
const drag = (simulation) => {
function dragstarted(event, d) {
if (!event.active) simulation.alphaTarget(1).restart()
d.fx = d.x
d.fy = d.y
}
function dragged(event, d) {
d.fx = event.x
d.fy = event.y
}
function dragended(event, d) {
if (!event.active) simulation.alphaTarget(0)
d.fx = null
d.fy = null
}
const noop = () => {}
return d3
.drag()
.on("start", enableDrag ? dragstarted : noop)
.on("drag", enableDrag ? dragged : noop)
.on("end", enableDrag ? dragended : noop)
}
const height = Math.max(container.offsetHeight, isHome ? 500 : 250)
const width = container.offsetWidth
const simulation = d3
.forceSimulation(data.nodes)
.force("charge", d3.forceManyBody().strength(-100 * repelForce))
.force(
"link",
d3
.forceLink(data.links)
.id((d) => d.id)
.distance(40),
)
.force("center", d3.forceCenter())
const svg = d3
.select("#graph-container")
.append("svg")
.attr("width", width)
.attr("height", height)
.attr('viewBox', [-width / 2 / scale, -height / 2 / scale, width / scale, height / scale])
if (enableLegend) {
const legend = [{ Current: "var(--g-node-active)" }, { Note: "var(--g-node)" }, ...pathColors]
legend.forEach((legendEntry, i) => {
const key = Object.keys(legendEntry)[0]
const colour = legendEntry[key]
svg
.append("circle")
.attr("cx", -width / 2 + 20)
.attr("cy", height / 2 - 30 * (i + 1))
.attr("r", 6)
.style("fill", colour)
svg
.append("text")
.attr("x", -width / 2 + 40)
.attr("y", height / 2 - 30 * (i + 1))
.text(key)
.style("font-size", "15px")
.attr("alignment-baseline", "middle")
})
}
// draw links between nodes
const link = svg
.append("g")
.selectAll("line")
.data(data.links)
.join("line")
.attr("class", "link")
.attr("stroke", "var(--g-link)")
.attr("stroke-width", 2)
.attr("data-source", (d) => d.source.id)
.attr("data-target", (d) => d.target.id)
// svg groups
const graphNode = svg.append("g").selectAll("g").data(data.nodes).enter().append("g")
// calculate radius
const nodeRadius = (d) => {
const numOut = index.links[d.id]?.length || 0
const numIn = index.backlinks[d.id]?.length || 0
return 2 + Math.sqrt(numOut + numIn)
}
// draw individual nodes
const node = graphNode
.append("circle")
.attr("class", "node")
.attr("id", (d) => d.id)
.attr("r", nodeRadius)
.attr("fill", color)
.style("cursor", "pointer")
.on("click", (_, d) => {
// SPA navigation
window.Million.navigate(new URL(`${baseUrl}${decodeURI(d.id).replace(/\s+/g, "-")}/`), ".singlePage")
})
.on("mouseover", function (_, d) {
d3.selectAll(".node").transition().duration(100).attr("fill", "var(--g-node-inactive)")
const neighbours = parseIdsFromLinks([
...(index.links[d.id] || []),
...(index.backlinks[d.id] || []),
])
const neighbourNodes = d3.selectAll(".node").filter((d) => neighbours.includes(d.id))
const currentId = d.id
window.Million.prefetch(new URL(`${baseUrl}${decodeURI(d.id).replace(/\s+/g, "-")}/`))
const linkNodes = d3
.selectAll(".link")
.filter((d) => d.source.id === currentId || d.target.id === currentId)
// highlight neighbour nodes
neighbourNodes.transition().duration(200).attr("fill", color)
// highlight links
linkNodes.transition().duration(200).attr("stroke", "var(--g-link-active)")
const bigFont = fontSize*1.5
// show text for self
d3.select(this.parentNode)
.raise()
.select("text")
.transition()
.duration(200)
.attr('opacityOld', d3.select(this.parentNode).select('text').style("opacity"))
.style('opacity', 1)
.style('font-size', bigFont+'em')
.attr('dy', d => nodeRadius(d) + 20 + 'px') // radius is in px
})
.on("mouseleave", function (_, d) {
d3.selectAll(".node").transition().duration(200).attr("fill", color)
const currentId = d.id
const linkNodes = d3
.selectAll(".link")
.filter((d) => d.source.id === currentId || d.target.id === currentId)
linkNodes.transition().duration(200).attr("stroke", "var(--g-link)")
d3.select(this.parentNode)
.select("text")
.transition()
.duration(200)
.style('opacity', d3.select(this.parentNode).select('text').attr("opacityOld"))
.style('font-size', fontSize+'em')
.attr('dy', d => nodeRadius(d) + 8 + 'px') // radius is in px
})
.call(drag(simulation))
// draw labels
const labels = graphNode
.append("text")
.attr("dx", 0)
.attr("dy", (d) => nodeRadius(d) + 8 + "px")
.attr("text-anchor", "middle")
.text((d) => content[d.id]?.title || d.id.replace("-", " "))
.style('opacity', (opacityScale - 1) / 3.75)
.style("pointer-events", "none")
.style('font-size', fontSize+'em')
.raise()
.call(drag(simulation))
// set panning
if (enableZoom) {
svg.call(
d3
.zoom()
.extent([
[0, 0],
[width, height],
])
.scaleExtent([0.25, 4])
.on("zoom", ({ transform }) => {
link.attr("transform", transform)
node.attr("transform", transform)
const scale = transform.k * opacityScale;
const scaledOpacity = Math.max((scale - 1) / 3.75, 0)
labels.attr("transform", transform).style("opacity", scaledOpacity)
}),
)
}
// progress the simulation
simulation.on("tick", () => {
link
.attr("x1", (d) => d.source.x)
.attr("y1", (d) => d.source.y)
.attr("x2", (d) => d.target.x)
.attr("y2", (d) => d.target.y)
node.attr("cx", (d) => d.x).attr("cy", (d) => d.y)
labels.attr("x", (d) => d.x).attr("y", (d) => d.y)
})
}

@ -0,0 +1,7 @@
(function() {
var menu = document.querySelector("aside .book-menu-content");
addEventListener("beforeunload", function(event) {
localStorage.setItem("menu.scrollTop", menu.scrollTop);
});
menu.scrollTop = localStorage.getItem("menu.scrollTop");
})();

@ -0,0 +1,74 @@
function htmlToElement(html) {
const template = document.createElement("template")
html = html.trim()
template.innerHTML = html
return template.content.firstChild
}
function initPopover(baseURL, useContextualBacklinks) {
const basePath = baseURL.replace(window.location.origin, "")
fetchData.then(({ content }) => {
const links = [...document.getElementsByClassName("internal-link")]
links
.filter(li => li.dataset.src || (li.dataset.idx && useContextualBacklinks))
.forEach(li => {
let el
if (li.dataset.ctx) {
const linkDest = content[li.dataset.src]
const popoverElement = `<div class="popover">
<h3>${linkDest.title}</h3>
<p>${highlight(removeMarkdown(linkDest.content), li.dataset.ctx)}...</p>
<p class="meta">${new Date(linkDest.lastmodified).toLocaleDateString()}</p>
</div>`
el = htmlToElement(popoverElement)
} else {
const linkDest = content[li.dataset.src.replace(/\/$/g, "").replace(basePath, "")]
if (linkDest) {
let splitLink = li.href.split("#")
let cleanedContent = removeMarkdown(linkDest.content)
if (splitLink.length > 1) {
let headingName = decodeURIComponent(splitLink[1]).replace(/\-/g, " ")
let headingIndex = cleanedContent.toLowerCase().indexOf("<b>" + headingName + "</b>")
cleanedContent = cleanedContent.substring(headingIndex, cleanedContent.length)
}
const popoverElement = `<div class="popover">
<h3>${linkDest.title}</h3>
<p>${cleanedContent.split(" ", 20).join(" ")}...</p>
<p class="meta">${new Date(linkDest.lastmodified).toLocaleDateString()}</p>
</div>`
el = htmlToElement(popoverElement)
}
}
if (el) {
li.appendChild(el)
if (LATEX_ENABLED) {
renderMathInElement(el, {
delimiters: [
{ left: '$$', right: '$$', display: false },
{ left: '$', right: '$', display: false },
],
throwOnError: false
})
}
li.addEventListener("mouseover", () => {
// fix tooltip positioning
window.FloatingUIDOM.computePosition(li, el, {
middleware: [window.FloatingUIDOM.offset(10), window.FloatingUIDOM.inline(), window.FloatingUIDOM.shift()],
}).then(({ x, y }) => {
Object.assign(el.style, {
left: `${x}px`,
top: `${y}px`,
})
})
el.classList.add("visible")
})
li.addEventListener("mouseout", () => {
el.classList.remove("visible")
})
}
})
})
}

@ -0,0 +1,26 @@
import {
apply,
navigate,
prefetch,
router,
} from "https://unpkg.com/million@1.11.5/dist/router.mjs"
export const attachSPARouting = (init, rerender) => {
// Attach SPA functions to the global Million namespace
window.Million = {
apply,
navigate,
prefetch,
router,
}
const render = () => requestAnimationFrame(rerender)
window.addEventListener("DOMContentLoaded", () => {
apply((doc) => init(doc))
init()
router(".singlePage")
render()
})
window.addEventListener("million:navigate", render)
}

@ -0,0 +1,54 @@
// Note: Currently, we use the REST API for Operand because of some unpkg/webpack issues.
// In the future, we'd like to use the SDK (https://github.com/operandinc/typescript-sdk).
// If someone knows how to do this w/o breaking the Operand typescript-sdk for npm users,
// please let Morgan (@morgallant) and/or (@_jzhao) know! <3
const apiKey = "{{$.Site.params.search.operandApiKey}}"
const indexId = "{{$.Site.params.search.operandIndexId}}"
function parseSearchResults(searchResults) {
return searchResults.matches.map((m) => ({
content: m.content,
title: searchResults.objects[m.objectId].properties.properties._title.text,
url: searchResults.objects[m.objectId].properties.properties._url.text,
}))
}
async function searchContents(query) {
const result = await fetch("https://api.operand.ai/operand.v1.ObjectService/SearchWithin", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `${apiKey}`,
"Operand-Index-ID": `${indexId}`,
},
body: JSON.stringify({
query: query,
limit: 10,
}),
})
if (result.ok) {
return parseSearchResults(await result.json())
} else {
console.error(result)
}
}
function debounce(func, timeout = 200) {
let timer
return (...args) => {
clearTimeout(timer)
timer = setTimeout(() => {
func.apply(this, args)
}, timeout)
}
}
registerHandlers(
debounce((e) => {
let term = e.target.value
if (term !== "") {
searchContents(term).then((results) => displayResults(term, results))
}
}),
)

@ -0,0 +1,7 @@
{{- $swJS := resources.Get "sw.js" | resources.ExecuteAsTemplate "sw.js" . -}}
if (navigator.serviceWorker) {
navigator.serviceWorker.register(
"{{ $swJS.RelPermalink }}",
{ scope: "{{ "/" | relURL }}" }
);
}

55
assets/quartz/js/sw.js Normal file

@ -0,0 +1,55 @@
const cacheName = self.location.pathname
const pages = [
{{ if eq .Site.Params.BookServiceWorker "precache" }}
{{ range .Site.AllPages -}}
"{{ .RelPermalink }}",
{{ end -}}
{{ end }}
];
self.addEventListener("install", function (event) {
self.skipWaiting();
caches.open(cacheName).then((cache) => {
return cache.addAll(pages);
});
});
self.addEventListener("fetch", (event) => {
const request = event.request;
if (request.method !== "GET") {
return;
}
/**
* @param {Response} response
* @returns {Promise<Response>}
*/
function saveToCache(response) {
if (cacheable(response)) {
return caches
.open(cacheName)
.then((cache) => cache.put(request, response.clone()))
.then(() => response);
} else {
return response;
}
}
/**
* @param {Error} error
*/
function serveFromCache(error) {
return caches.open(cacheName).then((cache) => cache.match(request.url));
}
/**
* @param {Response} response
* @returns {Boolean}
*/
function cacheable(response) {
return response.type === "basic" && response.ok && !response.headers.has("Content-Disposition")
}
event.respondWith(fetch(request).then(saveToCache).catch(serveFromCache));
});

224
assets/quartz/js/util.js Normal file

@ -0,0 +1,224 @@
// code from https://github.com/danestves/markdown-to-text
const removeMarkdown = (
markdown,
options = {
listUnicodeChar: false,
stripListLeaders: true,
gfm: true,
useImgAltText: false,
preserveLinks: false,
},
) => {
let output = markdown || ""
output = output.replace(/^(-\s*?|\*\s*?|_\s*?){3,}\s*$/gm, "")
try {
if (options.stripListLeaders) {
if (options.listUnicodeChar)
output = output.replace(/^([\s\t]*)([\*\-\+]|\d+\.)\s+/gm, options.listUnicodeChar + " $1")
else output = output.replace(/^([\s\t]*)([\*\-\+]|\d+\.)\s+/gm, "$1")
}
if (options.gfm) {
output = output
.replace(/\n={2,}/g, "\n")
.replace(/~{3}.*\n/g, "")
.replace(/~~/g, "")
.replace(/`{3}.*\n/g, "")
}
if (options.preserveLinks) {
output = output.replace(/\[(.*?)\][\[\(](.*?)[\]\)]/g, "$1 ($2)")
}
output = output
.replace(/<[^>]*>/g, "")
.replace(/^[=\-]{2,}\s*$/g, "")
.replace(/\[\^.+?\](\: .*?$)?/g, "")
.replace(/(#{1,6})\s+(.+)\1?/g, "<b>$2</b>")
.replace(/\s{0,2}\[.*?\]: .*?$/g, "")
.replace(/\!\[(.*?)\][\[\(].*?[\]\)]/g, options.useImgAltText ? "$1" : "")
.replace(/\[(.*?)\][\[\(].*?[\]\)]/g, "<a>$1</a>")
.replace(/!?\[\[\S[^\[\]\|]*(?:\|([^\[\]]*))?\S\]\]/g, "<a>$1</a>")
.replace(/^\s{0,3}>\s?/g, "")
.replace(/(^|\n)\s{0,3}>\s?/g, "\n\n")
.replace(/^\s{1,2}\[(.*?)\]: (\S+)( ".*?")?\s*$/g, "")
.replace(/([\*_]{1,3})(\S.*?\S?)\1/g, "$2")
.replace(/([\*_]{1,3})(\S.*?\S?)\1/g, "$2")
.replace(/(`{3,})(.*?)\1/gm, "$2")
.replace(/`(.+?)`/g, "$1")
.replace(/\n{2,}/g, "\n\n")
.replace(/\[![a-zA-Z]+\][-\+]? /g, "")
} catch (e) {
console.error(e)
return markdown
}
return output
}
const highlight = (content, term) => {
const highlightWindow = 20
// try to find direct match first
const directMatchIdx = content.indexOf(term)
if (directMatchIdx !== -1) {
const h = highlightWindow
const before = content.substring(0, directMatchIdx).split(" ").slice(-h)
const after = content
.substring(directMatchIdx + term.length, content.length - 2)
.split(" ")
.slice(0, h)
return (
(before.length === h ? `...${before.join(" ")}` : before.join(" ")) +
`<span class="search-highlight">${term}</span>` +
after.join(" ")
)
}
const tokenizedTerm = term.split(/\s+/).filter((t) => t !== "")
const splitText = content.split(/\s+/).filter((t) => t !== "")
const includesCheck = (token) =>
tokenizedTerm.some((term) => token.toLowerCase().startsWith(term.toLowerCase()))
const occurrencesIndices = splitText.map(includesCheck)
// calculate best index
let bestSum = 0
let bestIndex = 0
for (let i = 0; i < Math.max(occurrencesIndices.length - highlightWindow, 0); i++) {
const window = occurrencesIndices.slice(i, i + highlightWindow)
const windowSum = window.reduce((total, cur) => total + cur, 0)
if (windowSum >= bestSum) {
bestSum = windowSum
bestIndex = i
}
}
const startIndex = Math.max(bestIndex - highlightWindow, 0)
const endIndex = Math.min(startIndex + 2 * highlightWindow, splitText.length)
const mappedText = splitText
.slice(startIndex, endIndex)
.map((token) => {
if (includesCheck(token)) {
return `<span class="search-highlight">${token}</span>`
}
return token
})
.join(" ")
.replaceAll('</span> <span class="search-highlight">', " ")
return `${startIndex === 0 ? "" : "..."}${mappedText}${endIndex === splitText.length ? "" : "..."
}`
}
// Common utilities for search
const resultToHTML = ({ url, title, content }) => {
return `<button class="result-card" id="${url}">
<h3>${title}</h3>
<p>${content}</p>
</button>`
}
const redir = (id, term) => {
const shouldTrim = PRODUCTION && SEARCH_ENABLED
const baseURLPrefix = shouldTrim ? "" : BASE_URL.replace(/\/$/g, "")
const urlString = `${baseURLPrefix}${id}#:~:text=${encodeURIComponent(term)}/`
window.Million.navigate(
new URL(urlString),
".singlePage",
)
closeSearch()
}
function openSearch() {
const source = document.getElementById("search-bar")
const results = document.getElementById("results-container")
const searchContainer = document.getElementById("search-container")
if (searchContainer.style.display === "none" || searchContainer.style.display === "") {
source.value = ""
results.innerHTML = ""
searchContainer.style.display = "block"
source.focus()
} else {
searchContainer.style.display = "none"
}
}
function closeSearch() {
const searchContainer = document.getElementById("search-container")
searchContainer.style.display = "none"
}
const registerHandlers = (onInputFn) => {
const source = document.getElementById("search-bar")
const searchContainer = document.getElementById("search-container")
let term
source.addEventListener("keyup", (e) => {
if (e.key === "Enter") {
const anchor = document.getElementsByClassName("result-card")[0]
redir(anchor.id, term)
}
})
source.addEventListener("input", onInputFn)
document.addEventListener("keydown", (event) => {
if (event.key === "k" && (event.ctrlKey || event.metaKey)) {
event.preventDefault()
openSearch()
}
if (event.key === "Escape") {
event.preventDefault()
closeSearch()
}
})
const searchButtons = document.getElementsByClassName("quartz-search")
for (let searchButton of searchButtons) {
searchButton.addEventListener("click", (_) => {
openSearch()
})
searchButton.addEventListener("keydown", (_) => {
openSearch()
})
searchContainer.addEventListener("click", (_) => {
closeSearch()
})
document.getElementById("search-space").addEventListener("click", (evt) => {
evt.stopPropagation()
})
}
}
const displayResults = (term, finalResults, extractHighlight = false) => {
const results = document.getElementById("results-container")
if (finalResults.length === 0) {
results.innerHTML = `<button class="result-card">
<h3>No results.</h3>
<p>Try another search term?</p>
</button>`
} else {
results.innerHTML = finalResults
.map((result) => {
if (extractHighlight) {
return resultToHTML({
url: result.url,
title: highlight(result.title, term),
content: highlight(removeMarkdown(result.content), term)
})
} else {
return resultToHTML(result)
}
}
)
.join("\n")
if (LATEX_ENABLED) {
renderMathInElement(results, {
delimiters: [
{ left: '$$', right: '$$', display: false },
{ left: '$', right: '$', display: false },
],
throwOnError: false
})
}
const anchors = [...document.getElementsByClassName("result-card")]
anchors.forEach((anchor) => {
anchor.onclick = () => redir(anchor.id, term)
})
}
}

@ -0,0 +1,170 @@
:root {
--callout-summary: #00b0ff;
--callout-summary-accent: #7fd7ff;
--callout-bug: #f50057;
--callout-bug-accent: #ff7aa9;
--callout-danger: #ff1744;
--callout-danger-accent: #ff8aa1;
--callout-example: #7c4dff;
--callout-example-accent: #bda5ff;
--callout-fail: #ff5252;
--callout-fail-accent: #ffa8a8;
--callout-info: #00b8d4;
--callout-info-accent: #69ebff;
--callout-note: #448aff;
--callout-note-accent: #a1c4ff;
--callout-question: #64dd17;
--callout-question-accent: #b0f286;
--callout-quote: #9e9e9e;
--callout-quote-accent: #cecece;
--callout-done: #00c853;
--callout-done-accent: #63ffa4;
--callout-important: #00bfa5;
--callout-important-accent: #5fffe9;
--callout-warning: #ff9100;
--callout-warning-accent: #ffc87f;
}
[saved-theme=dark] {
--callout-summary: #00b0ff !important;
--callout-summary-accent: #00587f !important;
--callout-bug: #f50057 !important;
--callout-bug-accent: #7a002b !important;
--callout-danger: #ff1744 !important;
--callout-danger-accent: #8b001a !important;
--callout-example: #7c4dff !important;
--callout-example-accent: #2b00a6 !important;
--callout-fail: #ff5252 !important;
--callout-fail-accent: #a80000 !important;
--callout-info: #00b8d4 !important;
--callout-info-accent: #005c6a !important;
--callout-note: #448aff !important;
--callout-note-accent: #003ca1 !important;
--callout-question: #64dd17 !important;
--callout-question-accent: #006429 !important;
--callout-quote: #9e9e9e !important;
--callout-quote-accent: #4f4f4f !important;
--callout-done: #00c853 !important;
--callout-done-accent: #006429 !important;
--callout-important: #00bfa5 !important;
--callout-important-accent: #005f52 !important;
--callout-warning: #ff9100 !important;
--callout-warning-accent: #7f4800 !important;
}
blockquote.callout-collapsible {
cursor: pointer;
&.callout-collapsible::after {
content: '-';
right: 6px;
font-weight: bolder;
font-family: Courier New, Courier, monospace;
}
}
blockquote.callout-collapsed {
& > p { border-bottom-right-radius: 5px !important; }
padding-bottom: 0 !important;
&::after {
content: '+' !important;
}
& > *:not(:first-child) {
display: none !important;
}
}
blockquote[class*="-callout"] {
margin-right: 0;
border-radius: 5px;
position: relative;
padding-left: 0 !important;
padding-bottom: 0.25em;
color: var(--dark);
background-color: var(--lightgray);
border-left: 6px solid var(--primary) !important;
& > p {
border-top-right-radius: 5px;
padding: 0.5em 1em;
margin: 0;
color: var(--gray);
&:first-child {
font-weight: 600;
color: var(--dark);
padding: 0.4em 30px;
}
}
}
blockquote[class*="-callout"] > p:first-child::after, blockquote.callout-collapsible::after {
display: inline-block;
height: 18px;
width: 18px;
position: absolute;
top: 0.4em;
margin: 0.2em 0.4em;
}
blockquote[class*="-callout"] > p:first-child {
font-weight: bold;
padding: 0.4em 35px;
&::after {
left: 0;
}
}
$summary: summary, abstract, tldr;
$bug: bug;
$danger: danger, error;
$example: example;
$fail: fail, failure, missing;
$info: info, todo;
$note: note;
$question: question, help, faq;
$quote: quote, cite;
$done: done, success, check;
$important: important, tip, hint;
$warning: warning, caution, attention;
$types: $summary, $bug, $danger, $example, $fail, $info, $note, $question, $quote, $done, $important, $warning;
$svgs: ();
$svgs: map-merge($svgs, ($summary: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='book' class='svg-inline--callout-fa fa-book fa-w-14' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512'%3E%3Cpath fill='currentColor' d='M448 360V24c0-13.3-10.7-24-24-24H96C43 0 0 43 0 96v320c0 53 43 96 96 96h328c13.3 0 24-10.7 24-24v-16c0-7.5-3.5-14.3-8.9-18.7-4.2-15.4-4.2-59.3 0-74.7 5.4-4.3 8.9-11.1 8.9-18.6zM128 134c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm0 64c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm253.4 250H96c-17.7 0-32-14.3-32-32 0-17.6 14.4-32 32-32h285.4c-1.9 17.1-1.9 46.9 0 64z'%3E%3C/path%3E%3C/svg%3E")));
$svgs: map-merge($svgs, ($bug: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='bug' class='svg-inline--callout-fa fa-bug fa-w-16' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M511.988 288.9c-.478 17.43-15.217 31.1-32.653 31.1H424v16c0 21.864-4.882 42.584-13.6 61.145l60.228 60.228c12.496 12.497 12.496 32.758 0 45.255-12.498 12.497-32.759 12.496-45.256 0l-54.736-54.736C345.886 467.965 314.351 480 280 480V236c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v244c-34.351 0-65.886-12.035-90.636-32.108l-54.736 54.736c-12.498 12.497-32.759 12.496-45.256 0-12.496-12.497-12.496-32.758 0-45.255l60.228-60.228C92.882 378.584 88 357.864 88 336v-16H32.666C15.23 320 .491 306.33.013 288.9-.484 270.816 14.028 256 32 256h56v-58.745l-46.628-46.628c-12.496-12.497-12.496-32.758 0-45.255 12.498-12.497 32.758-12.497 45.256 0L141.255 160h229.489l54.627-54.627c12.498-12.497 32.758-12.497 45.256 0 12.496 12.497 12.496 32.758 0 45.255L424 197.255V256h56c17.972 0 32.484 14.816 31.988 32.9zM257 0c-61.856 0-112 50.144-112 112h224C369 50.144 318.856 0 257 0z'%3E%3C/path%3E%3C/svg%3E")));
$svgs: map-merge($svgs, ($danger: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='bolt' class='svg-inline--callout-fa fa-bolt fa-w-10' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3Cpath fill='currentColor' d='M296 160H180.6l42.6-129.8C227.2 15 215.7 0 200 0H56C44 0 33.8 8.9 32.2 20.8l-32 240C-1.7 275.2 9.5 288 24 288h118.7L96.6 482.5c-3.6 15.2 8 29.5 23.3 29.5 8.4 0 16.4-4.4 20.8-12l176-304c9.3-15.9-2.2-36-20.7-36z'%3E%3C/path%3E%3C/svg%3E")));
$svgs: map-merge($svgs, ($example: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='list-ol' class='svg-inline--callout-fa fa-list-ol fa-w-16' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z'%3E%3C/path%3E%3C/svg%3E")));
$svgs: map-merge($svgs, ($fail: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='times-circle' class='svg-inline--callout-fa fa-times-circle fa-w-16' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z'%3E%3C/path%3E%3C/svg%3E")));
$svgs: map-merge($svgs, ($info: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='info-circle' class='svg-inline--callout-fa fa-info-circle fa-w-16' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z'%3E%3C/path%3E%3C/svg%3E")));
$svgs: map-merge($svgs, ($note: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='pencil-alt' class='svg-inline--callout-fa fa-pencil-alt fa-w-16' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z'%3E%3C/path%3E%3C/svg%3E")));
$svgs: map-merge($svgs, ($question: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='question-circle' class='svg-inline--callout-fa fa-question-circle fa-w-16' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z'%3E%3C/path%3E%3C/svg%3E")));
$svgs: map-merge($svgs, ($quote: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='quote-right' class='svg-inline--callout-fa fa-quote-right fa-w-16' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M464 32H336c-26.5 0-48 21.5-48 48v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48zm-288 0H48C21.5 32 0 53.5 0 80v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48z'%3E%3C/path%3E%3C/svg%3E")));
$svgs: map-merge($svgs, ($done: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='check-circle' class='svg-inline--callout-fa fa-check-circle fa-w-16' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z'%3E%3C/path%3E%3C/svg%3E")));
$svgs: map-merge($svgs, ($important: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='fire' class='svg-inline--callout-fa fa-fire fa-w-12' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'%3E%3Cpath fill='currentColor' d='M216 23.86c0-23.8-30.65-32.77-44.15-13.04C48 191.85 224 200 224 288c0 35.63-29.11 64.46-64.85 63.99-35.17-.45-63.15-29.77-63.15-64.94v-85.51c0-21.7-26.47-32.23-41.43-16.5C27.8 213.16 0 261.33 0 320c0 105.87 86.13 192 192 192s192-86.13 192-192c0-170.29-168-193-168-296.14z'%3E%3C/path%3E%3C/svg%3E")));
$svgs: map-merge($svgs, ($warning: url("data:image/svg+xml,%3Csvg aria-hidden='true' focusable='false' data-icon='exclamation-triangle' class='svg-inline--callout-fa fa-exclamation-triangle fa-w-18' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 576 512'%3E%3Cpath fill='currentColor' d='M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z'%3E%3C/path%3E%3C/svg%3E")));
@function getstr($l) {
$v: nth($l, 1);
@return $v;
}
@each $type in $types {
@each $s in $type {
blockquote.#{$s}-callout {
border-left: 6px solid var(--callout-#{getstr($type)}) !important;
& > p:first-child {
background-color: var(--callout-#{getstr($type)}-accent) !important;
&::after {
content: '';
-webkit-mask: map-get($svgs, $type);
mask: map-get($svgs, $type);
background-color: var(--callout-#{getstr($type)}) !important;
-webkit-mask-size: contain;
mask-size: contain;
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-position: center;
mask-position: center;
}
}
}
}
}

@ -0,0 +1,85 @@
/* Background */ .bg { color: #f8f8f2; background-color: #282a36; }
/* PreWrapper */ .chroma { color: #f8f8f2; background-color: #282a36; }
/* Other */ .chroma .x { }
/* Error */ .chroma .err { }
/* CodeLine */ .chroma .cl { }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
/* LineHighlight */ .chroma .hl { background-color: #ffffcc }
/* LineNumbersTable */ .chroma .lnt { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* LineNumbers */ .chroma .ln { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* Line */ .chroma .line { display: flex; }
/* Keyword */ .chroma .k { color: #ff79c6 }
/* KeywordConstant */ .chroma .kc { color: #ff79c6 }
/* KeywordDeclaration */ .chroma .kd { color: #8be9fd; font-style: italic }
/* KeywordNamespace */ .chroma .kn { color: #ff79c6 }
/* KeywordPseudo */ .chroma .kp { color: #ff79c6 }
/* KeywordReserved */ .chroma .kr { color: #ff79c6 }
/* KeywordType */ .chroma .kt { color: #8be9fd }
/* Name */ .chroma .n { }
/* NameAttribute */ .chroma .na { color: #50fa7b }
/* NameBuiltin */ .chroma .nb { color: #8be9fd; font-style: italic }
/* NameBuiltinPseudo */ .chroma .bp { }
/* NameClass */ .chroma .nc { color: #50fa7b }
/* NameConstant */ .chroma .no { }
/* NameDecorator */ .chroma .nd { }
/* NameEntity */ .chroma .ni { }
/* NameException */ .chroma .ne { }
/* NameFunction */ .chroma .nf { color: #50fa7b }
/* NameFunctionMagic */ .chroma .fm { }
/* NameLabel */ .chroma .nl { color: #8be9fd; font-style: italic }
/* NameNamespace */ .chroma .nn { }
/* NameOther */ .chroma .nx { }
/* NameProperty */ .chroma .py { }
/* NameTag */ .chroma .nt { color: #ff79c6 }
/* NameVariable */ .chroma .nv { color: #8be9fd; font-style: italic }
/* NameVariableClass */ .chroma .vc { color: #8be9fd; font-style: italic }
/* NameVariableGlobal */ .chroma .vg { color: #8be9fd; font-style: italic }
/* NameVariableInstance */ .chroma .vi { color: #8be9fd; font-style: italic }
/* NameVariableMagic */ .chroma .vm { }
/* Literal */ .chroma .l { }
/* LiteralDate */ .chroma .ld { }
/* LiteralString */ .chroma .s { color: #f1fa8c }
/* LiteralStringAffix */ .chroma .sa { color: #f1fa8c }
/* LiteralStringBacktick */ .chroma .sb { color: #f1fa8c }
/* LiteralStringChar */ .chroma .sc { color: #f1fa8c }
/* LiteralStringDelimiter */ .chroma .dl { color: #f1fa8c }
/* LiteralStringDoc */ .chroma .sd { color: #f1fa8c }
/* LiteralStringDouble */ .chroma .s2 { color: #f1fa8c }
/* LiteralStringEscape */ .chroma .se { color: #f1fa8c }
/* LiteralStringHeredoc */ .chroma .sh { color: #f1fa8c }
/* LiteralStringInterpol */ .chroma .si { color: #f1fa8c }
/* LiteralStringOther */ .chroma .sx { color: #f1fa8c }
/* LiteralStringRegex */ .chroma .sr { color: #f1fa8c }
/* LiteralStringSingle */ .chroma .s1 { color: #f1fa8c }
/* LiteralStringSymbol */ .chroma .ss { color: #f1fa8c }
/* LiteralNumber */ .chroma .m { color: #bd93f9 }
/* LiteralNumberBin */ .chroma .mb { color: #bd93f9 }
/* LiteralNumberFloat */ .chroma .mf { color: #bd93f9 }
/* LiteralNumberHex */ .chroma .mh { color: #bd93f9 }
/* LiteralNumberInteger */ .chroma .mi { color: #bd93f9 }
/* LiteralNumberIntegerLong */ .chroma .il { color: #bd93f9 }
/* LiteralNumberOct */ .chroma .mo { color: #bd93f9 }
/* Operator */ .chroma .o { color: #ff79c6 }
/* OperatorWord */ .chroma .ow { color: #ff79c6 }
/* Punctuation */ .chroma .p { }
/* Comment */ .chroma .c { color: #6272a4 }
/* CommentHashbang */ .chroma .ch { color: #6272a4 }
/* CommentMultiline */ .chroma .cm { color: #6272a4 }
/* CommentSingle */ .chroma .c1 { color: #6272a4 }
/* CommentSpecial */ .chroma .cs { color: #6272a4 }
/* CommentPreproc */ .chroma .cp { color: #ff79c6 }
/* CommentPreprocFile */ .chroma .cpf { color: #ff79c6 }
/* Generic */ .chroma .g { }
/* GenericDeleted */ .chroma .gd { color: #ff5555 }
/* GenericEmph */ .chroma .ge { text-decoration: underline }
/* GenericError */ .chroma .gr { }
/* GenericHeading */ .chroma .gh { font-weight: bold }
/* GenericInserted */ .chroma .gi { color: #50fa7b; font-weight: bold }
/* GenericOutput */ .chroma .go { color: #44475a }
/* GenericPrompt */ .chroma .gp { }
/* GenericStrong */ .chroma .gs { }
/* GenericSubheading */ .chroma .gu { font-weight: bold }
/* GenericTraceback */ .chroma .gt { }
/* GenericUnderline */ .chroma .gl { text-decoration: underline }
/* TextWhitespace */ .chroma .w { }

@ -0,0 +1,85 @@
/* Background */ .bg { color: #272822; background-color: #fafafa; }
/* PreWrapper */ .chroma { color: #272822; background-color: #fafafa; }
/* Other */ .chroma .x { }
/* Error */ .chroma .err { }
/* CodeLine */ .chroma .cl { }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
/* LineHighlight */ .chroma .hl { background-color: #ffffcc }
/* LineNumbersTable */ .chroma .lnt { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* LineNumbers */ .chroma .ln { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* Line */ .chroma .line { display: flex; }
/* Keyword */ .chroma .k { color: #00a8c8 }
/* KeywordConstant */ .chroma .kc { color: #00a8c8 }
/* KeywordDeclaration */ .chroma .kd { color: #00a8c8 }
/* KeywordNamespace */ .chroma .kn { color: #f92672 }
/* KeywordPseudo */ .chroma .kp { color: #00a8c8 }
/* KeywordReserved */ .chroma .kr { color: #00a8c8 }
/* KeywordType */ .chroma .kt { color: #00a8c8 }
/* Name */ .chroma .n { color: #111111 }
/* NameAttribute */ .chroma .na { color: #75af00 }
/* NameBuiltin */ .chroma .nb { color: #111111 }
/* NameBuiltinPseudo */ .chroma .bp { color: #111111 }
/* NameClass */ .chroma .nc { color: #75af00 }
/* NameConstant */ .chroma .no { color: #00a8c8 }
/* NameDecorator */ .chroma .nd { color: #75af00 }
/* NameEntity */ .chroma .ni { color: #111111 }
/* NameException */ .chroma .ne { color: #75af00 }
/* NameFunction */ .chroma .nf { color: #75af00 }
/* NameFunctionMagic */ .chroma .fm { color: #111111 }
/* NameLabel */ .chroma .nl { color: #111111 }
/* NameNamespace */ .chroma .nn { color: #111111 }
/* NameOther */ .chroma .nx { color: #75af00 }
/* NameProperty */ .chroma .py { color: #111111 }
/* NameTag */ .chroma .nt { color: #f92672 }
/* NameVariable */ .chroma .nv { color: #111111 }
/* NameVariableClass */ .chroma .vc { color: #111111 }
/* NameVariableGlobal */ .chroma .vg { color: #111111 }
/* NameVariableInstance */ .chroma .vi { color: #111111 }
/* NameVariableMagic */ .chroma .vm { color: #111111 }
/* Literal */ .chroma .l { color: #ae81ff }
/* LiteralDate */ .chroma .ld { color: #d88200 }
/* LiteralString */ .chroma .s { color: #d88200 }
/* LiteralStringAffix */ .chroma .sa { color: #d88200 }
/* LiteralStringBacktick */ .chroma .sb { color: #d88200 }
/* LiteralStringChar */ .chroma .sc { color: #d88200 }
/* LiteralStringDelimiter */ .chroma .dl { color: #d88200 }
/* LiteralStringDoc */ .chroma .sd { color: #d88200 }
/* LiteralStringDouble */ .chroma .s2 { color: #d88200 }
/* LiteralStringEscape */ .chroma .se { color: #8045ff }
/* LiteralStringHeredoc */ .chroma .sh { color: #d88200 }
/* LiteralStringInterpol */ .chroma .si { color: #d88200 }
/* LiteralStringOther */ .chroma .sx { color: #d88200 }
/* LiteralStringRegex */ .chroma .sr { color: #d88200 }
/* LiteralStringSingle */ .chroma .s1 { color: #d88200 }
/* LiteralStringSymbol */ .chroma .ss { color: #d88200 }
/* LiteralNumber */ .chroma .m { color: #ae81ff }
/* LiteralNumberBin */ .chroma .mb { color: #ae81ff }
/* LiteralNumberFloat */ .chroma .mf { color: #ae81ff }
/* LiteralNumberHex */ .chroma .mh { color: #ae81ff }
/* LiteralNumberInteger */ .chroma .mi { color: #ae81ff }
/* LiteralNumberIntegerLong */ .chroma .il { color: #ae81ff }
/* LiteralNumberOct */ .chroma .mo { color: #ae81ff }
/* Operator */ .chroma .o { color: #f92672 }
/* OperatorWord */ .chroma .ow { color: #f92672 }
/* Punctuation */ .chroma .p { color: #111111 }
/* Comment */ .chroma .c { color: #75715e }
/* CommentHashbang */ .chroma .ch { color: #75715e }
/* CommentMultiline */ .chroma .cm { color: #75715e }
/* CommentSingle */ .chroma .c1 { color: #75715e }
/* CommentSpecial */ .chroma .cs { color: #75715e }
/* CommentPreproc */ .chroma .cp { color: #75715e }
/* CommentPreprocFile */ .chroma .cpf { color: #75715e }
/* Generic */ .chroma .g { }
/* GenericDeleted */ .chroma .gd { }
/* GenericEmph */ .chroma .ge { font-style: italic }
/* GenericError */ .chroma .gr { }
/* GenericHeading */ .chroma .gh { }
/* GenericInserted */ .chroma .gi { }
/* GenericOutput */ .chroma .go { }
/* GenericPrompt */ .chroma .gp { }
/* GenericStrong */ .chroma .gs { font-weight: bold }
/* GenericSubheading */ .chroma .gu { }
/* GenericTraceback */ .chroma .gt { }
/* GenericUnderline */ .chroma .gl { }
/* TextWhitespace */ .chroma .w { }

@ -0,0 +1,615 @@
// typography
html {
scroll-behavior: smooth;
&:lang(ar) {
& p, & h1, & h2, & h3, article, header {
direction: rtl;
text-align: right;
}
}
& footer > p {
text-align: center !important;
}
}
.singlePage {
padding: 4em 30vw;
@media all and (max-width: 1200px) {
padding: 25px 5vw;
}
}
body {
margin: 0;
height: 100vh;
width: 100vw;
max-width: 100%;
box-sizing: border-box;
background-color: var(--light);
}
h1, h2, h3, h4, h5, h6, thead {
font-family: var(--font-header);
color: var(--dark);
font-weight: revert;
margin: 2rem 0 0;
padding: 2rem auto 1rem;
&:hover > .hanchor {
color: var(--secondary);
}
}
.hanchor {
font-family: var(--font-header);
opacity: 0.8;
transition: color 0.3s ease;
color: var(--dark);
}
p, ul, text, a, tr, td, li, ol, ul {
font-family: var(--font-body);
color: var(--gray);
fill: var(--gray);
font-weight: normal;
margin: revert;
padding: revert;
}
tbody, li, p {
line-height: 1.5em;
}
.mainTOC {
border-radius: 5px;
padding: 0.75em 0;
& details {
& summary {
cursor: zoom-in;
font-family: var(--font-header);
color: var(--dark);
font-weight: 700;
}
&[open] summary {
cursor: zoom-out;
}
}
}
#TableOfContents > ol {
counter-reset: section;
margin-left: 0;
padding-left: 1.5em;
& > li {
counter-increment: section;
& > ol {
counter-reset: subsection;
& > li {
counter-increment: subsection;
&::marker {
content: counter(section) "." counter(subsection) " ";
}
}
}
}
& > li::marker {
content: counter(section) " ";
}
& > li::marker, & > li > ol > li::marker {
font-family: var(--font-body);
font-weight: 700;
}
}
table {
border: 1px solid var(--outlinegray);
width: 100%;
padding: 1.5em;
border-collapse: collapse;
}
td, th {
padding: 0.2em 1em;
border: 1px solid var(--outlinegray);
}
img {
max-width: 100%;
border-radius: 3px;
margin: 1em 0;
}
p > img + em {
display: block;
transform: translateY(-1em);
}
sup {
line-height: 0
}
blockquote {
margin-left: 0;
border-left: 3px solid var(--secondary);
padding-left: 1em;
transition: border-color 0.2s ease;
}
.footnotes p {
margin: 0.5em 0;
}
.pagination {
list-style: none;
padding-left: 0;
display: flex;
margin-top: 2em;
gap: 1.5em;
justify-content: center;
.disabled {
opacity: 0.2;
}
& > li {
text-align: center;
display: inline-block;
& a {
background-color: transparent !important;
}
& a[href$="#"], &.active a {
opacity: 0.2;
}
}
}
article {
& > h1 {
margin-top: 2em;
font-size: 2em;
}
& > .meta {
margin: 0 0 1em 0;
opacity: 0.7;
}
& a {
font-weight: 600;
&.internal-link {
text-decoration: none;
background-color: transparentize(#8f9fa9, 0.85);
padding: 0 0.1em;
margin: auto -0.1em;
border-radius: 3px;
&.broken {
opacity: 0.5;
background-color: transparent;
}
}
}
& p {
overflow-wrap: anywhere;
}
}
.tags {
list-style: none;
padding-left: 0;
& .meta {
margin: 1.5em 0;
& > h1 {
margin: 0;
}
& > p {
margin: 0;
}
}
& > li {
display: inline-block;
margin: 0.4em 0.2em;
}
& > li > a {
border-radius: 8px;
border: var(--outlinegray) 1px solid;
padding: 0.2em 0.5em;
&::before {
content: "#";
margin-right: 0.3em;
color: var(--outlinegray);
}
}
}
.backlinks a {
font-weight: 600;
font-size: 0.9rem;
}
sup > a {
text-decoration: none;
padding: 0 0.1em 0 0.2em;
}
#page-title {
margin: 0;
& > a {
font-family: var(--font-header);
}
}
a {
font-size: 1em;
font-weight: 700;
text-decoration: none;
transition: all 0.2s ease;
color: var(--secondary);
&:hover {
color: var(--tertiary) !important;
}
}
pre {
font-family: var(--font-mono);
padding: 0.75em;
border-radius: 3px;
overflow-x: scroll;
}
code {
font-family: var(--font-mono);
font-size: 0.85em;
padding: 0.15em 0.3em;
border-radius: 5px;
background: var(--lightgray);
}
@keyframes fadeIn {
0% {opacity:0;}
100% {opacity:1;}
}
footer {
margin-top: 4em;
text-align: center;
& ul {
padding-left: 0;
}
}
hr {
width: 100%;
margin: 2em auto;
height: 1px;
border: none;
background-color: var(--outlinegray);
}
.page-end {
display: flex;
flex-direction: row;
gap: 2em;
@media all and (max-width: 780px) {
flex-direction: column;
}
& > * {
flex: 1 0 0;
}
& > .backlinks-container {
& > ul {
list-style: none;
padding: 0;
margin: 0;
& > li {
margin: 0.5em 0;
padding: 0.25em 1em;
border: var(--outlinegray) 1px solid;
border-radius: 5px
}
}
}
& #graph-container {
border: var(--outlinegray) 1px solid;
border-radius: 5px;
box-sizing: border-box;
min-height: 250px;
margin: 0.5em 0;
& > svg {
margin-bottom: -5px;
}
}
}
.centered {
margin-top: 30vh;
}
.spacer {
flex: 1 1 auto;
}
header, .menu-search {
display: flex;
flex-direction: row;
align-items: center;
margin: 2em 1em 2em;
& > h1 {
font-size: 2em;
}
& > nav {
@media all and (max-width: 600px) {
display: none;
}
}
#search-icon {
background-color: var(--lightgray);
border-radius: 4px;
height: 2em;
display: flex;
align-items: center;
cursor: pointer;
& > p {
display: inline;
padding: 0 1.5em 0 2em;
}
}
& svg {
cursor: pointer;
width: 18px;
min-width: 18px;
margin: 0 0.5em;
&:hover .search-path {
stroke: var(--tertiary);
}
.search-path {
stroke: var(--gray);
stroke-width: 2px;
transition: stroke 0.5s ease;
}
}
}
#search-container {
position: fixed;
z-index: 9999;
left: 0;
top: 0;
width: 100vw;
height: 100%;
overflow: scroll;
display: none;
backdrop-filter: blur(4px);
-webkit-backdrop-filter: blur(4px);
& > div {
width: 50%;
margin-top: 15vh;
margin-left: auto;
margin-right: auto;
@media all and (max-width: 1200px) {
width: 90%;
}
& > * {
width: 100%;
border-radius: 4px;
background: var(--light);
box-shadow: 0 14px 50px rgba(27, 33, 48, 0.12), 0 10px 30px rgba(27, 33, 48, 0.16);
margin-bottom: 2em;
}
& > input {
box-sizing: border-box;
padding: 0.5em 1em;
font-family: var(--font-body);
color: var(--dark);
font-size: 1.1em;
border: 1px solid var(--outlinegray);
&:focus {
outline: none;
}
}
& > #results-container {
& .result-card {
padding: 1em;
cursor: pointer;
transition: background 0.2s ease;
border: 1px solid var(--outlinegray);
border-bottom: none;
width: 100%;
// normalize button props
font-family: inherit;
font-size: 100%;
line-height: 1.15;
margin: 0;
overflow: visible;
text-transform: none;
text-align: left;
background: var(--light);
outline: none;
&:hover, &:focus {
background: rgba(180, 180, 180, 0.15);
}
&:first-of-type {
border-top-left-radius: 5px;
border-top-right-radius: 5px;
}
&:last-of-type {
border-bottom-left-radius: 5px;
border-bottom-right-radius: 5px;
border-bottom: 1px solid var(--outlinegray);
}
& > h3, & > p {
margin: 0;
}
}
}
}
}
.search-highlight {
background-color: #afbfc966;
padding: 0.05em 0.2em;
border-radius: 3px;
}
.section-ul {
list-style: none;
margin-top: 2em;
padding-left: 0;
}
.section-li {
margin-bottom: 1em;
& > .section {
display: flex;
align-items: center;
@media all and (max-width: 600px) {
& .tags {
display: none;
}
}
& h3 > a {
font-weight: 700;
margin: 0;
}
& p {
margin: 0;
padding-right: 1em;
flex-basis: 6em;
}
}
& h3 {
opacity: 1;
font-weight: 700;
margin: 0;
}
& .meta {
opacity: 0.6;
}
}
@keyframes dropin {
0% {
display: none;
opacity: 0;
visibility: hidden;
}
1% {
display: inline-block;
opacity: 0;
}
100% {
opacity: 1;
visibility: visible;
}
}
.popover {
z-index: 999;
position: absolute;
width: 20rem;
display: none;
background-color: var(--light);
padding: 1rem;
margin: 1rem;
border: 1px solid var(--outlinegray);
border-radius: 5px;
pointer-events: none;
transition: opacity 0.2s ease, transform 0.2s ease;
user-select: none;
overflow-wrap: anywhere;
box-shadow: 6px 6px 36px 0 rgba(0,0,0,0.25);
@media all and (max-width: 600px) {
display: none !important;
}
&.visible {
opacity: 1;
visibility: visible;
display: inline-block;
animation: dropin 0.2s ease;
}
& > h3 {
font-size: 1rem;
margin: 0.25rem 0;
}
& .meta {
margin-top: 0.25rem;
opacity: 0.5;
font-family: var(--font-mono);
font-size: 0.8rem;
}
& > p {
margin: 0;
padding: 0.5rem 0;
}
& > p, & > a {
font-size: 1rem;
font-weight: 400;
user-select: none;
}
}
#contact_buttons ul {
list-style-type: none;
li {
display: inline-block;
}
li a {
padding: 0 1em;
}
}
mark {
background-color: var(--highlighted);
color: var(--gray);
}

@ -0,0 +1,48 @@
.clipboard-button {
position: absolute;
display: flex;
float: right;
right: 0;
top: 0;
padding: 0.69em;
margin: 0.5em;
color: var(--outlinegray);
border-color: var(--dark);
background-color: var(--lightgray);
filter: contrast(1.1);
border: 2px solid;
border-radius: 6px;
font-size: 0.8em;
z-index: 1;
opacity: 0;
transition: 0.12s;
& > svg {
fill: var(--light);
filter: contrast(0.3);
}
&:hover {
cursor: pointer;
border-color: var(--primary);
& > svg {
fill: var(--primary);
}
}
&:focus {
outline: 0;
}
}
.highlight {
position: relative;
&:hover > .clipboard-button {
opacity: 1;
transition: 0.2s;
}
}

@ -0,0 +1,20 @@
.code-title {
color: var(--primary) ;
font-family: var(--font-mono);
width: max-content;
overflow-x: auto;
display: inline-block;
vertical-align: middle;
font-weight: normal;
line-height: 1em;
position: relative;
padding: 0.5em 0.6em 0.6em; // + 1.2 em
max-width: calc(100% - 1.2em); // (-1.2 em) fits article width exactly
margin-bottom: -0.2em;
z-index: -1;
border-top-left-radius: 0.3em;
border-top-right-radius: 0.3em;
font-size: 0.9em;
background-color: var(--lightgray);
filter: hue-rotate(-30deg) contrast(1.0) opacity(0.8);
}

@ -0,0 +1,43 @@
// Add your own CSS here!
.tag-container {
display: inline-flex;
flex-wrap: wrap;
& > .post-tag + .post-tag {
margin-left: 0.5em;
}
font-size: 10px;
}
#tabs-post-meta {
color: var(--gray) !important;
user-select: none;
font-size: 15px;
font-family: "AaBobble";
}
.tags-heading h3 {
margin: 0;
margin-top: 0.8em;
}
.post-date {
// margin: 1.7em 0;
display: inline-block;
}
.small-caps {
text-transform: uppercase;
}
.post-tag {
display: inline-block;
background-color: var(--secondary);
border-radius: 25px;
padding: 3px 7px;
font-size: 12px;
transition: box-shadow 300ms ease-out;
&:hover {
box-shadow: 3px 2px 0px #affffe;
}
a {
color: #000;
&:hover {
text-shadow: 0px 1px 0px #000;
}
}
}

@ -0,0 +1,44 @@
.darkmode {
float: right;
// padding: 1em;
min-width: 30px;
position: relative;
@media all and (max-width: 450px) {
padding: 1em;
}
& > .toggle {
display: none;
box-sizing: border-box;
}
& svg {
opacity: 0;
position: absolute;
width: 20px;
height: 20px;
top: calc(50% - 10px);
margin: 0 7px;
fill: var(--gray);
transition: opacity 0.1s ease;
}
}
.toggle:checked ~ label {
& > #dayIcon {
opacity: 0;
}
& > #nightIcon {
opacity: 1;
}
}
.toggle:not(:checked) ~ label {
& > #dayIcon {
opacity: 1;
}
& > #nightIcon {
opacity: 0;
}
}

@ -0,0 +1,66 @@
// Overrides
/* Background */
.chroma {
overflow: hidden !important;
background-color: var(--lightgray) !important;
}
/* LineTable */
.chroma .lntable {
width: auto !important;
overflow: auto !important;
display: block !important;
}
/* LineHighlight */
.chroma .hl {
display: block !important;
width: 100% !important;
}
/* LineNumbersTable */
.chroma .lnt {
margin-right: 0.0em !important;
padding: 0 0.0em 0 0.0em !important;
}
/* LineNumbers */
.chroma .ln {
margin-right: 0.0em !important;
padding: 0 0.0em 0 0.0em !important;
}
/* GenericDeleted */
.chroma .gd {
color: #8b080b !important;
}
/* GenericInserted */
.chroma .gi {
font-weight: bold !important;
}
.lntd:first-of-type > .chroma {
padding-right: 0 !important;
}
.chroma code {
font-family: var(--font-mono) !important;
font-size: 0.85em !important;
line-height: 2em !important;
background: none !important;
padding: 0 !important;
}
.chroma {
border-radius: 3px !important;
margin: 0 !important;
}
pre.chroma {
-moz-tab-size:4;-o-tab-size:4;tab-size:4;
}
.katex {
font-size: 1.1em !important;
}

15
assets/search-data.json Normal file

@ -0,0 +1,15 @@
[
{{- $pages := where .Site.Pages "Kind" "in" (slice "page" "section") -}}
{{- $pages = where $pages "Params.booksearchexclude" "!=" true -}}
{{- $pages = where $pages "Content" "not in" (slice nil "") -}}
{{ range $index, $page := $pages }}
{{ if gt $index 0}},{{end}} {
"id": {{ $index }},
"href": "{{ $page.RelPermalink }}",
"title": {{ (partial "docs/title" $page) | jsonify }},
"section": {{ (partial "docs/title" $page.Parent) | jsonify }},
"content": {{ $page.Plain | jsonify }}
}
{{- end -}}
]

104
assets/search.js Normal file

@ -0,0 +1,104 @@
'use strict';
{{ $searchDataFile := printf "%s.search-data.json" .Language.Lang }}
{{ $searchData := resources.Get "search-data.json" | resources.ExecuteAsTemplate $searchDataFile . | resources.Minify | resources.Fingerprint }}
{{ $searchConfig := i18n "bookSearchConfig" | default "{}" }}
(function () {
const searchDataURL = '{{ $searchData.RelPermalink }}';
const indexConfig = Object.assign({{ $searchConfig }}, {
doc: {
id: 'id',
field: ['title', 'content'],
store: ['title', 'href', 'section']
}
});
const input = document.querySelector('#book-search-input');
const results = document.querySelector('#book-search-results');
if (!input) {
return
}
input.addEventListener('focus', init);
input.addEventListener('keyup', search);
document.addEventListener('keypress', focusSearchFieldOnKeyPress);
/**
* @param {Event} event
*/
function focusSearchFieldOnKeyPress(event) {
if (event.target.value !== undefined) {
return;
}
if (input === document.activeElement) {
return;
}
const characterPressed = String.fromCharCode(event.charCode);
if (!isHotkey(characterPressed)) {
return;
}
input.focus();
event.preventDefault();
}
/**
* @param {String} character
* @returns {Boolean}
*/
function isHotkey(character) {
const dataHotkeys = input.getAttribute('data-hotkeys') || '';
return dataHotkeys.indexOf(character) >= 0;
}
function init() {
input.removeEventListener('focus', init); // init once
input.required = true;
fetch(searchDataURL)
.then(pages => pages.json())
.then(pages => {
window.bookSearchIndex = FlexSearch.create('balance', indexConfig);
window.bookSearchIndex.add(pages);
})
.then(() => input.required = false)
.then(search);
}
function search() {
while (results.firstChild) {
results.removeChild(results.firstChild);
}
if (!input.value) {
return;
}
const searchHits = window.bookSearchIndex.search(input.value, 10);
searchHits.forEach(function (page) {
const li = element('<li><a href></a><small></small></li>');
const a = li.querySelector('a'), small = li.querySelector('small');
a.href = page.href;
a.textContent = page.title;
small.textContent = page.section;
results.appendChild(li);
});
}
/**
* @param {String} content
* @returns {Node}
*/
function element(content) {
const div = document.createElement('div');
div.innerHTML = content;
return div.firstChild;
}
})();

7
assets/sw-register.js Normal file

@ -0,0 +1,7 @@
{{- $swJS := resources.Get "sw.js" | resources.ExecuteAsTemplate "sw.js" . -}}
if (navigator.serviceWorker) {
navigator.serviceWorker.register(
"{{ $swJS.RelPermalink }}",
{ scope: "{{ "/" | relURL }}" }
);
}

55
assets/sw.js Normal file

@ -0,0 +1,55 @@
const cacheName = self.location.pathname
const pages = [
{{ if eq .Site.Params.BookServiceWorker "precache" }}
{{ range .Site.AllPages -}}
"{{ .RelPermalink }}",
{{ end -}}
{{ end }}
];
self.addEventListener("install", function (event) {
self.skipWaiting();
caches.open(cacheName).then((cache) => {
return cache.addAll(pages);
});
});
self.addEventListener("fetch", (event) => {
const request = event.request;
if (request.method !== "GET") {
return;
}
/**
* @param {Response} response
* @returns {Promise<Response>}
*/
function saveToCache(response) {
if (cacheable(response)) {
return caches
.open(cacheName)
.then((cache) => cache.put(request, response.clone()))
.then(() => response);
} else {
return response;
}
}
/**
* @param {Error} error
*/
function serveFromCache(error) {
return caches.open(cacheName).then((cache) => cache.match(request.url));
}
/**
* @param {Response} response
* @returns {Boolean}
*/
function cacheable(response) {
return response.type === "basic" && response.ok && !response.headers.has("Content-Disposition")
}
event.respondWith(fetch(request).then(saveToCache).catch(serveFromCache));
});

158
config.yaml Normal file

@ -0,0 +1,158 @@
# hugo server --minify --themesDir ... --baseURL=http://0.0.0.0:1313/theme/hugo-book/
baseURL: https://tablet.sh/
#
# Book configuration
disablePathToLower: false
enableGitInfo: true
# # Needed for mermaid/katex shortcodes
markup:
goldmark:
renderer:
unsafe: true
tableOfContents:
startLevel: 1
# Multi-lingual mode config
# There are different options to translate files
# See https://gohugo.io/content-management/multilingual/#translation-by-filename
# And https://gohugo.io/content-management/multilingual/#translation-by-content-directory
# Sidebar menu additional links
menu:
# before:
# - name: "Sample"
# url: "https://google.com"
# weight: 10
# after:
# - name: "instagram"
# url: "https://instagram.com/i.am.the.tablet"
# weight: 10
ignoreFiles: [
"/content/templates/*"
]
taxonomies:
tag: "tags"
series: "series"
params:
name: The Tablet ❀ GamerGirlandCo (Corinthe)
title: tablet's place. 🌸
# OPTIONAL: custom favicon location
favicon: '/static/favicon.svg'
# whether to display on-hover link preview cards
enableLinkPreview: true
# Enable rendering of LaTeX blocks
# (surrounded by either single or double dollar signs)
enableLatex: true
# whether to render titles for code blocks
enableCodeBlockTitle: true
# whether to render copy buttons for code blocks
enableCodeBlockCopy: true
# whether to render callouts
enableCallouts: true
# Show footer, including backlinks and graph view
enableFooter: false
# whether backlinks of pages should show the context in which
# they were mentioned
enableContextualBacklinks: true
# whether to show a section of recent notes on the home page
enableRecentNotes: false
# whether to display an 'edit' button next to the last edited field
# that links to github
enableGitHubEdit: true
# whether to render mermaid diagrams
enableMermaid: true
# Link to your Github repo
GitHubLink: https://git.tablet.sh/tablet/amethyst
# Search (WIP)
search:
enableSemanticSearch: false
operandApiKey: "REPLACE-WITH-YOUR-OPERAND-API-KEY"
operandIndexId: "REPLACE-WITH-YOUR-OPERAND-INDEX-ID"
# Site description and title
description: |
Art, Metal, Code, and Creativity.
hosted by Tablet !
# Footer links
links:
- link_name: instagram
link: https://instagram.com/i.am.the.tablet
- link_name: say hi
link: mailto:i.am.the.tablet@proton.me
- link_name: and remember to stick it to Brian Tatler!
link: https://git.tablet.sh/the-btfash-foundation
# (Optional, default true) Controls table of contents visibility on right side of pages.
# Start and end levels can be controlled with markup.tableOfContents setting.
# You can also specify this parameter per page in front matter.
BookToC: true
# (Optional, default none) Set the path to a logo for the book. If the logo is
# /static/logo.png then the path would be logo.png
# BookLogo: /logo.png
# (Optional, default none) Set leaf bundle to render as side menu
# When not specified file structure and weights will be used
# BookMenuBundle: /menu
# (Optional, default docs) Specify root page to render child pages as menu.
# Page is resoled by .GetPage function: https://gohugo.io/functions/getpage/
# For backward compatibility you can set '*' to render all sections to menu. Acts same as '/'
BookSection: "/"
# Set source repository location.
# Used for 'Last Modified' and 'Edit this page' links.
BookRepo: https://git.tablet.sh/the-btfash-foundation/tablet.sh
# (Optional, default 'commit') Specifies commit portion of the link to the page's last modified
# commit hash for 'doc' page type.
# Requires 'BookRepo' param.
# Value used to construct a URL consisting of BookRepo/BookCommitPath/<commit-hash>
# Github uses 'commit', Bitbucket uses 'commits'
# BookCommitPath: commit
# Enable "Edit this page" links for 'doc' page type.
# Disabled by default. Uncomment to enable. Requires 'BookRepo' param.
# Edit path must point to root directory of repo.
#BookEditPath: edit/main/exampleSite
# Configure the date format used on the pages
# - In git information
# - In blog posts
BookDateFormat: "Monday, 2 January 2006 @ 3:04:05PM"
# (Optional, default true) Enables comments template on pages
# By default partals/docs/comments.html includes Disqus template
# See https://gohugo.io/content-management/comments/#configure-disqus
# Can be overwritten by same param in page frontmatter
BookComments: true
# /!\ This is an experimental feature, might be removed or changed at any time
# (Optional, experimental, default false) Enables a drop-down menu for translations only if a translation is present.
BookTranslatedOnly: false
# Don't change this
enableSPA: false
BookSearch: false
BookServiceWorker: false
BookPortableLinks: false

1
content Submodule

@ -0,0 +1 @@
Subproject commit 6c8e433cb354daf893e78ce60dde7496c3cac5d1

38
data/graphConfig.yaml Normal file

@ -0,0 +1,38 @@
# if true, a Global Graph will be shown on home page with full width, no backlink.
# A different set of Local Graphs will be shown on sub pages.
# if false, Local Graph will be default on every page as usual
enableGlobalGraph: true
### Local Graph ###
localGraph:
enableLegend: false
enableDrag: true
enableZoom: true
depth: 1 # set to -1 to show full graph
scale: 1.2
repelForce: 2
centerForce: 1
linkDistance: 1
fontSize: 0.6
opacityScale: 3
### Global Graph ###
globalGraph:
enableLegend: false
enableDrag: true
enableZoom: true
depth: -1 # set to -1 to show full graph
scale: 1.4
repelForce: 1
centerForce: 1
linkDistance: 1
fontSize: 0.5
opacityScale: 3
### For all graphs ###
paths:
- /moc: "#00e7e3"

3
go.mod Normal file

@ -0,0 +1,3 @@
module github.com/64bitpandas/amethyst
go 1.16

14
i18n/am.yaml Normal file

@ -0,0 +1,14 @@
- id: Search
translation: ፈልግ
- id: Edit this page
translation: ይህንን ገጽ አስተካክል
- id: Last modified by
translation: መጨረሻ የከለሰው ሰው
- id: Expand
translation: አስፋ
- id: bookSearchConfig
translation: '{ cache: true }'

14
i18n/bn.yaml Normal file

@ -0,0 +1,14 @@
- id: Search
translation: অনুসন্ধান
- id: Edit this page
translation: এই পৃষ্ঠাটি সম্পাদনা করুন
- id: Last modified by
translation: সর্বশেষ সম্পাদনা করেছেন
- id: Expand
translation: বিস্তৃত করা
- id: bookSearchConfig
translation: '{ cache: true }'

21
i18n/cn.yaml Normal file

@ -0,0 +1,21 @@
# This should be removed in future, 'cn' is moved to `zh'
- id: Search
translation: 搜索
- id: Edit this page
translation: 编辑本页
- id: Last modified by
translation: 最后修改者
- id: Expand
translation: 展开
- id: bookSearchConfig
translation: |
{
encode: false,
tokenize: function(str) {
return str.replace(/[\x00-\x7F]/g, '').split('');
}
}

14
i18n/cs.yaml Normal file

@ -0,0 +1,14 @@
- id: Search
translation: Vyhledávat
- id: Edit this page
translation: Upravit tuto stránku
- id: Last modified by
translation: Autor poslední změny
- id: Expand
translation: Rozbalit
- id: bookSearchConfig
translation: '{ cache: true }'

14
i18n/de.yaml Normal file

@ -0,0 +1,14 @@
- id: Search
translation: Suche
- id: Edit this page
translation: Seite bearbeiten
- id: Last modified by
translation: Zuletzt geändert von
- id: Expand
translation: Erweitern
- id: bookSearchConfig
translation: '{ cache: true }'

80
i18n/en.yaml Normal file

@ -0,0 +1,80 @@
- id: Search
translation: Search
- id: Edit this page
translation: Edit this page
- id: Last modified by
translation: Last modified by
- id: Expand
translation: Expand
- id: bookSearchConfig
translation: '{ cache: true }'
- id: 404_message
translation: "Hey! You look a little lost. This page doesn't exist (or may be private)."
- id: 404_back
translation: "↳ Let's get you home."
- id: all_posts
translation: "All {{.Title}}"
- id: last_updated
translation: "Last updated"
- id: notes_count
translation: "notes with this tag"
- id: first_10
translation: "showing first 10 results"
- id: tag
translation: "Tag"
- id: backlinks
translation: "Backlinks"
- id: no_backlinks
translation: "No backlinks found"
- id: home
translation: "Home"
- id: light_mode
translation: "Light Mode"
- id: dark_mode
translation: "Dark Mode"
- id: edit_source
translation: "Edit Source"
- id: interactive_graph
translation: "Interactive Graph"
- id: search
translation: "Search"
- id: search_icon
translation: "Search Icon"
- id: icon_search
translation: "Icon to open search"
- id: recent_notes
translation: "Recent Notes"
- id: first_3_notes
translation: "first 3 {{ .notes }}"
- id: search_for_something
translation: "Search for something..."
- id: toc
translation: "Table of Contents"
- id: copyright
translation: "Made with <a href=\"https://github.com/64bitpandas/amethyst\">Amethyst</a>, © {{ .year }} {{ .name }}"

14
i18n/es.yaml Normal file

@ -0,0 +1,14 @@
- id: Search
translation: Buscar
- id: Edit this page
translation: Editar esta página
- id: Last modified by
translation: Última modificación por
- id: Expand
translation: Expand
- id: bookSearchConfig
translation: '{ cache: true }'

20
i18n/fa.yaml Normal file

@ -0,0 +1,20 @@
- id: Search
translation: جستجو
- id: Edit this page
translation: این صفحه را ویرایش کنید
- id: Last modified by
translation: آخرین بار ویرایش شده توسط
- id: Expand
translation: بسط دادن
- id: Categories
translation: دسته بندی ها
- id: Tags
translation: تگ ها
- id: bookSearchConfig
translation: '{ cache: true, encode: false, rtl: true, split: /\s+/, tokenize: "forward"}'

14
i18n/fr.yaml Normal file

@ -0,0 +1,14 @@
- id: Search
translation: Rechercher
- id: Edit this page
translation: Modifier cette page
- id: Last modified by
translation: Dernière modification par
- id: Expand
translation: Développer
- id: bookSearchConfig
translation: '{ cache: true }'

14
i18n/it.yaml Normal file

@ -0,0 +1,14 @@
- id: Search
translation: Cerca
- id: Edit this page
translation: Modifica questa pagina
- id: Last modified by
translation: Ultima modifica di
- id: Expand
translation: Espandi
- id: bookSearchConfig
translation: '{ cache: true }'

20
i18n/ja.yaml Normal file

@ -0,0 +1,20 @@
- id: Search
translation: 検索
- id: Edit this page
translation: このページを編集する
- id: Last modified by
translation: 最終更新者
- id: Expand
translation: 展開
- id: bookSearchConfig
translation: |
{
encode: false,
tokenize: function(str) {
return str.replace(/[\x00-\x7F]/g, '').split('');
}
}

21
i18n/jp.yaml Normal file

@ -0,0 +1,21 @@
# This should be removed in future, 'jp' is moved to `ja'
- id: Search
translation: 検索
- id: Edit this page
translation: このページを編集する
- id: Last modified by
translation: 最終更新者
- id: Expand
translation: 展開
- id: bookSearchConfig
translation: |
{
encode: false,
tokenize: function(str) {
return str.replace(/[\x00-\x7F]/g, '').split('');
}
}

20
i18n/ko.yaml Normal file

@ -0,0 +1,20 @@
- id: Search
translation: Search
- id: Edit this page
translation: Edit this page
- id: Last modified by
translation: Last modified by
- id: Expand
translation: Expand
- id: bookSearchConfig
translation: |
{
encode: false,
tokenize: function(str) {
return str.replace(/[\x00-\x7F]/g, '').split('');
}
}

14
i18n/nb.yaml Normal file

@ -0,0 +1,14 @@
- id: Search
translation: Søk
- id: Edit this page
translation: Rediger denne siden
- id: Last modified by
translation: Sist endret av
- id: Expand
translation: Utvid
- id: bookSearchConfig
translation: '{ cache: true }'

14
i18n/pt.yaml Normal file

@ -0,0 +1,14 @@
- id: Search
translation: Buscar
- id: Edit this page
translation: Editar página
- id: Last modified by
translation: Última modificação por
- id: Expand
translation: Expandir
- id: bookSearchConfig
translation: '{ cache: true }'

14
i18n/ru.yaml Normal file

@ -0,0 +1,14 @@
- id: Search
translation: Поиск
- id: Edit this page
translation: Редактировать эту страницу
- id: Last modified by
translation: Последнее изменение от
- id: Expand
translation: Развернуть
- id: bookSearchConfig
translation: '{ split: /[^a-zа-яё0-9\w]/gi }'

14
i18n/sv.yaml Normal file

@ -0,0 +1,14 @@
- id: Search
translation: Sök
- id: Edit this page
translation: Redigera denna sida
- id: Last modified by
translation: Senast modifierad av
- id: Expand
translation: Expandera
- id: bookSearchConfig
translation: '{ cache: true }'

Some files were not shown because too many files have changed in this diff Show More