This commit is contained in:
2026-06-12 15:40:12 -04:00
commit 521653e5de
53 changed files with 8635 additions and 0 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 241 KiB

+337
View File
@@ -0,0 +1,337 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="3001"
height="3001"
viewBox="0 0 3001 3001"
version="1.1"
id="svg52"
sodipodi:docname="greenswitch.svg"
inkscape:version="1.4.2 (ebf0e940, 2025-05-08)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview52"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="false"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showborder="false"
borderlayer="false"
inkscape:antialias-rendering="true"
inkscape:zoom="0.14315544"
inkscape:cx="1896.5399"
inkscape:cy="1397.0828"
inkscape:window-width="1440"
inkscape:window-height="779"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="1"
inkscape:current-layer="svg52" />
<defs
id="defs49">
<clipPath
id="clip-0">
<path
clip-rule="nonzero"
d="M 0.5 0.5 L 3000.5 0.5 L 3000.5 3000.5 L 0.5 3000.5 Z M 0.5 0.5 "
id="path1" />
</clipPath>
<radialGradient
id="radial-pattern-0"
gradientUnits="userSpaceOnUse"
cx="0"
cy="0"
fx="0"
fy="0"
r="1500"
gradientTransform="matrix(1, 0, 0, 1, 1500.5, 1500.5)">
<stop
offset="0"
stop-color="rgb(99.905396%, 99.90387%, 99.90387%)"
stop-opacity="1"
id="stop1" />
<stop
offset="0.015625"
stop-color="rgb(99.64447%, 99.638367%, 99.639893%)"
stop-opacity="1"
id="stop2" />
<stop
offset="0.0429688"
stop-color="rgb(99.311829%, 99.299622%, 99.302673%)"
stop-opacity="1"
id="stop3" />
<stop
offset="0.0703125"
stop-color="rgb(98.979187%, 98.960876%, 98.965454%)"
stop-opacity="1"
id="stop4" />
<stop
offset="0.0976562"
stop-color="rgb(98.64502%, 98.620605%, 98.626709%)"
stop-opacity="1"
id="stop5" />
<stop
offset="0.125"
stop-color="rgb(98.312378%, 98.28186%, 98.28949%)"
stop-opacity="1"
id="stop6" />
<stop
offset="0.152344"
stop-color="rgb(98.002625%, 97.966003%, 97.975159%)"
stop-opacity="1"
id="stop7" />
<stop
offset="0.175781"
stop-color="rgb(97.717285%, 97.676086%, 97.686768%)"
stop-opacity="1"
id="stop8" />
<stop
offset="0.199219"
stop-color="rgb(97.43042%, 97.384644%, 97.395325%)"
stop-opacity="1"
id="stop9" />
<stop
offset="0.222656"
stop-color="rgb(97.146606%, 97.094727%, 97.106934%)"
stop-opacity="1"
id="stop10" />
<stop
offset="0.246094"
stop-color="rgb(96.862793%, 96.80481%, 96.820068%)"
stop-opacity="1"
id="stop11" />
<stop
offset="0.269531"
stop-color="rgb(96.600342%, 96.537781%, 96.554565%)"
stop-opacity="1"
id="stop12" />
<stop
offset="0.289062"
stop-color="rgb(96.362305%, 96.295166%, 96.311951%)"
stop-opacity="1"
id="stop13" />
<stop
offset="0.308594"
stop-color="rgb(96.122742%, 96.052551%, 96.069336%)"
stop-opacity="1"
id="stop14" />
<stop
offset="0.328125"
stop-color="rgb(95.88623%, 95.811462%, 95.831299%)"
stop-opacity="1"
id="stop15" />
<stop
offset="0.347656"
stop-color="rgb(95.648193%, 95.568848%, 95.588684%)"
stop-opacity="1"
id="stop16" />
<stop
offset="0.367188"
stop-color="rgb(95.40863%, 95.326233%, 95.346069%)"
stop-opacity="1"
id="stop17" />
<stop
offset="0.386719"
stop-color="rgb(95.196533%, 95.109558%, 95.13092%)"
stop-opacity="1"
id="stop18" />
<stop
offset="0.402344"
stop-color="rgb(95.005798%, 94.915771%, 94.93866%)"
stop-opacity="1"
id="stop19" />
<stop
offset="0.417969"
stop-color="rgb(94.813538%, 94.718933%, 94.743347%)"
stop-opacity="1"
id="stop20" />
<stop
offset="0.433594"
stop-color="rgb(94.624329%, 94.526672%, 94.551086%)"
stop-opacity="1"
id="stop21" />
<stop
offset="0.449219"
stop-color="rgb(94.43512%, 94.334412%, 94.358826%)"
stop-opacity="1"
id="stop22" />
<stop
offset="0.464844"
stop-color="rgb(94.245911%, 94.140625%, 94.166565%)"
stop-opacity="1"
id="stop23" />
<stop
offset="0.480469"
stop-color="rgb(94.05365%, 93.945312%, 93.971252%)"
stop-opacity="1"
id="stop24" />
<stop
offset="0.496094"
stop-color="rgb(93.864441%, 93.753052%, 93.780518%)"
stop-opacity="1"
id="stop25" />
<stop
offset="0.511719"
stop-color="rgb(93.603516%, 93.486023%, 93.515015%)"
stop-opacity="1"
id="stop26" />
<stop
offset="0.539062"
stop-color="rgb(93.269348%, 93.145752%, 93.17627%)"
stop-opacity="1"
id="stop27" />
<stop
offset="0.566406"
stop-color="rgb(92.961121%, 92.832947%, 92.86499%)"
stop-opacity="1"
id="stop28" />
<stop
offset="0.589844"
stop-color="rgb(92.674255%, 92.539978%, 92.573547%)"
stop-opacity="1"
id="stop29" />
<stop
offset="0.613281"
stop-color="rgb(92.388916%, 92.250061%, 92.285156%)"
stop-opacity="1"
id="stop30" />
<stop
offset="0.636719"
stop-color="rgb(92.127991%, 91.984558%, 92.019653%)"
stop-opacity="1"
id="stop31" />
<stop
offset="0.65625"
stop-color="rgb(91.888428%, 91.741943%, 91.778564%)"
stop-opacity="1"
id="stop32" />
<stop
offset="0.675781"
stop-color="rgb(91.651917%, 91.500854%, 91.537476%)"
stop-opacity="1"
id="stop33" />
<stop
offset="0.695312"
stop-color="rgb(91.436768%, 91.281128%, 91.319275%)"
stop-opacity="1"
id="stop34" />
<stop
offset="0.710938"
stop-color="rgb(91.246033%, 91.087341%, 91.127014%)"
stop-opacity="1"
id="stop35" />
<stop
offset="0.726562"
stop-color="rgb(91.056824%, 90.895081%, 90.934753%)"
stop-opacity="1"
id="stop36" />
<stop
offset="0.742188"
stop-color="rgb(90.867615%, 90.701294%, 90.742493%)"
stop-opacity="1"
id="stop37" />
<stop
offset="0.757812"
stop-color="rgb(90.603638%, 90.432739%, 90.475464%)"
stop-opacity="1"
id="stop38" />
<stop
offset="0.785156"
stop-color="rgb(90.296936%, 90.119934%, 90.164185%)"
stop-opacity="1"
id="stop39" />
<stop
offset="0.808594"
stop-color="rgb(90.008545%, 89.826965%, 89.872742%)"
stop-opacity="1"
id="stop40" />
<stop
offset="0.832031"
stop-color="rgb(89.749146%, 89.561462%, 89.608765%)"
stop-opacity="1"
id="stop41" />
<stop
offset="0.851562"
stop-color="rgb(89.535522%, 89.344788%, 89.39209%)"
stop-opacity="1"
id="stop42" />
<stop
offset="0.867188"
stop-color="rgb(89.343262%, 89.149475%, 89.196777%)"
stop-opacity="1"
id="stop43" />
<stop
offset="0.882812"
stop-color="rgb(89.083862%, 88.885498%, 88.934326%)"
stop-opacity="1"
id="stop44" />
<stop
offset="0.910156"
stop-color="rgb(88.798523%, 88.594055%, 88.644409%)"
stop-opacity="1"
id="stop45" />
<stop
offset="0.929688"
stop-color="rgb(88.581848%, 88.374329%, 88.426208%)"
stop-opacity="1"
id="stop46" />
<stop
offset="0.945312"
stop-color="rgb(88.320923%, 88.108826%, 88.162231%)"
stop-opacity="1"
id="stop47" />
<stop
offset="0.972656"
stop-color="rgb(87.986755%, 87.768555%, 87.823486%)"
stop-opacity="1"
id="stop48" />
<stop
offset="1"
stop-color="rgb(87.820435%, 87.599182%, 87.654114%)"
stop-opacity="1"
id="stop49" />
</radialGradient>
</defs>
<g
clip-path="url(#clip-0)"
id="g49"
style="fill:#000000;fill-opacity:0">
<path
fill-rule="nonzero"
fill="url(#radial-pattern-0)"
d="M 0.5 0.5 L 0.5 3000.5 L 3000.5 3000.5 L 3000.5 0.5 Z M 0.5 0.5 "
id="path49"
style="fill:#000000;fill-opacity:0" />
</g>
<path
fill="none"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="#231f20"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 3000.5,0.5 H 0.5 v 3000 h 3000 z m 0,0"
id="path50"
inkscape:label="path50"
style="display:inline;opacity:1" />
<path
fill-rule="nonzero"
fill="rgb(12.980652%, 11.320496%, 11.306763%)"
fill-opacity="1"
d="M 1505.5 536.078125 C 1471.878906 536.078125 1444.519531 563.441406 1444.519531 597.058594 C 1444.519531 630.679688 1471.878906 658.039062 1505.5 658.039062 C 1539.121094 658.039062 1566.480469 630.679688 1566.480469 597.058594 C 1566.480469 563.441406 1539.121094 536.078125 1505.5 536.078125 Z M 1505.5 719.011719 C 1438.25 719.011719 1383.550781 664.308594 1383.550781 597.058594 C 1383.550781 529.808594 1438.25 475.109375 1505.5 475.109375 C 1572.75 475.109375 1627.449219 529.808594 1627.449219 597.058594 C 1627.449219 664.308594 1572.75 719.011719 1505.5 719.011719 Z M 1212.820312 920.230469 C 1196.011719 920.230469 1182.328125 933.910156 1182.328125 950.71875 L 1182.328125 2048.28125 C 1182.328125 2065.089844 1196.011719 2078.769531 1212.820312 2078.769531 L 1798.179688 2078.769531 C 1814.988281 2078.769531 1828.671875 2065.089844 1828.671875 2048.28125 L 1828.671875 950.71875 C 1828.671875 933.910156 1814.988281 920.230469 1798.179688 920.230469 Z M 1798.179688 2139.738281 L 1212.820312 2139.738281 C 1162.378906 2139.738281 1121.351562 2098.71875 1121.351562 2048.28125 L 1121.351562 950.71875 C 1121.351562 900.28125 1162.378906 859.261719 1212.820312 859.261719 L 1798.179688 859.261719 C 1848.621094 859.261719 1889.648438 900.28125 1889.648438 950.71875 L 1889.648438 2048.28125 C 1889.648438 2098.71875 1848.621094 2139.738281 1798.179688 2139.738281 Z M 1505.5 2340.960938 C 1471.878906 2340.960938 1444.519531 2368.320312 1444.519531 2401.941406 C 1444.519531 2435.558594 1471.878906 2462.921875 1505.5 2462.921875 C 1539.121094 2462.921875 1566.480469 2435.558594 1566.480469 2401.941406 C 1566.480469 2368.320312 1539.121094 2340.960938 1505.5 2340.960938 Z M 1505.5 2523.890625 C 1438.25 2523.890625 1383.550781 2469.179688 1383.550781 2401.941406 C 1383.550781 2334.691406 1438.25 2279.988281 1505.5 2279.988281 C 1572.75 2279.988281 1627.449219 2334.691406 1627.449219 2401.941406 C 1627.449219 2469.179688 1572.75 2523.890625 1505.5 2523.890625 Z M 2243.300781 2749.5 L 767.695312 2749.5 C 683.640625 2749.5 615.257812 2681.121094 615.257812 2597.058594 L 615.257812 1444.621094 C 615.257812 1427.78125 628.902344 1414.128906 645.742188 1414.128906 C 662.582031 1414.128906 676.230469 1427.78125 676.230469 1444.621094 L 676.230469 2597.058594 C 676.230469 2647.5 717.257812 2688.519531 767.695312 2688.519531 L 2243.300781 2688.519531 C 2293.738281 2688.519531 2334.769531 2647.5 2334.769531 2597.058594 L 2334.769531 401.941406 C 2334.769531 351.5 2293.738281 310.480469 2243.300781 310.480469 L 767.695312 310.480469 C 717.257812 310.480469 676.230469 351.5 676.230469 401.941406 L 676.230469 1261.699219 C 676.230469 1278.53125 662.582031 1292.179688 645.742188 1292.179688 C 628.902344 1292.179688 615.257812 1278.53125 615.257812 1261.699219 L 615.257812 401.941406 C 615.257812 317.878906 683.640625 249.5 767.695312 249.5 L 2243.300781 249.5 C 2327.359375 249.5 2395.738281 317.878906 2395.738281 401.941406 L 2395.738281 2597.058594 C 2395.738281 2681.121094 2327.359375 2749.5 2243.300781 2749.5 "
id="path51"
style="fill:#32cd32;fill-opacity:1" />
<path
fill-rule="nonzero"
fill="rgb(12.980652%, 11.320496%, 11.306763%)"
fill-opacity="1"
d="m 1774.6846,1488.5956 h -524.3984 c -16.832,0 -30.4805,13.6523 -30.4805,30.4922 v 518.2891 h 585.3594 v -518.2891 c 0,-16.8399 -13.6484,-30.4922 -30.4805,-30.4922 z m -30.4883,60.9805 v 426.8203 h -463.4218 v -426.8203 h 463.4218"
id="path52"
style="fill:#32cd32;fill-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

