Compare commits
53 commits
85211e22d6
...
df651c1f89
Author | SHA1 | Date | |
---|---|---|---|
df651c1f89 | |||
960c1ff7b8 | |||
5074d6180f | |||
8583fc3b70 | |||
20971ee185 | |||
ba91e5a4d4 | |||
7a2fa95c7c | |||
e16ea4bff5 | |||
dbafad3d2c | |||
6c134aa197 | |||
131e010df6 | |||
1891bb1663 | |||
a962ed7d54 | |||
ec56a2a9a4 | |||
447473a5b7 | |||
bc0e467a88 | |||
d4c05f2208 | |||
538d6d28a9 | |||
38abc63f6c | |||
430d761ef7 | |||
bc6a3ad9eb | |||
dab6947796 | |||
e5150af485 | |||
fcebeda2fd | |||
f51c915874 | |||
c6df711bc4 | |||
644e6103ad | |||
4ad7d76924 | |||
3abfef4528 | |||
f179b0805c | |||
679c45aac9 | |||
c4404e49a1 | |||
6c0b8a4b77 | |||
54b292ebfb | |||
8bb457d284 | |||
7825a0750a | |||
bd01685efa | |||
d990e44301 | |||
9235cedee8 | |||
a302b8a930 | |||
a571960b5c | |||
bb7abd544a | |||
b498669487 | |||
404b74321b | |||
389a5b33d0 | |||
e700bb9c30 | |||
df914edcb5 | |||
7930f96171 | |||
9a6fc62179 | |||
8bfbdd9f26 | |||
4b5d36292b | |||
4198faa4b7 | |||
32c69ee4ca |
25
.drone.yml
|
@ -34,6 +34,7 @@ steps:
|
|||
- yarn build
|
||||
environment:
|
||||
SUBPATH: /tghandbook/${DRONE_COMMIT_BRANCH/\//_}-${DRONE_COMMIT_SHA:0:8}
|
||||
REVISION: ${DRONE_COMMIT_SHA}
|
||||
when:
|
||||
event:
|
||||
- push
|
||||
|
@ -47,24 +48,24 @@ steps:
|
|||
environment:
|
||||
SUBPATH: /tghandbook/pr-${DRONE_PULL_REQUEST}
|
||||
OUTDIR: ./dist-pr
|
||||
REVISION: ${DRONE_COMMIT_SHA}
|
||||
when:
|
||||
event:
|
||||
- pull_request
|
||||
depends_on:
|
||||
- dependencies
|
||||
|
||||
- name: build_master
|
||||
- name: build_branch
|
||||
image: node
|
||||
commands:
|
||||
- yarn build
|
||||
environment:
|
||||
SUBPATH: /tghandbook/latest
|
||||
OUTDIR: ./dist-master
|
||||
SUBPATH: /tghandbook/${DRONE_COMMIT_BRANCH/\//_}
|
||||
OUTDIR: ./dist-branch
|
||||
REVISION: ${DRONE_COMMIT_SHA}
|
||||
when:
|
||||
event:
|
||||
- push
|
||||
branch:
|
||||
- master
|
||||
depends_on:
|
||||
- dependencies
|
||||
|
||||
|
@ -106,7 +107,7 @@ steps:
|
|||
depends_on:
|
||||
- build_pr
|
||||
|
||||
- name: upload_build_master
|
||||
- name: upload_build_branch
|
||||
image: plugins/s3
|
||||
settings:
|
||||
bucket: tghandbook
|
||||
|
@ -114,18 +115,16 @@ steps:
|
|||
from_secret: minio_access
|
||||
secret_key:
|
||||
from_secret: minio_secret
|
||||
source: dist-master/**/*
|
||||
target: /latest/
|
||||
strip_prefix: dist-master/
|
||||
source: dist-branch/**/*
|
||||
target: /${DRONE_COMMIT_BRANCH/\//_}/
|
||||
strip_prefix: dist-branch/
|
||||
path_style: true
|
||||
endpoint: https://artifacts.fromouter.space
|
||||
when:
|
||||
event:
|
||||
- push
|
||||
branch:
|
||||
- master
|
||||
depends_on:
|
||||
- build_master
|
||||
- build_branch
|
||||
|
||||
- name: rebuild-cache
|
||||
image: drillster/drone-volume-cache
|
||||
|
@ -146,4 +145,4 @@ volumes:
|
|||
path: /opt/gitea/drone-cache/hamcha/tghandbook
|
||||
---
|
||||
kind: signature
|
||||
hmac: 9f4b08596bdaa078a6c60fc63d932084bab117c340a310903bbe96f31c0122bb
|
||||
hmac: 55dfd5c47c79e51394c5cdfaa9b98a6f6acd84e751e92964c202ac19b46c0373
|
||||
|
|
|
@ -19,6 +19,8 @@ module.exports = {
|
|||
"no-param-reassign": "off",
|
||||
"no-alert": "off",
|
||||
"no-console": "off",
|
||||
"func-names": "off",
|
||||
"dot-notation": ["error", { allowPattern: "^[A-Z][a-z]+$" }],
|
||||
"@typescript-eslint/ban-ts-comment": [
|
||||
"error",
|
||||
{
|
||||
|
|
23
LICENSE
Normal file
|
@ -0,0 +1,23 @@
|
|||
This code is license under ISC, full copy below:
|
||||
|
||||
Copyright 2020, Alessandro Gatti
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
This code uses idb-keyval, licensed under Apache 2:
|
||||
|
||||
Copyright 2016, Jake Archibald
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
|
@ -1,6 +1,6 @@
|
|||
# /tg/ handbook
|
||||
|
||||
[![Build Status](https://drone.zyg.ovh/api/badges/Hamcha/tghandbook/status.svg)](https://drone.zyg.ovh/Hamcha/tghandbook)
|
||||
[![Build Status](https://ci.fromouter.space/api/badges/Hamcha/tghandbook/status.svg)](https://ci.fromouter.space/Hamcha/tghandbook)
|
||||
|
||||
## Building
|
||||
|
||||
|
@ -8,4 +8,4 @@
|
|||
|
||||
## Development
|
||||
|
||||
`yarn && yarn dev`
|
||||
`yarn dev`
|
||||
|
|
|
@ -1,8 +1,3 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="0 0 425 200" opacity=".33">
|
||||
<path d="m 178.00399,0.03869 -71.20393,0 a 6.7613422,6.0255495 0 0 0 -6.76134,6.02555 l 0,187.87147 a 6.7613422,6.0255495 0 0 0 6.76134,6.02554 l 53.1072,0 a 6.7613422,6.0255495 0 0 0 6.76135,-6.02554 l 0,-101.544018 72.21628,104.699398 a 6.7613422,6.0255495 0 0 0 5.76015,2.87016 l 73.55487,0 a 6.7613422,6.0255495 0 0 0 6.76135,-6.02554 l 0,-187.87147 a 6.7613422,6.0255495 0 0 0 -6.76135,-6.02555 l -54.71644,0 a 6.7613422,6.0255495 0 0 0 -6.76133,6.02555 l 0,102.61935 L 183.76413,2.90886 a 6.7613422,6.0255495 0 0 0 -5.76014,-2.87017 z" />
|
||||
<path d="M 4.8446333,22.10875 A 13.412039,12.501842 0 0 1 13.477588,0.03924 l 66.118315,0 a 5.3648158,5.000737 0 0 1 5.364823,5.00073 l 0,79.87931 z" />
|
||||
<path d="m 420.15535,177.89119 a 13.412038,12.501842 0 0 1 -8.63295,22.06951 l -66.11832,0 a 5.3648152,5.000737 0 0 1 -5.36482,-5.00074 l 0,-79.87931 z" />
|
||||
</svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="0 0 425 200" opacity=".33"><path d="M178.004.039H106.8a6.761 6.026 0 00-6.761 6.025v187.872a6.761 6.026 0 006.761 6.025h53.107a6.761 6.026 0 006.762-6.025V92.392l72.216 104.7a6.761 6.026 0 005.76 2.87H318.2a6.761 6.026 0 006.761-6.026V6.064A6.761 6.026 0 00318.2.04h-54.717a6.761 6.026 0 00-6.76 6.025v102.62L183.763 2.909a6.761 6.026 0 00-5.76-2.87zM4.845 22.109A13.412 12.502 0 0113.478.039h66.118A5.365 5 0 0184.96 5.04v79.88zM420.155 177.891a13.412 12.502 0 01-8.633 22.07h-66.118a5.365 5 0 01-5.365-5.001v-79.88z"/></svg>
|
||||
<!-- This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. -->
|
||||
<!-- http://creativecommons.org/licenses/by-sa/4.0/ -->
|
||||
<!-- http://creativecommons.org/licenses/by-sa/4.0/ -->
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 751 B |
1
assets/images/outline.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 257 256" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path fill="none" d="M.452 0h256v256h-256z"/><path d="M129.014 47.901c14.483-8.061 24.58-16.488 38.561-22.21 11.701-4.787 26.042-7.773 47.622-7.098l4.953.191.387 38.629c3.103-.006 6.211.039 9.325.125 4.938.135 9.889.377 14.854.714l5.498.445v5.516s.828 52.078 1.2 97.18c.287 34.428.274 64.787.274 64.787v8.059l-8.035-.627c-24.152-2.097-45.98-2.69-65.405-1.783-15.888.744-30.153 2.465-42.637 5.293l-5.597 1.36-1.562.402s-7.123-1.904-7.022-1.88c-12.547-3.165-26.793-5.311-42.704-6.393-19.473-1.324-41.39-1.078-65.663.59l-5.428.423.98-167.41V60.47l3.73-.302a365.634 365.634 0 0115.366-.843c3.83-.126 7.651-.188 11.465-.179l-.17-35.405V19.82l3.92-.152c21.43-.935 35.714 1.868 47.393 6.49 14.013 5.545 24.171 13.856 38.695 21.743zM47.14 27.724l-.17 35.345v3.927l-3.926-.039a309.957 309.957 0 00-15.027.31c-3.749.166-7.504.395-11.266.685l.923 152.758c22.638-1.796 43.225-2.242 61.695-1.39 16.71.77 31.707 2.619 44.997 5.622l4.004.974 4.183-1.13c13.195-3.32 28.18-5.559 44.911-6.685 17.804-1.198 37.6-1.116 59.32.14.013-11.236.069-33.072.265-56.847.302-36.326.897-77.176 1.118-91.7a320.475 320.475 0 00-8.775-.593c-4.8-.257-9.589-.413-14.365-.45l-5.626.03.394-39.953c-16.988-.321-28.824 2.01-38.643 5.876-14.403 5.673-24.606 14.425-39.985 22.47l-2.127 1.129-2.128-1.129c-15.313-8.223-25.44-17.087-39.798-22.934-10.059-4.098-22.25-6.643-39.974-6.416z" fill="#fff"/><path d="M124.388 234.209c-5.347-2.704-9.458-6.503-13.936-10.57-5.455-4.954-11.563-10.32-22.261-13.926-10.026-3.38-23.97-5.198-44.87-3.961l-4.9.25v-4.908s-.552-44.336-.426-88.676c.127-44.342.931-88.676.931-88.676v-3.997l3.995-.157c16.103-.402 28.11 1.236 38 4.113 19.276 5.607 30.377 16.066 48.121 25.984 17.751-9.894 28.863-20.327 48.135-25.92 9.887-2.868 21.887-4.508 37.98-4.104l3.925.153v3.928s.906 44.332 1.074 88.676c.169 44.338-.401 88.676-.401 88.676v5.006l-5-.255c-20.885-1.243-34.818.57-44.84 3.94-10.691 3.594-16.8 8.944-22.255 13.888-4.482 4.063-8.597 7.859-13.947 10.56v4.187l-4.685-2.092-4.645 2.068.005-4.187zm86.45-206.553c-17.768-.558-30.052 1.75-40.21 5.728-14.457 5.663-24.699 14.486-40.131 22.568l-1.456.776-1.457-.776c-15.441-8.058-25.697-16.856-40.157-22.506-10.14-3.962-22.397-6.271-40.12-5.72.198 11.843.76 48.264.864 84.692.101 35.61-.234 71.216-.371 83.859 19.759-.445 33.283 1.82 43.194 5.342 12.023 4.274 18.879 10.372 24.95 16.074 4.153 3.901 7.855 7.63 13.062 10.088 5.232-2.462 8.938-6.204 13.1-10.122 6.07-5.714 12.925-11.825 24.957-16.112 9.898-3.526 23.403-5.793 43.122-5.364-.142-12.727-.48-48.245-.346-83.765.138-36.504.777-73 1-84.762z" fill="#fff"/><path d="M131.84 227.74a2.942 2.942 0 01-5.415.025l-8.456-1.162s8.838-1.436 9.259-13.965c.047-1.4.121-1.6.206-1.03l.24-3.427c.855-12.83 1.453-27.634 1.453-27.634s.598 14.804 1.453 27.634c.169 2.522.349 4.962.524 7.197 1.498 10.005 9.008 11.225 9.008 11.225l-8.271 1.138zM129.727 49.702l-.01-.272 10.394 1.451s-8.837 1.458-9.258 14.178c-.047 1.421-.121 1.625-.206 1.045l-.24 3.48c-.856 13.026-1.453 28.054-1.453 28.054s-.598-15.028-1.454-28.054c-.168-2.56-.348-5.037-.523-7.307-1.498-10.156-9.008-11.396-9.008-11.396l10.396-1.45-.01.256c.453-.035.926-.03 1.372.015zM82.887 178.83V76.855H65.036V63.048h47.752v13.806l-17.851.001V178.83h-12.05zM179.476 63.122c9.006.741 13.57 7.034 13.57 18.736v15.147h-10.893V86.132c0-5.723-3.111-9.277-8.12-9.277h-9.215c-5.084 0-8.121 3.468-8.121 9.277v69.612c0 5.81 3.037 9.277 8.12 9.277h9.215c5.085 0 8.12-3.468 8.12-9.277v-23.627h-8.703v-13.809h19.596v41.711c0 12.482-5.192 18.81-15.43 18.81h-16.892c-5.092 0-8.954-1.528-11.48-4.542-2.622-3.125-3.95-7.925-3.95-14.27V81.859c0-6.343 1.328-11.144 3.95-14.27 2.525-3.012 6.388-4.54 11.479-4.54h16.894l1.86.074z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 3.7 KiB |
|
@ -1,56 +1 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg
|
||||
width="100vmin"
|
||||
height="100vmin
|
||||
"
|
||||
viewBox="0 0 340 340"
|
||||
version="1.1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xml:space="preserve"
|
||||
xmlns:serif="http://www.serif.com/"
|
||||
style="
|
||||
fill-rule: evenodd;
|
||||
clip-rule: evenodd;
|
||||
stroke-linejoin: round;
|
||||
stroke-miterlimit: 2;
|
||||
"
|
||||
>
|
||||
<style>
|
||||
@keyframes rotate {
|
||||
from {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
#circleboi {
|
||||
transform-origin: 50% 50%;
|
||||
animation-name: rotate;
|
||||
animation-duration: 6s;
|
||||
animation-iteration-count: infinite;
|
||||
animation-timing-function: linear;
|
||||
}
|
||||
</style>
|
||||
<path
|
||||
id="text"
|
||||
d="M104.26,279.309L104.26,92.146L71.496,92.146L71.496,66.804L159.14,66.804L159.14,92.144L126.376,92.146L126.376,279.309M205.817,279.309C195.943,279.309 188.452,276.504 183.552,270.972C178.469,265.237 175.892,256.426 175.892,244.783L175.892,101.33C175.892,89.687 178.469,80.876 183.552,75.14C188.45,69.61 195.942,66.806 205.816,66.806L238.58,66.806C258.435,66.806 268.504,78.42 268.504,101.33L268.504,129.131L247.379,129.131L247.379,109.174C247.379,98.671 241.346,92.147 231.631,92.147L213.759,92.147C203.899,92.147 198.009,98.512 198.009,109.174L198.009,236.938C198.009,247.601 203.899,253.966 213.759,253.966L231.629,253.966C241.491,253.966 247.379,247.601 247.379,236.939L247.379,193.575L230.499,193.575L230.499,168.23L268.503,168.23L268.503,244.785C268.503,267.695 258.435,279.309 238.579,279.309L205.815,279.309L205.817,279.309Z"
|
||||
style="fill-rule: nonzero;" fill="#a4b4c596"
|
||||
/>
|
||||
<g mask="url(#textmask)" fill="#a4b4c596">
|
||||
<path
|
||||
id="circleboi"
|
||||
d="M52.637,76.985L18.344,100.266L21.88,141.563L2.335,178.114L24.655,213.037L24.334,254.481L60.327,275.033L79.305,311.88L120.727,313.353L154.653,337.161L192.017,319.211L233.12,324.528L257.861,291.272L296.727,276.871L303.177,235.932L330.903,205.122L317.587,165.871L327.817,125.706L297.788,97.137L288.18,56.819L248.314,45.477L221.07,14.243L180.501,22.728L141.862,7.731L109.881,34.098L68.701,38.776L52.636,76.985L52.637,76.985ZM216.761,280.742L233.774,257.052L261.937,246.736L266.17,217.095L286.412,194.913L276.395,166.806L284.078,137.84L262.106,117.706L255.471,88.592L226.577,81.044L207.143,58.451L177.947,65.218L150.167,54.321L127.357,73.853L97.594,77.15L86.396,104.972L61.469,121.707L64.448,151.446L50.067,177.785L66.541,202.627L66.007,232.209L78.356,239.26L92.195,246.791L105.376,272.936L118.069,273.388L118.261,273.589L135.534,273.821L159.847,291.067L186.628,277.524L216.245,281.435L216.761,280.742Z"
|
||||
/>
|
||||
</g>
|
||||
<mask id="textmask">
|
||||
<rect x="0" y="0" width="340" height="340" style="fill: white;" />
|
||||
<path
|
||||
d="M274.325,244.784C274.325,271.12 261.665,285.129 238.581,285.129L205.817,285.129C197.487,285.129 190.939,282.647 185.081,279.839C170.502,272.852 169.064,241.181 169.064,241.181L132.196,241.181L132.196,280.645C132.196,283.725 130.956,285.127 128.224,285.127L102.413,285.127C99.931,285.127 98.441,283.727 98.441,280.645L98.441,249.868L98.131,249.373L98.655,97.966L69.646,97.966C67.164,97.966 65.674,96.284 65.674,93.483L65.674,65.464C65.674,62.664 67.164,60.984 69.647,60.984L131.251,60.984L158.546,60.923C163.315,60.54 164.919,62.86 164.619,66.804L164.619,91.422L170.619,91.422C172.787,71.547 185.831,60.108 208.749,60.983L238.581,60.983C261.666,60.983 274.325,74.991 274.325,101.328L274.325,118.878L274.326,202.76L274.326,244.782L274.325,244.784Z"
|
||||
style="fill-rule: nonzero;"
|
||||
fill="black"
|
||||
/>
|
||||
</mask>
|
||||
</svg>
|
||||
<svg width="100vmin" height="100vmin" viewBox="0 0 340 340" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><style>@keyframes rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}</style><path id="text" d="M104.26 279.309V92.146H71.496V66.804h87.644v25.34l-32.764.002v187.163m79.441 0c-9.874 0-17.365-2.805-22.265-8.337-5.083-5.735-7.66-14.546-7.66-26.189V101.33c0-11.643 2.577-20.454 7.66-26.19 4.898-5.53 12.39-8.334 22.264-8.334h32.764c19.855 0 29.924 11.614 29.924 34.524v27.801h-21.125v-19.957c0-10.503-6.033-17.027-15.748-17.027h-17.872c-9.86 0-15.75 6.365-15.75 17.027v127.764c0 10.663 5.89 17.028 15.75 17.028h17.87c9.862 0 15.75-6.365 15.75-17.027v-43.364h-16.88V168.23h38.004v76.555c0 22.91-10.068 34.524-29.924 34.524h-32.764.002z" fill="#a4b4c596" fill-rule="nonzero"/><g mask="url(#textmask)" fill="#a4b4c596"><path d="M52.637 76.985l-34.293 23.281 3.536 41.297-19.545 36.551 22.32 34.923-.321 41.444 35.993 20.552 18.978 36.847 41.422 1.473 33.926 23.808 37.364-17.95 41.103 5.317 24.741-33.256 38.866-14.401 6.45-40.939 27.726-30.81-13.316-39.251 10.23-40.165-30.029-28.569-9.608-40.318-39.866-11.342-27.244-31.234-40.569 8.485-38.639-14.997-31.981 26.367-41.18 4.678-16.065 38.209h.001zm164.124 203.757l17.013-23.69 28.163-10.316 4.233-29.641 20.242-22.182-10.017-28.107 7.683-28.966-21.972-20.134-6.635-29.114-28.894-7.548-19.434-22.593-29.196 6.767-27.78-10.897-22.81 19.532-29.763 3.297-11.198 27.822-24.927 16.735 2.979 29.739-14.381 26.339 16.474 24.842-.534 29.582 12.349 7.051 13.839 7.531 13.181 26.145 12.693.452.192.201 17.273.232 24.313 17.246 26.781-13.543 29.617 3.911.516-.693z" style="transform-origin:50% 50%;animation-name:rotate;animation-duration:6s;animation-iteration-count:infinite;animation-timing-function:linear"/></g><mask id="textmask"><path fill="#fff" d="M0 0h340v340H0z"/><path d="M274.325 244.784c0 26.336-12.66 40.345-35.744 40.345h-32.764c-8.33 0-14.878-2.482-20.736-5.29-14.579-6.987-16.017-38.658-16.017-38.658h-36.868v39.464c0 3.08-1.24 4.482-3.972 4.482h-25.811c-2.482 0-3.972-1.4-3.972-4.482v-30.777l-.31-.495.524-151.407H69.646c-2.482 0-3.972-1.682-3.972-4.483V65.464c0-2.8 1.49-4.48 3.973-4.48h61.604l27.295-.061c4.769-.383 6.373 1.937 6.073 5.881v24.618h6c2.168-19.875 15.212-31.314 38.13-30.439h29.832c23.085 0 35.744 14.008 35.744 40.345v17.55l.001 83.882v42.022l-.001.002z" fill-rule="nonzero"/></mask></svg>
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 2.4 KiB |
1
assets/images/tab-icons/abduction.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M10.001-28.127a1.56 1.56 0 00-1.494.863l-4.71 9.968c-.2.405-.185.883.04 1.274 0 0 1.587 2.605 3.11 5.25C8.47-8.129 9.926-5.448 9.926-5.448c.228.395.639.649 1.094.678l10.99.869a1.538 1.538 0 001.473-.85l4.738-9.956a1.353 1.353 0 00-.04-1.28s-1.598-2.6-3.127-5.24c-1.53-2.641-2.99-5.32-2.99-5.32a1.34 1.34 0 00-1.075-.667l-10.988-.914zm10.13 3.557l-9.302-.4-4.297 8.256c.527.955 1.563 2.818 2.63 4.662a277.167 277.167 0 002.73 4.597l9.302.44 4.277-8.277a264.188 264.188 0 00-2.614-4.667 255.043 255.043 0 00-2.726-4.611zm-4.203 9.474l-.006-.118c0-.76.618-1.377 1.377-1.377h2.657a1.377 1.377 0 010 2.755h-1.28v1.32h1.28a1.378 1.378 0 010 2.754H17.3l-.141-.008-.137-.02-.133-.034-.02-.008a1.375 1.375 0 01-.947-1.308v-3.837l.006-.12zm-4.102-3.75h-.542a1.378 1.378 0 010-2.753h3.838a1.378 1.378 0 010 2.754h-.542v2.963a1.378 1.378 0 01-2.754 0v-2.963zM7.906 9.59c.293-3.12 2.411-5.878 5.147-6.546 3.62-.883 6.813.782 8.206 3.757 1.734.153 3.289.476 4.39.877 1.825.664 3.096 2.121 3.385 3.467.287 1.345-.227 3.594-2.357 5.251-2.033 1.582-5.11 3.904-10.735 4.685-3.934.545-7.657.16-10.079-.72-1.825-.665-2.602-2.185-2.89-3.53-.288-1.346.124-3.522 2.371-5.41a19.03 19.03 0 012.562-1.83zm7.186-4.866a4.295 4.295 0 00-1.226.09c-2.652.567-4.101 3.15-3.444 6.225.162.754.827 1.222 1.728 1.452a.74.74 0 00.248.122c.97.298 3.958.606 6.673-.72-3.737 1.952-10.019 2.722-10.953.313-.487.32-.937.649-1.35.978-.998.794-1.805 2.096-1.605 3.037.202.941 1.105 1.611 2.382 2.076 2.231.812 5.58.913 9.159.147 3.58-.766 6.592-2.23 8.296-3.884.975-.946 1.523-1.928 1.321-2.87-.2-.94-1.103-1.611-2.38-2.076a10.673 10.673 0 00-2.11-.509c-.118.72-.682 1.41-1.522 2.024.274-.615-.632-6.176-5.203-6.406h-.014z" fill="#fff"/><path d="M14.704 5.755s-1.927.178-2.952 1.645c-.44.629-.731 1.492-.614 2.688a.75.75 0 101.492-.146c-.073-.745.078-1.291.351-1.683.64-.916 1.853-1.009 1.853-1.009a.752.752 0 00.682-.812.752.752 0 00-.812-.683zM7.966 13.146s2.231 2.503 8.033.823c6.088-1.765 6.3-3.979 6.3-3.979s4.46.91 2.802 3.394c-1.229 1.84-7.796 5.678-15.5 4.49-6.957-1.073-1.635-4.728-1.635-4.728zM11.763 24.14l.435 2.433a1 1 0 001.97-.352l-.436-2.433a1 1 0 00-1.969.352zM12.656 29.135l.145.811a1 1 0 001.969-.352l-.145-.811a1 1 0 00-1.969.352z" fill="#fff"/><path d="M11.763 24.14l.435 2.433a1 1 0 001.97-.352l-.436-2.433a1 1 0 00-1.969.352zM18.937 27.856l.145.811a1 1 0 001.97-.352l-.146-.811a1 1 0 00-1.969.352zM18.045 22.86l.435 2.434a1 1 0 001.969-.352l-.435-2.433a1 1 0 00-1.97.352zM21.106 21.828l.474 2.651a1 1 0 001.969-.352l-.474-2.651a1 1 0 00-1.97.352zM14.965 23.567l.21 1.177a1 1 0 001.97-.352l-.21-1.177a1 1 0 00-1.97.352zM22.063 27.181l.21 1.177a1 1 0 001.97-.352l-.211-1.177a1 1 0 00-1.969.352zM15.65 27.405l.444 2.477a1.001 1.001 0 001.968-.352l-.442-2.477a1.001 1.001 0 00-1.97.352z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 2.9 KiB |
1
assets/images/tab-icons/access.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="5"><path d="M34.667 200c4.266-2.167 8.781-2.035 13.504 0 4.966-2.083 9.477-2.527 13.162 0v1.802c1.62 1.622 2.522-.604 2.43.064-.081.587-.974 2.426-2.43 3.514V208c-4.444 3.844-8.889 3.814-13.333 0-4.444 3.533-8.889 3.631-13.333 0v-3.185c-3.365-.685-5.785-3.485-5.267-3.893.214-.168 2.486 1.573 5.267.493V200z" fill="none" stroke="#fff" stroke-width="2.94" transform="matrix(.68295 -.09015 .094 .65491 -34.544 -105.945)"/><path d="M24.338 11.354a1 1 0 011.122-.382c.588.185 1.087.593 1.455 1.14.467.694.717 1.618.699 2.439-.026 1.195-.626 2.13-1.58 2.376a.967.967 0 01-.234.032c-1.529.026-13.945.618-19.716 2.798a.997.997 0 01-.888-.09s-2.905-1.9-1.877-4.84c.089-.252.274-.458.513-.573.235-.111.869-.255 1.799-.371 3.068-.384 9.97-.822 14.66-1.533 1.44-.218 2.66-.457 3.47-.736a4.5 4.5 0 00.577-.26zm.884 1.801a3.53 3.53 0 01-.349.173c-.872.378-2.41.716-4.281 1-4.127.625-9.955 1.042-13.415 1.395-.906.092-1.63.16-2.073.234-.072.81.43 1.414.798 1.742 5.907-2.016 17.32-2.66 19.616-2.733a.882.882 0 00.063-.164c.07-.312.032-.693-.078-1.046a2.018 2.018 0 00-.281-.6z" fill="#fff"/><path d="M5.793 14.951s-.137-2.57.835-5.182c.931-2.503 2.928-5.049 7.192-5.214 8.694-.338 10.19 7.553 10.19 7.553a1 1 0 001.967-.365S24.229 2.148 13.74 2.556C3.214 2.966 3.796 15.06 3.796 15.06a1.001 1.001 0 001.997-.109z" fill="#fff"/><ellipse cx="44.951" cy="213.534" rx="1.186" ry=".553" fill="none" stroke="#fff" stroke-width="1.82" transform="matrix(1.11473 -.09793 .10213 1.06897 -58.862 -199.662)"/><ellipse cx="44.951" cy="213.534" rx="1.186" ry=".553" fill="none" stroke="#fff" stroke-width="1.82" transform="matrix(1.11473 -.09793 .10213 1.06897 -49.907 -200.868)"/><path d="M7.126 11.972s1.968.129 4.526.137c.58.002 1.184-.014 1.803-.042.397-.018.798-.041 1.198-.081.4-.039.797-.094 1.191-.153a44.346 44.346 0 001.78-.306c2.176-.421 3.928-.849 4.447-1.014a.318.318 0 00-.124-.623c-.533.045-2.305-.009-4.483 0-.581.002-1.183.013-1.8.037-.396.015-.796.035-1.195.069-.4.035-.798.085-1.19.139-.613.084-1.209.177-1.778.282-2.514.462-4.429.922-4.429.922a.317.317 0 00.054.633zM8.73 9.434s1.316.036 3.012.002c.386-.008.79-.024 1.201-.048.265-.015.532-.032.8-.058.265-.026.531-.06.794-.096.408-.055.808-.117 1.19-.181 1.448-.245 2.624-.493 2.97-.592a.159.159 0 10-.062-.312c-.353.04-1.54.045-2.988.085-.386.01-.789.025-1.2.047-.264.014-.53.03-.797.053a36.187 36.187 0 00-1.983.256 83.35 83.35 0 00-2.964.527.159.159 0 10.027.317z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 2.5 KiB |
1
assets/images/tab-icons/ai.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"><path d="M41.523-19.66a5.6 5.6 0 011.905-.918 5.662 5.662 0 012.197-.15L44.49-18.13c-.128.016-.257.041-.384.075l-.28.092-2.302-1.697zm-3.384-2.494a9.342 9.342 0 014.258-2.477 9.342 9.342 0 014.927.016l-1.063 2.433a6.682 6.682 0 00-3.187.075 6.682 6.682 0 00-2.798 1.528l-2.137-1.575zm-3.472-2.559a13.025 13.025 0 016.59-4.171 13.03 13.03 0 017.795.317l-1.05 2.4a10.437 10.437 0 00-6.068-.194 10.437 10.437 0 00-5.159 3.202l-2.108-1.554z" fill="#fff"/><path d="M24.878 11.56a4.44 4.44 0 00-4.439-4.44H11.56a4.44 4.44 0 00-4.439 4.44v8.879a4.44 4.44 0 004.44 4.44h8.878a4.44 4.44 0 004.44-4.44V11.56zM13.04 7.12V4.162M18.959 7.12V4.162M13.04 27.838v-2.96M18.959 27.838v-2.96M24.878 13.04h2.96M24.878 18.959h2.96M4.161 13.04h2.96M4.161 18.959h2.96" fill="none" stroke="#fff" stroke-width="2.9965410000000006"/><path d="M11.626 20.298V14.04c0-1.208.979-2.187 2.186-2.187h.001c1.208 0 2.187.98 2.187 2.187v6.196M20.437 20.298v-8.444M12.176 17.055H16" fill="none" stroke="#fff" stroke-width="2.9965410000000006"/></svg>
|
After Width: | Height: | Size: 1.2 KiB |
1
assets/images/tab-icons/aimod.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"><path d="M41.523-19.66a5.6 5.6 0 011.905-.918 5.662 5.662 0 012.197-.15L44.49-18.13c-.128.016-.257.041-.384.075l-.28.092-2.302-1.697zm-3.384-2.494a9.342 9.342 0 014.258-2.477 9.342 9.342 0 014.927.016l-1.063 2.433a6.682 6.682 0 00-3.187.075 6.682 6.682 0 00-2.798 1.528l-2.137-1.575zm-3.472-2.559a13.025 13.025 0 016.59-4.171 13.03 13.03 0 017.795.317l-1.05 2.4a10.437 10.437 0 00-6.068-.194 10.437 10.437 0 00-5.159 3.202l-2.108-1.554z" fill="#fff"/><path d="M24.878 11.56a4.44 4.44 0 00-4.439-4.44H11.56a4.44 4.44 0 00-4.439 4.44v8.879a4.44 4.44 0 004.44 4.44h8.878a4.44 4.44 0 004.44-4.44V11.56z" fill="none" stroke="#fff" stroke-width="1.9976940000000003"/><path d="M77.333 104v-2.667" fill="none" stroke="#fff" stroke-width="2.97" transform="matrix(1.10983 0 0 .89721 -72.787 -86.756)"/><path d="M77.333 104v-2.667" fill="none" stroke="#fff" stroke-width="2.97" transform="matrix(1.10983 0 0 .89721 -66.868 -86.756)"/><path d="M77.333 104v-2.667" fill="none" stroke="#fff" stroke-width="3.13" transform="matrix(1.10983 0 0 .77909 -72.787 -53.187)"/><path d="M77.333 104v-2.667" fill="none" stroke="#fff" stroke-width="3.13" transform="matrix(1.10983 0 0 .77909 -66.868 -53.187)"/><path d="M77.333 104v-2.667" fill="none" stroke="#fff" stroke-width="3" transform="matrix(0 1.10983 -.87358 0 116.362 -72.787)"/><path d="M77.333 104v-2.667" fill="none" stroke="#fff" stroke-width="3" transform="matrix(0 1.10983 -.87358 0 116.362 -66.868)"/><path d="M77.333 104v-2.667" fill="none" stroke="#fff" stroke-width="3.07" transform="matrix(0 1.10983 -.82634 0 90.1 -72.787)"/><path d="M77.333 104v-2.667" fill="none" stroke="#fff" stroke-width="3.07" transform="matrix(0 1.10983 -.82634 0 90.1 -66.868)"/><path d="M11.626 20.298V14.04c0-1.208.979-2.187 2.186-2.187h.001c1.208 0 2.187.98 2.187 2.187v6.196M20.437 20.298v-8.444M12.176 17.055H16" fill="none" stroke="#fff" stroke-width="2.9965410000000006"/><g><path d="M37.451 11.926h-2.785a1.5 1.5 0 000 3h2.785a1.5 1.5 0 000-3z" fill="#fff"/></g></svg>
|
After Width: | Height: | Size: 2.1 KiB |
1
assets/images/tab-icons/atmos.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"><path d="M41.523 12.34a5.6 5.6 0 011.905-.918 5.662 5.662 0 012.197-.15L44.49 13.87c-.128.016-.257.041-.384.075l-.28.092-2.302-1.697zm-3.384-2.494a9.342 9.342 0 014.258-2.477 9.342 9.342 0 014.927.016L46.26 9.818a6.682 6.682 0 00-3.187.075 6.682 6.682 0 00-2.798 1.528l-2.137-1.575zm-3.472-2.559a13.025 13.025 0 016.59-4.171 13.03 13.03 0 017.795.317l-1.05 2.4a10.437 10.437 0 00-6.068-.194 10.437 10.437 0 00-5.159 3.202l-2.108-1.554zM11.23 4.312c0-.908-.737-1.645-1.644-1.645h-3.29c-.907 0-1.644.737-1.644 1.645v6.16a2.668 2.668 0 00-2.046 2.595v13.03a2.668 2.668 0 002.667 2.667h5.337a2.668 2.668 0 002.667-2.667v-13.03c0-1.26-.874-2.316-2.047-2.595v-6.16zM9.356 17.475c0-.363.294-.656.655-.656h1.313c.361 0 .655.293.655.656v6.684a.656.656 0 01-.655.656H10.01a.656.656 0 01-.655-.656v-6.684zm.26.469c0-.19.154-.344.344-.344h.688c.19 0 .344.155.344.344v5.746c0 .19-.155.344-.344.344H9.96a.345.345 0 01-.344-.344v-5.746zm1.614-5.591c0 .907-.737 1.643-1.644 1.643h-3.29a1.645 1.645 0 01-1.644-1.643v-1.128c0 .907.737 1.645 1.645 1.645h3.289c.907 0 1.644-.738 1.644-1.645v1.128z" fill="#fff"/><path d="M82.667 87.171h3.578c1.492 0 2.701.782 2.701 1.747v.002c0 .463-.284.907-.791 1.235-.506.328-1.194.512-1.91.512h-.146" fill="none" stroke="#fff" stroke-width="1.5" transform="matrix(1.0224 0 0 -1.581 -68.817 157.545)"/><path d="M86.443 87.171h.771c.459 0 .9.18 1.225.5.325.32.507.754.507 1.206v.083c0 .453-.182.887-.507 1.207-.325.32-.766.5-1.225.5h-1.115" fill="none" stroke="#fff" stroke-width="1.21" transform="matrix(1.64283 0 0 1.66784 -120.063 -125.66)"/><path d="M82.667 87.171h5.007c.703 0 1.272.782 1.272 1.747v.002c0 .965-.569 1.747-1.272 1.747h-.162" fill="none" stroke="#fff" stroke-width="1.05" transform="matrix(2.1708 0 0 -1.581 -163.751 157.545)"/></svg>
|
After Width: | Height: | Size: 1.9 KiB |
1
assets/images/tab-icons/auxbase.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="5"><circle cx="72" cy="152" r="2.667" fill="none" stroke="#fff" stroke-width="2" transform="translate(-64 -126.455)"/><path d="M93.333 146.667H66.667h0c0 1.473 1.943 2.666 4.341 2.666h17.984c2.398 0 4.341-1.193 4.341-2.666 0 0 0 0 0 0z" fill="none" stroke="#fff" stroke-width="1.62" transform="matrix(.9131 0 0 1.48665 -57.048 -202.043)"/><path fill="none" stroke="#fff" stroke-width="1.78" d="M66.667 146.667h26.667v2.667H66.667z" transform="matrix(.55622 0 0 1.48665 -28.498 -209.79)"/><path fill="none" stroke="#fff" stroke-width="1.78" d="M66.667 146.667h26.667v2.667H66.667z" transform="matrix(.55622 0 0 1.48665 -28.498 -213.826)"/><circle cx="72" cy="152" r="2.667" fill="none" stroke="#fff" stroke-width="2" transform="translate(-48 -126.455)"/></svg>
|
After Width: | Height: | Size: 925 B |
1
assets/images/tab-icons/chemistry.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5"><path d="M12.072 14.416V4.121a1.455 1.455 0 011.454-1.454h5.09a1.455 1.455 0 011.453 1.454v10.295l5.722 10.449a3.018 3.018 0 01-2.647 4.468H8.997a3.018 3.018 0 01-2.648-4.468l5.723-10.449zm6.027-9.779h-4.057v10.031a.99.99 0 01-.121.473l-5.844 10.67a1.048 1.048 0 00.92 1.553l14.147-.001a1.047 1.047 0 00.92-1.553c-2.207-4.027-5.844-10.669-5.844-10.669a.979.979 0 01-.12-.473V4.637zm-2.604 13.402h3.489l3.926 7.628a.556.556 0 01-.492.807H9.723a.554.554 0 01-.492-.807l3.926-7.628h1.23l-3.107 6.053a.493.493 0 00.876.45l3.339-6.503z" fill="#fff"/><path d="M59.485 10.232c0-3.183-2.446-5.767-5.46-5.767h-10.92c-3.014 0-5.461 2.584-5.461 5.767v11.536c0 3.183 2.447 5.767 5.461 5.767h10.92c3.014 0 5.46-2.584 5.46-5.767V10.232z" fill="none" stroke="#fff" stroke-width="2.97" transform="rotate(45 41.436 21.869) scale(.86333 .81734)"/></svg>
|
After Width: | Height: | Size: 1,006 B |
1
assets/images/tab-icons/combat.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M10.557 8.949l4.855-5.534c.202-.229.492-.355.794-.344l3.978.157c.495.02.925.356 1.073.841l.655 2.134 1.274-.189c1.06-.158 2.09.433 2.516 1.441l.906 2.146c.05.115.093.231.13.349l.16.032c.356.07.65.33.768.682l1.077 3.182c.236.693.233 1.442 0 2.127l.509 1.875c.29 1.075-.215 2.209-1.197 2.686l-3.82 1.856-2.416 2.754a5.81 5.81 0 01-3.322 1.894l-5.172.945a3.775 3.775 0 00-1.841.905l-.047.042-1.336-1.571.046-.042a5.792 5.792 0 012.821-1.387l5.172-.944a3.796 3.796 0 002.17-1.237l.696-.795a2.75 2.75 0 01-.884-.587l-.002-.001a2.997 2.997 0 01-.805-2.797l-.386-.197a3.395 3.395 0 01-4.061.422l-3.102-1.863-.585 1.39c-.222.53-.82.773-1.335.545a1.054 1.054 0 01-.53-1.37L10 16.87l-.14-.084a1.06 1.06 0 01-.364-1.427 1.002 1.002 0 011.39-.373l5.008 3.008a1.404 1.404 0 001.764-.262c.523-.57.537-1.453.033-2.04l-2.746-3.203a3.239 3.239 0 00-2.01-1.106l-3.205-.447a1.376 1.376 0 00-1.41.741l-2.124 4.096a2.01 2.01 0 00-.226.927v4.831a4.13 4.13 0 01-.825 2.481l-.643.854a.999.999 0 01-1.425.188 1.061 1.061 0 01-.183-1.462l.643-.854c.26-.346.401-.77.401-1.207v-4.83c0-.666.16-1.32.465-1.908.5-.967 1.446-2.79 2.123-4.096.673-1.295 2.06-2.024 3.478-1.826l.553.077zm16.58 8.881a3.049 3.049 0 01-.589.223l-4.886 1.3-.262.43a.88.88 0 00.13 1.08v.002a.713.713 0 00.815.136l4.84-2.352a.21.21 0 00.11-.243l-.157-.576zm-7.154-.248l.084.042 5.971-1.59a1.14 1.14 0 00.715-.576c.149-.285.174-.622.07-.928l-.456-1.353a3.818 3.818 0 01-1.488 1.429l-4.82 2.575a3.824 3.824 0 01-.076.401zm-.29-2.556l4.247-2.27c.821-.439 1.173-1.455.804-2.327l-.906-2.145a.337.337 0 00-.36-.206l-.949.14.277.902a2.485 2.485 0 01-.856 2.701l-2.708 2.061a.939.939 0 01-.272.145l.247.289c.19.22.349.46.476.71zm-6.7-5.738l.216.03a5.258 5.258 0 013.262 1.795l.842.983.956-.07 2.471-1.88a.368.368 0 00.127-.4l-1.366-4.458-2.898-.115-3.61 4.115z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 1.9 KiB |
1
assets/images/tab-icons/construction.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M-17.016-24.02s.147 3.67.147 7.342c0 3.673-.147 7.343-.147 7.343a1 1 0 002 0s-.146-3.67-.146-7.343c0-3.672.146-7.342.146-7.342a1 1 0 00-2 0zM22.438 27.319l-10.83-12.855a6.123 6.123 0 01-8.753-6.441l.01-.058a1.19 1.19 0 01.179-.465.12.12 0 01.095-.056.126.126 0 01.071.017l4.045 4.044c.273.274.671.38 1.044.28l2.091-.56c.373-.1.665-.392.765-.765l.56-2.091c.1-.373-.006-.772-.279-1.045L7.389 3.277a.114.114 0 01-.015-.067.124.124 0 01.056-.097c.171-.113.332-.155.465-.179l.058-.01a6.123 6.123 0 016.441 8.755l12.854 10.83a3.488 3.488 0 01.601 5.412 3.487 3.487 0 01-5.41-.602zm1.497-3.312a2.05 2.05 0 112.899 2.898 2.05 2.05 0 01-2.9-2.898zm-1.419.155s-9.185-10.578-9.411-10.387a.535.535 0 00-.067.752l8.659 10.322a.534.534 0 10.82-.687zM3.296 8.698c.047-.14.661 1.08.877 1.633.432 1.108 1.281 2.506 2.785 3.17 1.004.441 2.296.55 3.942.043a.267.267 0 11.157.51c-1.802.556-3.216.42-4.314-.065-1.65-.728-2.595-2.248-3.07-3.464-.236-.61-.355-1.14-.39-1.454a.993.993 0 01.013-.373zM50.865 3.288a.517.517 0 00-.916-.401L39.305 16.396a.515.515 0 00.377.834l7.479.406a.516.516 0 01.465.665c-.55 1.813-2.16 7.12-3.136 10.343a.515.515 0 00.898.47l11.347-14.243a.514.514 0 00-.395-.838c-1.746-.03-5.197-.093-6.58-.118a.515.515 0 01-.5-.598c.282-1.769 1.137-7.109 1.605-10.03z" fill="#fff"/><path d="M52.561 5.261c4.175 1.776 7.106 5.918 7.106 10.739 0 6.163-4.79 11.217-10.848 11.635l1.841-2.348c4.045-1.15 7.007-4.875 7.007-9.287a9.643 9.643 0 00-5.435-8.68l.329-2.059zm-6.109-.822l-2.045 2.593A9.658 9.658 0 0038.333 16a9.644 9.644 0 005.33 8.629l-.59 1.945c-3.98-1.856-6.74-5.895-6.74-10.574 0-5.914 4.411-10.807 10.119-11.561zm.026 21.096l.431.066-.728.914.297-.98zm2.869-19.097l-.359-.055-.501-.025 1.096-1.39-.236 1.47zM53.552-3.945l-1.555 1.572a.887.887 0 01-1.264 0L37.182-16.068l-.42.425a.887.887 0 01-1.264 0l-1.075-1.086a.91.91 0 010-1.278L46.04-29.746a.887.887 0 011.264 0l1.074 1.086a.91.91 0 010 1.277l-.42.425 13.551 13.695a.91.91 0 010 1.277l-1.88 1.901-1.571-1.587a.356.356 0 00-.124-.094l1.22-1.233c.206-.208.786-.049.58-.258a.523.523 0 00-.747 0l-8.093 8.18a.538.538 0 00-.001.755c.207.208-.038-.29.168-.497l.826-.835c.014.033.045.07.095.122l1.571 1.587zm-16.854-12.72l10.703-10.817c.262-.264.385-.568.276-.679-.109-.11-.262.165-.523.43L36.45-16.915c-.26.264-.533.419-.424.529.109.11.41-.016.671-.28zM50.272-5.394l8.247-8.335L46.693-25.68l-8.247 8.335L50.272-5.394zm-8.266-17.934l2.495-2.52a.537.537 0 000-.754.523.523 0 00-.747 0l-2.494 2.52a.537.537 0 000 .754c.207.209.54.209.746 0zM55.784-9.594l1.43-1.446c.015.034.046.071.096.122l1.57 1.587-1.402 1.418-1.57-1.587a.356.356 0 00-.124-.094zm-3.18 3.214l2.462-2.487c.013.033.044.07.095.122l1.57 1.587L54.3-4.7l-1.57-1.587a.353.353 0 00-.124-.093zM37.986-19.264l2.494-2.52a.538.538 0 000-.754.524.524 0 00-.747 0l-2.493 2.52a.538.538 0 000 .755c.206.208.54.208.746 0z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 2.9 KiB |
1
assets/images/tab-icons/crate.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="5"><path fill="none" stroke="#fff" stroke-width="1.54" d="M37.333 133.333H56V152H37.333z" transform="matrix(1.29531 0 0 1.30772 -44.448 -170.568)"/><path fill="none" stroke="#fff" stroke-width="2.48" d="M37.333 133.333H56V152H37.333z" transform="matrix(.801 0 0 .80867 -21.38 -99.37)"/><path d="M3.91 28.205l4.658-4.657M23.431 8.684l4.658-4.657M3.911 4.026l4.657 4.658M23.432 23.547l4.657 4.658" fill="none" stroke="#fff" stroke-width="2"/><path d="M12.906 8.683L23.43 19.21M8.569 13.02l10.524 10.527" fill="none" stroke="#fff" stroke-width="1.9887032"/><path d="M8.569 18.666h5.262" fill="none" stroke="#fff" stroke-width="1.997475"/><path d="M17.64 13.02l5.814.002" fill="none" stroke="#fff" stroke-width="2.0037063"/></svg>
|
After Width: | Height: | Size: 892 B |
1
assets/images/tab-icons/critter.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M-5.412-18.966a1 1 0 00-1.225-.707l-17.423 4.668c-.534.144-.85.692-.708 1.225l2.784 10.39a1 1 0 001.225.707l17.423-4.669a1 1 0 00.707-1.225l-2.783-10.39zm-13.131 13.05l3.29-.88c.496-.134.8-.606.68-1.055-.12-.449-.62-.705-1.117-.573l-3.29.882c-.496.133-.801.605-.68 1.054.12.449.62.705 1.117.573zm-1.142-2.915l3.29-.881c.496-.134.8-.606.68-1.055-.12-.449-.62-.705-1.117-.572l-3.29.881c-.496.134-.801.605-.68 1.054.12.449.62.706 1.117.573zm8.76-6.528a3.366 3.366 0 00-2.38 4.12A3.367 3.367 0 00-9.182-8.86a3.367 3.367 0 002.378-4.12 3.366 3.366 0 00-4.12-2.378zm-9.817 3.57l3.29-.882c.496-.132.8-.606.68-1.054-.12-.45-.62-.705-1.116-.573l-3.29.882c-.496.133-.802.605-.68 1.054.119.45.62.706 1.116.572zm10.27-1.878a1.614 1.614 0 01.835 3.116 1.614 1.614 0 01-.835-3.116zM8.687 22.754c-.976-1.686-1.628-3.477-1.628-5.085 0-.61.06-1.178.177-1.704a6.709 6.709 0 01-5.489-6.594c0-3.7 3.004-6.704 6.705-6.704a6.707 6.707 0 016.584 7.969 15.883 15.883 0 011.927 0 6.707 6.707 0 016.585-7.969c3.7 0 6.704 3.003 6.704 6.704a6.709 6.709 0 01-5.49 6.594c.117.526.178 1.094.178 1.704 0 1.61-.654 3.405-1.632 5.093l.69-.076c1.827-.19 3.445-.286 3.445-.286a.72.72 0 11.154 1.43s-1.6.25-3.428.455c-.66.074-1.348.142-1.999.203-.102.139-.207.276-.312.41a89.736 89.736 0 015.64 1.426.719.719 0 11-.336 1.4s-1.591-.304-3.38-.727a133.94 133.94 0 01-3.06-.768c-1.691 1.808-3.519 3.049-4.723 3.049-1.201 0-3.024-1.236-4.71-3.036-.898.236-1.985.513-3.007.755-1.79.423-3.381.727-3.381.727a.72.72 0 01-.336-1.4s1.555-.453 3.34-.89a112.56 112.56 0 012.245-.523c-.11-.14-.219-.284-.326-.43-.63-.058-1.294-.126-1.93-.196-1.827-.204-3.428-.454-3.428-.454a.72.72 0 11.154-1.43s1.618.096 3.446.285l.62.068zm7.312.361c.767 0 1.388.33 1.388 1.096 0 .767-.955 1.802-1.388 1.802-.433 0-1.387-1.035-1.387-1.802 0-.765.621-1.096 1.387-1.096zm-3.693-6.798a2.008 2.008 0 010 4.015 2.008 2.008 0 010-4.015zm7.387 0a2.008 2.008 0 110 4.015 2.008 2.008 0 010-4.015zm-6.096-5.525a5.342 5.342 0 00-5.146-6.76A5.342 5.342 0 003.113 9.37a5.342 5.342 0 004.567 5.283c1.02-2.183 3.212-3.423 5.918-3.862zm10.723 3.862a5.342 5.342 0 004.567-5.283 5.342 5.342 0 00-5.34-5.34 5.342 5.342 0 00-5.146 6.76c2.708.44 4.898 1.68 5.919 3.863zM7.281 13.61a4.331 4.331 0 01-3.158-4.166 4.33 4.33 0 014.329-4.327 4.33 4.33 0 014.272 5.016c-2.384.512-4.338 1.64-5.443 3.477zm11.994-3.477a4.33 4.33 0 014.273-5.017 4.33 4.33 0 014.327 4.328 4.331 4.331 0 01-3.157 4.166c-1.106-1.837-3.059-2.965-5.443-3.477zM-15.69 40.852c3.02-1.958 7.309-4.454 9.655-5.444.934-.394 1.653-.536 2-.495a1.22 1.22 0 011.112 1.197c.012.324-.156 1.01-.548 1.91-1.01 2.323-3.455 6.597-5.382 9.621l.046 4.527c.002.213-.061.423-.18.6l-3.329 4.923a1.052 1.052 0 01-1.91-.763l.79-4.75c-.319.08-.646.129-.976.147-1.565-2.35-3.54-4.314-5.914-5.907.018-.332.067-.661.148-.981l-4.75.79a1.053 1.053 0 01-.763-1.912l4.923-3.328c.177-.119.386-.182.6-.18l4.479.045zm2.29 8.66l-4.014-4.016c-.295-.294-1.146-.407-1.065 0 .015.075.028.298.234.388 1.407.609 3.902 3.387 4.483 4.477.112.21.318.225.362.215.404-.098.294-.77 0-1.065zm5.527-9.639a2.437 2.437 0 01-3.446 3.445 2.437 2.437 0 013.446-3.445zm-.747.747a1.38 1.38 0 11-1.953 1.95 1.38 1.38 0 011.953-1.95zM23.471 48c-1.738 7.984-7.222 9.968-7.472 9.968v-9.063a.904.904 0 01.904-.904h6.568zM16 38.834v8.264a.904.904 0 01-.904.904H8.553c-.341-1.543-.545-3.31-.553-5.333 2.052 0 3.975-.653 8-3.835z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 3.4 KiB |
1
assets/images/tab-icons/cult.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M16.011 2.557c-7.354 0-13.326 5.956-13.326 13.292 0 7.336 5.972 13.292 13.326 13.292 7.355 0 13.326-5.956 13.326-13.292 0-7.336-5.97-13.292-13.326-13.292zm0 1.55c6.497 0 11.771 5.261 11.771 11.742 0 6.48-5.274 11.74-11.77 11.74-6.497 0-11.771-5.26-11.771-11.74S9.515 4.108 16.01 4.108z" fill="#fff"/><path d="M5.54 18.463l2.462.686c.08.192.166.381.26.566l-.454-.035-.694 1.094 1.461-.487.036.06.046.073-.039-.002-.694 1.093 1.21-.402c.073.093.146.185.222.275l-.342 1.347.956-.687.064.062.11.101-.32 1.26.988-.707.02.015.152.109.162 2.566c-.29-.144-.57-.3-.843-.47l.567-1.163-1.358.625c-.3-.225-.589-.466-.862-.72l-.087-.148.208-1.502-.919.828-.163-.193-.107-.132.872-.672-1.398-.04a10.702 10.702 0 01-.54-.892l-.022-.31.853-1.254-1.38.387a10.524 10.524 0 01-.427-1.331zm18.116 4.841c-.325.336-.67.649-1.034.938l-.465-.572-.003.924c-.469.332-.964.627-1.48.88l-.983-.631.29.942c-.125.051-.251.1-.378.146l-.199-.872-.557 1.116c-.362.103-.73.187-1.105.25l-.288-.108-.78-1.301-.251 1.552c-.372.017-.748.014-1.124-.008l1.427-2.142c.29-.026.577-.068.862-.123l-.082.143.706 1.087.157-1.422.167-.05.005-.003.682 1.049.15-1.362.126-.056.023-.01h.086l1.18.951-.267-1.377h.098l1.18.952-.28-1.44 2.137.547zm-2.494-.619l.018-.014.029.007-.047.007zM10.168 6.889l.1 2.388-1.117-.425.622 1.08c-.072.075-.144.15-.215.228l-.97-.37.523.908c-.114.148-.222.3-.327.457l-1.178-.057.78.721c-.05.09-.097.182-.143.275l-1.2-.057.872.806-.074.201-.03.092-2.434.963c.054-.327.126-.65.213-.975l.06-.215.114.286 1.289.139-1.155-1.172c.091-.245.19-.484.298-.72l.3-.361 1.483-.315-1.098-.587.142-.22.092-.132.916.584-.413-1.255c.291-.357.603-.692.934-1.007l1.45.37-.718-1.002c.284-.224.579-.434.884-.628zm15.282 4.084c.172.33.326.669.463 1.016l-.93.41 1.19.33c.145.461.258.934.339 1.414l-1.054.944 1.165-.036c.01.139.018.278.025.418l-1.058-.048 1.055.946c-.014.292-.038.586-.076.879l-.285.389-1.461.406 1.446.662.016-.032c-.086.319-.186.63-.3.935L24.36 17.56l.02-.095.023-.134.335.325 1.235-.398-1.483-.577.007-.072.008-.116.082.08 1.235-.399-1.298-.504-.004-.12v-.045l.019-.073 1.227-.891-1.363-.095-.017-.092.002-.005 1.227-.892-1.475-.103-.016-.053-.052-.156 1.379-2.171zm-6.81-5.425l.073.019c.126.033.252.07.377.11l-.033.003-.466 1.209 1.498-.852.167.07.102.047.554.778-.062 1.219-.573.212.115-1.107-.86.856-.134-.061-.166-.07.105-1.024-.781.777c-.13-.04-.26-.08-.394-.116l-.073-.018-.273-1.25-.57 1.076-.157-.023-.033-.004-.294-1.349-.676 1.277h-.032l-1.668-2.012c.341-.05.686-.084 1.033-.1l-.006.004.12 1.29.874-1.297c.256.011.512.031.77.062l.454.243.601 1.391.409-1.36zm2.63 1.07c.465.265.904.563 1.316.889l-1.338.496.672-.72-.65-.665zm-5.336 7.638c-.946 0-1.714.766-1.714 1.71 0 .943.768 1.708 1.714 1.708s1.714-.765 1.714-1.709c0-.943-.768-1.709-1.714-1.709zm0 2.068a.36.36 0 110-.718.36.36 0 010 .718zm-11.171.896l20.24-7.812c.4-.153.6-.603.444-1.002a.78.78 0 00-1.006-.444L4.202 15.775a.774.774 0 00-.444 1.002c.154.4.605.598 1.005.444z" fill="#fff"/><path d="M13.933 27.04L12.479 4.89a.776.776 0 00-.827-.723.776.776 0 00-.725.824l1.454 22.151a.776.776 0 001.552-.102z" fill="#fff"/><path d="M26.538 21.914L12.306 4.452a.78.78 0 00-1.094-.113.773.773 0 00-.113 1.09l14.233 17.463c.27.332.76.383 1.093.112a.773.773 0 00.113-1.09z" fill="#fff"/><path d="M4.28 17.384l21.453 5.768a.774.774 0 10.404-1.497L4.685 15.887a.776.776 0 10-.404 1.497z" fill="#fff"/><path d="M13.81 27.51L25.96 8.668a.773.773 0 00-.233-1.07.778.778 0 00-1.074.232l-12.15 18.843a.775.775 0 00.233 1.071.779.779 0 001.074-.232z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 3.6 KiB |
1
assets/images/tab-icons/food.svg
Normal file
After Width: | Height: | Size: 4.9 KiB |
1
assets/images/tab-icons/genetics.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5"><path d="M15.789 8.175c5.448-2.716 5.88-3.96 5.876-4.41l-.005-.047.002.022v-.019c-.034-.517.399-.978 1-1.046.63-.071 1.21.316 1.291.863 0 0 .662 2.228-5.931 5.803 5.476 3.073 5.947 5.724 5.947 6.534l.013.046s.66 3.078-5.901 6.77c6.53 3.557 5.872 5.771 5.872 5.771-.082.547-.661.934-1.291.863-.63-.071-1.076-.573-1.002-1.043 0 0 .003-.016.005-.047.004-.448-.424-1.686-5.823-4.383-5.4 2.697-5.829 3.935-5.823 4.383l.004.047-.003-.022.003.019c.033.517-.4.978-1.002 1.046-.63.071-1.208-.316-1.29-.863 0 0-.764-2.569 7.512-6.618 5.619-2.734 6.376-4.939 6.444-5.587a.653.653 0 01-.027-.308s.003-.016.005-.047c.004-.465-.458-2.78-6.45-5.696l.005-.009C7.228 6.225 7.974 3.712 7.974 3.712c.082-.547.66-.934 1.29-.863.63.071 1.076.573 1.003 1.043 0 0-.004.016-.005.047-.004.44.408 1.64 5.527 4.236zm-3.42 1.942l.163.082-.005.007c.738.359 1.392.709 1.97 1.047-3.98 2.324-4.453 4.108-4.476 4.599a.607.607 0 01.002.199s-.004.016-.004.047c-.004.41.354 2.259 4.551 4.689-.551.327-1.173.664-1.874 1.007h-.04l-.24.12C7.832 18.986 7.68 16.572 7.718 16c-.038-.57.113-2.969 4.652-5.883z" fill="#fff"/><path d="M83.785 48H76.31" fill="none" stroke="#fff" stroke-width="2.32" transform="matrix(.70074 0 0 1 -40.045 -32)"/><path d="M78.869 37.333h2.468" fill="none" stroke="#fff" stroke-width="2.46" transform="matrix(.56923 0 0 1 -29.597 -32)"/><path d="M78.869 37.333h2.468" fill="none" stroke="#fff" stroke-width="1.84" transform="matrix(.56923 0 0 1 -29.597 -18.667)"/><path d="M78.869 37.333h2.468" fill="none" stroke="#fff" stroke-width="2.46" transform="matrix(.56923 0 0 1 -29.597 -10.667)"/><path d="M78.869 37.333h2.468" fill="none" stroke="#fff" stroke-width="1.84" transform="matrix(.56923 0 0 1 -29.597 -24)"/><path d="M43.793 18.242l1.761.958c.061.034.106.09.125.158a.262.262 0 01-.026.2c-.663 1.191-.12 2.684.122 2.944-1.347 2.65-5.186 6.26-9.254 6.6a.275.275 0 01-.256-.407c.87-1.58 5.41-9.839 6.076-11.05a.171.171 0 01.23-.068l.49.267-5.485 10.086s1.25-.56 1.383-.802l4.834-8.886zm1.502-2.76l2.808 1.528a.577.577 0 01.23.78l-.718 1.323a.577.577 0 01-.78.23l-2.81-1.528 1.27-2.334zm6.464-11.884l3.331.05a.574.574 0 01.497.851c-1.237 2.264-4.67 8.549-6.423 11.768a.575.575 0 01-.781.23l-2.81-1.528L51.76 3.598zm-8.465 13.82l-.134-.073a.579.579 0 01-.23-.78l.72-1.324a.576.576 0 01.78-.23l.134.072-1.27 2.335zm1.549-2.847l-.132-.07a.577.577 0 01-.23-.783l5.407-9.842a.578.578 0 01.514-.299l.417.006-5.976 10.988zM41.523 44.34a5.6 5.6 0 011.905-.918 5.662 5.662 0 012.197-.15L44.49 45.87c-.128.016-.257.041-.384.075l-.28.092-2.302-1.697zm-3.384-2.494a9.342 9.342 0 014.258-2.477 9.342 9.342 0 014.927.016l-1.063 2.433a6.682 6.682 0 00-3.187.075 6.682 6.682 0 00-2.798 1.528l-2.137-1.575zm-3.472-2.559a13.025 13.025 0 016.59-4.171 13.03 13.03 0 017.795.317l-1.05 2.4a10.437 10.437 0 00-6.068-.194 10.437 10.437 0 00-5.159 3.202l-2.108-1.554z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 3 KiB |
1
assets/images/tab-icons/ghetto.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M-17.016 7.98s.147 3.67.147 7.342c0 3.673-.147 7.343-.147 7.343a1 1 0 002 0s-.146-3.67-.146-7.343c0-3.672.146-7.342.146-7.342a1 1 0 00-2 0zM9.21 12.766C7.28 9.61 5.68 7.308 5.68 7.308a3.191 3.191 0 011.413-4.296 3.22 3.22 0 014.317 1.406s1.016 2.914 2.556 6.575c.157.37.317.75.484 1.133a33.246 33.246 0 011.55-.033c6.967 0 12.612 1.916 12.625 4.277a6.011 6.011 0 01-.26 1.817c-.683 4.793-4.75 11.209-12.296 11.146-8.288-.068-12.535-7.249-12.687-12.669l-.008-.268a.651.651 0 01.014-.2c.187-1.441 2.46-2.699 5.82-3.43zm.797 1.317c-2.274.594-3.728 1.509-3.619 2.513.263 2.416 4.93 4.359 9.612 4.448 3.725.071 9.847-1.691 9.768-4.448-.051-1.775-4.342-3.22-9.69-3.22-.36 0-.717.007-1.067.02.28.621.578 1.246.893 1.864.21.41.429.814.65 1.213 2.3-.552 7.13-.38 7.632-.2.246.088.74.253-.544 1.214-3.022 2.263-10.43 2.522-13.88.701-1.38-.728-2.633-1.62-2.138-2.188 0 0 1.844.405 3.852.661a60.246 60.246 0 00-1.47-2.578zM7.119 6.979s2.906 4.127 5.963 10.138c.164.324 1.398.566 1.243.25-3.279-6.642-6.557-11.294-6.557-11.294a.645.645 0 00-.895-.156c-.29.202.042.774.246 1.062zM52.561 37.261c4.175 1.776 7.106 5.918 7.106 10.739 0 6.163-4.79 11.217-10.848 11.635l1.841-2.348c4.045-1.15 7.007-4.875 7.007-9.287a9.643 9.643 0 00-5.435-8.68l.329-2.059zm-6.109-.822l-2.045 2.593A9.658 9.658 0 0038.333 48a9.644 9.644 0 005.33 8.629l-.59 1.945c-3.98-1.856-6.74-5.895-6.74-10.574 0-5.914 4.411-10.807 10.119-11.561zm.026 21.096l.431.066-.728.914.297-.98zm2.869-19.097l-.359-.055-.501-.025 1.096-1.39-.236 1.47zM53.552 28.055l-1.555 1.572a.887.887 0 01-1.264 0L37.182 15.932l-.42.425a.887.887 0 01-1.264 0l-1.075-1.086a.91.91 0 010-1.278L46.04 2.254a.887.887 0 011.264 0l1.074 1.086a.91.91 0 010 1.277l-.42.425 13.551 13.695a.91.91 0 010 1.277l-1.88 1.901-1.571-1.587a.356.356 0 00-.124-.094l1.22-1.233c.206-.208.786-.049.58-.258a.523.523 0 00-.747 0l-8.093 8.18a.538.538 0 00-.001.755c.207.208-.038-.29.168-.497l.826-.835c.014.033.045.07.095.122l1.571 1.587zm-16.854-12.72L47.401 4.518c.262-.264.385-.568.276-.679-.109-.11-.262.165-.523.43L36.45 15.085c-.26.264-.533.419-.424.529.109.11.41-.016.671-.28zm13.574 11.271l8.247-8.335L46.693 6.32l-8.247 8.335 11.826 11.952zM42.006 8.672l2.495-2.52a.537.537 0 000-.754.523.523 0 00-.747 0l-2.494 2.52a.537.537 0 000 .754c.207.209.54.209.746 0zm13.778 13.734l1.43-1.446c.015.034.046.071.096.122l1.57 1.587-1.402 1.418-1.57-1.587a.356.356 0 00-.124-.094zm-3.18 3.214l2.462-2.487c.013.033.044.07.095.122l1.57 1.587L54.3 27.3l-1.57-1.587a.353.353 0 00-.124-.093zM37.986 12.736l2.494-2.52a.538.538 0 000-.754.524.524 0 00-.747 0l-2.493 2.52a.538.538 0 000 .755c.206.208.54.208.746 0z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 2.7 KiB |
1
assets/images/tab-icons/grenade.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5"><path d="M59.485 10.232c0-3.183-2.446-5.767-5.46-5.767h-10.92c-3.014 0-5.461 2.584-5.461 5.767v11.536c0 3.183 2.447 5.767 5.461 5.767h10.92c3.014 0 5.46-2.584 5.46-5.767V10.232z" fill="none" stroke="#fff" stroke-width="2.97" transform="rotate(45 9.436 -55.386) scale(.86333 .81734)"/><path d="M19.08 4.98l.722-1.249a1.86 1.86 0 012.54-.68l2.586 1.493a1.86 1.86 0 01.682 2.54l-.72 1.25a3.878 3.878 0 01.944 4.97L17.7 27.396a3.877 3.877 0 01-5.294 1.418L7.584 26.03a3.877 3.877 0 01-1.419-5.293l8.136-14.091a3.878 3.878 0 014.78-1.666zm-6.746 9.438l-4.278 7.41a1.693 1.693 0 00.619 2.312l.507.293c.022-.272.103-.543.248-.794l4.69-8.126-1.346-.777a2.667 2.667 0 01-.44-.318zm3.587 11.693l.894-1.549-2.707-1.563a.894.894 0 00-.894 1.55l2.707 1.562zm5.089-13.062l-5.943-3.43-1.553 2.69 5.942 3.43 1.554-2.69zm-1.65.06l-3.512-2.027c-.428-.247-.704-.18-.95.246-.247.429-.171.648.257.895l3.512 2.027c.427.247.716.213.963-.215.247-.427.157-.679-.27-.926zm-.028-5.513l-.829-.479a1.692 1.692 0 00-2.178.424c.163.053.324.126.479.216l1.346.777.031-.054a1.897 1.897 0 011.151-.884zm2.198-2.494l-.446.773 2.029 1.17.445-.772-2.028-1.17zM43.793 50.242l1.761.958c.061.034.106.09.125.158a.262.262 0 01-.026.2c-.663 1.191-.12 2.684.122 2.944-1.347 2.65-5.186 6.26-9.254 6.6a.275.275 0 01-.256-.407c.87-1.58 5.41-9.839 6.076-11.05a.171.171 0 01.23-.068l.49.267-5.485 10.086s1.25-.56 1.383-.802l4.834-8.886zm1.502-2.76l2.808 1.528a.577.577 0 01.23.78l-.718 1.323a.577.577 0 01-.78.23l-2.81-1.528 1.27-2.334zm6.464-11.884l3.331.05a.574.574 0 01.497.851c-1.237 2.264-4.67 8.549-6.423 11.768a.575.575 0 01-.781.23l-2.81-1.528 6.186-11.371zm-8.465 13.82l-.134-.073a.579.579 0 01-.23-.78l.72-1.324a.576.576 0 01.78-.23l.134.072-1.27 2.335zm1.549-2.847l-.132-.07a.577.577 0 01-.23-.783l5.407-9.842a.578.578 0 01.514-.299l.417.006-5.976 10.988z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 2 KiB |
1
assets/images/tab-icons/hacking.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M7.685 20.416a1.482 1.482 0 112 0v1.955h1.648v.502c0 .519.075 1.022.215 1.498h-1.437a3.665 3.665 0 001.953 1.715c.524.978 1.308 1.764 2.248 2.237h-.96a5.667 5.667 0 01-5.667-5.666v-2.241zm6.411 1.919a1.97 1.97 0 001.589-1.931V7.644a1.967 1.967 0 00-1.967-1.967H7.782a1.967 1.967 0 00-1.967 1.967v12.76c0 .778.452 1.451 1.108 1.77v.699c0 .499.069.983.199 1.443a3.969 3.969 0 01-3.307-3.912V7.644a3.968 3.968 0 013.967-3.967h5.936a3.968 3.968 0 013.967 3.967v12.76a3.97 3.97 0 01-3.201 3.893 3.655 3.655 0 003.073 2.016 3.66 3.66 0 003.462-3.656V19.76a1.127 1.127 0 01-.756-1.065v-3.323c0-.517.348-.953.822-1.086v-3.283c0-.395.321-.717.717-.717h.433c.396 0 .717.322.717.717v3.283c.475.133.823.569.823 1.086v3.323c0 .493-.316.912-.756 1.065v2.897a5.582 5.582 0 01-1.359 3.666h.103a3.666 3.666 0 003.666-3.666V19.76a1.127 1.127 0 01-.756-1.065v-3.323c0-.517.348-.953.823-1.086v-3.283c0-.395.321-.717.717-.717h.433c.396 0 .717.322.717.717v3.283c.474.133.822.569.822 1.086v3.323c0 .493-.316.912-.756 1.065v2.897a5.666 5.666 0 01-5.666 5.666h-4a5.667 5.667 0 01-5.667-5.666v-2.241a1.482 1.482 0 112 0v1.919zm-1-2.493a.518.518 0 110-1.037.518.518 0 010 1.037zm-4.411 0a.518.518 0 110-1.037.518.518 0 010 1.037zm14.09-4.47v3.323a.128.128 0 01-.128.128h-1.256a.128.128 0 01-.128-.128v-3.323c0-.071.057-.128.128-.128h1.256c.07 0 .128.057.128.128zm4.41 0v3.323a.128.128 0 01-.128.128h-1.256a.128.128 0 01-.128-.128v-3.323c0-.071.058-.128.128-.128h1.256c.071 0 .128.057.128.128zm-18.034.477a.75.75 0 00-.75-.75h-.302a.75.75 0 00-.75.75v.302c0 .414.336.75.75.75h.302a.75.75 0 00.75-.75v-.302zm2.667 0a.751.751 0 00-.751-.75h-.301a.75.75 0 00-.75.75v.302c0 .414.336.75.75.75h.301a.751.751 0 00.751-.75v-.302zm2.666 0a.75.75 0 00-.75-.75h-.301a.751.751 0 00-.751.75v.302c0 .414.337.75.751.75h.301a.75.75 0 00.75-.75v-.302zm.058-6.558a2.377 2.377 0 00-2.377-2.376H9.413a2.377 2.377 0 00-2.376 2.376v2.752a2.378 2.378 0 002.376 2.376h2.752a2.378 2.378 0 002.377-2.376V9.291zm-1.446-.052a.83.83 0 00-.83-.83H9.294a.83.83 0 00-.83.83v2.855c0 .458.372.83.83.83h2.972a.83.83 0 00.83-.83V9.239zM42.001 3.873a1.56 1.56 0 00-1.494.863l-4.71 9.968c-.2.405-.185.883.04 1.274 0 0 1.587 2.605 3.11 5.25 1.522 2.644 2.979 5.325 2.979 5.325.228.395.639.649 1.094.678l10.99.869a1.538 1.538 0 001.473-.85l4.738-9.956a1.353 1.353 0 00-.04-1.28s-1.598-2.6-3.127-5.24c-1.53-2.641-2.99-5.32-2.99-5.32a1.34 1.34 0 00-1.075-.667l-10.988-.914zm10.13 3.557l-9.302-.4-4.297 8.256c.527.955 1.563 2.818 2.63 4.662a277.167 277.167 0 002.73 4.597l9.302.44 4.277-8.277a264.188 264.188 0 00-2.614-4.667 255.043 255.043 0 00-2.726-4.611zm-4.203 9.474l-.006-.118c0-.76.618-1.377 1.377-1.377h2.657a1.377 1.377 0 010 2.755h-1.28v1.32h1.28a1.378 1.378 0 010 2.754H49.3l-.141-.008-.137-.02-.133-.034-.02-.008a1.375 1.375 0 01-.947-1.308v-3.837l.006-.12zm-4.102-3.75h-.542a1.378 1.378 0 010-2.753h3.838a1.378 1.378 0 010 2.754h-.542v2.963a1.378 1.378 0 01-2.754 0v-2.963z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 3 KiB |
1
assets/images/tab-icons/hydro.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"><path d="M14.652-12.822c.341.353.82.572 1.348.572.528 0 1.006-.22 1.347-.572l.75.433a5.337 5.337 0 002.185 6.835 5.338 5.338 0 006.443-.852l.8.46a7.202 7.202 0 01-9.029 1.51A7.153 7.153 0 0116-6.841a7.164 7.164 0 01-2.497 2.407 7.202 7.202 0 01-9.029-1.51.46.46 0 01.8-.461h0a5.338 5.338 0 006.443.852 5.337 5.337 0 002.185-6.835l.75-.433zm12.073 6.416a.46.46 0 01.8.461l-.8-.461zM16.58-17.144a5.337 5.337 0 004.797-5.307 5.338 5.338 0 00-3.959-5.154v-.923a7.2 7.2 0 015.821 7.064 7.147 7.147 0 01-.968 3.604 7.168 7.168 0 013.422.962A7.203 7.203 0 0128.9-8.324a.461.461 0 01-.63.166.46.46 0 01-.17-.628h0a5.339 5.339 0 00-2.484-6.006 5.337 5.337 0 00-6.925 1.408l-.834-.482a1.877 1.877 0 00-1.277-2.042v-1.236zM3.9-8.786a.46.46 0 01-.17.628.46.46 0 01-.629-.166l.8-.462zm9.41-4.598a5.337 5.337 0 00-6.926-1.408A5.339 5.339 0 003.9-8.786l-.799.462a7.202 7.202 0 013.206-8.574 7.157 7.157 0 013.508-.963 7.2 7.2 0 014.854-10.667.46.46 0 010 .923h0a5.338 5.338 0 00-3.959 5.154 5.336 5.336 0 004.71 5.297v1.246a1.877 1.877 0 00-1.277 2.042l-.834.482zm4.107-14.221a.46.46 0 010-.923v.923z" fill="#fff" stroke="#fff" stroke-width=".5"/><path d="M-10.245 18.308l7.278 6.013c.237.197.347.51.283.812 0 0-.38 1.737-1.127 2.752-.43.584-.982.942-1.586.962-.413.014-.877-.118-1.372-.535-1.193-1.009-3.883-3.812-5.647-5.679l-.523.618s-13.19-9.37-14.382-11.834c-2.842-5.876.655-8.752.655-8.752l16.42 15.643zM-25.835 5.33c-.005-.004-.003-.004-.008.003l.01.01c.022.139-.002 1.22 1.448 3.026 2.07 2.576 6.595 6.533 12.623 10.297L-25.833 5.343l-.002-.013zm7.978 16.176c-2.219 2.134-3.937 3.778-4.075 3.893-2.128 1.778-3.12 2.6-4.956 1.428-2.293-1.465-1.834-5.083.125-6.971l.219-.213-.012.45a40.478 40.478 0 00-.072 2.62c0 .515.343.917.768.905.428-.01.781-.433.795-.947l.07-2.563c.047-.725.116-1.45.22-2.171l1.029-.992 1.223.984c-.01.376-.013.754-.013 1.13.002.513.344.915.77.903.392-.01.722-.367.783-.825l.818.629c.298.228.597.456.897.683l1.411 1.057zm5.676-15.72l.008-.009c1.959-1.888 5.137-1.884 6.97.125 1.26 1.38.201 2.982-2.067 5.346-.356.373-1.961 1.935-3.987 3.895l-5.152-4.909.07-.438 2.242-2.162-.037 1.367a40.478 40.478 0 00-.072 2.62c0 .514.343.917.769.905.426-.012.78-.435.793-.949l.072-2.561a26.07 26.07 0 01.391-3.23zm.838 15.575c1.724 1.831 4.446 4.675 5.641 5.685.095.08.168.144.247.145.095.002.152-.094.223-.174.122-.142.229-.315.324-.498a6.96 6.96 0 00.484-1.254l-6.019-4.973-.9 1.069zM12.144 26.448l-1.161-3.809a.987.987 0 01-.044-.291c0-1.565 1.337-2.877 3.031-2.877h4.06c1.694 0 3.031 1.312 3.031 2.877a.987.987 0 01-.044.291l-1.161 3.809c-.09 1.491-1.392 2.711-3.025 2.711h-1.662c-1.633 0-2.935-1.22-3.025-2.711zM16 20.471c1.78 0 3.226.574 3.226 1.28 0 .706-1.446 1.28-3.226 1.28s-3.226-.574-3.226-1.28c0-.706 1.446-1.28 3.226-1.28zM14.364 15.713c.357-.06.653-.308.776-.648 1.441-4.219-.15-7.04-2.609-8.864-2.586-1.92-6.17-2.676-7.788-2.805-.13-.01-.248-.026-.352-.02-.457.024-.732.128-.819.203-.239.204-.367.382-.325.583.03.138.019.386.29.516.06.035.12.06.168.103.167.148.247.364.364.726.266.825.565 2.3 1.308 5.286.435 1.772 1.42 2.918 2.567 3.674 2.69 1.777 6.42 1.246 6.42 1.246zM5.129 4.903c.027.065.055.134.082.207.308.824.687 2.302 1.584 5.295.504 1.667 1.621 2.546 2.815 3.004 1.45.556 3.017.5 3.84.413.665-2.191.194-3.88-.846-5.16C10.678 6.293 7.055 5.23 5.13 4.903z" fill="#fff"/><path d="M7.596 8.023s.668.659 1.601 1.632c.322.336.667.707 1.04 1.095.224.235.455.475.693.714.345.347.703.694 1.04 1.05.63.663 1.216 1.33 1.608 2a.615.615 0 101.088-.57c-.37-.794-.929-1.628-1.596-2.414a13.44 13.44 0 00-1.303-1.355 14.979 14.979 0 00-1.475-1.142C8.962 8.117 7.9 7.594 7.9 7.594a.263.263 0 10-.304.429zM28.817 9.942c-.177.467-1.208 1.443-2.282 3.54-1.105 2.237-2.608 3.08-4.03 3.319-2.603.437-5.103-1.374-5.103-1.374a.999.999 0 01-.318-1.158c1.225-2.854 3.01-4.399 4.828-5.218 2.545-1.146 5.165-.837 6.352-.6a.811.811 0 01.488-.05c.374.074.59.414.64.697.012.061.014.112.015.136a.685.685 0 01-.59.708zm-1.734-.25c-1.16-.089-2.855-.016-4.476.809-1.297.661-2.515 1.832-3.373 3.778.67.42 1.816.974 3.038.841 1.035-.113 2.093-.745 2.97-2.317.802-1.487 1.4-2.469 1.84-3.111z" fill="#fff"/><path d="M23.838 11.596s-.613.24-1.434.633c-.291.14-.602.284-.908.467-.36.216-.703.473-1.03.69-.38.253-.704.49-.972.598a.617.617 0 00-.406.77c.1.323.444.505.77.405.41-.091.982-.323 1.58-.651.303-.167.618-.35.902-.567.292-.225.55-.474.782-.714a12.247 12.247 0 001.041-1.217.263.263 0 10-.325-.414z" fill="#fff"/><path d="M14.123 14.827s1.944.435 1.877 6.506M18.014 14.872s-1.882 3.578-2.012 5.904" fill="none" stroke="#fff" stroke-width="2" stroke-miterlimit="5"/></svg>
|
After Width: | Height: | Size: 4.6 KiB |
1
assets/images/tab-icons/law.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="5"><path d="M53.755-13.692l7.278 6.013c.237.197.347.51.283.812 0 0-.38 1.737-1.127 2.752-.43.584-.982.942-1.586.962-.413.014-.877-.118-1.372-.535-1.193-1.009-3.883-3.812-5.647-5.679l-.523.618s-13.19-9.37-14.382-11.834c-2.842-5.876.655-8.752.655-8.752l16.42 15.643zM38.165-26.67c-.005-.004-.003-.004-.008.003l.01.01c.022.139-.002 1.22 1.448 3.026 2.07 2.576 6.595 6.533 12.623 10.297L38.167-26.657l-.002-.013zm7.978 16.176c-2.219 2.134-3.937 3.778-4.075 3.893-2.128 1.778-3.12 2.6-4.956 1.428-2.293-1.465-1.834-5.083.125-6.971l.219-.213-.012.45a40.478 40.478 0 00-.072 2.62c0 .515.343.917.768.905.428-.01.781-.433.795-.947l.07-2.563c.047-.725.116-1.45.22-2.171l1.029-.992 1.223.984c-.01.376-.013.754-.013 1.13.002.513.344.915.77.903.392-.01.722-.367.783-.825l.818.629c.298.228.597.456.897.683l1.411 1.057zm5.676-15.72l.008-.009c1.959-1.888 5.137-1.884 6.97.125 1.26 1.38.201 2.982-2.067 5.346-.356.373-1.961 1.935-3.987 3.895l-5.152-4.909.07-.438 2.242-2.162-.037 1.367a40.478 40.478 0 00-.072 2.62c0 .514.343.917.769.905.426-.012.78-.435.793-.949l.072-2.561a26.07 26.07 0 01.391-3.23zm.838 15.575c1.724 1.831 4.446 4.675 5.641 5.685.095.08.168.144.247.145.095.002.152-.094.223-.174.122-.142.229-.315.324-.498a6.96 6.96 0 00.484-1.254l-6.019-4.973-.9 1.069zM12.141 18.432C11.748 21.502 9.776 22.91 8 22.91c-1.777 0-3.748-1.409-4.141-4.478h8.282zm-7.304.964s.351 2.683 2.73 2.683a.432.432 0 000-.864c-1.668 0-1.873-1.923-1.873-1.923a.432.432 0 00-.857.104zm7.213-3.262h-1.037l-2.46-6.621a.59.59 0 00-1.106 0l-2.46 6.62H3.949L6.251 9.23a1.845 1.845 0 013.498 0l2.301 6.905z" fill="#fff"/><path d="M12.636 18.496a.499.499 0 00-.495-.564H3.86a.497.497 0 00-.496.564c.435 3.4 2.669 4.914 4.637 4.914 1.968 0 4.202-1.515 4.636-4.914zm-1.087.437H4.45c.5 2.353 2.078 3.477 3.55 3.477s3.05-1.124 3.55-3.477zm.501-2.298a.502.502 0 00.475-.658l-2.302-6.905a2.344 2.344 0 00-4.447 0l-2.301 6.905a.5.5 0 00.474.658h1.038a.5.5 0 00.469-.326l2.46-6.621A.09.09 0 018 9.629a.09.09 0 01.084.059l2.46 6.62a.5.5 0 00.469.327h1.037zm-.727-1.102L9.274 9.388a1.343 1.343 0 00-2.548 0l-2.05 6.145L6.979 9.34a1.09 1.09 0 012.043 0l2.302 6.193zM28.141 18.432c-.393 3.07-2.365 4.478-4.141 4.478-1.777 0-3.748-1.409-4.141-4.478h8.282zm-7.305.964s.352 2.683 2.732 2.683a.432.432 0 000-.864c-1.669 0-1.874-1.923-1.874-1.923a.432.432 0 00-.858.104zm7.214-3.262h-1.037l-2.46-6.621a.59.59 0 00-1.106 0l-2.46 6.62h-1.038l2.302-6.904a1.845 1.845 0 013.498 0l2.301 6.905z" fill="#fff"/><path d="M28.636 18.496a.499.499 0 00-.495-.564H19.86a.497.497 0 00-.496.564c.435 3.4 2.669 4.914 4.637 4.914 1.968 0 4.202-1.515 4.636-4.914zm-1.087.437H20.45c.5 2.353 2.078 3.477 3.55 3.477s3.05-1.124 3.55-3.477zm.501-2.298a.502.502 0 00.475-.658l-2.302-6.905a2.344 2.344 0 00-4.447 0l-2.301 6.905a.5.5 0 00.474.658h1.038a.5.5 0 00.469-.326l2.46-6.621A.09.09 0 0124 9.629a.09.09 0 01.084.059l2.46 6.62a.5.5 0 00.469.327h1.037zm-.727-1.102l-2.049-6.145a1.343 1.343 0 00-2.548 0l-2.05 6.145 2.302-6.193a1.09 1.09 0 012.043 0l2.302 6.193z" fill="#fff"/><path d="M166.438 137.232s4.218-4.023 8.241 0" fill="none" stroke="#fff" stroke-width="1.88" transform="matrix(.9707 0 0 1.14906 -145.561 -151.919)"/><path d="M166.438 137.232s4.218-4.023 8.241 0" fill="none" stroke="#fff" stroke-width="1.88" transform="matrix(-.9707 0 0 1.14906 177.561 -151.919)"/><path d="M16 6.243v18.393" fill="none" stroke="#fff" stroke-width="1.9978704"/><path d="M9.73 28.285h12.398" fill="none" stroke="#fff" stroke-width="1.9993644"/><path d="M21.735 26.837c0-1.7-1.378-3.078-3.078-3.078h-5.314a3.078 3.078 0 00-3.078 3.078v.002a1 1 0 001 1h9.47a1 1 0 001-1v-.002zm-8.221-2.3s-2.05.281-2.05 2.18c0 .19.296.344.478.344s.33-.154.33-.344c0-1.332 1.469-1.496 1.469-1.496a.341.341 0 00.288-.383c-.022-.189-.334-.324-.515-.301z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 3.8 KiB |
1
assets/images/tab-icons/machines.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"><path d="M20.561 37.261c4.175 1.776 7.106 5.918 7.106 10.739 0 6.163-4.79 11.217-10.848 11.635l1.841-2.348c4.045-1.15 7.007-4.875 7.007-9.287a9.643 9.643 0 00-5.435-8.68l.329-2.059zm-6.109-.822l-2.045 2.593A9.658 9.658 0 006.333 48a9.644 9.644 0 005.33 8.629l-.59 1.945c-3.98-1.856-6.74-5.895-6.74-10.574 0-5.914 4.411-10.807 10.119-11.561zm.026 21.096l.431.066-.728.914.297-.98zm2.869-19.097l-.359-.055-.501-.025 1.096-1.39-.236 1.47zM57.032 18.256l.384 2.69a1.869 1.869 0 01-1.851 2.135h-3.526v-.032l-.24-4.793h5.233zm-6.269 4.825H45.3l.243-4.825h4.978l.242 4.825zm-6.739-.032v.032h-3.589a1.869 1.869 0 01-1.851-2.135l.384-2.69h5.297l-.24 4.793zm.305-6.07H39.15l.716-5.01h4.716l-.253 5.01zm6.127 0h-4.85l.253-5.01h4.344l.253 5.01zm6.393 0h-5.116l-.251-5.01h4.652l.715 5.01zM44.88 6.07l-.233 4.625h-4.597l.43-3.02a1.87 1.87 0 011.852-1.605h2.548zm5.027 0l.234 4.625h-4.216l.232-4.625h3.75zm1.278 0h2.485c.931 0 1.72.685 1.85 1.606l.432 3.019h-4.534l-.233-4.625zM21.552 28.055l-1.555 1.572a.887.887 0 01-1.264 0L5.182 15.932l-.42.425a.887.887 0 01-1.264 0L2.423 15.27a.91.91 0 010-1.278L14.04 2.254a.887.887 0 011.264 0l1.074 1.086a.91.91 0 010 1.277l-.42.425 13.551 13.695a.91.91 0 010 1.277l-1.88 1.901-1.571-1.587a.356.356 0 00-.124-.094l1.22-1.233c.206-.208.786-.049.58-.258a.523.523 0 00-.747 0l-8.093 8.18a.538.538 0 00-.001.755c.207.208-.038-.29.168-.497l.826-.835c.014.033.045.07.095.122l1.571 1.587zM4.698 15.335L15.401 4.518c.262-.264.385-.568.276-.679-.109-.11-.262.165-.523.43L4.45 15.085c-.26.264-.533.419-.424.529.109.11.41-.016.671-.28zm13.574 11.271l8.247-8.335L14.693 6.32l-8.247 8.335 11.826 11.952zM10.006 8.672l2.495-2.52a.537.537 0 000-.754.523.523 0 00-.747 0L9.26 7.917a.537.537 0 000 .754c.207.209.54.209.746 0zm13.778 13.734l1.43-1.446c.015.034.046.071.096.122l1.57 1.587-1.402 1.418-1.57-1.587a.356.356 0 00-.124-.094zm-3.18 3.214l2.462-2.487c.013.033.044.07.095.122l1.57 1.587L22.3 27.3l-1.57-1.587a.353.353 0 00-.124-.093zM5.986 12.736l2.494-2.52a.538.538 0 000-.754.524.524 0 00-.747 0l-2.493 2.52a.538.538 0 000 .755c.206.208.54.208.746 0z" fill="#fff"/><path fill="none" stroke="#fff" stroke-width="2.15" d="M204.235 13.333h5.253v5.333h-5.253z" transform="matrix(.72148 -.72915 .58522 .59144 -141.827 158.137)"/><path d="M209.185 13.865V12.4" fill="none" stroke="#fff" stroke-width="1.27" transform="scale(1.18265 1.19522) rotate(-45 109.957 251.96)"/><path d="M209.185 13.865V12.4" fill="none" stroke="#fff" stroke-width="1.27" transform="scale(1.18265 1.19522) rotate(-45 108.624 248.743)"/><path d="M209.185 13.865V12.4" fill="none" stroke="#fff" stroke-width="1.27" transform="scale(1.18265 1.19522) rotate(-45 116.637 249.194)"/><path d="M209.185 13.865V12.4" fill="none" stroke="#fff" stroke-width="1.27" transform="scale(1.18265 1.19522) rotate(-45 115.304 245.976)"/><circle cx="210.667" cy="11.671" r=".382" fill="none" stroke="#fff" stroke-width="1.27" transform="scale(1.18265 1.19522) rotate(-45 110.698 253.75)"/><circle cx="210.667" cy="11.671" r=".382" fill="none" stroke="#fff" stroke-width="1.27" transform="scale(1.18265 1.19522) rotate(-45 109.365 250.53)"/><circle cx="210.667" cy="11.671" r=".382" fill="none" stroke="#fff" stroke-width="1.27" transform="scale(1.18265 1.19522) rotate(-45 120.815 249.56)"/><circle cx="210.667" cy="11.671" r=".382" fill="none" stroke="#fff" stroke-width="1.27" transform="scale(1.18265 1.19522) rotate(-45 119.481 246.34)"/></svg>
|
After Width: | Height: | Size: 3.5 KiB |
1
assets/images/tab-icons/mafia.svg
Normal file
After Width: | Height: | Size: 6.4 KiB |
1
assets/images/tab-icons/malf.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="5"><path d="M213.333 163.822c3.778 0 6.845 4.79 6.845 8.568 0 3.778-3.067 10.579-6.845 10.579-2.459 0-6.845-4.421-6.845-10.579 0-3.778 3.067-8.568 6.845-8.568z" fill="none" stroke="#fff" stroke-width="1.86" transform="scale(1.07321 1.07282) rotate(45 296.154 -179.028)"/><path d="M249.876 166.231c0-1.969-1.62-3.564-3.619-3.564h-13.304c-1.999 0-3.62 1.595-3.62 3.564v18.365c0 1.968 1.621 3.564 3.62 3.564h13.304c1.999 0 3.619-1.596 3.619-3.564v-18.365z" fill="none" stroke="#fff" stroke-width="1.55" transform="matrix(.96217 0 0 .977 -214.541 -155.377)"/><circle cx="240" cy="175.874" r="7.373" fill="none" stroke="#fff" stroke-width="2.13" transform="matrix(.9383 0 0 .9383 -209.193 -149.15)"/><circle cx="240" cy="175.874" r="7.373" fill="#fff" transform="matrix(.17499 0 0 .17499 -25.996 -14.901)"/><circle cx="240" cy="175.874" r="7.373" fill="none" stroke="#fff" stroke-width="2.02" transform="translate(-43.391 -27.648) scale(.24746)"/><circle cx="240" cy="175.874" r="7.373" fill="none" stroke="#fff" stroke-width=".55" transform="translate(-70.808 -47.74) scale(.3617)"/><circle cx="240" cy="175.874" r="7.373" fill="none" stroke="#fff" stroke-width=".22" transform="translate(-94.746 -65.281) scale(.46144)"/><circle cx="240" cy="175.874" r="7.373" fill="none" stroke="#fff" stroke-width=".09" transform="matrix(.56099 0 0 .56099 -118.637 -82.789)"/></svg>
|
After Width: | Height: | Size: 1.5 KiB |
1
assets/images/tab-icons/medicine.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5"><path d="M59.485 10.232c0-3.183-2.446-5.767-5.46-5.767h-10.92c-3.014 0-5.461 2.584-5.461 5.767v11.536c0 3.183 2.447 5.767 5.461 5.767h10.92c3.014 0 5.46-2.584 5.46-5.767V10.232z" fill="none" stroke="#fff" stroke-width="2.97" transform="rotate(45 80.063 5.869) scale(.86333 .81734)"/><path d="M20.2 11.8h7.608v8.4H20.2v7.608h-8.4V20.2H4.192v-8.4H11.8V4.192h8.4V11.8z" fill="none" stroke="#fff" stroke-width="2.9966500000000003"/></svg>
|
After Width: | Height: | Size: 605 B |
1
assets/images/tab-icons/nanites.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"><path d="M17.13 11.175l4.477 2.585v5.17l-4.477 2.585-4.477-2.585v-5.17l4.477-2.585z" fill="none" stroke="#fff" stroke-width="2.004844"/><path d="M15.142 16h1.22l1.435-1.434M18.667 17.251l-.679.679" fill="none" stroke="#fff" stroke-width="1.5"/><path d="M14.113 20.053l-2.948 3.338a.474.474 0 10.67.67l3.339-2.948a.75.75 0 00-1.061-1.06z" fill="#fff"/><path d="M8.066 5.333L10.8 6.909v3.156l-2.733 1.577-2.732-1.577V6.91l2.732-1.576z" fill="#fff" stroke="#fff" stroke-width="1.5064455999999997"/><path d="M22.266 24.59l1.179.68v1.361l-1.18.68-1.178-.68V25.27l1.179-.68z" fill="#fff" stroke="#fff" stroke-width="1.501872"/><path d="M8.066 26.05l.533.308v.617l-.533.308-.534-.308v-.617l.534-.307zM6.028 16.113l.534.308v.616l-.534.308-.533-.308v-.616l.533-.308zM17.13 5.333l.533.308v.616l-.533.308-.534-.308v-.616l.534-.308zM26.096 16.68l.534.308v.617l-.534.307-.533-.307v-.617l.533-.308z" fill="#fff" stroke="#fff" stroke-width="1.5012824"/><path d="M11.31 19.71l.57-.673a.746.746 0 011.041 1.066l-.843.679a.645.645 0 01-.448.182l-1.909-.183-1.728 1.39a.214.214 0 01-.302-.004.214.214 0 01.004-.302l1.578-1.863a.445.445 0 01.31-.126l1.727-.165zM15.36 24.702l-.144-1.708c0-.156.062-.305.172-.415l1.215-1.439a.745.745 0 011.054 1.054l-1.292 1.09-.132 1.56a.427.427 0 01-.126.303l-1.977 1.67a.213.213 0 11-.302-.301l1.532-1.814z" fill="#fff"/><path d="M24.624 7.126l1.179.68v1.362l-1.18.68-1.179-.68V7.807l1.18-.68z" fill="#fff" stroke="#fff" stroke-width="1.501872"/></svg>
|
After Width: | Height: | Size: 1.6 KiB |
1
assets/images/tab-icons/nuke.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="5"><path d="M-26.46 18.463l2.462.686c.08.192.166.381.26.567l-.454-.036-.694 1.094 1.461-.487.036.06.046.073-.039-.002-.693 1.093 1.21-.402c.072.093.145.185.221.276l-.342 1.346.956-.687.064.063.11.1-.32 1.26.988-.707.02.015.152.109.162 2.566c-.29-.144-.57-.3-.843-.47l.568-1.162-1.358.624c-.302-.225-.59-.465-.863-.72l-.087-.147.208-1.503-.919.828-.163-.193-.106-.132.871-.672-1.398-.04a10.702 10.702 0 01-.54-.892l-.022-.31.853-1.254-1.38.387a10.524 10.524 0 01-.426-1.331zm18.116 4.841c-.325.336-.67.65-1.034.938l-.465-.572-.002.924c-.47.332-.965.627-1.481.88l-.982-.631.29.942c-.125.052-.252.1-.379.146l-.199-.872-.556 1.116a10.35 10.35 0 01-1.106.25l-.288-.108-.78-1.301-.251 1.552c-.372.017-.748.014-1.124-.008l1.427-2.142c.29-.025.577-.068.862-.123l-.081.143.705 1.087.157-1.422.167-.05.005-.003.682 1.049.15-1.362.126-.056.024-.01h.086l1.18.952-.268-1.378h.098l1.18.952-.28-1.44 2.137.547zm-2.494-.619l.018-.014.029.007-.047.007zM-21.831 6.889l.099 2.388-1.117-.425.622 1.08c-.072.075-.144.15-.214.228l-.971-.37.523.908c-.113.148-.222.3-.327.457l-1.178-.057.78.721c-.05.09-.097.182-.143.275l-1.2-.057.872.806-.074.202-.03.092-2.434.962c.055-.327.126-.65.213-.974l.06-.216.114.286 1.289.139-1.155-1.172c.091-.245.191-.484.298-.72l.3-.36 1.484-.316-1.1-.587.143-.22.092-.132.916.584-.412-1.255c.29-.357.602-.692.934-1.007l1.449.37-.717-1.002c.284-.224.578-.434.884-.628zm15.281 4.084c.173.33.326.669.463 1.017l-.93.408 1.19.332c.145.46.258.933.339 1.413l-1.054.944 1.165-.036c.011.139.019.278.025.418l-1.058-.048 1.055.946c-.013.292-.038.586-.076.879l-.284.389-1.462.406 1.446.662.016-.032c-.085.319-.186.63-.3.935L-7.64 17.56l.02-.095.022-.134.335.325 1.235-.398-1.483-.577.007-.072.008-.116.082.08 1.235-.399-1.298-.504-.003-.12-.002-.045.02-.073 1.227-.891-1.362-.095-.017-.092v-.005l1.228-.892-1.475-.102-.016-.054-.052-.156 1.379-2.17zm-6.81-5.425l.073.019c.127.033.252.07.377.11l-.033.003-.465 1.209 1.497-.852.167.07.103.047.553.778-.062 1.219-.572.212.114-1.106-.86.855-.134-.061-.166-.07.105-1.024-.78.777c-.13-.04-.261-.08-.395-.116l-.073-.018-.273-1.25-.57 1.076-.157-.023-.033-.004-.294-1.349-.676 1.277h-.031l-1.669-2.012c.341-.05.686-.084 1.034-.1l-.007.004.12 1.29.874-1.297c.256.011.513.031.77.062l.454.243.602 1.391.408-1.36zm2.63 1.07c.465.265.905.563 1.316.889l-1.338.496.672-.72-.65-.664z" fill="#fff"/><path d="M213.333 163.822c3.778 0 6.845 4.79 6.845 8.568 0 3.778-3.067 10.579-6.845 10.579-2.459 0-6.845-4.421-6.845-10.579 0-3.778 3.067-8.568 6.845-8.568z" fill="none" stroke="#fff" stroke-width="1.86" transform="scale(1.07321 1.07282) rotate(45 311.06 -143.036)"/><path d="M202.667 177.874l-3.79-.276-2.603 1.068a1.253 1.253 0 00-.476 1.977l1.535 1.79 3.322-1.291.639 1.036 2.832-2.37-1.459-1.934z" fill="none" stroke="#fff" stroke-width="2.01" transform="matrix(.74824 0 0 .74797 -142.573 -115.988)"/><path d="M202.667 177.874l-3.79-.276-2.426.995a1.394 1.394 0 00-.529 2.195l1.411 1.645 2.922-.889.64 1.036 3.231-2.772-1.459-1.934z" fill="none" stroke="#fff" stroke-width="2.01" transform="matrix(.10033 -.74121 -.74148 -.1003 125.908 191.165)"/><path d="M206.644 168s-.777 9.889 10.567 8.594" fill="none" stroke="#fff" stroke-width="1.9" transform="matrix(1.04092 0 0 1.06629 -199.964 -172.317)"/><path d="M206.644 168s-.777 9.889 10.567 8.594" fill="none" stroke="#fff" stroke-width="1.12" transform="matrix(.8828 0 0 .90431 -170.022 -140.833)"/><path d="M199.156 182.151a1.297 1.297 0 00-.137 1.787l.135.165a1.295 1.295 0 001.853.157l3.994-3.469-1.966-2.124-3.879 3.484z" fill="none" stroke="#fff" stroke-width="1.4" transform="matrix(1.07321 0 0 1.07282 -207.341 -172.709)"/></svg>
|
After Width: | Height: | Size: 3.7 KiB |
1
assets/images/tab-icons/plumbing.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5"><path d="M59.485 10.232c0-3.183-2.446-5.767-5.46-5.767h-10.92c-3.014 0-5.461 2.584-5.461 5.767v11.536c0 3.183 2.447 5.767 5.461 5.767h10.92c3.014 0 5.46-2.584 5.46-5.767V10.232z" fill="none" stroke="#fff" stroke-width="2.97" transform="rotate(45 64.063 -32.759) scale(.86333 .81734)"/><path d="M15.494 15.711l-.042-.055s6.327-3.456 10.733 0c4.406 3.456-3.49 9.59-3.49 9.59s-6.03 5.896-8.781 1.02c-2.594-4.6 1.144-9.96 1.58-10.555zM5.329 7.56l8.423 9.59c.824.938.761-.67 1.7-1.494.94-.825 2.525-.555 1.7-1.494L8.73 4.572A2.265 2.265 0 005.329 7.56z" fill="none" stroke="#fff" stroke-width="2.000934" stroke-linecap="butt" stroke-miterlimit="2"/><path d="M4.797 5.696A2.264 2.264 0 018.73 4.572l8.423 9.59c.824.939-.762.67-1.701 1.494-.938.824-.876 2.432-1.7 1.494L5.329 7.56a2.247 2.247 0 01-.55-1.712.48.48 0 00.125.318l9.18 10.281a.5.5 0 10.746-.666L5.649 5.5a.499.499 0 00-.852.196z" fill="#fff"/><path d="M16.506 27.102s.467-8.725 9.833-9.245a1.055 1.055 0 00-.117-2.107c-11.324.629-11.824 11.247-11.824 11.247a1.056 1.056 0 002.108.105z" fill="none" stroke="#fff" stroke-width=".99594" stroke-linecap="butt" stroke-miterlimit="2"/></svg>
|
After Width: | Height: | Size: 1.3 KiB |
1
assets/images/tab-icons/power.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M-9.562 27.319l-10.83-12.855a6.123 6.123 0 01-8.753-6.441l.01-.058a1.19 1.19 0 01.179-.465.12.12 0 01.095-.056.126.126 0 01.071.017l4.045 4.044c.273.274.671.38 1.044.28l2.091-.56c.373-.1.665-.392.765-.765l.56-2.091c.1-.373-.006-.772-.279-1.045l-4.047-4.047a.114.114 0 01-.015-.067.124.124 0 01.056-.097c.171-.113.332-.155.465-.179l.058-.01a6.123 6.123 0 016.441 8.755l12.854 10.83a3.488 3.488 0 01.601 5.412 3.487 3.487 0 01-5.41-.602zm1.497-3.312a2.05 2.05 0 112.899 2.898 2.05 2.05 0 01-2.9-2.898zm-1.419.155s-9.185-10.578-9.411-10.387a.535.535 0 00-.067.752l8.659 10.322a.534.534 0 10.82-.687zm-19.22-15.464c.047-.14.661 1.08.877 1.633.432 1.108 1.281 2.506 2.785 3.17 1.004.441 2.296.55 3.942.043a.267.267 0 11.157.51c-1.802.556-3.216.42-4.314-.065-1.65-.728-2.595-2.248-3.07-3.464-.236-.61-.355-1.14-.39-1.454a.993.993 0 01.013-.373zM18.865 3.288a.517.517 0 00-.916-.401L7.305 16.396a.515.515 0 00.377.834l7.479.406a.516.516 0 01.465.665c-.55 1.813-2.16 7.12-3.136 10.343a.515.515 0 00.898.47l11.347-14.243a.514.514 0 00-.395-.838c-1.746-.03-5.197-.093-6.58-.118a.515.515 0 01-.5-.598c.282-1.769 1.137-7.109 1.605-10.03z" fill="#fff"/><path d="M20.561 5.261c4.175 1.776 7.106 5.918 7.106 10.739 0 6.163-4.79 11.217-10.848 11.635l1.841-2.348c4.045-1.15 7.007-4.875 7.007-9.287a9.643 9.643 0 00-5.435-8.68l.329-2.059zm-6.109-.822l-2.045 2.593A9.658 9.658 0 006.333 16a9.644 9.644 0 005.33 8.629l-.59 1.945c-3.98-1.856-6.74-5.895-6.74-10.574 0-5.914 4.411-10.807 10.119-11.561zm.026 21.096l.431.066-.728.914.297-.98zm2.869-19.097l-.359-.055-.501-.025 1.096-1.39-.236 1.47zM21.552-3.945l-1.555 1.572a.887.887 0 01-1.264 0L5.182-16.068l-.42.425a.887.887 0 01-1.264 0L2.423-16.73a.91.91 0 010-1.278L14.04-29.746a.887.887 0 011.264 0l1.074 1.086a.91.91 0 010 1.277l-.42.425 13.551 13.695a.91.91 0 010 1.277l-1.88 1.901-1.571-1.587a.356.356 0 00-.124-.094l1.22-1.233c.206-.208.786-.049.58-.258a.523.523 0 00-.747 0l-8.093 8.18a.538.538 0 00-.001.755c.207.208-.038-.29.168-.497l.826-.835c.014.033.045.07.095.122l1.571 1.587zM4.698-16.665l10.703-10.817c.262-.264.385-.568.276-.679-.109-.11-.262.165-.523.43L4.45-16.915c-.26.264-.533.419-.424.529.109.11.41-.016.671-.28zM18.272-5.394l8.247-8.335L14.693-25.68l-8.247 8.335L18.272-5.394zm-8.266-17.934l2.495-2.52a.537.537 0 000-.754.523.523 0 00-.747 0l-2.494 2.52a.537.537 0 000 .754c.207.209.54.209.746 0zM23.784-9.594l1.43-1.446c.015.034.046.071.096.122l1.57 1.587-1.402 1.418-1.57-1.587a.356.356 0 00-.124-.094zm-3.18 3.214l2.462-2.487c.013.033.044.07.095.122l1.57 1.587L22.3-4.7l-1.57-1.587a.353.353 0 00-.124-.093zM5.986-19.264l2.494-2.52a.538.538 0 000-.754.524.524 0 00-.747 0l-2.493 2.52a.538.538 0 000 .755c.206.208.54.208.746 0z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 2.8 KiB |
1
assets/images/tab-icons/races.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M15.015 17.35c-.03.079-.129.324-.142.875-.017.689-.312 1.609-.512 1.79-.477.434-.224 1.375.348 1.612.235.096.292.035.306-.005v2.392c-1.008-.04-1.797.196-2.478.569.687.542 1.505.86 2.478.92v3.48c-2.663 0-8.697-3.551-9.49-8.175-1.199.267-1.839-1.552-2.09-5.12-.192-2.694 1.093-1.932 1.97-1.126-.1-.601-.728-4.66.3-5.72 1.11-1.145 0-2.737 0-2.737l1.045-1.22 1.35 1.22s.034-1.628 1.943-2.135c1.527-.406 4.031-.62 4.972-.69v14.07zm-3.724-.034c.04.004.08.006.121.006.716 0 1.954-1.361 1.954-1.361S12.128 14.6 11.412 14.6c-.04 0-.082.002-.12.006a1.225 1.225 0 00-.122-.006c-.717 0-1.955 1.36-1.955 1.36s1.238 1.362 1.955 1.362c.04 0 .081-.002.121-.006zM16.735 25.496v3.488c1.644 0 5.56-.04 6.54-4.227.372-1.587 1.966-2.175 2.674-3.352 1.77.89 3.001.437 2.028-4.18-.212-1.008 2.642-6.591 2.008-7.564-.294-.453-1.99 1.404-3.42 3.12.12-1.431.125-3.274-.52-3.94-1.11-1.144 3.015-5.052 3.015-5.052L25 4.885l-1.349 1.22c-2.342 1.51-4.438 1.214-1.944-2.135 1.007-1.353-3.604-.917-4.972-.761V17.35c.031.078.13.323.142.874.017.689.312 1.609.512 1.79.193.177 1.442 1.45 1.304 1.437-.302-.027-1.643.445-1.679 1.04-.035.573-.246-.67-.279-.87v2.397c.804.464 1.863.414 2.667.564-.803.008-1.833.214-2.667.913zM19.541 4.62c-.417.003-.879.008-1.306.018V17.1c.063.223.13.57.142 1.088.006.267.148.732.201.896.423.434 1.338 1.43 1.448 1.643.454.874.01 1.484-.216 1.732a1.409 1.409 0 01-1.039.493l-.069.03c.342.037.674.069.974.125a1.5 1.5 0 01-.26 2.975 3.045 3.045 0 00-1.18.232v1.109c1.383-.163 3.054-.771 3.58-3.01.26-1.111.906-1.9 1.653-2.59.427-.393.912-.722 1.195-1.193a1.5 1.5 0 011.96-.566c.06.03.13.059.2.086.054-.574-.062-1.42-.314-2.616-.068-.32-.044-.912.171-1.66.143-.496.366-1.118.613-1.784a1.498 1.498 0 01-2.224-1.435c.052-.634.084-1.36.027-2a5.668 5.668 0 00-.168-.813c-.534-.584-.71-1.5-.373-2.542a1.38 1.38 0 01-.092.064c-1.086.702-2.15 1.063-2.91 1.107-.6.034-1.092-.104-1.462-.327-.643-.387-1.086-1.034-1.003-2.071.03-.371.161-.857.452-1.454zm-1.353 15.418c.141-.032.268-.055.377-.068.108-.013.198-.017.26-.012a1.446 1.446 0 00-.637.08zm1.228-6.377a2.57 2.57 0 01.128-.1c.367-.27 1.084-.45 1.884-.29l-.064-.01.08.014-.008-.001.146.032-.083-.02.041.009-.006-.001c.637.14 1.32.426 1.32.426.51.214.861.69.913 1.24 0 0 .07.739.014 1.389l.004-.05-.01.122s-.003.026 0 .003l-.009.072c-.092.792-.47 1.407-.83 1.673l-.262.192c-.367.27-1.085.45-1.884.289l.064.01-.079-.013s-.017-.003.006 0l-.145-.031.082.02-.04-.01.005.002c-.636-.141-1.32-.426-1.32-.426a1.502 1.502 0 01-.913-1.241s-.069-.738-.014-1.388l-.003.05.01-.122s.003-.026 0-.003l.01-.072c.09-.792.47-1.407.83-1.673.043-.032.088-.063.133-.092zm.893 1.213c.038-.037.08-.072.124-.105.134-.1.405-.086.698-.026l.08.016c.512.113 1.063.344 1.063.344s.057.595.013 1.119l-.008.08c-.03.297-.099.56-.233.659-.044.032-.09.06-.137.087-.039.037-.08.072-.124.105-.135.099-.405.086-.699.026l-.078-.016c-.513-.113-1.064-.344-1.064-.344s-.057-.595-.013-1.12l.008-.08c.03-.296.098-.56.233-.658.044-.032.09-.061.137-.087zm3.457 1.622l.005-.04-.008.064.003-.024zm.013-.124l.003-.03-.003.04v-.01zm-5.34-.822l-.003.03.003-.041v.01zm.013-.124l-.005.04.008-.064-.003.024zM53.755 18.308l7.278 6.013c.237.197.347.51.283.812 0 0-.38 1.737-1.127 2.752-.43.584-.982.942-1.586.962-.413.014-.877-.118-1.372-.535-1.193-1.009-3.883-3.812-5.647-5.679l-.523.618s-13.19-9.37-14.382-11.834c-2.842-5.876.655-8.752.655-8.752l16.42 15.643zM38.165 5.33c-.005-.004-.003-.004-.008.003l.01.01c.022.139-.002 1.22 1.448 3.026 2.07 2.576 6.595 6.533 12.623 10.297L38.167 5.343l-.002-.013zm7.978 16.176c-2.219 2.134-3.937 3.778-4.075 3.893-2.128 1.778-3.12 2.6-4.956 1.428-2.293-1.465-1.834-5.083.125-6.971l.219-.213-.012.45a40.478 40.478 0 00-.072 2.62c0 .515.343.917.768.905.428-.01.781-.433.795-.947l.07-2.563c.047-.725.116-1.45.22-2.171l1.029-.992 1.223.984c-.01.376-.013.754-.013 1.13.002.513.344.915.77.903.392-.01.722-.367.783-.825l.818.629c.298.228.597.456.897.683l1.411 1.057zm5.676-15.72l.008-.009c1.959-1.888 5.137-1.884 6.97.125 1.26 1.38.201 2.982-2.067 5.346-.356.373-1.961 1.935-3.987 3.895l-5.152-4.909.07-.438 2.242-2.162-.037 1.367a40.478 40.478 0 00-.072 2.62c0 .514.343.917.769.905.426-.012.78-.435.793-.949l.072-2.561a26.07 26.07 0 01.391-3.23zm.838 15.575c1.724 1.831 4.446 4.675 5.641 5.685.095.08.168.144.247.145.095.002.152-.094.223-.174.122-.142.229-.315.324-.498a6.96 6.96 0 00.484-1.254l-6.019-4.973-.9 1.069z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 4.4 KiB |
1
assets/images/tab-icons/rev.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="5"><path d="M23.471-16C21.733-8.015 16.25-6.031 16-6.031v-9.063a.904.904 0 01.904-.904h6.568zM16-25.166v8.264a.904.904 0 01-.904.904H8.553c-.341-1.543-.545-3.31-.553-5.333 2.052 0 3.975-.653 8-3.835zM-21.999 3.873a1.56 1.56 0 00-1.494.863l-4.71 9.968c-.2.405-.185.883.04 1.274 0 0 1.587 2.605 3.11 5.25 1.522 2.644 2.979 5.325 2.979 5.325.228.395.639.649 1.094.678l10.99.869a1.538 1.538 0 001.473-.85l4.738-9.956a1.353 1.353 0 00-.04-1.28s-1.598-2.6-3.127-5.24c-1.53-2.641-2.99-5.32-2.99-5.32a1.34 1.34 0 00-1.075-.667l-10.988-.914zm10.13 3.557l-9.302-.4-4.297 8.256c.527.955 1.563 2.818 2.63 4.662a277.167 277.167 0 002.73 4.597l9.302.44 4.277-8.277a264.188 264.188 0 00-2.614-4.667 255.043 255.043 0 00-2.726-4.611zm-4.203 9.474l-.006-.118c0-.76.618-1.377 1.377-1.377h2.657a1.377 1.377 0 010 2.755h-1.28v1.32h1.28a1.378 1.378 0 010 2.754H-14.7l-.141-.008-.137-.02-.133-.034-.02-.008a1.375 1.375 0 01-.947-1.308v-3.837l.006-.12zm-4.102-3.75h-.542a1.378 1.378 0 010-2.753h3.838a1.378 1.378 0 010 2.754h-.542v2.963a1.378 1.378 0 01-2.754 0v-2.963zM29.333 8.42a5.99 5.99 0 00-5.987-5.987H8.654a5.99 5.99 0 00-5.987 5.986v14.927a5.99 5.99 0 005.987 5.988h14.692a5.99 5.99 0 005.987-5.988V8.42zm-2.18 0v14.926a3.809 3.809 0 01-3.807 3.808H8.654a3.81 3.81 0 01-3.808-3.808V8.42a3.81 3.81 0 013.808-3.807h14.692a3.809 3.809 0 013.807 3.807z" fill="#fff"/><path d="M9.688 22.194V9.571h9.47a3.154 3.154 0 013.153 3.154v.004a3.154 3.154 0 01-3.154 3.154H9.688" fill="none" stroke="#fff" stroke-width="3.9999258"/><path d="M13.207 15.883h.843a7.02 7.02 0 015.603 2.79l2.658 3.52" fill="none" stroke="#fff" stroke-width="4.0006494"/></svg>
|
After Width: | Height: | Size: 1.8 KiB |
1
assets/images/tab-icons/rnd.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M-5.412 13.034a1 1 0 00-1.225-.707l-17.423 4.668c-.534.144-.85.692-.708 1.225l2.784 10.39a1 1 0 001.225.707l17.423-4.669a1 1 0 00.707-1.225l-2.783-10.39zm-13.131 13.05l3.29-.88c.496-.134.8-.606.68-1.055-.12-.449-.62-.705-1.117-.573l-3.29.882c-.496.133-.801.605-.68 1.054.12.449.62.705 1.117.573zm-1.142-2.915l3.29-.881c.496-.134.8-.606.68-1.055-.12-.449-.62-.705-1.117-.572l-3.29.881c-.496.134-.801.605-.68 1.054.12.449.62.706 1.117.573zm8.76-6.528a3.366 3.366 0 00-2.38 4.12 3.367 3.367 0 004.122 2.378 3.367 3.367 0 002.378-4.12 3.366 3.366 0 00-4.12-2.378zm-9.817 3.57l3.29-.882c.496-.132.8-.606.68-1.054-.12-.45-.62-.705-1.116-.573l-3.29.882c-.496.133-.802.605-.68 1.054.119.45.62.706 1.116.572zm10.27-1.878a1.614 1.614 0 01.835 3.116 1.614 1.614 0 01-.835-3.116zM4.535 7.735l3.242-.868c.007.053.018.106.032.159l1.186 4.425a1.511 1.511 0 001.85 1.067l7.92-2.122a1.51 1.51 0 001.067-1.85l-1.185-4.424a1.362 1.362 0 00-.05-.155l3.24-.868c.087-.023.174-.04.262-.051l.05-.008.022-.002c.116-.012.231-.014.346-.008l.05.004c.035.004.07.008.104.01l.056.01a2.137 2.137 0 011.729 1.554l.002.004 4.636 17.302a2.14 2.14 0 01-1.513 2.62l-.405.109a2.122 2.122 0 00-.013-1.055l-2.91-10.855a2.139 2.139 0 00-2.62-1.513l-12.47 3.342a2.14 2.14 0 00-1.513 2.62l2.909 10.855c.095.358.277.67.515.92l-.795.214c-.21.056-.424.079-.637.071l-.093-.006-.103-.01-.038-.007a2.175 2.175 0 01-.753-.262 2.155 2.155 0 01-.996-1.3L3.023 10.356a2.138 2.138 0 01.29-1.745l.038-.056.064-.083.05-.06c.097-.114.206-.218.325-.309l.08-.059c.03-.018.059-.037.088-.057l.04-.023a2.1 2.1 0 01.537-.228zm8.275 20.757a2.138 2.138 0 01-1.558-1.524l-2.467-9.207a2.138 2.138 0 011.512-2.619l10.644-2.852a2.139 2.139 0 012.62 1.512l2.467 9.207a2.143 2.143 0 01-.588 2.1l-12.63 3.383zm10.724-9.02a.968.968 0 00-1.187-.686l-9.65 2.586a.97.97 0 00.502 1.873l9.65-2.585a.97.97 0 00.685-1.187v-.001zm-1.061-3.17a.968.968 0 00-1.187-.685l-9.65 2.585a.968.968 0 00.502 1.873l9.65-2.585a.968.968 0 00.685-1.187v-.001zM17.562 4.245c.236.198.407.464.487.765l.822 3.066a1.51 1.51 0 01-1.067 1.849l-6.362 1.705a1.511 1.511 0 01-1.85-1.068l-.82-3.065a1.515 1.515 0 01.038-.907l8.752-2.345zm-.903 1.438a.47.47 0 00-.576-.333l-1.23.33a.47.47 0 00-.333.576l.821 3.065a.47.47 0 00.577.333l1.23-.33a.47.47 0 00.333-.576l-.822-3.065z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 2.4 KiB |
1
assets/images/tab-icons/robo.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M22.438-4.681l-10.83-12.855a6.123 6.123 0 01-8.753-6.441l.01-.058a1.19 1.19 0 01.179-.465.12.12 0 01.095-.056.126.126 0 01.071.017l4.045 4.044c.273.274.671.38 1.044.28l2.091-.56c.373-.1.665-.392.765-.765l.56-2.091c.1-.373-.006-.772-.279-1.045l-4.047-4.047a.114.114 0 01-.015-.067.124.124 0 01.056-.097c.171-.113.332-.155.465-.179l.058-.01a6.123 6.123 0 016.441 8.755L27.248-9.49a3.488 3.488 0 01.601 5.412 3.487 3.487 0 01-5.41-.602zm1.497-3.312a2.05 2.05 0 112.899 2.898 2.05 2.05 0 01-2.9-2.898zm-1.419.155s-9.185-10.578-9.411-10.387a.535.535 0 00-.067.752L21.697-7.15a.534.534 0 10.82-.687zM3.296-23.302c.047-.14.661 1.08.877 1.633.432 1.108 1.281 2.506 2.785 3.17 1.004.441 2.296.55 3.942.043a.267.267 0 11.157.51c-1.802.556-3.216.42-4.314-.065-1.65-.728-2.595-2.248-3.07-3.464-.236-.61-.355-1.14-.39-1.454a.993.993 0 01.013-.373zM50.865-28.712a.517.517 0 00-.916-.401L39.305-15.604a.515.515 0 00.377.834l7.479.406a.516.516 0 01.465.665c-.55 1.813-2.16 7.12-3.136 10.343a.515.515 0 00.898.47l11.347-14.243a.514.514 0 00-.395-.838c-1.746-.03-5.197-.093-6.58-.118a.515.515 0 01-.5-.598c.282-1.769 1.137-7.109 1.605-10.03z" fill="#fff"/><path d="M52.561-26.739c4.175 1.776 7.106 5.918 7.106 10.739 0 6.163-4.79 11.217-10.848 11.635l1.841-2.348c4.045-1.15 7.007-4.875 7.007-9.287a9.643 9.643 0 00-5.435-8.68l.329-2.059zm-6.109-.822l-2.045 2.593A9.658 9.658 0 0038.333-16a9.644 9.644 0 005.33 8.629l-.59 1.945c-3.98-1.856-6.74-5.895-6.74-10.574 0-5.914 4.411-10.807 10.119-11.561zm.026 21.096l.431.066-.728.914.297-.98zm2.869-19.097l-.359-.055-.501-.025 1.096-1.39-.236 1.47zM53.755 50.308l7.278 6.013c.237.197.347.51.283.812 0 0-.38 1.737-1.127 2.752-.43.584-.982.942-1.586.962-.413.014-.877-.118-1.372-.535-1.193-1.009-3.883-3.812-5.647-5.679l-.523.618s-13.19-9.37-14.382-11.834c-2.842-5.876.655-8.752.655-8.752l16.42 15.643zM38.165 37.33c-.005-.004-.003-.004-.008.003l.01.01c.022.139-.002 1.22 1.448 3.026 2.07 2.576 6.595 6.533 12.623 10.297L38.167 37.343l-.002-.013zm7.978 16.176c-2.219 2.134-3.937 3.778-4.075 3.893-2.128 1.778-3.12 2.6-4.956 1.428-2.293-1.465-1.834-5.083.125-6.971l.219-.213-.012.45a40.478 40.478 0 00-.072 2.62c0 .515.343.917.768.905.428-.01.781-.433.795-.947l.07-2.563c.047-.725.116-1.45.22-2.171l1.029-.992 1.223.984c-.01.376-.013.754-.013 1.13.002.513.344.915.77.903.392-.01.722-.367.783-.825l.818.629c.298.228.597.456.897.683l1.411 1.057zm5.676-15.72l.008-.009c1.959-1.888 5.137-1.884 6.97.125 1.26 1.38.201 2.982-2.067 5.346-.356.373-1.961 1.935-3.987 3.895l-5.152-4.909.07-.438 2.242-2.162-.037 1.367a40.478 40.478 0 00-.072 2.62c0 .514.343.917.769.905.426-.012.78-.435.793-.949l.072-2.561a26.07 26.07 0 01.391-3.23zm.838 15.575c1.724 1.831 4.446 4.675 5.641 5.685.095.08.168.144.247.145.095.002.152-.094.223-.174.122-.142.229-.315.324-.498a6.96 6.96 0 00.484-1.254l-6.019-4.973-.9 1.069zM4.335 20.084a4.969 4.969 0 01-.624-2.418v-10c0-2.758 2.24-5 5-5H23.29c2.76 0 5 2.242 5 5v10c0 .877-.226 1.702-.624 2.418l.001.082-.165.193a5.021 5.021 0 01-.902 1.053L22.666 26a3.335 3.335 0 01-3.332 3.334h-6.668A3.335 3.335 0 019.334 26L5.4 21.412A5.021 5.021 0 014.5 20.36l-.165-.193.001-.082zm1.539-.539a4.324 4.324 0 01-.54-2.099v-8.68a4.342 4.342 0 014.34-4.34h12.652a4.342 4.342 0 014.34 4.34v8.68c0 .762-.196 1.478-.54 2.099v.071l-.142.168a4.407 4.407 0 01-.785.916l-3.413 3.98a2.894 2.894 0 01-2.892 2.894h-5.788a2.894 2.894 0 01-2.892-2.894L6.8 20.7a4.407 4.407 0 01-.785-.916l-.142-.168v-.071zm1.461-.511a3.71 3.71 0 01-.462-1.797V9.81a3.715 3.715 0 013.713-3.712h10.828a3.715 3.715 0 013.713 3.712v7.427a3.71 3.71 0 01-.462 1.797v.061l-.122.143a3.726 3.726 0 01-.672.783l-2.92 3.406a2.476 2.476 0 01-2.475 2.475h-4.952a2.476 2.476 0 01-2.475-2.475l-2.92-3.406a3.726 3.726 0 01-.672-.783l-.122-.143v-.061zm12.612.48a.552.552 0 00-.163-.394.551.551 0 00-.393-.164H12.61a.551.551 0 00-.393.164.552.552 0 00-.163.394v2.471a.554.554 0 00.556.556h6.782a.554.554 0 00.556-.556v-2.471zm-1.3.69h-5.294v1.091h5.294v-1.091zm3.872-8.865a.512.512 0 00-.513-.512h-4.119a.511.511 0 00-.51.512v3.177c0 .283.228.513.51.513h4.12c.282 0 .512-.23.512-.513V11.34zm-7.91 0a.512.512 0 00-.513-.512H9.977a.511.511 0 00-.51.512v3.177c0 .283.228.513.51.513h4.12c.282 0 .512-.23.512-.513V11.34zm-1.256 1.073a.513.513 0 00-.513-.512h-1.605a.512.512 0 00-.513.512v1.032c0 .282.23.511.513.511h1.605a.512.512 0 00.513-.511v-1.032zm7.925 0a.512.512 0 00-.513-.512H19.16a.513.513 0 00-.513.512v1.032c0 .282.23.511.513.511h1.605a.511.511 0 00.513-.511v-1.032z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 4.5 KiB |
1
assets/images/tab-icons/rules.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M22.736 21.334a.705.705 0 00-.703-.705H9.968a.705.705 0 100 1.408h12.065a.704.704 0 00.703-.703zm0-4.156a.704.704 0 00-.703-.704H9.968a.705.705 0 100 1.409h12.065a.705.705 0 00.703-.705zm0-3.845a.704.704 0 00-.703-.704H9.968a.705.705 0 100 1.408h12.065a.705.705 0 00.703-.704zM6.378 8.15a2.745 2.745 0 01.14-5.485h16.218l.142.005a2.746 2.746 0 012.603 2.74v18.435h.03v4.63c0 .048.037.087.084.09a.089.089 0 00.093-.08l.455-4.56a2.745 2.745 0 01-.662 5.407H9.263a2.744 2.744 0 01-2.743-2.707h-.001V9.776L20.967 8.33a.09.09 0 00.08-.092.087.087 0 00-.088-.085H6.52l-.141-.003z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 749 B |
1
assets/images/tab-icons/security.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="5"><path d="M-15.69 8.852c3.02-1.958 7.309-4.454 9.655-5.444.934-.394 1.653-.536 2-.495A1.22 1.22 0 01-2.924 4.11c.012.324-.156 1.01-.548 1.91-1.01 2.323-3.455 6.597-5.382 9.621l.046 4.527c.002.213-.061.423-.18.6l-3.329 4.923a1.052 1.052 0 01-1.91-.763l.79-4.75c-.319.08-.646.129-.976.147-1.565-2.35-3.54-4.314-5.914-5.907.018-.332.067-.661.148-.981l-4.75.79a1.053 1.053 0 01-.763-1.912l4.923-3.328c.177-.119.386-.182.6-.18l4.479.045zm2.29 8.66l-4.014-4.016c-.295-.294-1.146-.407-1.065 0 .015.075.028.298.234.388 1.407.609 3.902 3.387 4.483 4.477.112.21.318.225.362.215.404-.098.294-.77 0-1.065zm5.527-9.639a2.437 2.437 0 01-3.446 3.445 2.437 2.437 0 013.446-3.445zm-.747.747a1.38 1.38 0 11-1.953 1.95A1.38 1.38 0 01-8.62 8.62z" fill="#fff"/><path d="M144 133.333c5.337 3.677 8.046 3.686 10.735 3.686 0 16.26-10.334 17.648-10.735 17.648-.401 0-10.733-1.335-10.733-17.214 2.754 0 5.334-.418 10.733-4.12z" fill="none" stroke="#fff" stroke-width="1.86" transform="matrix(.99376 0 0 1.1459 -127.102 -149.009)"/><path d="M23.471 16c-1.738 7.984-7.222 9.968-7.472 9.968v-9.063a.904.904 0 01.904-.904h6.568zM16 6.834v8.264a.904.904 0 01-.904.904H8.553c-.341-1.543-.545-3.31-.553-5.333 2.052 0 3.975-.653 8-3.835zM44.141 18.432c-.393 3.07-2.365 4.478-4.141 4.478-1.777 0-3.748-1.409-4.141-4.478h8.282zm-7.304.964s.351 2.683 2.73 2.683a.432.432 0 000-.864c-1.668 0-1.873-1.923-1.873-1.923a.432.432 0 00-.857.104zm7.213-3.262h-1.037l-2.46-6.621a.59.59 0 00-1.106 0l-2.46 6.62h-1.038l2.302-6.904a1.845 1.845 0 013.498 0l2.301 6.905z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 1.7 KiB |
1
assets/images/tab-icons/shield.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"><path d="M19.501 14.88l.437 7.263h4.038c.498 0 .903.404.903.902v4.816a.904.904 0 01-.903.903H8.024a.904.904 0 01-.903-.903v-4.816c0-.498.405-.902.903-.902h4.038l.437-7.263c.98.225 2.191.359 3.501.359s2.521-.134 3.501-.359zm-6.547 2.568a.406.406 0 01.425-.387l.813.038c.224.01.398.2.387.425l-.357 7.686a.405.405 0 01-.425.387l-.812-.037a.408.408 0 01-.388-.425l.357-7.687zm6.092 0a.406.406 0 00-.425-.387l-.813.038a.405.405 0 00-.387.425l.357 7.686c.01.224.2.398.425.387l.812-.037a.408.408 0 00.388-.425l-.357-7.687zm-5.261.408a.17.17 0 01.178-.163l.342.016a.171.171 0 01.163.179l-.322 6.939a.172.172 0 01-.179.163l-.342-.016a.17.17 0 01-.162-.179l.322-6.939zm4.43 0a.17.17 0 00-.178-.163l-.342.016a.171.171 0 00-.163.179l.322 6.939a.172.172 0 00.179.163l.342-.016a.17.17 0 00.162-.179l-.322-6.939zm1.027-7.289c1.612.331 2.677.901 2.677 1.548 0 1.021-2.652 1.851-5.919 1.851-3.267 0-5.919-.83-5.919-1.851 0-.647 1.065-1.217 2.677-1.548l.166-2.766c.897.171 1.95.27 3.076.27 1.126 0 2.179-.099 3.076-.27l.166 2.766zM16 3.236c3.267 0 5.919.829 5.919 1.851 0 1.021-2.652 1.851-5.919 1.851-3.267 0-5.919-.83-5.919-1.851 0-1.022 2.652-1.851 5.919-1.851z" fill="#fff"/><path d="M7.28 17.982c-.805 0-1.458-2.889-1.458-6.447 0-3.559.653-6.448 1.458-6.448" fill="none" stroke="#fff" stroke-width="1.0023042"/><path d="M6.272 19.833c-1.036 0-1.877-3.718-1.877-8.298s.84-8.299 1.877-8.299" fill="none" stroke="#fff"/><path d="M24.69 5.086c.805 0 1.458 2.89 1.458 6.448 0 3.558-.653 6.448-1.458 6.448" fill="none" stroke="#fff" stroke-width="1.0023042"/><path d="M25.728 3.236c1.036 0 1.877 3.718 1.877 8.298s-.84 8.299-1.877 8.299" fill="none" stroke="#fff"/></svg>
|
After Width: | Height: | Size: 1.8 KiB |
1
assets/images/tab-icons/solar.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M-11.439 37.261C-7.264 39.037-4.333 43.179-4.333 48c0 6.163-4.79 11.217-10.848 11.635l1.841-2.348c4.045-1.15 7.007-4.875 7.007-9.287a9.643 9.643 0 00-5.435-8.68l.329-2.059zm-6.109-.822l-2.045 2.593A9.658 9.658 0 00-25.667 48a9.644 9.644 0 005.33 8.629l-.59 1.945c-3.98-1.856-6.74-5.895-6.74-10.574 0-5.914 4.411-10.807 10.119-11.561zm.026 21.096l.431.066-.728.914.297-.98zm2.869-19.097l-.359-.055-.501-.025 1.096-1.39-.236 1.47zM22.005 26.607a1.87 1.87 0 00-1.72-1.137H11.65l-1.136 2.67a.858.858 0 00.79 1.193h10.563a.857.857 0 00.79-1.194l-.652-1.532zm-9.982.46h8.78a.4.4 0 000-.8h-8.78a.4.4 0 000 .8z" fill="#fff"/><path d="M22.005 26.607a1.87 1.87 0 00-1.72-1.137H11.65l-1.136 2.67a.858.858 0 00.79 1.193h10.563a.857.857 0 00.79-1.194l-.652-1.532zm-9.982.46h8.78a.4.4 0 000-.8h-8.78a.4.4 0 000 .8z" fill="#fff"/><path d="M26.437 4.272a1.87 1.87 0 00-1.851-1.605H7.415c-.93 0-1.72.684-1.851 1.605L2.696 24.348a1.873 1.873 0 001.85 2.135h22.908a1.868 1.868 0 001.851-2.135L26.437 4.272zM4.697 24.483h22.606l-2.83-19.817H7.528L4.697 24.483z" fill="#fff"/><path d="M25.032 18.256l.384 2.69a1.869 1.869 0 01-1.851 2.135H20.04v-.032l-.241-4.793h5.233zm-6.268 4.825H13.3l.242-4.825h4.979l.242 4.825zm-6.74-.032v.032H8.437a1.869 1.869 0 01-1.852-2.134l.384-2.691h5.298l-.241 4.793zm.306-6.07H7.15l.717-5.01h4.715l-.252 5.01zm6.126 0h-4.85l.253-5.01h4.345l.252 5.01zm6.394 0h-5.116l-.252-5.01h4.652l.716 5.01zM12.88 6.07l-.234 4.625H8.05l.431-3.02a1.87 1.87 0 011.852-1.605h2.548zm5.027 0l.233 4.625h-4.215l.232-4.625h3.75zm1.278 0h2.484c.931 0 1.72.685 1.851 1.606l.432 3.019h-4.535l-.232-4.625zM-10.448 28.055l-1.555 1.572a.887.887 0 01-1.264 0l-13.551-13.695-.42.425a.887.887 0 01-1.264 0l-1.075-1.086a.91.91 0 010-1.278L-17.96 2.254a.887.887 0 011.264 0l1.074 1.086a.91.91 0 010 1.277l-.42.425 13.551 13.695a.91.91 0 010 1.277l-1.88 1.901-1.571-1.587a.356.356 0 00-.124-.094l1.22-1.233c.206-.208.786-.049.58-.258a.523.523 0 00-.747 0l-8.093 8.18a.538.538 0 00-.001.755c.207.208-.038-.29.168-.497l.826-.835c.014.033.045.07.095.122l1.571 1.587zm-16.854-12.72l10.703-10.817c.262-.264.385-.568.276-.679-.109-.11-.262.165-.523.43L-27.55 15.085c-.26.264-.533.419-.424.529.109.11.41-.016.671-.28zm13.574 11.271l8.247-8.335L-17.307 6.32l-8.247 8.335 11.826 11.952zm-8.266-17.934l2.495-2.52a.537.537 0 000-.754.523.523 0 00-.747 0l-2.494 2.52a.537.537 0 000 .754c.207.209.54.209.746 0zm13.778 13.734l1.43-1.446c.015.034.046.071.096.122l1.57 1.587-1.402 1.418-1.57-1.587a.356.356 0 00-.124-.094zm-3.18 3.214l2.462-2.487c.013.033.044.07.095.122l1.57 1.587L-9.7 27.3l-1.57-1.587a.353.353 0 00-.124-.093zm-14.619-12.884l2.494-2.52a.538.538 0 000-.754.524.524 0 00-.747 0l-2.493 2.52a.538.538 0 000 .755c.206.208.54.208.746 0z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 2.8 KiB |
1
assets/images/tab-icons/song.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="5"><path d="M24 136v14" fill="none" stroke="#fff" stroke-width="1.63" transform="matrix(1.14426 0 0 1.30772 -.782 -174.02)"/><path d="M24 136v13.333" fill="none" stroke="#fff" stroke-width="1.63" transform="matrix(1.14426 0 0 1.30772 -15.216 -169.34)"/><ellipse cx="7.64" cy="152.692" rx="3.026" ry="1.974" fill="#fff" stroke="#fff" stroke-width="1.75" transform="translate(.04 -148.773) scale(1.14426)"/><ellipse cx="7.64" cy="152.692" rx="3.026" ry="1.974" fill="#fff" stroke="#fff" stroke-width="1.75" transform="translate(14.474 -152.58) scale(1.14426)"/><path d="M12.246 8.42c5.439-.023 10.232-1.646 14.434-4.625v4.692c-4.812-.064-9.622 1.461-14.434 4.624V8.42z" fill="#fff" stroke="#fff" stroke-width="2.0024550000000003"/></svg>
|
After Width: | Height: | Size: 901 B |
1
assets/images/tab-icons/sop.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M21.755-13.692l7.278 6.013c.237.197.347.51.283.812 0 0-.38 1.737-1.127 2.752-.43.584-.982.942-1.586.962-.413.014-.877-.118-1.372-.535-1.193-1.009-3.883-3.812-5.647-5.679l-.523.618S5.871-18.12 4.68-20.583c-2.842-5.876.655-8.752.655-8.752l16.42 15.643zM6.165-26.67c-.005-.004-.003-.004-.008.003l.01.01c.022.139-.002 1.22 1.448 3.026 2.07 2.576 6.595 6.533 12.623 10.297L6.167-26.657l-.002-.013zm7.978 16.176c-2.219 2.134-3.937 3.778-4.075 3.893-2.128 1.778-3.12 2.6-4.956 1.428-2.293-1.465-1.834-5.083.125-6.971l.219-.213-.012.45a40.478 40.478 0 00-.072 2.62c0 .515.343.917.768.905.428-.01.781-.433.795-.947l.07-2.563c.047-.725.116-1.45.22-2.171l1.029-.992 1.223.984c-.01.376-.013.754-.013 1.13.002.513.344.915.77.903.392-.01.722-.367.783-.825l.818.629c.298.228.597.456.897.683l1.411 1.057zm5.676-15.72l.008-.009c1.959-1.888 5.137-1.884 6.97.125 1.26 1.38.201 2.982-2.067 5.346-.356.373-1.961 1.935-3.987 3.895l-5.152-4.909.07-.438 2.242-2.162-.037 1.367a40.478 40.478 0 00-.072 2.62c0 .514.343.917.769.905.426-.012.78-.435.793-.949l.072-2.561a26.07 26.07 0 01.391-3.23zm.838 15.575c1.724 1.831 4.446 4.675 5.641 5.685.095.08.168.144.247.145.095.002.152-.094.223-.174.122-.142.229-.315.324-.498a6.96 6.96 0 00.484-1.254l-6.019-4.973-.9 1.069z" fill="#fff"/><g fill="#fff"><path d="M13.639 9.265a2.638 2.638 0 014.722 0l6.396 12.792a2.64 2.64 0 01-2.361 3.819H9.604a2.638 2.638 0 01-2.361-3.819l6.396-12.792zm.954 12.604c.267-.608.811-.992 1.407-.992s1.14.384 1.407.992l.001.002c.197.449.176.983-.056 1.41-.231.427-.64.687-1.081.687h-.542c-.441 0-.85-.26-1.081-.687a1.626 1.626 0 01-.056-1.41l.001-.002zM16 19.616c-1.705 0-1.537-3.613-1.537-5.827 0-1.419.437-2.727 1.537-2.727 1.1 0 1.537 1.23 1.537 2.711 0 2.214.168 5.843-1.537 5.843z"/><path d="M11.734 5.303L3.17 22.43a4.771 4.771 0 004.267 6.903h17.126a4.77 4.77 0 004.267-6.903L20.266 5.303a4.768 4.768 0 00-8.532 0zm1.905.966a2.64 2.64 0 014.722 0l8.486 16.973a2.64 2.64 0 01-2.361 3.819H7.514a2.638 2.638 0 01-2.361-3.819l8.486-16.973z"/></g></svg>
|
After Width: | Height: | Size: 2.1 KiB |
1
assets/images/tab-icons/space.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="5"><path d="M16.311 8.853c3.019-1.958 7.308-4.455 9.654-5.445.935-.393 1.653-.536 2-.495a1.22 1.22 0 011.112 1.197c.013.325-.156 1.011-.547 1.91-1.012 2.324-3.455 6.597-5.382 9.622l.045 4.526c.002.214-.06.423-.18.6l-3.328 4.923a1.052 1.052 0 01-1.912-.763l.791-4.75c-.318.08-.646.13-.975.147-1.565-2.35-3.541-4.314-5.914-5.906.017-.333.067-.662.147-.982l-4.75.79a1.053 1.053 0 01-.763-1.911l4.923-3.328c.178-.12.387-.183.6-.18l4.48.045zm2.29 8.659l-4.015-4.015c-.294-.294-1.146-.408-1.065 0 .015.074.028.298.234.387 1.407.609 3.902 3.387 4.484 4.478.111.21.317.225.362.214.403-.098.294-.77 0-1.064zm5.526-9.638a2.437 2.437 0 01-3.445 3.445 2.437 2.437 0 013.445-3.445zm-.747.747a1.38 1.38 0 11-1.953 1.95 1.38 1.38 0 011.953-1.95z" fill="#fff"/><path d="M9.707 16.677l-5.616 5.616M9.707 22.293L4.091 27.91M15.323 22.293L9.707 27.91" fill="none" stroke="#fff" stroke-width="2.000681"/></svg>
|
After Width: | Height: | Size: 1 KiB |
1
assets/images/tab-icons/supermatter.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"><path d="M-11.439 5.261C-7.264 7.037-4.333 11.179-4.333 16c0 6.163-4.79 11.217-10.848 11.635l1.841-2.348c4.045-1.15 7.007-4.875 7.007-9.287a9.643 9.643 0 00-5.435-8.68l.329-2.059zm-6.109-.822l-2.045 2.593A9.658 9.658 0 00-25.667 16a9.644 9.644 0 005.33 8.629l-.59 1.945c-3.98-1.856-6.74-5.895-6.74-10.574 0-5.914 4.411-10.807 10.119-11.561zm.026 21.096l.431.066-.728.914.297-.98zm2.869-19.097l-.359-.055-.501-.025 1.096-1.39-.236 1.47zM-10.448-3.945l-1.555 1.572a.887.887 0 01-1.264 0l-13.551-13.695-.42.425a.887.887 0 01-1.264 0l-1.075-1.086a.91.91 0 010-1.278l11.616-11.739a.887.887 0 011.264 0l1.074 1.086a.91.91 0 010 1.277l-.42.425 13.551 13.695a.91.91 0 010 1.277l-1.88 1.901-1.571-1.587a.356.356 0 00-.124-.094l1.22-1.233c.206-.208.786-.049.58-.258a.523.523 0 00-.747 0l-8.093 8.18a.538.538 0 00-.001.755c.207.208-.038-.29.168-.497l.826-.835c.014.033.045.07.095.122l1.571 1.587zm-16.854-12.72l10.703-10.817c.262-.264.385-.568.276-.679-.109-.11-.262.165-.523.43L-27.55-16.915c-.26.264-.533.419-.424.529.109.11.41-.016.671-.28zm13.574 11.271l8.247-8.335-11.826-11.952-8.247 8.335 11.826 11.952zm-8.266-17.934l2.495-2.52a.537.537 0 000-.754.523.523 0 00-.747 0l-2.494 2.52a.537.537 0 000 .754c.207.209.54.209.746 0zM-8.216-9.594l1.43-1.446c.015.034.046.071.096.122l1.57 1.587-1.402 1.418-1.57-1.587a.356.356 0 00-.124-.094zm-3.18 3.214l2.462-2.487c.013.033.044.07.095.122l1.57 1.587L-9.7-4.7l-1.57-1.587a.353.353 0 00-.124-.093zm-14.619-12.884l2.494-2.52a.538.538 0 000-.754.524.524 0 00-.747 0l-2.493 2.52a.538.538 0 000 .755c.206.208.54.208.746 0zM21.364 24.397l3.157-2.72 1.446 3.498-1.3 1.268H20.95l.415-2.046zm-7.983 2.046H9.546l-.439-3.249 3.39 1.565.071.027.813 1.657zm-.703-5.995l2.94 5.995h3.29l1.198-5.918-3.47-3.583-3.958 3.506zM7.94 17.582l2.737 4.098-2.396-1.106a.982.982 0 00-1.01.112.995.995 0 00-.306.386l-.354-.236-1.149-3.254H7.94zm11.641-.5l2.02-4.062 5.23-2.157-.54 6.62-4.272 3.68.154-.76a1.032 1.032 0 00-.269-.923l-2.323-2.398zm-8.29 1.893L7.393 13.14l.671-5.713 5.425 3.676.991 5.044-3.19 2.827zm4.933-4.333l-.854-4.354a1.018 1.018 0 00-.428-.65l-.552-.374 4.2-3.545 1.544 4.21-1.385 4.316-.649 1.307-.702-.725a.983.983 0 00-1.174-.185zm7.48-4.69l-1.698.7.138-.428c.07-.22.065-.458-.014-.674l-.34-.928 1.914-1.615v2.945z" fill="#fff"/><path d="M235.946 40.494l.022-.019 5.725-4.737a.998.998 0 011.574.42l1.077 2.88 3.019-2.495a1 1 0 011.637.77v4.202l1.882-.761a1 1 0 011.371 1.01l-.707 8.523a.998.998 0 01-.351.681l-1.778 1.501 1.957 4.638a1 1 0 01-.23 1.112l-2.089 1.996a1 1 0 01-.691.277H231.97a1 1 0 01-.99-.864l-.538-3.897-1.908-1.244a.994.994 0 01-.395-.499l-1.745-4.844a1 1 0 01.941-1.339h2.539l-1.048-1.538a.998.998 0 01-.166-.682l.908-7.585a.998.998 0 011.546-.714l4.832 3.208z" fill="none" stroke="#fff" stroke-width=".99" transform="matrix(1 0 0 1.02 -223.296 -33.219)"/></svg>
|
After Width: | Height: | Size: 2.9 KiB |
1
assets/images/tab-icons/surgery.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M11.793 18.242l1.761.958c.061.034.106.09.125.158a.262.262 0 01-.026.2c-.663 1.191-.12 2.684.122 2.944-1.347 2.65-5.186 6.26-9.254 6.6a.275.275 0 01-.256-.407c.87-1.58 5.41-9.839 6.076-11.05a.171.171 0 01.23-.068l.49.267L5.576 27.93s1.25-.56 1.383-.802l4.834-8.886zm1.502-2.76l2.808 1.528a.577.577 0 01.23.78l-.718 1.323a.577.577 0 01-.78.23l-2.81-1.528 1.27-2.334zm6.464-11.884l3.331.05a.574.574 0 01.497.851c-1.237 2.264-4.67 8.549-6.423 11.768a.575.575 0 01-.781.23l-2.81-1.528L19.76 3.598zm-8.465 13.82l-.134-.073a.579.579 0 01-.23-.78l.72-1.324a.576.576 0 01.78-.23l.134.072-1.27 2.335zm1.549-2.847l-.132-.07a.577.577 0 01-.23-.783l5.407-9.842a.578.578 0 01.514-.299l.417.006-5.976 10.988zM12.812 29.175s.478-.063 1.171-.114a12.397 12.397 0 011.171-.034c1.633.03 3.513.148 3.513.148a.5.5 0 000-1s-1.88.118-3.513.147a12.639 12.639 0 01-1.171-.033c-.693-.051-1.171-.114-1.171-.114a.5.5 0 000 1zM21.073 29.175s.478-.063 1.17-.114a12.397 12.397 0 011.172-.034c1.633.03 3.513.148 3.513.148a.5.5 0 000-1s-1.88.118-3.513.147a12.639 12.639 0 01-1.171-.033c-.693-.051-1.171-.114-1.171-.114a.5.5 0 000 1zM46.984-24.02s.147 3.67.147 7.342c0 3.673-.147 7.343-.147 7.343a1 1 0 002 0s-.146-3.67-.146-7.343c0-3.672.146-7.342.146-7.342a1 1 0 00-2 0zM9.523 44.34a5.6 5.6 0 011.905-.918 5.662 5.662 0 012.197-.15L12.49 45.87c-.128.016-.257.041-.384.075l-.28.092-2.302-1.697zm-3.384-2.494a9.342 9.342 0 014.258-2.477 9.342 9.342 0 014.927.016l-1.063 2.433a6.682 6.682 0 00-3.187.075 6.682 6.682 0 00-2.798 1.528l-2.137-1.575zm-3.472-2.559a13.025 13.025 0 016.59-4.171 13.03 13.03 0 017.795.317l-1.05 2.4a10.437 10.437 0 00-6.068-.194 10.437 10.437 0 00-5.159 3.202l-2.108-1.554z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 1.8 KiB |
1
assets/images/tab-icons/tcomm.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M26.588 13.034a1 1 0 00-1.225-.707L7.94 16.995c-.534.144-.85.692-.708 1.225l2.784 10.39a1 1 0 001.225.707l17.423-4.669a1 1 0 00.707-1.225l-2.783-10.39zm-13.131 13.05l3.29-.88c.496-.134.8-.606.68-1.055-.12-.449-.62-.705-1.117-.573l-3.29.882c-.496.133-.801.605-.68 1.054.12.449.62.705 1.117.573zm-1.142-2.915l3.29-.881c.496-.134.8-.606.68-1.055-.12-.449-.62-.705-1.117-.572l-3.29.881c-.496.134-.801.605-.68 1.054.12.449.62.706 1.117.573zm8.76-6.528a3.366 3.366 0 00-2.38 4.12 3.367 3.367 0 004.122 2.378 3.367 3.367 0 002.378-4.12 3.366 3.366 0 00-4.12-2.378zm-9.817 3.57l3.29-.882c.496-.132.8-.606.68-1.054-.12-.45-.62-.705-1.116-.573l-3.29.882c-.496.133-.802.605-.68 1.054.119.45.62.706 1.116.572zm10.27-1.878a1.614 1.614 0 01.835 3.116 1.614 1.614 0 01-.835-3.116zM9.523 12.34a5.6 5.6 0 011.905-.918 5.662 5.662 0 012.197-.15L12.49 13.87c-.128.016-.257.041-.385.075l-.28.092-2.301-1.697zM6.139 9.846a9.342 9.342 0 014.258-2.477 9.342 9.342 0 014.927.016L14.26 9.818a6.682 6.682 0 00-3.188.075 6.682 6.682 0 00-2.797 1.528L6.139 9.846zM2.667 7.287a13.025 13.025 0 016.59-4.171 13.03 13.03 0 017.795.317l-1.05 2.4a10.437 10.437 0 00-6.068-.194 10.437 10.437 0 00-5.159 3.202L2.667 7.287zM17.122 36.684v-2.49a1.501 1.501 0 00-3 0v2.49a1.5 1.5 0 003 0z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 1.4 KiB |
1
assets/images/tab-icons/tips.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M26.588-18.966a1 1 0 00-1.225-.707L7.94-15.005c-.534.144-.85.692-.708 1.225l2.784 10.39a1 1 0 001.225.707l17.423-4.669a1 1 0 00.707-1.225l-2.783-10.39zM13.457-5.916l3.29-.88c.496-.134.8-.606.68-1.055-.12-.449-.62-.705-1.117-.573l-3.29.882c-.496.133-.801.605-.68 1.054.12.449.62.705 1.117.573zM12.315-8.83l3.29-.881c.496-.134.8-.606.68-1.055-.12-.449-.62-.705-1.117-.572l-3.29.881c-.496.134-.801.605-.68 1.054.12.449.62.706 1.117.573zm8.76-6.528a3.366 3.366 0 00-2.38 4.12 3.367 3.367 0 004.122 2.378 3.367 3.367 0 002.378-4.12 3.366 3.366 0 00-4.12-2.378zm-9.817 3.57l3.29-.882c.496-.132.8-.606.68-1.054-.12-.45-.62-.705-1.116-.573l-3.29.882c-.496.133-.802.605-.68 1.054.119.45.62.706 1.116.572zm10.27-1.878a1.614 1.614 0 01.835 3.116 1.614 1.614 0 01-.835-3.116zM9.523-19.66a5.6 5.6 0 011.905-.918 5.662 5.662 0 012.197-.15L12.49-18.13c-.128.016-.257.041-.385.075l-.28.092-2.301-1.697zm-3.384-2.494a9.342 9.342 0 014.258-2.477 9.342 9.342 0 014.927.016l-1.063 2.433a6.682 6.682 0 00-3.188.075 6.682 6.682 0 00-2.797 1.528l-2.137-1.575zm-3.472-2.559a13.025 13.025 0 016.59-4.171 13.03 13.03 0 017.795.317l-1.05 2.4a10.437 10.437 0 00-6.068-.194 10.437 10.437 0 00-5.159 3.202l-2.108-1.554zM12.23 23.403a1.283 1.283 0 01-.007-.142c0-.322-.116-.686-.275-1.087-.312-.788-.802-1.672-1.289-2.589-.934-1.759-1.819-3.637-1.819-5.252 0-3.495 3.083-6.39 6.945-6.39s6.945 2.895 6.945 6.39c0 1.34-.878 3.166-1.815 4.97-.755 1.451-1.568 2.88-1.568 3.958l-.008.143c.02.082.03.168.03.256v4.577c0 .605-.49 1.097-1.096 1.097h-4.976a1.096 1.096 0 01-1.097-1.097V23.66c0-.089.01-.174.03-.257zm.63 4.223v.227c0 .498.402.902.895.902h4.06a.899.899 0 00.894-.902V24.09a.899.899 0 00-.894-.902h-4.06a.899.899 0 00-.895.902v.546c0-.396.402-.716.895-.716h4.06c.493 0 .894.32.894.716v2.991c0 .396-.4.717-.894.717h-4.06c-.493 0-.895-.32-.895-.717zm4.758-5.063l.046-5.481c0-.154-.064-.3-.177-.404l-.8-.733a.544.544 0 00-.812.083l-.202.278-.231-.291a.539.539 0 00-.8-.056l-.76.735a.536.536 0 00-.166.388l.038 5.481h.995l.037-5.25.17-.162.31.394a.546.546 0 00.868-.017l.266-.364.175.16.045 5.24h.998zM15.74 9.403s-2 .058-3.614 1.43c-.385.326-.748.728-1.047 1.22-.365.6-.64 1.334-.768 2.221a.736.736 0 001.445.263 4.669 4.669 0 01.69-1.615c.225-.339.48-.62.748-.855 1.183-1.043 2.636-1.199 2.636-1.199a.735.735 0 00-.09-1.466zM9.407 5.448l-1.048-.94A1.5 1.5 0 006.355 6.74l1.047.94a1.5 1.5 0 002.005-2.232zM24.167 7.68l1.048-.94a1.5 1.5 0 00-2.005-2.232l-1.047.94a1.5 1.5 0 002.004 2.233zM6.058 19.205l-.582.39a1.5 1.5 0 001.667 2.493l.582-.389a1.5 1.5 0 00-1.667-2.494zM5.452 11.927H2.667a1.5 1.5 0 000 3h2.785a1.5 1.5 0 000-3zM17.121 4.685V2.194a1.501 1.501 0 00-3 0v2.491a1.5 1.5 0 003 0zM23.623 21.7l1.169.78a1.5 1.5 0 001.667-2.493l-1.168-.782a1.5 1.5 0 00-1.668 2.494zM26.119 14.927h2.495a1.501 1.501 0 000-3h-2.496a1.5 1.5 0 000 3z" fill="#fff"/><g><path d="M16.31 40.852c3.02-1.958 7.309-4.454 9.655-5.444.934-.394 1.653-.536 2-.495a1.22 1.22 0 011.112 1.197c.012.324-.156 1.01-.548 1.91-1.01 2.323-3.455 6.597-5.382 9.621l.046 4.527c.002.213-.061.423-.18.6l-3.329 4.923a1.052 1.052 0 01-1.91-.763l.79-4.75c-.319.08-.646.129-.976.147-1.565-2.35-3.54-4.314-5.914-5.907.018-.332.067-.661.148-.981l-4.75.79a1.053 1.053 0 01-.763-1.912l4.923-3.328c.177-.119.386-.182.6-.18l4.479.045zm2.29 8.66l-4.014-4.016c-.295-.294-1.146-.407-1.065 0 .015.075.028.298.234.388 1.407.609 3.902 3.387 4.483 4.477.112.21.318.225.362.215.404-.098.294-.77 0-1.065zm5.527-9.639a2.437 2.437 0 01-3.446 3.445 2.437 2.437 0 013.446-3.445zm-.747.747a1.38 1.38 0 11-1.953 1.95 1.38 1.38 0 011.953-1.95z" fill="#fff"/></g></svg>
|
After Width: | Height: | Size: 3.6 KiB |
1
assets/images/tab-icons/toxins.svg
Normal file
After Width: | Height: | Size: 6.1 KiB |
1
assets/images/tab-icons/traitor.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M29.333 8.537a5.99 5.99 0 00-5.987-5.987H8.654a5.99 5.99 0 00-5.987 5.987v14.927a5.99 5.99 0 005.987 5.987h14.692a5.99 5.99 0 005.987-5.987V8.537zm-2.18 0v14.927a3.809 3.809 0 01-3.807 3.807H8.654a3.81 3.81 0 01-3.808-3.807V8.537a3.81 3.81 0 013.808-3.808h14.692a3.809 3.809 0 013.807 3.808z" fill="#fff"/><path d="M9.633 12.369h12.734a2.18 2.18 0 000-4.359H9.633a2.18 2.18 0 000 4.359z" fill="#fff"/><path d="M13.82 10.188v12.19a2.18 2.18 0 004.359 0v-12.19a2.18 2.18 0 00-4.36 0z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 657 B |
1
assets/images/tab-icons/trauma.svg
Normal file
After Width: | Height: | Size: 7.6 KiB |
1
assets/images/tab-icons/trial.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M-10.245-13.692l7.278 6.013c.237.197.347.51.283.812 0 0-.38 1.737-1.127 2.752-.43.584-.982.942-1.586.962-.413.014-.877-.118-1.372-.535-1.193-1.009-3.883-3.812-5.647-5.679l-.523.618s-13.19-9.37-14.382-11.834c-2.842-5.876.655-8.752.655-8.752l16.42 15.643zm-15.59-12.978c-.005-.004-.003-.004-.008.003l.01.01c.022.139-.002 1.22 1.448 3.026 2.07 2.576 6.595 6.533 12.623 10.297l-14.071-13.323-.002-.013zm7.978 16.176c-2.219 2.134-3.937 3.778-4.075 3.893-2.128 1.778-3.12 2.6-4.956 1.428-2.293-1.465-1.834-5.083.125-6.971l.219-.213-.012.45a40.478 40.478 0 00-.072 2.62c0 .515.343.917.768.905.428-.01.781-.433.795-.947l.07-2.563c.047-.725.116-1.45.22-2.171l1.029-.992 1.223.984c-.01.376-.013.754-.013 1.13.002.513.344.915.77.903.392-.01.722-.367.783-.825l.818.629c.298.228.597.456.897.683l1.411 1.057zm5.676-15.72l.008-.009c1.959-1.888 5.137-1.884 6.97.125 1.26 1.38.201 2.982-2.067 5.346-.356.373-1.961 1.935-3.987 3.895l-5.152-4.909.07-.438 2.242-2.162-.037 1.367a40.478 40.478 0 00-.072 2.62c0 .514.343.917.769.905.426-.012.78-.435.793-.949l.072-2.561a26.07 26.07 0 01.391-3.23zm.838 15.575c1.724 1.831 4.446 4.675 5.641 5.685.095.08.168.144.247.145.095.002.152-.094.223-.174.122-.142.229-.315.324-.498a6.96 6.96 0 00.484-1.254l-6.019-4.973-.9 1.069zM19.273 24.713h6.911a1 1 0 000-2h-6.911a1 1 0 100 2zM29.333 28.332c0-1.7-1.378-3.078-3.078-3.078h-7.053a3.078 3.078 0 00-3.078 3.078v.002a1 1 0 001 1h11.209a1 1 0 001-1v-.002zm-9.96-2.3s-2.05.28-2.05 2.18c0 .19.296.344.478.344s.33-.154.33-.344c0-1.332 1.469-1.496 1.469-1.496a.341.341 0 00.288-.383c-.022-.19-.334-.324-.515-.301zM22.356 13.294a2 2 0 000-2.829L19.47 7.579a2 2 0 00-2.829 0l-2.567 2.567a2 2 0 000 2.828l2.887 2.886a2 2 0 002.828 0l2.567-2.566zM12.369 14.966l2.624 2.624-9.159 9.16c-.181.181-.39.316-.613.407l-.085.032a1.857 1.857 0 01-1.375-.06l-.133-.067a1.787 1.787 0 01-.347-.247l-.071-.068a1.854 1.854 0 010-2.622l9.159-9.159zm4.037 2.174a.63.63 0 000-.886l-2.701-2.7a.624.624 0 00-.885 0h-.001a.63.63 0 000 .886l2.701 2.7a.622.622 0 00.885 0h.001zm4.474-9.506a.297.297 0 000 .424l1.021 1.022a.304.304 0 00.213.088.303.303 0 00.212-.088l.502-.502a1.026 1.026 0 000-1.446h-.001a1.023 1.023 0 00-1.445 0l-.502.502zM27.077 16.412a2 2 0 000-2.828l-.611-.612a2 2 0 00-2.829 0l-4.11 4.11a2 2 0 000 2.828l.612.612a2 2 0 002.829 0l4.109-4.11zM16.973 6.257a2 2 0 000-2.828l-.512-.512a2 2 0 00-2.829 0l-4.109 4.11a1.998 1.998 0 000 2.828l.511.512a2 2 0 002.829 0l4.11-4.11z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 2.5 KiB |
1
assets/images/tab-icons/turbine.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"><circle cx="48" cy="80" r="12.514" fill="none" stroke="#fff" stroke-width="1.67" transform="translate(-12.799 -32.017) scale(.60016)"/><circle cx="48" cy="80" r="12.514" fill="none" stroke="#fff" stroke-width="2.5" transform="matrix(.4001 0 0 .4001 -3.196 -16.013)"/><circle cx="48" cy="80" r="12.514" fill="#fff" stroke="#fff" stroke-width="3.81" transform="translate(3.419 -4.988) scale(.2623)"/><path d="M16.96 8.486c.19-.69 1.59-3.652 1.747-3.905.644-1.034 1.323-1.29 3.113-.9a.32.32 0 01.219.478c-.688 1.176-2.755 4.698-2.755 4.698s-.124-.007-.364-.035c-.049-.006 2.873-4.528 2.7-4.582-.194-.061-3.018 4.542-3.108 4.529a22.568 22.568 0 01-1.551-.283zM15.605 23.516c-.189.689-1.59 3.651-1.746 3.905-.644 1.034-1.323 1.29-3.113.9a.32.32 0 01-.219-.479c.687-1.176 2.754-4.697 2.754-4.697s.124.006.365.034c.049.006-2.873 4.528-2.7 4.583.194.06 3.018-4.542 3.107-4.529.382.054.902.143 1.552.283zM23.528 16.4c.689.189 3.651 1.59 3.905 1.746 1.034.644 1.29 1.323.9 3.113a.32.32 0 01-.479.22c-1.176-.688-4.697-2.755-4.697-2.755s.006-.124.034-.365c.006-.048 4.528 2.873 4.583 2.7.06-.194-4.542-3.018-4.529-3.107.054-.382.143-.902.283-1.552zM8.565 15.592c-.689-.189-3.651-1.59-3.905-1.746-1.034-.644-1.29-1.323-.9-3.113a.32.32 0 01.479-.219c1.176.687 4.697 2.755 4.697 2.755s-.006.124-.034.364c-.006.049-4.528-2.873-4.583-2.7-.06.194 4.542 3.018 4.529 3.107-.054.382-.143.903-.283 1.552zM22.006 11.333c.621-.353 3.707-1.458 3.997-1.526 1.186-.276 1.847.023 2.837 1.565a.32.32 0 01-.183.493c-1.318.345-5.27 1.374-5.27 1.374s-.083-.093-.233-.282c-.03-.039 5.233-1.17 5.15-1.331-.095-.181-5.346 1.077-5.4 1.005a22.568 22.568 0 01-.898-1.298zM10.42 21.002c-.62.354-3.706 1.459-3.996 1.527-1.186.276-1.847-.023-2.837-1.565a.32.32 0 01.183-.493c1.318-.346 5.27-1.374 5.27-1.374s.083.092.233.282c.03.039-5.233 1.17-5.15 1.331.095.18 5.346-1.077 5.4-1.005.232.309.537.739.898 1.297zM21.053 21.573c.354.62 1.459 3.706 1.527 3.996.276 1.187-.023 1.848-1.565 2.837a.32.32 0 01-.493-.183c-.346-1.317-1.374-5.27-1.374-5.27s.092-.082.282-.232c.039-.03 1.17 5.233 1.331 5.15.18-.095-1.077-5.347-1.005-5.4.309-.232.739-.538 1.297-.898zM11.046 10.422c-.354-.62-1.459-3.706-1.527-3.996-.276-1.187.023-1.848 1.565-2.838a.32.32 0 01.493.184c.346 1.317 1.374 5.27 1.374 5.27s-.092.082-.282.232c-.039.03-1.17-5.233-1.331-5.15-.18.095 1.077 5.347 1.005 5.4-.309.232-.74.537-1.297.898zM19.752 9.534c.433-.548 2.822-2.675 3.06-2.843.972-.682 1.678-.654 3.131.373a.32.32 0 01.144.26.32.32 0 01-.13.266c-1.073.802-4.259 3.164-4.259 3.164s-.109-.054-.314-.17c-.041-.024 4.31-2.972 4.176-3.087-.152-.13-4.446 2.929-4.521 2.883a22.031 22.031 0 01-1.287-.846zM12.797 22.52c-.433.547-2.822 2.674-3.06 2.842-.972.682-1.678.654-3.131-.373a.32.32 0 01-.144-.26.32.32 0 01.13-.266c1.074-.802 4.259-3.164 4.259-3.164s.109.054.314.17c.042.024-4.31 2.972-4.175 3.087.15.13 4.445-2.929 4.52-2.883.323.195.757.473 1.287.847zM22.632 19.151c.547.433 2.674 2.822 2.842 3.06.682.972.654 1.678-.373 3.131a.32.32 0 01-.26.144.32.32 0 01-.266-.13c-.802-1.074-3.164-4.259-3.164-4.259s.054-.109.17-.314c.024-.042 2.972 4.31 3.087 4.175.13-.15-2.929-4.445-2.883-4.52.195-.323.473-.757.847-1.287zM9.496 12.714c-.547-.433-2.674-2.823-2.842-3.06-.682-.972-.654-1.678.373-3.132a.32.32 0 01.26-.143.32.32 0 01.266.129c.802 1.074 3.164 4.26 3.164 4.26s-.054.108-.17.313c-.024.042-2.972-4.31-3.087-4.175-.13.152 2.929 4.446 2.883 4.521-.195.323-.473.756-.847 1.287zM23.199 14.018c.693-.08 3.887.105 4.173.154 1.17.205 1.65.724 1.95 2.478a.32.32 0 01-.081.285.32.32 0 01-.28.097c-1.326-.193-5.249-.775-5.249-.775s-.04-.114-.101-.342c-.013-.047 5.148.946 5.134.77-.015-.199-5.214-1.073-5.235-1.159-.09-.366-.2-.869-.311-1.508zM9.098 18.283c-.693.081-3.887-.104-4.174-.154-1.169-.205-1.649-.723-1.95-2.478a.32.32 0 01.082-.285.32.32 0 01.28-.097c1.326.193 5.249.775 5.249.775s.039.115.101.343c.013.046-5.148-.946-5.135-.77.016.198 5.215 1.073 5.236 1.158.09.366.2.869.311 1.508zM18.434 22.855c.081.693-.104 3.887-.154 4.173-.205 1.17-.723 1.65-2.478 1.95a.32.32 0 01-.285-.081.32.32 0 01-.097-.28c.193-1.326.775-5.249.775-5.249s.115-.04.343-.101c.046-.013-.946 5.148-.77 5.134.198-.015 1.073-5.214 1.158-5.235.366-.09.869-.2 1.508-.311zM13.698 9.015c-.08-.693.105-3.887.154-4.174.205-1.169.724-1.649 2.478-1.95a.32.32 0 01.285.082.32.32 0 01.098.28c-.193 1.326-.776 5.249-.776 5.249s-.114.039-.342.101c-.046.013.946-5.149.77-5.135-.198.016-1.073 5.215-1.158 5.236-.366.09-.87.2-1.509.31z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 4.5 KiB |
1
assets/images/tab-icons/unknown.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5"><path d="M59.485 10.232c0-3.183-2.446-5.767-5.46-5.767h-10.92c-3.014 0-5.461 2.584-5.461 5.767v11.536c0 3.183 2.447 5.767 5.461 5.767h10.92c3.014 0 5.46-2.584 5.46-5.767V10.232z" fill="none" stroke="#fff" stroke-width="2.97" transform="rotate(45 25.436 -16.758) scale(.86333 .81734)"/><path d="M44.849 14.354a3.718 3.718 0 013.716-3.716 3.718 3.718 0 013.716 3.716 3.718 3.718 0 01-3.716 3.716c-1.17 0 .445 3.776.445 3.776" fill="none" stroke="#fff" stroke-width="2.73" transform="matrix(.7474 .11886 -.12555 .70758 -18.515 -3.04)"/><path d="M49.627 22.899l-.097-.548" fill="none" stroke="#fff" stroke-width="1.96" transform="matrix(1.04955 -.00858 .00906 .99364 -36.237 -.551)"/></svg>
|
After Width: | Height: | Size: 857 B |
1
assets/images/tab-icons/uplink.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M10.001 3.873a1.56 1.56 0 00-1.494.863l-4.71 9.968c-.2.405-.185.883.04 1.274 0 0 1.587 2.605 3.11 5.25 1.522 2.644 2.979 5.325 2.979 5.325.228.395.639.649 1.094.678l10.99.869a1.538 1.538 0 001.473-.85l4.738-9.956a1.353 1.353 0 00-.04-1.28s-1.598-2.6-3.127-5.24c-1.53-2.641-2.99-5.32-2.99-5.32a1.34 1.34 0 00-1.075-.667l-10.988-.914zm10.13 3.557l-9.302-.4-4.297 8.256c.527.955 1.563 2.818 2.63 4.662a277.167 277.167 0 002.73 4.597l9.302.44 4.277-8.277a264.188 264.188 0 00-2.614-4.667 255.043 255.043 0 00-2.726-4.611zm-4.203 9.474l-.006-.118c0-.76.618-1.377 1.377-1.377h2.657a1.377 1.377 0 010 2.755h-1.28v1.32h1.28a1.378 1.378 0 010 2.754H17.3l-.141-.008-.137-.02-.133-.034-.02-.008a1.375 1.375 0 01-.947-1.308v-3.837l.006-.12zm-4.102-3.75h-.542a1.378 1.378 0 010-2.753h3.838a1.378 1.378 0 010 2.754h-.542v2.963a1.378 1.378 0 01-2.754 0v-2.963z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 1,021 B |
1
assets/images/tab-icons/virus.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M16.87 8.903l.037-.125a18.911 18.911 0 00.531-2.346c.23-1.42.311-2.405.311-2.405a1.409 1.409 0 012.72.729c.001 0-.421.894-.932 2.238a19.291 19.291 0 00-.712 2.298l-.03.126c.337.143.66.312.968.502l.058-.09c.574-.908.932-1.56.932-1.56a.846.846 0 011.35 1.016s-.526.524-1.24 1.328l-.07.082c.305.276.585.578.839.9l.116-.061a19.314 19.314 0 002.035-1.283c1.166-.842 1.92-1.48 1.92-1.48a1.408 1.408 0 011.409 2.438s-.932.334-2.243.923a19.603 19.603 0 00-2.129 1.121l-.11.069c.136.335.247.682.331 1.039l.104-.022c1.048-.236 1.761-.445 1.761-.445a.845.845 0 01.238 1.673s-.744-.002-1.817.062l-.107.008a7.155 7.155 0 01-.044 1.231l.126.038a18.911 18.911 0 002.345.532c1.42.23 2.406.31 2.406.31a1.409 1.409 0 01-.729 2.72c0 .002-.895-.42-2.239-.931a19.291 19.291 0 00-2.297-.712l-.126-.03c-.143.336-.312.66-.503.967l.09.059c.908.573 1.56.931 1.56.931a.846.846 0 01-1.016 1.351s-.523-.527-1.328-1.24l-.081-.071a7.219 7.219 0 01-.901.84l.062.115a19.314 19.314 0 001.283 2.035 34.82 34.82 0 001.48 1.921 1.408 1.408 0 01-2.439 1.408s-.333-.931-.923-2.243a19.603 19.603 0 00-1.12-2.128l-.07-.11a7.059 7.059 0 01-1.038.33l.021.104c.237 1.048.445 1.761.445 1.761a.845.845 0 01-1.673.238s.002-.744-.062-1.816l-.008-.107a7.155 7.155 0 01-1.231-.044l-.037.125a18.911 18.911 0 00-.532 2.346c-.23 1.42-.311 2.405-.311 2.405a1.409 1.409 0 01-2.72-.729c-.001 0 .421-.894.932-2.239a19.291 19.291 0 00.712-2.297l.03-.126a7.153 7.153 0 01-.968-.502l-.058.09c-.574.908-.932 1.56-.932 1.56a.846.846 0 01-1.35-1.016s.526-.524 1.24-1.329l.07-.08a7.219 7.219 0 01-.839-.902l-.116.062a19.314 19.314 0 00-2.035 1.283c-1.166.842-1.92 1.48-1.92 1.48a1.408 1.408 0 01-1.409-2.439s.932-.333 2.243-.922a19.603 19.603 0 002.129-1.121l.11-.07a7.059 7.059 0 01-.331-1.038l-.104.022c-1.048.236-1.76.445-1.76.445a.845.845 0 01-.239-1.674s.744.003 1.817-.062l.107-.007a7.155 7.155 0 01.044-1.231l-.125-.038a18.911 18.911 0 00-2.346-.532 34.266 34.266 0 00-2.406-.31 1.409 1.409 0 01.729-2.72c0-.002.895.42 2.239.931a19.291 19.291 0 002.297.712l.126.03c.144-.336.313-.66.503-.967l-.09-.059c-.908-.573-1.56-.932-1.56-.932a.846.846 0 011.016-1.35s.524.527 1.328 1.24l.081.071c.276-.305.578-.586.901-.84l-.061-.115a19.314 19.314 0 00-1.284-2.035c-.841-1.166-1.48-1.921-1.48-1.921a1.408 1.408 0 012.439-1.409s.334.932.923 2.244a19.603 19.603 0 001.12 2.128l.07.11a7.059 7.059 0 011.038-.33l-.021-.104c-.237-1.048-.445-1.761-.445-1.761a.845.845 0 011.673-.238s-.002.743.062 1.816l.008.107a7.155 7.155 0 011.231.044zm-3.537 7.567a1.809 1.809 0 010 3.615 1.808 1.808 0 010-3.615zm5.476-3.194a2.254 2.254 0 11-2.252 2.253 2.254 2.254 0 012.252-2.253zm-5.067-1.482a1.202 1.202 0 110 2.405 1.202 1.202 0 010-2.405zM11.793 50.242l1.761.958c.061.034.106.09.125.158a.262.262 0 01-.026.2c-.663 1.191-.12 2.684.122 2.944-1.347 2.65-5.186 6.26-9.254 6.6a.275.275 0 01-.256-.407c.87-1.58 5.41-9.839 6.076-11.05a.171.171 0 01.23-.068l.49.267L5.576 59.93s1.25-.56 1.383-.802l4.834-8.886zm1.502-2.76l2.808 1.528a.577.577 0 01.23.78l-.718 1.323a.577.577 0 01-.78.23l-2.81-1.528 1.27-2.334zm6.464-11.884l3.331.05a.574.574 0 01.497.851c-1.237 2.264-4.67 8.549-6.423 11.768a.575.575 0 01-.781.23l-2.81-1.528 6.186-11.371zm-8.465 13.82l-.134-.073a.579.579 0 01-.23-.78l.72-1.324a.576.576 0 01.78-.23l.134.072-1.27 2.335zm1.549-2.847l-.132-.07a.577.577 0 01-.23-.783l5.407-9.842a.578.578 0 01.514-.299l.417.006-5.976 10.988zM46.984 7.98s.147 3.67.147 7.342c0 3.673-.147 7.343-.147 7.343a1 1 0 002 0s-.146-3.67-.146-7.343c0-3.672.146-7.342.146-7.342a1 1 0 00-2 0z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 3.6 KiB |
1
assets/images/tab-icons/weapons.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M13.549 12.928c-1.676 2.251-9.623 12.936-9.541 13.01.092.083.4.329.488.244.203-.17.898-.755 1.694-1.701.202-.239.415-.497.63-.777.303-.395.613-.831.936-1.286 1.163-1.634 2.447-3.555 3.609-5.226a568.052 568.052 0 012.727-3.893c.692.474 1.299.933 1.84 1.374-1.27 1.57-2.642 3.243-3.882 4.892-3.2 4.255-5.808 8.139-5.808 8.139-.615.829-1.837 1.038-2.728.466-.892-.573-1.115-1.711-.5-2.54 0 0 2.973-3.65 6.11-7.945 1.254-1.715 2.482-3.561 3.637-5.267l.788.51zm6.551 3.6c-1.422-1.561-3.412-3.463-7.21-5.673l2.828-4.558L12.42 4.81c4-2.647 8.641.352 12.688 3.611a8.312 8.312 0 002.129 1.241c.788.317 1.682.673 1.682.673s-2.809 6.881-6.394 8.813c-.64-.578-1.213-1.258-1.9-2.035 1.714-1.543 5.035-5.717 4.927-8.072-1.037 2.987-2.891 5.46-5.45 7.487z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 916 B |
1
assets/images/tab-icons/wound.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M14.984-24.02s.147 3.67.147 7.342c0 3.673-.147 7.343-.147 7.343a1 1 0 002 0s-.146-3.67-.146-7.343c0-3.672.146-7.342.146-7.342a1 1 0 00-2 0zM10.726 17.79l-.03-.025a.66.66 0 01-.107-.696l.976-2.72a.713.713 0 01.141-.217l-.512-.583-.585-.695-.301-.375-.091.008s-.337-.142-.872-.267a6.578 6.578 0 00-.87-.143 5.102 5.102 0 00-.522-.014c-.665.006-1.217.056-1.217.056a.661.661 0 01-.525-1.07l1.501-2.182a34.413 34.413 0 01-2.153-3.89 1.096 1.096 0 01-.285-.932c.04-.284.18-.563.51-.777a1.062 1.062 0 011.377.216c.153.02.44.336.77.51.693.367 1.662.869 2.807 1.537.136.006.435.007.828-.032.272-.027.567-.074.87-.147.171-.04.338-.099.498-.155.628-.22 1.133-.448 1.133-.448a.661.661 0 01.844.842l-.622 2.22c.719.511 1.46 1.072 2.208 1.69a6.682 6.682 0 001.695-.064c.174-.03.344-.076.507-.122.642-.178 1.16-.368 1.16-.368a.66.66 0 01.785.896l-.93 2.622c.724.751 1.436 1.558 2.126 2.424a6.593 6.593 0 001.39.28c.175.017.352.016.52.013.666-.008 1.218-.06 1.218-.06a.661.661 0 01.529 1.067l-1.35 1.978a31.973 31.973 0 012.53 5.05.904.904 0 01-1.214 1.157 37.475 37.475 0 01-4.714-2.545 23.232 23.232 0 00-.948-2.723l-.103-.24c.29.215.586.427.886.633l.677.388c.097.067.182.147.248.24.797.52 1.615 1.01 2.455 1.471a30.225 30.225 0 00-2.925-4.7l-.382-.43a1.015 1.015 0 01-.138-.242 30.971 30.971 0 00-1.33-1.558c-3.612-3.962-7.63-6.395-10.3-7.82a37.652 37.652 0 004.169 5.856l-.04.056a.962.962 0 00-.05.092s-.783 1.639-1.7 3.697l-.542 1.241zm6.01 4.242l.084.215a.615.615 0 01-.084-.215zm-2.147-7.649l.35.364-.147-.018a1.058 1.058 0 00-.396.065l.193-.411z" fill="#fff"/><path d="M15.734 13.308a1.06 1.06 0 00-1.81 0s-.778 1.628-1.688 3.672c-.527 1.181-1.101 2.492-1.558 3.724-.498 1.341-.874 2.588-.877 3.504a5.039 5.039 0 001.442 3.584 5.09 5.09 0 003.585 1.54 5.133 5.133 0 003.664-1.461 5.19 5.19 0 001.576-3.663c.023-1.18-.515-2.931-1.245-4.698-1.267-3.069-3.089-6.202-3.089-6.202zm-.974 2.479c-.27.404-.577.879-.895 1.402a30.373 30.373 0 00-1.596 2.946c-.701 1.516-1.205 3.04-1.208 4.073a3.723 3.723 0 001.135 2.632 3.675 3.675 0 002.632 1.038 3.627 3.627 0 002.555-1.116 3.574 3.574 0 001.001-2.554c-.018-1.01-.58-2.473-1.262-3.958-.76-1.661-1.698-3.334-2.362-4.463z" fill="#fff"/><path d="M14.829 13.858s-4.397 7.246-4.397 10.35a4.4 4.4 0 004.397 4.398 4.4 4.4 0 004.397-4.398c0-3.104-4.397-10.35-4.397-10.35zm.13 12.476c-1.345 0-2.225-1.12-2.225-2.465a.794.794 0 00-1.589 0c0 2.254 1.561 4.054 3.814 4.054a.794.794 0 000-1.589z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 2.5 KiB |
1
assets/images/tab-icons/xeno.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"><path d="M14.652 19.178c.341.353.82.572 1.348.572.528 0 1.006-.22 1.347-.572l.75.433a5.337 5.337 0 002.185 6.835 5.338 5.338 0 006.443-.852l.8.46a7.202 7.202 0 01-9.029 1.51A7.153 7.153 0 0116 25.159a7.164 7.164 0 01-2.497 2.407 7.202 7.202 0 01-9.029-1.51.46.46 0 01.8-.461h0a5.338 5.338 0 006.443.852 5.337 5.337 0 002.185-6.835l.75-.433zm12.073 6.416a.46.46 0 01.8.461l-.8-.461zM16.58 14.856a5.337 5.337 0 004.797-5.307 5.338 5.338 0 00-3.959-5.154v-.923a7.2 7.2 0 015.821 7.064 7.147 7.147 0 01-.968 3.604 7.168 7.168 0 013.422.962 7.203 7.203 0 013.207 8.574.461.461 0 01-.63.166.46.46 0 01-.17-.628h0a5.339 5.339 0 00-2.484-6.006 5.337 5.337 0 00-6.925 1.408l-.834-.482a1.877 1.877 0 00-1.277-2.042v-1.236zM3.9 23.214a.46.46 0 01-.17.628.46.46 0 01-.629-.166l.8-.462zm9.41-4.598a5.337 5.337 0 00-6.926-1.408A5.339 5.339 0 003.9 23.214l-.799.462a7.202 7.202 0 013.206-8.574 7.157 7.157 0 013.508-.963A7.2 7.2 0 0114.67 3.472a.46.46 0 010 .923h0a5.338 5.338 0 00-3.959 5.154 5.336 5.336 0 004.71 5.297v1.246a1.877 1.877 0 00-1.277 2.042l-.834.482zm4.107-14.221a.46.46 0 010-.923v.923z" fill="#fff" stroke="#fff" stroke-width=".5"/><path d="M7.656 18.26a3.795 3.795 0 012.206-.178 6.086 6.086 0 002.861 4.835 3.783 3.783 0 01-1.213 1.848 8.315 8.315 0 01-3.854-6.505zm14.42-.163a3.786 3.786 0 012.209.139 8.32 8.32 0 01-3.822 6.507 3.787 3.787 0 01-1.195-1.858 6.079 6.079 0 002.808-4.788zm-9.799-7.834a8.256 8.256 0 013.692-.864c1.38 0 2.681.336 3.826.932a3.79 3.79 0 01-1.059 1.941 6.012 6.012 0 00-2.767-.666 5.98 5.98 0 00-2.666.618 3.802 3.802 0 01-1.026-1.961zM-10.245 50.308l7.278 6.013c.237.197.347.51.283.812 0 0-.38 1.737-1.127 2.752-.43.584-.982.942-1.586.962-.413.014-.877-.118-1.372-.535-1.193-1.009-3.883-3.812-5.647-5.679l-.523.618s-13.19-9.37-14.382-11.834c-2.842-5.876.655-8.752.655-8.752l16.42 15.643zm-15.59-12.978c-.005-.004-.003-.004-.008.003l.01.01c.022.139-.002 1.22 1.448 3.026 2.07 2.576 6.595 6.533 12.623 10.297l-14.071-13.323-.002-.013zm7.978 16.176c-2.219 2.134-3.937 3.778-4.075 3.893-2.128 1.778-3.12 2.6-4.956 1.428-2.293-1.465-1.834-5.083.125-6.971l.219-.213-.012.45a40.478 40.478 0 00-.072 2.62c0 .515.343.917.768.905.428-.01.781-.433.795-.947l.07-2.563c.047-.725.116-1.45.22-2.171l1.029-.992 1.223.984c-.01.376-.013.754-.013 1.13.002.513.344.915.77.903.392-.01.722-.367.783-.825l.818.629c.298.228.597.456.897.683l1.411 1.057zm5.676-15.72l.008-.009c1.959-1.888 5.137-1.884 6.97.125 1.26 1.38.201 2.982-2.067 5.346-.356.373-1.961 1.935-3.987 3.895l-5.152-4.909.07-.438 2.242-2.162-.037 1.367a40.478 40.478 0 00-.072 2.62c0 .514.343.917.769.905.426-.012.78-.435.793-.949l.072-2.561a26.07 26.07 0 01.391-3.23zm.838 15.575c1.724 1.831 4.446 4.675 5.641 5.685.095.08.168.144.247.145.095.002.152-.094.223-.174.122-.142.229-.315.324-.498a6.96 6.96 0 00.484-1.254l-6.019-4.973-.9 1.069z" fill="#fff"/></svg>
|
After Width: | Height: | Size: 2.9 KiB |
1
assets/images/tab-icons/xmorph.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2"><path d="M42.001-28.127a1.56 1.56 0 00-1.494.863l-4.71 9.968c-.2.405-.185.883.04 1.274 0 0 1.587 2.605 3.11 5.25 1.522 2.644 2.979 5.325 2.979 5.325.228.395.639.649 1.094.678l10.99.869a1.538 1.538 0 001.473-.85l4.738-9.956a1.353 1.353 0 00-.04-1.28s-1.598-2.6-3.127-5.24c-1.53-2.641-2.99-5.32-2.99-5.32a1.34 1.34 0 00-1.075-.667l-10.988-.914zm10.13 3.557l-9.302-.4-4.297 8.256c.527.955 1.563 2.818 2.63 4.662a277.167 277.167 0 002.73 4.597l9.302.44 4.277-8.277a264.188 264.188 0 00-2.614-4.667 255.043 255.043 0 00-2.726-4.611zm-4.203 9.474l-.006-.118c0-.76.618-1.377 1.377-1.377h2.657a1.377 1.377 0 010 2.755h-1.28v1.32h1.28a1.378 1.378 0 010 2.754H49.3l-.141-.008-.137-.02-.133-.034-.02-.008a1.375 1.375 0 01-.947-1.308v-3.837l.006-.12zm-4.102-3.75h-.542a1.378 1.378 0 010-2.753h3.838a1.378 1.378 0 010 2.754h-.542v2.963a1.378 1.378 0 01-2.754 0v-2.963zM4.384 15.33c.058.173.163.329.303.448 11.431 9.674 22.633-.007 22.633-.007a.996.996 0 00.296-.441s1.485-4.532-.785-8.16C25.353 4.81 22.283 2.728 16 2.728c-6.283 0-9.353 2.081-10.831 4.442-2.27 3.628-.785 8.16-.785 8.16zm21.412-.897c.237-.882.846-3.794-.661-6.202C23.901 6.258 21.252 4.728 16 4.728S8.099 6.258 6.865 8.23c-1.51 2.414-.895 5.335-.659 6.21 9.162 7.525 18.098 1.162 19.59-.008zM28.076 18.534a1 1 0 00-1.457-1.283c-1.845 1.282-2.505 1.587-2.505 1.587a1 1 0 00-.579 1.072l1.05 6.486a1 1 0 001.987-.197c-.099-2.693.263-5.28 1.504-7.665zM23.283 29.365a1 1 0 00.982-1.19l-1.087-5.607a.999.999 0 00-1.97.038l-.863 5.607a1.001 1.001 0 00.988 1.152h1.95zM5.587 17.448a1 1 0 00-1.439 1.317c1.32 2.313 1.797 4.837 1.492 7.556a1 1 0 001.98.272l1.05-6.486a.999.999 0 00-.578-1.072s-.66-.305-2.505-1.587zM7.95 28.175a.998.998 0 00.983 1.19h1.95a1 1 0 00.988-1.152l-.864-5.607a1 1 0 00-1.97-.038l-1.086 5.607z" fill="#fff"/><path d="M14.847 21.232a.998.998 0 00-.994-1.103h-1.04a1 1 0 00-.996 1.082l.46 5.607a1 1 0 001.991.02l.58-5.606zM14.511 28.255a.75.75 0 00.742.86h1.494a.748.748 0 00.745-.838l-.661-5.607a.75.75 0 00-1.487-.022l-.833 5.607zM20.408 21.232a.998.998 0 00-.994-1.103h-1.04a1 1 0 00-.996 1.082l.46 5.607a1 1 0 001.991.02l.58-5.606zM8.428 12.073s-.177-1.764 1.29-3.182C10.792 7.85 12.693 7.035 16 7.035a.75.75 0 000-1.5c-3.872 0-6.067 1.06-7.325 2.277-2.032 1.965-1.737 4.428-1.737 4.428a.75.75 0 101.49-.167z" fill="#fff"/><g><path d="M39.906 9.59c.293-3.12 2.411-5.878 5.147-6.546 3.62-.883 6.813.782 8.206 3.757 1.734.153 3.289.476 4.39.877 1.825.664 3.096 2.121 3.385 3.467.287 1.345-.227 3.594-2.357 5.251-2.033 1.582-5.11 3.904-10.735 4.685-3.934.545-7.657.16-10.079-.72-1.825-.665-2.602-2.185-2.89-3.53-.288-1.346.124-3.522 2.371-5.41a19.03 19.03 0 012.562-1.83zm7.186-4.866a4.295 4.295 0 00-1.226.09c-2.652.567-4.101 3.15-3.444 6.225.162.754.827 1.222 1.728 1.452a.74.74 0 00.248.122c.97.298 3.958.606 6.673-.72-3.737 1.952-10.019 2.722-10.953.313-.487.32-.937.649-1.35.978-.998.794-1.805 2.096-1.605 3.037.202.941 1.105 1.611 2.382 2.076 2.231.812 5.58.913 9.159.147 3.58-.766 6.592-2.23 8.296-3.884.975-.946 1.523-1.928 1.321-2.87-.2-.94-1.103-1.611-2.38-2.076a10.673 10.673 0 00-2.11-.509c-.118.72-.682 1.41-1.522 2.024.274-.615-.632-6.176-5.203-6.406h-.014z" fill="#fff"/></g></svg>
|
After Width: | Height: | Size: 3.2 KiB |
64
assets/images/type.svg
Normal file
|
@ -0,0 +1,64 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="100%" height="100%" viewBox="0 0 580 260" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||
<g transform="matrix(1,0,0,1,-551,0)">
|
||||
<g id="type" transform="matrix(1.08584,0,0,1.04219,551.714,-303.717)">
|
||||
<rect x="0" y="291.618" width="533.452" height="248.494" style="fill:none;"/>
|
||||
<g transform="matrix(0.698871,0,0,0.728145,5.21739,54.2528)">
|
||||
<g transform="matrix(158.131,0,0,158.131,24.7618,449.92)">
|
||||
<path d="M0.008,-0.6L0.123,-0.6L0.123,0L0.233,0L0.233,-0.6L0.348,-0.6L0.348,-0.7L0.008,-0.7L0.008,-0.6Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(158.131,0,0,158.131,81.0564,449.92)">
|
||||
<path d="M0.205,-0.29L0.255,-0.29L0.255,-0.161C0.255,-0.111 0.233,-0.093 0.198,-0.093C0.163,-0.093 0.141,-0.111 0.141,-0.161L0.141,-0.539C0.141,-0.589 0.163,-0.608 0.198,-0.608C0.233,-0.608 0.255,-0.589 0.255,-0.539L0.255,-0.464L0.359,-0.464L0.359,-0.532C0.359,-0.644 0.303,-0.708 0.195,-0.708C0.087,-0.708 0.031,-0.644 0.031,-0.532L0.031,-0.168C0.031,-0.056 0.087,0.008 0.195,0.008C0.303,0.008 0.359,-0.056 0.359,-0.168L0.359,-0.39L0.205,-0.39L0.205,-0.29Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(158.131,0,0,158.131,142.727,449.92)">
|
||||
<path d="M0.185,-0.705C0.084,-0.704 0.041,-0.634 0.041,-0.532C0.041,-0.339 0.309,-0.345 0.309,-0.168C0.309,-0.083 0.276,-0.016 0.184,-0.016C0.092,-0.016 0.059,-0.083 0.059,-0.168L0.059,-0.203L0.038,-0.203L0.038,-0.169C0.038,-0.072 0.078,0.005 0.184,0.005C0.291,0.005 0.331,-0.072 0.331,-0.169C0.331,-0.359 0.063,-0.354 0.063,-0.533C0.063,-0.616 0.094,-0.685 0.186,-0.685C0.277,-0.685 0.308,-0.615 0.308,-0.532L0.308,-0.518L0.33,-0.518L0.33,-0.531C0.33,-0.627 0.291,-0.705 0.185,-0.705Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(158.131,0,0,158.131,201.078,449.92)">
|
||||
<path d="M0.193,0L0.193,-0.679L0.346,-0.679L0.346,-0.7L0.019,-0.7L0.019,-0.679L0.171,-0.679L0.171,0L0.193,0Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(158.131,0,0,158.131,253.103,449.92)">
|
||||
<path d="M0.347,-0.165L0.388,0L0.41,0L0.237,-0.701L0.206,-0.701L0.037,0L0.057,0L0.098,-0.165L0.347,-0.165ZM0.221,-0.675L0.343,-0.185L0.102,-0.185L0.221,-0.675Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(158.131,0,0,158.131,317.778,449.92)">
|
||||
<path d="M0.193,0L0.193,-0.679L0.346,-0.679L0.346,-0.7L0.019,-0.7L0.019,-0.679L0.171,-0.679L0.171,0L0.193,0Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(158.131,0,0,158.131,375.812,449.92)">
|
||||
<rect x="0.04" y="-0.7" width="0.022" height="0.7" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(158.131,0,0,158.131,391.941,449.92)">
|
||||
<path d="M0.039,-0.172C0.039,-0.074 0.081,0.005 0.187,0.005C0.295,0.005 0.337,-0.074 0.337,-0.172L0.337,-0.528C0.337,-0.626 0.295,-0.705 0.187,-0.705C0.081,-0.705 0.039,-0.626 0.039,-0.528L0.039,-0.172ZM0.061,-0.529C0.061,-0.615 0.094,-0.685 0.187,-0.685C0.281,-0.685 0.315,-0.615 0.315,-0.529L0.315,-0.171C0.315,-0.085 0.281,-0.015 0.187,-0.015C0.094,-0.015 0.061,-0.085 0.061,-0.171L0.061,-0.529Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(158.131,0,0,158.131,451.398,449.92)">
|
||||
<path d="M0.061,-0.668L0.311,0L0.338,0L0.338,-0.7L0.317,-0.7L0.317,-0.045L0.071,-0.7L0.04,-0.7L0.04,0L0.061,0L0.061,-0.668Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="matrix(1.5056,0,0,1.56867,-81.8441,-250.157)">
|
||||
<g transform="matrix(97.8684,0,0,97.8684,65.99,495.372)">
|
||||
<path d="M0.15,-0.3L0.275,-0.3L0.275,0L0.387,0L0.387,-0.7L0.275,-0.7L0.275,-0.4L0.15,-0.4L0.15,-0.7L0.04,-0.7L0.04,0L0.15,0L0.15,-0.3Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(97.8684,0,0,97.8684,107.78,495.372)">
|
||||
<path d="M0.284,-0.7L0.123,-0.7L0.011,0L0.112,0L0.131,-0.127L0.266,-0.127L0.285,0L0.396,0L0.284,-0.7ZM0.198,-0.576L0.251,-0.222L0.145,-0.222L0.198,-0.576Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(97.8684,0,0,97.8684,147.612,495.372)">
|
||||
<path d="M0.275,0L0.388,0L0.388,-0.7L0.29,-0.7L0.29,-0.281L0.177,-0.7L0.039,-0.7L0.039,0L0.138,0L0.138,-0.507L0.275,0Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(97.8684,0,0,97.8684,189.402,495.372)">
|
||||
<path d="M0.04,0L0.214,0C0.324,0 0.378,-0.061 0.378,-0.173L0.378,-0.527C0.378,-0.639 0.324,-0.7 0.214,-0.7L0.04,-0.7L0.04,0ZM0.212,-0.6C0.247,-0.6 0.268,-0.582 0.268,-0.532L0.268,-0.168C0.268,-0.118 0.247,-0.1 0.212,-0.1L0.15,-0.1L0.15,-0.6L0.212,-0.6Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(97.8684,0,0,97.8684,229.332,495.372)">
|
||||
<path d="M0.206,-0.7L0.04,-0.7L0.04,0L0.213,0C0.323,0 0.38,-0.058 0.38,-0.166L0.38,-0.223C0.38,-0.297 0.357,-0.35 0.298,-0.373C0.347,-0.396 0.369,-0.442 0.369,-0.514L0.369,-0.539C0.369,-0.647 0.32,-0.7 0.206,-0.7L0.206,-0.7ZM0.199,-0.315C0.249,-0.315 0.27,-0.295 0.27,-0.23L0.27,-0.169C0.27,-0.117 0.25,-0.1 0.213,-0.1L0.15,-0.1L0.15,-0.315L0.199,-0.315ZM0.203,-0.6C0.242,-0.6 0.259,-0.578 0.259,-0.528L0.259,-0.489C0.259,-0.433 0.234,-0.415 0.193,-0.415L0.15,-0.415L0.15,-0.6L0.203,-0.6Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(97.8684,0,0,97.8684,269.067,495.372)">
|
||||
<path d="M0.141,-0.539C0.141,-0.589 0.163,-0.608 0.198,-0.608C0.233,-0.608 0.255,-0.589 0.255,-0.539L0.255,-0.161C0.255,-0.111 0.233,-0.092 0.198,-0.092C0.163,-0.092 0.141,-0.111 0.141,-0.161L0.141,-0.539ZM0.031,-0.168C0.031,-0.056 0.09,0.008 0.198,0.008C0.306,0.008 0.365,-0.056 0.365,-0.168L0.365,-0.532C0.365,-0.644 0.306,-0.708 0.198,-0.708C0.09,-0.708 0.031,-0.644 0.031,-0.532L0.031,-0.168Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(97.8684,0,0,97.8684,307.823,495.372)">
|
||||
<path d="M0.141,-0.539C0.141,-0.589 0.163,-0.608 0.198,-0.608C0.233,-0.608 0.255,-0.589 0.255,-0.539L0.255,-0.161C0.255,-0.111 0.233,-0.092 0.198,-0.092C0.163,-0.092 0.141,-0.111 0.141,-0.161L0.141,-0.539ZM0.031,-0.168C0.031,-0.056 0.09,0.008 0.198,0.008C0.306,0.008 0.365,-0.056 0.365,-0.168L0.365,-0.532C0.365,-0.644 0.306,-0.708 0.198,-0.708C0.09,-0.708 0.031,-0.644 0.031,-0.532L0.031,-0.168Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g transform="matrix(97.8684,0,0,97.8684,346.579,495.372)">
|
||||
<path d="M0.291,0L0.404,0L0.251,-0.388L0.404,-0.7L0.294,-0.7L0.15,-0.395L0.15,-0.7L0.04,-0.7L0.04,0L0.15,0L0.15,-0.215L0.184,-0.279L0.291,0Z" style="fill:white;fill-rule:nonzero;"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.4 KiB |
BIN
assets/images/welcome/bs-global.png
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
assets/images/welcome/bs-local.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
assets/projectfiles/icons.afdesign
Normal file
BIN
assets/projectfiles/logo.afdesign
Normal file
110
index.html
|
@ -35,22 +35,10 @@
|
|||
href="assets/fonts/iosevka/iosevka-aile.css"
|
||||
as="style"
|
||||
/>
|
||||
<link
|
||||
rel="preload"
|
||||
href="assets/fonts/iosevka/woff2/iosevka-aile-regular.woff2"
|
||||
as="font"
|
||||
/>
|
||||
<link rel="preload" href="style/main.scss" as="style" />
|
||||
<link rel="preload" href="style/bgus.scss" as="style" />
|
||||
<link rel="preload" href="src/index.ts" as="script" />
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="assets/fonts/iosevka/iosevka-aile.css"
|
||||
media="async"
|
||||
onload="this.media='all'"
|
||||
/>
|
||||
<link rel="stylesheet" href="assets/fonts/iosevka/iosevka-aile.css" />
|
||||
<link rel="stylesheet" href="style/main.scss" />
|
||||
<link rel="stylesheet" href="style/bgus.scss" />
|
||||
<title>/tg/station Handbook</title>
|
||||
</head>
|
||||
<body>
|
||||
|
@ -58,8 +46,102 @@
|
|||
<img src="./assets/images/bg-nanotrasen.svg" />
|
||||
</div>
|
||||
<main id="app">
|
||||
<nav id="section-list"></nav>
|
||||
<nav id="tab-list"></nav>
|
||||
<section id="tabs"></section>
|
||||
<section id="tabs">
|
||||
<div class="page special center" id="Welcome" data-tab="$Welcome">
|
||||
<div class="wrapper">
|
||||
<header>
|
||||
<img class="icon" src="assets/images/outline.svg" />
|
||||
<img class="type" src="assets/images/type.svg" />
|
||||
</header>
|
||||
<div class="maxw">
|
||||
<p>
|
||||
This handbook is a collection of tweaks of the /tg/station wiki
|
||||
pages to make them prettier and easier to navigate.
|
||||
</p>
|
||||
<p>Please note that:</p>
|
||||
<ul>
|
||||
<li>
|
||||
It's being built with smaller windows in mind (think SS13
|
||||
popups), large window format is planned but it's just not
|
||||
there yet.
|
||||
</li>
|
||||
<li>
|
||||
There is a lot of development still happening, so many parts
|
||||
are not as polished as they should be.
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
You can click any of the top icons to jump to that guide, or
|
||||
check out any of these about this handbook:
|
||||
</p>
|
||||
<div class="action_buttons"></div>
|
||||
</div>
|
||||
<div class="features hidden" data-name="Extra features">
|
||||
<h2>
|
||||
Extra Features
|
||||
</h2>
|
||||
<div class="maxw">
|
||||
<h3 class="nobg">Jump to section/item</h3>
|
||||
<p>
|
||||
Press <b>SHIFT+S</b> on any page (except this one) to open up
|
||||
a quick search menu.
|
||||
</p>
|
||||
<p>
|
||||
Results for most pages are section titles, but some pages like
|
||||
Chemistry have support for searching recipes etc.
|
||||
</p>
|
||||
<div class="images">
|
||||
<img
|
||||
src="assets/images/welcome/bs-local.png"
|
||||
style="width: 40%;"
|
||||
/>
|
||||
<img
|
||||
src="assets/images/welcome/bs-global.png"
|
||||
style="width: 40%;"
|
||||
/>
|
||||
</div>
|
||||
<p>
|
||||
By default, only results for the current page are shown, you
|
||||
can use <code>@</code> as prefix to search in all guides at
|
||||
once.
|
||||
</p>
|
||||
<h3 class="nobg">(Chemistry) Auto-Expanded tooltips</h3>
|
||||
<p>
|
||||
Recipes for reagent ingredients are now always shown in each
|
||||
recipe rather than being tooltips.
|
||||
</p>
|
||||
<h3 class="nobg">(Chemistry) Beaker sizing</h3>
|
||||
<p>
|
||||
Press <b>SHIFT+B</b> to set your target reagent output and the
|
||||
inputs will change from "part" to "ml". This is currently
|
||||
quite inaccurate, use it as a guideline but apply common
|
||||
sense.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="credits hidden" data-name="Other infos">
|
||||
<h2>
|
||||
Other Informations
|
||||
</h2>
|
||||
<p>
|
||||
Thanks to /tg/station and every wiki contributor who did most of
|
||||
the work!
|
||||
</p>
|
||||
<p>
|
||||
This thing is Open Source:
|
||||
<a href="https://git.fromouter.space/hamcha/tghandbook"
|
||||
>git.fromouter.space/hamcha/tghandbook</a
|
||||
>
|
||||
</p>
|
||||
<p>
|
||||
/tg/station handbook revision: <span id="tgh-version"></span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
<noscript>
|
||||
<h1>NO JS NO PARTY</h1>
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
"eslint-config-prettier": "^6.11.0",
|
||||
"eslint-plugin-import": "2.21.2",
|
||||
"eslint-plugin-prettier": "^3.1.4",
|
||||
"idb-keyval": "^3.2.0",
|
||||
"parcel-bundler": "^1.12.4",
|
||||
"parcel-plugin-sw-cache": "^0.3.1",
|
||||
"prettier": "^2.0.5",
|
||||
|
|
|
@ -1,105 +0,0 @@
|
|||
// @ts-expect-error: Asset imports are handled by parcel
|
||||
import speen from "~/assets/images/speen.svg";
|
||||
import { getPageHTML } from "./wiki";
|
||||
import userscript from "./userscript";
|
||||
|
||||
function initWaiting(elem: HTMLElement) {
|
||||
// Add spinner
|
||||
const spinnerContainer = document.createElement("div");
|
||||
spinnerContainer.className = "speen";
|
||||
const spinnerImg = document.createElement("img");
|
||||
spinnerImg.src = speen;
|
||||
spinnerContainer.appendChild(spinnerImg);
|
||||
const spinnerText = document.createElement("p");
|
||||
spinnerText.appendChild(
|
||||
document.createTextNode("You start skimming through the manual...")
|
||||
);
|
||||
spinnerContainer.appendChild(spinnerText);
|
||||
elem.appendChild(spinnerContainer);
|
||||
}
|
||||
|
||||
async function loadPage(page: string, elem: HTMLElement) {
|
||||
// Fetch page content
|
||||
console.log(`${page}: fetching`);
|
||||
let html = await getPageHTML(page);
|
||||
|
||||
// Convert relative links to absolute
|
||||
html = html.replace(/"\/wiki/gi, '"//tgstation13.org/wiki');
|
||||
|
||||
// Set as HTML content and run HTML manipulations on it
|
||||
requestAnimationFrame(() => {
|
||||
elem.innerHTML = html;
|
||||
console.log(`${page}: processing`);
|
||||
userscript(elem, page);
|
||||
console.log(`${page}: userscript applied`);
|
||||
elem.classList.remove("waiting");
|
||||
});
|
||||
}
|
||||
|
||||
type TabElements = { tabListItem: HTMLElement; tabContentItem: HTMLElement };
|
||||
|
||||
export default class TabManager {
|
||||
tabListContainer: HTMLElement;
|
||||
|
||||
tabContentContainer: HTMLElement;
|
||||
|
||||
tabs: Record<string, TabElements> = {};
|
||||
|
||||
constructor(tablist: HTMLElement, tabcontent: HTMLElement) {
|
||||
this.tabListContainer = tablist;
|
||||
this.tabContentContainer = tabcontent;
|
||||
}
|
||||
|
||||
openTab(page: string, setActive: boolean): void {
|
||||
// Create tab list item
|
||||
const tabListItem = document.createElement("div");
|
||||
tabListItem.className = "tab";
|
||||
tabListItem.dataset.tab = page;
|
||||
tabListItem.addEventListener("click", () => {
|
||||
if (tabListItem.classList.contains("active")) {
|
||||
return;
|
||||
}
|
||||
this.setActive(page);
|
||||
});
|
||||
tabListItem.appendChild(document.createTextNode(page.replace(/_/gi, " ")));
|
||||
this.tabListContainer.appendChild(tabListItem);
|
||||
|
||||
// Create tab content container
|
||||
const tabContentItem = document.createElement("div");
|
||||
tabContentItem.className = "page waiting";
|
||||
tabContentItem.dataset.tab = page;
|
||||
initWaiting(tabContentItem);
|
||||
this.tabContentContainer.appendChild(tabContentItem);
|
||||
|
||||
// Start loading page for new tab
|
||||
loadPage(page, tabContentItem);
|
||||
|
||||
// Create tab entry
|
||||
this.tabs[page] = { tabListItem, tabContentItem };
|
||||
|
||||
// If asked for, set it to active
|
||||
if (setActive) {
|
||||
this.setActive(page);
|
||||
}
|
||||
}
|
||||
|
||||
setActive(page: string): void {
|
||||
// Make sure tab exists (why wouldn't it?!)
|
||||
if (!(page in this.tabs)) {
|
||||
throw new Error("tab not found");
|
||||
}
|
||||
|
||||
// Deactivate current active tab
|
||||
this.tabListContainer
|
||||
.querySelectorAll(".active")
|
||||
.forEach((it) => it.classList.remove("active"));
|
||||
this.tabContentContainer
|
||||
.querySelectorAll(".active")
|
||||
.forEach((it) => it.classList.remove("active"));
|
||||
|
||||
// Activate new tab
|
||||
const { tabListItem, tabContentItem } = this.tabs[page];
|
||||
tabListItem.classList.add("active");
|
||||
tabContentItem.classList.add("active");
|
||||
}
|
||||
}
|
110
src/cache.ts
Normal file
|
@ -0,0 +1,110 @@
|
|||
/* eslint-disable no-shadow */
|
||||
|
||||
interface CacheEntry<T> {
|
||||
version: string;
|
||||
value: T;
|
||||
}
|
||||
|
||||
export class Store {
|
||||
readonly dbp: Promise<IDBDatabase>;
|
||||
|
||||
constructor(dbName = "tg-cache", readonly storeName = "keyval") {
|
||||
this.dbp = new Promise((resolve, reject) => {
|
||||
const openreq = indexedDB.open(dbName, 1);
|
||||
openreq.onerror = () => reject(openreq.error);
|
||||
openreq.onsuccess = () => resolve(openreq.result);
|
||||
|
||||
// First time setup: create an empty object store
|
||||
openreq.onupgradeneeded = () => {
|
||||
openreq.result.createObjectStore(storeName);
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
withIDBStore(
|
||||
type: IDBTransactionMode,
|
||||
callback: (store: IDBObjectStore) => void
|
||||
): Promise<void> {
|
||||
return this.dbp.then(
|
||||
(db) =>
|
||||
new Promise<void>((resolve, reject) => {
|
||||
const transaction = db.transaction(this.storeName, type);
|
||||
transaction.oncomplete = () => resolve();
|
||||
transaction.onabort = () => reject(transaction.error);
|
||||
transaction.onerror = () => reject(transaction.error);
|
||||
callback(transaction.objectStore(this.storeName));
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
let defaultStore: Store;
|
||||
|
||||
function getDefaultStore() {
|
||||
if (!defaultStore) defaultStore = new Store();
|
||||
return defaultStore;
|
||||
}
|
||||
|
||||
export function get<Type>(
|
||||
key: IDBValidKey,
|
||||
store = getDefaultStore()
|
||||
): Promise<CacheEntry<Type>> {
|
||||
let req: IDBRequest;
|
||||
return store
|
||||
.withIDBStore("readonly", (store) => {
|
||||
req = store.get(key);
|
||||
})
|
||||
.then(() => req.result);
|
||||
}
|
||||
|
||||
export function set<Type>(
|
||||
key: IDBValidKey,
|
||||
value: Type,
|
||||
version: string,
|
||||
store = getDefaultStore()
|
||||
): Promise<void> {
|
||||
return store.withIDBStore("readwrite", (store) => {
|
||||
store.put({ version, value }, key);
|
||||
});
|
||||
}
|
||||
|
||||
export function del(
|
||||
key: IDBValidKey,
|
||||
store = getDefaultStore()
|
||||
): Promise<void> {
|
||||
return store.withIDBStore("readwrite", (store) => {
|
||||
store.delete(key);
|
||||
});
|
||||
}
|
||||
|
||||
export function clear(store = getDefaultStore()): Promise<void> {
|
||||
return store.withIDBStore("readwrite", (store) => {
|
||||
store.clear();
|
||||
});
|
||||
}
|
||||
|
||||
export function keys(store = getDefaultStore()): Promise<IDBValidKey[]> {
|
||||
const dbkeys: IDBValidKey[] = [];
|
||||
|
||||
return store
|
||||
.withIDBStore("readonly", (store) => {
|
||||
// This would be store.getAllKeys(), but it isn't supported by Edge or Safari.
|
||||
// And openKeyCursor isn't supported by Safari.
|
||||
(store.openKeyCursor || store.openCursor).call(
|
||||
store
|
||||
).onsuccess = function () {
|
||||
if (!this.result) return;
|
||||
dbkeys.push(this.result.key);
|
||||
this.result.continue();
|
||||
};
|
||||
})
|
||||
.then(() => dbkeys);
|
||||
}
|
||||
|
||||
export default {
|
||||
get,
|
||||
set,
|
||||
keys,
|
||||
del,
|
||||
clear,
|
||||
};
|
93
src/index.ts
|
@ -1,18 +1,78 @@
|
|||
import TabManager from "./TabManager";
|
||||
import TabManager from "./ui/TabManager";
|
||||
import sections from "./ui/sections";
|
||||
import { nextAnimationFrame } from "./utils";
|
||||
import { searchBox } from "./scripts/search";
|
||||
|
||||
const tabListContainer = document.getElementById("tab-list");
|
||||
const tabContentContainer = document.getElementById("tabs");
|
||||
const manager = new TabManager(tabListContainer, tabContentContainer);
|
||||
// @ts-expect-error: Parcel image import
|
||||
import unknown from "~/assets/images/tab-icons/unknown.svg";
|
||||
import { bindFunctions } from "./scripts/index";
|
||||
|
||||
const defaultTabs = [
|
||||
{ page: "Guide_to_chemistry", active: true },
|
||||
{ page: "Guide_to_medicine", active: false },
|
||||
];
|
||||
// Enable single page mode for developing scripts
|
||||
// const devSinglePage = ["Medical", "Guide_to_chemistry"];
|
||||
const devSinglePage = null;
|
||||
|
||||
defaultTabs.forEach((tab) => {
|
||||
manager.openTab(tab.page, tab.active);
|
||||
});
|
||||
async function load() {
|
||||
const sectionListContainer = document.getElementById("section-list");
|
||||
const tabListContainer = document.getElementById("tab-list");
|
||||
const tabContentContainer = document.getElementById("tabs");
|
||||
const manager = new TabManager(
|
||||
sectionListContainer,
|
||||
tabListContainer,
|
||||
tabContentContainer
|
||||
);
|
||||
manager.setLoading(true);
|
||||
|
||||
await nextAnimationFrame();
|
||||
|
||||
// Add loading "bar"
|
||||
const spinnerContainer = document.querySelector("#tabs > .speen");
|
||||
const icons = document.createElement("div");
|
||||
icons.className = "loading-icons";
|
||||
|
||||
let promises = [];
|
||||
if (devSinglePage != null) {
|
||||
manager.createSection(devSinglePage[0]);
|
||||
promises = [manager.openTab(devSinglePage[0], devSinglePage[1], {})];
|
||||
} else {
|
||||
sections.forEach((section) =>
|
||||
section.tabs.forEach((tab) => {
|
||||
const iconElement = document.createElement("img");
|
||||
iconElement.dataset.tab = tab.page;
|
||||
iconElement.src = tab.icon || unknown;
|
||||
iconElement.title = tab.page.replace(/_/gi, " ");
|
||||
icons.appendChild(iconElement);
|
||||
})
|
||||
);
|
||||
spinnerContainer.appendChild(icons);
|
||||
|
||||
promises = sections.flatMap((section) => {
|
||||
manager.createSection(section.name);
|
||||
|
||||
return section.tabs.map(async (tab) => {
|
||||
// Load page
|
||||
await manager.openTab(section.name, tab.page, {
|
||||
icon: tab.icon,
|
||||
text: tab.text,
|
||||
});
|
||||
// Remove icon from loading
|
||||
icons.removeChild(icons.querySelector(`img[data-tab=${tab.page}]`));
|
||||
});
|
||||
});
|
||||
}
|
||||
const welcome = document.getElementById("Welcome");
|
||||
bindFunctions(welcome, "$Welcome");
|
||||
|
||||
Promise.all(promises).then(() => {
|
||||
// Remove app-wide loading
|
||||
manager.setLoading(false);
|
||||
if (devSinglePage) {
|
||||
manager.setActive(devSinglePage[1]);
|
||||
} else {
|
||||
manager.showSection("Medical");
|
||||
welcome.classList.add("active");
|
||||
}
|
||||
});
|
||||
}
|
||||
if ("serviceWorker" in navigator) {
|
||||
const x = process.env.SUBPATH ? `${process.env.SUBPATH}/sw.js` : "sw.js";
|
||||
navigator.serviceWorker
|
||||
|
@ -24,3 +84,14 @@ if ("serviceWorker" in navigator) {
|
|||
console.log("Service worker registration failed, error:", error);
|
||||
});
|
||||
}
|
||||
|
||||
// Start loading pages
|
||||
load();
|
||||
|
||||
// Add search box
|
||||
document.body.appendChild(searchBox());
|
||||
|
||||
// Add revision info
|
||||
document
|
||||
.getElementById("tgh-version")
|
||||
.appendChild(document.createTextNode(process.env.REVISION || "unknown"));
|
||||
|
|
|
@ -1,3 +1,163 @@
|
|||
/* https://developer.mozilla.org/en-US/docs/Web/CSS/color_value
|
||||
$$('#colors_table tbody tr')
|
||||
.map((row) => {
|
||||
const [name, hex] = Array.from(row.children).slice(-3);
|
||||
return [name.innerText.trim().replace(/\s.+/g, ''), hex.innerText.trim()];
|
||||
}).sort((a, b) => [a[0], b[0]].sort()[0] === a[0] ? -1 : 1)
|
||||
.map(([name, hex]) => `${name} : '${hex}',`)
|
||||
.join('\n')
|
||||
*/
|
||||
const namedColors = {
|
||||
aliceblue: "#f0f8ff",
|
||||
antiquewhite: "#faebd7",
|
||||
aqua: "#00ffff",
|
||||
aquamarine: "#7fffd4",
|
||||
azure: "#f0ffff",
|
||||
beige: "#f5f5dc",
|
||||
bisque: "#ffe4c4",
|
||||
black: "#000000",
|
||||
blanchedalmond: "#ffebcd",
|
||||
blue: "#0000ff",
|
||||
blueviolet: "#8a2be2",
|
||||
brown: "#a52a2a",
|
||||
burlywood: "#deb887",
|
||||
cadetblue: "#5f9ea0",
|
||||
chartreuse: "#7fff00",
|
||||
chocolate: "#d2691e",
|
||||
coral: "#ff7f50",
|
||||
cornflowerblue: "#6495ed",
|
||||
cornsilk: "#fff8dc",
|
||||
crimson: "#dc143c",
|
||||
cyan: "#00ffff",
|
||||
darkblue: "#00008b",
|
||||
darkcyan: "#008b8b",
|
||||
darkgoldenrod: "#b8860b",
|
||||
darkgray: "#a9a9a9",
|
||||
darkgreen: "#006400",
|
||||
darkgrey: "#a9a9a9",
|
||||
darkkhaki: "#bdb76b",
|
||||
darkmagenta: "#8b008b",
|
||||
darkolivegreen: "#556b2f",
|
||||
darkorange: "#ff8c00",
|
||||
darkorchid: "#9932cc",
|
||||
darkred: "#8b0000",
|
||||
darksalmon: "#e9967a",
|
||||
darkseagreen: "#8fbc8f",
|
||||
darkslateblue: "#483d8b",
|
||||
darkslategray: "#2f4f4f",
|
||||
darkslategrey: "#2f4f4f",
|
||||
darkturquoise: "#00ced1",
|
||||
darkviolet: "#9400d3",
|
||||
deeppink: "#ff1493",
|
||||
deepskyblue: "#00bfff",
|
||||
dimgray: "#696969",
|
||||
dimgrey: "#696969",
|
||||
dodgerblue: "#1e90ff",
|
||||
firebrick: "#b22222",
|
||||
floralwhite: "#fffaf0",
|
||||
forestgreen: "#228b22",
|
||||
fuchsia: "#ff00ff",
|
||||
gainsboro: "#dcdcdc",
|
||||
ghostwhite: "#f8f8ff",
|
||||
gold: "#ffd700",
|
||||
goldenrod: "#daa520",
|
||||
gray: "#808080",
|
||||
green: "#008000",
|
||||
greenyellow: "#adff2f",
|
||||
grey: "#808080",
|
||||
honeydew: "#f0fff0",
|
||||
hotpink: "#ff69b4",
|
||||
indianred: "#cd5c5c",
|
||||
indigo: "#4b0082",
|
||||
ivory: "#fffff0",
|
||||
khaki: "#f0e68c",
|
||||
lavender: "#e6e6fa",
|
||||
lavenderblush: "#fff0f5",
|
||||
lawngreen: "#7cfc00",
|
||||
lemonchiffon: "#fffacd",
|
||||
lightblue: "#add8e6",
|
||||
lightcoral: "#f08080",
|
||||
lightcyan: "#e0ffff",
|
||||
lightgoldenrodyellow: "#fafad2",
|
||||
lightgray: "#d3d3d3",
|
||||
lightgreen: "#90ee90",
|
||||
lightgrey: "#d3d3d3",
|
||||
lightpink: "#ffb6c1",
|
||||
lightsalmon: "#ffa07a",
|
||||
lightseagreen: "#20b2aa",
|
||||
lightskyblue: "#87cefa",
|
||||
lightslategray: "#778899",
|
||||
lightslategrey: "#778899",
|
||||
lightsteelblue: "#b0c4de",
|
||||
lightyellow: "#ffffe0",
|
||||
lime: "#00ff00",
|
||||
limegreen: "#32cd32",
|
||||
linen: "#faf0e6",
|
||||
magenta: "#ff00ff",
|
||||
maroon: "#800000",
|
||||
mediumaquamarine: "#66cdaa",
|
||||
mediumblue: "#0000cd",
|
||||
mediumorchid: "#ba55d3",
|
||||
mediumpurple: "#9370db",
|
||||
mediumseagreen: "#3cb371",
|
||||
mediumslateblue: "#7b68ee",
|
||||
mediumspringgreen: "#00fa9a",
|
||||
mediumturquoise: "#48d1cc",
|
||||
mediumvioletred: "#c71585",
|
||||
midnightblue: "#191970",
|
||||
mintcream: "#f5fffa",
|
||||
mistyrose: "#ffe4e1",
|
||||
moccasin: "#ffe4b5",
|
||||
navajowhite: "#ffdead",
|
||||
navy: "#000080",
|
||||
oldlace: "#fdf5e6",
|
||||
olive: "#808000",
|
||||
olivedrab: "#6b8e23",
|
||||
orange: "#ffa500",
|
||||
orangered: "#ff4500",
|
||||
orchid: "#da70d6",
|
||||
palegoldenrod: "#eee8aa",
|
||||
palegreen: "#98fb98",
|
||||
paleturquoise: "#afeeee",
|
||||
palevioletred: "#db7093",
|
||||
papayawhip: "#ffefd5",
|
||||
peachpuff: "#ffdab9",
|
||||
peru: "#cd853f",
|
||||
pink: "#ffc0cb",
|
||||
plum: "#dda0dd",
|
||||
powderblue: "#b0e0e6",
|
||||
purple: "#800080",
|
||||
rebeccapurple: "#663399",
|
||||
red: "#ff0000",
|
||||
rosybrown: "#bc8f8f",
|
||||
royalblue: "#4169e1",
|
||||
saddlebrown: "#8b4513",
|
||||
salmon: "#fa8072",
|
||||
sandybrown: "#f4a460",
|
||||
seagreen: "#2e8b57",
|
||||
seashell: "#fff5ee",
|
||||
sienna: "#a0522d",
|
||||
silver: "#c0c0c0",
|
||||
skyblue: "#87ceeb",
|
||||
slateblue: "#6a5acd",
|
||||
slategray: "#708090",
|
||||
slategrey: "#708090",
|
||||
snow: "#fffafa",
|
||||
springgreen: "#00ff7f",
|
||||
steelblue: "#4682b4",
|
||||
tan: "#d2b48c",
|
||||
teal: "#008080",
|
||||
thistle: "#d8bfd8",
|
||||
tomato: "#ff6347",
|
||||
turquoise: "#40e0d0",
|
||||
violet: "#ee82ee",
|
||||
wheat: "#f5deb3",
|
||||
white: "#ffffff",
|
||||
whitesmoke: "#f5f5f5",
|
||||
yellow: "#ffff00",
|
||||
yellowgreen: "#9acd32",
|
||||
};
|
||||
|
||||
interface ColorRGB {
|
||||
r: number;
|
||||
g: number;
|
||||
|
@ -73,6 +233,10 @@ function rgbToHsv({ r, g, b }: ColorRGB): ColorHSV {
|
|||
|
||||
// Hacky way to get RGB values FOR SURE!
|
||||
function nameToRGB(name: string): ColorRGB {
|
||||
if (namedColors[name]) {
|
||||
return parseColor(namedColors[name]);
|
||||
}
|
||||
|
||||
// Create fake div
|
||||
const fakeDiv = document.createElement("div");
|
||||
fakeDiv.style.color = name;
|
||||
|
@ -92,7 +256,7 @@ function nameToRGB(name: string): ColorRGB {
|
|||
// https://stackoverflow.com/questions/11068240/what-is-the-most-efficient-way-to-parse-a-css-color-in-javascript
|
||||
function parseColor(input: string): ColorRGB {
|
||||
// Hex format
|
||||
if (input.substr(0, 1) === "#") {
|
||||
if (input[0] === "#") {
|
||||
const collen = (input.length - 1) / 3;
|
||||
const fact = [17, 1, 0.062272][collen - 1];
|
||||
return {
|
95
src/scripts/index.ts
Normal file
|
@ -0,0 +1,95 @@
|
|||
import { chemistryScript, processChemistry } from "./pages/chemistry";
|
||||
import { processVirology, virologyScript } from "./pages/virology";
|
||||
import { processFood, foodScript } from "./pages/food";
|
||||
import { processDrinks, drinkScript } from "./pages/drinks";
|
||||
import { genericScript } from "./pages/generic";
|
||||
import { processGlobal } from "./pages/global";
|
||||
import { welcomeScript } from "./pages/welcome";
|
||||
|
||||
// This is used for cache busting when userscript changes significantly.
|
||||
// Only change it when you made changes to the processHTML part!
|
||||
export const PAGE_VERSIONS = {
|
||||
Infections: "fcebeda2fddb46d924f4538cd9c0daeb55aa4c9b",
|
||||
Guide_to_food_and_drinks: "131e010df66ed689d31df53c3ca17ad16635a827",
|
||||
Guide_to_chemistry: "5074d6180fc8b283bac00b99c6aa2325b797da6b",
|
||||
$DEFAULT: "5074d6180fc8b283bac00b99c6aa2325b797da6b",
|
||||
};
|
||||
|
||||
const MAX_WIDTH = 440;
|
||||
|
||||
export function processHTML(root: HTMLElement, docname: string): void {
|
||||
processGlobal(root, docname);
|
||||
|
||||
switch (docname) {
|
||||
case "Guide_to_chemistry":
|
||||
processChemistry(root);
|
||||
break;
|
||||
case "Infections":
|
||||
processVirology(root);
|
||||
break;
|
||||
case "Guide_to_food":
|
||||
processFood(root);
|
||||
break;
|
||||
case "Guide_to_drinks":
|
||||
processDrinks(root);
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export function postProcessHTML(root: HTMLElement, docname: string): void {
|
||||
// This should be noop unless we're testing changes before committing them to processHTML
|
||||
document.querySelectorAll("img[width]").forEach((img) => {
|
||||
const width = img.getAttribute("width");
|
||||
|
||||
// Don't care if they are not absolutely sized
|
||||
if (width.includes("%")) {
|
||||
return;
|
||||
}
|
||||
|
||||
const widthI = parseInt(width, 10);
|
||||
if (widthI > MAX_WIDTH) {
|
||||
img.setAttribute("width", "100%");
|
||||
img.removeAttribute("height"); // Remove any height so we don't have to deal with the crazy math
|
||||
}
|
||||
});
|
||||
|
||||
switch (docname) {
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
export function bindFunctions(root: HTMLElement, docname: string): void {
|
||||
switch (docname) {
|
||||
case "Guide_to_chemistry":
|
||||
genericScript(root, docname);
|
||||
chemistryScript(root);
|
||||
break;
|
||||
case "Infections":
|
||||
genericScript(root, docname);
|
||||
virologyScript(root);
|
||||
break;
|
||||
case "$Welcome":
|
||||
welcomeScript(root);
|
||||
break;
|
||||
case "Guide_to_food":
|
||||
genericScript(root, docname);
|
||||
foodScript(root);
|
||||
break;
|
||||
case "Guide_to_drinks":
|
||||
genericScript(root, docname);
|
||||
drinkScript(root);
|
||||
break;
|
||||
default:
|
||||
genericScript(root, docname);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
export default {
|
||||
PAGE_VERSIONS,
|
||||
postProcessHTML,
|
||||
processHTML,
|
||||
bindFunctions,
|
||||
};
|
308
src/scripts/pages/chemistry.ts
Normal file
|
@ -0,0 +1,308 @@
|
|||
import { registerSearchEntries } from "../search";
|
||||
import { findParent } from "../utils";
|
||||
|
||||
export function processChemistry(root: HTMLElement): void {
|
||||
// Fix inconsistencies with <p> on random parts
|
||||
// Ideally I'd like a <p> or something on every part, wrapping it completely, but for now let's just kill 'em
|
||||
root
|
||||
.querySelectorAll(
|
||||
"table.wikitable > tbody > tr:not(:first-child) > td:nth-child(2), .tooltiptext"
|
||||
)
|
||||
.forEach((td) => {
|
||||
const tmp = td.cloneNode() as HTMLElement;
|
||||
// The cast to Array is necessary because, while childNodes's NodeList technically has a forEach method, it's a live list and operations mess with its lenght in the middle of the loop.
|
||||
// Nodes can only have one parent so append removes them from the original NodeList and shifts the following one back into the wrong index.
|
||||
Array.from(td.childNodes).forEach((el) => {
|
||||
if (el instanceof HTMLParagraphElement) {
|
||||
tmp.append(...el.childNodes);
|
||||
} else {
|
||||
tmp.append(el);
|
||||
}
|
||||
});
|
||||
td.parentNode.replaceChild(tmp, td);
|
||||
});
|
||||
|
||||
// Enrich "x part" with checkboxes and parts
|
||||
Array.from(root.querySelectorAll("td"))
|
||||
.filter((el) => el.textContent.indexOf(" part") >= 0)
|
||||
.forEach((el) => {
|
||||
el.innerHTML = el.innerHTML.replace(
|
||||
/((\d+)\s+(?:parts?|units?))(.*?(?:<\/a>|\n|$))/gi,
|
||||
(match, ...m) =>
|
||||
`<label class="bgus_part ${
|
||||
m[2].includes("</a>") ? "bgus_part_tooltip" : ""
|
||||
}" data-amount="${
|
||||
m[1]
|
||||
}"><input type="checkbox" class='bgus_checkbox bgus_hidden'/> <span class="bgus_part_label" data-src="${
|
||||
m[0]
|
||||
}">${m[0]}</span></label>${m[2].replace(
|
||||
/(<a .+?<\/a>)/gi,
|
||||
'<span class="bgus_nobreak bgus_nested_element">$1<span class="bgus_twistie"></span></span>'
|
||||
)}`
|
||||
);
|
||||
});
|
||||
|
||||
// Wrap every recipe with extra metadata
|
||||
root.querySelectorAll<HTMLElement>(".bgus_part").forEach((el) => {
|
||||
if ("parts" in el.parentElement.dataset) {
|
||||
el.parentElement.dataset.parts = (
|
||||
parseInt(el.parentElement.dataset.parts, 10) +
|
||||
parseInt(el.dataset.amount, 10)
|
||||
).toString();
|
||||
} else {
|
||||
el.parentElement.dataset.parts = el.dataset.amount;
|
||||
}
|
||||
});
|
||||
|
||||
// Restructure recipes to work in a narrow window
|
||||
root
|
||||
.querySelectorAll<HTMLElement>("div[data-name] .wikitable.sortable tr")
|
||||
.forEach((row) => {
|
||||
const sectionEl = findParent(
|
||||
row,
|
||||
(sel) => "name" in sel.dataset && sel.dataset.name !== ""
|
||||
);
|
||||
const section = sectionEl.dataset.name;
|
||||
if (row.querySelector("td") === null) {
|
||||
// Remove unused rows if found
|
||||
const headers = row.querySelectorAll("th");
|
||||
headers.forEach((th, i) => {
|
||||
if (i < 2) {
|
||||
th.classList.add("table-head");
|
||||
return;
|
||||
}
|
||||
th.parentElement.removeChild(th);
|
||||
});
|
||||
return;
|
||||
}
|
||||
const rows = Array.from(row.querySelectorAll("td")).slice(1);
|
||||
let conditions: HTMLTableCellElement = null;
|
||||
let explosive: HTMLTableCellElement = null;
|
||||
let ph: HTMLTableCellElement = null;
|
||||
let treatment: HTMLTableCellElement = null;
|
||||
let desc: HTMLTableCellElement = null;
|
||||
let metabolism: HTMLTableCellElement = null;
|
||||
let overdose: HTMLTableCellElement = null;
|
||||
let addiction: HTMLTableCellElement = null;
|
||||
// Handle special cases
|
||||
switch (section) {
|
||||
case "Components":
|
||||
[ph, desc] = rows;
|
||||
break;
|
||||
case "Virology Recipes":
|
||||
[desc] = rows;
|
||||
break;
|
||||
case "Narcotics":
|
||||
[ph, desc, metabolism, overdose, addiction] = rows;
|
||||
break;
|
||||
case "Other Reagents":
|
||||
[ph, desc, metabolism] = rows;
|
||||
break;
|
||||
case "Explosive Strength":
|
||||
[conditions, desc, explosive] = rows;
|
||||
break;
|
||||
case "Mutation Toxins":
|
||||
[desc, metabolism] = rows;
|
||||
break;
|
||||
default:
|
||||
// All fields
|
||||
[ph, treatment, desc, metabolism, overdose, addiction] = rows;
|
||||
}
|
||||
const title = row.querySelector("th");
|
||||
let content = `<div class="reagent-header">${title.innerHTML}</div>`;
|
||||
if (treatment) {
|
||||
content += `<p class="treatment">${treatment.innerHTML}</p>`;
|
||||
}
|
||||
if (metabolism) {
|
||||
content += `<p class="metabolism">${metabolism.innerHTML}</p>`;
|
||||
}
|
||||
if (conditions) {
|
||||
content += `<p class="conditions">${conditions.innerHTML}</p>`;
|
||||
}
|
||||
if (explosive) {
|
||||
content += `<p class="explosive">${explosive.innerHTML}</p>`;
|
||||
}
|
||||
if (addiction && addiction.innerHTML.trim() !== "N/A") {
|
||||
content += `<p class="addiction">${addiction.innerHTML}</p>`;
|
||||
}
|
||||
if (overdose && overdose.innerHTML.trim() !== "N/A") {
|
||||
content += `<p class="overdose">${overdose.innerHTML}</p>`;
|
||||
}
|
||||
if (desc) {
|
||||
content += `<p>${desc.innerHTML}</p>`;
|
||||
}
|
||||
if (ph) {
|
||||
content += `<div class="ph">${ph.innerHTML}</div>`;
|
||||
}
|
||||
title.classList.add("reagent-ext");
|
||||
title.innerHTML = content;
|
||||
if (desc) desc.parentElement.removeChild(desc);
|
||||
if (treatment) treatment.parentElement.removeChild(treatment);
|
||||
if (metabolism) metabolism.parentElement.removeChild(metabolism);
|
||||
if (conditions) conditions.parentElement.removeChild(conditions);
|
||||
if (explosive) explosive.parentElement.removeChild(explosive);
|
||||
if (overdose) overdose.parentElement.removeChild(overdose);
|
||||
if (addiction) addiction.parentElement.removeChild(addiction);
|
||||
if (ph) ph.parentElement.removeChild(ph);
|
||||
});
|
||||
}
|
||||
|
||||
export function chemistryScript(root: HTMLElement): void {
|
||||
// Add event to autofill child checkboxes
|
||||
root
|
||||
.querySelectorAll(".bgus_part_tooltip > .bgus_checkbox")
|
||||
.forEach((box: HTMLInputElement) => {
|
||||
const tooltip = box.parentElement.nextElementSibling;
|
||||
box.addEventListener("click", () => {
|
||||
tooltip
|
||||
.querySelectorAll(".bgus_checkbox")
|
||||
.forEach((el: HTMLInputElement) => {
|
||||
el.checked = box.checked;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Add event to collapse subsections
|
||||
root.querySelectorAll(".bgus_nested_element").forEach((twistie) => {
|
||||
twistie.addEventListener("click", () => {
|
||||
twistie.classList.toggle("bgus_collapsed");
|
||||
});
|
||||
});
|
||||
|
||||
const setPartSize = (labels, ml) => {
|
||||
labels.forEach((el) => {
|
||||
const part = el.parentElement.dataset.amount;
|
||||
const total = el.parentElement.parentElement.dataset.parts;
|
||||
const amt = Math.ceil(ml * (part / total));
|
||||
el.innerHTML = `${amt} ml`;
|
||||
// Lookup tooltips
|
||||
let next = el.parentElement.nextElementSibling;
|
||||
while (next) {
|
||||
if (next.classList.contains("tooltip")) {
|
||||
const sublabels = [];
|
||||
next.querySelector(".tooltiptext").childNodes.forEach((ch) => {
|
||||
if (ch.classList && ch.classList.contains("bgus_part")) {
|
||||
sublabels.push(ch.querySelector(".bgus_part_label"));
|
||||
}
|
||||
});
|
||||
setPartSize(sublabels, amt);
|
||||
}
|
||||
if (next.classList.contains("bgus_part")) {
|
||||
// Done searching
|
||||
break;
|
||||
}
|
||||
next = next.nextElementSibling;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Init fuzzy search with elements
|
||||
const el = Array.from(
|
||||
root.querySelectorAll<HTMLElement>(
|
||||
"table.wikitable > tbody > tr:not(:first-child)"
|
||||
)
|
||||
);
|
||||
|
||||
registerSearchEntries(
|
||||
el.map((element, id) => ({
|
||||
page: "Guide_to_chemistry",
|
||||
name: element
|
||||
.querySelector("th .reagent-header")
|
||||
.textContent.trim()
|
||||
.replace("▮", ""),
|
||||
element,
|
||||
alignment: "center",
|
||||
id,
|
||||
}))
|
||||
);
|
||||
|
||||
document.body.addEventListener("keydown", (ev) => {
|
||||
if (ev.shiftKey) {
|
||||
switch (ev.keyCode) {
|
||||
// SHIFT+C = Toggle checkboxes
|
||||
case 67: {
|
||||
root.classList.toggle("bgus_cbox");
|
||||
root
|
||||
.querySelectorAll(".bgus_checkbox:checked")
|
||||
.forEach((sel: HTMLInputElement) => {
|
||||
sel.checked = false;
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
// SHIFT+B = Set whole size (beaker?) for parts/units
|
||||
case 66: {
|
||||
const size = parseInt(
|
||||
prompt("Write target ml (0 to reset)", "90"),
|
||||
10
|
||||
);
|
||||
if (Number.isNaN(size) || size <= 0) {
|
||||
// Reset to parts/unit
|
||||
root
|
||||
.querySelectorAll(".bgus_part_label")
|
||||
.forEach((sel: HTMLElement) => {
|
||||
sel.innerHTML = sel.dataset.src;
|
||||
});
|
||||
return;
|
||||
}
|
||||
setPartSize(
|
||||
root.querySelectorAll("td > .bgus_part > .bgus_part_label"),
|
||||
+size
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
// Do nothing
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Prettify reaction conditions
|
||||
const reactionPropertyRegexp = /<b>(.+):<\/b>(.+)/i;
|
||||
el.forEach((element, id) => {
|
||||
element.querySelectorAll<HTMLElement>(".ph").forEach((ph) => {
|
||||
// Prepare table
|
||||
const extras = [];
|
||||
const table = document.createElement("table");
|
||||
const tableHeaderRow = document.createElement("tr");
|
||||
const tableValueRow = document.createElement("tr");
|
||||
table.appendChild(tableHeaderRow);
|
||||
table.appendChild(tableValueRow);
|
||||
|
||||
// Parse parameters
|
||||
ph.innerHTML.split("<br>").forEach((prop) => {
|
||||
if (prop.trim() === "N/A") {
|
||||
return;
|
||||
}
|
||||
|
||||
const matcher = reactionPropertyRegexp.exec(prop);
|
||||
if (!matcher) {
|
||||
extras.push(prop);
|
||||
return;
|
||||
}
|
||||
|
||||
const [reactionProperty, propValue] = matcher
|
||||
.slice(1)
|
||||
.map((s) => s.trim());
|
||||
|
||||
const header = document.createElement("th");
|
||||
header.appendChild(document.createTextNode(reactionProperty));
|
||||
tableHeaderRow.appendChild(header);
|
||||
const value = document.createElement("td");
|
||||
value.appendChild(document.createTextNode(propValue));
|
||||
tableValueRow.append(value);
|
||||
});
|
||||
|
||||
// Clear and re-add prettified data
|
||||
ph.innerHTML = "";
|
||||
if (tableHeaderRow.children.length > 0) {
|
||||
ph.appendChild(table);
|
||||
}
|
||||
ph.innerHTML += `<p>${extras.join("<br>")}</p>`;
|
||||
ph.classList.add("ph-ext");
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export default { chemistryScript, processChemistry };
|
50
src/scripts/pages/drinks.ts
Normal file
|
@ -0,0 +1,50 @@
|
|||
import { parseTable, makeTable } from "../utils";
|
||||
import { registerSearchEntries } from "../search";
|
||||
|
||||
export function processDrinks(root: HTMLElement): void {
|
||||
const drinkTables = ["#Basic_Drink_Ingredients", "#Mixed_Drinks"];
|
||||
drinkTables.forEach((selector) => {
|
||||
const table = root.querySelector<HTMLElement>(`${selector} .wikitable`);
|
||||
const drinks = parseTable(table).map((row) => {
|
||||
const foodBlock = document.createElement("td");
|
||||
foodBlock.innerHTML = `
|
||||
<div class="food-pic">${row["Picture"].innerHTML}</div>
|
||||
<div class="food-name">${row["Cocktail"].innerHTML}</div>
|
||||
<p class="strength">${row["Strength"].innerHTML}</p>
|
||||
<p class="description">${row["Drink Description"].innerHTML}</p>
|
||||
<p class="notes">${row["Notes"].innerHTML}</p>
|
||||
`;
|
||||
const ingredients = row["Ingredients"].innerHTML
|
||||
.split(/,|\+/gi)
|
||||
.map((s) => `<p>${s.trim()}</p>`);
|
||||
row["Ingredients"].innerHTML = ingredients.join("");
|
||||
return { Drink: foodBlock, Ingredients: row["Ingredients"] };
|
||||
});
|
||||
const betterTable = makeTable(["Drink", "Ingredients"], drinks);
|
||||
betterTable.className = "drink-ext wikitable";
|
||||
table.replaceWith(betterTable);
|
||||
});
|
||||
}
|
||||
|
||||
export function drinkScript(root: HTMLElement): void {
|
||||
// Init fuzzy search with elements
|
||||
const foodEntries = Array.from(
|
||||
root.querySelectorAll<HTMLElement>(
|
||||
".drink-ext tr:not(:first-child), .food-base-ext tr:not(:first-child), .food-ext tr:not(:first-child)"
|
||||
)
|
||||
);
|
||||
registerSearchEntries(
|
||||
foodEntries.map((element, id) => ({
|
||||
page: "Guide_to_drinks",
|
||||
name: element.querySelector(".food-name").textContent.trim(),
|
||||
element,
|
||||
alignment: "center",
|
||||
id,
|
||||
}))
|
||||
);
|
||||
}
|
||||
|
||||
export default {
|
||||
processDrinks,
|
||||
drinkScript,
|
||||
};
|
156
src/scripts/pages/food.ts
Normal file
|
@ -0,0 +1,156 @@
|
|||
import { parseTable, makeTable } from "../utils";
|
||||
import { registerSearchEntries } from "../search";
|
||||
|
||||
export function processFood(root: HTMLElement): void {
|
||||
const baseFoodTables = [
|
||||
{
|
||||
selector: "#Butchering",
|
||||
title: "Food name",
|
||||
process: "How to acquire",
|
||||
},
|
||||
{
|
||||
selector: "#Knife_\\.26_Rolling_Pin",
|
||||
title: "Food name",
|
||||
process: "How to acquire",
|
||||
},
|
||||
{
|
||||
selector: "#Processor",
|
||||
title: "Processes",
|
||||
process: "Condiments",
|
||||
},
|
||||
{
|
||||
selector: "#All-In-One-Grinder",
|
||||
title: "Blends",
|
||||
process: "How to acquire",
|
||||
},
|
||||
{
|
||||
selector: "#Microwave_Oven",
|
||||
title: "Cooked food",
|
||||
process: "How to acquire",
|
||||
},
|
||||
{
|
||||
selector: "#Junk_Food",
|
||||
title: "Dispenses",
|
||||
process: "Description",
|
||||
},
|
||||
{
|
||||
selector: "#Other_food",
|
||||
title: "Item",
|
||||
process: "Description",
|
||||
},
|
||||
];
|
||||
baseFoodTables.forEach(({ selector, title, process }) => {
|
||||
const table = root.querySelector<HTMLElement>(`${selector} .wikitable`);
|
||||
const foods = parseTable(table).map((row) => {
|
||||
const foodBlock = document.createElement("td");
|
||||
foodBlock.innerHTML = `<div class="food-block">
|
||||
<div class="food-pic">${row["Picture"].innerHTML}</div>
|
||||
<div class="food-name">${row[title].innerHTML}</div>
|
||||
</div>
|
||||
`;
|
||||
const out = {};
|
||||
out[title] = foodBlock;
|
||||
out[process] = row[process];
|
||||
return out;
|
||||
});
|
||||
const betterTable = makeTable([title, process], foods);
|
||||
betterTable.className = "food-base-ext wikitable";
|
||||
table.replaceWith(betterTable);
|
||||
});
|
||||
|
||||
const customTable = root.querySelector<HTMLElement>(
|
||||
`#Custom_Recipes .wikitable`
|
||||
);
|
||||
const customFood = parseTable(customTable).map((row) => {
|
||||
row[
|
||||
"Custom food"
|
||||
].innerHTML = `<div class="food-name">${row["Custom food"].innerHTML}</div>`;
|
||||
return row;
|
||||
});
|
||||
const betterCustomTable = makeTable(Object.keys(customFood[0]), customFood);
|
||||
betterCustomTable.className = "food-base-ext wikitable";
|
||||
customTable.replaceWith(betterCustomTable);
|
||||
|
||||
const recipeBookTable = root.querySelector<HTMLElement>(
|
||||
`#Recipe_Books .wikitable`
|
||||
);
|
||||
const recipeBook = parseTable(recipeBookTable).map((row) => {
|
||||
const bookBlock = document.createElement("td");
|
||||
bookBlock.innerHTML = `<div class="food-pic">${row["Picture"].innerHTML}</div>
|
||||
<div class="food-name">${row["Book"].innerHTML}</div>
|
||||
<p class="unlocks">${row["Unlocks"].innerHTML}</p>
|
||||
<p class="notes">${row["Notes"].innerHTML}</p>
|
||||
`;
|
||||
return { Book: bookBlock, "Where to get": row["Where to get"] };
|
||||
});
|
||||
const betterBookTable = makeTable(["Book", "Where to get"], recipeBook);
|
||||
betterBookTable.className = "book-ext wikitable";
|
||||
recipeBookTable.replaceWith(betterBookTable);
|
||||
|
||||
const foodRecipesTables = [
|
||||
"#Burgers",
|
||||
"#Breads",
|
||||
"#Cakes",
|
||||
"#Egg-Based_Food",
|
||||
"#Snowcones",
|
||||
"#Lizard_Cuisine",
|
||||
"#Seafood",
|
||||
"#Mexican",
|
||||
"#Savory",
|
||||
"#Waffles",
|
||||
"#Pies",
|
||||
"#Pizzas",
|
||||
"#Salads",
|
||||
"#Sandwiches",
|
||||
"#Soups_\\.26_Stews",
|
||||
"#Spaghettis",
|
||||
"#Icecream_Vat",
|
||||
];
|
||||
foodRecipesTables.forEach((selector) => {
|
||||
const table = root.querySelector<HTMLElement>(`${selector} .wikitable`);
|
||||
const recipes = parseTable(table).map((row) => {
|
||||
const foodBlock = document.createElement("td");
|
||||
foodBlock.innerHTML = `
|
||||
<div class="food-pic">${row["Picture"].innerHTML}</div>
|
||||
<div class="food-name">${row["Recipe"].innerHTML}</div>
|
||||
${
|
||||
"Nutritional Value" in row
|
||||
? `<p class="nutrition">${row["Nutritional Value"].innerHTML}</p>`
|
||||
: ""
|
||||
}
|
||||
${"Notes" in row ? `<p class="notes">${row["Notes"].innerHTML}</p>` : ""}
|
||||
`;
|
||||
const ingredients = row["Ingredients"].innerHTML
|
||||
.split(/,|\+/gi)
|
||||
.map((s) => `<p>${s.trim()}</p>`);
|
||||
row["Ingredients"].innerHTML = ingredients.join("");
|
||||
return { Drink: foodBlock, Ingredients: row["Ingredients"] };
|
||||
});
|
||||
const betterTable = makeTable(["Drink", "Ingredients"], recipes);
|
||||
betterTable.className = "recipe-ext wikitable";
|
||||
table.replaceWith(betterTable);
|
||||
});
|
||||
}
|
||||
|
||||
export function foodScript(root: HTMLElement): void {
|
||||
// Init fuzzy search with elements
|
||||
const foodEntries = Array.from(
|
||||
root.querySelectorAll<HTMLElement>(
|
||||
".drink-ext tr:not(:first-child), .food-base-ext tr:not(:first-child), .food-ext tr:not(:first-child)"
|
||||
)
|
||||
);
|
||||
registerSearchEntries(
|
||||
foodEntries.map((element, id) => ({
|
||||
page: "Guide_to_food",
|
||||
name: element.querySelector(".food-name").textContent.trim(),
|
||||
element,
|
||||
alignment: "center",
|
||||
id,
|
||||
}))
|
||||
);
|
||||
}
|
||||
|
||||
export default {
|
||||
processFood,
|
||||
foodScript,
|
||||
};
|
20
src/scripts/pages/generic.ts
Normal file
|
@ -0,0 +1,20 @@
|
|||
import { registerSearchEntries } from "../search";
|
||||
|
||||
export function genericScript(root: HTMLElement, docname: string): void {
|
||||
const el = Array.from(
|
||||
root.querySelectorAll<HTMLElement>("div.mw-headline-cont[id][data-name]")
|
||||
);
|
||||
|
||||
// Init fuzzy search with headlines
|
||||
registerSearchEntries(
|
||||
el.map((element: HTMLDivElement, id) => ({
|
||||
id,
|
||||
page: docname,
|
||||
name: element.dataset.name.trim(),
|
||||
element,
|
||||
alignment: "start",
|
||||
}))
|
||||
);
|
||||
}
|
||||
|
||||
export default { genericScript };
|
110
src/scripts/pages/global.ts
Normal file
|
@ -0,0 +1,110 @@
|
|||
import { findParent } from "../utils";
|
||||
import { darken, ColorFmt, lighten } from "../darkmode";
|
||||
|
||||
function isHeader(nodeName: string) {
|
||||
return nodeName === "H1" || nodeName === "H2" || nodeName === "H3";
|
||||
}
|
||||
|
||||
export function processGlobal(root: HTMLElement, docname: string): void {
|
||||
// Add header
|
||||
const header = document.createElement("h1");
|
||||
header.className = "pageheader";
|
||||
header.appendChild(document.createTextNode(docname.replace(/_/g, " ")));
|
||||
root.insertBefore(header, root.firstChild);
|
||||
|
||||
// Lazy load all images
|
||||
root
|
||||
.querySelectorAll<HTMLImageElement>("img")
|
||||
.forEach((elem) => elem.setAttribute("loading", "lazy"));
|
||||
|
||||
// Remove edit links
|
||||
root.querySelectorAll(".mw-editsection").forEach((editLink) => {
|
||||
editLink.parentElement.removeChild(editLink);
|
||||
});
|
||||
|
||||
// Darken bgcolor
|
||||
root.querySelectorAll("*[bgcolor]").forEach((td) => {
|
||||
let bgcolor = td.getAttribute("bgcolor");
|
||||
// Shitty way to detect if it's hex or not
|
||||
// Basically, none of the css colors long 6 letters only use hex letters
|
||||
// THANK FUCKING GOD
|
||||
if (bgcolor.length === 6 && !Number.isNaN(parseInt(bgcolor, 16))) {
|
||||
bgcolor = `#${bgcolor}`;
|
||||
}
|
||||
td.setAttribute("bgcolor", darken(bgcolor, ColorFmt.HEX).slice(1));
|
||||
});
|
||||
root.querySelectorAll<HTMLElement>("*[style]").forEach((td) => {
|
||||
if (td.style.backgroundColor !== "") {
|
||||
td.style.backgroundColor = darken(td.style.backgroundColor, ColorFmt.RGB);
|
||||
}
|
||||
if (td.style.background !== "") {
|
||||
td.style.backgroundColor = darken(td.style.background, ColorFmt.RGB);
|
||||
}
|
||||
});
|
||||
|
||||
// Lighten fgcolors
|
||||
root.querySelectorAll("*[color]").forEach((td) => {
|
||||
let color = td.getAttribute("color");
|
||||
if (color.length === 6 && !Number.isNaN(parseInt(color, 16))) {
|
||||
color = `#${color}`;
|
||||
}
|
||||
td.setAttribute("color", lighten(color, ColorFmt.HEX).slice(1));
|
||||
});
|
||||
|
||||
// Remove fixed widths
|
||||
root.querySelectorAll("table[width]").forEach((td) => {
|
||||
td.setAttribute("width", "100%");
|
||||
});
|
||||
root.querySelectorAll("table[style]").forEach((td: HTMLTableElement) => {
|
||||
if (td.style.width !== "") {
|
||||
td.style.width = "100%";
|
||||
}
|
||||
});
|
||||
|
||||
// Fixup spacing on top quotes
|
||||
root
|
||||
.querySelectorAll<HTMLImageElement>("table .floatright > a > img")
|
||||
.forEach((img) => {
|
||||
const row = findParent(img, (el) => el instanceof HTMLTableRowElement);
|
||||
const td = document.createElement("td");
|
||||
row.appendChild(td);
|
||||
});
|
||||
|
||||
// Fuck #toctitle
|
||||
const toc = root.querySelector("#toc");
|
||||
if (toc) {
|
||||
const tocHeader = toc.querySelector("h2");
|
||||
toc.parentNode.insertBefore(tocHeader, toc);
|
||||
toc.removeChild(toc.querySelector("#toctitle"));
|
||||
}
|
||||
|
||||
// Group headers and content so stickies don't overlap
|
||||
root.querySelectorAll("h1,h2,h3").forEach((h3) => {
|
||||
const parent = h3.parentNode;
|
||||
const div = document.createElement("div");
|
||||
parent.insertBefore(div, h3);
|
||||
while (h3.nextSibling && !isHeader(h3.nextSibling.nodeName)) {
|
||||
const sibling = h3.nextSibling;
|
||||
parent.removeChild(sibling);
|
||||
div.appendChild(sibling);
|
||||
}
|
||||
h3.parentNode.removeChild(h3);
|
||||
div.insertBefore(h3, div.firstChild);
|
||||
div.className = "mw-headline-cont";
|
||||
});
|
||||
|
||||
// Move id from header to container, if one is found
|
||||
root.querySelectorAll<HTMLElement>(".mw-headline").forEach((span) => {
|
||||
// Find nearest container
|
||||
const container = findParent(span, (el) =>
|
||||
el.classList.contains("mw-headline-cont")
|
||||
);
|
||||
if (container) {
|
||||
container.id = span.id;
|
||||
span.id += "-span";
|
||||
container.dataset.name = span.textContent;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export default { processGlobal };
|
104
src/scripts/pages/virology.ts
Normal file
|
@ -0,0 +1,104 @@
|
|||
import { parseTable, makeTable } from "../utils";
|
||||
import { registerSearchEntries } from "../search";
|
||||
|
||||
export function processVirology(root: HTMLElement): void {
|
||||
const diseaseTable = root.querySelector<HTMLElement>(
|
||||
"#Simple_Diseases .wikitable"
|
||||
);
|
||||
const diseases = parseTable(diseaseTable).map((row) => {
|
||||
const diseaseBlock = document.createElement("td");
|
||||
diseaseBlock.innerHTML = `
|
||||
<div class="disease-name">${row["Disease Name"].innerHTML}</div>
|
||||
<p class="vector">${row["Vector Name"].innerHTML}</p>
|
||||
<p class="source">${row["Source"].innerHTML}</p>
|
||||
<p class="spread">${row["Spread"].innerHTML}</p>
|
||||
<p class="description">${row["Description"].innerHTML}</p>
|
||||
`;
|
||||
return {
|
||||
Disease: diseaseBlock,
|
||||
Cure: row["Cure"],
|
||||
};
|
||||
});
|
||||
|
||||
const diseaseBetterTable = makeTable(["Disease", "Cure"], diseases);
|
||||
diseaseBetterTable.className = "disease-ext wikitable";
|
||||
diseaseTable.replaceWith(diseaseBetterTable);
|
||||
|
||||
const symptomsTable = root.querySelector<HTMLElement>(
|
||||
"#Symptoms_Table .wikitable"
|
||||
);
|
||||
const symptoms = parseTable(symptomsTable)
|
||||
.sort(
|
||||
(a, b) =>
|
||||
parseInt(a["Level"].textContent, 10) -
|
||||
parseInt(b["Level"].textContent, 10)
|
||||
)
|
||||
.map((row) => {
|
||||
const symptomBlock = document.createElement("td");
|
||||
symptomBlock.innerHTML = `
|
||||
<div class="disease-name">${row["Symptom"].innerHTML}</div>
|
||||
<p class="level">${row["Level"].innerHTML}</p>
|
||||
<p class="chemical">${row["Required Chemical"].innerHTML}</p>
|
||||
<p class="description">${row["Effect"].innerHTML}</p>
|
||||
`;
|
||||
const symptomStats = document.createElement("td");
|
||||
symptomStats.innerHTML = `
|
||||
<table class="stats">
|
||||
<tr><th>Stealth</th><td>${row["Stealth"].innerHTML}</td></tr>
|
||||
<tr><th>Resistance</th><td>${row["Resistance"].innerHTML}</td></tr>
|
||||
<tr><th>Stage speed</th><td>${row["Stage speed"].innerHTML}</td></tr>
|
||||
<tr><th>Transmission</th><td>${row["Transmission"].innerHTML}</td></tr>
|
||||
</table>
|
||||
`;
|
||||
const thresholds = row["Threshold (hover mouse over for details)"];
|
||||
thresholds.innerHTML = `<ul class="thresholds"><li>${thresholds.innerHTML
|
||||
.split(",")
|
||||
.join("</li><li>")}</li></ul>`;
|
||||
return {
|
||||
Symptom: symptomBlock,
|
||||
Stats: symptomStats,
|
||||
Thresholds: thresholds,
|
||||
};
|
||||
});
|
||||
const symptomsBetterTable = makeTable(
|
||||
["Symptom", "Stats", "Thresholds"],
|
||||
symptoms
|
||||
);
|
||||
symptomsBetterTable.className = "symptoms-ext wikitable";
|
||||
symptomsTable.replaceWith(symptomsBetterTable);
|
||||
}
|
||||
|
||||
export function virologyScript(root: HTMLElement): void {
|
||||
// Init fuzzy search with elements
|
||||
const diseases = Array.from(
|
||||
root.querySelectorAll<HTMLElement>(".disease-ext tr:not(:first-child)")
|
||||
);
|
||||
registerSearchEntries(
|
||||
diseases.map((element, id) => ({
|
||||
page: "Infections",
|
||||
name: element.querySelector(".disease-name").textContent.trim(),
|
||||
element,
|
||||
alignment: "center",
|
||||
id,
|
||||
}))
|
||||
);
|
||||
const symptoms = Array.from(
|
||||
root.querySelectorAll<HTMLElement>(
|
||||
".symptoms-ext > tbody > tr:not(:first-child)"
|
||||
)
|
||||
);
|
||||
registerSearchEntries(
|
||||
symptoms.map((element, id) => ({
|
||||
page: "Infections",
|
||||
name: element.querySelector(".disease-name").textContent.trim(),
|
||||
element,
|
||||
alignment: "center",
|
||||
id,
|
||||
}))
|
||||
);
|
||||
}
|
||||
|
||||
export default {
|
||||
processVirology,
|
||||
virologyScript,
|
||||
};
|
37
src/scripts/pages/welcome.ts
Normal file
|
@ -0,0 +1,37 @@
|
|||
import { nextAnimationFrame } from "../../utils";
|
||||
|
||||
function expandPage(root: HTMLElement) {
|
||||
// Show all sections
|
||||
root.querySelectorAll<HTMLElement>("div.hidden").forEach((div) => {
|
||||
div.style.display = "block";
|
||||
div.style.opacity = "1";
|
||||
});
|
||||
|
||||
// Hide buttons
|
||||
root.querySelector<HTMLElement>(".action_buttons").style.display = "none";
|
||||
|
||||
// Remove vertical centering
|
||||
root.classList.remove("center");
|
||||
}
|
||||
|
||||
export function welcomeScript(root: HTMLElement): void {
|
||||
const buttonContainer = root.querySelector<HTMLElement>(".action_buttons");
|
||||
root.querySelectorAll<HTMLDivElement>("div[data-name]").forEach((sec) => {
|
||||
const { name } = sec.dataset;
|
||||
const button = document.createElement("button");
|
||||
button.className = "pretty-button";
|
||||
button.appendChild(document.createTextNode(name));
|
||||
button.addEventListener("click", async () => {
|
||||
expandPage(root);
|
||||
await nextAnimationFrame();
|
||||
sec.scrollIntoView({
|
||||
block: "start",
|
||||
inline: "nearest",
|
||||
behavior: "smooth",
|
||||
});
|
||||
});
|
||||
buttonContainer.appendChild(button);
|
||||
});
|
||||
}
|
||||
|
||||
export default { welcomeScript };
|
|
@ -1,29 +1,51 @@
|
|||
interface SearchOption {
|
||||
import { nextAnimationFrame } from "../utils";
|
||||
import TabManager from "../ui/TabManager";
|
||||
|
||||
interface SearchEntry {
|
||||
page: string;
|
||||
element: HTMLElement;
|
||||
name: string;
|
||||
id: number;
|
||||
alignment: ScrollLogicalPosition;
|
||||
}
|
||||
|
||||
export function searchBox(
|
||||
el: HTMLElement[],
|
||||
searchCandidate,
|
||||
options: SearchOption = {
|
||||
alignment: "center",
|
||||
}
|
||||
): HTMLElement {
|
||||
const allEntries: SearchEntry[] = [];
|
||||
|
||||
/**
|
||||
* Add one or more entries to the global search database
|
||||
* @param entries Search entries to add
|
||||
*/
|
||||
export function registerSearchEntries(entries: SearchEntry[]): void {
|
||||
allEntries.push(...entries);
|
||||
}
|
||||
|
||||
export function searchBox(): HTMLElement {
|
||||
// Fuzzy search box
|
||||
const resultList = document.createElement("ul");
|
||||
const searchBoxElem = document.createElement("div");
|
||||
let selectedResult = null;
|
||||
let selectedResult = 0;
|
||||
let results = [];
|
||||
const jumpTo = (id: number) => {
|
||||
el[id].scrollIntoView({
|
||||
block: options.alignment,
|
||||
let global = false;
|
||||
|
||||
const jumpTo = (entry: SearchEntry) => {
|
||||
// If page is different jump to that
|
||||
if (global) {
|
||||
const currentPage = document.querySelector<HTMLElement>(".page.active")
|
||||
.dataset.tab;
|
||||
if (currentPage !== entry.page) {
|
||||
TabManager.instance.setActive(entry.page);
|
||||
}
|
||||
}
|
||||
|
||||
entry.element.scrollIntoView({
|
||||
block: entry.alignment,
|
||||
inline: "nearest",
|
||||
behavior: "auto",
|
||||
});
|
||||
document
|
||||
.querySelectorAll("table.wikitable .bgus_fz_selected")
|
||||
.querySelectorAll(".bgus_fz_selected")
|
||||
.forEach((sel) => sel.classList.remove("bgus_fz_selected"));
|
||||
el[id].parentElement.classList.add("bgus_fz_selected");
|
||||
entry.element.classList.add("bgus_fz_selected");
|
||||
};
|
||||
|
||||
const setSelectedResult = (i) => {
|
||||
|
@ -32,21 +54,39 @@ export function searchBox(
|
|||
.querySelectorAll(".selected")
|
||||
.forEach((sel) => sel.classList.remove("selected"));
|
||||
resultList.children[i].classList.add("selected");
|
||||
jumpTo(results[i].id);
|
||||
jumpTo(results[i]);
|
||||
};
|
||||
|
||||
const search = (str) => {
|
||||
if (!str) {
|
||||
const search = async (str: string, currentPage: string) => {
|
||||
if (!str || str.length < 1) {
|
||||
return;
|
||||
}
|
||||
// Check for special flags
|
||||
let entries: SearchEntry[] = allEntries;
|
||||
global = str[0] === "@";
|
||||
|
||||
// Unless we're doing a global search don't show entries for other pages
|
||||
if (!global) {
|
||||
entries = allEntries.filter((e) => e.page === currentPage);
|
||||
} else {
|
||||
// Remove prefix from string
|
||||
str = str.substr(1);
|
||||
}
|
||||
|
||||
// Re-check string lenght after prefix removal
|
||||
if (str.length < 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
const combinations = str
|
||||
.split("")
|
||||
.map((c) => (c.includes(["\\", "]", "^"]) ? `\\${c}` : c))
|
||||
.map((c) => (["\\", "]", "^"].includes(c) ? `\\${c}` : c))
|
||||
.join("])(.*?)([");
|
||||
const regex = new RegExp(`^(.*?)([${combinations}])(.*?)$`, "i");
|
||||
const arr = searchCandidate
|
||||
.map((o) => {
|
||||
o.matches = (o.str.match(regex) || [])
|
||||
results = entries
|
||||
.map((o) => ({
|
||||
...o,
|
||||
matches: (o.name.match(regex) || [])
|
||||
.slice(1)
|
||||
.reduce((list, group, i, or) => {
|
||||
// Initialize first placeholder (always empty) and first matching "sections"
|
||||
|
@ -62,10 +102,9 @@ export function searchBox(
|
|||
list.push([group]);
|
||||
}
|
||||
return list;
|
||||
}, [])
|
||||
.map((cstr) => cstr.join(""));
|
||||
return o;
|
||||
})
|
||||
}, [] as string[][])
|
||||
.map((cstr) => cstr.join("")),
|
||||
}))
|
||||
// Strike non-matching rows
|
||||
.filter((o) => o.matches.length > 0)
|
||||
.sort((oA, oB) => {
|
||||
|
@ -96,24 +135,34 @@ export function searchBox(
|
|||
// Make the search stable since ECMAScript doesn't mandate it
|
||||
return iA - iB;
|
||||
});
|
||||
results = arr;
|
||||
window.requestAnimationFrame(() => {
|
||||
resultList.innerHTML = "";
|
||||
arr.forEach(({ matches, id }) => {
|
||||
const li = document.createElement("li");
|
||||
li.innerHTML = matches
|
||||
.map((c, i) => (i % 2 ? `<strong>${c}</strong>` : c))
|
||||
.join("");
|
||||
li.addEventListener("click", () => {
|
||||
jumpTo(id);
|
||||
searchBoxElem.classList.add("bgus_hidden");
|
||||
});
|
||||
resultList.appendChild(li);
|
||||
|
||||
await nextAnimationFrame();
|
||||
|
||||
resultList.innerHTML = "";
|
||||
results.forEach((elem) => {
|
||||
const li = document.createElement("li");
|
||||
elem.matches.forEach((match, i) => {
|
||||
const cont = document.createElement(i % 2 ? "strong" : "span");
|
||||
cont.appendChild(document.createTextNode(match));
|
||||
li.appendChild(cont);
|
||||
});
|
||||
if (results.length > 0) {
|
||||
setSelectedResult(0);
|
||||
if (global) {
|
||||
const source = document.createElement("span");
|
||||
source.className = "source";
|
||||
source.appendChild(
|
||||
document.createTextNode(elem.page.replace(/_/g, " "))
|
||||
);
|
||||
li.appendChild(source);
|
||||
}
|
||||
li.addEventListener("click", () => {
|
||||
jumpTo(elem);
|
||||
searchBoxElem.classList.add("bgus_hidden");
|
||||
});
|
||||
resultList.appendChild(li);
|
||||
});
|
||||
if (results.length > 0) {
|
||||
setSelectedResult(0);
|
||||
}
|
||||
};
|
||||
|
||||
// Create fuzzy search box
|
||||
|
@ -128,7 +177,7 @@ export function searchBox(
|
|||
return;
|
||||
case 13: // Enter - Jump to first result and hide bar
|
||||
if (results.length > 0) {
|
||||
jumpTo(results[selectedResult].id);
|
||||
jumpTo(results[selectedResult]);
|
||||
}
|
||||
searchBoxElem.classList.add("bgus_hidden");
|
||||
return;
|
||||
|
@ -144,7 +193,10 @@ export function searchBox(
|
|||
return;
|
||||
default:
|
||||
if (sel.value !== oldValue) {
|
||||
search(sel.value);
|
||||
const currentPage = document.querySelector<HTMLElement>(
|
||||
".page.active"
|
||||
);
|
||||
search(sel.value, currentPage.dataset.tab);
|
||||
oldValue = sel.value;
|
||||
}
|
||||
}
|
||||
|
@ -178,4 +230,4 @@ export function searchBox(
|
|||
return searchBoxElem;
|
||||
}
|
||||
|
||||
export default searchBox;
|
||||
export default { searchBox, registerSearchEntries };
|
87
src/scripts/utils.ts
Normal file
|
@ -0,0 +1,87 @@
|
|||
/**
|
||||
* Find closest parent that meets a specified condition
|
||||
* @param base Element to start from
|
||||
* @param matchFn Matching function, returns true if condition is met
|
||||
*/
|
||||
export function findParent(
|
||||
base: HTMLElement,
|
||||
matchFn: (candidate: HTMLElement) => boolean
|
||||
): HTMLElement | null {
|
||||
let parent = base.parentElement;
|
||||
while (parent != null) {
|
||||
if (matchFn(parent)) {
|
||||
break;
|
||||
}
|
||||
parent = parent.parentElement;
|
||||
}
|
||||
return parent;
|
||||
}
|
||||
|
||||
export type TableRowData = Record<string, HTMLElement>;
|
||||
export type TableData = TableRowData[];
|
||||
|
||||
/**
|
||||
* Parse a HTML table and return a dictionary of rows as dictionaries
|
||||
* @param table Table element or any element from where you can query for "th" etc.
|
||||
*/
|
||||
export function parseTable(table: HTMLElement): TableData {
|
||||
const [headerRow, ...valueRows] = Array.from(table.querySelectorAll("tr"));
|
||||
const headers = Array.from(
|
||||
headerRow.querySelectorAll<HTMLTableRowElement>("th")
|
||||
).map((th) => th.textContent.trim());
|
||||
return valueRows.map((tr) => {
|
||||
const obj = {};
|
||||
tr.querySelectorAll<HTMLElement>("td,th").forEach((val, i) => {
|
||||
obj[headers[i]] = val;
|
||||
});
|
||||
return obj;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Make table from generated or mutated (from parseTable) table data
|
||||
* @param headers List of strings to use as table headers, must be keys in object
|
||||
* @param data Table row data
|
||||
* @param decorator (Optional) decorator function to change table row elements
|
||||
*/
|
||||
export function makeTable(
|
||||
headers: string[],
|
||||
data: TableData,
|
||||
decorator?: (data: TableRowData, tr: HTMLTableRowElement) => void
|
||||
): HTMLTableElement {
|
||||
const table = document.createElement("table");
|
||||
if (data.length < 1) {
|
||||
return table;
|
||||
}
|
||||
// Make header row
|
||||
const headerRow = document.createElement("tr");
|
||||
headers.forEach((head) => {
|
||||
const headerCell = document.createElement("th");
|
||||
headerCell.appendChild(document.createTextNode(head));
|
||||
headerRow.appendChild(headerCell);
|
||||
});
|
||||
table.appendChild(headerRow);
|
||||
|
||||
// Make rows
|
||||
data.forEach((row) => {
|
||||
const tableRow = document.createElement("tr");
|
||||
headers.forEach((key) => {
|
||||
let cell = null;
|
||||
if (row[key].tagName === "TD" || row[key].tagName === "TH") {
|
||||
cell = row[key];
|
||||
} else {
|
||||
cell = document.createElement("td");
|
||||
cell.appendChild(row[key]);
|
||||
}
|
||||
tableRow.appendChild(cell);
|
||||
});
|
||||
if (decorator) {
|
||||
decorator(row, tableRow);
|
||||
}
|
||||
table.appendChild(tableRow);
|
||||
});
|
||||
|
||||
return table;
|
||||
}
|
||||
|
||||
export default { findParent, parseTable, makeTable };
|
314
src/ui/TabManager.ts
Normal file
|
@ -0,0 +1,314 @@
|
|||
// @ts-expect-error: Asset imports are handled by parcel
|
||||
import speen from "~/assets/images/speen.svg";
|
||||
import { getPageHTML } from "../wiki";
|
||||
import {
|
||||
processHTML,
|
||||
bindFunctions,
|
||||
PAGE_VERSIONS,
|
||||
postProcessHTML,
|
||||
} from "../scripts/index";
|
||||
import cache from "../cache";
|
||||
import { nextAnimationFrame, delay } from "../utils";
|
||||
|
||||
// @ts-expect-error: Parcel image import
|
||||
import unknown from "~/assets/images/tab-icons/unknown.svg";
|
||||
|
||||
function initWaiting(elem: HTMLElement) {
|
||||
// Add spinner
|
||||
const spinnerContainer = document.createElement("div");
|
||||
spinnerContainer.className = "speen";
|
||||
const spinnerImg = document.createElement("img");
|
||||
spinnerImg.src = speen;
|
||||
spinnerContainer.appendChild(spinnerImg);
|
||||
elem.appendChild(spinnerContainer);
|
||||
}
|
||||
|
||||
async function loadPage(
|
||||
page: string,
|
||||
elem: HTMLElement,
|
||||
useCache: boolean
|
||||
): Promise<HTMLElement> {
|
||||
let html: string | null = null;
|
||||
const key = `page:${page}`;
|
||||
|
||||
const wrapper = document.createElement("div");
|
||||
wrapper.className = "wrapper";
|
||||
|
||||
// Check cache for pre-processed page
|
||||
if (useCache) {
|
||||
try {
|
||||
const cachedPage = await cache.get<string>(key);
|
||||
if (cachedPage) {
|
||||
// Get expected version
|
||||
const expectedVersion =
|
||||
page in PAGE_VERSIONS ? PAGE_VERSIONS[page] : PAGE_VERSIONS.$DEFAULT;
|
||||
if (cachedPage.version === expectedVersion) {
|
||||
console.log(`${page}: found cached entry`);
|
||||
html = cachedPage.value;
|
||||
} else {
|
||||
console.log(`${page}: found outdated cache entry`);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(`${page}: failed to retrieve cache entry:`, e);
|
||||
}
|
||||
}
|
||||
|
||||
// Fetch page content
|
||||
if (!html) {
|
||||
console.log(`${page}: fetching`);
|
||||
let retries = 0;
|
||||
while (retries < 5) {
|
||||
try {
|
||||
// eslint-disable-next-line no-await-in-loop
|
||||
html = await getPageHTML(page);
|
||||
break;
|
||||
} catch (e) {
|
||||
retries += 1;
|
||||
// eslint-disable-next-line no-await-in-loop
|
||||
await delay(1000);
|
||||
}
|
||||
}
|
||||
|
||||
// Convert relative links to absolute (and proxied)
|
||||
html = html.replace(/"\/wiki/gi, '"//tgproxy.ovo.ovh/wiki');
|
||||
|
||||
await nextAnimationFrame();
|
||||
|
||||
// Set as HTML content and run HTML manipulations on it
|
||||
wrapper.innerHTML = html;
|
||||
|
||||
console.log(`${page}: processing`);
|
||||
processHTML(wrapper, page);
|
||||
|
||||
// Get version to set
|
||||
const version =
|
||||
page in PAGE_VERSIONS ? PAGE_VERSIONS[page] : PAGE_VERSIONS.$DEFAULT;
|
||||
|
||||
// Save result to cache
|
||||
cache.set(key, wrapper.innerHTML, version).then(() => {
|
||||
console.log(`${page}: saved to cache`);
|
||||
});
|
||||
} else {
|
||||
// Set cached content as HTML
|
||||
wrapper.innerHTML = html;
|
||||
|
||||
postProcessHTML(elem, page); // noop in prod, used in dev for testing candidate DOM changes
|
||||
}
|
||||
|
||||
elem.innerHTML = wrapper.outerHTML;
|
||||
bindFunctions(elem, page);
|
||||
elem.classList.remove("waiting");
|
||||
|
||||
return elem;
|
||||
}
|
||||
|
||||
type TabElements = {
|
||||
tabListItem: HTMLElement;
|
||||
tabContentItem: HTMLElement;
|
||||
};
|
||||
|
||||
interface Section {
|
||||
name: string;
|
||||
element: HTMLElement;
|
||||
tabs: Record<string, TabElements>;
|
||||
}
|
||||
|
||||
export default class TabManager {
|
||||
static instance: TabManager;
|
||||
|
||||
sectionListContainer: HTMLElement;
|
||||
|
||||
tabListContainer: HTMLElement;
|
||||
|
||||
tabContentContainer: HTMLElement;
|
||||
|
||||
sections: Record<string, Section> = {};
|
||||
|
||||
sectionMap: Record<string, string> = {};
|
||||
|
||||
loading = false;
|
||||
|
||||
cacheEnabled = true;
|
||||
|
||||
constructor(
|
||||
sectionlist: HTMLElement,
|
||||
tablist: HTMLElement,
|
||||
tabcontent: HTMLElement
|
||||
) {
|
||||
this.sectionListContainer = sectionlist;
|
||||
this.tabListContainer = tablist;
|
||||
this.tabContentContainer = tabcontent;
|
||||
TabManager.instance = this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set app-wide loading state
|
||||
* @param value is app still loading?
|
||||
*/
|
||||
setLoading(value: boolean): void {
|
||||
if (value) {
|
||||
document.getElementById("app").classList.add("waiting");
|
||||
initWaiting(this.tabContentContainer);
|
||||
const spinnerContainer = this.tabContentContainer.querySelector(".speen");
|
||||
spinnerContainer.appendChild(
|
||||
document.createTextNode("Loading wiki pages")
|
||||
);
|
||||
} else {
|
||||
document.getElementById("app").classList.remove("waiting");
|
||||
const elem = this.tabContentContainer.querySelector(".speen");
|
||||
this.tabContentContainer.removeChild(elem);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create section and add it to the section list
|
||||
* @param name Section name
|
||||
*/
|
||||
createSection(name: string): void {
|
||||
// Create section element
|
||||
const sectionItem = document.createElement("div");
|
||||
sectionItem.className = "section";
|
||||
sectionItem.dataset.section = name;
|
||||
sectionItem.appendChild(document.createTextNode(name));
|
||||
sectionItem.addEventListener("click", () => {
|
||||
if (sectionItem.classList.contains("active")) {
|
||||
return;
|
||||
}
|
||||
this.showSection(name);
|
||||
});
|
||||
this.sectionListContainer.appendChild(sectionItem);
|
||||
|
||||
this.sections[name] = { name, element: sectionItem, tabs: {} };
|
||||
}
|
||||
|
||||
/**
|
||||
* Show tabs of a specific section
|
||||
* @param name Section name
|
||||
*/
|
||||
showSection(name: string): void {
|
||||
const active = this.sectionListContainer.querySelector<HTMLElement>(
|
||||
".active"
|
||||
);
|
||||
if (active) {
|
||||
// De-activate current section
|
||||
active.classList.remove("active");
|
||||
|
||||
// Hide all tabs
|
||||
this.tabListContainer
|
||||
.querySelectorAll(`div[data-section=${active.dataset.section}]`)
|
||||
.forEach((tab) => tab.classList.add("hidden"));
|
||||
}
|
||||
// Set section as active
|
||||
this.sections[name].element.classList.add("active");
|
||||
|
||||
// Show all tabs of that section
|
||||
this.tabListContainer
|
||||
.querySelectorAll(`div[data-section=${name}]`)
|
||||
.forEach((tab) => tab.classList.remove("hidden"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Open tab page and add it to the tab list
|
||||
* @param section Section to add the tab button to
|
||||
* @param page Page name
|
||||
* @param icon Icon to show
|
||||
* @param setActive Also set the tab as active
|
||||
*/
|
||||
async openTab(
|
||||
section: string,
|
||||
page: string,
|
||||
options: {
|
||||
icon?: string;
|
||||
active?: boolean;
|
||||
text?: string;
|
||||
}
|
||||
): Promise<void> {
|
||||
const { icon, active, text } = options;
|
||||
// Create tab list item
|
||||
const tabListItem = document.createElement("div");
|
||||
tabListItem.className = "tab";
|
||||
tabListItem.dataset.section = section;
|
||||
tabListItem.dataset.tab = page;
|
||||
tabListItem.addEventListener("click", () => {
|
||||
if (tabListItem.classList.contains("active")) {
|
||||
return;
|
||||
}
|
||||
this.setActive(page);
|
||||
});
|
||||
const iconElement = document.createElement("img");
|
||||
iconElement.src = icon || unknown;
|
||||
tabListItem.title = page.replace(/_/gi, " ");
|
||||
tabListItem.appendChild(iconElement);
|
||||
const shortTitle = text || page.substr(page.lastIndexOf("_") + 1, 4);
|
||||
tabListItem.appendChild(document.createTextNode(shortTitle));
|
||||
this.tabListContainer.appendChild(tabListItem);
|
||||
|
||||
// Create tab content container
|
||||
const tabContentItem = document.createElement("div");
|
||||
tabContentItem.className = "page waiting";
|
||||
tabContentItem.dataset.tab = page;
|
||||
initWaiting(tabContentItem);
|
||||
|
||||
this.tabContentContainer.appendChild(tabContentItem);
|
||||
|
||||
// Create tab entry
|
||||
this.sections[section].tabs[page] = { tabListItem, tabContentItem };
|
||||
this.sectionMap[page] = section;
|
||||
|
||||
// Hide tab if section is hidden
|
||||
if (!this.sections[section].element.classList.contains("active")) {
|
||||
tabListItem.classList.add("hidden");
|
||||
}
|
||||
|
||||
// Start loading page for new tab
|
||||
const elem = await loadPage(page, tabContentItem, this.cacheEnabled);
|
||||
// Since element can be replaced (when loading for the first time), make sure the reference is updated
|
||||
if (elem !== tabContentItem) {
|
||||
this.sections[section].tabs[page].tabContentItem = elem;
|
||||
}
|
||||
|
||||
// If asked for, set it to active
|
||||
if (active) {
|
||||
this.setActive(page);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a specific page to be the active/visible one
|
||||
* @param page Page name
|
||||
*/
|
||||
setActive(page: string): void {
|
||||
// Make sure tab exists (why wouldn't it?!)
|
||||
const section = this.sectionMap[page];
|
||||
if (!(section in this.sections)) {
|
||||
throw new Error("section not found");
|
||||
}
|
||||
|
||||
if (!(page in this.sections[section].tabs)) {
|
||||
throw new Error("tab not found");
|
||||
}
|
||||
|
||||
// Deactivate current active tab
|
||||
this.tabListContainer
|
||||
.querySelectorAll(".active")
|
||||
.forEach((it) => it.classList.remove("active"));
|
||||
this.tabContentContainer
|
||||
.querySelectorAll(".active")
|
||||
.forEach((it) => it.classList.remove("active"));
|
||||
|
||||
// If section is not shown, show it!
|
||||
const isSectionActive = this.sections[section].element.classList.contains(
|
||||
"active"
|
||||
);
|
||||
if (!isSectionActive) {
|
||||
this.showSection(section);
|
||||
}
|
||||
|
||||
// Activate new tab
|
||||
const { tabListItem, tabContentItem } = this.sections[section].tabs[page];
|
||||
this.sections[section].element.classList.add("active");
|
||||
tabListItem.classList.add("active");
|
||||
tabContentItem.classList.add("active");
|
||||
}
|
||||
}
|
212
src/ui/sections.ts
Normal file
|
@ -0,0 +1,212 @@
|
|||
// @ts-expect-error: Parcel image import
|
||||
import chemistry from "~/assets/images/tab-icons/chemistry.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import medicine from "~/assets/images/tab-icons/medicine.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import plumbing from "~/assets/images/tab-icons/plumbing.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import grenade from "~/assets/images/tab-icons/grenade.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import genetics from "~/assets/images/tab-icons/genetics.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import virus from "~/assets/images/tab-icons/virus.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import surgery from "~/assets/images/tab-icons/surgery.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import trauma from "~/assets/images/tab-icons/trauma.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import wound from "~/assets/images/tab-icons/wound.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import ghetto from "~/assets/images/tab-icons/ghetto.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import construction from "~/assets/images/tab-icons/construction.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import machines from "~/assets/images/tab-icons/machines.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import power from "~/assets/images/tab-icons/power.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import solar from "~/assets/images/tab-icons/solar.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import supermatter from "~/assets/images/tab-icons/supermatter.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import shield from "~/assets/images/tab-icons/shield.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import turbine from "~/assets/images/tab-icons/turbine.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import atmos from "~/assets/images/tab-icons/atmos.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import tcomm from "~/assets/images/tab-icons/tcomm.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import rnd from "~/assets/images/tab-icons/rnd.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import toxins from "~/assets/images/tab-icons/toxins.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import xeno from "~/assets/images/tab-icons/xeno.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import nanites from "~/assets/images/tab-icons/nanites.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import rules from "~/assets/images/tab-icons/rules.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import aimod from "~/assets/images/tab-icons/aimod.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import tips from "~/assets/images/tab-icons/tips.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import critter from "~/assets/images/tab-icons/critter.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import races from "~/assets/images/tab-icons/races.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import food from "~/assets/images/tab-icons/food.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import hydro from "~/assets/images/tab-icons/hydro.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import song from "~/assets/images/tab-icons/song.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import crate from "~/assets/images/tab-icons/crate.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import space from "~/assets/images/tab-icons/space.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import aux from "~/assets/images/tab-icons/auxbase.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import robo from "~/assets/images/tab-icons/robo.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import security from "~/assets/images/tab-icons/security.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import law from "~/assets/images/tab-icons/law.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import sop from "~/assets/images/tab-icons/sop.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import trial from "~/assets/images/tab-icons/trial.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import traitor from "~/assets/images/tab-icons/traitor.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import hacking from "~/assets/images/tab-icons/hacking.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import weapons from "~/assets/images/tab-icons/weapons.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import uplink from "~/assets/images/tab-icons/uplink.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import rev from "~/assets/images/tab-icons/rev.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import cult from "~/assets/images/tab-icons/cult.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import nuke from "~/assets/images/tab-icons/nuke.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import malf from "~/assets/images/tab-icons/malf.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import combat from "~/assets/images/tab-icons/combat.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import access from "~/assets/images/tab-icons/access.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import xmorph from "~/assets/images/tab-icons/xmorph.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import abduction from "~/assets/images/tab-icons/abduction.svg";
|
||||
// @ts-expect-error: Parcel image import
|
||||
import mafia from "~/assets/images/tab-icons/mafia.svg";
|
||||
|
||||
export interface SectionInfo {
|
||||
name: string;
|
||||
tabs: TabInfo[];
|
||||
}
|
||||
|
||||
export interface TabInfo {
|
||||
page: string;
|
||||
icon: string | null;
|
||||
text?: string;
|
||||
}
|
||||
|
||||
const sections: SectionInfo[] = [
|
||||
{
|
||||
name: "Medical",
|
||||
tabs: [
|
||||
{ page: "Guide_to_medicine", icon: medicine },
|
||||
{ page: "Guide_to_chemistry", icon: chemistry },
|
||||
{ page: "Guide_to_plumbing", icon: plumbing },
|
||||
{ page: "Grenade", text: "nade", icon: grenade },
|
||||
{ page: "Infections", text: "virus", icon: virus },
|
||||
{ page: "Surgery", icon: surgery },
|
||||
{ page: "Guide_to_Traumas", text: "trauma", icon: trauma },
|
||||
{ page: "Guide_to_Wounds", text: "wound", icon: wound },
|
||||
{ page: "Guide_to_Ghetto_Chemistry", text: "ghetto", icon: ghetto },
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Engineering",
|
||||
tabs: [
|
||||
{ page: "Guide_to_construction", icon: construction },
|
||||
{ page: "Machines", icon: machines },
|
||||
{ page: "Guide_to_power", text: "power", icon: power },
|
||||
{ page: "Solars", text: "solar", icon: solar },
|
||||
{ page: "Guide_to_the_Supermatter", text: "smatt", icon: supermatter },
|
||||
{
|
||||
page: "Singularity_and_Tesla_engines",
|
||||
text: "sing/tesl",
|
||||
icon: shield,
|
||||
},
|
||||
{ page: "Gas_turbine", text: "GAST", icon: turbine },
|
||||
{ page: "Guide_to_Atmospherics", text: "atmos", icon: atmos },
|
||||
{ page: "Guide_to_Telecommunications", icon: tcomm, text: "tcomm" },
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Science",
|
||||
tabs: [
|
||||
{ page: "Guide_to_Research_and_Development", text: "R&D", icon: rnd },
|
||||
{ page: "Guide_to_robotics", icon: robo },
|
||||
{ page: "Guide_to_toxins", text: "toxin", icon: toxins },
|
||||
{ page: "Guide_to_xenobiology", icon: xeno },
|
||||
{ page: "Guide_to_genetics", icon: genetics },
|
||||
{ page: "Guide_to_Nanites", text: "nanite", icon: nanites },
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Security",
|
||||
tabs: [
|
||||
{ page: "Guide_to_security", text: "security", icon: security },
|
||||
{ page: "Space_Law", text: "space law", icon: law },
|
||||
{ page: "Standard_Operating_Procedure", text: "S.O.P.", icon: sop },
|
||||
{ page: "Guide_to_trials", text: "trials", icon: trial },
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Antag",
|
||||
tabs: [
|
||||
{ page: "Traitor", icon: traitor },
|
||||
{ page: "Makeshift_weapons", icon: weapons },
|
||||
{ page: "Hacking", icon: hacking },
|
||||
{ page: "Guide_to_Combat", icon: combat },
|
||||
{ page: "Syndicate_Items", text: "uplk", icon: uplink },
|
||||
{ page: "Illicit_Access", icon: access },
|
||||
{ page: "Revolutionary", text: "rev", icon: rev },
|
||||
{ page: "Blood_Cult", text: "cult", icon: cult },
|
||||
{ page: "Nuclear_Operative", text: "nuke", icon: nuke },
|
||||
{ page: "Guide_to_malfunction", icon: malf },
|
||||
{ page: "Xenos", text: "xmor", icon: xmorph },
|
||||
{ page: "Abductor", icon: abduction },
|
||||
{ page: "Families", icon: mafia },
|
||||
{ page: "Heretic", icon: null },
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Other",
|
||||
tabs: [
|
||||
{ page: "Rules", text: "rules", icon: rules },
|
||||
{ page: "AI_modules", text: "aimo", icon: aimod },
|
||||
{
|
||||
page: "Guide_to_Awesome_Miscellaneous_Stuff",
|
||||
text: "misc",
|
||||
icon: tips,
|
||||
},
|
||||
{ page: "Critters", icon: critter },
|
||||
{ page: "Guide_to_races", icon: races },
|
||||
{ page: "Guide_to_food", text: "food", icon: food },
|
||||
{ page: "Guide_to_drinks", text: "drnk", icon: food },
|
||||
{ page: "Guide_to_hydroponics", icon: hydro },
|
||||
{ page: "Songs", icon: song },
|
||||
{ page: "Supply_crates", icon: crate },
|
||||
{ page: "Auxiliary_Base_Construction_Area", text: "aux", icon: aux },
|
||||
{ page: "Guide_to_Space_Exploration", icon: space },
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
export default sections;
|
|
@ -1,363 +0,0 @@
|
|||
import { darken, ColorFmt, lighten } from "./darkmode";
|
||||
import searchBox from "./search";
|
||||
import { findParent } from "./utils";
|
||||
|
||||
export default function userscript(root: HTMLElement, docname: string): void {
|
||||
root.querySelectorAll(".mw-editsection").forEach((editLink) => {
|
||||
editLink.parentElement.removeChild(editLink);
|
||||
});
|
||||
|
||||
// Darken bgcolor
|
||||
root.querySelectorAll("*[bgcolor]").forEach((td) => {
|
||||
let bgcolor = td.getAttribute("bgcolor");
|
||||
// Shitty way to detect if it's hex or not
|
||||
// Basically, none of the css colors long 6 letters only use hex letters
|
||||
// THANK FUCKING GOD
|
||||
if (bgcolor.length === 6 && !Number.isNaN(parseInt(bgcolor, 16))) {
|
||||
bgcolor = `#${bgcolor}`;
|
||||
}
|
||||
td.setAttribute("bgcolor", darken(bgcolor, ColorFmt.HEX).slice(1));
|
||||
});
|
||||
root.querySelectorAll<HTMLElement>("*[style]").forEach((td) => {
|
||||
if (td.style.backgroundColor !== "") {
|
||||
td.style.backgroundColor = darken(td.style.backgroundColor, ColorFmt.RGB);
|
||||
}
|
||||
if (td.style.background !== "") {
|
||||
td.style.backgroundColor = darken(td.style.background, ColorFmt.RGB);
|
||||
}
|
||||
});
|
||||
|
||||
// Lighten fgcolors
|
||||
root.querySelectorAll("*[color]").forEach((td) => {
|
||||
let color = td.getAttribute("color");
|
||||
if (color.length === 6 && !Number.isNaN(parseInt(color, 16))) {
|
||||
color = `#${color}`;
|
||||
}
|
||||
td.setAttribute("color", lighten(color, ColorFmt.HEX).slice(1));
|
||||
});
|
||||
|
||||
// Remove fixed widths
|
||||
root.querySelectorAll("table[width]").forEach((td) => {
|
||||
td.setAttribute("width", "100%");
|
||||
});
|
||||
root.querySelectorAll("table[style]").forEach((td: HTMLTableElement) => {
|
||||
if (td.style.width !== "") {
|
||||
td.style.width = "100%";
|
||||
}
|
||||
});
|
||||
|
||||
// Fixup spacing on top quotes
|
||||
root
|
||||
.querySelectorAll<HTMLImageElement>("table .floatright > a > img")
|
||||
.forEach((img) => {
|
||||
const row = findParent(img, (el) => el instanceof HTMLTableRowElement);
|
||||
const td = document.createElement("td");
|
||||
row.appendChild(td);
|
||||
});
|
||||
|
||||
// Group headers and content so stickies don't overlap
|
||||
root.querySelectorAll("h3,h2").forEach((h3) => {
|
||||
const parent = h3.parentNode;
|
||||
const div = document.createElement("div");
|
||||
parent.insertBefore(div, h3);
|
||||
while (h3.nextSibling && !h3.nextSibling.nodeName.startsWith("H")) {
|
||||
const sibling = h3.nextSibling;
|
||||
parent.removeChild(sibling);
|
||||
div.appendChild(sibling);
|
||||
}
|
||||
h3.parentNode.removeChild(h3);
|
||||
div.insertBefore(h3, div.firstChild);
|
||||
div.className = "mw-headline-cont";
|
||||
});
|
||||
|
||||
// Move id from header to container, if one is found
|
||||
root.querySelectorAll<HTMLElement>(".mw-headline").forEach((span) => {
|
||||
// Find nearest container
|
||||
const container = findParent(span, (el) =>
|
||||
el.classList.contains("mw-headline-cont")
|
||||
);
|
||||
if (container) {
|
||||
container.id = span.id;
|
||||
span.id += "-span";
|
||||
container.dataset.name = span.innerText;
|
||||
}
|
||||
});
|
||||
|
||||
// Tell user that better chemistry is loading
|
||||
const postbody = root;
|
||||
const statusMessage = document.createElement("div");
|
||||
statusMessage.innerHTML = `
|
||||
<table style="background-color: black; margin-bottom:10px;" width="95%" align="center">
|
||||
<tbody><tr><td align="center">
|
||||
<b>Hang on...</b> Better guides is loading.
|
||||
</td></tr></tbody>
|
||||
</table>`;
|
||||
postbody.insertBefore(statusMessage, postbody.firstChild);
|
||||
|
||||
function betterChemistry() {
|
||||
// Fix inconsistencies with <p> on random parts
|
||||
// Ideally I'd like a <p> or something on every part, wrapping it completely, but for now let's just kill 'em
|
||||
document
|
||||
.querySelectorAll(
|
||||
"table.wikitable > tbody > tr:not(:first-child) > td:nth-child(2), .tooltiptext"
|
||||
)
|
||||
.forEach((td) => {
|
||||
const tmp = td.cloneNode() as HTMLElement;
|
||||
// The cast to Array is necessary because, while childNodes's NodeList technically has a forEach method, it's a live list and operations mess with its lenght in the middle of the loop.
|
||||
// Nodes can only have one parent so append removes them from the original NodeList and shifts the following one back into the wrong index.
|
||||
Array.from(td.childNodes).forEach((el) => {
|
||||
if (el instanceof HTMLParagraphElement) {
|
||||
tmp.append(...el.childNodes);
|
||||
} else {
|
||||
tmp.append(el);
|
||||
}
|
||||
});
|
||||
td.parentNode.replaceChild(tmp, td);
|
||||
});
|
||||
|
||||
// Enrich "x part" with checkboxes and parts
|
||||
Array.from(document.querySelectorAll("td"))
|
||||
.filter((el) => el.innerText.indexOf(" part") >= 0)
|
||||
.forEach((el) => {
|
||||
el.innerHTML = el.innerHTML.replace(
|
||||
/((\d+)\s+(?:parts?|units?))(.*?(?:<\/a>|\n|$))/gi,
|
||||
(match, ...m) =>
|
||||
`<label class="bgus_part ${
|
||||
m[2].includes("</a>") ? "bgus_part_tooltip" : ""
|
||||
}" data-amount="${
|
||||
m[1]
|
||||
}"><input type="checkbox" class='bgus_checkbox bgus_hidden'/> <span class="bgus_part_label" data-src="${
|
||||
m[0]
|
||||
}">${m[0]}</span></label>${m[2].replace(
|
||||
/(<a .+?<\/a>)/gi,
|
||||
'<span class="bgus_nobreak bgus_nested_element">$1<span class="bgus_twistie"></span></span>'
|
||||
)}`
|
||||
);
|
||||
});
|
||||
// Add event to autofill child checkboxes
|
||||
root
|
||||
.querySelectorAll(".bgus_part_tooltip > .bgus_checkbox")
|
||||
.forEach((box: HTMLInputElement) => {
|
||||
const tooltip = box.parentElement.nextElementSibling;
|
||||
box.addEventListener("click", () => {
|
||||
tooltip
|
||||
.querySelectorAll(".bgus_checkbox")
|
||||
.forEach((el: HTMLInputElement) => {
|
||||
el.checked = box.checked;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Add event to collapse subsections
|
||||
root.querySelectorAll(".bgus_nested_element").forEach((twistie) => {
|
||||
twistie.addEventListener("click", () => {
|
||||
twistie.classList.toggle("bgus_collapsed");
|
||||
});
|
||||
});
|
||||
|
||||
// Wrap every recipe with extra metadata
|
||||
root.querySelectorAll<HTMLElement>(".bgus_part").forEach((el) => {
|
||||
if ("parts" in el.parentElement.dataset) {
|
||||
el.parentElement.dataset.parts = (
|
||||
parseInt(el.parentElement.dataset.parts, 10) +
|
||||
parseInt(el.dataset.amount, 10)
|
||||
).toString();
|
||||
} else {
|
||||
el.parentElement.dataset.parts = el.dataset.amount;
|
||||
}
|
||||
});
|
||||
|
||||
const setPartSize = (labels, ml) => {
|
||||
labels.forEach((el) => {
|
||||
const part = el.parentElement.dataset.amount;
|
||||
const total = el.parentElement.parentElement.dataset.parts;
|
||||
const amt = Math.ceil(ml * (part / total));
|
||||
el.innerHTML = `${amt} ml`;
|
||||
// Lookup tooltips
|
||||
let next = el.parentElement.nextElementSibling;
|
||||
while (next) {
|
||||
if (next.classList.contains("tooltip")) {
|
||||
const sublabels = [];
|
||||
next.querySelector(".tooltiptext").childNodes.forEach((ch) => {
|
||||
if (ch.classList && ch.classList.contains("bgus_part")) {
|
||||
sublabels.push(ch.querySelector(".bgus_part_label"));
|
||||
}
|
||||
});
|
||||
setPartSize(sublabels, amt);
|
||||
}
|
||||
if (next.classList.contains("bgus_part")) {
|
||||
// Done searching
|
||||
break;
|
||||
}
|
||||
next = next.nextElementSibling;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
root.classList.add("bchem");
|
||||
// Init fuzzy search with elements
|
||||
const el = Array.from(
|
||||
root.querySelectorAll<HTMLElement>(
|
||||
"table.wikitable > tbody > tr:not(:first-child) > th"
|
||||
)
|
||||
);
|
||||
const name = el.map((elem) => {
|
||||
let partial = "";
|
||||
elem.childNodes.forEach((t) => {
|
||||
if (t instanceof Text) {
|
||||
partial += t.textContent;
|
||||
}
|
||||
});
|
||||
return partial.trim();
|
||||
});
|
||||
const box = searchBox(
|
||||
el,
|
||||
name.map((e, i) => ({ id: i, str: e }))
|
||||
);
|
||||
document.body.appendChild(box);
|
||||
|
||||
// Remove "Removed medicines" section
|
||||
const remTable = root.querySelector(
|
||||
"#Non-craftable_Medicines + h4 + p + table"
|
||||
);
|
||||
remTable.parentElement.removeChild(remTable);
|
||||
|
||||
root
|
||||
.querySelectorAll<HTMLElement>("div[data-name] .wikitable.sortable tr")
|
||||
.forEach((row) => {
|
||||
const sectionEl = findParent(
|
||||
row,
|
||||
(sel) => "name" in sel.dataset && sel.dataset.name !== ""
|
||||
);
|
||||
const section = sectionEl.dataset.name;
|
||||
if (row.querySelector("td") === null) {
|
||||
// Remove unused rows if found
|
||||
const headers = row.querySelectorAll("th");
|
||||
headers.forEach((th, i) => {
|
||||
if (i < 2) {
|
||||
th.classList.add("table-head");
|
||||
return;
|
||||
}
|
||||
th.parentElement.removeChild(th);
|
||||
});
|
||||
return;
|
||||
}
|
||||
const rows = Array.from(row.querySelectorAll("td")).slice(1);
|
||||
let treatment = null;
|
||||
let desc = null;
|
||||
let metabolism = null;
|
||||
let overdose = null;
|
||||
let addiction = null;
|
||||
// Handle special cases
|
||||
switch (section) {
|
||||
case "Components":
|
||||
case "Virology Recipes":
|
||||
[desc] = rows;
|
||||
break;
|
||||
case "Narcotics":
|
||||
[desc, metabolism, overdose, addiction] = rows;
|
||||
break;
|
||||
case "Explosive Strength":
|
||||
case "Other Reagents":
|
||||
case "Mutation Toxins":
|
||||
[desc, metabolism] = rows;
|
||||
break;
|
||||
default:
|
||||
// All fields
|
||||
[treatment, desc, metabolism, overdose, addiction] = rows;
|
||||
}
|
||||
const title = row.querySelector("th");
|
||||
let content = `<div class="reagent-header">${title.innerHTML}</div>`;
|
||||
if (treatment) {
|
||||
content += `<p class="treatment">${treatment.innerHTML}</p>`;
|
||||
}
|
||||
if (metabolism) {
|
||||
content += `<p class="metabolism">${metabolism.innerHTML}</p>`;
|
||||
}
|
||||
if (addiction && addiction.innerHTML.trim() !== "N/A") {
|
||||
content += `<p class="addiction">${addiction.innerHTML}</p>`;
|
||||
}
|
||||
if (overdose && overdose.innerHTML.trim() !== "N/A") {
|
||||
content += `<p class="overdose">${overdose.innerHTML}</p>`;
|
||||
}
|
||||
if (desc) {
|
||||
content += `<p>${desc.innerHTML}</p>`;
|
||||
}
|
||||
title.classList.add("reagent-ext");
|
||||
title.innerHTML = content;
|
||||
if (desc) desc.parentElement.removeChild(desc);
|
||||
if (treatment) treatment.parentElement.removeChild(treatment);
|
||||
if (metabolism) metabolism.parentElement.removeChild(metabolism);
|
||||
if (overdose) overdose.parentElement.removeChild(overdose);
|
||||
if (addiction) addiction.parentElement.removeChild(addiction);
|
||||
});
|
||||
|
||||
document.body.addEventListener("keydown", (ev) => {
|
||||
if (ev.shiftKey) {
|
||||
switch (ev.keyCode) {
|
||||
// SHIFT+C = Toggle checkboxes
|
||||
case 67: {
|
||||
root.classList.toggle("bgus_cbox");
|
||||
root
|
||||
.querySelectorAll(".bgus_checkbox:checked")
|
||||
.forEach((sel: HTMLInputElement) => {
|
||||
sel.checked = false;
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
// SHIFT+B = Set whole size (beaker?) for parts/units
|
||||
case 66: {
|
||||
const size = parseInt(
|
||||
prompt("Write target ml (0 to reset)", "90"),
|
||||
10
|
||||
);
|
||||
if (Number.isNaN(size) || size <= 0) {
|
||||
// Reset to parts/unit
|
||||
root
|
||||
.querySelectorAll(".bgus_part_label")
|
||||
.forEach((sel: HTMLElement) => {
|
||||
sel.innerHTML = sel.dataset.src;
|
||||
});
|
||||
return;
|
||||
}
|
||||
setPartSize(
|
||||
root.querySelectorAll("td > .bgus_part > .bgus_part_label"),
|
||||
+size
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
// Do nothing
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function betterGeneric() {
|
||||
const el = Array.from(
|
||||
root.querySelectorAll<HTMLElement>("div.mw-headline-cont[id][data-name]")
|
||||
);
|
||||
const name = el.map((elem: HTMLDivElement) => elem.dataset.name.trim());
|
||||
|
||||
// Init fuzzy search with headlines
|
||||
const box = searchBox(
|
||||
el,
|
||||
name.map((e, i) => ({ id: i, str: e })),
|
||||
{ alignment: "start" }
|
||||
);
|
||||
root.appendChild(box);
|
||||
}
|
||||
|
||||
switch (docname) {
|
||||
case "Guide_to_chemistry":
|
||||
betterChemistry();
|
||||
break;
|
||||
default:
|
||||
betterGeneric();
|
||||
break;
|
||||
}
|
||||
// Everything is loaded, remove loading bar
|
||||
statusMessage.innerHTML = "";
|
||||
}
|
22
src/utils.ts
|
@ -1,15 +1,11 @@
|
|||
export function findParent(
|
||||
base: HTMLElement,
|
||||
matchFn: (candidate: HTMLElement) => boolean
|
||||
): HTMLElement | null {
|
||||
let parent = base.parentElement;
|
||||
while (parent != null) {
|
||||
if (matchFn(parent)) {
|
||||
break;
|
||||
}
|
||||
parent = parent.parentElement;
|
||||
}
|
||||
return parent;
|
||||
export function nextAnimationFrame(): Promise<void> {
|
||||
return new Promise((resolve) => requestAnimationFrame(() => resolve()));
|
||||
}
|
||||
|
||||
export default { findParent };
|
||||
export function delay(ms: number): Promise<void> {
|
||||
return new Promise((resolve) => {
|
||||
setTimeout(() => resolve(), ms);
|
||||
});
|
||||
}
|
||||
|
||||
export default { nextAnimationFrame, delay };
|
||||
|
|
180
style/bgus.scss
|
@ -1,180 +0,0 @@
|
|||
@import "vars.scss";
|
||||
|
||||
.bgus_hidden {
|
||||
display: none !important;
|
||||
}
|
||||
.bgus_nobreak {
|
||||
white-space: nowrap;
|
||||
}
|
||||
#bgus_fz_searchbox {
|
||||
position: fixed;
|
||||
top: 50px;
|
||||
left: 20%;
|
||||
right: 20%;
|
||||
background: rgba(10, 10, 10, 0.8);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
z-index: 999;
|
||||
color: #fff;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
@media (min-width: 600px) {
|
||||
#bgus_fz_searchbox {
|
||||
left: 30%;
|
||||
right: 30%;
|
||||
}
|
||||
}
|
||||
|
||||
#bgus_fz_searchbox input {
|
||||
font-size: 10pt;
|
||||
padding: 5pt 8pt;
|
||||
border: 1px solid #555;
|
||||
margin: 5px;
|
||||
margin-bottom: 0;
|
||||
background-color: #111;
|
||||
color: #fff;
|
||||
outline: none;
|
||||
&:focus {
|
||||
border-color: #aaa;
|
||||
}
|
||||
}
|
||||
#bgus_fz_searchbox ul {
|
||||
list-style: none;
|
||||
margin: 5px;
|
||||
padding: 0;
|
||||
}
|
||||
#bgus_fz_searchbox li {
|
||||
margin: 0;
|
||||
padding: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
#bgus_fz_searchbox li:hover {
|
||||
background-color: rgba(100, 100, 100, 0.5);
|
||||
}
|
||||
#bgus_fz_searchbox li.selected {
|
||||
border-left: 3px solid white;
|
||||
}
|
||||
.bgus_twistie:after {
|
||||
color: red;
|
||||
display: inline-block;
|
||||
font-weight: bold;
|
||||
margin-left: 0.2em;
|
||||
content: "⯆";
|
||||
}
|
||||
.bgus_collapsed > .bgus_twistie:after {
|
||||
content: "⯈";
|
||||
}
|
||||
div.tooltiptext {
|
||||
display: none;
|
||||
border: 1px solid #384e68;
|
||||
background: linear-gradient(to bottom, darken(#384e68, 20%), darken(#384e68, 25%));
|
||||
}
|
||||
span.bgus_nested_element:not(.bgus_collapsed) + div.tooltiptext {
|
||||
z-index: unset;
|
||||
visibility: inherit;
|
||||
display: block;
|
||||
opacity: 1;
|
||||
position: relative;
|
||||
width: auto;
|
||||
border-left-width: 3px;
|
||||
margin-left: 5px;
|
||||
margin-top: 5px;
|
||||
font-size: 8pt;
|
||||
padding: 5px 8px;
|
||||
line-height: 10pt;
|
||||
|
||||
div.tooltiptext {
|
||||
margin-left: -5px;
|
||||
}
|
||||
}
|
||||
.bchem table.wikitable > tbody > tr > td:nth-child(2) {
|
||||
width: 45%;
|
||||
padding: 10px;
|
||||
}
|
||||
.bchem table.wikitable {
|
||||
border: 0 !important;
|
||||
.table-head {
|
||||
text-align: center;
|
||||
}
|
||||
th {
|
||||
background-color: darken($nanotrasen, 5%) !important;
|
||||
}
|
||||
}
|
||||
div.bchem .bgus_fz_selected {
|
||||
background: $nanotrasen !important;
|
||||
th,
|
||||
td {
|
||||
border-top: 2px solid lighten($nanotrasen, 20%);
|
||||
border-bottom: 2px solid lighten($nanotrasen, 15%);
|
||||
}
|
||||
th {
|
||||
background: lighten($nanotrasen, 5%) !important;
|
||||
}
|
||||
div.tooltiptext {
|
||||
border-color: lighten($nanotrasen, 20%);
|
||||
background: darken($nanotrasen, 10%);
|
||||
}
|
||||
}
|
||||
body.bgus_cbox input[type="checkbox"] + span[data-src]:before {
|
||||
display: inline-block;
|
||||
width: 1.5em;
|
||||
content: "[_]";
|
||||
}
|
||||
body.bgus_cbox input[type="checkbox"]:checked + span[data-src]:before {
|
||||
content: "[X]";
|
||||
}
|
||||
body.bgus_cbox input[type="checkbox"]:checked + span[data-src] {
|
||||
text-decoration: line-through;
|
||||
}
|
||||
body.bgus_cbox input[type="checkbox"] + span[data-src] {
|
||||
cursor: pointer;
|
||||
}
|
||||
body.bgus_cbox input[type="checkbox"] + span[data-src]:before,
|
||||
body.bgus_cbox input[type="checkbox"] + span[data-src] {
|
||||
color: orange;
|
||||
font-weight: bold;
|
||||
}
|
||||
body.bgus_cbox input[type="checkbox"]:checked + span[data-src]:before,
|
||||
body.bgus_cbox input[type="checkbox"]:checked + span[data-src] {
|
||||
color: green;
|
||||
}
|
||||
|
||||
.reagent-ext {
|
||||
.reagent-header {
|
||||
font-size: 12pt;
|
||||
text-align: left;
|
||||
padding: 10pt;
|
||||
padding-bottom: 0;
|
||||
span:last-child {
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
}
|
||||
p {
|
||||
font-size: 8pt;
|
||||
font-weight: 300;
|
||||
line-height: 1.4em;
|
||||
word-spacing: -0.1em;
|
||||
}
|
||||
.treatment {
|
||||
font-size: 10pt;
|
||||
}
|
||||
.metabolism:before {
|
||||
font-size: 9pt;
|
||||
content: "Metabolism rate: ";
|
||||
font-weight: bold;
|
||||
}
|
||||
.overdose,
|
||||
.addiction {
|
||||
font-size: 9pt;
|
||||
font-weight: bold;
|
||||
}
|
||||
.overdose:before {
|
||||
color: #ffae68;
|
||||
content: "Overdose at ";
|
||||
}
|
||||
.addiction:before {
|
||||
color: #ffdf97;
|
||||
content: "Addiction at ";
|
||||
}
|
||||
}
|
171
style/main.scss
|
@ -1,164 +1,9 @@
|
|||
@import "vars.scss";
|
||||
$nanotrasen: #384e68;
|
||||
|
||||
html,
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.bgimage {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 0;
|
||||
img {
|
||||
opacity: 0.4;
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
background: linear-gradient(to bottom, darken($nanotrasen, 20%), darken($nanotrasen, 10%));
|
||||
background-size: 100% 100%;
|
||||
background-attachment: fixed;
|
||||
color: #fff;
|
||||
font-family: "Iosevka Aile Web", sans-serif;
|
||||
font-size: 9pt;
|
||||
line-height: 1.6em;
|
||||
}
|
||||
|
||||
#app {
|
||||
height: 100%;
|
||||
display: grid;
|
||||
grid-template-rows: 40px 1fr;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar {
|
||||
width: 14pt;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track {
|
||||
background: linear-gradient(to bottom, darken($nanotrasen, 0%), darken($nanotrasen, 10%), darken($nanotrasen, 0%));
|
||||
border: 1px solid lighten($nanotrasen, 10%);
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
border-radius: 2px;
|
||||
background: linear-gradient(
|
||||
to bottom,
|
||||
lighten($nanotrasen, 20%),
|
||||
lighten($nanotrasen, 30%),
|
||||
lighten($nanotrasen, 20%)
|
||||
);
|
||||
border: 1px solid lighten($nanotrasen, 10%);
|
||||
}
|
||||
|
||||
#tabs {
|
||||
grid-row: 2;
|
||||
z-index: 1;
|
||||
display: grid;
|
||||
overflow: hidden;
|
||||
.page {
|
||||
visibility: hidden;
|
||||
padding-top: 10pt;
|
||||
overflow-y: scroll;
|
||||
grid-row: 1;
|
||||
grid-column: 1;
|
||||
&.active {
|
||||
visibility: visible;
|
||||
}
|
||||
&.waiting {
|
||||
user-select: none;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
.speen {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
img {
|
||||
width: 60vmin;
|
||||
opacity: 0.9;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
p,
|
||||
h2,
|
||||
h3,
|
||||
h4 {
|
||||
padding-left: 10pt;
|
||||
padding-right: 10pt;
|
||||
}
|
||||
a[href] {
|
||||
color: white;
|
||||
}
|
||||
#toctitle,
|
||||
h1,
|
||||
h2,
|
||||
h3 {
|
||||
position: sticky;
|
||||
top: -10pt;
|
||||
background: $nanotrasen;
|
||||
padding: 10px;
|
||||
z-index: 999;
|
||||
}
|
||||
#toctitle h2 {
|
||||
margin: 0;
|
||||
}
|
||||
.mw-headline {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$tab-active: lighten($nanotrasen, 10%);
|
||||
|
||||
#tab-list {
|
||||
z-index: 2;
|
||||
grid-row: 1;
|
||||
display: flex;
|
||||
border-bottom: 2px solid $tab-active;
|
||||
|
||||
.tab {
|
||||
max-width: 200px;
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
user-select: none;
|
||||
|
||||
&.active {
|
||||
background-color: $tab-active;
|
||||
}
|
||||
&:not(.active) {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
noscript {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: transparent;
|
||||
width: 100%;
|
||||
}
|
||||
@import "ui.scss";
|
||||
@import "search.scss";
|
||||
@import "pages/global.scss";
|
||||
@import "pages/chemistry.scss";
|
||||
@import "pages/food.scss";
|
||||
@import "pages/virology.scss";
|
||||
@import "pages/welcome.scss";
|
||||
|
|
162
style/pages/chemistry.scss
Normal file
|
@ -0,0 +1,162 @@
|
|||
div[data-tab="Guide_to_chemistry"] {
|
||||
.bgus_twistie:after {
|
||||
color: red;
|
||||
display: inline-block;
|
||||
font-weight: bold;
|
||||
margin-left: 0.2em;
|
||||
content: "⯆";
|
||||
}
|
||||
|
||||
.bgus_collapsed > .bgus_twistie:after {
|
||||
content: "⯈";
|
||||
}
|
||||
|
||||
div.tooltiptext {
|
||||
display: none;
|
||||
border: 1px solid #384e68;
|
||||
background: linear-gradient(
|
||||
to bottom,
|
||||
darken(#384e68, 20%),
|
||||
darken(#384e68, 25%)
|
||||
);
|
||||
}
|
||||
|
||||
span.bgus_nested_element:not(.bgus_collapsed) + div.tooltiptext {
|
||||
z-index: unset;
|
||||
visibility: inherit;
|
||||
display: block;
|
||||
opacity: 1;
|
||||
position: relative;
|
||||
width: auto;
|
||||
border-left-width: 3px;
|
||||
margin-left: 5px;
|
||||
margin-top: 5px;
|
||||
font-size: 8pt;
|
||||
padding: 5px 8px;
|
||||
line-height: 10pt;
|
||||
|
||||
div.tooltiptext {
|
||||
margin-left: -5px;
|
||||
}
|
||||
}
|
||||
|
||||
table.wikitable {
|
||||
border: 0 !important;
|
||||
|
||||
.table-head {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
th {
|
||||
background-color: darken($nanotrasen, 5%) !important;
|
||||
}
|
||||
|
||||
& > tbody > tr > td:nth-child(2) {
|
||||
width: 45%;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.bgus_fz_selected {
|
||||
background: $nanotrasen !important;
|
||||
th,
|
||||
td {
|
||||
border-top: 2px solid lighten($nanotrasen, 20%);
|
||||
border-bottom: 2px solid lighten($nanotrasen, 15%);
|
||||
}
|
||||
th {
|
||||
background: lighten($nanotrasen, 5%) !important;
|
||||
}
|
||||
div.tooltiptext {
|
||||
border-color: lighten($nanotrasen, 20%);
|
||||
background: darken($nanotrasen, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
body.bgus_cbox {
|
||||
input[type="checkbox"] + span[data-src]:before {
|
||||
display: inline-block;
|
||||
width: 1.5em;
|
||||
content: "[_]";
|
||||
}
|
||||
input[type="checkbox"]:checked + span[data-src]:before {
|
||||
content: "[X]";
|
||||
}
|
||||
input[type="checkbox"]:checked + span[data-src] {
|
||||
text-decoration: line-through;
|
||||
}
|
||||
input[type="checkbox"] + span[data-src] {
|
||||
cursor: pointer;
|
||||
}
|
||||
input[type="checkbox"] + span[data-src]:before,
|
||||
input[type="checkbox"] + span[data-src] {
|
||||
color: orange;
|
||||
font-weight: bold;
|
||||
}
|
||||
input[type="checkbox"]:checked + span[data-src]:before,
|
||||
input[type="checkbox"]:checked + span[data-src] {
|
||||
color: green;
|
||||
}
|
||||
}
|
||||
|
||||
.reagent-ext {
|
||||
.reagent-header {
|
||||
font-size: 12pt;
|
||||
text-align: left;
|
||||
padding: 10pt;
|
||||
padding-bottom: 0;
|
||||
span:last-child {
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
}
|
||||
p {
|
||||
font-size: 8pt;
|
||||
font-weight: 300;
|
||||
line-height: 1.4em;
|
||||
word-spacing: -0.1em;
|
||||
}
|
||||
.treatment {
|
||||
font-size: 10pt;
|
||||
}
|
||||
.metabolism:before {
|
||||
font-size: 9pt;
|
||||
content: "Metabolism rate: ";
|
||||
font-weight: bold;
|
||||
}
|
||||
.overdose,
|
||||
.addiction {
|
||||
font-size: 9pt;
|
||||
font-weight: bold;
|
||||
}
|
||||
.overdose:before {
|
||||
color: #ffae68;
|
||||
content: "Overdose at ";
|
||||
}
|
||||
.addiction:before {
|
||||
color: #ffdf97;
|
||||
content: "Addiction at ";
|
||||
}
|
||||
}
|
||||
|
||||
.ph-ext {
|
||||
p {
|
||||
font-size: 9pt;
|
||||
}
|
||||
table {
|
||||
margin: 0.5rem 0.7rem;
|
||||
background-color: $nanotrasen !important;
|
||||
border: 0;
|
||||
td,
|
||||
th {
|
||||
font-size: 8pt;
|
||||
padding: 0.2rem 0.3rem;
|
||||
line-height: 1rem;
|
||||
}
|
||||
td {
|
||||
background-color: darken($nanotrasen, 10%) !important;
|
||||
text-align: center;
|
||||
font-weight: normal;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
134
style/pages/food.scss
Normal file
|
@ -0,0 +1,134 @@
|
|||
div[data-tab="Guide_to_food_and_drinks"] {
|
||||
.drink-ext,
|
||||
.food-base-ext,
|
||||
.book-ext,
|
||||
.recipe-ext {
|
||||
width: 100%;
|
||||
th,
|
||||
td:first-child {
|
||||
background-color: #2f4257;
|
||||
}
|
||||
.food-pic {
|
||||
float: left;
|
||||
min-width: 64px;
|
||||
min-height: 64px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.food-name {
|
||||
font-size: 12pt;
|
||||
text-align: left;
|
||||
padding: 10pt;
|
||||
padding-bottom: 0;
|
||||
margin-bottom: 10pt;
|
||||
}
|
||||
p {
|
||||
font-size: 8pt;
|
||||
font-weight: 300;
|
||||
line-height: 1.2em;
|
||||
word-spacing: -0.1em;
|
||||
margin: 5pt 0;
|
||||
}
|
||||
|
||||
.bgus_fz_selected {
|
||||
background: $nanotrasen !important;
|
||||
th,
|
||||
td {
|
||||
border-top: 2px solid lighten($nanotrasen, 20%);
|
||||
border-bottom: 2px solid lighten($nanotrasen, 15%);
|
||||
}
|
||||
th {
|
||||
background: lighten($nanotrasen, 5%) !important;
|
||||
}
|
||||
div.tooltiptext {
|
||||
border-color: lighten($nanotrasen, 20%);
|
||||
background: darken($nanotrasen, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.drink-ext {
|
||||
p {
|
||||
font-size: 9pt;
|
||||
}
|
||||
.strength {
|
||||
font-size: 9pt;
|
||||
&:before {
|
||||
content: "Strength: ";
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
.description,
|
||||
.notes {
|
||||
margin: 10pt 0;
|
||||
line-height: 1.5em;
|
||||
}
|
||||
td:nth-child(2) {
|
||||
width: 30vw;
|
||||
max-width: 300px;
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
|
||||
.food-base-ext {
|
||||
td:nth-child(1) {
|
||||
width: 30vw;
|
||||
max-width: 300px;
|
||||
text-align: center;
|
||||
}
|
||||
.food-pic {
|
||||
float: none;
|
||||
min-width: 64px;
|
||||
min-height: 64px;
|
||||
display: inline-block;
|
||||
}
|
||||
.food-block {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
td:nth-child(2) {
|
||||
padding: 5pt;
|
||||
font-size: 10pt;
|
||||
}
|
||||
}
|
||||
|
||||
.book-ext {
|
||||
p {
|
||||
font-size: 9pt;
|
||||
}
|
||||
.description,
|
||||
.notes {
|
||||
margin: 10pt 0;
|
||||
line-height: 1.5em;
|
||||
}
|
||||
.unlocks {
|
||||
&:before {
|
||||
content: "Unlocks: ";
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
td:nth-child(2) {
|
||||
width: 30vw;
|
||||
max-width: 300px;
|
||||
text-align: center;
|
||||
p {
|
||||
font-size: 9pt;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.recipe-ext {
|
||||
p {
|
||||
font-size: 9pt;
|
||||
}
|
||||
td:nth-child(2) {
|
||||
width: 30vw;
|
||||
max-width: 300px;
|
||||
}
|
||||
.notes {
|
||||
margin: 10pt 0;
|
||||
line-height: 1.5em;
|
||||
}
|
||||
}
|
||||
}
|
92
style/pages/global.scss
Normal file
|
@ -0,0 +1,92 @@
|
|||
$max-width: 960px;
|
||||
|
||||
.bgus_hidden {
|
||||
display: none !important;
|
||||
}
|
||||
.bgus_nobreak {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.page ul,
|
||||
.page ol {
|
||||
padding-left: 25pt;
|
||||
li {
|
||||
margin-top: 0.6em;
|
||||
padding-right: 8pt;
|
||||
}
|
||||
ul,
|
||||
ol {
|
||||
padding-left: 12pt;
|
||||
}
|
||||
}
|
||||
|
||||
.disease-ext {
|
||||
p {
|
||||
font-size: 8pt;
|
||||
font-weight: 300;
|
||||
line-height: 1.4em;
|
||||
word-spacing: -0.1em;
|
||||
}
|
||||
}
|
||||
|
||||
.thumbinner {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.page {
|
||||
h1.pageheader {
|
||||
margin-top: 0;
|
||||
padding: 15pt 10pt;
|
||||
}
|
||||
|
||||
img {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
p,
|
||||
h2,
|
||||
h3,
|
||||
h4 {
|
||||
padding-left: 10pt;
|
||||
padding-right: 10pt;
|
||||
}
|
||||
a[href] {
|
||||
color: white;
|
||||
}
|
||||
h1,
|
||||
h2,
|
||||
h3 {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
background: $nanotrasen;
|
||||
padding: 10pt;
|
||||
z-index: 999;
|
||||
max-width: $max-width;
|
||||
&:before {
|
||||
display: block;
|
||||
content: " ";
|
||||
left: -100%;
|
||||
right: calc((960px - 100vw) / 2 + 10px);
|
||||
top: 0;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
z-index: -99;
|
||||
background: $nanotrasen;
|
||||
}
|
||||
}
|
||||
.mw-headline {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
|
||||
.page:not(.special) img {
|
||||
image-rendering: -moz-crisp-edges;
|
||||
image-rendering: pixelated;
|
||||
-ms-interpolation-mode: nearest-neighbor;
|
||||
}
|
||||
|
||||
.wrapper {
|
||||
margin: 0 auto;
|
||||
max-width: $max-width;
|
||||
}
|
108
style/pages/virology.scss
Normal file
|
@ -0,0 +1,108 @@
|
|||
div[data-tab="Infections"] {
|
||||
.disease-ext,
|
||||
.symptoms-ext {
|
||||
width: 100%;
|
||||
th,
|
||||
td:first-child {
|
||||
background-color: #2f4257;
|
||||
}
|
||||
.disease-name {
|
||||
font-size: 12pt;
|
||||
text-align: left;
|
||||
padding: 10pt;
|
||||
padding-bottom: 0;
|
||||
margin-bottom: 10pt;
|
||||
}
|
||||
p {
|
||||
font-size: 8pt;
|
||||
font-weight: 300;
|
||||
line-height: 1.2em;
|
||||
word-spacing: -0.1em;
|
||||
margin: 5pt 0;
|
||||
}
|
||||
|
||||
.bgus_fz_selected {
|
||||
background: $nanotrasen !important;
|
||||
th,
|
||||
td {
|
||||
border-top: 2px solid lighten($nanotrasen, 20%);
|
||||
border-bottom: 2px solid lighten($nanotrasen, 15%);
|
||||
}
|
||||
th {
|
||||
background: lighten($nanotrasen, 5%) !important;
|
||||
}
|
||||
div.tooltiptext {
|
||||
border-color: lighten($nanotrasen, 20%);
|
||||
background: darken($nanotrasen, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.disease-ext {
|
||||
.vector {
|
||||
font-size: 9pt;
|
||||
&:before {
|
||||
content: "Vector: ";
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
.source {
|
||||
font-size: 9pt;
|
||||
&:before {
|
||||
content: "Source: ";
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
.spread {
|
||||
font-size: 9pt;
|
||||
&:before {
|
||||
content: "Spread: ";
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
.description {
|
||||
margin: 10pt 0;
|
||||
line-height: 1.5em;
|
||||
}
|
||||
td:nth-child(2) {
|
||||
width: 30vw;
|
||||
max-width: 300px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.symptoms-ext {
|
||||
.level {
|
||||
font-size: 9pt;
|
||||
font-weight: bold;
|
||||
&:before {
|
||||
content: "Level ";
|
||||
}
|
||||
}
|
||||
.description {
|
||||
margin: 10pt 0;
|
||||
line-height: 1.5em;
|
||||
}
|
||||
.stats {
|
||||
width: 100%;
|
||||
border: 2px solid $nanotrasen;
|
||||
th {
|
||||
text-align: right;
|
||||
padding: 3px 6px;
|
||||
}
|
||||
td {
|
||||
padding: 3px 6px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
.thresholds {
|
||||
white-space: nowrap;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
span {
|
||||
cursor: help;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
82
style/pages/welcome.scss
Normal file
|
@ -0,0 +1,82 @@
|
|||
#Welcome {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
&.center {
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
&:not(.center) {
|
||||
header {
|
||||
margin-top: 20px;
|
||||
}
|
||||
}
|
||||
font-size: 12pt;
|
||||
line-height: 1.4em;
|
||||
header {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 20pt;
|
||||
.icon {
|
||||
max-width: 25vw;
|
||||
width: 200px;
|
||||
margin-right: 20px;
|
||||
}
|
||||
.type {
|
||||
max-width: 50vw;
|
||||
width: 400px;
|
||||
}
|
||||
}
|
||||
|
||||
.hidden {
|
||||
width: 100%;
|
||||
opacity: 0;
|
||||
display: none;
|
||||
transition: all 200ms;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2 {
|
||||
margin-top: 2em;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 15pt;
|
||||
}
|
||||
|
||||
h3.nobg {
|
||||
background: transparent;
|
||||
margin-bottom: 0;
|
||||
padding-bottom: 0;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
&:before {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
code {
|
||||
display: inline-block;
|
||||
background-color: #222;
|
||||
border-radius: 3px;
|
||||
padding: 2px 5px;
|
||||
}
|
||||
|
||||
.images {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
img {
|
||||
margin: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.action_buttons {
|
||||
text-align: center;
|
||||
|
||||
button {
|
||||
font-size: 12pt;
|
||||
padding: 10pt 12pt;
|
||||
}
|
||||
}
|
||||
}
|
60
style/search.scss
Normal file
|
@ -0,0 +1,60 @@
|
|||
#bgus_fz_searchbox {
|
||||
position: fixed;
|
||||
top: 80px;
|
||||
left: 20%;
|
||||
right: 20%;
|
||||
background: rgba(10, 10, 10, 0.8);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
z-index: 999;
|
||||
color: #fff;
|
||||
border-radius: 2px;
|
||||
|
||||
input {
|
||||
font-size: 10pt;
|
||||
padding: 5pt 8pt;
|
||||
border: 1px solid #555;
|
||||
margin: 5px;
|
||||
margin-bottom: 0;
|
||||
background-color: #111;
|
||||
color: #fff;
|
||||
outline: none;
|
||||
&:focus {
|
||||
border-color: #aaa;
|
||||
}
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style: none;
|
||||
margin: 5px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
li {
|
||||
margin: 0;
|
||||
padding: 5px;
|
||||
cursor: pointer;
|
||||
|
||||
.source {
|
||||
color: #ccc;
|
||||
font-size: 8pt;
|
||||
display: block;
|
||||
line-height: 1.4em;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: rgba(100, 100, 100, 0.5);
|
||||
}
|
||||
|
||||
&.selected {
|
||||
border-left: 3px solid white;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 600px) {
|
||||
#bgus_fz_searchbox {
|
||||
left: 30%;
|
||||
right: 30%;
|
||||
}
|
||||
}
|
241
style/ui.scss
Normal file
|
@ -0,0 +1,241 @@
|
|||
html,
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.bgimage {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 0;
|
||||
img {
|
||||
opacity: 0.4;
|
||||
width: 80vmin;
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
background: linear-gradient(
|
||||
to bottom,
|
||||
darken($nanotrasen, 20%),
|
||||
darken($nanotrasen, 10%)
|
||||
);
|
||||
background-size: 100% 100%;
|
||||
background-attachment: fixed;
|
||||
color: #fff;
|
||||
font-family: "Iosevka Aile Web", sans-serif;
|
||||
font-size: 9pt;
|
||||
line-height: 1.6em;
|
||||
}
|
||||
|
||||
#app {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
&.waiting {
|
||||
#tab-list,
|
||||
#section-list {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
::-webkit-scrollbar {
|
||||
width: 14pt;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track {
|
||||
background: linear-gradient(
|
||||
to bottom,
|
||||
darken($nanotrasen, 0%),
|
||||
darken($nanotrasen, 10%),
|
||||
darken($nanotrasen, 0%)
|
||||
);
|
||||
border: 1px solid lighten($nanotrasen, 10%);
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
border-radius: 2px;
|
||||
background: linear-gradient(
|
||||
to bottom,
|
||||
lighten($nanotrasen, 20%),
|
||||
lighten($nanotrasen, 30%),
|
||||
lighten($nanotrasen, 20%)
|
||||
);
|
||||
border: 1px solid lighten($nanotrasen, 10%);
|
||||
}
|
||||
|
||||
.speen {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 12pt;
|
||||
img {
|
||||
width: 60vmin;
|
||||
max-height: 100%;
|
||||
opacity: 0.9;
|
||||
padding-bottom: 1em;
|
||||
}
|
||||
}
|
||||
|
||||
#tabs {
|
||||
flex: 1;
|
||||
z-index: 1;
|
||||
display: grid;
|
||||
overflow: hidden;
|
||||
.page {
|
||||
//visibility: hidden;
|
||||
will-change: display;
|
||||
&:not(.active) {
|
||||
display: none;
|
||||
}
|
||||
overflow: auto;
|
||||
grid-row: 1;
|
||||
grid-column: 1;
|
||||
&.active {
|
||||
//visibility: visible;
|
||||
&.waiting {
|
||||
user-select: none;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$section-active: darken($nanotrasen, 5%);
|
||||
$tab-active: lighten($nanotrasen, 10%);
|
||||
|
||||
#section-list {
|
||||
z-index: 2;
|
||||
border-bottom: 2px solid $section-active;
|
||||
display: flex;
|
||||
.section {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
user-select: none;
|
||||
font-size: 9pt;
|
||||
padding: 3pt 7pt;
|
||||
text-transform: uppercase;
|
||||
color: lighten($nanotrasen, 60%);
|
||||
flex: 1;
|
||||
&.active {
|
||||
background-color: $section-active;
|
||||
color: white;
|
||||
}
|
||||
&:not(.active) {
|
||||
cursor: pointer;
|
||||
&:hover {
|
||||
background-color: darken($section-active, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#tab-list {
|
||||
z-index: 2;
|
||||
display: flex;
|
||||
background-color: $section-active;
|
||||
border-bottom: 4px solid $tab-active;
|
||||
|
||||
.tab {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
user-select: none;
|
||||
font-size: 7pt;
|
||||
padding: 2px 4px;
|
||||
padding-bottom: 0;
|
||||
text-transform: uppercase;
|
||||
flex: 1;
|
||||
max-width: 100px;
|
||||
|
||||
img {
|
||||
height: 80%;
|
||||
max-height: 24px;
|
||||
margin: 0;
|
||||
}
|
||||
&.active {
|
||||
background-color: $tab-active;
|
||||
}
|
||||
&:not(.active) {
|
||||
cursor: pointer;
|
||||
&:hover {
|
||||
background-color: darken($tab-active, 8%);
|
||||
}
|
||||
}
|
||||
|
||||
&.hidden {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
noscript {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: transparent;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.loading-icons {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
user-select: none;
|
||||
font-size: 9pt;
|
||||
padding: 3pt 7pt;
|
||||
text-transform: uppercase;
|
||||
flex-wrap: wrap;
|
||||
div {
|
||||
border: 1px solid red;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
img {
|
||||
max-width: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
.pretty-button {
|
||||
font-family: "Iosevka Aile Web", sans-serif;
|
||||
background-color: darken($nanotrasen, 10%);
|
||||
border: 1px solid lighten($nanotrasen, 30%);
|
||||
color: white;
|
||||
padding: 6pt 10pt;
|
||||
border-radius: 3px;
|
||||
cursor: pointer;
|
||||
transition: all 100ms;
|
||||
&:hover {
|
||||
background-color: $nanotrasen;
|
||||
border: 1px solid lighten($nanotrasen, 50%);
|
||||
}
|
||||
margin: 10px;
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
$nanotrasen: #384e68;
|
|
@ -2,6 +2,7 @@
|
|||
"compilerOptions": {
|
||||
"target": "ES2020",
|
||||
"baseUrl": ".",
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"paths": {
|
||||
"~*": ["./src/*"]
|
||||
}
|
||||
|
|
|
@ -3230,6 +3230,11 @@ icss-replace-symbols@1.1.0, icss-replace-symbols@^1.1.0:
|
|||
resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
|
||||
integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=
|
||||
|
||||
idb-keyval@^3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-3.2.0.tgz#cbbf354deb5684b6cdc84376294fc05932845bd6"
|
||||
integrity sha512-slx8Q6oywCCSfKgPgL0sEsXtPVnSbTLWpyiDcu6msHOyKOLari1TD1qocXVCft80umnkk3/Qqh3lwoFt8T/BPQ==
|
||||
|
||||
ieee754@^1.1.4:
|
||||
version "1.1.13"
|
||||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
|
||||
|
|