Custom themes

This commit is contained in:
Zan
2025-12-01 21:29:33 +01:00
parent 08203f135b
commit 5fbe47f5ea
48 changed files with 1354 additions and 46 deletions

View File

@@ -84,6 +84,7 @@
.nav-item img,.nav-item svg { .nav-item img,.nav-item svg {
width:24px; width:24px;
height:24px; height:24px;
filter: var(--icon-filter);
} }
.nav-item.active svg path { .nav-item.active svg path {
fill:var(--accent-accent); fill:var(--accent-accent);

View File

@@ -13,6 +13,7 @@
--accent-secondary:#6E8F1B; --accent-secondary:#6E8F1B;
--accent-shadow:#647e2226; --accent-shadow:#647e2226;
--accent-15:#a7dc2226; --accent-15:#a7dc2226;
--icon-filter:brightness(0) saturate(100%) invert(76%) sepia(65%) saturate(482%) hue-rotate(35deg) brightness(98%) contrast(89%);
--warning-accent:var(--grades-2); --warning-accent:var(--grades-2);
--warning-text:#8F531B; --warning-text:#8F531B;
--warning-15:#ffa04626; --warning-15:#ffa04626;
@@ -47,6 +48,7 @@
--accent-secondary:#6E8F1B; --accent-secondary:#6E8F1B;
--accent-shadow:#647e2226; --accent-shadow:#647e2226;
--accent-15:#a7dc2226; --accent-15:#a7dc2226;
--icon-filter:brightness(0) saturate(100%) invert(76%) sepia(65%) saturate(482%) hue-rotate(35deg) brightness(98%) contrast(89%);
--warning-accent:var(--grades-2); --warning-accent:var(--grades-2);
--warning-text:#8F531B; --warning-text:#8F531B;
--warning-15:#ffa04626; --warning-15:#ffa04626;
@@ -81,6 +83,7 @@
--accent-secondary:#CBEE71; --accent-secondary:#CBEE71;
--accent-shadow:#0000; --accent-shadow:#0000;
--accent-15:#a7dc2226; --accent-15:#a7dc2226;
--icon-filter:brightness(0) saturate(100%) invert(76%) sepia(65%) saturate(482%) hue-rotate(35deg) brightness(98%) contrast(89%);
--warning-accent:var(--grades-2); --warning-accent:var(--grades-2);
--warning-text:#f0b37a; --warning-text:#f0b37a;
--warning-15:#ffa04626; --warning-15:#ffa04626;
@@ -127,3 +130,41 @@ body {
::-webkit-scrollbar-thumb:hover { ::-webkit-scrollbar-thumb:hover {
background:var(--text-primary); background:var(--text-primary);
} }
/* SVG ikonok színezése a kiemelő színnel */
.icon-accent,
svg.icon-accent,
img.icon-accent {
filter: var(--icon-filter);
}
/* Minden SVG-re alkalmazható osztály */
.themed-icon {
filter: var(--icon-filter);
transition: filter 0.2s ease;
}
/* Automatikus ikon színezés - minden icons/ mappából származó kép */
img[src*="icons/"],
img[src*="icons%2F"],
img[src$=".svg"] {
filter: var(--icon-filter);
transition: filter 0.2s ease;
}
/* Warning színű ikonok (narancssárga) */
img[src*="icons/dkt.svg"],
img[src*="icons%2Fdkt.svg"],
img[src*="icons/assigment.svg"],
img[src*="icons%2Fassigment.svg"],
img[src$="dkt.svg"],
img[src$="assigment.svg"] {
filter: brightness(0) saturate(100%) invert(67%) sepia(44%) saturate(1057%) hue-rotate(349deg) brightness(101%) contrast(101%) !important;
}
/* Error színű ikonok (piros/rózsaszín) */
img[src*="icons/logout.svg"],
img[src*="icons%2Flogout.svg"],
img[src$="logout.svg"] {
filter: brightness(0) saturate(100%) invert(52%) sepia(75%) saturate(1637%) hue-rotate(306deg) brightness(101%) contrast(101%) !important;
}

View File

@@ -1,8 +1,128 @@
(() => { (() => {
let customThemes = [];
async function loadCustomThemes() {
try {
const saved = await storageManager.get("customThemes", []);
customThemes = Array.isArray(saved) ? saved : [];
} catch (error) {
console.error("Error loading custom themes:", error);
customThemes = [];
}
}
function applyCustomThemeColors(theme) {
const root = document.documentElement;
const isDark = theme.mode === "dark";
root.style.setProperty("--background", theme.colors.background);
root.style.setProperty("--background-0", theme.colors.background + "00");
root.style.setProperty("--card-card", theme.colors.card);
root.style.setProperty("--card-translucent", theme.colors.card + "80");
root.style.setProperty("--accent-accent", theme.colors.accent);
root.style.setProperty("--text-primary", theme.colors.text);
// Származtatott színek
root.style.setProperty("--text-secondary", theme.colors.text + "cc");
root.style.setProperty("--text-teritary", theme.colors.text + "80");
root.style.setProperty("--accent-15", theme.colors.accent + "26");
root.style.setProperty("--button-secondaryFill", isDark ? lightenColor(theme.colors.card, 10) : darkenColor(theme.colors.card, 5));
root.style.setProperty("--accent-secondary", isDark ? lightenColor(theme.colors.accent, 20) : darkenColor(theme.colors.accent, 20));
root.style.setProperty("--shadow-blur", isDark ? "0" : "2px");
root.style.setProperty("--accent-shadow", isDark ? "#0000" : theme.colors.accent + "26");
// SVG ikon filter beállítása a kiemelő szín alapján
root.style.setProperty("--icon-filter", hexToFilter(theme.colors.accent));
}
// Hex szín átalakítása CSS filterré
function hexToFilter(hex) {
// Hex -> RGB
const r = parseInt(hex.slice(1, 3), 16);
const g = parseInt(hex.slice(3, 5), 16);
const b = parseInt(hex.slice(5, 7), 16);
// RGB -> HSL
const rNorm = r / 255;
const gNorm = g / 255;
const bNorm = b / 255;
const max = Math.max(rNorm, gNorm, bNorm);
const min = Math.min(rNorm, gNorm, bNorm);
let h, s, l = (max + min) / 2;
if (max === min) {
h = s = 0;
} else {
const d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
switch (max) {
case rNorm: h = ((gNorm - bNorm) / d + (gNorm < bNorm ? 6 : 0)) / 6; break;
case gNorm: h = ((bNorm - rNorm) / d + 2) / 6; break;
case bNorm: h = ((rNorm - gNorm) / d + 4) / 6; break;
}
}
const hue = Math.round(h * 360);
const saturation = Math.round(s * 100);
const lightness = Math.round(l * 100);
// Filter létrehozása
// Ez egy egyszerűsített megközelítés - a pontos szín reprodukálásához
// komplexebb számítás kellene, de ez megfelelő a legtöbb esetben
const brightnessVal = lightness > 50 ? 1 + (lightness - 50) / 100 : 0.5 + lightness / 100;
const saturateVal = saturation > 0 ? 1 + saturation / 100 : 0;
return `brightness(0) saturate(100%) invert(${lightness}%) sepia(${saturation}%) saturate(${Math.min(500, saturation * 5)}%) hue-rotate(${hue}deg) brightness(${brightnessVal}) contrast(${90 + saturation / 10}%)`;
}
function lightenColor(color, percent) {
const num = parseInt(color.replace("#", ""), 16);
const amt = Math.round(2.55 * percent);
const R = Math.min(255, (num >> 16) + amt);
const G = Math.min(255, ((num >> 8) & 0x00ff) + amt);
const B = Math.min(255, (num & 0x0000ff) + amt);
return "#" + (0x1000000 + R * 0x10000 + G * 0x100 + B).toString(16).slice(1);
}
function darkenColor(color, percent) {
const num = parseInt(color.replace("#", ""), 16);
const amt = Math.round(2.55 * percent);
const R = Math.max(0, (num >> 16) - amt);
const G = Math.max(0, ((num >> 8) & 0x00ff) - amt);
const B = Math.max(0, (num & 0x0000ff) - amt);
return "#" + (0x1000000 + R * 0x10000 + G * 0x100 + B).toString(16).slice(1);
}
function clearCustomThemeStyles() {
const root = document.documentElement;
const customProps = [
"--background", "--background-0", "--card-card", "--card-translucent",
"--accent-accent", "--text-primary", "--text-secondary", "--text-teritary",
"--accent-15", "--button-secondaryFill", "--accent-secondary",
"--shadow-blur", "--accent-shadow", "--icon-filter"
];
customProps.forEach(prop => root.style.removeProperty(prop));
}
async function setTheme(theme) { async function setTheme(theme) {
try { try {
// Töröljük az előző egyéni téma stílusait
clearCustomThemeStyles();
document.documentElement.setAttribute("data-theme", theme); document.documentElement.setAttribute("data-theme", theme);
await storageManager.set("themePreference", theme); await storageManager.set("themePreference", theme);
// Ha egyéni téma, alkalmazzuk a színeket
if (theme.startsWith("custom-")) {
await loadCustomThemes();
const themeId = theme.replace("custom-", "");
const customTheme = customThemes.find(t => t.id === themeId);
if (customTheme) {
applyCustomThemeColors(customTheme);
}
}
chrome.runtime chrome.runtime
.sendMessage({ .sendMessage({
action: "themeChanged", action: "themeChanged",
@@ -103,6 +223,7 @@
async function initializeTheme() { async function initializeTheme() {
try { try {
const theme = await storageManager.get("themePreference", "light-green"); const theme = await storageManager.get("themePreference", "light-green");
await loadCustomThemes();
await setTheme(theme); await setTheme(theme);
setPageTitleAndFavicon(); setPageTitleAndFavicon();
@@ -123,6 +244,10 @@
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (message.action === "changeTheme") { if (message.action === "changeTheme") {
// Ha egyéni témák is jöttek az üzenetben, frissítsük a lokális listát
if (message.customThemes) {
customThemes = message.customThemes;
}
setTheme(message.theme); setTheme(message.theme);
sendResponse({ success: true }); sendResponse({ success: true });
} }

View File

@@ -19,6 +19,29 @@
"dark_lime": "Dark Lime", "dark_lime": "Dark Lime",
"dark_indigo": "Dark Indigo" "dark_indigo": "Dark Indigo"
}, },
"custom_themes": {
"title": "Custom themes",
"no_themes": "No custom themes yet",
"create": "Create new theme",
"edit": "Edit theme",
"name": "Theme name",
"mode": "Mode",
"dark_mode": "Dark",
"light_mode": "Light",
"colors": "Colors",
"accent_color": "Accent color",
"background_color": "Background color",
"card_color": "Card color",
"text_color": "Text color",
"preview": "Preview",
"share": "Share theme",
"share_description": "Copy the code and share it with others:",
"import": "Import theme",
"import_description": "Paste the theme code:",
"import_error_empty": "Please paste the theme code!",
"import_error_invalid": "Invalid theme code!",
"delete_confirm": "Are you sure you want to delete this theme?"
},
"languages": { "languages": {
"hu": "Magyar", "hu": "Magyar",
"en": "English" "en": "English"

View File

@@ -21,6 +21,29 @@
"dark_lime": "Sötét Lime", "dark_lime": "Sötét Lime",
"dark_indigo": "Sötét Indigó" "dark_indigo": "Sötét Indigó"
}, },
"custom_themes": {
"title": "Egyéni témák",
"no_themes": "Még nincsenek egyéni témák",
"create": "Új téma létrehozása",
"edit": "Téma szerkesztése",
"name": "Téma neve",
"mode": "Mód",
"dark_mode": "Sötét",
"light_mode": "Világos",
"colors": "Színek",
"accent_color": "Kiemelő szín",
"background_color": "Háttér szín",
"card_color": "Kártya szín",
"text_color": "Szöveg szín",
"preview": "Előnézet",
"share": "Téma megosztása",
"share_description": "Másold ki a kódot és oszd meg másokkal:",
"import": "Téma importálása",
"import_description": "Illeszd be a téma kódot:",
"import_error_empty": "Kérlek illeszd be a téma kódot!",
"import_error_invalid": "Érvénytelen téma kód!",
"delete_confirm": "Biztosan törölni szeretnéd ezt a témát?"
},
"languages": { "languages": {
"hu": "Magyar", "hu": "Magyar",
"en": "English" "en": "English"

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><path fill="none" stroke="#A7DC22" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19h4m0 0v-4m0 4l-4-4M9 5H5m0 0v4m0-4l4 4m6-4h4m0 0v4m0-4l-4 4M9 19H5m0 0v-4m0 4l4-4"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19h4m0 0v-4m0 4l-4-4M9 5H5m0 0v4m0-4l4 4m6-4h4m0 0v4m0-4l-4 4M9 19H5m0 0v-4m0 4l4-4"/></svg>

Before

Width:  |  Height:  |  Size: 283 B

After

Width:  |  Height:  |  Size: 288 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.054 2.344a3 3 0 0 1 3.892 0l1.271 1.084a1 1 0 0 0 .57.236l1.665.133a3 3 0 0 1 2.751 2.751l.133 1.666a1 1 0 0 0 .236.569l1.084 1.271a3 3 0 0 1 0 3.892l-1.084 1.271a1 1 0 0 0-.236.57l-.133 1.665a3 3 0 0 1-2.751 2.751l-1.666.133a1 1 0 0 0-.569.236l-1.271 1.084a3 3 0 0 1-3.892 0l-1.271-1.084a1 1 0 0 0-.57-.236l-1.665-.133a3 3 0 0 1-2.751-2.751l-.133-1.666a1 1 0 0 0-.236-.569l-1.084-1.271a3 3 0 0 1 0-3.892l1.084-1.271a1 1 0 0 0 .236-.57l.133-1.665a3 3 0 0 1 2.751-2.751l1.666-.133a1 1 0 0 0 .569-.236l1.271-1.084zm5.653 8.363a1 1 0 0 0-1.414-1.414L11 12.586l-1.293-1.293a1 1 0 0 0-1.414 1.414l2 2a1 1 0 0 0 1.414 0l4-4z" fill="#A7DC22"/></g></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.054 2.344a3 3 0 0 1 3.892 0l1.271 1.084a1 1 0 0 0 .57.236l1.665.133a3 3 0 0 1 2.751 2.751l.133 1.666a1 1 0 0 0 .236.569l1.084 1.271a3 3 0 0 1 0 3.892l-1.084 1.271a1 1 0 0 0-.236.57l-.133 1.665a3 3 0 0 1-2.751 2.751l-1.666.133a1 1 0 0 0-.569.236l-1.271 1.084a3 3 0 0 1-3.892 0l-1.271-1.084a1 1 0 0 0-.57-.236l-1.665-.133a3 3 0 0 1-2.751-2.751l-.133-1.666a1 1 0 0 0-.236-.569l-1.084-1.271a3 3 0 0 1 0-3.892l1.084-1.271a1 1 0 0 0 .236-.57l.133-1.665a3 3 0 0 1 2.751-2.751l1.666-.133a1 1 0 0 0 .569-.236l1.271-1.084zm5.653 8.363a1 1 0 0 0-1.414-1.414L11 12.586l-1.293-1.293a1 1 0 0 0-1.414 1.414l2 2a1 1 0 0 0 1.414 0l4-4z" fill="currentColor"/></g></svg>

Before

Width:  |  Height:  |  Size: 799 B

After

Width:  |  Height:  |  Size: 804 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path fill="#A7DC22" d="M4 7v2h16V7a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2"/><path stroke="#A7DC22" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 5h2a2 2 0 0 1 2 2v2H4V7a2 2 0 0 1 2-2h2m8 0V3m0 2H8m0-2v2M4 9.5V19a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9.5"/></g></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path fill="currentColor" d="M4 7v2h16V7a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2"/><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 5h2a2 2 0 0 1 2 2v2H4V7a2 2 0 0 1 2-2h2m8 0V3m0 2H8m0-2v2M4 9.5V19a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9.5"/></g></svg>

Before

Width:  |  Height:  |  Size: 376 B

After

Width:  |  Height:  |  Size: 386 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><path fill="#A7DC22" fill-rule="evenodd" d="M12 21a9 9 0 1 0 0-18a9 9 0 0 0 0 18m1.707-11.293a1 1 0 0 0-1.414-1.414l-3 3a1 1 0 0 0 0 1.414l3 3a1 1 0 0 0 1.414-1.414L11.414 12z" clip-rule="evenodd"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M12 21a9 9 0 1 0 0-18a9 9 0 0 0 0 18m1.707-11.293a1 1 0 0 0-1.414-1.414l-3 3a1 1 0 0 0 0 1.414l3 3a1 1 0 0 0 1.414-1.414L11.414 12z" clip-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 289 B

After

Width:  |  Height:  |  Size: 294 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><path fill="#A7DC22" fill-rule="evenodd" d="M12 21a9 9 0 1 0 0-18a9 9 0 0 0 0 18M10.293 9.707a1 1 0 1 1 1.414-1.414l3 3a1 1 0 0 1 0 1.414l-3 3a1 1 0 0 1-1.414-1.414L12.586 12z" clip-rule="evenodd"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M12 21a9 9 0 1 0 0-18a9 9 0 0 0 0 18M10.293 9.707a1 1 0 1 1 1.414-1.414l3 3a1 1 0 0 1 0 1.414l-3 3a1 1 0 0 1-1.414-1.414L12.586 12z" clip-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 289 B

After

Width:  |  Height:  |  Size: 294 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M2 12C2 6.477 6.477 2 12 2s10 4.477 10 10s-4.477 10-10 10S2 17.523 2 12zm8.207-3.207a1 1 0 0 0-1.414 1.414L10.586 12l-1.793 1.793a1 1 0 1 0 1.414 1.414L12 13.414l1.793 1.793a1 1 0 0 0 1.414-1.414L13.414 12l1.793-1.793a1 1 0 0 0-1.414-1.414L12 10.586l-1.793-1.793z" fill="#A7DC22"/></g></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M2 12C2 6.477 6.477 2 12 2s10 4.477 10 10s-4.477 10-10 10S2 17.523 2 12zm8.207-3.207a1 1 0 0 0-1.414 1.414L10.586 12l-1.793 1.793a1 1 0 1 0 1.414 1.414L12 13.414l1.793 1.793a1 1 0 0 0 1.414-1.414L13.414 12l1.793-1.793a1 1 0 0 0-1.414-1.414L12 10.586l-1.793-1.793z" fill="currentColor"/></g></svg>

Before

Width:  |  Height:  |  Size: 440 B

After

Width:  |  Height:  |  Size: 445 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M11.514 3.126a1 1 0 0 1 .972 0l9 5A1 1 0 0 1 22 9v7a1 1 0 1 1-2 0v-5.3l-1 .555v.004l-6.067 3.016a2 2 0 0 1-1.848-.035L2.357 9.479a1 1 0 0 0-.284-.103a1 1 0 0 1 .441-1.25l9-5zM5 13.199V17a1 1 0 0 0 .553.894l6 3a1 1 0 0 0 .894 0l6-3A1 1 0 0 0 19 17v-3.256l-6.083 2.844a2 2 0 0 1-1.805-.056L5 13.2z" fill="#A7DC22"/></g></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M11.514 3.126a1 1 0 0 1 .972 0l9 5A1 1 0 0 1 22 9v7a1 1 0 1 1-2 0v-5.3l-1 .555v.004l-6.067 3.016a2 2 0 0 1-1.848-.035L2.357 9.479a1 1 0 0 0-.284-.103a1 1 0 0 1 .441-1.25l9-5zM5 13.199V17a1 1 0 0 0 .553.894l6 3a1 1 0 0 0 .894 0l6-3A1 1 0 0 0 19 17v-3.256l-6.083 2.844a2 2 0 0 1-1.805-.056L5 13.2z" fill="currentColor"/></g></svg>

Before

Width:  |  Height:  |  Size: 472 B

After

Width:  |  Height:  |  Size: 477 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><path fill="#A7DC22" d="M8 3a1 1 0 0 1 1-1h6a1 1 0 1 1 0 2H9a1 1 0 0 1-1-1M3 14a9 9 0 0 1 14.618-7.032l.675-.675a1 1 0 1 1 1.414 1.414l-.675.675A9 9 0 1 1 3 14m10-4a1 1 0 1 0-2 0v4a1 1 0 1 0 2 0z" clip-rule="evenodd"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><path fill="currentColor" d="M8 3a1 1 0 0 1 1-1h6a1 1 0 1 1 0 2H9a1 1 0 0 1-1-1M3 14a9 9 0 0 1 14.618-7.032l.675-.675a1 1 0 1 1 1.414 1.414l-.675.675A9 9 0 1 1 3 14m10-4a1 1 0 1 0-2 0v4a1 1 0 1 0 2 0z" clip-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 309 B

After

Width:  |  Height:  |  Size: 314 B

View File

@@ -1,5 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
<g opacity="0.5"> <g opacity="0.5">
<path d="M15.8334 5.83333L14.7143 6.9525M14.7143 6.9525C13.464 5.70223 11.7682 4.99983 10.0001 4.99983C8.23193 4.99983 6.5362 5.70223 5.28592 6.9525C4.03565 8.20278 3.33325 9.89851 3.33325 11.6667C3.33325 13.4348 4.03565 15.1306 5.28592 16.3808C6.5362 17.6311 8.23193 18.3335 10.0001 18.3335C11.7682 18.3335 13.464 17.6311 14.7143 16.3808C15.9645 15.1306 16.6669 13.4348 16.6669 11.6667C16.6669 9.89851 15.9645 8.20278 14.7143 6.9525ZM10.0001 8.33333V11.6667M7.50009 2.5H12.5001" stroke="#6E8F1B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M15.8334 5.83333L14.7143 6.9525M14.7143 6.9525C13.464 5.70223 11.7682 4.99983 10.0001 4.99983C8.23193 4.99983 6.5362 5.70223 5.28592 6.9525C4.03565 8.20278 3.33325 9.89851 3.33325 11.6667C3.33325 13.4348 4.03565 15.1306 5.28592 16.3808C6.5362 17.6311 8.23193 18.3335 10.0001 18.3335C11.7682 18.3335 13.464 17.6311 14.7143 16.3808C15.9645 15.1306 16.6669 13.4348 16.6669 11.6667C16.6669 9.89851 15.9645 8.20278 14.7143 6.9525ZM10.0001 8.33333V11.6667M7.50009 2.5H12.5001" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 696 B

After

Width:  |  Height:  |  Size: 701 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path stroke="#FFA046" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 8H9m2 4H9"/><path fill="#FFA046" d="M3 16h8c0 1.333.8 4 4 4a3 3 0 0 0 3-3V4h1a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2h-1v7a3 3 0 0 1-3 3H5a2 2 0 0 1-2-2z"/><path stroke="#FFA046" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 20c-3.2 0-4-2.667-4-4H3v2a2 2 0 0 0 2 2zm0 0a3 3 0 0 0 3-3v-7m0-6H7a2 2 0 0 0-2 2v9.5M18 4h1a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2h-1m0-6v6"/></g></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 8H9m2 4H9"/><path fill="currentColor" d="M3 16h8c0 1.333.8 4 4 4a3 3 0 0 0 3-3V4h1a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2h-1v7a3 3 0 0 1-3 3H5a2 2 0 0 1-2-2z"/><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 20c-3.2 0-4-2.667-4-4H3v2a2 2 0 0 0 2 2zm0 0a3 3 0 0 0 3-3v-7m0-6H7a2 2 0 0 0-2 2v9.5M18 4h1a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2h-1m0-6v6"/></g></svg>

Before

Width:  |  Height:  |  Size: 578 B

After

Width:  |  Height:  |  Size: 593 B

View File

@@ -1,3 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
<path d="M16.6666 15.8333V8.74999C16.6666 8.62062 16.6365 8.49302 16.5786 8.37731C16.5208 8.2616 16.4367 8.16095 16.3333 8.08332L10.4999 3.70832C10.3557 3.60014 10.1802 3.54166 9.99992 3.54166C9.81961 3.54166 9.64417 3.60014 9.49992 3.70832L3.66659 8.08332C3.56309 8.16095 3.47909 8.2616 3.42123 8.37731C3.36337 8.49302 3.33325 8.62062 3.33325 8.74999V15.8333C3.33325 16.0543 3.42105 16.2663 3.57733 16.4226C3.73361 16.5789 3.94557 16.6667 4.16659 16.6667H7.49992C7.72093 16.6667 7.93289 16.5789 8.08917 16.4226C8.24545 16.2663 8.33325 16.0543 8.33325 15.8333V13.3333C8.33325 13.1123 8.42105 12.9003 8.57733 12.7441C8.73361 12.5878 8.94557 12.5 9.16658 12.5H10.8333C11.0543 12.5 11.2662 12.5878 11.4225 12.7441C11.5788 12.9003 11.6666 13.1123 11.6666 13.3333V15.8333C11.6666 16.0543 11.7544 16.2663 11.9107 16.4226C12.0669 16.5789 12.2789 16.6667 12.4999 16.6667H15.8333C16.0543 16.6667 16.2662 16.5789 16.4225 16.4226C16.5788 16.2663 16.6666 16.0543 16.6666 15.8333Z" fill="#A7DC22" stroke="#A7DC22" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round"/> <path d="M16.6666 15.8333V8.74999C16.6666 8.62062 16.6365 8.49302 16.5786 8.37731C16.5208 8.2616 16.4367 8.16095 16.3333 8.08332L10.4999 3.70832C10.3557 3.60014 10.1802 3.54166 9.99992 3.54166C9.81961 3.54166 9.64417 3.60014 9.49992 3.70832L3.66659 8.08332C3.56309 8.16095 3.47909 8.2616 3.42123 8.37731C3.36337 8.49302 3.33325 8.62062 3.33325 8.74999V15.8333C3.33325 16.0543 3.42105 16.2663 3.57733 16.4226C3.73361 16.5789 3.94557 16.6667 4.16659 16.6667H7.49992C7.72093 16.6667 7.93289 16.5789 8.08917 16.4226C8.24545 16.2663 8.33325 16.0543 8.33325 15.8333V13.3333C8.33325 13.1123 8.42105 12.9003 8.57733 12.7441C8.73361 12.5878 8.94557 12.5 9.16658 12.5H10.8333C11.0543 12.5 11.2662 12.5878 11.4225 12.7441C11.5788 12.9003 11.6666 13.1123 11.6666 13.3333V15.8333C11.6666 16.0543 11.7544 16.2663 11.9107 16.4226C12.0669 16.5789 12.2789 16.6667 12.4999 16.6667H15.8333C16.0543 16.6667 16.2662 16.5789 16.4225 16.4226C16.5788 16.2663 16.6666 16.0543 16.6666 15.8333Z" fill="currentColor" stroke="currentColor" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1,5 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
<g opacity="0.5"> <g opacity="0.5">
<path d="M16.6668 15.8333V8.74999C16.6668 8.62062 16.6367 8.49302 16.5789 8.37731C16.521 8.2616 16.437 8.16095 16.3335 8.08332L10.5002 3.70832C10.3559 3.60014 10.1805 3.54166 10.0002 3.54166C9.81985 3.54166 9.64441 3.60014 9.50016 3.70832L3.66683 8.08332C3.56333 8.16095 3.47933 8.2616 3.42147 8.37731C3.36362 8.49302 3.3335 8.62062 3.3335 8.74999V15.8333C3.3335 16.0543 3.42129 16.2663 3.57757 16.4226C3.73385 16.5789 3.94582 16.6667 4.16683 16.6667H7.50016C7.72118 16.6667 7.93314 16.5789 8.08942 16.4226C8.2457 16.2663 8.3335 16.0543 8.3335 15.8333V13.3333C8.3335 13.1123 8.42129 12.9003 8.57757 12.7441C8.73385 12.5878 8.94582 12.5 9.16683 12.5H10.8335C11.0545 12.5 11.2665 12.5878 11.4228 12.7441C11.579 12.9003 11.6668 13.1123 11.6668 13.3333V15.8333C11.6668 16.0543 11.7546 16.2663 11.9109 16.4226C12.0672 16.5789 12.2791 16.6667 12.5002 16.6667H15.8335C16.0545 16.6667 16.2665 16.5789 16.4228 16.4226C16.579 16.2663 16.6668 16.0543 16.6668 15.8333Z" stroke="#6E8F1B" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round"/> <path d="M16.6668 15.8333V8.74999C16.6668 8.62062 16.6367 8.49302 16.5789 8.37731C16.521 8.2616 16.437 8.16095 16.3335 8.08332L10.5002 3.70832C10.3559 3.60014 10.1805 3.54166 10.0002 3.54166C9.81985 3.54166 9.64441 3.60014 9.50016 3.70832L3.66683 8.08332C3.56333 8.16095 3.47933 8.2616 3.42147 8.37731C3.36362 8.49302 3.3335 8.62062 3.3335 8.74999V15.8333C3.3335 16.0543 3.42129 16.2663 3.57757 16.4226C3.73385 16.5789 3.94582 16.6667 4.16683 16.6667H7.50016C7.72118 16.6667 7.93314 16.5789 8.08942 16.4226C8.2457 16.2663 8.3335 16.0543 8.3335 15.8333V13.3333C8.3335 13.1123 8.42129 12.9003 8.57757 12.7441C8.73385 12.5878 8.94582 12.5 9.16683 12.5H10.8335C11.0545 12.5 11.2665 12.5878 11.4228 12.7441C11.579 12.9003 11.6668 13.1123 11.6668 13.3333V15.8333C11.6668 16.0543 11.7546 16.2663 11.9109 16.4226C12.0672 16.5789 12.2791 16.6667 12.5002 16.6667H15.8335C16.0545 16.6667 16.2665 16.5789 16.4228 16.4226C16.579 16.2663 16.6668 16.0543 16.6668 15.8333Z" stroke="currentColor" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round"/>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path fill="#A7DC22" d="M9 7h9v11a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V7z"/><path stroke="#A7DC22" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20 7h-2M4 7h2m0 0h12M6 7v11a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7m-9-.5A2.5 2.5 0 0 1 11.5 4h1A2.5 2.5 0 0 1 15 6.5v0"/></g></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path fill="currentColor" d="M9 7h9v11a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V7z"/><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20 7h-2M4 7h2m0 0h12M6 7v11a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7m-9-.5A2.5 2.5 0 0 1 11.5 4h1A2.5 2.5 0 0 1 15 6.5v0"/></g></svg>

Before

Width:  |  Height:  |  Size: 384 B

After

Width:  |  Height:  |  Size: 394 B

View File

@@ -1,5 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="30" height="23" viewBox="0 0 30 23" fill="none"> <svg xmlns="http://www.w3.org/2000/svg" width="30" height="23" viewBox="0 0 30 23" fill="none">
<path d="M11 12.8333C13.9455 12.8333 16.3333 10.4455 16.3333 7.49996C16.3333 4.55444 13.9455 2.16663 11 2.16663C8.05444 2.16663 5.66663 4.55444 5.66663 7.49996C5.66663 10.4455 8.05444 12.8333 11 12.8333Z" fill="#FFA046" stroke="#FFA046" stroke-width="2.66667" stroke-linecap="round" stroke-linejoin="round"/> <path d="M11 12.8333C13.9455 12.8333 16.3333 10.4455 16.3333 7.49996C16.3333 4.55444 13.9455 2.16663 11 2.16663C8.05444 2.16663 5.66663 4.55444 5.66663 7.49996C5.66663 10.4455 8.05444 12.8333 11 12.8333Z" fill="currentColor" stroke="currentColor" stroke-width="2.66667" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M11 12.8333C5.84529 12.8333 1.66663 16.4146 1.66663 20.8333H20.3333C20.3333 16.4146 16.1546 12.8333 11 12.8333Z" fill="#FFA046" stroke="#FFA046" stroke-width="2.66667" stroke-linecap="round" stroke-linejoin="round"/> <path d="M11 12.8333C5.84529 12.8333 1.66663 16.4146 1.66663 20.8333H20.3333C20.3333 16.4146 16.1546 12.8333 11 12.8333Z" fill="currentColor" stroke="currentColor" stroke-width="2.66667" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M19 12.8333C19.8912 12.8332 20.7681 12.6099 21.5508 12.1836C22.3334 11.7573 22.9967 11.1417 23.4801 10.3931C23.9636 9.64441 24.2517 8.78654 24.3182 7.89785C24.3847 7.00915 24.2274 6.11796 23.8607 5.30569C23.4941 4.49343 22.9297 3.786 22.2193 3.24802C21.5088 2.71005 20.6748 2.35869 19.7935 2.22604C18.9123 2.09339 18.0118 2.18369 17.1745 2.48867C16.3371 2.79366 15.5895 3.30362 15 3.97196M19 12.8333C17.924 12.8333 16.196 12.4426 15 11.1866M19 12.8333C24.1547 12.8333 28.3333 16.4146 28.3333 20.8333H20.3333" stroke="#FFA046" stroke-width="2.66667" stroke-linecap="round" stroke-linejoin="round"/> <path d="M19 12.8333C19.8912 12.8332 20.7681 12.6099 21.5508 12.1836C22.3334 11.7573 22.9967 11.1417 23.4801 10.3931C23.9636 9.64441 24.2517 8.78654 24.3182 7.89785C24.3847 7.00915 24.2274 6.11796 23.8607 5.30569C23.4941 4.49343 22.9297 3.786 22.2193 3.24802C21.5088 2.71005 20.6748 2.35869 19.7935 2.22604C18.9123 2.09339 18.0118 2.18369 17.1745 2.48867C16.3371 2.79366 15.5895 3.30362 15 3.97196M19 12.8333C17.924 12.8333 16.196 12.4426 15 11.1866M19 12.8333C24.1547 12.8333 28.3333 16.4146 28.3333 20.8333H20.3333" stroke="currentColor" stroke-width="2.66667" stroke-linecap="round" stroke-linejoin="round"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path stroke="#A7DC22" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m3 3l18 18"/><path fill="#A7DC22" fill-rule="evenodd" d="M5.4 6.23c-.44.33-.843.678-1.21 1.032a15.1 15.1 0 0 0-3.001 4.11a1.44 1.44 0 0 0 0 1.255a15.1 15.1 0 0 0 3 4.111C5.94 18.423 8.518 20 12 20c2.236 0 4.1-.65 5.61-1.562l-3.944-3.943a3 3 0 0 1-4.161-4.161L5.401 6.229zm15.266 9.608a15 15 0 0 0 2.145-3.21a1.44 1.44 0 0 0 0-1.255a15.1 15.1 0 0 0-3-4.111C18.06 5.577 15.483 4 12 4a10.8 10.8 0 0 0-2.808.363z" clip-rule="evenodd"/></g></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m3 3l18 18"/><path fill="currentColor" fill-rule="evenodd" d="M5.4 6.23c-.44.33-.843.678-1.21 1.032a15.1 15.1 0 0 0-3.001 4.11a1.44 1.44 0 0 0 0 1.255a15.1 15.1 0 0 0 3 4.111C5.94 18.423 8.518 20 12 20c2.236 0 4.1-.65 5.61-1.562l-3.944-3.943a3 3 0 0 1-4.161-4.161L5.401 6.229zm15.266 9.608a15 15 0 0 0 2.145-3.21a1.44 1.44 0 0 0 0-1.255a15.1 15.1 0 0 0-3-4.111C18.06 5.577 15.483 4 12 4a10.8 10.8 0 0 0-2.808.363z" clip-rule="evenodd"/></g></svg>

Before

Width:  |  Height:  |  Size: 631 B

After

Width:  |  Height:  |  Size: 641 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><path fill="#A7DC22" fill-rule="evenodd" d="M4.19 7.262C5.94 5.577 8.517 4 12 4s6.06 1.577 7.81 3.262a15.1 15.1 0 0 1 3.001 4.11c.193.399.193.857 0 1.255a15.1 15.1 0 0 1-3 4.111C18.06 18.423 15.483 20 12 20s-6.06-1.577-7.81-3.262a15.1 15.1 0 0 1-3.001-4.11a1.44 1.44 0 0 1 0-1.255a15.1 15.1 0 0 1 3-4.111zM12 15a3 3 0 1 0 0-6a3 3 0 0 0 0 6" clip-rule="evenodd"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M4.19 7.262C5.94 5.577 8.517 4 12 4s6.06 1.577 7.81 3.262a15.1 15.1 0 0 1 3.001 4.11c.193.399.193.857 0 1.255a15.1 15.1 0 0 1-3 4.111C18.06 18.423 15.483 20 12 20s-6.06-1.577-7.81-3.262a15.1 15.1 0 0 1-3.001-4.11a1.44 1.44 0 0 1 0-1.255a15.1 15.1 0 0 1 3-4.111zM12 15a3 3 0 1 0 0-6a3 3 0 0 0 0 6" clip-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 453 B

After

Width:  |  Height:  |  Size: 458 B

View File

@@ -1,3 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.8335 1.66666C5.17045 1.66666 4.53457 1.93005 4.06573 2.39889C3.59689 2.86773 3.3335 3.50362 3.3335 4.16666V16.7817C3.33342 17.0006 3.39087 17.2158 3.50008 17.4056C3.6093 17.5953 3.76645 17.7531 3.95582 17.8631C4.14518 17.973 4.3601 18.0313 4.57906 18.0321C4.79803 18.0329 5.01336 17.9761 5.2035 17.8675L9.58683 15.3625C9.71272 15.2906 9.85519 15.2528 10.0002 15.2528C10.1451 15.2528 10.2876 15.2906 10.4135 15.3625L14.7968 17.8675C14.987 17.9761 15.2023 18.0329 15.4213 18.0321C15.6402 18.0313 15.8552 17.973 16.0445 17.8631C16.2339 17.7531 16.391 17.5953 16.5002 17.4056C16.6095 17.2158 16.6669 17.0006 16.6668 16.7817V4.16666C16.6668 3.50362 16.4034 2.86773 15.9346 2.39889C15.4658 1.93005 14.8299 1.66666 14.1668 1.66666H5.8335Z" fill="#A7DC22"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M5.8335 1.66666C5.17045 1.66666 4.53457 1.93005 4.06573 2.39889C3.59689 2.86773 3.3335 3.50362 3.3335 4.16666V16.7817C3.33342 17.0006 3.39087 17.2158 3.50008 17.4056C3.6093 17.5953 3.76645 17.7531 3.95582 17.8631C4.14518 17.973 4.3601 18.0313 4.57906 18.0321C4.79803 18.0329 5.01336 17.9761 5.2035 17.8675L9.58683 15.3625C9.71272 15.2906 9.85519 15.2528 10.0002 15.2528C10.1451 15.2528 10.2876 15.2906 10.4135 15.3625L14.7968 17.8675C14.987 17.9761 15.2023 18.0329 15.4213 18.0321C15.6402 18.0313 15.8552 17.973 16.0445 17.8631C16.2339 17.7531 16.391 17.5953 16.5002 17.4056C16.6095 17.2158 16.6669 17.0006 16.6668 16.7817V4.16666C16.6668 3.50362 16.4034 2.86773 15.9346 2.39889C15.4658 1.93005 14.8299 1.66666 14.1668 1.66666H5.8335Z" fill="currentColor"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 906 B

After

Width:  |  Height:  |  Size: 911 B

View File

@@ -1,5 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
<g opacity="0.5"> <g opacity="0.5">
<path d="M14.1667 2.5H5.83341C5.39139 2.5 4.96746 2.67559 4.6549 2.98816C4.34234 3.30072 4.16675 3.72464 4.16675 4.16667V16.7817C4.16677 16.8546 4.18596 16.9263 4.22238 16.9895C4.25881 17.0528 4.3112 17.1053 4.37431 17.1419C4.43742 17.1785 4.50904 17.198 4.58201 17.1982C4.65497 17.1984 4.72672 17.1795 4.79008 17.1433L9.17342 14.6392C9.42519 14.4953 9.71013 14.4197 10.0001 14.4197C10.29 14.4197 10.575 14.4953 10.8267 14.6392L15.2101 17.1442C15.2735 17.1804 15.3453 17.1993 15.4184 17.199C15.4914 17.1987 15.5631 17.1793 15.6262 17.1426C15.6894 17.1058 15.7417 17.0532 15.7781 16.9898C15.8145 16.9265 15.8335 16.8547 15.8334 16.7817V4.16667C15.8334 3.72464 15.6578 3.30072 15.3453 2.98816C15.0327 2.67559 14.6088 2.5 14.1667 2.5Z" stroke="#6E8F1B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M14.1667 2.5H5.83341C5.39139 2.5 4.96746 2.67559 4.6549 2.98816C4.34234 3.30072 4.16675 3.72464 4.16675 4.16667V16.7817C4.16677 16.8546 4.18596 16.9263 4.22238 16.9895C4.25881 17.0528 4.3112 17.1053 4.37431 17.1419C4.43742 17.1785 4.50904 17.198 4.58201 17.1982C4.65497 17.1984 4.72672 17.1795 4.79008 17.1433L9.17342 14.6392C9.42519 14.4953 9.71013 14.4197 10.0001 14.4197C10.29 14.4197 10.575 14.4953 10.8267 14.6392L15.2101 17.1442C15.2735 17.1804 15.3453 17.1993 15.4184 17.199C15.4914 17.1987 15.5631 17.1793 15.6262 17.1426C15.6894 17.1058 15.7417 17.0532 15.7781 16.9898C15.8145 16.9265 15.8335 16.8547 15.8334 16.7817V4.16667C15.8334 3.72464 15.6578 3.30072 15.3453 2.98816C15.0327 2.67559 14.6088 2.5 14.1667 2.5Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 949 B

After

Width:  |  Height:  |  Size: 954 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M15.586 3a2 2 0 0 1 2.828 0L21 5.586a2 2 0 0 1 0 2.828L19.414 10L14 4.586L15.586 3zm-3 3l-9 9A2 2 0 0 0 3 16.414V19a2 2 0 0 0 2 2h2.586A2 2 0 0 0 9 20.414l9-9L12.586 6z" fill="#A7DC22"/></g></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M15.586 3a2 2 0 0 1 2.828 0L21 5.586a2 2 0 0 1 0 2.828L19.414 10L14 4.586L15.586 3zm-3 3l-9 9A2 2 0 0 0 3 16.414V19a2 2 0 0 0 2 2h2.586A2 2 0 0 0 9 20.414l9-9L12.586 6z" fill="currentColor"/></g></svg>

Before

Width:  |  Height:  |  Size: 345 B

After

Width:  |  Height:  |  Size: 350 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 28 28" fill="none"> <svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 28 28" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.5174 0.419898C12.1146 0.240744 12.7454 0.203682 13.3595 0.311674C13.9736 0.419665 14.5539 0.669717 15.0542 1.04187C15.5544 1.41403 15.9608 1.89798 16.2407 2.45509C16.5207 3.0122 16.6666 3.62706 16.6667 4.25057V23.7492C16.6666 24.3727 16.5207 24.9876 16.2407 25.5447C15.9608 26.1018 15.5544 26.5858 15.0542 26.9579C14.5539 27.3301 13.9736 27.5801 13.3595 27.6881C12.7454 27.7961 12.1146 27.7591 11.5174 27.5799L3.51735 25.1799C2.69349 24.9328 1.97123 24.4266 1.45773 23.7366C0.944226 23.0466 0.666828 22.2094 0.666687 21.3492V6.65057C0.666828 5.79043 0.944226 4.95325 1.45773 4.26321C1.97123 3.57318 2.69349 3.06704 3.51735 2.8199L11.5174 0.419898ZM18 3.33323C18 2.97961 18.1405 2.64047 18.3905 2.39042C18.6406 2.14037 18.9797 1.9999 19.3334 1.9999H23.3334C24.3942 1.9999 25.4116 2.42133 26.1618 3.17147C26.9119 3.92162 27.3334 4.93903 27.3334 5.9999V7.33323C27.3334 7.68685 27.1929 8.02599 26.9428 8.27604C26.6928 8.52609 26.3536 8.66656 26 8.66656C25.6464 8.66656 25.3073 8.52609 25.0572 8.27604C24.8072 8.02599 24.6667 7.68685 24.6667 7.33323V5.9999C24.6667 5.64628 24.5262 5.30714 24.2762 5.05709C24.0261 4.80704 23.687 4.66656 23.3334 4.66656H19.3334C18.9797 4.66656 18.6406 4.52609 18.3905 4.27604C18.1405 4.02599 18 3.68685 18 3.33323ZM26 19.3332C26.3536 19.3332 26.6928 19.4737 26.9428 19.7238C27.1929 19.9738 27.3334 20.3129 27.3334 20.6666V21.9999C27.3334 23.0608 26.9119 24.0782 26.1618 24.8283C25.4116 25.5785 24.3942 25.9999 23.3334 25.9999H19.3334C18.9797 25.9999 18.6406 25.8594 18.3905 25.6094C18.1405 25.3593 18 25.0202 18 24.6666C18 24.3129 18.1405 23.9738 18.3905 23.7238C18.6406 23.4737 18.9797 23.3332 19.3334 23.3332H23.3334C23.687 23.3332 24.0261 23.1928 24.2762 22.9427C24.5262 22.6927 24.6667 22.3535 24.6667 21.9999V20.6666C24.6667 20.3129 24.8072 19.9738 25.0572 19.7238C25.3073 19.4737 25.6464 19.3332 26 19.3332ZM10 12.6666C9.6464 12.6666 9.30726 12.807 9.05721 13.0571C8.80716 13.3071 8.66669 13.6463 8.66669 13.9999C8.66669 14.3535 8.80716 14.6927 9.05721 14.9427C9.30726 15.1928 9.6464 15.3332 10 15.3332H10.0014C10.355 15.3332 10.6941 15.1928 10.9442 14.9427C11.1942 14.6927 11.3347 14.3535 11.3347 13.9999C11.3347 13.6463 11.1942 13.3071 10.9442 13.0571C10.6941 12.807 10.355 12.6666 10.0014 12.6666H10Z" fill="#FF54A1"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M11.5174 0.419898C12.1146 0.240744 12.7454 0.203682 13.3595 0.311674C13.9736 0.419665 14.5539 0.669717 15.0542 1.04187C15.5544 1.41403 15.9608 1.89798 16.2407 2.45509C16.5207 3.0122 16.6666 3.62706 16.6667 4.25057V23.7492C16.6666 24.3727 16.5207 24.9876 16.2407 25.5447C15.9608 26.1018 15.5544 26.5858 15.0542 26.9579C14.5539 27.3301 13.9736 27.5801 13.3595 27.6881C12.7454 27.7961 12.1146 27.7591 11.5174 27.5799L3.51735 25.1799C2.69349 24.9328 1.97123 24.4266 1.45773 23.7366C0.944226 23.0466 0.666828 22.2094 0.666687 21.3492V6.65057C0.666828 5.79043 0.944226 4.95325 1.45773 4.26321C1.97123 3.57318 2.69349 3.06704 3.51735 2.8199L11.5174 0.419898ZM18 3.33323C18 2.97961 18.1405 2.64047 18.3905 2.39042C18.6406 2.14037 18.9797 1.9999 19.3334 1.9999H23.3334C24.3942 1.9999 25.4116 2.42133 26.1618 3.17147C26.9119 3.92162 27.3334 4.93903 27.3334 5.9999V7.33323C27.3334 7.68685 27.1929 8.02599 26.9428 8.27604C26.6928 8.52609 26.3536 8.66656 26 8.66656C25.6464 8.66656 25.3073 8.52609 25.0572 8.27604C24.8072 8.02599 24.6667 7.68685 24.6667 7.33323V5.9999C24.6667 5.64628 24.5262 5.30714 24.2762 5.05709C24.0261 4.80704 23.687 4.66656 23.3334 4.66656H19.3334C18.9797 4.66656 18.6406 4.52609 18.3905 4.27604C18.1405 4.02599 18 3.68685 18 3.33323ZM26 19.3332C26.3536 19.3332 26.6928 19.4737 26.9428 19.7238C27.1929 19.9738 27.3334 20.3129 27.3334 20.6666V21.9999C27.3334 23.0608 26.9119 24.0782 26.1618 24.8283C25.4116 25.5785 24.3942 25.9999 23.3334 25.9999H19.3334C18.9797 25.9999 18.6406 25.8594 18.3905 25.6094C18.1405 25.3593 18 25.0202 18 24.6666C18 24.3129 18.1405 23.9738 18.3905 23.7238C18.6406 23.4737 18.9797 23.3332 19.3334 23.3332H23.3334C23.687 23.3332 24.0261 23.1928 24.2762 22.9427C24.5262 22.6927 24.6667 22.3535 24.6667 21.9999V20.6666C24.6667 20.3129 24.8072 19.9738 25.0572 19.7238C25.3073 19.4737 25.6464 19.3332 26 19.3332ZM10 12.6666C9.6464 12.6666 9.30726 12.807 9.05721 13.0571C8.80716 13.3071 8.66669 13.6463 8.66669 13.9999C8.66669 14.3535 8.80716 14.6927 9.05721 14.9427C9.30726 15.1928 9.6464 15.3332 10 15.3332H10.0014C10.355 15.3332 10.6941 15.1928 10.9442 14.9427C11.1942 14.6927 11.3347 14.3535 11.3347 13.9999C11.3347 13.6463 11.1942 13.3071 10.9442 13.0571C10.6941 12.807 10.355 12.6666 10.0014 12.6666H10Z" fill="currentColor"/>
<path d="M19.3334 13.9999H26M26 13.9999L23.3334 11.3333M26 13.9999L23.3334 16.6666" stroke="#FF54A1" stroke-width="2.66667" stroke-linecap="round" stroke-linejoin="round"/> <path d="M19.3334 13.9999H26M26 13.9999L23.3334 11.3333M26 13.9999L23.3334 16.6666" stroke="currentColor" stroke-width="2.66667" stroke-linecap="round" stroke-linejoin="round"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M6 21a3 3 0 0 1-3-3v-3h5a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2h5v3a3 3 0 0 1-3 3H6zm15-8h-5a2 2 0 0 0-2 2h-4a2 2 0 0 0-2-2H3V6a3 3 0 0 1 3-3h12a3 3 0 0 1 3 3v7z" fill="#A7DC22"/></g></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M6 21a3 3 0 0 1-3-3v-3h5a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2h5v3a3 3 0 0 1-3 3H6zm15-8h-5a2 2 0 0 0-2 2h-4a2 2 0 0 0-2-2H3V6a3 3 0 0 1 3-3h12a3 3 0 0 1 3 3v7z" fill="currentColor"/></g></svg>

Before

Width:  |  Height:  |  Size: 329 B

After

Width:  |  Height:  |  Size: 334 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="#6E8F1B"><path d="M5 13h3a2 2 0 0 1 2 2h4a2 2 0 0 1 2-2h3V6a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1v7zm14 2h-3a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2H5v3a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-3zM3 6a3 3 0 0 1 3-3h12a3 3 0 0 1 3 3v12a3 3 0 0 1-3 3H6a3 3 0 0 1-3-3V6z"/></g></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="currentColor"><path d="M5 13h3a2 2 0 0 1 2 2h4a2 2 0 0 1 2-2h3V6a1 1 0 0 0-1-1H6a1 1 0 0 0-1 1v7zm14 2h-3a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2H5v3a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-3zM3 6a3 3 0 0 1 3-3h12a3 3 0 0 1 3 3v12a3 3 0 0 1-3 3H6a3 3 0 0 1-3-3V6z"/></g></svg>

Before

Width:  |  Height:  |  Size: 348 B

After

Width:  |  Height:  |  Size: 353 B

View File

@@ -1,3 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none"> <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd" d="M4 6.66663C4 5.60576 4.42143 4.58834 5.17157 3.8382C5.92172 3.08805 6.93913 2.66663 8 2.66663H24C25.0609 2.66663 26.0783 3.08805 26.8284 3.8382C27.5786 4.58834 28 5.60576 28 6.66663V25.3333C28 26.3942 27.5786 27.4116 26.8284 28.1617C26.0783 28.9119 25.0609 29.3333 24 29.3333H8C6.93913 29.3333 5.92172 28.9119 5.17157 28.1617C4.42143 27.4116 4 26.3942 4 25.3333V6.66663ZM10.6667 6.66663V16L13.724 12.9426C13.974 12.6927 14.3131 12.5522 14.6667 12.5522C15.0202 12.5522 15.3593 12.6927 15.6093 12.9426L18.6667 16V6.66663C18.6667 6.313 18.5262 5.97387 18.2761 5.72382C18.0261 5.47377 17.687 5.33329 17.3333 5.33329H12C11.6464 5.33329 11.3072 5.47377 11.0572 5.72382C10.8071 5.97387 10.6667 6.313 10.6667 6.66663Z" fill="#A7DC22"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M4 6.66663C4 5.60576 4.42143 4.58834 5.17157 3.8382C5.92172 3.08805 6.93913 2.66663 8 2.66663H24C25.0609 2.66663 26.0783 3.08805 26.8284 3.8382C27.5786 4.58834 28 5.60576 28 6.66663V25.3333C28 26.3942 27.5786 27.4116 26.8284 28.1617C26.0783 28.9119 25.0609 29.3333 24 29.3333H8C6.93913 29.3333 5.92172 28.9119 5.17157 28.1617C4.42143 27.4116 4 26.3942 4 25.3333V6.66663ZM10.6667 6.66663V16L13.724 12.9426C13.974 12.6927 14.3131 12.5522 14.6667 12.5522C15.0202 12.5522 15.3593 12.6927 15.6093 12.9426L18.6667 16V6.66663C18.6667 6.313 18.5262 5.97387 18.2761 5.72382C18.0261 5.47377 17.687 5.33329 17.3333 5.33329H12C11.6464 5.33329 11.3072 5.47377 11.0572 5.72382C10.8071 5.97387 10.6667 6.313 10.6667 6.66663Z" fill="currentColor"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 881 B

After

Width:  |  Height:  |  Size: 886 B

View File

@@ -1,5 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
<g opacity="0.5"> <g opacity="0.5">
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.66699 5.00018C1.66699 4.34271 2.19998 3.80972 2.85745 3.80972H17.1429C17.8004 3.80972 18.3334 4.34271 18.3334 5.00018C18.3334 5.65765 17.8004 6.19064 17.1429 6.19064H2.85745C2.19998 6.19064 1.66699 5.65765 1.66699 5.00018ZM1.66699 9.76201C1.66699 9.10454 2.19998 8.57155 2.85745 8.57155H17.1429C17.8004 8.57155 18.3334 9.10454 18.3334 9.76201C18.3334 10.4195 17.8004 10.9525 17.1429 10.9525H2.85745C2.19998 10.9525 1.66699 10.4195 1.66699 9.76201ZM1.66699 14.5238C1.66699 13.8664 2.19998 13.3334 2.85745 13.3334H17.1429C17.8004 13.3334 18.3334 13.8664 18.3334 14.5238C18.3334 15.1813 17.8004 15.7143 17.1429 15.7143H2.85745C2.19998 15.7143 1.66699 15.1813 1.66699 14.5238Z" fill="#6E8F1B"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M1.66699 5.00018C1.66699 4.34271 2.19998 3.80972 2.85745 3.80972H17.1429C17.8004 3.80972 18.3334 4.34271 18.3334 5.00018C18.3334 5.65765 17.8004 6.19064 17.1429 6.19064H2.85745C2.19998 6.19064 1.66699 5.65765 1.66699 5.00018ZM1.66699 9.76201C1.66699 9.10454 2.19998 8.57155 2.85745 8.57155H17.1429C17.8004 8.57155 18.3334 9.10454 18.3334 9.76201C18.3334 10.4195 17.8004 10.9525 17.1429 10.9525H2.85745C2.19998 10.9525 1.66699 10.4195 1.66699 9.76201ZM1.66699 14.5238C1.66699 13.8664 2.19998 13.3334 2.85745 13.3334H17.1429C17.8004 13.3334 18.3334 13.8664 18.3334 14.5238C18.3334 15.1813 17.8004 15.7143 17.1429 15.7143H2.85745C2.19998 15.7143 1.66699 15.1813 1.66699 14.5238Z" fill="currentColor"/>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 876 B

After

Width:  |  Height:  |  Size: 881 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="#A7DC22"><path d="M19.707 6.293a1 1 0 0 1 0 1.414l-10 10a1 1 0 0 1-1.414 0l-4-4a1 1 0 1 1 1.414-1.414L9 15.586l9.293-9.293a1 1 0 0 1 1.414 0z"/></g></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="currentColor"><path d="M19.707 6.293a1 1 0 0 1 0 1.414l-10 10a1 1 0 0 1-1.414 0l-4-4a1 1 0 1 1 1.414-1.414L9 15.586l9.293-9.293a1 1 0 0 1 1.414 0z"/></g></svg>

Before

Width:  |  Height:  |  Size: 248 B

After

Width:  |  Height:  |  Size: 253 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><path fill="none" stroke="#A7DC22" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h7m7 0h-7m0 0V5m0 7v7"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h7m7 0h-7m0 0V5m0 7v7"/></svg>

Before

Width:  |  Height:  |  Size: 222 B

After

Width:  |  Height:  |  Size: 227 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 28 28" fill="none"><g fill-rule="evenodd" clip-rule="evenodd" fill="#A7DC22" stroke="#A7DC22" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="8" r="5" fill="#A7DC22"/><path d="M20 21a8 8 0 1 0-16 0"/></g></svg> <svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 28 28" fill="none"><g fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" stroke="currentColor" stroke-width="1.66667" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="8" r="5" fill="currentColor"/><path d="M20 21a8 8 0 1 0-16 0"/></g></svg>

Before

Width:  |  Height:  |  Size: 328 B

After

Width:  |  Height:  |  Size: 343 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><path fill="#A7DC22" fill-rule="evenodd" d="M10 2a3 3 0 0 0-2.83 2H6a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3h12a3 3 0 0 0 3-3V7a3 3 0 0 0-3-3h-1.17A3 3 0 0 0 14 2zM9 5a1 1 0 0 1 1-1h4a1 1 0 1 1 0 2h-4a1 1 0 0 1-1-1m6.78 6.625a1 1 0 1 0-1.56-1.25l-3.303 4.128l-1.21-1.21a1 1 0 0 0-1.414 1.414l2 2a1 1 0 0 0 1.488-.082l4-5z" clip-rule="evenodd"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M10 2a3 3 0 0 0-2.83 2H6a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3h12a3 3 0 0 0 3-3V7a3 3 0 0 0-3-3h-1.17A3 3 0 0 0 14 2zM9 5a1 1 0 0 1 1-1h4a1 1 0 1 1 0 2h-4a1 1 0 0 1-1-1m6.78 6.625a1 1 0 1 0-1.56-1.25l-3.303 4.128l-1.21-1.21a1 1 0 0 0-1.414 1.414l2 2a1 1 0 0 0 1.488-.082l4-5z" clip-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 426 B

After

Width:  |  Height:  |  Size: 431 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><path fill="#A7DC22" fill-rule="evenodd" d="M10 2a3 3 0 0 0-2.83 2H6a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3h12a3 3 0 0 0 3-3V7a3 3 0 0 0-3-3h-1.17A3 3 0 0 0 14 2zM9 5a1 1 0 0 1 1-1h4a1 1 0 1 1 0 2h-4a1 1 0 0 1-1-1m6 8a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2z" clip-rule="evenodd"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M10 2a3 3 0 0 0-2.83 2H6a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3h12a3 3 0 0 0 3-3V7a3 3 0 0 0-3-3h-1.17A3 3 0 0 0 14 2zM9 5a1 1 0 0 1 1-1h4a1 1 0 1 1 0 2h-4a1 1 0 0 1-1-1m6 8a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2z" clip-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 354 B

After

Width:  |  Height:  |  Size: 359 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M8.949 2.684a1 1 0 0 0-1.898.632l1 3a1 1 0 1 0 1.898-.632l-1-3zm6.758 3.023a1 1 0 0 0-1.414-1.414l-2 2a1 1 0 0 0 1.414 1.414l2-2zM3.317 7.051a1 1 0 0 0-.633 1.898l3 1a1 1 0 1 0 .632-1.898l-3-1zm7.025 2.01a1 1 0 0 0-1.282 1.28l4 11a1 1 0 0 0 1.868.03l1.437-3.591l3.928 3.927a1 1 0 1 0 1.414-1.414l-3.928-3.928l3.592-1.436a1 1 0 0 0-.03-1.869l-11-4zm-2.635 4.646a1 1 0 1 0-1.414-1.414l-2 2a1 1 0 1 0 1.414 1.414l2-2z" fill="#A7DC22"/></g></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M8.949 2.684a1 1 0 0 0-1.898.632l1 3a1 1 0 1 0 1.898-.632l-1-3zm6.758 3.023a1 1 0 0 0-1.414-1.414l-2 2a1 1 0 0 0 1.414 1.414l2-2zM3.317 7.051a1 1 0 0 0-.633 1.898l3 1a1 1 0 1 0 .632-1.898l-3-1zm7.025 2.01a1 1 0 0 0-1.282 1.28l4 11a1 1 0 0 0 1.868.03l1.437-3.591l3.928 3.927a1 1 0 1 0 1.414-1.414l-3.928-3.928l3.592-1.436a1 1 0 0 0-.03-1.869l-11-4zm-2.635 4.646a1 1 0 1 0-1.414-1.414l-2 2a1 1 0 1 0 1.414 1.414l2-2z" fill="currentColor"/></g></svg>

Before

Width:  |  Height:  |  Size: 591 B

After

Width:  |  Height:  |  Size: 596 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 28 28" fill="none"><path fill="#A7DC22" fill-rule="evenodd" d="M9.024 2.783A1 1 0 0 1 10 2h4a1 1 0 0 1 .976.783l.44 1.981q.6.285 1.14.66l1.938-.61a1 1 0 0 1 1.166.454l2 3.464a1 1 0 0 1-.19 1.237l-1.497 1.373a8 8 0 0 1 0 1.316l1.497 1.373a1 1 0 0 1 .19 1.237l-2 3.464a1 1 0 0 1-1.166.454l-1.937-.61q-.54.375-1.14.66l-.44 1.98A1 1 0 0 1 14 22h-4a1 1 0 0 1-.976-.783l-.44-1.981q-.6-.285-1.14-.66l-1.938.61a1 1 0 0 1-1.166-.454l-2-3.464a1 1 0 0 1 .19-1.237l1.497-1.373a8 8 0 0 1 0-1.316L2.53 9.97a1 1 0 0 1-.19-1.237l2-3.464a1 1 0 0 1 1.166-.454l1.937.61q.54-.375 1.14-.66l.44-1.98zM12 15a3 3 0 1 0 0-6a3 3 0 0 0 0 6" clip-rule="evenodd"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 28 28" fill="none"><path fill="currentColor" fill-rule="evenodd" d="M9.024 2.783A1 1 0 0 1 10 2h4a1 1 0 0 1 .976.783l.44 1.981q.6.285 1.14.66l1.938-.61a1 1 0 0 1 1.166.454l2 3.464a1 1 0 0 1-.19 1.237l-1.497 1.373a8 8 0 0 1 0 1.316l1.497 1.373a1 1 0 0 1 .19 1.237l-2 3.464a1 1 0 0 1-1.166.454l-1.937-.61q-.54.375-1.14.66l-.44 1.98A1 1 0 0 1 14 22h-4a1 1 0 0 1-.976-.783l-.44-1.981q-.6-.285-1.14-.66l-1.938.61a1 1 0 0 1-1.166-.454l-2-3.464a1 1 0 0 1 .19-1.237l1.497-1.373a8 8 0 0 1 0-1.316L2.53 9.97a1 1 0 0 1-.19-1.237l2-3.464a1 1 0 0 1 1.166-.454l1.937.61q.54-.375 1.14-.66l.44-1.98zM12 15a3 3 0 1 0 0-6a3 3 0 0 0 0 6" clip-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 717 B

After

Width:  |  Height:  |  Size: 722 B

View File

@@ -1,4 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="18" viewBox="0 0 16 18" fill="none"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="18" viewBox="0 0 16 18" fill="none">
<path d="M1.3335 4.83332V6.49999H14.6668V4.83332C14.6668 4.3913 14.4912 3.96737 14.1787 3.65481C13.8661 3.34225 13.4422 3.16666 13.0002 3.16666H3.00016C2.55814 3.16666 2.13421 3.34225 1.82165 3.65481C1.50909 3.96737 1.3335 4.3913 1.3335 4.83332Z" fill="#A7DC22"/> <path d="M1.3335 4.83332V6.49999H14.6668V4.83332C14.6668 4.3913 14.4912 3.96737 14.1787 3.65481C13.8661 3.34225 13.4422 3.16666 13.0002 3.16666H3.00016C2.55814 3.16666 2.13421 3.34225 1.82165 3.65481C1.50909 3.96737 1.3335 4.3913 1.3335 4.83332Z" fill="currentColor"/>
<path d="M11.3335 3.16667H13.0002C13.4422 3.16667 13.8661 3.34226 14.1787 3.65482C14.4912 3.96738 14.6668 4.39131 14.6668 4.83333V6.5H1.3335V4.83333C1.3335 4.39131 1.50909 3.96738 1.82165 3.65482C2.13421 3.34226 2.55814 3.16667 3.00016 3.16667H4.66683M11.3335 3.16667V1.5M11.3335 3.16667H4.66683M4.66683 3.16667V1.5M1.3335 6.91667V14.8333C1.3335 15.2754 1.50909 15.6993 1.82165 16.0118C2.13421 16.3244 2.55814 16.5 3.00016 16.5H13.0002C13.4422 16.5 13.8661 16.3244 14.1787 16.0118C14.4912 15.6993 14.6668 15.2754 14.6668 14.8333V6.91667" stroke="#A7DC22" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M11.3335 3.16667H13.0002C13.4422 3.16667 13.8661 3.34226 14.1787 3.65482C14.4912 3.96738 14.6668 4.39131 14.6668 4.83333V6.5H1.3335V4.83333C1.3335 4.39131 1.50909 3.96738 1.82165 3.65482C2.13421 3.34226 2.55814 3.16667 3.00016 3.16667H4.66683M11.3335 3.16667V1.5M11.3335 3.16667H4.66683M4.66683 3.16667V1.5M1.3335 6.91667V14.8333C1.3335 15.2754 1.50909 15.6993 1.82165 16.0118C2.13421 16.3244 2.55814 16.5 3.00016 16.5H13.0002C13.4422 16.5 13.8661 16.3244 14.1787 16.0118C14.4912 15.6993 14.6668 15.2754 14.6668 14.8333V6.91667" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 991 B

After

Width:  |  Height:  |  Size: 1001 B

View File

@@ -1,5 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
<g opacity="0.5"> <g opacity="0.5">
<path d="M3.33325 7.5V15.8333C3.33325 16.2754 3.50885 16.6993 3.82141 17.0118C4.13397 17.3244 4.55789 17.5 4.99992 17.5H14.9999C15.4419 17.5 15.8659 17.3244 16.1784 17.0118C16.491 16.6993 16.6666 16.2754 16.6666 15.8333V7.5M3.33325 7.5V5.83333C3.33325 5.39131 3.50885 4.96738 3.82141 4.65482C4.13397 4.34226 4.55789 4.16667 4.99992 4.16667H6.66659M3.33325 7.5H16.6666M16.6666 7.5V5.83333C16.6666 5.39131 16.491 4.96738 16.1784 4.65482C15.8659 4.34226 15.4419 4.16667 14.9999 4.16667H13.3333M6.66659 4.16667H13.3333M6.66659 4.16667V2.5M13.3333 4.16667V2.5" stroke="#6E8F1B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> <path d="M3.33325 7.5V15.8333C3.33325 16.2754 3.50885 16.6993 3.82141 17.0118C4.13397 17.3244 4.55789 17.5 4.99992 17.5H14.9999C15.4419 17.5 15.8659 17.3244 16.1784 17.0118C16.491 16.6993 16.6666 16.2754 16.6666 15.8333V7.5M3.33325 7.5V5.83333C3.33325 5.39131 3.50885 4.96738 3.82141 4.65482C4.13397 4.34226 4.55789 4.16667 4.99992 4.16667H6.66659M3.33325 7.5H16.6666M16.6666 7.5V5.83333C16.6666 5.39131 16.491 4.96738 16.1784 4.65482C15.8659 4.34226 15.4419 4.16667 14.9999 4.16667H13.3333M6.66659 4.16667H13.3333M6.66659 4.16667V2.5M13.3333 4.16667V2.5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 772 B

After

Width:  |  Height:  |  Size: 777 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M11 5a1 1 0 0 0-1 1h4a1 1 0 0 0-1-1h-2zm0-2a3 3 0 0 0-3 3H4a1 1 0 0 0 0 2h1v10a3 3 0 0 0 3 3h8a3 3 0 0 0 3-3V8h1a1 1 0 1 0 0-2h-4a3 3 0 0 0-3-3h-2zm0 8a1 1 0 1 0-2 0v5a1 1 0 1 0 2 0v-5zm4 0a1 1 0 1 0-2 0v5a1 1 0 1 0 2 0v-5z" fill="#A7DC22"/></g></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><g fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M11 5a1 1 0 0 0-1 1h4a1 1 0 0 0-1-1h-2zm0-2a3 3 0 0 0-3 3H4a1 1 0 0 0 0 2h1v10a3 3 0 0 0 3 3h8a3 3 0 0 0 3-3V8h1a1 1 0 1 0 0-2h-4a3 3 0 0 0-3-3h-2zm0 8a1 1 0 1 0-2 0v5a1 1 0 1 0 2 0v-5zm4 0a1 1 0 1 0-2 0v5a1 1 0 1 0 2 0v-5z" fill="currentColor"/></g></svg>

Before

Width:  |  Height:  |  Size: 400 B

After

Width:  |  Height:  |  Size: 405 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><path fill="none" stroke="#A7DC22" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 9v5h5m11 2c-.497-4.5-3.367-8-8-8c-2.73 0-5.929 2.268-7.294 5.5"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 9v5h5m11 2c-.497-4.5-3.367-8-8-8c-2.73 0-5.929 2.268-7.294 5.5"/></svg>

Before

Width:  |  Height:  |  Size: 261 B

After

Width:  |  Height:  |  Size: 266 B

View File

@@ -136,7 +136,7 @@ body {
height:20px; height:20px;
opacity:0.6; opacity:0.6;
transition:opacity 0.2s ease; transition:opacity 0.2s ease;
filter:invert(var(--icon-invert)) sepia(var(--icon-sepia)) saturate(var(--icon-saturate)) hue-rotate(var(--icon-hue-rotate)) brightness(var(--icon-brightness)); filter: var(--icon-filter);
} }
.show-password:hover .icon-eye { .show-password:hover .icon-eye {
opacity:1; opacity:1;

View File

@@ -128,7 +128,7 @@ body {
height:20px; height:20px;
opacity:0.6; opacity:0.6;
transition:opacity 0.2s ease; transition:opacity 0.2s ease;
filter:invert(var(--icon-invert)) sepia(var(--icon-sepia)) saturate(var(--icon-saturate)) hue-rotate(var(--icon-hue-rotate)) brightness(var(--icon-brightness)); filter: var(--icon-filter);
} }
.show-password:hover .icon-eye { .show-password:hover .icon-eye {
opacity:1; opacity:1;

View File

@@ -1,7 +1,7 @@
{ {
"manifest_version": 3, "manifest_version": 3,
"name": "Firxa", "name": "Firxa",
"version": "1.3.5", "version": "1.4.0",
"description": "KRÉTA webes verziójának újraírása", "description": "KRÉTA webes verziójának újraírása",
"icons": { "icons": {
"128": "images/firka_logo_128.png" "128": "images/firka_logo_128.png"

View File

@@ -1,7 +1,7 @@
{ {
"manifest_version": 3, "manifest_version": 3,
"name": "Firxa", "name": "Firxa",
"version": "1.3.4", "version": "1.4.0",
"description": "KRÉTA webes verziójának újraírása", "description": "KRÉTA webes verziójának újraírása",
"icons": { "icons": {
"128": "images/firka_logo_128.png" "128": "images/firka_logo_128.png"

View File

@@ -133,7 +133,7 @@ body {
} }
.logout-card { .logout-card {
height:180px; height:180px;
background:var(--error-card); background:var(--card-card);
box-shadow:0px 1px var(--shadow-blur) 0px var(--accent-shadow); box-shadow:0px 1px var(--shadow-blur) 0px var(--accent-shadow);
} }
.role-icon { .role-icon {

View File

@@ -245,3 +245,496 @@ h2 {
font-size:18px; font-size:18px;
vertical-align:middle; vertical-align:middle;
} }
.custom-themes-section {
margin-top: 16px;
padding-top: 16px;
border-top: 1px solid var(--border-border, var(--text-teritary));
}
.custom-themes-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 12px;
font-weight: 600;
font-size: 14px;
color: var(--text-primary);
}
.add-theme-btn {
display: flex;
align-items: center;
justify-content: center;
width: 32px;
height: 32px;
border: none;
border-radius: 8px;
background: var(--accent-15);
color: var(--accent-accent);
cursor: pointer;
transition: all 0.2s ease;
}
.add-theme-btn:hover {
background: var(--accent-accent);
color: var(--button-secondaryFill);
}
.custom-themes-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 12px;
min-height: 50px;
}
.custom-theme-option {
position: relative;
display: flex;
flex-direction: column;
background: var(--button-secondaryFill);
border-radius: 12px;
overflow: hidden;
border: 1px solid var(--border-border, var(--text-teritary));
transition: all 0.2s ease;
}
.custom-theme-option:hover {
border-color: var(--accent-accent);
transform: translateY(-2px);
}
.custom-theme-option.active {
border-color: var(--accent-accent);
box-shadow: 0 0 0 2px var(--accent-15);
}
.custom-theme-option .theme-preview {
height: 70px;
border-radius: 0;
}
.custom-theme-option .theme-info {
display: flex;
align-items: center;
justify-content: space-between;
padding: 8px 10px;
background: var(--button-secondaryFill);
border-top: 1px solid var(--border-border, var(--text-teritary));
gap: 8px;
}
.custom-theme-option .theme-name {
font-size: 12px;
font-weight: 600;
color: var(--text-primary);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
flex: 1;
min-width: 0;
}
.custom-theme-option .theme-actions {
display: flex;
gap: 4px;
flex-shrink: 0;
}
.theme-action-btn {
display: flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
border: none;
border-radius: 6px;
background: var(--accent-15);
color: var(--accent-accent);
cursor: pointer;
transition: all 0.2s ease;
}
.theme-action-btn:hover {
background: var(--accent-accent);
color: var(--button-secondaryFill);
}
.theme-action-btn.delete-theme {
background: rgba(255, 80, 80, 0.15);
color: #ff5050;
}
.theme-action-btn.delete-theme:hover {
background: #ff5050;
color: white;
}
.theme-action-btn .material-icons-round {
font-size: 16px;
}
.no-custom-themes {
grid-column: 1 / -1;
text-align: center;
color: var(--text-secondary);
font-size: 12px;
padding: 20px 0;
}
.modal-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.7);
backdrop-filter: blur(4px);
display: none;
align-items: center;
justify-content: center;
z-index: 1000;
padding: 16px;
animation: fadeIn 0.2s ease;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
.modal-overlay.active {
display: flex;
}
.modal-content {
background: var(--card-card);
border-radius: 20px;
width: 100%;
max-width: 420px;
max-height: 90vh;
overflow-y: auto;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);
animation: slideUp 0.3s cubic-bezier(0.4, 0, 0.2, 1);
border: 1px solid var(--border-border, var(--text-teritary));
}
@keyframes slideUp {
from {
opacity: 0;
transform: translateY(20px) scale(0.95);
}
to {
opacity: 1;
transform: translateY(0) scale(1);
}
}
.modal-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20px;
border-bottom: 1px solid var(--border-border, var(--text-teritary));
}
.modal-header h3 {
font-size: 18px;
font-weight: 700;
color: var(--text-primary);
margin: 0;
}
.modal-close {
display: flex;
align-items: center;
justify-content: center;
width: 36px;
height: 36px;
border: none;
border-radius: 10px;
background: var(--button-secondaryFill);
color: var(--text-secondary);
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.modal-close:hover {
background: var(--error-15);
color: var(--error-accent);
transform: rotate(90deg);
}
.modal-close .material-icons-round {
font-size: 20px;
}
.modal-body {
padding: 20px;
}
.modal-footer {
display: flex;
gap: 8px;
padding: 16px;
border-top: 1px solid var(--border-border, var(--text-teritary));
}
.modal-footer button {
flex: 1;
padding: 10px 16px;
border: none;
border-radius: 8px;
font-weight: 500;
font-size: 14px;
cursor: pointer;
transition: all 0.2s ease;
font-family: "Montserrat", serif;
}
.btn-primary {
background: var(--accent-accent);
color: #000;
}
.btn-primary:hover {
opacity: 0.9;
}
.btn-secondary {
background: var(--button-secondaryFill);
color: var(--text-primary);
}
.btn-secondary:hover {
background: var(--accent-15);
}
.theme-form .form-group {
margin-bottom: 16px;
}
.theme-form label {
display: block;
font-size: 13px;
font-weight: 500;
color: var(--text-primary);
margin-bottom: 8px;
}
.theme-form input[type="text"] {
width: 100%;
padding: 10px 12px;
border: 1px solid var(--border-border, var(--text-teritary));
border-radius: 8px;
background: var(--button-secondaryFill);
color: var(--text-primary);
font-size: 14px;
font-family: "Montserrat", serif;
outline: none;
transition: border-color 0.2s ease;
}
.theme-form input[type="text"]:focus {
border-color: var(--accent-accent);
}
.mode-selector {
display: flex;
gap: 8px;
}
.mode-option {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
gap: 6px;
padding: 10px;
border: 1px solid var(--border-border, var(--text-teritary));
border-radius: 8px;
background: var(--button-secondaryFill);
color: var(--text-secondary);
cursor: pointer;
transition: all 0.2s ease;
font-family: "Montserrat", serif;
font-size: 13px;
}
.mode-option:hover {
border-color: var(--accent-accent);
}
.mode-option.active {
background: var(--accent-15);
border-color: var(--accent-accent);
color: var(--accent-accent);
}
.color-section {
margin-top: 20px;
}
.color-section h4 {
font-size: 14px;
font-weight: 600;
color: var(--text-primary);
margin: 0 0 12px 0;
}
.color-group {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 12px;
}
.color-group label {
font-size: 13px;
color: var(--text-secondary);
margin: 0;
}
.color-input-wrapper {
display: flex;
align-items: center;
gap: 8px;
}
.color-input-wrapper input[type="color"] {
width: 32px;
height: 32px;
border: none;
border-radius: 6px;
cursor: pointer;
padding: 0;
background: transparent;
}
.color-input-wrapper input[type="color"]::-webkit-color-swatch-wrapper {
padding: 0;
}
.color-input-wrapper input[type="color"]::-webkit-color-swatch {
border: none;
border-radius: 6px;
}
.color-hex {
width: 80px;
padding: 6px 8px;
border: 1px solid var(--border-border, var(--text-teritary));
border-radius: 6px;
background: var(--button-secondaryFill);
color: var(--text-primary);
font-size: 12px;
font-family: monospace;
text-transform: uppercase;
}
.theme-preview-section {
margin-top: 20px;
}
.theme-preview-section h4 {
font-size: 14px;
font-weight: 600;
color: var(--text-primary);
margin: 0 0 12px 0;
}
.live-preview {
width: 100%;
height: 80px;
border-radius: 8px;
overflow: hidden;
position: relative;
}
.live-preview .preview-header {
height: 30%;
width: 100%;
}
.live-preview .preview-content {
padding: 8px;
}
.live-preview .preview-card {
height: 20px;
border-radius: 4px;
margin-bottom: 4px;
}
.live-preview .preview-text {
font-size: 10px;
}
.share-code-wrapper {
position: relative;
margin-top: 12px;
}
.share-code-wrapper textarea,
#importCode {
width: 100%;
min-height: 80px;
padding: 12px;
border: 1px solid var(--border-border, var(--text-teritary));
border-radius: 8px;
background: var(--button-secondaryFill);
color: var(--text-primary);
font-family: monospace;
font-size: 12px;
resize: none;
outline: none;
}
.share-code-wrapper textarea:focus,
#importCode:focus {
border-color: var(--accent-accent);
}
.copy-btn {
position: absolute;
top: 8px;
right: 8px;
display: flex;
align-items: center;
justify-content: center;
width: 32px;
height: 32px;
border: none;
border-radius: 6px;
background: var(--accent-15);
color: var(--accent-accent);
cursor: pointer;
transition: all 0.2s ease;
}
.copy-btn:hover {
background: var(--accent-accent);
color: var(--button-secondaryFill);
}
.copy-btn.copied {
background: var(--grades-4);
color: white;
}
.error-message {
color: var(--error-accent);
font-size: 12px;
margin-top: 8px;
min-height: 16px;
}
.import-modal .modal-body p {
color: var(--text-secondary);
font-size: 13px;
margin-bottom: 8px;
}
#importCode {
margin-top: 8px;
}

View File

@@ -51,6 +51,17 @@
<span class="theme-name" data-i18n="settings.themes.dark_green">Sötét Zöld</span> <span class="theme-name" data-i18n="settings.themes.dark_green">Sötét Zöld</span>
</button> </button>
</div> </div>
<div class="custom-themes-section">
<div class="custom-themes-header">
<span data-i18n="settings.custom_themes.title">Egyéni témák</span>
<button class="add-theme-btn" id="addCustomTheme">
<span class="material-icons-round">add</span>
</button>
</div>
<div class="theme-grid custom-themes-grid" id="customThemesGrid">
</div>
</div>
</div> </div>
<div class="setting-section"> <div class="setting-section">
<div class="setting-header"> <div class="setting-header">
@@ -107,6 +118,123 @@
<div class="version-info" id="version">v1.3.0</div> <div class="version-info" id="version">v1.3.0</div>
</footer> </footer>
</div> </div>
<div class="modal-overlay" id="themeEditorModal">
<div class="modal-content theme-editor-modal">
<div class="modal-header">
<h3 id="themeEditorTitle" data-i18n="settings.custom_themes.create">Új téma létrehozása</h3>
<button class="modal-close" id="closeThemeEditor">
<span class="material-icons-round">close</span>
</button>
</div>
<div class="modal-body">
<div class="theme-form">
<div class="form-group">
<label for="themeName" data-i18n="settings.custom_themes.name">Téma neve</label>
<input type="text" id="themeName" placeholder="Pl. Kék éjszaka">
</div>
<div class="form-group">
<label data-i18n="settings.custom_themes.mode">Mód</label>
<div class="mode-selector">
<button class="mode-option active" data-mode="dark">
<span class="material-icons-round">dark_mode</span>
<span data-i18n="settings.custom_themes.dark_mode">Sötét</span>
</button>
<button class="mode-option" data-mode="light">
<span class="material-icons-round">light_mode</span>
<span data-i18n="settings.custom_themes.light_mode">Világos</span>
</button>
</div>
</div>
<div class="color-section">
<h4 data-i18n="settings.custom_themes.colors">Színek</h4>
<div class="color-group">
<label data-i18n="settings.custom_themes.accent_color">Kiemelő szín</label>
<div class="color-input-wrapper">
<input type="color" id="accentColor" value="#A7DC22">
<input type="text" class="color-hex" id="accentColorHex" value="#A7DC22">
</div>
</div>
<div class="color-group">
<label data-i18n="settings.custom_themes.background_color">Háttér szín</label>
<div class="color-input-wrapper">
<input type="color" id="backgroundColor" value="#0D1202">
<input type="text" class="color-hex" id="backgroundColorHex" value="#0D1202">
</div>
</div>
<div class="color-group">
<label data-i18n="settings.custom_themes.card_color">Kártya szín</label>
<div class="color-input-wrapper">
<input type="color" id="cardColor" value="#141905">
<input type="text" class="color-hex" id="cardColorHex" value="#141905">
</div>
</div>
<div class="color-group">
<label data-i18n="settings.custom_themes.text_color">Szöveg szín</label>
<div class="color-input-wrapper">
<input type="color" id="textColor" value="#EAF7CC">
<input type="text" class="color-hex" id="textColorHex" value="#EAF7CC">
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn-secondary" id="cancelThemeEditor" data-i18n="common.cancel">Mégse</button>
<button class="btn-primary" id="saveTheme" data-i18n="common.save">Mentés</button>
</div>
</div>
</div>
<div class="modal-overlay" id="shareThemeModal">
<div class="modal-content share-modal">
<div class="modal-header">
<h3 data-i18n="settings.custom_themes.share">Téma megosztása</h3>
<button class="modal-close" id="closeShareModal">
<span class="material-icons-round">close</span>
</button>
</div>
<div class="modal-body">
<p data-i18n="settings.custom_themes.share_description">Másold ki a kódot és oszd meg másokkal:</p>
<div class="share-code-wrapper">
<textarea id="shareCode" readonly></textarea>
<button class="copy-btn" id="copyShareCode">
<span class="material-icons-round">content_copy</span>
</button>
</div>
</div>
<div class="modal-footer">
<button class="btn-primary" id="closeShareModalBtn" data-i18n="common.close">Bezárás</button>
</div>
</div>
</div>
<div class="modal-overlay" id="importThemeModal">
<div class="modal-content import-modal">
<div class="modal-header">
<h3 data-i18n="settings.custom_themes.import">Téma importálása</h3>
<button class="modal-close" id="closeImportModal">
<span class="material-icons-round">close</span>
</button>
</div>
<div class="modal-body">
<p data-i18n="settings.custom_themes.import_description">Illeszd be a téma kódot:</p>
<textarea id="importCode" placeholder="Illessze be a téma kódot ide..."></textarea>
<p class="error-message" id="importError"></p>
</div>
<div class="modal-footer">
<button class="btn-secondary" id="cancelImport" data-i18n="common.cancel">Mégse</button>
<button class="btn-primary" id="confirmImport" data-i18n="settings.custom_themes.import">Importálás</button>
</div>
</div>
</div>
<script src="../tools/storageManager.js"></script> <script src="../tools/storageManager.js"></script>
<script src="../global/language.js"></script> <script src="../global/language.js"></script>
<script src="index.js"></script> <script src="index.js"></script>

View File

@@ -3,6 +3,311 @@ document.addEventListener("DOMContentLoaded", async () => {
await new Promise((resolve) => setTimeout(resolve, 10)); await new Promise((resolve) => setTimeout(resolve, 10));
} }
let customThemes = [];
let editingThemeId = null;
async function loadCustomThemes() {
try {
const saved = await storageManager.get("customThemes", []);
customThemes = Array.isArray(saved) ? saved : [];
renderCustomThemes();
} catch (error) {
console.error("Error loading custom themes:", error);
customThemes = [];
}
}
async function saveCustomThemes() {
try {
await storageManager.set("customThemes", customThemes);
} catch (error) {
console.error("Error saving custom themes:", error);
}
}
function renderCustomThemes() {
const grid = document.getElementById("customThemesGrid");
if (!grid) return;
if (customThemes.length === 0) {
grid.innerHTML = `<div class="no-custom-themes" data-i18n="settings.custom_themes.no_themes">Még nincsenek egyéni témák</div>`;
if (window.LanguageManager) {
window.LanguageManager.updatePageTranslations();
}
return;
}
grid.innerHTML = customThemes.map(theme => `
<button class="theme-option custom-theme-option" data-theme="custom-${theme.id}">
<div class="theme-preview" style="background: ${theme.colors.background};">
<div class="preview-header" style="background: ${theme.colors.card};"></div>
<div class="preview-content">
<div class="preview-card" style="background: ${theme.colors.accent}20; border: 1px solid ${theme.colors.accent};"></div>
</div>
</div>
<div class="theme-info">
<span class="theme-name">${theme.name}</span>
<div class="theme-actions">
<span class="theme-action-btn edit-theme" data-id="${theme.id}" title="Szerkesztés">
<span class="material-icons-round">edit</span>
</span>
<span class="theme-action-btn share-theme" data-id="${theme.id}" title="Megosztás">
<span class="material-icons-round">share</span>
</span>
<span class="theme-action-btn delete-theme" data-id="${theme.id}" title="Törlés">
<span class="material-icons-round">delete</span>
</span>
</div>
</div>
</button>
`).join("");
grid.querySelectorAll(".custom-theme-option").forEach(btn => {
btn.addEventListener("click", (e) => {
if (e.target.closest(".theme-action-btn")) return;
const themeId = btn.dataset.theme;
applyTheme(themeId);
});
});
grid.querySelectorAll(".edit-theme").forEach(btn => {
btn.addEventListener("click", (e) => {
e.stopPropagation();
const id = btn.dataset.id;
editTheme(id);
});
});
grid.querySelectorAll(".share-theme").forEach(btn => {
btn.addEventListener("click", (e) => {
e.stopPropagation();
const id = btn.dataset.id;
shareTheme(id);
});
});
grid.querySelectorAll(".delete-theme").forEach(btn => {
btn.addEventListener("click", (e) => {
e.stopPropagation();
const id = btn.dataset.id;
deleteTheme(id);
});
});
updateThemeButtons(getCurrentTheme());
}
function openThemeEditor(theme = null) {
const modal = document.getElementById("themeEditorModal");
const titleEl = document.getElementById("themeEditorTitle");
if (theme) {
editingThemeId = theme.id;
titleEl.setAttribute("data-i18n", "settings.custom_themes.edit");
titleEl.textContent = window.LanguageManager ? window.LanguageManager.t("settings.custom_themes.edit") : "Téma szerkesztése";
document.getElementById("themeName").value = theme.name;
document.getElementById("accentColor").value = theme.colors.accent;
document.getElementById("accentColorHex").value = theme.colors.accent;
document.getElementById("backgroundColor").value = theme.colors.background;
document.getElementById("backgroundColorHex").value = theme.colors.background;
document.getElementById("cardColor").value = theme.colors.card;
document.getElementById("cardColorHex").value = theme.colors.card;
document.getElementById("textColor").value = theme.colors.text;
document.getElementById("textColorHex").value = theme.colors.text;
document.querySelectorAll(".mode-option").forEach(btn => {
btn.classList.toggle("active", btn.dataset.mode === theme.mode);
});
} else {
editingThemeId = null;
titleEl.setAttribute("data-i18n", "settings.custom_themes.create");
titleEl.textContent = window.LanguageManager ? window.LanguageManager.t("settings.custom_themes.create") : "Új téma létrehozása";
document.getElementById("themeName").value = "";
document.getElementById("accentColor").value = "#A7DC22";
document.getElementById("accentColorHex").value = "#A7DC22";
document.getElementById("backgroundColor").value = "#0D1202";
document.getElementById("backgroundColorHex").value = "#0D1202";
document.getElementById("cardColor").value = "#141905";
document.getElementById("cardColorHex").value = "#141905";
document.getElementById("textColor").value = "#EAF7CC";
document.getElementById("textColorHex").value = "#EAF7CC";
document.querySelectorAll(".mode-option").forEach(btn => {
btn.classList.toggle("active", btn.dataset.mode === "dark");
});
}
updateLivePreview();
modal.classList.add("active");
}
function closeThemeEditor() {
const modal = document.getElementById("themeEditorModal");
modal.classList.remove("active");
editingThemeId = null;
}
function updateLivePreview() {
const preview = document.getElementById("livePreview");
if (!preview) return;
const backgroundColor = document.getElementById("backgroundColor").value;
const cardColor = document.getElementById("cardColor").value;
const accentColor = document.getElementById("accentColor").value;
const textColor = document.getElementById("textColor").value;
preview.style.background = backgroundColor;
preview.querySelector(".preview-header").style.background = cardColor;
preview.querySelector(".preview-card").style.background = `${accentColor}20`;
preview.querySelector(".preview-card").style.border = `1px solid ${accentColor}`;
preview.querySelector(".preview-text").style.color = textColor;
}
function saveThemeFromEditor() {
const name = document.getElementById("themeName").value.trim();
if (!name) {
document.getElementById("themeName").focus();
return;
}
const mode = document.querySelector(".mode-option.active")?.dataset.mode || "dark";
const colors = {
accent: document.getElementById("accentColor").value,
background: document.getElementById("backgroundColor").value,
card: document.getElementById("cardColor").value,
text: document.getElementById("textColor").value
};
if (editingThemeId) {
const index = customThemes.findIndex(t => t.id === editingThemeId);
if (index !== -1) {
customThemes[index] = {
...customThemes[index],
name,
mode,
colors
};
}
} else {
const newTheme = {
id: Date.now().toString(36) + Math.random().toString(36).substr(2, 5),
name,
mode,
colors
};
customThemes.push(newTheme);
}
saveCustomThemes();
renderCustomThemes();
closeThemeEditor();
}
function editTheme(id) {
const theme = customThemes.find(t => t.id === id);
if (theme) {
openThemeEditor(theme);
}
}
function shareTheme(id) {
const theme = customThemes.find(t => t.id === id);
if (!theme) return;
const shareData = {
v: 1,
n: theme.name,
m: theme.mode,
c: theme.colors
};
const code = btoa(JSON.stringify(shareData));
document.getElementById("shareCode").value = code;
document.getElementById("shareThemeModal").classList.add("active");
}
function deleteTheme(id) {
const confirmMsg = window.LanguageManager ?
window.LanguageManager.t("settings.custom_themes.delete_confirm") :
"Biztosan törölni szeretnéd ezt a témát?";
if (confirm(confirmMsg)) {
customThemes = customThemes.filter(t => t.id !== id);
saveCustomThemes();
renderCustomThemes();
const currentTheme = getCurrentTheme();
if (currentTheme === `custom-${id}`) {
applyTheme("light-green");
}
}
}
function importTheme() {
const code = document.getElementById("importCode").value.trim();
const errorEl = document.getElementById("importError");
errorEl.textContent = "";
if (!code) {
errorEl.textContent = window.LanguageManager ?
window.LanguageManager.t("settings.custom_themes.import_error_empty") :
"Kérlek illeszd be a téma kódot!";
return;
}
try {
const data = JSON.parse(atob(code));
if (!data.n || !data.m || !data.c) {
throw new Error("Invalid theme data");
}
const newTheme = {
id: Date.now().toString(36) + Math.random().toString(36).substr(2, 5),
name: data.n,
mode: data.m,
colors: data.c
};
customThemes.push(newTheme);
saveCustomThemes();
renderCustomThemes();
closeImportModal();
} catch (error) {
errorEl.textContent = window.LanguageManager ?
window.LanguageManager.t("settings.custom_themes.import_error_invalid") :
"Érvénytelen téma kód!";
}
}
function closeImportModal() {
document.getElementById("importThemeModal").classList.remove("active");
document.getElementById("importCode").value = "";
document.getElementById("importError").textContent = "";
}
function closeShareModal() {
document.getElementById("shareThemeModal").classList.remove("active");
}
function copyShareCode() {
const textarea = document.getElementById("shareCode");
textarea.select();
document.execCommand("copy");
const btn = document.getElementById("copyShareCode");
btn.classList.add("copied");
btn.querySelector(".material-icons-round").textContent = "check";
setTimeout(() => {
btn.classList.remove("copied");
btn.querySelector(".material-icons-round").textContent = "content_copy";
}, 2000);
}
function getCurrentTheme() { function getCurrentTheme() {
return ( return (
localStorage.getItem("themePreference") || localStorage.getItem("themePreference") ||
@@ -15,7 +320,6 @@ document.addEventListener("DOMContentLoaded", async () => {
const theme = button.dataset.theme; const theme = button.dataset.theme;
button.classList.toggle("active", theme === currentTheme); button.classList.toggle("active", theme === currentTheme);
}); });
} }
function getCurrentLanguage() { function getCurrentLanguage() {
@@ -53,6 +357,16 @@ document.addEventListener("DOMContentLoaded", async () => {
document.documentElement.setAttribute("data-theme", theme); document.documentElement.setAttribute("data-theme", theme);
if (theme.startsWith("custom-")) {
const themeId = theme.replace("custom-", "");
const customTheme = customThemes.find(t => t.id === themeId);
if (customTheme) {
applyCustomThemeColors(customTheme);
}
} else {
clearCustomThemeColors();
}
updateThemeButtons(theme); updateThemeButtons(theme);
const tabs = await chrome.tabs.query({}); const tabs = await chrome.tabs.query({});
@@ -61,12 +375,104 @@ document.addEventListener("DOMContentLoaded", async () => {
.sendMessage(tab.id, { .sendMessage(tab.id, {
action: "changeTheme", action: "changeTheme",
theme: theme, theme: theme,
customThemes: customThemes,
}) })
.catch(() => {}); .catch(() => {});
}); });
} }
const themeButtons = document.querySelectorAll(".theme-option"); function applyCustomThemeColors(theme) {
const root = document.documentElement;
const isDark = theme.mode === "dark";
root.style.setProperty("--background", theme.colors.background);
root.style.setProperty("--card-card", theme.colors.card);
root.style.setProperty("--accent-accent", theme.colors.accent);
root.style.setProperty("--text-primary", theme.colors.text);
root.style.setProperty("--text-secondary", theme.colors.text + "cc");
root.style.setProperty("--text-teritary", theme.colors.text + "80");
root.style.setProperty("--accent-15", theme.colors.accent + "26");
root.style.setProperty("--button-secondaryFill", isDark ? lightenColor(theme.colors.card, 10) : darkenColor(theme.colors.card, 5));
root.style.setProperty("--accent-secondary", isDark ? lightenColor(theme.colors.accent, 20) : darkenColor(theme.colors.accent, 20));
root.style.setProperty("--shadow-blur", isDark ? "0" : "2px");
root.style.setProperty("--accent-shadow", isDark ? "#0000" : theme.colors.accent + "26");
root.style.setProperty("--icon-filter", hexToFilter(theme.colors.accent));
}
function clearCustomThemeColors() {
const root = document.documentElement;
const properties = [
"--background",
"--card-card",
"--accent-accent",
"--text-primary",
"--text-secondary",
"--text-teritary",
"--accent-15",
"--button-secondaryFill",
"--accent-secondary",
"--shadow-blur",
"--accent-shadow",
"--icon-filter"
];
properties.forEach(prop => root.style.removeProperty(prop));
}
function hexToFilter(hex) {
const r = parseInt(hex.slice(1, 3), 16);
const g = parseInt(hex.slice(3, 5), 16);
const b = parseInt(hex.slice(5, 7), 16);
const rNorm = r / 255;
const gNorm = g / 255;
const bNorm = b / 255;
const max = Math.max(rNorm, gNorm, bNorm);
const min = Math.min(rNorm, gNorm, bNorm);
let h, s, l = (max + min) / 2;
if (max === min) {
h = s = 0;
} else {
const d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
switch (max) {
case rNorm: h = ((gNorm - bNorm) / d + (gNorm < bNorm ? 6 : 0)) / 6; break;
case gNorm: h = ((bNorm - rNorm) / d + 2) / 6; break;
case bNorm: h = ((rNorm - gNorm) / d + 4) / 6; break;
}
}
const hue = Math.round(h * 360);
const saturation = Math.round(s * 100);
const lightness = Math.round(l * 100);
const brightnessVal = lightness > 50 ? 1 + (lightness - 50) / 100 : 0.5 + lightness / 100;
const saturateVal = saturation > 0 ? 1 + saturation / 100 : 0;
return `brightness(0) saturate(100%) invert(${lightness}%) sepia(${saturation}%) saturate(${Math.min(500, saturation * 5)}%) hue-rotate(${hue}deg) brightness(${brightnessVal}) contrast(${90 + saturation / 10}%)`;
}
function lightenColor(color, percent) {
const num = parseInt(color.replace("#", ""), 16);
const amt = Math.round(2.55 * percent);
const R = Math.min(255, (num >> 16) + amt);
const G = Math.min(255, ((num >> 8) & 0x00ff) + amt);
const B = Math.min(255, (num & 0x0000ff) + amt);
return "#" + (0x1000000 + R * 0x10000 + G * 0x100 + B).toString(16).slice(1);
}
function darkenColor(color, percent) {
const num = parseInt(color.replace("#", ""), 16);
const amt = Math.round(2.55 * percent);
const R = Math.max(0, (num >> 16) - amt);
const G = Math.max(0, ((num >> 8) & 0x00ff) - amt);
const B = Math.max(0, (num & 0x0000ff) - amt);
return "#" + (0x1000000 + R * 0x10000 + G * 0x100 + B).toString(16).slice(1);
}
const themeButtons = document.querySelectorAll(".theme-option:not(.custom-theme-option)");
themeButtons.forEach((button) => { themeButtons.forEach((button) => {
button.addEventListener("click", () => { button.addEventListener("click", () => {
const theme = button.dataset.theme; const theme = button.dataset.theme;
@@ -92,6 +498,74 @@ document.addEventListener("DOMContentLoaded", async () => {
}); });
}); });
document.getElementById("addCustomTheme")?.addEventListener("click", () => openThemeEditor());
document.getElementById("closeThemeEditor")?.addEventListener("click", closeThemeEditor);
document.getElementById("cancelThemeEditor")?.addEventListener("click", closeThemeEditor);
document.getElementById("saveTheme")?.addEventListener("click", saveThemeFromEditor);
document.querySelectorAll(".mode-option").forEach(btn => {
btn.addEventListener("click", () => {
document.querySelectorAll(".mode-option").forEach(b => b.classList.remove("active"));
btn.classList.add("active");
const isDark = btn.dataset.mode === "dark";
if (isDark) {
document.getElementById("backgroundColor").value = "#0D1202";
document.getElementById("backgroundColorHex").value = "#0D1202";
document.getElementById("cardColor").value = "#141905";
document.getElementById("cardColorHex").value = "#141905";
document.getElementById("textColor").value = "#EAF7CC";
document.getElementById("textColorHex").value = "#EAF7CC";
} else {
document.getElementById("backgroundColor").value = "#FAFFF0";
document.getElementById("backgroundColorHex").value = "#FAFFF0";
document.getElementById("cardColor").value = "#F3FBDE";
document.getElementById("cardColorHex").value = "#F3FBDE";
document.getElementById("textColor").value = "#394C0A";
document.getElementById("textColorHex").value = "#394C0A";
}
updateLivePreview();
});
});
["accent", "background", "card", "text"].forEach(colorType => {
const colorInput = document.getElementById(`${colorType}Color`);
const hexInput = document.getElementById(`${colorType}ColorHex`);
colorInput?.addEventListener("input", () => {
hexInput.value = colorInput.value.toUpperCase();
updateLivePreview();
});
hexInput?.addEventListener("input", () => {
const hex = hexInput.value;
if (/^#[0-9A-Fa-f]{6}$/.test(hex)) {
colorInput.value = hex;
updateLivePreview();
}
});
});
document.getElementById("closeShareModal")?.addEventListener("click", closeShareModal);
document.getElementById("closeShareModalBtn")?.addEventListener("click", closeShareModal);
document.getElementById("copyShareCode")?.addEventListener("click", copyShareCode);
let pressTimer;
const addBtn = document.getElementById("addCustomTheme");
addBtn?.addEventListener("mousedown", () => {
pressTimer = setTimeout(() => {
document.getElementById("importThemeModal").classList.add("active");
}, 500);
});
addBtn?.addEventListener("mouseup", () => clearTimeout(pressTimer));
addBtn?.addEventListener("mouseleave", () => clearTimeout(pressTimer));
document.getElementById("closeImportModal")?.addEventListener("click", closeImportModal);
document.getElementById("cancelImport")?.addEventListener("click", closeImportModal);
document.getElementById("confirmImport")?.addEventListener("click", importTheme);
await loadCustomThemes();
let initialTheme = getCurrentTheme(); let initialTheme = getCurrentTheme();
await applyTheme(initialTheme); await applyTheme(initialTheme);