+338
View File
@@ -0,0 +1,338 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="3001"
height="3001"
viewBox="0 0 3001 3001"
version="1.1"
id="svg52"
sodipodi:docname="purpleswitch.svg"
inkscape:version="1.4.2 (ebf0e940, 2025-05-08)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview52"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="false"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showborder="false"
borderlayer="false"
inkscape:antialias-rendering="true"
inkscape:zoom="0.14315544"
inkscape:cx="1896.5399"
inkscape:cy="1397.0828"
inkscape:window-width="1440"
inkscape:window-height="779"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="1"
inkscape:current-layer="svg52" />
<defs
id="defs49">
<clipPath
id="clip-0">
<path
clip-rule="nonzero"
d="M 0.5 0.5 L 3000.5 0.5 L 3000.5 3000.5 L 0.5 3000.5 Z M 0.5 0.5 "
id="path1" />
</clipPath>
<radialGradient
id="radial-pattern-0"
gradientUnits="userSpaceOnUse"
cx="0"
cy="0"
fx="0"
fy="0"
r="1500"
gradientTransform="matrix(1, 0, 0, 1, 1500.5, 1500.5)">
<stop
offset="0"
stop-color="rgb(99.905396%, 99.90387%, 99.90387%)"
stop-opacity="1"
id="stop1" />
<stop
offset="0.015625"
stop-color="rgb(99.64447%, 99.638367%, 99.639893%)"
stop-opacity="1"
id="stop2" />
<stop
offset="0.0429688"
stop-color="rgb(99.311829%, 99.299622%, 99.302673%)"
stop-opacity="1"
id="stop3" />
<stop
offset="0.0703125"
stop-color="rgb(98.979187%, 98.960876%, 98.965454%)"
stop-opacity="1"
id="stop4" />
<stop
offset="0.0976562"
stop-color="rgb(98.64502%, 98.620605%, 98.626709%)"
stop-opacity="1"
id="stop5" />
<stop
offset="0.125"
stop-color="rgb(98.312378%, 98.28186%, 98.28949%)"
stop-opacity="1"
id="stop6" />
<stop
offset="0.152344"
stop-color="rgb(98.002625%, 97.966003%, 97.975159%)"
stop-opacity="1"
id="stop7" />
<stop
offset="0.175781"
stop-color="rgb(97.717285%, 97.676086%, 97.686768%)"
stop-opacity="1"
id="stop8" />
<stop
offset="0.199219"
stop-color="rgb(97.43042%, 97.384644%, 97.395325%)"
stop-opacity="1"
id="stop9" />
<stop
offset="0.222656"
stop-color="rgb(97.146606%, 97.094727%, 97.106934%)"
stop-opacity="1"
id="stop10" />
<stop
offset="0.246094"
stop-color="rgb(96.862793%, 96.80481%, 96.820068%)"
stop-opacity="1"
id="stop11" />
<stop
offset="0.269531"
stop-color="rgb(96.600342%, 96.537781%, 96.554565%)"
stop-opacity="1"
id="stop12" />
<stop
offset="0.289062"
stop-color="rgb(96.362305%, 96.295166%, 96.311951%)"
stop-opacity="1"
id="stop13" />
<stop
offset="0.308594"
stop-color="rgb(96.122742%, 96.052551%, 96.069336%)"
stop-opacity="1"
id="stop14" />
<stop
offset="0.328125"
stop-color="rgb(95.88623%, 95.811462%, 95.831299%)"
stop-opacity="1"
id="stop15" />
<stop
offset="0.347656"
stop-color="rgb(95.648193%, 95.568848%, 95.588684%)"
stop-opacity="1"
id="stop16" />
<stop
offset="0.367188"
stop-color="rgb(95.40863%, 95.326233%, 95.346069%)"
stop-opacity="1"
id="stop17" />
<stop
offset="0.386719"
stop-color="rgb(95.196533%, 95.109558%, 95.13092%)"
stop-opacity="1"
id="stop18" />
<stop
offset="0.402344"
stop-color="rgb(95.005798%, 94.915771%, 94.93866%)"
stop-opacity="1"
id="stop19" />
<stop
offset="0.417969"
stop-color="rgb(94.813538%, 94.718933%, 94.743347%)"
stop-opacity="1"
id="stop20" />
<stop
offset="0.433594"
stop-color="rgb(94.624329%, 94.526672%, 94.551086%)"
stop-opacity="1"
id="stop21" />
<stop
offset="0.449219"
stop-color="rgb(94.43512%, 94.334412%, 94.358826%)"
stop-opacity="1"
id="stop22" />
<stop
offset="0.464844"
stop-color="rgb(94.245911%, 94.140625%, 94.166565%)"
stop-opacity="1"
id="stop23" />
<stop
offset="0.480469"
stop-color="rgb(94.05365%, 93.945312%, 93.971252%)"
stop-opacity="1"
id="stop24" />
<stop
offset="0.496094"
stop-color="rgb(93.864441%, 93.753052%, 93.780518%)"
stop-opacity="1"
id="stop25" />
<stop
offset="0.511719"
stop-color="rgb(93.603516%, 93.486023%, 93.515015%)"
stop-opacity="1"
id="stop26" />
<stop
offset="0.539062"
stop-color="rgb(93.269348%, 93.145752%, 93.17627%)"
stop-opacity="1"
id="stop27" />
<stop
offset="0.566406"
stop-color="rgb(92.961121%, 92.832947%, 92.86499%)"
stop-opacity="1"
id="stop28" />
<stop
offset="0.589844"
stop-color="rgb(92.674255%, 92.539978%, 92.573547%)"
stop-opacity="1"
id="stop29" />
<stop
offset="0.613281"
stop-color="rgb(92.388916%, 92.250061%, 92.285156%)"
stop-opacity="1"
id="stop30" />
<stop
offset="0.636719"
stop-color="rgb(92.127991%, 91.984558%, 92.019653%)"
stop-opacity="1"
id="stop31" />
<stop
offset="0.65625"
stop-color="rgb(91.888428%, 91.741943%, 91.778564%)"
stop-opacity="1"
id="stop32" />
<stop
offset="0.675781"
stop-color="rgb(91.651917%, 91.500854%, 91.537476%)"
stop-opacity="1"
id="stop33" />
<stop
offset="0.695312"
stop-color="rgb(91.436768%, 91.281128%, 91.319275%)"
stop-opacity="1"
id="stop34" />
<stop
offset="0.710938"
stop-color="rgb(91.246033%, 91.087341%, 91.127014%)"
stop-opacity="1"
id="stop35" />
<stop
offset="0.726562"
stop-color="rgb(91.056824%, 90.895081%, 90.934753%)"
stop-opacity="1"
id="stop36" />
<stop
offset="0.742188"
stop-color="rgb(90.867615%, 90.701294%, 90.742493%)"
stop-opacity="1"
id="stop37" />
<stop
offset="0.757812"
stop-color="rgb(90.603638%, 90.432739%, 90.475464%)"
stop-opacity="1"
id="stop38" />
<stop
offset="0.785156"
stop-color="rgb(90.296936%, 90.119934%, 90.164185%)"
stop-opacity="1"
id="stop39" />
<stop
offset="0.808594"
stop-color="rgb(90.008545%, 89.826965%, 89.872742%)"
stop-opacity="1"
id="stop40" />
<stop
offset="0.832031"
stop-color="rgb(89.749146%, 89.561462%, 89.608765%)"
stop-opacity="1"
id="stop41" />
<stop
offset="0.851562"
stop-color="rgb(89.535522%, 89.344788%, 89.39209%)"
stop-opacity="1"
id="stop42" />
<stop
offset="0.867188"
stop-color="rgb(89.343262%, 89.149475%, 89.196777%)"
stop-opacity="1"
id="stop43" />
<stop
offset="0.882812"
stop-color="rgb(89.083862%, 88.885498%, 88.934326%)"
stop-opacity="1"
id="stop44" />
<stop
offset="0.910156"
stop-color="rgb(88.798523%, 88.594055%, 88.644409%)"
stop-opacity="1"
id="stop45" />
<stop
offset="0.929688"
stop-color="rgb(88.581848%, 88.374329%, 88.426208%)"
stop-opacity="1"
id="stop46" />
<stop
offset="0.945312"
stop-color="rgb(88.320923%, 88.108826%, 88.162231%)"
stop-opacity="1"
id="stop47" />
<stop
offset="0.972656"
stop-color="rgb(87.986755%, 87.768555%, 87.823486%)"
stop-opacity="1"
id="stop48" />
<stop
offset="1"
stop-color="rgb(87.820435%, 87.599182%, 87.654114%)"
stop-opacity="1"
id="stop49" />
</radialGradient>
</defs>
<g
clip-path="url(#clip-0)"
id="g49"
style="fill:#000000;fill-opacity:0">
<path
fill-rule="nonzero"
fill="url(#radial-pattern-0)"
d="M 0.5 0.5 L 0.5 3000.5 L 3000.5 3000.5 L 3000.5 0.5 Z M 0.5 0.5 "
id="path49"
style="fill:#000000;fill-opacity:0" />
</g>
<path
fill="none"
stroke-width="10"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke="#231f20"
stroke-opacity="1"
stroke-miterlimit="10"
d="M 30005,5 H 5 v 30000 h 30000 z m 0,0"
transform="matrix(0.1,0,0,-0.1,0,3001)"
id="path50"
inkscape:label="path50"
style="display:inline;opacity:1" />
<path
fill-rule="nonzero"
fill="rgb(12.980652%, 11.320496%, 11.306763%)"
fill-opacity="1"
d="M 1505.5 536.078125 C 1471.878906 536.078125 1444.519531 563.441406 1444.519531 597.058594 C 1444.519531 630.679688 1471.878906 658.039062 1505.5 658.039062 C 1539.121094 658.039062 1566.480469 630.679688 1566.480469 597.058594 C 1566.480469 563.441406 1539.121094 536.078125 1505.5 536.078125 Z M 1505.5 719.011719 C 1438.25 719.011719 1383.550781 664.308594 1383.550781 597.058594 C 1383.550781 529.808594 1438.25 475.109375 1505.5 475.109375 C 1572.75 475.109375 1627.449219 529.808594 1627.449219 597.058594 C 1627.449219 664.308594 1572.75 719.011719 1505.5 719.011719 Z M 1212.820312 920.230469 C 1196.011719 920.230469 1182.328125 933.910156 1182.328125 950.71875 L 1182.328125 2048.28125 C 1182.328125 2065.089844 1196.011719 2078.769531 1212.820312 2078.769531 L 1798.179688 2078.769531 C 1814.988281 2078.769531 1828.671875 2065.089844 1828.671875 2048.28125 L 1828.671875 950.71875 C 1828.671875 933.910156 1814.988281 920.230469 1798.179688 920.230469 Z M 1798.179688 2139.738281 L 1212.820312 2139.738281 C 1162.378906 2139.738281 1121.351562 2098.71875 1121.351562 2048.28125 L 1121.351562 950.71875 C 1121.351562 900.28125 1162.378906 859.261719 1212.820312 859.261719 L 1798.179688 859.261719 C 1848.621094 859.261719 1889.648438 900.28125 1889.648438 950.71875 L 1889.648438 2048.28125 C 1889.648438 2098.71875 1848.621094 2139.738281 1798.179688 2139.738281 Z M 1505.5 2340.960938 C 1471.878906 2340.960938 1444.519531 2368.320312 1444.519531 2401.941406 C 1444.519531 2435.558594 1471.878906 2462.921875 1505.5 2462.921875 C 1539.121094 2462.921875 1566.480469 2435.558594 1566.480469 2401.941406 C 1566.480469 2368.320312 1539.121094 2340.960938 1505.5 2340.960938 Z M 1505.5 2523.890625 C 1438.25 2523.890625 1383.550781 2469.179688 1383.550781 2401.941406 C 1383.550781 2334.691406 1438.25 2279.988281 1505.5 2279.988281 C 1572.75 2279.988281 1627.449219 2334.691406 1627.449219 2401.941406 C 1627.449219 2469.179688 1572.75 2523.890625 1505.5 2523.890625 Z M 2243.300781 2749.5 L 767.695312 2749.5 C 683.640625 2749.5 615.257812 2681.121094 615.257812 2597.058594 L 615.257812 1444.621094 C 615.257812 1427.78125 628.902344 1414.128906 645.742188 1414.128906 C 662.582031 1414.128906 676.230469 1427.78125 676.230469 1444.621094 L 676.230469 2597.058594 C 676.230469 2647.5 717.257812 2688.519531 767.695312 2688.519531 L 2243.300781 2688.519531 C 2293.738281 2688.519531 2334.769531 2647.5 2334.769531 2597.058594 L 2334.769531 401.941406 C 2334.769531 351.5 2293.738281 310.480469 2243.300781 310.480469 L 767.695312 310.480469 C 717.257812 310.480469 676.230469 351.5 676.230469 401.941406 L 676.230469 1261.699219 C 676.230469 1278.53125 662.582031 1292.179688 645.742188 1292.179688 C 628.902344 1292.179688 615.257812 1278.53125 615.257812 1261.699219 L 615.257812 401.941406 C 615.257812 317.878906 683.640625 249.5 767.695312 249.5 L 2243.300781 249.5 C 2327.359375 249.5 2395.738281 317.878906 2395.738281 401.941406 L 2395.738281 2597.058594 C 2395.738281 2681.121094 2327.359375 2749.5 2243.300781 2749.5 "
id="path51"
style="fill:#967bb6;fill-opacity:1" />
<path
fill-rule="nonzero"
fill="rgb(12.980652%, 11.320496%, 11.306763%)"
fill-opacity="1"
d="M 1767.699219 950.71875 L 1243.300781 950.71875 C 1226.46875 950.71875 1212.820312 964.371094 1212.820312 981.210938 L 1212.820312 1499.5 L 1798.179688 1499.5 L 1798.179688 981.210938 C 1798.179688 964.371094 1784.53125 950.71875 1767.699219 950.71875 Z M 1737.210938 1011.699219 L 1737.210938 1438.519531 L 1273.789062 1438.519531 L 1273.789062 1011.699219 L 1737.210938 1011.699219 "
id="path52"
style="fill:#967bb6;fill-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

