VERO: Initialer Import

This commit is contained in:
root 2026-03-04 10:12:09 +01:00
commit 6f74852605
4551 changed files with 639442 additions and 0 deletions

201
DB_SCHEMA.sql Normal file
View File

@ -0,0 +1,201 @@
-- MySQL dump 10.15 Distrib 10.0.36-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: VERO
-- ------------------------------------------------------
-- Server version 10.0.36-MariaDB-0ubuntu0.16.04.1
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
DROP DATABASE IF EXISTS VERO;
CREATE DATABASE VERO;
USE VERO;
--
-- Table structure for table `BibliographicData`
--
DROP TABLE IF EXISTS `BibliographicData`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `BibliographicData` (
`biblioId` int(11) NOT NULL COMMENT 'ID',
`biblioUserId` int(11) NOT NULL,
`biblioTitle` varchar(255) NOT NULL COMMENT 'Hauptsachtitel',
`biblioFirstAuthor` varchar(255) NOT NULL COMMENT '1. Autor',
`biblioOccurrence` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Vorgangsnummer',
`biblioIdStatus` int(11) NOT NULL COMMENT 'Link zum Status',
`biblioData` text NOT NULL COMMENT 'bibliographische Daten',
PRIMARY KEY (`biblioId`),
KEY `biblioTitle` (`biblioTitle`),
KEY `biblioOccurance` (`biblioOccurrence`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `BibliographicData`
--
LOCK TABLES `BibliographicData` WRITE;
/*!40000 ALTER TABLE `BibliographicData` DISABLE KEYS */;
/*!40000 ALTER TABLE `BibliographicData` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Document`
--
DROP TABLE IF EXISTS `Document`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `Document` (
`documentId` int(11) NOT NULL AUTO_INCREMENT,
`BibliographicData_biblioId` int(11) NOT NULL,
`documentIdOccurance` int(11) NOT NULL,
`documentType` varchar(16) DEFAULT NULL,
`documentContent` mediumtext,
PRIMARY KEY (`documentId`),
KEY `idOccurance` (`documentIdOccurance`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Document`
--
LOCK TABLES `Document` WRITE;
/*!40000 ALTER TABLE `Document` DISABLE KEYS */;
/*!40000 ALTER TABLE `Document` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Mail`
--
DROP TABLE IF EXISTS `Mail`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `Mail` (
`MailId` int(11) NOT NULL,
`mailOccurance` int(11) NOT NULL,
`mailSent` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`mailContent` text,
`BibliographicData_biblioId` int(11) NOT NULL,
PRIMARY KEY (`MailId`,`BibliographicData_biblioId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Mail`
--
LOCK TABLES `Mail` WRITE;
/*!40000 ALTER TABLE `Mail` DISABLE KEYS */;
/*!40000 ALTER TABLE `Mail` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Status`
--
DROP TABLE IF EXISTS `Status`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `Status` (
`statusID` int(11) NOT NULL AUTO_INCREMENT,
`statusOccurance` int(11) NOT NULL,
`statusLastUpdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`statusCode` int(11) DEFAULT NULL,
`statusValue` varchar(255) DEFAULT NULL,
PRIMARY KEY (`statusID`),
KEY `statusOccurance` (`statusID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Status`
--
LOCK TABLES `Status` WRITE;
/*!40000 ALTER TABLE `Status` DISABLE KEYS */;
/*!40000 ALTER TABLE `Status` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `User`
--
DROP TABLE IF EXISTS `User`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `User` (
`userId` int(10) unsigned NOT NULL AUTO_INCREMENT,
`userPassword` varchar(255) NOT NULL,
`userTitle` varchar(32) DEFAULT NULL,
`userLastName` varchar(255) NOT NULL,
`userFirstName` varchar(255) NOT NULL,
`userEmail` varchar(255) NOT NULL,
`userStatus` smallint(6) DEFAULT NULL,
`userLastActivity` timestamp NULL DEFAULT NULL,
`userToken` varchar(255) DEFAULT NULL,
UNIQUE KEY `userId` (`userId`),
KEY `userName` (`userLastName`,`userFirstName`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=75 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `User`
--
LOCK TABLES `User` WRITE;
/*!40000 ALTER TABLE `User` DISABLE KEYS */;
INSERT INTO `User` VALUES (25,'$2y$12$sgcOO8gmCsgKVE4i1McfyumDAc5iqXjrqFvwR1T6ywnJ4IwjgyNVe','','Woll','Christian','woll@bibb.de',0,'2025-06-27 07:58:44',''),(30,'$2y$12$/HfDgxSsGgpfsSein8NyKOszJd9RzpBXfih5/SK875ZM9QlrWoKDO','','Savi','Annemarie','annemarie.savi@bibb.de',0,'2025-06-30 11:03:16',''),(33,'$2y$10$QUM.e.vAlVOmTcp1PPANM.tUSOhFj4krlYhDU9YmQwCedD8KzQ9ua','','Zeuner','Philipp','Zeuner@bibb.de',0,'2025-11-17 13:36:53',''),(37,'$2y$12$n75hOgjLDG6hSiwdE4kIee7KRya87FmuHeaGioX5pZUh2JDFnRGIu','','Nolden','Julia','nolden@bibb.de',0,'2025-11-26 10:48:55',''),(41,'$2y$12$sRvkgrl2mxYVt9i8mTCNYeC5W5jJA3D1QEZNwi4FxD8qxBqqZpski','','Taufenbach','Kerstin','taufenbach@bibb.de',0,'2025-07-18 10:50:46',''),(44,'$2y$10$5AIL1l7TccUzNjQBiFGWJO4OeO7g640gLF537HK44dS0vitJSTFoK','','Keck','Roland','roland.keck@conlicom.de',0,'2025-11-13 06:48:11',''),(51,'$2y$10$ne.8rcknmFMIuG4MSAp78O8Ahqct28JNlOEOokcTopIUJRkANZgxy','','Offerhaus','Judith','judith.offerhaus@bibb.de',0,'2025-08-18 14:09:39',''),(52,'$2y$10$5NMmcUfzCtV9bjZ7ongMTuAaR.xqYiMkBIjJ02AyBC7kC31430Pva','','Adrian','René','rene.adrian@bibb.de',0,'2025-08-18 14:35:26',''),(53,'$2y$10$FyzmAmt7KG.Myrymltgs3O4jmmoFhsjQ5MszD3xRnOEAd8tBdEbpO','','Ganz','Kathrin','kathrin.ganz@fu-berlin.de',0,'2025-08-19 08:06:14',''),(54,'$2y$10$BX0XHkY/hbVrr7z6xji9K.Ms3pScIYxDJYhPlVxGItPD9Zj/iVvIO','','Linder','Dennis','dennis.linder@bibb.de',0,'2025-08-21 11:09:15',''),(56,'$2y$10$WUUh82pZak7cM4ltEBKBReSjEiPXQUUd/vlPt.n7NshntEFNQ.mlG','','Weiland','Jan','j.weiland@zbw.eu',0,'2025-08-22 07:38:11',''),(57,'$2y$10$RJmKOJB7MSPRbtTVitzMNuPVGfEpHIR5wmssFLvEaXEamnLTmWXDW','','Müller-Wegner','Max','max.mueller@bibb.de',0,'2025-08-22 12:40:57',''),(58,'$2y$10$Pa4hj758OEajqv4ijEyYq.j4vVjevFnvMqG0rKweUvL2izo6E2a7e','','Materna','Thomas','materna@bibb.de',0,'2025-08-22 15:35:11',''),(59,'$2y$10$WR3hxRvIb.5kWHwrDWnJhODu.bsUecYocwXBQShBEwGvIUVu6iX7q','','Winkler','Antje','winkler@bibb.de',0,'2025-11-26 15:41:52',''),(62,'$2y$10$4ElTcMUsURkwXAdbQihbjeEqx.i8lldSwqUYEBBENdvf8pDV9KDaa','','Schambeck','Arne','schambeck@bibb.de',0,'2025-09-02 09:22:53',''),(63,'$2y$10$4Ykw5q1I8wDgJyYTQ0hubepV2woRZHVvMSfGbkeJnwaE1CJz5Ci1q','','Rüsing','Karin Maria','ruesing@bibb.de',0,'2025-09-11 10:17:03',''),(64,'$2y$10$SAn1NDfETiblx3ZTOR8N7uGlqvxHTam3gq.yZarKDasN35Bh7ZaWK','','Gerhards','Lea','leg@leibniz-psychology.org',0,'2025-09-15 09:58:41',''),(65,'$2y$10$B3U3SjVEGjIHOE2jTT9qTeomTEbXHvauWagMdVYCoiox9YAel5izK','','Langenkamp','Karin','langenkamp@bibb.de',0,'2025-09-15 13:01:13',''),(66,'$2y$10$gpBc6.p8Vkq34EnczDiJBuwbcoJgIV7Eivap.Mb0lbXoPIoucYYx2','','Göckede','Benno','benno.goeckede@uni-koeln.de',0,'2025-09-19 07:46:22',''),(67,'$2y$10$pZFgYQDdBq6szhl.XwF0Mehw8HotQuvOUIWoR55RpF/JxGbFXUa6G','','Woll','Christian','christian.woll@gmx.de',0,'2025-09-29 12:58:08',''),(68,'$2y$10$/GI4JtqQOsB7561xSGAtfO2NKnvzy9uJTwc8tCknpkgX0U07WE7t.','','Thole','Christine','christiane.thole@t-online.de',0,'2025-10-01 17:30:18',''),(69,'$2y$10$31O9u2eoFaWnAy4uLryJ5OB.ZsquPRHdGYtpNTDzjEU0s2TSREkHG','','Scharlach','Matthias','post@extro-company.de',0,'2025-10-14 09:46:38',''),(70,'$2y$10$pOIP2YlmLaumO8zvNawN7OTQrY96EGbsrmfp/93utr1TcjDNMCF1a','','Holzer','Julia Teresa','julia.t.holzer@gmail.com',0,'2025-10-20 18:43:12',''),(71,'$2y$10$sGdXoi6kE1pri9gsMJ/jluniVP7Ky2ayemzNfQC.jdV.Yx3f9B8Nq','','Grotluschen','Anke','anke.grotlueschen@uni-hamburg.de',0,'2025-11-18 13:09:29',''),(72,'$2y$10$9qA2Cu79GvO1pA.ocRvaFef9176ilEGH4Opul0yEon/wrCZx9IzOu','','Wittmann','Eveline','eveline.wittmann@tum.de',0,'2025-11-19 11:13:52',''),(73,'$2y$10$dyBxPG2QaSABs60OOKaan.y99LjXD4YVnp3Z3i6fM9WEBagFw753a','','Winkler','Antje','winkler@web.de',99,'2025-11-19 20:18:38','b68d965b4cfc396013f6ec359b05549b62ba0b78f172a0020ce0f84e23b5e6bb'),(74,'$2y$10$ByaoZb3JJL9WpIQbJtdyYuDZxl9XBsou2vHWN.18ZPUuxP8XqL8xW','','Bunschoten','Michelle Celine','michelle.bunschoten@neustart.kom-bildung.de',0,'2025-11-24 08:48:01','');
/*!40000 ALTER TABLE `User` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `additionalDocuments`
--
DROP TABLE IF EXISTS `additionalDocuments`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `additionalDocuments` (
`documentId` int(11) NOT NULL AUTO_INCREMENT,
`documentIdOccurance` int(11) NOT NULL,
`documentType` varchar(16) NOT NULL,
`documentContent` mediumtext,
`BibliographicData_biblioId` int(11) NOT NULL,
PRIMARY KEY (`documentId`),
KEY `idOccurance` (`documentIdOccurance`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `additionalDocuments`
--
LOCK TABLES `additionalDocuments` WRITE;
/*!40000 ALTER TABLE `additionalDocuments` DISABLE KEYS */;
/*!40000 ALTER TABLE `additionalDocuments` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2025-11-28 7:12:12

View File

@ -0,0 +1,374 @@
<?php
session_start();
// Konfiguration
define('DOMAINS_FILE', 'localdomains.conf');
define('USERNAME', 'admin');
define('PASSWORD', 'password123'); // In Produktion sollte dies gehasht werden!
// Hilfsfunktionen
function isLoggedIn() {
return isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true;
}
function validateDomain($domain) {
// Domain-Validierung
$domain = trim($domain);
if (empty($domain)) {
return false;
}
// Basis-Validierung für Domain-Format
return filter_var($domain, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME) !== false;
}
function loadDomains() {
if (!file_exists(DOMAINS_FILE)) {
return [];
}
$domains = file(DOMAINS_FILE, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
return array_filter(array_map('trim', $domains));
}
function saveDomains($domains) {
// Alphabetische Sortierung vor dem Speichern
sort($domains, SORT_STRING | SORT_FLAG_CASE);
exec ('touch disposable_email_blocklist.conf -d "-2 hours" disposable_email_blocklist.conf 2>&1',$output, $retval);
return file_put_contents(DOMAINS_FILE, implode("\n", $domains) . "\n");
}
function addDomain($domain) {
if (!validateDomain($domain)) {
return false;
}
$domains = loadDomains();
if (in_array($domain, $domains)) {
return false; // Domain bereits vorhanden
}
$domains[] = $domain;
return saveDomains($domains);
}
function deleteDomain($domain) {
$domains = loadDomains();
$domains = array_filter($domains, function($d) use ($domain) {
return $d !== $domain;
});
return saveDomains($domains);
}
function updateDomain($oldDomain, $newDomain) {
if (!validateDomain($newDomain)) {
return false;
}
$domains = loadDomains();
$key = array_search($oldDomain, $domains);
if ($key !== false) {
$domains[$key] = $newDomain;
return saveDomains($domains);
}
return false;
}
// Request-Verarbeitung
$message = '';
$error = '';
// Login-Verarbeitung
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) {
switch ($_POST['action']) {
case 'login':
if ($_POST['username'] === USERNAME && $_POST['password'] === PASSWORD) {
$_SESSION['logged_in'] = true;
$message = 'Erfolgreich angemeldet!';
} else {
$error = 'Ungültige Anmeldedaten!';
}
break;
case 'logout':
session_destroy();
header('Location: ' . $_SERVER['PHP_SELF']);
exit;
break;
case 'add':
if (isLoggedIn()) {
$domain = trim($_POST['domain']);
if (addDomain($domain)) {
$message = "Domain '$domain' wurde erfolgreich hinzugefügt!";
} else {
$error = "Fehler beim Hinzufügen der Domain '$domain'. Möglicherweise ungültig oder bereits vorhanden.";
}
}
break;
case 'delete':
if (isLoggedIn() && isset($_POST['domain'])) {
$domain = $_POST['domain'];
if (deleteDomain($domain)) {
$message = "Domain '$domain' wurde erfolgreich gelöscht!";
} else {
$error = "Fehler beim Löschen der Domain '$domain'.";
}
}
break;
case 'update':
if (isLoggedIn() && isset($_POST['old_domain']) && isset($_POST['new_domain'])) {
$oldDomain = $_POST['old_domain'];
$newDomain = trim($_POST['new_domain']);
if (updateDomain($oldDomain, $newDomain)) {
$message = "Domain wurde erfolgreich von '$oldDomain' zu '$newDomain' geändert!";
} else {
$error = "Fehler beim Aktualisieren der Domain. Neue Domain möglicherweise ungültig.";
}
}
break;
}
}
$domains = isLoggedIn() ? loadDomains() : [];
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lokale Blocklist</title>
<style>
body {
font-family: Arial, sans-serif;
max-width: 800px;
margin: 0 auto;
padding: 20px;
background-color: #f5f5f5;
}
.container {
background: white;
padding: 30px;
border-radius: 10px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
h1 {
color: #333;
text-align: center;
margin-bottom: 30px;
}
.form-group {
margin-bottom: 15px;
}
label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
input[type="text"], input[type="password"] {
width: 100%;
padding: 10px;
border: 1px solid #ddd;
border-radius: 5px;
box-sizing: border-box;
}
button {
background: #007cba;
color: white;
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
margin-right: 10px;
}
button:hover {
background: #005a87;
}
button.danger {
background: #dc3545;
}
button.danger:hover {
background: #c82333;
}
.message {
padding: 10px;
margin: 10px 0;
border-radius: 5px;
}
.success {
background: #d4edda;
color: #155724;
border: 1px solid #c3e6cb;
}
.error {
background: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
}
.domain-list {
margin-top: 30px;
}
.domain-item {
background: #f8f9fa;
padding: 15px;
margin: 10px 0;
border-radius: 5px;
border: 1px solid #dee2e6;
display: flex;
justify-content: space-between;
align-items: center;
}
.domain-name {
font-family: monospace;
font-size: 16px;
}
.actions {
display: flex;
gap: 10px;
}
.edit-form {
display: none;
}
.stats {
background: #e9ecef;
padding: 10px;
border-radius: 5px;
margin: 20px 0;
}
.logout-btn {
float: right;
}
</style>
</head>
<body>
<div class="container">
<h1>Lokale Blocklist bearbeiten</h1>
<?php if ($message): ?>
<div class="message success"><?= htmlspecialchars($message) ?></div>
<?php endif; ?>
<?php if ($error): ?>
<div class="message error"><?= htmlspecialchars($error) ?></div>
<?php endif; ?>
<?php if (!isLoggedIn()): ?>
<!-- Login-Formular -->
<form method="POST">
<input type="hidden" name="action" value="login">
<div class="form-group">
<label for="username">Benutzername:</label>
<input type="text" id="username" name="username" required>
</div>
<div class="form-group">
<label for="password">Passwort:</label>
<input type="password" id="password" name="password" required>
</div>
<button type="submit">Anmelden</button>
</form>
<div class="message" style="margin-top: 20px; background: #cce5ff;">
<strong>Demo-Zugangsdaten:</strong><br>
Benutzername: admin<br>
Passwort: password123
</div>
<?php else: ?>
<!-- Logout-Button -->
<form method="POST" style="display: inline;">
<input type="hidden" name="action" value="logout">
<button type="submit" class="logout-btn">Abmelden</button>
</form>
<div style="clear: both;"></div>
<!-- Statistiken -->
<div class="stats">
<strong>Statistiken:</strong> <?= count($domains) ?> Domains verwaltet
</div>
<!-- Domain hinzufügen -->
<h2>Neue Domain hinzufügen</h2>
<form method="POST">
<input type="hidden" name="action" value="add">
<div class="form-group">
<label for="domain">Domain:</label>
<input type="text" id="domain" name="domain" placeholder="z.B. example.com" required>
</div>
<button type="submit">Domain hinzufügen</button>
</form>
<!-- Domain-Liste -->
<div class="domain-list">
<h2>Verwaltete Domains (<?= count($domains) ?>)</h2>
<?php if (empty($domains)): ?>
<p>Keine Domains vorhanden. Fügen Sie eine Domain hinzu, um zu beginnen.</p>
<?php else: ?>
<?php foreach ($domains as $domain): ?>
<div class="domain-item">
<span class="domain-name"><?= htmlspecialchars($domain) ?></span>
<div class="actions">
<button onclick="showEditForm('<?= htmlspecialchars($domain) ?>')">Bearbeiten</button>
<form method="POST" style="display: inline;" onsubmit="return confirm('Domain \'<?= htmlspecialchars($domain) ?>\' wirklich löschen?')">
<input type="hidden" name="action" value="delete">
<input type="hidden" name="domain" value="<?= htmlspecialchars($domain) ?>">
<button type="submit" class="danger">Löschen</button>
</form>
</div>
</div>
<!-- Bearbeitungsformular (versteckt) -->
<div id="edit-<?= htmlspecialchars($domain) ?>" class="edit-form">
<form method="POST" style="margin-top: 10px;">
<input type="hidden" name="action" value="update">
<input type="hidden" name="old_domain" value="<?= htmlspecialchars($domain) ?>">
<div class="form-group">
<label>Domain bearbeiten:</label>
<input type="text" name="new_domain" value="<?= htmlspecialchars($domain) ?>" required>
</div>
<button type="submit">Speichern</button>
<button type="button" onclick="hideEditForm('<?= htmlspecialchars($domain) ?>')">Abbrechen</button>
</form>
</div>
<?php endforeach; ?>
<?php endif; ?>
</div>
<?php endif; ?>
</div>
<script>
function showEditForm(domain) {
document.getElementById('edit-' + domain).style.display = 'block';
}
function hideEditForm(domain) {
document.getElementById('edit-' + domain).style.display = 'none';
}
</script>
</body>
</html>

View File

@ -0,0 +1,19 @@
<?php
// Hole MX-Record
getmxrr("web.de", $mx_records, $mx_weight);
$mxs = [];
// In Array schreiben
for($i=0;$i<count($mx_records);$i++){
$mxs[$mx_records[$i]] = $mx_weight[$i];
}
if (!$mxs) {
return false;
} else {
return true;
}
?>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,2 @@
123.com
huber.de

View File

@ -0,0 +1,247 @@
<?php
// ===========================================
// FUNKTIONEN FÜR DISPOSABLE EMAIL CHECK
// ===========================================
function is_disposable_email($email, $blocklist_path = null) {
// Standard-Pfad zur lokalen Blocklist-Datei
if (!$blocklist_path) {
$blocklist_path = __DIR__ . '/disposable_email_blocklist.conf';
}
// E-Mail-Format prüfen
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
return false;
}
// Lade die Blocklist falls nötig
if (!file_exists($blocklist_path)) {
download_blocklist($blocklist_path);
}
// Lese alle Domains aus der Datei
$disposable_domains = file($blocklist_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
// Extrahiere Domain aus der E-Mail-Adresse
$email_parts = explode('@', trim($email));
if (count($email_parts) != 2) {
return false;
}
$domain = strtolower($email_parts[1]);
// echo $domain ."\n";
// Prüfe ob Domain in der Liste steht
$ret = in_array($domain, $disposable_domains);
// echo "in_array: " .$ret ."<br>" ;
// Check, ob für Domain (mindestens) ein MX-Record existiert
if ($ret === false ) {
// MX-Record(s) abholen
getmxrr($domain, $mx_records, $mx_weight);
$mxs =[];
// Array zusammenstellen für Sortierung
for($i=0;$i<count($mx_records);$i++){
$mxs[$mx_records[$i]] = $mx_weight[$i];
}
// Sortieren
$records = [];
if (count($mxs) > 0) {
asort ($mxs);
// Erforderliche Daten stehen im Key => nach Array "records" schreiben
$records = array_keys($mxs);
}
if (count($records) == 0) {
$ret = true;
}
}
return ($ret);
}
function download_blocklist($file_path) {
// Alternative Liste: $url = 'https://raw.githubusercontent.com/disposable-email-domains/disposable-email-domains/main/disposable_email_blocklist.conf';
$url = 'https://raw.githubusercontent.com/disposable/disposable-email-domains/master/domains.txt';
echo "Lade Blocklist herunter...\n";
$content = file_get_contents($url);
if ($content === false) {
die("FEHLER: Konnte Blocklist nicht herunterladen von: $url\n");
}
// Zusätzliche lokale Liste der nicht zugelassenen Domains
$localContent = '';
if (file_exists(__DIR__ . '/localdomains.conf')) {
$localContent = file_get_contents(__DIR__ ."/localdomains.conf");
}
// Listen kombinieren
$content = $content ."\n" .$localContent;
if (file_put_contents($file_path, $content) === false) {
die("FEHLER: Konnte Blocklist nicht speichern: $file_path\n");
}
echo "Blocklist erfolgreich heruntergeladen: $file_path\n";
}
function update_blocklist_if_needed($blocklist_path = null, $max_age_hours = 1) {
if (!$blocklist_path) {
$blocklist_path = __DIR__ . '/disposable_email_blocklist.conf';
}
// Prüfe ob Datei existiert und wie alt sie ist
if (!file_exists($blocklist_path)) {
download_blocklist($blocklist_path);
return true;
}
$file_age = time() - filemtime($blocklist_path);
$max_age_seconds = $max_age_hours * 3600;
if ($file_age > $max_age_seconds) {
echo "Blocklist ist " . round($file_age / 3600, 1) . " Stunden alt. Aktualisiere...\n";
download_blocklist($blocklist_path);
return true;
}
return false;
}
function filter_disposable_emails($emails, $blocklist_path = null) {
$valid_emails = array();
foreach ($emails as $email) {
if (!is_disposable_email($email, $blocklist_path)) {
$valid_emails[] = $email;
}
}
return $valid_emails;
}
function get_email_domain($email) {
$email_parts = explode('@', trim($email));
return count($email_parts) === 2 ? strtolower($email_parts[1]) : '';
}
function validate_email_form($email) {
// Umfassende Validierung für Formulare
if (empty($email)) {
return array('valid' => false, 'error' => 'E-Mail-Adresse ist erforderlich');
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
return array('valid' => false, 'error' => 'Ungültige E-Mail-Adresse');
}
if (is_disposable_email($email)) {
return array('valid' => false, 'error' => 'Wegwerf-E-Mail-Adressen sind nicht erlaubt');
}
return array('valid' => true, 'error' => null);
}
// ===========================================
// BEISPIELE:
// ===========================================
// Test-E-Mails
$test_emails = array(
'user@gmail.com', // Legitim
'test@mailinator.com', // Disposable
'demo@10minutemail.com', // Disposable
'contact@tempmail.org', // Disposable
'roland.keck@t-onlin.de',
'roland.keck@conlicom.de' // Legitim
);
// Blocklist aktualisieren falls nötig (alle 24h)
$updated = update_blocklist_if_needed();
if ($updated) {
echo "Blocklist wurde aktualisiert.<br>\n";
}
echo "<h3>E-Mail-Validierung:</h3>\n";
foreach ($test_emails as $email) {
if (is_disposable_email($email)) {
echo "❌ BLOCKIERT: $email ist eine Wegwerf-Adresse<br>\n";
} else {
echo "✅ ERLAUBT: $email<br>\n";
}
}
// Bulk-Filterung
//echo "<h3>Gefilterte Liste:</h3>\n";
//$valid_emails = filter_disposable_emails($test_emails);
//echo "Gültige E-Mails: " . implode(', ', $valid_emails) . "<br>\n";
// ===========================================
// FORMULAR-INTEGRATION:
// ===========================================
// In deinem Registrierungsformular:
if (isset($_POST['email'])) {
$email = trim($_POST['email']);
$validation = validate_email_form($email);
if ($validation['valid']) {
echo "✅ E-Mail-Adresse ist gültig: $email<br>\n";
// Hier: Registrierung fortsetzen...
} else {
echo "" . $validation['error'] . "<br>\n";
}
}
?>
<!-- EINFACHES TEST-FORMULAR -->
<form method="post">
<label>E-Mail-Adresse:</label>
<input type="email" name="email" required>
<button type="submit">Prüfen</button>
</form>
<?php
// ===========================================
// WEITERE HILFS-FUNKTIONEN:
// ===========================================
function count_disposable_domains($blocklist_path = null) {
if (!$blocklist_path) {
$blocklist_path = __DIR__ . '/disposable_email_blocklist.conf';
}
if (!file_exists($blocklist_path)) {
return 0;
}
$domains = file($blocklist_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
return count($domains);
}
function show_blocklist_info($blocklist_path = null) {
if (!$blocklist_path) {
$blocklist_path = __DIR__ . '/disposable_email_blocklist.conf';
}
if (file_exists($blocklist_path)) {
$count = count_disposable_domains($blocklist_path);
$age_hours = round((time() - filemtime($blocklist_path)) / 3600, 1);
echo "Blocklist-Info:<br>\n";
echo "- Anzahl Domains: $count<br>\n";
echo "- Alter: $age_hours Stunden<br>\n";
echo "- Datei: $blocklist_path<br>\n";
} else {
echo "Blocklist-Datei existiert noch nicht.<br>\n";
}
}
// Zeige Info über die Blocklist
echo "<h3>Blocklist-Status:</h3>\n";
show_blocklist_info();
?>

231
Upload.php Normal file
View File

@ -0,0 +1,231 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PDF Upload Formular</title>
<style>
body {
font-family: Arial, sans-serif;
max-width: 800px;
margin: 0 auto;
padding: 20px;
background-color: #f5f5f5;
}
.upload-container {
background: white;
padding: 30px;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
h2 {
color: #333;
margin-bottom: 20px;
text-align: center;
}
.upload-item {
display: flex;
align-items: center;
margin-bottom: 15px;
padding: 15px;
border: 1px solid #ddd;
border-radius: 5px;
background-color: #fafafa;
}
.upload-item label {
font-weight: bold;
margin-right: 15px;
min-width: 80px;
color: #555;
}
.file-input {
flex: 1;
margin-right: 15px;
padding: 8px;
border: 1px solid #ccc;
border-radius: 4px;
background: white;
}
.document-type {
min-width: 180px;
padding: 8px;
border: 1px solid #ccc;
border-radius: 4px;
background: white;
}
.submit-container {
text-align: center;
margin-top: 30px;
}
.submit-btn {
background-color: #007cba;
color: white;
padding: 12px 30px;
border: none;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
transition: background-color 0.3s;
}
.submit-btn:hover {
background-color: #005a87;
}
.add-remove-container {
text-align: center;
margin: 20px 0;
}
.add-btn, .remove-btn {
background-color: #28a745;
color: white;
border: none;
padding: 8px 15px;
margin: 0 5px;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
}
.remove-btn {
background-color: #dc3545;
}
.add-btn:hover {
background-color: #218838;
}
.remove-btn:hover {
background-color: #c82333;
}
.info-text {
text-align: center;
color: #666;
margin-bottom: 20px;
font-style: italic;
}
</style>
</head>
<body>
<div class="upload-container">
<h2>PDF Dokumente hochladen</h2>
<p class="info-text">Laden Sie 1-10 PDF-Dateien hoch und wählen Sie für jede Datei die entsprechende Dokumentenart aus.</p>
<form id="uploadForm" enctype="multipart/form-data">
<div id="uploadItems">
<div class="upload-item">
<label>Datei 1:</label>
<input type="file" name="pdf_file_1" class="file-input" accept=".pdf" required>
<select name="doc_type_1" class="document-type" required>
<option value="">-- Dokumentenart wählen --</option>
<option value="publikation">Publikation</option>
<option value="benotung">Benotung</option>
<option value="andere_nachweise">Andere Nachweise</option>
</select>
</div>
</div>
<div class="add-remove-container">
<button type="button" class="add-btn" onclick="addUploadItem()">+ Weitere Datei hinzufügen</button>
<button type="button" class="remove-btn" onclick="removeUploadItem()">- Letzte Datei entfernen</button>
</div>
<div class="submit-container">
<button type="submit" class="submit-btn">Dateien hochladen</button>
</div>
</form>
</div>
<script>
let fileCount = 1;
const maxFiles = 10;
function addUploadItem() {
if (fileCount >= maxFiles) {
alert('Maximal 10 Dateien können hochgeladen werden.');
return;
}
fileCount++;
const uploadItems = document.getElementById('uploadItems');
const newItem = document.createElement('div');
newItem.className = 'upload-item';
newItem.innerHTML = `
<label>Datei ${fileCount}:</label>
<input type="file" name="pdf_file_${fileCount}" class="file-input" accept=".pdf">
<select name="doc_type_${fileCount}" class="document-type">
<option value="">-- Dokumentenart wählen --</option>
<option value="publikation">Publikation</option>
<option value="benotung">Benotung</option>
<option value="andere_nachweise">Andere Nachweise</option>
</select>
`;
uploadItems.appendChild(newItem);
}
function removeUploadItem() {
if (fileCount <= 1) {
alert('Mindestens eine Datei muss vorhanden sein.');
return;
}
const uploadItems = document.getElementById('uploadItems');
uploadItems.removeChild(uploadItems.lastElementChild);
fileCount--;
}
document.getElementById('uploadForm').addEventListener('submit', function(e) {
e.preventDefault();
// Validierung: Prüfen ob für jede ausgewählte Datei auch eine Dokumentenart gewählt wurde
const fileInputs = document.querySelectorAll('input[type="file"]');
const selectInputs = document.querySelectorAll('select');
let isValid = true;
let hasAtLeastOneFile = false;
for (let i = 0; i < fileInputs.length; i++) {
const fileInput = fileInputs[i];
const selectInput = selectInputs[i];
if (fileInput.files.length > 0) {
hasAtLeastOneFile = true;
if (!selectInput.value) {
alert(`Bitte wählen Sie eine Dokumentenart für Datei ${i + 1} aus.`);
isValid = false;
break;
}
}
}
if (!hasAtLeastOneFile) {
alert('Bitte wählen Sie mindestens eine Datei zum Hochladen aus.');
isValid = false;
}
if (isValid) {
// Hier würden Sie normalerweise die Daten an Ihren Server senden
alert('Formular bereit zum Senden! (In der realen Anwendung würden die Dateien jetzt hochgeladen werden)');
// Beispiel für FormData Erstellung:
const formData = new FormData(this);
console.log('FormData bereit für Upload:', formData);
// Hier könnten Sie eine AJAX-Anfrage machen:
// fetch('upload.php', { method: 'POST', body: formData })
}
});
</script>
</body>
</html>

428
checkContractForm.php Normal file
View File

@ -0,0 +1,428 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>VET Repository - Publikationsvertrag</title>
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
<style>
.hrbibb {
border-top: 2px solid #007bff;
margin: 20px 0;
}
.validation-message {
color: #dc3545;
font-size: 0.875em;
margin-top: 10px;
display: none;
}
.submit-section {
background-color: #f8f9fa;
padding: 20px;
border-radius: 5px;
margin-top: 30px;
}
.invalid-field {
border-color: #dc3545 !important;
box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25) !important;
}
</style>
</head>
<body>
<div class="container mt-4">
<h2>VET Repository - Publikationsvertrag</h2>
<form id="mainForm" novalidate>
<!-- Erstveröffentlichung Open Access -->
<div id="divErstveroeffentlichungOpenAccess" class="ms-3">
<div class="pt-3"></div>
<hr class="hrbibb">
<h5>Erstveröffentlichung Open Access</h5>
<div class="container-fluid">
<div class="col-12">
<div class="row pt-3">
<div class="col-12">
<div class="form-check">
<input class="form-check-input required-field"
type="checkbox"
id="checkBoxBestaetigungCCBY"
name="checkBoxBestaetigungCCBY"
aria-labelledby="checkBoxBestaetigungCCBYLabel">
<label class="form-check-label fw-bold"
id="checkBoxBestaetigungCCBYLabel"
for="checkBoxBestaetigungCCBY">
</label>
Ich bestätige, dass ich die <a href="https://www.bibb.de/dokumente/pdf/Publikationsvertrag_CC_BY-SA.pdf" target='_blank' rel='noopener noreferrer'><span class="fw-bold">Vertragsbedingungen </span></a>verstanden habe und diesen zustimme.
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="form-check">
<input class="form-check-input required-field"
type="checkbox"
id="checkCCBYSA"
name="checkCCBYSA"
aria-labelledby="ccbysaLabel">
<label class="form-check-label fw-bold"
id="ccbysaLabel"
for="checkCCBYSA">
CC BY-SA-Lizenz:
</label>
Ich möchte die Publikation unter der CC BY-SA-Lizenz veröffentlichen.
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Zweitveröffentlichung Open Access -->
<div id="divZweitveroeffentlichungOpenAccess" class="ms-3">
<div class="pt-3"></div>
<hr class="hrbibb">
<h5>Zweitveröffentlichung Open Access</h5>
<div class="container-fluid">
<div class="col-12">
<div class="row pt-3">
<div class="col-12">
<div class="form-check">
<input class="form-check-input required-field"
type="checkbox"
id="checkBoxBestaetigungCCBYV3"
name="checkBoxBestaetigungCCBYV3"
aria-labelledby="checkBoxBestaetigungCCBYV3Label">
<label class="form-check-label fw-bold"
id="checkBoxBestaetigungCCBYV3Label"
for="checkBoxBestaetigungCCBYV3">
</label>
Ich bestätige, dass ich die Publikation im VET Repository zweitveröffentlichen möchte.
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<p class="fw-bold">Wählen Sie die bereits verwendete CC-Lizenz:</p>
<div class="license-group">
<div class="form-check">
<input class="form-check-input"
type="radio"
name="OAlicenseType"
id="OpenAccessCCBY"
value="CC BY">
<label class="form-check-label" for="OpenAccessCCBY">
<a href="http://creativecommons.org/licenses/by/4.0" target='_blank'>CC BY 4.0 (Namensnennung)</a>
</label>
</div>
<div class="form-check">
<input class="form-check-input"
type="radio"
name="OAlicenseType"
id="OpenAccessCCBYSA"
value="CC BY-SA">
<label class="form-check-label" for="OpenAccessCCBYSA">
<a href="http://creativecommons.org/licenses/by-sa/4.0" target='_blank'>CC BY-SA 4.0 (Namensnennung, Weitergabe unter gleichen Bedingungen)</a>
</label>
</div>
<div class="form-check">
<input class="form-check-input"
type="radio"
name="OAlicenseType"
id="OpenAccessCCBYND"
value="CC BY-ND">
<label class="form-check-label" for="OpenAccessCCBYND">
<a href="http://creativecommons.org/licenses/by-nd/4.0" target='_blank'>CC BY-ND 4.0 (Namensnennung, keine Bearbeitung)</a>
</label>
</div>
<div class="form-check">
<input class="form-check-input"
type="radio"
name="OAlicenseType"
id="OpenAccessCCBYNC"
value="CC BY-NC">
<label class="form-check-label" for="OpenAccessCCBYNC">
<a href="http://creativecommons.org/licenses/by-nc/4.0" target='_blank'>CC BY-NC 4.0 (Namensnennung, keine kommerzielle Nutzung)</a>
</label>
</div>
<div class="form-check">
<input class="form-check-input"
type="radio"
name="OAlicenseType"
id="OpenAccessCCBYNCND"
value="CC BY-NC-ND">
<label class="form-check-label" for="OpenAccessCCBYNCND">
<a href="http://creativecommons.org/licenses/by-nc-nd/4.0" target='_blank'>CC BY-NC-ND 4.0 (Namensnennung, keine kommerzielle Nutzung, keine Bearbeitung)</a>
</label>
</div>
<div class="form-check">
<input class="form-check-input"
type="radio"
name="OAlicenseType"
id="OpenAccessCCBYNCSA"
value="CC BY-NC-SA">
<label class="form-check-label" for="OpenAccessCCBYNCSA">
<a href="http://creativecommons.org/licenses/by-nc-sa/4.0" target='_blank'>CC BY-NC-SA 4.0 (Namensnennung, keine kommerzielle Nutzung, Weitergabe unter gleichen Bedingungen)</a>
</label>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Allgemeine Bedingungen -->
<div id="divCommon" class="ms-3">
<div class="pt-3"></div>
<hr class="hrbibb">
<h5>Allgemeine Bedingungen</h5>
<div class="container-fluid">
<div class="col-12">
<div class="row">
<div class="col-12">
<div class="form-check">
<input class="form-check-input required-field"
type="checkbox"
id="checkBoxBerechtigung"
name="checkBoxBerechtigung">
<label class="form-check-label fw-bold" for="checkBoxBerechtigung">
Berechtigung:
</label>
Ich erkläre, dass ich selbst Autor/-in der Publikation bin bzw. als Mitglied eines Autorenteams auch im Namen meiner Mitautoren die Publikation zur Veröffentlichung einreichen darf.
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="form-check">
<input class="form-check-input required-field"
type="checkbox"
id="checkBoxBildrechte"
name="checkBoxBildrechte">
<label class="form-check-label fw-bold" for="checkBoxBildrechte">
Bildrechte:
</label>
Ich bestätige, dass die Rechte für eventuell enthaltene Bilder und Tabellen auch für die Zurverfügungstellung gelten.
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="form-check">
<input class="form-check-input required-field"
type="checkbox"
id="checkBoxHaftung"
name="checkBoxHaftung">
<label class="form-check-label fw-bold" for="checkBoxHaftung">
Haftung/Mitteilungspflicht:
</label>
Ich versichere, dass ich zur Veröffentlichung berechtigt bin und keine Rechte Dritter verletzt werden.
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="form-check">
<input class="form-check-input required-field"
type="checkbox"
id="checkBoxDatenschutz"
name="checkBoxDatenschutz">
<label class="form-check-label fw-bold" for="checkBoxDatenschutz">
Datenschutz:
</label>
Ich willige ein, dass meine Daten für die Veröffentlichung verarbeitet werden dürfen.
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Zusätzliche Felder -->
<div id="erstVeroeffentlichtSection" class="ms-3">
<div class="pt-3"></div>
<hr class="hrbibb">
<div class="row">
<div class="col-3">
<h5>Erstveröffentlicht</h5>
</div>
<div class="col-8">
<textarea rows="2"
id="erstVeroeffentlichtInput"
class="form-control"
placeholder="Bitte geben Sie den Link zum Erstveröffentlichungsort an."
aria-label="erstVeroeffentlicht"></textarea>
</div>
</div>
</div>
<div id="mitteilungSection" class="ms-3">
<div class="row">
<div class="col-3">
<h5>Mitteilung</h5>
</div>
<div class="col-8">
<textarea rows="2"
id="mitteilungInput"
class="form-control"
placeholder="Möchten Sie uns noch etwas mitteilen?"
aria-label="mitteilung"></textarea>
</div>
</div>
</div>
<!-- Submit Section -->
<div class="submit-section">
<div class="validation-message" id="validationMessage">
<strong>Bitte füllen Sie alle erforderlichen Felder aus:</strong>
<ul id="missingFields"></ul>
</div>
<div class="d-flex justify-content-between align-items-center">
<div>
<small class="text-muted">* Alle markierten Felder sind Pflichtfelder</small>
</div>
<div>
<button type="button" id="validateButton" class="btn btn-secondary me-2">Formular prüfen</button>
<button type="submit" id="submitButton" class="btn btn-primary" disabled>Absenden</button>
</div>
</div>
</div>
</form>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/js/bootstrap.bundle.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
const form = document.getElementById('mainForm');
const submitButton = document.getElementById('submitButton');
const validateButton = document.getElementById('validateButton');
const validationMessage = document.getElementById('validationMessage');
const missingFieldsList = document.getElementById('missingFields');
// Definiere erforderliche Felder
const requiredCheckboxes = [
'checkBoxBestaetigungCCBY',
'checkCCBYSA',
'checkBoxBestaetigungCCBYV3',
'checkBoxBerechtigung',
'checkBoxBildrechte',
'checkBoxHaftung',
'checkBoxDatenschutz'
];
const requiredRadioGroups = [
'OAlicenseType'
];
// Validierungsfunktion
function validateForm() {
let isValid = true;
let missingFields = [];
// Entferne vorherige Hervorhebungen
document.querySelectorAll('.invalid-field').forEach(field => {
field.classList.remove('invalid-field');
});
// Prüfe erforderliche Checkboxen
requiredCheckboxes.forEach(checkboxId => {
const checkbox = document.getElementById(checkboxId);
if (checkbox && !checkbox.checked) {
isValid = false;
checkbox.classList.add('invalid-field');
const label = document.querySelector(`label[for="${checkboxId}"]`);
const fieldName = label ? label.textContent.trim() : checkboxId;
missingFields.push(fieldName);
}
});
// Prüfe erforderliche Radio-Button-Gruppen
requiredRadioGroups.forEach(groupName => {
const radios = document.querySelectorAll(`input[name="${groupName}"]`);
const isGroupSelected = Array.from(radios).some(radio => radio.checked);
if (!isGroupSelected) {
isValid = false;
radios.forEach(radio => radio.classList.add('invalid-field'));
missingFields.push('CC-Lizenz Auswahl');
}
});
// Aktualisiere UI basierend auf Validierungsergebnis
if (isValid) {
validationMessage.style.display = 'none';
submitButton.disabled = false;
submitButton.textContent = 'Absenden';
} else {
// Zeige Fehlermeldung
missingFieldsList.innerHTML = '';
missingFields.forEach(field => {
const li = document.createElement('li');
li.textContent = field;
missingFieldsList.appendChild(li);
});
validationMessage.style.display = 'block';
submitButton.disabled = true;
}
return isValid;
}
// Event Listeners für Live-Validierung
document.querySelectorAll('input[type="checkbox"], input[type="radio"]').forEach(input => {
input.addEventListener('change', validateForm);
});
// Validate Button Event
validateButton.addEventListener('click', function() {
const isValid = validateForm();
if (isValid) {
alert('✅ Alle erforderlichen Felder sind ausgefüllt. Sie können das Formular jetzt absenden.');
} else {
// Scroll zu der ersten fehlenden Validierungsmeldung
validationMessage.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
});
// Form Submit Event
form.addEventListener('submit', function(e) {
e.preventDefault();
if (validateForm()) {
// Hier würdest du normalerweise die Daten an den Server senden
alert('✅ Formular erfolgreich abgesendet!');
console.log('Formulardaten:', new FormData(form));
} else {
alert('❌ Bitte füllen Sie alle erforderlichen Felder aus.');
}
});
// Verhindere das Verlassen der Seite bei unvollständigem Formular
window.addEventListener('beforeunload', function(e) {
if (!validateForm()) {
e.preventDefault();
e.returnValue = 'Sie haben noch nicht alle erforderlichen Felder ausgefüllt. Möchten Sie die Seite wirklich verlassen?';
return e.returnValue;
}
});
// Initiale Validierung
validateForm();
});
</script>
</body>
</html>

131
checkDisposableMails.php Normal file
View File

@ -0,0 +1,131 @@
<?php
// ===========================================
// FUNKTIONEN FÜR DISPOSABLE EMAIL CHECK
// ===========================================
function is_disposable_email($email, $blocklist_path = null) {
// Standard-Pfad zur lokalen Blocklist-Datei
if (!$blocklist_path) {
$blocklist_path = __DIR__ . '/disposable_email_blocklist.conf';
}
// Lade die Blocklist falls nötig
if (!file_exists($blocklist_path)) {
download_blocklist($blocklist_path);
}
// Lese alle Domains aus der Datei
$disposable_domains = file($blocklist_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
// Extrahiere Domain aus der E-Mail-Adresse
$email_parts = explode('@', trim($email));
if (count($email_parts) != 2) {
return false;
}
$domain = strtolower($email_parts[1]);
// Prüfe ob Domain in der Liste steht
$ret = in_array($domain, $disposable_domains);
// Check, ob für Domain (mindestens) ein MX-Record existiert
if ($ret === false ) {
// MX-Record(s) abholen
getmxrr($domain, $mx_records, $mx_weight);
$mxs =[];
// Array zusammenstellen für Sortierung
for($i=0;$i<count($mx_records);$i++){
$mxs[$mx_records[$i]] = $mx_weight[$i];
}
if (count($mxs) == 0)
return true;
}
return false ;
}
function download_blocklist($file_path) {
// Alternative Liste: $url = 'https://raw.githubusercontent.com/disposable-email-domains/disposable-email-domains/main/disposable_email_blocklist.conf';
$url = 'https://raw.githubusercontent.com/disposable/disposable-email-domains/master/domains.txt';
// echo "Lade Blocklist herunter...\n";
$content = file_get_contents($url);
if ($content === false) {
die("FEHLER: Konnte Blocklist nicht herunterladen von: $url\n");
}
// Zusätzliche lokale Liste der nicht zugelassenen Domains
$localContent = '';
if (file_exists(__DIR__ . '/localdomains.conf')) {
$localContent = file_get_contents(__DIR__ ."/localdomains.conf");
}
// Listen kombinieren
$content = $content ."\n" .$localContent;
if (file_put_contents($file_path, $content) === false) {
die("FEHLER: Konnte Blocklist nicht speichern: $file_path\n");
}
}
function update_blocklist_if_needed($blocklist_path = null, $max_age_hours = 1) {
if (!$blocklist_path) {
$blocklist_path = __DIR__ . '/disposable_email_blocklist.conf';
}
// Prüfe ob Datei existiert und wie alt sie ist
if (!file_exists($blocklist_path)) {
download_blocklist($blocklist_path);
return true;
}
$file_age = time() - filemtime($blocklist_path);
$max_age_seconds = $max_age_hours * 3600;
if ($file_age > $max_age_seconds) {
download_blocklist($blocklist_path);
return true;
}
return false;
}
function filter_disposable_emails($emails, $blocklist_path = null) {
$valid_emails = array();
foreach ($emails as $email) {
if (!is_disposable_email($email, $blocklist_path)) {
$valid_emails[] = $email;
}
}
return $valid_emails;
}
function get_email_domain($email) {
$email_parts = explode('@', trim($email));
return count($email_parts) === 2 ? strtolower($email_parts[1]) : '';
}
function validate_email_form($email) {
// Blocklist aktualisieren falls nötig (jede Stunde)
$updated = update_blocklist_if_needed();
if (is_disposable_email($email)) {
// echo "Wegwerfadresse\n";
return false;
}
// echo "Adresse gültig\n";
return true;
}
// Zum Testen
// validate_email_form("roland.keck@webxxx.de");
?>

187
checkModal.php Normal file
View File

@ -0,0 +1,187 @@
<?php
header('Content-Type: text/html; charset=utf-8');
// Arrays dekodieren
$bibliographicArray = json_decode($_POST['bibliographicArray'] ?? '[]', true);
$identificatorArray = json_decode($_POST['identificatorArray'] ?? '[]', true);
$typeArray = json_decode($_POST['typeArray'] ?? '[]', true);
$subjectArray = json_decode($_POST['subjectArray'] ?? '[]', true);
$contractArray = json_decode($_POST['contractArray'] ?? '[]', true);
$uploadArray = json_decode($_POST['uploadArray'] ?? '[]', true);
// Arrays zusammenfassen
$dataArrays = [
'Bibliografische Grunddaten' => $bibliographicArray,
'Identifikatoren' => $identificatorArray,
'Dokumenttyp und weitere Daten' => $typeArray,
'Freie Schlagworte' => $subjectArray,
'Vertragssektion' => $contractArray,
'Dateiupload' => $uploadArray
];
// Feldlabel-Funktion
function getFieldLabel($fieldId) {
include "include/summaryLabels.php" ;
return $labels[$fieldId] ?? $fieldId;
}
?>
<!-- CSS-Styles einbetten -->
<style>
/* Modal-Body Breite anpassen */
.modal-body {
width: 100% !important;
max-width: none !important;
min-width: 650px !important;
padding: 20px !important;
overflow-x: visible !important;
box-sizing: border-box !important;
}
/* Modal-Dialog entsprechend anpassen */
.modal-dialog {
max-width: 800px !important;
width: 90% !important;
margin: 1.75rem auto !important;
}
/* Modal-Content sicherstellen */
.modal-content {
width: 100% !important;
min-width: 650px !important;
box-sizing: border-box !important;
}
.field-container {
display: grid;
grid-template-columns: 150px 550px;
gap: 15px;
align-items: center;
padding: 15px;
margin-bottom: 15px;
background-color: #f8f9fa;
border-radius: 5px;
border-left: 4px solid #14416b;
width: 100%; /* Volle Breite des Containers nutzen */
/*max-width: 580px; */ /* Maximale Breite begrenzen */
box-sizing: border-box;
}
.field-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
}
.field-id {
font-weight: bold;
color: #495057;
font-size: 14px;
}
.field-value {
text-align: left; /* linksbündig */
justify-self: start; /* bei Grid zusätzlich für horizontale Ausrichtung */
background-color: white;
padding: 10px;
border-radius: 4px;
border: 1px solid #dee2e6;
font-size: 16px;
min-height: 20px;
}
.status-selected {
background-color: #d4edda;
color: #155724;
padding: 2px 8px;
border-radius: 12px;
font-size: 12px;
font-weight: bold;
}
.status-unselected {
background-color: #f8d7da;
color: #721c24;
padding: 2px 8px;
border-radius: 12px;
font-size: 12px;
font-weight: bold;
}
.modal-buttons {
text-align: center;
margin-top: 30px;
padding-top: 20px;
border-top: 1px solid #dee2e6;
}
.btn-correct {
background-color: #44910d;
color: white;
padding: 8px 15px;
border: none;
border-radius: 3px;
cursor: pointer;
margin: 0;
font-weight: bold;
font-size: 14px;
}
.btn-publish {
background-color: #44910d;
color: white;
padding: 8px 15px;
border: none;
border-radius: 3px;
cursor: pointer;
margin: 0;
font-weight: bold;
font-size: 14px;
}
.btn-publish,.btn-correct :hover{
border-color:#014701
}
</style>
<!-- Formatierungslogik in PHP -->
<h4 style="text-align: center;">Zusammenfassung</h4>
<?php foreach ($dataArrays as $sectionName => $sectionData): ?>
<?php if (!empty($sectionData)): ?>
<h5 style="margin-top: 10px; margin-bottom: 10px; border-bottom: 2px solid #14416b; padding-bottom: 5px;">
<?= htmlspecialchars($sectionName) ?>
</h5>
<?php foreach ($sectionData as $field): ?>
<?php if(strncmp("uploadHiddenItem", $field['fieldId'], strlen("uploadHiddenItem")) != 0): ?>
<div class="field-container">
<div class="field-header">
<div class="field-id"><?= htmlspecialchars(getFieldLabel($field['fieldId'])) ?></div>
<!--
<div class="<?//= $field['isSelected'] ? 'status-selected' : 'status-unselected' ?>">
<?// = $field['isSelected'] ? 'Ausgewählt' : 'Nicht ausgewählt' ?>
</div>
-->
</div>
<div class="field-value"><?= htmlspecialchars($field['fieldValue'] ?: '(Leer)') ?></div>
</div>
<?php endif; ?>
<?php endforeach; ?>
<?php endif; ?>
<?php endforeach; ?>
<div class="button-container">
<button class="btn-publish secondary" id="closeModalButton" onclick="closeModal()">Eingaben korrigieren</button>
<button class="btn-publish" id="sendFinalMailsButton" onclick="finishPublication(); sendFinalMails();">Publikation abschließen</button>
</div>

620
components/blockUI/blockUI.js Executable file
View File

@ -0,0 +1,620 @@
/*!
* jQuery blockUI plugin
* Version 2.70.0-2014.11.23
* Requires jQuery v1.7 or later
*
* Examples at: http://malsup.com/jquery/block/
* Copyright (c) 2007-2013 M. Alsup
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
* Thanks to Amir-Hossein Sobhi for some excellent contributions!
*/
;(function() {
/*jshint eqeqeq:false curly:false latedef:false */
"use strict";
function setup($) {
$.fn._fadeIn = $.fn.fadeIn;
var noOp = $.noop || function() {};
// this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle
// confusing userAgent strings on Vista)
var msie = /MSIE/.test(navigator.userAgent);
var ie6 = /MSIE 6.0/.test(navigator.userAgent) && ! /MSIE 8.0/.test(navigator.userAgent);
var mode = document.documentMode || 0;
var setExpr = $.isFunction( document.createElement('div').style.setExpression );
// global $ methods for blocking/unblocking the entire page
$.blockUI = function(opts) { install(window, opts); };
$.unblockUI = function(opts) { remove(window, opts); };
// convenience method for quick growl-like notifications (http://www.google.com/search?q=growl)
$.growlUI = function(title, message, timeout, onClose) {
var $m = $('<div class="growlUI"></div>');
if (title) $m.append('<h1>'+title+'</h1>');
if (message) $m.append('<h2>'+message+'</h2>');
if (timeout === undefined) timeout = 3000;
// Added by konapun: Set timeout to 30 seconds if this growl is moused over, like normal toast notifications
var callBlock = function(opts) {
opts = opts || {};
$.blockUI({
message: $m,
fadeIn : typeof opts.fadeIn !== 'undefined' ? opts.fadeIn : 700,
fadeOut: typeof opts.fadeOut !== 'undefined' ? opts.fadeOut : 1000,
timeout: typeof opts.timeout !== 'undefined' ? opts.timeout : timeout,
centerY: false,
showOverlay: false,
onUnblock: onClose,
css: $.blockUI.defaults.growlCSS
});
};
callBlock();
var nonmousedOpacity = $m.css('opacity');
$m.mouseover(function() {
callBlock({
fadeIn: 0,
timeout: 30000
});
var displayBlock = $('.blockMsg');
displayBlock.stop(); // cancel fadeout if it has started
displayBlock.fadeTo(300, 1); // make it easier to read the message by removing transparency
}).mouseout(function() {
$('.blockMsg').fadeOut(1000);
});
// End konapun additions
};
// plugin method for blocking element content
$.fn.block = function(opts) {
if ( this[0] === window ) {
$.blockUI( opts );
return this;
}
var fullOpts = $.extend({}, $.blockUI.defaults, opts || {});
this.each(function() {
var $el = $(this);
if (fullOpts.ignoreIfBlocked && $el.data('blockUI.isBlocked'))
return;
$el.unblock({ fadeOut: 0 });
});
return this.each(function() {
if ($.css(this,'position') == 'static') {
this.style.position = 'relative';
$(this).data('blockUI.static', true);
}
this.style.zoom = 1; // force 'hasLayout' in ie
install(this, opts);
});
};
// plugin method for unblocking element content
$.fn.unblock = function(opts) {
if ( this[0] === window ) {
$.unblockUI( opts );
return this;
}
return this.each(function() {
remove(this, opts);
});
};
$.blockUI.version = 2.70; // 2nd generation blocking at no extra cost!
// override these in your code to change the default behavior and style
$.blockUI.defaults = {
// message displayed when blocking (use null for no message)
message: '<h1>Please wait...</h1>',
title: null, // title string; only used when theme == true
draggable: true, // only used when theme == true (requires jquery-ui.js to be loaded)
theme: false, // set to true to use with jQuery UI themes
// styles for the message when blocking; if you wish to disable
// these and use an external stylesheet then do this in your code:
// $.blockUI.defaults.css = {};
css: {
padding: 0,
margin: 0,
width: '30%',
top: '40%',
left: '35%',
textAlign: 'center',
color: '#000',
border: '3px solid #aaa',
backgroundColor:'#fff',
cursor: 'wait'
},
// minimal style set used when themes are used
themedCSS: {
width: '30%',
top: '40%',
left: '35%'
},
// styles for the overlay
overlayCSS: {
backgroundColor: '#000',
opacity: 0.6,
cursor: 'wait'
},
// style to replace wait cursor before unblocking to correct issue
// of lingering wait cursor
cursorReset: 'default',
// styles applied when using $.growlUI
growlCSS: {
width: '350px',
top: '10px',
left: '',
right: '10px',
border: 'none',
padding: '5px',
opacity: 0.6,
cursor: 'default',
color: '#fff',
backgroundColor: '#000',
'-webkit-border-radius':'10px',
'-moz-border-radius': '10px',
'border-radius': '10px'
},
// IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w
// (hat tip to Jorge H. N. de Vasconcelos)
/*jshint scripturl:true */
iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank',
// force usage of iframe in non-IE browsers (handy for blocking applets)
forceIframe: false,
// z-index for the blocking overlay
baseZ: 1000,
// set these to true to have the message automatically centered
centerX: true, // <-- only effects element blocking (page block controlled via css above)
centerY: true,
// allow body element to be stetched in ie6; this makes blocking look better
// on "short" pages. disable if you wish to prevent changes to the body height
allowBodyStretch: true,
// enable if you want key and mouse events to be disabled for content that is blocked
bindEvents: true,
// be default blockUI will supress tab navigation from leaving blocking content
// (if bindEvents is true)
constrainTabKey: true,
// fadeIn time in millis; set to 0 to disable fadeIn on block
fadeIn: 200,
// fadeOut time in millis; set to 0 to disable fadeOut on unblock
fadeOut: 400,
// time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock
timeout: 0,
// disable if you don't want to show the overlay
showOverlay: true,
// if true, focus will be placed in the first available input field when
// page blocking
focusInput: true,
// elements that can receive focus
focusableElements: ':input:enabled:visible',
// suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)
// no longer needed in 2012
// applyPlatformOpacityRules: true,
// callback method invoked when fadeIn has completed and blocking message is visible
onBlock: null,
// callback method invoked when unblocking has completed; the callback is
// passed the element that has been unblocked (which is the window object for page
// blocks) and the options that were passed to the unblock call:
// onUnblock(element, options)
onUnblock: null,
// callback method invoked when the overlay area is clicked.
// setting this will turn the cursor to a pointer, otherwise cursor defined in overlayCss will be used.
onOverlayClick: null,
// don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493
quirksmodeOffsetHack: 4,
// class name of the message block
blockMsgClass: 'blockMsg',
// if it is already blocked, then ignore it (don't unblock and reblock)
ignoreIfBlocked: false
};
// private data and functions follow...
var pageBlock = null;
var pageBlockEls = [];
function install(el, opts) {
var css, themedCSS;
var full = (el == window);
var msg = (opts && opts.message !== undefined ? opts.message : undefined);
opts = $.extend({}, $.blockUI.defaults, opts || {});
if (opts.ignoreIfBlocked && $(el).data('blockUI.isBlocked'))
return;
opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});
css = $.extend({}, $.blockUI.defaults.css, opts.css || {});
if (opts.onOverlayClick)
opts.overlayCSS.cursor = 'pointer';
themedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {});
msg = msg === undefined ? opts.message : msg;
// remove the current block (if there is one)
if (full && pageBlock)
remove(window, {fadeOut:0});
// if an existing element is being used as the blocking content then we capture
// its current place in the DOM (and current display style) so we can restore
// it when we unblock
if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {
var node = msg.jquery ? msg[0] : msg;
var data = {};
$(el).data('blockUI.history', data);
data.el = node;
data.parent = node.parentNode;
data.display = node.style.display;
data.position = node.style.position;
if (data.parent)
data.parent.removeChild(node);
}
$(el).data('blockUI.onUnblock', opts.onUnblock);
var z = opts.baseZ;
// blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;
// layer1 is the iframe layer which is used to supress bleed through of underlying content
// layer2 is the overlay layer which has opacity and a wait cursor (by default)
// layer3 is the message content that is displayed while blocking
var lyr1, lyr2, lyr3, s;
if (msie || opts.forceIframe)
lyr1 = $('<iframe class="blockUI" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="'+opts.iframeSrc+'"></iframe>');
else
lyr1 = $('<div class="blockUI" style="display:none"></div>');
if (opts.theme)
lyr2 = $('<div class="blockUI blockOverlay ui-widget-overlay" style="z-index:'+ (z++) +';display:none"></div>');
else
lyr2 = $('<div class="blockUI blockOverlay" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>');
if (opts.theme && full) {
s = '<div class="blockUI ' + opts.blockMsgClass + ' blockPage ui-dialog ui-widget ui-corner-all" style="z-index:'+(z+10)+';display:none;position:fixed">';
if ( opts.title ) {
s += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(opts.title || '&nbsp;')+'</div>';
}
s += '<div class="ui-widget-content ui-dialog-content"></div>';
s += '</div>';
}
else if (opts.theme) {
s = '<div class="blockUI ' + opts.blockMsgClass + ' blockElement ui-dialog ui-widget ui-corner-all" style="z-index:'+(z+10)+';display:none;position:absolute">';
if ( opts.title ) {
s += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(opts.title || '&nbsp;')+'</div>';
}
s += '<div class="ui-widget-content ui-dialog-content"></div>';
s += '</div>';
}
else if (full) {
s = '<div class="blockUI ' + opts.blockMsgClass + ' blockPage" style="z-index:'+(z+10)+';display:none;position:fixed"></div>';
}
else {
s = '<div class="blockUI ' + opts.blockMsgClass + ' blockElement" style="z-index:'+(z+10)+';display:none;position:absolute"></div>';
}
lyr3 = $(s);
// if we have a message, style it
if (msg) {
if (opts.theme) {
lyr3.css(themedCSS);
lyr3.addClass('ui-widget-content');
}
else
lyr3.css(css);
}
// style the overlay
if (!opts.theme /*&& (!opts.applyPlatformOpacityRules)*/)
lyr2.css(opts.overlayCSS);
lyr2.css('position', full ? 'fixed' : 'absolute');
// make iframe layer transparent in IE
if (msie || opts.forceIframe)
lyr1.css('opacity',0.0);
//$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);
var layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el);
$.each(layers, function() {
this.appendTo($par);
});
if (opts.theme && opts.draggable && $.fn.draggable) {
lyr3.draggable({
handle: '.ui-dialog-titlebar',
cancel: 'li'
});
}
// ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)
var expr = setExpr && (!$.support.boxModel || $('object,embed', full ? null : el).length > 0);
if (ie6 || expr) {
// give body 100% height
if (full && opts.allowBodyStretch && $.support.boxModel)
$('html,body').css('height','100%');
// fix ie6 issue when blocked element has a border width
if ((ie6 || !$.support.boxModel) && !full) {
var t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');
var fixT = t ? '(0 - '+t+')' : 0;
var fixL = l ? '(0 - '+l+')' : 0;
}
// simulate fixed position
$.each(layers, function(i,o) {
var s = o[0].style;
s.position = 'absolute';
if (i < 2) {
if (full)
s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:'+opts.quirksmodeOffsetHack+') + "px"');
else
s.setExpression('height','this.parentNode.offsetHeight + "px"');
if (full)
s.setExpression('width','jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"');
else
s.setExpression('width','this.parentNode.offsetWidth + "px"');
if (fixL) s.setExpression('left', fixL);
if (fixT) s.setExpression('top', fixT);
}
else if (opts.centerY) {
if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"');
s.marginTop = 0;
}
else if (!opts.centerY && full) {
var top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0;
var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + "px"';
s.setExpression('top',expression);
}
});
}
// show the message
if (msg) {
if (opts.theme)
lyr3.find('.ui-widget-content').append(msg);
else
lyr3.append(msg);
if (msg.jquery || msg.nodeType)
$(msg).show();
}
if ((msie || opts.forceIframe) && opts.showOverlay)
lyr1.show(); // opacity is zero
if (opts.fadeIn) {
var cb = opts.onBlock ? opts.onBlock : noOp;
var cb1 = (opts.showOverlay && !msg) ? cb : noOp;
var cb2 = msg ? cb : noOp;
if (opts.showOverlay)
lyr2._fadeIn(opts.fadeIn, cb1);
if (msg)
lyr3._fadeIn(opts.fadeIn, cb2);
}
else {
if (opts.showOverlay)
lyr2.show();
if (msg)
lyr3.show();
if (opts.onBlock)
opts.onBlock.bind(lyr3)();
}
// bind key and mouse events
bind(1, el, opts);
if (full) {
pageBlock = lyr3[0];
pageBlockEls = $(opts.focusableElements,pageBlock);
if (opts.focusInput)
setTimeout(focus, 20);
}
else
center(lyr3[0], opts.centerX, opts.centerY);
if (opts.timeout) {
// auto-unblock
var to = setTimeout(function() {
if (full)
$.unblockUI(opts);
else
$(el).unblock(opts);
}, opts.timeout);
$(el).data('blockUI.timeout', to);
}
}
// remove the block
function remove(el, opts) {
var count;
var full = (el == window);
var $el = $(el);
var data = $el.data('blockUI.history');
var to = $el.data('blockUI.timeout');
if (to) {
clearTimeout(to);
$el.removeData('blockUI.timeout');
}
opts = $.extend({}, $.blockUI.defaults, opts || {});
bind(0, el, opts); // unbind events
if (opts.onUnblock === null) {
opts.onUnblock = $el.data('blockUI.onUnblock');
$el.removeData('blockUI.onUnblock');
}
var els;
if (full) // crazy selector to handle odd field errors in ie6/7
els = $('body').children().filter('.blockUI').add('body > .blockUI');
else
els = $el.find('>.blockUI');
// fix cursor issue
if ( opts.cursorReset ) {
if ( els.length > 1 )
els[1].style.cursor = opts.cursorReset;
if ( els.length > 2 )
els[2].style.cursor = opts.cursorReset;
}
if (full)
pageBlock = pageBlockEls = null;
if (opts.fadeOut) {
count = els.length;
els.stop().fadeOut(opts.fadeOut, function() {
if ( --count === 0)
reset(els,data,opts,el);
});
}
else
reset(els, data, opts, el);
}
// move blocking element back into the DOM where it started
function reset(els,data,opts,el) {
var $el = $(el);
if ( $el.data('blockUI.isBlocked') )
return;
els.each(function(i,o) {
// remove via DOM calls so we don't lose event handlers
if (this.parentNode)
this.parentNode.removeChild(this);
});
if (data && data.el) {
data.el.style.display = data.display;
data.el.style.position = data.position;
data.el.style.cursor = 'default'; // #59
if (data.parent)
data.parent.appendChild(data.el);
$el.removeData('blockUI.history');
}
if ($el.data('blockUI.static')) {
$el.css('position', 'static'); // #22
}
if (typeof opts.onUnblock == 'function')
opts.onUnblock(el,opts);
// fix issue in Safari 6 where block artifacts remain until reflow
var body = $(document.body), w = body.width(), cssW = body[0].style.width;
body.width(w-1).width(w);
body[0].style.width = cssW;
}
// bind/unbind the handler
function bind(b, el, opts) {
var full = el == window, $el = $(el);
// don't bother unbinding if there is nothing to unbind
if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))
return;
$el.data('blockUI.isBlocked', b);
// don't bind events when overlay is not in use or if bindEvents is false
if (!full || !opts.bindEvents || (b && !opts.showOverlay))
return;
// bind anchors and inputs for mouse and key events
var events = 'mousedown mouseup keydown keypress keyup touchstart touchend touchmove';
if (b)
$(document).bind(events, opts, handler);
else
$(document).unbind(events, handler);
// former impl...
// var $e = $('a,:input');
// b ? $e.bind(events, opts, handler) : $e.unbind(events, handler);
}
// event handler to suppress keyboard/mouse events when blocking
function handler(e) {
// allow tab navigation (conditionally)
if (e.type === 'keydown' && e.keyCode && e.keyCode == 9) {
if (pageBlock && e.data.constrainTabKey) {
var els = pageBlockEls;
var fwd = !e.shiftKey && e.target === els[els.length-1];
var back = e.shiftKey && e.target === els[0];
if (fwd || back) {
setTimeout(function(){focus(back);},10);
return false;
}
}
}
var opts = e.data;
var target = $(e.target);
if (target.hasClass('blockOverlay') && opts.onOverlayClick)
opts.onOverlayClick(e);
// allow events within the message content
if (target.parents('div.' + opts.blockMsgClass).length > 0)
return true;
// allow events for content that is not being blocked
return target.parents().children().filter('div.blockUI').length === 0;
}
function focus(back) {
if (!pageBlockEls)
return;
var e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];
if (e)
e.focus();
}
function center(el, x, y) {
var p = el.parentNode, s = el.style;
var l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');
var t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');
if (x) s.left = l > 0 ? (l+'px') : '0';
if (y) s.top = t > 0 ? (t+'px') : '0';
}
function sz(el, p) {
return parseInt($.css(el,p),10)||0;
}
}
/*global define:true */
if (typeof define === 'function' && define.amd && define.amd.jQuery) {
define(['jquery'], setup);
} else {
setup(jQuery);
}
})();

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,597 @@
/*!
* Bootstrap Reboot v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
:root,
[data-bs-theme=light] {
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
--bs-purple: #6f42c1;
--bs-pink: #d63384;
--bs-red: #dc3545;
--bs-orange: #fd7e14;
--bs-yellow: #ffc107;
--bs-green: #198754;
--bs-teal: #20c997;
--bs-cyan: #0dcaf0;
--bs-black: #000;
--bs-white: #fff;
--bs-gray: #6c757d;
--bs-gray-dark: #343a40;
--bs-gray-100: #f8f9fa;
--bs-gray-200: #e9ecef;
--bs-gray-300: #dee2e6;
--bs-gray-400: #ced4da;
--bs-gray-500: #adb5bd;
--bs-gray-600: #6c757d;
--bs-gray-700: #495057;
--bs-gray-800: #343a40;
--bs-gray-900: #212529;
--bs-primary: #0d6efd;
--bs-secondary: #6c757d;
--bs-success: #198754;
--bs-info: #0dcaf0;
--bs-warning: #ffc107;
--bs-danger: #dc3545;
--bs-light: #f8f9fa;
--bs-dark: #212529;
--bs-primary-rgb: 13, 110, 253;
--bs-secondary-rgb: 108, 117, 125;
--bs-success-rgb: 25, 135, 84;
--bs-info-rgb: 13, 202, 240;
--bs-warning-rgb: 255, 193, 7;
--bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41;
--bs-primary-text-emphasis: #052c65;
--bs-secondary-text-emphasis: #2b2f32;
--bs-success-text-emphasis: #0a3622;
--bs-info-text-emphasis: #055160;
--bs-warning-text-emphasis: #664d03;
--bs-danger-text-emphasis: #58151c;
--bs-light-text-emphasis: #495057;
--bs-dark-text-emphasis: #495057;
--bs-primary-bg-subtle: #cfe2ff;
--bs-secondary-bg-subtle: #e2e3e5;
--bs-success-bg-subtle: #d1e7dd;
--bs-info-bg-subtle: #cff4fc;
--bs-warning-bg-subtle: #fff3cd;
--bs-danger-bg-subtle: #f8d7da;
--bs-light-bg-subtle: #fcfcfd;
--bs-dark-bg-subtle: #ced4da;
--bs-primary-border-subtle: #9ec5fe;
--bs-secondary-border-subtle: #c4c8cb;
--bs-success-border-subtle: #a3cfbb;
--bs-info-border-subtle: #9eeaf9;
--bs-warning-border-subtle: #ffe69c;
--bs-danger-border-subtle: #f1aeb5;
--bs-light-border-subtle: #e9ecef;
--bs-dark-border-subtle: #adb5bd;
--bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0;
--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
--bs-body-font-family: var(--bs-font-sans-serif);
--bs-body-font-size: 1rem;
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
--bs-body-color: #212529;
--bs-body-color-rgb: 33, 37, 41;
--bs-body-bg: #fff;
--bs-body-bg-rgb: 255, 255, 255;
--bs-emphasis-color: #000;
--bs-emphasis-color-rgb: 0, 0, 0;
--bs-secondary-color: rgba(33, 37, 41, 0.75);
--bs-secondary-color-rgb: 33, 37, 41;
--bs-secondary-bg: #e9ecef;
--bs-secondary-bg-rgb: 233, 236, 239;
--bs-tertiary-color: rgba(33, 37, 41, 0.5);
--bs-tertiary-color-rgb: 33, 37, 41;
--bs-tertiary-bg: #f8f9fa;
--bs-tertiary-bg-rgb: 248, 249, 250;
--bs-heading-color: inherit;
--bs-link-color: #0d6efd;
--bs-link-color-rgb: 13, 110, 253;
--bs-link-decoration: underline;
--bs-link-hover-color: #0a58ca;
--bs-link-hover-color-rgb: 10, 88, 202;
--bs-code-color: #d63384;
--bs-highlight-color: #212529;
--bs-highlight-bg: #fff3cd;
--bs-border-width: 1px;
--bs-border-style: solid;
--bs-border-color: #dee2e6;
--bs-border-color-translucent: rgba(0, 0, 0, 0.175);
--bs-border-radius: 0.375rem;
--bs-border-radius-sm: 0.25rem;
--bs-border-radius-lg: 0.5rem;
--bs-border-radius-xl: 1rem;
--bs-border-radius-xxl: 2rem;
--bs-border-radius-2xl: var(--bs-border-radius-xxl);
--bs-border-radius-pill: 50rem;
--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);
--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);
--bs-focus-ring-width: 0.25rem;
--bs-focus-ring-opacity: 0.25;
--bs-focus-ring-color: rgba(13, 110, 253, 0.25);
--bs-form-valid-color: #198754;
--bs-form-valid-border-color: #198754;
--bs-form-invalid-color: #dc3545;
--bs-form-invalid-border-color: #dc3545;
}
[data-bs-theme=dark] {
color-scheme: dark;
--bs-body-color: #dee2e6;
--bs-body-color-rgb: 222, 226, 230;
--bs-body-bg: #212529;
--bs-body-bg-rgb: 33, 37, 41;
--bs-emphasis-color: #fff;
--bs-emphasis-color-rgb: 255, 255, 255;
--bs-secondary-color: rgba(222, 226, 230, 0.75);
--bs-secondary-color-rgb: 222, 226, 230;
--bs-secondary-bg: #343a40;
--bs-secondary-bg-rgb: 52, 58, 64;
--bs-tertiary-color: rgba(222, 226, 230, 0.5);
--bs-tertiary-color-rgb: 222, 226, 230;
--bs-tertiary-bg: #2b3035;
--bs-tertiary-bg-rgb: 43, 48, 53;
--bs-primary-text-emphasis: #6ea8fe;
--bs-secondary-text-emphasis: #a7acb1;
--bs-success-text-emphasis: #75b798;
--bs-info-text-emphasis: #6edff6;
--bs-warning-text-emphasis: #ffda6a;
--bs-danger-text-emphasis: #ea868f;
--bs-light-text-emphasis: #f8f9fa;
--bs-dark-text-emphasis: #dee2e6;
--bs-primary-bg-subtle: #031633;
--bs-secondary-bg-subtle: #161719;
--bs-success-bg-subtle: #051b11;
--bs-info-bg-subtle: #032830;
--bs-warning-bg-subtle: #332701;
--bs-danger-bg-subtle: #2c0b0e;
--bs-light-bg-subtle: #343a40;
--bs-dark-bg-subtle: #1a1d20;
--bs-primary-border-subtle: #084298;
--bs-secondary-border-subtle: #41464b;
--bs-success-border-subtle: #0f5132;
--bs-info-border-subtle: #087990;
--bs-warning-border-subtle: #997404;
--bs-danger-border-subtle: #842029;
--bs-light-border-subtle: #495057;
--bs-dark-border-subtle: #343a40;
--bs-heading-color: inherit;
--bs-link-color: #6ea8fe;
--bs-link-hover-color: #8bb9fe;
--bs-link-color-rgb: 110, 168, 254;
--bs-link-hover-color-rgb: 139, 185, 254;
--bs-code-color: #e685b5;
--bs-highlight-color: #dee2e6;
--bs-highlight-bg: #664d03;
--bs-border-color: #495057;
--bs-border-color-translucent: rgba(255, 255, 255, 0.15);
--bs-form-valid-color: #75b798;
--bs-form-valid-border-color: #75b798;
--bs-form-invalid-color: #ea868f;
--bs-form-invalid-border-color: #ea868f;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
@media (prefers-reduced-motion: no-preference) {
:root {
scroll-behavior: smooth;
}
}
body {
margin: 0;
font-family: var(--bs-body-font-family);
font-size: var(--bs-body-font-size);
font-weight: var(--bs-body-font-weight);
line-height: var(--bs-body-line-height);
color: var(--bs-body-color);
text-align: var(--bs-body-text-align);
background-color: var(--bs-body-bg);
-webkit-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
hr {
margin: 1rem 0;
color: inherit;
border: 0;
border-top: var(--bs-border-width) solid;
opacity: 0.25;
}
h6, h5, h4, h3, h2, h1 {
margin-top: 0;
margin-bottom: 0.5rem;
font-weight: 500;
line-height: 1.2;
color: var(--bs-heading-color);
}
h1 {
font-size: calc(1.375rem + 1.5vw);
}
@media (min-width: 1200px) {
h1 {
font-size: 2.5rem;
}
}
h2 {
font-size: calc(1.325rem + 0.9vw);
}
@media (min-width: 1200px) {
h2 {
font-size: 2rem;
}
}
h3 {
font-size: calc(1.3rem + 0.6vw);
}
@media (min-width: 1200px) {
h3 {
font-size: 1.75rem;
}
}
h4 {
font-size: calc(1.275rem + 0.3vw);
}
@media (min-width: 1200px) {
h4 {
font-size: 1.5rem;
}
}
h5 {
font-size: 1.25rem;
}
h6 {
font-size: 1rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title] {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
-webkit-text-decoration-skip-ink: none;
text-decoration-skip-ink: none;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul {
padding-left: 2rem;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: 0.5rem;
margin-left: 0;
}
blockquote {
margin: 0 0 1rem;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 0.875em;
}
mark {
padding: 0.1875em;
color: var(--bs-highlight-color);
background-color: var(--bs-highlight-bg);
}
sub,
sup {
position: relative;
font-size: 0.75em;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
a {
color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));
text-decoration: underline;
}
a:hover {
--bs-link-color-rgb: var(--bs-link-hover-color-rgb);
}
a:not([href]):not([class]), a:not([href]):not([class]):hover {
color: inherit;
text-decoration: none;
}
pre,
code,
kbd,
samp {
font-family: var(--bs-font-monospace);
font-size: 1em;
}
pre {
display: block;
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
font-size: 0.875em;
}
pre code {
font-size: inherit;
color: inherit;
word-break: normal;
}
code {
font-size: 0.875em;
color: var(--bs-code-color);
word-wrap: break-word;
}
a > code {
color: inherit;
}
kbd {
padding: 0.1875rem 0.375rem;
font-size: 0.875em;
color: var(--bs-body-bg);
background-color: var(--bs-body-color);
border-radius: 0.25rem;
}
kbd kbd {
padding: 0;
font-size: 1em;
}
figure {
margin: 0 0 1rem;
}
img,
svg {
vertical-align: middle;
}
table {
caption-side: bottom;
border-collapse: collapse;
}
caption {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
color: var(--bs-secondary-color);
text-align: left;
}
th {
text-align: inherit;
text-align: -webkit-match-parent;
}
thead,
tbody,
tfoot,
tr,
td,
th {
border-color: inherit;
border-style: solid;
border-width: 0;
}
label {
display: inline-block;
}
button {
border-radius: 0;
}
button:focus:not(:focus-visible) {
outline: 0;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
select {
text-transform: none;
}
[role=button] {
cursor: pointer;
}
select {
word-wrap: normal;
}
select:disabled {
opacity: 1;
}
[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {
display: none !important;
}
button,
[type=button],
[type=reset],
[type=submit] {
-webkit-appearance: button;
}
button:not(:disabled),
[type=button]:not(:disabled),
[type=reset]:not(:disabled),
[type=submit]:not(:disabled) {
cursor: pointer;
}
::-moz-focus-inner {
padding: 0;
border-style: none;
}
textarea {
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
float: left;
width: 100%;
padding: 0;
margin-bottom: 0.5rem;
font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
}
@media (min-width: 1200px) {
legend {
font-size: 1.5rem;
}
}
legend + * {
clear: left;
}
::-webkit-datetime-edit-fields-wrapper,
::-webkit-datetime-edit-text,
::-webkit-datetime-edit-minute,
::-webkit-datetime-edit-hour-field,
::-webkit-datetime-edit-day-field,
::-webkit-datetime-edit-month-field,
::-webkit-datetime-edit-year-field {
padding: 0;
}
::-webkit-inner-spin-button {
height: auto;
}
[type=search] {
-webkit-appearance: textfield;
outline-offset: -2px;
}
/* rtl:raw:
[type="tel"],
[type="url"],
[type="email"],
[type="number"] {
direction: ltr;
}
*/
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-color-swatch-wrapper {
padding: 0;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
::file-selector-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
iframe {
border: 0;
}
summary {
display: list-item;
cursor: pointer;
}
progress {
vertical-align: baseline;
}
[hidden] {
display: none !important;
}
/*# sourceMappingURL=bootstrap-reboot.css.map */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,594 @@
/*!
* Bootstrap Reboot v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
:root,
[data-bs-theme=light] {
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
--bs-purple: #6f42c1;
--bs-pink: #d63384;
--bs-red: #dc3545;
--bs-orange: #fd7e14;
--bs-yellow: #ffc107;
--bs-green: #198754;
--bs-teal: #20c997;
--bs-cyan: #0dcaf0;
--bs-black: #000;
--bs-white: #fff;
--bs-gray: #6c757d;
--bs-gray-dark: #343a40;
--bs-gray-100: #f8f9fa;
--bs-gray-200: #e9ecef;
--bs-gray-300: #dee2e6;
--bs-gray-400: #ced4da;
--bs-gray-500: #adb5bd;
--bs-gray-600: #6c757d;
--bs-gray-700: #495057;
--bs-gray-800: #343a40;
--bs-gray-900: #212529;
--bs-primary: #0d6efd;
--bs-secondary: #6c757d;
--bs-success: #198754;
--bs-info: #0dcaf0;
--bs-warning: #ffc107;
--bs-danger: #dc3545;
--bs-light: #f8f9fa;
--bs-dark: #212529;
--bs-primary-rgb: 13, 110, 253;
--bs-secondary-rgb: 108, 117, 125;
--bs-success-rgb: 25, 135, 84;
--bs-info-rgb: 13, 202, 240;
--bs-warning-rgb: 255, 193, 7;
--bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41;
--bs-primary-text-emphasis: #052c65;
--bs-secondary-text-emphasis: #2b2f32;
--bs-success-text-emphasis: #0a3622;
--bs-info-text-emphasis: #055160;
--bs-warning-text-emphasis: #664d03;
--bs-danger-text-emphasis: #58151c;
--bs-light-text-emphasis: #495057;
--bs-dark-text-emphasis: #495057;
--bs-primary-bg-subtle: #cfe2ff;
--bs-secondary-bg-subtle: #e2e3e5;
--bs-success-bg-subtle: #d1e7dd;
--bs-info-bg-subtle: #cff4fc;
--bs-warning-bg-subtle: #fff3cd;
--bs-danger-bg-subtle: #f8d7da;
--bs-light-bg-subtle: #fcfcfd;
--bs-dark-bg-subtle: #ced4da;
--bs-primary-border-subtle: #9ec5fe;
--bs-secondary-border-subtle: #c4c8cb;
--bs-success-border-subtle: #a3cfbb;
--bs-info-border-subtle: #9eeaf9;
--bs-warning-border-subtle: #ffe69c;
--bs-danger-border-subtle: #f1aeb5;
--bs-light-border-subtle: #e9ecef;
--bs-dark-border-subtle: #adb5bd;
--bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0;
--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
--bs-body-font-family: var(--bs-font-sans-serif);
--bs-body-font-size: 1rem;
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
--bs-body-color: #212529;
--bs-body-color-rgb: 33, 37, 41;
--bs-body-bg: #fff;
--bs-body-bg-rgb: 255, 255, 255;
--bs-emphasis-color: #000;
--bs-emphasis-color-rgb: 0, 0, 0;
--bs-secondary-color: rgba(33, 37, 41, 0.75);
--bs-secondary-color-rgb: 33, 37, 41;
--bs-secondary-bg: #e9ecef;
--bs-secondary-bg-rgb: 233, 236, 239;
--bs-tertiary-color: rgba(33, 37, 41, 0.5);
--bs-tertiary-color-rgb: 33, 37, 41;
--bs-tertiary-bg: #f8f9fa;
--bs-tertiary-bg-rgb: 248, 249, 250;
--bs-heading-color: inherit;
--bs-link-color: #0d6efd;
--bs-link-color-rgb: 13, 110, 253;
--bs-link-decoration: underline;
--bs-link-hover-color: #0a58ca;
--bs-link-hover-color-rgb: 10, 88, 202;
--bs-code-color: #d63384;
--bs-highlight-color: #212529;
--bs-highlight-bg: #fff3cd;
--bs-border-width: 1px;
--bs-border-style: solid;
--bs-border-color: #dee2e6;
--bs-border-color-translucent: rgba(0, 0, 0, 0.175);
--bs-border-radius: 0.375rem;
--bs-border-radius-sm: 0.25rem;
--bs-border-radius-lg: 0.5rem;
--bs-border-radius-xl: 1rem;
--bs-border-radius-xxl: 2rem;
--bs-border-radius-2xl: var(--bs-border-radius-xxl);
--bs-border-radius-pill: 50rem;
--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);
--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);
--bs-focus-ring-width: 0.25rem;
--bs-focus-ring-opacity: 0.25;
--bs-focus-ring-color: rgba(13, 110, 253, 0.25);
--bs-form-valid-color: #198754;
--bs-form-valid-border-color: #198754;
--bs-form-invalid-color: #dc3545;
--bs-form-invalid-border-color: #dc3545;
}
[data-bs-theme=dark] {
color-scheme: dark;
--bs-body-color: #dee2e6;
--bs-body-color-rgb: 222, 226, 230;
--bs-body-bg: #212529;
--bs-body-bg-rgb: 33, 37, 41;
--bs-emphasis-color: #fff;
--bs-emphasis-color-rgb: 255, 255, 255;
--bs-secondary-color: rgba(222, 226, 230, 0.75);
--bs-secondary-color-rgb: 222, 226, 230;
--bs-secondary-bg: #343a40;
--bs-secondary-bg-rgb: 52, 58, 64;
--bs-tertiary-color: rgba(222, 226, 230, 0.5);
--bs-tertiary-color-rgb: 222, 226, 230;
--bs-tertiary-bg: #2b3035;
--bs-tertiary-bg-rgb: 43, 48, 53;
--bs-primary-text-emphasis: #6ea8fe;
--bs-secondary-text-emphasis: #a7acb1;
--bs-success-text-emphasis: #75b798;
--bs-info-text-emphasis: #6edff6;
--bs-warning-text-emphasis: #ffda6a;
--bs-danger-text-emphasis: #ea868f;
--bs-light-text-emphasis: #f8f9fa;
--bs-dark-text-emphasis: #dee2e6;
--bs-primary-bg-subtle: #031633;
--bs-secondary-bg-subtle: #161719;
--bs-success-bg-subtle: #051b11;
--bs-info-bg-subtle: #032830;
--bs-warning-bg-subtle: #332701;
--bs-danger-bg-subtle: #2c0b0e;
--bs-light-bg-subtle: #343a40;
--bs-dark-bg-subtle: #1a1d20;
--bs-primary-border-subtle: #084298;
--bs-secondary-border-subtle: #41464b;
--bs-success-border-subtle: #0f5132;
--bs-info-border-subtle: #087990;
--bs-warning-border-subtle: #997404;
--bs-danger-border-subtle: #842029;
--bs-light-border-subtle: #495057;
--bs-dark-border-subtle: #343a40;
--bs-heading-color: inherit;
--bs-link-color: #6ea8fe;
--bs-link-hover-color: #8bb9fe;
--bs-link-color-rgb: 110, 168, 254;
--bs-link-hover-color-rgb: 139, 185, 254;
--bs-code-color: #e685b5;
--bs-highlight-color: #dee2e6;
--bs-highlight-bg: #664d03;
--bs-border-color: #495057;
--bs-border-color-translucent: rgba(255, 255, 255, 0.15);
--bs-form-valid-color: #75b798;
--bs-form-valid-border-color: #75b798;
--bs-form-invalid-color: #ea868f;
--bs-form-invalid-border-color: #ea868f;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
@media (prefers-reduced-motion: no-preference) {
:root {
scroll-behavior: smooth;
}
}
body {
margin: 0;
font-family: var(--bs-body-font-family);
font-size: var(--bs-body-font-size);
font-weight: var(--bs-body-font-weight);
line-height: var(--bs-body-line-height);
color: var(--bs-body-color);
text-align: var(--bs-body-text-align);
background-color: var(--bs-body-bg);
-webkit-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
hr {
margin: 1rem 0;
color: inherit;
border: 0;
border-top: var(--bs-border-width) solid;
opacity: 0.25;
}
h6, h5, h4, h3, h2, h1 {
margin-top: 0;
margin-bottom: 0.5rem;
font-weight: 500;
line-height: 1.2;
color: var(--bs-heading-color);
}
h1 {
font-size: calc(1.375rem + 1.5vw);
}
@media (min-width: 1200px) {
h1 {
font-size: 2.5rem;
}
}
h2 {
font-size: calc(1.325rem + 0.9vw);
}
@media (min-width: 1200px) {
h2 {
font-size: 2rem;
}
}
h3 {
font-size: calc(1.3rem + 0.6vw);
}
@media (min-width: 1200px) {
h3 {
font-size: 1.75rem;
}
}
h4 {
font-size: calc(1.275rem + 0.3vw);
}
@media (min-width: 1200px) {
h4 {
font-size: 1.5rem;
}
}
h5 {
font-size: 1.25rem;
}
h6 {
font-size: 1rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title] {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
-webkit-text-decoration-skip-ink: none;
text-decoration-skip-ink: none;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul {
padding-right: 2rem;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: 0.5rem;
margin-right: 0;
}
blockquote {
margin: 0 0 1rem;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 0.875em;
}
mark {
padding: 0.1875em;
color: var(--bs-highlight-color);
background-color: var(--bs-highlight-bg);
}
sub,
sup {
position: relative;
font-size: 0.75em;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
a {
color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));
text-decoration: underline;
}
a:hover {
--bs-link-color-rgb: var(--bs-link-hover-color-rgb);
}
a:not([href]):not([class]), a:not([href]):not([class]):hover {
color: inherit;
text-decoration: none;
}
pre,
code,
kbd,
samp {
font-family: var(--bs-font-monospace);
font-size: 1em;
}
pre {
display: block;
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
font-size: 0.875em;
}
pre code {
font-size: inherit;
color: inherit;
word-break: normal;
}
code {
font-size: 0.875em;
color: var(--bs-code-color);
word-wrap: break-word;
}
a > code {
color: inherit;
}
kbd {
padding: 0.1875rem 0.375rem;
font-size: 0.875em;
color: var(--bs-body-bg);
background-color: var(--bs-body-color);
border-radius: 0.25rem;
}
kbd kbd {
padding: 0;
font-size: 1em;
}
figure {
margin: 0 0 1rem;
}
img,
svg {
vertical-align: middle;
}
table {
caption-side: bottom;
border-collapse: collapse;
}
caption {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
color: var(--bs-secondary-color);
text-align: right;
}
th {
text-align: inherit;
text-align: -webkit-match-parent;
}
thead,
tbody,
tfoot,
tr,
td,
th {
border-color: inherit;
border-style: solid;
border-width: 0;
}
label {
display: inline-block;
}
button {
border-radius: 0;
}
button:focus:not(:focus-visible) {
outline: 0;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
select {
text-transform: none;
}
[role=button] {
cursor: pointer;
}
select {
word-wrap: normal;
}
select:disabled {
opacity: 1;
}
[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {
display: none !important;
}
button,
[type=button],
[type=reset],
[type=submit] {
-webkit-appearance: button;
}
button:not(:disabled),
[type=button]:not(:disabled),
[type=reset]:not(:disabled),
[type=submit]:not(:disabled) {
cursor: pointer;
}
::-moz-focus-inner {
padding: 0;
border-style: none;
}
textarea {
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
float: right;
width: 100%;
padding: 0;
margin-bottom: 0.5rem;
font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
}
@media (min-width: 1200px) {
legend {
font-size: 1.5rem;
}
}
legend + * {
clear: right;
}
::-webkit-datetime-edit-fields-wrapper,
::-webkit-datetime-edit-text,
::-webkit-datetime-edit-minute,
::-webkit-datetime-edit-hour-field,
::-webkit-datetime-edit-day-field,
::-webkit-datetime-edit-month-field,
::-webkit-datetime-edit-year-field {
padding: 0;
}
::-webkit-inner-spin-button {
height: auto;
}
[type=search] {
-webkit-appearance: textfield;
outline-offset: -2px;
}
[type="tel"],
[type="url"],
[type="email"],
[type="number"] {
direction: ltr;
}
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-color-swatch-wrapper {
padding: 0;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
::file-selector-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
iframe {
border: 0;
}
summary {
display: list-item;
cursor: pointer;
}
progress {
vertical-align: baseline;
}
[hidden] {
display: none !important;
}
/*# sourceMappingURL=bootstrap-reboot.rtl.css.map */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-0-circle-fill" viewBox="0 0 16 16">
<path d="M8 4.951c-1.008 0-1.629 1.09-1.629 2.895v.31c0 1.81.627 2.895 1.629 2.895s1.623-1.09 1.623-2.895v-.31c0-1.8-.621-2.895-1.623-2.895"/>
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-8.012 4.158c1.858 0 2.96-1.582 2.96-3.99V7.84c0-2.426-1.079-3.996-2.936-3.996-1.864 0-2.965 1.588-2.965 3.996v.328c0 2.42 1.09 3.99 2.941 3.99"/>
</svg>

After

Width:  |  Height:  |  Size: 476 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-0-circle" viewBox="0 0 16 16">
<path d="M7.988 12.158c-1.851 0-2.941-1.57-2.941-3.99V7.84c0-2.408 1.101-3.996 2.965-3.996 1.857 0 2.935 1.57 2.935 3.996v.328c0 2.408-1.101 3.99-2.959 3.99M8 4.951c-1.008 0-1.629 1.09-1.629 2.895v.31c0 1.81.627 2.895 1.629 2.895s1.623-1.09 1.623-2.895v-.31c0-1.8-.621-2.895-1.623-2.895"/>
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8"/>
</svg>

After

Width:  |  Height:  |  Size: 507 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-0-square-fill" viewBox="0 0 16 16">
<path d="M8 4.951c-1.008 0-1.629 1.09-1.629 2.895v.31c0 1.81.627 2.895 1.629 2.895s1.623-1.09 1.623-2.895v-.31c0-1.8-.621-2.895-1.623-2.895"/>
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm5.988 12.158c-1.851 0-2.941-1.57-2.941-3.99V7.84c0-2.408 1.101-3.996 2.965-3.996 1.857 0 2.935 1.57 2.935 3.996v.328c0 2.408-1.101 3.99-2.959 3.99"/>
</svg>

After

Width:  |  Height:  |  Size: 514 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-0-square" viewBox="0 0 16 16">
<path d="M7.988 12.158c-1.851 0-2.941-1.57-2.941-3.99V7.84c0-2.408 1.101-3.996 2.965-3.996 1.857 0 2.935 1.57 2.935 3.996v.328c0 2.408-1.101 3.99-2.959 3.99M8 4.951c-1.008 0-1.629 1.09-1.629 2.895v.31c0 1.81.627 2.895 1.629 2.895s1.623-1.09 1.623-2.895v-.31c0-1.8-.621-2.895-1.623-2.895"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1z"/>
</svg>

After

Width:  |  Height:  |  Size: 579 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-1-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M9.283 4.002H7.971L6.072 5.385v1.271l1.834-1.318h.065V12h1.312z"/>
</svg>

After

Width:  |  Height:  |  Size: 250 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-1-circle" viewBox="0 0 16 16">
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8m15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0M9.283 4.002V12H7.971V5.338h-.065L6.072 6.656V5.385l1.899-1.383z"/>
</svg>

After

Width:  |  Height:  |  Size: 279 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-1-square-fill" viewBox="0 0 16 16">
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm7.283 4.002V12H7.971V5.338h-.065L6.072 6.656V5.385l1.899-1.383z"/>
</svg>

After

Width:  |  Height:  |  Size: 286 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-1-square" viewBox="0 0 16 16">
<path d="M9.283 4.002V12H7.971V5.338h-.065L6.072 6.656V5.385l1.899-1.383z"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1z"/>
</svg>

After

Width:  |  Height:  |  Size: 366 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-123" viewBox="0 0 16 16">
<path d="M2.873 11.297V4.142H1.699L0 5.379v1.137l1.64-1.18h.06v5.961zm3.213-5.09v-.063c0-.618.44-1.169 1.196-1.169.676 0 1.174.44 1.174 1.106 0 .624-.42 1.101-.807 1.526L4.99 10.553v.744h4.78v-.99H6.643v-.069L8.41 8.252c.65-.724 1.237-1.332 1.237-2.27C9.646 4.849 8.723 4 7.308 4c-1.573 0-2.36 1.064-2.36 2.15v.057zm6.559 1.883h.786c.823 0 1.374.481 1.379 1.179.01.707-.55 1.216-1.421 1.21-.77-.005-1.326-.419-1.379-.953h-1.095c.042 1.053.938 1.918 2.464 1.918 1.478 0 2.642-.839 2.62-2.144-.02-1.143-.922-1.651-1.551-1.714v-.063c.535-.09 1.347-.66 1.326-1.678-.026-1.053-.933-1.855-2.359-1.845-1.5.005-2.317.88-2.348 1.898h1.116c.032-.498.498-.944 1.206-.944.703 0 1.206.435 1.206 1.07.005.64-.504 1.106-1.2 1.106h-.75z"/>
</svg>

After

Width:  |  Height:  |  Size: 854 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-2-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M6.646 6.24c0-.691.493-1.306 1.336-1.306.756 0 1.313.492 1.313 1.236 0 .697-.469 1.23-.902 1.705l-2.971 3.293V12h5.344v-1.107H7.268v-.077l1.974-2.22.096-.107c.688-.763 1.287-1.428 1.287-2.43 0-1.266-1.031-2.215-2.613-2.215-1.758 0-2.637 1.19-2.637 2.402v.065h1.271v-.07Z"/>
</svg>

After

Width:  |  Height:  |  Size: 457 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-2-circle" viewBox="0 0 16 16">
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8m15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0M6.646 6.24v.07H5.375v-.064c0-1.213.879-2.402 2.637-2.402 1.582 0 2.613.949 2.613 2.215 0 1.002-.6 1.667-1.287 2.43l-.096.107-1.974 2.22v.077h3.498V12H5.422v-.832l2.97-3.293c.434-.475.903-1.008.903-1.705 0-.744-.557-1.236-1.313-1.236-.843 0-1.336.615-1.336 1.306"/>
</svg>

After

Width:  |  Height:  |  Size: 477 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-2-square-fill" viewBox="0 0 16 16">
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm4.646 6.24v.07H5.375v-.064c0-1.213.879-2.402 2.637-2.402 1.582 0 2.613.949 2.613 2.215 0 1.002-.6 1.667-1.287 2.43l-.096.107-1.974 2.22v.077h3.498V12H5.422v-.832l2.97-3.293c.434-.475.903-1.008.903-1.705 0-.744-.557-1.236-1.313-1.236-.843 0-1.336.615-1.336 1.306"/>
</svg>

After

Width:  |  Height:  |  Size: 484 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-2-square" viewBox="0 0 16 16">
<path d="M6.646 6.24v.07H5.375v-.064c0-1.213.879-2.402 2.637-2.402 1.582 0 2.613.949 2.613 2.215 0 1.002-.6 1.667-1.287 2.43l-.096.107-1.974 2.22v.077h3.498V12H5.422v-.832l2.97-3.293c.434-.475.903-1.008.903-1.705 0-.744-.557-1.236-1.313-1.236-.843 0-1.336.615-1.336 1.306"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1z"/>
</svg>

After

Width:  |  Height:  |  Size: 564 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-3-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-8.082.414c.92 0 1.535.54 1.541 1.318.012.791-.615 1.36-1.588 1.354-.861-.006-1.482-.469-1.54-1.066H5.104c.047 1.177 1.05 2.144 2.754 2.144 1.653 0 2.954-.937 2.93-2.396-.023-1.278-1.031-1.846-1.734-1.916v-.07c.597-.1 1.505-.739 1.482-1.876-.03-1.177-1.043-2.074-2.637-2.062-1.675.006-2.59.984-2.625 2.12h1.248c.036-.556.557-1.054 1.348-1.054.785 0 1.348.486 1.348 1.195.006.715-.563 1.237-1.342 1.237h-.838v1.072h.879Z"/>
</svg>

After

Width:  |  Height:  |  Size: 607 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-3-circle" viewBox="0 0 16 16">
<path d="M7.918 8.414h-.879V7.342h.838c.78 0 1.348-.522 1.342-1.237 0-.709-.563-1.195-1.348-1.195-.79 0-1.312.498-1.348 1.055H5.275c.036-1.137.95-2.115 2.625-2.121 1.594-.012 2.608.885 2.637 2.062.023 1.137-.885 1.776-1.482 1.875v.07c.703.07 1.71.64 1.734 1.917.024 1.459-1.277 2.396-2.93 2.396-1.705 0-2.707-.967-2.754-2.144H6.33c.059.597.68 1.06 1.541 1.066.973.006 1.6-.563 1.588-1.354-.006-.779-.621-1.318-1.541-1.318"/>
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8"/>
</svg>

After

Width:  |  Height:  |  Size: 642 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-3-square-fill" viewBox="0 0 16 16">
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm5.918 8.414h-.879V7.342h.838c.78 0 1.348-.522 1.342-1.237 0-.709-.563-1.195-1.348-1.195-.79 0-1.312.498-1.348 1.055H5.275c.036-1.137.95-2.115 2.625-2.121 1.594-.012 2.608.885 2.637 2.062.023 1.137-.885 1.776-1.482 1.875v.07c.703.07 1.71.64 1.734 1.917.024 1.459-1.277 2.396-2.93 2.396-1.705 0-2.707-.967-2.754-2.144H6.33c.059.597.68 1.06 1.541 1.066.973.006 1.6-.563 1.588-1.354-.006-.779-.621-1.318-1.541-1.318"/>
</svg>

After

Width:  |  Height:  |  Size: 634 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-3-square" viewBox="0 0 16 16">
<path d="M7.918 8.414h-.879V7.342h.838c.78 0 1.348-.522 1.342-1.237 0-.709-.563-1.195-1.348-1.195-.79 0-1.312.498-1.348 1.055H5.275c.036-1.137.95-2.115 2.625-2.121 1.594-.012 2.608.885 2.637 2.062.023 1.137-.885 1.776-1.482 1.875v.07c.703.07 1.71.64 1.734 1.917.024 1.459-1.277 2.396-2.93 2.396-1.705 0-2.707-.967-2.754-2.144H6.33c.059.597.68 1.06 1.541 1.066.973.006 1.6-.563 1.588-1.354-.006-.779-.621-1.318-1.541-1.318"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1z"/>
</svg>

After

Width:  |  Height:  |  Size: 714 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-4-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M7.519 5.057c-.886 1.418-1.772 2.838-2.542 4.265v1.12H8.85V12h1.26v-1.559h1.007V9.334H10.11V4.002H8.176zM6.225 9.281v.053H8.85V5.063h-.065c-.867 1.33-1.787 2.806-2.56 4.218"/>
</svg>

After

Width:  |  Height:  |  Size: 359 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-4-circle" viewBox="0 0 16 16">
<path d="M7.519 5.057q.33-.527.657-1.055h1.933v5.332h1.008v1.107H10.11V12H8.85v-1.559H4.978V9.322c.77-1.427 1.656-2.847 2.542-4.265ZM6.225 9.281v.053H8.85V5.063h-.065c-.867 1.33-1.787 2.806-2.56 4.218"/>
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8"/>
</svg>

After

Width:  |  Height:  |  Size: 421 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-4-square-fill" viewBox="0 0 16 16">
<path d="M6.225 9.281v.053H8.85V5.063h-.065c-.867 1.33-1.787 2.806-2.56 4.218"/>
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm5.519 5.057q.33-.527.657-1.055h1.933v5.332h1.008v1.107H10.11V12H8.85v-1.559H4.978V9.322c.77-1.427 1.656-2.847 2.542-4.265Z"/>
</svg>

After

Width:  |  Height:  |  Size: 428 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-4-square" viewBox="0 0 16 16">
<path d="M7.519 5.057q.33-.527.657-1.055h1.933v5.332h1.008v1.107H10.11V12H8.85v-1.559H4.978V9.322c.77-1.427 1.656-2.847 2.542-4.265ZM6.225 9.281v.053H8.85V5.063h-.065c-.867 1.33-1.787 2.806-2.56 4.218"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1z"/>
</svg>

After

Width:  |  Height:  |  Size: 493 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-5-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-8.006 4.158c1.74 0 2.924-1.119 2.924-2.806 0-1.641-1.178-2.584-2.56-2.584-.897 0-1.442.421-1.612.68h-.064l.193-2.344h3.621V4.002H5.791L5.445 8.63h1.149c.193-.358.668-.809 1.435-.809.85 0 1.582.604 1.582 1.57 0 1.085-.779 1.682-1.57 1.682-.697 0-1.389-.31-1.53-1.031H5.276c.065 1.213 1.149 2.115 2.72 2.115Z"/>
</svg>

After

Width:  |  Height:  |  Size: 495 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-5-circle" viewBox="0 0 16 16">
<path d="M1 8a7 7 0 1 1 14 0A7 7 0 0 1 1 8m15 0A8 8 0 1 0 0 8a8 8 0 0 0 16 0m-8.006 4.158c-1.57 0-2.654-.902-2.719-2.115h1.237c.14.72.832 1.031 1.529 1.031.791 0 1.57-.597 1.57-1.681 0-.967-.732-1.57-1.582-1.57-.767 0-1.242.45-1.435.808H5.445L5.791 4h4.705v1.103H6.875l-.193 2.343h.064c.17-.258.715-.68 1.611-.68 1.383 0 2.561.944 2.561 2.585 0 1.687-1.184 2.806-2.924 2.806Z"/>
</svg>

After

Width:  |  Height:  |  Size: 514 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-5-square-fill" viewBox="0 0 16 16">
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm5.994 12.158c-1.57 0-2.654-.902-2.719-2.115h1.237c.14.72.832 1.031 1.529 1.031.791 0 1.57-.597 1.57-1.681 0-.967-.732-1.57-1.582-1.57-.767 0-1.242.45-1.435.808H5.445L5.791 4h4.705v1.103H6.875l-.193 2.343h.064c.17-.258.715-.68 1.611-.68 1.383 0 2.561.944 2.561 2.585 0 1.687-1.184 2.806-2.924 2.806Z"/>
</svg>

After

Width:  |  Height:  |  Size: 521 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-5-square" viewBox="0 0 16 16">
<path d="M7.994 12.158c-1.57 0-2.654-.902-2.719-2.115h1.237c.14.72.832 1.031 1.529 1.031.791 0 1.57-.597 1.57-1.681 0-.967-.732-1.57-1.582-1.57-.767 0-1.242.45-1.435.808H5.445L5.791 4h4.705v1.103H6.875l-.193 2.343h.064c.17-.258.715-.68 1.611-.68 1.383 0 2.561.944 2.561 2.585 0 1.687-1.184 2.806-2.924 2.806Z"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1z"/>
</svg>

After

Width:  |  Height:  |  Size: 601 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-6-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M8.21 3.855c-1.868 0-3.116 1.395-3.116 4.407 0 1.183.228 2.039.597 2.642.569.926 1.477 1.254 2.409 1.254 1.629 0 2.847-1.013 2.847-2.783 0-1.676-1.254-2.555-2.508-2.555-1.125 0-1.752.61-1.98 1.155h-.082c-.012-1.946.727-3.036 1.805-3.036.802 0 1.213.457 1.312.815h1.29c-.06-.908-.962-1.899-2.573-1.899Zm-.099 4.008c-.92 0-1.564.65-1.564 1.576 0 1.032.703 1.635 1.558 1.635.868 0 1.553-.533 1.553-1.629 0-1.06-.744-1.582-1.547-1.582"/>
</svg>

After

Width:  |  Height:  |  Size: 617 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-6-circle" viewBox="0 0 16 16">
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8m15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0M8.21 3.855c1.612 0 2.515.99 2.573 1.899H9.494c-.1-.358-.51-.815-1.312-.815-1.078 0-1.817 1.09-1.805 3.036h.082c.229-.545.855-1.155 1.98-1.155 1.254 0 2.508.88 2.508 2.555 0 1.77-1.218 2.783-2.847 2.783-.932 0-1.84-.328-2.409-1.254-.369-.603-.597-1.459-.597-2.642 0-3.012 1.248-4.407 3.117-4.407Zm-.099 4.008c-.92 0-1.564.65-1.564 1.576 0 1.032.703 1.635 1.558 1.635.868 0 1.553-.533 1.553-1.629 0-1.06-.744-1.582-1.547-1.582"/>
</svg>

After

Width:  |  Height:  |  Size: 640 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-6-square-fill" viewBox="0 0 16 16">
<path d="M8.111 7.863c-.92 0-1.564.65-1.564 1.576 0 1.032.703 1.635 1.558 1.635.868 0 1.553-.533 1.553-1.629 0-1.06-.744-1.582-1.547-1.582"/>
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm6.21 3.855c1.612 0 2.515.99 2.573 1.899H9.494c-.1-.358-.51-.815-1.312-.815-1.078 0-1.817 1.09-1.805 3.036h.082c.229-.545.855-1.155 1.98-1.155 1.254 0 2.508.88 2.508 2.555 0 1.77-1.218 2.783-2.847 2.783-.932 0-1.84-.328-2.409-1.254-.369-.603-.597-1.459-.597-2.642 0-3.012 1.248-4.407 3.117-4.407Z"/>
</svg>

After

Width:  |  Height:  |  Size: 662 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-6-square" viewBox="0 0 16 16">
<path d="M8.21 3.855c1.612 0 2.515.99 2.573 1.899H9.494c-.1-.358-.51-.815-1.312-.815-1.078 0-1.817 1.09-1.805 3.036h.082c.229-.545.855-1.155 1.98-1.155 1.254 0 2.508.88 2.508 2.555 0 1.77-1.218 2.783-2.847 2.783-.932 0-1.84-.328-2.409-1.254-.369-.603-.597-1.459-.597-2.642 0-3.012 1.248-4.407 3.117-4.407Zm-.099 4.008c-.92 0-1.564.65-1.564 1.576 0 1.032.703 1.635 1.558 1.635.868 0 1.553-.533 1.553-1.629 0-1.06-.744-1.582-1.547-1.582"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1z"/>
</svg>

After

Width:  |  Height:  |  Size: 727 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-7-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M5.37 5.11h3.972v.07L6.025 12H7.42l3.258-6.85V4.002H5.369v1.107Z"/>
</svg>

After

Width:  |  Height:  |  Size: 251 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-7-circle" viewBox="0 0 16 16">
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8m15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0M5.37 5.11V4.001h5.308V5.15L7.42 12H6.025l3.317-6.82v-.07H5.369Z"/>
</svg>

After

Width:  |  Height:  |  Size: 279 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-7-square-fill" viewBox="0 0 16 16">
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm3.37 5.11V4.001h5.308V5.15L7.42 12H6.025l3.317-6.82v-.07H5.369Z"/>
</svg>

After

Width:  |  Height:  |  Size: 286 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-7-square" viewBox="0 0 16 16">
<path d="M5.37 5.11V4.001h5.308V5.15L7.42 12H6.025l3.317-6.82v-.07H5.369Z"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1z"/>
</svg>

After

Width:  |  Height:  |  Size: 366 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-8-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-5.03 1.803c0-1.248-.943-1.84-1.646-1.992v-.065c.598-.187 1.336-.72 1.336-1.781 0-1.225-1.084-2.121-2.654-2.121s-2.66.896-2.66 2.12c0 1.044.709 1.589 1.33 1.782v.065c-.697.152-1.647.732-1.647 2.003 0 1.39 1.19 2.344 2.953 2.344 1.77 0 2.989-.96 2.989-2.355Zm-4.347-3.71c0 .739.586 1.255 1.383 1.255s1.377-.516 1.377-1.254c0-.733-.58-1.23-1.377-1.23s-1.383.497-1.383 1.23Zm-.281 3.645c0 .838.72 1.412 1.664 1.412.943 0 1.658-.574 1.658-1.412 0-.843-.715-1.424-1.658-1.424-.944 0-1.664.58-1.664 1.424"/>
</svg>

After

Width:  |  Height:  |  Size: 686 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-8-circle" viewBox="0 0 16 16">
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8m15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-5.03 1.803c0 1.394-1.218 2.355-2.988 2.355-1.763 0-2.953-.955-2.953-2.344 0-1.271.95-1.851 1.647-2.003v-.065c-.621-.193-1.33-.738-1.33-1.781 0-1.225 1.09-2.121 2.66-2.121s2.654.896 2.654 2.12c0 1.061-.738 1.595-1.336 1.782v.065c.703.152 1.647.744 1.647 1.992Zm-4.347-3.71c0 .739.586 1.255 1.383 1.255s1.377-.516 1.377-1.254c0-.733-.58-1.23-1.377-1.23s-1.383.497-1.383 1.23Zm-.281 3.645c0 .838.72 1.412 1.664 1.412.943 0 1.658-.574 1.658-1.412 0-.843-.715-1.424-1.658-1.424-.944 0-1.664.58-1.664 1.424"/>
</svg>

After

Width:  |  Height:  |  Size: 717 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-8-square-fill" viewBox="0 0 16 16">
<path d="M6.623 6.094c0 .738.586 1.254 1.383 1.254s1.377-.516 1.377-1.254c0-.733-.58-1.23-1.377-1.23s-1.383.497-1.383 1.23m-.281 3.644c0 .838.72 1.412 1.664 1.412.943 0 1.658-.574 1.658-1.412 0-.843-.715-1.424-1.658-1.424-.944 0-1.664.58-1.664 1.424"/>
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm8.97 9.803c0 1.394-1.218 2.355-2.988 2.355-1.763 0-2.953-.955-2.953-2.344 0-1.271.95-1.851 1.647-2.003v-.065c-.621-.193-1.33-.738-1.33-1.781 0-1.225 1.09-2.121 2.66-2.121s2.654.896 2.654 2.12c0 1.061-.738 1.595-1.336 1.782v.065c.703.152 1.647.744 1.647 1.992Z"/>
</svg>

After

Width:  |  Height:  |  Size: 737 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-8-square" viewBox="0 0 16 16">
<path d="M10.97 9.803c0 1.394-1.218 2.355-2.988 2.355-1.763 0-2.953-.955-2.953-2.344 0-1.271.95-1.851 1.647-2.003v-.065c-.621-.193-1.33-.738-1.33-1.781 0-1.225 1.09-2.121 2.66-2.121s2.654.896 2.654 2.12c0 1.061-.738 1.595-1.336 1.782v.065c.703.152 1.647.744 1.647 1.992Zm-4.347-3.71c0 .739.586 1.255 1.383 1.255s1.377-.516 1.377-1.254c0-.733-.58-1.23-1.377-1.23s-1.383.497-1.383 1.23Zm-.281 3.645c0 .838.72 1.412 1.664 1.412.943 0 1.658-.574 1.658-1.412 0-.843-.715-1.424-1.658-1.424-.944 0-1.664.58-1.664 1.424"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1z"/>
</svg>

After

Width:  |  Height:  |  Size: 804 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-9-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-8.223 4.146c2.104 0 3.123-1.464 3.123-4.3 0-3.147-1.459-4.014-2.97-4.014-1.63 0-2.871 1.02-2.871 2.73 0 1.706 1.171 2.667 2.566 2.667 1.06 0 1.7-.557 1.934-1.184h.076c.047 1.67-.475 3.023-1.834 3.023-.71 0-1.149-.363-1.248-.72H5.258c.094.908.926 1.798 2.52 1.798Zm.118-3.972c.808 0 1.535-.528 1.535-1.594s-.668-1.676-1.56-1.676c-.838 0-1.517.616-1.517 1.659 0 1.072.708 1.61 1.54 1.61Z"/>
</svg>

After

Width:  |  Height:  |  Size: 574 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-9-circle" viewBox="0 0 16 16">
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8m15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-8.223 4.146c-1.593 0-2.425-.89-2.52-1.798h1.296c.1.357.539.72 1.248.72 1.36 0 1.88-1.353 1.834-3.023h-.076c-.235.627-.873 1.184-1.934 1.184-1.395 0-2.566-.961-2.566-2.666 0-1.711 1.242-2.731 2.87-2.731 1.512 0 2.971.867 2.971 4.014 0 2.836-1.02 4.3-3.123 4.3m.118-3.972c.808 0 1.535-.528 1.535-1.594s-.668-1.676-1.56-1.676c-.838 0-1.517.616-1.517 1.659 0 1.072.708 1.61 1.54 1.61Z"/>
</svg>

After

Width:  |  Height:  |  Size: 597 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-9-square-fill" viewBox="0 0 16 16">
<path d="M7.895 8.174c.808 0 1.535-.528 1.535-1.594s-.668-1.676-1.56-1.676c-.838 0-1.517.616-1.517 1.659 0 1.072.708 1.61 1.54 1.61Z"/>
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm5.777 12.146c-1.593 0-2.425-.89-2.52-1.798h1.296c.1.357.539.72 1.248.72 1.36 0 1.88-1.353 1.834-3.023h-.076c-.235.627-.873 1.184-1.934 1.184-1.395 0-2.566-.961-2.566-2.666 0-1.711 1.242-2.731 2.87-2.731 1.512 0 2.971.867 2.971 4.014 0 2.836-1.02 4.3-3.123 4.3"/>
</svg>

After

Width:  |  Height:  |  Size: 620 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-9-square" viewBox="0 0 16 16">
<path d="M7.777 12.146c-1.593 0-2.425-.89-2.52-1.798h1.296c.1.357.539.72 1.248.72 1.36 0 1.88-1.353 1.834-3.023h-.076c-.235.627-.873 1.184-1.934 1.184-1.395 0-2.566-.961-2.566-2.666 0-1.711 1.242-2.731 2.87-2.731 1.512 0 2.971.867 2.971 4.014 0 2.836-1.02 4.3-3.123 4.3m.118-3.972c.808 0 1.535-.528 1.535-1.594s-.668-1.676-1.56-1.676c-.838 0-1.517.616-1.517 1.659 0 1.072.708 1.61 1.54 1.61Z"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1z"/>
</svg>

After

Width:  |  Height:  |  Size: 684 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-activity" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M6 2a.5.5 0 0 1 .47.33L10 12.036l1.53-4.208A.5.5 0 0 1 12 7.5h3.5a.5.5 0 0 1 0 1h-3.15l-1.88 5.17a.5.5 0 0 1-.94 0L6 3.964 4.47 8.171A.5.5 0 0 1 4 8.5H.5a.5.5 0 0 1 0-1h3.15l1.88-5.17A.5.5 0 0 1 6 2"/>
</svg>

After

Width:  |  Height:  |  Size: 366 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-airplane-engines-fill" viewBox="0 0 16 16">
<path d="M8 0c-.787 0-1.292.592-1.572 1.151A4.35 4.35 0 0 0 6 3v3.691l-2 1V7.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.191l-1.17.585A1.5 1.5 0 0 0 0 10.618V12a.5.5 0 0 0 .582.493l1.631-.272.313.937a.5.5 0 0 0 .948 0l.405-1.214 2.21-.369.375 2.253-1.318 1.318A.5.5 0 0 0 5.5 16h5a.5.5 0 0 0 .354-.854l-1.318-1.318.375-2.253 2.21.369.405 1.214a.5.5 0 0 0 .948 0l.313-.937 1.63.272A.5.5 0 0 0 16 12v-1.382a1.5 1.5 0 0 0-.83-1.342L14 8.691V7.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v.191l-2-1V3c0-.568-.14-1.271-.428-1.849C9.292.591 8.787 0 8 0"/>
</svg>

After

Width:  |  Height:  |  Size: 687 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-airplane-engines" viewBox="0 0 16 16">
<path d="M8 0c-.787 0-1.292.592-1.572 1.151A4.35 4.35 0 0 0 6 3v3.691l-2 1V7.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.191l-1.17.585A1.5 1.5 0 0 0 0 10.618V12a.5.5 0 0 0 .582.493l1.631-.272.313.937a.5.5 0 0 0 .948 0l.405-1.214 2.21-.369.375 2.253-1.318 1.318A.5.5 0 0 0 5.5 16h5a.5.5 0 0 0 .354-.854l-1.318-1.318.375-2.253 2.21.369.405 1.214a.5.5 0 0 0 .948 0l.313-.937 1.63.272A.5.5 0 0 0 16 12v-1.382a1.5 1.5 0 0 0-.83-1.342L14 8.691V7.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v.191l-2-1V3c0-.568-.14-1.271-.428-1.849C9.292.591 8.787 0 8 0M7 3c0-.432.11-.979.322-1.401C7.542 1.159 7.787 1 8 1s.458.158.678.599C8.889 2.02 9 2.569 9 3v4a.5.5 0 0 0 .276.447l5.448 2.724a.5.5 0 0 1 .276.447v.792l-5.418-.903a.5.5 0 0 0-.575.41l-.5 3a.5.5 0 0 0 .14.437l.646.646H6.707l.647-.646a.5.5 0 0 0 .14-.436l-.5-3a.5.5 0 0 0-.576-.411L1 11.41v-.792a.5.5 0 0 1 .276-.447l5.448-2.724A.5.5 0 0 0 7 7z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-airplane-fill" viewBox="0 0 16 16">
<path d="M6.428 1.151C6.708.591 7.213 0 8 0s1.292.592 1.572 1.151C9.861 1.73 10 2.431 10 3v3.691l5.17 2.585a1.5 1.5 0 0 1 .83 1.342V12a.5.5 0 0 1-.582.493l-5.507-.918-.375 2.253 1.318 1.318A.5.5 0 0 1 10.5 16h-5a.5.5 0 0 1-.354-.854l1.319-1.318-.376-2.253-5.507.918A.5.5 0 0 1 0 12v-1.382a1.5 1.5 0 0 1 .83-1.342L6 6.691V3c0-.568.14-1.271.428-1.849"/>
</svg>

After

Width:  |  Height:  |  Size: 492 B

Some files were not shown because too many files have changed in this diff Show More