diff --git a/.gitignore b/.gitignore
index 035d487..4dee025 100644
--- a/.gitignore
+++ b/.gitignore
@@ -125,4 +125,6 @@ _modules/*
/results/
/phpunit*.xml
.env
-env
\ No newline at end of file
+env
+.claude/
+.claude/*
\ No newline at end of file
diff --git a/app/Config/App.php b/app/Config/App.php
index b761da7..5c9560f 100644
--- a/app/Config/App.php
+++ b/app/Config/App.php
@@ -16,7 +16,7 @@ class App extends BaseConfig
*
* E.g., http://example.com/
*/
- public string $baseURL = 'http://localhost:8080/';
+ public string $baseURL = 'http://localhost/Todo-App-Backend/public/';
/**
* Allowed Hostnames in the Site URL other than the hostname in the baseURL.
diff --git a/app/Config/Cors.php b/app/Config/Cors.php
index 333fbc9..ceae347 100644
--- a/app/Config/Cors.php
+++ b/app/Config/Cors.php
@@ -57,7 +57,7 @@ class Cors extends BaseConfig
*
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials
*/
- 'supportsCredentials' => false,
+ 'supportsCredentials' => true,
/**
* Set headers to allow.
diff --git a/app/Config/Routes.php b/app/Config/Routes.php
index 6c166fc..d36090f 100644
--- a/app/Config/Routes.php
+++ b/app/Config/Routes.php
@@ -6,6 +6,9 @@ use CodeIgniter\Router\RouteCollection;
* @var RouteCollection $routes
*/
$routes->get('/', 'Home::index');
+$routes->get('/themes', 'ThemeStore::index');
+$routes->post('/themes/upload', 'ThemeStore::upload');
+$routes->get('/themes/preview/(:segment)', 'ThemeStore::preview/$1');
// ============================================================================
// API Routes - Version 1.0
@@ -91,3 +94,20 @@ $routes->group('api/v1', ['namespace' => 'App\Controllers\Api\V1', 'filter' => [
$routes->put('user/themes/(:segment)', 'UserThemeController::update/$1');
$routes->delete('user/themes/(:segment)', 'UserThemeController::delete/$1');
});
+$routes->get('/themes', 'ThemeStore::index');
+$routes->options('/themes', static function () {
+ header('Access-Control-Allow-Origin: http://localhost:5173');
+ header('Access-Control-Allow-Methods: GET, OPTIONS');
+ header('Access-Control-Allow-Headers: Content-Type, Accept, Fetch');
+ header('Access-Control-Allow-Credentials: true');
+ return response()->setStatusCode(204);
+});
+$routes->post('/themes/upload', 'ThemeStore::upload');
+$routes->options('/themes/upload', static function () {
+ header('Access-Control-Allow-Origin: http://localhost:5173');
+ header('Access-Control-Allow-Methods: POST, OPTIONS');
+ header('Access-Control-Allow-Headers: Content-Type, Accept, Fetch');
+ header('Access-Control-Allow-Credentials: true');
+ return response()->setStatusCode(204);
+});
+$routes->get('/themes/preview/(:segment)', 'ThemeStore::preview/$1');
diff --git a/app/Controllers/ThemeStore.php b/app/Controllers/ThemeStore.php
new file mode 100644
index 0000000..d3a26db
--- /dev/null
+++ b/app/Controllers/ThemeStore.php
@@ -0,0 +1,266 @@
+where('is_published', 1)->findAll();
+
+ foreach ($themes as &$theme) {
+ $meta = json_decode($theme['metadata'] ?? '{}', true);
+ $theme['colors'] = $meta['colors'] ?? [];
+ $theme['tags'] = $meta['tags'] ?? [];
+ $theme['vars'] = $meta['vars'] ?? [];
+
+ // Provide a preview array compatible with the frontend
+ $theme['preview'] = !empty($theme['colors']) ? array_values($theme['colors']) : ['#ffffff', '#f0f0f0', '#007acc'];
+ }
+
+ if ($this->request->isAJAX() || $this->request->hasHeader('Fetch') || str_contains($this->request->getHeaderLine('Accept'), 'application/json')) {
+ header('Access-Control-Allow-Origin: http://localhost:5173');
+ header('Access-Control-Allow-Credentials: true');
+ return $this->response->setJSON($themes);
+ }
+
+ return view('theme_store', [
+ 'themes' => $themes,
+ 'flash_success' => session()->getFlashdata('success'),
+ 'flash_error' => session()->getFlashdata('error'),
+ ]);
+ }
+
+ public function upload(): Response
+ {
+ header('Access-Control-Allow-Origin: http://localhost:5173');
+ header('Access-Control-Allow-Credentials: true');
+
+ $file = $this->request->getFile('theme_css');
+ $displayName = trim($this->request->getPost('display_name') ?? '');
+ $description = trim($this->request->getPost('description') ?? '');
+
+ if ($displayName === '') {
+ if ($this->request->isAJAX() || $this->request->hasHeader('Fetch')) {
+ return $this->response->setStatusCode(400)->setJSON(['error' => 'Display name is required.']);
+ }
+ return redirect()->to('themes')->with('error', 'Display name is required.');
+ }
+
+ if (! $file || ! $file->isValid() || $file->hasMoved()) {
+ if ($this->request->isAJAX() || $this->request->hasHeader('Fetch')) {
+ return $this->response->setStatusCode(400)->setJSON(['error' => 'Please upload a valid CSS file.']);
+ }
+ return redirect()->to('themes')->with('error', 'Please upload a valid CSS file.');
+ }
+
+ if (strtolower($file->getExtension()) !== 'css') {
+ if ($this->request->isAJAX() || $this->request->hasHeader('Fetch')) {
+ return $this->response->setStatusCode(400)->setJSON(['error' => 'Only .css files are allowed.']);
+ }
+ return redirect()->to('themes')->with('error', 'Only .css files are allowed.');
+ }
+
+ $slug = strtolower(preg_replace('/[^a-z0-9]+/i', '-', $displayName));
+ $slug = trim($slug, '-');
+ $filename = $slug . '-' . substr(bin2hex(random_bytes(3)), 0, 6) . '.css';
+
+ $file->move(FCPATH . 'themes', $filename, true);
+
+ // Extract CSS variables and colors from the uploaded file
+ $cssContent = file_get_contents(FCPATH . 'themes/' . $filename);
+ preg_match_all('/(--[a-zA-Z0-9-]+)\s*:\s*([^;]+);/', $cssContent, $matches);
+
+ $vars = [];
+ if (!empty($matches[1])) {
+ foreach ($matches[1] as $index => $key) {
+ $vars[$key] = trim($matches[2][$index]);
+ }
+ }
+
+ // Try to generate 3-color preview based on standard variables
+ $colors = [];
+ if (isset($vars['--bg'])) $colors['bg'] = $vars['--bg'];
+ if (isset($vars['--surface'])) $colors['surface'] = $vars['--surface'];
+ if (isset($vars['--accent'])) $colors['accent'] = $vars['--accent'];
+
+ $model = new MarketplaceThemeModel();
+ $model->insert([
+ 'id' => $this->uuid4(),
+ 'name' => $slug,
+ 'display_name' => $displayName,
+ 'description' => $description ?: 'Custom community theme.',
+ 'author' => 'Community',
+ 'version' => '1.0.0',
+ 'thumbnail_url' => null,
+ 'download_url' => '/themes/' . $filename,
+ 'price' => 0,
+ 'is_published' => true,
+ 'metadata' => json_encode([
+ 'tags' => ['custom', 'community'],
+ 'colors' => $colors,
+ 'vars' => $vars
+ ]),
+ 'created_at' => date('Y-m-d H:i:s'),
+ 'updated_at' => date('Y-m-d H:i:s'),
+ ]);
+
+ if ($this->request->isAJAX() || $this->request->hasHeader('Fetch')) {
+ return $this->response->setJSON([
+ 'success' => true,
+ 'message' => '"' . esc($displayName) . '" uploaded successfully!'
+ ]);
+ }
+ return redirect()->to('themes')->with('success', '"' . esc($displayName) . '" uploaded successfully!');
+ }
+
+ public function preview(string $id): Response
+ {
+ $model = new MarketplaceThemeModel();
+ $theme = $model->find($id);
+
+ if (! $theme) {
+ return $this->response->setStatusCode(404)->setBody('
Theme not found.
');
+ }
+
+ $distIndex = '/home/came/Nextcloud/arch-work/Projects/Todo-App/dist/index.html';
+
+ if (! file_exists($distIndex)) {
+ return $this->response->setBody(
+ ''
+ . ''
+ );
+ }
+
+ $todoHtml = file_get_contents($distIndex);
+
+ // Rewrite asset paths from /assets/ to the public symlink so Apache serves them
+ $assetBase = rtrim(base_url('todo-preview'), '/');
+ $todoHtml = str_replace('="/assets/', '="' . $assetBase . '/assets/', $todoHtml);
+
+ // Build CSS variable overrides from the stored vars map
+ $meta = json_decode($theme['metadata'] ?? '{}', true);
+ $vars = $meta['vars'] ?? [];
+
+ $cssVars = ":root {\n";
+ foreach ($vars as $prop => $value) {
+ $cssVars .= " {$prop}: {$value};\n";
+ }
+ $cssVars .= "}\n";
+
+ // Also inject any raw CSS from the downloaded file (for custom/uploaded themes)
+ $cssPath = FCPATH . ltrim($theme['download_url'], '/');
+ $rawCss = file_exists($cssPath) ? file_get_contents($cssPath) : '';
+
+ $styleTag = "";
+
+ $todoHtml = str_replace('', $styleTag . "\n", $todoHtml);
+
+ return $this->response
+ ->setHeader('Content-Type', 'text/html; charset=utf-8')
+ ->setBody($todoHtml);
+ }
+
+ public function install(string $id): Response
+ {
+ $model = new MarketplaceThemeModel();
+ $theme = $model->find($id);
+
+ if (! $theme) {
+ return $this->response->setStatusCode(404)->setJSON(['error' => 'Theme not found in the marketplace.']);
+ }
+
+ // Using session user_id or a default placeholder since standard auth might be configured separately
+ $userId = session()->get('user_id') ?? 'default-user-id';
+
+ $userThemeModel = new UserThemeModel();
+
+ if (! $userThemeModel->isInstalled($userId, $id)) {
+ $userThemeModel->installTheme($userId, $id);
+ }
+
+ return $this->response->setJSON([
+ 'success' => true,
+ 'message' => '"' . esc($theme['display_name']) . '" has been installed to your account.'
+ ]);
+ }
+
+ public function activate(string $id): Response
+ {
+ $userId = session()->get('user_id') ?? 'default-user-id';
+
+ $userThemeModel = new UserThemeModel();
+
+ if (! $userThemeModel->isInstalled($userId, $id)) {
+ return $this->response->setStatusCode(400)->setJSON(['error' => 'Theme must be installed before it can be activated.']);
+ }
+
+ $userThemeModel->setActiveTheme($userId, $id);
+
+ return $this->response->setJSON(['success' => true, 'message' => 'Theme activated successfully.']);
+ }
+
+ public function uninstall(string $id): Response
+ {
+ $userId = session()->get('user_id') ?? 'default-user-id';
+ $userThemeModel = new UserThemeModel();
+
+ $userThemeModel->uninstallTheme($userId, $id);
+
+ return $this->response->setJSON(['success' => true, 'message' => 'Theme successfully uninstalled.']);
+ }
+
+ public function myThemes(): Response
+ {
+ $userId = session()->get('user_id') ?? 'default-user-id';
+ $userThemeModel = new UserThemeModel();
+
+ return $this->response->setJSON(['success' => true, 'data' => $userThemeModel->getUserThemes($userId)]);
+ }
+
+ public function serveCss(string $filename): Response
+ {
+ // Ensure it's just a file name (prevent directory traversal)
+ $filename = basename($filename);
+ $cssPath = FCPATH . 'themes/' . $filename;
+
+ // If the file actually exists on disk (e.g. newly uploaded themes)
+ if (file_exists($cssPath)) {
+ $css = file_get_contents($cssPath);
+ return $this->response->setContentType('text/css')->setBody($css);
+ }
+
+ // Generate dynamically for seeded themes that don't have a physical file
+ $model = new MarketplaceThemeModel();
+ $name = preg_replace('/\.css$/i', '', $filename);
+ $theme = $model->where('name', $name)->first();
+
+ if (! $theme) {
+ throw \CodeIgniter\Exceptions\PageNotFoundException::forPageNotFound();
+ }
+
+ $meta = json_decode($theme['metadata'] ?? '{}', true);
+ $vars = $meta['vars'] ?? [];
+
+ $css = "/* Theme: {$theme['display_name']} */\n:root {\n";
+ foreach ($vars as $prop => $value) {
+ $css .= " {$prop}: {$value};\n";
+ }
+ $css .= "}\n";
+
+ return $this->response->setContentType('text/css')->setBody($css);
+ }
+
+ private function uuid4(): string
+ {
+ $data = random_bytes(16);
+ $data[6] = chr(ord($data[6]) & 0x0f | 0x40);
+ $data[8] = chr(ord($data[8]) & 0x3f | 0x80);
+ return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
+ }
+}
diff --git a/app/Database/Seeds/MarketplaceThemesSeeder.php b/app/Database/Seeds/MarketplaceThemesSeeder.php
index 9d26bc3..5933fdb 100644
--- a/app/Database/Seeds/MarketplaceThemesSeeder.php
+++ b/app/Database/Seeds/MarketplaceThemesSeeder.php
@@ -8,34 +8,296 @@ class MarketplaceThemesSeeder extends Seeder
{
public function run()
{
+ $this->db->query('SET FOREIGN_KEY_CHECKS=0');
+ $this->db->table('marketplace_themes')->truncate();
+ $this->db->query('SET FOREIGN_KEY_CHECKS=1');
+
$data = [
[
- 'id' => '550e8400-e29b-41d4-a716-446655440010',
- 'name' => 'default-light',
- 'display_name' => 'Default Light',
- 'description' => 'Clean and simple light theme',
- 'author' => 'System',
- 'version' => '1.0.0',
+ 'id' => '550e8400-e29b-41d4-a716-446655440010',
+ 'name' => 'ocean-breeze',
+ 'display_name' => 'Ocean Breeze',
+ 'description' => 'A refreshing light theme inspired by the open sea. Soft teals and ocean blues create a calm, productive workspace that\'s easy on the eyes during long work sessions.',
+ 'author' => 'ThemeForge',
+ 'version' => '1.2.0',
'thumbnail_url' => null,
- 'download_url' => '/themes/default-light.zip',
- 'price' => 0,
+ 'download_url' => '/themes/ocean-breeze.css',
+ 'price' => 0,
'is_published' => true,
- 'metadata' => json_encode(['tags' => ['light', 'clean']]),
+ 'metadata' => json_encode([
+ 'tags' => ['light', 'blue', 'calm', 'minimal'],
+ 'colors' => [
+ 'Primary' => '#0077B6',
+ 'Secondary' => '#00B4D8',
+ 'Background' => '#E0F4FF',
+ 'Surface' => '#FFFFFF',
+ 'Text' => '#1A2B3C',
+ 'Accent' => '#48CAE4',
+ ],
+ 'vars' => [
+ '--bg' => '#E0F4FF',
+ '--surface' => '#FFFFFF',
+ '--surface-strong' => '#FFFFFF',
+ '--surface-muted' => '#F0F9FF',
+ '--border' => '#BAE0F2',
+ '--line' => '#90C8E0',
+ '--text' => '#1A2B3C',
+ '--text-muted' => '#4A6B7A',
+ '--text-strong' => '#0D1B26',
+ '--accent' => '#0077B6',
+ '--accent-text' => '#FFFFFF',
+ '--accent-soft' => '#CCE9F5',
+ '--sidebar-bg' => '#FFFFFF',
+ '--sidebar-border' => '#BAE0F2',
+ '--sidebar-text' => '#1A2B3C',
+ '--sidebar-text-muted' => '#4A6B7A',
+ '--input-bg' => '#FFFFFF',
+ '--input-border' => '#BAE0F2',
+ '--modal-bg' => '#FFFFFF',
+ '--chip' => '#C8E8F0',
+ '--success' => '#D4F0E4',
+ ],
+ ]),
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
],
[
- 'id' => '550e8400-e29b-41d4-a716-446655440011',
- 'name' => 'default-dark',
- 'display_name' => 'Default Dark',
- 'description' => 'Dark theme for night owls',
- 'author' => 'System',
- 'version' => '1.0.0',
+ 'id' => '550e8400-e29b-41d4-a716-446655440011',
+ 'name' => 'midnight-void',
+ 'display_name' => 'Midnight Void',
+ 'description' => 'Deep space dark theme for night owls and late-night coders. Rich dark purples and blues with vibrant neon accents give this theme a premium, modern feel.',
+ 'author' => 'ThemeForge',
+ 'version' => '2.0.1',
'thumbnail_url' => null,
- 'download_url' => '/themes/default-dark.zip',
- 'price' => 0,
+ 'download_url' => '/themes/midnight-void.css',
+ 'price' => 0,
'is_published' => true,
- 'metadata' => json_encode(['tags' => ['dark', 'night']]),
+ 'metadata' => json_encode([
+ 'tags' => ['dark', 'purple', 'neon', 'night'],
+ 'colors' => [
+ 'Primary' => '#7C3AED',
+ 'Secondary' => '#A78BFA',
+ 'Background' => '#0D0D1A',
+ 'Surface' => '#1A1A2E',
+ 'Text' => '#E2E8F0',
+ 'Accent' => '#F472B6',
+ ],
+ 'vars' => [
+ '--bg' => '#0D0D1A',
+ '--surface' => '#1A1A2E',
+ '--surface-strong' => '#222234',
+ '--surface-muted' => '#121220',
+ '--border' => '#2A2A44',
+ '--line' => '#333350',
+ '--text' => '#E2E8F0',
+ '--text-muted' => '#94A3B8',
+ '--text-strong' => '#F1F5F9',
+ '--accent' => '#7C3AED',
+ '--accent-text' => '#FFFFFF',
+ '--accent-soft' => '#2D1A5E',
+ '--sidebar-bg' => '#16162A',
+ '--sidebar-border' => '#2A2A44',
+ '--sidebar-text' => '#E2E8F0',
+ '--sidebar-text-muted' => '#94A3B8',
+ '--input-bg' => '#0D0D1A',
+ '--input-border' => '#2A2A44',
+ '--modal-bg' => '#1A1A2E',
+ '--chip' => '#2A2A44',
+ '--success' => '#0D2A1A',
+ ],
+ ]),
+ 'created_at' => date('Y-m-d H:i:s'),
+ 'updated_at' => date('Y-m-d H:i:s'),
+ ],
+ [
+ 'id' => '550e8400-e29b-41d4-a716-446655440012',
+ 'name' => 'forest-grove',
+ 'display_name' => 'Forest Grove',
+ 'description' => 'Earthy greens and warm neutrals bring the tranquility of a woodland retreat to your workspace. A grounding, nature-inspired theme designed for focused productivity.',
+ 'author' => 'NaturePalette',
+ 'version' => '1.0.5',
+ 'thumbnail_url' => null,
+ 'download_url' => '/themes/forest-grove.css',
+ 'price' => 0,
+ 'is_published' => true,
+ 'metadata' => json_encode([
+ 'tags' => ['light', 'green', 'earthy', 'nature'],
+ 'colors' => [
+ 'Primary' => '#2D6A4F',
+ 'Secondary' => '#52B788',
+ 'Background' => '#F0F7EE',
+ 'Surface' => '#FFFFFF',
+ 'Text' => '#1B2E22',
+ 'Accent' => '#B7E4C7',
+ ],
+ 'vars' => [
+ '--bg' => '#F0F7EE',
+ '--surface' => '#FFFFFF',
+ '--surface-strong' => '#FFFFFF',
+ '--surface-muted' => '#F5FAF4',
+ '--border' => '#C0DACB',
+ '--line' => '#A0C4B0',
+ '--text' => '#1B2E22',
+ '--text-muted' => '#527A62',
+ '--text-strong' => '#0D1F14',
+ '--accent' => '#2D6A4F',
+ '--accent-text' => '#FFFFFF',
+ '--accent-soft' => '#C0E8D4',
+ '--sidebar-bg' => '#FFFFFF',
+ '--sidebar-border' => '#C0DACB',
+ '--sidebar-text' => '#1B2E22',
+ '--sidebar-text-muted' => '#527A62',
+ '--input-bg' => '#FFFFFF',
+ '--input-border' => '#C0DACB',
+ '--modal-bg' => '#FFFFFF',
+ '--chip' => '#B8E0C8',
+ '--success' => '#CCF0DC',
+ ],
+ ]),
+ 'created_at' => date('Y-m-d H:i:s'),
+ 'updated_at' => date('Y-m-d H:i:s'),
+ ],
+ [
+ 'id' => '550e8400-e29b-41d4-a716-446655440013',
+ 'name' => 'sunset-ember',
+ 'display_name' => 'Sunset Ember',
+ 'description' => 'Warm oranges, deep reds, and golden highlights capture the magic of a perfect sunset. This vibrant theme adds energy and warmth to every interaction.',
+ 'author' => 'ChromaCraft',
+ 'version' => '1.1.2',
+ 'thumbnail_url' => null,
+ 'download_url' => '/themes/sunset-ember.css',
+ 'price' => 0,
+ 'is_published' => true,
+ 'metadata' => json_encode([
+ 'tags' => ['warm', 'orange', 'vibrant', 'sunset'],
+ 'colors' => [
+ 'Primary' => '#D62828',
+ 'Secondary' => '#F77F00',
+ 'Background' => '#FFF5E4',
+ 'Surface' => '#FFFFFF',
+ 'Text' => '#2D1B00',
+ 'Accent' => '#FCBF49',
+ ],
+ 'vars' => [
+ '--bg' => '#FFF5E4',
+ '--surface' => '#FFFFFF',
+ '--surface-strong' => '#FFFFFF',
+ '--surface-muted' => '#FFF8F0',
+ '--border' => '#F0D0A8',
+ '--line' => '#E0B880',
+ '--text' => '#2D1B00',
+ '--text-muted' => '#8A6040',
+ '--text-strong' => '#1A0A00',
+ '--accent' => '#D62828',
+ '--accent-text' => '#FFFFFF',
+ '--accent-soft' => '#FFE0CC',
+ '--sidebar-bg' => '#FFFFFF',
+ '--sidebar-border' => '#F0D0A8',
+ '--sidebar-text' => '#2D1B00',
+ '--sidebar-text-muted' => '#8A6040',
+ '--input-bg' => '#FFFFFF',
+ '--input-border' => '#F0D0A8',
+ '--modal-bg' => '#FFFFFF',
+ '--chip' => '#F8D8B0',
+ '--success' => '#DDFADC',
+ ],
+ ]),
+ 'created_at' => date('Y-m-d H:i:s'),
+ 'updated_at' => date('Y-m-d H:i:s'),
+ ],
+ [
+ 'id' => '550e8400-e29b-41d4-a716-446655440014',
+ 'name' => 'arctic-frost',
+ 'display_name' => 'Arctic Frost',
+ 'description' => 'Ultra-clean whites and icy blues inspired by frozen tundras. A minimalist theme that maximises clarity and focus with crisp contrast and breathable spacing.',
+ 'author' => 'MinimalStudio',
+ 'version' => '3.0.0',
+ 'thumbnail_url' => null,
+ 'download_url' => '/themes/arctic-frost.css',
+ 'price' => 0,
+ 'is_published' => true,
+ 'metadata' => json_encode([
+ 'tags' => ['light', 'minimal', 'clean', 'ice'],
+ 'colors' => [
+ 'Primary' => '#2176AE',
+ 'Secondary' => '#57C4E5',
+ 'Background' => '#F8FBFF',
+ 'Surface' => '#FFFFFF',
+ 'Text' => '#1C2B3A',
+ 'Accent' => '#A8DADC',
+ ],
+ 'vars' => [
+ '--bg' => '#F8FBFF',
+ '--surface' => '#FFFFFF',
+ '--surface-strong' => '#FFFFFF',
+ '--surface-muted' => '#F0F5FC',
+ '--border' => '#C0D4E8',
+ '--line' => '#A0BCDA',
+ '--text' => '#1C2B3A',
+ '--text-muted' => '#4E6478',
+ '--text-strong' => '#0D1B2A',
+ '--accent' => '#2176AE',
+ '--accent-text' => '#FFFFFF',
+ '--accent-soft' => '#CCE0F0',
+ '--sidebar-bg' => '#FFFFFF',
+ '--sidebar-border' => '#C0D4E8',
+ '--sidebar-text' => '#1C2B3A',
+ '--sidebar-text-muted' => '#4E6478',
+ '--input-bg' => '#FFFFFF',
+ '--input-border' => '#C0D4E8',
+ '--modal-bg' => '#FFFFFF',
+ '--chip' => '#B8D4E8',
+ '--success' => '#D4F0E4',
+ ],
+ ]),
+ 'created_at' => date('Y-m-d H:i:s'),
+ 'updated_at' => date('Y-m-d H:i:s'),
+ ],
+ [
+ 'id' => '550e8400-e29b-41d4-a716-446655440015',
+ 'name' => 'obsidian-rose',
+ 'display_name' => 'Obsidian Rose',
+ 'description' => 'A sophisticated dark theme blending deep charcoal blacks with rose gold accents. Elegant and bold, this theme is built for those who want style without sacrificing readability.',
+ 'author' => 'ChromaCraft',
+ 'version' => '1.3.0',
+ 'thumbnail_url' => null,
+ 'download_url' => '/themes/obsidian-rose.css',
+ 'price' => 0,
+ 'is_published' => true,
+ 'metadata' => json_encode([
+ 'tags' => ['dark', 'elegant', 'rose', 'premium'],
+ 'colors' => [
+ 'Primary' => '#C9184A',
+ 'Secondary' => '#FF4D6D',
+ 'Background' => '#0A0A0F',
+ 'Surface' => '#1C1C28',
+ 'Text' => '#F1E3E4',
+ 'Accent' => '#B5838D',
+ ],
+ 'vars' => [
+ '--bg' => '#0A0A0F',
+ '--surface' => '#1C1C28',
+ '--surface-strong' => '#242430',
+ '--surface-muted' => '#14141E',
+ '--border' => '#2A2A38',
+ '--line' => '#383848',
+ '--text' => '#F1E3E4',
+ '--text-muted' => '#B5939A',
+ '--text-strong' => '#FAF0F1',
+ '--accent' => '#C9184A',
+ '--accent-text' => '#FFFFFF',
+ '--accent-soft' => '#3D0A1A',
+ '--sidebar-bg' => '#161620',
+ '--sidebar-border' => '#2A2A38',
+ '--sidebar-text' => '#F1E3E4',
+ '--sidebar-text-muted' => '#B5939A',
+ '--input-bg' => '#0A0A0F',
+ '--input-border' => '#2A2A38',
+ '--modal-bg' => '#1C1C28',
+ '--chip' => '#2A2030',
+ '--success' => '#0A2016',
+ ],
+ ]),
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
],
diff --git a/app/Views/theme_store.php b/app/Views/theme_store.php
new file mode 100644
index 0000000..faf4eea
--- /dev/null
+++ b/app/Views/theme_store.php
@@ -0,0 +1,861 @@
+
+
+
+
+
+ Theme Store
+
+
+
+
+
+
+
+
+
✓ = esc($flash_success) ?>
+
+
+
+
⚠ = esc($flash_error) ?>
+
+
+
+
+
+
+
+
+
+
+ = esc($theme['display_name']) ?>
+ v= esc($theme['version']) ?>
+
+
by = esc($theme['author']) ?>
+
= esc($theme['description']) ?>
+
+
+ = esc($tag) ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tags
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/env.example b/env.example
index f359ec2..b12e39c 100644
--- a/env.example
+++ b/env.example
@@ -30,13 +30,13 @@
# DATABASE
#--------------------------------------------------------------------
-# database.default.hostname = localhost
-# database.default.database = ci4
-# database.default.username = root
-# database.default.password = root
-# database.default.DBDriver = MySQLi
+database.default.hostname = localhost
+database.default.database = ci4
+database.default.username = root
+database.default.password = root
+database.default.DBDriver = MySQLi
# database.default.DBPrefix =
-# database.default.port = 3306
+database.default.port = 3306
# If you use MySQLi as tests, first update the values of Config\Database::$tests.
# database.tests.hostname = localhost
diff --git a/public/.htaccess b/public/.htaccess
index abac3cb..9707237 100644
--- a/public/.htaccess
+++ b/public/.htaccess
@@ -30,7 +30,6 @@ Options -Indexes
# such as an image or css document, if this isn't true it sends the
# request to the front controller, index.php
RewriteCond %{REQUEST_FILENAME} !-f
- RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\s\S]*)$ index.php/$1 [L,NC,QSA]
# Ensure Authorization header is passed along
diff --git a/public/themes/2341342134-1441f7.css b/public/themes/2341342134-1441f7.css
new file mode 100644
index 0000000..ee5b814
--- /dev/null
+++ b/public/themes/2341342134-1441f7.css
@@ -0,0 +1,38 @@
+/* @todo-theme-meta
+{
+ "name": "2341342134",
+ "id": "custom-1778678276990",
+ "group": "Custom",
+ "preview": [
+ "#e01b24",
+ "#c01c28",
+ "#e66100"
+ ],
+ "hasWallpaper": true
+}
+*/
+
+:root {
+ --bg: #e01b24;
+ --surface: #c01c28;
+ --surface-strong: #f8e45c;
+ --surface-muted: #c0bfbc;
+ --border: #c0bfbc;
+ --line: #1a5fb4;
+ --text: #f8e45c;
+ --text-muted: #b5835a;
+ --text-strong: #ffbe6f;
+ --accent: #e66100;
+ --accent-text: #f9f06b;
+ --accent-soft: #613583;
+ --sidebar-bg: #3584e4;
+ --sidebar-border: #613583;
+ --sidebar-text: #ffbe6f;
+ --sidebar-text-muted: #3d3846;
+ --input-bg: #241f31;
+ --input-border: #865e3c;
+ --modal-bg: #99c1f1;
+ --chip: #57e389;
+ --success: #e66100;
+ --wallpaper: url("data:image/png;base64,UklGRm5DAABXRUJQVlA4IGJDAABwsQOdASoACqAFPlEmkUcjoaIhIFEIMHAKCWlu8p8eP+GPQ/R4pugdfs/9z/tPg6/XP75/d/2d/t3qn5IfEvsz/av/H9v16/se1Kfj/2G/C/27/E/7j8ofyH/U/7f8VfM/1jeoF+L/yr/Kf279ofyZ/CPtx2q+zf7v0BfY/6x/oP8T+6X+f+aH5f/e+gf2L/03uAfyf+vf7D19/2H/c8aD73/rvYB/mH9p/6f+P/MP5DP8H/Kf6b9rvan+lf4r/uf5f8mvsH/lP9T/4f969sD/z+6D9xvZJ/YT/sfn+BcMqvl7jT3mms6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTpvp9cOZe1kAXJIcPOZe4095prOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnRyr2G9lY9Gg9NTIVeyqDXHaFwyeQxYspDyKm3JKE9AFNw+YVKCARG7Jyvt+fcowBZ3aDmxFIe801nTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dHSp0CXigjvY4Q9lnXv+Aef90OFvmrrYh3Ov94wa4tQ5e3AgC7AXkedOmbhm98BK0xnHij3FGVVEVIFeTyL3hDs37R0+0cqTxOO4riIUDloYy7uwCNnVlXSRs2EQBbcd4nBEm8lyTmsy9xp7zTWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dN+ds1agvmI9HnOMgdWJMCqZKx2DmQhTl38ggMxgyQocrQW8dIDHZ+42Tdm7nUJaFT8DrO9Z3TDu5F2W4WkUxJa1VVW3vQRdwsEa1RF6Fnq/nvaqKpY1E5lcFD2ms6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTo5l0MJAK2fSqDYwuzBGwhlioElLN4wSSf3VJjc5oxK3gke4mGwxbuDVuhswDnYrvM00P9XLJYqKRFu+lczBZN6dC8BqUKXpAGmFvKg+D/6fFCcvQ0VKCEZLN6azp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTqLlptm+WLPzydBqdrHKAASb/9PJmvu1+tp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTvObKr5e4095prOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTfTYGZAXUVXy9xp7zTWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOm+PlGA5kICSux7Sh7TWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dHcPleV3xDCmdlOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp033RTBfuiPm4l1+NyKvl7jT3mms6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dN8cg9LrZo2FSfqOcy9xp7zTWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOjmtpg7k122qggPZZBE95prOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06b70KaI4Dtq2uGEtPL3GnvNNZ06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp030Aq9HA5AsWutZo5EvqxqKr5e4095prOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06OgfyRLF5S6N7Wb8wr9QBAPeaazp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06b6AEGluT8t+PYAdoJwrlumn/zBQGCGaSnoIe801nTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06Ogf6HVCot1gbAaOifA9RHXufliQK1KVNPeaazp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06OQA6317A6Gt2T/ToamkVVcHtNZ06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dHDkbjOxeHnMvaxEOkY5Gs6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTfTjQfKU4uD2msc5LH8KqUxZQD3mms6dOnTp06dOnTp06dOnTp06dOnTp06dOnTpv1RpXgNTSvAamleA1NK8BqaV4DU0rwGppXgNTSvAamleA1NK8BqaV4DU0rwGppXgNTSvAamleA1NK8BqaV4DU0rwGppXgNTSvAamleA1NK8BqaV4DU0rwGoQK4PwnU7ao0rwGppXgNTSvAamKEiczSBPuohpXgNTSvAamleA1NK8BqaV4DU0rwGppXgNTSvAamleA1NK8BqaV4DU0rwGppXgNTSvAamleA1NK8BqaV4DU0rwGppXgNTSvAamleA1NK8BqaV4DU0rwHHUVXy9xp7zTWdOnTp06dOnTp06dOnTp06dOnTp06dN9BqdDtLwIcy9xp7pW34wUcEGEjWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOm+88bbcMdl5TDeMC1UYEPNCDYUA3tQiukEeLOMLUeyq+XuNPeaazp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTpvp2PDilpeUsEEOnZZ6VjGEE164EgdMb6XiU7l7jT3mms6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOjh8qd+2dBIuDkP02oaZeqZQ90h2lHXSDp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06b7ELX6SqYezje+Uee1nGRZSH+lPRF/R2F3ecy9xp7zTWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06b4wj6/zhh5xrC8U6XALBpK7H2E+EuqwZbCcoyFv/E6vygWhfB7TWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp0dA9w6rJtAHoPHYEFljQ9xEP6KLnQC0NiKESca9XDzmXuNPeaazp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dN/BEPSZgpQ4petY574iqMR/QWHAkPBpDLynGEDFs1D0I9Sh7TWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnRw5G4ztsPwxpU24olpw3v6eIVtt1Z033GuYxyPTwvOu6VEaIlhBJqSAZmMwG1nTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dHIAb4WmL9Ll62QV8bCHZQsfDzmXtZYJACCY/vMBU1fXYPUYFISjzmXuNPeaazp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dHDkbaFy1D0IF/+uNBPSoCpSvNNZ06dN+qJAmiEclKO5MxEqWd6oPeaazp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTo5coCohiZ0BP7vlRy9vXWEfOnTp06dOnTo5Lsh+fp6lkNbazdwAybBIvNNZ06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp033oH2BC902VXy9xp7zTWdN9cYT4zjjmms6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnUXLTKr5e4095prOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dN9YOX85l7jT3mms6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06b471q5Ofkvi9tEORhKdx1NwI5eqlh6omlgag3d2LcVlthBLZhqxkcbq51yxqCPciLbeXgIwwQTQSZV5WWZWET4qT2CUBDT+/WQFAcBKEuczjW6EfXEFj7ZQ9prOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06OcxAUnbNMT8n8u4e1zpxtdF0rJU8QWXvuyA1ZIdh2bZ71TZ3hVkoEv3GR1TEjmKVdpMra9h9Hus6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dN9rpuTkB/gB3wMDcCQS6qPDNywjSO+gdJODCyKJDxwfxfcVcC6l+0TfpRIWe2Cu8Iz4JPAbDo9XGxImdsMSOlHtMHdhIu42YBQgvnQNi/omBlAPeaazp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnT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");
+}
diff --git a/public/themes/arctic-frost.css b/public/themes/arctic-frost.css
new file mode 100644
index 0000000..8ebf313
--- /dev/null
+++ b/public/themes/arctic-frost.css
@@ -0,0 +1,16 @@
+/* Arctic Frost Theme — MinimalStudio v3.0.0 */
+:root {
+ --color-primary: #2176AE;
+ --color-secondary: #57C4E5;
+ --color-background: #F8FBFF;
+ --color-surface: #FFFFFF;
+ --color-text: #1C2B3A;
+ --color-accent: #A8DADC;
+}
+
+body { background-color: var(--color-background); color: var(--color-text); font-family: system-ui, sans-serif; }
+a, .link { color: var(--color-primary); }
+.btn-primary { background: var(--color-primary); color: #fff; border: none; border-radius: 6px; padding: 8px 18px; cursor: pointer; }
+.btn-primary:hover { background: var(--color-secondary); }
+.card { background: var(--color-surface); border-radius: 10px; box-shadow: 0 1px 6px rgba(33,118,174,0.08); padding: 20px; border: 1px solid #DDE8F0; }
+.tag { background: var(--color-accent); color: var(--color-text); border-radius: 4px; padding: 2px 8px; font-size: 0.75rem; }
diff --git a/public/themes/extract-test-theme-5fae6e.css b/public/themes/extract-test-theme-5fae6e.css
new file mode 100644
index 0000000..888a312
--- /dev/null
+++ b/public/themes/extract-test-theme-5fae6e.css
@@ -0,0 +1,37 @@
+/* @todo-theme-meta
+{
+ "name": "Extract Test Theme",
+ "id": "custom-1778676985034",
+ "group": "Custom",
+ "preview": [
+ "#f5f5f5",
+ "#ffffff",
+ "#274f69"
+ ],
+ "hasWallpaper": false
+}
+*/
+
+:root {
+ --bg: #f5f5f5;
+ --surface: #ffffff;
+ --surface-strong: #ffffff;
+ --surface-muted: #fafafa;
+ --border: #d0d0d0;
+ --line: #b9b9b5;
+ --text: #1f1f1f;
+ --text-muted: #686866;
+ --text-strong: #111111;
+ --accent: #274f69;
+ --accent-text: #ffffff;
+ --accent-soft: #d6e4ec;
+ --sidebar-bg: #ffffff;
+ --sidebar-border: #d0d0d0;
+ --sidebar-text: #222222;
+ --sidebar-text-muted: #686866;
+ --input-bg: #ffffff;
+ --input-border: #cfcfcf;
+ --modal-bg: #ffffff;
+ --chip: #d8d8d8;
+ --success: #dff7e7;
+}
diff --git a/public/themes/forest-grove.css b/public/themes/forest-grove.css
new file mode 100644
index 0000000..a953d12
--- /dev/null
+++ b/public/themes/forest-grove.css
@@ -0,0 +1,16 @@
+/* Forest Grove Theme — NaturePalette v1.0.5 */
+:root {
+ --color-primary: #2D6A4F;
+ --color-secondary: #52B788;
+ --color-background: #F0F7EE;
+ --color-surface: #FFFFFF;
+ --color-text: #1B2E22;
+ --color-accent: #B7E4C7;
+}
+
+body { background-color: var(--color-background); color: var(--color-text); font-family: system-ui, sans-serif; }
+a, .link { color: var(--color-primary); }
+.btn-primary { background: var(--color-primary); color: #fff; border: none; border-radius: 6px; padding: 8px 18px; cursor: pointer; }
+.btn-primary:hover { background: var(--color-secondary); }
+.card { background: var(--color-surface); border-radius: 10px; box-shadow: 0 2px 8px rgba(45,106,79,0.12); padding: 20px; }
+.tag { background: var(--color-accent); color: var(--color-text); border-radius: 4px; padding: 2px 8px; font-size: 0.75rem; }
diff --git a/public/themes/manual-game-update-2-e1a77a.css b/public/themes/manual-game-update-2-e1a77a.css
new file mode 100644
index 0000000..ee5b814
--- /dev/null
+++ b/public/themes/manual-game-update-2-e1a77a.css
@@ -0,0 +1,38 @@
+/* @todo-theme-meta
+{
+ "name": "2341342134",
+ "id": "custom-1778678276990",
+ "group": "Custom",
+ "preview": [
+ "#e01b24",
+ "#c01c28",
+ "#e66100"
+ ],
+ "hasWallpaper": true
+}
+*/
+
+:root {
+ --bg: #e01b24;
+ --surface: #c01c28;
+ --surface-strong: #f8e45c;
+ --surface-muted: #c0bfbc;
+ --border: #c0bfbc;
+ --line: #1a5fb4;
+ --text: #f8e45c;
+ --text-muted: #b5835a;
+ --text-strong: #ffbe6f;
+ --accent: #e66100;
+ --accent-text: #f9f06b;
+ --accent-soft: #613583;
+ --sidebar-bg: #3584e4;
+ --sidebar-border: #613583;
+ --sidebar-text: #ffbe6f;
+ --sidebar-text-muted: #3d3846;
+ --input-bg: #241f31;
+ --input-border: #865e3c;
+ --modal-bg: #99c1f1;
+ --chip: #57e389;
+ --success: #e66100;
+ --wallpaper: url("data:image/png;base64,UklGRm5DAABXRUJQVlA4IGJDAABwsQOdASoACqAFPlEmkUcjoaIhIFEIMHAKCWlu8p8eP+GPQ/R4pugdfs/9z/tPg6/XP75/d/2d/t3qn5IfEvsz/av/H9v16/se1Kfj/2G/C/27/E/7j8ofyH/U/7f8VfM/1jeoF+L/yr/Kf279ofyZ/CPtx2q+zf7v0BfY/6x/oP8T+6X+f+aH5f/e+gf2L/03uAfyf+vf7D19/2H/c8aD73/rvYB/mH9p/6f+P/MP5DP8H/Kf6b9rvan+lf4r/uf5f8mvsH/lP9T/4f969sD/z+6D9xvZJ/YT/sfn+BcMqvl7jT3mms6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTpvp9cOZe1kAXJIcPOZe4095prOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnRyr2G9lY9Gg9NTIVeyqDXHaFwyeQxYspDyKm3JKE9AFNw+YVKCARG7Jyvt+fcowBZ3aDmxFIe801nTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dHSp0CXigjvY4Q9lnXv+Aef90OFvmrrYh3Ov94wa4tQ5e3AgC7AXkedOmbhm98BK0xnHij3FGVVEVIFeTyL3hDs37R0+0cqTxOO4riIUDloYy7uwCNnVlXSRs2EQBbcd4nBEm8lyTmsy9xp7zTWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dN+ds1agvmI9HnOMgdWJMCqZKx2DmQhTl38ggMxgyQocrQW8dIDHZ+42Tdm7nUJaFT8DrO9Z3TDu5F2W4WkUxJa1VVW3vQRdwsEa1RF6Fnq/nvaqKpY1E5lcFD2ms6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTo5l0MJAK2fSqDYwuzBGwhlioElLN4wSSf3VJjc5oxK3gke4mGwxbuDVuhswDnYrvM00P9XLJYqKRFu+lczBZN6dC8BqUKXpAGmFvKg+D/6fFCcvQ0VKCEZLN6azp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTqLlptm+WLPzydBqdrHKAASb/9PJmvu1+tp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTvObKr5e4095prOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTfTYGZAXUVXy9xp7zTWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOm+PlGA5kICSux7Sh7TWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dHcPleV3xDCmdlOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp033RTBfuiPm4l1+NyKvl7jT3mms6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dN8cg9LrZo2FSfqOcy9xp7zTWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOjmtpg7k122qggPZZBE95prOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06b70KaI4Dtq2uGEtPL3GnvNNZ06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp030Aq9HA5AsWutZo5EvqxqKr5e4095prOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06OgfyRLF5S6N7Wb8wr9QBAPeaazp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06b6AEGluT8t+PYAdoJwrlumn/zBQGCGaSnoIe801nTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06Ogf6HVCot1gbAaOifA9RHXufliQK1KVNPeaazp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06OQA6317A6Gt2T/ToamkVVcHtNZ06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dHDkbjOxeHnMvaxEOkY5Gs6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTfTjQfKU4uD2msc5LH8KqUxZQD3mms6dOnTp06dOnTp06dOnTp06dOnTp06dOnTpv1RpXgNTSvAamleA1NK8BqaV4DU0rwGppXgNTSvAamleA1NK8BqaV4DU0rwGppXgNTSvAamleA1NK8BqaV4DU0rwGppXgNTSvAamleA1NK8BqaV4DU0rwGoQK4PwnU7ao0rwGppXgNTSvAamKEiczSBPuohpXgNTSvAamleA1NK8BqaV4DU0rwGppXgNTSvAamleA1NK8BqaV4DU0rwGppXgNTSvAamleA1NK8BqaV4DU0rwGppXgNTSvAamleA1NK8BqaV4DU0rwHHUVXy9xp7zTWdOnTp06dOnTp06dOnTp06dOnTp06dN9BqdDtLwIcy9xp7pW34wUcEGEjWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOm+88bbcMdl5TDeMC1UYEPNCDYUA3tQiukEeLOMLUeyq+XuNPeaazp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTpvp2PDilpeUsEEOnZZ6VjGEE164EgdMb6XiU7l7jT3mms6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOjh8qd+2dBIuDkP02oaZeqZQ90h2lHXSDp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06b7ELX6SqYezje+Uee1nGRZSH+lPRF/R2F3ecy9xp7zTWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06b4wj6/zhh5xrC8U6XALBpK7H2E+EuqwZbCcoyFv/E6vygWhfB7TWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp0dA9w6rJtAHoPHYEFljQ9xEP6KLnQC0NiKESca9XDzmXuNPeaazp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dN/BEPSZgpQ4petY574iqMR/QWHAkPBpDLynGEDFs1D0I9Sh7TWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnRw5G4ztsPwxpU24olpw3v6eIVtt1Z033GuYxyPTwvOu6VEaIlhBJqSAZmMwG1nTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dHIAb4WmL9Ll62QV8bCHZQsfDzmXtZYJACCY/vMBU1fXYPUYFISjzmXuNPeaazp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dHDkbaFy1D0IF/+uNBPSoCpSvNNZ06dN+qJAmiEclKO5MxEqWd6oPeaazp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTo5coCohiZ0BP7vlRy9vXWEfOnTp06dOnTo5Lsh+fp6lkNbazdwAybBIvNNZ06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp033oH2BC902VXy9xp7zTWdN9cYT4zjjmms6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnUXLTKr5e4095prOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dN9YOX85l7jT3mms6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06b471q5Ofkvi9tEORhKdx1NwI5eqlh6omlgag3d2LcVlthBLZhqxkcbq51yxqCPciLbeXgIwwQTQSZV5WWZWET4qT2CUBDT+/WQFAcBKEuczjW6EfXEFj7ZQ9prOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06OcxAUnbNMT8n8u4e1zpxtdF0rJU8QWXvuyA1ZIdh2bZ71TZ3hVkoEv3GR1TEjmKVdpMra9h9Hus6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dN9rpuTkB/gB3wMDcCQS6qPDNywjSO+gdJODCyKJDxwfxfcVcC6l+0TfpRIWe2Cu8Iz4JPAbDo9XGxImdsMSOlHtMHdhIu42YBQgvnQNi/omBlAPeaazp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnT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");
+}
diff --git a/public/themes/manual-game-update-7cc79d.css b/public/themes/manual-game-update-7cc79d.css
new file mode 100644
index 0000000..2ec2622
--- /dev/null
+++ b/public/themes/manual-game-update-7cc79d.css
@@ -0,0 +1,38 @@
+/* @todo-theme-meta
+{
+ "name": "Arctic Frost",
+ "id": "external-1778671418937",
+ "group": "External",
+ "preview": [
+ "#083344",
+ "#164e63",
+ "#06b6d4"
+ ],
+ "hasWallpaper": true
+}
+*/
+
+:root {
+ --bg: #083344;
+ --surface: #164e63;
+ --surface-strong: #042f2e;
+ --surface-muted: #155e75;
+ --border: #155e75;
+ --line: #0e7490;
+ --text: #f0fdfa;
+ --text-muted: #67e8f9;
+ --text-strong: #ffffff;
+ --accent: #06b6d4;
+ --accent-text: #ffffff;
+ --accent-soft: #164e63;
+ --sidebar-bg: #164e63;
+ --sidebar-border: #155e75;
+ --sidebar-text: #f0fdfa;
+ --sidebar-text-muted: #67e8f9;
+ --input-bg: #155e75;
+ --input-border: #0e7490;
+ --modal-bg: #164e63;
+ --chip: #155e75;
+ --success: #059669;
+ --wallpaper: url("data:image/png;base64,UklGRm5DAABXRUJQVlA4IGJDAABwsQOdASoACqAFPlEmkUcjoaIhIFEIMHAKCWlu8p8eP+GPQ/R4pugdfs/9z/tPg6/XP75/d/2d/t3qn5IfEvsz/av/H9v16/se1Kfj/2G/C/27/E/7j8ofyH/U/7f8VfM/1jeoF+L/yr/Kf279ofyZ/CPtx2q+zf7v0BfY/6x/oP8T+6X+f+aH5f/e+gf2L/03uAfyf+vf7D19/2H/c8aD73/rvYB/mH9p/6f+P/MP5DP8H/Kf6b9rvan+lf4r/uf5f8mvsH/lP9T/4f969sD/z+6D9xvZJ/YT/sfn+BcMqvl7jT3mms6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTpvp9cOZe1kAXJIcPOZe4095prOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnRyr2G9lY9Gg9NTIVeyqDXHaFwyeQxYspDyKm3JKE9AFNw+YVKCARG7Jyvt+fcowBZ3aDmxFIe801nTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dHSp0CXigjvY4Q9lnXv+Aef90OFvmrrYh3Ov94wa4tQ5e3AgC7AXkedOmbhm98BK0xnHij3FGVVEVIFeTyL3hDs37R0+0cqTxOO4riIUDloYy7uwCNnVlXSRs2EQBbcd4nBEm8lyTmsy9xp7zTWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dN+ds1agvmI9HnOMgdWJMCqZKx2DmQhTl38ggMxgyQocrQW8dIDHZ+42Tdm7nUJaFT8DrO9Z3TDu5F2W4WkUxJa1VVW3vQRdwsEa1RF6Fnq/nvaqKpY1E5lcFD2ms6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTo5l0MJAK2fSqDYwuzBGwhlioElLN4wSSf3VJjc5oxK3gke4mGwxbuDVuhswDnYrvM00P9XLJYqKRFu+lczBZN6dC8BqUKXpAGmFvKg+D/6fFCcvQ0VKCEZLN6azp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTqLlptm+WLPzydBqdrHKAASb/9PJmvu1+tp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTvObKr5e4095prOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTfTYGZAXUVXy9xp7zTWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOm+PlGA5kICSux7Sh7TWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dHcPleV3xDCmdlOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp033RTBfuiPm4l1+NyKvl7jT3mms6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dN8cg9LrZo2FSfqOcy9xp7zTWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOjmtpg7k122qggPZZBE95prOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06b70KaI4Dtq2uGEtPL3GnvNNZ06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp030Aq9HA5AsWutZo5EvqxqKr5e4095prOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06OgfyRLF5S6N7Wb8wr9QBAPeaazp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06b6AEGluT8t+PYAdoJwrlumn/zBQGCGaSnoIe801nTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06Ogf6HVCot1gbAaOifA9RHXufliQK1KVNPeaazp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06OQA6317A6Gt2T/ToamkVVcHtNZ06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dHDkbjOxeHnMvaxEOkY5Gs6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTfTjQfKU4uD2msc5LH8KqUxZQD3mms6dOnTp06dOnTp06dOnTp06dOnTp06dOnTpv1RpXgNTSvAamleA1NK8BqaV4DU0rwGppXgNTSvAamleA1NK8BqaV4DU0rwGppXgNTSvAamleA1NK8BqaV4DU0rwGppXgNTSvAamleA1NK8BqaV4DU0rwGoQK4PwnU7ao0rwGppXgNTSvAamKEiczSBPuohpXgNTSvAamleA1NK8BqaV4DU0rwGppXgNTSvAamleA1NK8BqaV4DU0rwGppXgNTSvAamleA1NK8BqaV4DU0rwGppXgNTSvAamleA1NK8BqaV4DU0rwHHUVXy9xp7zTWdOnTp06dOnTp06dOnTp06dOnTp06dN9BqdDtLwIcy9xp7pW34wUcEGEjWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOm+88bbcMdl5TDeMC1UYEPNCDYUA3tQiukEeLOMLUeyq+XuNPeaazp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTpvp2PDilpeUsEEOnZZ6VjGEE164EgdMb6XiU7l7jT3mms6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOjh8qd+2dBIuDkP02oaZeqZQ90h2lHXSDp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06b7ELX6SqYezje+Uee1nGRZSH+lPRF/R2F3ecy9xp7zTWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06b4wj6/zhh5xrC8U6XALBpK7H2E+EuqwZbCcoyFv/E6vygWhfB7TWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp0dA9w6rJtAHoPHYEFljQ9xEP6KLnQC0NiKESca9XDzmXuNPeaazp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dN/BEPSZgpQ4petY574iqMR/QWHAkPBpDLynGEDFs1D0I9Sh7TWdOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnRw5G4ztsPwxpU24olpw3v6eIVtt1Z033GuYxyPTwvOu6VEaIlhBJqSAZmMwG1nTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dHIAb4WmL9Ll62QV8bCHZQsfDzmXtZYJACCY/vMBU1fXYPUYFISjzmXuNPeaazp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dHDkbaFy1D0IF/+uNBPSoCpSvNNZ06dN+qJAmiEclKO5MxEqWd6oPeaazp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTo5coCohiZ0BP7vlRy9vXWEfOnTp06dOnTo5Lsh+fp6lkNbazdwAybBIvNNZ06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp033oH2BC902VXy9xp7zTWdN9cYT4zjjmms6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnUXLTKr5e4095prOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dN9YOX85l7jT3mms6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06b471q5Ofkvi9tEORhKdx1NwI5eqlh6omlgag3d2LcVlthBLZhqxkcbq51yxqCPciLbeXgIwwQTQSZV5WWZWET4qT2CUBDT+/WQFAcBKEuczjW6EfXEFj7ZQ9prOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06OcxAUnbNMT8n8u4e1zpxtdF0rJU8QWXvuyA1ZIdh2bZ71TZ3hVkoEv3GR1TEjmKVdpMra9h9Hus6dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dN9rpuTkB/gB3wMDcCQS6qPDNywjSO+gdJODCyKJDxwfxfcVcC6l+0TfpRIWe2Cu8Iz4JPAbDo9XGxImdsMSOlHtMHdhIu42YBQgvnQNi/omBlAPeaazp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnTp06dOnT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");
+}
diff --git a/public/themes/midnight-void.css b/public/themes/midnight-void.css
new file mode 100644
index 0000000..c334f3f
--- /dev/null
+++ b/public/themes/midnight-void.css
@@ -0,0 +1,16 @@
+/* Midnight Void Theme — ThemeForge v2.0.1 */
+:root {
+ --color-primary: #7C3AED;
+ --color-secondary: #A78BFA;
+ --color-background: #0D0D1A;
+ --color-surface: #1A1A2E;
+ --color-text: #E2E8F0;
+ --color-accent: #F472B6;
+}
+
+body { background-color: var(--color-background); color: var(--color-text); font-family: system-ui, sans-serif; }
+a, .link { color: var(--color-secondary); }
+.btn-primary { background: var(--color-primary); color: #fff; border: none; border-radius: 6px; padding: 8px 18px; cursor: pointer; }
+.btn-primary:hover { background: var(--color-accent); }
+.card { background: var(--color-surface); border-radius: 10px; box-shadow: 0 2px 16px rgba(124,58,237,0.25); padding: 20px; }
+.tag { background: var(--color-accent); color: #0D0D1A; border-radius: 4px; padding: 2px 8px; font-size: 0.75rem; }
diff --git a/public/themes/obsidian-rose.css b/public/themes/obsidian-rose.css
new file mode 100644
index 0000000..7bf09da
--- /dev/null
+++ b/public/themes/obsidian-rose.css
@@ -0,0 +1,16 @@
+/* Obsidian Rose Theme — ChromaCraft v1.3.0 */
+:root {
+ --color-primary: #C9184A;
+ --color-secondary: #FF4D6D;
+ --color-background: #0A0A0F;
+ --color-surface: #1C1C28;
+ --color-text: #F1E3E4;
+ --color-accent: #B5838D;
+}
+
+body { background-color: var(--color-background); color: var(--color-text); font-family: system-ui, sans-serif; }
+a, .link { color: var(--color-secondary); }
+.btn-primary { background: var(--color-primary); color: #fff; border: none; border-radius: 6px; padding: 8px 18px; cursor: pointer; }
+.btn-primary:hover { background: var(--color-secondary); }
+.card { background: var(--color-surface); border-radius: 10px; box-shadow: 0 2px 16px rgba(201,24,74,0.2); padding: 20px; }
+.tag { background: var(--color-accent); color: #0A0A0F; border-radius: 4px; padding: 2px 8px; font-size: 0.75rem; }
diff --git a/public/themes/ocean-breeze.css b/public/themes/ocean-breeze.css
new file mode 100644
index 0000000..c79a9da
--- /dev/null
+++ b/public/themes/ocean-breeze.css
@@ -0,0 +1,16 @@
+/* Ocean Breeze Theme — ThemeForge v1.2.0 */
+:root {
+ --color-primary: #0077B6;
+ --color-secondary: #00B4D8;
+ --color-background: #E0F4FF;
+ --color-surface: #FFFFFF;
+ --color-text: #1A2B3C;
+ --color-accent: #48CAE4;
+}
+
+body { background-color: var(--color-background); color: var(--color-text); font-family: system-ui, sans-serif; }
+a, .link { color: var(--color-primary); }
+.btn-primary { background: var(--color-primary); color: #fff; border: none; border-radius: 6px; padding: 8px 18px; cursor: pointer; }
+.btn-primary:hover { background: var(--color-secondary); }
+.card { background: var(--color-surface); border-radius: 10px; box-shadow: 0 2px 8px rgba(0,119,182,0.1); padding: 20px; }
+.tag { background: var(--color-accent); color: var(--color-text); border-radius: 4px; padding: 2px 8px; font-size: 0.75rem; }
diff --git a/public/themes/red-extract-theme-a3aabe.css b/public/themes/red-extract-theme-a3aabe.css
new file mode 100644
index 0000000..39e57e2
--- /dev/null
+++ b/public/themes/red-extract-theme-a3aabe.css
@@ -0,0 +1,37 @@
+/* @todo-theme-meta
+{
+ "name": "Red Extract Theme",
+ "id": "custom-1778677606575",
+ "group": "Custom",
+ "preview": [
+ "#f5f5f5",
+ "#ffffff",
+ "#274f69"
+ ],
+ "hasWallpaper": false
+}
+*/
+
+:root {
+ --bg: #f5f5f5;
+ --surface: #ffffff;
+ --surface-strong: #ffffff;
+ --surface-muted: #fafafa;
+ --border: #d0d0d0;
+ --line: #b9b9b5;
+ --text: #1f1f1f;
+ --text-muted: #686866;
+ --text-strong: #111111;
+ --accent: #274f69;
+ --accent-text: #ffffff;
+ --accent-soft: #d6e4ec;
+ --sidebar-bg: #ffffff;
+ --sidebar-border: #d0d0d0;
+ --sidebar-text: #222222;
+ --sidebar-text-muted: #686866;
+ --input-bg: #ffffff;
+ --input-border: #cfcfcf;
+ --modal-bg: #ffffff;
+ --chip: #d8d8d8;
+ --success: #dff7e7;
+}
diff --git a/public/themes/sunset-ember.css b/public/themes/sunset-ember.css
new file mode 100644
index 0000000..3a9791e
--- /dev/null
+++ b/public/themes/sunset-ember.css
@@ -0,0 +1,16 @@
+/* Sunset Ember Theme — ChromaCraft v1.1.2 */
+:root {
+ --color-primary: #D62828;
+ --color-secondary: #F77F00;
+ --color-background: #FFF5E4;
+ --color-surface: #FFFFFF;
+ --color-text: #2D1B00;
+ --color-accent: #FCBF49;
+}
+
+body { background-color: var(--color-background); color: var(--color-text); font-family: system-ui, sans-serif; }
+a, .link { color: var(--color-primary); }
+.btn-primary { background: var(--color-secondary); color: #fff; border: none; border-radius: 6px; padding: 8px 18px; cursor: pointer; }
+.btn-primary:hover { background: var(--color-primary); }
+.card { background: var(--color-surface); border-radius: 10px; box-shadow: 0 2px 8px rgba(214,40,40,0.1); padding: 20px; }
+.tag { background: var(--color-accent); color: var(--color-text); border-radius: 4px; padding: 2px 8px; font-size: 0.75rem; }
diff --git a/public/themes/test-theme-103fb1.css b/public/themes/test-theme-103fb1.css
new file mode 100644
index 0000000..6cf3195
--- /dev/null
+++ b/public/themes/test-theme-103fb1.css
@@ -0,0 +1,37 @@
+/* @todo-theme-meta
+{
+ "name": "Test Theme",
+ "id": "custom-1778671955013",
+ "group": "Custom",
+ "preview": [
+ "#f5f5f5",
+ "#ffffff",
+ "#274f69"
+ ],
+ "hasWallpaper": false
+}
+*/
+
+:root {
+ --bg: #f5f5f5;
+ --surface: #ffffff;
+ --surface-strong: #ffffff;
+ --surface-muted: #fafafa;
+ --border: #d0d0d0;
+ --line: #b9b9b5;
+ --text: #1f1f1f;
+ --text-muted: #686866;
+ --text-strong: #111111;
+ --accent: #274f69;
+ --accent-text: #ffffff;
+ --accent-soft: #d6e4ec;
+ --sidebar-bg: #ffffff;
+ --sidebar-border: #d0d0d0;
+ --sidebar-text: #222222;
+ --sidebar-text-muted: #686866;
+ --input-bg: #ffffff;
+ --input-border: #cfcfcf;
+ --modal-bg: #ffffff;
+ --chip: #d8d8d8;
+ --success: #dff7e7;
+}
diff --git a/public/themes/test-theme-6fcabb.css b/public/themes/test-theme-6fcabb.css
new file mode 100644
index 0000000..6cf3195
--- /dev/null
+++ b/public/themes/test-theme-6fcabb.css
@@ -0,0 +1,37 @@
+/* @todo-theme-meta
+{
+ "name": "Test Theme",
+ "id": "custom-1778671955013",
+ "group": "Custom",
+ "preview": [
+ "#f5f5f5",
+ "#ffffff",
+ "#274f69"
+ ],
+ "hasWallpaper": false
+}
+*/
+
+:root {
+ --bg: #f5f5f5;
+ --surface: #ffffff;
+ --surface-strong: #ffffff;
+ --surface-muted: #fafafa;
+ --border: #d0d0d0;
+ --line: #b9b9b5;
+ --text: #1f1f1f;
+ --text-muted: #686866;
+ --text-strong: #111111;
+ --accent: #274f69;
+ --accent-text: #ffffff;
+ --accent-soft: #d6e4ec;
+ --sidebar-bg: #ffffff;
+ --sidebar-border: #d0d0d0;
+ --sidebar-text: #222222;
+ --sidebar-text-muted: #686866;
+ --input-bg: #ffffff;
+ --input-border: #cfcfcf;
+ --modal-bg: #ffffff;
+ --chip: #d8d8d8;
+ --success: #dff7e7;
+}
diff --git a/public/themes/themestore-theme-by-came-0da6fd.css b/public/themes/themestore-theme-by-came-0da6fd.css
new file mode 100644
index 0000000..02f8cbe
--- /dev/null
+++ b/public/themes/themestore-theme-by-came-0da6fd.css
@@ -0,0 +1,37 @@
+/* @todo-theme-meta
+{
+ "name": "THemestore theme by Came",
+ "id": "custom-1778674717129",
+ "group": "Custom",
+ "preview": [
+ "#17acde",
+ "#222020",
+ "#00bbff"
+ ],
+ "hasWallpaper": false
+}
+*/
+
+:root {
+ --bg: #17acde;
+ --surface: #222020;
+ --surface-strong: #2bc582;
+ --surface-muted: #38363a;
+ --border: #000000;
+ --line: #ffffff;
+ --text: #d12e57;
+ --text-muted: #2f84c1;
+ --text-strong: #ff0000;
+ --accent: #00bbff;
+ --accent-text: #570000;
+ --accent-soft: #005f85;
+ --sidebar-bg: #004370;
+ --sidebar-border: #2a5070;
+ --sidebar-text: #d8f0ff;
+ --sidebar-text-muted: #7ab0d0;
+ --input-bg: #ffffff;
+ --input-border: #a0cce0;
+ --modal-bg: #ffffff;
+ --chip: #b0d8ec;
+ --success: #d0f0e0;
+}
diff --git a/public/todo-preview b/public/todo-preview
new file mode 120000
index 0000000..ad46dac
--- /dev/null
+++ b/public/todo-preview
@@ -0,0 +1 @@
+/home/came/Nextcloud/arch-work/Projects/Todo-App/dist
\ No newline at end of file
diff --git a/writable/.htaccess b/writable/.htaccess
old mode 100644
new mode 100755
diff --git a/writable/cache/index.html b/writable/cache/index.html
old mode 100644
new mode 100755
diff --git a/writable/debugbar/index.html b/writable/debugbar/index.html
old mode 100644
new mode 100755
diff --git a/writable/index.html b/writable/index.html
old mode 100644
new mode 100755
diff --git a/writable/logs/index.html b/writable/logs/index.html
old mode 100644
new mode 100755
diff --git a/writable/session/index.html b/writable/session/index.html
old mode 100644
new mode 100755
diff --git a/writable/uploads/index.html b/writable/uploads/index.html
old mode 100644
new mode 100755