diff --git a/admin.html b/admin.html
index f6a02b0..7cea3b6 100644
--- a/admin.html
+++ b/admin.html
@@ -159,6 +159,19 @@
.cat-info { flex: 1; font-family: Arial, sans-serif; font-size: 0.88rem; color: #3b2a1a; }
.cat-info span { color: #7a5c3e; font-size: 0.78rem; }
+ /* Subcategory tags */
+ .subcat-row { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; padding-left: 38px; }
+ .subcat-tag {
+ display: inline-flex; align-items: center; gap: 4px;
+ background: #f5ece0; color: #7c4a1e; padding: 3px 10px; border-radius: 12px;
+ font-family: Arial, sans-serif; font-size: 0.78rem; font-weight: bold;
+ }
+ .subcat-remove {
+ background: none; border: none; color: #c0856a; cursor: pointer;
+ font-size: 0.7rem; padding: 0 2px; line-height: 1;
+ }
+ .subcat-remove:hover { color: #c04040; }
+
/* User list */
.user-table { width: 100%; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 0.88rem; }
.user-table th { text-align: left; color: #7a5c3e; font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.5px; padding: 6px 10px; border-bottom: 2px solid #e8d5c0; }
@@ -575,19 +588,54 @@
const cats = ADMIN.categories;
const el = document.getElementById('catList');
if (!cats.length) { el.innerHTML = `
${at('cat_empty')}
`; return; }
- el.innerHTML = cats.map(c => `
-
-
${c.emoji || '📁'}
-
- ${c.fi} / ${c.en}
- · id: ${c.id}
-
-
-
- `).join('');
+ el.innerHTML = cats.map(c => {
+ const subs = (c.subcategories || []).map(s =>
+ `${s.fi} `
+ ).join('');
+ return `
+
+
${c.emoji || '📁'}
+
+ ${c.fi} / ${c.en}
+ · id: ${c.id}
+
+
+
+ ${subs || '
Ei alikategorioita'}
+
+
+
+
+
+
`;
+ }).join('');
populateCategorySelect();
}
+ async function addSubcat(catId) {
+ const input = document.getElementById('newSub_' + catId);
+ const name = input.value.trim();
+ if (!name) return;
+ const cat = ADMIN.categories.find(c => c.id === catId);
+ if (!cat) return;
+ if (!cat.subcategories) cat.subcategories = [];
+ const id = name.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g,'').replace(/\s+/g,'_').replace(/[^a-z0-9_]/g,'');
+ if (cat.subcategories.some(s => s.id === id)) { showToast('⚠️ Alikategoria on jo olemassa.'); return; }
+ cat.subcategories.push({ id, fi: name });
+ await apiPost('save_categories', { categories: ADMIN.categories });
+ renderCatList();
+ showToast('✅ Alikategoria lisätty!');
+ }
+
+ async function removeSubcat(catId, subId) {
+ const cat = ADMIN.categories.find(c => c.id === catId);
+ if (!cat) return;
+ cat.subcategories = (cat.subcategories || []).filter(s => s.id !== subId);
+ await apiPost('save_categories', { categories: ADMIN.categories });
+ renderCatList();
+ showToast('🗑️ Alikategoria poistettu.');
+ }
+
async function addCategory() {
const fi = document.getElementById('newCatFi').value.trim();
const en = document.getElementById('newCatEn').value.trim();
diff --git a/api.php b/api.php
index 0795a86..a4dbaa6 100644
--- a/api.php
+++ b/api.php
@@ -104,6 +104,8 @@ function defaultCategories(): array {
'subcategories' => [
['id' => 'kasvis', 'fi' => 'Kasvis'],
['id' => 'vegaaniset', 'fi' => 'Vegaaniset'],
+ ['id' => 'kala', 'fi' => 'Kala'],
+ ['id' => 'liha', 'fi' => 'Liha'],
['id' => 'jalkiruuat', 'fi' => 'Jälkiruuat'],
['id' => 'muut', 'fi' => 'Muut'],
]],