commit ea2c36de15d54f9ac00ea6b9e0c8472e9af474b0 Author: TakeV Date: Wed Apr 13 20:26:06 2022 -0700 Initial commit diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..52815ed --- /dev/null +++ b/.env.production @@ -0,0 +1 @@ +# Stub. This will be overwritten as part of the install process. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e474003 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +tags diff --git a/assets/recycling-disabled-web.svg b/assets/recycling-disabled-web.svg new file mode 100644 index 0000000..81c07d6 --- /dev/null +++ b/assets/recycling-disabled-web.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/assets/recycling-disabled.svg b/assets/recycling-disabled.svg new file mode 100644 index 0000000..67c16c4 --- /dev/null +++ b/assets/recycling-disabled.svg @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + diff --git a/assets/recycling-web.svg b/assets/recycling-web.svg new file mode 100644 index 0000000..3b28563 --- /dev/null +++ b/assets/recycling-web.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/assets/recycling.svg b/assets/recycling.svg new file mode 100644 index 0000000..547d1ca --- /dev/null +++ b/assets/recycling.svg @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + diff --git a/assets/solarpanel-bg.svg b/assets/solarpanel-bg.svg new file mode 100644 index 0000000..df3558d --- /dev/null +++ b/assets/solarpanel-bg.svg @@ -0,0 +1,485 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/solarpanel-web-bg.svg b/assets/solarpanel-web-bg.svg new file mode 100644 index 0000000..b3972b3 --- /dev/null +++ b/assets/solarpanel-web-bg.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/solarpanel-web.svg b/assets/solarpanel-web.svg new file mode 100644 index 0000000..32eb1c6 --- /dev/null +++ b/assets/solarpanel-web.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/assets/solarpunksun-i.svg b/assets/solarpunksun-i.svg new file mode 100644 index 0000000..300d4b6 --- /dev/null +++ b/assets/solarpunksun-i.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + diff --git a/assets/solarpunksun-mono-web.svg b/assets/solarpunksun-mono-web.svg new file mode 100644 index 0000000..b713920 --- /dev/null +++ b/assets/solarpunksun-mono-web.svg @@ -0,0 +1 @@ + diff --git a/assets/solarpunksun-muted.svg b/assets/solarpunksun-muted.svg new file mode 100644 index 0000000..f8b3a52 --- /dev/null +++ b/assets/solarpunksun-muted.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + diff --git a/assets/solarpunksun-web.svg b/assets/solarpunksun-web.svg new file mode 100644 index 0000000..6fd47d2 --- /dev/null +++ b/assets/solarpunksun-web.svg @@ -0,0 +1 @@ + diff --git a/custom.css b/custom.css new file mode 100644 index 0000000..ed521d2 --- /dev/null +++ b/custom.css @@ -0,0 +1,441 @@ +body { + background: #090501; + color: #E4FEFF; +} + +body.layout-single-column, +body > .public-layout { + background: #0e1424 url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSBDcmVhdGVkIHdpdGggSW5rc2NhcGUgKGh0dHA6Ly93d3cuaW5rc2NhcGUub3JnLykgLS0+Cjxzdmcgd2lkdGg9IjM5MS45MW1tIiBoZWlnaHQ9IjYyLjE4NW1tIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzOTEuOTEgNjIuMTg1IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogPGRlZnM+CiAgPGNsaXBQYXRoIGlkPSJjbGlwUGF0aDE0NTgiPgogICA8ZyBkaXNwbGF5PSJub25lIj4KICAgIDxyZWN0IHg9IjIwLjUxNSIgeT0iNjUuNjE3IiB3aWR0aD0iMy45MTQiIGhlaWdodD0iNzMuOTE1IiBkPSJtIDIwLjUxNDc3Miw2NS42MTcwMiBoIDMuOTE0MDQgdiA3My45MTU0NyBoIC0zLjkxNDA0IHoiIHN0cm9rZS13aWR0aD0iNy41MjMyIi8+CiAgICA8cmVjdCB4PSI2MC40MDgiIHk9IjY1LjYxNyIgd2lkdGg9IjMuOTE0IiBoZWlnaHQ9IjczLjkxNSIgZD0ibSA2MC40MDgwNTgsNjUuNjE3MDIgaCAzLjkxNDA0IHYgNzMuOTE1NDcgaCAtMy45MTQwNCB6IiBzdHJva2Utd2lkdGg9IjcuNTIzMiIvPgogICAgPHJlY3QgeD0iMzMuODEzIiB5PSI2NS42MTciIHdpZHRoPSIzLjkxNCIgaGVpZ2h0PSI3My45MTUiIGQ9Im0gMzMuODEyNTM0LDY1LjYxNzAyIGggMy45MTQwNCB2IDczLjkxNTQ3IGggLTMuOTE0MDQgeiIgc3Ryb2tlLXdpZHRoPSI3LjUyMzIiLz4KICAgIDxyZWN0IHg9IjQ3LjExIiB5PSI2NS42MTciIHdpZHRoPSIzLjkxNCIgaGVpZ2h0PSI3My45MTUiIGQ9Im0gNDcuMTEwMjk4LDY1LjYxNzAyIGggMy45MTQwNCB2IDczLjkxNTQ3IGggLTMuOTE0MDQgeiIgc3Ryb2tlLXdpZHRoPSI3LjUyMzIiLz4KICAgPC9nPgogICA8cGF0aCBjbGFzcz0icG93ZXJjbGlwIiBkPSJtOS43NDA2IDY4LjkwMWg2NS4zNzF2NjYuMTg1aC02NS4zNzF6bTEwLjc3NC0zLjI4NDR2NzMuOTE1aDMuOTE0di03My45MTV6bTM5Ljg5MyAwdjczLjkxNWgzLjkxNHYtNzMuOTE1em0tMjYuNTk2IDB2NzMuOTE1aDMuOTE0di03My45MTV6bTEzLjI5OCAwdjczLjkxNWgzLjkxNHYtNzMuOTE1eiIvPgogIDwvY2xpcFBhdGg+CiAgPGNsaXBQYXRoIGlkPSJjbGlwYXRoX2xwZV9wYXRoLWVmZmVjdDIwNTciPgogICA8ZyBkaXNwbGF5PSJub25lIj4KICAgIDxyZWN0IHg9IjIwLjUxNSIgeT0iNjUuNjE3IiB3aWR0aD0iMy45MTQiIGhlaWdodD0iNzMuOTE1IiBkPSJtIDIwLjUxNDc3Miw2NS42MTcwMiBoIDMuOTE0MDQgdiA3My45MTU0NyBoIC0zLjkxNDA0IHoiIHN0cm9rZS13aWR0aD0iNy41MjMyIi8+CiAgICA8cmVjdCB4PSI2MC40MDgiIHk9IjY1LjYxNyIgd2lkdGg9IjMuOTE0IiBoZWlnaHQ9IjczLjkxNSIgZD0ibSA2MC40MDgwNTgsNjUuNjE3MDIgaCAzLjkxNDA0IHYgNzMuOTE1NDcgaCAtMy45MTQwNCB6IiBzdHJva2Utd2lkdGg9IjcuNTIzMiIvPgogICAgPHJlY3QgeD0iMzMuODEzIiB5PSI2NS42MTciIHdpZHRoPSIzLjkxNCIgaGVpZ2h0PSI3My45MTUiIGQ9Im0gMzMuODEyNTM0LDY1LjYxNzAyIGggMy45MTQwNCB2IDczLjkxNTQ3IGggLTMuOTE0MDQgeiIgc3Ryb2tlLXdpZHRoPSI3LjUyMzIiLz4KICAgIDxyZWN0IHg9IjQ3LjExIiB5PSI2NS42MTciIHdpZHRoPSIzLjkxNCIgaGVpZ2h0PSI3My45MTUiIGQ9Im0gNDcuMTEwMjk4LDY1LjYxNzAyIGggMy45MTQwNCB2IDczLjkxNTQ3IGggLTMuOTE0MDQgeiIgc3Ryb2tlLXdpZHRoPSI3LjUyMzIiLz4KICAgPC9nPgogICA8cGF0aCBjbGFzcz0icG93ZXJjbGlwIiBkPSJtOS43NDA2IDY4LjkwMWg2NS4zNzF2NjYuMTg1aC02NS4zNzF6bTEwLjc3NC0zLjI4NDR2NzMuOTE1aDMuOTE0di03My45MTV6bTM5Ljg5MyAwdjczLjkxNWgzLjkxNHYtNzMuOTE1em0tMjYuNTk2IDB2NzMuOTE1aDMuOTE0di03My45MTV6bTEzLjI5OCAwdjczLjkxNWgzLjkxNHYtNzMuOTE1eiIvPgogIDwvY2xpcFBhdGg+CiAgPGNsaXBQYXRoIGlkPSJjbGlwYXRoX2xwZV9wYXRoLWVmZmVjdDIwNzYiPgogICA8ZyBkaXNwbGF5PSJub25lIj4KICAgIDxyZWN0IHg9IjIwLjUxNSIgeT0iNjUuNjE3IiB3aWR0aD0iMy45MTQiIGhlaWdodD0iNzMuOTE1IiBkPSJtIDIwLjUxNDc3Miw2NS42MTcwMiBoIDMuOTE0MDQgdiA3My45MTU0NyBoIC0zLjkxNDA0IHoiIHN0cm9rZS13aWR0aD0iNy41MjMyIi8+CiAgICA8cmVjdCB4PSI2MC40MDgiIHk9IjY1LjYxNyIgd2lkdGg9IjMuOTE0IiBoZWlnaHQ9IjczLjkxNSIgZD0ibSA2MC40MDgwNTgsNjUuNjE3MDIgaCAzLjkxNDA0IHYgNzMuOTE1NDcgaCAtMy45MTQwNCB6IiBzdHJva2Utd2lkdGg9IjcuNTIzMiIvPgogICAgPHJlY3QgeD0iMzMuODEzIiB5PSI2NS42MTciIHdpZHRoPSIzLjkxNCIgaGVpZ2h0PSI3My45MTUiIGQ9Im0gMzMuODEyNTM0LDY1LjYxNzAyIGggMy45MTQwNCB2IDczLjkxNTQ3IGggLTMuOTE0MDQgeiIgc3Ryb2tlLXdpZHRoPSI3LjUyMzIiLz4KICAgIDxyZWN0IHg9IjQ3LjExIiB5PSI2NS42MTciIHdpZHRoPSIzLjkxNCIgaGVpZ2h0PSI3My45MTUiIGQ9Im0gNDcuMTEwMjk4LDY1LjYxNzAyIGggMy45MTQwNCB2IDczLjkxNTQ3IGggLTMuOTE0MDQgeiIgc3Ryb2tlLXdpZHRoPSI3LjUyMzIiLz4KICAgPC9nPgogICA8cGF0aCBjbGFzcz0icG93ZXJjbGlwIiBkPSJtOS43NDA2IDY4LjkwMWg2NS4zNzF2NjYuMTg1aC02NS4zNzF6bTEwLjc3NC0zLjI4NDR2NzMuOTE1aDMuOTE0di03My45MTV6bTM5Ljg5MyAwdjczLjkxNWgzLjkxNHYtNzMuOTE1em0tMjYuNTk2IDB2NzMuOTE1aDMuOTE0di03My45MTV6bTEzLjI5OCAwdjczLjkxNWgzLjkxNHYtNzMuOTE1eiIvPgogIDwvY2xpcFBhdGg+CiAgPGNsaXBQYXRoIGlkPSJjbGlwYXRoX2xwZV9wYXRoLWVmZmVjdDIwOTUiPgogICA8ZyBkaXNwbGF5PSJub25lIj4KICAgIDxyZWN0IHg9IjIwLjUxNSIgeT0iNjUuNjE3IiB3aWR0aD0iMy45MTQiIGhlaWdodD0iNzMuOTE1IiBkPSJtIDIwLjUxNDc3Miw2NS42MTcwMiBoIDMuOTE0MDQgdiA3My45MTU0NyBoIC0zLjkxNDA0IHoiIHN0cm9rZS13aWR0aD0iNy41MjMyIi8+CiAgICA8cmVjdCB4PSI2MC40MDgiIHk9IjY1LjYxNyIgd2lkdGg9IjMuOTE0IiBoZWlnaHQ9IjczLjkxNSIgZD0ibSA2MC40MDgwNTgsNjUuNjE3MDIgaCAzLjkxNDA0IHYgNzMuOTE1NDcgaCAtMy45MTQwNCB6IiBzdHJva2Utd2lkdGg9IjcuNTIzMiIvPgogICAgPHJlY3QgeD0iMzMuODEzIiB5PSI2NS42MTciIHdpZHRoPSIzLjkxNCIgaGVpZ2h0PSI3My45MTUiIGQ9Im0gMzMuODEyNTM0LDY1LjYxNzAyIGggMy45MTQwNCB2IDczLjkxNTQ3IGggLTMuOTE0MDQgeiIgc3Ryb2tlLXdpZHRoPSI3LjUyMzIiLz4KICAgIDxyZWN0IHg9IjQ3LjExIiB5PSI2NS42MTciIHdpZHRoPSIzLjkxNCIgaGVpZ2h0PSI3My45MTUiIGQ9Im0gNDcuMTEwMjk4LDY1LjYxNzAyIGggMy45MTQwNCB2IDczLjkxNTQ3IGggLTMuOTE0MDQgeiIgc3Ryb2tlLXdpZHRoPSI3LjUyMzIiLz4KICAgPC9nPgogICA8cGF0aCBjbGFzcz0icG93ZXJjbGlwIiBkPSJtOS43NDA2IDY4LjkwMWg2NS4zNzF2NjYuMTg1aC02NS4zNzF6bTEwLjc3NC0zLjI4NDR2NzMuOTE1aDMuOTE0di03My45MTV6bTM5Ljg5MyAwdjczLjkxNWgzLjkxNHYtNzMuOTE1em0tMjYuNTk2IDB2NzMuOTE1aDMuOTE0di03My45MTV6bTEzLjI5OCAwdjczLjkxNWgzLjkxNHYtNzMuOTE1eiIvPgogIDwvY2xpcFBhdGg+CiAgPGNsaXBQYXRoIGlkPSJjbGlwYXRoX2xwZV9wYXRoLWVmZmVjdDIxMTQiPgogICA8ZyBkaXNwbGF5PSJub25lIj4KICAgIDxyZWN0IHg9IjIwLjUxNSIgeT0iNjUuNjE3IiB3aWR0aD0iMy45MTQiIGhlaWdodD0iNzMuOTE1IiBkPSJtIDIwLjUxNDc3Miw2NS42MTcwMiBoIDMuOTE0MDQgdiA3My45MTU0NyBoIC0zLjkxNDA0IHoiIHN0cm9rZS13aWR0aD0iNy41MjMyIi8+CiAgICA8cmVjdCB4PSI2MC40MDgiIHk9IjY1LjYxNyIgd2lkdGg9IjMuOTE0IiBoZWlnaHQ9IjczLjkxNSIgZD0ibSA2MC40MDgwNTgsNjUuNjE3MDIgaCAzLjkxNDA0IHYgNzMuOTE1NDcgaCAtMy45MTQwNCB6IiBzdHJva2Utd2lkdGg9IjcuNTIzMiIvPgogICAgPHJlY3QgeD0iMzMuODEzIiB5PSI2NS42MTciIHdpZHRoPSIzLjkxNCIgaGVpZ2h0PSI3My45MTUiIGQ9Im0gMzMuODEyNTM0LDY1LjYxNzAyIGggMy45MTQwNCB2IDczLjkxNTQ3IGggLTMuOTE0MDQgeiIgc3Ryb2tlLXdpZHRoPSI3LjUyMzIiLz4KICAgIDxyZWN0IHg9IjQ3LjExIiB5PSI2NS42MTciIHdpZHRoPSIzLjkxNCIgaGVpZ2h0PSI3My45MTUiIGQ9Im0gNDcuMTEwMjk4LDY1LjYxNzAyIGggMy45MTQwNCB2IDczLjkxNTQ3IGggLTMuOTE0MDQgeiIgc3Ryb2tlLXdpZHRoPSI3LjUyMzIiLz4KICAgPC9nPgogICA8cGF0aCBjbGFzcz0icG93ZXJjbGlwIiBkPSJtOS43NDA2IDY4LjkwMWg2NS4zNzF2NjYuMTg1aC02NS4zNzF6bTEwLjc3NC0zLjI4NDR2NzMuOTE1aDMuOTE0di03My45MTV6bTM5Ljg5MyAwdjczLjkxNWgzLjkxNHYtNzMuOTE1em0tMjYuNTk2IDB2NzMuOTE1aDMuOTE0di03My45MTV6bTEzLjI5OCAwdjczLjkxNWgzLjkxNHYtNzMuOTE1eiIvPgogIDwvY2xpcFBhdGg+CiAgPGNsaXBQYXRoIGlkPSJjbGlwYXRoX2xwZV9wYXRoLWVmZmVjdDIxMzMiPgogICA8ZyBkaXNwbGF5PSJub25lIj4KICAgIDxyZWN0IHg9IjIwLjUxNSIgeT0iNjUuNjE3IiB3aWR0aD0iMy45MTQiIGhlaWdodD0iNzMuOTE1IiBkPSJtIDIwLjUxNDc3Miw2NS42MTcwMiBoIDMuOTE0MDQgdiA3My45MTU0NyBoIC0zLjkxNDA0IHoiIHN0cm9rZS13aWR0aD0iNy41MjMyIi8+CiAgICA8cmVjdCB4PSI2MC40MDgiIHk9IjY1LjYxNyIgd2lkdGg9IjMuOTE0IiBoZWlnaHQ9IjczLjkxNSIgZD0ibSA2MC40MDgwNTgsNjUuNjE3MDIgaCAzLjkxNDA0IHYgNzMuOTE1NDcgaCAtMy45MTQwNCB6IiBzdHJva2Utd2lkdGg9IjcuNTIzMiIvPgogICAgPHJlY3QgeD0iMzMuODEzIiB5PSI2NS42MTciIHdpZHRoPSIzLjkxNCIgaGVpZ2h0PSI3My45MTUiIGQ9Im0gMzMuODEyNTM0LDY1LjYxNzAyIGggMy45MTQwNCB2IDczLjkxNTQ3IGggLTMuOTE0MDQgeiIgc3Ryb2tlLXdpZHRoPSI3LjUyMzIiLz4KICAgIDxyZWN0IHg9IjQ3LjExIiB5PSI2NS42MTciIHdpZHRoPSIzLjkxNCIgaGVpZ2h0PSI3My45MTUiIGQ9Im0gNDcuMTEwMjk4LDY1LjYxNzAyIGggMy45MTQwNCB2IDczLjkxNTQ3IGggLTMuOTE0MDQgeiIgc3Ryb2tlLXdpZHRoPSI3LjUyMzIiLz4KICAgPC9nPgogICA8cGF0aCBjbGFzcz0icG93ZXJjbGlwIiBkPSJtOS43NDA2IDY4LjkwMWg2NS4zNzF2NjYuMTg1aC02NS4zNzF6bTEwLjc3NC0zLjI4NDR2NzMuOTE1aDMuOTE0di03My45MTV6bTM5Ljg5MyAwdjczLjkxNWgzLjkxNHYtNzMuOTE1em0tMjYuNTk2IDB2NzMuOTE1aDMuOTE0di03My45MTV6bTEzLjI5OCAwdjczLjkxNWgzLjkxNHYtNzMuOTE1eiIvPgogIDwvY2xpcFBhdGg+CiA8L2RlZnM+CiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNC43NDA2IC03MC45MDEpIiBmaWxsPSIjMDIwMzEyIiBzdHJva2U9IiMwMjAzMTIiIHN0cm9rZS1saW5lam9pbj0iYmV2ZWwiIHN0cm9rZS13aWR0aD0iMTAuMjIyIj4KICA8cGF0aCB4PSIxOS44NTE2NDYiIHk9Ijc5LjAxMjM3NSIgd2lkdGg9IjQ1LjE0ODc1IiBoZWlnaHQ9IjQ1Ljk2MzQ5NyIgZD0ibTE5Ljg1MiA3OS4wMTJoNDUuMTQ5djQ1Ljk2M2gtNDUuMTQ5eiIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMTQ1OCkiIHN0eWxlPSJwYWludC1vcmRlcjpub3JtYWwiLz4KICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2My4zMDgpIiB4PSIxOS44NTE2NDYiIHk9Ijc5LjAxMjM3NSIgd2lkdGg9IjQ1LjE0ODc1IiBoZWlnaHQ9IjQ1Ljk2MzQ5NyIgZD0ibTE5Ljg1MiA3OS4wMTJoNDUuMTQ5djQ1Ljk2M2gtNDUuMTQ5eiIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBhdGhfbHBlX3BhdGgtZWZmZWN0MjA1NykiIHN0eWxlPSJwYWludC1vcmRlcjpub3JtYWwiLz4KICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjYuNjIpIiB4PSIxOS44NTE2NDYiIHk9Ijc5LjAxMjM3NSIgd2lkdGg9IjQ1LjE0ODc1IiBoZWlnaHQ9IjQ1Ljk2MzQ5NyIgZD0ibTE5Ljg1MiA3OS4wMTJoNDUuMTQ5djQ1Ljk2M2gtNDUuMTQ5eiIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBhdGhfbHBlX3BhdGgtZWZmZWN0MjA3NikiIHN0eWxlPSJwYWludC1vcmRlcjpub3JtYWwiLz4KICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxODkuOTIpIiB4PSIxOS44NTE2NDYiIHk9Ijc5LjAxMjM3NSIgd2lkdGg9IjQ1LjE0ODc1IiBoZWlnaHQ9IjQ1Ljk2MzQ5NyIgZD0ibTE5Ljg1MiA3OS4wMTJoNDUuMTQ5djQ1Ljk2M2gtNDUuMTQ5eiIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBhdGhfbHBlX3BhdGgtZWZmZWN0MjA5NSkiIHN0eWxlPSJwYWludC1vcmRlcjpub3JtYWwiLz4KICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNTMuMjMpIiB4PSIxOS44NTE2NDYiIHk9Ijc5LjAxMjM3NSIgd2lkdGg9IjQ1LjE0ODc1IiBoZWlnaHQ9IjQ1Ljk2MzQ5NyIgZD0ibTE5Ljg1MiA3OS4wMTJoNDUuMTQ5djQ1Ljk2M2gtNDUuMTQ5eiIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBhdGhfbHBlX3BhdGgtZWZmZWN0MjExNCkiIHN0eWxlPSJwYWludC1vcmRlcjpub3JtYWwiLz4KICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMTYuNTQpIiB4PSIxOS44NTE2NDYiIHk9Ijc5LjAxMjM3NSIgd2lkdGg9IjQ1LjE0ODc1IiBoZWlnaHQ9IjQ1Ljk2MzQ5NyIgZD0ibTE5Ljg1MiA3OS4wMTJoNDUuMTQ5djQ1Ljk2M2gtNDUuMTQ5eiIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBhdGhfbHBlX3BhdGgtZWZmZWN0MjEzMykiIHN0eWxlPSJwYWludC1vcmRlcjpub3JtYWwiLz4KIDwvZz4KPC9zdmc+Cg=="); + color: #E4FEFF; + background-size: 294px; + background-attachment: fixed; + background-position-x: center; +} + +.scrollable { + scrollbar-width: thin; +} + +.column > .scrollable, +.regeneration-indicator, +.empty-column-indicator, +.error-column, .follow_requests-unlocked_explanation { + background: #182828; +} + +.regeneration-indicator, +.regeneration-indicator__label strong, +.empty-column-indicator, +.error-column, .follow_requests-unlocked_explanation { + color: #829798; +} + +.column-header { + background: #243232; +} + +.reply-indicator__content { + color: #282c37; +} + +.status__content { + color: #E4FEFF; +} + +.column-header__button { + background: #243232; +} + +html { + scrollbar-color: #314b4f #182828; +} + +.muted .status__content, +.muted .status__content a, +.muted .status__content p, +.muted .status__display-name strong { + color: #829798; +} + +.notification__message { + color: #67868a; +} + +.icon-button { + color: #829798; +} + +.notification__relative_time, .status__relative-time, +.status__prepend .status__display-name strong, +.status__display-name { + color: #67868a; +} + +.status__prepend { + color: #67868a; +} + +.reply-indicator__content .status__content__spoiler-link, +.status__content .status__content__spoiler-link { + background: #829798; +} + +.reply-indicator__content .status__content__spoiler-link:hover, +.status__content .status__content__spoiler-link:hover { + background: #9fbabb; +} + +.setting-text { + background: #E4FEFF; +} + +.compose-form .autosuggest-textarea__textarea::placeholder, +.compose-form .spoiler-input__input::placeholder { + color: #344142; + background: #E4FEFF; +} + +.compose-form .compose-form__modifiers, +.compose-form .compose-form__buttons-wrapper { + background: #E4FEFF; +} + +.drawer__inner__mastodon { + background: url('data:image/svg+xml;utf8,') no-repeat bottom/100% auto; +} + +.drawer__inner { + background: #002f46 url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSBDcmVhdGVkIHdpdGggSW5rc2NhcGUgKGh0dHA6Ly93d3cuaW5rc2NhcGUub3JnLykgLS0+Cjxzdmcgd2lkdGg9IjYxLjM3MW1tIiBoZWlnaHQ9IjYyLjE4NW1tIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA2MS4zNzEgNjIuMTg1IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogPGRlZnM+CiAgPGNsaXBQYXRoIGlkPSJjbGlwUGF0aDE0NTgiPgogICA8ZyBkaXNwbGF5PSJub25lIj4KICAgIDxyZWN0IHg9IjIwLjUxNSIgeT0iNjUuNjE3IiB3aWR0aD0iMy45MTQiIGhlaWdodD0iNzMuOTE1IiBkPSJtIDIwLjUxNDc3Miw2NS42MTcwMiBoIDMuOTE0MDQgdiA3My45MTU0NyBoIC0zLjkxNDA0IHoiIHN0cm9rZS13aWR0aD0iNy41MjMyIi8+CiAgICA8cmVjdCB4PSI2MC40MDgiIHk9IjY1LjYxNyIgd2lkdGg9IjMuOTE0IiBoZWlnaHQ9IjczLjkxNSIgZD0ibSA2MC40MDgwNTgsNjUuNjE3MDIgaCAzLjkxNDA0IHYgNzMuOTE1NDcgaCAtMy45MTQwNCB6IiBzdHJva2Utd2lkdGg9IjcuNTIzMiIvPgogICAgPHJlY3QgeD0iMzMuODEzIiB5PSI2NS42MTciIHdpZHRoPSIzLjkxNCIgaGVpZ2h0PSI3My45MTUiIGQ9Im0gMzMuODEyNTM0LDY1LjYxNzAyIGggMy45MTQwNCB2IDczLjkxNTQ3IGggLTMuOTE0MDQgeiIgc3Ryb2tlLXdpZHRoPSI3LjUyMzIiLz4KICAgIDxyZWN0IHg9IjQ3LjExIiB5PSI2NS42MTciIHdpZHRoPSIzLjkxNCIgaGVpZ2h0PSI3My45MTUiIGQ9Im0gNDcuMTEwMjk4LDY1LjYxNzAyIGggMy45MTQwNCB2IDczLjkxNTQ3IGggLTMuOTE0MDQgeiIgc3Ryb2tlLXdpZHRoPSI3LjUyMzIiLz4KICAgPC9nPgogICA8cGF0aCBjbGFzcz0icG93ZXJjbGlwIiBkPSJtOS43NDA2IDY4LjkwMWg2NS4zNzF2NjYuMTg1aC02NS4zNzF6bTEwLjc3NC0zLjI4NDR2NzMuOTE1aDMuOTE0di03My45MTV6bTM5Ljg5MyAwdjczLjkxNWgzLjkxNHYtNzMuOTE1em0tMjYuNTk2IDB2NzMuOTE1aDMuOTE0di03My45MTV6bTEzLjI5OCAwdjczLjkxNWgzLjkxNHYtNzMuOTE1eiIvPgogIDwvY2xpcFBhdGg+CiA8L2RlZnM+CiA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTEuNzQxIC03MC45MDEpIj4KICA8cGF0aCB4PSIxOS44NTE2NDYiIHk9Ijc5LjAxMjM3NSIgd2lkdGg9IjQ1LjE0ODc1IiBoZWlnaHQ9IjQ1Ljk2MzQ5NyIgZD0ibTE5Ljg1MiA3OS4wMTJoNDUuMTQ5djQ1Ljk2M2gtNDUuMTQ5eiIgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMTQ1OCkiIGZpbGw9IiMxZDIzMzUiIHN0cm9rZT0iIzFkMjMzNSIgc3Ryb2tlLWxpbmVqb2luPSJiZXZlbCIgc3Ryb2tlLXdpZHRoPSIxMC4yMjIiIHN0eWxlPSJwYWludC1vcmRlcjpub3JtYWwiLz4KIDwvZz4KPC9zdmc+Cg=='); + background-size: 47.5px; +} + +.search__input, +.drawer__header { + background: #112A35; +} + +.account__section-headline, .notification__filter-bar { + background: #131a1a; + border-bottom: 1px solid #3c5a5e; +} + +.account__section-headline button, .notification__filter-bar button { + background: #131a1a; +} + +.account__display-name strong, .status__display-name strong { + color: #CCC696; +} + +.status__content__read-more-button, +.reply-indicator__content a.unhandled-link, +.status__content a.unhandled-link { + color: #5BCDFF; +} + +.focusable:focus { + background: #253c3c; +} + +.detailed-status { + background: #243232; +} + +a.status-card.compact:hover, +a.status-card:hover { + background: #223939; +} + +.detailed-status__action-bar { + background: #243232; + border-top: 1px solid #394c4f; + border-bottom: 1px solid #3c5a5e; +} + +.focusable:focus .detailed-status, +.focusable:focus .detailed-status__action-bar { + background: #253c3c; +} + +.detailed-status__meta { + color: #67868a; +} + +.status-card { + border: 1px solid #394c4f; + color: #67868a; + background: #253c40; +} + +.detailed-status__display-name strong { + color: #CCC696; +} + +.status { + border-bottom: 1px solid #253c40; +} + +.account { + border-bottom: 1px solid #1b3d42; +} + +.notification__display-name { + color: #CCC696; +} + + +button.icon-button:hover i.fa-retweet, +button.icon-button i.fa-retweet { + background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE1LjAuMiwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHdpZHRoPSIxOC43NzMiIGhlaWdodD0iOTIuMDUyIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA2MjguMjU0IDYxMy41MTYiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDY1Ny4wNyAzMjIxLjgiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xNC43NzcgLTYuMDY2OSkiPgoJPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjkuMTg2IDYuMDY2OSkiIGZpbGw9IiM4Mjk3OTgiPgoJCTxnIGZpbGw9IiM4Mjk3OTgiPgoJCQk8ZyBmaWxsPSIjODI5Nzk4Ij4KCQkJCTxwYXRoIGQ9Im05OS43NzcgNDQ2LjA5Yy02LjY5OSAxMi4wMzEtMTIuMDMxIDMwLjEzMy0xMi4wMzEgNDEuNTM5IDAgMi42NDggMCA2LjAxNiAwLjY1NiAxMC42ODhsLTgzLjcyNi0xNDMuOTljLTIuNjgtNC42NzItNC42NzYtMTEuMzc1LTQuNjc2LTE3LjQxNCAwLTYuMDQ3IDEuOTk2LTEzLjM5OCA0LjY3Ni0xOC4wNzhsNDAuMTk1LTcwLjMyOC00NC44NzEtMjUuNDMgMTQ2LjAyLTIuNzAzIDcwLjk4NCAxMjcuOTEtNDUuNTI3LTI2LjExN3ptNjQuMzEzLTQwNS44NmMxMi43MTUtMjIuMTI1IDMzLjQ5Ni0zNC4xOCA1OC45MjYtMzQuMTggMjcuNDggMCA0OC45MTggMTIuNzQyIDY0LjMxMiAzOC44MjhsMjIuNzc3IDM4LjE3Mi03OS4wNTEgMTM2LjY2LTEyNy45MS03NC4zNTJ6bTkuMzUxIDUyMS43MmMtMzguMTcyIDAtNjkuNjQ1LTMxLjQ3Ny02OS42NDUtNjkuNjQ4IDAtMTAuNzE5IDQuNzAzLTI4LjgyIDExLjQwMi00MC4xOTVsMjEuNDEtMzguMTcyaDE1OC43NnYxNDguMDJoLTEyMS45MnptMTI3LjI5LTUyNS43NmMtMTAuMDM2LTE3LjM5MS0yMy40MzQtMjkuNDc3LTM5LjUxMi0zNi4xOGgxNjQuNzVjMTQuNzM4IDAgMjYuMTEzIDYuMDQ3IDMyLjg0IDE3LjQ0NWw0MC44NTIgNjkuNjQ4IDQ0LjE5MS0yNi4xNDEtNzEuMDE2IDEyNy4yOC0xNDUuMy0yLjA0NyA0NC44NzEtMjUuNDN6bTI1My44NiAzNzkuMDljMjAuMDcgMCAzNi44MzItNS4zNTkgNTAuODg3LTE2LjA1NWwtODMuMDcgMTQ0LjY1Yy02LjY5OSAxMS4zNzUtMTguNzMgMTguMDc4LTMyLjc4OSAxOC4wNzhoLTc4LjM5NXY1MS41N2wtNzUuMDA0LTEyNS4yMyA3NS4wMDQtMTI1LjI3djUyLjI1OGgxNDMuMzd6bTY0LjI1OC0xMjAuNTZjNi4wNDMgMTAuNzE5IDkuNDA2IDIyLjA5NCA5LjQwNiAzNC4xNTYgMCAyNC4xMTctMTUuNDIyIDQ5LjU3LTM2LjgzMiA2MS42MDItMTAuMDYyIDUuMzkxLTI0LjE0NSA4Ljc1LTM4LjE3MiA4Ljc1aC00NC4yNDJsLTc5LTEzNi42NiAxMjcuOTItNzMuMDA4eiIgZmlsbD0iIzgyOTc5OCIvPgoJCQk8L2c+CgkJPC9nPgoJPC9nPjxnIGZpbGw9IiMwMDk3MDAiPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI5LjE4NiAyNjE1LjkpIj48ZyBmaWxsPSIjMDA5NzAwIj48ZyBmaWxsPSIjMDA5NzAwIj48cGF0aCBkPSJtOTkuNzc3IDQ0Ni4wOWMtNi42OTkgMTIuMDMxLTEyLjAzMSAzMC4xMzMtMTIuMDMxIDQxLjUzOSAwIDIuNjQ4IDAgNi4wMTYgMC42NTYgMTAuNjg4bC04My43MjYtMTQzLjk5Yy0yLjY4LTQuNjcyLTQuNjc2LTExLjM3NS00LjY3Ni0xNy40MTQgMC02LjA0NyAxLjk5Ni0xMy4zOTggNC42NzYtMTguMDc4bDk3LjgzMS0xNjcuNC00NC44NzEtMjUuNDMgMTQ2LjAyLTIuNzAzIDcwLjk4NCAxMjcuOTEtNDUuNTI3LTI2LjExN3ptNjQuMzEzLTQwNS44NmMxMi43MTUtMjIuMTI1IDMzLjQ5Ni0zNC4xOCA1OC45MjYtMzQuMTggMjcuNDggMCA0OC45MTggMTIuNzQyIDY0LjMxMiAzOC44MjhsMjIuNzc3IDM4LjE3Mi0yMS40MTUgMzkuNTkzLTEyNy45MS03NC4zNTJ6bTkuMzUxIDUyMS43MmMtMzguMTcyIDAtNjkuNjQ1LTMxLjQ3Ny02OS42NDUtNjkuNjQ4IDAtMTAuNzE5IDQuNzAzLTI4LjgyIDExLjQwMi00MC4xOTVsMjEuNDEtMzguMTcyIDQwLjQ1My0xLjUxNjd2MTQ4LjAybC0zLjYyMDMgMS41MTY3em0xMjcuMjktNTI1Ljc2Yy0xMC4wMzYtMTcuMzkxLTIzLjQzNC0yOS40NzctMzkuNTEyLTM2LjE4aDE2NC43NWMxNC43MzggMCAyNi4xMTMgNi4wNDcgMzIuODQgMTcuNDQ1bDExMC42MiAxODkuNDcgNDQuMTkxLTI2LjE0MS03MS4wMTYgMTI3LjI4LTE0NS4zLTIuMDQ3IDQ0Ljg3MS0yNS40M3ptMjUzLjg2IDM3OS4wOWMyMC4wNyAwIDM2LjgzMi01LjM1OSA1MC44ODctMTYuMDU1bC04My4wNyAxNDQuNjVjLTYuNjk5IDExLjM3NS0xOC43MyAxOC4wNzgtMzIuNzg5IDE4LjA3OGwtMTk2LjctMS41MTY3djUxLjU3bC03NS4wMDQtMTI1LjIzIDc1LjAwNC0xMjUuMjd2NTIuMjU4bDI2MS42NyAxLjUxNjd6bTY0LjI1OC0xMjAuNTZjNi4wNDMgMTAuNzE5IDkuNDA2IDIyLjA5NCA5LjQwNiAzNC4xNTYgMCAyNC4xMTctMTUuNDIyIDQ5LjU3LTM2LjgzMiA2MS42MDItMTAuMDYyIDUuMzkxLTI0LjE0NSA4Ljc1LTM4LjE3MiA4Ljc1aC00NC4yNDJsLTkuMjMwNi0xNi44NDMgMTI3LjkyLTczLjAwOHoiIGZpbGw9IiMwMDk3MDAiLz48L2c+PC9nPjwvZz4KPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjkxLjAxIDU0ODMuOSkiPjxnIGZpbGw9IiMwMDk3MDAiLz48L2c+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDMuNTk1IDEyOTguOSkiPjxnIGZpbGw9IiMwMDk3MDAiPjxnIGZpbGw9IiMwMDk3MDAiPjxwYXRoIGQ9Im05OS43NzcgNDQ2LjA5Yy02LjY5OSAxMi4wMzEtMTIuMDMxIDMwLjEzMy0xMi4wMzEgNDEuNTM5IDAgMi42NDggMCA2LjAxNiAwLjY1NiAxMC42ODhsLTgzLjcyNi0xNDMuOTljLTIuNjgtNC42NzItNC42NzYtMTEuMzc1LTQuNjc2LTE3LjQxNCAwLTYuMDQ3IDEuOTk2LTEzLjM5OCA0LjY3Ni0xOC4wNzhsMTEuMzc3LTE3LjI0My00NC44NzEtMjUuNDMgMTQ2LjAyLTIuNzAzIDcwLjk4NCAxMjcuOTEtNDUuNTI3LTI2LjExN3ptNjQuMzEzLTQwNS44NmMxMi43MTUtMjIuMTI1IDMzLjQ5Ni0zNC4xOCA1OC45MjYtMzQuMTggMjcuNDggMCA0OC45MTggMTIuNzQyIDY0LjMxMiAzOC44MjhsMjIuNzc3IDM4LjE3Mi0xMDcuODcgMTg5Ljc1LTEyNy45MS03NC4zNTJ6bTkuMzUxIDUyMS43MmMtMzguMTcyIDAtNjkuNjQ1LTMxLjQ3Ny02OS42NDUtNjkuNjQ4IDAtMTAuNzE5IDQuNzAzLTI4LjgyIDExLjQwMi00MC4xOTVsMjEuNDEtMzguMTcyaDIxNi4zOXYxNDguMDJoLTE3OS41NnptMTI3LjI5LTUyNS43NmMtMTAuMDM2LTE3LjM5MS0yMy40MzQtMjkuNDc3LTM5LjUxMi0zNi4xOGgxNjQuNzVjMTQuNzM4IDAgMjYuMTEzIDYuMDQ3IDMyLjg0IDE3LjQ0NWwxMy41NTEgMi45MTIgNDQuMTkxLTI2LjE0MS03MS4wMTYgMTI3LjI4LTE0NS4zLTIuMDQ3IDQ0Ljg3MS0yNS40M3ptMjUzLjg2IDM3OS4wOWMyMC4wNyAwIDM2LjgzMi01LjM1OSA1MC44ODctMTYuMDU1bC04My4wNyAxNDQuNjVjLTYuNjk5IDExLjM3NS0xOC43MyAxOC4wNzgtMzIuNzg5IDE4LjA3OGgtMjAuNzU5djUxLjU3bC03NS4wMDQtMTI1LjIzIDc1LjAwNC0xMjUuMjd2NTIuMjU4aDg1LjczMXptNjQuMjU4LTEyMC41NmM2LjA0MyAxMC43MTkgOS40MDYgMjIuMDk0IDkuNDA2IDM0LjE1NiAwIDI0LjExNy0xNS40MjIgNDkuNTctMzYuODMyIDYxLjYwMi0xMC4wNjIgNS4zOTEtMjQuMTQ1IDguNzUtMzguMTcyIDguNzVoLTQ0LjI0MmwtMTE2LjkyLTIxMC45OCAxMjcuOTItNzMuMDA4eiIgZmlsbD0iIzAwOTcwMCIvPjwvZz48L2c+PC9nPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI5LjE4NiAxOTQyLjQpIj48ZyBmaWxsPSIjMDA5NzAwIj48ZyBmaWxsPSIjMDA5NzAwIj48cGF0aCBkPSJtOTkuNzc3IDQ0Ni4wOWMtNi42OTkgMTIuMDMxLTEyLjAzMSAzMC4xMzMtMTIuMDMxIDQxLjUzOSAwIDIuNjQ4IDAgNi4wMTYgMC42NTYgMTAuNjg4bC04My43MjYtMTQzLjk5Yy0yLjY4LTQuNjcyLTQuNjc2LTExLjM3NS00LjY3Ni0xNy40MTQgMC02LjA0NyAxLjk5Ni0xMy4zOTggNC42NzYtMTguMDc4bDQwLjE5NS03MC4zMjgtNDQuODcxLTI1LjQzIDE0Ni4wMi0yLjcwMyA3MC45ODQgMTI3LjkxLTQ1LjUyNy0yNi4xMTd6bTY0LjMxMy00MDUuODZjMTIuNzE1LTIyLjEyNSAzMy40OTYtMzQuMTggNTguOTI2LTM0LjE4IDI3LjQ4IDAgNDguOTE4IDEyLjc0MiA2NC4zMTIgMzguODI4bDIyLjc3NyAzOC4xNzItNzkuMDUxIDEzNi42Ni0xMjcuOTEtNzQuMzUyem05LjM1MSA1MjEuNzJjLTM4LjE3MiAwLTY5LjY0NS0zMS40NzctNjkuNjQ1LTY5LjY0OCAwLTEwLjcxOSA0LjcwMy0yOC44MiAxMS40MDItNDAuMTk1bDIxLjQxLTM4LjE3MmgxNTguNzZ2MTQ4LjAyaC0xMjEuOTJ6bTEyNy4yOS01MjUuNzZjLTEwLjAzNi0xNy4zOTEtMjMuNDM0LTI5LjQ3Ny0zOS41MTItMzYuMThoMTY0Ljc1YzE0LjczOCAwIDI2LjExMyA2LjA0NyAzMi44NCAxNy40NDVsNDAuODUyIDY5LjY0OCA0NC4xOTEtMjYuMTQxLTcxLjAxNiAxMjcuMjgtMTQ1LjMtMi4wNDcgNDQuODcxLTI1LjQzem0yNTMuODYgMzc5LjA5YzIwLjA3IDAgMzYuODMyLTUuMzU5IDUwLjg4Ny0xNi4wNTVsLTgzLjA3IDE0NC42NWMtNi42OTkgMTEuMzc1LTE4LjczIDE4LjA3OC0zMi43ODkgMTguMDc4aC03OC4zOTV2NTEuNTdsLTc1LjAwNC0xMjUuMjMgNzUuMDA0LTEyNS4yN3Y1Mi4yNThoMTQzLjM3em02NC4yNTgtMTIwLjU2YzYuMDQzIDEwLjcxOSA5LjQwNiAyMi4wOTQgOS40MDYgMzQuMTU2IDAgMjQuMTE3LTE1LjQyMiA0OS41Ny0zNi44MzIgNjEuNjAyLTEwLjA2MiA1LjM5MS0yNC4xNDUgOC43NS0zOC4xNzIgOC43NWgtNDQuMjQybC03OS0xMzYuNjYgMTI3LjkyLTczLjAwOHoiIGZpbGw9IiMwMDk3MDAiLz48L2c+PC9nPjwvZz48L2c+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjkuMTg2IDY0OS41OCkiIGZpbGw9IiM4Mjk3OTgiPjxnIGZpbGw9IiM4Mjk3OTgiPjxnIGZpbGw9IiM4Mjk3OTgiPjxwYXRoIGQ9Im05OS43NzcgNDQ2LjA5Yy02LjY5OSAxMi4wMzEtMTIuMDMxIDMwLjEzMy0xMi4wMzEgNDEuNTM5IDAgMi42NDggMCA2LjAxNiAwLjY1NiAxMC42ODhsLTgzLjcyNi0xNDMuOTljLTIuNjgtNC42NzItNC42NzYtMTEuMzc1LTQuNjc2LTE3LjQxNCAwLTYuMDQ3IDEuOTk2LTEzLjM5OCA0LjY3Ni0xOC4wNzhsNzYuNjYtMTM0LjY4LTQ0Ljg3MS0yNS40MyAxNDYuMDItMi43MDMgNzAuOTg0IDEyNy45MS00NS41MjctMjYuMTE3em02NC4zMTMtNDA1Ljg2YzEyLjcxNS0yMi4xMjUgMzMuNDk2LTM0LjE4IDU4LjkyNi0zNC4xOCAyNy40OCAwIDQ4LjkxOCAxMi43NDIgNjQuMzEyIDM4LjgyOGwyMi43NzcgMzguMTcyLTQyLjU4NiA3Mi4zMTUtMTI3LjkxLTc0LjM1MnptOS4zNTEgNTIxLjcyYy0zOC4xNzIgMC02OS42NDUtMzEuNDc3LTY5LjY0NS02OS42NDggMC0xMC43MTkgNC43MDMtMjguODIgMTEuNDAyLTQwLjE5NWwyMS40MS0zOC4xNzJoMTExLjU3djE0OC4wMmgtNzQuNzM2em0xMjcuMjktNTI1Ljc2Yy0xMC4wMzYtMTcuMzkxLTIzLjQzNC0yOS40NzctMzkuNTEyLTM2LjE4aDE2NC43NWMxNC43MzggMCAyNi4xMTMgNi4wNDcgMzIuODQgMTcuNDQ1bDczLjAyNyAxMjkuNzEgNDQuMTkxLTI2LjE0MS03MS4wMTYgMTI3LjI4LTE0NS4zLTIuMDQ3IDQ0Ljg3MS0yNS40M3ptMjUzLjg2IDM3OS4wOWMyMC4wNyAwIDM2LjgzMi01LjM1OSA1MC44ODctMTYuMDU1bC04My4wNyAxNDQuNjVjLTYuNjk5IDExLjM3NS0xOC43MyAxOC4wNzgtMzIuNzg5IDE4LjA3OGgtMTI1LjU4djUxLjU3bC03NS4wMDQtMTI1LjIzIDc1LjAwNC0xMjUuMjd2NTIuMjU4aDE5MC41NnptNjQuMjU4LTEyMC41NmM2LjA0MyAxMC43MTkgOS40MDYgMjIuMDk0IDkuNDA2IDM0LjE1NiAwIDI0LjExNy0xNS40MjIgNDkuNTctMzYuODMyIDYxLjYwMi0xMC4wNjIgNS4zOTEtMjQuMTQ1IDguNzUtMzguMTcyIDguNzVoLTQ0LjI0MmwtNDYuODI1LTc2LjYwNSAxMjcuOTItNzMuMDA4eiIgZmlsbD0iIzAwOTcwMCIvPjwvZz48L2c+PC9nPjwvZz4KPC9zdmc+Cg=="); + width: 18px; + height: 18px; + transition: background-position .9s steps(4); +} + +button.icon-button.disabled:hover i.fa-retweet, +button.icon-button.disabled i.fa-retweet { + background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE1LjAuMiwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHdpZHRoPSIxNy45NSIgaGVpZ2h0PSIxNy41MjkiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDYyOC4yNTQgNjEzLjUxNiIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNjI4LjI1IDYxMy41MSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48bWFzayBpZD0ibWFzazU2MjkiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiPjxyZWN0IHg9Ii0xNTYuNDEiIHk9Ii02Ni4zMyIgd2lkdGg9Ijk0MS43NyIgaGVpZ2h0PSI3OTcuMTciIGZpbGw9IiNmZmYiIHN0cm9rZS13aWR0aD0iMzUiLz48ZyB0cmFuc2Zvcm09Im1hdHJpeCguMzM5MjggLjQ5MDYgLS44MjI0OCAuNTY4OCA1MzMuOTEgLTQwLjg0MykiIGZpbGw9IiM4Mjk3OTgiPjxyZWN0IHg9IjI4NSIgeT0iMTMuMzg3IiB3aWR0aD0iMTA1LjY3IiBoZWlnaHQ9Ijc2Ny41MSIgZmlsbD0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIzNSIvPjwvZz48L21hc2s+PC9kZWZzPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjkuMTg2IC02LjA2NjkpIj4KCTxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI5LjE4NiA2LjA2NjkpIj4KCQk8ZyBmaWxsPSIjODI5Nzk4IiBtYXNrPSJ1cmwoI21hc2s1NjI5KSI+CgkJCTxnIGZpbGw9IiM4Mjk3OTgiIG1hc2s9Im5vbmUiPgoJCQkJPHBhdGggZD0ibTk5Ljc3NyA0NDYuMDljLTYuNjk5IDEyLjAzMS0xMi4wMzEgMzAuMTMzLTEyLjAzMSA0MS41MzkgMCAyLjY0OCAwIDYuMDE2IDAuNjU2IDEwLjY4OGwtODMuNzI2LTE0My45OWMtMi42OC00LjY3Mi00LjY3Ni0xMS4zNzUtNC42NzYtMTcuNDE0IDAtNi4wNDcgMS45OTYtMTMuMzk4IDQuNjc2LTE4LjA3OGw0MC4xOTUtNzAuMzI4LTQ0Ljg3MS0yNS40MyAxNDYuMDItMi43MDMgNzAuOTg0IDEyNy45MS00NS41MjctMjYuMTE3em02NC4zMTMtNDA1Ljg2YzEyLjcxNS0yMi4xMjUgMzMuNDk2LTM0LjE4IDU4LjkyNi0zNC4xOCAyNy40OCAwIDQ4LjkxOCAxMi43NDIgNjQuMzEyIDM4LjgyOGwyMi43NzcgMzguMTcyLTc5LjA1MSAxMzYuNjYtMTI3LjkxLTc0LjM1MnptOS4zNTEgNTIxLjcyYy0zOC4xNzIgMC02OS42NDUtMzEuNDc3LTY5LjY0NS02OS42NDggMC0xMC43MTkgNC43MDMtMjguODIgMTEuNDAyLTQwLjE5NWwyMS40MS0zOC4xNzJoMTU4Ljc2djE0OC4wMmgtMTIxLjkyem0xMjcuMjktNTI1Ljc2Yy0xMC4wMzYtMTcuMzkxLTIzLjQzNC0yOS40NzctMzkuNTEyLTM2LjE4aDE2NC43NWMxNC43MzggMCAyNi4xMTMgNi4wNDcgMzIuODQgMTcuNDQ1bDQwLjg1MiA2OS42NDggNDQuMTkxLTI2LjE0MS03MS4wMTYgMTI3LjI4LTE0NS4zLTIuMDQ3IDQ0Ljg3MS0yNS40M3ptMjUzLjg2IDM3OS4wOWMyMC4wNyAwIDM2LjgzMi01LjM1OSA1MC44ODctMTYuMDU1bC04My4wNyAxNDQuNjVjLTYuNjk5IDExLjM3NS0xOC43MyAxOC4wNzgtMzIuNzg5IDE4LjA3OGgtNzguMzk1djUxLjU3bC03NS4wMDQtMTI1LjIzIDc1LjAwNC0xMjUuMjd2NTIuMjU4aDE0My4zN3ptNjQuMjU4LTEyMC41NmM2LjA0MyAxMC43MTkgOS40MDYgMjIuMDk0IDkuNDA2IDM0LjE1NiAwIDI0LjExNy0xNS40MjIgNDkuNTctMzYuODMyIDYxLjYwMi0xMC4wNjIgNS4zOTEtMjQuMTQ1IDguNzUtMzguMTcyIDguNzVoLTQ0LjI0MmwtNzktMTM2LjY2IDEyNy45Mi03My4wMDh6IiBmaWxsPSIjNTE1ZTVlIi8+CgkJCTwvZz4KCQk8L2c+Cgk8cmVjdCB0cmFuc2Zvcm09Im1hdHJpeCguNTc0ODggLjgxODI0IC0uODE5OTMgLjU3MjQ3IDAgMCkiIHg9IjQwOS4yNCIgeT0iLTUyMS4xNiIgd2lkdGg9IjY2LjU0OSIgaGVpZ2h0PSI4ODIuNCIgcnk9IjYuNjE1NCIgZmlsbD0iIzUxNWU1ZSIgc3Ryb2tlLXdpZHRoPSI0Ni43NzkiLz48L2c+CjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY5MS4wMSA1NDgzLjkpIiBmaWxsPSIjMDA5NzAwIj48ZyBmaWxsPSIjMDA5NzAwIi8+PC9nPjwvZz4KPC9zdmc+Cg=="); +} + +button.icon-button.active i.fa-retweet { + background-position: 50% 100%; +} + +.column-header__back-button { + background: #243232; + color: #E4FEFF; +} + +.drawer__tab { + color: #E4FEFF; +} + +.column-back-button { + background: #253c3c; + color: #E4FEFF; +} + +.account__header__bar { + background: #253c3c; + border-bottom: 1px solid #3c5a5e; +} + +.account__header__bio .account__header__fields { + border-top: 1px solid #1b3d42; +} + +.account__header__account-note, +.account__header__fields dl { + border-bottom: 1px solid #3c5a5e; +} + +.account__header__account-note textarea::placeholder { + color: #67868a; +} + +.account__header__fields { + border-color: #3c5a5e currentcolor; +} + +.account__section-headline a.active::after, +.account__section-headline a.active::before, +.account__section-headline button.active::after, +.account__section-headline button.active::before, +.notification__filter-bar a.active::after, +.notification__filter-bar a.active::before, +.notification__filter-bar button.active::after, +.notification__filter-bar button.active::before, +.account__section-headline a.active::after, +.account__section-headline button.active::after, +.notification__filter-bar a.active::after, +.notification__filter-bar button.active::after { + border-color: transparent transparent #3c5a5e; +} + +.account__header__fields dt { + background: #182828; +} + +.button.logo-button, +.button { + background-color: #D2C55F; + color: #243232; +} + +.button:active, +.button:focus, +.button:hover, +.button.logo-button:active, +.button.logo-button:focus, +.button.logo-button:hover { + background: #FFF5A8; +} + +.account__header__tabs__buttons .icon-button { + border: 1px solid #3c5a5e; +} + +.account__header__image { + background: #112A35; +} + +.account__header__bar .avatar .account__avatar { + border: 2px solid #182828; +} + +.column-header > .column-header__back-button { + color: #E4FEFF; +} + +.account__section-headline a, .account__section-headline button, .notification__filter-bar a, .notification__filter-bar button { + color: #829798; +} + +.dropdown-menu__item a:active, .dropdown-menu__item a:focus, .dropdown-menu__item a:hover { + background: #D2C55F; + color: #243232; +} + +.icon-button.active { + color: #D2C55F; +} + +.media-modal__overlay .picture-in-picture__footer .icon-button.active { + color: #D2C55F; +} + +.media-modal__overlay .picture-in-picture__footer button.icon-button i.fa-retweet { + background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE1LjAuMiwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHdpZHRoPSIxOC43NzMiIGhlaWdodD0iOTIuMDUyIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA2MjguMjU0IDYxMy41MTYiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDY1Ny4wNyAzMjIxLjgiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xNC43NzcgLTYuMDY2OSkiPgoJPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjkuMTg2IDYuMDY2OSkiIGZpbGw9IiM4Mjk3OTgiPgoJCTxnIGZpbGw9IiM4Mjk3OTgiPgoJCQk8ZyBmaWxsPSIjODI5Nzk4Ij4KCQkJCTxwYXRoIGQ9Im05OS43NzcgNDQ2LjA5Yy02LjY5OSAxMi4wMzEtMTIuMDMxIDMwLjEzMy0xMi4wMzEgNDEuNTM5IDAgMi42NDggMCA2LjAxNiAwLjY1NiAxMC42ODhsLTgzLjcyNi0xNDMuOTljLTIuNjgtNC42NzItNC42NzYtMTEuMzc1LTQuNjc2LTE3LjQxNCAwLTYuMDQ3IDEuOTk2LTEzLjM5OCA0LjY3Ni0xOC4wNzhsNDAuMTk1LTcwLjMyOC00NC44NzEtMjUuNDMgMTQ2LjAyLTIuNzAzIDcwLjk4NCAxMjcuOTEtNDUuNTI3LTI2LjExN3ptNjQuMzEzLTQwNS44NmMxMi43MTUtMjIuMTI1IDMzLjQ5Ni0zNC4xOCA1OC45MjYtMzQuMTggMjcuNDggMCA0OC45MTggMTIuNzQyIDY0LjMxMiAzOC44MjhsMjIuNzc3IDM4LjE3Mi03OS4wNTEgMTM2LjY2LTEyNy45MS03NC4zNTJ6bTkuMzUxIDUyMS43MmMtMzguMTcyIDAtNjkuNjQ1LTMxLjQ3Ny02OS42NDUtNjkuNjQ4IDAtMTAuNzE5IDQuNzAzLTI4LjgyIDExLjQwMi00MC4xOTVsMjEuNDEtMzguMTcyaDE1OC43NnYxNDguMDJoLTEyMS45MnptMTI3LjI5LTUyNS43NmMtMTAuMDM2LTE3LjM5MS0yMy40MzQtMjkuNDc3LTM5LjUxMi0zNi4xOGgxNjQuNzVjMTQuNzM4IDAgMjYuMTEzIDYuMDQ3IDMyLjg0IDE3LjQ0NWw0MC44NTIgNjkuNjQ4IDQ0LjE5MS0yNi4xNDEtNzEuMDE2IDEyNy4yOC0xNDUuMy0yLjA0NyA0NC44NzEtMjUuNDN6bTI1My44NiAzNzkuMDljMjAuMDcgMCAzNi44MzItNS4zNTkgNTAuODg3LTE2LjA1NWwtODMuMDcgMTQ0LjY1Yy02LjY5OSAxMS4zNzUtMTguNzMgMTguMDc4LTMyLjc4OSAxOC4wNzhoLTc4LjM5NXY1MS41N2wtNzUuMDA0LTEyNS4yMyA3NS4wMDQtMTI1LjI3djUyLjI1OGgxNDMuMzd6bTY0LjI1OC0xMjAuNTZjNi4wNDMgMTAuNzE5IDkuNDA2IDIyLjA5NCA5LjQwNiAzNC4xNTYgMCAyNC4xMTctMTUuNDIyIDQ5LjU3LTM2LjgzMiA2MS42MDItMTAuMDYyIDUuMzkxLTI0LjE0NSA4Ljc1LTM4LjE3MiA4Ljc1aC00NC4yNDJsLTc5LTEzNi42NiAxMjcuOTItNzMuMDA4eiIgZmlsbD0iIzgyOTc5OCIvPgoJCQk8L2c+CgkJPC9nPgoJPC9nPjxnIGZpbGw9IiMwMDk3MDAiPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI5LjE4NiAyNjE1LjkpIj48ZyBmaWxsPSIjMDA5NzAwIj48ZyBmaWxsPSIjMDA5NzAwIj48cGF0aCBkPSJtOTkuNzc3IDQ0Ni4wOWMtNi42OTkgMTIuMDMxLTEyLjAzMSAzMC4xMzMtMTIuMDMxIDQxLjUzOSAwIDIuNjQ4IDAgNi4wMTYgMC42NTYgMTAuNjg4bC04My43MjYtMTQzLjk5Yy0yLjY4LTQuNjcyLTQuNjc2LTExLjM3NS00LjY3Ni0xNy40MTQgMC02LjA0NyAxLjk5Ni0xMy4zOTggNC42NzYtMTguMDc4bDk3LjgzMS0xNjcuNC00NC44NzEtMjUuNDMgMTQ2LjAyLTIuNzAzIDcwLjk4NCAxMjcuOTEtNDUuNTI3LTI2LjExN3ptNjQuMzEzLTQwNS44NmMxMi43MTUtMjIuMTI1IDMzLjQ5Ni0zNC4xOCA1OC45MjYtMzQuMTggMjcuNDggMCA0OC45MTggMTIuNzQyIDY0LjMxMiAzOC44MjhsMjIuNzc3IDM4LjE3Mi0yMS40MTUgMzkuNTkzLTEyNy45MS03NC4zNTJ6bTkuMzUxIDUyMS43MmMtMzguMTcyIDAtNjkuNjQ1LTMxLjQ3Ny02OS42NDUtNjkuNjQ4IDAtMTAuNzE5IDQuNzAzLTI4LjgyIDExLjQwMi00MC4xOTVsMjEuNDEtMzguMTcyIDQwLjQ1My0xLjUxNjd2MTQ4LjAybC0zLjYyMDMgMS41MTY3em0xMjcuMjktNTI1Ljc2Yy0xMC4wMzYtMTcuMzkxLTIzLjQzNC0yOS40NzctMzkuNTEyLTM2LjE4aDE2NC43NWMxNC43MzggMCAyNi4xMTMgNi4wNDcgMzIuODQgMTcuNDQ1bDExMC42MiAxODkuNDcgNDQuMTkxLTI2LjE0MS03MS4wMTYgMTI3LjI4LTE0NS4zLTIuMDQ3IDQ0Ljg3MS0yNS40M3ptMjUzLjg2IDM3OS4wOWMyMC4wNyAwIDM2LjgzMi01LjM1OSA1MC44ODctMTYuMDU1bC04My4wNyAxNDQuNjVjLTYuNjk5IDExLjM3NS0xOC43MyAxOC4wNzgtMzIuNzg5IDE4LjA3OGwtMTk2LjctMS41MTY3djUxLjU3bC03NS4wMDQtMTI1LjIzIDc1LjAwNC0xMjUuMjd2NTIuMjU4bDI2MS42NyAxLjUxNjd6bTY0LjI1OC0xMjAuNTZjNi4wNDMgMTAuNzE5IDkuNDA2IDIyLjA5NCA5LjQwNiAzNC4xNTYgMCAyNC4xMTctMTUuNDIyIDQ5LjU3LTM2LjgzMiA2MS42MDItMTAuMDYyIDUuMzkxLTI0LjE0NSA4Ljc1LTM4LjE3MiA4Ljc1aC00NC4yNDJsLTkuMjMwNi0xNi44NDMgMTI3LjkyLTczLjAwOHoiIGZpbGw9IiMwMDk3MDAiLz48L2c+PC9nPjwvZz4KPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjkxLjAxIDU0ODMuOSkiPjxnIGZpbGw9IiMwMDk3MDAiLz48L2c+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDMuNTk1IDEyOTguOSkiPjxnIGZpbGw9IiMwMDk3MDAiPjxnIGZpbGw9IiMwMDk3MDAiPjxwYXRoIGQ9Im05OS43NzcgNDQ2LjA5Yy02LjY5OSAxMi4wMzEtMTIuMDMxIDMwLjEzMy0xMi4wMzEgNDEuNTM5IDAgMi42NDggMCA2LjAxNiAwLjY1NiAxMC42ODhsLTgzLjcyNi0xNDMuOTljLTIuNjgtNC42NzItNC42NzYtMTEuMzc1LTQuNjc2LTE3LjQxNCAwLTYuMDQ3IDEuOTk2LTEzLjM5OCA0LjY3Ni0xOC4wNzhsMTEuMzc3LTE3LjI0My00NC44NzEtMjUuNDMgMTQ2LjAyLTIuNzAzIDcwLjk4NCAxMjcuOTEtNDUuNTI3LTI2LjExN3ptNjQuMzEzLTQwNS44NmMxMi43MTUtMjIuMTI1IDMzLjQ5Ni0zNC4xOCA1OC45MjYtMzQuMTggMjcuNDggMCA0OC45MTggMTIuNzQyIDY0LjMxMiAzOC44MjhsMjIuNzc3IDM4LjE3Mi0xMDcuODcgMTg5Ljc1LTEyNy45MS03NC4zNTJ6bTkuMzUxIDUyMS43MmMtMzguMTcyIDAtNjkuNjQ1LTMxLjQ3Ny02OS42NDUtNjkuNjQ4IDAtMTAuNzE5IDQuNzAzLTI4LjgyIDExLjQwMi00MC4xOTVsMjEuNDEtMzguMTcyaDIxNi4zOXYxNDguMDJoLTE3OS41NnptMTI3LjI5LTUyNS43NmMtMTAuMDM2LTE3LjM5MS0yMy40MzQtMjkuNDc3LTM5LjUxMi0zNi4xOGgxNjQuNzVjMTQuNzM4IDAgMjYuMTEzIDYuMDQ3IDMyLjg0IDE3LjQ0NWwxMy41NTEgMi45MTIgNDQuMTkxLTI2LjE0MS03MS4wMTYgMTI3LjI4LTE0NS4zLTIuMDQ3IDQ0Ljg3MS0yNS40M3ptMjUzLjg2IDM3OS4wOWMyMC4wNyAwIDM2LjgzMi01LjM1OSA1MC44ODctMTYuMDU1bC04My4wNyAxNDQuNjVjLTYuNjk5IDExLjM3NS0xOC43MyAxOC4wNzgtMzIuNzg5IDE4LjA3OGgtMjAuNzU5djUxLjU3bC03NS4wMDQtMTI1LjIzIDc1LjAwNC0xMjUuMjd2NTIuMjU4aDg1LjczMXptNjQuMjU4LTEyMC41NmM2LjA0MyAxMC43MTkgOS40MDYgMjIuMDk0IDkuNDA2IDM0LjE1NiAwIDI0LjExNy0xNS40MjIgNDkuNTctMzYuODMyIDYxLjYwMi0xMC4wNjIgNS4zOTEtMjQuMTQ1IDguNzUtMzguMTcyIDguNzVoLTQ0LjI0MmwtMTE2LjkyLTIxMC45OCAxMjcuOTItNzMuMDA4eiIgZmlsbD0iIzAwOTcwMCIvPjwvZz48L2c+PC9nPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI5LjE4NiAxOTQyLjQpIj48ZyBmaWxsPSIjMDA5NzAwIj48ZyBmaWxsPSIjMDA5NzAwIj48cGF0aCBkPSJtOTkuNzc3IDQ0Ni4wOWMtNi42OTkgMTIuMDMxLTEyLjAzMSAzMC4xMzMtMTIuMDMxIDQxLjUzOSAwIDIuNjQ4IDAgNi4wMTYgMC42NTYgMTAuNjg4bC04My43MjYtMTQzLjk5Yy0yLjY4LTQuNjcyLTQuNjc2LTExLjM3NS00LjY3Ni0xNy40MTQgMC02LjA0NyAxLjk5Ni0xMy4zOTggNC42NzYtMTguMDc4bDQwLjE5NS03MC4zMjgtNDQuODcxLTI1LjQzIDE0Ni4wMi0yLjcwMyA3MC45ODQgMTI3LjkxLTQ1LjUyNy0yNi4xMTd6bTY0LjMxMy00MDUuODZjMTIuNzE1LTIyLjEyNSAzMy40OTYtMzQuMTggNTguOTI2LTM0LjE4IDI3LjQ4IDAgNDguOTE4IDEyLjc0MiA2NC4zMTIgMzguODI4bDIyLjc3NyAzOC4xNzItNzkuMDUxIDEzNi42Ni0xMjcuOTEtNzQuMzUyem05LjM1MSA1MjEuNzJjLTM4LjE3MiAwLTY5LjY0NS0zMS40NzctNjkuNjQ1LTY5LjY0OCAwLTEwLjcxOSA0LjcwMy0yOC44MiAxMS40MDItNDAuMTk1bDIxLjQxLTM4LjE3MmgxNTguNzZ2MTQ4LjAyaC0xMjEuOTJ6bTEyNy4yOS01MjUuNzZjLTEwLjAzNi0xNy4zOTEtMjMuNDM0LTI5LjQ3Ny0zOS41MTItMzYuMThoMTY0Ljc1YzE0LjczOCAwIDI2LjExMyA2LjA0NyAzMi44NCAxNy40NDVsNDAuODUyIDY5LjY0OCA0NC4xOTEtMjYuMTQxLTcxLjAxNiAxMjcuMjgtMTQ1LjMtMi4wNDcgNDQuODcxLTI1LjQzem0yNTMuODYgMzc5LjA5YzIwLjA3IDAgMzYuODMyLTUuMzU5IDUwLjg4Ny0xNi4wNTVsLTgzLjA3IDE0NC42NWMtNi42OTkgMTEuMzc1LTE4LjczIDE4LjA3OC0zMi43ODkgMTguMDc4aC03OC4zOTV2NTEuNTdsLTc1LjAwNC0xMjUuMjMgNzUuMDA0LTEyNS4yN3Y1Mi4yNThoMTQzLjM3em02NC4yNTgtMTIwLjU2YzYuMDQzIDEwLjcxOSA5LjQwNiAyMi4wOTQgOS40MDYgMzQuMTU2IDAgMjQuMTE3LTE1LjQyMiA0OS41Ny0zNi44MzIgNjEuNjAyLTEwLjA2MiA1LjM5MS0yNC4xNDUgOC43NS0zOC4xNzIgOC43NWgtNDQuMjQybC03OS0xMzYuNjYgMTI3LjkyLTczLjAwOHoiIGZpbGw9IiMwMDk3MDAiLz48L2c+PC9nPjwvZz48L2c+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjkuMTg2IDY0OS41OCkiIGZpbGw9IiM4Mjk3OTgiPjxnIGZpbGw9IiM4Mjk3OTgiPjxnIGZpbGw9IiM4Mjk3OTgiPjxwYXRoIGQ9Im05OS43NzcgNDQ2LjA5Yy02LjY5OSAxMi4wMzEtMTIuMDMxIDMwLjEzMy0xMi4wMzEgNDEuNTM5IDAgMi42NDggMCA2LjAxNiAwLjY1NiAxMC42ODhsLTgzLjcyNi0xNDMuOTljLTIuNjgtNC42NzItNC42NzYtMTEuMzc1LTQuNjc2LTE3LjQxNCAwLTYuMDQ3IDEuOTk2LTEzLjM5OCA0LjY3Ni0xOC4wNzhsNzYuNjYtMTM0LjY4LTQ0Ljg3MS0yNS40MyAxNDYuMDItMi43MDMgNzAuOTg0IDEyNy45MS00NS41MjctMjYuMTE3em02NC4zMTMtNDA1Ljg2YzEyLjcxNS0yMi4xMjUgMzMuNDk2LTM0LjE4IDU4LjkyNi0zNC4xOCAyNy40OCAwIDQ4LjkxOCAxMi43NDIgNjQuMzEyIDM4LjgyOGwyMi43NzcgMzguMTcyLTQyLjU4NiA3Mi4zMTUtMTI3LjkxLTc0LjM1MnptOS4zNTEgNTIxLjcyYy0zOC4xNzIgMC02OS42NDUtMzEuNDc3LTY5LjY0NS02OS42NDggMC0xMC43MTkgNC43MDMtMjguODIgMTEuNDAyLTQwLjE5NWwyMS40MS0zOC4xNzJoMTExLjU3djE0OC4wMmgtNzQuNzM2em0xMjcuMjktNTI1Ljc2Yy0xMC4wMzYtMTcuMzkxLTIzLjQzNC0yOS40NzctMzkuNTEyLTM2LjE4aDE2NC43NWMxNC43MzggMCAyNi4xMTMgNi4wNDcgMzIuODQgMTcuNDQ1bDczLjAyNyAxMjkuNzEgNDQuMTkxLTI2LjE0MS03MS4wMTYgMTI3LjI4LTE0NS4zLTIuMDQ3IDQ0Ljg3MS0yNS40M3ptMjUzLjg2IDM3OS4wOWMyMC4wNyAwIDM2LjgzMi01LjM1OSA1MC44ODctMTYuMDU1bC04My4wNyAxNDQuNjVjLTYuNjk5IDExLjM3NS0xOC43MyAxOC4wNzgtMzIuNzg5IDE4LjA3OGgtMTI1LjU4djUxLjU3bC03NS4wMDQtMTI1LjIzIDc1LjAwNC0xMjUuMjd2NTIuMjU4aDE5MC41NnptNjQuMjU4LTEyMC41NmM2LjA0MyAxMC43MTkgOS40MDYgMjIuMDk0IDkuNDA2IDM0LjE1NiAwIDI0LjExNy0xNS40MjIgNDkuNTctMzYuODMyIDYxLjYwMi0xMC4wNjIgNS4zOTEtMjQuMTQ1IDguNzUtMzguMTcyIDguNzVoLTQ0LjI0MmwtNDYuODI1LTc2LjYwNSAxMjcuOTItNzMuMDA4eiIgZmlsbD0iIzAwOTcwMCIvPjwvZz48L2c+PC9nPjwvZz4KPC9zdmc+Cg=="); + width: 18px; + height: 18px; +} + +.column-header.active .column-header__icon { + color: #E4FEFF; +} + +.column-header__wrapper.active::before { +) no-repeat height: 22px } 0,rgba(43,144,217,0) 60%\); */ + background: radial-gradient(ellipse,#FDE94E70 0,rgba(43,144,217,0) 70%); +} + +.column-header__wrapper.active { + box-shadow: 0 1px 0 #D2C55F38; +} + +.flex-spacer, .getting-started, .getting-started__wrapper { + background: #182828; +} + +.getting-started, +.getting-started__footer p, +.getting-started__footer p a { + color: #67868a; +} + +.column-link { + background: #314b4f; +} + +.column-link__badge, .column-subheading { + background: #182828; +} + +.column-subheading { + color: #67868a; +} + +button.icon-button i.fa-star { +background: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNS4wMTUybW0iIGhlaWdodD0iMjYuNTI0bW0iIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDMuOTExOSAyMC42ODkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTcyLjYyNSAtOTMuMjY3KSI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCA0LjMwODUpIj48cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguMDQ1OTIgLjI2MDU3IC0uMjYwNTcgLjA0NTkyIDc2LjI0NCA5NS44MjYpIiBkPSJtLTAuMDkzNzUgMTEuMTU2LTMuMTQ5My0yLjI1MTUtMS45MTg5IDMuMzYyMy0wLjYzNDg1LTMuODE5LTMuNzM0NCAxLjAyMDYgMi4yNTE1LTMuMTQ5My0zLjM2MjMtMS45MTg5IDMuODE5LTAuNjM0ODUtMS4wMjA2LTMuNzM0NCAzLjE0OTMgMi4yNTE1IDEuOTE4OS0zLjM2MjMgMC42MzQ4NSAzLjgxOSAzLjczNDQtMS4wMjA2LTIuMjUxNSAzLjE0OTMgMy4zNjIzIDEuOTE4OS0zLjgxOSAwLjYzNDg1eiIgZmlsbD0iI2ZmYjI3MSIvPjxnIGZpbGw9IiNmZjhlN2MiPjxwYXRoIGQ9Im03NC42MyA5My4wNTQtMC40NjgzMiAxLjI1NzEgMC4zMzUzMiAwLjg0NTIyIDAuNTczMjktMC44NzI0OXoiLz48cGF0aCBkPSJtNzQuMTgyIDk1Ljc2NSAwLjQzMzMtMC4zMjM0OCAwLjQ1ODEgMC4zNDUxMS0wLjQ0ODcxIDEuMjU3MiIvPjxwYXRoIGQ9Im03Mi42MjUgOTUuMDUyIDEuMjk4OSAwLjQwMTQ0IDAuOTA5NDMtMC4zNzk4MS0wLjg1MzM3LTAuNDU4NzJ6Ii8+PHBhdGggZD0ibTc2LjUzNyA5NS4wMjQtMS4yNjE2LTAuNDE1NDYtMC44NjUxIDAuNDIxODUgMC45MDcxNSAwLjQ3Mjc0eiIvPjwvZz48Y2lyY2xlIGN4PSI3NC42MzciIGN5PSI5NS4wNTQiIHI9Ii44NjgxNiIgZmlsbD0iI2Y5ZTU5YSIgc3Ryb2tlLXdpZHRoPSIuMjA0MjciLz48L2c+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLS4wMjEwMjEgLjA0MDA2MSkiPjxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KC4wNDU5MiAuMjYwNTcgLS4yNjA1NyAuMDQ1OTIgNzYuMjQ0IDk1LjgyNikiIGQ9Im0tMC4wOTM3NSAxMS4xNTYtMy4xNDkzLTIuMjUxNS0xLjkxODkgMy4zNjIzLTAuNjM0ODUtMy44MTktMy43MzQ0IDEuMDIwNiAyLjI1MTUtMy4xNDkzLTMuMzYyMy0xLjkxODkgMy44MTktMC42MzQ4NS0xLjAyMDYtMy43MzQ0IDMuMTQ5MyAyLjI1MTUgMS45MTg5LTMuMzYyMyAwLjYzNDg1IDMuODE5IDMuNzM0NC0xLjAyMDYtMi4yNTE1IDMuMTQ5MyAzLjM2MjMgMS45MTg5LTMuODE5IDAuNjM0ODV6IiBmaWxsPSIjODI5Nzk4Ii8+PGcgZmlsbD0iIzY0Nzg3YSI+PHBhdGggZD0ibTc0LjYxMiA5My4yMjctMC4zNDcyNiAxLjAwMDUgMC4yNTYzMiAwLjUxMjYzIDAuNDM4MjItMC41MjkxN3oiLz48cGF0aCBkPSJtNzQuNTk2IDk2Ljg2NS0wLjM0NzA2LTEuMDA4NyAwLjI3NzY1LTAuNTA0MzYgMC40MjUxNSAwLjUyMDktMC4zNjQ0MSAxLjAyNTMiLz48cGF0aCBkPSJtNzIuODAyIDk1LjA1NCAwLjk1OTEyIDAuMzM5IDAuNjY5NzMtMC4zMjI0Ni0wLjY2OTczLTAuMzcyMDd6Ii8+PHBhdGggZD0ibTc2LjQwMyA5NS4wNTQtMC45NTkxMi0wLjMzOS0wLjY2OTczIDAuMzIyNDYgMC42Njk3MyAwLjM3MjA3eiIvPjwvZz48Y2lyY2xlIGN4PSI3NC42MzciIGN5PSI5NS4wNTQiIHI9Ii44NjgxNiIgZmlsbD0iIzk1YTdhOCIgc3Ryb2tlLXdpZHRoPSIuMjA0MjciLz48L2c+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLS4wMjEwMjEgMTIuODAzKSI+PHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoLjA0NTkyIC4yNjA1NyAtLjI2MDU3IC4wNDU5MiA3Ni4yNDQgOTUuODI2KSIgZD0ibTAuNzk2MjUgMTEuOTA1LTQuNjUzMS0zLjQ4NDYtMS4zMDUxIDMuODQ3LTAuMTcxNTctNC4wMDYyLTUuMDEzNyAxLjg3MDkgMy4yMTE2LTQuMzI0Ny0zLjUwNjQtMS40MDY1IDMuODMxNC0wLjA5NDgxOC0xLjU4NTctNS43MTY0IDQuMjY2NiAzLjg0NjggMS4zNTQzLTMuNTE1NiAwLjE5OTE1IDMuODQ5NyA1LjM2MDUtMS43MDIyLTMuNzYwOSA0LjM4OTMgMy42ODEzIDEuMzI5Ny00LjAxMjQtMC4wOTg0NHoiIGZpbGw9IiNmZmIyNzEiLz48ZyBmaWxsPSIjZmY4ZTdjIj48cGF0aCBkPSJtNzQuNjEyIDkzLjIyNy0wLjM0NzI2IDEuMDAwNSAwLjI1NjMyIDAuNTEyNjMgMC40MzgyMi0wLjUyOTE3eiIvPjxwYXRoIGQ9Im03NC41OTYgOTYuODY1LTAuMzQ3MDYtMS4wMDg3IDAuMjc3NjUtMC41MDQzNiAwLjQyNTE1IDAuNTIwOS0wLjM2NDQxIDEuMDI1MyIvPjxwYXRoIGQ9Im03Mi44MDIgOTUuMDU0IDAuOTU5MTIgMC4zMzkgMC42Njk3My0wLjMyMjQ2LTAuNjY5NzMtMC4zNzIwN3oiLz48cGF0aCBkPSJtNzYuNDAzIDk1LjA1NC0wLjk1OTEyLTAuMzM5LTAuNjY5NzMgMC4zMjI0NiAwLjY2OTczIDAuMzcyMDd6Ii8+PC9nPjxjaXJjbGUgY3g9Ijc0LjYzNyIgY3k9Ijk1LjA1NCIgcj0iLjg2ODE2IiBmaWxsPSIjZjllNTlhIiBzdHJva2Utd2lkdGg9Ii4yMDQyNyIvPjwvZz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtLjAyMTAyMSAxNy4wNTgpIj48cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguMDQ1OTIgLjI2MDU3IC0uMjYwNTcgLjA0NTkyIDc2LjI0NCA5NS44MjYpIiBkPSJtLTAuMDkzNzUgMTEuMTU2LTMuMTQ5My0yLjI1MTUtMS45MTg5IDMuMzYyMy0wLjYzNDg1LTMuODE5LTMuNzM0NCAxLjAyMDYgMi4yNTE1LTMuMTQ5My0zLjM2MjMtMS45MTg5IDMuODE5LTAuNjM0ODUtMS4wMjA2LTMuNzM0NCAzLjE0OTMgMi4yNTE1IDEuOTE4OS0zLjM2MjMgMC42MzQ4NSAzLjgxOSAzLjczNDQtMS4wMjA2LTIuMjUxNSAzLjE0OTMgMy4zNjIzIDEuOTE4OS0zLjgxOSAwLjYzNDg1eiIgZmlsbD0iI2ZmYjI3MSIvPjxnIGZpbGw9IiNmZjhlN2MiPjxwYXRoIGQ9Im03NC42MTIgOTMuMjI3LTAuMzQ3MjYgMS4wMDA1IDAuMjU2MzIgMC41MTI2MyAwLjQzODIyLTAuNTI5MTd6Ii8+PHBhdGggZD0ibTc0LjU5NiA5Ni44NjUtMC4zNDcwNi0xLjAwODcgMC4yNzc2NS0wLjUwNDM2IDAuNDI1MTUgMC41MjA5LTAuMzY0NDEgMS4wMjUzIi8+PHBhdGggZD0ibTcyLjgwMiA5NS4wNTQgMC45NTkxMiAwLjMzOSAwLjY2OTczLTAuMzIyNDYtMC42Njk3My0wLjM3MjA3eiIvPjxwYXRoIGQ9Im03Ni40MDMgOTUuMDU0LTAuOTU5MTItMC4zMzktMC42Njk3MyAwLjMyMjQ2IDAuNjY5NzMgMC4zNzIwN3oiLz48L2c+PGNpcmNsZSBjeD0iNzQuNjM3IiBjeT0iOTUuMDU0IiByPSIuODY4MTYiIGZpbGw9IiNmOWU1OWEiIHN0cm9rZS13aWR0aD0iLjIwNDI3Ii8+PC9nPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0uMDIxMDIxIDguNTQ4OCkiPjxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KC4wNDU5MiAuMjYwNTcgLS4yNjA1NyAuMDQ1OTIgNzYuMjQ0IDk1LjgyNikiIGQ9Im0tMC4wOTM3NSAxMS4xNTYtMy4xNDkzLTIuMjUxNS0xLjkxODkgMy4zNjIzLTAuNjM0ODUtMy44MTktMy43MzQ0IDEuMDIwNiAyLjI1MTUtMy4xNDkzLTMuMzYyMy0xLjkxODkgMy44MTktMC42MzQ4NS0xLjAyMDYtMy43MzQ0IDMuMTQ5MyAyLjI1MTUgMS45MTg5LTMuMzYyMyAwLjYzNDg1IDMuODE5IDMuNzM0NC0xLjAyMDYtMi4yNTE1IDMuMTQ5MyAzLjM2MjMgMS45MTg5LTMuODE5IDAuNjM0ODV6IiBmaWxsPSIjZmZiMjcxIi8+PGcgZmlsbD0iI2ZmOGU3YyI+PHBhdGggZD0ibTc0LjYxMiA5My4yMjctMC4zNDcyNiAxLjAwMDUgMC4yNTYzMiAwLjUxMjYzIDAuNDM4MjItMC41MjkxN3oiLz48cGF0aCBkPSJtNzQuNTk2IDk2Ljg2NS0wLjM0NzA2LTEuMDA4NyAwLjI3NzY1LTAuNTA0MzYgMC40MjUxNSAwLjUyMDktMC4zNjQ0MSAxLjAyNTMiLz48cGF0aCBkPSJtNzIuODAyIDk1LjA1NCAwLjk1OTEyIDAuMzM5IDAuNjY5NzMtMC4zMjI0Ni0wLjY2OTczLTAuMzcyMDd6Ii8+PHBhdGggZD0ibTc2LjQwMyA5NS4wNTQtMC45NTkxMi0wLjMzOS0wLjY2OTczIDAuMzIyNDYgMC42Njk3MyAwLjM3MjA3eiIvPjwvZz48Y2lyY2xlIGN4PSI3NC42MzciIGN5PSI5NS4wNTQiIHI9Ii44NjgxNiIgZmlsbD0iI2Y5ZTU5YSIgc3Ryb2tlLXdpZHRoPSIuMjA0MjciLz48L2c+PC9nPjwvc3ZnPgo=") no-repeat top; +height: 18px; +margin: 2px 0px; + transition: background-position .9s steps(4); +} + +.star-icon.active i.fa-star { + background-position: 50% 100%; +} + +.column-link .fa-star { + background: url("data:image/svg+xml,%3Csvg%20width%3D%225mm%22%20height%3D%225mm%22%20version%3D%221.1%22%20viewBox%3D%220%200%203.6008%203.6711%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20transform%3D%22translate%28-72.802%20-93.227%29%22%20fill%3D%22%23d4fafe%22%3E%3Cpath%20transform%3D%22matrix%28.04592%20.26057%20-.26057%20.04592%2076.244%2095.826%29%22%20d%3D%22m-0.09375%2011.156-3.1493-2.2515-1.9189%203.3623-0.63485-3.819-3.7344%201.0206%202.2515-3.1493-3.3623-1.9189%203.819-0.63485-1.0206-3.7344%203.1493%202.2515%201.9189-3.3623%200.63485%203.819%203.7344-1.0206-2.2515%203.1493%203.3623%201.9189-3.819%200.63485z%22%2F%3E%3Cpath%20d%3D%22m74.612%2093.227-0.34726%201.0005%200.25632%200.51263%200.43822-0.52917z%22%2F%3E%3Cpath%20d%3D%22m74.596%2096.865-0.34706-1.0087%200.27765-0.50436%200.42515%200.5209-0.36441%201.0253%22%2F%3E%3Cpath%20d%3D%22m72.802%2095.054%200.95912%200.339%200.66973-0.32246-0.66973-0.37207z%22%2F%3E%3Cpath%20d%3D%22m76.403%2095.054-0.95912-0.339-0.66973%200.32246%200.66973%200.37207z%22%2F%3E%3Ccircle%20cx%3D%2274.637%22%20cy%3D%2295.054%22%20r%3D%22.86816%22%20stroke-width%3D%22.20427%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A") no-repeat center; + height: 20px; + vertical-align: bottom; +} + +.no-reduce-motion .icon-button.star-icon.deactivate > .fa-star, +.no-reduce-motion .icon-button.star-icon.activate > .fa-star { + animation: none; + -webkit-animation: none; +} + +.fa-star::before { + content: ""; +} + +@media screen and (min-width: 1300px) { + .layout-multiple-columns .column { + flex-grow: 1 !important; + max-width: 400px; + } +} + +.column-header__collapsible-inner, +.column-header__button.active, +.column-header__button.active:hover { + background: #314b4f; +} + +.column-link:active, .column-link:focus, .column-link:hover { + background: #49696f; +} + +.drawer__header a:hover { + background: #1A4457; +} + +.status-card__image, +.status-card.compact { + border-color: #253c40; + background: #253c40; +} + +.status-card__title { + color: #E4FEFF; +} + +.search__input:focus { + background: #1A4457; +} + +.search__icon .fa-times-circle { + color: #89C2E1; +} + +.search__icon .fa-times-circle:hover { + color: #fff; +} + +.reply-indicator__content a, +.status__content a { + color: #5BCDFF; +} + +.attachment-list__list a, +.attachment-list.compact .fa { + color: #829798; +} + +.poll__footer, +.poll__link { + color: #67868a; +} + +.account__header__bio .account__header__joined { + color: #829798; +} + +.account__header__fields dd, +.account__header__tabs__name h1 small, +.account__header__extra__links a { + color: #A5C6C8; +} diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..230c920 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,145 @@ +version: '3' +services: + db: + restart: always + image: postgres:14-alpine + shm_size: 256mb + networks: + - internal_network + healthcheck: + test: ['CMD', 'pg_isready', '-U', 'postgres'] + volumes: + - ./postgres14:/var/lib/postgresql/data + environment: + - 'POSTGRES_HOST_AUTH_METHOD=trust' + + redis: + restart: always + image: redis:6-alpine + networks: + - internal_network + healthcheck: + test: ['CMD', 'redis-cli', 'ping'] + volumes: + - ./redis:/data + + es: + restart: always + image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2 + environment: + - "ES_JAVA_OPTS=-Xms512m -Xmx512m" + - "cluster.name=es-mastodon" + - "discovery.type=single-node" + - "bootstrap.memory_lock=true" + networks: + - internal_network + healthcheck: + test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"] + volumes: + - elasticsearch + ulimits: + memlock: + soft: -1 + hard: -1 + + web: + build: . + image: tootsuite/mastodon + restart: always + env_file: .env.production + command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000" + networks: + internal_network: + external_network: + aliases: + - masto_web + mail: + healthcheck: + # prettier-ignore + test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:3000/health || exit 1'] + depends_on: + - db + - redis + # - es + volumes: + - ./public/system:/mastodon/public/system + + streaming: + build: . + image: tootsuite/mastodon + restart: always + env_file: .env.production + command: node ./streaming + networks: + internal_network: + external_network: + aliases: + - masto_streaming + mail: + healthcheck: + # prettier-ignore + test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:4000/api/v1/streaming/health || exit 1'] + depends_on: + - db + - redis + + sidekiq: + build: . + image: tootsuite/mastodon + restart: always + env_file: .env.production + command: bundle exec sidekiq + depends_on: + - db + - redis + networks: + - external_network + - internal_network + - mail + volumes: + - ./public/system:/mastodon/public/system + healthcheck: + test: ['CMD-SHELL', "ps aux | grep '[s]idekiq\ 6' || false"] + + ## Uncomment to enable federation with tor instances along with adding the following ENV variables + ## http_proxy=http://privoxy:8118 + ## ALLOW_ACCESS_TO_HIDDEN_SERVICE=true + # tor: + # image: sirboops/tor + # networks: + # - external_network + # - internal_network + # + # privoxy: + # image: sirboops/privoxy + # volumes: + # - ./priv-config:/opt/config + # networks: + # - external_network + # - internal_network + + nginx: + image: nginx + restart: always + networks: + - httpsproxy + - external_network + volumes: + - ./templates:/etc/nginx/templates + environment: + - LETSENCRYPT_HOST=solarpunk.moe + - VIRTUAL_HOST=solarpunk.moe + - NGINX_HOST=solarpunk.moe + - NGINX_PORT=80 + +volumes: + elasticsearch: + +networks: + mail: + external: true + httpsproxy: + external: true + external_network: + internal_network: + internal: true diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..84643f9 Binary files /dev/null and b/favicon.ico differ diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..9d05a71 --- /dev/null +++ b/install.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +# This should deploy a masto instance neatly. +# Assumptions: +# - Using ubuntu! +# - Docker and docker-compose installed, not from ubuntu repo. +# - Reverse proxy: +# - You are using jwilder/nginx-proxy to reverse proxy https +# - You are using nginxproxy/acme-companion to generate letsencrypt certs +# - These two are inside the external network 'httpsproxy' +# - You have an external network called 'mail' that serves the mail. +# - The domain is solarpunk.moe (might make it generic in future perhaps) +# - Your docker installation is configured root only (no custom docker users) + +# Go to this script's dir +cd "$(dirname "${BASH_SOURCE[0]}")" + +echo "Welcome to the solarpunk.moe installer." + +read -p "Press enter to create public/system dir owned by UID 991, CTRL-C to cancel." +mkdir -p public/system/ +sudo chown 991 public/system # Magic mastodon UID inside the container +sudo chown 991 favicon.ico # Magic mastodon UID inside the container +sudo cp favicon.ico public/ + +# Run the mastodon setup wizard. Most of the options should be the defaults +read -p "Press enter to run the setup wizard, CTRL-C to cancel." +sudo docker-compose run --rm web bundle exec rake mastodon:setup + +echo ES_ENABLED=true >> .env.production +echo ES_HOST=es >> .env.production +echo ES_PORT=9200 >> .env.production + +# Start 'er up! +read -p "Press enter to bring up the instance, CTRL-C to cancel." +sudo docker-compose up -d + +# Create elasticsearch index. +read -p "Press enter to make ElasticSearch indices, CTRL-C to cancel." +sudo docker-compose run --env RAILS_ENV=production web bin/tootctl search deploy + diff --git a/templates/default.conf.template b/templates/default.conf.template new file mode 100644 index 0000000..a771a34 --- /dev/null +++ b/templates/default.conf.template @@ -0,0 +1,104 @@ +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + +upstream backend { + server masto_web:3000 fail_timeout=0; +} + +upstream streaming { + server masto_streaming:4000 fail_timeout=0; +} + +proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=CACHE:10m inactive=7d max_size=1g; + +server { + listen 80; + listen [::]:80; + + server_name solarpunk.moe; + + ssl_protocols TLSv1.2 TLSv1.3; + ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; + ssl_prefer_server_ciphers on; + ssl_session_cache shared:SSL:10m; + + keepalive_timeout 70; + sendfile on; + client_max_body_size 80m; + + location /.well-known/acme-challenge/ { allow all; } + root /home/mastodon/live/public; + + gzip on; + gzip_disable "msie6"; + gzip_vary on; + gzip_proxied any; + gzip_comp_level 6; + gzip_buffers 16 8k; + gzip_http_version 1.1; + gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; + + add_header Strict-Transport-Security "max-age=31536000"; + + location / { + try_files $uri @proxy; + } + + location ~ ^/(emoji|packs|system/accounts/avatars|system/media_attachments/files) { + add_header Cache-Control "public, max-age=31536000, immutable"; + add_header Strict-Transport-Security "max-age=31536000"; + try_files $uri @proxy; + } + + location /sw.js { + add_header Cache-Control "public, max-age=0"; + add_header Strict-Transport-Security "max-age=31536000"; + try_files $uri @proxy; + } + + location @proxy { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Proxy ""; + proxy_pass_header Server; + + proxy_pass http://backend; + proxy_buffering on; + proxy_redirect off; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + + proxy_cache CACHE; + proxy_cache_valid 200 7d; + proxy_cache_valid 410 24h; + proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; + add_header X-Cached $upstream_cache_status; + add_header Strict-Transport-Security "max-age=31536000"; + + tcp_nodelay on; + } + + location /api/v1/streaming { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Proxy ""; + + proxy_pass http://streaming; + proxy_buffering off; + proxy_redirect off; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + + tcp_nodelay on; + } + + error_page 500 501 502 503 504 /500.html; +}