diff --git a/README.md b/README.md
index 8e85c5cc..f6a19716 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@ site (served as static files).
- [Python 3.9][python39] (For parity with Debian GNU/Linux 11 [bullseye])
- [Django 3.2][django32]
-Both versions are specified in the [`Pipfile`](Pipefile).
+Both versions are specified in the [`Pipfile`](Pipfile).
[python39]: https://docs.python.org/3.9/
[django32]: https://docs.djangoproject.com/en/3.2/
@@ -207,6 +207,12 @@ Best run before every commit:
- `./dev/coverage.sh` - Run coverage tests and report
- `./dev/tools.sh` - Run Python code tools (isort, black, flake8)
+Run as needed:
+- `./dev/copy_theme.sh` - Copy the portions of
+ [creativecommons/vocabulary-theme][vocab-theme] needed for local development
+ - Run after each new release of
+ [creativecommons/vocabulary-theme][vocab-theme]
+
Esoteric and dangerous:
- `./dev/concatenatemessages.sh` - Concatenate legacy ccEngine translations
into cc-legal-tools-app
@@ -216,6 +222,8 @@ Esoteric and dangerous:
- `./dev/updatemessages.sh` - Run Django Management nofuzzy_makemessages with
helpful options (including excluding legalcode) and compilemessages
+[vocab-theme]: https://github.com/creativecommons/vocabulary-theme
+
#### Coverage Tests and Report
@@ -520,7 +528,7 @@ the full path to that deploy key file.
[lxml]: https://lxml.de/
-## License
+## Licenses
### Code
@@ -542,3 +550,72 @@ Dedication][cc-zero].
[cc-zero-png]: https://licensebuttons.net/l/zero/1.0/88x31.png "CC0 1.0 Universal (CC0 1.0) Public Domain Dedication button"
[cc-zero]: https://creativecommons.org/publicdomain/zero/1.0/
+
+
+### vocabulary-theme
+
+[![CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
+button][cc-zero-png]][cc-zero]
+
+[`COPYING`](COPYING): All the code within Vocabulary is dedicated to
+the public domain under the [CC0 1.0 Universal (CC0 1.0) Public Domain
+Dedication][cc-zero].
+
+[cc-zero-png]: https://licensebuttons.net/l/zero/1.0/88x31.png "CC0 1.0 Universal (CC0 1.0) Public Domain Dedication button"
+[cc-zero]: https://creativecommons.org/publicdomain/zero/1.0/ "Creative Commons — CC0 1.0 Universal"
+
+
+#### Normalize.css
+
+normalize.css is licensed under the Expat/[MIT][mit] License.
+
+[mit]: https://opensource.org/license/mit/
+
+
+#### Fonts
+
+
+##### Accidenz Commons
+
+[Accidenz Commons][accidenzcommons] by Archetypo is licensed under the [Creative
+Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
+License][ccbysa40].
+
+[accidenzcommons]: https://creativecommons.org/2019/10/28/accidenz-commons-open-licensed-font/
+[ccbysa40]: https://creativecommons.org/licenses/by-sa/4.0/
+
+
+##### JetBrains Mono
+
+[JetBrains Mono][jetbrainsmono] is licensed under the [OFL-1.1 License][ofl].
+
+[jetbrainsmono]: https://www.jetbrains.com/lp/mono/
+[ofl]: https://github.com/JetBrains/JetBrainsMono/blob/master/OFL.txt
+
+
+##### Roboto Condensed
+
+[Roboto Condensed][robotocondensed] by Christian Robertson is licensed under
+the [Apache License, Version 2.0][apache20].
+
+[robotocondensed]: https://fonts.google.com/specimen/Roboto+Condensed
+[apache20]: http://www.apache.org/licenses/LICENSE-2.0
+
+
+##### Source Sans Pro
+
+[Source Sans Pro][sourcesanspro] by Paul D. Hunt is licensed under the [Open
+Font License][oflsil].
+
+[sourcesanspro]: https://fonts.adobe.com/fonts/source-sans
+[oflsil]: https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL
+
+
+##### Vocabulary Icons
+
+Vocabulary Icons use icons from [Font Awesome][fontawesome] which are licensed
+under the [Creative Commons Attribution 4.0 International (CC BY 4.0)
+License][ccbysa40].
+
+[fontawesome]: https://fontawesome.com/
+[ccby40]: https://creativecommons.org/licenses/by/4.0/
diff --git a/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-by.svg b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-by.svg
new file mode 100644
index 00000000..9a0b2180
--- /dev/null
+++ b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-by.svg
@@ -0,0 +1 @@
+
diff --git a/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-heart-filled.svg b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-heart-filled.svg
new file mode 100644
index 00000000..80cd7c8c
--- /dev/null
+++ b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-heart-filled.svg
@@ -0,0 +1 @@
+
diff --git a/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-heart.svg b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-heart.svg
new file mode 100644
index 00000000..d43e65f2
--- /dev/null
+++ b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-heart.svg
@@ -0,0 +1 @@
+
diff --git a/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-icons.svg b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-icons.svg
new file mode 100644
index 00000000..f3d4c512
--- /dev/null
+++ b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-icons.svg
@@ -0,0 +1,80 @@
+
+
diff --git a/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-logo.svg b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-logo.svg
new file mode 100644
index 00000000..8b464cf8
--- /dev/null
+++ b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-logo.svg
@@ -0,0 +1 @@
+
diff --git a/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-nc-eu.svg b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-nc-eu.svg
new file mode 100644
index 00000000..42e4c711
--- /dev/null
+++ b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-nc-eu.svg
@@ -0,0 +1 @@
+
diff --git a/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-nc-jp.svg b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-nc-jp.svg
new file mode 100644
index 00000000..73ba20c0
--- /dev/null
+++ b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-nc-jp.svg
@@ -0,0 +1 @@
+
diff --git a/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-nc.svg b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-nc.svg
new file mode 100644
index 00000000..cac5b004
--- /dev/null
+++ b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-nc.svg
@@ -0,0 +1 @@
+
diff --git a/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-nd.svg b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-nd.svg
new file mode 100644
index 00000000..d6bff7f3
--- /dev/null
+++ b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-nd.svg
@@ -0,0 +1 @@
+
diff --git a/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-pd.svg b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-pd.svg
new file mode 100644
index 00000000..69f9aa81
--- /dev/null
+++ b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-pd.svg
@@ -0,0 +1 @@
+
diff --git a/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-pdm.svg b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-pdm.svg
new file mode 100644
index 00000000..3ba019de
--- /dev/null
+++ b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-pdm.svg
@@ -0,0 +1 @@
+
diff --git a/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-remix.svg b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-remix.svg
new file mode 100644
index 00000000..a2e35118
--- /dev/null
+++ b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-remix.svg
@@ -0,0 +1 @@
+
diff --git a/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-sa.svg b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-sa.svg
new file mode 100644
index 00000000..dec58210
--- /dev/null
+++ b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-sa.svg
@@ -0,0 +1 @@
+
diff --git a/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-sampling-plus.svg b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-sampling-plus.svg
new file mode 100644
index 00000000..ef29be7e
--- /dev/null
+++ b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-sampling-plus.svg
@@ -0,0 +1 @@
+
diff --git a/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-sampling.svg b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-sampling.svg
new file mode 100644
index 00000000..2c475a68
--- /dev/null
+++ b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-sampling.svg
@@ -0,0 +1 @@
+
diff --git a/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-share.svg b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-share.svg
new file mode 100644
index 00000000..172058c8
--- /dev/null
+++ b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-share.svg
@@ -0,0 +1 @@
+
diff --git a/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-zero.svg b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-zero.svg
new file mode 100644
index 00000000..adb10ce3
--- /dev/null
+++ b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/cc/icons/cc-zero.svg
@@ -0,0 +1 @@
+
diff --git a/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/font-awesome/icons/fa-icons.svg b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/font-awesome/icons/fa-icons.svg
new file mode 100644
index 00000000..4ac151d1
--- /dev/null
+++ b/cc_legal_tools/static/wp-content/themes/vocabulary-theme/vocabulary/svg/font-awesome/icons/fa-icons.svg
@@ -0,0 +1,99 @@
+
+