diff --git a/README.md b/README.md
index 96cafd5..4ac4d44 100644
--- a/README.md
+++ b/README.md
@@ -47,7 +47,6 @@ Store (v1.0):
## 📝 Authors
- [**Privt**](https://github.com/privt00)
-- [**Catspin**]
---
@@ -56,6 +55,6 @@ Store (v1.0):
|Date|Version|Short Description|Long Description|
|---|---|---|---|
-|2023/12/24|v1.4|4 reales||
+|2023/12/24|v1.0|First Release||
© 2023-2024 TFC-Plex by privt00
diff --git a/api/claim.js b/addons/claim.js
similarity index 100%
rename from api/claim.js
rename to addons/claim.js
diff --git a/api/pages.js b/api/pages.js
index 0889ac6..5163cbd 100644
--- a/api/pages.js
+++ b/api/pages.js
@@ -3,7 +3,7 @@ const ejs = require("ejs");
const express = require("express");
const settings = require("../settings.json");
const fetch = require('node-fetch');
-const arciotext = require('../stuff/arciotext')
+const arciotext = require('../sec/arciotext')
module.exports.load = async function(app, db) {
app.all("/", async (req, res) => {
diff --git a/api/servers.js b/api/servers.js
index 3633b24..54c44aa 100644
--- a/api/servers.js
+++ b/api/servers.js
@@ -6,6 +6,7 @@ const fs = require("fs");
const getPteroUser = require('../misc/getPteroUser')
const Queue = require('../managers/Queue')
const log = require('../misc/log')
+const axios = require('axios');
if (settings.pterodactyl) if (settings.pterodactyl.domain) {
if (settings.pterodactyl.domain.slice(-1) == "/") settings.pterodactyl.domain = settings.pterodactyl.domain.slice(0, -1);
@@ -358,6 +359,217 @@ module.exports.load = async function (app, db) {
}
});
+
+
+
+
+
+
+ // control Feature
+
+
+
+ const PTERO_API_URL = settings.pterodactyl.domain;
+
+ app.get('/control', async (req, res) => {
+ const serverId = req.query.id;
+ const action = req.query.action;
+
+ if (!serverId || !action) {
+ return res.status(400).send('Ungültige Anfrage. Stelle sicher, dass du "id" und "action" in der URL angibst.');
+ }
+
+ try {
+ // Hier musst du deine Pterodactyl API-Zugangsdaten angeben
+ const apiKey = settings.pterodactyl.account_key; // Ersetze dies durch deinen Pterodactyl API-Schlüssel
+ const apiUrl = `${PTERO_API_URL}/api/client/servers/${serverId}/power`;
+
+ // Verwende die entsprechende Aktion für die Pterodactyl API
+ const apiAction = action === 'start' ? 'start' : 'stop';
+
+ const response = await axios.post(apiUrl, {
+ signal: apiAction,
+ }, {
+ headers: {
+ Authorization: `Bearer ${apiKey}`,
+ 'Content-Type': 'application/json',
+ Accept: 'application/json',
+ },
+ });
+
+ res.send(`Server ${serverId} ${apiAction === 'start' ? 'gestartet' : 'gestoppt'}.`);
+ } catch (error) {
+ console.error(error);
+ res.status(500).send('Interner Serverfehler.');
+ }
+ });
+
+
+
+
+
+
+
+
+
+ const { pterosocket } = require('pterosocket');
+ const express = require('express');
+ app.use(express.json());
+
+ app.get('/wss', (req, res) => {
+ const server_idnum = req.query.id; // Extrahiere die Server-ID aus der Query-Parameter
+
+ if (!server_idnum) {
+ return res.status(400).send('Server-ID fehlt in der Anfrage.');
+ }
+
+ const origintzui = settings.pterodactyl.domain;
+ const apppkey = settings.pterodactyl.account_key;
+
+ const socket = new pterosocket(origintzui, apppkey, server_idnum);
+
+ socket.on("start", () => {
+
+ });
+
+ let responseSent = false;
+
+ const consoleOutputHandler = (output) => {
+ if (!responseSent) {
+ res.send(output);
+ responseSent = true;
+ }
+ };
+
+ socket.once('console_output', consoleOutputHandler);
+
+ setTimeout(() => {
+ if (!responseSent) {
+ res.send('Keine Konsolenausgabe erhalten.');
+ responseSent = true;
+ }
+ }, 5000);
+ });
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ app.get("/api/info", async (req, res) => {
+ // Check if the user is logged in
+ if (!req.session.pterodactyl) {
+ return res.json({ error: true, message: "You must be logged in." });
+ }
+
+ try {
+ // Fetch information about nodes
+ const nodesResponse = await fetch(`${settings.pterodactyl.domain}/api/application/nodes`, {
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Authorization': `Bearer ${settings.pterodactyl.key}`,
+ 'Accept': 'application/json',
+ },
+ });
+
+ if (!nodesResponse.ok) {
+ throw new Error(`Failed to fetch node information from Pterodactyl API. Status: ${nodesResponse.statusText}`);
+ }
+
+ const nodesData = await nodesResponse.json();
+
+ // Extract relevant information about nodes
+ const nodesInfo = nodesData.data.map(node => {
+ const resources = node.attributes || {};
+ const usage = node.attributes.allocated_resources || {};
+
+ return {
+ name: node.attributes.name,
+ ram: {
+ used: usage.memory || 0,
+ free: resources.memory ? resources.memory - usage.memory : 0,
+ total: resources.memory || 0,
+ },
+ disk: {
+ used: usage.disk || 0,
+ free: resources.disk_bytes ? resources.disk_bytes - usage.disk : 0,
+ total: resources.disk || 0,
+ },
+ };
+ });
+
+ // Render the EJS template with the fetched information
+ res.json({ nodes: nodesInfo });
+ } catch (error) {
+ console.error("Error fetching information:", error);
+ return res.json({ error: true, message: "An error occurred while fetching information." });
+ }
+ });
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ // ... (your existing code)
+
+ const pterodactylAPI = `${settings.pterodactyl.domain}/api/application/users`;
+
+ app.get("/api/info/user", async (req, res) => {
+ if (!req.session.pterodactyl) {
+ return res.json({ error: true, message: "You must be logged in." });
+ }
+
+ try {
+ const response = await fetch(pterodactylAPI, {
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Authorization': `Bearer ${settings.pterodactyl.key}`,
+ 'Accept': 'application/json',
+ },
+ });
+
+ if (!response.ok) {
+ throw new Error(`Failed to fetch user information from Pterodactyl API. Status: ${response.statusText}`);
+ }
+
+ const userData = await response.json();
+ const numberOfUsers = userData.meta.pagination.total;
+
+ return res.json({ numberOfUsers });
+ } catch (error) {
+ console.error("Error fetching user information:", error);
+ return res.json({ error: true, message: "An error occurred while fetching user information." });
+ }
+ });
+
+// ... (continue with the rest of your code)
+
+
+
+
+
+
app.get("/forcedelete", async (req, res) => {
if (!req.session.pterodactyl) return res.redirect("/login");
@@ -402,3 +614,6 @@ module.exports.load = async function (app, db) {
return res.json({ created: createdServer ?? false, cost: settings.renewals.cost })
})
};
+
+
+
diff --git a/api/tfcid.js b/api/tfcid.js
new file mode 100644
index 0000000..bba033d
--- /dev/null
+++ b/api/tfcid.js
@@ -0,0 +1,25 @@
+module.exports.load = async function (app, db) {
+ app.get("/users/id/get/tfcid/:dcid", async (req, res) => {
+ try {
+ const dcid = req.params.dcid;
+ if (!dcid) {
+ return res.json({ "success": false, "message": "MISSINGUSER" });
+ }
+
+ let tfcid = await db.get("tfcid-" + dcid);
+
+ if (!tfcid) {
+ // Wenn tfcid nicht vorhanden ist, generiere eine zufällige Zahl zwischen 1 und 100
+ tfcid = Math.floor(Math.random() * 100) + 1;
+
+ // Speichere die generierte tfcid in der Datenbank
+ await db.set("tfcid-" + dcid, tfcid);
+ }
+
+ res.json({ "success": true, "message": "", "id": tfcid });
+ } catch (error) {
+ console.error('Fehler beim Ändern von DCId zu tfcid', error);
+ res.json({ "success": false, "message": "Ein Fehler ist aufgetreten." });
+ }
+ });
+}
diff --git a/api/user.js b/api/user.js
new file mode 100644
index 0000000..8d925fd
--- /dev/null
+++ b/api/user.js
@@ -0,0 +1,150 @@
+const fetch = require("node-fetch");
+const indexjs = require("../index.js");
+const ejs = require("ejs");
+
+
+module.exports.load = async function (app, db) {
+ app.post("/admin/users/remove", async (req, res) => {
+ try {
+ let theme = indexjs.get(req);
+ if (!req.session.pterodactyl)
+ return res.json({ success: false, message: alerts.MISSINGUSER, redirect: "login" });
+ let cacheaccount = await fetch(
+ settings.pterodactyl.domain +
+ "/api/application/users/" +
+ req.session.pterodactyl.id +
+ "?include=servers",
+ {
+ method: "get",
+ headers: {
+ "Content-Type": "application/json",
+ Authorization: `Bearer ${settings.pterodactyl.key}`,
+ },
+ }
+ );
+ if ((await cacheaccount.statusText) == "Not Found")
+ return res.json({ success: false, message: alerts.MISSINGUSER, redirect: "login" });
+ let cacheaccountinfo = JSON.parse(await cacheaccount.text());
+ req.session.pterodactyl = cacheaccountinfo.attributes;
+ if (cacheaccountinfo.attributes.root_admin !== true)
+ return res.json({ success: false, message: alerts.MISSINGUSER, redirect: "login" });
+ if (!req.body.user)
+ return res.json({ success: false, message: alerts.MISSINGUSER });
+ let user = req.body.user;
+ if (!await db.get("userinfo-" + user))
+ return res.json({ success: false, message: alerts.INVALIDUSER });
+
+ let pteroid = await db.get("users-" + user);
+ const delUserSrvs = await fetch(
+ `${settings.pterodactyl.domain}/api/application/users/${pteroid}?include=servers`,
+ {
+ method: "GET",
+ headers: {
+ Accept: "application/json",
+ "Content-Type": "application/json",
+ Authorization: `Bearer ${settings.pterodactyl.key}`,
+ },
+ }
+ );
+ if (delUserSrvs.status == 200) {
+ const serverData = await delUserSrvs.json();
+ if (serverData.attributes.relationships.servers.data.length > 0) {
+ for (const server of serverData.attributes.relationships.servers.data) {
+ await deleteServer(server.attributes.id);
+ }
+ }
+ } else {
+ console.error(
+ `Failed to fetch server data. Status code: ${delUserSrvs.status}`
+ );
+ }
+ async function deleteServer(serverId) {
+ try {
+ const delUserSrv = await fetch(
+ `${settings.pterodactyl.domain}/api/application/servers/${serverId}`,
+ {
+ method: "DELETE",
+ headers: {
+ Authorization: `Bearer ${settings.pterodactyl.key}`,
+ },
+ }
+ );
+ console.log(await delUserSrv.json())
+ if (delUserSrv.status === 204) {
+ console.log(
+ `Successfully deleted the server: ${serverId}. That belongs to ${pteroid}`
+ );
+ } else {
+ console.error(
+ `Failed to delete server ${serverId}. That belongs to ${pteroid}. Status code: ${delUserSrv.status}`
+ );
+ }
+ } catch (error) {
+ console.error(
+ `Error while deleting server ${serverId}. That belongs to ${pteroid}: ${error}`
+ );
+ }
+ }
+ const delUserRes = await fetch(
+ `${settings.pterodactyl.domain}/api/application/users/${pteroid}`,
+ {
+ method: "DELETE",
+ headers: {
+ "Accept": "application/json",
+ "Content-Type": "application/json",
+ "Authorization": `Bearer ${settings.pterodactyl.key}`,
+ },
+ }
+ );
+ try {
+ let selected_ip = await db.get("ip-" + user);
+ let userinfo = await db.get("userinfo-" + user);
+
+ if (selected_ip) {
+ let allips = (await db.get("ips")) || [];
+ allips = allips.filter((ip) => ip !== selected_ip);
+ if (allips.length == 0) {
+ await db.delete("ips");
+ } else {
+ await db.set("ips", allips);
+ }
+ await db.delete("ip-" + user);
+ }
+
+ let userids = (await db.get("users")) || [];
+ userids = userids.filter((user) => user !== pteroid);
+ if (userids.length == 0) {
+ await db.delete("users");
+ } else {
+ await db.set("users", userids);
+ }
+
+ await db.delete("users-" + user);
+ await db.delete("users-" + userinfo.email);
+ await db.delete("users-" + userinfo.id);
+ await db.delete("onboarding-" + user);
+ await db.delete("userinfo-" + user);
+ await db.delete("password-" + user);
+ await db.delete("j4rs-" + userinfo.id);
+ await db.delete("ip-" + userinfo.id);
+ await db.delete("coins-" + user);
+ await db.delete("extra-" + user);
+ await db.delete("package-" + user);
+ await db.delete("createdserver-" + user);
+
+
+
+ return res.json({ success: true, message: "Success!" });
+ } catch (error) {
+ console.error(
+ `Failed to delete user with ID ${pteroid}:`,
+ delUserRes.statusText
+ );
+
+ return res.json({ success: false, message: `Failed to delete user ${pteroid}. ${delUserRes.statusText}` });
+ }
+ } catch (error) {
+ return res.json({ success: false, message: "An error occurred", error });
+ }
+ });
+}
\ No newline at end of file
diff --git a/assets/css/style.css b/assets/css/style.css
index a88f87b..f967d3a 100644
--- a/assets/css/style.css
+++ b/assets/css/style.css
@@ -10095,7 +10095,7 @@ input[type="button"].btn-block {
flex-direction: column;
align-items: flex-start;
justify-content: center; }
-
+
.btn-group-vertical > .btn,
.fc .btn-group-vertical > button,
.ajax-upload-dragdrop .btn-group-vertical > .ajax-file-upload,
@@ -10442,7 +10442,7 @@ input[type="button"].btn-block {
.asColorPicker-wrap > .custom-select:not(:first-child) {
border-top-left-radius: 0;
border-bottom-left-radius: 0; }
-
+
.input-group > .custom-file,
.asColorPicker-wrap > .custom-file {
display: flex;
@@ -11399,9 +11399,9 @@ input[type="button"].btn-block {
flex-direction: column;
min-width: 0;
word-wrap: break-word;
- background-color: #101115;
+ background-color: rgba(19, 18, 21, 0.61);
background-clip: border-box;
- border: 1px solid rgba(0, 0, 0, 0.51);
+ border: 1px solid rgba(246, 239, 239, 0.01);
border-radius: 0.25rem; }
.card > hr {
margin-right: 0;
@@ -11928,7 +11928,7 @@ input[type="button"].btn-block {
color: #fff;
text-align: center;
white-space: nowrap;
- background-color: #007bff;
+ background-color: rgba(0, 210, 91, 0.74);
transition: width 0.6s ease; }
@media (prefers-reduced-motion: reduce) {
.progress-bar {
@@ -15242,7 +15242,7 @@ a.text-dark:hover, a.text-dark:focus {
color: #ffffff !important; }
.text-muted, .preview-list .preview-item .preview-item-content p .content-category {
- color: #6c7293 !important; }
+ color: #c7c7c7 !important; }
.text-black-50 {
color: rgba(0, 0, 0, 0.5) !important; }
@@ -15314,7 +15314,7 @@ a.text-dark:hover, a.text-dark:focus {
border: 1px solid #000; }
.table, .jsgrid .jsgrid-table {
border-collapse: collapse !important; }
-
+
.table td,
.jsgrid .jsgrid-table td, .table th, .jsgrid .jsgrid-table th {
background-color: #ffffff !important; }
@@ -15586,7 +15586,17 @@ input:focus {
background: #e4eaec; }
.bg-gradient-success {
- background: #00d25b; }
+ background-image: linear-gradient(45deg, #00d25b 25%, transparent 25%, transparent 50%, #00d25b 50%, #00d25b 75%, transparent 75%, transparent);
+ background-size: 1rem 1rem;
+ -webkit-animation: progress-bar-stripes 1s linear infinite;
+ animation: progress-bar-stripes 1s linear infinite;
+}
+
+
+.progress-bar-animated {
+ -webkit-animation: progress-bar-stripes 1s linear infinite;
+ animation: progress-bar-stripes 1s linear infinite;
+}
.bg-gradient-info {
background: #8f5fe8; }
@@ -15748,7 +15758,7 @@ body,
html {
overflow-x: hidden;
padding-right: 0 !important;
- background-color: #191c24; }
+ background-color: rgba(182, 189, 206, 0); }
*:-moz-full-screen,
*:-webkit-full-screen,
@@ -16081,7 +16091,7 @@ code {
.badge-outline-green {
color: white;
background-color: #EA21CE;
- border: 1px;
+ border: 1px;
transition-duration: 0.1s;
}
@@ -16095,7 +16105,7 @@ code {
.badge-outline-red {
color: white;
background-color: #ff0000;
- border: 1px;
+ border: 1px;
transition-duration: 0.1s;
}
@@ -20255,7 +20265,7 @@ div.tagsinput {
/* Auth */
.auth.login-bg {
background: url("../images/auth/Login_bg.jpg");
- background-size: auto;
+ background-size: auto;
background-repeat: no-repeat; }
.auth .login-half-bg {
@@ -20400,7 +20410,7 @@ div.tagsinput {
/* Navbar */
.navbar {
font-weight: normal;
- background: #191c24;
+ background: rgba(25, 28, 36, 0);
left: 244px;
transition: left 0.25s ease;
-webkit-transition: left 0.25s ease;
@@ -20683,15 +20693,24 @@ div.tagsinput {
/* Sidebar */
.sidebar {
min-height: calc(100vh - 70px);
- background: #0b0b0f;
+ background: rgba(10, 0, 9, 0);
font-weight: normal;
padding: 0;
- width: 244px;
+ width: 344px;
z-index: 11;
transition: width 0.25s ease, background 0.25s ease;
-webkit-transition: width 0.25s ease, background 0.25s ease;
-moz-transition: width 0.25s ease, background 0.25s ease;
- -ms-transition: width 0.25s ease, background 0.25s ease; }
+ -ms-transition: width 0.25s ease, background 0.25s ease;
+}
+
+/* Media Query für Mobilgeräte */
+@media (max-width: 1000px) {
+ .sidebar {
+ width: 249px;
+ background-color: #000;
+ }
+}
.sidebar .sidebar-brand-wrapper {
transition: width 0.25s ease, background 0.25s ease;
-webkit-transition: width 0.25s ease, background 0.25s ease;
@@ -20751,7 +20770,7 @@ div.tagsinput {
align-items: center;
white-space: nowrap;
padding: 0.8rem 10px 0.8rem 1.188rem;
- color: #6c7293;
+ color: #b0b5c7;
-webkit-transition-duration: 0.45s;
-moz-transition-duration: 0.45s;
-o-transition-duration: 0.45s;
@@ -20761,7 +20780,7 @@ div.tagsinput {
height: 36px;
margin-top: 5px;
- border-radius: 20px 20px 20px 20px;
+ border-radius: 7px;
margin-left: 20px;
margin-right: 20px;
}
@@ -20800,7 +20819,11 @@ div.tagsinput {
margin-right: auto;
margin-left: 1rem; }
.sidebar .nav .nav-item.active > .nav-link {
- background: #17181d;
+ background: rgba(65, 49, 38, 0.63);
+ border: 4px solid;
+ -webkit-border-horizontal-spacing: 3px;
+
+ border-color: transparent transparent transparent rgba(255, 0, 59, 0.32);
position: relative;
}
@@ -20967,7 +20990,7 @@ div.tagsinput {
.sidebar .nav.sub-menu .nav-item:hover {
background: transparent; }
.sidebar .nav:not(.sub-menu) > .nav-item:hover:not(.nav-category):not(.account-dropdown) > .nav-link {
- background: #0f1015;
+ background: rgba(65, 49, 38, 0.63);
color: #ffffff; }
.sidebar .nav .menu-items:nth-child(5n+1) .nav-link .menu-icon i {
color: #0090e7; }
@@ -21190,4 +21213,1133 @@ div.tagsinput {
-webkit-flex-grow: 1;
flex-grow: 1; }
-/*# sourceMappingURL=maps/style.css.map */
\ No newline at end of file
+/*# sourceMappingURL=maps/style.css.map */
+
+
+html, body {
+ height: 100%; }
+
+
+.firefly {
+ position: fixed;
+ left: 50%;
+ top: 50%;
+ width: 0.4vw;
+ height: 0.4vw;
+ margin: -0.2vw 0 0 9.8vw;
+ animation: ease 200s alternate infinite;
+ pointer-events: none; }
+.firefly::before, .firefly::after {
+ content: '';
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ border-radius: 50%;
+ transform-origin: -10vw; }
+.firefly::before {
+ background: black;
+ opacity: 0.4;
+ animation: drift ease alternate infinite; }
+.firefly::after {
+ background: white;
+ opacity: 0;
+ box-shadow: 0 0 0vw 0vw yellow;
+ animation: drift ease alternate infinite, flash ease infinite; }
+
+.firefly:nth-child(1) {
+ animation-name: move1; }
+.firefly:nth-child(1)::before {
+ animation-duration: 15s; }
+.firefly:nth-child(1)::after {
+ animation-duration: 15s, 9348ms;
+ animation-delay: 0ms, 6901ms; }
+
+@keyframes move1 {
+ 0% {
+ transform: translateX(33vw) translateY(3vh) scale(0.65); }
+ 5.55556% {
+ transform: translateX(5vw) translateY(4vh) scale(0.34); }
+ 11.11111% {
+ transform: translateX(-31vw) translateY(-27vh) scale(0.84); }
+ 16.66667% {
+ transform: translateX(-28vw) translateY(2vh) scale(0.26); }
+ 22.22222% {
+ transform: translateX(8vw) translateY(-39vh) scale(0.7); }
+ 27.77778% {
+ transform: translateX(29vw) translateY(23vh) scale(0.3); }
+ 33.33333% {
+ transform: translateX(3vw) translateY(-26vh) scale(0.37); }
+ 38.88889% {
+ transform: translateX(48vw) translateY(-5vh) scale(0.95); }
+ 44.44444% {
+ transform: translateX(-12vw) translateY(-38vh) scale(0.89); }
+ 50% {
+ transform: translateX(-2vw) translateY(30vh) scale(0.91); }
+ 55.55556% {
+ transform: translateX(40vw) translateY(6vh) scale(0.71); }
+ 61.11111% {
+ transform: translateX(35vw) translateY(1vh) scale(0.38); }
+ 66.66667% {
+ transform: translateX(-32vw) translateY(7vh) scale(0.97); }
+ 72.22222% {
+ transform: translateX(30vw) translateY(-33vh) scale(0.8); }
+ 77.77778% {
+ transform: translateX(0vw) translateY(43vh) scale(0.91); }
+ 83.33333% {
+ transform: translateX(21vw) translateY(20vh) scale(0.88); }
+ 88.88889% {
+ transform: translateX(33vw) translateY(6vh) scale(0.79); }
+ 94.44444% {
+ transform: translateX(-30vw) translateY(49vh) scale(0.75); }
+ 100% {
+ transform: translateX(-20vw) translateY(-30vh) scale(0.54); } }
+
+.firefly:nth-child(2) {
+ animation-name: move2; }
+.firefly:nth-child(2)::before {
+ animation-duration: 13s; }
+.firefly:nth-child(2)::after {
+ animation-duration: 13s, 5952ms;
+ animation-delay: 0ms, 4969ms; }
+
+@keyframes move2 {
+ 0% {
+ transform: translateX(29vw) translateY(-24vh) scale(0.32); }
+ 4.16667% {
+ transform: translateX(15vw) translateY(-39vh) scale(0.64); }
+ 8.33333% {
+ transform: translateX(30vw) translateY(9vh) scale(0.67); }
+ 12.5% {
+ transform: translateX(-10vw) translateY(5vh) scale(0.68); }
+ 16.66667% {
+ transform: translateX(28vw) translateY(7vh) scale(0.78); }
+ 20.83333% {
+ transform: translateX(-44vw) translateY(-44vh) scale(0.85); }
+ 25% {
+ transform: translateX(-25vw) translateY(24vh) scale(0.7); }
+ 29.16667% {
+ transform: translateX(-10vw) translateY(-17vh) scale(0.52); }
+ 33.33333% {
+ transform: translateX(-33vw) translateY(-21vh) scale(0.49); }
+ 37.5% {
+ transform: translateX(46vw) translateY(13vh) scale(0.9); }
+ 41.66667% {
+ transform: translateX(5vw) translateY(9vh) scale(0.92); }
+ 45.83333% {
+ transform: translateX(44vw) translateY(-29vh) scale(0.67); }
+ 50% {
+ transform: translateX(-37vw) translateY(20vh) scale(0.52); }
+ 54.16667% {
+ transform: translateX(34vw) translateY(20vh) scale(0.76); }
+ 58.33333% {
+ transform: translateX(-24vw) translateY(-20vh) scale(0.83); }
+ 62.5% {
+ transform: translateX(30vw) translateY(29vh) scale(0.82); }
+ 66.66667% {
+ transform: translateX(35vw) translateY(-9vh) scale(0.47); }
+ 70.83333% {
+ transform: translateX(-23vw) translateY(-4vh) scale(0.69); }
+ 75% {
+ transform: translateX(-42vw) translateY(17vh) scale(0.93); }
+ 79.16667% {
+ transform: translateX(28vw) translateY(-3vh) scale(0.58); }
+ 83.33333% {
+ transform: translateX(-17vw) translateY(36vh) scale(0.39); }
+ 87.5% {
+ transform: translateX(-22vw) translateY(35vh) scale(0.54); }
+ 91.66667% {
+ transform: translateX(-29vw) translateY(-12vh) scale(0.53); }
+ 95.83333% {
+ transform: translateX(-32vw) translateY(-11vh) scale(0.52); }
+ 100% {
+ transform: translateX(-12vw) translateY(14vh) scale(0.67); } }
+
+.firefly:nth-child(3) {
+ animation-name: move3; }
+.firefly:nth-child(3)::before {
+ animation-duration: 13s; }
+.firefly:nth-child(3)::after {
+ animation-duration: 13s, 7152ms;
+ animation-delay: 0ms, 4035ms; }
+
+@keyframes move3 {
+ 0% {
+ transform: translateX(-38vw) translateY(50vh) scale(0.58); }
+ 5.55556% {
+ transform: translateX(6vw) translateY(0vh) scale(0.94); }
+ 11.11111% {
+ transform: translateX(-46vw) translateY(-44vh) scale(0.48); }
+ 16.66667% {
+ transform: translateX(-14vw) translateY(-1vh) scale(0.54); }
+ 22.22222% {
+ transform: translateX(-25vw) translateY(20vh) scale(0.8); }
+ 27.77778% {
+ transform: translateX(3vw) translateY(-37vh) scale(0.83); }
+ 33.33333% {
+ transform: translateX(-31vw) translateY(-41vh) scale(0.51); }
+ 38.88889% {
+ transform: translateX(-14vw) translateY(-3vh) scale(0.36); }
+ 44.44444% {
+ transform: translateX(3vw) translateY(-10vh) scale(0.85); }
+ 50% {
+ transform: translateX(-10vw) translateY(-36vh) scale(0.96); }
+ 55.55556% {
+ transform: translateX(7vw) translateY(36vh) scale(0.62); }
+ 61.11111% {
+ transform: translateX(-9vw) translateY(40vh) scale(0.46); }
+ 66.66667% {
+ transform: translateX(-3vw) translateY(-40vh) scale(0.98); }
+ 72.22222% {
+ transform: translateX(-1vw) translateY(-42vh) scale(0.39); }
+ 77.77778% {
+ transform: translateX(14vw) translateY(35vh) scale(0.86); }
+ 83.33333% {
+ transform: translateX(-49vw) translateY(43vh) scale(0.4); }
+ 88.88889% {
+ transform: translateX(17vw) translateY(32vh) scale(0.39); }
+ 94.44444% {
+ transform: translateX(30vw) translateY(27vh) scale(0.69); }
+ 100% {
+ transform: translateX(-20vw) translateY(-19vh) scale(0.36); } }
+
+.firefly:nth-child(4) {
+ animation-name: move4; }
+.firefly:nth-child(4)::before {
+ animation-duration: 18s; }
+.firefly:nth-child(4)::after {
+ animation-duration: 18s, 8236ms;
+ animation-delay: 0ms, 4230ms; }
+
+@keyframes move4 {
+ 0% {
+ transform: translateX(37vw) translateY(-19vh) scale(0.72); }
+ 4% {
+ transform: translateX(-38vw) translateY(-10vh) scale(0.41); }
+ 8% {
+ transform: translateX(18vw) translateY(43vh) scale(0.7); }
+ 12% {
+ transform: translateX(15vw) translateY(-44vh) scale(0.74); }
+ 16% {
+ transform: translateX(-9vw) translateY(31vh) scale(0.37); }
+ 20% {
+ transform: translateX(23vw) translateY(42vh) scale(0.64); }
+ 24% {
+ transform: translateX(-42vw) translateY(8vh) scale(0.37); }
+ 28% {
+ transform: translateX(-30vw) translateY(-45vh) scale(0.3); }
+ 32% {
+ transform: translateX(18vw) translateY(41vh) scale(0.5); }
+ 36% {
+ transform: translateX(-18vw) translateY(-46vh) scale(0.45); }
+ 40% {
+ transform: translateX(10vw) translateY(-26vh) scale(0.37); }
+ 44% {
+ transform: translateX(17vw) translateY(28vh) scale(0.4); }
+ 48% {
+ transform: translateX(36vw) translateY(38vh) scale(0.72); }
+ 52% {
+ transform: translateX(-23vw) translateY(40vh) scale(0.4); }
+ 56% {
+ transform: translateX(-46vw) translateY(-12vh) scale(0.82); }
+ 60% {
+ transform: translateX(13vw) translateY(-37vh) scale(0.62); }
+ 64% {
+ transform: translateX(-16vw) translateY(-20vh) scale(0.28); }
+ 68% {
+ transform: translateX(-1vw) translateY(-44vh) scale(0.89); }
+ 72% {
+ transform: translateX(34vw) translateY(-1vh) scale(0.33); }
+ 76% {
+ transform: translateX(46vw) translateY(21vh) scale(0.9); }
+ 80% {
+ transform: translateX(-5vw) translateY(-7vh) scale(0.48); }
+ 84% {
+ transform: translateX(-41vw) translateY(7vh) scale(0.92); }
+ 88% {
+ transform: translateX(-4vw) translateY(-1vh) scale(0.33); }
+ 92% {
+ transform: translateX(-35vw) translateY(26vh) scale(0.77); }
+ 96% {
+ transform: translateX(-49vw) translateY(-34vh) scale(0.45); }
+ 100% {
+ transform: translateX(-16vw) translateY(17vh) scale(0.51); } }
+
+.firefly:nth-child(5) {
+ animation-name: move5; }
+.firefly:nth-child(5)::before {
+ animation-duration: 10s; }
+.firefly:nth-child(5)::after {
+ animation-duration: 10s, 6208ms;
+ animation-delay: 0ms, 3326ms; }
+
+@keyframes move5 {
+ 0% {
+ transform: translateX(-32vw) translateY(48vh) scale(0.7); }
+ 3.7037% {
+ transform: translateX(-4vw) translateY(23vh) scale(0.55); }
+ 7.40741% {
+ transform: translateX(-42vw) translateY(-46vh) scale(0.36); }
+ 11.11111% {
+ transform: translateX(11vw) translateY(-37vh) scale(0.55); }
+ 14.81481% {
+ transform: translateX(-9vw) translateY(-37vh) scale(0.79); }
+ 18.51852% {
+ transform: translateX(-41vw) translateY(35vh) scale(0.38); }
+ 22.22222% {
+ transform: translateX(41vw) translateY(-13vh) scale(0.26); }
+ 25.92593% {
+ transform: translateX(-3vw) translateY(41vh) scale(0.49); }
+ 29.62963% {
+ transform: translateX(35vw) translateY(-8vh) scale(0.59); }
+ 33.33333% {
+ transform: translateX(45vw) translateY(10vh) scale(0.94); }
+ 37.03704% {
+ transform: translateX(35vw) translateY(24vh) scale(0.77); }
+ 40.74074% {
+ transform: translateX(0vw) translateY(-39vh) scale(0.87); }
+ 44.44444% {
+ transform: translateX(-5vw) translateY(-3vh) scale(0.88); }
+ 48.14815% {
+ transform: translateX(-32vw) translateY(-16vh) scale(0.95); }
+ 51.85185% {
+ transform: translateX(10vw) translateY(-35vh) scale(0.82); }
+ 55.55556% {
+ transform: translateX(-2vw) translateY(10vh) scale(0.47); }
+ 59.25926% {
+ transform: translateX(24vw) translateY(-49vh) scale(0.95); }
+ 62.96296% {
+ transform: translateX(-29vw) translateY(46vh) scale(0.47); }
+ 66.66667% {
+ transform: translateX(-46vw) translateY(-4vh) scale(0.36); }
+ 70.37037% {
+ transform: translateX(29vw) translateY(-34vh) scale(0.65); }
+ 74.07407% {
+ transform: translateX(22vw) translateY(-24vh) scale(0.32); }
+ 77.77778% {
+ transform: translateX(-30vw) translateY(20vh) scale(0.52); }
+ 81.48148% {
+ transform: translateX(-10vw) translateY(-7vh) scale(0.72); }
+ 85.18519% {
+ transform: translateX(-43vw) translateY(40vh) scale(0.7); }
+ 88.88889% {
+ transform: translateX(17vw) translateY(-44vh) scale(0.4); }
+ 92.59259% {
+ transform: translateX(-42vw) translateY(48vh) scale(0.83); }
+ 96.2963% {
+ transform: translateX(-20vw) translateY(13vh) scale(0.84); }
+ 100% {
+ transform: translateX(-10vw) translateY(42vh) scale(0.54); } }
+
+.firefly:nth-child(6) {
+ animation-name: move6; }
+.firefly:nth-child(6)::before {
+ animation-duration: 9s; }
+.firefly:nth-child(6)::after {
+ animation-duration: 9s, 7355ms;
+ animation-delay: 0ms, 6640ms; }
+
+@keyframes move6 {
+ 0% {
+ transform: translateX(28vw) translateY(9vh) scale(0.84); }
+ 4.16667% {
+ transform: translateX(0vw) translateY(-17vh) scale(0.49); }
+ 8.33333% {
+ transform: translateX(-32vw) translateY(-26vh) scale(0.61); }
+ 12.5% {
+ transform: translateX(-8vw) translateY(41vh) scale(0.84); }
+ 16.66667% {
+ transform: translateX(-26vw) translateY(-18vh) scale(0.82); }
+ 20.83333% {
+ transform: translateX(29vw) translateY(-49vh) scale(0.71); }
+ 25% {
+ transform: translateX(-13vw) translateY(38vh) scale(0.94); }
+ 29.16667% {
+ transform: translateX(-8vw) translateY(-40vh) scale(0.83); }
+ 33.33333% {
+ transform: translateX(20vw) translateY(-24vh) scale(0.32); }
+ 37.5% {
+ transform: translateX(23vw) translateY(-15vh) scale(0.32); }
+ 41.66667% {
+ transform: translateX(-45vw) translateY(-12vh) scale(0.59); }
+ 45.83333% {
+ transform: translateX(-4vw) translateY(-30vh) scale(0.46); }
+ 50% {
+ transform: translateX(-34vw) translateY(48vh) scale(0.34); }
+ 54.16667% {
+ transform: translateX(-32vw) translateY(1vh) scale(0.84); }
+ 58.33333% {
+ transform: translateX(-6vw) translateY(-18vh) scale(0.52); }
+ 62.5% {
+ transform: translateX(33vw) translateY(26vh) scale(0.52); }
+ 66.66667% {
+ transform: translateX(30vw) translateY(2vh) scale(0.84); }
+ 70.83333% {
+ transform: translateX(-13vw) translateY(-43vh) scale(0.8); }
+ 75% {
+ transform: translateX(5vw) translateY(3vh) scale(0.48); }
+ 79.16667% {
+ transform: translateX(46vw) translateY(-5vh) scale(0.41); }
+ 83.33333% {
+ transform: translateX(13vw) translateY(-48vh) scale(0.49); }
+ 87.5% {
+ transform: translateX(12vw) translateY(-8vh) scale(0.42); }
+ 91.66667% {
+ transform: translateX(25vw) translateY(-34vh) scale(0.94); }
+ 95.83333% {
+ transform: translateX(43vw) translateY(-23vh) scale(0.81); }
+ 100% {
+ transform: translateX(6vw) translateY(49vh) scale(0.55); } }
+
+.firefly:nth-child(7) {
+ animation-name: move7; }
+.firefly:nth-child(7)::before {
+ animation-duration: 18s; }
+.firefly:nth-child(7)::after {
+ animation-duration: 18s, 7418ms;
+ animation-delay: 0ms, 3861ms; }
+
+@keyframes move7 {
+ 0% {
+ transform: translateX(-6vw) translateY(-46vh) scale(0.82); }
+ 4.16667% {
+ transform: translateX(45vw) translateY(19vh) scale(0.89); }
+ 8.33333% {
+ transform: translateX(14vw) translateY(41vh) scale(0.34); }
+ 12.5% {
+ transform: translateX(-11vw) translateY(28vh) scale(0.44); }
+ 16.66667% {
+ transform: translateX(-1vw) translateY(7vh) scale(0.92); }
+ 20.83333% {
+ transform: translateX(-32vw) translateY(-32vh) scale(0.6); }
+ 25% {
+ transform: translateX(-45vw) translateY(-2vh) scale(0.86); }
+ 29.16667% {
+ transform: translateX(41vw) translateY(-2vh) scale(0.51); }
+ 33.33333% {
+ transform: translateX(-36vw) translateY(-11vh) scale(0.52); }
+ 37.5% {
+ transform: translateX(-37vw) translateY(-39vh) scale(0.75); }
+ 41.66667% {
+ transform: translateX(-47vw) translateY(-13vh) scale(0.6); }
+ 45.83333% {
+ transform: translateX(-14vw) translateY(-20vh) scale(0.27); }
+ 50% {
+ transform: translateX(2vw) translateY(-31vh) scale(0.66); }
+ 54.16667% {
+ transform: translateX(-31vw) translateY(18vh) scale(0.77); }
+ 58.33333% {
+ transform: translateX(34vw) translateY(-15vh) scale(0.37); }
+ 62.5% {
+ transform: translateX(-24vw) translateY(41vh) scale(0.4); }
+ 66.66667% {
+ transform: translateX(-31vw) translateY(35vh) scale(0.89); }
+ 70.83333% {
+ transform: translateX(-13vw) translateY(-32vh) scale(0.9); }
+ 75% {
+ transform: translateX(-11vw) translateY(-9vh) scale(0.99); }
+ 79.16667% {
+ transform: translateX(15vw) translateY(27vh) scale(0.46); }
+ 83.33333% {
+ transform: translateX(8vw) translateY(50vh) scale(0.45); }
+ 87.5% {
+ transform: translateX(34vw) translateY(46vh) scale(0.99); }
+ 91.66667% {
+ transform: translateX(-3vw) translateY(-15vh) scale(0.5); }
+ 95.83333% {
+ transform: translateX(-5vw) translateY(-45vh) scale(0.68); }
+ 100% {
+ transform: translateX(44vw) translateY(37vh) scale(0.33); } }
+
+.firefly:nth-child(8) {
+ animation-name: move8; }
+.firefly:nth-child(8)::before {
+ animation-duration: 18s; }
+.firefly:nth-child(8)::after {
+ animation-duration: 18s, 5329ms;
+ animation-delay: 0ms, 5592ms; }
+
+@keyframes move8 {
+ 0% {
+ transform: translateX(39vw) translateY(-3vh) scale(0.41); }
+ 3.84615% {
+ transform: translateX(-41vw) translateY(-39vh) scale(0.81); }
+ 7.69231% {
+ transform: translateX(-43vw) translateY(38vh) scale(0.55); }
+ 11.53846% {
+ transform: translateX(38vw) translateY(14vh) scale(1); }
+ 15.38462% {
+ transform: translateX(-47vw) translateY(17vh) scale(0.76); }
+ 19.23077% {
+ transform: translateX(15vw) translateY(-35vh) scale(0.37); }
+ 23.07692% {
+ transform: translateX(-40vw) translateY(46vh) scale(0.46); }
+ 26.92308% {
+ transform: translateX(-46vw) translateY(46vh) scale(0.73); }
+ 30.76923% {
+ transform: translateX(-40vw) translateY(27vh) scale(0.47); }
+ 34.61538% {
+ transform: translateX(-8vw) translateY(7vh) scale(0.83); }
+ 38.46154% {
+ transform: translateX(-25vw) translateY(42vh) scale(0.29); }
+ 42.30769% {
+ transform: translateX(27vw) translateY(49vh) scale(0.73); }
+ 46.15385% {
+ transform: translateX(-13vw) translateY(32vh) scale(1); }
+ 50% {
+ transform: translateX(47vw) translateY(-42vh) scale(0.26); }
+ 53.84615% {
+ transform: translateX(-13vw) translateY(-19vh) scale(0.41); }
+ 57.69231% {
+ transform: translateX(41vw) translateY(41vh) scale(0.99); }
+ 61.53846% {
+ transform: translateX(31vw) translateY(27vh) scale(0.72); }
+ 65.38462% {
+ transform: translateX(49vw) translateY(-47vh) scale(0.47); }
+ 69.23077% {
+ transform: translateX(3vw) translateY(-36vh) scale(0.54); }
+ 73.07692% {
+ transform: translateX(32vw) translateY(5vh) scale(1); }
+ 76.92308% {
+ transform: translateX(35vw) translateY(40vh) scale(0.3); }
+ 80.76923% {
+ transform: translateX(33vw) translateY(27vh) scale(0.48); }
+ 84.61538% {
+ transform: translateX(32vw) translateY(5vh) scale(0.34); }
+ 88.46154% {
+ transform: translateX(-33vw) translateY(-24vh) scale(0.8); }
+ 92.30769% {
+ transform: translateX(27vw) translateY(-12vh) scale(0.6); }
+ 96.15385% {
+ transform: translateX(-17vw) translateY(33vh) scale(0.71); }
+ 100% {
+ transform: translateX(13vw) translateY(2vh) scale(0.52); } }
+
+.firefly:nth-child(9) {
+ animation-name: move9; }
+.firefly:nth-child(9)::before {
+ animation-duration: 9s; }
+.firefly:nth-child(9)::after {
+ animation-duration: 9s, 5164ms;
+ animation-delay: 0ms, 7191ms; }
+
+@keyframes move9 {
+ 0% {
+ transform: translateX(31vw) translateY(-21vh) scale(0.63); }
+ 3.84615% {
+ transform: translateX(39vw) translateY(11vh) scale(0.31); }
+ 7.69231% {
+ transform: translateX(-12vw) translateY(9vh) scale(0.81); }
+ 11.53846% {
+ transform: translateX(4vw) translateY(-20vh) scale(0.55); }
+ 15.38462% {
+ transform: translateX(6vw) translateY(-47vh) scale(0.31); }
+ 19.23077% {
+ transform: translateX(22vw) translateY(-43vh) scale(0.38); }
+ 23.07692% {
+ transform: translateX(33vw) translateY(-5vh) scale(0.29); }
+ 26.92308% {
+ transform: translateX(41vw) translateY(-36vh) scale(0.58); }
+ 30.76923% {
+ transform: translateX(-34vw) translateY(-48vh) scale(0.88); }
+ 34.61538% {
+ transform: translateX(-26vw) translateY(-17vh) scale(0.57); }
+ 38.46154% {
+ transform: translateX(34vw) translateY(-45vh) scale(0.71); }
+ 42.30769% {
+ transform: translateX(-7vw) translateY(4vh) scale(0.71); }
+ 46.15385% {
+ transform: translateX(19vw) translateY(-35vh) scale(0.46); }
+ 50% {
+ transform: translateX(15vw) translateY(45vh) scale(0.93); }
+ 53.84615% {
+ transform: translateX(-17vw) translateY(12vh) scale(0.3); }
+ 57.69231% {
+ transform: translateX(-34vw) translateY(-37vh) scale(0.92); }
+ 61.53846% {
+ transform: translateX(49vw) translateY(-25vh) scale(0.29); }
+ 65.38462% {
+ transform: translateX(31vw) translateY(35vh) scale(0.66); }
+ 69.23077% {
+ transform: translateX(-16vw) translateY(-10vh) scale(0.43); }
+ 73.07692% {
+ transform: translateX(4vw) translateY(-8vh) scale(0.68); }
+ 76.92308% {
+ transform: translateX(-49vw) translateY(-48vh) scale(0.67); }
+ 80.76923% {
+ transform: translateX(48vw) translateY(13vh) scale(0.44); }
+ 84.61538% {
+ transform: translateX(30vw) translateY(33vh) scale(0.39); }
+ 88.46154% {
+ transform: translateX(48vw) translateY(13vh) scale(0.71); }
+ 92.30769% {
+ transform: translateX(10vw) translateY(29vh) scale(0.32); }
+ 96.15385% {
+ transform: translateX(-21vw) translateY(47vh) scale(0.77); }
+ 100% {
+ transform: translateX(20vw) translateY(13vh) scale(0.6); } }
+
+.firefly:nth-child(10) {
+ animation-name: move10; }
+.firefly:nth-child(10)::before {
+ animation-duration: 13s; }
+.firefly:nth-child(10)::after {
+ animation-duration: 13s, 10217ms;
+ animation-delay: 0ms, 6387ms; }
+
+@keyframes move10 {
+ 0% {
+ transform: translateX(-37vw) translateY(-22vh) scale(0.88); }
+ 5.55556% {
+ transform: translateX(-28vw) translateY(35vh) scale(0.77); }
+ 11.11111% {
+ transform: translateX(2vw) translateY(-6vh) scale(0.53); }
+ 16.66667% {
+ transform: translateX(-36vw) translateY(-34vh) scale(0.55); }
+ 22.22222% {
+ transform: translateX(-24vw) translateY(21vh) scale(0.59); }
+ 27.77778% {
+ transform: translateX(7vw) translateY(-49vh) scale(0.71); }
+ 33.33333% {
+ transform: translateX(-44vw) translateY(24vh) scale(0.88); }
+ 38.88889% {
+ transform: translateX(-4vw) translateY(50vh) scale(0.4); }
+ 44.44444% {
+ transform: translateX(4vw) translateY(-1vh) scale(0.92); }
+ 50% {
+ transform: translateX(33vw) translateY(0vh) scale(0.85); }
+ 55.55556% {
+ transform: translateX(-30vw) translateY(-11vh) scale(0.55); }
+ 61.11111% {
+ transform: translateX(37vw) translateY(-44vh) scale(0.55); }
+ 66.66667% {
+ transform: translateX(-31vw) translateY(32vh) scale(0.42); }
+ 72.22222% {
+ transform: translateX(-35vw) translateY(22vh) scale(0.92); }
+ 77.77778% {
+ transform: translateX(34vw) translateY(-17vh) scale(0.57); }
+ 83.33333% {
+ transform: translateX(3vw) translateY(-43vh) scale(1); }
+ 88.88889% {
+ transform: translateX(20vw) translateY(41vh) scale(0.9); }
+ 94.44444% {
+ transform: translateX(-26vw) translateY(11vh) scale(0.38); }
+ 100% {
+ transform: translateX(30vw) translateY(-40vh) scale(0.78); } }
+
+.firefly:nth-child(11) {
+ animation-name: move11; }
+.firefly:nth-child(11)::before {
+ animation-duration: 15s; }
+.firefly:nth-child(11)::after {
+ animation-duration: 15s, 10490ms;
+ animation-delay: 0ms, 1514ms; }
+
+@keyframes move11 {
+ 0% {
+ transform: translateX(-44vw) translateY(-40vh) scale(0.99); }
+ 5% {
+ transform: translateX(-6vw) translateY(9vh) scale(0.36); }
+ 10% {
+ transform: translateX(-16vw) translateY(-7vh) scale(0.73); }
+ 15% {
+ transform: translateX(33vw) translateY(20vh) scale(0.61); }
+ 20% {
+ transform: translateX(-3vw) translateY(-24vh) scale(0.9); }
+ 25% {
+ transform: translateX(-7vw) translateY(-45vh) scale(0.96); }
+ 30% {
+ transform: translateX(43vw) translateY(38vh) scale(0.3); }
+ 35% {
+ transform: translateX(48vw) translateY(-22vh) scale(0.6); }
+ 40% {
+ transform: translateX(41vw) translateY(3vh) scale(0.36); }
+ 45% {
+ transform: translateX(-47vw) translateY(49vh) scale(0.88); }
+ 50% {
+ transform: translateX(10vw) translateY(48vh) scale(0.77); }
+ 55% {
+ transform: translateX(3vw) translateY(-24vh) scale(0.85); }
+ 60% {
+ transform: translateX(-44vw) translateY(49vh) scale(0.52); }
+ 65% {
+ transform: translateX(24vw) translateY(21vh) scale(0.99); }
+ 70% {
+ transform: translateX(-6vw) translateY(30vh) scale(0.52); }
+ 75% {
+ transform: translateX(-1vw) translateY(-26vh) scale(0.45); }
+ 80% {
+ transform: translateX(30vw) translateY(-29vh) scale(0.64); }
+ 85% {
+ transform: translateX(27vw) translateY(30vh) scale(0.47); }
+ 90% {
+ transform: translateX(-25vw) translateY(8vh) scale(0.72); }
+ 95% {
+ transform: translateX(-29vw) translateY(5vh) scale(0.35); }
+ 100% {
+ transform: translateX(3vw) translateY(43vh) scale(0.62); } }
+
+.firefly:nth-child(12) {
+ animation-name: move12; }
+.firefly:nth-child(12)::before {
+ animation-duration: 10s; }
+.firefly:nth-child(12)::after {
+ animation-duration: 10s, 5537ms;
+ animation-delay: 0ms, 2985ms; }
+
+@keyframes move12 {
+ 0% {
+ transform: translateX(-38vw) translateY(-44vh) scale(0.48); }
+ 3.84615% {
+ transform: translateX(4vw) translateY(26vh) scale(0.48); }
+ 7.69231% {
+ transform: translateX(-28vw) translateY(47vh) scale(0.27); }
+ 11.53846% {
+ transform: translateX(14vw) translateY(6vh) scale(0.28); }
+ 15.38462% {
+ transform: translateX(45vw) translateY(-31vh) scale(0.88); }
+ 19.23077% {
+ transform: translateX(-13vw) translateY(22vh) scale(0.54); }
+ 23.07692% {
+ transform: translateX(-22vw) translateY(-46vh) scale(0.47); }
+ 26.92308% {
+ transform: translateX(12vw) translateY(-29vh) scale(0.3); }
+ 30.76923% {
+ transform: translateX(-48vw) translateY(-5vh) scale(0.99); }
+ 34.61538% {
+ transform: translateX(46vw) translateY(-6vh) scale(0.37); }
+ 38.46154% {
+ transform: translateX(-28vw) translateY(-7vh) scale(0.89); }
+ 42.30769% {
+ transform: translateX(8vw) translateY(-20vh) scale(0.89); }
+ 46.15385% {
+ transform: translateX(-45vw) translateY(31vh) scale(0.54); }
+ 50% {
+ transform: translateX(-7vw) translateY(-39vh) scale(0.31); }
+ 53.84615% {
+ transform: translateX(-49vw) translateY(-19vh) scale(0.75); }
+ 57.69231% {
+ transform: translateX(36vw) translateY(-31vh) scale(0.86); }
+ 61.53846% {
+ transform: translateX(18vw) translateY(-19vh) scale(0.62); }
+ 65.38462% {
+ transform: translateX(12vw) translateY(-29vh) scale(0.41); }
+ 69.23077% {
+ transform: translateX(-24vw) translateY(-25vh) scale(0.41); }
+ 73.07692% {
+ transform: translateX(-20vw) translateY(-49vh) scale(0.41); }
+ 76.92308% {
+ transform: translateX(-9vw) translateY(40vh) scale(0.88); }
+ 80.76923% {
+ transform: translateX(-43vw) translateY(50vh) scale(0.26); }
+ 84.61538% {
+ transform: translateX(-39vw) translateY(-13vh) scale(0.48); }
+ 88.46154% {
+ transform: translateX(10vw) translateY(38vh) scale(0.26); }
+ 92.30769% {
+ transform: translateX(43vw) translateY(-26vh) scale(0.29); }
+ 96.15385% {
+ transform: translateX(18vw) translateY(11vh) scale(0.72); }
+ 100% {
+ transform: translateX(-9vw) translateY(6vh) scale(0.8); } }
+
+.firefly:nth-child(13) {
+ animation-name: move13; }
+.firefly:nth-child(13)::before {
+ animation-duration: 14s; }
+.firefly:nth-child(13)::after {
+ animation-duration: 14s, 9987ms;
+ animation-delay: 0ms, 4951ms; }
+
+@keyframes move13 {
+ 0% {
+ transform: translateX(-15vw) translateY(-14vh) scale(0.43); }
+ 5% {
+ transform: translateX(8vw) translateY(-2vh) scale(0.44); }
+ 10% {
+ transform: translateX(29vw) translateY(-46vh) scale(0.38); }
+ 15% {
+ transform: translateX(38vw) translateY(33vh) scale(0.67); }
+ 20% {
+ transform: translateX(-28vw) translateY(30vh) scale(0.27); }
+ 25% {
+ transform: translateX(9vw) translateY(-38vh) scale(0.82); }
+ 30% {
+ transform: translateX(-43vw) translateY(42vh) scale(0.63); }
+ 35% {
+ transform: translateX(-4vw) translateY(-36vh) scale(0.44); }
+ 40% {
+ transform: translateX(32vw) translateY(-38vh) scale(0.53); }
+ 45% {
+ transform: translateX(-6vw) translateY(-39vh) scale(0.75); }
+ 50% {
+ transform: translateX(-29vw) translateY(13vh) scale(0.58); }
+ 55% {
+ transform: translateX(0vw) translateY(-11vh) scale(0.4); }
+ 60% {
+ transform: translateX(35vw) translateY(42vh) scale(0.67); }
+ 65% {
+ transform: translateX(6vw) translateY(-19vh) scale(0.84); }
+ 70% {
+ transform: translateX(-46vw) translateY(-22vh) scale(0.28); }
+ 75% {
+ transform: translateX(38vw) translateY(-36vh) scale(0.52); }
+ 80% {
+ transform: translateX(27vw) translateY(48vh) scale(0.98); }
+ 85% {
+ transform: translateX(-31vw) translateY(12vh) scale(0.77); }
+ 90% {
+ transform: translateX(7vw) translateY(4vh) scale(0.78); }
+ 95% {
+ transform: translateX(-45vw) translateY(-47vh) scale(0.46); }
+ 100% {
+ transform: translateX(-30vw) translateY(-41vh) scale(0.53); } }
+
+.firefly:nth-child(14) {
+ animation-name: move14; }
+.firefly:nth-child(14)::before {
+ animation-duration: 14s; }
+.firefly:nth-child(14)::after {
+ animation-duration: 14s, 7901ms;
+ animation-delay: 0ms, 8260ms; }
+
+@keyframes move14 {
+ 0% {
+ transform: translateX(-34vw) translateY(-11vh) scale(0.87); }
+ 4.16667% {
+ transform: translateX(-5vw) translateY(-6vh) scale(0.47); }
+ 8.33333% {
+ transform: translateX(-44vw) translateY(6vh) scale(0.59); }
+ 12.5% {
+ transform: translateX(36vw) translateY(43vh) scale(0.76); }
+ 16.66667% {
+ transform: translateX(1vw) translateY(-8vh) scale(0.95); }
+ 20.83333% {
+ transform: translateX(23vw) translateY(1vh) scale(0.3); }
+ 25% {
+ transform: translateX(11vw) translateY(2vh) scale(0.94); }
+ 29.16667% {
+ transform: translateX(-17vw) translateY(-38vh) scale(0.92); }
+ 33.33333% {
+ transform: translateX(16vw) translateY(-24vh) scale(0.29); }
+ 37.5% {
+ transform: translateX(-33vw) translateY(-7vh) scale(0.46); }
+ 41.66667% {
+ transform: translateX(6vw) translateY(-16vh) scale(0.85); }
+ 45.83333% {
+ transform: translateX(46vw) translateY(28vh) scale(0.96); }
+ 50% {
+ transform: translateX(18vw) translateY(-3vh) scale(0.56); }
+ 54.16667% {
+ transform: translateX(6vw) translateY(-7vh) scale(0.76); }
+ 58.33333% {
+ transform: translateX(23vw) translateY(47vh) scale(0.65); }
+ 62.5% {
+ transform: translateX(-41vw) translateY(37vh) scale(0.89); }
+ 66.66667% {
+ transform: translateX(-10vw) translateY(39vh) scale(0.69); }
+ 70.83333% {
+ transform: translateX(41vw) translateY(6vh) scale(0.98); }
+ 75% {
+ transform: translateX(-25vw) translateY(-38vh) scale(0.84); }
+ 79.16667% {
+ transform: translateX(22vw) translateY(9vh) scale(0.99); }
+ 83.33333% {
+ transform: translateX(-29vw) translateY(13vh) scale(0.53); }
+ 87.5% {
+ transform: translateX(-9vw) translateY(41vh) scale(0.44); }
+ 91.66667% {
+ transform: translateX(8vw) translateY(-34vh) scale(0.97); }
+ 95.83333% {
+ transform: translateX(-33vw) translateY(43vh) scale(0.51); }
+ 100% {
+ transform: translateX(-6vw) translateY(19vh) scale(0.79); } }
+
+.firefly:nth-child(15) {
+ animation-name: move15; }
+.firefly:nth-child(15)::before {
+ animation-duration: 12s; }
+.firefly:nth-child(15)::after {
+ animation-duration: 12s, 7167ms;
+ animation-delay: 0ms, 1358ms; }
+
+@keyframes move15 {
+ 0% {
+ transform: translateX(15vw) translateY(-45vh) scale(0.69); }
+ 4.34783% {
+ transform: translateX(15vw) translateY(-2vh) scale(0.88); }
+ 8.69565% {
+ transform: translateX(-12vw) translateY(3vh) scale(0.93); }
+ 13.04348% {
+ transform: translateX(-32vw) translateY(-32vh) scale(0.73); }
+ 17.3913% {
+ transform: translateX(-39vw) translateY(39vh) scale(0.61); }
+ 21.73913% {
+ transform: translateX(-13vw) translateY(-42vh) scale(0.29); }
+ 26.08696% {
+ transform: translateX(-25vw) translateY(-41vh) scale(0.86); }
+ 30.43478% {
+ transform: translateX(-37vw) translateY(-25vh) scale(0.93); }
+ 34.78261% {
+ transform: translateX(16vw) translateY(-16vh) scale(0.59); }
+ 39.13043% {
+ transform: translateX(-29vw) translateY(-17vh) scale(0.72); }
+ 43.47826% {
+ transform: translateX(13vw) translateY(32vh) scale(0.75); }
+ 47.82609% {
+ transform: translateX(-26vw) translateY(34vh) scale(0.51); }
+ 52.17391% {
+ transform: translateX(-24vw) translateY(-19vh) scale(0.71); }
+ 56.52174% {
+ transform: translateX(-48vw) translateY(29vh) scale(0.43); }
+ 60.86957% {
+ transform: translateX(9vw) translateY(40vh) scale(0.4); }
+ 65.21739% {
+ transform: translateX(-30vw) translateY(50vh) scale(0.73); }
+ 69.56522% {
+ transform: translateX(49vw) translateY(7vh) scale(0.57); }
+ 73.91304% {
+ transform: translateX(-14vw) translateY(-33vh) scale(0.97); }
+ 78.26087% {
+ transform: translateX(44vw) translateY(14vh) scale(1); }
+ 82.6087% {
+ transform: translateX(-15vw) translateY(33vh) scale(0.29); }
+ 86.95652% {
+ transform: translateX(-28vw) translateY(21vh) scale(0.67); }
+ 91.30435% {
+ transform: translateX(-14vw) translateY(-44vh) scale(0.45); }
+ 95.65217% {
+ transform: translateX(11vw) translateY(-48vh) scale(0.95); }
+ 100% {
+ transform: translateX(37vw) translateY(-7vh) scale(0.79); } }
+
+@keyframes drift {
+ 0% {
+ transform: rotate(0deg); }
+ 100% {
+ transform: rotate(360deg); } }
+
+@keyframes flash {
+ 0%, 30%, 100% {
+ opacity: 0;
+ box-shadow: 0 0 0vw 0vw yellow; }
+ 5% {
+ opacity: 1;
+ box-shadow: 0 0 2vw 0.4vw yellow; } }
+
+
+.right-sidebar{
+ width: 260px;
+ height: 100%;
+ max-height: 100%;
+ position: fixed;
+ overflow: scroll;
+ overflow-x: hidden;
+ top: 0;
+ right: -300px;
+ z-index: 2;
+ text-align:center;
+ padding:10px;
+ background: #000000;
+ box-shadow: 0 16px 38px -12px rgba(0,0,0,.56), 0 4px 25px 0 rgba(0,0,0,.12), 0 8px 10px -5px rgba(0,0,0,.2);
+ -webkit-transition: all .3s ease;
+ -moz-transition: all .3s ease;
+ -ms-transition: all .3s ease;
+ -o-transition: all .3s ease;
+ transition: all .3s ease;
+}
+
+.switcher-icon{
+ width: 40px;
+ height: 40px;
+ line-height:40px;
+ background: #000;
+ text-align:center;
+ font-size:22px;
+ color:#fff;
+ cursor: pointer;
+ display: inline-block;
+ box-shadow: 0 16px 38px -12px rgba(0,0,0,.56), 0 4px 25px 0 rgba(0,0,0,.12), 0 8px 10px -5px rgba(0,0,0,.2);
+ position: fixed;
+ right: 0;
+ top: 15rem;
+ border-top-left-radius: .25rem;
+ border-bottom-left-radius: .25rem;
+ -webkit-transition: all .3s ease;
+ -moz-transition: all .3s ease;
+ -ms-transition: all .3s ease;
+ -o-transition: all .3s ease;
+ transition: all .3s ease;
+}
+
+.right-sidebar.right-toggled{
+ right: 0px;
+}
+.right-sidebar.right-toggled .switcher-icon{
+ right: 260px;
+}
+
+.bg-theme{
+ background-size: 100% 100%;
+ background-attachment: fixed;
+ background-position: center;
+ background-repeat: no-repeat;
+ transition: background .3s;
+}
+
+.switcher {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ overflow: hidden;
+ margin-left: 20px;
+}
+.switcher li {
+
+ float: right;
+
+ width: 55px;
+
+ height: 55px;
+
+ margin: 0 0px 15px 15px;
+
+ border-radius: 10px;
+
+ border: 0px solid black;
+
+}
+
+
+#theme1 {
+ background-image: url(../images/bg-themes/1.png) !important;
+ background-size: 100% 100%;
+ background-position: center;
+ transition: background .3s;
+}
+#theme2 {
+ background-image: url(../images/bg-themes/2.png);
+ background-size: 100% 100%;
+ background-position: center;
+ transition: background .3s;
+}
+#theme3 {
+ background-image: url(../images/bg-themes/3.png);
+ background-size: 100% 100%;
+ background-position: center;
+ transition: background .3s;
+}
+#theme4 {
+ background-image: url(../images/bg-themes/4.png);
+ background-size: 100% 100%;
+ background-position: center;
+ transition: background .3s;
+}
+#theme5 {
+ background-image: url(../images/bg-themes/5.png);
+ background-size: 100% 100%;
+ background-position: center;
+ transition: background .3s;
+}
+#theme6 {
+ background-image: url(../images/bg-themes/6.png);
+ background-size: 100% 100%;
+ background-position: center;
+ transition: background .3s;
+}
+#theme7 {
+ background-image: linear-gradient(45deg, #0c675e, #069e90);
+ background-size: 100% 100%;
+ background-position: center;
+ transition: background .3s;
+}
+#theme8 {
+ background-image: linear-gradient(567deg, rgba(165, 42, 4, 0.89), rgba(113, 102, 8, 0.89), rgba(13, 95, 16, 0.93), rgba(4, 79, 88, 0.94), rgba(19, 56, 86, 0.9), rgba(24, 32, 78, 0.94), rgba(100, 8, 115, 0.95));
+ background-size: 100% 100%;
+ background-position: center;
+ transition: background .3s;
+}
+#theme9 {
+ background-image: linear-gradient(45deg, #29323c, #485563);
+ background-size: 100% 100%;
+ background-position: center;
+ transition: background .3s;
+}
+#theme10 {
+ background-image: linear-gradient(45deg, #795548, #945c48);
+ background-size: 100% 100%;
+ background-position: center;
+ transition: background .3s;
+}
+#theme11 {
+ background-image: linear-gradient(45deg, #1565C0, #1E88E5);
+ background-size: 100% 100%;
+ background-position: center;
+ transition: background .3s;
+}
+#theme12 {
+ background-image: linear-gradient(45deg, #65379b, #886aea);
+ background-size: 100% 100%;
+ background-position: center;
+ transition: background .3s;
+}
+
+#theme13 {
+ background-image: linear-gradient(180deg, #ff5447, #f1076f);
+ background-size: 100% 100%;
+ background-position: center;
+ transition: background .3s;
+}
+
+#theme14 {
+ background-image: linear-gradient(180deg, #08a50e, #69bb03);
+ background-size: 100% 100%;
+ background-position: center;
+ transition: background .3s;
+}
+
+
+
+
+body.bg-theme1 {
+ background-image: url(../images/bg-themes/1.png) !important;
+}
+body.bg-theme2 {
+ background-image: url(../images/bg-themes/2.png);
+}
+body.bg-theme3 {
+ background-image: url(../images/bg-themes/3.png);
+}
+body.bg-theme4 {
+ background-image: url(../images/bg-themes/4.png);
+}
+body.bg-theme5 {
+ background-image: url(../images/bg-themes/5.png);
+}
+body.bg-theme6 {
+ background-image: url(../images/bg-themes/6.png);
+}
+body.bg-theme7 {
+ background-image: linear-gradient(45deg, #0c675e, #069e90);
+}
+body.bg-theme8 {
+ background-image: linear-gradient(567deg, rgba(165, 42, 4, 0.89), rgba(113, 102, 8, 0.89), rgba(13, 95, 16, 0.93), rgba(4, 79, 88, 0.94), rgba(19, 56, 86, 0.9), rgba(24, 32, 78, 0.94), rgba(100, 8, 115, 0.95));
+}
+body.bg-theme9 {
+ background-image: linear-gradient(45deg, #29323c, #485563);
+}
+body.bg-theme10 {
+ background-image: linear-gradient(45deg, #795548, #945c48);
+}
+body.bg-theme11 {
+ background-image: linear-gradient(45deg, #1565C0, #1E88E5);
+}
+body.bg-theme12 {
+ background-image: linear-gradient(45deg, #65379b, #886aea);
+}
+body.bg-theme13 {
+ background-image: linear-gradient(180deg, #ff5447, #f1076f);
+}
+body.bg-theme14 {
+ background-image: linear-gradient(180deg, #08a50e, #69bb03);
+}
+
diff --git a/assets/images/bg-themes/1.png b/assets/images/bg-themes/1.png
new file mode 100644
index 0000000..713dff4
Binary files /dev/null and b/assets/images/bg-themes/1.png differ
diff --git a/assets/images/bg-themes/2.png b/assets/images/bg-themes/2.png
new file mode 100644
index 0000000..f14e482
Binary files /dev/null and b/assets/images/bg-themes/2.png differ
diff --git a/assets/images/bg-themes/3.png b/assets/images/bg-themes/3.png
new file mode 100644
index 0000000..0d1eda9
Binary files /dev/null and b/assets/images/bg-themes/3.png differ
diff --git a/assets/images/bg-themes/4.png b/assets/images/bg-themes/4.png
new file mode 100644
index 0000000..0267986
Binary files /dev/null and b/assets/images/bg-themes/4.png differ
diff --git a/assets/images/bg-themes/5.png b/assets/images/bg-themes/5.png
new file mode 100644
index 0000000..6c03500
Binary files /dev/null and b/assets/images/bg-themes/5.png differ
diff --git a/assets/images/bg-themes/6.png b/assets/images/bg-themes/6.png
new file mode 100644
index 0000000..de58939
Binary files /dev/null and b/assets/images/bg-themes/6.png differ
diff --git a/assets/images/favicon.ico b/assets/images/favicon.ico
new file mode 100644
index 0000000..77f6b7d
Binary files /dev/null and b/assets/images/favicon.ico differ
diff --git a/assets/images/gallery/cd-icon-navigation.svg b/assets/images/gallery/cd-icon-navigation.svg
new file mode 100644
index 0000000..c44d894
--- /dev/null
+++ b/assets/images/gallery/cd-icon-navigation.svg
@@ -0,0 +1,50 @@
+
+
+
+
diff --git a/assets/images/logo-icon.png b/assets/images/logo-icon.png
new file mode 100644
index 0000000..2ba1df2
Binary files /dev/null and b/assets/images/logo-icon.png differ
diff --git a/assets/images/timeline/angular-icon.svg b/assets/images/timeline/angular-icon.svg
new file mode 100644
index 0000000..09c59e9
--- /dev/null
+++ b/assets/images/timeline/angular-icon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/images/timeline/bootstrap-4.svg b/assets/images/timeline/bootstrap-4.svg
new file mode 100644
index 0000000..025da4e
--- /dev/null
+++ b/assets/images/timeline/bootstrap-4.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/images/timeline/cd-arrow.svg b/assets/images/timeline/cd-arrow.svg
new file mode 100644
index 0000000..a97feff
--- /dev/null
+++ b/assets/images/timeline/cd-arrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/images/timeline/cd-icon-location.svg b/assets/images/timeline/cd-icon-location.svg
new file mode 100644
index 0000000..934e0e4
--- /dev/null
+++ b/assets/images/timeline/cd-icon-location.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/assets/images/timeline/cd-icon-movie.svg b/assets/images/timeline/cd-icon-movie.svg
new file mode 100644
index 0000000..71de0a0
--- /dev/null
+++ b/assets/images/timeline/cd-icon-movie.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/assets/images/timeline/cd-icon-picture.svg b/assets/images/timeline/cd-icon-picture.svg
new file mode 100644
index 0000000..3fef3df
--- /dev/null
+++ b/assets/images/timeline/cd-icon-picture.svg
@@ -0,0 +1,5 @@
+
\ No newline at end of file
diff --git a/assets/images/timeline/css-3.svg b/assets/images/timeline/css-3.svg
new file mode 100644
index 0000000..8beb43f
--- /dev/null
+++ b/assets/images/timeline/css-3.svg
@@ -0,0 +1,39 @@
+
+
+
diff --git a/assets/images/timeline/html5.svg b/assets/images/timeline/html5.svg
new file mode 100644
index 0000000..1808427
--- /dev/null
+++ b/assets/images/timeline/html5.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/images/timeline/react.svg b/assets/images/timeline/react.svg
new file mode 100644
index 0000000..f95e632
--- /dev/null
+++ b/assets/images/timeline/react.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/index.js b/index.js
index 72c3d42..0172c33 100644
--- a/index.js
+++ b/index.js
@@ -7,7 +7,7 @@ const fs = require("fs");
const fetch = require('node-fetch');
const chalk = require("chalk");
const axios = require("axios");
-const arciotext = require('./stuff/arciotext')
+const arciotext = require('./sec/arciotext')
global.Buffer = global.Buffer || require('buffer').Buffer;
if (typeof btoa === 'undefined') {
@@ -385,4 +385,11 @@ function getCookie(req, cname) {
console.log(chalk.white("+ | ✅ "));
+// Load the addons files.
+let addons = fs.readdirSync('./addons').filter(file => file.endsWith('.js'));
+
+addons.forEach(file => {
+ let addons = require(`./addons/${file}`);
+ addons.load(app, db);
+});
\ No newline at end of file
diff --git a/package.json b/package.json
index 6d17d79..f8096d6 100644
--- a/package.json
+++ b/package.json
@@ -24,7 +24,9 @@
"node-cache": "^5.1.2",
"node-fetch": "^2.6.6",
"nodemon": "^2.0.15",
+ "path": "^0.12.7",
"paypal-rest-sdk": "^1.8.1",
+ "pterosocket": "^1.0.6",
"textflow.js": "^0.1.4",
"warn": "^1.0.1"
},
diff --git a/stuff/arciotext.js b/sec/arciotext.js
similarity index 100%
rename from stuff/arciotext.js
rename to sec/arciotext.js
diff --git a/themes/default/components/footer.ejs b/themes/default/components/footer.ejs
index 7e2324b..73def0a 100644
--- a/themes/default/components/footer.ejs
+++ b/themes/default/components/footer.ejs
@@ -1,4 +1,4 @@
-