+70
View File
@@ -0,0 +1,70 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Limegreenfire</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script src="scripts.js" defer></script>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Tilt Neon">
<link rel="stylesheet" href="styles.css">
<link rel="icon" href="./images/favicon.ico" type="image/x-icon">
</head>
<body>
<div class="dashboard">
<div class="dashboard-header">
<div class="dashboard-title">LimegreenFire<span class="header-purple">Casa</span></div>
<div id="currentDashboard" class="current-dashboard neonText">
Local Network
</div>
</div>
<div class="dashboard-field">
<div class="dashboard-item">
<a id="nginx" href="" class="button qnap">
Nginx
</a>
</div>
<div class="dashboard-item">
<a id="qnas" href="" class="button qnap">
Qnas
</a>
</div>
<div class="dashboard-item">
<a id="dockerRegistry" href="" class="button qnap">
Docker Image Registry
</a>
</div>
<div class="dashboard-item">
<a id="jellyfin" href="" class="button qnap">
Jellyfin
</a>
</div>
<div class="dashboard-item">
<a id="qtorrent" href="" class="button pc">
qTorrent
</a>
</div>
<div class="dashboard-item">
<a id="radarr" href="" class="button pc">
Radarr
</a>
</div>
<div class="dashboard-item">
<a id="sonarr" href="" class="button pc">
Sonarr
</a>
</div>
<div class="dashboard-item">
<a id="lidarr" href="" class="button pc">
Lidarr
</a>
</div>
<div class="dashboard-item">
<a id="gitRegistry" href="" class="button qnap">
Git Registry
</a>
</div>
</div>
</div>
</body>
</html>
+150
View File
@@ -0,0 +1,150 @@
function getAppIP( network, device, app ) {
let deviceIP;
let port;
console.log(network, " - ", device, " - ", app)
if (network == 'tailscale') {
deviceIP = (device == 'qnap') ? '100.97.249.88' : '100.115.109.63';
} else {
deviceIP = (device == 'qnap') ? '192.168.1.81' : '192.168.1.13';
}
switch (app) {
case 'nginx':
port = ":81";
break;
case 'qnas':
port = ":8080";
break;
case 'dockerRegistry':
port = ":5000";
break;
case 'jellyfin':
port = ":8096";
break;
case 'qtorrent':
port = ":8181";
break;
case 'radarr':
port = ":7878";
break;
default:
port = ""
// case sonarr:
// port = ":"
// break;
// case lidarr:
// port = ":"
// break;
// case gitRegistry:
// port = ":"
// break;
};
return "http://" + deviceIP + port;
}
function propigateIps( network ) {
console.log('prop started: ', network)
const ipHasPortRegex = /^http:\/\/(\d{1,3}\.){3}\d{1,3}:\d+$/;
['qnap', 'pc'].forEach(function(deviceClass) {
$("." + deviceClass).each(function() {
let appName = $(this).attr("id");
let ipAddress = getAppIP(network, deviceClass, appName);
if (ipHasPortRegex.test(ipAddress)) {
$(this).attr('href', ipAddress);
} else {
$(this).removeAttr('href');
$(this).removeClass('button');
$(this).addClass('button-disabled');
}
})
})
}
function determineNetwork() {
const apiUrlTailscale = 'http://100.97.249.88:3030/';
try {
fetch(apiUrlTailscale);
console.log('determined: tailscale')
return 'tailscale';
} catch {
console.log('determined: local')
return'local';
}
}
async function fillIpsBasedOnNetwork() {
const apiUrlTailscale = 'http://100.97.249.88:3030/';
let network;
try {
await fetch(apiUrlTailscale);
console.log('determined: tailscale')
network = 'tailscale'
setHeader (network)
propigateIps(network);
} catch {
console.log('determined: local')
network = 'local'
setHeader (network)
propigateIps(network);
}
}
function setHeader( network ) {
const networkName = network.charAt(0).toUpperCase() + network.slice(1) + ' Network';
$("#currentDashboard").text(networkName);
}
$(document).ready(function() {
fillIpsBasedOnNetwork();
});
/* document.addEventListener('DOMContentLoaded', function() {
const changeDashboardButton = document.getElementById('changeDashboardButton');
changeDashboardButton.addEventListener('click', function() {
console.log("click")
$("#currentDashboard")
const currentDashboard = $("#currentDashboard")
let currentDashboardClasses = currentDashboard.attr('class');
let newNetwork = currentDashboardClasses.includes('tailscale') ? 'local' : 'tailscale';
['qnap', 'pc'].forEach(function(deviceClass) {
$("." + deviceClass).each(function() {
let appName = $(this).attr("id");
let ipAddress = getIP(newNetwork, deviceClass, appName);
if (ipRegex.test(ipAddress)) {
$(this).attr('href', ipAddress);
$(this).removeClass('button-disabled');
$(this).addClass('button');
} else {
$(this).removeAttr('href');
$(this).removeClass('button');
$(this).addClass('button-disabled');
}
})
})
currentDashboard.toggleClass('local tailscale');
let networkName = newNetwork.charAt(0).toUpperCase() + newNetwork.slice(1) + ' Network';
currentDashboard.text(networkName)
const logoOn = $('#logoOn');
const logoOff = $('#logoOff');
let logoOnSrc = logoOn.attr('src');
let logoOffSrc = logoOff.attr('src');
logoOn.attr('src', logoOffSrc)
logoOff.attr('src', logoOnSrc)
});
}); */
+309
View File
@@ -0,0 +1,309 @@
body {
background-color: black;
transition: background-color 0.3s ease;
background-image: url("./images/fullyblackfire.svg");
background-size: auto 113%; /* Zooms the image in by 50% relative to the container */
background-position: center 2px; /* Centers the zoomed image */
background-repeat: no-repeat; /* Prevents the image from repeating */
position: relative;
}
@media (min-width: 1140px) {
body {
background-position: center 6px;
height: 100vh;
}
}
/* @media (min-width: 1140px) {
body {
flex-basis: 30%;
}
} */
body, html {
margin: 0;
position: relative;
}
.dashboard {
height: 100%;
display: flex;
flex-direction: column;
justify-content: start;
align-items: center;
padding: 12px 46px;
}
@media (min-width: 1140px) {
.dashboard {
height: 95%;
}
}
/* @media (min-width: 1140px) {
.dashboard {
background-image: none;
}
} */
.dashboard-title {
width: 100%;
text-align: center;
-webkit-text-stroke: 1px black;
}
.dashboard-header {
display: flex;
flex-direction: column;
justify-content: start;
align-items: center;
font-size: 46px;
font-weight: bold;
color: #32CD32;
padding-bottom: 12px;
}
.header-purple {
color: #967bb6;
}
.current-dashboard {
color: black;
font-size: 36px;
font-weight: normal;
/* text-shadow: 4px 4px 10px #32CD32; */
/* text-shadow: 3px 3px 0 #32CD32;
text-shadow: -3px 3px 0 #32CD32;
text-shadow: -3px -3px 0 #32CD32;
text-shadow: 3px -3px 0 #32CD32; */
}
.neonText {
animation: flicker 1.5s infinite alternate;
color: #fff;
font-family: "Tilt Neon"
}
@keyframes flicker {
0%, 18%, 22%, 25%, 53%, 57%, 100% {
text-shadow:
0 0 4px #fff,
0 0 11px #fff,
0 0 19px #fff,
0 0 40px #0fa,
0 0 80px #0fa,
0 0 90px #0fa,
0 0 100px #0fa,
0 0 150px #0fa;
}
20%, 24%, 55% {
text-shadow: none;
}
}
.dashboard-field {
width: 80%;
height: 90%;
/* min-height: 62vh; */
display: flex;
flex-wrap: wrap;
gap: 16px;
justify-content: space-evenly;
align-items: center;
padding: 24px;
border-style: double;
border-width: thick;
border-color: #32CD32;
border-radius: 25px;
}
.dashboard-row {
width: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
}
@media (min-width: 1000px) {
.dashboard-row {
flex-direction: row;
padding: 10px 0px;
}
}
.dashboard-item {
display: flex;
flex: 1 1 90%;
justify-content: center;
align-items: center;
/* width: 90%; */
/* max-width: 364px; */
padding: 5px 0px;
/* padding: 0px 40px; */
}
/* .dashboard-item:only-child {
margin: 0 auto;
} */
@media (min-width: 760px) {
.dashboard-item {
flex-basis: 45%;
}
}
@media (min-width: 1140px) {
.dashboard-item {
flex-basis: 30%;
}
}
/* @media (min-width: 1000px) {
.dashboard-item:only-child {
padding: 60px 0px 10px;
}
} */
.single-item-row {
width: 100%;
display: flex;
flex-direction: row;
justify-content: center;
padding: 60px 0px 10px;
}
.button {
background-color: #32CD32;
color: black;
width: 100%;
padding: 15px 32px;
text-align: center;
font-size: 24px;
text-decoration: none;
border-style: solid;
border-width: medium;
border-color: black;
border-radius: 25px;
}
.button:hover {
background-color: black;
color: #967bb6;
border-color: #967bb6;
}
.button-disabled {
background-color: dimgrey;
color: black;
border-color: black;
width: 100%;
padding: 15px 32px;
text-align: center;
font-size: 24px;
text-decoration: none;
border-style: solid;
border-width: medium;
border-radius: 25px;
}
.switch-button {
position: absolute; /* Positions the button relative to the viewport */
top: 40px;
right: 0;
z-index: 1000; /* Ensures the button appears above other content */
/* Add other styling for your button (e.g., background-color, padding, font-size) */
color: #967bb6;
padding: 10px 15px;
border: none;
border-radius: 5px;
cursor: pointer;
}
@media (min-width: 700px) {
.switch-button {
top: 0;
}
}
.icon-button {
border: none;
background: none;
padding: 0;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
}
#logoOff{
display:none
}
#logoOn{
display:block
}
img {
height: 8vh; /* Set your desired fixed height */
width: auto; /* Allow the width to adjust automatically */
object-fit: contain;
}
.logo-container {
height: 120px; /* Set your desired fixed height */
width: 350px; /* Allow the width to adjust automatically */
object-fit: contain;
}
.logo {
background-image: url("./images/greenfirewithpurple.svg");
height: 120px; /* Set your desired fixed height */
width: auto; /* Allow the width to adjust automatically */
background-size: contain;
background-repeat: no-repeat;
background-position: center;
}
.logo:hover {
background-image: url("./images/fullyblackfire.svg");
}
.image-container {
height: 100vh;
width: 100vw;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
}
.image-container img {
height: 100%; /* Image fills 100% of the container's height */
width: 100%; /* Allow width to adjust proportionally */
object-fit: contain; /* Crop and zoom to fill the container while maintaining aspect ratio */
/* display: block; Remove extra space below the image */
}
@media (min-width: 1000px) {
.image-container img {
width: auto;
}
}
.toggle-switch {
position: absolute; /* Position relative to the parent */
top: 0; /* Align to the top edge */
right: 0; /* Align to the right edge */
/* Other styles for your toggle switch */
}
.green-flame {
background-color: #000000; /* Light background color */
}
.black-flame{
background-color: #32CD32; /* Dark background color */
}